Source code for ekore.harmonics.w4

"""Weight 4 harmonic sums."""

import numba as nb

from eko.constants import li4half, log2, zeta2, zeta3, zeta4

from . import g_functions as gf
from .polygamma import cern_polygamma, symmetry_factor


[docs] @nb.njit(cache=True) def S4(N): r"""Compute the harmonic sum :math:`S_4(N)`. .. math:: S_4(N) = \sum\limits_{j=1}^N \frac 1 {j^4} = - \frac 1 6 \psi_3(N+1)+\zeta(4) with :math:`\psi_3(N)` the 3rd-polygamma function and :math:`\zeta` the Riemann zeta function. Parameters ---------- N : complex Mellin moment Returns ------- S_4 : complex Harmonic sum :math:`S_4(N)` See Also -------- ekore.harmonics.polygamma.cern_polygamma : :math:`\psi_k(N)` """ return zeta4 - 1.0 / 6.0 * cern_polygamma(N + 1.0, 3)
[docs] @nb.njit(cache=True) def Sm4(N, hS4, hS4mh, hS4h, is_singlet=None): r"""Analytic continuation of harmonic sum :math:`S_{-4}(N)`. .. math:: S_{-4}(N) = \sum\limits_{j=1}^N \frac {(-1)^j} {j^4} Parameters ---------- N : complex Mellin moment hS4: complex Harmonic sum :math:`S_{4}(N)` hS4mh: complex Harmonic sum :math:`S_{4}((N-1)/2)` hS4h: complex Harmonic sum :math:`S_{4}(N/2)` is_singlet: bool, None symmetry factor: True for singlet like quantities (:math:`\eta=(-1)^N = 1`), False for non-singlet like quantities (:math:`\eta=(-1)^N=-1`) Returns ------- Sm4 : complex Harmonic sum :math:`S_{-4}(N)` See Also -------- eko.anomalous_dimension.w4.S4 : :math:`S_4(N)` """ if is_singlet is None: return ( 1 / 2**3 * ((1 - (-1) ** N) / 2 * hS4mh + ((-1) ** N + 1) / 2 * hS4h) - hS4 ) if is_singlet: return 1 / 2**3 * hS4h - hS4 return 1 / 2**3 * hS4mh - hS4
[docs] @nb.njit(cache=True) def Sm31(N, S1, Sm1, Sm2, is_singlet=None): r"""Analytic continuation of harmonic sum :math:`S_{-3,1}(N)`. As implemented in :eqref:`B.5.93` of :cite:`MuselliPhD` and :eqref:`25` of cite:`Bl_mlein_2000`. Parameters ---------- N : complex Mellin moment S1: complex Harmonic sum :math:`S_{1}(N)` Sm1: complex Harmonic sum :math:`S_{-1}(N)` Sm2: complex Harmonic sum :math:`S_{-2}(N)` is_singlet: bool, None symmetry factor: True for singlet like quantities (:math:`\eta=(-1)^N = 1`), False for non-singlet like quantities (:math:`\eta=(-1)^N=-1`) Returns ------- Sm31 : complex Harmonic sum :math:`S_{-3,1}(N)` See Also -------- ekore.harmonics.g_functions.mellin_g6 : :math:`g_6(N)` """ eta = symmetry_factor(N, is_singlet) return ( eta * gf.mellin_g6(N, S1) + zeta2 * Sm2 - zeta3 * Sm1 - 3 / 5 * zeta2**2 + 2 * li4half + 3 / 4 * zeta3 * log2 - 1 / 2 * zeta2 * log2**2 + 1 / 12 * log2**4 )
[docs] @nb.njit(cache=True) def Sm22(N, S1, S2, Sm2, Sm31, is_singlet=None): r"""Analytic continuation of harmonic sum :math:`S_{-2,2}(N)`. As implemented in :eqref:`B.5.94` of :cite:`MuselliPhD` and :eqref:`24` of cite:`Bl_mlein_2000`. Parameters ---------- N : complex Mellin moment S1: complex Harmonic sum :math:`S_{1}(N)` S2: complex Harmonic sum :math:`S_{2}(N)` Sm2: complex Harmonic sum :math:`S_{-2}(N)` Sm31: complex Harmonic sum :math:`S_{-3,1}(N)` is_singlet: bool, None symmetry factor: True for singlet like quantities (:math:`\eta=(-1)^N = 1`), False for non-singlet like quantities (:math:`\eta=(-1)^N=-1`) Returns ------- Sm22 : complex Harmonic sum :math:`S_{-2,2}(N)` See Also -------- ekore.harmonics.g_functions.mellin_g5 : :math:`g_5(N)` """ eta = symmetry_factor(N, is_singlet) return ( eta * gf.mellin_g5(N, S1, S2) - 2 * Sm31 + 2 * zeta2 * Sm2 + 3 / 40 * zeta2**2 )
[docs] @nb.njit(cache=True) def Sm211(N, S1, S2, Sm1, is_singlet=None): r"""Analytic continuation of harmonic sum :math:`S_{-2,1,1}(N)`. As implemented in :eqref:`B.5.104` of :cite:`MuselliPhD` and :eqref:`27` of cite:`Bl_mlein_2000`. Parameters ---------- N : complex Mellin moment S1: complex Harmonic sum :math:`S_{1}(N)` S2: complex Harmonic sum :math:`S_{2}(N)` Sm1: complex Harmonic sum :math:`S_{-1}(N)` is_singlet: bool, None symmetry factor: True for singlet like quantities (:math:`\eta=(-1)^N = 1`), False for non-singlet like quantities (:math:`\eta=(-1)^N=-1`) Returns ------- Sm221 : complex Harmonic sum :math:`S_{-2,1,1}(N)` See Also -------- ekore.harmonics.g_functions.mellin_g8 : :math:`g_8(N)` """ eta = symmetry_factor(N, is_singlet) return ( -eta * gf.mellin_g8(N, S1, S2) + zeta3 * Sm1 - li4half + 1 / 8 * zeta2**2 + 1 / 8 * zeta3 * log2 + 1 / 4 * zeta2 * log2**2 - 1 / 24 * log2**4 )
[docs] @nb.njit(cache=True) def S211(N, S1, S2, S3): r"""Analytic continuation of harmonic sum :math:`S_{2,1,1}(N)`. As implemented in :eqref:`B.5.115` of :cite:`MuselliPhD` and :eqref:`40` of cite:`Bl_mlein_2000`. Parameters ---------- N : complex Mellin moment S1: complex Harmonic sum :math:`S_{1}(N)` S2: complex Harmonic sum :math:`S_{2}(N)` S3: complex Harmonic sum :math:`S_{3}(N)` Returns ------- S211 : complex Harmonic sum :math:`S_{2,1,1}(N)` See Also -------- ekore.harmonics.g_functions.mellin_g21 : :math:`g_21(N)` """ return -gf.mellin_g21(N, S1, S2, S3) + 6 / 5 * zeta2**2
[docs] @nb.njit(cache=True) def S31(N, S1, S2, S3, S4): r"""Analytic continuation of harmonic sum :math:`S_{3,1}(N)`. As implemented in :eqref:`B.5.99` of :cite:`MuselliPhD` and :eqref:`41` of cite:`Bl_mlein_2000`. Parameters ---------- N : complex Mellin moment S1: complex Harmonic sum :math:`S_{1}(N)` S2: complex Harmonic sum :math:`S_{2}(N)` S3: complex Harmonic sum :math:`S_{3}(N)` S4: complex Harmonic sum :math:`S_{4}(N)` Returns ------- S31 : complex Harmonic sum :math:`S_{3,1}(N)` See Also -------- ekore.harmonics.g_functions.mellin_g22 : :math:`g_22(N)` """ return ( 1 / 2 * gf.mellin_g22(N, S1, S2, S3) - 1 / 4 * S4 - 1 / 4 * S2**2 + zeta2 * S2 - 3 / 20 * zeta2**2 )