diff --git a/.envrc b/.envrc new file mode 100644 index 000000000..b351dff3d --- /dev/null +++ b/.envrc @@ -0,0 +1,11 @@ +if ! has nix_direnv_version || ! nix_direnv_version 2.2.1; then + source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/2.2.1/direnvrc" "sha256-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs=" +fi + +nix_direnv_watch_file devenv.nix +nix_direnv_watch_file devenv.lock +nix_direnv_watch_file devenv.yaml +if ! use flake . --impure +then + echo "devenv could not be built. The devenv environment was not loaded. Make the necessary changes to devenv.nix and hit enter to try again." >&2 +fi diff --git a/.gitignore b/.gitignore index 7d72b8be6..1f9ee06ee 100644 --- a/.gitignore +++ b/.gitignore @@ -160,3 +160,4 @@ validation-report.json # Folders to ignore node_modules +.devenv diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 204ced1ed..3855a31f4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,7 +5,7 @@ ci: skip: [fmt-eko, fmt-ekore] repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 + rev: v4.5.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer @@ -14,16 +14,16 @@ repos: - id: check-merge-conflict - id: debug-statements - repo: https://github.com/hadialqattan/pycln - rev: v2.2.2 + rev: v2.4.0 hooks: - id: pycln args: [--config=pyproject.toml] - repo: https://github.com/psf/black - rev: 23.7.0 + rev: 23.11.0 hooks: - id: black - repo: https://github.com/asottile/blacken-docs - rev: 1.15.0 + rev: 1.16.0 hooks: - id: blacken-docs - repo: https://github.com/pycqa/isort @@ -32,7 +32,7 @@ repos: - id: isort args: ["--profile", "black"] - repo: https://github.com/asottile/pyupgrade - rev: v3.10.1 + rev: v3.15.0 hooks: - id: pyupgrade - repo: https://github.com/pycqa/pydocstyle @@ -62,6 +62,6 @@ repos: files: ^crates/ekore/.*\.rs$ args: [] - repo: https://github.com/pre-commit/pre-commit - rev: v3.3.3 + rev: v3.5.0 hooks: - id: validate_manifest diff --git a/benchmarks/eko/benchmark_inverse_matching.py b/benchmarks/eko/benchmark_inverse_matching.py new file mode 100644 index 000000000..7ca3b1a6a --- /dev/null +++ b/benchmarks/eko/benchmark_inverse_matching.py @@ -0,0 +1,107 @@ +import pathlib + +import numpy as np +import pytest +from banana import toy + +from eko import EKO +from eko.io import runcards +from eko.io.types import ReferenceRunning +from eko.runner.managed import solve +from ekobox import apply + +here = pathlib.Path(__file__).parent.absolute() +MC = 1.51 +C_PID = 4 + +# theory settings +th_raw = dict( + order=[3, 0], + couplings=dict( + alphas=0.118, + alphaem=0.007496252, + scale=91.2, + num_flavs_ref=5, + max_num_flavs=6, + ), + heavy=dict( + num_flavs_init=4, + num_flavs_max_pdf=6, + intrinsic_flavors=[], + masses=[ReferenceRunning([mq, np.nan]) for mq in (MC, 4.92, 172.5)], + masses_scheme="POLE", + matching_ratios=[1.0, 1.0, np.inf], + ), + xif=1.0, + n3lo_ad_variation=(0, 0, 0, 0, 0, 0, 0), + matching_order=[2, 0], +) + +# operator settings +op_raw = dict( + mu0=1.65, + xgrid=[0.0001, 0.001, 0.01, 0.1, 1], + mugrid=[(MC, 3), (MC, 4)], + configs=dict( + evolution_method="truncated", + ev_op_max_order=[1, 0], + ev_op_iterations=1, + interpolation_polynomial_degree=4, + interpolation_is_log=True, + scvar_method="exponentiated", + inversion_method="exact", + n_integration_cores=0, + polarized=False, + time_like=False, + ), + debug=dict( + skip_singlet=False, + skip_non_singlet=False, + ), +) + + +@pytest.mark.isolated +def benchmark_inverse_matching(): + th_card = runcards.TheoryCard.from_dict(th_raw) + op_card = runcards.OperatorCard.from_dict(op_raw) + + eko_path2 = here / "test2.tar" + eko_path2.unlink(missing_ok=True) + solve(th_card, op_card, eko_path2) + + th_card.matching_order = [1, 0] + eko_path1 = here / "test1.tar" + eko_path1.unlink(missing_ok=True) + solve(th_card, op_card, eko_path1) + + eko_output1 = EKO.read(eko_path1) + eko_output2 = EKO.read(eko_path2) + op1_nf3 = eko_output1[(MC**2, 3)] + op2_nf3 = eko_output2[(MC**2, 3)] + op1_nf4 = eko_output1[(MC**2, 4)] + op2_nf4 = eko_output2[(MC**2, 4)] + + # test that nf=4 operators are the same + np.testing.assert_allclose(op1_nf4.operator, op2_nf4.operator) + + with pytest.raises(AssertionError): + np.testing.assert_allclose(op2_nf3.operator, op2_nf4.operator) + + with pytest.raises(AssertionError): + np.testing.assert_allclose(op1_nf3.operator, op1_nf4.operator) + + with pytest.raises(AssertionError): + np.testing.assert_allclose(op1_nf3.operator, op2_nf3.operator) + + pdf1 = apply.apply_pdf(eko_output1, toy.mkPDF("ToyLH", 0)) + pdf2 = apply.apply_pdf(eko_output2, toy.mkPDF("ToyLH", 0)) + + # test that different PTO matching is applied correctly + np.testing.assert_allclose( + pdf1[(MC**2, 4)]["pdfs"][C_PID], pdf2[(MC**2, 4)]["pdfs"][C_PID] + ) + with pytest.raises(AssertionError): + np.testing.assert_allclose( + pdf1[(MC**2, 3)]["pdfs"][C_PID], pdf2[(MC**2, 3)]["pdfs"][C_PID] + ) diff --git a/doc/source/refs.bib b/doc/source/refs.bib index 4af4a6bd9..16a662451 100644 --- a/doc/source/refs.bib +++ b/doc/source/refs.bib @@ -999,3 +999,36 @@ @article{Falcioni:2023vqq month = "7", year = "2023" } + +@article{Gehrmann:2023cqm, + author = "Gehrmann, Thomas and von Manteuffel, Andreas and Sotnikov, Vasily and Yang, Tong-Zhi", + title = "{Complete $N_f^2$ contributions to four-loop pure-singlet splitting functions}", + eprint = "2308.07958", + archivePrefix = "arXiv", + primaryClass = "hep-ph", + reportNumber = "MSUHEP-23-024, ZU-TH 43/23", + month = "8", + year = "2023" +} + +@article{Falcioni:2023tzp, + author = "Falcioni, G. and Herzog, F. and Moch, S. and Vermaseren, J. and Vogt, A.", + title = "{The double fermionic contribution to the four-loop quark-to-gluon splitting function}", + eprint = "2310.01245", + archivePrefix = "arXiv", + primaryClass = "hep-ph", + reportNumber = "ZU-TH 62/23, DESY 23-146, Nikhef 2023-015, LTH 1353", + month = "10", + year = "2023" +} + +@article{Moch:2023tdj, + author = "Moch, S. and Ruijl, B. and Ueda, T. and Vermaseren, J. and Vogt, A.", + title = "{Additional moments and x-space approximations of four-loop splitting functions in QCD}", + eprint = "2310.05744", + archivePrefix = "arXiv", + primaryClass = "hep-ph", + reportNumber = "DESY-23-150, Nikhef 23-016, LTH 1354", + month = "10", + year = "2023" +} diff --git a/doc/source/theory/Mellin.rst b/doc/source/theory/Mellin.rst index a3adb47d2..28ddae8f1 100644 --- a/doc/source/theory/Mellin.rst +++ b/doc/source/theory/Mellin.rst @@ -56,7 +56,7 @@ Plus Distributions ^^^^^^^^^^^^^^^^^^ .. math :: - \mathcal M[1/(1-x)_+](N) = S_1(N) + \mathcal M[1/(1-x)_+](N) = - S_1(N - 1) with the harmonic sum :math:`S_1` (see :ref:`theory/mellin:harmonic sums`). diff --git a/doc/source/theory/N3LO_ad.rst b/doc/source/theory/N3LO_ad.rst index 18bd6cbd3..34030f7e7 100644 --- a/doc/source/theory/N3LO_ad.rst +++ b/doc/source/theory/N3LO_ad.rst @@ -90,16 +90,16 @@ In |EKO| they are implemented as follows: - The large-N limit :cite:`Moch:2017uml`, which reads (Eq. 2.17): .. math :: - \gamma_{ns} \approx A^{(f)}_4 S_1(N) - B_4 + C_4 \frac{S_1(N)}{N} - (D_4 + \frac{1}{2} A^{(f)}_4) \frac{1}{N} + \mathcal{O}(\frac{\ln^k(N)}{N^2}) + \gamma_{ns} \approx A^{(f)}_4 S_1(N) - B^{(f)}_4 + C^{(f)}_4 \frac{S_1(N)}{N} - D^{(f)}_4 \frac{1}{N} This limit is common for all :math:`\gamma_{ns,+}^{(3)},\gamma_{ns,-}^{(3)},\gamma_{ns,v}^{(3)}`. The coefficient :math:`A^{(f)}_4`, being related to the twist-2 spin-N operators, can be obtained from the |QCD| cusp calculation - :cite:`Henn:2019swt`, while the :math:`B_4` is fixed by the integral of the 4-loop splitting function + :cite:`Henn:2019swt`, while the :math:`B^{(f)}_4` is fixed by the integral of the 4-loop splitting function and has been firstly computed in :cite:`Moch:2017uml` in the large :math:`n_c` limit. More recently :cite:`Duhr:2022cob`, it has been determined in the full color expansion by computing various |N3LO| cross sections in the soft limit. - :math:`C_4,D_4` instead can be computed directly from lower order splitting functions. + :math:`C^{(f)}_4,D^{(f)}_4` instead can be computed directly from lower order splitting functions. From large-x resummation :cite:`Davies:2016jie`, it is possible to infer further constrains on sub-leading terms :math:`\frac{\ln^k(N)}{N^2}`, since the non-singlet splitting functions contain only terms :math:`(1-x)^a\ln^k(1-x)` with :math:`a \ge 1`. @@ -132,7 +132,7 @@ In |EKO| they are implemented as follows: * - :math:`\frac{x}{2}\ln^2(x)` - :math:`\frac{1}{(N+1)^3}` * - :math:`x^{2}, x^{3}` - - :math:`\frac{1}{(N-2)},\frac{1}{(N-3)}` + - :math:`\frac{1}{(N+2)},\frac{1}{(N+3)}` The first five functions model the sub-leading differences in the :math:`N\to \infty` limit, while the last three help the convergence in the small-N region. Finally, we add a polynomial part @@ -193,8 +193,13 @@ the following terms: - |T| - |T| -Only the parts proportional to :math:`n_f^3` are known analytically +The parts proportional to :math:`n_f^3` are known analytically :cite:`Davies:2016jie` and have been included so far. +For :math:`\gamma_{qq,ps}` and :math:`\gamma_{gq}` also the component +proportional to :math:`n_f^2` has been computed in :cite:`Gehrmann:2023cqm` +and :cite:`Falcioni:2023tzp` respectively and it's used in our code +through an approximations obtained with 30 moments. + The other parts are approximated using some known limits: * The small-x limit, given in the large :math:`N_c` approximation by @@ -229,11 +234,11 @@ The other parts are approximated using some known limits: It is known that :cite:`Albino:2000cp,Moch:2021qrk` the diagonal terms diverge in N-space as: .. math :: - \gamma_{kk} \approx A^{(r)}_4 S_1(N) + B^{(r)}_4 + C^{(r)}_4 \frac{S_1(N)}{N} + \mathcal{O}(\frac{1}{N}) + \gamma_{kk} \approx A^{(r)}_4 S_1(N) + B^{(r)}_4 + C^{(r)}_4 \frac{S_1(N)}{N} - D^{(r)}_4 \frac{1}{N} Where again the coefficient :math:`A^{(r)}_4` is the |QCD| cusp anomalous dimension for the adjoint or fundamental representation, the coefficient :math:`B^{(r)}_4` has been extracted from soft anomalous dimensions :cite:`Duhr:2022cob`. - and :math:`C^{(r)}_4`can be estimate from lower orders :cite:`Dokshitzer:2005bf`. + and :math:`C^{(r)}_4,D^{(r)}_4`can be estimate from lower orders :cite:`Dokshitzer:2005bf`. However, :math:`\gamma_{qq,ps}^{(3)}` do not constrain any divergence at large-x or constant term so its expansion starts as :math:`\mathcal{O}(\frac{1}{N^2})`. The off-diagonal do not contain any +-distributions or delta distributions but can include divergent logarithms @@ -252,14 +257,14 @@ The other parts are approximated using some known limits: \gamma_{qq,ps} \approx (1-x)[c_{4} \ln^4(1-x) + c_{3} \ln^3(1-x)] + \mathcal{O}((1-x)\ln^2(1-x)) - * The 4 lowest even N moments provided in :cite:`Moch:2021qrk`, where we can use momentum conservation - to fix: + * The 5 lowest even N moments provided in :cite:`Moch:2021qrk,Moch:2023tdj`, + where momentum conservation fixes: .. math :: & \gamma_{qg}(2) + \gamma_{gg}(2) = 0 \\ & \gamma_{qq}(2) + \gamma_{gq}(2) = 0 \\ - For :math:`\gamma_{qq,ps}, \gamma_{qg}` other 6 additional moments are available :cite:`Falcioni:2023luc,Falcioni:2023vqq`. + For :math:`\gamma_{qq,ps}, \gamma_{qg}` other 5 additional moments are available :cite:`Falcioni:2023luc,Falcioni:2023vqq`. making the parametrization of this splitting function much more accurate. The difference between the known moments and the known limits is parametrized @@ -276,9 +281,9 @@ we need to account for a possible source of uncertainties arising during the app This uncertainty is neglected in the non-singlet case. The procedure is performed in two steps for each different anomalous dimension separately. -First, we solve the system associated to the 4 known moments, +First, we solve the system associated to the 5 (10) known moments, minus the known limits, using different functional bases. -Any possible candidate contains 4 elements and is obtained with the following prescription: +Any possible candidate contains 5 elements and is obtained with the following prescription: 1. one function is leading small-N unknown contribution, which correspond to the highest power unknown for the pole at :math:`N=1`, @@ -312,32 +317,29 @@ final reduced sets of candidates. :align: center * - :math:`f_1(N)` - - :math:`\frac{S_2(N-2)}{N}` + - :math:`\frac{1}{(N-1)^2}` * - :math:`f_2(N)` - - :math:`\frac{1}{N}` + - :math:`\mathcal{M}[(1-x)\ln^3(1-x)]` * - :math:`f_3(N)` - - :math:`\frac{1}{N-1},\ \frac{S_1(N)}{N^2}` + - :math:`\frac{1}{N-1},` * - :math:`f_4(N)` - - :math:`\frac{1}{N-1},\ \frac{1}{N^4},\ \frac{1}{N^3},\ \frac{1}{N^2},\ \frac{1}{(N+1)^3},\ \frac{1}{(N+1)^2},\ \frac{1}{N+1},\ \frac{1}{N+2},\ \mathcal{M}[(1-x)\ln(1-x)],\ \frac{S_1(N)}{N^2}, \ \mathcal{M}[(1-x)^2\ln(1-x)],` + - :math:`\frac{1}{N^4},\ \frac{1}{N^3},\ \frac{1}{N^2},\ \frac{1}{(N+1)},\ \frac{1}{(N+2)},\ \mathcal{M}[(1-x)\ln^2(1-x)],\ \mathcal{M}[(1-x)\ln(1-x)]` .. list-table:: :math:`\gamma_{gq}^{(3)}` parametrization basis :align: center * - :math:`f_1(N)` - - :math:`\frac{S_2(N-2)}{N}` + - :math:`\frac{1}{(N-1)^2}` * - :math:`f_2(N)` - - :math:`\frac{S_1^3(N)}{N}` + - :math:`\mathcal{M}[\ln^3(1-x)]` * - :math:`f_3(N)` - - :math:`\frac{1}{N-1},\ \frac{1}{N^4}` + - :math:`\frac{1}{N-1}` * - :math:`f_4(N)` - - :math:`\frac{1}{N-1},\ \frac{1}{N^4},\ \frac{1}{N^3},\ \frac{1}{N^2},\ \frac{1}{N},\ \frac{1}{(N+1)^3},\ \frac{1}{(N+1)^2},\ \frac{1}{N+1},\ \frac{1}{N+2},\ \frac{S_1(N-2)}{N},\ \mathcal{M}[\ln^3(1-x)],\ \mathcal{M}[\ln^2(1-x)], \frac{S_1(N)}{N},\ \frac{S_1^2(N)}{N}` - - Note that this table refers only to the :math:`n_f^0` part where we assume no violation of the scaling with :math:`\gamma_{gg}` - also for the |NLL| term, to help the convergence. We expect that any possible deviation can be parametrized as a shift in the |NNLL| terms - and in the |NLL| :math:`n_f^1` which are free to vary independently. - Furthermore for the part :math:`\propto n_f^2` we adopt a slightly different - basis to account fot the fact that the leading - contribution for the pole at :math:`N=1` is :math:`\frac{1}{(N-1)^2}`. + - :math:`\frac{1}{N^4},\ \frac{1}{N^3},\ \frac{1}{N^2},\ \frac{1}{(N+1)},\ \frac{1}{(N+2)},\ \mathcal{M}[\ln^2(1-x)],\ \mathcal{M}[\ln(1-x)]` + + Following :cite:`Moch:2023tdj` we have assumed no violation of the scaling with :math:`\gamma_{gg}` + also for the |NLL| small-x term, to help the convergence. We expect that any possible deviation can be parametrized as a shift in the |NNLL| terms + which are free to vary independently. Slightly different choices are performed for :math:`\gamma_{gq}^{(3)}` and :math:`\gamma_{qq,ps}^{(3)}` where 10 moments are known. In this case we can select a larger number of functions in group 3 diff --git a/extras/lh_bench_23/.gitignore b/extras/lh_bench_23/.gitignore new file mode 100644 index 000000000..11fa526db --- /dev/null +++ b/extras/lh_bench_23/.gitignore @@ -0,0 +1,2 @@ +*.tar +*.csv diff --git a/extras/lh_bench_23/cfg.py b/extras/lh_bench_23/cfg.py new file mode 100644 index 000000000..51762de73 --- /dev/null +++ b/extras/lh_bench_23/cfg.py @@ -0,0 +1,145 @@ +import copy +from math import inf, nan + +import numpy as np + +from eko import basis_rotation as br +from eko.interpolation import lambertgrid +from eko.io import runcards +from eko.io.types import ReferenceRunning + +_sqrt2 = float(np.sqrt(2)) + +# theory settings +# --------------- +_t_vfns = dict( + order=[3, 0], + couplings=dict( + alphas=0.35, + alphaem=0.007496, + scale=_sqrt2, + num_flavs_ref=3, + max_num_flavs=6, + ), + heavy=dict( + num_flavs_init=3, + num_flavs_max_pdf=6, + intrinsic_flavors=[], + masses=[ReferenceRunning([mq, nan]) for mq in (_sqrt2, 4.5, 175.0)], + masses_scheme="POLE", + matching_ratios=[1.0, 1.0, 1.0], + ), + xif=1.0, + n3lo_ad_variation=(0, 0, 0, 0), + matching_order=[2, 0], +) + + +def vfns_theory(xif=1.0): + """Generate a VFNS theory card.""" + tt = copy.deepcopy(_t_vfns) + tt["xif"] = xif + return runcards.TheoryCard.from_dict(tt) + + +_t_ffns = copy.deepcopy(_t_vfns) +_t_ffns["couplings"]["num_flavs_ref"] = 4 +_t_ffns["heavy"]["num_flavs_init"] = 4 +_t_ffns["heavy"]["masses"] = [ + ReferenceRunning([0, nan]), + ReferenceRunning([inf, nan]), + ReferenceRunning([inf, nan]), +] + + +def ffns_theory(xif=1.0): + """Generate a VFNS theory card.""" + tt = copy.deepcopy(_t_ffns) + tt["xif"] = xif + return runcards.TheoryCard.from_dict(tt) + + +# operator settings +# ----------------- +_o_vfns = dict( + mu0=_sqrt2, + mugrid=[(100.0, 5)], + xgrid=lambertgrid(60).tolist(), + configs=dict( + evolution_method="iterate-exact", + ev_op_max_order=[10, 0], + ev_op_iterations=30, + interpolation_polynomial_degree=4, + interpolation_is_log=True, + scvar_method="exponentiated", + inversion_method=None, + n_integration_cores=-2, + polarized=False, + time_like=False, + ), + debug=dict( + skip_singlet=False, + skip_non_singlet=False, + ), +) +vfns_operator = runcards.OperatorCard.from_dict(_o_vfns) + +_o_ffns = copy.deepcopy(_o_vfns) +_o_ffns["mugrid"] = [(100.0, 4)] +ffns_operator = runcards.OperatorCard.from_dict(_o_ffns) + + +# flavor rotations +# ---------------- + +ffns_labels = ["u_v", "d_v", "L_m", "L_p", "s_v", "s_p", "c_p", "g"] +ffns_rotate_to_LHA = np.zeros((len(ffns_labels), 14)) +# u_v = u - ubar +ffns_rotate_to_LHA[0][br.flavor_basis_pids.index(-2)] = -1 +ffns_rotate_to_LHA[0][br.flavor_basis_pids.index(2)] = 1 +# d_v = d - dbar +ffns_rotate_to_LHA[1][br.flavor_basis_pids.index(-1)] = -1 +ffns_rotate_to_LHA[1][br.flavor_basis_pids.index(1)] = 1 +# L_- = dbar - ubar +ffns_rotate_to_LHA[2][br.flavor_basis_pids.index(-1)] = 1 +ffns_rotate_to_LHA[2][br.flavor_basis_pids.index(-2)] = -1 +# 2L_+ = 2dbar + 2ubar +ffns_rotate_to_LHA[3][br.flavor_basis_pids.index(-1)] = 2 +ffns_rotate_to_LHA[3][br.flavor_basis_pids.index(-2)] = 2 +# s_v = s - sbar +ffns_rotate_to_LHA[4][br.flavor_basis_pids.index(-3)] = -1 +ffns_rotate_to_LHA[4][br.flavor_basis_pids.index(3)] = 1 +# s_+ = s + sbar +ffns_rotate_to_LHA[5][br.flavor_basis_pids.index(-3)] = 1 +ffns_rotate_to_LHA[5][br.flavor_basis_pids.index(3)] = 1 +# c_+ = c + cbar +ffns_rotate_to_LHA[6][br.flavor_basis_pids.index(-4)] = 1 +ffns_rotate_to_LHA[6][br.flavor_basis_pids.index(4)] = 1 +# g = g +ffns_rotate_to_LHA[7][br.flavor_basis_pids.index(21)] = 1 + +vfns_labels = ["u_v", "d_v", "L_m", "L_p", "s_p", "c_p", "b_p", "g"] +vfns_rotate_to_LHA = np.zeros((len(vfns_labels), 14)) +# u_v = u - ubar +vfns_rotate_to_LHA[0][br.flavor_basis_pids.index(-2)] = -1 +vfns_rotate_to_LHA[0][br.flavor_basis_pids.index(2)] = 1 +# d_v = d - dbar +vfns_rotate_to_LHA[1][br.flavor_basis_pids.index(-1)] = -1 +vfns_rotate_to_LHA[1][br.flavor_basis_pids.index(1)] = 1 +# L_- = dbar - ubar +vfns_rotate_to_LHA[2][br.flavor_basis_pids.index(-1)] = 1 +vfns_rotate_to_LHA[2][br.flavor_basis_pids.index(-2)] = -1 +# 2L_+ = 2dbar + 2ubar +vfns_rotate_to_LHA[3][br.flavor_basis_pids.index(-1)] = 2 +vfns_rotate_to_LHA[3][br.flavor_basis_pids.index(-2)] = 2 +# s_+ = s + sbar +vfns_rotate_to_LHA[4][br.flavor_basis_pids.index(-3)] = 1 +vfns_rotate_to_LHA[4][br.flavor_basis_pids.index(3)] = 1 +# c_+ = c + cbar +vfns_rotate_to_LHA[5][br.flavor_basis_pids.index(-4)] = 1 +vfns_rotate_to_LHA[5][br.flavor_basis_pids.index(4)] = 1 +# b_+ = b + bbar +vfns_rotate_to_LHA[6][br.flavor_basis_pids.index(-5)] = 1 +vfns_rotate_to_LHA[6][br.flavor_basis_pids.index(5)] = 1 +# g = g +vfns_rotate_to_LHA[7][br.flavor_basis_pids.index(21)] = 1 diff --git a/extras/lh_bench_23/run-nnlo.py b/extras/lh_bench_23/run-nnlo.py new file mode 100644 index 000000000..1a006f7bc --- /dev/null +++ b/extras/lh_bench_23/run-nnlo.py @@ -0,0 +1,118 @@ +import argparse +import logging +import pathlib +import sys + +import numpy as np +import pandas as pd +import yaml +from banana import toy +from cfg import ( + ffns_labels, + ffns_operator, + ffns_rotate_to_LHA, + ffns_theory, + vfns_labels, + vfns_operator, + vfns_rotate_to_LHA, + vfns_theory, +) + +import eko +from eko.runner.managed import solve +from ekobox import apply +from ekomark.benchmark.external.LHA_utils import here as there + +_sqrt2 = float(np.sqrt(2)) + + +# setup x rotation +xgrid = np.array([1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 0.1, 0.3, 0.5, 0.7, 0.9]) + + +# reference values +with open(there / "LHA.yaml", encoding="utf-8") as o: + ref_data = yaml.safe_load(o) + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("scheme", help="FFNS or VFNS?") + parser.add_argument("sv", help="scale variation: up, central, or down") + parser.add_argument("--rerun", help="Rerun eko", action="store_true") + parser.add_argument( + "-v", "--verbose", help="Print eko log to screen", action="store_true" + ) + args = parser.parse_args() + + # determine xif + if "central".startswith(args.sv): + xif = 1.0 + sv = "central" + part = 1 + elif "up".startswith(args.sv): + xif = _sqrt2 + sv = "up" + part = 2 + elif "down".startswith(args.sv): + xif = 1.0 / _sqrt2 + sv = "down" + part = 3 + else: + raise ValueError( + "sv has to be up, central, or down - or any abbreviation there of" + ) + + # determine scheme + if args.scheme == "FFNS": + scheme = "FFNS" + t = ffns_theory(xif) + o = ffns_operator + tab = 14 + lab = ffns_labels + rot = ffns_rotate_to_LHA + elif args.scheme == "VFNS": + scheme = "VFNS" + t = vfns_theory(xif) + o = vfns_operator + tab = 15 + lab = vfns_labels + rot = vfns_rotate_to_LHA + else: + raise ValueError("scheme has to be FFNS or VFNS") + + # eko path + p = pathlib.Path(f"{scheme}-{sv}.tar") + + # recompute? + if not p.exists() or args.rerun: + print("(Re)running eko ...") + p.unlink(True) + if args.verbose: + logStdout = logging.StreamHandler(sys.stdout) + logStdout.setLevel(logging.INFO) + logStdout.setFormatter(logging.Formatter("%(message)s")) + logging.getLogger("eko").handlers = [] + logging.getLogger("eko").addHandler(logStdout) + logging.getLogger("eko").setLevel(logging.INFO) + solve(t, o, p) + + # apply PDF + out = {} + with eko.EKO.read(p) as eko_: + pdf = apply.apply_pdf_flavor(eko_, toy.mkPDF("ToyLH", 0), xgrid, rot, lab) + for lab, f in list(pdf.values())[0]["pdfs"].items(): + out[lab] = xgrid * f + + # display result + pd.set_option("display.float_format", "{:.4e}".format) + me = pd.DataFrame(out) + print("EKO") + print(me) + # dump to file + me.to_csv(f"table{tab}-part{part}.csv") + + # load reference + ref = pd.DataFrame(ref_data[f"table{tab}"][f"part{part}"]) + print() + print("rel. distance to reference") + print((me - ref) / ref) diff --git a/extras/n3lo_bench/plot_msht.py b/extras/n3lo_bench/plot_msht.py index 54aa8fcfa..c922c1c03 100644 --- a/extras/n3lo_bench/plot_msht.py +++ b/extras/n3lo_bench/plot_msht.py @@ -14,8 +14,8 @@ n3lo_vars_dict = { - "gg": 17, - "gq": 24, + "gg": 19, + "gq": 21, "qg": 15, "qq": 6, } diff --git a/flake.lock b/flake.lock new file mode 100644 index 000000000..3146adf01 --- /dev/null +++ b/flake.lock @@ -0,0 +1,337 @@ +{ + "nodes": { + "devenv": { + "inputs": { + "flake-compat": "flake-compat", + "nix": "nix", + "nixpkgs": "nixpkgs", + "pre-commit-hooks": "pre-commit-hooks" + }, + "locked": { + "lastModified": 1693179221, + "narHash": "sha256-vfndyVSFhfWwO5b7d0j92YJ06obEaHsJZAa3MI0sYvc=", + "owner": "cachix", + "repo": "devenv", + "rev": "68ea687ed567d578543d89b47281119a3511ac08", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "devenv", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1685518550, + "narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1685518550, + "narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef", + "type": "github" + }, + "original": { + "id": "flake-utils", + "type": "indirect" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "devenv", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1660459072, + "narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "a20de23b925fd8264fd7fad6454652e142fd7f73", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "lowdown-src": { + "flake": false, + "locked": { + "lastModified": 1633514407, + "narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=", + "owner": "kristapsdz", + "repo": "lowdown", + "rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8", + "type": "github" + }, + "original": { + "owner": "kristapsdz", + "repo": "lowdown", + "type": "github" + } + }, + "nix": { + "inputs": { + "lowdown-src": "lowdown-src", + "nixpkgs": [ + "devenv", + "nixpkgs" + ], + "nixpkgs-regression": "nixpkgs-regression" + }, + "locked": { + "lastModified": 1676545802, + "narHash": "sha256-EK4rZ+Hd5hsvXnzSzk2ikhStJnD63odF7SzsQ8CuSPU=", + "owner": "domenkozar", + "repo": "nix", + "rev": "7c91803598ffbcfe4a55c44ac6d49b2cf07a527f", + "type": "github" + }, + "original": { + "owner": "domenkozar", + "ref": "relaxed-flakes", + "repo": "nix", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1678875422, + "narHash": "sha256-T3o6NcQPwXjxJMn2shz86Chch4ljXgZn746c2caGxd8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "126f49a01de5b7e35a43fd43f891ecf6d3a51459", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-python": { + "inputs": { + "flake-compat": "flake-compat_2", + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs_3" + }, + "locked": { + "lastModified": 1692934204, + "narHash": "sha256-dJG+DyQlWgeBEcCl9j3R5A4vcBnC2GLRacNeJgcZPo8=", + "owner": "cachix", + "repo": "nixpkgs-python", + "rev": "dfe9a33d0d9bd31650b69c36f8fff5f2d5342393", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "nixpkgs-python", + "type": "github" + } + }, + "nixpkgs-regression": { + "locked": { + "lastModified": 1643052045, + "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1685801374, + "narHash": "sha256-otaSUoFEMM+LjBI1XL/xGB5ao6IwnZOXc47qhIgJe8U=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c37ca420157f4abc31e26f436c1145f8951ff373", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1693183237, + "narHash": "sha256-c7OtyBkZ/vZE/WosBpRGRtkbWZjDHGJP7fg1FyB9Dsc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ea5234e7073d5f44728c499192544a84244bf35a", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1685974512, + "narHash": "sha256-WLPHpe96RbPRO9iDtCxgsYkadTheRq7wqXWdGpR6g7w=", + "owner": "domenkozar", + "repo": "nixpkgs", + "rev": "1102477695918daba466123cc2ef694ed3a49939", + "type": "github" + }, + "original": { + "owner": "domenkozar", + "ref": "cpython-moduralize", + "repo": "nixpkgs", + "type": "github" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": [ + "devenv", + "flake-compat" + ], + "flake-utils": "flake-utils", + "gitignore": "gitignore", + "nixpkgs": [ + "devenv", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1688056373, + "narHash": "sha256-2+SDlNRTKsgo3LBRiMUcoEUb6sDViRNQhzJquZ4koOI=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "5843cf069272d92b60c3ed9e55b7a8989c01d4c7", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "root": { + "inputs": { + "devenv": "devenv", + "nixpkgs": "nixpkgs_2", + "nixpkgs-python": "nixpkgs-python", + "systems": "systems_3" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 000000000..28ea23292 --- /dev/null +++ b/flake.nix @@ -0,0 +1,46 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05"; + systems.url = "github:nix-systems/default"; + devenv.url = "github:cachix/devenv"; + nixpkgs-python.url = "github:cachix/nixpkgs-python"; + }; + + nixConfig = { + extra-trusted-public-keys = "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="; + extra-substituters = "https://devenv.cachix.org"; + }; + + outputs = { + self, + nixpkgs, + devenv, + systems, + ... + } @ inputs: let + forEachSystem = nixpkgs.lib.genAttrs (import systems); + in { + devShells = + forEachSystem + (system: let + pkgs = nixpkgs.legacyPackages.${system}; + in { + default = devenv.lib.mkShell { + inherit inputs pkgs; + modules = [ + { + languages.python = { + enable = true; + poetry = { + enable = true; + install.enable = true; + install.allExtras = true; + }; + version = "3.11"; + }; + } + ]; + }; + }); + }; +} diff --git a/poetry.lock b/poetry.lock index 18b57f90a..ba58ddee1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "alabaster" version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -16,7 +15,6 @@ files = [ name = "appdirs" version = "1.4.4" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" optional = true python-versions = "*" files = [ @@ -28,7 +26,6 @@ files = [ name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" -category = "main" optional = false python-versions = "*" files = [ @@ -40,7 +37,6 @@ files = [ name = "astroid" version = "2.15.6" description = "An abstract syntax tree for Python with inference support." -category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -60,7 +56,6 @@ wrapt = [ name = "asttokens" version = "2.2.1" description = "Annotate AST trees with source code positions" -category = "main" optional = false python-versions = "*" files = [ @@ -78,7 +73,6 @@ test = ["astroid", "pytest"] name = "asv" version = "0.4.2" description = "Airspeed Velocity: A simple Python history benchmarking tool" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -95,7 +89,6 @@ hg = ["python-hglib (>=1.5)"] name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -114,7 +107,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "babel" version = "2.12.1" description = "Internationalization utilities" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -129,7 +121,6 @@ pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" -category = "main" optional = false python-versions = "*" files = [ @@ -141,7 +132,6 @@ files = [ name = "banana-hep" version = "0.6.9" description = "Benchmark QCD physics" -category = "main" optional = true python-versions = ">=3.8.0,<3.12" files = [ @@ -165,7 +155,6 @@ SQLAlchemy = ">=1.4.29,<2.0.0" name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" -category = "dev" optional = false python-versions = ">=3.6.0" files = [ @@ -184,7 +173,6 @@ lxml = ["lxml"] name = "bleach" version = "6.0.0" description = "An easy safelist-based HTML-sanitizing tool." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -203,7 +191,6 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -215,7 +202,6 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." -category = "dev" optional = false python-versions = "*" files = [ @@ -292,7 +278,6 @@ pycparser = "*" name = "charset-normalizer" version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -377,7 +362,6 @@ files = [ name = "click" version = "8.1.6" description = "Composable command line interface toolkit" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -392,7 +376,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -404,7 +387,6 @@ files = [ name = "comm" version = "0.1.4" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -424,7 +406,6 @@ typing = ["mypy (>=0.990)"] name = "commonmark" version = "0.9.1" description = "Python parser for the CommonMark Markdown spec" -category = "main" optional = true python-versions = "*" files = [ @@ -439,7 +420,6 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] name = "contourpy" version = "1.1.0" description = "Python library for calculating contours of 2D quadrilateral grids" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -450,6 +430,7 @@ files = [ {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18a64814ae7bce73925131381603fff0116e2df25230dfc80d6d690aa6e20b37"}, {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90c81f22b4f572f8a2110b0b741bb64e5a6427e0a198b2cdc1fbaf85f352a3aa"}, {file = "contourpy-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53cc3a40635abedbec7f1bde60f8c189c49e84ac180c665f2cd7c162cc454baa"}, + {file = "contourpy-1.1.0-cp310-cp310-win32.whl", hash = "sha256:9b2dd2ca3ac561aceef4c7c13ba654aaa404cf885b187427760d7f7d4c57cff8"}, {file = "contourpy-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:1f795597073b09d631782e7245016a4323cf1cf0b4e06eef7ea6627e06a37ff2"}, {file = "contourpy-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0b7b04ed0961647691cfe5d82115dd072af7ce8846d31a5fac6c142dcce8b882"}, {file = "contourpy-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27bc79200c742f9746d7dd51a734ee326a292d77e7d94c8af6e08d1e6c15d545"}, @@ -458,6 +439,7 @@ files = [ {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5cec36c5090e75a9ac9dbd0ff4a8cf7cecd60f1b6dc23a374c7d980a1cd710e"}, {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cbd657e9bde94cd0e33aa7df94fb73c1ab7799378d3b3f902eb8eb2e04a3a"}, {file = "contourpy-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:181cbace49874f4358e2929aaf7ba84006acb76694102e88dd15af861996c16e"}, + {file = "contourpy-1.1.0-cp311-cp311-win32.whl", hash = "sha256:edb989d31065b1acef3828a3688f88b2abb799a7db891c9e282df5ec7e46221b"}, {file = "contourpy-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb3b7d9e6243bfa1efb93ccfe64ec610d85cfe5aec2c25f97fbbd2e58b531256"}, {file = "contourpy-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcb41692aa09aeb19c7c213411854402f29f6613845ad2453d30bf421fe68fed"}, {file = "contourpy-1.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5d123a5bc63cd34c27ff9c7ac1cd978909e9c71da12e05be0231c608048bb2ae"}, @@ -466,6 +448,7 @@ files = [ {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:317267d915490d1e84577924bd61ba71bf8681a30e0d6c545f577363157e5e94"}, {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d551f3a442655f3dcc1285723f9acd646ca5858834efeab4598d706206b09c9f"}, {file = "contourpy-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7a117ce7df5a938fe035cad481b0189049e8d92433b4b33aa7fc609344aafa1"}, + {file = "contourpy-1.1.0-cp38-cp38-win32.whl", hash = "sha256:108dfb5b3e731046a96c60bdc46a1a0ebee0760418951abecbe0fc07b5b93b27"}, {file = "contourpy-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4f26b25b4f86087e7d75e63212756c38546e70f2a92d2be44f80114826e1cd4"}, {file = "contourpy-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc00bb4225d57bff7ebb634646c0ee2a1298402ec10a5fe7af79df9a51c1bfd9"}, {file = "contourpy-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:189ceb1525eb0655ab8487a9a9c41f42a73ba52d6789754788d1883fb06b2d8a"}, @@ -474,6 +457,7 @@ files = [ {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:143dde50520a9f90e4a2703f367cf8ec96a73042b72e68fcd184e1279962eb6f"}, {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e94bef2580e25b5fdb183bf98a2faa2adc5b638736b2c0a4da98691da641316a"}, {file = "contourpy-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ed614aea8462735e7d70141374bd7650afd1c3f3cb0c2dbbcbe44e14331bf002"}, + {file = "contourpy-1.1.0-cp39-cp39-win32.whl", hash = "sha256:71551f9520f008b2950bef5f16b0e3587506ef4f23c734b71ffb7b89f8721999"}, {file = "contourpy-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:438ba416d02f82b692e371858143970ed2eb6337d9cdbbede0d8ad9f3d7dd17d"}, {file = "contourpy-1.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a698c6a7a432789e587168573a864a7ea374c6be8d4f31f9d87c001d5a843493"}, {file = "contourpy-1.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397b0ac8a12880412da3551a8cb5a187d3298a72802b45a3bd1805e204ad8439"}, @@ -498,7 +482,6 @@ test-no-images = ["pytest", "pytest-cov", "wurlitzer"] name = "coverage" version = "7.3.0" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -566,7 +549,6 @@ toml = ["tomli"] name = "cycler" version = "0.11.0" description = "Composable style cycles" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -578,7 +560,6 @@ files = [ name = "debugpy" version = "1.6.7.post1" description = "An implementation of the Debug Adapter Protocol for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -606,7 +587,6 @@ files = [ name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -618,7 +598,6 @@ files = [ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -630,7 +609,6 @@ files = [ name = "devtools" version = "0.10.0" description = "Python's missing debug print command, and more." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -649,7 +627,6 @@ pygments = ["pygments (>=2.2.0)"] name = "dill" version = "0.3.7" description = "serialize all of Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -664,7 +641,6 @@ graph = ["objgraph (>=1.7.2)"] name = "distlib" version = "0.3.7" description = "Distribution utilities" -category = "dev" optional = false python-versions = "*" files = [ @@ -676,7 +652,6 @@ files = [ name = "docutils" version = "0.17.1" description = "Docutils -- Python Documentation Utilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -688,7 +663,6 @@ files = [ name = "exceptiongroup" version = "1.1.1" description = "Backport of PEP 654 (exception groups)" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -703,7 +677,6 @@ test = ["pytest (>=6)"] name = "executing" version = "1.2.0" description = "Get the currently executing AST node of a frame, and other information" -category = "main" optional = false python-versions = "*" files = [ @@ -718,7 +691,6 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] name = "fancycompleter" version = "0.9.1" description = "colorful TAB completion for Python prompt" -category = "dev" optional = false python-versions = "*" files = [ @@ -734,7 +706,6 @@ pyrepl = ">=0.8.2" name = "fastjsonschema" version = "2.18.0" description = "Fastest Python implementation of JSON schema" -category = "dev" optional = false python-versions = "*" files = [ @@ -749,7 +720,6 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc name = "filelock" version = "3.12.2" description = "A platform independent file lock." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -765,7 +735,6 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "p name = "fonttools" version = "4.42.0" description = "Tools to manipulate font files" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -823,7 +792,6 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] name = "greenlet" version = "2.0.2" description = "Lightweight in-process concurrent programming" -category = "main" optional = true python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" files = [ @@ -832,6 +800,7 @@ files = [ {file = "greenlet-2.0.2-cp27-cp27m-win32.whl", hash = "sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74"}, {file = "greenlet-2.0.2-cp27-cp27m-win_amd64.whl", hash = "sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343"}, {file = "greenlet-2.0.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae"}, + {file = "greenlet-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d967650d3f56af314b72df7089d96cda1083a7fc2da05b375d2bc48c82ab3f3c"}, {file = "greenlet-2.0.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df"}, {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088"}, {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb"}, @@ -840,6 +809,7 @@ files = [ {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91"}, {file = "greenlet-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645"}, {file = "greenlet-2.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c"}, + {file = "greenlet-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d4606a527e30548153be1a9f155f4e283d109ffba663a15856089fb55f933e47"}, {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca"}, {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0"}, {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2"}, @@ -869,6 +839,7 @@ files = [ {file = "greenlet-2.0.2-cp37-cp37m-win32.whl", hash = "sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7"}, {file = "greenlet-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3"}, {file = "greenlet-2.0.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30"}, + {file = "greenlet-2.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1087300cf9700bbf455b1b97e24db18f2f77b55302a68272c56209d5587c12d1"}, {file = "greenlet-2.0.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b"}, {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526"}, {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b"}, @@ -877,6 +848,7 @@ files = [ {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a"}, {file = "greenlet-2.0.2-cp38-cp38-win32.whl", hash = "sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249"}, {file = "greenlet-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40"}, + {file = "greenlet-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8512a0c38cfd4e66a858ddd1b17705587900dd760c6003998e9472b77b56d417"}, {file = "greenlet-2.0.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8"}, {file = "greenlet-2.0.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6"}, {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df"}, @@ -897,7 +869,6 @@ test = ["objgraph", "psutil"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -909,7 +880,6 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -921,7 +891,6 @@ files = [ name = "importlib-metadata" version = "6.8.0" description = "Read metadata from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -941,7 +910,6 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs name = "importlib-resources" version = "6.0.1" description = "Read resources from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -960,7 +928,6 @@ testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -972,7 +939,6 @@ files = [ name = "ipykernel" version = "6.23.2" description = "IPython Kernel for Jupyter" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -986,7 +952,7 @@ comm = ">=0.1.1" debugpy = ">=1.6.5" ipython = ">=7.23.1" jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" @@ -1006,7 +972,6 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio" name = "ipython" version = "8.12.2" description = "IPython: Productive Interactive Computing" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1046,7 +1011,6 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa name = "isort" version = "5.12.0" description = "A Python utility / library to sort Python imports." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -1064,7 +1028,6 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"] name = "jedi" version = "0.19.0" description = "An autocompletion tool for Python that can be used for text editors." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1084,7 +1047,6 @@ testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1102,7 +1064,6 @@ i18n = ["Babel (>=2.7)"] name = "jsonschema" version = "4.19.0" description = "An implementation of JSON Schema validation for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1126,7 +1087,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jsonschema-specifications" version = "2023.7.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1142,7 +1102,6 @@ referencing = ">=0.28.0" name = "jupyter-client" version = "8.3.0" description = "Jupyter protocol implementation and client libraries" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1152,7 +1111,7 @@ files = [ [package.dependencies] importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" tornado = ">=6.2" @@ -1166,7 +1125,6 @@ test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pyt name = "jupyter-core" version = "5.3.1" description = "Jupyter core package. A base package on which Jupyter projects rely." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1187,7 +1145,6 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] name = "jupyterlab-pygments" version = "0.2.2" description = "Pygments theme using JupyterLab CSS variables" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1199,7 +1156,6 @@ files = [ name = "kiwisolver" version = "1.4.4" description = "A fast implementation of the Cassowary constraint solver" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1277,7 +1233,6 @@ files = [ name = "latexcodec" version = "2.0.1" description = "A lexer and codec to work with LaTeX code in Python." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1292,7 +1247,6 @@ six = ">=1.4.1" name = "lazy-object-proxy" version = "1.9.0" description = "A fast and thorough lazy object proxy." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1338,7 +1292,6 @@ files = [ name = "llvmlite" version = "0.40.1" description = "lightweight wrapper around basic LLVM functionality" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1372,7 +1325,6 @@ files = [ name = "lz4" version = "4.3.2" description = "LZ4 Bindings for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1422,7 +1374,6 @@ tests = ["psutil", "pytest (!=3.3.0)", "pytest-cov"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1446,6 +1397,16 @@ files = [ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, @@ -1482,7 +1443,6 @@ files = [ name = "matplotlib" version = "3.7.2" description = "Python plotting package" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1545,7 +1505,6 @@ python-dateutil = ">=2.7" name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1560,7 +1519,6 @@ traitlets = "*" name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1572,7 +1530,6 @@ files = [ name = "mistune" version = "3.0.1" description = "A sane and fast Markdown parser with useful plugins and renderers" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1584,7 +1541,6 @@ files = [ name = "nbclient" version = "0.8.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -1594,7 +1550,7 @@ files = [ [package.dependencies] jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" nbformat = ">=5.1" traitlets = ">=5.4" @@ -1607,7 +1563,6 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= name = "nbconvert" version = "7.5.0" description = "Converting Jupyter Notebooks" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1646,7 +1601,6 @@ webpdf = ["playwright"] name = "nbformat" version = "5.9.2" description = "The Jupyter Notebook format" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1668,7 +1622,6 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nbsphinx" version = "0.8.12" description = "Jupyter Notebook Tools for Sphinx" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1688,7 +1641,6 @@ traitlets = ">=5" name = "nest-asyncio" version = "1.5.7" description = "Patch asyncio to allow nested event loops" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1700,7 +1652,6 @@ files = [ name = "numba" version = "0.57.1" description = "compiling Python code using LLVM" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1732,14 +1683,13 @@ files = [ [package.dependencies] importlib-metadata = {version = "*", markers = "python_version < \"3.9\""} -llvmlite = ">=0.40.0dev0,<0.41" +llvmlite = "==0.40.*" numpy = ">=1.21,<1.25" [[package]] name = "numpy" version = "1.24.4" description = "Fundamental package for array computing in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1777,7 +1727,6 @@ files = [ name = "packaging" version = "23.1" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1789,7 +1738,6 @@ files = [ name = "pandas" version = "1.5.3" description = "Powerful data structures for data analysis, time series, and statistics" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1825,7 +1773,7 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, ] python-dateutil = ">=2.8.1" @@ -1838,7 +1786,6 @@ test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] name = "pandocfilters" version = "1.5.0" description = "Utilities for writing pandoc filters in python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1850,7 +1797,6 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1866,7 +1812,6 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pdbpp" version = "0.10.3" description = "pdb++, a drop-in replacement for pdb" -category = "dev" optional = false python-versions = "*" files = [ @@ -1887,7 +1832,6 @@ testing = ["funcsigs", "pytest"] name = "pendulum" version = "2.1.2" description = "Python datetimes made easy" -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1922,7 +1866,6 @@ pytzdata = ">=2020.1" name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." -category = "main" optional = false python-versions = "*" files = [ @@ -1937,7 +1880,6 @@ ptyprocess = ">=0.5" name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" -category = "main" optional = false python-versions = "*" files = [ @@ -1947,68 +1889,65 @@ files = [ [[package]] name = "pillow" -version = "10.0.0" +version = "10.0.1" description = "Python Imaging Library (Fork)" -category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "Pillow-10.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1f62406a884ae75fb2f818694469519fb685cc7eaff05d3451a9ebe55c646891"}, - {file = "Pillow-10.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d5db32e2a6ccbb3d34d87c87b432959e0db29755727afb37290e10f6e8e62614"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf4392b77bdc81f36e92d3a07a5cd072f90253197f4a52a55a8cec48a12483b"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:520f2a520dc040512699f20fa1c363eed506e94248d71f85412b625026f6142c"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:8c11160913e3dd06c8ffdb5f233a4f254cb449f4dfc0f8f4549eda9e542c93d1"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a74ba0c356aaa3bb8e3eb79606a87669e7ec6444be352870623025d75a14a2bf"}, - {file = "Pillow-10.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d0dae4cfd56969d23d94dc8e89fb6a217be461c69090768227beb8ed28c0a3"}, - {file = "Pillow-10.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22c10cc517668d44b211717fd9775799ccec4124b9a7f7b3635fc5386e584992"}, - {file = "Pillow-10.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:dffe31a7f47b603318c609f378ebcd57f1554a3a6a8effbc59c3c69f804296de"}, - {file = "Pillow-10.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:9fb218c8a12e51d7ead2a7c9e101a04982237d4855716af2e9499306728fb485"}, - {file = "Pillow-10.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d35e3c8d9b1268cbf5d3670285feb3528f6680420eafe35cccc686b73c1e330f"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ed64f9ca2f0a95411e88a4efbd7a29e5ce2cea36072c53dd9d26d9c76f753b3"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b6eb5502f45a60a3f411c63187db83a3d3107887ad0d036c13ce836f8a36f1d"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:c1fbe7621c167ecaa38ad29643d77a9ce7311583761abf7836e1510c580bf3dd"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cd25d2a9d2b36fcb318882481367956d2cf91329f6892fe5d385c346c0649629"}, - {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3b08d4cc24f471b2c8ca24ec060abf4bebc6b144cb89cba638c720546b1cf538"}, - {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737a602fbd82afd892ca746392401b634e278cb65d55c4b7a8f48e9ef8d008d"}, - {file = "Pillow-10.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:3a82c40d706d9aa9734289740ce26460a11aeec2d9c79b7af87bb35f0073c12f"}, - {file = "Pillow-10.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:bc2ec7c7b5d66b8ec9ce9f720dbb5fa4bace0f545acd34870eff4a369b44bf37"}, - {file = "Pillow-10.0.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:d80cf684b541685fccdd84c485b31ce73fc5c9b5d7523bf1394ce134a60c6883"}, - {file = "Pillow-10.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76de421f9c326da8f43d690110f0e79fe3ad1e54be811545d7d91898b4c8493e"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ff539a12457809666fef6624684c008e00ff6bf455b4b89fd00a140eecd640"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce543ed15570eedbb85df19b0a1a7314a9c8141a36ce089c0a894adbfccb4568"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:685ac03cc4ed5ebc15ad5c23bc555d68a87777586d970c2c3e216619a5476223"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d72e2ecc68a942e8cf9739619b7f408cc7b272b279b56b2c83c6123fcfa5cdff"}, - {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d50b6aec14bc737742ca96e85d6d0a5f9bfbded018264b3b70ff9d8c33485551"}, - {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:00e65f5e822decd501e374b0650146063fbb30a7264b4d2744bdd7b913e0cab5"}, - {file = "Pillow-10.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:f31f9fdbfecb042d046f9d91270a0ba28368a723302786c0009ee9b9f1f60199"}, - {file = "Pillow-10.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:1ce91b6ec08d866b14413d3f0bbdea7e24dfdc8e59f562bb77bc3fe60b6144ca"}, - {file = "Pillow-10.0.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:349930d6e9c685c089284b013478d6f76e3a534e36ddfa912cde493f235372f3"}, - {file = "Pillow-10.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3a684105f7c32488f7153905a4e3015a3b6c7182e106fe3c37fbb5ef3e6994c3"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4f69b3700201b80bb82c3a97d5e9254084f6dd5fb5b16fc1a7b974260f89f43"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f07ea8d2f827d7d2a49ecf1639ec02d75ffd1b88dcc5b3a61bbb37a8759ad8d"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:040586f7d37b34547153fa383f7f9aed68b738992380ac911447bb78f2abe530"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:f88a0b92277de8e3ca715a0d79d68dc82807457dae3ab8699c758f07c20b3c51"}, - {file = "Pillow-10.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c7cf14a27b0d6adfaebb3ae4153f1e516df54e47e42dcc073d7b3d76111a8d86"}, - {file = "Pillow-10.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3400aae60685b06bb96f99a21e1ada7bc7a413d5f49bce739828ecd9391bb8f7"}, - {file = "Pillow-10.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:dbc02381779d412145331789b40cc7b11fdf449e5d94f6bc0b080db0a56ea3f0"}, - {file = "Pillow-10.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9211e7ad69d7c9401cfc0e23d49b69ca65ddd898976d660a2fa5904e3d7a9baa"}, - {file = "Pillow-10.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:faaf07ea35355b01a35cb442dd950d8f1bb5b040a7787791a535de13db15ed90"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9f72a021fbb792ce98306ffb0c348b3c9cb967dce0f12a49aa4c3d3fdefa967"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f7c16705f44e0504a3a2a14197c1f0b32a95731d251777dcb060aa83022cb2d"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:76edb0a1fa2b4745fb0c99fb9fb98f8b180a1bbceb8be49b087e0b21867e77d3"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:368ab3dfb5f49e312231b6f27b8820c823652b7cd29cfbd34090565a015e99ba"}, - {file = "Pillow-10.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:608bfdee0d57cf297d32bcbb3c728dc1da0907519d1784962c5f0c68bb93e5a3"}, - {file = "Pillow-10.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5c6e3df6bdd396749bafd45314871b3d0af81ff935b2d188385e970052091017"}, - {file = "Pillow-10.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:7be600823e4c8631b74e4a0d38384c73f680e6105a7d3c6824fcf226c178c7e6"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:92be919bbc9f7d09f7ae343c38f5bb21c973d2576c1d45600fce4b74bafa7ac0"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8182b523b2289f7c415f589118228d30ac8c355baa2f3194ced084dac2dbba"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:38250a349b6b390ee6047a62c086d3817ac69022c127f8a5dc058c31ccef17f3"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88af2003543cc40c80f6fca01411892ec52b11021b3dc22ec3bc9d5afd1c5334"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c189af0545965fa8d3b9613cfdb0cd37f9d71349e0f7750e1fd704648d475ed2"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce7b031a6fc11365970e6a5686d7ba8c63e4c1cf1ea143811acbb524295eabed"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:db24668940f82321e746773a4bc617bfac06ec831e5c88b643f91f122a785684"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:efe8c0681042536e0d06c11f48cebe759707c9e9abf880ee213541c5b46c5bf3"}, - {file = "Pillow-10.0.0.tar.gz", hash = "sha256:9c82b5b3e043c7af0d95792d0d20ccf68f61a1fec6b3530e718b688422727396"}, + {file = "Pillow-10.0.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:8f06be50669087250f319b706decf69ca71fdecd829091a37cc89398ca4dc17a"}, + {file = "Pillow-10.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50bd5f1ebafe9362ad622072a1d2f5850ecfa44303531ff14353a4059113b12d"}, + {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6a90167bcca1216606223a05e2cf991bb25b14695c518bc65639463d7db722d"}, + {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f11c9102c56ffb9ca87134bd025a43d2aba3f1155f508eff88f694b33a9c6d19"}, + {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:186f7e04248103482ea6354af6d5bcedb62941ee08f7f788a1c7707bc720c66f"}, + {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0462b1496505a3462d0f35dc1c4d7b54069747d65d00ef48e736acda2c8cbdff"}, + {file = "Pillow-10.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d889b53ae2f030f756e61a7bff13684dcd77e9af8b10c6048fb2c559d6ed6eaf"}, + {file = "Pillow-10.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:552912dbca585b74d75279a7570dd29fa43b6d93594abb494ebb31ac19ace6bd"}, + {file = "Pillow-10.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:787bb0169d2385a798888e1122c980c6eff26bf941a8ea79747d35d8f9210ca0"}, + {file = "Pillow-10.0.1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:fd2a5403a75b54661182b75ec6132437a181209b901446ee5724b589af8edef1"}, + {file = "Pillow-10.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2d7e91b4379f7a76b31c2dda84ab9e20c6220488e50f7822e59dac36b0cd92b1"}, + {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19e9adb3f22d4c416e7cd79b01375b17159d6990003633ff1d8377e21b7f1b21"}, + {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93139acd8109edcdeffd85e3af8ae7d88b258b3a1e13a038f542b79b6d255c54"}, + {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:92a23b0431941a33242b1f0ce6c88a952e09feeea9af4e8be48236a68ffe2205"}, + {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cbe68deb8580462ca0d9eb56a81912f59eb4542e1ef8f987405e35a0179f4ea2"}, + {file = "Pillow-10.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:522ff4ac3aaf839242c6f4e5b406634bfea002469656ae8358644fc6c4856a3b"}, + {file = "Pillow-10.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:84efb46e8d881bb06b35d1d541aa87f574b58e87f781cbba8d200daa835b42e1"}, + {file = "Pillow-10.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:898f1d306298ff40dc1b9ca24824f0488f6f039bc0e25cfb549d3195ffa17088"}, + {file = "Pillow-10.0.1-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:bcf1207e2f2385a576832af02702de104be71301c2696d0012b1b93fe34aaa5b"}, + {file = "Pillow-10.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d6c9049c6274c1bb565021367431ad04481ebb54872edecfcd6088d27edd6ed"}, + {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28444cb6ad49726127d6b340217f0627abc8732f1194fd5352dec5e6a0105635"}, + {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de596695a75496deb3b499c8c4f8e60376e0516e1a774e7bc046f0f48cd620ad"}, + {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:2872f2d7846cf39b3dbff64bc1104cc48c76145854256451d33c5faa55c04d1a"}, + {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4ce90f8a24e1c15465048959f1e94309dfef93af272633e8f37361b824532e91"}, + {file = "Pillow-10.0.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ee7810cf7c83fa227ba9125de6084e5e8b08c59038a7b2c9045ef4dde61663b4"}, + {file = "Pillow-10.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b1be1c872b9b5fcc229adeadbeb51422a9633abd847c0ff87dc4ef9bb184ae08"}, + {file = "Pillow-10.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:98533fd7fa764e5f85eebe56c8e4094db912ccbe6fbf3a58778d543cadd0db08"}, + {file = "Pillow-10.0.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:764d2c0daf9c4d40ad12fbc0abd5da3af7f8aa11daf87e4fa1b834000f4b6b0a"}, + {file = "Pillow-10.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fcb59711009b0168d6ee0bd8fb5eb259c4ab1717b2f538bbf36bacf207ef7a68"}, + {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:697a06bdcedd473b35e50a7e7506b1d8ceb832dc238a336bd6f4f5aa91a4b500"}, + {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f665d1e6474af9f9da5e86c2a3a2d2d6204e04d5af9c06b9d42afa6ebde3f21"}, + {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:2fa6dd2661838c66f1a5473f3b49ab610c98a128fc08afbe81b91a1f0bf8c51d"}, + {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:3a04359f308ebee571a3127fdb1bd01f88ba6f6fb6d087f8dd2e0d9bff43f2a7"}, + {file = "Pillow-10.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:723bd25051454cea9990203405fa6b74e043ea76d4968166dfd2569b0210886a"}, + {file = "Pillow-10.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:71671503e3015da1b50bd18951e2f9daf5b6ffe36d16f1eb2c45711a301521a7"}, + {file = "Pillow-10.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:44e7e4587392953e5e251190a964675f61e4dae88d1e6edbe9f36d6243547ff3"}, + {file = "Pillow-10.0.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:3855447d98cced8670aaa63683808df905e956f00348732448b5a6df67ee5849"}, + {file = "Pillow-10.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ed2d9c0704f2dc4fa980b99d565c0c9a543fe5101c25b3d60488b8ba80f0cce1"}, + {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5bb289bb835f9fe1a1e9300d011eef4d69661bb9b34d5e196e5e82c4cb09b37"}, + {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0d3e54ab1df9df51b914b2233cf779a5a10dfd1ce339d0421748232cea9876"}, + {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:2cc6b86ece42a11f16f55fe8903595eff2b25e0358dec635d0a701ac9586588f"}, + {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:ca26ba5767888c84bf5a0c1a32f069e8204ce8c21d00a49c90dabeba00ce0145"}, + {file = "Pillow-10.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f0b4b06da13275bc02adfeb82643c4a6385bd08d26f03068c2796f60d125f6f2"}, + {file = "Pillow-10.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bc2e3069569ea9dbe88d6b8ea38f439a6aad8f6e7a6283a38edf61ddefb3a9bf"}, + {file = "Pillow-10.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:8b451d6ead6e3500b6ce5c7916a43d8d8d25ad74b9102a629baccc0808c54971"}, + {file = "Pillow-10.0.1-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:32bec7423cdf25c9038fef614a853c9d25c07590e1a870ed471f47fb80b244db"}, + {file = "Pillow-10.0.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7cf63d2c6928b51d35dfdbda6f2c1fddbe51a6bc4a9d4ee6ea0e11670dd981e"}, + {file = "Pillow-10.0.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f6d3d4c905e26354e8f9d82548475c46d8e0889538cb0657aa9c6f0872a37aa4"}, + {file = "Pillow-10.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:847e8d1017c741c735d3cd1883fa7b03ded4f825a6e5fcb9378fd813edee995f"}, + {file = "Pillow-10.0.1-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:7f771e7219ff04b79e231d099c0a28ed83aa82af91fd5fa9fdb28f5b8d5addaf"}, + {file = "Pillow-10.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:459307cacdd4138edee3875bbe22a2492519e060660eaf378ba3b405d1c66317"}, + {file = "Pillow-10.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b059ac2c4c7a97daafa7dc850b43b2d3667def858a4f112d1aa082e5c3d6cf7d"}, + {file = "Pillow-10.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d6caf3cd38449ec3cd8a68b375e0c6fe4b6fd04edb6c9766b55ef84a6e8ddf2d"}, + {file = "Pillow-10.0.1.tar.gz", hash = "sha256:d72967b06be9300fed5cfbc8b5bafceec48bf7cdc7dab66b1d2549035287191d"}, ] [package.extras] @@ -2019,7 +1958,6 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa name = "pkgutil-resolve-name" version = "1.3.10" description = "Resolve a name to an object." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2031,7 +1969,6 @@ files = [ name = "platformdirs" version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2047,7 +1984,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co name = "pluggy" version = "1.2.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2063,7 +1999,6 @@ testing = ["pytest", "pytest-benchmark"] name = "prompt-toolkit" version = "3.0.39" description = "Library for building powerful interactive command lines in Python" -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -2078,7 +2013,6 @@ wcwidth = "*" name = "psutil" version = "5.9.5" description = "Cross-platform lib for process and system monitoring in Python." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2105,7 +2039,6 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -category = "main" optional = false python-versions = "*" files = [ @@ -2117,7 +2050,6 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" -category = "main" optional = false python-versions = "*" files = [ @@ -2132,7 +2064,6 @@ tests = ["pytest"] name = "pybtex" version = "0.24.0" description = "A BibTeX-compatible bibliography processor in Python" -category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" files = [ @@ -2152,7 +2083,6 @@ test = ["pytest"] name = "pybtex-docutils" version = "1.0.2" description = "A docutils backend for pybtex." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2168,7 +2098,6 @@ pybtex = ">=0.16" name = "pycparser" version = "2.21" description = "C parser in Python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2180,7 +2109,6 @@ files = [ name = "pygments" version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2195,7 +2123,6 @@ plugins = ["importlib-metadata"] name = "pylint" version = "2.17.5" description = "python code static checker" -category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -2225,7 +2152,6 @@ testutils = ["gitpython (>3)"] name = "pyparsing" version = "3.0.9" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" optional = true python-versions = ">=3.6.8" files = [ @@ -2240,7 +2166,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyreadline" version = "2.1" description = "A python implmementation of GNU readline." -category = "dev" optional = false python-versions = "*" files = [ @@ -2251,7 +2176,6 @@ files = [ name = "pyrepl" version = "0.9.0" description = "A library for building flexible command line interfaces" -category = "dev" optional = false python-versions = "*" files = [ @@ -2262,7 +2186,6 @@ files = [ name = "pytest" version = "7.4.0" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2285,7 +2208,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-cov" version = "4.0.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2304,7 +2226,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "pytest-env" version = "0.6.2" description = "py.test plugin that allows you to add environment variables." -category = "dev" optional = false python-versions = "*" files = [ @@ -2318,7 +2239,6 @@ pytest = ">=2.6.0" name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -2333,7 +2253,6 @@ six = ">=1.5" name = "pytz" version = "2023.3" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ @@ -2345,7 +2264,6 @@ files = [ name = "pytzdata" version = "2020.1" description = "The Olson timezone database for Python." -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2357,7 +2275,6 @@ files = [ name = "pywin32" version = "306" description = "Python for Window Extensions" -category = "dev" optional = false python-versions = "*" files = [ @@ -2381,7 +2298,6 @@ files = [ name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2390,6 +2306,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -2397,8 +2314,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -2415,6 +2339,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -2422,6 +2347,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -2431,7 +2357,6 @@ files = [ name = "pyzmq" version = "25.1.1" description = "Python bindings for 0MQ" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2537,7 +2462,6 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} name = "referencing" version = "0.30.2" description = "JSON Referencing + Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2553,7 +2477,6 @@ rpds-py = ">=0.7.0" name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2575,7 +2498,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "rich" version = "12.6.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -category = "main" optional = true python-versions = ">=3.6.3,<4.0.0" files = [ @@ -2595,7 +2517,6 @@ jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] name = "rpds-py" version = "0.9.2" description = "Python bindings to Rust's persistent data structures (rpds)" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2702,7 +2623,6 @@ files = [ name = "scipy" version = "1.10.1" description = "Fundamental algorithms for scientific computing in Python" -category = "main" optional = false python-versions = "<3.12,>=3.8" files = [ @@ -2741,7 +2661,6 @@ test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeo name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2753,7 +2672,6 @@ files = [ name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "dev" optional = false python-versions = "*" files = [ @@ -2765,7 +2683,6 @@ files = [ name = "soupsieve" version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2777,7 +2694,6 @@ files = [ name = "sphinx" version = "4.5.0" description = "Python documentation generator" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2813,7 +2729,6 @@ test = ["cython", "html5lib", "pytest", "pytest-cov", "typed-ast"] name = "sphinx-rtd-theme" version = "1.2.2" description = "Read the Docs theme for Sphinx" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -2833,7 +2748,6 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] name = "sphinxcontrib-applehelp" version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2849,7 +2763,6 @@ test = ["pytest"] name = "sphinxcontrib-bibtex" version = "2.5.0" description = "Sphinx extension for BibTeX style citations." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2868,7 +2781,6 @@ Sphinx = ">=2.1" name = "sphinxcontrib-devhelp" version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2884,7 +2796,6 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2900,7 +2811,6 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jquery" version = "4.1" description = "Extension to include jQuery on newer Sphinx releases" -category = "dev" optional = false python-versions = ">=2.7" files = [ @@ -2915,7 +2825,6 @@ Sphinx = ">=1.8" name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2930,7 +2839,6 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2946,7 +2854,6 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2962,7 +2869,6 @@ test = ["pytest"] name = "sqlalchemy" version = "1.4.49" description = "Database Abstraction Library" -category = "main" optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -2970,6 +2876,7 @@ files = [ {file = "SQLAlchemy-1.4.49-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:03db81b89fe7ef3857b4a00b63dedd632d6183d4ea5a31c5d8a92e000a41fc71"}, {file = "SQLAlchemy-1.4.49-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:95b9df9afd680b7a3b13b38adf6e3a38995da5e162cc7524ef08e3be4e5ed3e1"}, {file = "SQLAlchemy-1.4.49-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a63e43bf3f668c11bb0444ce6e809c1227b8f067ca1068898f3008a273f52b09"}, + {file = "SQLAlchemy-1.4.49-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca46de16650d143a928d10842939dab208e8d8c3a9a8757600cae9b7c579c5cd"}, {file = "SQLAlchemy-1.4.49-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f835c050ebaa4e48b18403bed2c0fda986525896efd76c245bdd4db995e51a4c"}, {file = "SQLAlchemy-1.4.49-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c21b172dfb22e0db303ff6419451f0cac891d2e911bb9fbf8003d717f1bcf91"}, {file = "SQLAlchemy-1.4.49-cp310-cp310-win32.whl", hash = "sha256:5fb1ebdfc8373b5a291485757bd6431de8d7ed42c27439f543c81f6c8febd729"}, @@ -2979,26 +2886,35 @@ files = [ {file = "SQLAlchemy-1.4.49-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5debe7d49b8acf1f3035317e63d9ec8d5e4d904c6e75a2a9246a119f5f2fdf3d"}, {file = "SQLAlchemy-1.4.49-cp311-cp311-win32.whl", hash = "sha256:82b08e82da3756765c2e75f327b9bf6b0f043c9c3925fb95fb51e1567fa4ee87"}, {file = "SQLAlchemy-1.4.49-cp311-cp311-win_amd64.whl", hash = "sha256:171e04eeb5d1c0d96a544caf982621a1711d078dbc5c96f11d6469169bd003f1"}, + {file = "SQLAlchemy-1.4.49-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f23755c384c2969ca2f7667a83f7c5648fcf8b62a3f2bbd883d805454964a800"}, + {file = "SQLAlchemy-1.4.49-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8396e896e08e37032e87e7fbf4a15f431aa878c286dc7f79e616c2feacdb366c"}, + {file = "SQLAlchemy-1.4.49-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66da9627cfcc43bbdebd47bfe0145bb662041472393c03b7802253993b6b7c90"}, + {file = "SQLAlchemy-1.4.49-cp312-cp312-win32.whl", hash = "sha256:9a06e046ffeb8a484279e54bda0a5abfd9675f594a2e38ef3133d7e4d75b6214"}, + {file = "SQLAlchemy-1.4.49-cp312-cp312-win_amd64.whl", hash = "sha256:7cf8b90ad84ad3a45098b1c9f56f2b161601e4670827d6b892ea0e884569bd1d"}, {file = "SQLAlchemy-1.4.49-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:36e58f8c4fe43984384e3fbe6341ac99b6b4e083de2fe838f0fdb91cebe9e9cb"}, {file = "SQLAlchemy-1.4.49-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b31e67ff419013f99ad6f8fc73ee19ea31585e1e9fe773744c0f3ce58c039c30"}, + {file = "SQLAlchemy-1.4.49-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc22807a7e161c0d8f3da34018ab7c97ef6223578fcdd99b1d3e7ed1100a5db"}, {file = "SQLAlchemy-1.4.49-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c14b29d9e1529f99efd550cd04dbb6db6ba5d690abb96d52de2bff4ed518bc95"}, {file = "SQLAlchemy-1.4.49-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c40f3470e084d31247aea228aa1c39bbc0904c2b9ccbf5d3cfa2ea2dac06f26d"}, {file = "SQLAlchemy-1.4.49-cp36-cp36m-win32.whl", hash = "sha256:706bfa02157b97c136547c406f263e4c6274a7b061b3eb9742915dd774bbc264"}, {file = "SQLAlchemy-1.4.49-cp36-cp36m-win_amd64.whl", hash = "sha256:a7f7b5c07ae5c0cfd24c2db86071fb2a3d947da7bd487e359cc91e67ac1c6d2e"}, {file = "SQLAlchemy-1.4.49-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:4afbbf5ef41ac18e02c8dc1f86c04b22b7a2125f2a030e25bbb4aff31abb224b"}, {file = "SQLAlchemy-1.4.49-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24e300c0c2147484a002b175f4e1361f102e82c345bf263242f0449672a4bccf"}, + {file = "SQLAlchemy-1.4.49-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:393cd06c3b00b57f5421e2133e088df9cabcececcea180327e43b937b5a7caa5"}, {file = "SQLAlchemy-1.4.49-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:201de072b818f8ad55c80d18d1a788729cccf9be6d9dc3b9d8613b053cd4836d"}, {file = "SQLAlchemy-1.4.49-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7653ed6817c710d0c95558232aba799307d14ae084cc9b1f4c389157ec50df5c"}, {file = "SQLAlchemy-1.4.49-cp37-cp37m-win32.whl", hash = "sha256:647e0b309cb4512b1f1b78471fdaf72921b6fa6e750b9f891e09c6e2f0e5326f"}, {file = "SQLAlchemy-1.4.49-cp37-cp37m-win_amd64.whl", hash = "sha256:ab73ed1a05ff539afc4a7f8cf371764cdf79768ecb7d2ec691e3ff89abbc541e"}, {file = "SQLAlchemy-1.4.49-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:37ce517c011560d68f1ffb28af65d7e06f873f191eb3a73af5671e9c3fada08a"}, {file = "SQLAlchemy-1.4.49-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1878ce508edea4a879015ab5215546c444233881301e97ca16fe251e89f1c55"}, + {file = "SQLAlchemy-1.4.49-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95ab792ca493891d7a45a077e35b418f68435efb3e1706cb8155e20e86a9013c"}, {file = "SQLAlchemy-1.4.49-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e8e608983e6f85d0852ca61f97e521b62e67969e6e640fe6c6b575d4db68557"}, {file = "SQLAlchemy-1.4.49-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccf956da45290df6e809ea12c54c02ace7f8ff4d765d6d3dfb3655ee876ce58d"}, {file = "SQLAlchemy-1.4.49-cp38-cp38-win32.whl", hash = "sha256:f167c8175ab908ce48bd6550679cc6ea20ae169379e73c7720a28f89e53aa532"}, {file = "SQLAlchemy-1.4.49-cp38-cp38-win_amd64.whl", hash = "sha256:45806315aae81a0c202752558f0df52b42d11dd7ba0097bf71e253b4215f34f4"}, {file = "SQLAlchemy-1.4.49-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:b6d0c4b15d65087738a6e22e0ff461b407533ff65a73b818089efc8eb2b3e1de"}, {file = "SQLAlchemy-1.4.49-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a843e34abfd4c797018fd8d00ffffa99fd5184c421f190b6ca99def4087689bd"}, + {file = "SQLAlchemy-1.4.49-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:738d7321212941ab19ba2acf02a68b8ee64987b248ffa2101630e8fccb549e0d"}, {file = "SQLAlchemy-1.4.49-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1c890421651b45a681181301b3497e4d57c0d01dc001e10438a40e9a9c25ee77"}, {file = "SQLAlchemy-1.4.49-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d26f280b8f0a8f497bc10573849ad6dc62e671d2468826e5c748d04ed9e670d5"}, {file = "SQLAlchemy-1.4.49-cp39-cp39-win32.whl", hash = "sha256:ec2268de67f73b43320383947e74700e95c6770d0c68c4e615e9897e46296294"}, @@ -3007,7 +2923,7 @@ files = [ ] [package.dependencies] -greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and platform_machine == \"aarch64\" or python_version >= \"3\" and platform_machine == \"ppc64le\" or python_version >= \"3\" and platform_machine == \"x86_64\" or python_version >= \"3\" and platform_machine == \"amd64\" or python_version >= \"3\" and platform_machine == \"AMD64\" or python_version >= \"3\" and platform_machine == \"win32\" or python_version >= \"3\" and platform_machine == \"WIN32\""} +greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} [package.extras] aiomysql = ["aiomysql", "greenlet (!=0.4.17)"] @@ -3034,7 +2950,6 @@ sqlcipher = ["sqlcipher3-binary"] name = "stack-data" version = "0.6.2" description = "Extract data from python stack frames and tracebacks for informative displays" -category = "main" optional = false python-versions = "*" files = [ @@ -3054,7 +2969,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "tinycss2" version = "1.2.1" description = "A tiny CSS parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3073,7 +2987,6 @@ test = ["flake8", "isort", "pytest"] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3085,7 +2998,6 @@ files = [ name = "tomlkit" version = "0.12.1" description = "Style preserving TOML library" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3097,7 +3009,6 @@ files = [ name = "tornado" version = "6.3.3" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "dev" optional = false python-versions = ">= 3.8" files = [ @@ -3118,7 +3029,6 @@ files = [ name = "traitlets" version = "5.9.0" description = "Traitlets Python configuration system" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3134,7 +3044,6 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] name = "typing-extensions" version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3144,14 +3053,13 @@ files = [ [[package]] name = "urllib3" -version = "2.0.4" +version = "2.0.7" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, - {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, + {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, + {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, ] [package.extras] @@ -3164,7 +3072,6 @@ zstd = ["zstandard (>=0.18.0)"] name = "virtualenv" version = "20.23.0" description = "Virtual Python Environment builder" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3185,7 +3092,6 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess name = "wcwidth" version = "0.2.6" description = "Measures the displayed width of unicode strings in a terminal" -category = "main" optional = false python-versions = "*" files = [ @@ -3197,7 +3103,6 @@ files = [ name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" -category = "dev" optional = false python-versions = "*" files = [ @@ -3209,7 +3114,6 @@ files = [ name = "wmctrl" version = "0.4" description = "A tool to programmatically control windows inside X" -category = "dev" optional = false python-versions = "*" files = [ @@ -3220,7 +3124,6 @@ files = [ name = "wrapt" version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -3305,7 +3208,6 @@ files = [ name = "zipp" version = "3.16.2" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.8" files = [ diff --git a/src/eko/basis_rotation.py b/src/eko/basis_rotation.py index 4b972592c..e31a7beb6 100644 --- a/src/eko/basis_rotation.py +++ b/src/eko/basis_rotation.py @@ -275,7 +275,7 @@ } -def ad_projector(ad_lab, nf, qed=False): +def ad_projector(ad_lab, nf, qed): """ Build a projector (as a numpy array) for the given anomalous dimension sector. @@ -355,7 +355,7 @@ def select_light_flavors_uni_ev(ad_lab, nf): return map_ad_to_evolution[ad_lab] -def ad_projectors(nf, qed=False): +def ad_projectors(nf, qed): """ Build projectors tensor (as a numpy array), collecting all the individual sector projectors. diff --git a/src/eko/evolution_operator/__init__.py b/src/eko/evolution_operator/__init__.py index eab3c64de..29e67c19c 100644 --- a/src/eko/evolution_operator/__init__.py +++ b/src/eko/evolution_operator/__init__.py @@ -307,6 +307,7 @@ def quad_ker( ev_op_max_order, sv_mode, is_threshold, + n3lo_ad_variation, ) # recombine everything @@ -450,6 +451,7 @@ def quad_ker_qed( ev_op_max_order, sv_mode, is_threshold, + n3lo_ad_variation, ): """Raw evolution kernel inside quad. @@ -489,6 +491,8 @@ def quad_ker_qed( scale variation mode, see `eko.scale_variations.Modes` is_threshold : boolean is this an itermediate threshold operator? + n3lo_ad_variation : tuple + |N3LO| anomalous dimension variation ``(gg_var, gq_var, qg_var, qq_var)`` Returns ------- @@ -497,7 +501,7 @@ def quad_ker_qed( """ # compute the actual evolution kernel for QEDxQCD if ker_base.is_QEDsinglet: - gamma_s = ad_us.gamma_singlet_qed(order, ker_base.n, nf) + gamma_s = ad_us.gamma_singlet_qed(order, ker_base.n, nf, n3lo_ad_variation) # scale var exponentiated is directly applied on gamma if sv_mode == sv.Modes.exponentiated: gamma_s = sv.exponentiated.gamma_variation_qed( @@ -622,7 +626,7 @@ def __init__( self.alphaem_running = self.managers["couplings"].alphaem_running if self.log_label == "Evolution": self.a = self.compute_a() - self.compute_aem_list() + self.as_list, self.a_half_list = self.compute_aem_list() @property def n_pools(self): @@ -697,8 +701,8 @@ def compute_aem_list(self): """ ev_op_iterations = self.config["ev_op_iterations"] if self.order[1] == 0: - self.as_list = np.array([self.a_s[0], self.a_s[1]]) - self.a_half_list = np.zeros((ev_op_iterations, 2)) + as_list = np.array([self.a_s[0], self.a_s[1]]) + a_half = np.zeros((ev_op_iterations, 2)) else: as0 = self.a_s[0] as1 = self.a_s[1] @@ -718,7 +722,7 @@ def compute_aem_list(self): couplings = self.managers["couplings"] mu2_steps = utils.geomspace(self.q2_from, self.q2_to, 1 + ev_op_iterations) mu2_l = mu2_steps[0] - self.as_list = np.array( + as_list = np.array( [ couplings.compute( a_ref=a_start, nf=self.nf, scale_from=mu2_start, scale_to=mu2 @@ -734,7 +738,7 @@ def compute_aem_list(self): ) a_half[step] = [a_s, aem] mu2_l = mu2_h - self.a_half_list = a_half + return as_list, a_half @property def labels(self): diff --git a/src/eko/evolution_operator/flavors.py b/src/eko/evolution_operator/flavors.py index 7ad7b5801..fac94a608 100644 --- a/src/eko/evolution_operator/flavors.py +++ b/src/eko/evolution_operator/flavors.py @@ -52,7 +52,7 @@ def pids_from_intrinsic_evol(label, nf, normalize): return weights -def get_range(evol_labels, qed=False): +def get_range(evol_labels, qed): """Determine the number of light and heavy flavors participating in the input and output. Here, we assume that the T distributions (e.g. T15) appears *always* @@ -73,7 +73,7 @@ def get_range(evol_labels, qed=False): nf_in = 3 nf_out = 3 - def update(label, qed=False): + def update(label, qed): nf = 3 if label[0] == "T": if not qed: @@ -129,7 +129,7 @@ def rotate_pm_to_flavor(label): return l -def rotate_matching(nf, qed=False, inverse=False): +def rotate_matching(nf, qed, inverse=False): """Rotation between matching basis (with e.g. S,g,...V8 and c+,c-) and new true evolution basis (with S,g,...V8,T15,V15). Parameters @@ -206,7 +206,7 @@ def rotate_matching(nf, qed=False, inverse=False): return l -def rotate_matching_inverse(nf, qed=False): +def rotate_matching_inverse(nf, qed): """Inverse rotation between matching basis (with e.g. S,g,...V8 and c+,c-) and new true evolution basis (with S,g,...V8,T15,V15). Parameters diff --git a/src/eko/evolution_operator/grid.py b/src/eko/evolution_operator/grid.py index ca8a46d51..3e066a6de 100644 --- a/src/eko/evolution_operator/grid.py +++ b/src/eko/evolution_operator/grid.py @@ -54,6 +54,7 @@ def __init__( intrinsic_flavors: list, xif: float, n3lo_ad_variation: tuple, + matching_order: Order, configs: Configs, debug: Debug, atlas: Atlas, @@ -81,6 +82,7 @@ def __init__( config["debug_skip_non_singlet"] = debug.skip_non_singlet config["polarized"] = configs.polarized config["time_like"] = configs.time_like + config["matching_order"] = matching_order if order == (1, 0) and method != "iterate-exact": logger.warning("Evolution: In LO we use the exact solution always!") diff --git a/src/eko/evolution_operator/matching_condition.py b/src/eko/evolution_operator/matching_condition.py index 059617fbf..8df4775ff 100644 --- a/src/eko/evolution_operator/matching_condition.py +++ b/src/eko/evolution_operator/matching_condition.py @@ -21,7 +21,7 @@ def split_ad_to_evol_map( nf, q2_thr, intrinsic_range, - qed=False, + qed, ): """ Create the instance from the |OME|. diff --git a/src/eko/evolution_operator/operator_matrix_element.py b/src/eko/evolution_operator/operator_matrix_element.py index 5696ead19..1a287b9aa 100644 --- a/src/eko/evolution_operator/operator_matrix_element.py +++ b/src/eko/evolution_operator/operator_matrix_element.py @@ -185,8 +185,12 @@ class OperatorMatrixElement(Operator): configuration managers : dict managers - segment: Segment - path segment + nf: int + number of active flavor below threshold + q2: float + squared matching scale + is_backward: bool + True for backward matching L: float :math:`\ln(\mu_F^2 / m_h^2)` is_msbar: bool @@ -220,7 +224,7 @@ def __init__(self, config, managers, nf, q2, is_backward, L, is_msbar): self.L = L self.is_msbar = is_msbar # Note for the moment only QCD matching is implemented - self.order = (self.order[0] - 1, self.order[1]) + self.order = tuple(config["matching_order"]) @property def labels(self): diff --git a/src/eko/evolution_operator/physical.py b/src/eko/evolution_operator/physical.py index c963e2a26..1ee501a2a 100644 --- a/src/eko/evolution_operator/physical.py +++ b/src/eko/evolution_operator/physical.py @@ -22,7 +22,7 @@ class PhysicalOperator(member.OperatorBase): """ @classmethod - def ad_to_evol_map(cls, op_members, nf, q2_final, intrinsic_range, qed=False): + def ad_to_evol_map(cls, op_members, nf, q2_final, intrinsic_range, qed): """ Obtain map between the 3-dimensional anomalous dimension basis and the 4-dimensional evolution basis. diff --git a/src/eko/io/items.py b/src/eko/io/items.py index 1846602c9..cbc7591e0 100644 --- a/src/eko/io/items.py +++ b/src/eko/io/items.py @@ -86,17 +86,17 @@ class Matching(Header): scale: SquaredScale hq: FlavorIndex - inverse: bool = False + inverse: bool @classmethod - def from_atlas(cls, matching: matchings.Matching, inverse: bool = False): + def from_atlas(cls, matching: matchings.Matching): """Create instance from analogous :class:`eko.matchings.Atlas` object.""" - return cls(**asdict(matching), inverse=inverse) + return cls(**asdict(matching)) @property def as_atlas(self) -> matchings.Matching: """The associated segment.""" - return matchings.Matching(self.scale, self.hq) + return matchings.Matching(self.scale, self.hq, self.inverse) Recipe = Union[Evolution, Matching] diff --git a/src/eko/io/runcards.py b/src/eko/io/runcards.py index 41aef9445..7dbbe2b34 100644 --- a/src/eko/io/runcards.py +++ b/src/eko/io/runcards.py @@ -49,6 +49,8 @@ class TheoryCard(DictLike): """Ratio between factorization scale and process scale.""" n3lo_ad_variation: N3LOAdVariation """|N3LO| anomalous dimension variation: ``(gg_var, gq_var, qg_var, qq_var)``.""" + matching_order: Optional[Order] = None + """Matching conditions perturbative order tuple, ``(QCD, QED)``.""" @dataclass @@ -210,6 +212,8 @@ def new_theory(self): new["xif"] = old["XIF"] new["n3lo_ad_variation"] = old.get("n3lo_ad_variation", (0, 0, 0, 0)) + # here PTO: 0 means truly LO, no QED matching is available so far. + new["matching_order"] = old.get("PTO_matching", [old["PTO"], 0]) return TheoryCard.from_dict(new) diff --git a/src/eko/kernels/non_singlet.py b/src/eko/kernels/non_singlet.py index 24706a794..23b2ab47a 100644 --- a/src/eko/kernels/non_singlet.py +++ b/src/eko/kernels/non_singlet.py @@ -186,7 +186,7 @@ def nnlo_expanded(gamma_ns, a1, a0, beta): @nb.njit(cache=True) -def n3lo_expanded(gamma_ns, a1, a0, nf): +def n3lo_expanded(gamma_ns, a1, a0, beta): """|N3LO| non-singlet expanded EKO. Parameters @@ -206,12 +206,8 @@ def n3lo_expanded(gamma_ns, a1, a0, nf): |N3LO| non-singlet expanded EKO """ - beta0 = beta.beta_qcd((2, 0), nf) - b_list = [ - beta.b_qcd((3, 0), nf), - beta.b_qcd((4, 0), nf), - beta.b_qcd((5, 0), nf), - ] + beta0 = beta[0] + b_list = [betas / beta0 for betas in beta[1:]] j12 = ei.j12(a1, a0, beta0) j13 = as4_ei.j13_expanded(a1, a0, beta0, b_list) j23 = as4_ei.j23_expanded(a1, a0, beta0, b_list) @@ -225,7 +221,7 @@ def n3lo_expanded(gamma_ns, a1, a0, nf): @nb.njit(cache=True) -def n3lo_exact(gamma_ns, a1, a0, nf): +def n3lo_exact(gamma_ns, a1, a0, beta): """|N3LO| non-singlet exact EKO. Parameters @@ -245,12 +241,8 @@ def n3lo_exact(gamma_ns, a1, a0, nf): |N3LO| non-singlet exact EKO """ - beta0 = beta.beta_qcd((2, 0), nf) - b_list = [ - beta.b_qcd((3, 0), nf), - beta.b_qcd((4, 0), nf), - beta.b_qcd((5, 0), nf), - ] + beta0 = beta[0] + b_list = [betas / beta0 for betas in beta[1:]] roots = as4_ei.roots(b_list) j12 = ei.j12(a1, a0, beta0) j13 = as4_ei.j13_exact(a1, a0, beta0, b_list, roots) @@ -420,6 +412,6 @@ def dispatcher( "decompose-expanded", "perturbative-expanded", ]: - return n3lo_expanded(gamma_ns, a1, a0, nf) - return n3lo_exact(gamma_ns, a1, a0, nf) + return n3lo_expanded(gamma_ns, a1, a0, betalist) + return n3lo_exact(gamma_ns, a1, a0, betalist) raise NotImplementedError("Selected order is not implemented") diff --git a/src/eko/kernels/non_singlet_qed.py b/src/eko/kernels/non_singlet_qed.py index 86ec1a9ff..36d4d3c35 100644 --- a/src/eko/kernels/non_singlet_qed.py +++ b/src/eko/kernels/non_singlet_qed.py @@ -120,6 +120,29 @@ def as3_exact(gamma_ns, a1, a0, beta): return ns.nnlo_exact(gamma_ns, a1, a0, beta) +@nb.njit(cache=True) +def as4_exact(gamma_ns, a1, a0, beta): + """O(as3aem1) non-singlet exact EKO. + + Parameters + ---------- + gamma_ns : numpy.ndarray + non-singlet anomalous dimensions + a1 : float + target coupling value + a0 : float + initial coupling value + beta : list + list of the values of the beta functions + + Returns + ------- + e_ns^3 : complex + O(as4aem1) non-singlet exact EKO + """ + return ns.n3lo_exact(gamma_ns, a1, a0, beta) + + @nb.njit(cache=True) def dispatcher( order, @@ -216,6 +239,8 @@ def fixed_alphaem_exact(order, gamma_ns, a1, a0, aem, nf, mu2_from, mu2_to): qcd_only = as2_exact(gamma_ns_list[1:], a1, a0, betalist) elif order[0] == 3: qcd_only = as3_exact(gamma_ns_list[1:], a1, a0, betalist) + elif order[0] == 4: + qcd_only = as4_exact(gamma_ns_list[1:], a1, a0, betalist) else: raise NotImplementedError("Selected order is not implemented") return qcd_only * apply_qed(gamma_ns_list[0], mu2_from, mu2_to) diff --git a/src/eko/matchings.py b/src/eko/matchings.py index 20d552726..0dfcae24f 100644 --- a/src/eko/matchings.py +++ b/src/eko/matchings.py @@ -47,6 +47,7 @@ class Matching: scale: SquaredScale hq: FlavorIndex + inverse: bool MatchedPath = List[Union[Segment, Matching]] @@ -157,11 +158,12 @@ def matched_path(self, target: EPoint) -> MatchedPath: """ path = self.path(target) + inverse = is_downward_path(path) prev = path[0] matched: MatchedPath = [prev] for seg in path[1:]: - matching = Matching(prev.target, max(prev.nf, seg.nf)) + matching = Matching(prev.target, max(prev.nf, seg.nf), inverse) matched.append(matching) matched.append(seg) diff --git a/src/eko/member.py b/src/eko/member.py index f03b0e9b4..edf8f89a3 100644 --- a/src/eko/member.py +++ b/src/eko/member.py @@ -266,7 +266,7 @@ def operator_multiply(left, right, operation): new_oms[new_key] += operation(l_op, r_op) return new_oms - def to_flavor_basis_tensor(self, qed: bool = False): + def to_flavor_basis_tensor(self, qed: bool): """Convert the computations into an rank 4 tensor. A sparse tensor defined with dot-notation (e.g. ``S.g``) is converted diff --git a/src/eko/runner/legacy.py b/src/eko/runner/legacy.py index c964c3415..991ec2bd0 100644 --- a/src/eko/runner/legacy.py +++ b/src/eko/runner/legacy.py @@ -77,6 +77,7 @@ def __init__( couplings=cs, interpol_dispatcher=bfd, n3lo_ad_variation=new_theory.n3lo_ad_variation, + matching_order=new_theory.matching_order, ) with EKO.create(path) as builder: diff --git a/src/eko/runner/parts.py b/src/eko/runner/parts.py index e385b8f49..67d2cda18 100644 --- a/src/eko/runner/parts.py +++ b/src/eko/runner/parts.py @@ -88,6 +88,10 @@ def evolve_configs(eko: EKO) -> dict: n_integration_cores=ocard.configs.n_integration_cores, ModSV=ocard.configs.scvar_method, n3lo_ad_variation=tcard.n3lo_ad_variation, + # Here order is shifted by one, no QED matching is available so far. + matching_order=tcard.matching_order + if tcard.matching_order is not None + else (tcard.order[0] - 1, 0), ) @@ -149,9 +153,8 @@ def match(eko: EKO, recipe: Matching) -> Operator: op.compute() binfo = blowup_info(eko) - nf_match = op.nf - 1 if recipe.inverse else op.nf res, err = matching_condition.MatchingCondition.split_ad_to_evol_map( - op.op_members, nf_match, recipe.scale, **binfo + op.op_members, op.nf, recipe.scale, **binfo ).to_flavor_basis_tensor(qed=binfo["qed"]) return Operator(res, err) diff --git a/src/ekobox/apply.py b/src/ekobox/apply.py index c392ffe78..336900798 100644 --- a/src/ekobox/apply.py +++ b/src/ekobox/apply.py @@ -12,7 +12,6 @@ def apply_pdf( lhapdf_like, targetgrid=None, rotate_to_evolution_basis=False, - qed=False, ): """ Apply all available operators to the input PDFs. @@ -34,13 +33,16 @@ def apply_pdf( out_grid : dict output PDFs and their associated errors for the computed mu2grid """ + qed = eko.theory_card.order[1] > 0 if rotate_to_evolution_basis: if not qed: rotate_flavor_to_evolution = br.rotate_flavor_to_evolution + labels = br.evol_basis else: rotate_flavor_to_evolution = br.rotate_flavor_to_unified_evolution + labels = br.unified_evol_basis return apply_pdf_flavor( - eko, lhapdf_like, targetgrid, rotate_flavor_to_evolution, qed + eko, lhapdf_like, targetgrid, rotate_flavor_to_evolution, labels=labels ) return apply_pdf_flavor(eko, lhapdf_like, targetgrid) @@ -49,7 +51,7 @@ def apply_pdf( def apply_pdf_flavor( - eko: EKO, lhapdf_like, targetgrid=None, flavor_rotation=None, qed=False + eko: EKO, lhapdf_like, targetgrid=None, flavor_rotation=None, labels=None ): """ Apply all available operators to the input PDFs. @@ -65,8 +67,8 @@ def apply_pdf_flavor( if given, interpolates to the pdfs given at targetgrid (instead of xgrid) flavor_rotation : np.ndarray Rotation matrix in flavor space - qed : bool - activate qed + labels : list + list of labels Returns ------- @@ -97,22 +99,21 @@ def apply_pdf_flavor( if error_final is not None: out_grid[ep]["errors"] = dict(zip(eko.bases.targetpids, error_final)) + qed = eko.theory_card.order[1] > 0 # rotate to evolution basis if flavor_rotation is not None: for q2, op in out_grid.items(): pdf = flavor_rotation @ np.array( [op["pdfs"][pid] for pid in br.flavor_basis_pids] ) - if not qed: - evol_basis = br.evol_basis - else: - evol_basis = br.unified_evol_basis - op["pdfs"] = dict(zip(evol_basis, pdf)) + if labels is None: + labels = list(range(flavor_rotation.shape[0])) + op["pdfs"] = dict(zip(labels, pdf)) if op["errors"] is not None: errors = flavor_rotation @ np.array( [op["errors"][pid] for pid in br.flavor_basis_pids] ) - op["errors"] = dict(zip(evol_basis, errors)) + op["errors"] = dict(zip(labels, errors)) # rotate/interpolate to target grid if targetgrid is not None: diff --git a/src/ekobox/cards.py b/src/ekobox/cards.py index 474e7d931..559790d30 100644 --- a/src/ekobox/cards.py +++ b/src/ekobox/cards.py @@ -27,6 +27,7 @@ ), xif=1.0, n3lo_ad_variation=(0, 0, 0, 0), + matching_order=[0, 0], ) _operator = dict( diff --git a/src/ekobox/evol_pdf.py b/src/ekobox/evol_pdf.py index e6c765187..49cda53b6 100644 --- a/src/ekobox/evol_pdf.py +++ b/src/ekobox/evol_pdf.py @@ -1,5 +1,6 @@ """Tools to evolve actual PDFs.""" import pathlib +from collections import defaultdict import numpy as np @@ -57,6 +58,7 @@ def evolve_pdfs( eko.solve(theory_card, operators_card, path=store_path) eko_path = store_path + # apply PDF to eko evolved_PDF_list = [] with EKO.read(eko_path) as eko_output: for initial_PDF in initial_PDF_list: @@ -64,6 +66,7 @@ def evolve_pdfs( apply.apply_pdf(eko_output, initial_PDF, targetgrid) ) + # update info file if targetgrid is None: targetgrid = operators_card.xgrid if info_update is None: @@ -76,29 +79,58 @@ def evolve_pdfs( len(evolved_PDF_list), info_update=info_update, ) + + # separate by nf the evolgrid (and order per nf/q) + q2block_per_nf = regroup_evolgrid(eko_output.evolgrid) + + # write all replicas all_member_blocks = [] - targetlist = targetgrid.raw.tolist() for evolved_PDF in evolved_PDF_list: - all_blocks = [] - evolved_PDF_q2 = {q2: val for (q2, _), val in evolved_PDF.items()} - sorted_q2grid = [ - float(q2) for q2, _ in np.sort(operators_card.evolgrid, axis=0) - ] - block = genpdf.generate_block( - lambda pid, x, Q2, evolved_PDF=evolved_PDF_q2: targetlist[ - targetlist.index(x) - ] - * evolved_PDF[Q2]["pdfs"][pid][targetlist.index(x)], - xgrid=targetlist, - sorted_q2grid=sorted_q2grid, - pids=np.array(br.flavor_basis_pids), + all_blocks = collect_blocks( + evolved_PDF, q2block_per_nf, targetgrid.raw.tolist() ) - # all_blocks will be useful in case there will be necessity to dump many blocks - # for a single member - all_blocks.append(block) all_member_blocks.append(all_blocks) - genpdf.export.dump_set(name, info, all_member_blocks) if install: genpdf.install_pdf(name) + + +def regroup_evolgrid(evolgrid: list): + """Split evolution points by nf and sort by scale.""" + by_nf = defaultdict(list) + for q, nf in sorted(evolgrid, key=lambda ep: ep[1]): + by_nf[nf].append(q) + return {nf: sorted(qs) for nf, qs in by_nf.items()} + + +def collect_blocks(evolved_PDF: dict, q2block_per_nf: dict, xgrid: list): + """Collect all LHAPDF blocks for a given replica. + + Parameters + ---------- + evolved_PDF : + PDF evaluated at grid + q2block_per_nf : + block coordinates + xgrid : + x grid + + """ + all_blocks = [] + + # fake xfxQ2 + def pdf_xq2(pid, x, Q2): + x_idx = xgrid.index(x) + return x * evolved_PDF[(Q2, nf)]["pdfs"][pid][x_idx] + + # loop on nf patches + for nf, q2grid in q2block_per_nf.items(): + block = genpdf.generate_block( + pdf_xq2, + xgrid=xgrid, + sorted_q2grid=q2grid, + pids=br.flavor_basis_pids, + ) + all_blocks.append(block) + return all_blocks diff --git a/src/ekomark/benchmark/runner.py b/src/ekomark/benchmark/runner.py index 8c07e7153..180f439e6 100644 --- a/src/ekomark/benchmark/runner.py +++ b/src/ekomark/benchmark/runner.py @@ -224,12 +224,15 @@ def log(self, theory, _, pdf, me, ext): # LHA NNLO VFNS needs a special treatment # Valence contains only u and d rotate_to_evolution = None + labels = None qed = theory["QED"] > 0 if self.rotate_to_evolution_basis: if not qed: rotate_to_evolution = br.rotate_flavor_to_evolution.copy() + labels = br.evol_basis else: rotate_to_evolution = br.rotate_flavor_to_unified_evolution.copy() + labels = br.unified_evol_basis if ( self.external == "LHA" and theory["PTO"] == 2 @@ -243,7 +246,7 @@ def log(self, theory, _, pdf, me, ext): pdf, xgrid, flavor_rotation=rotate_to_evolution, - qed=qed, + labels=labels, ) for q2, ref_pdfs in ext["values"].items(): log_tab = dfdict.DFdict() diff --git a/src/ekore/anomalous_dimensions/unpolarized/space_like/__init__.py b/src/ekore/anomalous_dimensions/unpolarized/space_like/__init__.py index 6a3c6cf06..6358a5af8 100644 --- a/src/ekore/anomalous_dimensions/unpolarized/space_like/__init__.py +++ b/src/ekore/anomalous_dimensions/unpolarized/space_like/__init__.py @@ -155,6 +155,11 @@ def gamma_ns_qed(order, mode, n, nf): gamma_ns[3, 0] = as3.gamma_nsp(n, nf, cache) elif mode in [10202, 10203]: gamma_ns[3, 0] = as3.gamma_nsm(n, nf, cache) + if order[0] >= 4: + if mode in [10102, 10103]: + gamma_ns[4, 0] = as4.gamma_nsp(n, nf, cache) + elif mode in [10202, 10203]: + gamma_ns[4, 0] = as4.gamma_nsm(n, nf, cache) return gamma_ns @@ -250,7 +255,7 @@ def choose_ns_ad_aem2(mode, n, nf, cache): @nb.njit(cache=True) -def gamma_singlet_qed(order, n, nf): +def gamma_singlet_qed(order, n, nf, n3lo_ad_variation): r""" Compute the grid of the QED singlet anomalous dimensions matrices. @@ -262,6 +267,8 @@ def gamma_singlet_qed(order, n, nf): Mellin variable nf : int Number of active flavors + n3lo_ad_variation : tuple + |N3LO| anomalous dimension variation ``(gg_var, gq_var, qg_var, qq_var)`` Returns ------- @@ -280,6 +287,8 @@ def gamma_singlet_qed(order, n, nf): gamma_s[0, 2] = aem2.gamma_singlet(n, nf, cache) if order[0] >= 3: gamma_s[3, 0] = as3.gamma_singlet_qed(n, nf, cache) + if order[0] >= 4: + gamma_s[4, 0] = as4.gamma_singlet_qed(n, nf, cache, n3lo_ad_variation) return gamma_s @@ -314,4 +323,6 @@ def gamma_valence_qed(order, n, nf): gamma_v[0, 2] = aem2.gamma_valence(n, nf, cache) if order[0] >= 3: gamma_v[3, 0] = as3.gamma_valence_qed(n, nf, cache) + if order[0] >= 4: + gamma_v[4, 0] = as4.gamma_valence_qed(n, nf, cache) return gamma_v diff --git a/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/__init__.py b/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/__init__.py index 10c4cb57c..56c2c16ff 100644 --- a/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/__init__.py +++ b/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/__init__.py @@ -55,3 +55,84 @@ def gamma_singlet(N, nf, cache, variation): np.complex_, ) return gamma_S_0 + + +@nb.njit(cache=True) +def gamma_singlet_qed(N, nf, cache, variation): + r"""Compute the leading-order singlet anomalous dimension matrix for the unified evolution basis. + + .. math:: + \\gamma_S^{(3,0)} = \\left(\begin{array}{cccc} + \\gamma_{gg}^{(3,0)} & 0 & \\gamma_{gq}^{(3,0)} & 0\\ + 0 & 0 & 0 & 0 \\ + \\gamma_{qg}^{(3,0)} & 0 & \\gamma_{qq}^{(3,0)} & 0 \\ + 0 & 0 & 0 & \\gamma_{qq}^{(3,0)} \\ + \\end{array}\right) + + Parameters + ---------- + N : complex + Mellin moment + nf : int + Number of active flavors + cache: numpy.ndarray + Harmonic sum cache + + Returns + ------- + numpy.ndarray + Leading-order singlet anomalous dimension matrix :math:`\\gamma_{S}^{(3,0)}(N)` + + """ + gamma_np_p = gamma_nsp(N, nf, cache) + gamma_qq = gamma_np_p + gamma_ps(N, nf, cache, variation[3]) + gamma_S = np.array( + [ + [ + gamma_gg(N, nf, cache, variation[0]), + 0.0 + 0.0j, + gamma_gq(N, nf, cache, variation[1]), + 0.0 + 0.0j, + ], + [0.0 + 0.0j, 0.0 + 0.0j, 0.0 + 0.0j, 0.0 + 0.0j], + [gamma_qg(N, nf, cache, variation[2]), 0.0 + 0.0j, gamma_qq, 0.0 + 0.0j], + [0.0 + 0.0j, 0.0 + 0.0j, 0.0 + 0.0j, gamma_np_p], + ], + np.complex_, + ) + return gamma_S + + +@nb.njit(cache=True) +def gamma_valence_qed(N, nf, cache): + r"""Compute the leading-order valence anomalous dimension matrix for the unified evolution basis. + + .. math:: + \\gamma_V^{(3,0)} = \\left(\begin{array}{cc} + \\gamma_{nsV}^{(3,0)} & 0\\ + 0 & \\gamma_{ns-}^{(3,0)} + \\end{array}\right) + + Parameters + ---------- + N : complex + Mellin moment + nf : int + Number of active flavors + cache: numpy.ndarray + Harmonic sum cache + + Returns + ------- + numpy.ndarray + Leading-order singlet anomalous dimension matrix :math:`\\gamma_{V}^{(3,0)}(N)` + + """ + gamma_V = np.array( + [ + [gamma_nsv(N, nf, cache), 0.0], + [0.0, gamma_nsm(N, nf, cache)], + ], + np.complex_, + ) + return gamma_V diff --git a/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/ggg.py b/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/ggg.py index 6c8b9f0d5..6e8c5e65a 100644 --- a/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/ggg.py +++ b/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/ggg.py @@ -5,7 +5,7 @@ import numpy as np from .....harmonics import cache as c -from .....harmonics.log_functions import lm11, lm11m1, lm11m2 +from .....harmonics.log_functions import lm11, lm11m1, lm12m1, lm13m1 @nb.njit(cache=True) @@ -161,43 +161,48 @@ def gamma_gg_nf1(n, cache, variation): """ S1 = c.get(c.S1, cache, n) S2 = c.get(c.S2, cache, n) - common = 18143.980574437464 + 1992.766087237516/np.power(-1. + n,3) + 20005.925925925927/np.power(n,7) - 19449.679012345678/np.power(n,6) + 80274.123066115/np.power(n,5) - 11714.245609287387*S1 + 13880.514502193577*lm11(n,S1) + S3 = c.get(c.S3, cache, n) + common = 18143.980574437464 + 1992.766087237516/np.power(-1. + n,3) + 20005.925925925927/np.power(n,7) - 19449.679012345678/np.power(n,6) + 80274.123066115/np.power(n,5) + 4341.13370266389/n - 11714.245609287387*S1 + 13880.514502193577*lm11(n,S1) if variation == 1: - fit = 51906.450933224565/n - 55794.44458990475/(1. + n) - (3244.182054400047*S1)/np.power(n,2) + (5896.657744251454*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -10180.036287065168/np.power(-1. + n,2) + 18513.270411873862/(-1. + n) + 1054.0462034864902/(1. + n) - 23202.37636673074/(2. + n) - 3602.060464842473*lm13m1(n,S1,S2,S3) elif variation == 2: - fit = 143243.25209661626/n - 140219.52798151976/(2. + n) - (81141.96014226894*S1)/np.power(n,2) + (4359.928069421606*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -10990.56710015112/np.power(-1. + n,2) + 20788.896977978722/(-1. + n) - 20421.35502658661/(1. + n) + 8525.968866079374*lm12m1(n,S1,S2) + 1738.6616090235632*lm13m1(n,S1,S2,S3) elif variation == 3: - fit = -4846.510890091015/n + 73944.02374603187/np.power(1. + n,3) + (15528.258395929412*S1)/np.power(n,2) + (5875.765469829209*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -2634.4244909317163/np.power(-1. + n,2) + 22720.3693403071/(-1. + n) - 125998.50835459496/np.power(n,4) - 33227.36724506296/(1. + n) - 9413.257245961297*lm13m1(n,S1,S2,S3) elif variation == 4: - fit = 3769.9068671191385/n - (15787.280088316747*S1)/np.power(n,2) + (3319.747916876306*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n - 209289.30375366632*lm11m2(n,S1) + fit = -11204.025554445116/np.power(-1. + n,2) + 29125.056079570935/(-1. + n) - 31819.903485877207/np.power(n,3) - 34636.371205966374/(1. + n) - 5216.754331416846*lm13m1(n,S1,S2,S3) elif variation == 5: - fit = -4404.650816024677/n + (32166.525125055265*S1)/np.power(n,2) + (5984.665222488821*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + 26795.61010300351*lm11m1(n,S1) + fit = -10596.095479944803/np.power(-1. + n,2) + 19686.27928898392/(-1. + n) - 21569.188441280912/(1. + n) - 11201.144235965185*lm11m1(n,S1) - 1700.6621840281703*lm13m1(n,S1,S2,S3) elif variation == 6: - fit = 18002.20882549217/(-1. + n) - 34510.86180174593/n + (14377.94953322174*S1)/np.power(n,2) + (12777.152485988116*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -10219.818404157402/np.power(-1. + n,2) + 18624.961714720896/(-1. + n) - 22063.56752869039/(2. + n) + 418.4678562263162*lm12m1(n,S1,S2) - 3339.9294915689893*lm13m1(n,S1,S2,S3) elif variation == 7: - fit = 32712.59210667494/np.power(n,3) - 10863.21459339799/n + (19949.446087845266*S1)/np.power(n,2) + (9104.304296741177*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -9948.03233312767/np.power(-1. + n,2) + 18642.625540707515/(-1. + n) - 3874.0599063901927/np.power(n,4) - 22488.97588930172/(2. + n) - 3780.736583727932*lm13m1(n,S1,S2,S3) elif variation == 8: - fit = 23133.58893729803/np.power(n,2) - 6436.943948938613/n + (9529.55663925907*S1)/np.power(n,2) + (6913.820202625404*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -10210.277793833904/np.power(-1. + n,2) + 18826.668606883333/(-1. + n) - 939.7381958313449/np.power(n,3) - 22517.139866390396/(2. + n) - 3649.747268844151*lm13m1(n,S1,S2,S3) elif variation == 9: - fit = 3314.1531443520435/(-1. + n) + 35997.28048068957/n - 45522.85315535845/(1. + n) + (7163.336378194301*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -10454.38560322065/np.power(-1. + n,2) + 19672.71547858848/(-1. + n) - 2028.768596859424/np.power(n,2) - 23244.272133899653/(2. + n) - 3548.6223138853798*lm13m1(n,S1,S2,S3) elif variation == 10: - fit = 15292.461183783358/(-1. + n) - 7754.767835203314/n - 21106.273066417427/(2. + n) + (11510.166071508424*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -10199.42103109479/np.power(-1. + n,2) + 18567.922435470675/(-1. + n) - 22121.34719008958/(2. + n) - 521.8760156034384*lm11m1(n,S1) - 3513.4718226546247*lm13m1(n,S1,S2,S3) elif variation == 11: - fit = 18943.68531934485/(-1. + n) - 34231.50197430196/n + 38795.17200645132/np.power(1. + n,2) + (12574.453319273369*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -24315.85150285657/np.power(-1. + n,2) + 17708.837224620995/(-1. + n) + 200925.95790419917/np.power(n,4) + 22122.069993382116*lm12m1(n,S1,S2) + 19522.28466669723*lm13m1(n,S1,S2,S3) elif variation == 12: - fit = 243015.55817041075/(-1. + n) - 405291.74871837825/n - 924241.7199143948/np.power(1. + n,3) + (99039.0230533651*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -10683.911741932305/np.power(-1. + n,2) + 8813.133994420503/(-1. + n) + 45712.61388637733/np.power(n,3) + 20774.41339562901*lm12m1(n,S1,S2) + 11730.84286896203*lm13m1(n,S1,S2,S3) elif variation == 13: - fit = 9421.639301348665/(-1. + n) - 16264.723220366097/n + (8269.376900788462*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n - 99755.61548732712*lm11m2(n,S1) + fit = -5836.51269525416/np.power(-1. + n,2) - 954.1826542477216/(-1. + n) + 37911.15300076812/np.power(n,2) + 8238.284738213413*lm12m1(n,S1,S2) + 559.8674243103725*lm13m1(n,S1,S2,S3) elif variation == 14: - fit = 32552.831422747156/(-1. + n) - 58844.770942175055/n + (18267.307590060325*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n - 21658.053945007472*lm11m1(n,S1) + fit = -18008.69786800099/np.power(-1. + n,2) + 40405.809150940426/(-1. + n) + 199282.00400507107*lm11m1(n,S1) + 160213.3434703554*lm12m1(n,S1,S2) + 62928.42253561968*lm13m1(n,S1,S2,S3) elif variation == 15: - fit = 26670.108040113628/(-1. + n) - 192284.97382369108/np.power(n,4) - 17027.576353111184/n - (2060.8605568773337*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = 5128.6565343884595/np.power(-1. + n,2) - 12028.343555706011/(-1. + n) - 119224.34855414196/np.power(n,4) + 60406.6661071792/np.power(n,2) - 10691.948251059068*lm13m1(n,S1,S2,S3) elif variation == 16: - fit = 64459.179128132346/(-1. + n) - 84418.96962498086/np.power(n,3) - 95536.59785086475/n + (22255.40045589177*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -25326.250571944573/np.power(-1. + n,2) + 14072.807307962283/(-1. + n) + 233114.0751714257/np.power(n,4) - 31924.757662241216*lm11m1(n,S1) + 12568.669163696943*lm13m1(n,S1,S2,S3) elif variation == 17: - fit = -35383.49147569926/(-1. + n) + 68602.85078732096/np.power(n,2) + 48742.57555689275/n - (4610.608264940457*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -2650.979531261116/np.power(-1. + n,2) - 7372.905521491985/(-1. + n) - 30040.6560602065/np.power(n,3) + 62824.974620623434/np.power(n,2) - 6781.2886081167435*lm13m1(n,S1,S2,S3) + elif variation == 18: + fit = -9592.62299684503/np.power(-1. + n,2) + 4106.275632673743/(-1. + n) + 52523.14189143729/np.power(n,3) - 29690.17856987198*lm11m1(n,S1) + 4103.133130507111*lm13m1(n,S1,S2,S3) + elif variation == 19: + fit = -5176.681219116345/np.power(-1. + n,2) - 3196.230738347968/(-1. + n) + 39966.24595996931/np.power(n,2) - 10802.706088036985*lm11m1(n,S1) - 2821.015728520721*lm13m1(n,S1,S2,S3) else: - fit = 23311.07841529563/(-1. + n) - 11310.8808131583/np.power(n,4) - 3041.5516187238777/np.power(n,3) + 5396.261160271705/np.power(n,2) - 24256.141353532745/n - 50017.51153931546/np.power(1. + n,3) + 2282.06894155596/np.power(1. + n,2) - 5959.841043839012/(1. + n) - 9489.753002819834/(2. + n) - (507.1580296279411*S1)/np.power(n,2) + (13331.74331502859*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + 302.2091857644728*lm11m1(n,S1) - 18179.112896529026*lm11m2(n,S1) + fit = -10163.154508989206/np.power(-1. + n,2) + 14038.103511363668/(-1. + n) + 9733.848224236723/np.power(n,4) + 1865.024107152609/np.power(n,3) + 10477.909004825295/np.power(n,2) - 5726.328195547913/(1. + n) - 7138.825209215919/(2. + n) + 6060.070601755382*lm11m1(n,S1) + 11594.344648415032*lm12m1(n,S1,S2) + 2899.599321273186*lm13m1(n,S1,S2,S3) return common + fit @@ -223,43 +228,48 @@ def gamma_gg_nf2(n, cache, variation): """ S1 = c.get(c.S1, cache, n) S2 = c.get(c.S2, cache, n) - common = -423.811346198137 - 568.8888888888889/np.power(n,7) + 1725.6296296296296/np.power(n,6) - 2196.543209876543/np.power(n,5) + 440.0487580115612*S1 - 135.11111111111114*lm11(n,S1) + S3 = c.get(c.S3, cache, n) + common = -423.811346198137 - 568.8888888888889/np.power(n,7) + 1725.6296296296296/np.power(n,6) - 2196.543209876543/np.power(n,5) + 21.333333333333336/n + 440.0487580115612*S1 - 135.11111111111114*lm11(n,S1) if variation == 1: - fit = -2376.754718471023/n + 1986.9752104021475/(1. + n) - (29.413328132453657*S1)/np.power(n,2) + (243.6914020341996*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -28.872079560670887/np.power(-1. + n,2) - 600.687665018851/(-1. + n) - 782.7409584384554/(1. + n) + 1212.0129563274725/(2. + n) - 131.99661800641996*lm13m1(n,S1,S2,S3) elif variation == 2: - fit = -5629.479269151885/n + 4993.556762890926/(2. + n) + (2744.7150845388774*S1)/np.power(n,2) + (298.41806508138217*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = 13.46728393535039/np.power(-1. + n,2) - 719.5586305737447/(-1. + n) + 339.0607105706994/(1. + n) - 445.3675161372763*lm12m1(n,S1,S2) - 410.9777123288363*lm13m1(n,S1,S2,S3) elif variation == 3: - fit = -355.6443895005434/n - 2633.32565133846/np.power(1. + n,3) - (697.9453672577569*S1)/np.power(n,2) + (244.43542649166247*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -423.0290881266415/np.power(-1. + n,2) - 820.4521550528278/(-1. + n) + 6581.732068732447/np.power(n,4) + 1008.0030845050551/(1. + n) + 171.5604693866337*lm13m1(n,S1,S2,S3) elif variation == 4: - fit = -662.4958800366925/n + (417.27675074971785*S1)/np.power(n,2) + (335.4613978477791*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + 7453.298646800853*lm11m2(n,S1) + fit = 24.617625096660852/np.power(-1. + n,2) - 1155.0111323969943/(-1. + n) + 1662.163163134959/np.power(n,3) + 1081.6046427740755/(1. + n) - 47.65052104384607*lm13m1(n,S1,S2,S3) elif variation == 5: - fit = -371.3800961661366/n - (1290.4743148587395*S1)/np.power(n,2) + (240.55724273082328*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n - 954.2565288285368*lm11m1(n,S1) + fit = -7.138567251448382/np.power(-1. + n,2) - 661.9616455143912/(-1. + n) + 399.01961082863164/(1. + n) + 585.1095476215276*lm11m1(n,S1) - 231.31917510401414*lm13m1(n,S1,S2,S3) elif variation == 6: - fit = -641.1022267836108/(-1. + n) + 700.7749426995084/n - (656.9800845794034*S1)/np.power(n,2) - (1.339668489438944*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = 0.6703563957663715/np.power(-1. + n,2) - 683.6302885496931/(-1. + n) + 366.326763050706/(2. + n) - 310.75671045013235*lm12m1(n,S1,S2) - 326.65663250723026*lm13m1(n,S1,S2,S3) elif variation == 7: - fit = -1164.9745787725433/np.power(n,3) - 141.37500847741444/n - (855.3945615089527*S1)/np.power(n,2) + (129.45934487552083*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -201.15959093110155/np.power(-1. + n,2) - 696.7475504266947/(-1. + n) + 2876.8998495153933/np.power(n,4) + 682.2375331931647/(2. + n) + 0.6893269576792295*lm13m1(n,S1,S2,S3) elif variation == 8: - fit = -823.8430919763521/np.power(n,2) - 299.005218970897/n - (484.3170791242564*S1)/np.power(n,2) + (207.4677850666592*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -6.414557380878645/np.power(-1. + n,2) - 833.4190222620106/(-1. + n) + 697.8551544024533/np.power(n,3) + 703.1522695219711/(2. + n) - 96.58411469486595*lm13m1(n,S1,S2,S3) elif variation == 9: - fit = 30.047719973994777/(-1. + n) - 2520.994974716468/n + 2080.1024406993206/(1. + n) + (255.17572494624633*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = 174.86134878770187/np.power(-1. + n,2) - 1461.6984440261558/(-1. + n) + 1506.5755852971279/np.power(n,2) + 1243.1250013579786/(2. + n) - 171.6801056536221*lm13m1(n,S1,S2,S3) elif variation == 10: - fit = -517.28413779068/(-1. + n) - 521.8069586029795/n + 964.421319764148/(2. + n) + (56.55348517779473*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -14.476853744515829/np.power(-1. + n,2) - 641.2725816829176/(-1. + n) + 409.23428207929186/(2. + n) + 387.5482225476748*lm11m1(n,S1) - 197.7830687973748*lm13m1(n,S1,S2,S3) elif variation == 11: - fit = -684.1216646478402/(-1. + n) + 688.0099901838175/n - 1772.6905583568107/np.power(1. + n,2) + (7.922383473211929*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = 234.71021283280834/np.power(-1. + n,2) - 668.4196514406609/(-1. + n) - 3336.0224123418016/np.power(n,4) - 671.1068807980374*lm12m1(n,S1,S2) - 706.2435192552492*lm13m1(n,S1,S2,S3) elif variation == 12: - fit = -10922.769229617297/(-1. + n) + 17643.083571901912/n + 42231.91922591065/np.power(1. + n,3) - (3942.953936253496*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = 8.375810645634878/np.power(-1. + n,2) - 520.7221331157691/(-1. + n) - 758.9776156472786/np.power(n,3) - 648.7314114404783*lm12m1(n,S1,S2) - 576.880321324907*lm13m1(n,S1,S2,S3) elif variation == 13: - fit = -249.02522869092658/(-1. + n) - 132.95657379723917/n + (204.6367663552972*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + 4558.191872124068*lm11m2(n,S1) + fit = -72.10673143086429/np.power(-1. + n,2) - 358.5530058001772/(-1. + n) - 629.4480683703055/np.power(n,2) - 440.59102678646576*lm12m1(n,S1,S2) - 391.4059065714235*lm13m1(n,S1,S2,S3) elif variation == 14: - fit = -1305.9723629973262/(-1. + n) + 1812.678531475261/n - (252.20454712133116*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + 989.6341672183413*lm11m1(n,S1) + fit = 129.9910112750619/np.power(-1. + n,2) - 1045.262981333448/(-1. + n) - 3308.727447025322*lm11m1(n,S1) - 2963.8697874593217*lm12m1(n,S1,S2) - 1426.926154164017*lm13m1(n,S1,S2,S3) elif variation == 15: - fit = -1037.169631665525/(-1. + n) + 8786.190136094137/np.power(n,4) - 98.09907798298099/n + (676.6623679879976*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -658.5340428548301/np.power(-1. + n,2) + 233.70328023719887/(-1. + n) + 6376.227554233226/np.power(n,4) - 1832.5287499192084/np.power(n,2) + 210.35151978073395*lm13m1(n,S1,S2,S3) elif variation == 16: - fit = -2763.8878304060045/(-1. + n) + 3857.4055136430484/np.power(n,3) + 3489.2597080989826/n - (434.43481453536947*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = 265.36221636680716/np.power(-1. + n,2) - 558.115114090075/(-1. + n) - 4312.498256800645/np.power(n,4) + 968.4864274161131*lm11m1(n,S1) - 495.2949411211266*lm13m1(n,S1,S2,S3) elif variation == 17: - fit = 1798.2819022378217/(-1. + n) - 3134.710315160434/np.power(n,2) - 3103.373221197692/n + (793.169486129463*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -242.4719679073227/np.power(-1. + n,2) - 15.273817400740654/(-1. + n) + 1606.6018497165833/np.power(n,3) - 1961.8621081220385/np.power(n,2) + 1.2058538747811829*lm13m1(n,S1,S2,S3) + elif variation == 18: + fit = -25.702325492667082/np.power(-1. + n,2) - 373.7390722554988/(-1. + n) - 971.6528600084858/np.power(n,3) + 927.147789097384*lm11m1(n,S1) - 338.6865966478428*lm13m1(n,S1,S2,S3) + elif variation == 19: + fit = -107.39512419897143/np.power(-1. + n,2) - 238.64621708524552/(-1. + n) - 739.3563254661514/np.power(n,2) + 577.7386335438422*lm11m1(n,S1) - 210.59317344974744*lm13m1(n,S1,S2,S3) else: - fit = -958.4119229639646/(-1. + n) + 516.8347138878904/np.power(n,4) + 158.3782902865003/np.power(n,3) - 232.85608277275213/np.power(n,2) + 477.6730210169136/n + 2329.329033798364/np.power(1. + n,3) - 104.27591519745945/np.power(1. + n,2) + 239.23986182949812/(1. + n) + 350.46929897971023/(2. + n) - (50.14899412782161*S1)/np.power(n,2) - (55.13659342362342*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + 2.0810375523414395*lm11m1(n,S1) + 706.5582658191131*lm11m2(n,S1) + fit = -49.223424397058984/np.power(-1. + n,2) - 622.0772540941418/(-1. + n) + 430.8599370178221/np.power(n,4) + 117.68366797885425/np.power(n,3) - 192.45366666213553/np.power(n,2) + 107.62879422315821/(1. + n) + 242.9520423963465/(2. + n) + 7.226482800064206*lm11m1(n,S1) - 288.44333331956375*lm12m1(n,S1,S2) - 282.9932310879313*lm13m1(n,S1,S2,S3) return common + fit @@ -284,43 +294,48 @@ def gamma_gg_nf0(n, cache, variation): """ S1 = c.get(c.S1, cache, n) S2 = c.get(c.S2, cache, n) - common = -68587.9129845144 - 49851.703887834694/np.power(-1. + n,4) + 213823.9810748423/np.power(-1. + n,3) - 103680./np.power(n,7) - 17280./np.power(n,6) - 627978.8224813186/np.power(n,5) + 40880.33011934297*S1 - 85814.12027987762*lm11(n,S1) + S3 = c.get(c.S3, cache, n) + common = -68587.9129845144 - 49851.703887834694/np.power(-1. + n,4) + 213823.9810748423/np.power(-1. + n,3) - 103680./np.power(n,7) - 17280./np.power(n,6) - 627978.8224813186/np.power(n,5) - 54482.80778086425/n + 40880.33011934297*S1 - 85814.12027987762*lm11(n,S1) if variation == 1: - fit = 657693.1275908262/n - 1.1706414373839432e6/(1. + n) - (370650.30059459625*S1)/np.power(n,2) + (287643.02359540213*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -295597.8343912357/np.power(-1. + n,2) + 224940.49334893477/(-1. + n) - 528016.0821893369/(1. + n) + 295950.8085172776/(2. + n) + 1477.798412728375*lm13m1(n,S1,S2,S3) elif variation == 2: - fit = 2.5740603391615152e6/n - 2.941991644365525e6/(2. + n) - (2.0050489863420033e6*S1)/np.power(n,2) + (255400.3971361596*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -285259.35674268805/np.power(-1. + n,2) + 195914.43535053887/(-1. + n) - 254093.176327687/(1. + n) - 108750.38571168127*lm12m1(n,S1,S2) - 66644.14697966084*lm13m1(n,S1,S2,S3) elif variation == 3: - fit = -533059.2724548094/n + 1.5514436765207502e6/np.power(1. + n,3) + (23220.39448094448*S1)/np.power(n,2) + (287204.67597244744*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -391843.5756260241/np.power(-1. + n,2) + 171278.1309382666/(-1. + n) + 1.607135399845882e6/np.power(n,4) - 90750.00793688672/(1. + n) + 75600.73990110215*lm13m1(n,S1,S2,S3) elif variation == 4: - fit = -352275.4015418936/n - (633821.1309449758*S1)/np.power(n,2) + (233576.03813655287*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n - 4.3911671345781535e6*lm11m2(n,S1) + fit = -282536.6527775845/np.power(-1. + n,2) + 89585.10998095598/(-1. + n) + 405869.0374960631/np.power(n,3) - 72777.8892690519/(1. + n) + 22073.53170175139*lm13m1(n,S1,S2,S3) elif variation == 5: - fit = -523788.46214332484/n + (372313.29472429893*S1)/np.power(n,2) + (289489.537196911*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + 562207.434039533*lm11m1(n,S1) + fit = -290290.91872975003/np.power(-1. + n,2) + 209978.53772452284/(-1. + n) - 239452.33860661855/(1. + n) + 142872.76615791937*lm11m1(n,S1) - 22774.905259686046*lm13m1(n,S1,S2,S3) elif variation == 6: - fit = 377710.2141700686/(-1. + n) - 1.1554566929419546e6/n - (914.6109012422813*S1)/np.power(n,2) + (432004.92760893324*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -275669.2984894303/np.power(-1. + n,2) + 168989.62141469866/(-1. + n) - 274526.4428921221/(2. + n) - 209628.1521964082*lm12m1(n,S1,S2) - 129834.63274025511*lm13m1(n,S1,S2,S3) elif variation == 7: - fit = 686353.5630791902/np.power(n,3) - 659297.6949952773/n + (115982.7752636412*S1)/np.power(n,2) + (354943.7019770036*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -411818.37425604276/np.power(-1. + n,2) + 160141.0679428944/(-1. + n) + 1.9406795709568677e6/np.power(n,4) - 61421.50009639418/(2. + n) + 90984.18244209285*lm13m1(n,S1,S2,S3) elif variation == 8: - fit = 485373.3737194109/np.power(n,2) - 566428.6671276395/n - (102640.3233464204*S1)/np.power(n,2) + (308984.44084716233*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -280448.59152967954/np.power(-1. + n,2) + 67946.15425201622/(-1. + n) + 470754.3927408164/np.power(n,3) - 47312.97924099773/(2. + n) + 25366.124502714512*lm13m1(n,S1,S2,S3) elif variation == 9: - fit = 378644.55156064907/(-1. + n) - 1.1599418606928566e6/n + 2895.802190713511/(1. + n) + (432362.03398212773*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -158164.7213188171/np.power(-1. + n,2) - 355874.3130731763/(-1. + n) + 1.0162955311005719e6/np.power(n,2) + 316938.16065307835/(2. + n) - 25291.619297074456*lm13m1(n,S1,S2,S3) elif variation == 10: - fit = 377882.58678340475/(-1. + n) - 1.1571587030349977e6/n + 1342.6133808775278/(2. + n) + (432085.52321715665*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -285887.2006806783/np.power(-1. + n,2) + 197562.99577218326/(-1. + n) - 245582.1799793595/(2. + n) + 261429.64913634845*lm11m1(n,S1) - 42899.97897764852*lm13m1(n,S1,S2,S3) elif variation == 11: - fit = 377650.3249167252/(-1. + n) - 1.1554744635946492e6/n - 2467.8405744727033/np.power(1. + n,2) + (432017.82171933743*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -451059.5122634805/np.power(-1. + n,2) + 157590.7215229884/(-1. + n) + 2.500025820230639e6/np.power(n,4) + 60419.41309017621*lm12m1(n,S1,S2) + 154628.98908088758*lm13m1(n,S1,S2,S3) elif variation == 12: - fit = 363396.65285306936/(-1. + n) - 1.1318705591614237e6/n + 58792.91414672283/np.power(1. + n,3) + (426517.6328449669*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -281443.7904442531/np.power(-1. + n,2) + 46905.73090962251/(-1. + n) + 568780.2423251155/np.power(n,3) + 43651.165093081385*lm12m1(n,S1,S2) + 57683.796561516865*lm13m1(n,S1,S2,S3) elif variation == 13: - fit = 378256.0418217043/(-1. + n) - 1.1566173672939881e6/n + (432291.67647271376*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + 6345.659593752382*lm11m2(n,S1) + fit = -221129.91709477766/np.power(-1. + n,2) - 74624.32957010131/(-1. + n) + 471710.387076172/np.power(n,2) - 112329.90204316098*lm12m1(n,S1,S2) - 81311.32054580169*lm13m1(n,S1,S2,S3) elif variation == 14: - fit = 376784.61918064323/(-1. + n) - 1.1539087630012901e6/n + (431655.6875663606*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + 1377.713295886333*lm11m1(n,S1) + fit = -372582.60911082564/np.power(-1. + n,2) + 439998.3130990782/(-1. + n) + 2.479570886293798e6*lm11m1(n,S1) + 1.7786232372348914e6*lm12m1(n,S1,S2) + 694710.8508805855*lm13m1(n,S1,S2,S3) elif variation == 15: - fit = 377158.8312978629/(-1. + n) + 12231.642128156545/np.power(n,4) - 1.1565688406394941e6/n + (432948.8040951983*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -370641.1836499627/np.power(-1. + n,2) + 76373.05020007766/(-1. + n) + 1.6256368673598904e6/np.power(n,4) + 164981.63662011502/np.power(n,2) + 72108.40125127957*lm13m1(n,S1,S2,S3) elif variation == 16: - fit = 374754.9908692327/(-1. + n) + 5370.064049746925/np.power(n,3) - 1.1515747205286513e6/n + (431401.9967878436*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -453819.096640544/np.power(-1. + n,2) + 147660.05980785593/(-1. + n) + 2.587937446690415e6/np.power(n,4) - 87192.34328327361*lm11m1(n,S1) + 135637.39527110517*lm13m1(n,S1,S2,S3) elif variation == 17: - fit = 381106.18821765727/(-1. + n) - 4363.968245037315/np.power(n,2) - 1.1607526150905455e6/n + (433110.99878386786*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + fit = -264565.00578584545/np.power(-1. + n,2) + 12895.649871143309/(-1. + n) + 409607.5894176158/np.power(n,3) + 132007.7388904974/np.power(n,2) + 18786.134714622272*lm13m1(n,S1,S2,S3) + elif variation == 18: + fit = -279150.776231584/np.power(-1. + n,2) + 37015.68744579348/(-1. + n) + 583090.5131692598/np.power(n,3) - 62384.957000475675*lm11m1(n,S1) + 41656.46473103294*lm13m1(n,S1,S2,S3) + elif variation == 19: + fit = -230126.7905259369/np.power(-1. + n,2) - 44053.76182863434/(-1. + n) + 443688.97265165334/np.power(n,2) + 147296.0640752822*lm11m1(n,S1) - 35212.61366143017*lm13m1(n,S1,S2,S3) else: - fit = 221373.2353924128/(-1. + n) + 719.5083604797968/np.power(n,4) + 40689.6251252316/np.power(n,3) + 28294.67091025727/np.power(n,2) - 643671.8010288504/n + 94719.79945102782/np.power(1. + n,3) - 145.16709261604137/np.power(1. + n,2) - 68690.9197172488/(1. + n) - 172979.3547638028/(2. + n) - (153032.87574472665*S1)/np.power(n,2) + (372566.99517294974*((-1. + 2.*n - 2.*np.power(n,2))/(np.power(-1. + n,2)*np.power(n,2)) + S2))/n + 33152.06749031878*lm11m1(n,S1) - 257930.6749990824*lm11m2(n,S1) + fit = -309580.8003310073/np.power(-1. + n,2) + 101590.70290050836/(-1. + n) + 540074.4792149311/np.power(n,4) + 128321.14606046685/np.power(n,3) + 117299.17191257945/np.power(n,2) - 62373.13128050426/(1. + n) - 839.6912125535554/(2. + n) + 151662.74028313678*lm11m1(n,S1) + 76420.28291931044*lm12m1(n,S1,S2) + 51933.95747315065*lm13m1(n,S1,S2,S3) return common + fit diff --git a/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/ggq.py b/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/ggq.py index 7bfa6f975..b5b7eadbc 100644 --- a/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/ggq.py +++ b/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/ggq.py @@ -5,7 +5,21 @@ import numpy as np from .....harmonics import cache as c -from .....harmonics.log_functions import lm11, lm12, lm13, lm14, lm15 +from .....harmonics.log_functions import ( + lm11, + lm11m1, + lm11m2, + lm12, + lm12m1, + lm12m2, + lm13, + lm13m1, + lm13m2, + lm14, + lm14m1, + lm14m2, + lm15, +) @nb.njit(cache=True) @@ -78,59 +92,51 @@ def gamma_gq_nf0(n, cache, variation): S3 = c.get(c.S3, cache, n) S4 = c.get(c.S4, cache, n) S5 = c.get(c.S5, cache, n) - S2m2 = ((-1 + 2 * n - 2 * n**2)/((-1 + n)**2 * n**2) + S2)/n - S1m2 = ((1 - 2 * n)/((-1 + n) * n) + S1)/n common = -22156.31283903764/np.power(-1. + n,4) + 95032.88047770769/np.power(-1. + n,3) - 37609.87654320987/np.power(n,7) - 35065.67901234568/np.power(n,6) - 175454.58483973087/np.power(n,5) - 375.3983146907502*lm14(n,S1,S2,S3,S4) - 13.443072702331962*lm15(n,S1,S2,S3,S4,S5) if variation == 1: - fit = 54395.612515252/(-1. + n) - 2.1646239683351885e6/np.power(n,4) + (2855.303350475541*np.power(S1,3))/n - 60918.73535555526*S2m2 + fit = -135325.37409909506/np.power(-1. + n,2) + 107389.69725534944/(-1. + n) - 281247.1594541515/(1. + n) + 145447.60744097419/(2. + n) - 1644.0474725539857*lm13(n,S1,S2,S3) elif variation == 2: - fit = -226090.67195519924/(-1. + n) + 1.1897625270895162e6/np.power(n,3) + (767.5822028088761*np.power(S1,3))/n + 166822.85829328437*S2m2 + fit = -130157.18895885911/np.power(-1. + n,2) + 93282.05706699888/(-1. + n) - 169738.63893980338/(1. + n) + 9212.769374520116*lm12(n,S1,S2) - 223.51479074632925*lm13(n,S1,S2,S3) elif variation == 3: - fit = -156969.41163838003/(-1. + n) + 308065.6508918336/np.power(n,2) + (2298.0372229048253*np.power(S1,3))/n + 79897.51027543494*S2m2 + fit = -130767.27520270286/np.power(-1. + n,2) + 94891.36609978844/(-1. + n) - 212410.3233945088/(1. + n) - 32955.07417912945*lm11(n,S1) - 1046.7526219200904*lm13(n,S1,S2,S3) elif variation == 4: - fit = 166341.6709608748/(-1. + n) - 491341.2274352182/n + (1928.2261659049982*np.power(S1,3))/n + 192393.6054838923*S2m2 + fit = -158783.450560317/np.power(-1. + n,2) + 90100.75345693348/(-1. + n) + 412018.22879229486/np.power(n,4) - 129027.27855213353/(1. + n) - 1753.8825871656047*lm13(n,S1,S2,S3) elif variation == 5: - fit = -2910.286549470067/(-1. + n) - 231374.96742185086/(1. + n) + (2346.7938301139043*np.power(S1,3))/n + 124908.19081096651*S2m2 + fit = -129693.48645695807/np.power(-1. + n,2) + 52876.75483885584/(-1. + n) + 158964.13837584556/np.power(n,3) - 85916.6315255873/(1. + n) - 1690.6720701417717*lm13(n,S1,S2,S3) elif variation == 6: - fit = -31627.458190721398/(-1. + n) - 195967.18171506765/(2. + n) + (2692.8548253146964*np.power(S1,3))/n + 109472.35691430997*S2m2 + fit = -301210.2328458577/np.power(-1. + n,2) + 811215.7479286905/(-1. + n) - 1.242177631711221e6/np.power(n,2) - 857543.1305664484/(1. + n) - 1833.163010136661*lm13(n,S1,S2,S3) elif variation == 7: - fit = -162008.96605774807/(-1. + n) + 720879.4649423409/np.power(1. + n,2) + (3458.480965363866*np.power(S1,3))/n + 46219.18000891417*S2m2 + fit = -122290.16043542989/np.power(-1. + n,2) + 71807.36048618097/(-1. + n) - 221400.82937350916/(2. + n) + 23236.477404056477*lm12(n,S1,S2) + 1938.8247584430924*lm13(n,S1,S2,S3) elif variation == 8: - fit = -127936.1111804959/(-1. + n) + 1.317743273735378e6/np.power(1. + n,3) + (1810.811048345219*np.power(S1,3))/n + 80332.05372142064*S2m2 + fit = -116702.31643837337/np.power(-1. + n,2) + 56325.17516760884/(-1. + n) - 448808.73529422894/(2. + n) - 134644.78516249143*lm11(n,S1) + 796.324422989612*lm13(n,S1,S2,S3) elif variation == 9: - fit = -31133.856975192168/(-1. + n) + (4363.35894123817*np.power(S1,3))/n + 108577.87074947657*S2m2 + 69739.16311988933*lm11(n,S1) + fit = -178667.39573180894/np.power(-1. + n,2) + 75445.99644274621/(-1. + n) + 761260.3281816904/np.power(n,4) - 123286.8456395018/(2. + n) - 1846.982948588938*lm13(n,S1,S2,S3) elif variation == 10: - fit = -43609.29566283978/(-1. + n) + (7720.209697473076*np.power(S1,3))/n + 101242.36850860748*S2m2 - 25996.353887666173*lm12(n,S1,S2) + fit = -127216.28629540099/np.power(-1. + n,2) + 28899.09790707029/(-1. + n) + 228884.9205878143/np.power(n,3) - 63975.501562926234/(2. + n) - 1711.180018456112*lm13(n,S1,S2,S3) elif variation == 11: - fit = -36336.05360209993/(-1. + n) + (16069.407610813529*np.power(S1,3))/n + 106190.63289422497*S2m2 + 11885.534727629803*lm13(n,S1,S2,S3) + fit = -54369.324330163065/np.power(-1. + n,2) - 236095.39968148115/(-1. + n) + 606214.4244773745/np.power(n,2) + 216429.75635890095/(2. + n) - 1551.7542579210171*lm13(n,S1,S2,S3) elif variation == 12: - fit = -56096.82600570976/(-1. + n) - (30904.014914347616*np.power(S1,2))/n + (8763.722478566568*np.power(S1,3))/n + 94447.37306501447*S2m2 + fit = -127730.39915689365/np.power(-1. + n,2) + 86880.5772952685/(-1. + n) + 131088.0859004977*lm11(n,S1) + 45859.153375434624*lm12(n,S1,S2) + 3051.145461650118*lm13(n,S1,S2,S3) elif variation == 13: - fit = -1.744831439637831e6/np.power(n,4) + 230734.49573806854/np.power(n,3) + (2450.4248345695696*np.power(S1,3))/n - 16752.071359429487*S2m2 + fit = -249509.19871481528/np.power(-1. + n,2) + 80018.18821849066/(-1. + n) + 1.7178353341095438e6/np.power(n,4) - 29198.20288498338*lm12(n,S1,S2) - 6604.105966476303*lm13(n,S1,S2,S3) elif variation == 14: - fit = -1.607549555980178e6/np.power(n,4) + 79281.89558453669/np.power(n,2) + (2711.8887412487193*np.power(S1,3))/n - 24679.125874904974*S2m2 + fit = -129218.19651555142/np.power(-1. + n,2) + 11461.766456848798/(-1. + n) + 321900.6239594061/np.power(n,3) - 9442.986825272894*lm12(n,S1,S2) - 3194.4920722194884*lm13(n,S1,S2,S3) elif variation == 15: - fit = -3.2164345301161744e6/np.power(n,4) + 238747.19120481954/n + (3305.7786240482187*np.power(S1,3))/n - 184005.5159797561*S2m2 + fit = -87944.16009766924/np.power(-1. + n,2) - 83891.96406756257/(-1. + n) + 306548.65313472337/np.power(n,2) + 11486.326691371696*lm12(n,S1,S2) + 173.71945424342616*lm13(n,S1,S2,S3) elif variation == 16: - fit = -109930.67245290388/np.power(n,4) - 219624.56359674424/(1. + n) + (2372.618543477443*np.power(S1,3))/n + 115470.94939990941*S2m2 + fit = -202135.7995740037/np.power(-1. + n,2) + 82687.73905965324/(-1. + n) + 1.0495769899938635e6/np.power(n,4) + 50994.82207509583*lm11(n,S1) - 2848.098505650866*lm13(n,S1,S2,S3) elif variation == 17: - fit = -795851.0838465183/np.power(n,4) - 123917.39558697924/(2. + n) + (2752.5810580044063*np.power(S1,3))/n + 46825.94005648564*S2m2 + fit = -128964.1511783234/np.power(-1. + n,2) + 24339.728042797506/(-1. + n) + 266935.24034010764/np.power(n,3) + 22383.637660612447*lm11(n,S1) - 2128.032930969243*lm13(n,S1,S2,S3) elif variation == 18: - fit = -1.6205225107818602e6/np.power(n,4) + 181200.78744997882/np.power(1. + n,2) + (3006.918515153242*np.power(S1,3))/n - 33988.47090234153*S2m2 + fit = -74648.83981878728/np.power(-1. + n,2) - 140958.82150230306/(-1. + n) + 408987.65266967454/np.power(n,2) - 43805.55005962004*lm11(n,S1) - 787.8265790554562*lm13(n,S1,S2,S3) elif variation == 19: - fit = -1.5188447027408783e6/np.power(n,4) + 393126.6104427561/np.power(1. + n,3) + (2543.6965856722713*np.power(S1,3))/n - 18778.930858748437*S2m2 + fit = -71719.13674652952/np.power(-1. + n,2) - 21308.180757420447/(-1. + n) - 821124.7287279929/np.power(n,4) + 475769.01709201955/np.power(n,3) - 1564.6977442093062*lm13(n,S1,S2,S3) elif variation == 20: - fit = -787951.7251390232/np.power(n,4) + (3814.406780618335*np.power(S1,3))/n + 46878.866608639015*S2m2 + 44353.186297165696*lm11(n,S1) + fit = -133558.27521182265/np.power(-1. + n,2) - 37615.76088185934/(-1. + n) + 484990.68454355566/np.power(n,4) + 220001.80072250665/np.power(n,2) - 1739.8412493001551*lm13(n,S1,S2,S3) elif variation == 21: - fit = -963193.8684382912/np.power(n,4) + (5555.469755339871*np.power(S1,3))/n + 29085.456626461673*S2m2 - 14428.742592292887*lm12(n,S1,S2) - elif variation == 22: - fit = -866884.6931575488/np.power(n,4) + (10777.447027986002*np.power(S1,3))/n + 39266.975234472426*S2m2 + 7125.637269182096*lm13(n,S1,S2,S3) - elif variation == 23: - fit = -1.0989759638298883e6/np.power(n,4) - (15214.098294404646*np.power(S1,2))/n + (5764.027981513135*np.power(S1,3))/n + 15568.25999702346*S2m2 - elif variation == 24: - fit = -1.30410210442889e6/np.power(n,4) + (3218.5602518731034*np.power(S1,3))/n - 20261.445878695344*S1m2 + 8032.736655052195*S2m2 + fit = -110595.9812283641/np.power(-1. + n,2) - 31560.381420415717/(-1. + n) + 176663.97543390834/np.power(n,3) + 138310.07359867013/np.power(n,2) - 1674.8064387740321*lm13(n,S1,S2,S3) else: - fit = -27249.23559757206/(-1. + n) - 741654.0341202153/np.power(n,4) + 59187.37595114936/np.power(n,3) + 16139.481103182095/np.power(n,2) - 10524.751509599944/n + 71286.24517408892/np.power(1. + n,3) + 37586.67718301332/np.power(1. + n,2) - 18791.647125774794/(1. + n) - 13328.524054251953/(2. + n) - (1921.5880503646777*np.power(S1,2))/n + (4306.191959951149*np.power(S1,3))/n - 844.2269116123059*S1m2 + 48854.5972905356*S2m2 + 4753.847892377293*lm11(n,S1) - 1684.379019998294*lm12(n,S1,S2) + 792.1321665338291*lm13(n,S1,S2,S3) + fit = -138152.69664751078/np.power(-1. + n,2) + 57913.880829154245/(-1. + n) + 171645.5636615693/np.power(n,4) + 77577.04360900483/np.power(n,3) + 20851.665375796576/np.power(n,2) - 82661.10297298252/(1. + n) - 23599.740384299566/(2. + n) - 330.42208404928425*lm11(n,S1) + 2435.882720720316*lm12(n,S1,S2) - 1327.8017698551957*lm13(n,S1,S2,S3) return common + fit @@ -158,60 +164,51 @@ def gamma_gq_nf1(n, cache, variation): S3 = c.get(c.S3, cache, n) S4 = c.get(c.S4, cache, n) S5 = c.get(c.S5, cache, n) - S3m2 = (-(((-1 + 2 * n) * (1 - n + n**2))/((-1 + n)**3 * n**3)) + S3)/n - S2m2 = ((-1 + 2 * n - 2 * n**2)/((-1 + n)**2 * n**2) + S2)/n - S1m2 = ((1 - 2 * n)/((-1 + n) * n) + S1)/n - common = 5309.62962962963/np.power(n,7) + 221.23456790123456/np.power(n,6) + 9092.91243376357/np.power(n,5) + 34.49474165523548*lm14(n,S1,S2,S3,S4) + 0.5486968449931413*lm15(n,S1,S2,S3,S4,S5) + common = 885.6738165500071/np.power(-1. + n,3) + 5309.62962962963/np.power(n,7) + 221.23456790123456/np.power(n,6) + 9092.91243376357/np.power(n,5) + 34.49474165523548*lm14(n,S1,S2,S3,S4) + 0.5486968449931413*lm15(n,S1,S2,S3,S4,S5) if variation == 1: - fit = 61414.641491730144/np.power(n,4) - (275.8821081210985*np.power(S1,3))/n - 1723.0775384248207*S2m2 + 5359.279437479722*S3m2 + fit = -4154.154695948995/np.power(-1. + n,2) + 10568.669617295407/(-1. + n) - 17488.846844461823/(1. + n) + 12359.004664911017/(2. + n) + 211.10404507107253*lm13(n,S1,S2,S3) elif variation == 2: - fit = 30628.764498540346/np.power(n,3) - (270.06312683778754*np.power(S1,3))/n + 1773.2287929788677*S2m2 + 579.1073675469371*S3m2 + fit = -3715.00258213197/np.power(-1. + n,2) + 9369.912250526479/(-1. + n) - 8013.721406089578/(1. + n) + 782.8293753310119*lm12(n,S1,S2) + 331.8098466308406*lm13(n,S1,S2,S3) elif variation == 3: - fit = 14964.683461563509/np.power(n,2) - (218.2558990293935*np.power(S1,3))/n + 1752.1522405673672*S2m2 - 1437.7646853596411*S3m2 + fit = -3766.8429586516354/np.power(-1. + n,2) + 9506.658795852165/(-1. + n) - 11639.62874491426/(1. + n) - 2800.265488570204*lm11(n,S1) + 261.8575086390502*lm13(n,S1,S2,S3) elif variation == 4: - fit = 7580.473213968261/n - (247.331894047618*np.power(S1,3))/n - 6197.2716578690515*S2m2 + 4215.915142027546*S3m2 + fit = -6147.4392986647545/np.power(-1. + n,2) + 9099.589851629416/(-1. + n) + 35010.09952148762/np.power(n,4) - 4554.387135843054/(1. + n) + 201.7711126307286*lm13(n,S1,S2,S3) elif variation == 5: - fit = 11506.23542429956/(1. + n) - (274.1023835976748*np.power(S1,3))/n - 10030.195812335383*S2m2 + 7245.875500079163*S3m2 + fit = -3675.6007556945196/np.power(-1. + n,2) + 5936.584418528788/(-1. + n) + 13507.53417196719/np.power(n,3) - 891.1801771144223/(1. + n) + 207.1422499668006*lm13(n,S1,S2,S3) elif variation == 6: - fit = 15648.586212999671/(2. + n) - (319.57482516808324*np.power(S1,3))/n - 13077.961868048167*S2m2 + 9906.744899797963*S3m2 + fit = -18249.757773649242/np.power(-1. + n,2) + 70374.32470231941/(-1. + n) - 105550.57876215602/np.power(n,2) - 66457.98920891003/(1. + n) + 195.03447986946037*lm13(n,S1,S2,S3) elif variation == 7: - fit = 32890.76649300865/np.power(1. + n,2) - (166.9129330699367*np.power(S1,3))/n - 70.8880877568522*S2m2 - 1177.148738100283*S3m2 + fit = -3343.5834681677507/np.power(-1. + n,2) + 8356.04624598052/(-1. + n) - 10452.80306687096/(2. + n) + 1444.9183960217892*lm12(n,S1,S2) + 433.89848620522463*lm13(n,S1,S2,S3) elif variation == 8: - fit = 102016.12308266855/np.power(1. + n,3) - (240.30275153122795*np.power(S1,3))/n + 4585.802226607708*S2m2 - 3985.368690549865*S3m2 + fit = -2996.1134775555597/np.power(-1. + n,2) + 7393.314503624469/(-1. + n) - 24593.753132227568/(2. + n) - 8372.642876397704*lm11(n,S1) + 362.8541655256052*lm13(n,S1,S2,S3) elif variation == 9: - fit = (-450.823181671801*np.power(S1,3))/n - 12903.050719269673*S2m2 + 9834.061598926022*S3m2 - 5511.504206466589*lm11(n,S1) + fit = -6849.300061096075/np.power(-1. + n,2) + 8582.308253713018/(-1. + n) + 47337.59912160785/np.power(n,4) - 4351.762124258069/(2. + n) + 198.4848688754035*lm13(n,S1,S2,S3) elif variation == 10: - fit = (-882.1406501674703*np.power(S1,3))/n - 15619.249097143265*S2m2 + 12292.391588412715*S3m2 + 2777.986504535076*lm12(n,S1,S2) + fit = -3649.905711097048/np.power(-1. + n,2) + 5687.873404469671/(-1. + n) + 14232.795555815104/np.power(n,3) - 663.5932741012635/(2. + n) + 206.92952890585326*lm13(n,S1,S2,S3) elif variation == 11: - fit = (-1513.783497714283*np.power(S1,3))/n - 13902.310762445584*S2m2 + 10684.561917950059*S3m2 - 1053.755322341623*lm13(n,S1,S2,S3) + fit = 879.9511001376588/np.power(-1. + n,2) - 10790.331004577562/(-1. + n) + 37696.34952104189/np.power(n,2) + 16772.9014435428/(2. + n) + 216.84313199599924*lm13(n,S1,S2,S3) elif variation == 12: - fit = (5100.183003924889*np.power(S1,2))/n - (1401.3877591921307*np.power(S1,3))/n - 21387.15682013914*S2m2 + 17430.91515626977*S3m2 + fit = -3600.42868484152/np.power(-1. + n,2) + 9067.684803683303/(-1. + n) + 6188.946763244337*lm11(n,S1) + 2512.9829441244183*lm12(n,S1,S2) + 486.41350744844374*lm13(n,S1,S2,S3) elif variation == 13: - fit = 31147.78863209503/np.power(n,4) + 15094.71171421834/np.power(n,3) - (273.0143514100448*np.power(S1,3))/n + 3003.4769582959475*S3m2 + fit = -9349.864281360744/np.power(-1. + n,2) + 8743.696850292556/(-1. + n) + 81102.65214258479/np.power(n,4) - 1030.6341504008299*lm12(n,S1,S2) + 30.568594740114495*lm13(n,S1,S2,S3) elif variation == 14: - fit = 30964.22640709071/np.power(n,4) + 7419.742457931761/np.power(n,2) - (247.31006171693753*np.power(S1,3))/n + 1989.190320913944*S3m2 + fit = -3670.6707559192682/np.power(-1. + n,2) + 5507.002671361118/(-1. + n) + 15197.611675043092/np.power(n,3) - 97.9484707672736*lm12(n,S1,S2) + 191.54370342235256*lm13(n,S1,S2,S3) elif variation == 15: - fit = 85066.31740469787/np.power(n,4) - 2919.3510109124736/n - (286.87721277546535*np.power(S1,3))/n + 5799.605736056626*S3m2 + fit = -1722.0358945603757/np.power(-1. + n,2) + 1005.1506697978073/(-1. + n) + 14472.81254861761/np.power(n,2) + 890.1688417705905*lm12(n,S1,S2) + 350.5641184465057*lm13(n,S1,S2,S3) elif variation == 16: - fit = 74153.37781346358/np.power(n,4) - 2386.6442197774195/(1. + n) - (276.25126180951514*np.power(S1,3))/n + 4967.958260585389*S3m2 + fit = -7677.684552786546/np.power(-1. + n,2) + 8837.926288795223/(-1. + n) + 57514.561003940005/np.power(n,4) + 1800.00821732893*lm11(n,S1) + 163.14762960523643*lm13(n,S1,S2,S3) elif variation == 17: - fit = 70734.17185530512/np.power(n,4) - 2374.6369076942033/(2. + n) - (269.2518389654746*np.power(S1,3))/n + 4669.21202970862*S3m2 + fit = -3668.0356413358095/np.power(-1. + n,2) + 5640.580814304368/(-1. + n) + 14627.476889260639/np.power(n,3) + 232.17686518512448*lm11(n,S1) + 202.60567395706914*lm13(n,S1,S2,S3) elif variation == 18: - fit = -2635.0286245103766/np.power(n,4) + 34301.96273361259/np.power(1. + n,2) - (162.23755129655925*np.power(S1,3))/n - 1457.5977471044935*S3m2 + fit = -691.6734321623419/np.power(-1. + n,2) - 3417.4240793927916/(-1. + n) + 22411.6434750231/np.power(n,2) - 3394.848223236357*lm11(n,S1) + 276.04609873762405*lm13(n,S1,S2,S3) elif variation == 19: - fit = 44641.11065487181/np.power(n,4) + 27862.583657909938/np.power(1. + n,3) - (266.1646951326012*np.power(S1,3))/n + 2807.074625599327*S3m2 + fit = -3074.255121846279/np.power(-1. + n,2) + 5167.092611529961/(-1. + n) - 8517.21102404984/np.power(n,4) + 16793.629342505785/np.power(n,3) + 208.44893320267045*lm13(n,S1,S2,S3) elif variation == 20: - fit = 70879.97629826797/np.power(n,4) - (248.919875787699*np.power(S1,3))/n + 4669.617977026223*S3m2 + 849.4429232949681*lm11(n,S1) + fit = -5257.044527918616/np.power(-1. + n,2) + 4591.469890746334/(-1. + n) + 37585.871230195466/np.power(n,4) + 7765.593309542773/np.power(n,2) + 202.2667418438865*lm13(n,S1,S2,S3) elif variation == 21: - fit = 69029.84607075108/np.power(n,4) - (200.7081314711859*np.power(S1,3))/n + 4499.597346756129*S3m2 - 344.4607838774497*lm12(n,S1,S2) - elif variation == 22: - fit = 70103.38136051684/np.power(n,4) - (100.74792356621695*np.power(S1,3))/n + 4605.876127181845*S3m2 + 149.08180946409476*lm13(n,S1,S2,S3) - elif variation == 23: - fit = 66796.13877765737/np.power(n,4) - (446.9068014839647*np.power(S1,2))/n - (177.25895475872284*np.power(S1,3))/n + 4301.494627873232*S3m2 - elif variation == 24: - fit = 60675.73486178171/np.power(n,4) - (248.51519590078777*np.power(S1,3))/n - 682.8975276953039*S1m2 + 4145.5785035058925*S3m2 + fit = -3477.5096784512552/np.power(-1. + n,2) + 5060.750476829951/(-1. + n) + 13691.12777479692/np.power(n,3) + 1434.6372023383353/np.power(n,2) + 207.3068180594*lm13(n,S1,S2,S3) else: - fit = 30540.48679182162/np.power(n,4) + 1905.1448421982786/np.power(n,3) + 932.6844133123028/np.power(n,2) + 194.21342512732446/n + 5411.6127808574365/np.power(1. + n,3) + 2799.6970511092186/np.power(1. + n,2) + 379.9829668550892/(1. + n) + 553.0812210543945/(2. + n) + (193.88650843503848*np.power(S1,2))/n - (375.74241936415484*np.power(S1,3))/n - 28.454063653970994*S1m2 - 3616.665795969917*S2m2 + 4789.568969203283*S3m2 - 194.2525534654842*lm11(n,S1) + 101.3969050274011*lm12(n,S1,S2) - 37.694729703230344*lm13(n,S1,S2,S3) + fit = -4659.8548692239365/np.power(-1. + n,2) + 8775.661049395696/(-1. + n) + 11906.360571226945/np.power(n,4) + 4192.865495685177/np.power(n,3) - 1036.6448907424908/np.power(n,2) - 5192.654929396816/(1. + n) - 520.4764518573357/(2. + n) - 302.22022583075585*lm11(n,S1) + 214.3960445752241*lm12(n,S1,S2) + 245.07815446568293*lm13(n,S1,S2,S3) return common + fit @@ -220,6 +217,9 @@ def gamma_gq_nf1(n, cache, variation): def gamma_gq_nf2(n, cache, variation): r"""Return the part proportional to :math:`nf^2` of :math:`\gamma_{gq}^{(3)}`. + This therm is parametrized using the analytic result from :cite:`Falcioni:2023tzp` + with an higher number of moments (30). + Parameters ---------- n : complex @@ -239,62 +239,49 @@ def gamma_gq_nf2(n, cache, variation): S2 = c.get(c.S2, cache, n) S3 = c.get(c.S3, cache, n) S4 = c.get(c.S4, cache, n) - S5 = c.get(c.S5, cache, n) - S2m2 = ((-1 + 2 * n - 2 * n**2)/((-1 + n)**2 * n**2) + S2)/n - S1m2 = ((1 - 2 * n)/((-1 + n) * n) + S1)/n - common = 778.5349794238683/np.power(n,5) - 0.877914951989026*lm14(n,S1,S2,S3,S4) - if variation == 1: - fit = -186.22900377040247/(-1. + n) - 478.90721340293356/np.power(n,4) + (5.74075848054696*np.power(S1,3))/n + 170.87183353958662*S2m2 - elif variation == 2: - fit = -248.28454175688805/(-1. + n) + 263.22625305579476/np.power(n,3) + (5.278865453482085*np.power(S1,3))/n + 221.25799463997834*S2m2 - elif variation == 3: - fit = -232.99196870519415/(-1. + n) + 68.15727099578979/np.power(n,2) + (5.617467427605377*np.power(S1,3))/n + 202.02639746547175*S2m2 - elif variation == 4: - fit = -161.46175750229568/(-1. + n) - 108.70565119071854/n + (5.535649437328786*np.power(S1,3))/n + 226.91533534247935*S2m2 - elif variation == 5: - fit = (-147.71749614319918 - 250.09753306427467*n)/(-1. + np.power(n,2)) + (5.6282544701748725*np.power(S1,3))/n + 211.98468116923237*S2m2 - elif variation == 6: - fit = -205.26097869205503/(-1. + n) - 43.35630496864558/(2. + n) + (5.7048179330688145*np.power(S1,3))/n + 208.5696158709912*S2m2 - elif variation == 7: - fit = -234.10693324364027/(-1. + n) + 159.4893065978856/np.power(1. + n,2) + (5.874207114101223*np.power(S1,3))/n + 194.5753133344904*S2m2 - elif variation == 8: - fit = -226.56856342946034/(-1. + n) + 291.54105675473517/np.power(1. + n,3) + (5.509672201751474*np.power(S1,3))/n + 202.1225370231326*S2m2 - elif variation == 9: - fit = -205.1517730350374/(-1. + n) + (6.074404744837193*np.power(S1,3))/n + 208.37171735240508*S2m2 + 15.429279525384134*lm11(n,S1) - elif variation == 10: - fit = -207.91187255591723/(-1. + n) + (6.817083410967055*np.power(S1,3))/n + 206.74879115899574*S2m2 - 5.751503069858567*lm12(n,S1,S2) - elif variation == 11: - fit = -206.30272097177453/(-1. + n) + (8.664282354210393*np.power(S1,3))/n + 207.84355844549347*S2m2 + 2.629587586332136*lm13(n,S1,S2,S3) - elif variation == 12: - fit = -210.6746472670261/(-1. + n) - (6.837287160307751*np.power(S1,2))/n + (7.047952977901978*np.power(S1,3))/n + 205.24544813934457*S2m2 - elif variation == 13: - fit = -1916.1103405421652/np.power(n,4) - 789.943403334499/np.power(n,3) + (7.126901942835579*np.power(S1,3))/n + 19.662692663483778*S2m2 - elif variation == 14: - fit = -2386.1090637317598/np.power(n,4) - 271.4297670165366/np.power(n,2) + (6.231753223826018*np.power(S1,3))/n + 46.80178342814188*S2m2 - elif variation == 15: - fit = 3122.074998548171/np.power(n,4) - 817.375694750788/n + (4.198509803834483*np.power(S1,3))/n + 592.272153767969*S2m2 - elif variation == 16: - fit = -7513.36216027104/np.power(n,4) + 751.9074019187506/(1. + n) + (7.3932798253001035*np.power(S1,3))/n - 433.0164903242173*S2m2 - elif variation == 17: - fit = -5165.042709988898/np.power(n,4) + 424.2440164363194/(2. + n) + (6.092438869963565*np.power(S1,3))/n - 198.00320317266343*S2m2 - elif variation == 18: - fit = -2341.694811608125/np.power(n,4) - 620.3596313904335/np.power(1. + n,2) + (5.221688287772126*np.power(S1,3))/n + 78.67328868471006*S2m2 - elif variation == 19: - fit = -2689.7993005817502/np.power(n,4) - 1345.9095988275376/np.power(1. + n,3) + (6.807576458948666*np.power(S1,3))/n + 26.60185572989274*S2m2 - elif variation == 20: - fit = -5192.086981291262/np.power(n,4) + (2.457168719366107*np.power(S1,3))/n - 198.18440269638717*S2m2 - 151.8477192594809*lm11(n,S1) - elif variation == 21: - fit = -4592.127384254676/np.power(n,4) - (3.5035403946824317*np.power(S1,3))/n - 137.2668238433194*S2m2 + 49.39829214844644*lm12(n,S1,S2) - elif variation == 22: - fit = -4921.851803874727/np.power(n,4) - (21.38151952256833*np.power(S1,3))/n - 172.1243055327945*S2m2 - 24.395355958105238*lm13(n,S1,S2,S3) - elif variation == 23: - fit = -4127.263341266998/np.power(n,4) + (52.087038597781934*np.power(S1,2))/n - (4.217561046210457*np.power(S1,3))/n - 90.9893035495142*S2m2 - elif variation == 24: - fit = -3424.992789569337/np.power(n,4) + (4.497110919064199*np.power(S1,3))/n + 69.36715493145202*S1m2 - 65.19066024035324*S2m2 - else: - fit = -96.87269837207046/(-1. + n) - 1734.4697042431458/np.power(n,4) - 21.946547928279337/np.power(n,3) - 8.469687334197783/np.power(n,2) - 38.586722747562774/n - 43.93202258636677/np.power(1. + n,3) - 19.202930199689494/np.power(1. + n,2) + 31.32947507994794/(1. + n) + 15.870321311153074/(2. + n) + (-6.1548956726333 - 10.420730544344778*n)/(-1. + np.power(n,2)) + (1.8854063098947575*np.power(S1,2))/n + (3.934050962226076*np.power(S1,3))/n + 2.890298122143834*S1m2 + 80.65707534985623*S2m2 - 5.684101655587364*lm11(n,S1) + 1.818616211607828*lm12(n,S1,S2) - 0.9069070154905459*lm13(n,S1,S2,S3) - return common + fit - + Lm11 = lm11(n,S1) + Lm12 = lm12(n,S1, S2) + Lm13 = lm13(n,S1, S2, S3) + Lm14 = lm14(n,S1, S2, S3, S4) + Lm11m1 = lm11m1(n, S1) + Lm12m1 = lm12m1(n, S1, S2) + Lm13m1 = lm13m1(n, S1, S2, S3) + Lm14m1 = lm14m1(n, S1, S2, S3, S4) + Lm11m2 = lm11m2(n, S1) + Lm12m2 = lm12m2(n, S1, S2) + Lm13m2 = lm13m2(n, S1, S2, S3) + Lm14m2 = lm14m2(n, S1, S2, S3, S4) + return ( + -(70.60121231446594/(-1. + n)**2) + - 699.5449657900476/(-1. + n) + + 617.4606265472538/n**5 + + 21.0418422974213/n**4 + + 656.9409510996688/n**3 + + 440.98264702900605/n**2 + - 485.09325526270226/n + + 468.97972206118425/(1 + n)**2 + + 131.12265149192916/(1 + n) + - 284.0960143480868/(2 + n)**2 + + 189.98763175661884/(2 + n) + + 355.07676818390956/(3 + n)**2 + + 259.2485292950681/(3 + n) + + 592.4002328363352/(n + n**2) + + 54.543536161068644/(3 + 4 * n + n**2) + - 62.424886245567585/(6 + 5 * n + n**2) + + 154.10095015747495 * (1/n - n/(2 + 3 * n + n**2)) + - 645.1788277783346 * Lm11 + + 32.22330776302828 * Lm11m1 + - 476.25599212133864 * Lm11m2 + - 212.9330738830414 * Lm12 + - 93.58928584449357 * Lm12m1 + + 105.52933047599603 * Lm12m2 + - 26.13260173754001 * Lm13 + - 22.482518440225107 * Lm13m1 + - 45.725204763960996 * Lm13m2 + - 0.877914951989026 * Lm14 + - 0.40377681107870367 * Lm14m1 + + 20.629383319025006 * Lm14m2 + ) @nb.njit(cache=True) def gamma_gq(n, nf, cache, variation): diff --git a/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/gnsm.py b/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/gnsm.py index ba249f672..14886c5ab 100644 --- a/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/gnsm.py +++ b/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/gnsm.py @@ -55,6 +55,8 @@ def gamma_ns_nf3(n, cache): def gamma_nsm_nf2(n, cache): r"""Return the parametrized valence-like non-singlet part proportional to :math:`nf^2`. + From :cite:`Moch:2017uml` ancillary files. + Parameters ---------- n : complex @@ -71,26 +73,28 @@ def gamma_nsm_nf2(n, cache): """ S1 = c.get(c.S1, cache, n) S2 = c.get(c.S2, cache, n) - S3 = c.get(c.S3, cache, n) - Lm11m1 = lm11m1(n, S1) - Lm12m1 = lm12m1(n, S1, S2) - Lm13m1 = lm13m1(n, S1, S2, S3) return ( - -193.89011158240442 - - 18.962962962962962 / n**5 - + 99.1604938271605 / n**4 - - 226.44075306899038 / n**3 - + 395.60497732877303 / n**2 - + 278.2205375565073 / n - - 192.0247446101425 / (1.0 + n) ** 3 - + 93.91039406948033 / (1.0 + n) ** 2 - - 85.81679567653221 / (3.0 + n) - + 195.5772257829161 * S1 - - (488.477491593376 * S1) / n**2 - + (26.68861454046639 * S1) / n - + 361.0392247000297 * Lm11m1 - + 232.1144024429168 * Lm12m1 - + 35.38568209541474 * Lm13m1 + -193.84583328013258 + - 23.7037032 / n**5 + + 117.5967 / n**4 + - 256.5896 / n**3 + + 437.881 / n**2 + + 720.385709813466 / n + - 48.720000000000006 / (1 + n) ** 4 + + 189.51000000000002 / (1 + n) ** 3 + + 391.02500000000003 / (1 + n) ** 2 + + 367.4750000000001 / (1 + n) + + 404.47249999999997 / (2 + n) + - 2063.325 / ((1 + n) ** 2 * (2 + n)) + - (1375.55 * n) / ((1 + n) ** 2 * (2 + n)) + + 687.775 / ((1 + n) * (2 + n)) + - 81.71999999999998 / (3 + n) + + 114.9225 / (4 + n) + + 195.5772 * S1 + - (817.725 * S1) / n**2 + + (714.46361 * S1) / n + - (687.775 * S1) / (1 + n) + - (817.725 * S2) / n ) @@ -119,22 +123,22 @@ def gamma_nsm_nf1(n, cache): Lm12m1 = lm12m1(n, S1, S2) Lm13m1 = lm13m1(n, S1, S2, S3) return ( - 5550.182834015097 + 5550.079294018526 - 126.41975308641975 / n**6 + 752.1975308641976 / n**5 - 2253.1105700880144 / n**4 + 5247.1769880520205 / n**3 - 8769.153217295072 / n**2 - - 5834.355552528428 / n - - 1969.0104529610248 / (1.0 + n) ** 3 - - 2742.0697059315535 / (1.0 + n) ** 2 - + 2512.6444931763654 / (3.0 + n) + - 3248.3974879855336 / n + - 2898.2943249560426 / (1.0 + n) ** 3 + - 689.0970388084964 / (1.0 + n) ** 2 + - 19.315781886816087 / (3.0 + n) - 5171.916129085788 * S1 - + (13862.898314841788 * S1) / n**2 + + (12317.648319304566 * S1) / n**2 - (2741.830025124657 * S1) / n - - 2121.855469704418 * Lm11m1 - - 3590.759053757736 * Lm12m1 - - 413.4348940200741 * Lm13m1 + + 2591.510450390595 * Lm11m1 + - 1731.0652413316732 * Lm12m1 + - 170.02391773352406 * Lm13m1 ) @@ -163,23 +167,23 @@ def gamma_nsm_nf0(n, cache): Lm12m1 = lm12m1(n, S1, S2) Lm13m1 = lm13m1(n, S1, S2, S3) return ( - -23372.01191013195 + -23371.597456219817 - 252.8395061728395 / n**7 + 1580.2469135802469 / n**6 - 5806.800104704373 / n**5 + 14899.91711929902 / n**4 - 28546.38768506619 / n**3 + 50759.65541232588 / n**2 - + 21477.757730073346 / n - + 194339.87834020052 / (1.0 + n) ** 3 - - 88491.39062175922 / (1.0 + n) ** 2 - - 16673.930496518376 / (3.0 + n) + + 11126.581215589995 / n + + 198059.65286720797 / (1.0 + n) ** 3 + - 96709.11158512249 / (1.0 + n) ** 2 + - 6538.89846648667 / (3.0 + n) + 20702.353028966703 * S1 - - (103246.60425090564 * S1) / n**2 + - (97061.21566841986 * S1) / n**2 + (16950.937339235086 * S1) / n - - 178815.0878250944 * Lm11m1 - - 49111.66189344577 * Lm12m1 - - 11804.70644702107 * Lm13m1 + - 197681.93739849582 * Lm11m1 + - 56555.718627160735 * Lm12m1 + - 12779.041608676462 * Lm13m1 ) diff --git a/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/gnsp.py b/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/gnsp.py index b9f74c7bf..c8a75e081 100644 --- a/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/gnsp.py +++ b/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/gnsp.py @@ -10,6 +10,8 @@ def gamma_nsp_nf2(n, cache): r"""Return the parametrized singlet-like non-singlet part proportional to :math:`nf^2`. + From :cite:`Moch:2017uml` ancillary files. + Parameters ---------- n : complex @@ -25,26 +27,28 @@ def gamma_nsp_nf2(n, cache): """ S1 = c.get(c.S1, cache, n) S2 = c.get(c.S2, cache, n) - S3 = c.get(c.S3, cache, n) - Lm11m1 = lm11m1(n, S1) - Lm12m1 = lm12m1(n, S1, S2) - Lm13m1 = lm13m1(n, S1, S2, S3) return ( - -193.862483821757 - - 18.962962962962962 / n**5 - + 99.1604938271605 / n**4 - - 226.44075306899038 / n**3 - + 395.60497732877303 / n**2 - + 278.2205375565073 / n - + 59.46630017646719 / (1.0 + n) ** 3 - - 152.70402416764668 / (1.0 + n) ** 2 - - 94.57207315818547 / (2.0 + n) - + 195.5772257829161 * S1 - - (517.9354004395117 * S1) / n**2 - + (26.68861454046639 * S1) / n - + 1.5006487633206929 * Lm11m1 - + 113.48340560825889 * Lm12m1 - + 13.865450025251006 * Lm13m1 + -193.85906555742952 + - 18.962964 / n**5 + + 99.1605 / n**4 + - 225.141 / n**3 + + 393.0056000000001 / n**2 + - 403.50217685814835 / n + - 34.425000000000004 / (1 + n) ** 4 + + 108.42 / (1 + n) ** 3 + - 93.8225 / (1 + n) ** 2 + + 534.725 / (1 + n) + + 246.50250000000003 / (2 + n) + - 25.455 / ((1 + n) ** 2 * (2 + n)) + - (16.97 * n) / ((1 + n) ** 2 * (2 + n)) + + 8.485 / ((1 + n) * (2 + n)) + - 110.015 / (3 + n) + + 78.9875 / (4 + n) + + 195.5772 * S1 + - (101.0775 * S1) / n**2 + + (35.17361 * S1) / n + - (8.485 * S1) / (1 + n) + - (101.0775 * S2) / n ) @@ -72,22 +76,22 @@ def gamma_nsp_nf1(n, cache): Lm12m1 = lm12m1(n, S1, S2) Lm13m1 = lm13m1(n, S1, S2, S3) return ( - 5550.285178175209 + 5550.218627756056 - 126.41975308641975 / n**6 + 752.1975308641976 / n**5 - 2253.1105700880144 / n**4 + 5247.1769880520205 / n**3 - 8769.153217295072 / n**2 - - 5834.355552528428 / n - + 537.8609133198307 / (1.0 + n) ** 3 - - 718.3874592628895 / (1.0 + n) ** 2 - + 2487.96294221855 / (2.0 + n) + - 3248.3974879855336 / n + + 1045.759889779711 / (1.0 + n) ** 3 + - 1517.7637756534405 / (1.0 + n) ** 2 + - 71.40345295295322 / (2.0 + n) - 5171.916129085788 * S1 - + (12894.65275887218 * S1) / n**2 + + (11292.198190230158 * S1) / n**2 - (2741.830025124657 * S1) / n - - 849.8232086542307 * Lm11m1 - - 3106.3285877376907 * Lm12m1 - - 399.22204467960154 * Lm13m1 + - 380.3748812945835 * Lm11m1 + - 2478.792283615627 * Lm12m1 + - 308.36695798751623 * Lm13m1 ) @@ -115,23 +119,23 @@ def gamma_nsp_nf0(n, cache): Lm12m1 = lm12m1(n, S1, S2) Lm13m1 = lm13m1(n, S1, S2, S3) return ( - -23391.315223909038 + -23391.048834675064 - 252.8395061728395 / n**7 + 1580.2469135802469 / n**6 - 5806.800104704373 / n**5 + 14899.91711929902 / n**4 - 28546.38768506619 / n**3 + 50759.65541232588 / n**2 - + 21477.757730073346 / n - + 47399.00434062458 / (1.0 + n) ** 3 - - 15176.296853013831 / (1.0 + n) ** 2 - - 11103.411980157494 / (2.0 + n) + + 11126.581215589995 / n + + 45365.96043751846 / (1.0 + n) ** 3 + - 11976.515209798297 / (1.0 + n) ** 2 + - 858.6772726856868 / (2.0 + n) + 20702.353028966703 * S1 - - (73498.98594171858 * S1) / n**2 + - (67084.61612292472 * S1) / n**2 + (16950.937339235086 * S1) / n - - 43731.12143482942 * Lm11m1 - - 2518.9090401926924 * Lm12m1 - - 973.3270027901576 * Lm13m1 + - 45610.240259669365 * Lm11m1 + - 5030.833428351564 * Lm12m1 + - 1337.0046605808507 * Lm13m1 ) diff --git a/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/gps.py b/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/gps.py index d783a6bae..e5c03ac2b 100644 --- a/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/gps.py +++ b/src/ekore/anomalous_dimensions/unpolarized/space_like/as4/gps.py @@ -7,6 +7,7 @@ from .....harmonics import cache as c from .....harmonics.log_functions import ( lm11m1, + lm11m2, lm12m1, lm12m2, lm13m1, @@ -131,17 +132,19 @@ def gamma_ps_nf1(n, cache, variation): @nb.njit(cache=True) -def gamma_ps_nf2(n, cache, variation): +def gamma_ps_nf2(n, cache): r"""Return the part proportional to :math:`nf^2` of :math:`\gamma_{ps}^{(3)}`. + This therm is parametrized using the analytic result from :cite:`Gehrmann:2023cqm` + with an higher number of moments (30). + Parameters ---------- n : complex Mellin moment cache: numpy.ndarray Harmonic sum cache - variation : int - |N3LO| anomalous dimension variation + Returns ------- @@ -153,22 +156,43 @@ def gamma_ps_nf2(n, cache, variation): S2 = c.get(c.S2, cache, n) S3 = c.get(c.S3, cache, n) S4 = c.get(c.S4, cache, n) - common = -568.8888888888889/np.power(n,7) + 455.1111111111111/np.power(n,6) - 1856.79012345679/np.power(n,5) - 40.559670781893004*lm13m1(n,S1,S2,S3) - 13.695473*lm13m2(n,S1,S2,S3) - 3.6213991769547325*lm14m1(n,S1,S2,S3,S4) - if variation == 1: - fit = 25.822615602170636*(-1./np.power(-1. + n,2) + 1/n**2) + 1369.827563834446*(1/(-1. + n) - 1./n) - 968.9773721636304/np.power(n,4) + 18.07807695637113/np.power(n,3) + 108.26356564198636/(6. + 5.*n + np.power(n,2)) + 2244.8862997267374*(-1./np.power(n,2) + np.power(1. + n,-2)) - 707.6478920878866*(1/n - (1.*n)/(2. + 3.*n + np.power(n,2))) - 720.6014639482447*lm11m1(n,S1) - 220.72213008547274*lm12m1(n,S1,S2) + 78.28234259944801*lm12m2(n,S1,S2) - elif variation == 2: - fit = 22.47520493556606*(-1./np.power(-1. + n,2) + 1/n**2) + 1345.7885980600424*(1/(-1. + n) - 1./n) - 903.6049691868469/np.power(n,4) - 40.125877850642645/np.power(n,3) + 205.5137919740281/(3. + 4.*n + np.power(n,2)) + 2155.979224875976*(-1./np.power(n,2) + np.power(1. + n,-2)) - 730.7743407186217*(1/n - (1.*n)/(2. + 3.*n + np.power(n,2))) - 719.4265378971868*lm11m1(n,S1) - 220.625755952285*lm12m1(n,S1,S2) + 76.361546936374*lm12m2(n,S1,S2) - elif variation == 3: - fit = -39.98854097053157*(-1./np.power(-1. + n,2) + 1/n**2) + 897.2140121944313*(1/(-1. + n) - 1./n) + 316.26214619238453/np.power(n,4) - 1126.2252366164616/np.power(n,3) - 1010.1100115754526/(n + np.power(n,2)) + 496.95075914622464*(-1./np.power(n,2) + np.power(1. + n,-2)) - 152.2073406604394*(1/n - (1.*n)/(2. + 3.*n + np.power(n,2))) - 697.502707179934*lm11m1(n,S1) - 218.82743921117563*lm12m1(n,S1,S2) + 40.51992490089773*lm12m2(n,S1,S2) - elif variation == 4: - fit = 128.25116472071446*(-1./np.power(-1. + n,2) + 1/n**2) + 2105.4037585031724*(1/(-1. + n) - 1./n) - 2969.325356129497/np.power(n,4) + 1799.0727530104648/np.power(n,3) - 6288.544180252262/(3. + 4.*n + np.power(n,2)) + 3421.037168319817/(6. + 5.*n + np.power(n,2)) + 4965.374746715422*(-1./np.power(n,2) + np.power(1. + n,-2)) - 756.552384732902*lm11m1(n,S1) - 223.67102825813416*lm12m1(n,S1,S2) + 137.055795153659*lm12m2(n,S1,S2) - elif variation == 5: - fit = -58.02277596330755*(-1./np.power(-1. + n,2) + 1/n**2) + 767.7036973043099*(1/(-1. + n) - 1./n) + 668.4563393906011/np.power(n,4) - 1439.7986192735104/np.power(n,3) - 1286.910355933341/(n + np.power(n,2)) - 29.667479340721076/(6. + 5.*n + np.power(n,2)) + 17.96402399364499*(-1./np.power(n,2) + np.power(1. + n,-2)) - 691.1729662094299*lm11m1(n,S1) - 218.30823801383536*lm12m1(n,S1,S2) + 30.17190740021005*lm12m2(n,S1,S2) - elif variation == 6: - fit = -56.42130765016638*(-1./np.power(-1. + n,2) + 1/n**2) + 779.204430661265*(1/(-1. + n) - 1./n) + 637.1806800381983/np.power(n,4) - 1411.9523285234507/np.power(n,3) - 1275.8459233345768/(n + np.power(n,2)) - 54.06607559078503/(3. + 4.*n + np.power(n,2)) + 60.49936386423877*(-1./np.power(n,2) + np.power(1. + n,-2)) - 691.7351258214956*lm11m1(n,S1) - 218.3543496213554*lm12m1(n,S1,S2) + 31.090934653960247*lm12m2(n,S1,S2) - else: - fit = -3.686060112407607/np.power(-1. + n,2) + 1210.8570100929442/(-1. + n) - 536.6680886431316/np.power(n,4) - 366.82520538287156/np.power(n,3) - 1653.2563429412996/np.power(n,2) - 1475.961939004102/n + 1656.942403053707/np.power(1. + n,2) - 595.4777151405617/(n + np.power(n,2)) + (265.10492891115797*n)/(2. + 3.*n + np.power(n,2)) - 1022.8494106448363/(3. + 4.*n + np.power(n,2)) + 583.2722091035137/(6. + 5.*n + np.power(n,2)) - 712.8318642981988*lm11m1(n,S1) - 220.0848235237097*lm12m1(n,S1,S2) + 65.58040860742483*lm12m2(n,S1,S2) - return common + fit + Lm11m1 = lm11m1(n, S1) + Lm12m1 = lm12m1(n, S1, S2) + Lm13m1 = lm13m1(n, S1, S2, S3) + Lm14m1 = lm14m1(n, S1, S2, S3, S4) + Lm11m2 = lm11m2(n, S1) + Lm12m2 = lm12m2(n, S1, S2) + Lm13m2 = lm13m2(n, S1, S2, S3) + Lm14m2 = lm14m2(n, S1, S2, S3, S4) + return ( + 114.43829930315756/(-1 + n)**2 + - 482.02078387833865/(n + n**2) + - 189.286751823932/(3 + 4 * n + n**2) + + 240.56786018072623/(6 + 5 * n + n**2) + - 693.3770662139755 * (1 / n**7 - 1 / (1 + n)**7) + - 378.3908520452082 * (-(1 / n**6) + 1 / (1 + n)**6) + - 914.6834189565818 * (1 / n**5 - 1 / (1 + n)**5) + + 13.600197369492934 * (-(6 / n**4) + 6 / (1 + n)**4) + - 69.77767807874679 * (2 / n**3 - 2 / (1 + n)**3) + + 684.9299795769539 * (-(1 / n**2) + 1 / (1 + n)**2) + - 160.76186945134114 * (1 / n - n / (2 + 3 * n + n**2)) + + 23.29094040522371 * Lm11m2 + - 2.0809106854377792 * Lm12m2 + - 6.14078307251059 * Lm13m2 + - 1.7777777777777777 * ( + -216.38233518950935 * Lm11m1 + - 75.17763559409342 * Lm12m1 + - 13.185185185185185 * Lm13m1 + - 1.6296296296296295 * Lm14m1 + ) - 4 * ( + 260.9049778489959 * Lm11m1 + + 87.34510160874684 * Lm12m1 + + 16 * Lm13m1 + + 1.6296296296296295 * Lm14m1 + ) + + 0.8477304323488296 * Lm14m2 + + 356.6141626634052 * (1 / (n - 1) - 1 / n) + ) @@ -196,6 +220,6 @@ def gamma_ps(n, nf, cache, variation): """ return ( +nf * gamma_ps_nf1(n, cache, variation) - + nf**2 * gamma_ps_nf2(n, cache, variation) + + nf**2 * gamma_ps_nf2(n, cache) + nf**3 * gamma_ps_nf3(n, cache) ) diff --git a/tests/eko/evolution_operator/test_flavors.py b/tests/eko/evolution_operator/test_flavors.py index 81bb35fc4..2f3761404 100644 --- a/tests/eko/evolution_operator/test_flavors.py +++ b/tests/eko/evolution_operator/test_flavors.py @@ -61,13 +61,15 @@ def get(d): def test_get_range(): - assert (3, 3) == flavors.get_range([]) - assert (3, 3) == flavors.get_range([member.MemberName(n) for n in ["S.S", "V3.V3"]]) + assert (3, 3) == flavors.get_range([], False) + assert (3, 3) == flavors.get_range( + [member.MemberName(n) for n in ["S.S", "V3.V3"]], False + ) assert (3, 4) == flavors.get_range( - [member.MemberName(n) for n in ["S.S", "V3.V3", "T15.S"]] + [member.MemberName(n) for n in ["S.S", "V3.V3", "T15.S"]], False ) assert (4, 4) == flavors.get_range( - [member.MemberName(n) for n in ["S.S", "V3.V3", "T15.T15"]] + [member.MemberName(n) for n in ["S.S", "V3.V3", "T15.T15"]], False ) assert (3, 3) == flavors.get_range( [member.MemberName(n) for n in ["S.S", "Td3.Td3"]], True @@ -113,7 +115,7 @@ def test_rotate_pm_to_flavor(): def test_rotate_matching(): - m = flavors.rotate_matching(4) + m = flavors.rotate_matching(4, False) assert len(list(filter(lambda e: "c+" in e, m.keys()))) == 2 assert len(list(filter(lambda e: "b-" in e, m.keys()))) == 1 @@ -156,8 +158,8 @@ def load(m): return mm for nf in range(4, 6 + 1): - m = load(flavors.rotate_matching(nf)) - minv = load(flavors.rotate_matching_inverse(nf)) + m = load(flavors.rotate_matching(nf, False)) + minv = load(flavors.rotate_matching_inverse(nf, False)) np.testing.assert_allclose(m @ minv, np.eye(len(br.evol_basis)), atol=1e-10) diff --git a/tests/eko/evolution_operator/test_init.py b/tests/eko/evolution_operator/test_init.py index 642de5bb7..47d5e7001 100644 --- a/tests/eko/evolution_operator/test_init.py +++ b/tests/eko/evolution_operator/test_init.py @@ -382,7 +382,7 @@ def test_compute(self, monkeypatch, theory_ffns, operator_card, tmp_path): err_msg=k, ) - for n in range(1, 3 + 1): + for n in range(1, 4 + 1): for qed in range(1, 2 + 1): g.config["order"] = (n, qed) o1 = Operator(g.config, g.managers, Segment(2.0, 2.0, 3)) diff --git a/tests/eko/evolution_operator/test_matching_condition.py b/tests/eko/evolution_operator/test_matching_condition.py index 8cbd6b537..c854fb90c 100644 --- a/tests/eko/evolution_operator/test_matching_condition.py +++ b/tests/eko/evolution_operator/test_matching_condition.py @@ -38,7 +38,7 @@ def update_intrinsic_OME(self, ome): def test_split_ad_to_evol_map(self): ome = self.mkOME() - a = MatchingCondition.split_ad_to_evol_map(ome, 3, 1, []) + a = MatchingCondition.split_ad_to_evol_map(ome, 3, 1, [], False) triv_keys = [ "V.V", "T3.T3", @@ -64,7 +64,7 @@ def test_split_ad_to_evol_map(self): ome[(200, 200)].value, ) # # if alpha is zero, nothing non-trivial should happen - b = MatchingCondition.split_ad_to_evol_map(ome, 3, 1, []) + b = MatchingCondition.split_ad_to_evol_map(ome, 3, 1, [], False) assert sorted(str(k) for k in b.op_members.keys()) == sorted( [*triv_keys, *keys3] ) @@ -74,7 +74,7 @@ def test_split_ad_to_evol_map(self): # ) # nf=3 + IC self.update_intrinsic_OME(ome) - c = MatchingCondition.split_ad_to_evol_map(ome, 3, 1, [4]) + c = MatchingCondition.split_ad_to_evol_map(ome, 3, 1, [4], False) assert sorted(str(k) for k in c.op_members.keys()) == sorted( [*triv_keys, *keys3, "S.c+", "g.c+", "c+.c+", "c-.c-"] ) @@ -83,7 +83,7 @@ def test_split_ad_to_evol_map(self): b.op_members[member.MemberName("V.V")].value, ) # nf=3 + IB - d = MatchingCondition.split_ad_to_evol_map(ome, 3, 1, [5]) + d = MatchingCondition.split_ad_to_evol_map(ome, 3, 1, [5], False) assert sorted(str(k) for k in d.op_members.keys()) == sorted( [*triv_keys, *keys3, "b+.b+", "b-.b-"] ) @@ -92,7 +92,7 @@ def test_split_ad_to_evol_map(self): np.eye(self.shape[0]), ) # nf=4 + IB - d = MatchingCondition.split_ad_to_evol_map(ome, 4, 1, [5]) + d = MatchingCondition.split_ad_to_evol_map(ome, 4, 1, [5], False) assert sorted(str(k) for k in d.op_members.keys()) == sorted( [ *triv_keys, diff --git a/tests/eko/evolution_operator/test_physical.py b/tests/eko/evolution_operator/test_physical.py index b4a9936b6..e9882de5b 100644 --- a/tests/eko/evolution_operator/test_physical.py +++ b/tests/eko/evolution_operator/test_physical.py @@ -138,7 +138,7 @@ def test_to_flavor_basis_tensor_ss(self): ), 1, ) - vt, _ = a.to_flavor_basis_tensor() + vt, _ = a.to_flavor_basis_tensor(False) np.testing.assert_allclose(vt[6, :, 6, :], vt[6, :, 5, :]) np.testing.assert_allclose(vt[6, :, 6, :], vt[5, :, 6, :]) np.testing.assert_allclose(vt[6, :, 6, :], SS.value[:, :] / (2 * 3)) @@ -158,7 +158,7 @@ def test_to_flavor_basis_tensor_gg(self): ), 1, ) - vt, _ = a.to_flavor_basis_tensor() + vt, _ = a.to_flavor_basis_tensor(False) np.testing.assert_allclose(vt[6, :, 6, :], 0) np.testing.assert_allclose(vt[7, :, 7, :], gg.value[:, :]) np.testing.assert_allclose(vt[1, :, :, :], 0) @@ -199,7 +199,7 @@ def test_to_flavor_basis_tensor_gg_qed(self): ), 1, ) - vt, _ = a.to_flavor_basis_tensor() + vt, _ = a.to_flavor_basis_tensor(False) np.testing.assert_allclose(vt[6, :, 6, :], 0) np.testing.assert_allclose(vt[7, :, 7, :], gg.value[:, :]) np.testing.assert_allclose(vt[1, :, :, :], 0) diff --git a/tests/eko/kernels/test_kernels_QEDns.py b/tests/eko/kernels/test_kernels_QEDns.py index e84956084..e6179ba99 100644 --- a/tests/eko/kernels/test_kernels_QEDns.py +++ b/tests/eko/kernels/test_kernels_QEDns.py @@ -25,7 +25,7 @@ def test_zero(): nf = 3 ev_op_iterations = 2 running_alpha = [True, False] - for qcd in range(1, 3 + 1): + for qcd in range(1, 4 + 1): for qed in range(1, 2 + 1): order = (qcd, qed) gamma_ns = ( @@ -73,7 +73,7 @@ def test_zero_true_gamma(): for mode in br.non_singlet_pids_map.values(): if mode in [10201, 10101, 10200]: continue - for qcd in range(1, 3 + 1): + for qcd in range(1, 4 + 1): for qed in range(1, 2 + 1): order = (qcd, qed) n = np.random.rand() @@ -136,7 +136,8 @@ def test_ode(): for mode in br.non_singlet_pids_map.values(): if mode in [10201, 10101, 10200]: continue - for qcd in range(1, 3 + 1): + max_qcd = 4 + for qcd in range(1, max_qcd + 1): for qed in range(1, 2 + 1): order = (qcd, qed) sc = Couplings( @@ -154,14 +155,17 @@ def test_ode(): ) a1 = sc.a_s(mu2_to) gamma_ns = ( - np.random.rand(3 + 1, 2 + 1) + np.random.rand(3 + 1, 2 + 1) * 1j + np.random.rand(max_qcd + 1, 2 + 1) + + np.random.rand(max_qcd + 1, 2 + 1) * 1j ) gamma_ns[0, 0] = 0.0 gamma_ns[2, 1] = 0.0 gamma_ns[3, 1] = 0.0 + gamma_ns[4, 1] = 0.0 gamma_ns[1, 2] = 0.0 gamma_ns[2, 2] = 0.0 gamma_ns[3, 2] = 0.0 + gamma_ns[4, 2] = 0.0 gammatot = 0.0 for i in range(0, order[0] + 1): for j in range(0, order[1] + 1): @@ -226,7 +230,7 @@ def test_ode_true_gamma(): for mode in br.non_singlet_pids_map.values(): if mode in [10201, 10101, 10200]: continue - for qcd in range(1, 3 + 1): + for qcd in range(1, 4 + 1): for qed in range(1, 2 + 1): order = (qcd, qed) sc = Couplings( @@ -302,9 +306,9 @@ def test_ode_true_gamma(): def test_error(): for running in [True, False]: - with pytest.raises(NotImplementedError): + with pytest.raises(ValueError): ns.dispatcher( - (4, 2), + (5, 2), "iterate-exact", np.random.rand(4, 3), [0.1, 0.2], diff --git a/tests/eko/kernels/test_kernels_QEDsinglet.py b/tests/eko/kernels/test_kernels_QEDsinglet.py index 302bb941b..b953c053c 100644 --- a/tests/eko/kernels/test_kernels_QEDsinglet.py +++ b/tests/eko/kernels/test_kernels_QEDsinglet.py @@ -21,7 +21,7 @@ def test_zero(monkeypatch): nf = 3 ev_op_iterations = 2 ev_op_max_order = (3, 0) - for qcd in range(1, 3 + 1): + for qcd in range(1, 4 + 1): for qed in range(1, 2 + 1): order = (qcd, qed) gamma_s = ( @@ -75,11 +75,11 @@ def test_zero_true_gamma(monkeypatch): nf = 3 ev_op_iterations = 2 ev_op_max_order = (3, 0) - for qcd in range(1, 3 + 1): + for qcd in range(1, 4 + 1): for qed in range(1, 2 + 1): order = (qcd, qed) n = np.random.rand() - gamma_s = ad.gamma_singlet_qed(order, n, nf) + gamma_s = ad.gamma_singlet_qed(order, n, nf, (0, 0, 0, 0)) # monkeypatch.setattr( # ad, # "exp_matrix_2D", diff --git a/tests/eko/kernels/test_kernels_QEDvalence.py b/tests/eko/kernels/test_kernels_QEDvalence.py index 95d0cbc4c..a27bc6ef6 100644 --- a/tests/eko/kernels/test_kernels_QEDvalence.py +++ b/tests/eko/kernels/test_kernels_QEDvalence.py @@ -21,7 +21,7 @@ def test_zero(monkeypatch): nf = 3 ev_op_iterations = 2 ev_op_max_order = (3, 0) - for qcd in range(1, 3 + 1): + for qcd in range(1, 4 + 1): for qed in range(1, 2 + 1): order = (qcd, qed) gamma_v = ( @@ -62,7 +62,7 @@ def test_zero_true_gamma(monkeypatch): nf = 3 ev_op_iterations = 2 ev_op_max_order = (3, 0) - for qcd in range(1, 3 + 1): + for qcd in range(1, 4 + 1): for qed in range(1, 2 + 1): order = (qcd, qed) n = np.random.rand() diff --git a/tests/eko/runner/test_parts.py b/tests/eko/runner/test_parts.py new file mode 100644 index 000000000..2ec217dd7 --- /dev/null +++ b/tests/eko/runner/test_parts.py @@ -0,0 +1,22 @@ +from eko.runner import parts + + +def test_evolve_configs(eko_factory): + # QCD@LO + e10 = eko_factory.get() + assert e10.theory_card.order == (1, 0) + p10 = parts.evolve_configs(e10) + assert p10["matching_order"] == (0, 0) + # QCD@N3LO + QED@N2LO w/o matching_order + eko_factory.theory.order = (4, 3) + eko_factory.theory.matching_order = None + e43 = eko_factory.get({}) + assert e43.theory_card.order == (4, 3) + p43 = parts.evolve_configs(e43) + assert p43["matching_order"] == (3, 0) + # QCD@N3LO + QED@N2LO w/ matching_order + eko_factory.theory.matching_order = (3, 0) + e43b = eko_factory.get({}) + assert e43b.theory_card.order == (4, 3) + p43b = parts.evolve_configs(e43b) + assert p43b["matching_order"] == (3, 0) diff --git a/tests/eko/runner/test_recipes.py b/tests/eko/runner/test_recipes.py index 59b1a8855..27bf4e860 100644 --- a/tests/eko/runner/test_recipes.py +++ b/tests/eko/runner/test_recipes.py @@ -26,6 +26,7 @@ def test_elements(): down = elements((5.0, 3), ATLAS) assert all([isinstance(el, Evolution) for i, el in enumerate(down) if i % 2 == 0]) assert all([isinstance(el, Matching) for i, el in enumerate(down) if i % 2 == 1]) + assert all([el.inverse for i, el in enumerate(down) if i % 2 == 1]) def test_create(): diff --git a/tests/eko/test_basis_rotation.py b/tests/eko/test_basis_rotation.py index 680ef065d..194669d46 100644 --- a/tests/eko/test_basis_rotation.py +++ b/tests/eko/test_basis_rotation.py @@ -9,19 +9,19 @@ def test_ad_projector(): g = br.rotate_flavor_to_evolution[2] v3 = br.rotate_flavor_to_evolution[br.evol_basis.index("V3")] - s_to_s = br.ad_projector((100, 100), nf=6) + s_to_s = br.ad_projector((100, 100), nf=6, qed=False) np.testing.assert_allclose(s @ s_to_s, s) np.testing.assert_allclose(g @ s_to_s, 0.0) np.testing.assert_allclose(v3 @ s_to_s, 0.0) - g_to_s = br.ad_projector((21, 100), nf=6) + g_to_s = br.ad_projector((21, 100), nf=6, qed=False) np.testing.assert_allclose(s @ g_to_s, 0.0) np.testing.assert_allclose(g @ g_to_s, s) np.testing.assert_allclose(v3 @ g_to_s, 0.0) - ns_m = br.ad_projector((br.non_singlet_pids_map["ns-"], 0), nf=6) + ns_m = br.ad_projector((br.non_singlet_pids_map["ns-"], 0), nf=6, qed=False) np.testing.assert_allclose(s @ ns_m, 0.0, atol=1e-15) np.testing.assert_allclose(g @ ns_m, 0.0) @@ -74,7 +74,7 @@ def test_ad_projectors(): for nf in range(3, 6 + 1): diag = np.array([0] * (1 + 6 - nf) + [1] * (1 + 2 * nf) + [0] * (6 - nf)) identity = np.diag(diag) - projs = br.ad_projectors(nf) + projs = br.ad_projectors(nf, qed=False) # sum over diagonal projectors form an identity np.testing.assert_allclose( diff --git a/tests/ekobox/test_evol_pdf.py b/tests/ekobox/test_evol_pdf.py index 1c51dfdad..54bce6623 100644 --- a/tests/ekobox/test_evol_pdf.py +++ b/tests/ekobox/test_evol_pdf.py @@ -1,7 +1,9 @@ +import numpy as np from banana import toy import eko from eko import EKO +from eko import basis_rotation as br from eko.interpolation import XGrid from ekobox import cards from ekobox import evol_pdf as ev_p @@ -58,3 +60,58 @@ def test_evolve_pdfs_dump_file(fake_lhapdf, cd): ev_p.evolve_pdfs([toy.mkPDF("", 0)], theory, op, name=n, path=peko) p = fake_lhapdf / n assert p.exists() + + +def test_regroup_evolgrid(): + # basic + i = [(3.0, 3), (4.0, 3)] + o = ev_p.regroup_evolgrid(i) + assert len(o.keys()) == 1 + assert 3 in o + assert len(o[3]) == 2 + # more advanced + i = [(4.0, 3), (3.0, 3), (4.0, 4), (3.0, 4)] + o = ev_p.regroup_evolgrid(i) + assert len(o.keys()) == 2 + assert 3 in o + assert 4 in o + assert len(o[3]) == 2 + assert len(o[4]) == 2 + np.testing.assert_allclose(o[3], o[4]) + # messed up + i = [(4.0, 3), (4.0, 4), (3.0, 4), (3.0, 3), (5.0, 5)] + o = ev_p.regroup_evolgrid(i) + assert len(o.keys()) == 3 + assert 3 in o + assert 4 in o + assert 5 in o + assert len(o[3]) == 2 + assert len(o[4]) == 2 + assert len(o[5]) == 1 + np.testing.assert_allclose(o[3], o[4]) + + +def test_collect_blocks(): + xgrid = [0.1, 0.5, 0.1] + + def mk(eps): + f = {} + for ep in eps: + f[ep] = { + "pdfs": { + pid: np.random.rand(len(xgrid)) for pid in br.flavor_basis_pids + } + } + return f + + # basic + eps = [(3.0, 3), (4.0, 3)] + bs = ev_p.collect_blocks(mk(eps), ev_p.regroup_evolgrid(eps), xgrid) + assert len(bs) == 1 + np.testing.assert_allclose(bs[0]["mu2grid"], (3.0, 4.0)) + # more advanced + eps = [(4.0, 3), (3.0, 3), (5.0, 4), (3.0, 4)] + bs = ev_p.collect_blocks(mk(eps), ev_p.regroup_evolgrid(eps), xgrid) + assert len(bs) == 2 + np.testing.assert_allclose(bs[0]["mu2grid"], (3.0, 4.0)) + np.testing.assert_allclose(bs[1]["mu2grid"], (3.0, 5.0)) diff --git a/tests/ekore/anomalous_dimensions/unpolarized/space_like/test_as4.py b/tests/ekore/anomalous_dimensions/unpolarized/space_like/test_as4.py index e799fa589..13562cd61 100644 --- a/tests/ekore/anomalous_dimensions/unpolarized/space_like/test_as4.py +++ b/tests/ekore/anomalous_dimensions/unpolarized/space_like/test_as4.py @@ -17,8 +17,8 @@ NF = 5 n3lo_vars_dict = { - "gg": 17, - "gq": 24, + "gg": 19, + "gq": 21, "qg": 15, "qq": 6, } @@ -38,16 +38,6 @@ def test_quark_number_conservation(): N = 1 sx_cache = h.cache.reset() - # (ns,s) - # the exact expression (nf^2 part) has an nonphysical pole at N=1, - # see also :cite:`Moch:2017uml` and :cite:`Davies:2016jie` eq 3.5 - # where the \nu term is present. - # This should cancel when doing the limit, since the given moment for N=1 is 0 - # np.testing.assert_allclose(gamma_nsv(N, NF, sx_cache), 0, rtol=3e-7) - - # nf^1 part - np.testing.assert_allclose(gnsv.gamma_nss_nf1(N, sx_cache), 0.000400625, atol=2e-6) - # (ns,-) # nf^3 part np.testing.assert_allclose(gnsp.gamma_ns_nf3(N, sx_cache), 0, atol=3e-15) @@ -60,6 +50,16 @@ def test_quark_number_conservation(): # total np.testing.assert_allclose(gnsm.gamma_nsm(N, NF, sx_cache), 0, atol=1e-10) + # (ns,s) + # the exact expression (nf^2 part) has an nonphysical pole at N=1, + # see also :cite:`Moch:2017uml` and :cite:`Davies:2016jie` eq 3.5 + # where the \nu term is present. + # This should cancel when doing the limit, since the given moment for N=1 is 0 + np.testing.assert_allclose(gnsv.gamma_nss_nf2(N + 1e-8, sx_cache), 0, atol=9e-6) + + # nf^1 part + np.testing.assert_allclose(gnsv.gamma_nss_nf1(N, sx_cache), 0.000400625, atol=2e-6) + def test_momentum_conservation(): N = 2 @@ -101,14 +101,14 @@ def test_momentum_conservation(): ] g_ps[i, :] = [ gps.gamma_ps_nf1(N, sx_cache, variation[3]), - gps.gamma_ps_nf2(N, sx_cache, variation[3]), + gps.gamma_ps_nf2(N, sx_cache), ] # nf^2 part np.testing.assert_allclose( gnsp.gamma_nsp_nf2(N, sx_cache) + g_ps[:, 1] + g_gq[:, 2], 0, - atol=2e-12, + atol=6e-8, ) np.testing.assert_allclose( +g_gg[:, 2] + g_qg[:, 1], @@ -120,7 +120,7 @@ def test_momentum_conservation(): np.testing.assert_allclose( gnsp.gamma_nsp_nf1(N, sx_cache) + g_ps[:, 0] + g_gq[:, 1], 0, - atol=4e-11, + atol=7e-11, ) np.testing.assert_allclose( g_gg[:, 1] + g_qg[:, 0], @@ -144,7 +144,7 @@ def test_momentum_conservation(): np.testing.assert_allclose( g_singlet[:, 0, 0] + g_singlet[:, 1, 0], 0, - atol=2e-10, + atol=2e-7, ) np.testing.assert_allclose( g_singlet[:, 0, 1] + g_singlet[:, 1, 1], @@ -179,10 +179,12 @@ def test_non_singlet_reference_moments(): idx = int((N - 3) / 2) if N != 17: np.testing.assert_allclose( - gnsm.gamma_nsm(N, NF, sx_cache), nsm_nf4_refs[idx] + gnsm.gamma_nsm(N, NF, sx_cache), nsm_nf4_refs[idx], rtol=7e-6 ) np.testing.assert_allclose( - gnsv.gamma_nsv(N, NF, sx_cache), nss_nf4_refs[idx] + nsm_nf4_refs[idx] + gnsv.gamma_nsv(N, NF, sx_cache), + nss_nf4_refs[idx] + nsm_nf4_refs[idx], + rtol=7e-6, ) gamma_nss = ( gnsv.gamma_nss_nf1(N, sx_cache) * NF @@ -206,7 +208,7 @@ def test_singlet_reference_moments(): for N in [2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0]: sx_cache = h.cache.reset() np.testing.assert_allclose( - gnsp.gamma_nsp(N, NF, sx_cache), nsp_nf4_refs[int((N - 2) / 2)] + gnsp.gamma_nsp(N, NF, sx_cache), nsp_nf4_refs[int((N - 2) / 2)], rtol=3e-6 ) @@ -280,7 +282,7 @@ def deltaB3(n, sx_cache): sx_cache = h.cache.reset() diff.append(gnsp.gamma_nsp_nf2(N, sx_cache) - gnsm.gamma_nsm_nf2(N, sx_cache)) ref_vals.append(deltaB3(N, sx_cache)) - np.testing.assert_allclose(diff, ref_vals, atol=5e-4) + np.testing.assert_allclose(diff, ref_vals, atol=5e-3) diff = [] ref_vals = [] @@ -288,7 +290,7 @@ def deltaB3(n, sx_cache): sx_cache = h.cache.reset() diff.append(gnsp.gamma_nsp_nf2(N, sx_cache) - gnsm.gamma_nsm_nf2(N, sx_cache)) ref_vals.append(deltaB3(N, sx_cache)) - np.testing.assert_allclose(diff, ref_vals, atol=2e-2) + np.testing.assert_allclose(diff, ref_vals, atol=2.1e-2) def test_gamma_ps_extrapolation(): diff --git a/tests/ekore/anomalous_dimensions/unpolarized/space_like/test_init.py b/tests/ekore/anomalous_dimensions/unpolarized/space_like/test_init.py index 2175eddcd..c7c955960 100644 --- a/tests/ekore/anomalous_dimensions/unpolarized/space_like/test_init.py +++ b/tests/ekore/anomalous_dimensions/unpolarized/space_like/test_init.py @@ -208,7 +208,7 @@ def test_dim_singlet(): nf = 3 N = 2 cache = h.cache.reset() - gamma_singlet = ad_us.gamma_singlet_qed((3, 2), N, nf) + gamma_singlet = ad_us.gamma_singlet_qed((3, 2), N, nf, (0, 0, 0, 0)) assert gamma_singlet.shape == (4, 3, 4, 4) gamma_singlet_as1 = ad_us.as1.gamma_singlet_qed(N, cache, nf) assert gamma_singlet_as1.shape == (4, 4)