Source code for ekore.harmonics.w3

"""Weight 3 harmonic sums."""

import numba as nb

from eko.constants import log2, zeta2, zeta3

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


[docs] @nb.njit(cache=True) def S3(N): r"""Compute the harmonic sum :math:`S_3(N)`. .. math:: S_3(N) = \sum\limits_{j=1}^N \frac 1 {j^3} = \frac 1 2 \psi_2(N+1)+\zeta(3) with :math:`\psi_2(N)` the 2nd-polygamma function and :math:`\zeta` the Riemann zeta function. Parameters ---------- N : complex Mellin moment Returns ------- S_3 : complex Harmonic sum :math:`S_3(N)` See Also -------- ekore.harmonics.polygamma.cern_polygamma : :math:`\psi_k(N)` """ return 0.5 * cern_polygamma(N + 1.0, 2) + zeta3
[docs] @nb.njit(cache=True) def Sm3(N, hS3, hS3mh, hS3h, is_singlet=None): r"""Analytic continuation of harmonic sum :math:`S_{-3}(N)`. .. math:: S_{-3}(N) = \sum\limits_{j=1}^N \frac {(-1)^j} {j^3} Parameters ---------- N : complex Mellin moment hS3: complex Harmonic sum :math:`S_{3}(N)` hS3mh: complex Harmonic sum :math:`S_{3}((N-1)/2)` hS3h: complex Harmonic sum :math:`S_{3}(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 ------- Sm3 : complex Harmonic sum :math:`S_{-3}(N)` See Also -------- ekore.harmonics.w3.S3 : :math:`S_3(N)` """ if is_singlet is None: return ( 1 / 2**2 * ((1 - (-1) ** N) / 2 * hS3mh + ((-1) ** N + 1) / 2 * hS3h) - hS3 ) if is_singlet: return 1 / 2**2 * hS3h - hS3 return 1 / 2**2 * hS3mh - hS3
[docs] @nb.njit(cache=True) def S21(N, S1, S2): r"""Analytic continuation of harmonic sum :math:`S_{2,1}(N)`. As implemented in :eqref:`B.5.77` of :cite:`MuselliPhD` and :eqref:`37` 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)` Returns ------- S21 : complex Harmonic sum :math:`S_{2,1}(N)` """ return -gf.mellin_g18(N, S1, S2) + 2 * zeta3
[docs] @nb.njit(cache=True) def Sm21(N, S1, Sm1, is_singlet=None): r"""Analytic continuation of harmonic sum :math:`S_{-2,1}(N)`. As implemented in :eqref:`B.5.75` of :cite:`MuselliPhD` and :eqref:`22` 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)` 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 ------- Sm21 : complex Harmonic sum :math:`S_{-2,1}(N)` """ # Note mellin g3 was integrated following x^(N-1) convention. eta = symmetry_factor(N, is_singlet) return ( -eta * gf.mellin_g3(N + 1, S1 + 1 / (N + 1)) + zeta2 * Sm1 - 5 / 8 * zeta3 + zeta2 * log2 )
[docs] @nb.njit(cache=True) def S2m1(N, S2, Sm1, Sm2, is_singlet=None): r"""Analytic continuation of harmonic sum :math:`S_{2,-1}(N)`. As implemented in :eqref:`B.5.76` of :cite:`MuselliPhD` and :eqref:`23` of :cite:`Bl_mlein_2000`. Parameters ---------- N : complex Mellin moment S2: complex Harmonic sum :math:`S_{2}(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 ------- S2m1 : complex Harmonic sum :math:`S_{2,-1}(N)` """ eta = symmetry_factor(N, is_singlet) return ( -eta * gf.mellin_g4(N) - log2 * (S2 - Sm2) - 1 / 2 * zeta2 * Sm1 + 1 / 4 * zeta3 - 1 / 2 * zeta2 * log2 )
[docs] @nb.njit(cache=True) def Sm2m1(N, S1, S2, Sm2): r"""Analytic continuation of harmonic sum :math:`S_{-2,-1}(N)`. As implemented in :eqref:`B.5.74` of :cite:`MuselliPhD` and :eqref:`38` 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)` Returns ------- Sm2m1 : complex Harmonic sum :math:`S_{-2,-1}(N)` """ return -gf.mellin_g19(N, S1) + log2 * (S2 - Sm2) - 5 / 8 * zeta3