TensorWaves 0.4.1
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)
🖱️ Developer Experience
Increased test coverage (#393)
- Wrote some additional tests for the
tensorwaves.function
module TYPE_CHECKING
is now ignored in test coverage