-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Numerator Evaluation with counterterms #30
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
… numerator is still 10x slower than cff
Somehow cff serialization was shifting the cursor, and would specifically affect numerator deserialization..
… treatment and prefactor
…on missing) to 0.12.1
…ad of 3L 6 photons amplitude, use the 1L one, both euclidean and physical. Add new option '--max-runtime' to pytest.
…plied *or* if no time is recorded yet. Access to cache is threadsafe too now.
…d add sleep 0.1 to drawing makefile for slow filesystems.
… adding missing data files. Automatically add gcc_s linking when on mac.
…o ignore hhgghh by default as it is too heavy for the CI.
…nd updated test times to include fixtures.
GraDje13
approved these changes
Oct 8, 2024
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR brings a number of upgrades to gammaloop.
These changes also forced some reformatting of the codebase, namely:
BareGraph
which includes all constant data and encode the graph structure. This should not be mutated after deserialization. If one needs to add information dependent on the graph structure it should happen when deserializing.DerivedData
which is associated data that gets populated later on, namely CFF and numeratorSerializableAtom
also can be used for expression serialization however this serializes the state each time so shouldn't be the defaultDetails
Numerator
This PR contains the ability to evaluate the numerator associated to a graph through application of Feynman rules encoded in a UFO format. For amplitudes the open lorentz and spinor indices are saturated with polarizations. The numerical value of these (lorentz or bispinor) vectors is computed from the external momenta using the conventions of HELAS. This also means that we had to use a transposed version of the weyl gamma matrices for things to match. The polarizations naturally depend on user defined helicities, that are provided in the same way as for external momenta.
Alternatively, a global numerator can be provided:
ExportSettings.numerator_settings.global_numerator: Option<String>
It can be any string that can be parsed by symbolica and use spenso's tensor format.
Additionally, a global prefactor
:Option<GlobalPrefactor>
(also in NumeratorSettings) can be provided to saturate all open indices, namely the color indices. This prefactor is split into two: the spin/lorentz prefactor and the color prefactor. Both can be sums of tensors with matching indices.The obtained expression (global x prefactor or local x prefactor) is stored in the struct
Numerator<AppliedFeynmanRules>
orNumerator<Global>
. Thus the numerator struct is compile time stateful, out of order operations literally cannot compile.This object can then be simplified in color algebra using fierz identities turning into
Numerator<ColorSimplified>
. Then it can either be turned into dot products using gamma algebraNumerator<GammaSimplified>
, or concretized using spenso:Numerator<Network>
. This network version supports showing the network graph using spenso's rich graph output for tensor networks.From there both versions of the numerator are turned into evaluators by calling
.contract()
turning them intoNumerator<Contracted>
. This will be a scalar in the gamma simplified case, but could be a tensor with open indices in the spenso concretized version.This is then turned into an
Numerator<Evaluators>
using.generate_evaluators(..)
. This turns the scalar or tensor expression into an object that can be evaluated (implements the evaluate trait) for a single emr set, or for all the cff orientations at once. The backend evaluators are either linearized evaluators or compiled ones as set in theExportSettings.numerator_settings.eval_settings
:A single evaluator will not optimize all orientations at all, and thus when asking for all cff orientations, will get called once per orientation. A joint evaluator is optimized as a whole, across all orientations. The iterative evaluator is for when joint optimizing is unfeasable. This reuses the horner form of the initial orientation.