From 44276df4eae2557e2105c769d837ed3fb1cb311d Mon Sep 17 00:00:00 2001 From: Niccolo' Laurenti Date: Wed, 2 Feb 2022 12:29:18 +0100 Subject: [PATCH 01/24] Init QED --- doc/source/theory/FlavorSpace.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index 6882430f4..be1ce999d 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -15,7 +15,7 @@ Here we use the raw quark flavors along with the gluon as they correspond to the operator in the Lagrange density: .. math :: - \mathcal F = \mathcal F_{fl} = \span(g, u, \bar u, d, \bar d, s, \bar s, c, \bar c, b, \bar b, t, \bar t) + \mathcal F = \mathcal F_{fl} = \span(\gamma, g, u, \bar u, d, \bar d, s, \bar s, c, \bar c, b, \bar b, t, \bar t) - we deliver the :class:`~eko.output.Output` in this basis, although the flavors are slightly differently arranged (Implementation: :data:`here `). From a466e5b87b179baf58e40ea7003df7483ec2d098 Mon Sep 17 00:00:00 2001 From: Niccolo' Laurenti Date: Wed, 2 Feb 2022 12:31:38 +0100 Subject: [PATCH 02/24] Init QED flavor documentation --- doc/source/theory/FlavorSpace.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index be1ce999d..88b51b153 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -35,7 +35,7 @@ that e.g. in the proton will carry most of the momentum at large x and :math:`q^ sea quark distribution: .. math :: - \mathcal F \sim \mathcal F_{\pm} = \span(g, u^+, u^-, d^+, d^-, s^+, s^-, c^+, c^-, b^+, b^-, t^+, t^-) + \mathcal F \sim \mathcal F_{\pm} = \span(\gamma, g, u^+, u^-, d^+, d^-, s^+, s^-, c^+, c^-, b^+, b^-, t^+, t^-) - this basis is *not* normalized with respect to the canonical Flavor Basis - the basis transformation to the Flavor Basis is implemented in From 827b7060327c5f306a72472b3b1ace28458d57a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Mon, 7 Feb 2022 17:17:18 +0100 Subject: [PATCH 03/24] Add doc on QCD x QED evolution basis --- doc/source/theory/FlavorSpace.rst | 49 ++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index 88b51b153..97efe131d 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -41,8 +41,8 @@ sea quark distribution: - the basis transformation to the Flavor Basis is implemented in :meth:`~eko.evolution_operator.flavors.rotate_pm_to_flavor` -Evolution Basis ---------------- +QCD Evolution Basis +------------------- As the gluon is flavor-blind it is handy to solve |DGLAP| not in the flavor basis, but in the Evolution Basis where instead we need to solve a minimal coupled system. @@ -75,9 +75,10 @@ The mapping between the Evolution Basis and the +/- Basis is given by - this basis is *not* normalized with respect to the canonical Flavor Basis - the basis transformation from the Flavor Basis is implemented in :data:`~eko.basis_rotation.rotate_flavor_to_evolution` +- the photon is just a spectator and does not couple to anyone -Intrinsic Evolution Bases -------------------------- +Intrinsic QCD Evolution Bases +----------------------------- However, the Evolution Basis is not yet the most decoupled basis if we consider intrinsic evolution. The intrinsic distributions do *not* participate in the |DGLAP| equation but instead evolve with a unity operator: @@ -99,6 +100,46 @@ where we defined :math:`\Sigma_{(3)} = \sum\limits_{j=1}^3 q_j^+` and :math:`V_{ - note that for the case of non-intrinsic component the higher elements in :math:`\mathcal F_{ev}` do become linear dependent to other basis vectors (e.g. :math:`\left. T_{15}\right|_{c^+ = 0} = \Sigma`) but are non zero - instead in :math:`\mathcal F_{iev,3}` this direction vanishes +- the photon is just a spectator and does not couple to anyone + + +QED :math:`\otimes` QCD Evolution Basis +--------------------------------------- + +In presence of QED corrections to DGLAP evolution equations, +the QCD Evolution basis does not decouple the distributions +as it was for the pure QCD evolution. +In this case the QED :math:`\otimes` QCD evolution basis that performs the maximal decoupling is given by: + +.. math :: + \Sigma_u & = u^+ + c^+ + t^+ \\ + \Sigma_d & = d^+ + s^+ + b^+ \\ + \Sigma &= \Sigma_u + \Sigma_d \\ + \Delta_\Sigma &= \Sigma_u - \Sigma_d \\ + V_u & = u^- + c^- + t^- \\ + V_d & = d^- + s^- + b^- \\ + V &= V_u + V_d \\ + \Delta_V &= V_u - V_d \\ + T_1^u &=u^+ - c^+ \\ + T_2^u &=u^+ + c^+ - 2t^+ \\ + T_1^d &=d^+ - s^+ \\ + T_2^d &=d^+ + s^+ - 2b^+ \\ + V_1^u &=u^- - c^- \\ + V_2^u &=u^- + c^- - 2t^- \\ + V_1^d &=d^- - s^- \\ + V_2^d &=d^- + s^- - 2b^- \\ + \mathcal F \sim \mathcal F_{QED} &= \span(\gamma, g, \Sigma, \Delta_\Sigma, V, \Delta_V, T_1^u, T_2^u, T_1^d, T_2^d, V_1^u, V_2^u, V_1^d, V_2^d) + + +- :math:`T_1` and :math:`T_2` are just arbitrary name and do not follow any group representation like it was for the :ref:`theory/FlavorSpace:QCD Evolution Basis` +- this basis is *not* normalized with respect to the canonical Flavor Basis +- The singlet :math:`\Sigma` is just the QCD singlet +- The valence :math:`V` is just the QCD valence + + + + + Other Bases ----------- From 875a8a3bebc3ce903e3256608ab7bba3e4de5ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Tue, 8 Feb 2022 12:27:52 +0100 Subject: [PATCH 04/24] Modify FlavorSpace.rst --- doc/source/theory/FlavorSpace.rst | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index 97efe131d..06c0bfc3d 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -3,7 +3,7 @@ Flavor Space An |EKO| is a rank-4 operator acting both in Flavor Space :math:`\mathcal F` and momentum fraction space :math:`\mathcal X`. -By Flavor Space :math:`\mathcal F` we mean the 13-dimensional function space that contains +By Flavor Space :math:`\mathcal F` we mean the 14-dimensional function space that contains the different |PDF| flavor. Note, that there is an ambiguity concerning the word "Flavor Basis" which is sometimes referred to as an *abstract* basis in the Flavor Space, but often the specific basis described here below is meant. @@ -11,7 +11,7 @@ in the Flavor Space, but often the specific basis described here below is meant. Flavor Basis ------------ -Here we use the raw quark flavors along with the gluon as they correspond to the +Here we use the raw quark flavors along with the gluon and the photon as they correspond to the operator in the Lagrange density: .. math :: @@ -45,7 +45,8 @@ QCD Evolution Basis ------------------- As the gluon is flavor-blind it is handy to solve |DGLAP| not in the flavor basis, -but in the Evolution Basis where instead we need to solve a minimal coupled system. +but in the QCD Evolution Basis where instead we need to solve a minimal coupled system. +This is the basis in which DGLAP equations are solved considering only QCD corrections. The new basis elements can be separated into two major classes: the singlet sector, consisting of the singlet distribution :math:`\Sigma` and the gluon distribution :math:`g`, and the non-singlet sector. The non-singlet sector can be again subdivided into three groups: first the full @@ -66,7 +67,7 @@ The mapping between the Evolution Basis and the +/- Basis is given by T_{15} &= u^+ + d^+ + s^+ - 3 c^+\\ T_{24} &= u^+ + d^+ + s^+ + c^+ - 4 b^+\\ T_{35} &= u^+ + d^+ + s^+ + c^+ + b^+ - 5 t^+\\ - \mathcal F \sim \mathcal F_{ev} &= \span(g, \Sigma, V, V_{3}, V_{8}, V_{15}, V_{24}, V_{35}, T_{3}, T_{8}, T_{15}, T_{24}, T_{35}) + \mathcal F \sim \mathcal F_{ev} &= \span(\gamma, g, \Sigma, V, V_{3}, V_{8}, V_{15}, V_{24}, V_{35}, T_{3}, T_{8}, T_{15}, T_{24}, T_{35}) - the associated numbers to the valence-like and singlet-like non-singlet distributions @@ -80,20 +81,20 @@ The mapping between the Evolution Basis and the +/- Basis is given by Intrinsic QCD Evolution Bases ----------------------------- -However, the Evolution Basis is not yet the most decoupled basis if we consider intrinsic evolution. +However, the QCD Evolution Basis is not yet the most decoupled basis if we consider intrinsic evolution. The intrinsic distributions do *not* participate in the |DGLAP| equation but instead evolve with a unity operator: this makes, e.g. :math:`T_{15}` a composite object in a evolution range below the charm mass. Instead, we will keep the non participating distributions here in their :math:`q^\pm` representation. -The Intrinsic Evolution Bases will explicitly depend on the number of light flavors :math:`n_f`. +The Intrinsic QCD Evolution Bases will explicitly depend on the number of light flavors :math:`n_f`. For :math:`n_f=3` we define (the other cases are defined analogously): .. math :: - \mathcal F \sim \mathcal F_{iev,3} = \span(g, \Sigma_{(3)}, V_{(3)}, V_3, V_8, T_3, T_8, c^+, c^-, b^+, b^-, t^+, t^-) + \mathcal F \sim \mathcal F_{iev,3} = \span(\gamma, g, \Sigma_{(3)}, V_{(3)}, V_3, V_8, T_3, T_8, c^+, c^-, b^+, b^-, t^+, t^-) where we defined :math:`\Sigma_{(3)} = \sum\limits_{j=1}^3 q_j^+` and :math:`V_{(3)} = \sum\limits_{j=1}^3 q_j^-` (not to be confused with the usual :math:`V_3`). -- for :math:`n_f=6` the Intrinsic Evolution Basis coincides with the Evolution Basis: :math:`\mathcal F_{iev,6} = \mathcal F_{ev}` +- for :math:`n_f=6` the Intrinsic QCD Evolution Basis coincides with the QCD Evolution Basis: :math:`\mathcal F_{iev,6} = \mathcal F_{ev}` - this basis is *not* normalized with respect to the canonical Flavor Basis - the basis transformation from the Flavor Basis is implemented in :meth:`~eko.evolution_operator.flavors.pids_from_intrinsic_evol` @@ -131,7 +132,7 @@ In this case the QED :math:`\otimes` QCD evolution basis that performs the maxim \mathcal F \sim \mathcal F_{QED} &= \span(\gamma, g, \Sigma, \Delta_\Sigma, V, \Delta_V, T_1^u, T_2^u, T_1^d, T_2^d, V_1^u, V_2^u, V_1^d, V_2^d) -- :math:`T_1` and :math:`T_2` are just arbitrary name and do not follow any group representation like it was for the :ref:`theory/FlavorSpace:QCD Evolution Basis` +- :math:`T_1` and :math:`T_2` are just arbitrary names and do not follow any group representation like it was for the :ref:`theory/FlavorSpace:QCD Evolution Basis` - this basis is *not* normalized with respect to the canonical Flavor Basis - The singlet :math:`\Sigma` is just the QCD singlet - The valence :math:`V` is just the QCD valence From 9b8e539ccf34c8fa743514f0ee01c4bb5b6a30e2 Mon Sep 17 00:00:00 2001 From: Felix Hekhorn Date: Fri, 11 Feb 2022 14:36:42 +0100 Subject: [PATCH 05/24] Add intrinsic bases --- .pre-commit-config.yaml | 6 ++--- doc/source/theory/FlavorSpace.rst | 41 +++++++++++++++++++++---------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5112c7379..9373b13e5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,7 +2,7 @@ # See https://pre-commit.com/hooks.html for more hooks repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.0.1 + rev: v4.1.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer @@ -12,11 +12,11 @@ repos: - id: debug-statements - id: fix-encoding-pragma - repo: https://github.com/psf/black - rev: 21.10b0 + rev: 22.1.0 hooks: - id: black - repo: https://github.com/asottile/blacken-docs - rev: v1.12.0 + rev: v1.12.1 hooks: - id: blacken-docs - repo: https://github.com/pycqa/isort diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index 06c0bfc3d..8d031a2ee 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -89,10 +89,11 @@ The Intrinsic QCD Evolution Bases will explicitly depend on the number of light For :math:`n_f=3` we define (the other cases are defined analogously): .. math :: - \mathcal F \sim \mathcal F_{iev,3} = \span(\gamma, g, \Sigma_{(3)}, V_{(3)}, V_3, V_8, T_3, T_8, c^+, c^-, b^+, b^-, t^+, t^-) + \Sigma_{(3)} &= u^+ + d^+ +s^+\\ + V_{(3)} = u^- + d^- + s^-\\ + \mathcal F \sim \mathcal F_{iev,3} &= \span(\gamma, g, \Sigma_{(3)}, V_{(3)}, V_3, V_8, T_3, T_8, c^+, c^-, b^+, b^-, t^+, t^-) -where we defined :math:`\Sigma_{(3)} = \sum\limits_{j=1}^3 q_j^+` and :math:`V_{(3)} = \sum\limits_{j=1}^3 q_j^-` -(not to be confused with the usual :math:`V_3`). +where :math:`V_{(3)}` is to be confused with the usual (QCD like) :math:`V_3`. - for :math:`n_f=6` the Intrinsic QCD Evolution Basis coincides with the QCD Evolution Basis: :math:`\mathcal F_{iev,6} = \mathcal F_{ev}` - this basis is *not* normalized with respect to the canonical Flavor Basis @@ -107,8 +108,8 @@ where we defined :math:`\Sigma_{(3)} = \sum\limits_{j=1}^3 q_j^+` and :math:`V_{ QED :math:`\otimes` QCD Evolution Basis --------------------------------------- -In presence of QED corrections to DGLAP evolution equations, -the QCD Evolution basis does not decouple the distributions +In presence of QED corrections to DGLAP evolution equations, +the QCD Evolution basis does not decouple the distributions as it was for the pure QCD evolution. In this case the QED :math:`\otimes` QCD evolution basis that performs the maximal decoupling is given by: @@ -118,7 +119,7 @@ In this case the QED :math:`\otimes` QCD evolution basis that performs the maxim \Sigma &= \Sigma_u + \Sigma_d \\ \Delta_\Sigma &= \Sigma_u - \Sigma_d \\ V_u & = u^- + c^- + t^- \\ - V_d & = d^- + s^- + b^- \\ + V_d & = d^- + s^- + b^- \\ V &= V_u + V_d \\ \Delta_V &= V_u - V_d \\ T_1^u &=u^+ - c^+ \\ @@ -129,18 +130,32 @@ In this case the QED :math:`\otimes` QCD evolution basis that performs the maxim V_2^u &=u^- + c^- - 2t^- \\ V_1^d &=d^- - s^- \\ V_2^d &=d^- + s^- - 2b^- \\ - \mathcal F \sim \mathcal F_{QED} &= \span(\gamma, g, \Sigma, \Delta_\Sigma, V, \Delta_V, T_1^u, T_2^u, T_1^d, T_2^d, V_1^u, V_2^u, V_1^d, V_2^d) + \mathcal F \sim \mathcal F_{QED\otimes{}QCD} &= \span(\gamma, g, \Sigma, \Delta_\Sigma, V, \Delta_V, T_1^u, T_2^u, T_1^d, T_2^d, V_1^u, V_2^u, V_1^d, V_2^d) - :math:`T_1` and :math:`T_2` are just arbitrary names and do not follow any group representation like it was for the :ref:`theory/FlavorSpace:QCD Evolution Basis` - this basis is *not* normalized with respect to the canonical Flavor Basis -- The singlet :math:`\Sigma` is just the QCD singlet -- The valence :math:`V` is just the QCD valence +- The singlet :math:`\Sigma` is just the QCD singlet +- The valence :math:`V` is just the QCD valence - +Intrinsic QED :math:`\otimes` QCD Evolution Basis +------------------------------------------------- +Again, we need the generalization to the presence of intrinsic (static) distributions. +As QED can distinguish between up-like and down-like flavors the situation is again slightly +more involved. +For :math:`nf=3` light flavors we find: + +.. math :: + \Sigma_{(3)} &= u^+ + d^+ + s^+\\ + V_{(3)} &= u^- + d^- + s^-\\ + T_0 &= 2u^+ - d^+ - s^+\\ + T_1^d &= d^+ - s^+\\ + V_0 &= 2u^- - d^- - s^-\\ + V_1^d &= d^- - s^-\\ + \mathcal F \sim \mathcal F_{iev,3} &= \span(\gamma, g, \Sigma_{(3)}, V_{(3)}, V_0, V_1^d, T_0, T_1^d, c^+, c^-, b^+, b^-, t^+, t^-) Other Bases ----------- @@ -179,10 +194,10 @@ Operator Anomalous Dimension Basis - this basis can *not* span any threshold but can only be used for a *fixed* number of flavors - all actual computations are done in this basis -Operator Intrinsic Evolution Basis -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Operator Intrinsic QCD Evolution Basis +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- here we mean :ref:`theory/FlavorSpace:Intrinsic Evolution Bases` both in the input and the output space +- here we mean :ref:`theory/FlavorSpace:Intrinsic QCD Evolution Bases` both in the input and the output space - this basis does **not** coincide with the :ref:`theory/FlavorSpace:Operator Anomalous Dimension Basis` as the decision on which operator of that basis is used is a non-trivial decision - see :doc:`Matching` - this basis has :math:`2n_f+ 3 = 15` elements From 6849bae911905ca8323e92510dd0de78948a8fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Fri, 11 Feb 2022 14:47:43 +0100 Subject: [PATCH 06/24] Fix intrinsic base --- doc/source/theory/FlavorSpace.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index 8d031a2ee..da7df3054 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -146,7 +146,7 @@ Again, we need the generalization to the presence of intrinsic (static) distribu As QED can distinguish between up-like and down-like flavors the situation is again slightly more involved. -For :math:`nf=3` light flavors we find: +For :math:`n_f=3` light flavors we find: .. math :: \Sigma_{(3)} &= u^+ + d^+ + s^+\\ @@ -155,7 +155,7 @@ For :math:`nf=3` light flavors we find: T_1^d &= d^+ - s^+\\ V_0 &= 2u^- - d^- - s^-\\ V_1^d &= d^- - s^-\\ - \mathcal F \sim \mathcal F_{iev,3} &= \span(\gamma, g, \Sigma_{(3)}, V_{(3)}, V_0, V_1^d, T_0, T_1^d, c^+, c^-, b^+, b^-, t^+, t^-) + \mathcal F \sim \mathcal F_{iuev,3} &= \span(\gamma, g, \Sigma_{(3)}, V_{(3)}, V_0, V_1^d, T_0, T_1^d, c^+, c^-, b^+, b^-, t^+, t^-) Other Bases ----------- From 06972d4b72ac011c67fea92782f3861be1c18084 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Fri, 11 Feb 2022 17:09:20 +0100 Subject: [PATCH 07/24] Implement QEDxQCD flavor basis --- doc/source/theory/FlavorSpace.rst | 17 ++- src/eko/basis_rotation.py | 38 ++++++ src/eko/evolution_operator/flavors.py | 177 +++++++++++++++++++++++++- tests/test_basis_rotation.py | 10 ++ tests/test_ev_op_flavors.py | 18 +++ 5 files changed, 253 insertions(+), 7 deletions(-) diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index da7df3054..5519b8640 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -151,11 +151,22 @@ For :math:`n_f=3` light flavors we find: .. math :: \Sigma_{(3)} &= u^+ + d^+ + s^+\\ V_{(3)} &= u^- + d^- + s^-\\ - T_0 &= 2u^+ - d^+ - s^+\\ + T_{0,(3)} &= 2u^+ - d^+ - s^+\\ T_1^d &= d^+ - s^+\\ - V_0 &= 2u^- - d^- - s^-\\ + V_{0,(3)} &= 2u^- - d^- - s^-\\ V_1^d &= d^- - s^-\\ - \mathcal F \sim \mathcal F_{iuev,3} &= \span(\gamma, g, \Sigma_{(3)}, V_{(3)}, V_0, V_1^d, T_0, T_1^d, c^+, c^-, b^+, b^-, t^+, t^-) + \mathcal F \sim \mathcal F_{iuev,3} &= \span(\gamma, g, \Sigma_{(3)}, V_{(3)}, V_{0,(3)}, V_1^d, T_{0,(3)}, T_1^d, c^+, c^-, b^+, b^-, t^+, t^-) + +For :math:`n_f=4` light flavors we find: + +.. math :: + \Sigma_{(4)} &= u^+ + d^+ + s^+ + cˆ+\\ + V_{(4)} &= u^- + d^- + s^- + cˆ-\\ + T_{0,(4)} &= u^+ + cˆ+ - d^+ - s^+\\ + T_1^u &= u^+ - c^+\\ + V_{0,(4)} &= u^- + cˆ- - d^- - s^-\\ + V_1^u &= u^- - c^-\\ + \mathcal F \sim \mathcal F_{iuev,4} &= \span(\gamma, g, \Sigma_{(4)}, V_{(4)}, V_{0,(4)}, V_1^d, T_{0,(4)}, T_1^d, V_1^u, T_1^u, b^+, b^-, t^+, t^-) Other Bases ----------- diff --git a/src/eko/basis_rotation.py b/src/eko/basis_rotation.py index 08cbf66e4..5997bab43 100644 --- a/src/eko/basis_rotation.py +++ b/src/eko/basis_rotation.py @@ -168,3 +168,41 @@ def ad_projectors(nf): projs.append(ad_projector(ad, nf)) return np.array(projs) + + +def iuev_labels(nf): + """ + Collect all labels in the intrinsic unified evolution basis. + + Parameters + ---------- + nf : int + number of light flavors + + Returns + ------- + labels : list(str) + active distributions + """ + labels = [ + "ph", + "g", + "S", + "V", + "T0", + "V0", + "T1d", + "V1d", + ] + if nf == 3: + labels.extend(["c+", "c-", "b+", "b-", "t+", "t-"]) + elif nf == 4: + labels.extend(["T1u", "V1u", "b+", "b-", "t+", "t-"]) + elif nf == 5: + labels.extend(["T1u", "V1u", "T2d", "V2d", "t+", "t-"]) + elif nf == 6: + labels.extend(["T1u", "V1u", "T2d", "V2d", "T2u", "V2u"]) + else: + raise ValueError("Invalid number of light flavors") + + return labels diff --git a/src/eko/evolution_operator/flavors.py b/src/eko/evolution_operator/flavors.py index 525cc844b..7dd49df90 100644 --- a/src/eko/evolution_operator/flavors.py +++ b/src/eko/evolution_operator/flavors.py @@ -12,7 +12,7 @@ quark_names = "duscbt" -def pids_from_intrinsic_evol(label, nlf, normalize): +def pids_from_intrinsic_evol(label, nf, normalize): r""" Obtain the list of pids with their corresponding weight, that are contributing to ``evol`` @@ -24,13 +24,13 @@ def pids_from_intrinsic_evol(label, nlf, normalize): e.g. in nf=3 :math:`u = \frac 1 6 S + \frac 1 6 V + \ldots` The normalization can only happen here since we're actively cutting out some - flavor (according to ``nlf``). + flavor (according to ``nf``). Parameters ---------- evol : str evolution label - nlf : int + nf : int maximum number of light flavors normalize : bool normalize output @@ -47,7 +47,7 @@ def pids_from_intrinsic_evol(label, nlf, normalize): if is_evol: weights = br.rotate_flavor_to_evolution[evol_idx].copy() for j, pid in enumerate(br.flavor_basis_pids): - if nlf < abs(pid) <= 6: + if nf < abs(pid) <= 6: weights[j] = 0 else: weights = rotate_pm_to_flavor(label) @@ -168,3 +168,172 @@ def rotate_matching(nf, inverse=False): def rotate_matching_inverse(nf): return rotate_matching(nf, True) + + +def pids_from_iuev(label, nf, normalize): + r""" + Obtain the list of pids with their corresponding weight, that are contributing to intrinsic unified evolution. + + Parameters + ---------- + evol : str + evolution label + nf : int + maximum number of light flavors + normalize : bool + normalize output + + Returns + ------- + m : list + """ + if label[0] in "cbt": + weights = rotate_pm_to_flavor(label) + else: + if label in ["ph", "g", "S", "V"]: + return pids_from_intrinsic_evol(label, nf, normalize) + weights = np.array([0.] * len(br.flavor_basis_pids)) + if label == "T1d": # T1d = d+ - s+ + weights[br.flavor_basis_pids.index(1)] = 1 + weights[br.flavor_basis_pids.index(-1)] = 1 + weights[br.flavor_basis_pids.index(3)] = -1 + weights[br.flavor_basis_pids.index(-3)] = -1 + elif label == "V1d": # V1d = d- - s- + weights[br.flavor_basis_pids.index(1)] = 1 + weights[br.flavor_basis_pids.index(-1)] = -1 + weights[br.flavor_basis_pids.index(3)] = -1 + weights[br.flavor_basis_pids.index(-3)] = 1 + elif label == "T2d": # T2d = d+ + s+ - 2b+ + weights[br.flavor_basis_pids.index(1)] = 1 + weights[br.flavor_basis_pids.index(-1)] = 1 + weights[br.flavor_basis_pids.index(3)] = 1 + weights[br.flavor_basis_pids.index(-3)] = 1 + weights[br.flavor_basis_pids.index(5)] = -2 + weights[br.flavor_basis_pids.index(-5)] = -2 + elif label == "V2d": # V2d = d- + s- - 2b- + weights[br.flavor_basis_pids.index(1)] = 1 + weights[br.flavor_basis_pids.index(-1)] = -1 + weights[br.flavor_basis_pids.index(3)] = 1 + weights[br.flavor_basis_pids.index(-3)] = -1 + weights[br.flavor_basis_pids.index(5)] = -2 + weights[br.flavor_basis_pids.index(-5)] = +2 + elif label == "V1u": # V1u = u- - c- + weights[br.flavor_basis_pids.index(2)] = 1 + weights[br.flavor_basis_pids.index(-2)] = -1 + weights[br.flavor_basis_pids.index(4)] = -1 + weights[br.flavor_basis_pids.index(-4)] = 1 + elif label == "T1u": # T1u = u+ - c+ + weights[br.flavor_basis_pids.index(2)] = 1 + weights[br.flavor_basis_pids.index(-2)] = 1 + weights[br.flavor_basis_pids.index(4)] = -1 + weights[br.flavor_basis_pids.index(-4)] = -1 + elif label == "T2u": # T2u = u+ + c+ - 2t+ + weights[br.flavor_basis_pids.index(2)] = 1 + weights[br.flavor_basis_pids.index(-2)] = 1 + weights[br.flavor_basis_pids.index(4)] = 1 + weights[br.flavor_basis_pids.index(-4)] = 1 + weights[br.flavor_basis_pids.index(6)] = -2 + weights[br.flavor_basis_pids.index(-6)] = -2 + elif label == "V2u": # V2u = u- + c- - 2t- + weights[br.flavor_basis_pids.index(2)] = 1 + weights[br.flavor_basis_pids.index(-2)] = -1 + weights[br.flavor_basis_pids.index(4)] = 1 + weights[br.flavor_basis_pids.index(-4)] = -1 + weights[br.flavor_basis_pids.index(6)] = -2 + weights[br.flavor_basis_pids.index(-6)] = +2 + elif label == "T0": + if nf == 3: # T0 = 2u+ - d+ -s+ + weights[br.flavor_basis_pids.index(2)] = 2 + weights[br.flavor_basis_pids.index(-2)] = 2 + weights[br.flavor_basis_pids.index(1)] = -1 + weights[br.flavor_basis_pids.index(-1)] = -1 + weights[br.flavor_basis_pids.index(3)] = -1 + weights[br.flavor_basis_pids.index(-3)] = -1 + elif nf == 4: # T0 = u+ + c+ - d+ -s+ + weights[br.flavor_basis_pids.index(2)] = 1 + weights[br.flavor_basis_pids.index(-2)] = 1 + weights[br.flavor_basis_pids.index(4)] = 1 + weights[br.flavor_basis_pids.index(-4)] = 1 + weights[br.flavor_basis_pids.index(1)] = -1 + weights[br.flavor_basis_pids.index(-1)] = -1 + weights[br.flavor_basis_pids.index(3)] = -1 + weights[br.flavor_basis_pids.index(-3)] = -1 + elif nf == 5: # T0 = 3/2u+ + 3/2c+ - d+ -s+ - b+ + weights[br.flavor_basis_pids.index(2)] = 3./2 + weights[br.flavor_basis_pids.index(-2)] = 3./2 + weights[br.flavor_basis_pids.index(4)] = 3./2 + weights[br.flavor_basis_pids.index(-4)] = 3./2 + weights[br.flavor_basis_pids.index(1)] = -1 + weights[br.flavor_basis_pids.index(-1)] = -1 + weights[br.flavor_basis_pids.index(3)] = -1 + weights[br.flavor_basis_pids.index(-3)] = -1 + weights[br.flavor_basis_pids.index(5)] = -1 + weights[br.flavor_basis_pids.index(-5)] = -1 + elif nf == 6: # T0 = u+ + c+ + t+ - d+ -s+ - b+ + weights[br.flavor_basis_pids.index(2)] = 1 + weights[br.flavor_basis_pids.index(-2)] = 1 + weights[br.flavor_basis_pids.index(4)] = 1 + weights[br.flavor_basis_pids.index(-4)] = 1 + weights[br.flavor_basis_pids.index(6)] = 1 + weights[br.flavor_basis_pids.index(-6)] = 1 + weights[br.flavor_basis_pids.index(1)] = -1 + weights[br.flavor_basis_pids.index(-1)] = -1 + weights[br.flavor_basis_pids.index(3)] = -1 + weights[br.flavor_basis_pids.index(-3)] = -1 + weights[br.flavor_basis_pids.index(5)] = -1 + weights[br.flavor_basis_pids.index(-5)] = -1 + else: + raise ValueError("Invalid number of light flavors") + elif label == "V0": + if nf == 3: # V0 = 2u- - d- -s- + weights[br.flavor_basis_pids.index(2)] = 2 + weights[br.flavor_basis_pids.index(-2)] = -2 + weights[br.flavor_basis_pids.index(1)] = -1 + weights[br.flavor_basis_pids.index(-1)] = 1 + weights[br.flavor_basis_pids.index(3)] = -1 + weights[br.flavor_basis_pids.index(-3)] = 1 + elif nf == 4: # V0 = u- + c- - d- -s- + weights[br.flavor_basis_pids.index(2)] = 1 + weights[br.flavor_basis_pids.index(-2)] = -1 + weights[br.flavor_basis_pids.index(4)] = 1 + weights[br.flavor_basis_pids.index(-4)] = -1 + weights[br.flavor_basis_pids.index(1)] = -1 + weights[br.flavor_basis_pids.index(-1)] = 1 + weights[br.flavor_basis_pids.index(3)] = -1 + weights[br.flavor_basis_pids.index(-3)] = 1 + elif nf == 5: # V0 = 3/2u- + 3/2c- - d- -s- - b- + weights[br.flavor_basis_pids.index(2)] = 3./2 + weights[br.flavor_basis_pids.index(-2)] = -3./2 + weights[br.flavor_basis_pids.index(4)] = 3./2 + weights[br.flavor_basis_pids.index(-4)] = -3./2 + weights[br.flavor_basis_pids.index(1)] = -1 + weights[br.flavor_basis_pids.index(-1)] = 1 + weights[br.flavor_basis_pids.index(3)] = -1 + weights[br.flavor_basis_pids.index(-3)] = 1 + weights[br.flavor_basis_pids.index(5)] = -1 + weights[br.flavor_basis_pids.index(-5)] = 1 + elif nf == 6: # V0 = u- + c- + t- - d- -s- - b- + weights[br.flavor_basis_pids.index(2)] = 1 + weights[br.flavor_basis_pids.index(-2)] = -1 + weights[br.flavor_basis_pids.index(4)] = 1 + weights[br.flavor_basis_pids.index(-4)] = -1 + weights[br.flavor_basis_pids.index(6)] = 1 + weights[br.flavor_basis_pids.index(-6)] = -1 + weights[br.flavor_basis_pids.index(1)] = -1 + weights[br.flavor_basis_pids.index(-1)] = 1 + weights[br.flavor_basis_pids.index(3)] = -1 + weights[br.flavor_basis_pids.index(-3)] = 1 + weights[br.flavor_basis_pids.index(5)] = -1 + weights[br.flavor_basis_pids.index(-5)] = 1 + else: + raise ValueError("Invalid number of light flavors") + else: + raise ValueError("Invalid label") + # normalize? + if normalize: + norm = weights @ weights + weights = weights / norm + return weights + + + diff --git a/tests/test_basis_rotation.py b/tests/test_basis_rotation.py index 2687874a6..aa7c0c985 100644 --- a/tests/test_basis_rotation.py +++ b/tests/test_basis_rotation.py @@ -1,4 +1,5 @@ import numpy as np +import pytest from eko import basis_rotation as br @@ -40,3 +41,12 @@ def test_ad_projectors(): atol=1e-15, err_msg=f"nf = {nf}", ) + + +def test_iuev_labels(): + for nf in range(3, 6 + 1): + labels = br.iuev_labels(nf) + assert len(labels) == 14 + # errors + with pytest.raises(ValueError): + br.iuev_labels(7) diff --git a/tests/test_ev_op_flavors.py b/tests/test_ev_op_flavors.py index dcd190159..35627675e 100644 --- a/tests/test_ev_op_flavors.py +++ b/tests/test_ev_op_flavors.py @@ -112,3 +112,21 @@ def load(m): m = load(flavors.rotate_matching(nf)) minv = load(flavors.rotate_matching_inverse(nf)) np.testing.assert_allclose(m @ minv, np.eye(len(br.evol_basis)), atol=1e-10) + +def test_pids_from_iuev(): + for nf in range(3, 6+1): + labels = br.iuev_labels(nf) + for lab in labels: + n = flavors.pids_from_iuev(lab, nf, True) + for lab2 in labels: + n2 = flavors.pids_from_iuev(lab2, nf, False) + if lab == lab2: + np.testing.assert_allclose(n @ n2, 1.) + else: + np.testing.assert_allclose(n @ n2, 0., atol=1e-10, err_msg=f"{lab} is not orthogonal to {lab2} in nf={nf}") + with pytest.raises(ValueError): + flavors.pids_from_iuev("V3",4,True) + with pytest.raises(ValueError): + flavors.pids_from_iuev("T0",7,True) + with pytest.raises(ValueError): + flavors.pids_from_iuev("V0",7,True) \ No newline at end of file From e4e6bc2446159de70a305a99487f6784b964e6cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Fri, 11 Feb 2022 17:12:51 +0100 Subject: [PATCH 08/24] Run pre-commit --- benchmarks/CT14_bench.py | 2 +- benchmarks/CT18_bench.py | 2 +- benchmarks/HERA20_bench.py | 2 +- benchmarks/NNPDF_bench.py | 2 +- doc/source/theory/Matching.rst | 2 +- src/eko/anomalous_dimensions/lo.py | 4 +- src/eko/anomalous_dimensions/nnlo.py | 176 +++++++++--------- src/eko/basis_rotation.py | 4 +- src/eko/evolution_operator/__init__.py | 4 +- src/eko/evolution_operator/flavors.py | 61 +++--- src/eko/evolution_operator/physical.py | 2 +- src/eko/gamma.py | 6 +- src/eko/kernels/evolution_integrals.py | 8 +- src/eko/kernels/non_singlet.py | 12 +- src/eko/kernels/singlet.py | 14 +- src/eko/matching_conditions/__init__.py | 2 +- src/eko/matching_conditions/nlo.py | 22 +-- src/eko/matching_conditions/nnlo.py | 160 ++++++++-------- .../operator_matrix_element.py | 4 +- src/eko/msbar_masses.py | 12 +- src/eko/strong_coupling.py | 8 +- src/eko/version.py | 1 + src/ekomark/__init__.py | 1 + src/ekomark/benchmark/__init__.py | 1 - src/ekomark/benchmark/external/__init__.py | 1 - src/ekomark/data/__init__.py | 1 - tests/benchmark_msbar_evolution.py | 2 +- tests/benchmark_strong_coupling.py | 44 ++--- tests/test_ad_harmonics.py | 2 +- tests/test_ad_nlo.py | 12 +- tests/test_basis_rotation.py | 1 + tests/test_beta.py | 4 +- tests/test_ev_op_flavors.py | 18 +- tests/test_ev_op_grid.py | 4 +- tests/test_ev_op_physical.py | 6 +- tests/test_interpolation.py | 8 +- tests/test_kernels_ei.py | 22 +-- tests/test_kernels_ns.py | 6 +- tests/test_matching.py | 10 +- tests/test_matching_nnlo.py | 10 +- tests/test_strong_coupling.py | 6 +- 41 files changed, 336 insertions(+), 333 deletions(-) diff --git a/benchmarks/CT14_bench.py b/benchmarks/CT14_bench.py index adc8a1441..2b16b8248 100644 --- a/benchmarks/CT14_bench.py +++ b/benchmarks/CT14_bench.py @@ -1,4 +1,4 @@ -## -*- coding: utf-8 -*- +# -*- coding: utf-8 -*- """ Benchmark CT14 pdf family diff --git a/benchmarks/CT18_bench.py b/benchmarks/CT18_bench.py index 73d86c6d6..de1dc4839 100644 --- a/benchmarks/CT18_bench.py +++ b/benchmarks/CT18_bench.py @@ -1,4 +1,4 @@ -## -*- coding: utf-8 -*- +# -*- coding: utf-8 -*- """ Benchmark CT18 pdf family diff --git a/benchmarks/HERA20_bench.py b/benchmarks/HERA20_bench.py index a053b5078..0e49fbe80 100644 --- a/benchmarks/HERA20_bench.py +++ b/benchmarks/HERA20_bench.py @@ -1,4 +1,4 @@ -## -*- coding: utf-8 -*- +# -*- coding: utf-8 -*- """ Benchmark HERAPDF2.0 pdf family diff --git a/benchmarks/NNPDF_bench.py b/benchmarks/NNPDF_bench.py index 0b692a82b..71adf313a 100644 --- a/benchmarks/NNPDF_bench.py +++ b/benchmarks/NNPDF_bench.py @@ -1,4 +1,4 @@ -## -*- coding: utf-8 -*- +# -*- coding: utf-8 -*- """ Benchmark NNDPF31 pdf family """ diff --git a/doc/source/theory/Matching.rst b/doc/source/theory/Matching.rst index 2b8b5522d..91844da3f 100644 --- a/doc/source/theory/Matching.rst +++ b/doc/source/theory/Matching.rst @@ -120,5 +120,5 @@ EKO implements two different strategies to perform this operation, that can be s \mathbf{A}_{exp}^{-1}(\mu_{h}^2) &= \mathbf{I} - a_s(\mu_{h}^2) \mathbf{A}^{(1)} + a_s^2(\mu_{h}^2) \left [ \mathbf{A}^{(2)} - \left(\mathbf{A}^{(1)}\right)^2 \right ] + O(a_s^3) \\ We emphasize that in the backward evolution, below the threshold, the remaining high quark PDFs are always intrinsic and do not evolve anymore. -In fact, if the initial PDFs (above threshold) do contain an intrinsic contribution, this has to be evolved below the threshold otherwise momentum sum rules +In fact, if the initial PDFs (above threshold) do contain an intrinsic contribution, this has to be evolved below the threshold otherwise momentum sum rules can be violated. diff --git a/src/eko/anomalous_dimensions/lo.py b/src/eko/anomalous_dimensions/lo.py index fc2bf9e71..0c5e23c50 100644 --- a/src/eko/anomalous_dimensions/lo.py +++ b/src/eko/anomalous_dimensions/lo.py @@ -50,7 +50,7 @@ def gamma_qg_0(N, nf: int): gamma_qg_0 : complex Leading-order quark-gluon anomalous dimension :math:`\\gamma_{qg}^{(0)}(N)` """ - gamma = -(N ** 2 + N + 2.0) / (N * (N + 1.0) * (N + 2.0)) + gamma = -(N**2 + N + 2.0) / (N * (N + 1.0) * (N + 2.0)) result = 2.0 * constants.TR * 2.0 * nf * gamma return result @@ -72,7 +72,7 @@ def gamma_gq_0(N): gamma_gq_0 : complex Leading-order gluon-quark anomalous dimension :math:`\\gamma_{gq}^{(0)}(N)` """ - gamma = -(N ** 2 + N + 2.0) / (N * (N + 1.0) * (N - 1.0)) + gamma = -(N**2 + N + 2.0) / (N * (N + 1.0) * (N - 1.0)) result = 2.0 * constants.CF * gamma return result diff --git a/src/eko/anomalous_dimensions/nnlo.py b/src/eko/anomalous_dimensions/nnlo.py index 5cf5f1f52..f4154375b 100644 --- a/src/eko/anomalous_dimensions/nnlo.py +++ b/src/eko/anomalous_dimensions/nnlo.py @@ -42,8 +42,8 @@ def gamma_nsm_2(n, nf: int, sx): S2 = sx[1] S3 = sx[2] - E1 = S1 / n ** 2 + (S2 - zeta2) / n - E2 = 2.0 * (-S1 / n ** 3 + (zeta2 - S2) / n ** 2 - (S3 - zeta3) / n) + E1 = S1 / n**2 + (S2 - zeta2) / n + E2 = 2.0 * (-S1 / n**3 + (zeta2 - S2) / n**2 - (S3 - zeta3) / n) pm2 = ( -1174.898 * (S1 - 1.0 / n) @@ -53,10 +53,10 @@ def gamma_nsm_2(n, nf: int, sx): + 297.0 / (n + 2.0) - 3505.0 / (n + 1.0) + 1860.2 / n - - 1465.2 / n ** 2 - + 399.2 * 2.0 / n ** 3 - - 320.0 / 9.0 * 6.0 / n ** 4 - + 116.0 / 81.0 * 24.0 / n ** 5 + - 1465.2 / n**2 + + 399.2 * 2.0 / n**3 + - 320.0 / 9.0 * 6.0 / n**4 + + 116.0 / 81.0 * 24.0 / n**5 + 684.0 * E1 + 251.2 * E2 ) @@ -69,9 +69,9 @@ def gamma_nsm_2(n, nf: int, sx): + 77.89 / (n + 2.0) + 406.5 / (n + 1.0) - 216.62 / n - + 172.69 / n ** 2 - - 3216.0 / 81.0 * 2.0 / n ** 3 - + 256.0 / 81.0 * 6.0 / n ** 4 + + 172.69 / n**2 + - 3216.0 / 81.0 * 2.0 / n**3 + + 256.0 / 81.0 * 6.0 / n**4 - 65.43 * E1 + 1.136 * 6.0 / (n + 1.0) ** 4 ) @@ -82,14 +82,14 @@ def gamma_nsm_2(n, nf: int, sx): - 2.0 / 27.0 * S1 - 10.0 / 27.0 * S2 + 2.0 / 9.0 * S3 - - (12.0 * n ** 4 + 2.0 * n ** 3 - 12.0 * n ** 2 - 2.0 * n + 3.0) - / (27.0 * n ** 3 * (n + 1.0) ** 3) + - (12.0 * n**4 + 2.0 * n**3 - 12.0 * n**2 - 2.0 * n + 3.0) + / (27.0 * n**3 * (n + 1.0) ** 3) ) * 32.0 / 3.0 ) - result = pm2 + nf * pm2_nf + nf ** 2 * pf2_nfnf + result = pm2 + nf * pm2_nf + nf**2 * pf2_nfnf return result @@ -119,8 +119,8 @@ def gamma_nsp_2(n, nf: int, sx): S2 = sx[1] S3 = sx[2] - E1 = S1 / n ** 2 + (S2 - zeta2) / n - E2 = 2.0 * (-S1 / n ** 3 + (zeta2 - S2) / n ** 2 - (S3 - zeta3) / n) + E1 = S1 / n**2 + (S2 - zeta2) / n + E2 = 2.0 * (-S1 / n**3 + (zeta2 - S2) / n**2 - (S3 - zeta3) / n) pp2 = ( -1174.898 * (S1 - 1.0 / n) @@ -130,10 +130,10 @@ def gamma_nsp_2(n, nf: int, sx): + 243.6 / (n + 2.0) - 3135.0 / (n + 1.0) + 1641.1 / n - - 1258.0 / n ** 2 - + 294.9 * 2.0 / n ** 3 - - 800 / 27.0 * 6.0 / n ** 4 - + 128 / 81.0 * 24.0 / n ** 5 + - 1258.0 / n**2 + + 294.9 * 2.0 / n**3 + - 800 / 27.0 * 6.0 / n**4 + + 128 / 81.0 * 24.0 / n**5 + 563.9 * E1 + 256.8 * E2 ) @@ -146,9 +146,9 @@ def gamma_nsp_2(n, nf: int, sx): + 72.94 / (n + 2.0) + 381.1 / (n + 1.0) - 197.0 / n - + 152.6 / n ** 2 - - 2608.0 / 81.0 * 2.0 / n ** 3 - + 192.0 / 81.0 * 6.0 / n ** 4 + + 152.6 / n**2 + - 2608.0 / 81.0 * 2.0 / n**3 + + 192.0 / 81.0 * 6.0 / n**4 - 56.66 * E1 + 1.497 * 6.0 / (n + 1.0) ** 4 ) @@ -159,14 +159,14 @@ def gamma_nsp_2(n, nf: int, sx): - 2.0 / 27.0 * S1 - 10.0 / 27.0 * S2 + 2.0 / 9.0 * S3 - - (12.0 * n ** 4 + 2.0 * n ** 3 - 12.0 * n ** 2 - 2.0 * n + 3.0) - / (27.0 * n ** 3 * (n + 1.0) ** 3) + - (12.0 * n**4 + 2.0 * n**3 - 12.0 * n**2 - 2.0 * n + 3.0) + / (27.0 * n**3 * (n + 1.0) ** 3) ) * 32.0 / 3.0 ) - result = pp2 + nf * pp2_nf + nf ** 2 * pf2_nfnf + result = pp2 + nf * pp2_nf + nf**2 * pf2_nfnf return result @@ -196,8 +196,8 @@ def gamma_nsv_2(n, nf: int, sx): S2 = sx[1] S3 = sx[2] - E1 = S1 / n ** 2 + (S2 - zeta2) / n - E2 = 2.0 * (-S1 / n ** 3 + (zeta2 - S2) / n ** 2 - (S3 - zeta3) / n) + E1 = S1 / n**2 + (S2 - zeta2) / n + E2 = 2.0 * (-S1 / n**3 + (zeta2 - S2) / n**2 - (S3 - zeta3) / n) B11 = -(S1 + 1.0 / (n + 1.0)) / (n + 1.0) B12 = -(S1 + 1.0 / (n + 1.0) + 1.0 / (n + 2.0)) / (n + 2.0) @@ -214,9 +214,9 @@ def gamma_nsv_2(n, nf: int, sx): - 43.12 * (1.0 / (n + 2.0) - 1.0 / (n + 3.0)) + 44.51 * (1.0 / (n + 1.0) - 1.0 / (n + 2.0)) + 151.49 * (1.0 / n - 1.0 / (n + 1.0)) - - 178.04 / n ** 2 - + 6.892 * 2.0 / n ** 3 - - 40.0 / 27.0 * (-2.0 * 6.0 / n ** 4 - 24.0 / n ** 5) + - 178.04 / n**2 + + 6.892 * 2.0 / n**3 + - 40.0 / 27.0 * (-2.0 * 6.0 / n**4 - 24.0 / n**5) - 173.1 * E1 + 46.18 * E2 ) @@ -251,12 +251,12 @@ def gamma_ps_2(n, nf: int, sx): S2 = sx[1] S3 = sx[2] - E1 = S1 / n ** 2 + (S2 - zeta2) / n + E1 = S1 / n**2 + (S2 - zeta2) / n E11 = (S1 + 1.0 / (n + 1.0)) / (n + 1.0) ** 2 + ( S2 + 1.0 / (n + 1.0) ** 2 - zeta2 ) / (n + 1.0) B21 = ((S1 + 1.0 / (n + 1.0)) ** 2 + S2 + 1.0 / (n + 1.0) ** 2) / (n + 1.0) - B3 = -(S1 ** 3 + 3.0 * S1 * S2 + 2.0 * S3) / n + B3 = -(S1**3 + 3.0 * S1 * S2 + 2.0 * S3) / n B31 = -( (S1 + 1.0 / (n + 1.0)) ** 3 + 3.0 * (S1 + 1.0 / (n + 1.0)) * (S2 + 1.0 / (n + 1.0) ** 2) @@ -264,14 +264,14 @@ def gamma_ps_2(n, nf: int, sx): ) / (n + 1.0) ps1 = ( - -3584.0 / 27.0 * (-1.0 / (n - 1.0) ** 2 + 1.0 / n ** 2) + -3584.0 / 27.0 * (-1.0 / (n - 1.0) ** 2 + 1.0 / n**2) - 506.0 * (1.0 / (n - 1.0) - 1.0 / n) - + 160.0 / 27.0 * (24.0 / n ** 5 - 24.0 / (n + 1.0) ** 5) - - 400.0 / 9.0 * (-6.0 / n ** 4 + 6.0 / (n + 1.0) ** 4) - + 131.4 * (2.0 / n ** 3 - 2.0 / (n + 1.0) ** 3) - - 661.6 * (-1.0 / n ** 2 + 1.0 / (n + 1.0) ** 2) + + 160.0 / 27.0 * (24.0 / n**5 - 24.0 / (n + 1.0) ** 5) + - 400.0 / 9.0 * (-6.0 / n**4 + 6.0 / (n + 1.0) ** 4) + + 131.4 * (2.0 / n**3 - 2.0 / (n + 1.0) ** 3) + - 661.6 * (-1.0 / n**2 + 1.0 / (n + 1.0) ** 2) - 5.926 * (B3 - B31) - - 9.751 * ((S1 ** 2 + S2) / n - B21) + - 9.751 * ((S1**2 + S2) / n - B21) - 72.11 * (-S1 / n + (S1 + 1.0 / (n + 1.0)) / (n + 1.0)) + 177.4 * (1.0 / n - 1.0 / (n + 1.0)) + 392.9 * (1.0 / (n + 1.0) - 1.0 / (n + 2.0)) @@ -281,10 +281,10 @@ def gamma_ps_2(n, nf: int, sx): ps2 = ( 256.0 / 81.0 * (1.0 / (n - 1.0) - 1.0 / n) - + 32.0 / 27.0 * (-6.0 / n ** 4 + 6.0 / (n + 1.0) ** 4) - + 17.89 * (2.0 / n ** 3 - 2.0 / (n + 1.0) ** 3) - + 61.75 * (-1.0 / n ** 2 + 1.0 / (n + 1.0) ** 2) - + 1.778 * ((S1 ** 2 + S2) / n - B21) + + 32.0 / 27.0 * (-6.0 / n**4 + 6.0 / (n + 1.0) ** 4) + + 17.89 * (2.0 / n**3 - 2.0 / (n + 1.0) ** 3) + + 61.75 * (-1.0 / n**2 + 1.0 / (n + 1.0) ** 2) + + 1.778 * ((S1**2 + S2) / n - B21) + 5.944 * (-S1 / n + (S1 + 1.0 / (n + 1.0)) / (n + 1.0)) + 100.1 * (1.0 / n - 1.0 / (n + 1.0)) - 125.2 * (1.0 / (n + 1.0) - 1.0 / (n + 2.0)) @@ -293,7 +293,7 @@ def gamma_ps_2(n, nf: int, sx): - 1.889 * (E1 - E11) ) - result = nf * ps1 + nf ** 2 * ps2 + result = nf * ps1 + nf**2 * ps2 return result @@ -324,21 +324,21 @@ def gamma_qg_2(n, nf: int, sx): S3 = sx[2] S4 = sx[3] - E1 = S1 / n ** 2 + (S2 - zeta2) / n - E2 = 2.0 * (-S1 / n ** 3 + (zeta2 - S2) / n ** 2 - (S3 - zeta3) / n) - B3 = -(S1 ** 3 + 3.0 * S1 * S2 + 2.0 * S3) / n - B4 = (S1 ** 4 + 6.0 * S1 ** 2 * S2 + 8.0 * S1 * S3 + 3.0 * S2 ** 2 + 6.0 * S4) / n + E1 = S1 / n**2 + (S2 - zeta2) / n + E2 = 2.0 * (-S1 / n**3 + (zeta2 - S2) / n**2 - (S3 - zeta3) / n) + B3 = -(S1**3 + 3.0 * S1 * S2 + 2.0 * S3) / n + B4 = (S1**4 + 6.0 * S1**2 * S2 + 8.0 * S1 * S3 + 3.0 * S2**2 + 6.0 * S4) / n qg1 = ( +896.0 / 3.0 / (n - 1.0) ** 2 - 1268.3 / (n - 1.0) - + 536.0 / 27.0 * 24.0 / n ** 5 - + 44.0 / 3.0 * 6.0 / n ** 4 - + 881.5 * 2.0 / n ** 3 - - 424.9 / n ** 2 + + 536.0 / 27.0 * 24.0 / n**5 + + 44.0 / 3.0 * 6.0 / n**4 + + 881.5 * 2.0 / n**3 + - 424.9 / n**2 + 100.0 / 27.0 * B4 - 70.0 / 9.0 * B3 - - 120.5 * (S1 ** 2 + S2) / n + - 120.5 * (S1**2 + S2) / n - 104.42 * S1 / n + 2522.0 / n - 3316.0 / (n + 1.0) @@ -350,12 +350,12 @@ def gamma_qg_2(n, nf: int, sx): qg2 = ( 1112.0 / 243.0 / (n - 1.0) - - 16.0 / 9.0 * 24.0 / n ** 5 - + 376.0 / 27.0 * 6.0 / n ** 4 - - 90.8 * 2.0 / n ** 3 - + 254.0 / n ** 2 + - 16.0 / 9.0 * 24.0 / n**5 + + 376.0 / 27.0 * 6.0 / n**4 + - 90.8 * 2.0 / n**3 + + 254.0 / n**2 + 20.0 / 27.0 * B3 - + 200.0 / 27.0 * (S1 ** 2 + S2) / n + + 200.0 / 27.0 * (S1**2 + S2) / n + 5.496 * S1 / n - 252.0 / n + 158.0 / (n + 1.0) @@ -367,7 +367,7 @@ def gamma_qg_2(n, nf: int, sx): - 11.70 * 6.0 / (n + 1.0) ** 4 ) - result = nf * qg1 + nf ** 2 * qg2 + result = nf * qg1 + nf**2 * qg2 return result @@ -398,22 +398,22 @@ def gamma_gq_2(n, nf: int, sx): S3 = sx[2] S4 = sx[3] - E1 = S1 / n ** 2 + (S2 - zeta2) / n - E2 = 2.0 * (-S1 / n ** 3 + (zeta2 - S2) / n ** 2 - (S3 - zeta3) / n) + E1 = S1 / n**2 + (S2 - zeta2) / n + E2 = 2.0 * (-S1 / n**3 + (zeta2 - S2) / n**2 - (S3 - zeta3) / n) B21 = ((S1 + 1.0 / (n + 1.0)) ** 2 + S2 + 1.0 / (n + 1.0) ** 2) / (n + 1.0) - B3 = -(S1 ** 3 + 3.0 * S1 * S2 + 2.0 * S3) / n - B4 = (S1 ** 4 + 6.0 * S1 ** 2 * S2 + 8.0 * S1 * S3 + 3.0 * S2 ** 2 + 6.0 * S4) / n + B3 = -(S1**3 + 3.0 * S1 * S2 + 2.0 * S3) / n + B4 = (S1**4 + 6.0 * S1**2 * S2 + 8.0 * S1 * S3 + 3.0 * S2**2 + 6.0 * S4) / n gq0 = ( -1189.3 * 1.0 / (n - 1.0) ** 2 + 6163.1 / (n - 1.0) - - 4288.0 / 81.0 * 24.0 / n ** 5 - - 1568.0 / 9.0 * 6.0 / n ** 4 - - 1794.0 * 2.0 / n ** 3 - - 4033.0 * 1.0 / n ** 2 + - 4288.0 / 81.0 * 24.0 / n**5 + - 1568.0 / 9.0 * 6.0 / n**4 + - 1794.0 * 2.0 / n**3 + - 4033.0 * 1.0 / n**2 + 400.0 / 81.0 * B4 + 2200.0 / 27.0 * B3 - + 606.3 * (S1 ** 2 + S2) / n + + 606.3 * (S1**2 + S2) / n - 2193.0 * S1 / n - 4307.0 / n + 489.3 / (n + 1.0) @@ -426,12 +426,12 @@ def gamma_gq_2(n, nf: int, sx): gq1 = ( -71.082 / (n - 1.0) ** 2 - 46.41 / (n - 1.0) - + 128.0 / 27.0 * 24.0 / n ** 5 - - 704 / 81.0 * 6.0 / n ** 4 - + 20.39 * 2.0 / n ** 3 - - 174.8 * 1.0 / n ** 2 + + 128.0 / 27.0 * 24.0 / n**5 + - 704 / 81.0 * 6.0 / n**4 + + 20.39 * 2.0 / n**3 + - 174.8 * 1.0 / n**2 - 400.0 / 81.0 * B3 - - 68.069 * (S1 ** 2 + S2) / n + - 68.069 * (S1**2 + S2) / n + 296.7 * S1 / n - 183.8 / n + 33.35 / (n + 1.0) @@ -450,13 +450,13 @@ def gamma_gq_2(n, nf: int, sx): ) + 96.0 * ( - ((S1 - 1.0 / n) ** 2 + S2 - 1.0 / n ** 2) / (n - 1.0) - - (S1 ** 2 + S2) / n + ((S1 - 1.0 / n) ** 2 + S2 - 1.0 / n**2) / (n - 1.0) + - (S1**2 + S2) / n + 0.5 * B21 ) ) / 27.0 - result = gq0 + nf * gq1 + nf ** 2 * gq2 + result = gq0 + nf * gq1 + nf**2 * gq2 return result @@ -487,19 +487,19 @@ def gamma_gg_2(n, nf: int, sx): S2 = sx[1] S3 = sx[2] - E1 = S1 / n ** 2 + (S2 - zeta2) / n + E1 = S1 / n**2 + (S2 - zeta2) / n E11 = (S1 + 1.0 / (n + 1.0)) / (n + 1.0) ** 2 + ( S2 + 1.0 / (n + 1.0) ** 2 - zeta2 ) / (n + 1.0) - E2 = 2.0 * (-S1 / n ** 3 + (zeta2 - S2) / n ** 2 - (S3 - zeta3) / n) + E2 = 2.0 * (-S1 / n**3 + (zeta2 - S2) / n**2 - (S3 - zeta3) / n) gg0 = ( -2675.8 / (n - 1.0) ** 2 + 14214.0 / (n - 1.0) - - 144.0 * 24.0 / n ** 5 - - 72.0 * 6.0 / n ** 4 - - 7471.0 * 2.0 / n ** 3 - - 274.4 / n ** 2 + - 144.0 * 24.0 / n**5 + - 72.0 * 6.0 / n**4 + - 7471.0 * 2.0 / n**3 + - 274.4 / n**2 - 20852.0 / n + 3968.0 / (n + 1.0) - 3363.0 / (n + 2.0) @@ -514,10 +514,10 @@ def gamma_gg_2(n, nf: int, sx): gg1 = ( -157.27 / (n - 1.0) ** 2 + 182.96 / (n - 1.0) - + 512.0 / 27.0 * 24.0 / n ** 5 - - 832.0 / 9.0 * 6.0 / n ** 4 - + 491.3 * 2.0 / n ** 3 - - 1541.0 / n ** 2 + + 512.0 / 27.0 * 24.0 / n**5 + - 832.0 / 9.0 * 6.0 / n**4 + + 491.3 * 2.0 / n**3 + - 1541.0 / n**2 - 350.2 / n + 755.7 / (n + 1.0) - 713.8 / (n + 2.0) @@ -531,9 +531,9 @@ def gamma_gg_2(n, nf: int, sx): gg2 = ( -680.0 / 243.0 / (n - 1.0) - + 32.0 / 27.0 * 6.0 / n ** 4 - + 9.680 * 2.0 / n ** 3 - + 3.422 / n ** 2 + + 32.0 / 27.0 * 6.0 / n**4 + + 9.680 * 2.0 / n**3 + + 3.422 / n**2 - 13.878 / n + 153.4 / (n + 1.0) - 187.7 / (n + 2.0) @@ -545,7 +545,7 @@ def gamma_gg_2(n, nf: int, sx): + 16.0 / 9.0 * (S1 - 1.0 / n) ) - result = gg0 + nf * gg1 + nf ** 2 * gg2 + result = gg0 + nf * gg1 + nf**2 * gg2 return result diff --git a/src/eko/basis_rotation.py b/src/eko/basis_rotation.py index 5997bab43..d8d2c57e5 100644 --- a/src/eko/basis_rotation.py +++ b/src/eko/basis_rotation.py @@ -61,8 +61,8 @@ evol_basis_pids = tuple( [22, 100, 21, 200] - + [200 + n ** 2 - 1 for n in range(2, 6 + 1)] - + [100 + n ** 2 - 1 for n in range(2, 6 + 1)] + + [200 + n**2 - 1 for n in range(2, 6 + 1)] + + [100 + n**2 - 1 for n in range(2, 6 + 1)] ) """|pid| representation of :data:`evol_basis`.""" diff --git a/src/eko/evolution_operator/__init__.py b/src/eko/evolution_operator/__init__.py index cbf4b3d91..f42b972b6 100644 --- a/src/eko/evolution_operator/__init__.py +++ b/src/eko/evolution_operator/__init__.py @@ -51,7 +51,7 @@ def gamma_ns_fact(order, mode, n, nf, L): if order >= 2: gamma_ns[2] -= ( 2 * beta.beta(0, nf) * gamma_ns[1] * L - + (beta.beta(1, nf) * L - beta.beta(0, nf) ** 2 * L ** 2) * gamma_ns[0] + + (beta.beta(1, nf) * L - beta.beta(0, nf) ** 2 * L**2) * gamma_ns[0] ) if order >= 1: gamma_ns[1] -= beta.beta(0, nf) * gamma_ns[0] * L @@ -90,7 +90,7 @@ def gamma_singlet_fact(order, n, nf, L): if order >= 2: gamma_singlet[2] -= ( 2 * beta.beta(0, nf) * gamma_singlet[1] * L - + (beta.beta(1, nf) * L - beta.beta(0, nf) ** 2 * L ** 2) * gamma_singlet[0] + + (beta.beta(1, nf) * L - beta.beta(0, nf) ** 2 * L**2) * gamma_singlet[0] ) if order >= 1: gamma_singlet[1] -= beta.beta(0, nf) * gamma_singlet[0] * L diff --git a/src/eko/evolution_operator/flavors.py b/src/eko/evolution_operator/flavors.py index 7dd49df90..8af272f7f 100644 --- a/src/eko/evolution_operator/flavors.py +++ b/src/eko/evolution_operator/flavors.py @@ -141,11 +141,11 @@ def rotate_matching(nf, inverse=False): l = {"g.g": 1.0, "ph.ph": 1.0} # already active distributions for k in range(2, nf): # nf is the upper, so excluded - n = k ** 2 - 1 + n = k**2 - 1 l[f"V{n}.V{n}"] = 1.0 l[f"T{n}.T{n}"] = 1.0 # the new contributions - n = nf ** 2 - 1 # nf is pointing upwards + n = nf**2 - 1 # nf is pointing upwards q = quark_names[nf - 1] for (tot, oth, qpm) in (("S", f"T{n}", f"{q}+"), ("V", f"V{n}", f"{q}-")): if inverse: @@ -192,32 +192,32 @@ def pids_from_iuev(label, nf, normalize): else: if label in ["ph", "g", "S", "V"]: return pids_from_intrinsic_evol(label, nf, normalize) - weights = np.array([0.] * len(br.flavor_basis_pids)) + weights = np.array([0.0] * len(br.flavor_basis_pids)) if label == "T1d": # T1d = d+ - s+ weights[br.flavor_basis_pids.index(1)] = 1 weights[br.flavor_basis_pids.index(-1)] = 1 weights[br.flavor_basis_pids.index(3)] = -1 weights[br.flavor_basis_pids.index(-3)] = -1 - elif label == "V1d": # V1d = d- - s- + elif label == "V1d": # V1d = d- - s- weights[br.flavor_basis_pids.index(1)] = 1 weights[br.flavor_basis_pids.index(-1)] = -1 weights[br.flavor_basis_pids.index(3)] = -1 weights[br.flavor_basis_pids.index(-3)] = 1 - elif label == "T2d": # T2d = d+ + s+ - 2b+ + elif label == "T2d": # T2d = d+ + s+ - 2b+ weights[br.flavor_basis_pids.index(1)] = 1 weights[br.flavor_basis_pids.index(-1)] = 1 weights[br.flavor_basis_pids.index(3)] = 1 weights[br.flavor_basis_pids.index(-3)] = 1 weights[br.flavor_basis_pids.index(5)] = -2 weights[br.flavor_basis_pids.index(-5)] = -2 - elif label == "V2d": # V2d = d- + s- - 2b- + elif label == "V2d": # V2d = d- + s- - 2b- weights[br.flavor_basis_pids.index(1)] = 1 weights[br.flavor_basis_pids.index(-1)] = -1 weights[br.flavor_basis_pids.index(3)] = 1 weights[br.flavor_basis_pids.index(-3)] = -1 weights[br.flavor_basis_pids.index(5)] = -2 weights[br.flavor_basis_pids.index(-5)] = +2 - elif label == "V1u": # V1u = u- - c- + elif label == "V1u": # V1u = u- - c- weights[br.flavor_basis_pids.index(2)] = 1 weights[br.flavor_basis_pids.index(-2)] = -1 weights[br.flavor_basis_pids.index(4)] = -1 @@ -227,29 +227,29 @@ def pids_from_iuev(label, nf, normalize): weights[br.flavor_basis_pids.index(-2)] = 1 weights[br.flavor_basis_pids.index(4)] = -1 weights[br.flavor_basis_pids.index(-4)] = -1 - elif label == "T2u": # T2u = u+ + c+ - 2t+ + elif label == "T2u": # T2u = u+ + c+ - 2t+ weights[br.flavor_basis_pids.index(2)] = 1 weights[br.flavor_basis_pids.index(-2)] = 1 weights[br.flavor_basis_pids.index(4)] = 1 weights[br.flavor_basis_pids.index(-4)] = 1 weights[br.flavor_basis_pids.index(6)] = -2 weights[br.flavor_basis_pids.index(-6)] = -2 - elif label == "V2u": # V2u = u- + c- - 2t- + elif label == "V2u": # V2u = u- + c- - 2t- weights[br.flavor_basis_pids.index(2)] = 1 weights[br.flavor_basis_pids.index(-2)] = -1 weights[br.flavor_basis_pids.index(4)] = 1 weights[br.flavor_basis_pids.index(-4)] = -1 weights[br.flavor_basis_pids.index(6)] = -2 weights[br.flavor_basis_pids.index(-6)] = +2 - elif label == "T0": - if nf == 3: # T0 = 2u+ - d+ -s+ + elif label == "T0": + if nf == 3: # T0 = 2u+ - d+ -s+ weights[br.flavor_basis_pids.index(2)] = 2 weights[br.flavor_basis_pids.index(-2)] = 2 weights[br.flavor_basis_pids.index(1)] = -1 weights[br.flavor_basis_pids.index(-1)] = -1 weights[br.flavor_basis_pids.index(3)] = -1 weights[br.flavor_basis_pids.index(-3)] = -1 - elif nf == 4: # T0 = u+ + c+ - d+ -s+ + elif nf == 4: # T0 = u+ + c+ - d+ -s+ weights[br.flavor_basis_pids.index(2)] = 1 weights[br.flavor_basis_pids.index(-2)] = 1 weights[br.flavor_basis_pids.index(4)] = 1 @@ -258,18 +258,18 @@ def pids_from_iuev(label, nf, normalize): weights[br.flavor_basis_pids.index(-1)] = -1 weights[br.flavor_basis_pids.index(3)] = -1 weights[br.flavor_basis_pids.index(-3)] = -1 - elif nf == 5: # T0 = 3/2u+ + 3/2c+ - d+ -s+ - b+ - weights[br.flavor_basis_pids.index(2)] = 3./2 - weights[br.flavor_basis_pids.index(-2)] = 3./2 - weights[br.flavor_basis_pids.index(4)] = 3./2 - weights[br.flavor_basis_pids.index(-4)] = 3./2 + elif nf == 5: # T0 = 3/2u+ + 3/2c+ - d+ -s+ - b+ + weights[br.flavor_basis_pids.index(2)] = 3.0 / 2 + weights[br.flavor_basis_pids.index(-2)] = 3.0 / 2 + weights[br.flavor_basis_pids.index(4)] = 3.0 / 2 + weights[br.flavor_basis_pids.index(-4)] = 3.0 / 2 weights[br.flavor_basis_pids.index(1)] = -1 weights[br.flavor_basis_pids.index(-1)] = -1 weights[br.flavor_basis_pids.index(3)] = -1 weights[br.flavor_basis_pids.index(-3)] = -1 weights[br.flavor_basis_pids.index(5)] = -1 weights[br.flavor_basis_pids.index(-5)] = -1 - elif nf == 6: # T0 = u+ + c+ + t+ - d+ -s+ - b+ + elif nf == 6: # T0 = u+ + c+ + t+ - d+ -s+ - b+ weights[br.flavor_basis_pids.index(2)] = 1 weights[br.flavor_basis_pids.index(-2)] = 1 weights[br.flavor_basis_pids.index(4)] = 1 @@ -282,17 +282,17 @@ def pids_from_iuev(label, nf, normalize): weights[br.flavor_basis_pids.index(-3)] = -1 weights[br.flavor_basis_pids.index(5)] = -1 weights[br.flavor_basis_pids.index(-5)] = -1 - else: + else: raise ValueError("Invalid number of light flavors") - elif label == "V0": - if nf == 3: # V0 = 2u- - d- -s- + elif label == "V0": + if nf == 3: # V0 = 2u- - d- -s- weights[br.flavor_basis_pids.index(2)] = 2 weights[br.flavor_basis_pids.index(-2)] = -2 weights[br.flavor_basis_pids.index(1)] = -1 weights[br.flavor_basis_pids.index(-1)] = 1 weights[br.flavor_basis_pids.index(3)] = -1 weights[br.flavor_basis_pids.index(-3)] = 1 - elif nf == 4: # V0 = u- + c- - d- -s- + elif nf == 4: # V0 = u- + c- - d- -s- weights[br.flavor_basis_pids.index(2)] = 1 weights[br.flavor_basis_pids.index(-2)] = -1 weights[br.flavor_basis_pids.index(4)] = 1 @@ -301,18 +301,18 @@ def pids_from_iuev(label, nf, normalize): weights[br.flavor_basis_pids.index(-1)] = 1 weights[br.flavor_basis_pids.index(3)] = -1 weights[br.flavor_basis_pids.index(-3)] = 1 - elif nf == 5: # V0 = 3/2u- + 3/2c- - d- -s- - b- - weights[br.flavor_basis_pids.index(2)] = 3./2 - weights[br.flavor_basis_pids.index(-2)] = -3./2 - weights[br.flavor_basis_pids.index(4)] = 3./2 - weights[br.flavor_basis_pids.index(-4)] = -3./2 + elif nf == 5: # V0 = 3/2u- + 3/2c- - d- -s- - b- + weights[br.flavor_basis_pids.index(2)] = 3.0 / 2 + weights[br.flavor_basis_pids.index(-2)] = -3.0 / 2 + weights[br.flavor_basis_pids.index(4)] = 3.0 / 2 + weights[br.flavor_basis_pids.index(-4)] = -3.0 / 2 weights[br.flavor_basis_pids.index(1)] = -1 weights[br.flavor_basis_pids.index(-1)] = 1 weights[br.flavor_basis_pids.index(3)] = -1 weights[br.flavor_basis_pids.index(-3)] = 1 weights[br.flavor_basis_pids.index(5)] = -1 weights[br.flavor_basis_pids.index(-5)] = 1 - elif nf == 6: # V0 = u- + c- + t- - d- -s- - b- + elif nf == 6: # V0 = u- + c- + t- - d- -s- - b- weights[br.flavor_basis_pids.index(2)] = 1 weights[br.flavor_basis_pids.index(-2)] = -1 weights[br.flavor_basis_pids.index(4)] = 1 @@ -325,7 +325,7 @@ def pids_from_iuev(label, nf, normalize): weights[br.flavor_basis_pids.index(-3)] = 1 weights[br.flavor_basis_pids.index(5)] = -1 weights[br.flavor_basis_pids.index(-5)] = 1 - else: + else: raise ValueError("Invalid number of light flavors") else: raise ValueError("Invalid label") @@ -334,6 +334,3 @@ def pids_from_iuev(label, nf, normalize): norm = weights @ weights weights = weights / norm return weights - - - diff --git a/src/eko/evolution_operator/physical.py b/src/eko/evolution_operator/physical.py index a07bbe62f..91548eac7 100644 --- a/src/eko/evolution_operator/physical.py +++ b/src/eko/evolution_operator/physical.py @@ -56,7 +56,7 @@ def ad_to_evol_map(cls, op_members, nf, q2_final, intrinsic_range): } # add elements which are already active for f in range(2, nf + 1): - n = f ** 2 - 1 + n = f**2 - 1 m[f"V{n}.V{n}"] = op_members["NS_m"] m[f"T{n}.T{n}"] = op_members["NS_p"] # deal with intrinsic heavy quark PDFs diff --git a/src/eko/gamma.py b/src/eko/gamma.py index e1f728ac6..14d9d247a 100644 --- a/src/eko/gamma.py +++ b/src/eko/gamma.py @@ -19,7 +19,7 @@ def gamma_1(nf): def gamma_2(nf): - return 1249.0 - (2216.0 / 27.0 + 160.0 / 3.0 * zeta3) * nf - 140.0 / 81.0 * nf ** 2 + return 1249.0 - (2216.0 / 27.0 + 160.0 / 3.0 * zeta3) * nf - 140.0 / 81.0 * nf**2 def gamma_3(nf): @@ -35,8 +35,8 @@ def gamma_3(nf): + 18400.0 * zeta5 / 9.0 ) * nf - + (5242.0 / 243.0 + 800.0 * zeta3 / 9.0 - 160.0 * zeta4 / 3.0) * nf ** 2 - + (332.0 / 243.0 + 64.0 * zeta3 / 27.0) * nf ** 3 + + (5242.0 / 243.0 + 800.0 * zeta3 / 9.0 - 160.0 * zeta4 / 3.0) * nf**2 + + (332.0 / 243.0 + 64.0 * zeta3 / 27.0) * nf**3 ) diff --git a/src/eko/kernels/evolution_integrals.py b/src/eko/kernels/evolution_integrals.py index 2744de807..148990d4f 100644 --- a/src/eko/kernels/evolution_integrals.py +++ b/src/eko/kernels/evolution_integrals.py @@ -180,7 +180,7 @@ def j22_exact(a1, a0, nf): b1 = beta.b(1, nf) b2 = beta.b(2, nf) # allow Delta to be complex for nf = 6, the final result will be real - Delta = np.sqrt(complex(4 * b2 - b1 ** 2)) + Delta = np.sqrt(complex(4 * b2 - b1**2)) delta = np.arctan((b1 + 2 * a1 * b2) / Delta) - np.arctan( (b1 + 2 * a0 * b2) / Delta ) @@ -218,7 +218,7 @@ def j12_exact(a1, a0, nf): b1 = beta.b(1, nf) b2 = beta.b(2, nf) # allow Delta to be complex for nf = 6, the final result will be real - Delta = np.sqrt(complex(4 * b2 - b1 ** 2)) + Delta = np.sqrt(complex(4 * b2 - b1**2)) delta = np.arctan((b1 + 2 * a1 * b2) / Delta) - np.arctan( (b1 + 2 * a0 * b2) / Delta ) @@ -278,7 +278,7 @@ def j22_expanded(a1, a0, nf): j22_exp : float integral """ - return 1 / (2 * beta.beta(0, nf)) * (a1 ** 2 - a0 ** 2) + return 1 / (2 * beta.beta(0, nf)) * (a1**2 - a0**2) @nb.njit("f8(f8,f8,u1)", cache=True) @@ -305,7 +305,7 @@ def j12_expanded(a1, a0, nf): integral """ b1 = beta.b(1, nf) - return 1 / beta.beta(0, nf) * (a1 - a0 - b1 / 2 * (a1 ** 2 - a0 ** 2)) + return 1 / beta.beta(0, nf) * (a1 - a0 - b1 / 2 * (a1**2 - a0**2)) @nb.njit("f8(f8,f8,u1)", cache=True) diff --git a/src/eko/kernels/non_singlet.py b/src/eko/kernels/non_singlet.py index a0c36e7ad..a0750f9e2 100644 --- a/src/eko/kernels/non_singlet.py +++ b/src/eko/kernels/non_singlet.py @@ -247,7 +247,7 @@ def nnlo_truncated(gamma_ns, a1, a0, nf, ev_op_iterations): # U1 = R1 U1 = 1.0 / beta0 * (gamma_ns[1] - b1 * gamma_ns[0]) R2 = gamma_ns[2] / beta0 - b1 * U1 - b2 * gamma_ns[0] / beta0 - U2 = 0.5 * (U1 ** 2 + R2) + U2 = 0.5 * (U1**2 + R2) e = 1.0 al = a_steps[0] for ah in a_steps[1:]: @@ -255,9 +255,9 @@ def nnlo_truncated(gamma_ns, a1, a0, nf, ev_op_iterations): e *= e0 * ( 1.0 + U1 * (ah - al) - + U2 * ah ** 2 - - ah * al * U1 ** 2 - + al ** 2 * (U1 ** 2 - U2) + + U2 * ah**2 + - ah * al * U1**2 + + al**2 * (U1**2 - U2) ) al = ah return e @@ -293,12 +293,12 @@ def nnlo_ordered_truncated(gamma_ns, a1, a0, nf, ev_op_iterations): # U1 = R1 U1 = 1.0 / beta0 * (gamma_ns[1] - b1 * gamma_ns[0]) R2 = gamma_ns[2] / beta0 - b1 * U1 - b2 * gamma_ns[0] / beta0 - U2 = 0.5 * (U1 ** 2 + R2) + U2 = 0.5 * (U1**2 + R2) e = 1.0 al = a_steps[0] for ah in a_steps[1:]: e0 = lo_exact(gamma_ns, ah, al, nf) - e *= e0 * (1.0 + ah * U1 + ah ** 2 * U2) / (1.0 + al * U1 + al ** 2 * U2) + e *= e0 * (1.0 + ah * U1 + ah**2 * U2) / (1.0 + al * U1 + al**2 * U2) al = ah return e diff --git a/src/eko/kernels/singlet.py b/src/eko/kernels/singlet.py index 8ef1a70de..a55fac2c8 100644 --- a/src/eko/kernels/singlet.py +++ b/src/eko/kernels/singlet.py @@ -242,18 +242,18 @@ def eko_iterate(gamma_singlet, a1, a0, nf, order, ev_op_iterations): delta_a = ah - al if order == 1: ln = ( - (gamma_singlet[0] * a_half + gamma_singlet[1] * a_half ** 2) - / (beta0 * a_half ** 2 + beta1 * a_half ** 3) + (gamma_singlet[0] * a_half + gamma_singlet[1] * a_half**2) + / (beta0 * a_half**2 + beta1 * a_half**3) * delta_a ) elif order == 2: ln = ( ( gamma_singlet[0] * a_half - + gamma_singlet[1] * a_half ** 2 - + gamma_singlet[2] * a_half ** 3 + + gamma_singlet[1] * a_half**2 + + gamma_singlet[2] * a_half**3 ) - / (beta0 * a_half ** 2 + beta1 * a_half ** 3 + beta2 * a_half ** 4) + / (beta0 * a_half**2 + beta1 * a_half**3 + beta2 * a_half**4) * delta_a ) ek = np.ascontiguousarray(ad.exp_singlet(ln)[0]) @@ -471,9 +471,9 @@ def eko_truncated(gamma_singlet, a1, a0, nf, order, ev_op_iterations): ek = e0 + ah * u1 @ e0 - al * e0 @ u1 if order >= 2: ek += ( - +(ah ** 2) * u2 @ e0 + +(ah**2) * u2 @ e0 - ah * al * u1 @ e0 @ u1 - + al ** 2 * e0 @ (u1 @ u1 - u2) + + al**2 * e0 @ (u1 @ u1 - u2) ) e = ek @ e al = ah diff --git a/src/eko/matching_conditions/__init__.py b/src/eko/matching_conditions/__init__.py index 1a987f39b..be6554a96 100644 --- a/src/eko/matching_conditions/__init__.py +++ b/src/eko/matching_conditions/__init__.py @@ -53,7 +53,7 @@ def split_ad_to_evol_map( # add elements which are already active for f in range(2, nf + 1): - n = f ** 2 - 1 + n = f**2 - 1 m[f"V{n}.V{n}"] = m["V.V"] m[f"T{n}.T{n}"] = m["V.V"] diff --git a/src/eko/matching_conditions/nlo.py b/src/eko/matching_conditions/nlo.py index 4b74da49e..374cf44cd 100644 --- a/src/eko/matching_conditions/nlo.py +++ b/src/eko/matching_conditions/nlo.py @@ -34,16 +34,16 @@ def A_hh_1(n, sx, L): |NLO| heavy-heavy |OME| :math:`A_{HH}^{(1)}` """ S1m = sx[0] - 1 / n # harmonics.harmonic_S1(n - 1) - S2m = sx[1] - 1 / n ** 2 # harmonics.harmonic_S2(n - 1) - ahh_l = (2 + n - 3 * n ** 2) / (n * (1 + n)) + 4 * S1m + S2m = sx[1] - 1 / n**2 # harmonics.harmonic_S2(n - 1) + ahh_l = (2 + n - 3 * n**2) / (n * (1 + n)) + 4 * S1m ahh = 2 * ( 2 + 5 * n - + n ** 2 - - 6 * n ** 3 - - 2 * n ** 4 - - 2 * n * (-1 - 2 * n + n ** 3) * S1m - ) / (n * (1 + n)) ** 2 + 4 * (S1m ** 2 + S2m) + + n**2 + - 6 * n**3 + - 2 * n**4 + - 2 * n * (-1 - 2 * n + n**3) * S1m + ) / (n * (1 + n)) ** 2 + 4 * (S1m**2 + S2m) return -CF * (ahh_l * L + ahh) @@ -66,9 +66,9 @@ def A_gh_1(n, L): |NLO| gluon-heavy |OME| :math:`A_{gH}^{(1)}` """ - agh_l1 = (2 + n + n ** 2) / (n * (n ** 2 - 1)) - agh_l0 = (-4 + 2 * n + n ** 2 * (15 + n * (3 + n - n ** 2))) / ( - n * (n ** 2 - 1) + agh_l1 = (2 + n + n**2) / (n * (n**2 - 1)) + agh_l0 = (-4 + 2 * n + n**2 * (15 + n * (3 + n - n**2))) / ( + n * (n**2 - 1) ) ** 2 return 2 * CF * (agh_l0 + agh_l1 * L) @@ -92,7 +92,7 @@ def A_hg_1(n, L): |NLO| heavy-gluon |OME| :math:`A_{Hg}^{S,(1)}` """ den = 1.0 / (n * (n + 1) * (2 + n)) - num = 2 * (2 + n + n ** 2) + num = 2 * (2 + n + n**2) return num * den * L diff --git a/src/eko/matching_conditions/nnlo.py b/src/eko/matching_conditions/nnlo.py index b320704d8..e7923c377 100644 --- a/src/eko/matching_conditions/nnlo.py +++ b/src/eko/matching_conditions/nnlo.py @@ -45,7 +45,7 @@ def A_qq_2_ns(n, sx, L): S2 = sx[1] S3 = sx[2] S1m = S1 - 1 / n # harmonic_S1(n - 1) - S2m = S2 - 1 / n ** 2 # harmonic_S2(n - 1) + S2m = S2 - 1 / n**2 # harmonic_S2(n - 1) a_qq_2_l0 = ( -224.0 / 27.0 * (S1 - 1.0 / n) @@ -54,27 +54,27 @@ def A_qq_2_ns(n, sx, L): + 73.0 / 18.0 + 44.0 / 27.0 / n - 268.0 / 27.0 / (n + 1.0) - + 8.0 / 3.0 * (-1.0 / n ** 2 + 1.0 / (n + 1.0) ** 2) - + 20.0 / 9.0 * (S2 - 1.0 / n ** 2 - zeta2 + S2 + 1.0 / (n + 1.0) ** 2 - zeta2) + + 8.0 / 3.0 * (-1.0 / n**2 + 1.0 / (n + 1.0) ** 2) + + 20.0 / 9.0 * (S2 - 1.0 / n**2 - zeta2 + S2 + 1.0 / (n + 1.0) ** 2 - zeta2) + 2.0 / 3.0 * ( - -2.0 * (S3 - 1.0 / n ** 3 - zeta3) + -2.0 * (S3 - 1.0 / n**3 - zeta3) - 2.0 * (S3 + 1.0 / (n + 1.0) ** 3 - zeta3) ) ) a_qq_2_l1 = ( 2 - * (-12 - 28 * n + 9 * n ** 2 + 34 * n ** 3 - 3 * n ** 4) + * (-12 - 28 * n + 9 * n**2 + 34 * n**3 - 3 * n**4) / (9 * (n * (n + 1)) ** 2) + 80 / 9 * S1m - 16 / 3 * S2m ) - a_qq_2_l2 = -2 * ((2 + n - 3 * n ** 2) / (3 * n * (n + 1)) + 4 / 3 * S1m) + a_qq_2_l2 = -2 * ((2 + n - 3 * n**2) / (3 * n * (n + 1)) + 4 / 3 * S1m) return ( - constants.CF * constants.TR * (a_qq_2_l2 * L ** 2 + a_qq_2_l1 * L + a_qq_2_l0) + constants.CF * constants.TR * (a_qq_2_l2 * L**2 + a_qq_2_l1 * L + a_qq_2_l0) ) @@ -100,7 +100,7 @@ def A_hq_2_ps(n, sx, L): """ S2 = sx[1] - F1M = 1.0 / (n - 1.0) * (zeta2 - (S2 - 1.0 / n ** 2)) + F1M = 1.0 / (n - 1.0) * (zeta2 - (S2 - 1.0 / n**2)) F11 = 1.0 / (n + 1.0) * (zeta2 - (S2 + 1.0 / (n + 1.0) ** 2)) F12 = 1.0 / (n + 2.0) * (zeta2 - (S2 + 1.0 / (n + 1.0) ** 2 + 1.0 / (n + 2.0) ** 2)) F21 = -F11 / (n + 1.0) @@ -115,18 +115,18 @@ def A_hq_2_ps(n, sx, L): - 4.0 / 3.0 / n - 124.0 / 3.0 * 1.0 / (n + 1.0) + 1600.0 / 27.0 / (n + 2.0) - - 4.0 / 3.0 * (-6.0 / n ** 4 - 6.0 / (n + 1.0) ** 4) - + 2.0 * 2.0 / n ** 3 + - 4.0 / 3.0 * (-6.0 / n**4 - 6.0 / (n + 1.0) ** 4) + + 2.0 * 2.0 / n**3 + 10.0 * 2.0 / (n + 1.0) ** 3 + 16.0 / 3.0 * 2.0 / (n + 2.0) ** 3 - - 16.0 * zeta2 * (-1.0 / n ** 2 - 1.0 / (n + 1.0) ** 2) - + 56.0 / 3.0 / n ** 2 + - 16.0 * zeta2 * (-1.0 / n**2 - 1.0 / (n + 1.0) ** 2) + + 56.0 / 3.0 / n**2 + 88.0 / 3.0 / (n + 1.0) ** 2 + 448.0 / 9.0 / (n + 2.0) ** 2 + 32.0 / 3.0 * F1M + 8.0 * ((zeta2 - S2) / n - F11) - 32.0 / 3.0 * F12 - + 16.0 * (-(zeta2 - S2) / n ** 2 + F21) + + 16.0 * (-(zeta2 - S2) / n**2 + F21) ) a_hq_2_l1 = ( @@ -136,10 +136,10 @@ def A_hq_2_ps(n, sx, L): / ((n - 1) * (n + 2) ** 2 * (n * (n + 1)) ** 3) ) - a_hq_2_l2 = -4 * (2 + n + n ** 2) ** 2 / ((n - 1) * (n + 2) * (n * (n + 1)) ** 2) + a_hq_2_l2 = -4 * (2 + n + n**2) ** 2 / ((n - 1) * (n + 2) * (n * (n + 1)) ** 2) return ( - constants.CF * constants.TR * (a_hq_2_l2 * L ** 2 + a_hq_2_l1 * L + a_hq_2_l0) + constants.CF * constants.TR * (a_hq_2_l2 * L**2 + a_hq_2_l1 * L + a_hq_2_l0) ) @@ -168,7 +168,7 @@ def A_hg_2(n, sx, L): S2 = sx[1] S3 = sx[2] S1m = S1 - 1 / n - S2m = S2 - 1 / n ** 2 + S2m = S2 - 1 / n**2 Sp2m = harmonics.harmonic_S2((n - 1) / 2) Sp2p = harmonics.harmonic_S2(n / 2) Sm1 = -S1 + harmonics.harmonic_S1(n / 2) @@ -177,68 +177,68 @@ def A_hg_2(n, sx, L): Sm21 = ( -5 / 8 * harmonics.zeta3 + harmonics.zeta2 * (Sm1 - 1 / n + np.log(2)) - + S1 / n ** 2 + + S1 / n**2 + harmonics.mellin_g3(n) ) a_hg_2_l0 = ( -( 3084 - + 192 / n ** 4 - + 1056 / n ** 3 - + 2496 / n ** 2 + + 192 / n**4 + + 1056 / n**3 + + 2496 / n**2 + 2928 / n + 2970 * n - + 1782 * n ** 2 - + 6 * n ** 3 - - 1194 * n ** 4 - - 1152 * n ** 5 - - 516 * n ** 6 - - 120 * n ** 7 - - 12 * n ** 8 + + 1782 * n**2 + + 6 * n**3 + - 1194 * n**4 + - 1152 * n**5 + - 516 * n**6 + - 120 * n**7 + - 12 * n**8 ) / ((n - 1) * ((1 + n) * (2 + n)) ** 4) + ( 764 - - 16 / n ** 4 - - 80 / n ** 3 - - 100 / n ** 2 + - 16 / n**4 + - 80 / n**3 + - 100 / n**2 + 3 * 72 / n - + 208 * n ** 3 - + 3 * (288 * n + 176 * n ** 2 + 16 * n ** 4) + + 208 * n**3 + + 3 * (288 * n + 176 * n**2 + 16 * n**4) ) / (3 * (1 + n) ** 4 * (2 + n)) - + 12 * Sm3 * (2 + n + n ** 2) / (n * (1 + n) * (2 + n)) - - 24 * Sm2 * (4 + n - n ** 2) / ((1 + n) * (2 + n)) ** 2 + + 12 * Sm3 * (2 + n + n**2) / (n * (1 + n) * (2 + n)) + - 24 * Sm2 * (4 + n - n**2) / ((1 + n) * (2 + n)) ** 2 - S1 * ( 48 / n + 432 + 564 * n - + 324 * n ** 2 - + 138 * n ** 3 - + 48 * n ** 4 - + 6 * n ** 5 + + 324 * n**2 + + 138 * n**3 + + 48 * n**4 + + 6 * n**5 ) / ((1 + n) * (2 + n)) ** 3 + S1 - * (-160 - 32 / n ** 2 - 80 / n + 8 * n * (n - 1)) + * (-160 - 32 / n**2 - 80 / n + 8 * n * (n - 1)) / (3 * (1 + n) ** 2 * (2 + n)) - - 6 * S1 ** 2 * (11 + 8 * n + n ** 2 + 2 / n) / ((1 + n) * (2 + n)) ** 2 - + 8 * S1 ** 2 * (2 / (3 * n) + 1) / (n * (2 + n)) + - 6 * S1**2 * (11 + 8 * n + n**2 + 2 / n) / ((1 + n) * (2 + n)) ** 2 + + 8 * S1**2 * (2 / (3 * n) + 1) / (n * (2 + n)) - 2 * S2 - * (63 + 48 / n ** 2 + 54 / n + 39 * n + 63 * n ** 2 + 21 * n ** 3) + * (63 + 48 / n**2 + 54 / n + 39 * n + 63 * n**2 + 21 * n**3) / ((n - 1) * (1 + n) ** 2 * (2 + n) ** 2) + 8 * S2 - * (17 - 2 / n ** 2 - 5 / n + n * (17 + n)) + * (17 - 2 / n**2 - 5 / n + n * (17 + n)) / (3 * (1 + n) ** 2 * (2 + n)) + (1 + 2 / n + n) / ((1 + n) * (2 + n)) * ( 24 * Sm2 * S1 - + 10 * S1 ** 3 / 9 + + 10 * S1**3 / 9 + 46 * S1 * S2 / 3 + 176 * S3 / 9 - 24 * Sm21 @@ -250,14 +250,14 @@ def A_hg_2(n, sx, L): * ( +640 + 2192 * n - + 2072 * n ** 2 - + 868 * n ** 3 - + 518 * n ** 4 - + 736 * n ** 5 - + 806 * n ** 6 - + 542 * n ** 7 - + 228 * n ** 8 - + 38 * n ** 9 + + 2072 * n**2 + + 868 * n**3 + + 518 * n**4 + + 736 * n**5 + + 806 * n**6 + + 542 * n**7 + + 228 * n**8 + + 38 * n**9 ) / (3 * (n * (n + 1) * (n + 2)) ** 3 * (n - 1)) ) @@ -266,29 +266,29 @@ def A_hg_2(n, sx, L): 2 * ( n - * (n ** 2 - 1) + * (n**2 - 1) * (n + 2) * ( 4 * (36 + n * (88 + n * (33 + n * (8 + 9 * n)))) * S1m + n * (n + 1) * (n + 2) - * (2 + n + n ** 2) - * (10 * S1m ** 2 - 9 * Sp2m + 26 * S2m + 9 * Sp2p) + * (2 + n + n**2) + * (10 * S1m**2 - 9 * Sp2m + 26 * S2m + 9 * Sp2p) ) ) / (3 * (n * (n + 1) * (n + 2)) ** 3 * (n - 1)) ) - a_hg_2_l1 += 12 * zeta2 * (-2 + n + n ** 3) / (n * (n ** 2 - 1) * (n + 2)) + a_hg_2_l1 += 12 * zeta2 * (-2 + n + n**3) / (n * (n**2 - 1) * (n + 2)) a_hg_2_l2 = ( 4 - * (2 + n + n ** 2) - * (2 * (-11 + n + n ** 2) * (1 + n + n ** 2) / (n - 1)) + * (2 + n + n**2) + * (2 * (-11 + n + n**2) * (1 + n + n**2) / (n - 1)) / (3 * (n * (n + 1) * (n + 2)) ** 2) - ) + 20 * (2 + n + n ** 2) * S1 / (3 * n * (n + 1) * (n + 2)) + ) + 20 * (2 + n + n**2) * S1 / (3 * n * (n + 1) * (n + 2)) - return a_hg_2_l2 * L ** 2 + a_hg_2_l1 * L + a_hg_2_l0 + return a_hg_2_l2 * L**2 + a_hg_2_l1 * L + a_hg_2_l0 @nb.njit("c16(c16,c16[:],f8)", cache=True) @@ -315,11 +315,11 @@ def A_gq_2(n, sx, L): S2 = sx[1] S1m = S1 - 1 / n # harmonic_S1(n - 1) - B2M = ((S1 - 1.0 / n) ** 2 + S2 - 1.0 / n ** 2) / (n - 1.0) + B2M = ((S1 - 1.0 / n) ** 2 + S2 - 1.0 / n**2) / (n - 1.0) B21 = ((S1 + 1.0 / (n + 1.0)) ** 2 + S2 + 1.0 / (n + 1.0) ** 2) / (n + 1.0) a_gq_2_l0 = ( - 4.0 / 3.0 * (2.0 * B2M - 2.0 * (S1 ** 2 + S2) / n + B21) + 4.0 / 3.0 * (2.0 * B2M - 2.0 * (S1**2 + S2) / n + B21) + 8.0 / 9.0 * ( @@ -332,14 +332,14 @@ def A_gq_2(n, sx, L): a_gq_2_l1 = -( -96 - + 16 * n * (7 + n * (21 + 10 * n + 8 * n ** 2)) - - 48 * n * (1 + n) * (2 + n + n ** 2) * S1m + + 16 * n * (7 + n * (21 + 10 * n + 8 * n**2)) + - 48 * n * (1 + n) * (2 + n + n**2) * S1m ) / (9 * (n - 1) * (n * (1 + n)) ** 2) - a_gq_2_l2 = 8 * (2 + n + n ** 2) / (3 * n * (n ** 2 - 1)) + a_gq_2_l2 = 8 * (2 + n + n**2) / (3 * n * (n**2 - 1)) return ( - constants.CF * constants.TR * (a_gq_2_l2 * L ** 2 + a_gq_2_l1 * L + a_gq_2_l0) + constants.CF * constants.TR * (a_gq_2_l2 * L**2 + a_gq_2_l1 * L + a_gq_2_l0) ) @@ -366,9 +366,9 @@ def A_gg_2(n, sx, L): S1 = sx[0] S1m = S1 - 1 / n # harmonic_S1(n - 1) - D1 = -1.0 / n ** 2 + D1 = -1.0 / n**2 D11 = -1.0 / (n + 1.0) ** 2 - D2 = 2.0 / n ** 3 + D2 = 2.0 / n**3 D21 = 2.0 / (n + 1.0) ** 3 a_gg_2f = ( @@ -377,7 +377,7 @@ def A_gg_2(n, sx, L): + 80.0 / n - 48.0 / (n + 1.0) - 24.0 / (n + 2.0) - + 4.0 / 3.0 * (-6.0 / n ** 4 - 6.0 / (n + 1.0) ** 4) + + 4.0 / 3.0 * (-6.0 / n**4 - 6.0 / (n + 1.0) ** 4) + 6.0 * D2 + 10.0 * D21 + 32.0 * D1 @@ -403,15 +403,15 @@ def A_gg_2(n, sx, L): ( 8 + 2 * n - - 34 * n ** 2 - - 72 * n ** 3 - - 77 * n ** 4 - - 37 * n ** 5 - - 19 * n ** 6 - - 11 * n ** 7 - - 4 * n ** 8 + - 34 * n**2 + - 72 * n**3 + - 77 * n**4 + - 37 * n**5 + - 19 * n**6 + - 11 * n**7 + - 4 * n**8 ) - / ((n * (n + 1)) ** 3 * (-2 + n + n ** 2)) + / ((n * (n + 1)) ** 3 * (-2 + n + n**2)) + 5 * S1m ) ) @@ -421,13 +421,13 @@ def A_gg_2(n, sx, L): / 9 * ( 1 - + 6 * (2 + n + n ** 2) ** 2 / ((n * (n + 1)) ** 2 * (-2 + n + n ** 2)) - - 9 * (-4 - 3 * n + n ** 3) / (n * (n + 1) * (-2 + n + n ** 2)) + + 6 * (2 + n + n**2) ** 2 / ((n * (n + 1)) ** 2 * (-2 + n + n**2)) + - 9 * (-4 - 3 * n + n**3) / (n * (n + 1) * (-2 + n + n**2)) ) - 4 * S1m ) - return a_gg_2_l2 * L ** 2 + a_gg_2_l1 * L + a_gg_2_l0 + return a_gg_2_l2 * L**2 + a_gg_2_l1 * L + a_gg_2_l0 @nb.njit("c16[:,:](c16,c16[:],f8,b1)", cache=True) diff --git a/src/eko/matching_conditions/operator_matrix_element.py b/src/eko/matching_conditions/operator_matrix_element.py index 47205930e..708ca218e 100644 --- a/src/eko/matching_conditions/operator_matrix_element.py +++ b/src/eko/matching_conditions/operator_matrix_element.py @@ -130,7 +130,7 @@ def build_ome(A, order, a_s, backward_method): if order >= 1: ome -= a_s * A[0] if order >= 2: - ome += a_s ** 2 * ( + ome += a_s**2 * ( -A[1] + np.ascontiguousarray(A[0]) @ np.ascontiguousarray(A[0]) ) else: @@ -138,7 +138,7 @@ def build_ome(A, order, a_s, backward_method): if order >= 1: ome += a_s * A[0] if order >= 2: - ome += a_s ** 2 * A[1] + ome += a_s**2 * A[1] # need inverse exact ? so add the missing pieces if backward_method == "exact": ome = np.linalg.inv(ome) diff --git a/src/eko/msbar_masses.py b/src/eko/msbar_masses.py index fdcc2cbe5..d9ef3203e 100644 --- a/src/eko/msbar_masses.py +++ b/src/eko/msbar_masses.py @@ -46,8 +46,8 @@ def msbar_ker_exact(a0, a1, order, nf): # quad ker def integrand(a, b_vec, g_vec): # minus sign goes away - fgamma = np.sum([a ** k * b for k, b in enumerate(g_vec)]) - fbeta = a * np.sum([a ** k * b for k, b in enumerate(b_vec)]) + fgamma = np.sum([a**k * b for k, b in enumerate(g_vec)]) + fbeta = a * np.sum([a**k * b for k, b in enumerate(b_vec)]) return fgamma / fbeta res = integrate.quad( @@ -105,9 +105,9 @@ def msbar_ker_expanded(a0, a1, order, nf): if order >= 2: b2 = b(2, nf) c2 = gamma(2, nf) / b0 - r = (c2 - c1 * b1 - b2 * c0 + b1 ** 2 * c0 + (c1 - b1 * c0) ** 2) / 2.0 - num += a1 ** 2 * r - den += a0 ** 2 * r + r = (c2 - c1 * b1 - b2 * c0 + b1**2 * c0 + (c1 - b1 * c0) ** 2) / 2.0 + num += a1**2 * r + den += a0**2 * r return ev_mass * num / den @@ -224,7 +224,7 @@ def rge(m2, q2m_ref, strong_coupling, fact_to_ren, nf_ref): ev_mass *= msbar_ker_dispatcher( q2_final, q2_init, strong_coupling, fact_to_ren, n ) - return m2_ref * ev_mass ** 2 + return m2_ref * ev_mass**2 def compute_msbar_mass(theory_card): diff --git a/src/eko/strong_coupling.py b/src/eko/strong_coupling.py index 1109a5273..4676f50d5 100644 --- a/src/eko/strong_coupling.py +++ b/src/eko/strong_coupling.py @@ -77,7 +77,7 @@ def as_expanded(order, as_ref, nf, scale_from, scale_to): b2 = beta2 / beta0 res = as_LO * ( 1.0 - + as_LO * (as_LO - as_ref) * (b2 - b1 ** 2) + + as_LO * (as_LO - as_ref) * (b2 - b1**2) + as_NLO * b1 * np.log(as_NLO / as_ref) ) @@ -213,7 +213,7 @@ def from_dict(cls, theory_card, masses=None): [theory_card[f"m{q}"] / fact_to_ren for q in heavy_flavors], 2 ) else: - masses = masses / fact_to_ren ** 2 + masses = masses / fact_to_ren**2 thresholds_ratios = np.power( [theory_card[f"k{q}Thr"] for q in heavy_flavors], 2 ) @@ -270,7 +270,7 @@ def compute_exact(self, as_ref, nf, scale_from, scale_to): b_vec.append(b2) # integration kernel def rge(_t, a, b_vec): - return -(a ** 2) * np.sum([a ** k * b for k, b in enumerate(b_vec)]) + return -(a**2) * np.sum([a**k * b for k, b in enumerate(b_vec)]) # let scipy solve res = scipy.integrate.solve_ivp( @@ -367,7 +367,7 @@ def a_s( # shift for n in range(1, self.order + 1): for l in range(n + 1): - fact += new_as ** n * L ** l * m_coeffs[n, l] + fact += new_as**n * L**l * m_coeffs[n, l] # shift new_as *= fact final_as = new_as diff --git a/src/eko/version.py b/src/eko/version.py index 6c8e6b979..f09cc807b 100644 --- a/src/eko/version.py +++ b/src/eko/version.py @@ -1 +1,2 @@ +# -*- coding: utf-8 -*- __version__ = "0.0.0" diff --git a/src/ekomark/__init__.py b/src/ekomark/__init__.py index 51d376978..bb99dea04 100644 --- a/src/ekomark/__init__.py +++ b/src/ekomark/__init__.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- """ Additional package to benchmark eko. """ diff --git a/src/ekomark/benchmark/__init__.py b/src/ekomark/benchmark/__init__.py index 40a96afc6..e69de29bb 100644 --- a/src/ekomark/benchmark/__init__.py +++ b/src/ekomark/benchmark/__init__.py @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/src/ekomark/benchmark/external/__init__.py b/src/ekomark/benchmark/external/__init__.py index 40a96afc6..e69de29bb 100644 --- a/src/ekomark/benchmark/external/__init__.py +++ b/src/ekomark/benchmark/external/__init__.py @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/src/ekomark/data/__init__.py b/src/ekomark/data/__init__.py index 40a96afc6..e69de29bb 100644 --- a/src/ekomark/data/__init__.py +++ b/src/ekomark/data/__init__.py @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/tests/benchmark_msbar_evolution.py b/tests/benchmark_msbar_evolution.py index e7b861aca..c42ee6bc0 100644 --- a/tests/benchmark_msbar_evolution.py +++ b/tests/benchmark_msbar_evolution.py @@ -18,7 +18,7 @@ class BenchmarkMSbar: def benchmark_APFEL_msbar_evolution(self): Q2s = np.power([1, 96, 150], 2) alphas_ref = 0.118 - scale_ref = 91.0 ** 2 + scale_ref = 91.0**2 thresholds_ratios = np.power((1.0, 1.0, 1.0), 2) Q2m = np.power([2.0, 4.5, 175], 2) m2 = np.power((1.4, 4.5, 175), 2) diff --git a/tests/benchmark_strong_coupling.py b/tests/benchmark_strong_coupling.py index 01813a5c7..523239990 100644 --- a/tests/benchmark_strong_coupling.py +++ b/tests/benchmark_strong_coupling.py @@ -73,7 +73,7 @@ def benchmark_LHA_paper(self): def benchmark_APFEL_ffns(self): Q2s = [1e1, 1e2, 1e3, 1e4] alphas_ref = 0.118 - scale_ref = 91.0 ** 2 + scale_ref = 91.0**2 nf = 4 apfel_vals_dict = { 0: np.array( @@ -138,7 +138,7 @@ def benchmark_APFEL_ffns(self): def benchmark_pegasus_ffns(self): Q2s = [1e1, 1e2, 1e3, 1e4] alphas_ref = 0.118 - scale_ref = 91.0 ** 2 + scale_ref = 91.0**2 nf = 4 pegasus_vals_dict = { 0: np.array( @@ -208,9 +208,9 @@ def benchmark_pegasus_ffns(self): ) def benchmark_APFEL_vfns(self): - Q2s = [1, 2 ** 2, 3 ** 2, 90 ** 2, 100 ** 2] + Q2s = [1, 2**2, 3**2, 90**2, 100**2] alphas_ref = 0.118 - scale_ref = 91.0 ** 2 + scale_ref = 91.0**2 threshold_list = np.power([2, 4, 175], 2) apfel_vals_dict = { 0: np.array( @@ -278,19 +278,19 @@ def benchmark_APFEL_vfns(self): def benchmark_APFEL_vfns_fact_to_ren(self): Q2s = [ - 1.5 ** 2, - 2 ** 2, - 3 ** 2, - 4 ** 2, - 70 ** 2, - 80 ** 2, - 90 ** 2, - 100 ** 2, - 110 ** 2, - 120 ** 2, + 1.5**2, + 2**2, + 3**2, + 4**2, + 70**2, + 80**2, + 90**2, + 100**2, + 110**2, + 120**2, ] alphas_ref = 0.118 - scale_ref = 91.0 ** 2 + scale_ref = 91.0**2 fact_to_ren_lin_list = [0.567, 2.34] threshold_list = np.power([2, 2 * 4, 2 * 92], 2) apfel_vals_dict_list = [ @@ -391,14 +391,14 @@ def benchmark_APFEL_vfns_fact_to_ren(self): as_VFNS = StrongCoupling( alphas_ref, scale_ref, - 1 / fact_to_ren_lin ** 2 * threshold_list, + 1 / fact_to_ren_lin**2 * threshold_list, (1.0, 1.0, 1.0), order=order, method="exact", ) my_vals = [] for Q2 in Q2s: - my_vals.append(as_VFNS.a_s(Q2, fact_to_ren_lin ** 2 * Q2)) + my_vals.append(as_VFNS.a_s(Q2, fact_to_ren_lin**2 * Q2)) # get APFEL numbers - if available else use cache apfel_vals = apfel_vals_dict[order] if use_APFEL: @@ -425,7 +425,7 @@ def benchmark_APFEL_vfns_fact_to_ren(self): def benchmark_APFEL_vfns_threshold(self): Q2s = np.power([30, 96, 150], 2) alphas_ref = 0.118 - scale_ref = 91.0 ** 2 + scale_ref = 91.0**2 threshold_list = np.power([30, 95, 240], 2) thresholds_ratios = np.power((2.34, 1.0, 0.5), 2) apfel_vals_dict = { @@ -476,7 +476,7 @@ def benchmark_APFEL_vfns_threshold(self): def benchmark_APFEL_vfns_msbar(self): Q2s = np.power([30, 96, 150], 2) alphas_ref = 0.118 - scale_ref = 91.0 ** 2 + scale_ref = 91.0**2 thresholds_ratios = np.power((1.0, 1.0, 1.0), 2) Q2m = np.power([2.0, 2.0, 175], 2) m2 = np.power((1.4, 2.0, 175), 2) @@ -535,7 +535,7 @@ def benchmark_lhapdf_ffns_lo(self): """test FFNS LO towards LHAPDF""" Q2s = [1, 1e1, 1e2, 1e3, 1e4] alphas_ref = 0.118 - scale_ref = 91.0 ** 2 + scale_ref = 91.0**2 nf = 4 # collect my values threshold_holder = thresholds.ThresholdsAtlas.ffns(nf) @@ -579,7 +579,7 @@ def benchmark_apfel_exact(self): """test exact towards APFEL""" Q2s = [1e1, 1e2, 1e3, 1e4] alphas_ref = 0.118 - scale_ref = 90 ** 2 + scale_ref = 90**2 # collect my values threshold_holder = thresholds.ThresholdsAtlas.ffns(3) # LHAPDF cache @@ -646,7 +646,7 @@ def benchmark_lhapdf_exact(self): """test exact towards LHAPDF""" Q2s = [1e1, 1e2, 1e3, 1e4] alphas_ref = 0.118 - scale_ref = 90 ** 2 + scale_ref = 90**2 # collect my values threshold_holder = thresholds.ThresholdsAtlas.ffns(3) # LHAPDF cache diff --git a/tests/test_ad_harmonics.py b/tests/test_ad_harmonics.py index 9dc86b78b..6e48ebf05 100644 --- a/tests/test_ad_harmonics.py +++ b/tests/test_ad_harmonics.py @@ -84,7 +84,7 @@ def test_harmonic_Sx(): """test harmonic sums S_x on real axis""" # test on real axis def sx(n, m): - return np.sum([1 / k ** m for k in range(1, n + 1)]) + return np.sum([1 / k**m for k in range(1, n + 1)]) ls = [harmonics.harmonic_S1, harmonics.harmonic_S2, harmonics.harmonic_S3] for k in range(1, 3 + 1): diff --git a/tests/test_ad_nlo.py b/tests/test_ad_nlo.py index 2cb0bf1c6..82033d3a7 100644 --- a/tests/test_ad_nlo.py +++ b/tests/test_ad_nlo.py @@ -38,8 +38,8 @@ def test_gamma_1(): np.testing.assert_allclose( ad_nlo.gamma_nsm_1(2, NF), ( - (34.0 / 27.0 * (-47.0 + 6 * np.pi ** 2) - 16.0 * h.zeta3) * CF - + (373.0 / 9.0 - 34.0 * np.pi ** 2 / 9.0 + 8.0 * h.zeta3) * CA + (34.0 / 27.0 * (-47.0 + 6 * np.pi**2) - 16.0 * h.zeta3) * CF + + (373.0 / 9.0 - 34.0 * np.pi**2 / 9.0 + 8.0 * h.zeta3) * CA - 64.0 * NF / 27.0 ) * CF, @@ -47,8 +47,8 @@ def test_gamma_1(): np.testing.assert_allclose( ad_nlo.gamma_nsp_1(3, NF), ( - (-34487.0 / 432.0 + 86.0 * np.pi ** 2 / 9.0 - 16.0 * h.zeta3) * CF - + (459.0 / 8.0 - 43.0 * np.pi ** 2 / 9.0 + 8.0 * h.zeta3) * CA + (-34487.0 / 432.0 + 86.0 * np.pi**2 / 9.0 - 16.0 * h.zeta3) * CF + + (459.0 / 8.0 - 43.0 * np.pi**2 / 9.0 + 8.0 * h.zeta3) * CA - 415.0 * NF / 108.0 ) * CF, @@ -59,7 +59,7 @@ def test_gamma_1(): gS1[1, 0], ( 973.0 / 432.0 * CF - + (2801.0 / 5400.0 - 7.0 * np.pi ** 2 / 9.0) * CA + + (2801.0 / 5400.0 - 7.0 * np.pi**2 / 9.0) * CA + 61.0 / 54.0 * NF ) * CF, @@ -67,7 +67,7 @@ def test_gamma_1(): np.testing.assert_allclose( gS1[1, 1], ( - (-79909.0 / 3375.0 + 194.0 * np.pi ** 2 / 45.0 - 8.0 * h.zeta3) * CA ** 2 + (-79909.0 / 3375.0 + 194.0 * np.pi**2 / 45.0 - 8.0 * h.zeta3) * CA**2 - 967.0 / 270.0 * CA * NF + 541.0 / 216.0 * CF * NF ), diff --git a/tests/test_basis_rotation.py b/tests/test_basis_rotation.py index aa7c0c985..ae6aa508e 100644 --- a/tests/test_basis_rotation.py +++ b/tests/test_basis_rotation.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import numpy as np import pytest diff --git a/tests/test_beta.py b/tests/test_beta.py index a8cf1894f..93f7d5116 100644 --- a/tests/test_beta.py +++ b/tests/test_beta.py @@ -28,14 +28,14 @@ def test_beta_1(): """Test second beta function coefficient""" _flav_test(beta.beta_1) # from hep-ph/9706430 - np.testing.assert_approx_equal(beta.beta_1(5), 4 ** 2 * 29 / 12) + np.testing.assert_approx_equal(beta.beta_1(5), 4**2 * 29 / 12) def test_beta_2(): """Test third beta function coefficient""" _flav_test(beta.beta_2) # from hep-ph/9706430 - np.testing.assert_approx_equal(beta.beta_2(5), 4 ** 3 * 9769 / 3456) + np.testing.assert_approx_equal(beta.beta_2(5), 4**3 * 9769 / 3456) def test_beta(): diff --git a/tests/test_ev_op_flavors.py b/tests/test_ev_op_flavors.py index 35627675e..5e4107d4c 100644 --- a/tests/test_ev_op_flavors.py +++ b/tests/test_ev_op_flavors.py @@ -113,20 +113,26 @@ def load(m): minv = load(flavors.rotate_matching_inverse(nf)) np.testing.assert_allclose(m @ minv, np.eye(len(br.evol_basis)), atol=1e-10) + def test_pids_from_iuev(): - for nf in range(3, 6+1): + for nf in range(3, 6 + 1): labels = br.iuev_labels(nf) for lab in labels: n = flavors.pids_from_iuev(lab, nf, True) for lab2 in labels: n2 = flavors.pids_from_iuev(lab2, nf, False) if lab == lab2: - np.testing.assert_allclose(n @ n2, 1.) + np.testing.assert_allclose(n @ n2, 1.0) else: - np.testing.assert_allclose(n @ n2, 0., atol=1e-10, err_msg=f"{lab} is not orthogonal to {lab2} in nf={nf}") + np.testing.assert_allclose( + n @ n2, + 0.0, + atol=1e-10, + err_msg=f"{lab} is not orthogonal to {lab2} in nf={nf}", + ) with pytest.raises(ValueError): - flavors.pids_from_iuev("V3",4,True) + flavors.pids_from_iuev("V3", 4, True) with pytest.raises(ValueError): - flavors.pids_from_iuev("T0",7,True) + flavors.pids_from_iuev("T0", 7, True) with pytest.raises(ValueError): - flavors.pids_from_iuev("V0",7,True) \ No newline at end of file + flavors.pids_from_iuev("V0", 7, True) diff --git a/tests/test_ev_op_grid.py b/tests/test_ev_op_grid.py index 938d8d030..37fe0ceb0 100644 --- a/tests/test_ev_op_grid.py +++ b/tests/test_ev_op_grid.py @@ -38,7 +38,7 @@ def _get_setup(self, use_FFNS): "HQ": "POLE", } operators_card = { - "Q2grid": [1, 100 ** 2], + "Q2grid": [1, 100**2], "interpolation_xgrid": [0.1, 1.0], "interpolation_polynomial_degree": 1, "interpolation_is_log": True, @@ -121,7 +121,7 @@ def test_compute_q2grid(self): def test_grid_computation_VFNS(self): """Checks that the grid can be computed""" opgrid = self._get_operator_grid(False) - qgrid_check = [3, 5, 200 ** 2] + qgrid_check = [3, 5, 200**2] operators = opgrid.compute(qgrid_check) assert len(operators) == len(qgrid_check) diff --git a/tests/test_ev_op_physical.py b/tests/test_ev_op_physical.py index 36d249c1b..98a7a18a5 100644 --- a/tests/test_ev_op_physical.py +++ b/tests/test_ev_op_physical.py @@ -85,7 +85,7 @@ def test_matmul(self): c = b @ a assert c.q2_final == b.q2_final # V, T3 and S can be computed - assert sorted([str(k) for k in c.op_members.keys()]) == sorted( + assert sorted(str(k) for k in c.op_members.keys()) == sorted( ["V.V", "T3.T3", "S.S"] ) assert c.op_members[member.MemberName("V.V")] == VVh @ VVl @@ -112,13 +112,13 @@ def test_matmul(self): ) # check matching conditions d = b @ mc @ ap - assert sorted([str(k) for k in d.op_members.keys()]) == sorted(["T3.S"]) + assert sorted(str(k) for k in d.op_members.keys()) == sorted(["T3.S"]) assert ( d.op_members[member.MemberName("T3.S")] == T3T3h @ T3S @ SSl + T3T3h @ T3g @ gSl ) dd = b @ (mc @ ap) - assert sorted([str(k) for k in dd.op_members.keys()]) == sorted(["T3.S"]) + assert sorted(str(k) for k in dd.op_members.keys()) == sorted(["T3.S"]) assert ( d.op_members[member.MemberName("T3.S")] == dd.op_members[member.MemberName("T3.S")] diff --git a/tests/test_interpolation.py b/tests/test_interpolation.py index 69de32ced..2926b4ecb 100644 --- a/tests/test_interpolation.py +++ b/tests/test_interpolation.py @@ -233,11 +233,11 @@ def test_log_eval_N(self): assert_almost_equal(act_c, res_c) # Full -> \tilde p_0(N) = exp(-N)(exp(N)-1-N)/N^2 # MMa: Integrate[x^(n-1) (-Log[x]),{x,1/E,1}] - p0Nref_full = lambda N, lnx: ((np.exp(N) - 1 - N) / N ** 2) * np.exp( + p0Nref_full = lambda N, lnx: ((np.exp(N) - 1 - N) / N**2) * np.exp( -N * (lnx + 1) ) # partial = lower bound is neglected; - p0Nref_partial = lambda N, lnx: (1 / N ** 2) * np.exp(-N * lnx) + p0Nref_partial = lambda N, lnx: (1 / N**2) * np.exp(-N * lnx) p1N = inter_N[1] assert len(p1N.areas) == 1 p1_cs_ref = [1, 1] @@ -245,8 +245,8 @@ def test_log_eval_N(self): assert_almost_equal(act_c, res_c) # p_1(x) = 1+\ln(x) -> \tilde p_1(N) = (exp(-N)-1+N)/N^2 # MMa: Integrate[x^(n-1) (1+Log[x]),{x,1/E,1}] - p1Nref_full = lambda N, lnx: ((np.exp(-N) - 1 + N) / N ** 2) * np.exp(-N * lnx) - p1Nref_partial = lambda N, lnx: (1 / N - 1 / N ** 2) * np.exp(-N * lnx) + p1Nref_full = lambda N, lnx: ((np.exp(-N) - 1 + N) / N**2) * np.exp(-N * lnx) + p1Nref_partial = lambda N, lnx: (1 / N - 1 / N**2) * np.exp(-N * lnx) # iterate configurations for N in [1.0, 2.0, complex(1.0, 1.0)]: # check skip diff --git a/tests/test_kernels_ei.py b/tests/test_kernels_ei.py index 50b35a028..ccc0d33e1 100644 --- a/tests/test_kernels_ei.py +++ b/tests/test_kernels_ei.py @@ -32,7 +32,7 @@ def test_der_nlo_exp(): a1 = 0.1 delta_a = -1e-6 # 01 - rhs = 1.0 / (beta.beta(0, nf) * a1 + beta.beta(1, nf) * a1 ** 2) + rhs = 1.0 / (beta.beta(0, nf) * a1 + beta.beta(1, nf) * a1**2) lhs = ( ei.j01_expanded(a1 + 0.5 * delta_a, a0, nf) - ei.j01_expanded(a1 - 0.5 * delta_a, a0, nf) @@ -54,7 +54,7 @@ def test_der_nlo_exa(): a1 = 0.1 delta_a = -1e-6 # 01 - rhs = 1.0 / (beta.beta(0, nf) * a1 + beta.beta(1, nf) * a1 ** 2) + rhs = 1.0 / (beta.beta(0, nf) * a1 + beta.beta(1, nf) * a1**2) lhs = ( ei.j01_exact(a1 + 0.5 * delta_a, a0, nf) - ei.j01_exact(a1 - 0.5 * delta_a, a0, nf) @@ -81,7 +81,7 @@ def test_der_nnlo_exp(): # 02 rhs = 1.0 / ( - beta.beta(0, nf) * a1 + beta.beta(1, nf) * a1 ** 2 + beta.beta(2, nf) * a1 ** 3 + beta.beta(0, nf) * a1 + beta.beta(1, nf) * a1**2 + beta.beta(2, nf) * a1**3 ) lhs = ( ei.j02_expanded(a1 + 0.5 * delta_a, a0, nf) @@ -90,25 +90,25 @@ def test_der_nnlo_exp(): toll = ( (-beta.b(1, nf) ** 3 + 2 * beta.b(2, nf) * beta.b(1, nf)) / beta.beta(0, nf) - * a1 ** 2 + * a1**2 ) np.testing.assert_allclose(rhs, lhs, atol=np.abs(toll)) # 12 - rhs = 1.0 / (beta.beta(0, nf) + beta.beta(1, nf) * a1 + beta.beta(2, nf) * a1 ** 2) + rhs = 1.0 / (beta.beta(0, nf) + beta.beta(1, nf) * a1 + beta.beta(2, nf) * a1**2) lhs = ( ei.j12_expanded(a1 + 0.5 * delta_a, a0, nf) - ei.j12_expanded(a1 - 0.5 * delta_a, a0, nf) ) / delta_a - toll = (beta.b(1, nf) ** 2 - beta.b(2, nf)) / beta.beta(0, nf) * a1 ** 2 + toll = (beta.b(1, nf) ** 2 - beta.b(2, nf)) / beta.beta(0, nf) * a1**2 np.testing.assert_allclose(rhs, lhs, atol=np.abs(toll)) # 22 - rhs = a1 / (beta.beta(0, nf) + beta.beta(1, nf) * a1 + beta.beta(2, nf) * a1 ** 2) + rhs = a1 / (beta.beta(0, nf) + beta.beta(1, nf) * a1 + beta.beta(2, nf) * a1**2) lhs = ( ei.j22_expanded(a1 + 0.5 * delta_a, a0, nf) - ei.j22_expanded(a1 - 0.5 * delta_a, a0, nf) ) / delta_a np.testing.assert_allclose( - rhs, lhs, atol=np.abs(beta.b(1, nf) / beta.beta(0, nf) * a1 ** 2) + rhs, lhs, atol=np.abs(beta.b(1, nf) / beta.beta(0, nf) * a1**2) ) @@ -120,7 +120,7 @@ def test_der_nnlo_exa(): delta_a = -1e-6 # 02 rhs = 1.0 / ( - beta.beta(0, nf) * a1 + beta.beta(1, nf) * a1 ** 2 + beta.beta(2, nf) * a1 ** 3 + beta.beta(0, nf) * a1 + beta.beta(1, nf) * a1**2 + beta.beta(2, nf) * a1**3 ) lhs = ( ei.j02_exact(a1 + 0.5 * delta_a, a0, nf) @@ -128,14 +128,14 @@ def test_der_nnlo_exa(): ) / delta_a np.testing.assert_allclose(rhs, lhs, atol=np.abs(delta_a)) # in fact O(delta_a^2) # 12 - rhs = 1.0 / (beta.beta(0, nf) + beta.beta(1, nf) * a1 + beta.beta(2, nf) * a1 ** 2) + rhs = 1.0 / (beta.beta(0, nf) + beta.beta(1, nf) * a1 + beta.beta(2, nf) * a1**2) lhs = ( ei.j12_exact(a1 + 0.5 * delta_a, a0, nf) - ei.j12_exact(a1 - 0.5 * delta_a, a0, nf) ) / delta_a np.testing.assert_allclose(rhs, lhs, atol=np.abs(delta_a)) # in fact O(delta_a^2) # 12 - rhs = a1 / (beta.beta(0, nf) + beta.beta(1, nf) * a1 + beta.beta(2, nf) * a1 ** 2) + rhs = a1 / (beta.beta(0, nf) + beta.beta(1, nf) * a1 + beta.beta(2, nf) * a1**2) lhs = ( ei.j22_exact(a1 + 0.5 * delta_a, a0, nf) - ei.j22_exact(a1 - 0.5 * delta_a, a0, nf) diff --git a/tests/test_kernels_ns.py b/tests/test_kernels_ns.py index 4922b8de1..3f2a7dd9e 100644 --- a/tests/test_kernels_ns.py +++ b/tests/test_kernels_ns.py @@ -49,7 +49,7 @@ def test_ode_lo(): delta_a = -1e-6 a0 = 0.3 for a1 in [0.1, 0.2]: - r = a1 * gamma_ns / (beta.beta(0, nf) * a1 ** 2) + r = a1 * gamma_ns / (beta.beta(0, nf) * a1**2) for method in methods: rhs = r * ns.dispatcher(0, method, gamma_ns, a1, a0, nf, ev_op_iterations) lhs = ( @@ -70,8 +70,8 @@ def test_ode_nlo(): delta_a = -1e-6 a0 = 0.3 for a1 in [0.1, 0.2]: - r = (a1 * gamma_ns[0] + a1 ** 2 * gamma_ns[1]) / ( - beta.beta(0, nf) * a1 ** 2 + beta.beta(1, nf) * a1 ** 3 + r = (a1 * gamma_ns[0] + a1**2 * gamma_ns[1]) / ( + beta.beta(0, nf) * a1**2 + beta.beta(1, nf) * a1**3 ) for method in ["iterate-exact"]: rhs = r * ns.dispatcher(1, method, gamma_ns, a1, a0, nf, ev_op_iterations) diff --git a/tests/test_matching.py b/tests/test_matching.py index 434028694..02f1d0d04 100644 --- a/tests/test_matching.py +++ b/tests/test_matching.py @@ -49,7 +49,7 @@ def test_split_ad_to_evol_map(self): "c+.g", "c-.V", ] - assert sorted([str(k) for k in a.op_members.keys()]) == sorted( + assert sorted(str(k) for k in a.op_members.keys()) == sorted( [*triv_keys, *keys3] ) assert_almost_equal( @@ -58,7 +58,7 @@ def test_split_ad_to_evol_map(self): ) # # if alpha is zero, nothing non-trivial should happen b = MatchingCondition.split_ad_to_evol_map(ome, 3, 1, []) - assert sorted([str(k) for k in b.op_members.keys()]) == sorted( + assert sorted(str(k) for k in b.op_members.keys()) == sorted( [*triv_keys, *keys3] ) # assert_almost_equal( @@ -68,7 +68,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]) - assert sorted([str(k) for k in c.op_members.keys()]) == sorted( + assert sorted(str(k) for k in c.op_members.keys()) == sorted( [*triv_keys, *keys3, "g.c+", "c+.c+", "c-.c-"] ) assert_almost_equal( @@ -77,7 +77,7 @@ def test_split_ad_to_evol_map(self): ) # nf=3 + IB d = MatchingCondition.split_ad_to_evol_map(ome, 3, 1, [5]) - assert sorted([str(k) for k in d.op_members.keys()]) == sorted( + assert sorted(str(k) for k in d.op_members.keys()) == sorted( [*triv_keys, *keys3, "b+.b+", "b-.b-"] ) assert_almost_equal( @@ -86,7 +86,7 @@ def test_split_ad_to_evol_map(self): ) # nf=4 + IB d = MatchingCondition.split_ad_to_evol_map(ome, 4, 1, [5]) - assert sorted([str(k) for k in d.op_members.keys()]) == sorted( + assert sorted(str(k) for k in d.op_members.keys()) == sorted( [ *triv_keys, "T15.T15", diff --git a/tests/test_matching_nnlo.py b/tests/test_matching_nnlo.py index 4090949e5..ca7f16c7e 100644 --- a/tests/test_matching_nnlo.py +++ b/tests/test_matching_nnlo.py @@ -162,15 +162,15 @@ def test_Hg2_pegasus(): a_hg_2_param = ( -0.006 - + 1.111 * (S1 ** 3 + 3.0 * S1 * S2 + 2.0 * S3) / N - - 0.400 * (S1 ** 2 + S2) / N + + 1.111 * (S1**3 + 3.0 * S1 * S2 + 2.0 * S3) / N + - 0.400 * (S1**2 + S2) / N + 2.770 * S1 / N - 24.89 / (N - 1.0) - 187.8 / N + 249.6 / (N + 1.0) - + 1.556 * 6.0 / N ** 4 - - 3.292 * 2.0 / N ** 3 - + 93.68 * 1.0 / N ** 2 + + 1.556 * 6.0 / N**4 + - 3.292 * 2.0 / N**3 + + 93.68 * 1.0 / N**2 - 146.8 * E2 ) diff --git a/tests/test_strong_coupling.py b/tests/test_strong_coupling.py index 20ef41af8..a52da8183 100644 --- a/tests/test_strong_coupling.py +++ b/tests/test_strong_coupling.py @@ -35,7 +35,7 @@ def test_from_dict(self): def test_init(self): # prepare alphas_ref = 0.118 - scale_ref = 91.0 ** 2 + scale_ref = 91.0**2 nf = 4 threshold_holder = thresholds.ThresholdsAtlas.ffns(nf) # create @@ -125,7 +125,7 @@ def test_ref(self): (2, 4, 175), ] alphas_ref = 0.118 - scale_ref = 91.0 ** 2 + scale_ref = 91.0**2 for thresh_setup in thresh_setups: for order in [0, 1, 2]: for method in ["exact", "expanded"]: @@ -150,7 +150,7 @@ def test_exact_LO(self): (2, 4, 175), ] alphas_ref = 0.118 - scale_ref = 91.0 ** 2 + scale_ref = 91.0**2 for thresh_setup in thresh_setups: # in LO expanded = exact sc_expanded = StrongCoupling( From 1e55ac4d84b8e3c79b9e2bdb233dcb46bc0325cc Mon Sep 17 00:00:00 2001 From: Felix Hekhorn Date: Fri, 11 Feb 2022 17:24:27 +0100 Subject: [PATCH 09/24] Fix some trailing doc refs --- doc/source/theory/Matching.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/source/theory/Matching.rst b/doc/source/theory/Matching.rst index 91844da3f..3be931050 100644 --- a/doc/source/theory/Matching.rst +++ b/doc/source/theory/Matching.rst @@ -16,13 +16,13 @@ present :math:`\left(\mu_{h}^2 < Q_0^2 < Q_1^2 < \mu_{h+1}^2\right)`, in :doc:`M \tilde{\mathbf{f}}^{(n_f)}(Q^2_1)= \tilde{\mathbf{E}}^{(n_f)}(Q^2_1\leftarrow Q^2_0) \tilde{\mathbf{f}}^{(n_f)}(Q^2_0) The bold font indicates the vector space spanned by the :doc:`flavor space ` and the equations decouple mostly -in the :ref:`Intrinsic Evolution Basis `. +in the :ref:`Intrinsic Evolution Basis `. If a single threshold :math:`\left(\mu_{h-1}^2 < Q_0^2 < \mu_{h}^2 < Q_1^2 < \mu_{h+1}^2\right)` is present we decompose the matching into two independent steps: first, the true QCD induced |OME| :math:`\mathbf{A}^{(n_f)}(\mu_{h}^2)` that are given by perturbative calculations and expressed in the flavor space, and, second, the necessary :doc:`flavor space rotation ` :math:`\mathbf{R}^{(n_f)}` to fit the -new :ref:`Intrinsic Evolution Basis `. +new :ref:`Intrinsic Evolution Basis `. We can then denote the solution as .. math :: @@ -38,7 +38,7 @@ The matching matrices :math:`\mathbf{A}^{(n_f)}(\mu_{h+1}^2)` mediate between :m and :math:`\mathcal F_{iev,n_f}^{(n_f+1)}`, i.e. they transform the basis vectors of the :math:`n_f`-flavors space in a :math:`n_f`-flavor scheme to the :math:`(n_f+1)`-flavor scheme. Hence, the supscript refers to the flavor scheme with a smaller number of active flavors. To compute the matrices in a minimal coupled system we decompose the -:ref:`Intrinsic Evolution Basis ` :math:`\mathcal F_{iev,n_f}` into +:ref:`Intrinsic Evolution Basis ` :math:`\mathcal F_{iev,n_f}` into several subspaces (of course irrespective of the |FNS|): .. math :: From 2376a154b8e6ea50ba1b08094a79a4be15ee4eb4 Mon Sep 17 00:00:00 2001 From: Felix Hekhorn Date: Mon, 14 Feb 2022 11:28:33 +0100 Subject: [PATCH 10/24] Rewrite pids_from_iuev --- src/eko/basis_rotation.py | 20 +-- src/eko/evolution_operator/flavors.py | 184 ++++++------------------ src/eko/evolution_operator/grid.py | 9 +- src/eko/matching_conditions/__init__.py | 6 +- src/eko/msbar_masses.py | 2 +- tests/test_basis_rotation.py | 2 +- tests/test_ev_op_flavors.py | 10 +- tests/test_msbar_masses.py | 2 +- 8 files changed, 64 insertions(+), 171 deletions(-) diff --git a/src/eko/basis_rotation.py b/src/eko/basis_rotation.py index d8d2c57e5..e96ee4ee7 100644 --- a/src/eko/basis_rotation.py +++ b/src/eko/basis_rotation.py @@ -34,6 +34,9 @@ ) """String representation of :data:`flavor_basis_pids`.""" + +quark_names = "".join(flavor_basis_names[-6:]) + evol_basis = ( "ph", "S", @@ -194,15 +197,12 @@ def iuev_labels(nf): "T1d", "V1d", ] - if nf == 3: - labels.extend(["c+", "c-", "b+", "b-", "t+", "t-"]) - elif nf == 4: - labels.extend(["T1u", "V1u", "b+", "b-", "t+", "t-"]) - elif nf == 5: - labels.extend(["T1u", "V1u", "T2d", "V2d", "t+", "t-"]) - elif nf == 6: - labels.extend(["T1u", "V1u", "T2d", "V2d", "T2u", "V2u"]) - else: - raise ValueError("Invalid number of light flavors") + news = ["1u", "2d", "2u"] + for j in range(nf, 6): + q = quark_names[j] + labels.extend([f"{q}+", f"{q}-"]) + for k in range(3, nf): + new = news[k - 3] + labels.extend([f"T{new}", f"V{new}"]) return labels diff --git a/src/eko/evolution_operator/flavors.py b/src/eko/evolution_operator/flavors.py index 8af272f7f..42efe791d 100644 --- a/src/eko/evolution_operator/flavors.py +++ b/src/eko/evolution_operator/flavors.py @@ -9,8 +9,6 @@ from .. import basis_rotation as br -quark_names = "duscbt" - def pids_from_intrinsic_evol(label, nf, normalize): r""" @@ -106,7 +104,7 @@ def rotate_pm_to_flavor(label): if label in ["g", "ph"]: return br.rotate_flavor_to_evolution[br.evol_basis.index(label)].copy() # no it has to be a quark with + or - appended - if label[0] not in quark_names or label[1] not in ["+", "-"]: + if label[0] not in br.quark_names or label[1] not in ["+", "-"]: raise ValueError(f"Invalid pm label: {label}") l = np.zeros(len(br.flavor_basis_pids)) idx = br.flavor_basis_names.index(label[0]) @@ -146,7 +144,7 @@ def rotate_matching(nf, inverse=False): l[f"T{n}.T{n}"] = 1.0 # the new contributions n = nf**2 - 1 # nf is pointing upwards - q = quark_names[nf - 1] + q = br.quark_names[nf - 1] for (tot, oth, qpm) in (("S", f"T{n}", f"{q}+"), ("V", f"V{n}", f"{q}-")): if inverse: l[f"{tot}.{tot}"] = (nf - 1.0) / nf @@ -160,7 +158,7 @@ def rotate_matching(nf, inverse=False): l[f"{oth}.{qpm}"] = -(nf - 1.0) # also higher quarks do not care for k in range(nf + 1, 6 + 1): - q = quark_names[k - 1] + q = br.quark_names[k - 1] for sgn in "+-": l[f"{q}{sgn}.{q}{sgn}"] = 1.0 return l @@ -187,148 +185,46 @@ def pids_from_iuev(label, nf, normalize): ------- m : list """ - if label[0] in "cbt": + if label in ["ph", "g", "S", "V"]: + return pids_from_intrinsic_evol(label, nf, normalize) + if label[0] in br.quark_names[3:]: weights = rotate_pm_to_flavor(label) else: - if label in ["ph", "g", "S", "V"]: - return pids_from_intrinsic_evol(label, nf, normalize) weights = np.array([0.0] * len(br.flavor_basis_pids)) - if label == "T1d": # T1d = d+ - s+ - weights[br.flavor_basis_pids.index(1)] = 1 - weights[br.flavor_basis_pids.index(-1)] = 1 - weights[br.flavor_basis_pids.index(3)] = -1 - weights[br.flavor_basis_pids.index(-3)] = -1 - elif label == "V1d": # V1d = d- - s- - weights[br.flavor_basis_pids.index(1)] = 1 - weights[br.flavor_basis_pids.index(-1)] = -1 - weights[br.flavor_basis_pids.index(3)] = -1 - weights[br.flavor_basis_pids.index(-3)] = 1 - elif label == "T2d": # T2d = d+ + s+ - 2b+ - weights[br.flavor_basis_pids.index(1)] = 1 - weights[br.flavor_basis_pids.index(-1)] = 1 - weights[br.flavor_basis_pids.index(3)] = 1 - weights[br.flavor_basis_pids.index(-3)] = 1 - weights[br.flavor_basis_pids.index(5)] = -2 - weights[br.flavor_basis_pids.index(-5)] = -2 - elif label == "V2d": # V2d = d- + s- - 2b- - weights[br.flavor_basis_pids.index(1)] = 1 - weights[br.flavor_basis_pids.index(-1)] = -1 - weights[br.flavor_basis_pids.index(3)] = 1 - weights[br.flavor_basis_pids.index(-3)] = -1 - weights[br.flavor_basis_pids.index(5)] = -2 - weights[br.flavor_basis_pids.index(-5)] = +2 - elif label == "V1u": # V1u = u- - c- - weights[br.flavor_basis_pids.index(2)] = 1 - weights[br.flavor_basis_pids.index(-2)] = -1 - weights[br.flavor_basis_pids.index(4)] = -1 - weights[br.flavor_basis_pids.index(-4)] = 1 - elif label == "T1u": # T1u = u+ - c+ - weights[br.flavor_basis_pids.index(2)] = 1 - weights[br.flavor_basis_pids.index(-2)] = 1 - weights[br.flavor_basis_pids.index(4)] = -1 - weights[br.flavor_basis_pids.index(-4)] = -1 - elif label == "T2u": # T2u = u+ + c+ - 2t+ - weights[br.flavor_basis_pids.index(2)] = 1 - weights[br.flavor_basis_pids.index(-2)] = 1 - weights[br.flavor_basis_pids.index(4)] = 1 - weights[br.flavor_basis_pids.index(-4)] = 1 - weights[br.flavor_basis_pids.index(6)] = -2 - weights[br.flavor_basis_pids.index(-6)] = -2 - elif label == "V2u": # V2u = u- + c- - 2t- - weights[br.flavor_basis_pids.index(2)] = 1 - weights[br.flavor_basis_pids.index(-2)] = -1 - weights[br.flavor_basis_pids.index(4)] = 1 - weights[br.flavor_basis_pids.index(-4)] = -1 - weights[br.flavor_basis_pids.index(6)] = -2 - weights[br.flavor_basis_pids.index(-6)] = +2 - elif label == "T0": - if nf == 3: # T0 = 2u+ - d+ -s+ - weights[br.flavor_basis_pids.index(2)] = 2 - weights[br.flavor_basis_pids.index(-2)] = 2 - weights[br.flavor_basis_pids.index(1)] = -1 - weights[br.flavor_basis_pids.index(-1)] = -1 - weights[br.flavor_basis_pids.index(3)] = -1 - weights[br.flavor_basis_pids.index(-3)] = -1 - elif nf == 4: # T0 = u+ + c+ - d+ -s+ - weights[br.flavor_basis_pids.index(2)] = 1 - weights[br.flavor_basis_pids.index(-2)] = 1 - weights[br.flavor_basis_pids.index(4)] = 1 - weights[br.flavor_basis_pids.index(-4)] = 1 - weights[br.flavor_basis_pids.index(1)] = -1 - weights[br.flavor_basis_pids.index(-1)] = -1 - weights[br.flavor_basis_pids.index(3)] = -1 - weights[br.flavor_basis_pids.index(-3)] = -1 - elif nf == 5: # T0 = 3/2u+ + 3/2c+ - d+ -s+ - b+ - weights[br.flavor_basis_pids.index(2)] = 3.0 / 2 - weights[br.flavor_basis_pids.index(-2)] = 3.0 / 2 - weights[br.flavor_basis_pids.index(4)] = 3.0 / 2 - weights[br.flavor_basis_pids.index(-4)] = 3.0 / 2 - weights[br.flavor_basis_pids.index(1)] = -1 - weights[br.flavor_basis_pids.index(-1)] = -1 - weights[br.flavor_basis_pids.index(3)] = -1 - weights[br.flavor_basis_pids.index(-3)] = -1 - weights[br.flavor_basis_pids.index(5)] = -1 - weights[br.flavor_basis_pids.index(-5)] = -1 - elif nf == 6: # T0 = u+ + c+ + t+ - d+ -s+ - b+ - weights[br.flavor_basis_pids.index(2)] = 1 - weights[br.flavor_basis_pids.index(-2)] = 1 - weights[br.flavor_basis_pids.index(4)] = 1 - weights[br.flavor_basis_pids.index(-4)] = 1 - weights[br.flavor_basis_pids.index(6)] = 1 - weights[br.flavor_basis_pids.index(-6)] = 1 - weights[br.flavor_basis_pids.index(1)] = -1 - weights[br.flavor_basis_pids.index(-1)] = -1 - weights[br.flavor_basis_pids.index(3)] = -1 - weights[br.flavor_basis_pids.index(-3)] = -1 - weights[br.flavor_basis_pids.index(5)] = -1 - weights[br.flavor_basis_pids.index(-5)] = -1 - else: - raise ValueError("Invalid number of light flavors") - elif label == "V0": - if nf == 3: # V0 = 2u- - d- -s- - weights[br.flavor_basis_pids.index(2)] = 2 - weights[br.flavor_basis_pids.index(-2)] = -2 - weights[br.flavor_basis_pids.index(1)] = -1 - weights[br.flavor_basis_pids.index(-1)] = 1 - weights[br.flavor_basis_pids.index(3)] = -1 - weights[br.flavor_basis_pids.index(-3)] = 1 - elif nf == 4: # V0 = u- + c- - d- -s- - weights[br.flavor_basis_pids.index(2)] = 1 - weights[br.flavor_basis_pids.index(-2)] = -1 - weights[br.flavor_basis_pids.index(4)] = 1 - weights[br.flavor_basis_pids.index(-4)] = -1 - weights[br.flavor_basis_pids.index(1)] = -1 - weights[br.flavor_basis_pids.index(-1)] = 1 - weights[br.flavor_basis_pids.index(3)] = -1 - weights[br.flavor_basis_pids.index(-3)] = 1 - elif nf == 5: # V0 = 3/2u- + 3/2c- - d- -s- - b- - weights[br.flavor_basis_pids.index(2)] = 3.0 / 2 - weights[br.flavor_basis_pids.index(-2)] = -3.0 / 2 - weights[br.flavor_basis_pids.index(4)] = 3.0 / 2 - weights[br.flavor_basis_pids.index(-4)] = -3.0 / 2 - weights[br.flavor_basis_pids.index(1)] = -1 - weights[br.flavor_basis_pids.index(-1)] = 1 - weights[br.flavor_basis_pids.index(3)] = -1 - weights[br.flavor_basis_pids.index(-3)] = 1 - weights[br.flavor_basis_pids.index(5)] = -1 - weights[br.flavor_basis_pids.index(-5)] = 1 - elif nf == 6: # V0 = u- + c- + t- - d- -s- - b- - weights[br.flavor_basis_pids.index(2)] = 1 - weights[br.flavor_basis_pids.index(-2)] = -1 - weights[br.flavor_basis_pids.index(4)] = 1 - weights[br.flavor_basis_pids.index(-4)] = -1 - weights[br.flavor_basis_pids.index(6)] = 1 - weights[br.flavor_basis_pids.index(-6)] = -1 - weights[br.flavor_basis_pids.index(1)] = -1 - weights[br.flavor_basis_pids.index(-1)] = 1 - weights[br.flavor_basis_pids.index(3)] = -1 - weights[br.flavor_basis_pids.index(-3)] = 1 - weights[br.flavor_basis_pids.index(5)] = -1 - weights[br.flavor_basis_pids.index(-5)] = 1 - else: - raise ValueError("Invalid number of light flavors") - else: - raise ValueError("Invalid label") + mapping = { + "1d": {1: 1.0, 3: -1.0}, # T1d = d+ - s+ + "2d": {1: 1.0, 3: 1.0, 5: -2.0}, # T2d = d+ + s+ - 2b+ + "1u": {2: 1.0, 4: -1.0}, # T1u = u+ - c+ + "2u": {2: 1.0, 4: 1.0, 6: -2.0}, # T2u = u+ + c+ - 2t+ + "0": { + 3: {2: 2.0, 1: -1.0, 3: -1.0}, # T0 = 2u+ - d+ -s+ + 4: {2: 1.0, 4: 1.0, 1: -1.0, 3: -1.0}, # T0 = u+ + c+ - d+ - s+ + 5: { + 2: 3.0 / 2.0, + 4: 3.0 / 2.0, + 1: -1.0, + 3: -1.0, + 5: -1.0, + }, # T0 = 3/2u+ + 3/2c+ - d+ - s+ - b+ + 6: { + 2: 1.0, + 4: 1.0, + 6: 1.0, + 1: -1.0, + 3: -1.0, + 5: -1.0, + }, # T0 = u+ + c+ + t+ - d+ -s+ - b+ + }, + } + cur_map = mapping[label[1:]] + if label[1] == "0": + cur_map = cur_map[nf] + for q, w in cur_map.items(): + weights[br.flavor_basis_pids.index(q)] = w + weights[br.flavor_basis_pids.index(-q)] = ( + -1 if label[0] == "V" else 1.0 + ) * w + # normalize? if normalize: norm = weights @ weights diff --git a/src/eko/evolution_operator/grid.py b/src/eko/evolution_operator/grid.py index db5843556..aa9e80b76 100644 --- a/src/eko/evolution_operator/grid.py +++ b/src/eko/evolution_operator/grid.py @@ -11,11 +11,10 @@ import numpy as np -from eko import matching_conditions, member -from eko.evolution_operator import flavors - +from .. import basis_rotation as br +from .. import matching_conditions, member from ..matching_conditions.operator_matrix_element import OperatorMatrixElement -from . import Operator, physical +from . import Operator, flavors, physical logger = logging.getLogger(__name__) @@ -133,7 +132,7 @@ def from_dict( if int(theory_card["IB"]) == 1: intrinsic_range.append(5) config["intrinsic_range"] = intrinsic_range - for hq in flavors.quark_names[3:]: + for hq in br.quark_names[3:]: config[f"m{hq}"] = theory_card[f"m{hq}"] return cls( config, q2_grid, thresholds_config, strong_coupling, interpol_dispatcher diff --git a/src/eko/matching_conditions/__init__.py b/src/eko/matching_conditions/__init__.py index be6554a96..3b7ae3c72 100644 --- a/src/eko/matching_conditions/__init__.py +++ b/src/eko/matching_conditions/__init__.py @@ -3,8 +3,8 @@ This module defines the matching conditions for the |VFNS| evolution. """ +from .. import basis_rotation as br from .. import member -from ..evolution_operator import flavors class MatchingCondition(member.OperatorBase): @@ -58,7 +58,7 @@ def split_ad_to_evol_map( m[f"T{n}.T{n}"] = m["V.V"] # activate the next heavy quark - hq = flavors.quark_names[nf] + hq = br.quark_names[nf] m.update( { f"{hq}-.V": ome_members["NS_Hq"], @@ -71,7 +71,7 @@ def split_ad_to_evol_map( if len(intrinsic_range) != 0: op_id = member.OpMember.id_like(ome_members["NS_qq"]) for intr_fl in intrinsic_range: - ihq = flavors.quark_names[intr_fl - 1] # find name + ihq = br.quark_names[intr_fl - 1] # find name if intr_fl > nf + 1: # keep the higher quarks as they are m[f"{ihq}+.{ihq}+"] = op_id.copy() diff --git a/src/eko/msbar_masses.py b/src/eko/msbar_masses.py index d9ef3203e..b02db65ea 100644 --- a/src/eko/msbar_masses.py +++ b/src/eko/msbar_masses.py @@ -5,8 +5,8 @@ import numpy as np from scipy import integrate, optimize +from .basis_rotation import quark_names from .beta import b, beta -from .evolution_operator.flavors import quark_names from .gamma import gamma from .strong_coupling import StrongCoupling, strong_coupling_mod_ev diff --git a/tests/test_basis_rotation.py b/tests/test_basis_rotation.py index ae6aa508e..dc22701e5 100644 --- a/tests/test_basis_rotation.py +++ b/tests/test_basis_rotation.py @@ -49,5 +49,5 @@ def test_iuev_labels(): labels = br.iuev_labels(nf) assert len(labels) == 14 # errors - with pytest.raises(ValueError): + with pytest.raises(IndexError): br.iuev_labels(7) diff --git a/tests/test_ev_op_flavors.py b/tests/test_ev_op_flavors.py index 5e4107d4c..c3f10bcee 100644 --- a/tests/test_ev_op_flavors.py +++ b/tests/test_ev_op_flavors.py @@ -95,8 +95,8 @@ def test_rotate_matching(): def test_rotate_matching_is_inv(): def replace_names(k): for q in range(4, 6 + 1): - k = k.replace(flavors.quark_names[q - 1] + "+", f"T{q**2-1}").replace( - flavors.quark_names[q - 1] + "-", f"V{q**2-1}" + k = k.replace(br.quark_names[q - 1] + "+", f"T{q**2-1}").replace( + br.quark_names[q - 1] + "-", f"V{q**2-1}" ) return k @@ -130,9 +130,7 @@ def test_pids_from_iuev(): atol=1e-10, err_msg=f"{lab} is not orthogonal to {lab2} in nf={nf}", ) - with pytest.raises(ValueError): + with pytest.raises(KeyError): flavors.pids_from_iuev("V3", 4, True) - with pytest.raises(ValueError): + with pytest.raises(KeyError): flavors.pids_from_iuev("T0", 7, True) - with pytest.raises(ValueError): - flavors.pids_from_iuev("V0", 7, True) diff --git a/tests/test_msbar_masses.py b/tests/test_msbar_masses.py index 68d3fbc80..2788c30fd 100644 --- a/tests/test_msbar_masses.py +++ b/tests/test_msbar_masses.py @@ -5,7 +5,7 @@ import numpy as np import pytest -from eko.evolution_operator.flavors import quark_names +from eko.basis_rotation import quark_names from eko.msbar_masses import compute_msbar_mass, evolve_msbar_mass from eko.strong_coupling import StrongCoupling From 8bcff50c335f2abb3164f1a366fb4bb62259382c Mon Sep 17 00:00:00 2001 From: Felix Hekhorn Date: Mon, 14 Feb 2022 11:32:12 +0100 Subject: [PATCH 11/24] Run poetry update --- poetry.lock | 92 +++++++++++++-------------- src/eko/evolution_operator/flavors.py | 3 +- 2 files changed, 45 insertions(+), 50 deletions(-) diff --git a/poetry.lock b/poetry.lock index 494a92815..798e429c2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -176,11 +176,11 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [[package]] name = "coverage" -version = "6.2" +version = "6.3.1" description = "Code coverage measurement for Python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] tomli = {version = "*", optional = true, markers = "extra == \"toml\""} @@ -1283,53 +1283,47 @@ commonmark = [ {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, ] coverage = [ - {file = "coverage-6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6dbc1536e105adda7a6312c778f15aaabe583b0e9a0b0a324990334fd458c94b"}, - {file = "coverage-6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:174cf9b4bef0db2e8244f82059a5a72bd47e1d40e71c68ab055425172b16b7d0"}, - {file = "coverage-6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:92b8c845527eae547a2a6617d336adc56394050c3ed8a6918683646328fbb6da"}, - {file = "coverage-6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c7912d1526299cb04c88288e148c6c87c0df600eca76efd99d84396cfe00ef1d"}, - {file = "coverage-6.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d2033d5db1d58ae2d62f095e1aefb6988af65b4b12cb8987af409587cc0739"}, - {file = "coverage-6.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3feac4084291642165c3a0d9eaebedf19ffa505016c4d3db15bfe235718d4971"}, - {file = "coverage-6.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:276651978c94a8c5672ea60a2656e95a3cce2a3f31e9fb2d5ebd4c215d095840"}, - {file = "coverage-6.2-cp310-cp310-win32.whl", hash = "sha256:f506af4f27def639ba45789fa6fde45f9a217da0be05f8910458e4557eed020c"}, - {file = "coverage-6.2-cp310-cp310-win_amd64.whl", hash = "sha256:3f7c17209eef285c86f819ff04a6d4cbee9b33ef05cbcaae4c0b4e8e06b3ec8f"}, - {file = "coverage-6.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:13362889b2d46e8d9f97c421539c97c963e34031ab0cb89e8ca83a10cc71ac76"}, - {file = "coverage-6.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22e60a3ca5acba37d1d4a2ee66e051f5b0e1b9ac950b5b0cf4aa5366eda41d47"}, - {file = "coverage-6.2-cp311-cp311-win_amd64.whl", hash = "sha256:b637c57fdb8be84e91fac60d9325a66a5981f8086c954ea2772efe28425eaf64"}, - {file = "coverage-6.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f467bbb837691ab5a8ca359199d3429a11a01e6dfb3d9dcc676dc035ca93c0a9"}, - {file = "coverage-6.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2641f803ee9f95b1f387f3e8f3bf28d83d9b69a39e9911e5bfee832bea75240d"}, - {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1219d760ccfafc03c0822ae2e06e3b1248a8e6d1a70928966bafc6838d3c9e48"}, - {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a2b5b52be0a8626fcbffd7e689781bf8c2ac01613e77feda93d96184949a98e"}, - {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8e2c35a4c1f269704e90888e56f794e2d9c0262fb0c1b1c8c4ee44d9b9e77b5d"}, - {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5d6b09c972ce9200264c35a1d53d43ca55ef61836d9ec60f0d44273a31aa9f17"}, - {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e3db840a4dee542e37e09f30859f1612da90e1c5239a6a2498c473183a50e781"}, - {file = "coverage-6.2-cp36-cp36m-win32.whl", hash = "sha256:4e547122ca2d244f7c090fe3f4b5a5861255ff66b7ab6d98f44a0222aaf8671a"}, - {file = "coverage-6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:01774a2c2c729619760320270e42cd9e797427ecfddd32c2a7b639cdc481f3c0"}, - {file = "coverage-6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fb8b8ee99b3fffe4fd86f4c81b35a6bf7e4462cba019997af2fe679365db0c49"}, - {file = "coverage-6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:619346d57c7126ae49ac95b11b0dc8e36c1dd49d148477461bb66c8cf13bb521"}, - {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a7726f74ff63f41e95ed3a89fef002916c828bb5fcae83b505b49d81a066884"}, - {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cfd9386c1d6f13b37e05a91a8583e802f8059bebfccde61a418c5808dea6bbfa"}, - {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:17e6c11038d4ed6e8af1407d9e89a2904d573be29d51515f14262d7f10ef0a64"}, - {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c254b03032d5a06de049ce8bca8338a5185f07fb76600afff3c161e053d88617"}, - {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dca38a21e4423f3edb821292e97cec7ad38086f84313462098568baedf4331f8"}, - {file = "coverage-6.2-cp37-cp37m-win32.whl", hash = "sha256:600617008aa82032ddeace2535626d1bc212dfff32b43989539deda63b3f36e4"}, - {file = "coverage-6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:bf154ba7ee2fd613eb541c2bc03d3d9ac667080a737449d1a3fb342740eb1a74"}, - {file = "coverage-6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f9afb5b746781fc2abce26193d1c817b7eb0e11459510fba65d2bd77fe161d9e"}, - {file = "coverage-6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edcada2e24ed68f019175c2b2af2a8b481d3d084798b8c20d15d34f5c733fa58"}, - {file = "coverage-6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9c8c4283e17690ff1a7427123ffb428ad6a52ed720d550e299e8291e33184dc"}, - {file = "coverage-6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f614fc9956d76d8a88a88bb41ddc12709caa755666f580af3a688899721efecd"}, - {file = "coverage-6.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9365ed5cce5d0cf2c10afc6add145c5037d3148585b8ae0e77cc1efdd6aa2953"}, - {file = "coverage-6.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8bdfe9ff3a4ea37d17f172ac0dff1e1c383aec17a636b9b35906babc9f0f5475"}, - {file = "coverage-6.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:63c424e6f5b4ab1cf1e23a43b12f542b0ec2e54f99ec9f11b75382152981df57"}, - {file = "coverage-6.2-cp38-cp38-win32.whl", hash = "sha256:49dbff64961bc9bdd2289a2bda6a3a5a331964ba5497f694e2cbd540d656dc1c"}, - {file = "coverage-6.2-cp38-cp38-win_amd64.whl", hash = "sha256:9a29311bd6429be317c1f3fe4bc06c4c5ee45e2fa61b2a19d4d1d6111cb94af2"}, - {file = "coverage-6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03b20e52b7d31be571c9c06b74746746d4eb82fc260e594dc662ed48145e9efd"}, - {file = "coverage-6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:215f8afcc02a24c2d9a10d3790b21054b58d71f4b3c6f055d4bb1b15cecce685"}, - {file = "coverage-6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a4bdeb0a52d1d04123b41d90a4390b096f3ef38eee35e11f0b22c2d031222c6c"}, - {file = "coverage-6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c332d8f8d448ded473b97fefe4a0983265af21917d8b0cdcb8bb06b2afe632c3"}, - {file = "coverage-6.2-cp39-cp39-win32.whl", hash = "sha256:6e1394d24d5938e561fbeaa0cd3d356207579c28bd1792f25a068743f2d5b282"}, - {file = "coverage-6.2-cp39-cp39-win_amd64.whl", hash = "sha256:86f2e78b1eff847609b1ca8050c9e1fa3bd44ce755b2ec30e70f2d3ba3844644"}, - {file = "coverage-6.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:5829192582c0ec8ca4a2532407bc14c2f338d9878a10442f5d03804a95fac9de"}, - {file = "coverage-6.2.tar.gz", hash = "sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8"}, + {file = "coverage-6.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeffd96882d8c06d31b65dddcf51db7c612547babc1c4c5db6a011abe9798525"}, + {file = "coverage-6.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:621f6ea7260ea2ffdaec64fe5cb521669984f567b66f62f81445221d4754df4c"}, + {file = "coverage-6.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84f2436d6742c01136dd940ee158bfc7cf5ced3da7e4c949662b8703b5cd8145"}, + {file = "coverage-6.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de73fca6fb403dd72d4da517cfc49fcf791f74eee697d3219f6be29adf5af6ce"}, + {file = "coverage-6.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78fbb2be068a13a5d99dce9e1e7d168db880870f7bc73f876152130575bd6167"}, + {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f5a4551dfd09c3bd12fca8144d47fe7745275adf3229b7223c2f9e29a975ebda"}, + {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7bff3a98f63b47464480de1b5bdd80c8fade0ba2832c9381253c9b74c4153c27"}, + {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a06c358f4aed05fa1099c39decc8022261bb07dfadc127c08cfbd1391b09689e"}, + {file = "coverage-6.3.1-cp310-cp310-win32.whl", hash = "sha256:9fff3ff052922cb99f9e52f63f985d4f7a54f6b94287463bc66b7cdf3eb41217"}, + {file = "coverage-6.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:276b13cc085474e482566c477c25ed66a097b44c6e77132f3304ac0b039f83eb"}, + {file = "coverage-6.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:56c4a409381ddd7bbff134e9756077860d4e8a583d310a6f38a2315b9ce301d0"}, + {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eb494070aa060ceba6e4bbf44c1bc5fa97bfb883a0d9b0c9049415f9e944793"}, + {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e15d424b8153756b7c903bde6d4610be0c3daca3986173c18dd5c1a1625e4cd"}, + {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61d47a897c1e91f33f177c21de897267b38fbb45f2cd8e22a710bcef1df09ac1"}, + {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:25e73d4c81efa8ea3785274a2f7f3bfbbeccb6fcba2a0bdd3be9223371c37554"}, + {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:fac0bcc5b7e8169bffa87f0dcc24435446d329cbc2b5486d155c2e0f3b493ae1"}, + {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:72128176fea72012063200b7b395ed8a57849282b207321124d7ff14e26988e8"}, + {file = "coverage-6.3.1-cp37-cp37m-win32.whl", hash = "sha256:1bc6d709939ff262fd1432f03f080c5042dc6508b6e0d3d20e61dd045456a1a0"}, + {file = "coverage-6.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:618eeba986cea7f621d8607ee378ecc8c2504b98b3fdc4952b30fe3578304687"}, + {file = "coverage-6.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ed164af5c9078596cfc40b078c3b337911190d3faeac830c3f1274f26b8320"}, + {file = "coverage-6.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:352c68e233409c31048a3725c446a9e48bbff36e39db92774d4f2380d630d8f8"}, + {file = "coverage-6.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:448d7bde7ceb6c69e08474c2ddbc5b4cd13c9e4aa4a717467f716b5fc938a734"}, + {file = "coverage-6.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9fde6b90889522c220dd56a670102ceef24955d994ff7af2cb786b4ba8fe11e4"}, + {file = "coverage-6.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e647a0be741edbb529a72644e999acb09f2ad60465f80757da183528941ff975"}, + {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a5cdc3adb4f8bb8d8f5e64c2e9e282bc12980ef055ec6da59db562ee9bdfefa"}, + {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2dd70a167843b4b4b2630c0c56f1b586fe965b4f8ac5da05b6690344fd065c6b"}, + {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9ad0a117b8dc2061ce9461ea4c1b4799e55edceb236522c5b8f958ce9ed8fa9a"}, + {file = "coverage-6.3.1-cp38-cp38-win32.whl", hash = "sha256:e92c7a5f7d62edff50f60a045dc9542bf939758c95b2fcd686175dd10ce0ed10"}, + {file = "coverage-6.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:482fb42eea6164894ff82abbcf33d526362de5d1a7ed25af7ecbdddd28fc124f"}, + {file = "coverage-6.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c5b81fb37db76ebea79aa963b76d96ff854e7662921ce742293463635a87a78d"}, + {file = "coverage-6.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a4f923b9ab265136e57cc14794a15b9dcea07a9c578609cd5dbbfff28a0d15e6"}, + {file = "coverage-6.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56d296cbc8254a7dffdd7bcc2eb70be5a233aae7c01856d2d936f5ac4e8ac1f1"}, + {file = "coverage-6.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1245ab82e8554fa88c4b2ab1e098ae051faac5af829efdcf2ce6b34dccd5567c"}, + {file = "coverage-6.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f2b05757c92ad96b33dbf8e8ec8d4ccb9af6ae3c9e9bd141c7cc44d20c6bcba"}, + {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9e3dd806f34de38d4c01416344e98eab2437ac450b3ae39c62a0ede2f8b5e4ed"}, + {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d651fde74a4d3122e5562705824507e2f5b2d3d57557f1916c4b27635f8fbe3f"}, + {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:704f89b87c4f4737da2860695a18c852b78ec7279b24eedacab10b29067d3a38"}, + {file = "coverage-6.3.1-cp39-cp39-win32.whl", hash = "sha256:2aed4761809640f02e44e16b8b32c1a5dee5e80ea30a0ff0912158bde9c501f2"}, + {file = "coverage-6.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:9976fb0a5709988778ac9bc44f3d50fccd989987876dfd7716dee28beed0a9fa"}, + {file = "coverage-6.3.1-pp36.pp37.pp38-none-any.whl", hash = "sha256:463e52616ea687fd323888e86bf25e864a3cc6335a043fad6bbb037dbf49bbe2"}, + {file = "coverage-6.3.1.tar.gz", hash = "sha256:6c3f6158b02ac403868eea390930ae64e9a9a2a5bbfafefbb920d29258d9f2f8"}, ] cycler = [ {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, diff --git a/src/eko/evolution_operator/flavors.py b/src/eko/evolution_operator/flavors.py index 42efe791d..fecfc797b 100644 --- a/src/eko/evolution_operator/flavors.py +++ b/src/eko/evolution_operator/flavors.py @@ -170,7 +170,8 @@ def rotate_matching_inverse(nf): def pids_from_iuev(label, nf, normalize): r""" - Obtain the list of pids with their corresponding weight, that are contributing to intrinsic unified evolution. + Obtain the list of pids with their corresponding weight, that are contributing to intrinsic + unified evolution. Parameters ---------- From 624c3d789ab08c3746e9a32c555370419b944b30 Mon Sep 17 00:00:00 2001 From: Alessandro Candido Date: Mon, 14 Feb 2022 12:20:35 +0100 Subject: [PATCH 12/24] Update black version --- poetry.lock | 326 ++++++++++++++++++++++++++----------------------- pyproject.toml | 2 +- 2 files changed, 171 insertions(+), 157 deletions(-) diff --git a/poetry.lock b/poetry.lock index 798e429c2..d07c7757a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -93,28 +93,24 @@ docs = ["Sphinx (>=4.3.2,<5.0.0)", "sphinx-rtd-theme (>=1.0.0,<2.0.0)", "sphinxc [[package]] name = "black" -version = "21.12b0" +version = "22.1.0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.6.2" [package.dependencies] -click = ">=7.1.2" +click = ">=8.0.0" mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0,<1" +pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = ">=0.2.6,<2.0.0" -typing-extensions = [ - {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, - {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, -] +tomli = ">=1.1.0" +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -python2 = ["typed-ast (>=1.4.3)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] @@ -135,7 +131,7 @@ python-versions = ">=3.6.1" [[package]] name = "charset-normalizer" -version = "2.0.10" +version = "2.0.12" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false @@ -246,14 +242,14 @@ testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-co [[package]] name = "fonttools" -version = "4.28.5" +version = "4.29.1" description = "Tools to manipulate font files" category = "main" optional = true python-versions = ">=3.7" [package.extras] -all = ["fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "brotlicffi (>=0.8.0)", "scipy", "brotli (>=1.0.1)", "munkres", "unicodedata2 (>=13.0.0)", "xattr"] +all = ["fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "brotlicffi (>=0.8.0)", "scipy", "brotli (>=1.0.1)", "munkres", "unicodedata2 (>=14.0.0)", "xattr"] graphite = ["lz4 (>=1.7.4.2)"] interpolatable = ["scipy", "munkres"] lxml = ["lxml (>=4.0,<5)"] @@ -262,7 +258,7 @@ plot = ["matplotlib"] symfont = ["sympy"] type1 = ["xattr"] ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=13.0.0)"] +unicode = ["unicodedata2 (>=14.0.0)"] woff = ["zopfli (>=0.1.4)", "brotlicffi (>=0.8.0)", "brotli (>=1.0.1)"] [[package]] @@ -278,11 +274,11 @@ docs = ["sphinx"] [[package]] name = "identify" -version = "2.4.4" +version = "2.4.9" description = "File identification library for Python" category = "dev" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.7" [package.extras] license = ["ukkonen"] @@ -305,7 +301,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "importlib-metadata" -version = "4.10.1" +version = "4.11.0" description = "Read metadata from Python packages" category = "main" optional = false @@ -514,7 +510,7 @@ python-versions = "*" [[package]] name = "numba" -version = "0.55.0" +version = "0.55.1" description = "compiling Python code using LLVM" category = "main" optional = false @@ -545,7 +541,7 @@ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" [[package]] name = "pandas" -version = "1.4.0" +version = "1.4.1" description = "Powerful data structures for data analysis, time series, and statistics" category = "main" optional = true @@ -634,7 +630,7 @@ python-versions = "*" [[package]] name = "pillow" -version = "9.0.0" +version = "9.0.1" description = "Python Imaging Library (Fork)" category = "main" optional = true @@ -642,7 +638,7 @@ python-versions = ">=3.7" [[package]] name = "platformdirs" -version = "2.4.1" +version = "2.5.0" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false @@ -682,7 +678,7 @@ virtualenv = ">=20.0.8" [[package]] name = "prompt-toolkit" -version = "3.0.24" +version = "3.0.28" description = "Library for building powerful interactive command lines in Python" category = "main" optional = true @@ -905,14 +901,14 @@ jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] [[package]] name = "scipy" -version = "1.7.3" +version = "1.8.0" description = "SciPy: Scientific Library for Python" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.8,<3.11" [package.dependencies] -numpy = ">=1.16.5,<1.23.0" +numpy = ">=1.17.3,<1.25.0" [[package]] name = "setuptools-scm" @@ -1120,11 +1116,11 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tomli" -version = "1.2.3" +version = "2.0.1" description = "A lil' TOML parser" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "traitlets" @@ -1139,7 +1135,7 @@ test = ["pytest"] [[package]] name = "typing-extensions" -version = "4.0.1" +version = "4.1.1" description = "Backported and Experimental Type Hints for Python 3.6+" category = "dev" optional = false @@ -1160,7 +1156,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "virtualenv" -version = "20.13.0" +version = "20.13.1" description = "Virtual Python Environment builder" category = "dev" optional = false @@ -1219,7 +1215,7 @@ mark = ["banana-hep", "sqlalchemy", "pandas", "matplotlib"] [metadata] lock-version = "1.1" python-versions = "^3.8,<3.11" -content-hash = "462c26c58f88ce01c16224becfb88fef298a8b81a69d4d85cc461ca00ebd84c0" +content-hash = "b0db31c20577a75caaac5885719fb76eda80a1913199877a2db1350eaea3b50e" [metadata.files] alabaster = [ @@ -1255,8 +1251,29 @@ banana-hep = [ {file = "banana_hep-0.5.9-py3-none-any.whl", hash = "sha256:22305ebd11f5c62073506789368e9802d936a1500f78f1d52a7991cbee3e7cc2"}, ] black = [ - {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, - {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, + {file = "black-22.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1297c63b9e1b96a3d0da2d85d11cd9bf8664251fd69ddac068b98dc4f34f73b6"}, + {file = "black-22.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ff96450d3ad9ea499fc4c60e425a1439c2120cbbc1ab959ff20f7c76ec7e866"}, + {file = "black-22.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e21e1f1efa65a50e3960edd068b6ae6d64ad6235bd8bfea116a03b21836af71"}, + {file = "black-22.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f69158a7d120fd641d1fa9a921d898e20d52e44a74a6fbbcc570a62a6bc8ab"}, + {file = "black-22.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:228b5ae2c8e3d6227e4bde5920d2fc66cc3400fde7bcc74f480cb07ef0b570d5"}, + {file = "black-22.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b1a5ed73ab4c482208d20434f700d514f66ffe2840f63a6252ecc43a9bc77e8a"}, + {file = "black-22.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35944b7100af4a985abfcaa860b06af15590deb1f392f06c8683b4381e8eeaf0"}, + {file = "black-22.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7835fee5238fc0a0baf6c9268fb816b5f5cd9b8793423a75e8cd663c48d073ba"}, + {file = "black-22.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dae63f2dbf82882fa3b2a3c49c32bffe144970a573cd68d247af6560fc493ae1"}, + {file = "black-22.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa1db02410b1924b6749c245ab38d30621564e658297484952f3d8a39fce7e8"}, + {file = "black-22.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c8226f50b8c34a14608b848dc23a46e5d08397d009446353dad45e04af0c8e28"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2d6f331c02f0f40aa51a22e479c8209d37fcd520c77721c034517d44eecf5912"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:742ce9af3086e5bd07e58c8feb09dbb2b047b7f566eb5f5bc63fd455814979f3"}, + {file = "black-22.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fdb8754b453fb15fad3f72cd9cad3e16776f0964d67cf30ebcbf10327a3777a3"}, + {file = "black-22.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5660feab44c2e3cb24b2419b998846cbb01c23c7fe645fee45087efa3da2d61"}, + {file = "black-22.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:6f2f01381f91c1efb1451998bd65a129b3ed6f64f79663a55fe0e9b74a5f81fd"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efbadd9b52c060a8fc3b9658744091cb33c31f830b3f074422ed27bad2b18e8f"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8871fcb4b447206904932b54b567923e5be802b9b19b744fdff092bd2f3118d0"}, + {file = "black-22.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccad888050f5393f0d6029deea2a33e5ae371fd182a697313bdbd835d3edaf9c"}, + {file = "black-22.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07e5c049442d7ca1a2fc273c79d1aecbbf1bc858f62e8184abe1ad175c4f7cc2"}, + {file = "black-22.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:373922fc66676133ddc3e754e4509196a8c392fec3f5ca4486673e685a421321"}, + {file = "black-22.1.0-py3-none-any.whl", hash = "sha256:3524739d76b6b3ed1132422bf9d82123cd1705086723bc3e235ca39fd21c667d"}, + {file = "black-22.1.0.tar.gz", hash = "sha256:a7c0192d35635f6fc1174be575cb7915e92e5dd629ee79fdaf0dcfa41a80afb5"}, ] certifi = [ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, @@ -1267,8 +1284,8 @@ cfgv = [ {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"}, - {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"}, + {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, + {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, ] click = [ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, @@ -1350,8 +1367,8 @@ filelock = [ {file = "filelock-3.4.2.tar.gz", hash = "sha256:38b4f4c989f9d06d44524df1b24bd19e167d851f19b50bf3e3559952dddc5b80"}, ] fonttools = [ - {file = "fonttools-4.28.5-py3-none-any.whl", hash = "sha256:edf251d5d2cc0580d5f72de4621c338d8c66c5f61abb50cf486640f73c8194d5"}, - {file = "fonttools-4.28.5.zip", hash = "sha256:545c05d0f7903a863c2020e07b8f0a57517f2c40d940bded77076397872d14ca"}, + {file = "fonttools-4.29.1-py3-none-any.whl", hash = "sha256:1933415e0fbdf068815cb1baaa1f159e17830215f7e8624e5731122761627557"}, + {file = "fonttools-4.29.1.zip", hash = "sha256:2b18a172120e32128a80efee04cff487d5d140fe7d817deb648b2eee023a40e4"}, ] greenlet = [ {file = "greenlet-1.1.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:58df5c2a0e293bf665a51f8a100d3e9956febfbf1d9aaf8c0677cf70218910c6"}, @@ -1406,8 +1423,8 @@ greenlet = [ {file = "greenlet-1.1.2.tar.gz", hash = "sha256:e30f5ea4ae2346e62cedde8794a56858a67b878dd79f7df76a0767e356b1744a"}, ] identify = [ - {file = "identify-2.4.4-py2.py3-none-any.whl", hash = "sha256:aa68609c7454dbcaae60a01ff6b8df1de9b39fe6e50b1f6107ec81dcda624aa6"}, - {file = "identify-2.4.4.tar.gz", hash = "sha256:6b4b5031f69c48bf93a646b90de9b381c6b5f560df4cbe0ed3cf7650ae741e4d"}, + {file = "identify-2.4.9-py2.py3-none-any.whl", hash = "sha256:bff7c4959d68510bc28b99d664b6a623e36c6eadc933f89a4e0a9ddff9b4fee4"}, + {file = "identify-2.4.9.tar.gz", hash = "sha256:e926ae3b3dc142b6a7a9c65433eb14ccac751b724ee255f7c2ed3b5970d764fb"}, ] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, @@ -1418,8 +1435,8 @@ imagesize = [ {file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"}, ] importlib-metadata = [ - {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"}, - {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"}, + {file = "importlib_metadata-4.11.0-py3-none-any.whl", hash = "sha256:6affcdb3aec542dd98df8211e730bba6c5f2bec8288d47bacacde898f548c9ad"}, + {file = "importlib_metadata-4.11.0.tar.gz", hash = "sha256:9e5e553bbba1843cb4a00823014b907616be46ee503d2b9ba001d214a8da218f"}, ] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, @@ -1690,31 +1707,31 @@ nodeenv = [ {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, ] numba = [ - {file = "numba-0.55.0-1-cp37-cp37m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:72c680b297200d4c60004081f6e83dbb3460fe73fafd6f0bd53b074aaa2e776f"}, - {file = "numba-0.55.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:637643dfe941ec608ecd2fbc1f75c309c4415043291d03d7608acdd5789ecaa4"}, - {file = "numba-0.55.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:52560a73ffbc62f2a4a43acc0d7ece19707a9f739fd6c9424b5b23d542185e96"}, - {file = "numba-0.55.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:2d5c7839c1915c5687b8c1ff07a5bb1c3ea1301ba51971156018676609c1fbf1"}, - {file = "numba-0.55.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b661f56b8508743deb78d7f69d5c517491f7bd8c35ec1cb735218a11af9a2449"}, - {file = "numba-0.55.0-cp310-cp310-win_amd64.whl", hash = "sha256:a9aa9fcb98dd6462c1d75b95d32faf0192932f6c9587072acb15cf1f4c726503"}, - {file = "numba-0.55.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:384589eaddb47f57d84726cbe53178cfb948cf5545f3eff24e3018087e94dbf3"}, - {file = "numba-0.55.0-cp37-cp37m-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e1439a3f7f656d44fd2c484b3914809355bc515a7da3336443d6f45b5806f0aa"}, - {file = "numba-0.55.0-cp37-cp37m-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:d09c61c04fdf4d14b9b3d455de5ced68458503d2075ac37c55deb40fe530bbe7"}, - {file = "numba-0.55.0-cp37-cp37m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dc2df1a8d985546e2043de28a502fd14e6f3278491ecffb4973fd3f409cd7606"}, - {file = "numba-0.55.0-cp37-cp37m-win32.whl", hash = "sha256:9598f6903bc4e7f775cb018be90f595d7af11b2a614f26109c29f991d8e49d62"}, - {file = "numba-0.55.0-cp37-cp37m-win_amd64.whl", hash = "sha256:b756a6fdbeae0d9de28c345522e9f7dc609b10f195fdf31073dd06b9ab17c82e"}, - {file = "numba-0.55.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:5d78e680f25e4febc224637fb0f22545321f4580fc7e8239f1b48a90e7f4f89d"}, - {file = "numba-0.55.0-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0b92608bbf54b5ae5fcbdaa911985ae6f3fc35a71c2785f4b64350e72ec91d3d"}, - {file = "numba-0.55.0-cp38-cp38-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:b0cccc1a65d317b9d4f0e4438d0a8c2e59e0c81bca121a40ba56ce403c7c81ae"}, - {file = "numba-0.55.0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:897accfe6320cd72011e99ff918619175bc312bbf13a74377fc33a22290aef96"}, - {file = "numba-0.55.0-cp38-cp38-win32.whl", hash = "sha256:8b9d8899b07c8136c02f0a08ab9bbb5ac5ebec02034024ef81f78aaa367ff32f"}, - {file = "numba-0.55.0-cp38-cp38-win_amd64.whl", hash = "sha256:936301026c6a1d9a1e2e4a6df81805f3e4a29d105be21668bbfd253813249d5b"}, - {file = "numba-0.55.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:efd9115234a76977af45c395dbade9ff1d29b5fbd85e6002f07d7379d54a328e"}, - {file = "numba-0.55.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bb8b47026d0edba77caf561389895a021a1c0c3c65d7af290e2f2fb459f26c5e"}, - {file = "numba-0.55.0-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:def2085df4aa34a7de9df06953ff21988b464bdef77ee845129741cf787061a7"}, - {file = "numba-0.55.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7ca365f06426fca3ff93ac6be04467ce07c839d497290b3b44dc9736daf4f7ae"}, - {file = "numba-0.55.0-cp39-cp39-win32.whl", hash = "sha256:e2cd740c6fc6adc5b15000832307bdd31d724ad793f647d855f9a2ca24e1ad32"}, - {file = "numba-0.55.0-cp39-cp39-win_amd64.whl", hash = "sha256:f8c86a11d7a6e017f65d46e3ffb87c4a5c554deb2695009a7ab4bd9f73716463"}, - {file = "numba-0.55.0.tar.gz", hash = "sha256:b221ebd997662a1dcb77e4f09140e022fbfe7577ad0781fc2e0214135dba6cbd"}, + {file = "numba-0.55.1-1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:be56fb78303973e6c19c7c2759996a5863bac69ca87570543d9f18f2f287a441"}, + {file = "numba-0.55.1-1-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ee71407be9cba09b4f68afa668317e97d66d5f83c37ab4caa20d8abcf5fad32b"}, + {file = "numba-0.55.1-1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:39a109efc317e8eb786feff0a29476036971ce08e3280be8153c3b6c1ccba415"}, + {file = "numba-0.55.1-1-cp37-cp37m-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0dc8294b2b6b2dbe3a709787bbb1e6f9dcef62197429de8daaa714d77052eefe"}, + {file = "numba-0.55.1-1-cp37-cp37m-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:bcd5e09dba5e19ff7a1b9716a1ce58f0931cec09515683011e57415c6a33ac3d"}, + {file = "numba-0.55.1-1-cp37-cp37m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:64209d71b1e33415d5b1b177ed218d679062f844667dd279ee9094c4e3e2babc"}, + {file = "numba-0.55.1-1-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff5ed5c7665f8a5405af53332d224caca68358909abde9ca8dfef3495cdea789"}, + {file = "numba-0.55.1-1-cp38-cp38-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:d80afc5618e66af2d101eff0e6214acb865136ae886d8b01414ca3dedd9166d6"}, + {file = "numba-0.55.1-1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6d0042371880fa56ed58be27502b11a08bff0b6335f0ebde82af1a7aef5e1287"}, + {file = "numba-0.55.1-1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4a5cb8930e729aeed96809524ca4df41b6f2432b379f220014ef4fdff21dbfe6"}, + {file = "numba-0.55.1-1-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:fee529ddc9c0584b932f7885735162e52344eded8c01c78c17e2768aa6787780"}, + {file = "numba-0.55.1-1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:230e542649c7087454bc851d2e22b5e15694b6cf0549a27234d1baea6c2e0a87"}, + {file = "numba-0.55.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:adc88fe64f5235c8b1e7230ae29476a08ffb61a65e9f79f745bd357f215e2d52"}, + {file = "numba-0.55.1-cp310-cp310-win32.whl", hash = "sha256:a5af7f1d30f56029d1b9ea288372f924f9dcb322f0e6358f6d5203b20eb6f7a0"}, + {file = "numba-0.55.1-cp310-cp310-win_amd64.whl", hash = "sha256:71815c501b2f6309c432e98ff93a582a9bfb61da943e0cb9a52595fadbb1131d"}, + {file = "numba-0.55.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:53909143917ea4962cfbfae7038ac882987ff54cb2c408538ce71f83b356f106"}, + {file = "numba-0.55.1-cp37-cp37m-win32.whl", hash = "sha256:cddc13939e2b27782258826686800ae9c2e90b35c36ef1ab5ccfae7cedca0516"}, + {file = "numba-0.55.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ac6ae19ff5093a42bf8b365550322a2e39650d608daa379dff71571272d88d93"}, + {file = "numba-0.55.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:77187ed09e6b25ae24b840e1acc4b5f9886b551cdc5f919ddad8e5933a6027d5"}, + {file = "numba-0.55.1-cp38-cp38-win32.whl", hash = "sha256:53ee562b873e00eaa26390690ac5d36b706782d429e5a18b255161f607f13c17"}, + {file = "numba-0.55.1-cp38-cp38-win_amd64.whl", hash = "sha256:02fb0ecd218ab1e1171cbaee11235a3a1f7dcf79dee3fa786243a2a6411f2fea"}, + {file = "numba-0.55.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:6aa8f18a003a0e4876826fe080e6038fc6da083899873b77172ec29c32e49b56"}, + {file = "numba-0.55.1-cp39-cp39-win32.whl", hash = "sha256:d5ee721ce884f8313802295633fdd3e7c83541e0917bafea2bdfed6aabab93bf"}, + {file = "numba-0.55.1-cp39-cp39-win_amd64.whl", hash = "sha256:b72350160eb9a73a36aa17d808f954353a263a0295d495497c87439d79bdaec7"}, + {file = "numba-0.55.1.tar.gz", hash = "sha256:03e9069a2666d1c84f93b00dbd716fb8fedde8bb2c6efafa2f04842a46442ea3"}, ] numpy = [ {file = "numpy-1.21.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:301e408a052fdcda5cdcf03021ebafc3c6ea093021bf9d1aa47c54d48bdad166"}, @@ -1753,27 +1770,27 @@ packaging = [ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] pandas = [ - {file = "pandas-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de62cf699122dcef175988f0714678e59c453dc234c5b47b7136bfd7641e3c8c"}, - {file = "pandas-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:46a18572f3e1cb75db59d9461940e9ba7ee38967fa48dd58f4139197f6e32280"}, - {file = "pandas-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:73f7da2ccc38cc988b74e5400b430b7905db5f2c413ff215506bea034eaf832d"}, - {file = "pandas-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5229c95db3a907451dacebc551492db6f7d01743e49bbc862f4a6010c227d187"}, - {file = "pandas-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe454180ad31bbbe1e5d111b44443258730467f035e26b4e354655ab59405871"}, - {file = "pandas-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:784cca3f69cfd7f6bd7c7fdb44f2bbab17e6de55725e9ff36d6f382510dfefb5"}, - {file = "pandas-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:de8f8999864399529e8514a2e6bfe00fd161f0a667903655552ed12e583ae3cb"}, - {file = "pandas-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0f19504f2783526fb5b4de675ea69d68974e21c1624f4b92295d057a31d5ec5f"}, - {file = "pandas-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f045bb5c6bfaba536089573bf97d6b8ccc7159d951fe63904c395a5e486fbe14"}, - {file = "pandas-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5280d057ddae06fe4a3cd6aa79040b8c205cd6dd21743004cf8635f39ed01712"}, - {file = "pandas-1.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f3b74335390dda49f5d5089fab71958812bf56f42aa27663ee4c16d19f4f1c5"}, - {file = "pandas-1.4.0-cp38-cp38-win32.whl", hash = "sha256:51e5da3802aaee1aa4254108ffaf1129a15fb3810b7ce8da1ec217c655b418f5"}, - {file = "pandas-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:f103a5cdcd66cb18882ccdc18a130c31c3cfe3529732e7f10a8ab3559164819c"}, - {file = "pandas-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4a8d5a200f8685e7ea562b2f022c77ab7cb82c1ca5b240e6965faa6f84e5c1e9"}, - {file = "pandas-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b5af258c7b090cca7b742cf2bd67ad1919aa9e4e681007366c9edad2d6a3d42b"}, - {file = "pandas-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:156aac90dd7b303bf0b91bae96c0503212777f86c731e41929c571125d26c8e9"}, - {file = "pandas-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dad075089e17a72391de33021ad93720aff258c3c4b68c78e1cafce7e447045"}, - {file = "pandas-1.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d59c958d6b8f96fdf850c7821571782168d5acfe75ccf78cd8d1ac15fb921df"}, - {file = "pandas-1.4.0-cp39-cp39-win32.whl", hash = "sha256:55ec0e192eefa26d823fc25a1f213d6c304a3592915f368e360652994cdb8d9a"}, - {file = "pandas-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:23c04dab11f3c6359cfa7afa83d3d054a8f8c283d773451184d98119ef54da97"}, - {file = "pandas-1.4.0.tar.gz", hash = "sha256:cdd76254c7f0a1583bd4e4781fb450d0ebf392e10d3f12e92c95575942e37df5"}, + {file = "pandas-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3dfb32ed50122fe8c5e7f2b8d97387edd742cc78f9ec36f007ee126cd3720907"}, + {file = "pandas-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0259cd11e7e6125aaea3af823b80444f3adad6149ff4c97fef760093598b3e34"}, + {file = "pandas-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:96e9ece5759f9b47ae43794b6359bbc54805d76e573b161ae770c1ea59393106"}, + {file = "pandas-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:508c99debccd15790d526ce6b1624b97a5e1e4ca5b871319fb0ebfd46b8f4dad"}, + {file = "pandas-1.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6a7bbbb7950063bfc942f8794bc3e31697c020a14f1cd8905fc1d28ec674a01"}, + {file = "pandas-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:c614001129b2a5add5e3677c3a213a9e6fd376204cb8d17c04e84ff7dfc02a73"}, + {file = "pandas-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:4e1176f45981c8ccc8161bc036916c004ca51037a7ed73f2d2a9857e6dbe654f"}, + {file = "pandas-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bbb15ad79050e8b8d39ec40dd96a30cd09b886a2ae8848d0df1abba4d5502a67"}, + {file = "pandas-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6d6ad1da00c7cc7d8dd1559a6ba59ba3973be6b15722d49738b2be0977eb8a0c"}, + {file = "pandas-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:358b0bc98a5ff067132d23bf7a2242ee95db9ea5b7bbc401cf79205f11502fd3"}, + {file = "pandas-1.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6105af6533f8b63a43ea9f08a2ede04e8f43e49daef0209ab0d30352bcf08bee"}, + {file = "pandas-1.4.1-cp38-cp38-win32.whl", hash = "sha256:04dd15d9db538470900c851498e532ef28d4e56bfe72c9523acb32042de43dfb"}, + {file = "pandas-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:1b384516dbb4e6aae30e3464c2e77c563da5980440fbdfbd0968e3942f8f9d70"}, + {file = "pandas-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f02e85e6d832be37d7f16cf6ac8bb26b519ace3e5f3235564a91c7f658ab2a43"}, + {file = "pandas-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0b1a13f647e4209ed7dbb5da3497891d0045da9785327530ab696417ef478f84"}, + {file = "pandas-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:19f7c632436b1b4f84615c3b127bbd7bc603db95e3d4332ed259dc815c9aaa26"}, + {file = "pandas-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ea47ba1d6f359680130bd29af497333be6110de8f4c35b9211eec5a5a9630fa"}, + {file = "pandas-1.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e5a7a1e0ecaac652326af627a3eca84886da9e667d68286866d4e33f6547caf"}, + {file = "pandas-1.4.1-cp39-cp39-win32.whl", hash = "sha256:1d85d5f6be66dfd6d1d8d13b9535e342a2214260f1852654b19fa4d7b8d1218b"}, + {file = "pandas-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:3129a35d9dad1d80c234dd78f8f03141b914395d23f97cf92a366dcd19f8f8bf"}, + {file = "pandas-1.4.1.tar.gz", hash = "sha256:8db93ec98ac7cb5f8ac1420c10f5e3c43533153f253fe7fb6d891cf5aa2b80d2"}, ] parso = [ {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, @@ -1819,42 +1836,45 @@ pickleshare = [ {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] pillow = [ - {file = "Pillow-9.0.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:113723312215b25c22df1fdf0e2da7a3b9c357a7d24a93ebbe80bfda4f37a8d4"}, - {file = "Pillow-9.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bb47a548cea95b86494a26c89d153fd31122ed65255db5dcbc421a2d28eb3379"}, - {file = "Pillow-9.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31b265496e603985fad54d52d11970383e317d11e18e856971bdbb86af7242a4"}, - {file = "Pillow-9.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d154ed971a4cc04b93a6d5b47f37948d1f621f25de3e8fa0c26b2d44f24e3e8f"}, - {file = "Pillow-9.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80fe92813d208ce8aa7d76da878bdc84b90809f79ccbad2a288e9bcbeac1d9bd"}, - {file = "Pillow-9.0.0-cp310-cp310-win32.whl", hash = "sha256:d5dcea1387331c905405b09cdbfb34611050cc52c865d71f2362f354faee1e9f"}, - {file = "Pillow-9.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:52abae4c96b5da630a8b4247de5428f593465291e5b239f3f843a911a3cf0105"}, - {file = "Pillow-9.0.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:72c3110228944019e5f27232296c5923398496b28be42535e3b2dc7297b6e8b6"}, - {file = "Pillow-9.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b6d21771da41497b81652d44191489296555b761684f82b7b544c49989110f"}, - {file = "Pillow-9.0.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72f649d93d4cc4d8cf79c91ebc25137c358718ad75f99e99e043325ea7d56100"}, - {file = "Pillow-9.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7aaf07085c756f6cb1c692ee0d5a86c531703b6e8c9cae581b31b562c16b98ce"}, - {file = "Pillow-9.0.0-cp37-cp37m-win32.whl", hash = "sha256:03b27b197deb4ee400ed57d8d4e572d2d8d80f825b6634daf6e2c18c3c6ccfa6"}, - {file = "Pillow-9.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a09a9d4ec2b7887f7a088bbaacfd5c07160e746e3d47ec5e8050ae3b2a229e9f"}, - {file = "Pillow-9.0.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:490e52e99224858f154975db61c060686df8a6b3f0212a678e5d2e2ce24675c9"}, - {file = "Pillow-9.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:500d397ddf4bbf2ca42e198399ac13e7841956c72645513e8ddf243b31ad2128"}, - {file = "Pillow-9.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ebd8b9137630a7bbbff8c4b31e774ff05bbb90f7911d93ea2c9371e41039b52"}, - {file = "Pillow-9.0.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd0e5062f11cb3e730450a7d9f323f4051b532781026395c4323b8ad055523c4"}, - {file = "Pillow-9.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f3b4522148586d35e78313db4db0df4b759ddd7649ef70002b6c3767d0fdeb7"}, - {file = "Pillow-9.0.0-cp38-cp38-win32.whl", hash = "sha256:0b281fcadbb688607ea6ece7649c5d59d4bbd574e90db6cd030e9e85bde9fecc"}, - {file = "Pillow-9.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:b5050d681bcf5c9f2570b93bee5d3ec8ae4cf23158812f91ed57f7126df91762"}, - {file = "Pillow-9.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:c2067b3bb0781f14059b112c9da5a91c80a600a97915b4f48b37f197895dd925"}, - {file = "Pillow-9.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2d16b6196fb7a54aff6b5e3ecd00f7c0bab1b56eee39214b2b223a9d938c50af"}, - {file = "Pillow-9.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98cb63ca63cb61f594511c06218ab4394bf80388b3d66cd61d0b1f63ee0ea69f"}, - {file = "Pillow-9.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc462d24500ba707e9cbdef436c16e5c8cbf29908278af053008d9f689f56dee"}, - {file = "Pillow-9.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3586e12d874ce2f1bc875a3ffba98732ebb12e18fb6d97be482bd62b56803281"}, - {file = "Pillow-9.0.0-cp39-cp39-win32.whl", hash = "sha256:68e06f8b2248f6dc8b899c3e7ecf02c9f413aab622f4d6190df53a78b93d97a5"}, - {file = "Pillow-9.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:6579f9ba84a3d4f1807c4aab4be06f373017fc65fff43498885ac50a9b47a553"}, - {file = "Pillow-9.0.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:47f5cf60bcb9fbc46011f75c9b45a8b5ad077ca352a78185bd3e7f1d294b98bb"}, - {file = "Pillow-9.0.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fd8053e1f8ff1844419842fd474fc359676b2e2a2b66b11cc59f4fa0a301315"}, - {file = "Pillow-9.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c5439bfb35a89cac50e81c751317faea647b9a3ec11c039900cd6915831064d"}, - {file = "Pillow-9.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95545137fc56ce8c10de646074d242001a112a92de169986abd8c88c27566a05"}, - {file = "Pillow-9.0.0.tar.gz", hash = "sha256:ee6e2963e92762923956fe5d3479b1fdc3b76c83f290aad131a2f98c3df0593e"}, + {file = "Pillow-9.0.1-1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a5d24e1d674dd9d72c66ad3ea9131322819ff86250b30dc5821cbafcfa0b96b4"}, + {file = "Pillow-9.0.1-1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2632d0f846b7c7600edf53c48f8f9f1e13e62f66a6dbc15191029d950bfed976"}, + {file = "Pillow-9.0.1-1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b9618823bd237c0d2575283f2939655f54d51b4527ec3972907a927acbcc5bfc"}, + {file = "Pillow-9.0.1-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:9bfdb82cdfeccec50aad441afc332faf8606dfa5e8efd18a6692b5d6e79f00fd"}, + {file = "Pillow-9.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5100b45a4638e3c00e4d2320d3193bdabb2d75e79793af7c3eb139e4f569f16f"}, + {file = "Pillow-9.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:528a2a692c65dd5cafc130de286030af251d2ee0483a5bf50c9348aefe834e8a"}, + {file = "Pillow-9.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f29d831e2151e0b7b39981756d201f7108d3d215896212ffe2e992d06bfe049"}, + {file = "Pillow-9.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:855c583f268edde09474b081e3ddcd5cf3b20c12f26e0d434e1386cc5d318e7a"}, + {file = "Pillow-9.0.1-cp310-cp310-win32.whl", hash = "sha256:d9d7942b624b04b895cb95af03a23407f17646815495ce4547f0e60e0b06f58e"}, + {file = "Pillow-9.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:81c4b81611e3a3cb30e59b0cf05b888c675f97e3adb2c8672c3154047980726b"}, + {file = "Pillow-9.0.1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:413ce0bbf9fc6278b2d63309dfeefe452835e1c78398efb431bab0672fe9274e"}, + {file = "Pillow-9.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80fe64a6deb6fcfdf7b8386f2cf216d329be6f2781f7d90304351811fb591360"}, + {file = "Pillow-9.0.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cef9c85ccbe9bee00909758936ea841ef12035296c748aaceee535969e27d31b"}, + {file = "Pillow-9.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d19397351f73a88904ad1aee421e800fe4bbcd1aeee6435fb62d0a05ccd1030"}, + {file = "Pillow-9.0.1-cp37-cp37m-win32.whl", hash = "sha256:d21237d0cd37acded35154e29aec853e945950321dd2ffd1a7d86fe686814669"}, + {file = "Pillow-9.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ede5af4a2702444a832a800b8eb7f0a7a1c0eed55b644642e049c98d589e5092"}, + {file = "Pillow-9.0.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:b5b3f092fe345c03bca1e0b687dfbb39364b21ebb8ba90e3fa707374b7915204"}, + {file = "Pillow-9.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:335ace1a22325395c4ea88e00ba3dc89ca029bd66bd5a3c382d53e44f0ccd77e"}, + {file = "Pillow-9.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db6d9fac65bd08cea7f3540b899977c6dee9edad959fa4eaf305940d9cbd861c"}, + {file = "Pillow-9.0.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f154d173286a5d1863637a7dcd8c3437bb557520b01bddb0be0258dcb72696b5"}, + {file = "Pillow-9.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14d4b1341ac07ae07eb2cc682f459bec932a380c3b122f5540432d8977e64eae"}, + {file = "Pillow-9.0.1-cp38-cp38-win32.whl", hash = "sha256:effb7749713d5317478bb3acb3f81d9d7c7f86726d41c1facca068a04cf5bb4c"}, + {file = "Pillow-9.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:7f7609a718b177bf171ac93cea9fd2ddc0e03e84d8fa4e887bdfc39671d46b00"}, + {file = "Pillow-9.0.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:80ca33961ced9c63358056bd08403ff866512038883e74f3a4bf88ad3eb66838"}, + {file = "Pillow-9.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c3c33ac69cf059bbb9d1a71eeaba76781b450bc307e2291f8a4764d779a6b28"}, + {file = "Pillow-9.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12875d118f21cf35604176872447cdb57b07126750a33748bac15e77f90f1f9c"}, + {file = "Pillow-9.0.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:514ceac913076feefbeaf89771fd6febde78b0c4c1b23aaeab082c41c694e81b"}, + {file = "Pillow-9.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3c5c79ab7dfce6d88f1ba639b77e77a17ea33a01b07b99840d6ed08031cb2a7"}, + {file = "Pillow-9.0.1-cp39-cp39-win32.whl", hash = "sha256:718856856ba31f14f13ba885ff13874be7fefc53984d2832458f12c38205f7f7"}, + {file = "Pillow-9.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:f25ed6e28ddf50de7e7ea99d7a976d6a9c415f03adcaac9c41ff6ff41b6d86ac"}, + {file = "Pillow-9.0.1-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:011233e0c42a4a7836498e98c1acf5e744c96a67dd5032a6f666cc1fb97eab97"}, + {file = "Pillow-9.0.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:253e8a302a96df6927310a9d44e6103055e8fb96a6822f8b7f514bb7ef77de56"}, + {file = "Pillow-9.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6295f6763749b89c994fcb6d8a7f7ce03c3992e695f89f00b741b4580b199b7e"}, + {file = "Pillow-9.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a9f44cd7e162ac6191491d7249cceb02b8116b0f7e847ee33f739d7cb1ea1f70"}, + {file = "Pillow-9.0.1.tar.gz", hash = "sha256:6c8bc8238a7dfdaf7a75f5ec5a663f4173f8c367e5a39f87e720495e1eed75fa"}, ] platformdirs = [ - {file = "platformdirs-2.4.1-py3-none-any.whl", hash = "sha256:1d7385c7db91728b83efd0ca99a5afb296cab9d0ed8313a45ed8ba17967ecfca"}, - {file = "platformdirs-2.4.1.tar.gz", hash = "sha256:440633ddfebcc36264232365d7840a970e75e1018d15b4327d11f91909045fda"}, + {file = "platformdirs-2.5.0-py3-none-any.whl", hash = "sha256:30671902352e97b1eafd74ade8e4a694782bd3471685e78c32d0fdfd3aa7e7bb"}, + {file = "platformdirs-2.5.0.tar.gz", hash = "sha256:8ec11dfba28ecc0715eb5fb0147a87b1bf325f349f3da9aab2cd6b50b96b692b"}, ] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, @@ -1865,8 +1885,8 @@ pre-commit = [ {file = "pre_commit-2.17.0.tar.gz", hash = "sha256:c1a8040ff15ad3d648c70cc3e55b93e4d2d5b687320955505587fd79bbaed06a"}, ] prompt-toolkit = [ - {file = "prompt_toolkit-3.0.24-py3-none-any.whl", hash = "sha256:e56f2ff799bacecd3e88165b1e2f5ebf9bcd59e80e06d395fa0cc4b8bd7bb506"}, - {file = "prompt_toolkit-3.0.24.tar.gz", hash = "sha256:1bb05628c7d87b645974a1bad3f17612be0c29fa39af9f7688030163f680bad6"}, + {file = "prompt_toolkit-3.0.28-py3-none-any.whl", hash = "sha256:30129d870dcb0b3b6a53efdc9d0a83ea96162ffd28ffe077e94215b233dc670c"}, + {file = "prompt_toolkit-3.0.28.tar.gz", hash = "sha256:9f1cd16b1e86c2968f2519d7fb31dd9d669916f515612c269d14e9ed52b51650"}, ] ptyprocess = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, @@ -1971,35 +1991,29 @@ rich = [ {file = "rich-10.16.2.tar.gz", hash = "sha256:720974689960e06c2efdb54327f8bf0cdbdf4eae4ad73b6c94213cad405c371b"}, ] scipy = [ - {file = "scipy-1.7.3-1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c9e04d7e9b03a8a6ac2045f7c5ef741be86727d8f49c45db45f244bdd2bcff17"}, - {file = "scipy-1.7.3-1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b0e0aeb061a1d7dcd2ed59ea57ee56c9b23dd60100825f98238c06ee5cc4467e"}, - {file = "scipy-1.7.3-1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:b78a35c5c74d336f42f44106174b9851c783184a85a3fe3e68857259b37b9ffb"}, - {file = "scipy-1.7.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:173308efba2270dcd61cd45a30dfded6ec0085b4b6eb33b5eb11ab443005e088"}, - {file = "scipy-1.7.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:21b66200cf44b1c3e86495e3a436fc7a26608f92b8d43d344457c54f1c024cbc"}, - {file = "scipy-1.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceebc3c4f6a109777c0053dfa0282fddb8893eddfb0d598574acfb734a926168"}, - {file = "scipy-1.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7eaea089345a35130bc9a39b89ec1ff69c208efa97b3f8b25ea5d4c41d88094"}, - {file = "scipy-1.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:304dfaa7146cffdb75fbf6bb7c190fd7688795389ad060b970269c8576d038e9"}, - {file = "scipy-1.7.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:033ce76ed4e9f62923e1f8124f7e2b0800db533828c853b402c7eec6e9465d80"}, - {file = "scipy-1.7.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4d242d13206ca4302d83d8a6388c9dfce49fc48fdd3c20efad89ba12f785bf9e"}, - {file = "scipy-1.7.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8499d9dd1459dc0d0fe68db0832c3d5fc1361ae8e13d05e6849b358dc3f2c279"}, - {file = "scipy-1.7.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca36e7d9430f7481fc7d11e015ae16fbd5575615a8e9060538104778be84addf"}, - {file = "scipy-1.7.3-cp37-cp37m-win32.whl", hash = "sha256:e2c036492e673aad1b7b0d0ccdc0cb30a968353d2c4bf92ac8e73509e1bf212c"}, - {file = "scipy-1.7.3-cp37-cp37m-win_amd64.whl", hash = "sha256:866ada14a95b083dd727a845a764cf95dd13ba3dc69a16b99038001b05439709"}, - {file = "scipy-1.7.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:65bd52bf55f9a1071398557394203d881384d27b9c2cad7df9a027170aeaef93"}, - {file = "scipy-1.7.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:f99d206db1f1ae735a8192ab93bd6028f3a42f6fa08467d37a14eb96c9dd34a3"}, - {file = "scipy-1.7.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5f2cfc359379c56b3a41b17ebd024109b2049f878badc1e454f31418c3a18436"}, - {file = "scipy-1.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb7ae2c4dbdb3c9247e07acc532f91077ae6dbc40ad5bd5dca0bb5a176ee9bda"}, - {file = "scipy-1.7.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c2d250074cfa76715d58830579c64dff7354484b284c2b8b87e5a38321672c"}, - {file = "scipy-1.7.3-cp38-cp38-win32.whl", hash = "sha256:87069cf875f0262a6e3187ab0f419f5b4280d3dcf4811ef9613c605f6e4dca95"}, - {file = "scipy-1.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:7edd9a311299a61e9919ea4192dd477395b50c014cdc1a1ac572d7c27e2207fa"}, - {file = "scipy-1.7.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eef93a446114ac0193a7b714ce67659db80caf940f3232bad63f4c7a81bc18df"}, - {file = "scipy-1.7.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:eb326658f9b73c07081300daba90a8746543b5ea177184daed26528273157294"}, - {file = "scipy-1.7.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:93378f3d14fff07572392ce6a6a2ceb3a1f237733bd6dcb9eb6a2b29b0d19085"}, - {file = "scipy-1.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edad1cf5b2ce1912c4d8ddad20e11d333165552aba262c882e28c78bbc09dbf6"}, - {file = "scipy-1.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d1cc2c19afe3b5a546ede7e6a44ce1ff52e443d12b231823268019f608b9b12"}, - {file = "scipy-1.7.3-cp39-cp39-win32.whl", hash = "sha256:2c56b820d304dffcadbbb6cbfbc2e2c79ee46ea291db17e288e73cd3c64fefa9"}, - {file = "scipy-1.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:3f78181a153fa21c018d346f595edd648344751d7f03ab94b398be2ad083ed3e"}, - {file = "scipy-1.7.3.tar.gz", hash = "sha256:ab5875facfdef77e0a47d5fd39ea178b58e60e454a4c85aa1e52fcb80db7babf"}, + {file = "scipy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:87b01c7d5761e8a266a0fbdb9d88dcba0910d63c1c671bdb4d99d29f469e9e03"}, + {file = "scipy-1.8.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ae3e327da323d82e918e593460e23babdce40d7ab21490ddf9fc06dec6b91a18"}, + {file = "scipy-1.8.0-cp310-cp310-macosx_12_0_universal2.macosx_10_9_x86_64.whl", hash = "sha256:16e09ef68b352d73befa8bcaf3ebe25d3941fe1a58c82909d5589856e6bc8174"}, + {file = "scipy-1.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c17a1878d00a5dd2797ccd73623ceca9d02375328f6218ee6d921e1325e61aff"}, + {file = "scipy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937d28722f13302febde29847bbe554b89073fbb924a30475e5ed7b028898b5f"}, + {file = "scipy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:8f4d059a97b29c91afad46b1737274cb282357a305a80bdd9e8adf3b0ca6a3f0"}, + {file = "scipy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:38aa39b6724cb65271e469013aeb6f2ce66fd44f093e241c28a9c6bc64fd79ed"}, + {file = "scipy-1.8.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:559a8a4c03a5ba9fe3232f39ed24f86457e4f3f6c0abbeae1fb945029f092720"}, + {file = "scipy-1.8.0-cp38-cp38-macosx_12_0_universal2.macosx_10_9_x86_64.whl", hash = "sha256:f4a6d3b9f9797eb2d43938ac2c5d96d02aed17ef170c8b38f11798717523ddba"}, + {file = "scipy-1.8.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:92b2c2af4183ed09afb595709a8ef5783b2baf7f41e26ece24e1329c109691a7"}, + {file = "scipy-1.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a279e27c7f4566ef18bab1b1e2c37d168e365080974758d107e7d237d3f0f484"}, + {file = "scipy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad5be4039147c808e64f99c0e8a9641eb5d2fa079ff5894dcd8240e94e347af4"}, + {file = "scipy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:3d9dd6c8b93a22bf9a3a52d1327aca7e092b1299fb3afc4f89e8eba381be7b59"}, + {file = "scipy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:5e73343c5e0d413c1f937302b2e04fb07872f5843041bcfd50699aef6e95e399"}, + {file = "scipy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:de2e80ee1d925984c2504812a310841c241791c5279352be4707cdcd7c255039"}, + {file = "scipy-1.8.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:c2bae431d127bf0b1da81fc24e4bba0a84d058e3a96b9dd6475dfcb3c5e8761e"}, + {file = "scipy-1.8.0-cp39-cp39-macosx_12_0_universal2.macosx_10_9_x86_64.whl", hash = "sha256:723b9f878095ed994756fa4ee3060c450e2db0139c5ba248ee3f9628bd64e735"}, + {file = "scipy-1.8.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:011d4386b53b933142f58a652aa0f149c9b9242abd4f900b9f4ea5fbafc86b89"}, + {file = "scipy-1.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6f0cd9c0bd374ef834ee1e0f0999678d49dcc400ea6209113d81528958f97c7"}, + {file = "scipy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3720d0124aced49f6f2198a6900304411dbbeed12f56951d7c66ebef05e3df6"}, + {file = "scipy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:3d573228c10a3a8c32b9037be982e6440e411b443a6267b067cac72f690b8d56"}, + {file = "scipy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:bb7088e89cd751acf66195d2f00cf009a1ea113f3019664032d9075b1e727b6c"}, + {file = "scipy-1.8.0.tar.gz", hash = "sha256:31d4f2d6b724bc9a98e527b5849b8a7e589bf1ea630c33aa563eda912c9ff0bd"}, ] setuptools-scm = [ {file = "setuptools_scm-6.4.2-py3-none-any.whl", hash = "sha256:acea13255093849de7ccb11af9e1fb8bde7067783450cee9ef7a93139bddf6d4"}, @@ -2092,24 +2106,24 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tomli = [ - {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, - {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] traitlets = [ {file = "traitlets-5.1.1-py3-none-any.whl", hash = "sha256:2d313cc50a42cd6c277e7d7dc8d4d7fedd06a2c215f78766ae7b1a66277e0033"}, {file = "traitlets-5.1.1.tar.gz", hash = "sha256:059f456c5a7c1c82b98c2e8c799f39c9b8128f6d0d46941ee118daace9eb70c7"}, ] typing-extensions = [ - {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, - {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, + {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"}, + {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"}, ] urllib3 = [ {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"}, {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"}, ] virtualenv = [ - {file = "virtualenv-20.13.0-py2.py3-none-any.whl", hash = "sha256:339f16c4a86b44240ba7223d0f93a7887c3ca04b5f9c8129da7958447d079b09"}, - {file = "virtualenv-20.13.0.tar.gz", hash = "sha256:d8458cf8d59d0ea495ad9b34c2599487f8a7772d796f9910858376d1600dd2dd"}, + {file = "virtualenv-20.13.1-py2.py3-none-any.whl", hash = "sha256:45e1d053cad4cd453181ae877c4ffc053546ae99e7dd049b9ff1d9be7491abf7"}, + {file = "virtualenv-20.13.1.tar.gz", hash = "sha256:e0621bcbf4160e4e1030f05065c8834b4e93f4fcc223255db2a823440aca9c14"}, ] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, diff --git a/pyproject.toml b/pyproject.toml index 75d352098..cab29e8f6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,7 +44,7 @@ pandas = { version = "^1.3.0", optional = true } matplotlib = { version = "^3.5.1", optional = true } [tool.poetry.dev-dependencies] -black = "^21.12b0" +black = "^22.1.0" isort = "^5.10.1" pylint = "^2.12.2" pre-commit = "^2.16.0" From f973f2677ba5dd27d691f5fd5dd0ac6763c42f3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Tue, 15 Feb 2022 10:58:49 +0100 Subject: [PATCH 13/24] Change iuev -> intrinsic_unified_evol --- doc/source/theory/FlavorSpace.rst | 49 ++++++++++++++++++++------- src/eko/basis_rotation.py | 2 +- src/eko/evolution_operator/flavors.py | 2 +- tests/test_basis_rotation.py | 6 ++-- tests/test_ev_op_flavors.py | 12 +++---- 5 files changed, 47 insertions(+), 24 deletions(-) diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index 5519b8640..be25a504f 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -117,11 +117,11 @@ In this case the QED :math:`\otimes` QCD evolution basis that performs the maxim \Sigma_u & = u^+ + c^+ + t^+ \\ \Sigma_d & = d^+ + s^+ + b^+ \\ \Sigma &= \Sigma_u + \Sigma_d \\ - \Delta_\Sigma &= \Sigma_u - \Sigma_d \\ + T_0 &= \Sigma_u - \Sigma_d \\ V_u & = u^- + c^- + t^- \\ V_d & = d^- + s^- + b^- \\ V &= V_u + V_d \\ - \Delta_V &= V_u - V_d \\ + V_0 &= V_u - V_d \\ T_1^u &=u^+ - c^+ \\ T_2^u &=u^+ + c^+ - 2t^+ \\ T_1^d &=d^+ - s^+ \\ @@ -150,24 +150,47 @@ For :math:`n_f=3` light flavors we find: .. math :: \Sigma_{(3)} &= u^+ + d^+ + s^+\\ + T_{0,(3)} &= 2u^+ - d^+ - s^+ \\ V_{(3)} &= u^- + d^- + s^-\\ - T_{0,(3)} &= 2u^+ - d^+ - s^+\\ - T_1^d &= d^+ - s^+\\ V_{0,(3)} &= 2u^- - d^- - s^-\\ - V_1^d &= d^- - s^-\\ - \mathcal F \sim \mathcal F_{iuev,3} &= \span(\gamma, g, \Sigma_{(3)}, V_{(3)}, V_{0,(3)}, V_1^d, T_{0,(3)}, T_1^d, c^+, c^-, b^+, b^-, t^+, t^-) + T_1^d &=d^+ - s^+ \\ + V_1^d &=d^- - s^- \\ + \mathcal F \sim \mathcal F_{intrinsic_unified_evol,3} &= \span(\gamma, g, \Sigma_{(3)}, V_{(3)}, V_{0,(3)}, V_1^d, T_{0,(3)}, T_1^d, c^+, c^-, b^+, b^-, t^+, t^-) For :math:`n_f=4` light flavors we find: .. math :: - \Sigma_{(4)} &= u^+ + d^+ + s^+ + cˆ+\\ - V_{(4)} &= u^- + d^- + s^- + cˆ-\\ - T_{0,(4)} &= u^+ + cˆ+ - d^+ - s^+\\ - T_1^u &= u^+ - c^+\\ - V_{0,(4)} &= u^- + cˆ- - d^- - s^-\\ - V_1^u &= u^- - c^-\\ - \mathcal F \sim \mathcal F_{iuev,4} &= \span(\gamma, g, \Sigma_{(4)}, V_{(4)}, V_{0,(4)}, V_1^d, T_{0,(4)}, T_1^d, V_1^u, T_1^u, b^+, b^-, t^+, t^-) + \Sigma_{(4)} &= u^+ + d^+ + s^+ + c^+\\ + T_{0,(4)} &= u^+ + c^+ - d^+ - s^+\\ + V_{(4)} &= u^- + d^- + s^- + c^-\\ + V_{0,(4)} &= u^- + c^- - d^- - s^-\\ + T_1^u &=u^+ - c^+ \\ + T_1^d &=d^+ - s^+ \\ + V_1^u &=u^- - c^- \\ + V_1^d &=d^- - s^- \\ + \mathcal F \sim \mathcal F_{intrinsic_unified_evol,4} &= \span(\gamma, g, \Sigma_{(4)}, V_{(4)}, V_{0,(4)}, V_1^d, T_{0,(4)}, T_1^d, V_1^u, T_1^u, b^+, b^-, t^+, t^-) + +For :math:`n_f=5` light flavors we find: +.. math :: + \Sigma_{(5)} &= u^+ + d^+ + s^+ + c^+ + b^+\\ + V_{(5)} &= u^- + d^- + s^- + c^- + b^-\\ + T_{0,(5)} &= \frac{3}{2}u^+ + \frac{3}{2}c^+ - d^+ -s^+ - b^+\\ + V_{0,(5)} &= \frac{3}{2}u^- + \frac{3}{2}c^- - d^- -s^- - b^-\\ + T_1^u &=u^+ - c^+ \\ + T_1^d &=d^+ - s^+ \\ + V_1^u &=u^- - c^- \\ + V_1^d &=d^- - s^- \\ + T_2^d &=d^+ + s^+ - 2b^+ \\ + V_2^d &=d^- + s^- - 2b^- \\ + \mathcal F \sim \mathcal F_{intrinsic_unified_evol,5} &= \span(\gamma, g, \Sigma_{(4)}, V_{(4)}, V_{0,(4)}, V_1^d, T_{0,(4)}, T_1^d, V_1^u, T_1^u, T_2^d, V_2^d, t^+, t^-) + +For :math:`n_f=6` light flavors the intrinsic QED :math:`\otimes` QCD Evolution Basis coincides with the QED :math:`\otimes` QCD Evolution Basis. + +- this basis is *not* normalized with respect to the canonical Flavor Basis +- the basis transformation from the Flavor Basis is implemented in + :meth:`~eko.evolution_operator.flavors.pids_from_intrinsic_evol` +- the factors 3/2 in the definition of :math:`V_{0,(5)}` and :math:`T_{0,(5)}` are needed in order to have an orthogonal basis for :math:`n_f=5` Other Bases ----------- diff --git a/src/eko/basis_rotation.py b/src/eko/basis_rotation.py index e96ee4ee7..e2d46fc09 100644 --- a/src/eko/basis_rotation.py +++ b/src/eko/basis_rotation.py @@ -173,7 +173,7 @@ def ad_projectors(nf): return np.array(projs) -def iuev_labels(nf): +def intrinsic_unified_evol_labels(nf): """ Collect all labels in the intrinsic unified evolution basis. diff --git a/src/eko/evolution_operator/flavors.py b/src/eko/evolution_operator/flavors.py index fecfc797b..4377eb2df 100644 --- a/src/eko/evolution_operator/flavors.py +++ b/src/eko/evolution_operator/flavors.py @@ -168,7 +168,7 @@ def rotate_matching_inverse(nf): return rotate_matching(nf, True) -def pids_from_iuev(label, nf, normalize): +def pids_from_intrinsic_unified_evol(label, nf, normalize): r""" Obtain the list of pids with their corresponding weight, that are contributing to intrinsic unified evolution. diff --git a/tests/test_basis_rotation.py b/tests/test_basis_rotation.py index dc22701e5..c55a49f78 100644 --- a/tests/test_basis_rotation.py +++ b/tests/test_basis_rotation.py @@ -44,10 +44,10 @@ def test_ad_projectors(): ) -def test_iuev_labels(): +def test_intrinsic_unified_evol_labels(): for nf in range(3, 6 + 1): - labels = br.iuev_labels(nf) + labels = br.intrinsic_unified_evol_labels(nf) assert len(labels) == 14 # errors with pytest.raises(IndexError): - br.iuev_labels(7) + br.intrinsic_unified_evol_labels(7) diff --git a/tests/test_ev_op_flavors.py b/tests/test_ev_op_flavors.py index c3f10bcee..6debd5341 100644 --- a/tests/test_ev_op_flavors.py +++ b/tests/test_ev_op_flavors.py @@ -114,13 +114,13 @@ def load(m): np.testing.assert_allclose(m @ minv, np.eye(len(br.evol_basis)), atol=1e-10) -def test_pids_from_iuev(): +def test_pids_from_intrinsic_unified_evol(): for nf in range(3, 6 + 1): - labels = br.iuev_labels(nf) + labels = br.intrinsic_unified_evol_labels(nf) for lab in labels: - n = flavors.pids_from_iuev(lab, nf, True) + n = flavors.pids_from_intrinsic_unified_evol(lab, nf, True) for lab2 in labels: - n2 = flavors.pids_from_iuev(lab2, nf, False) + n2 = flavors.pids_from_intrinsic_unified_evol(lab2, nf, False) if lab == lab2: np.testing.assert_allclose(n @ n2, 1.0) else: @@ -131,6 +131,6 @@ def test_pids_from_iuev(): err_msg=f"{lab} is not orthogonal to {lab2} in nf={nf}", ) with pytest.raises(KeyError): - flavors.pids_from_iuev("V3", 4, True) + flavors.pids_from_intrinsic_unified_evol("V3", 4, True) with pytest.raises(KeyError): - flavors.pids_from_iuev("T0", 7, True) + flavors.pids_from_intrinsic_unified_evol("T0", 7, True) From 0f6e9246b375855ea5e036cad184e1e3d32c8585 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Tue, 15 Feb 2022 11:41:44 +0100 Subject: [PATCH 14/24] Fix FlavorSpace.rst --- doc/source/theory/FlavorSpace.rst | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index be25a504f..d2b9376f9 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -111,15 +111,20 @@ QED :math:`\otimes` QCD Evolution Basis In presence of QED corrections to DGLAP evolution equations, the QCD Evolution basis does not decouple the distributions as it was for the pure QCD evolution. -In this case the QED :math:`\otimes` QCD evolution basis that performs the maximal decoupling is given by: + +Defining the following combinations .. math :: \Sigma_u & = u^+ + c^+ + t^+ \\ \Sigma_d & = d^+ + s^+ + b^+ \\ - \Sigma &= \Sigma_u + \Sigma_d \\ - T_0 &= \Sigma_u - \Sigma_d \\ V_u & = u^- + c^- + t^- \\ V_d & = d^- + s^- + b^- \\ + +we have that in this case the QED :math:`\otimes` QCD evolution basis that performs the maximal decoupling is given by: + +.. math :: + \Sigma &= \Sigma_u + \Sigma_d \\ + T_0 &= \Sigma_u - \Sigma_d \\ V &= V_u + V_d \\ V_0 &= V_u - V_d \\ T_1^u &=u^+ - c^+ \\ @@ -130,7 +135,7 @@ In this case the QED :math:`\otimes` QCD evolution basis that performs the maxim V_2^u &=u^- + c^- - 2t^- \\ V_1^d &=d^- - s^- \\ V_2^d &=d^- + s^- - 2b^- \\ - \mathcal F \sim \mathcal F_{QED\otimes{}QCD} &= \span(\gamma, g, \Sigma, \Delta_\Sigma, V, \Delta_V, T_1^u, T_2^u, T_1^d, T_2^d, V_1^u, V_2^u, V_1^d, V_2^d) + \mathcal F \sim \mathcal F_{QED\otimes{}QCD} &= \span(\gamma, g, \Sigma, \Sigma_0, V, V_0, T_1^u, T_2^u, T_1^d, T_2^d, V_1^u, V_2^u, V_1^d, V_2^d) - :math:`T_1` and :math:`T_2` are just arbitrary names and do not follow any group representation like it was for the :ref:`theory/FlavorSpace:QCD Evolution Basis` From 2c48f3ea8a1f6591d085bf7b74cd944bbc768048 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Tue, 15 Feb 2022 14:54:55 +0100 Subject: [PATCH 15/24] Fix FlavorSpace.rst --- doc/source/theory/FlavorSpace.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index d2b9376f9..49a4da900 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -196,6 +196,7 @@ For :math:`n_f=6` light flavors the intrinsic QED :math:`\otimes` QCD Evolution - the basis transformation from the Flavor Basis is implemented in :meth:`~eko.evolution_operator.flavors.pids_from_intrinsic_evol` - the factors 3/2 in the definition of :math:`V_{0,(5)}` and :math:`T_{0,(5)}` are needed in order to have an orthogonal basis for :math:`n_f=5` + Other Bases ----------- From a68d2b8e5975997e9437479912659b506a2b5238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Thu, 17 Feb 2022 14:08:13 +0100 Subject: [PATCH 16/24] Change QED x QCD into Unified in FlavorSpace.rst --- doc/source/theory/FlavorSpace.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index 49a4da900..b31750c9c 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -105,8 +105,8 @@ where :math:`V_{(3)}` is to be confused with the usual (QCD like) :math:`V_3`. - the photon is just a spectator and does not couple to anyone -QED :math:`\otimes` QCD Evolution Basis ---------------------------------------- +Unified Evolution Basis +----------------------- In presence of QED corrections to DGLAP evolution equations, the QCD Evolution basis does not decouple the distributions @@ -144,8 +144,8 @@ we have that in this case the QED :math:`\otimes` QCD evolution basis that perfo - The valence :math:`V` is just the QCD valence -Intrinsic QED :math:`\otimes` QCD Evolution Basis -------------------------------------------------- +Intrinsic Unified Evolution Basis +--------------------------------- Again, we need the generalization to the presence of intrinsic (static) distributions. As QED can distinguish between up-like and down-like flavors the situation is again slightly From ede4383624d1be237f1b0abe98abaf74be00450d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Fri, 18 Feb 2022 16:36:28 +0100 Subject: [PATCH 17/24] Change names of flavors --- doc/source/theory/FlavorSpace.rst | 23 +++++++++++------------ src/eko/basis_rotation.py | 10 +++++----- src/eko/evolution_operator/flavors.py | 12 ++++++------ 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index b31750c9c..f533841af 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -124,21 +124,20 @@ we have that in this case the QED :math:`\otimes` QCD evolution basis that perfo .. math :: \Sigma &= \Sigma_u + \Sigma_d \\ - T_0 &= \Sigma_u - \Sigma_d \\ + \Sigma_{\Delta} &= \Sigma_u - \Sigma_d \\ V &= V_u + V_d \\ - V_0 &= V_u - V_d \\ - T_1^u &=u^+ - c^+ \\ - T_2^u &=u^+ + c^+ - 2t^+ \\ - T_1^d &=d^+ - s^+ \\ - T_2^d &=d^+ + s^+ - 2b^+ \\ - V_1^u &=u^- - c^- \\ - V_2^u &=u^- + c^- - 2t^- \\ - V_1^d &=d^- - s^- \\ - V_2^d &=d^- + s^- - 2b^- \\ - \mathcal F \sim \mathcal F_{QED\otimes{}QCD} &= \span(\gamma, g, \Sigma, \Sigma_0, V, V_0, T_1^u, T_2^u, T_1^d, T_2^d, V_1^u, V_2^u, V_1^d, V_2^d) + V_{\Delta} &= V_u - V_d \\ + T_3^u &=u^+ - c^+ \\ + T_8^u &=u^+ + c^+ - 2t^+ \\ + T_3^d &=d^+ - s^+ \\ + T_8^d &=d^+ + s^+ - 2b^+ \\ + V_3^u &=u^- - c^- \\ + V_8^u &=u^- + c^- - 2t^- \\ + V_3^d &=d^- - s^- \\ + V_8^d &=d^- + s^- - 2b^- \\ + \mathcal F \sim \mathcal F_{QED\otimes{}QCD} &= \span(\gamma, g, \Sigma, \Sigma__{\Delta}, V, V__{\Delta}, T_3^u, T_8^u, T_3^d, T_8^d, V_3^u, V_8^u, V_3^d, V_8^d) -- :math:`T_1` and :math:`T_2` are just arbitrary names and do not follow any group representation like it was for the :ref:`theory/FlavorSpace:QCD Evolution Basis` - this basis is *not* normalized with respect to the canonical Flavor Basis - The singlet :math:`\Sigma` is just the QCD singlet - The valence :math:`V` is just the QCD valence diff --git a/src/eko/basis_rotation.py b/src/eko/basis_rotation.py index e2d46fc09..0aa256380 100644 --- a/src/eko/basis_rotation.py +++ b/src/eko/basis_rotation.py @@ -192,12 +192,12 @@ def intrinsic_unified_evol_labels(nf): "g", "S", "V", - "T0", - "V0", - "T1d", - "V1d", + "Sdelta", + "Vdelta", + "Td3", + "Vd3", ] - news = ["1u", "2d", "2u"] + news = ["u3", "d8", "u8"] for j in range(nf, 6): q = quark_names[j] labels.extend([f"{q}+", f"{q}-"]) diff --git a/src/eko/evolution_operator/flavors.py b/src/eko/evolution_operator/flavors.py index 4377eb2df..f18acbdfd 100644 --- a/src/eko/evolution_operator/flavors.py +++ b/src/eko/evolution_operator/flavors.py @@ -193,11 +193,11 @@ def pids_from_intrinsic_unified_evol(label, nf, normalize): else: weights = np.array([0.0] * len(br.flavor_basis_pids)) mapping = { - "1d": {1: 1.0, 3: -1.0}, # T1d = d+ - s+ - "2d": {1: 1.0, 3: 1.0, 5: -2.0}, # T2d = d+ + s+ - 2b+ - "1u": {2: 1.0, 4: -1.0}, # T1u = u+ - c+ - "2u": {2: 1.0, 4: 1.0, 6: -2.0}, # T2u = u+ + c+ - 2t+ - "0": { + "d3": {1: 1.0, 3: -1.0}, # T1d = d+ - s+ + "d8": {1: 1.0, 3: 1.0, 5: -2.0}, # T2d = d+ + s+ - 2b+ + "u3": {2: 1.0, 4: -1.0}, # T1u = u+ - c+ + "u8": {2: 1.0, 4: 1.0, 6: -2.0}, # T2u = u+ + c+ - 2t+ + "delta": { 3: {2: 2.0, 1: -1.0, 3: -1.0}, # T0 = 2u+ - d+ -s+ 4: {2: 1.0, 4: 1.0, 1: -1.0, 3: -1.0}, # T0 = u+ + c+ - d+ - s+ 5: { @@ -218,7 +218,7 @@ def pids_from_intrinsic_unified_evol(label, nf, normalize): }, } cur_map = mapping[label[1:]] - if label[1] == "0": + if label[1:] == "delta": cur_map = cur_map[nf] for q, w in cur_map.items(): weights[br.flavor_basis_pids.index(q)] = w From 8827cc7123e8c721c8b7142db574a1e1983428db Mon Sep 17 00:00:00 2001 From: Felix Hekhorn Date: Mon, 21 Feb 2022 11:56:42 +0100 Subject: [PATCH 18/24] Remove explicit eko imports --- src/eko/anomalous_dimensions/lo.py | 2 +- src/eko/beta.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/eko/anomalous_dimensions/lo.py b/src/eko/anomalous_dimensions/lo.py index 0c5e23c50..952ac4839 100644 --- a/src/eko/anomalous_dimensions/lo.py +++ b/src/eko/anomalous_dimensions/lo.py @@ -4,7 +4,7 @@ import numba as nb import numpy as np -from eko import constants +from .. import constants @nb.njit("c16(c16,c16)", cache=True) diff --git a/src/eko/beta.py b/src/eko/beta.py index 8dba687be..3c47d6b32 100644 --- a/src/eko/beta.py +++ b/src/eko/beta.py @@ -7,7 +7,7 @@ import numba as nb -from eko import constants +from . import constants @nb.njit("f8(u1)", cache=True) From f8df49ea04157a7784d6eb163672640c8c6c2faa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Mon, 21 Feb 2022 12:31:49 +0100 Subject: [PATCH 19/24] Change T1,V1,T2,V2,T0,V0 into T3,V3,T8,V8,Sdelta,Vdelta --- doc/source/theory/FlavorSpace.rst | 50 +++++++++++++-------------- src/eko/evolution_operator/flavors.py | 16 ++++----- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index f533841af..6b08c8a8a 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -11,7 +11,7 @@ in the Flavor Space, but often the specific basis described here below is meant. Flavor Basis ------------ -Here we use the raw quark flavors along with the gluon and the photon as they correspond to the +Here we use the raw quark flavors along with the gluon and the photon, as they correspond to the operator in the Lagrange density: .. math :: @@ -46,7 +46,7 @@ QCD Evolution Basis As the gluon is flavor-blind it is handy to solve |DGLAP| not in the flavor basis, but in the QCD Evolution Basis where instead we need to solve a minimal coupled system. -This is the basis in which DGLAP equations are solved considering only QCD corrections. +This is the basis in which DGLAP equations are solved when only QCD corrections are taken into account. The new basis elements can be separated into two major classes: the singlet sector, consisting of the singlet distribution :math:`\Sigma` and the gluon distribution :math:`g`, and the non-singlet sector. The non-singlet sector can be again subdivided into three groups: first the full @@ -93,7 +93,7 @@ For :math:`n_f=3` we define (the other cases are defined analogously): V_{(3)} = u^- + d^- + s^-\\ \mathcal F \sim \mathcal F_{iev,3} &= \span(\gamma, g, \Sigma_{(3)}, V_{(3)}, V_3, V_8, T_3, T_8, c^+, c^-, b^+, b^-, t^+, t^-) -where :math:`V_{(3)}` is to be confused with the usual (QCD like) :math:`V_3`. +where :math:`V_{(3)}` is not to be confused with the usual (QCD like) :math:`V_3`. - for :math:`n_f=6` the Intrinsic QCD Evolution Basis coincides with the QCD Evolution Basis: :math:`\mathcal F_{iev,6} = \mathcal F_{ev}` - this basis is *not* normalized with respect to the canonical Flavor Basis @@ -135,7 +135,7 @@ we have that in this case the QED :math:`\otimes` QCD evolution basis that perfo V_8^u &=u^- + c^- - 2t^- \\ V_3^d &=d^- - s^- \\ V_8^d &=d^- + s^- - 2b^- \\ - \mathcal F \sim \mathcal F_{QED\otimes{}QCD} &= \span(\gamma, g, \Sigma, \Sigma__{\Delta}, V, V__{\Delta}, T_3^u, T_8^u, T_3^d, T_8^d, V_3^u, V_8^u, V_3^d, V_8^d) + \mathcal F \sim \mathcal F_{QED\otimes{}QCD} &= \span(\gamma, g, \Sigma, \Sigma_{\Delta}, V, V_{\Delta}, T_3^u, T_8^u, T_3^d, T_8^d, V_3^u, V_8^u, V_3^d, V_8^d) - this basis is *not* normalized with respect to the canonical Flavor Basis @@ -154,40 +154,40 @@ For :math:`n_f=3` light flavors we find: .. math :: \Sigma_{(3)} &= u^+ + d^+ + s^+\\ - T_{0,(3)} &= 2u^+ - d^+ - s^+ \\ + \Sigma_{\Delta,(3)} &= 2u^+ - d^+ - s^+ \\ V_{(3)} &= u^- + d^- + s^-\\ - V_{0,(3)} &= 2u^- - d^- - s^-\\ - T_1^d &=d^+ - s^+ \\ - V_1^d &=d^- - s^- \\ - \mathcal F \sim \mathcal F_{intrinsic_unified_evol,3} &= \span(\gamma, g, \Sigma_{(3)}, V_{(3)}, V_{0,(3)}, V_1^d, T_{0,(3)}, T_1^d, c^+, c^-, b^+, b^-, t^+, t^-) + V_{\Delta,(3)} &= 2u^- - d^- - s^-\\ + T_3^d &=d^+ - s^+ \\ + V_3^d &=d^- - s^- \\ + \mathcal F \sim \mathcal F_{intrinsic_unified_evol,3} &= \span(\gamma, g, \Sigma_{(3)}, \Sigma_{\Delta,(3)}, V_{(3)}, V_{\Delta,(3)}, T_3^d, V_3^d, c^+, c^-, b^+, b^-, t^+, t^-) For :math:`n_f=4` light flavors we find: .. math :: \Sigma_{(4)} &= u^+ + d^+ + s^+ + c^+\\ - T_{0,(4)} &= u^+ + c^+ - d^+ - s^+\\ + \Sigma_{\Delta,(4)} &= u^+ + c^+ - d^+ - s^+\\ V_{(4)} &= u^- + d^- + s^- + c^-\\ - V_{0,(4)} &= u^- + c^- - d^- - s^-\\ - T_1^u &=u^+ - c^+ \\ - T_1^d &=d^+ - s^+ \\ - V_1^u &=u^- - c^- \\ - V_1^d &=d^- - s^- \\ - \mathcal F \sim \mathcal F_{intrinsic_unified_evol,4} &= \span(\gamma, g, \Sigma_{(4)}, V_{(4)}, V_{0,(4)}, V_1^d, T_{0,(4)}, T_1^d, V_1^u, T_1^u, b^+, b^-, t^+, t^-) + V_{\Delta,(4)} &= u^- + c^- - d^- - s^-\\ + T_3^u &=u^+ - c^+ \\ + T_3^d &=d^+ - s^+ \\ + V_3^u &=u^- - c^- \\ + V_3^d &=d^- - s^- \\ + \mathcal F \sim \mathcal F_{intrinsic_unified_evol,4} &= \span(\gamma, g, \Sigma_{(4)}, \Sigma_{\Delta,(4)}, V_{(4)}, V_{\Delta,(4)}, V_3^d, T_3^d, V_3^u, T_3^u, b^+, b^-, t^+, t^-) For :math:`n_f=5` light flavors we find: .. math :: \Sigma_{(5)} &= u^+ + d^+ + s^+ + c^+ + b^+\\ + \Sigma_{\Delta,(5)} &= \frac{3}{2}u^+ + \frac{3}{2}c^+ - d^+ -s^+ - b^+\\ V_{(5)} &= u^- + d^- + s^- + c^- + b^-\\ - T_{0,(5)} &= \frac{3}{2}u^+ + \frac{3}{2}c^+ - d^+ -s^+ - b^+\\ - V_{0,(5)} &= \frac{3}{2}u^- + \frac{3}{2}c^- - d^- -s^- - b^-\\ - T_1^u &=u^+ - c^+ \\ - T_1^d &=d^+ - s^+ \\ - V_1^u &=u^- - c^- \\ - V_1^d &=d^- - s^- \\ - T_2^d &=d^+ + s^+ - 2b^+ \\ - V_2^d &=d^- + s^- - 2b^- \\ - \mathcal F \sim \mathcal F_{intrinsic_unified_evol,5} &= \span(\gamma, g, \Sigma_{(4)}, V_{(4)}, V_{0,(4)}, V_1^d, T_{0,(4)}, T_1^d, V_1^u, T_1^u, T_2^d, V_2^d, t^+, t^-) + V_{\Delta,(5)} &= \frac{3}{2}u^- + \frac{3}{2}c^- - d^- -s^- - b^-\\ + T_3^u &=u^+ - c^+ \\ + T_3^d &=d^+ - s^+ \\ + V_3^u &=u^- - c^- \\ + V_3^d &=d^- - s^- \\ + T_8^d &=d^+ + s^+ - 2b^+ \\ + V_8^d &=d^- + s^- - 2b^- \\ + \mathcal F \sim \mathcal F_{intrinsic_unified_evol,5} &= \span(\gamma, g, \Sigma_{(4)}, \Sigma_{\Delta,(4)}, V_{(4)}, V_{\Delta,(4)}, V_3^d, T_3^d, V_3^u, T_3^u, T_8^d, V_8^d, t^+, t^-) For :math:`n_f=6` light flavors the intrinsic QED :math:`\otimes` QCD Evolution Basis coincides with the QED :math:`\otimes` QCD Evolution Basis. diff --git a/src/eko/evolution_operator/flavors.py b/src/eko/evolution_operator/flavors.py index f18acbdfd..ed62fe0ab 100644 --- a/src/eko/evolution_operator/flavors.py +++ b/src/eko/evolution_operator/flavors.py @@ -193,20 +193,20 @@ def pids_from_intrinsic_unified_evol(label, nf, normalize): else: weights = np.array([0.0] * len(br.flavor_basis_pids)) mapping = { - "d3": {1: 1.0, 3: -1.0}, # T1d = d+ - s+ - "d8": {1: 1.0, 3: 1.0, 5: -2.0}, # T2d = d+ + s+ - 2b+ - "u3": {2: 1.0, 4: -1.0}, # T1u = u+ - c+ - "u8": {2: 1.0, 4: 1.0, 6: -2.0}, # T2u = u+ + c+ - 2t+ + "d3": {1: 1.0, 3: -1.0}, # T3d = d+ - s+ + "d8": {1: 1.0, 3: 1.0, 5: -2.0}, # T8d = d+ + s+ - 2b+ + "u3": {2: 1.0, 4: -1.0}, # T3u = u+ - c+ + "u8": {2: 1.0, 4: 1.0, 6: -2.0}, # T8u = u+ + c+ - 2t+ "delta": { - 3: {2: 2.0, 1: -1.0, 3: -1.0}, # T0 = 2u+ - d+ -s+ - 4: {2: 1.0, 4: 1.0, 1: -1.0, 3: -1.0}, # T0 = u+ + c+ - d+ - s+ + 3: {2: 2.0, 1: -1.0, 3: -1.0}, # Sdelta = 2u+ - d+ -s+ + 4: {2: 1.0, 4: 1.0, 1: -1.0, 3: -1.0}, # Sdelta = u+ + c+ - d+ - s+ 5: { 2: 3.0 / 2.0, 4: 3.0 / 2.0, 1: -1.0, 3: -1.0, 5: -1.0, - }, # T0 = 3/2u+ + 3/2c+ - d+ - s+ - b+ + }, # Sdelta = 3/2u+ + 3/2c+ - d+ - s+ - b+ 6: { 2: 1.0, 4: 1.0, @@ -214,7 +214,7 @@ def pids_from_intrinsic_unified_evol(label, nf, normalize): 1: -1.0, 3: -1.0, 5: -1.0, - }, # T0 = u+ + c+ + t+ - d+ -s+ - b+ + }, # Sdelta = u+ + c+ + t+ - d+ -s+ - b+ }, } cur_map = mapping[label[1:]] From ab1dd6731013ee88b7b8e041725952a874e37809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Mon, 21 Feb 2022 12:50:58 +0100 Subject: [PATCH 20/24] Fix FlavorSpace.rst --- doc/source/theory/FlavorSpace.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index 6b08c8a8a..fe8a94f73 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -135,7 +135,7 @@ we have that in this case the QED :math:`\otimes` QCD evolution basis that perfo V_8^u &=u^- + c^- - 2t^- \\ V_3^d &=d^- - s^- \\ V_8^d &=d^- + s^- - 2b^- \\ - \mathcal F \sim \mathcal F_{QED\otimes{}QCD} &= \span(\gamma, g, \Sigma, \Sigma_{\Delta}, V, V_{\Delta}, T_3^u, T_8^u, T_3^d, T_8^d, V_3^u, V_8^u, V_3^d, V_8^d) + \mathcal F \sim \mathcal F_{QED\otimes QCD} &= \span(\gamma, g, \Sigma, \Sigma_{\Delta}, V, V_{\Delta}, T_3^u, T_8^u, T_3^d, T_8^d, V_3^u, V_8^u, V_3^d, V_8^d) - this basis is *not* normalized with respect to the canonical Flavor Basis @@ -159,7 +159,7 @@ For :math:`n_f=3` light flavors we find: V_{\Delta,(3)} &= 2u^- - d^- - s^-\\ T_3^d &=d^+ - s^+ \\ V_3^d &=d^- - s^- \\ - \mathcal F \sim \mathcal F_{intrinsic_unified_evol,3} &= \span(\gamma, g, \Sigma_{(3)}, \Sigma_{\Delta,(3)}, V_{(3)}, V_{\Delta,(3)}, T_3^d, V_3^d, c^+, c^-, b^+, b^-, t^+, t^-) + \mathcal F \sim \mathcal F_{QED\otimes QCD,intrinsic,3} &= \span(\gamma, g, \Sigma_{(3)}, \Sigma_{\Delta,(3)}, V_{(3)}, V_{\Delta,(3)}, T_3^d, V_3^d, c^+, c^-, b^+, b^-, t^+, t^-) For :math:`n_f=4` light flavors we find: @@ -172,7 +172,7 @@ For :math:`n_f=4` light flavors we find: T_3^d &=d^+ - s^+ \\ V_3^u &=u^- - c^- \\ V_3^d &=d^- - s^- \\ - \mathcal F \sim \mathcal F_{intrinsic_unified_evol,4} &= \span(\gamma, g, \Sigma_{(4)}, \Sigma_{\Delta,(4)}, V_{(4)}, V_{\Delta,(4)}, V_3^d, T_3^d, V_3^u, T_3^u, b^+, b^-, t^+, t^-) + \mathcal F \sim \mathcal F_{QED\otimes QCD,intrinsic,4} &= \span(\gamma, g, \Sigma_{(4)}, \Sigma_{\Delta,(4)}, V_{(4)}, V_{\Delta,(4)}, V_3^d, T_3^d, V_3^u, T_3^u, b^+, b^-, t^+, t^-) For :math:`n_f=5` light flavors we find: @@ -187,7 +187,7 @@ For :math:`n_f=5` light flavors we find: V_3^d &=d^- - s^- \\ T_8^d &=d^+ + s^+ - 2b^+ \\ V_8^d &=d^- + s^- - 2b^- \\ - \mathcal F \sim \mathcal F_{intrinsic_unified_evol,5} &= \span(\gamma, g, \Sigma_{(4)}, \Sigma_{\Delta,(4)}, V_{(4)}, V_{\Delta,(4)}, V_3^d, T_3^d, V_3^u, T_3^u, T_8^d, V_8^d, t^+, t^-) + \mathcal F \sim \mathcal F_{QED\otimes QCD,intrinsic,5} &= \span(\gamma, g, \Sigma_{(4)}, \Sigma_{\Delta,(4)}, V_{(4)}, V_{\Delta,(4)}, V_3^d, T_3^d, V_3^u, T_3^u, T_8^d, V_8^d, t^+, t^-) For :math:`n_f=6` light flavors the intrinsic QED :math:`\otimes` QCD Evolution Basis coincides with the QED :math:`\otimes` QCD Evolution Basis. From deeed969807866acccfafc28d2c7f440bf74b878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Tue, 22 Feb 2022 16:07:30 +0100 Subject: [PATCH 21/24] Add QCD and QED abbreviations --- doc/source/shared/abbreviations.rst | 6 ++++++ doc/source/theory/FlavorSpace.rst | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/source/shared/abbreviations.rst b/doc/source/shared/abbreviations.rst index 1aff4e212..224783fa9 100644 --- a/doc/source/shared/abbreviations.rst +++ b/doc/source/shared/abbreviations.rst @@ -49,6 +49,12 @@ .. |RGE| replace:: :abbr:`RGE (renormalization group equation)` +.. |QCD| replace:: + :abbr:`Quantum Chromodynamics` + +.. |QED| replace:: + :abbr:`Quantum Elecrodynamics` + .. external .. |yadism| replace:: diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index fe8a94f73..0d89eef6c 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -45,7 +45,7 @@ QCD Evolution Basis ------------------- As the gluon is flavor-blind it is handy to solve |DGLAP| not in the flavor basis, -but in the QCD Evolution Basis where instead we need to solve a minimal coupled system. +but in the |QCD| Evolution Basis where instead we need to solve a minimal coupled system. This is the basis in which DGLAP equations are solved when only QCD corrections are taken into account. The new basis elements can be separated into two major classes: the singlet sector, consisting of the singlet distribution :math:`\Sigma` and the gluon distribution :math:`g`, and the non-singlet From 185b3be1e90e12dde6bff245023b885ba2160da9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Wed, 23 Feb 2022 17:43:01 +0100 Subject: [PATCH 22/24] Add abbreviations in FlavorSpace.rst --- doc/source/shared/abbreviations.rst | 4 ++-- doc/source/theory/FlavorSpace.rst | 24 ++++++++++++------------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/doc/source/shared/abbreviations.rst b/doc/source/shared/abbreviations.rst index 224783fa9..acd865b3c 100644 --- a/doc/source/shared/abbreviations.rst +++ b/doc/source/shared/abbreviations.rst @@ -50,10 +50,10 @@ :abbr:`RGE (renormalization group equation)` .. |QCD| replace:: - :abbr:`Quantum Chromodynamics` + :abbr:`QCD (Quantum Chromodynamics)` .. |QED| replace:: - :abbr:`Quantum Elecrodynamics` + :abbr:`QED (Quantum Elecrodynamics)` .. external diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index 0d89eef6c..2f8010f5b 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -46,7 +46,7 @@ QCD Evolution Basis As the gluon is flavor-blind it is handy to solve |DGLAP| not in the flavor basis, but in the |QCD| Evolution Basis where instead we need to solve a minimal coupled system. -This is the basis in which DGLAP equations are solved when only QCD corrections are taken into account. +This is the basis in which DGLAP equations are solved when only |QCD| corrections are taken into account. The new basis elements can be separated into two major classes: the singlet sector, consisting of the singlet distribution :math:`\Sigma` and the gluon distribution :math:`g`, and the non-singlet sector. The non-singlet sector can be again subdivided into three groups: first the full @@ -81,11 +81,11 @@ The mapping between the Evolution Basis and the +/- Basis is given by Intrinsic QCD Evolution Bases ----------------------------- -However, the QCD Evolution Basis is not yet the most decoupled basis if we consider intrinsic evolution. +However, the |QCD| Evolution Basis is not yet the most decoupled basis if we consider intrinsic evolution. The intrinsic distributions do *not* participate in the |DGLAP| equation but instead evolve with a unity operator: this makes, e.g. :math:`T_{15}` a composite object in a evolution range below the charm mass. Instead, we will keep the non participating distributions here in their :math:`q^\pm` representation. -The Intrinsic QCD Evolution Bases will explicitly depend on the number of light flavors :math:`n_f`. +The Intrinsic |QCD| Evolution Bases will explicitly depend on the number of light flavors :math:`n_f`. For :math:`n_f=3` we define (the other cases are defined analogously): .. math :: @@ -93,9 +93,9 @@ For :math:`n_f=3` we define (the other cases are defined analogously): V_{(3)} = u^- + d^- + s^-\\ \mathcal F \sim \mathcal F_{iev,3} &= \span(\gamma, g, \Sigma_{(3)}, V_{(3)}, V_3, V_8, T_3, T_8, c^+, c^-, b^+, b^-, t^+, t^-) -where :math:`V_{(3)}` is not to be confused with the usual (QCD like) :math:`V_3`. +where :math:`V_{(3)}` is not to be confused with the usual (|QCD| like) :math:`V_3`. -- for :math:`n_f=6` the Intrinsic QCD Evolution Basis coincides with the QCD Evolution Basis: :math:`\mathcal F_{iev,6} = \mathcal F_{ev}` +- for :math:`n_f=6` the Intrinsic |QCD| Evolution Basis coincides with the |QCD| Evolution Basis: :math:`\mathcal F_{iev,6} = \mathcal F_{ev}` - this basis is *not* normalized with respect to the canonical Flavor Basis - the basis transformation from the Flavor Basis is implemented in :meth:`~eko.evolution_operator.flavors.pids_from_intrinsic_evol` @@ -108,9 +108,9 @@ where :math:`V_{(3)}` is not to be confused with the usual (QCD like) :math:`V_3 Unified Evolution Basis ----------------------- -In presence of QED corrections to DGLAP evolution equations, -the QCD Evolution basis does not decouple the distributions -as it was for the pure QCD evolution. +In presence of |QED| corrections to DGLAP evolution equations, +the |QCD| Evolution basis does not decouple the distributions +as it was for the pure |QCD| evolution. Defining the following combinations @@ -139,15 +139,15 @@ we have that in this case the QED :math:`\otimes` QCD evolution basis that perfo - this basis is *not* normalized with respect to the canonical Flavor Basis -- The singlet :math:`\Sigma` is just the QCD singlet -- The valence :math:`V` is just the QCD valence +- The singlet :math:`\Sigma` is just the |QCD| singlet +- The valence :math:`V` is just the |QCD| valence Intrinsic Unified Evolution Basis --------------------------------- Again, we need the generalization to the presence of intrinsic (static) distributions. -As QED can distinguish between up-like and down-like flavors the situation is again slightly +As |QED| can distinguish between up-like and down-like flavors the situation is again slightly more involved. For :math:`n_f=3` light flavors we find: @@ -236,7 +236,7 @@ Operator Anomalous Dimension Basis Operator Intrinsic QCD Evolution Basis ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- here we mean :ref:`theory/FlavorSpace:Intrinsic QCD Evolution Bases` both in the input and the output space +- here we mean :ref:`theory/FlavorSpace:Intrinsic |QCD| Evolution Bases` both in the input and the output space - this basis does **not** coincide with the :ref:`theory/FlavorSpace:Operator Anomalous Dimension Basis` as the decision on which operator of that basis is used is a non-trivial decision - see :doc:`Matching` - this basis has :math:`2n_f+ 3 = 15` elements From c084887d30a679e076e5abbce93407ae46b168b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Thu, 24 Feb 2022 16:47:06 +0100 Subject: [PATCH 23/24] Fix abbreviation and start QED AD documentation --- doc/source/refs.bib | 29 +++++++++++++++++++++++++++++ doc/source/shared/abbreviations.rst | 2 +- doc/source/theory/FlavorSpace.rst | 18 +++++++++--------- doc/source/theory/pQCD.rst | 22 ++++++++++++++++++++-- 4 files changed, 59 insertions(+), 12 deletions(-) diff --git a/doc/source/refs.bib b/doc/source/refs.bib index 30bebb630..a56be5fbb 100644 --- a/doc/source/refs.bib +++ b/doc/source/refs.bib @@ -446,3 +446,32 @@ @article{Liu:2015fxa pages = "330--334", year = "2015" } + +@article{deFlorian:2015ujt, + author = "de Florian, Daniel and Sborlini, Germ\'an F. R. and Rodrigo, Germ\'an", + title = "{QED corrections to the Altarelli\textendash{}Parisi splitting functions}", + eprint = "1512.00612", + archivePrefix = "arXiv", + primaryClass = "hep-ph", + reportNumber = "ICAS-03-15, IFIC-15-81", + doi = "10.1140/epjc/s10052-016-4131-8", + journal = "Eur. Phys. J. C", + volume = "76", + number = "5", + pages = "282", + year = "2016" +} + +@article{deFlorian:2016gvk, + author = "de Florian, Daniel and Sborlini, Germ\'an F. R. and Rodrigo, Germ\'an", + title = "{Two-loop QED corrections to the Altarelli-Parisi splitting functions}", + eprint = "1606.02887", + archivePrefix = "arXiv", + primaryClass = "hep-ph", + reportNumber = "ICAS-09-16, IFIC-15-88", + doi = "10.1007/JHEP10(2016)056", + journal = "JHEP", + volume = "10", + pages = "056", + year = "2016" +} diff --git a/doc/source/shared/abbreviations.rst b/doc/source/shared/abbreviations.rst index acd865b3c..e7742731e 100644 --- a/doc/source/shared/abbreviations.rst +++ b/doc/source/shared/abbreviations.rst @@ -53,7 +53,7 @@ :abbr:`QCD (Quantum Chromodynamics)` .. |QED| replace:: - :abbr:`QED (Quantum Elecrodynamics)` + :abbr:`QED (Quantum Electrodynamics)` .. external diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index 2f8010f5b..01733c77b 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -46,7 +46,7 @@ QCD Evolution Basis As the gluon is flavor-blind it is handy to solve |DGLAP| not in the flavor basis, but in the |QCD| Evolution Basis where instead we need to solve a minimal coupled system. -This is the basis in which DGLAP equations are solved when only |QCD| corrections are taken into account. +This is the basis in which |DGLAP| equations are solved when only |QCD| corrections are taken into account. The new basis elements can be separated into two major classes: the singlet sector, consisting of the singlet distribution :math:`\Sigma` and the gluon distribution :math:`g`, and the non-singlet sector. The non-singlet sector can be again subdivided into three groups: first the full @@ -90,7 +90,7 @@ For :math:`n_f=3` we define (the other cases are defined analogously): .. math :: \Sigma_{(3)} &= u^+ + d^+ +s^+\\ - V_{(3)} = u^- + d^- + s^-\\ + V_{(3)} &= u^- + d^- + s^-\\ \mathcal F \sim \mathcal F_{iev,3} &= \span(\gamma, g, \Sigma_{(3)}, V_{(3)}, V_3, V_8, T_3, T_8, c^+, c^-, b^+, b^-, t^+, t^-) where :math:`V_{(3)}` is not to be confused with the usual (|QCD| like) :math:`V_3`. @@ -108,7 +108,7 @@ where :math:`V_{(3)}` is not to be confused with the usual (|QCD| like) :math:`V Unified Evolution Basis ----------------------- -In presence of |QED| corrections to DGLAP evolution equations, +In presence of |QED| corrections to |DGLAP| evolution equations, the |QCD| Evolution basis does not decouple the distributions as it was for the pure |QCD| evolution. @@ -135,7 +135,7 @@ we have that in this case the QED :math:`\otimes` QCD evolution basis that perfo V_8^u &=u^- + c^- - 2t^- \\ V_3^d &=d^- - s^- \\ V_8^d &=d^- + s^- - 2b^- \\ - \mathcal F \sim \mathcal F_{QED\otimes QCD} &= \span(\gamma, g, \Sigma, \Sigma_{\Delta}, V, V_{\Delta}, T_3^u, T_8^u, T_3^d, T_8^d, V_3^u, V_8^u, V_3^d, V_8^d) + \mathcal F \sim \mathcal F_{uni,ev} &= \span(\gamma, g, \Sigma, \Sigma_{\Delta}, V, V_{\Delta}, T_3^u, T_8^u, T_3^d, T_8^d, V_3^u, V_8^u, V_3^d, V_8^d) - this basis is *not* normalized with respect to the canonical Flavor Basis @@ -159,7 +159,7 @@ For :math:`n_f=3` light flavors we find: V_{\Delta,(3)} &= 2u^- - d^- - s^-\\ T_3^d &=d^+ - s^+ \\ V_3^d &=d^- - s^- \\ - \mathcal F \sim \mathcal F_{QED\otimes QCD,intrinsic,3} &= \span(\gamma, g, \Sigma_{(3)}, \Sigma_{\Delta,(3)}, V_{(3)}, V_{\Delta,(3)}, T_3^d, V_3^d, c^+, c^-, b^+, b^-, t^+, t^-) + \mathcal F \sim \mathcal F_{uni,iev,3} &= \span(\gamma, g, \Sigma_{(3)}, \Sigma_{\Delta,(3)}, V_{(3)}, V_{\Delta,(3)}, T_3^d, V_3^d, c^+, c^-, b^+, b^-, t^+, t^-) For :math:`n_f=4` light flavors we find: @@ -172,7 +172,7 @@ For :math:`n_f=4` light flavors we find: T_3^d &=d^+ - s^+ \\ V_3^u &=u^- - c^- \\ V_3^d &=d^- - s^- \\ - \mathcal F \sim \mathcal F_{QED\otimes QCD,intrinsic,4} &= \span(\gamma, g, \Sigma_{(4)}, \Sigma_{\Delta,(4)}, V_{(4)}, V_{\Delta,(4)}, V_3^d, T_3^d, V_3^u, T_3^u, b^+, b^-, t^+, t^-) + \mathcal F \sim \mathcal F_{uni,iev,4} &= \span(\gamma, g, \Sigma_{(4)}, \Sigma_{\Delta,(4)}, V_{(4)}, V_{\Delta,(4)}, V_3^d, T_3^d, V_3^u, T_3^u, b^+, b^-, t^+, t^-) For :math:`n_f=5` light flavors we find: @@ -187,9 +187,9 @@ For :math:`n_f=5` light flavors we find: V_3^d &=d^- - s^- \\ T_8^d &=d^+ + s^+ - 2b^+ \\ V_8^d &=d^- + s^- - 2b^- \\ - \mathcal F \sim \mathcal F_{QED\otimes QCD,intrinsic,5} &= \span(\gamma, g, \Sigma_{(4)}, \Sigma_{\Delta,(4)}, V_{(4)}, V_{\Delta,(4)}, V_3^d, T_3^d, V_3^u, T_3^u, T_8^d, V_8^d, t^+, t^-) + \mathcal F \sim \mathcal F_{uni,iev,5} &= \span(\gamma, g, \Sigma_{(4)}, \Sigma_{\Delta,(4)}, V_{(4)}, V_{\Delta,(4)}, V_3^d, T_3^d, V_3^u, T_3^u, T_8^d, V_8^d, t^+, t^-) -For :math:`n_f=6` light flavors the intrinsic QED :math:`\otimes` QCD Evolution Basis coincides with the QED :math:`\otimes` QCD Evolution Basis. +For :math:`n_f=6` light flavors the Intrinsic Unified Evolution Basis coincides with the :ref:`theory/FlavorSpace:Unified Evolution Basis`. - this basis is *not* normalized with respect to the canonical Flavor Basis - the basis transformation from the Flavor Basis is implemented in @@ -236,7 +236,7 @@ Operator Anomalous Dimension Basis Operator Intrinsic QCD Evolution Basis ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- here we mean :ref:`theory/FlavorSpace:Intrinsic |QCD| Evolution Bases` both in the input and the output space +- here we mean :ref:`theory/FlavorSpace:Intrinsic QCD Evolution Bases` both in the input and the output space - this basis does **not** coincide with the :ref:`theory/FlavorSpace:Operator Anomalous Dimension Basis` as the decision on which operator of that basis is used is a non-trivial decision - see :doc:`Matching` - this basis has :math:`2n_f+ 3 = 15` elements diff --git a/doc/source/theory/pQCD.rst b/doc/source/theory/pQCD.rst index b0c4078fb..3a36b84cd 100644 --- a/doc/source/theory/pQCD.rst +++ b/doc/source/theory/pQCD.rst @@ -47,10 +47,10 @@ In particular, the matching involved in the change from :math:`n_f` to :math:`n_ is presented in equation 3.1 of :cite:`Schroder:2005hy` for |MSbar| masses, while the same expression for POLE masses is reported in Appendix A. -Splitting Functions +QCD Splitting Functions ------------------- -The Altarelli-Parisi splitting kernels can be expanded in powers of the strong +In the case in which only the |QCD| corrections are considered, the Altarelli-Parisi splitting kernels can be expanded in powers of the strong coupling :math:`a_s(\mu^2)` and are given by :cite:`Moch:2004pa,Vogt:2004mw` .. math :: @@ -59,6 +59,24 @@ coupling :math:`a_s(\mu^2)` and are given by :cite:`Moch:2004pa,Vogt:2004mw` Note the additional minus in the definition of :math:`\gamma`. +Unified Splitting Functions +--------------------------- + +When the |QED| corrections are taken into account, |DGLAP| equation take the form + +.. math :: + \mathbf{P}=\mathbf{\tilde{P}}+\mathbf{\bar{P}} + +where :math:`\mathbf{\tilde{P}}` are the usual |QCD| splitting kernels defined in the previous section, +while :math:`\mathbf{\bar{P}}` are given by + +.. math :: + \mathbf{\bar{P}} = \alpha \mathbf{P}^{(0,1)} + \alpha_s \alpha \mathbf{P}^{(1,1)} + + \alpha^2 \mathbf{P}^{(0,2)} + \dots + +The expression of the pure |QED| and of the mixed |QED| :math:`\otimes` |QCD| splitting kernels are given in +:cite:`deFlorian:2015ujt,deFlorian:2016gvk` + Scale Variations ---------------- From 4ebabacb0f3a07a3000899e72e581893b5c9d345 Mon Sep 17 00:00:00 2001 From: giacomomagni Date: Fri, 25 Feb 2022 10:46:24 +0100 Subject: [PATCH 24/24] fix some abbreviations left --- doc/source/development/Benchmarks.rst | 2 +- doc/source/theory/FlavorSpace.rst | 2 +- doc/source/theory/Matching.rst | 2 +- doc/source/theory/pQCD.rst | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/source/development/Benchmarks.rst b/doc/source/development/Benchmarks.rst index bde9f1cce..758bae648 100644 --- a/doc/source/development/Benchmarks.rst +++ b/doc/source/development/Benchmarks.rst @@ -58,7 +58,7 @@ APFEL (and FTDY as well). It has been used by the NNPDF collaboration up to NNPDF4.0 -|APFEL| solves |DGLAP| numerically in x-space up to |NNLO|. QED evolution is also available. +|APFEL| solves |DGLAP| numerically in x-space up to |NNLO|. |QED| evolution is also available. The programs provides 3 different strategies, and in various theory setups (|FNS|, SV, IC ) as shown in the table. As |Eko|, |APFEL| can be interfaced with |lhapdf|. diff --git a/doc/source/theory/FlavorSpace.rst b/doc/source/theory/FlavorSpace.rst index 01733c77b..2baf94f5d 100644 --- a/doc/source/theory/FlavorSpace.rst +++ b/doc/source/theory/FlavorSpace.rst @@ -120,7 +120,7 @@ Defining the following combinations V_u & = u^- + c^- + t^- \\ V_d & = d^- + s^- + b^- \\ -we have that in this case the QED :math:`\otimes` QCD evolution basis that performs the maximal decoupling is given by: +we have that in this case the |QED| :math:`\otimes` |QCD| evolution basis that performs the maximal decoupling is given by: .. math :: \Sigma &= \Sigma_u + \Sigma_d \\ diff --git a/doc/source/theory/Matching.rst b/doc/source/theory/Matching.rst index 3be931050..b2e2046a1 100644 --- a/doc/source/theory/Matching.rst +++ b/doc/source/theory/Matching.rst @@ -20,7 +20,7 @@ in the :ref:`Intrinsic Evolution Basis ` :math:`\mathbf{R}^{(n_f)}` to fit the new :ref:`Intrinsic Evolution Basis `. We can then denote the solution as diff --git a/doc/source/theory/pQCD.rst b/doc/source/theory/pQCD.rst index 3a36b84cd..93707915a 100644 --- a/doc/source/theory/pQCD.rst +++ b/doc/source/theory/pQCD.rst @@ -6,7 +6,7 @@ Strong Coupling Implementation: :class:`~eko.strong_coupling.StrongCoupling`. -We use perturbative QCD with the running coupling +We use perturbative |QCD| with the running coupling :math:`a_s(\mu_R^2) = \alpha_s(\mu_R^2)/(4\pi)` given at 5-loop by :cite:`Herzog:2017ohr` :cite:`Luthe:2016ima` :cite:`Baikov:2016tgj` @@ -48,7 +48,7 @@ is presented in equation 3.1 of :cite:`Schroder:2005hy` for |MSbar| masses, whil same expression for POLE masses is reported in Appendix A. QCD Splitting Functions -------------------- +----------------------- In the case in which only the |QCD| corrections are considered, the Altarelli-Parisi splitting kernels can be expanded in powers of the strong coupling :math:`a_s(\mu^2)` and are given by :cite:`Moch:2004pa,Vogt:2004mw` @@ -101,7 +101,7 @@ corresponds to schemes A and B in :cite:`AbdulKhalek:2019ihb`. Heavy Quark Masses ------------------ -In QCD also the heavy quark masses (:math:`m_{c}, m_{b}, m_{t}`) follow a |RGE| +In |QCD| also the heavy quark masses (:math:`m_{c}, m_{b}, m_{t}`) follow a |RGE| and their values depend on the energy scale at which the quark is probed. Masses do not play any role in a single flavour patch, but are important in |VFNS| when more flavour schemes need to be joined (see :doc:`matching @@ -162,7 +162,7 @@ In doing so EKO takes advantage of the monotony of the |RGE| solution Now, being able to evaluate :math:`a_s(\mu_{h,0}^2)`, there are two ways of solving the previous integral and finally compute the evolved :math:`m_{\overline{MS},h}`. In fact, the function :math:`\gamma_m(a_s)` is the -anomalous QCD mass dimension and, as the :math:`\beta` function, it can be evaluated +anomalous |QCD| mass dimension and, as the :math:`\beta` function, it can be evaluated perturbatively in :math:`a_s` up to :math:`\mathcal{O}(a_s^4)`: .. math ::