# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [9.0.0](https://github.com/denehoffman/rustitude/compare/rustitude-core-v8.0.0...rustitude-core-v9.0.0) - 2024-08-18 ### Added - update ganesh dependency - [**breaking**] refine the `Field` trait by removing the `RealField` subtrait ### Other - update and fix documentation - documentation updates ## [8.0.0](https://github.com/denehoffman/rustitude/compare/rustitude-core-v7.1.0...rustitude-core-v8.0.0) - 2024-08-02 ### Fixed - resolves a huge bug I introduced when I put the `Model` `amplitudes` field under an `Arc` ### Other - revert back to using strings instead of enums in python API - unused precision ## [7.1.0](https://github.com/denehoffman/rustitude/compare/rustitude-core-v7.0.0...rustitude-core-v7.1.0) - 2024-08-01 ### Added - add some convenience methods for calculating the spherical angles of 3-momenta - move breakup-momentum related functions to `utils`, include `Complex` versions, and add some trait methods for dealing with complex numbers ## [7.0.0](https://github.com/denehoffman/rustitude/compare/rustitude-core-v6.0.0...rustitude-core-v7.0.0) - 2024-07-30 ### Fixed - place `Model` amplitudes under a `Arc>>` to avoid duplication ## [6.0.0](https://github.com/denehoffman/rustitude/compare/rustitude-core-v5.0.0...rustitude-core-v6.0.0) - 2024-07-23 ### Added - create method to add `Dataset`s - add methods to allow EPS to be calculated from polarization angle and magnitude - remove duplicate methods for loading data and replace with enum ### Fixed - remove print statement from add ### Other - update lib doc to use new data reading methods ## [5.0.0](https://github.com/denehoffman/rustitude/compare/rustitude-core-v4.1.0...rustitude-core-v5.0.0) - 2024-07-23 ### Added - add shorter syntax to turn a `Node` into an `Amplitude` - [**breaking**] removed CohSum and replaced with Sum + NormSqr - add methods/getters to get free/fixed parameters from Models, Managers, and ELLs - add ganesh for fitting with Nelder-Mead algorithm - add Debug, Display, and Clone to Manager-like structs ### Fixed - add piecewise_m to prelude ### Other - add fitting example - update crate documentation to reflect some past changes - document removal of CohSum and changes to Model - update outdated info in crate-level docs, add backticks for style - [**breaking**] Major update which implements generics ## [4.0.0](https://github.com/denehoffman/rustitude/compare/rustitude-core-v3.4.0...rustitude-core-v4.0.0) - 2024-06-27 ### Added - remove RwLock from Dataset and adopt indexing methods for splitting data - [**breaking**] add indexed versions of all evaluators and selectors - add isolate method as a shortcut for activating a set of amplitudes ### Fixed - fix model debug - remove prints from tests - remove unused imports - make parameters initialize at 1.0 rather than 0.0 - change FourMomentum sum implementation to take owned copies - update ELL evaluate methods to use the sum of weights rather than number of events and add normalization to intensity functions - remove const functions for now, they fail on nightly ### Other - *(amplitude)* fix doctest - remove unused dependencies - update dependencies - remove deprecated norm_int methods - *(four_momentum)* add some more tests for FourMomentum methods - remove simd feature (for now) - add custom node reference to rustitude-core README.md - update all README.mds ## [3.4.0](https://github.com/denehoffman/rustitude/compare/rustitude-core-v3.3.0...rustitude-core-v3.4.0) - 2024-06-21 ### Added - Add the ability to create new Nodes in Python - add error type for PyErr so they can be converted back to RustitudeError ### Fixed - finish error handling for custom PyNode GIL issues ### Other - Merge branch 'main' into development ## [3.3.0](https://github.com/denehoffman/rustitude/compare/rustitude-core-v3.2.0...rustitude-core-v3.3.0) - 2024-06-20 ### Added - add rustitude_core::utils mod to hold some nice testing functions - re-export nalgebra::Vector3 in rustitude_core::prelude since it gets used so often - add convenience method for turning Nodes into Amplitudes ### Fixed - corrected behavior of deactivated Amplitudes ### Other - Merge pull request [#11](https://github.com/denehoffman/rustitude/pull/11) from denehoffman/development - add tests for some GlueX amplitudes as well as some of the main crate functionality - add a bit of documentation to rustitude_core::errors module - update parameter display methods ## [3.2.0](https://github.com/denehoffman/rustitude/compare/rustitude-core-v3.1.0...rustitude-core-v3.2.0) - 2024-06-19 ### Added - add some logging in for datasets and amplitudes - add (de)activate_all methods for Model, Manager, and ExtendedLogLikelihood ### Fixed - temporarily remove automatic COM boost in dataset loading for parquet - update some Debug methods for clearer printing in downstream - the pol_in_beam convention actually sets Pz_Beam = 0, this corrects for that - deprecated methods should still work properly ### Other - move important methods to beginning of impl block - add some notes to the Model::compute method - deprecate norm_int methods - remove print_tree and replace it with Debug ## [3.1.0](https://github.com/denehoffman/rustitude/compare/rustitude-core-v3.0.0...rustitude-core-v3.1.0) - 2024-06-17 ### Added - add intensity functions to ExtendedLogLikelihood and begin moving away from norm_int - move parameter parsing to Manager ### Fixed - remove reference - ensure all loops are parallelized in par_* methods - resolve bug in product calculation ## [3.0.0](https://github.com/denehoffman/rustitude/compare/rustitude-core-v2.0.0...rustitude-core-v3.0.0) - 2024-06-10 ### Added - [**breaking**] Restructures AmpOp into concrete types - add par_ versions for all compute and norm_int methods and refactor python accordingly. Also remove RwLocks and extra allocations in the Amplitude struct, which is a huge speedup - add dyn-clone dependency ### Other - update core docs - *(amplitude)* finish documenting updates (replace AmpOp, add AmpLike, etc) - improve readability (doesn't seem to change performance) - bump versions because smart-release just doesn't know how to do anything I guess - preallocate memory in Manager evaluation calls - ensure clippy lints for perf and style - Merge pull request [#4](https://github.com/denehoffman/rustitude/pull/4) from denehoffman/cohsum ## 1.1.0 (2024-05-24) ### Documentation - Update README.md ### New Features - additional API so python interactions with managers can actually modify the amplitudes they manage - add RustitudeError and remove unwraps, error handling should work in python as well - update benchmark and itertools dep, which deprecated group_by -> chunk_by - make Model::new public to allow for proper benchmarking, and add divan benchmark for basic kmatrix ### Bug Fixes - remove unsafe transmutes, they weren't working properly and probably aren't needed anyway - pass model and dataset to manager as reference to avoid issues using the model later, might change the way the dataset is cloned in the future - bump versions ### Commit Statistics - 11 commits contributed to the release over the course of 2 calendar days. - 8 days passed between releases. - 8 commits were understood as [conventional](https://www.conventionalcommits.org). - 0 issues like '(#ID)' were seen in commit messages ### Commit Details
view details * **Uncategorized** - Bump versions ([`405ed0c`](https://github.com/denehoffman/rustitude/commit/405ed0cb2ad417ccf0041a49ce6fbd6b6693539c)) - Update README.md ([`7867bc0`](https://github.com/denehoffman/rustitude/commit/7867bc0bf9c47203f94c8720a1e84d6e86ed159d)) - Merge pull request #3 from denehoffman/python_reorg ([`467caac`](https://github.com/denehoffman/rustitude/commit/467caacc688f94c074d28be1ec54a422d8d9ebc0)) - Additional API so python interactions with managers can actually modify the amplitudes they manage ([`d2a94a5`](https://github.com/denehoffman/rustitude/commit/d2a94a57466c0b2556850315b8902cf9528598de)) - Remove unsafe transmutes, they weren't working properly and probably aren't needed anyway ([`dba3b5b`](https://github.com/denehoffman/rustitude/commit/dba3b5bbd9b93622c32e6042062d75da972c073e)) - Add RustitudeError and remove unwraps, error handling should work in python as well ([`6955773`](https://github.com/denehoffman/rustitude/commit/6955773a3e96890efa4573d5c7bc355bb23a07e6)) - Move all pyo3 code to the py-rustitude crate ([`9bcdb46`](https://github.com/denehoffman/rustitude/commit/9bcdb4615fdb4df5b4566673fbed955930926b7c)) - Merge pull request #2 from denehoffman/create_benchmarks ([`1297b92`](https://github.com/denehoffman/rustitude/commit/1297b9275dfac49f2591573b46438ff588a77c51)) - Update benchmark and itertools dep, which deprecated group_by -> chunk_by ([`b495892`](https://github.com/denehoffman/rustitude/commit/b495892674a3fad4937de6e830241230b52880c3)) - Pass model and dataset to manager as reference to avoid issues using the model later, might change the way the dataset is cloned in the future ([`14359c9`](https://github.com/denehoffman/rustitude/commit/14359c9e7af9a155c1fe64e7f809f3a4771c5e1f)) - Make Model::new public to allow for proper benchmarking, and add divan benchmark for basic kmatrix ([`8b1eee7`](https://github.com/denehoffman/rustitude/commit/8b1eee79d545caaca39b8b38be1f00f7762adcda))
## 1.0.1 (2024-05-16) ### Documentation - update readme link - Update README.md (missed a spot) - update readmes ### Refactor - change Amplitude such that new makes a new Amplitude, add conversion traits to AmpOp and PyAmpOp, and fix amplitude! macro - major move required to have rustitude function properly as a Rust crate. I set this up very wrong the first time ### Style - get rid of extra git-files and media ### Commit Statistics - 7 commits contributed to the release. - 1 day passed between releases. - 6 commits were understood as [conventional](https://www.conventionalcommits.org). - 0 issues like '(#ID)' were seen in commit messages ### Commit Details
view details * **Uncategorized** - Release rustitude-core v1.0.1, rustitude-gluex v0.2.2, rustitude v0.4.3 ([`fe0c603`](https://github.com/denehoffman/rustitude/commit/fe0c6036d4816587b1d65ae2697f3b241cfe579c)) - Get rid of extra git-files and media ([`0e94ec4`](https://github.com/denehoffman/rustitude/commit/0e94ec45850cb6129924b2be27793a17c51b03c2)) - Update readme link ([`8824d4c`](https://github.com/denehoffman/rustitude/commit/8824d4c02278fd01de0050be3c3b9c3781e39687)) - Change Amplitude such that new makes a new Amplitude, add conversion traits to AmpOp and PyAmpOp, and fix amplitude! macro ([`b08b3b8`](https://github.com/denehoffman/rustitude/commit/b08b3b8c8c4699a65dabdac5ff4b19fe50f511aa)) - Major move required to have rustitude function properly as a Rust crate. I set this up very wrong the first time ([`9089c84`](https://github.com/denehoffman/rustitude/commit/9089c84e481124ff764b24f42507ab14913fef07)) - Update README.md (missed a spot) ([`27799fd`](https://github.com/denehoffman/rustitude/commit/27799fd50850d43e50c42bfc24f5c9d36b6f76d7)) - Update readmes ([`53c553d`](https://github.com/denehoffman/rustitude/commit/53c553d44045715f91710a266e7e5f39cc71d9c9))
## 1.0.0 (2024-05-15) ### Documentation - update links in readmes ### New Features - update ExtendedLogLikelihood call signature to make num_threads optional and default to 1 ### Other - more Cargo.lock and readme updates - Add rustitude-core to crates subdirectory ### Commit Statistics - 5 commits contributed to the release. - 4 commits were understood as [conventional](https://www.conventionalcommits.org). - 0 issues like '(#ID)' were seen in commit messages ### Commit Details
view details * **Uncategorized** - Release rustitude-core v1.0.0, rustitude-gluex v0.2.0, rustitude v0.4.0, safety bump 2 crates ([`23a8807`](https://github.com/denehoffman/rustitude/commit/23a880783702368ee873ce4839310f4b392c6862)) - Update ExtendedLogLikelihood call signature to make num_threads optional and default to 1 ([`ae5bd43`](https://github.com/denehoffman/rustitude/commit/ae5bd43902756b612beecb057151dac39dfca208)) - Update links in readmes ([`95f85ed`](https://github.com/denehoffman/rustitude/commit/95f85ed6b16400c882e7535c7fa113ead9876353)) - More Cargo.lock and readme updates ([`64ec509`](https://github.com/denehoffman/rustitude/commit/64ec5097cc99eb9bb6d73376e6d3b2788f637d9d)) - Add rustitude-core to crates subdirectory ([`fa66ff1`](https://github.com/denehoffman/rustitude/commit/fa66ff1c89c3761f22b8d1586c9df4eb81937a49))
## 0.3.4 (2024-05-06) ### Documentation - Update README.md - Update README.md ### New Features - add Piecewise to prelude - add Piecewise amplitude Additionally adds a method to use the piecewise amplitude over resonance mass: PiecewiseM - add assert for compute to check if the proper number of parameters is inputed - add fixed and constrained flags to parameters - move Dataset constructors into pymethods, add options for no weights or eps in from_dict ### Bug Fixes - correct spelling - add list of used indices to hopefully ensure constrained parameters are only returned by parameters if the flag is true - set indices rather than setting parameters, this fixes a kind of major bug where constraining just made duplicates - change module implementation - make sure submodules are called - make amplitude, four_momentum, and manager #[pymodule]s - make dataset a #[pymodule], hopefully this resolves import issues ### Other - update Cargo.lock ### Style - change nbins to bins to match numpy and matplotlib ## 0.3.3 (2024-05-02) ### Chore - Update README.md ### New Features - add pyo3 bindings to all main modules - implement Clone for Event - some Clone derives for Manager and additional API access for Parameter ### Bug Fixes - correct the module name for amplitude from dataset (typo) ## 0.3.2 (2024-04-29) ### Other - version bump ### Style - added AmplitudeID and ParameterID types to simplify Manage functions ### Reverted - remove unused packages and files, remove pyo3 bindings for future crate - rename crate to rustitude-core in preparation for restructuring - move ArcLocks into Amplitude to enable better PyO3 integration, this also means less &mut selfs and no need for macros for scalar-like Amplitudes - remove some iter methods from Dataset and make it store an Arc to allow Manager to have no lifetime annotations - remove gomez support ### Bug Fixes - fix docs - fix more tests - fix tests with renamed lib - forgot to add required crates for ROOT file reading - ensured convert gets the correct tree name for writing - fix doctests in amplitude.rs - parking_lot::RwLocks don't need to be unwrapped ### New Features - add pyo3 bindings to four_momentum - add bounds and initial values to parameters - add prelim ROOT file reading and ways to split datasets - add bounds to Problem impl for Managers - add bounds and initial values to Parameters - switch to parking_lot::RwLock - add amplitude::PolarComplexScalar ## 0.3.1 (2024-04-10) ### Chore - update Cargo.lock ### Style - added AmplitudeID and ParameterID types to simplify Manage functions ### Reverted - remove unused packages and files, remove pyo3 bindings for future crate - rename crate to rustitude-core in preparation for restructuring - move ArcLocks into Amplitude to enable better PyO3 integration, this also means less &mut selfs and no need for macros for scalar-like Amplitudes - remove some iter methods from Dataset and make it store an Arc to allow Manager to have no lifetime annotations - remove gomez support ### Documentation - update README.md - update README.md - document ParameterType - document Scalar and ComplexScalar - document Amplitude - document Node - document macros ### New Features - add pretty printing to Parameter struct - formalize Parameter struct - rework loading from parquet and different ways to load EPS - modify output of Manage::parameters to include other parameter fields - re-export num_complex::Complex64 - add pyo3 bindings to four_momentum - add bounds and initial values to parameters - add prelim ROOT file reading and ways to split datasets - add bounds to Problem impl for Managers - add bounds and initial values to Parameters - switch to parking_lot::RwLock - add amplitude::PolarComplexScalar ### Bug Fixes - make Manager::compute public again - fix tests - reorganize amplitude module into amplitude and manager restructure manager via Manage trait - remove nightly-only feature which was unused - doctest - fix docs - fix more tests - fix tests with renamed lib - forgot to add required crates for ROOT file reading - ensured convert gets the correct tree name for writing - fix doctests in amplitude.rs - parking_lot::RwLocks don't need to be unwrapped ### Other - update .gitignore - get rid of expect, gluex - some updates to bacon and other configs - first commit of functional code This really doesn't work well at all, it is super slow and hoards memory ### Style - remove line from docs-header.html ## 0.3.0 (2024-04-05) ## 0.2.0-alpha (2024-02-02) ### Chore - Release rustitude version 0.2.0-alpha ### New Features - re-implement dependency resolution ### Other - add Resolver trait and some other minor organizational things ### Refactor - change par_evaluate_on to evaluate_on_par This matches other methods and makes the API more consistent. It also makes it easier to search for the parallel version if you already know the non-parallel version by typing completion. - changed resolve to function to match amplitude plus other aesthetic changes - major rewrite of Dataset and Variable types While this is technically a breaking change, I'm still working in 0.1.* here. The core of this is that Dataset entries are no longer enums, which have the size of their largest variant (in our case, complex matrices probably). This is bad, as it wastes memory and takes longer to move around. While I still haven't tested this, I believe my solution is better, and as far as I can tell, it makes a lot of the code cleaner. It did require a rewrite of Variable, since the return type is no longer an enum, so there are now multiple Variable variants, each with Builders. I also added a Builder to the Amplitude struct, and renamed the traits Amplitude(Variable)Builder to IntoAmplitude(Variable) to avoid confusion. I disabled most of the gluex code while I'm working through the changes, but Ylm is implemented and might work, although I haven't tested it at time of writing. Assume tests will break here. ### Style - give logo a white background - add logo ## 0.1.3 (2023-12-29) ### New Features - add Pow trait and pow function to Amplitude - allow for different amplitudes for data and MC This ensures we can assign weights as part of the amplitude, but users can choose whether they want weighted MC or not. Also makes it easy if your branch names differ between the two files, you only have to re-implement some things. - add Branch struct Branch is a convenience wrapper for getting data from the Dataset without duplicating or copying anything into a new variable dependency. ### Bug Fixes - doctests were taking Strings after I changed to &str ### Refactor - move data extraction into dataset and propogate errors - change inputs to functions to &str ### Style - try out logging fit steps - remove some commented-out code ## 0.1.2-beta.2 (2023-12-29) ### Chore - release ## 0.1.2-beta.1 (2023-12-29) ### Chore - Release rustitude version 0.1.2-beta.1