tensorwaves

Python fitter package for multiple computational back-ends

APACHE-2.0 License

Downloads
1K
Stars
10
Committers
6

Bot releases are hidden (Show)

tensorwaves - TensorWaves 0.2.9

Published by redeboer over 2 years ago

See all documentation for this version here.

🔨 Internal maintenance

  • TensorWaves v0.2.9 can be installed with TensorFlow v2.6 and higher versions of phasespace (#447)
tensorwaves - TensorWaves 0.3.7

Published by redeboer almost 3 years ago

See all documentation for this version here.

💡 New features

CSVSummary was writing "estimator_type" incorrectly (it was writing the optimizer type). This PR fixes that and adds the optimizer type as an additional entry, also to YAMLSummary.

See cse argument in sympy.lambdify(). This fixes https://github.com/ComPWA/tensorwaves/pull/345#commitcomment-61398587.

Note that lambdified source code becomes significantly smaller in larger expressions. Finding common sub-expressions has a small hit in performance when lambdifying, but in larger expressions, this is overcome by the fact that the output source code is smaller.

⚠️ Interface

Extracted all SymPy functionality under tensorwaves.model into a separate sub-module tensorwaves.model.sympy.

Closes #280

This means that doit() has to be called on the expression first.

🐛 Bug fixes

CSVSummary was writing "estimator_type" incorrectly (it was writing the optimizer type). This PR fixes that and adds the optimizer type as an additional entry, also to YAMLSummary.

JAX and TensorFlow printing is forwarded to the NumPy printer, but with jax.numpy and tensorflow.experimental.numpy as Printer._module respectively.

Other improvements:

  • Extended tests for find_function and wrote a test for lambdifying AmpForm's ComplexSqrt
  • Allow getting tensorflow.Tensor with find_function
  • Moved _backend module to function, because function is most related to back-ends.

🔨 Internal maintenance

Closes #322

The role of _backend_lambdify and _sympy_lambdify is now swapped:

  • _backend_lambdify is now purely a wrapper around sympy.lambdify.
  • _sympy_lambdify offers a switch between _backend_lambdify and optimized_lambdify.

These functions will change further in #292, but this is PR focuses only on the problem describe din #322.

All tests that require AmpForm have been seperated from proper unit tests (that require no additional dependencies). The folder structure under tests is now:

tests
├── integration
└── unit

Additional improvements:

  • Fixtures for the AmpForm tests have been parametrized:
    • qrules.ReactionInfo is parametrized with the canonica-helicity and helicity formalism.
    • SympyModel is constructed with and without max_complexity argument in the constructor, so that optimized_lambdify is tested as well.
  • Improved error message of LambdifiedFunction.update_parameters: over-defined parameters were computed incorrectly. In addition, the error message now prints the expected parameters.
  • Callbacks can now take pathlib.Path (previously only str). This makes it possible to convert the output_dir fixture into a Path as well.

#344 created a module tensorwaves.model.backend with the intention to collect functions that handle back-ends. This PR moves _find_function_in_backend (which was under tensorwaves.estimator) there as well, moves the module to the top, and hides it altogether, as these functions are implementation details.

Additional fixes:

  • The faster-lambdify notebook was failing due to the interface change introduced by #348. This was not noticed, because the %%time statement in the cell makes the error code of that cell return 'success'. The error has been fixed and a hidden test cell has been added to prevent such failures in the future.
  • optimized_lambdify now directly calls _backend_lambdify is max_complexity is higher than the number of nodes in the expression.

Integration tests have become unstable since #349, see e.g. https://github.com/ComPWA/tensorwaves/actions/runs/1504632721, because the callback output is written to the same file when using optimized_lambdify / _backend_lambdify.

Closes #135

Adds a test under the tests/unit folder that fits a small model with all back-ends and optimizers plus a unit test for generate_data. This also helped fishing out some bugs (see commit history).

Other improvements:

  • Import optimizers directly from the tensorwaves.optimizer module, e.g.:
      from tensorwaves.optimizer import Minuit2
    
    instead of
      from tensorwaves.optimizer.minuit import Minuit2
    
  • CSVSummary writes estimator value as float (was complex by mistake)
  • Latest function call number is also stored in Loadable callbacks.
  • Scipy now works with TF

Import expensive modules inline to speed up importing tensorwaves. This makes import tensorwaves (and collecting tests) about 8x as fast. Profiling done with tuna as follows (see stackoverflow):

python3 -X importtime -c "import tensorwaves" 2> tw.log && tuna tw.log

Previously, if no callback was specified in the optimizer constructor, an empty CallbackList would be created and on_optimize_end etc were always called. This is (theoretically) slower.

Some other improvements:

📝 Documentation

Added links to the 'fit result' objects in the iminuit and SciPy APIs.

🖱️ Developer Experience

Fix-up to #349

Writing with a callback in a pytest fixture and then loading it back in a test led to instable CI. This PR should fix that.

Switch from pytest-notebook to nbmake. Now it's again possible to run specific notebooks from the terminal with e.g.:

pytest --nbmake docs/usage/basics.ipynb

Other small fixes:

  • Avoid fast_lambdify() in Jupyter notebooks to speed up docs workflow.
  • Cast to tuple in ParametrizedBackendFunction.

Reorganise GitHub Action workflow for pytest. Extracted from #366 in order to identify potential performance issues. Notebooks slow after the changes introduced in #366, which may be caused by the changes to the callbacks.

Other changes;

  • Treat warnings raised under pytest as errors.
  • Renamed tox job for testing notebooks to nb.

Should speed up pre-commit job.

Import expensive modules in the tests inline so that pytest --collect-only is faster.

tensorwaves - TensorWaves 0.1.0-alpha0

Published by spflueger about 4 years ago

See all documentation for this version here.

New features

Interface changes

  • Now the decay dynamics are by default RelativisticBreitWigner. This change is triggered by the expertsystem 0.2.0 update, which does not specify decay dynamics anymore. One exception is the top node in a decay, which is still set exported as NonDynamic by the expertsystem.
tensorwaves - Release candidate

Published by redeboer over 4 years ago

  • Helicity formalism and canonical formalism with TensorFlow as backend
  • Up to fit procedure, no data or visualization model yet