Skip to content

TensorWaves 0.4.1

Compare
Choose a tag to compare
@release-drafter release-drafter released this 07 Jan 17:18
· 111 commits to main since this release
75a26e2

See all documentation for this version here.

💡 New features

Implemented create_cached_function() (#397)

Closes #358

Expression tree optimizations sketched here have been bundled in a new function create_cached_function(). A usage notebook can be previewed here.

⚠️ Interface

TensorFlow has become an optional dependency (#394)

All computational backends are now optional dependencies (apart from NumPy). So for instance, to install TensorWaves with JAX, run:

pip install tensorwaves[jax]

To do amplitude analysis, install with:

pip install tensorwaves[jax,pwa]

🐛 Bug fixes

Progress bar of domain generator is hidden in IntensityDistributionGenerator (#396)

Closes #395

import ampform
import qrules
from ampform.dynamics.builder import create_relativistic_breit_wigner_with_ff
from tensorwaves.data import (
    IntensityDistributionGenerator,
    TFPhaseSpaceGenerator,
    TFUniformRealNumberGenerator,
)
from tensorwaves.data.transform import SympyDataTransformer
from tensorwaves.function.sympy import create_parametrized_function

reaction = qrules.generate_transitions(
    initial_state="J/psi(1S)",
    final_state=["gamma", "pi0", "pi0"],
    allowed_intermediate_particles=["f(0)"],
    allowed_interaction_types=["strong", "EM"],
)

builder = ampform.get_builder(reaction)
resonances = reaction.get_intermediate_particles()
for p in resonances:
    builder.set_dynamics(p.name, create_relativistic_breit_wigner_with_ff)
model = builder.formulate()

intensity = create_parametrized_function(
    model.expression.doit(),
    parameters=model.parameter_defaults,
    backend="jax",
)
helicity_transformer = SympyDataTransformer.from_sympy(
    model.kinematic_variables, backend="jax"
)

phsp_generator = TFPhaseSpaceGenerator(
    initial_state_mass=reaction.initial_state[-1].mass,
    final_state_masses={i: p.mass for i, p in reaction.final_state.items()},
)
data_generator = IntensityDistributionGenerator(
    function=intensity,
    domain_generator=phsp_generator,
    domain_transformer=helicity_transformer,
)
rng = TFUniformRealNumberGenerator(seed=0)
phsp_momenta = phsp_generator.generate(1_000_000, rng)
data_momenta = data_generator.generate(100_000, rng)

image

🖱️ Developer Experience

Increased test coverage (#393)
  • Wrote some additional tests for the tensorwaves.function module
  • TYPE_CHECKING is now ignored in test coverage