- `recursive_getitem` to retrieve an item from a recursive dict. In principle, this should also work for other
objects which implement `__get_item__(...)`, but it is not tested for those other objects. See:
`5982c6bfd5a13a4b8f09464ca27ac24ba8477f6f` and `a3653859c94bc892082842ecc7997e4facda1e60`.
- Relaxed some `Dict` -> `Mapping` typing information where possible for greater compatibility with inputs.
- Don't modify the passed analysis iterables when iterating with
`iterate_with_selected_objects_in_order(...)`. See: `7daf01ea590e9ccbdc6511d6a5379757409537fa`.
- Indicate that the package is typed (it already was, but the typing wasn't being checked in downstream
packages). See: `409922e80541155d414c2c101eb913b4ab9fd9ac`.
- Improved typing information in the `histogram` module. See: `dded82643a8c7c7acc684d64c958eed63c84b3e6`.
- Improved typing information in the `generic_config` module. See: `c9a8f57fea5f72e62841f264d768e785cd6da3c5`,
- `Histogram1D` operators (add, subtract, multiply, divide) with other hists, including error propagation. These
operations were confirmed by comparing against the same operations in ROOT histograms (it turns out that the
error propagation is exactly as expected, but the ROOT code was sometimes difficult to interpret). See:
`052ea365e4e6a8a4d6bce38779ed9fe2edcfc089` and `7df8ceaa445d5c7aea4c62f6b32bc198eb59ccc3`.
- Refactor `KeyIndex` creation into a separate function so it can be accessed by other packages. In
particular, this allows for their creation (with the iterable field access, etc) from analysis packages.
- Added iterator (`__iter__`) over names and values to the `KeyIndex` object. See:
- Added `__init__.py` to the `tests` directory. Otherwise, test fixture discovery sometimes fails. See:
- Iteration over analysis objects grouped by selections. See: `0164157982147142561f33d4a790156513cbba34`.
- Recursive `getattr(...)`. Function from [Stack Overflow](https://stackoverflow.com/a/31174427). See:
- Recursive `setattr(...)`. Function from [Stack Overflow](https://stackoverflow.com/a/31174427). See:
- Raise exception if mean or median after outliers removal changes by more than 1%. Such a condition almost
certainly indicates that something went wrong with the outliers removal. See:
- Quiet down some logging information.
- Naming of `particle_level_axis` -> `outliers_removal_axis` in the `remove_outliers` module. While it is
common to the particle level axis, it isn't always. Further, sometimes we use the axis for projections,
and sometimes it is just for determining which axis to use when removing outliers. So it's better to use a
more general name. See: `12bde27f421eac59e310029c10f2ca750bcd6da6`.
- Specify the outliers removal axis when calling `run(...)` instead of at object creation. This way, we can
use the manager over for different histograms which many have different axes. See:
- Ignore the first bin of the outliers removal. Some older embedding trains had some erroneous entries in the
1st bin of the pt hard spectra, regardless of the pt hard bin. In any case, we would never expect to have
outliers in the first bin. See: `354013e1713d2c4d84d48f0a1d21a6bc06afea2e`.
- Included new modules in the docs. See: `3c2d30f363e04eca181f7c05d40306bfbb0d0470`.
- Typo: `_determine_outliers_for_moving_avreage` -> `_determine_outliers_for_moving_average`. See:
- Outliers removal module, `remove_outliers`. It removes outliers from a given histogram. It was developed
based on previous code. See: `dd472b3dff0715f015d27d083258555bd9674028`,
`12268cb696daa9d80ca680fc219e5d5ab01f67d2`, and `6b62e751c773c05be11019980c67d9ef69d1e487`.
- Centralized shared typing. See: `4e00fd66994971b67d40031627cd6b536c0439d0`.
- Improved YAML dependencies and typing. It is now only handled in the `yaml` module. See:
- Provide access to wrapper to get a `TAxis` object given a histogram and a selected axis number. See:
- Fixed 3D projectors axis determination. The axis name was being taken rather than the name of the axis type.
- Obsolete YAML read and write code. We can now directly write classes, which is much easier. See:
- Added very simple context manager for opening ROOT files. Basically a simpler version of
`rootpy.io.root_open`. See: `0d7a923f19d714125ec5f1eaed55ad9203ae718e`.
- Heavily modified the `projectors` module to simplify projecting single objects. See:
- Modify the `HistProjector` initialization names and objects for improved clarity. See:
- Clarify typing information. See: `eac9586a7d7c0bf1e2be1f0ef2235fb75bf0e676` and
- Improved typing information in the `yaml` module. See: `eac9586a7d7c0bf1e2be1f0ef2235fb75bf0e676`.
- A few more git pre-commit hooks. See: `dcdde76d223b93ec12d1f43cb5f9a94894efa6c8`.
- ROOT memory issue that sometimes occurred during testing. Fixed by ensuring that the open ROOT file is
always closed when an exception is raised. Also included ensuring that only python has ownership of the
objects. See: `c21612967376fb15aa1cffa2e2c8c7b663dae90b` (many of the preceding commits are related to
trying to solve this issue).
- `Histogram1D` now utilizes bin edges to define the axes instead of the bin centers. This allows for variable
sized bins. Further, the bin centers (ie `x`) are easy to calculate from the bin edges, but the edges are
a bit more painful. See: `b053fe8214591da6754e55d5f9dabf79a3cd5f56`.
- `Histogram1D` supports non-uniform binning. See: `32d2ed53f5743e0b8cab353130e045c733677255`.
- `get_array_from_hist2D(...)` can now return an (x, y) mesh using bin edges by enabling the
`return_bin_edges` option. By default, it will use bin centers. See:
- Improved test coverage to demonstrate why `deepcopy` is necessary when constructing objects. See:
- `histogram.get_histograms_in_file(filename)` to return all histograms stored in a ROOT file. See:
- Avoided a very expensive `deepcopy` by formatting strings into new objects instead of writing into existing
objects (which had to be copied first). See: `085f8f18`.
- Return the iterables that were actually utilized in `generic_config.create_objects_from_iterables`. It
replaces the iterables names return values with a dict, where the keys are the iterables names and the
values are lists of the utilized iterables. See: `973b85ae`.
- `KeyIndex` already could be written to YAML - it didn't need `to_yaml` and `from_yaml` methods.
- New YAML module to create YAML objects, register classes + modules for reading and writing, and additional
helper functions. It generally encapsulate much of the basic YAML functionality. See: `e8009517`.
- Pre-commit hooks configuration to the repository based on `pre-commit`. This should generally improve the
quality of commits. Currently includes `flake8`, `mypy`, `yamllint`, and some additional minor python
checks. See: `586c1549` and `0510a0ba`.
- YAML linting via `yamllint`. Little is done with this yet, but more files should filter in, so it's useful
to have . See: `a6bc250f`.
- Fixed breaking change made by `ruamel.yaml` upstream related to base python types receiving anchor support.
It is a good start, but still needs some time to mature for our purposes. Also expanded the tests to check
for such issues. See: `9aa7f4b7` (the commit message has far more information).
- Minor test improvements for `generic_config`. See: `d723bbcb`.
- Mixin approach for enum values to/from YAML causes problems with pickling (which is implicitly called while
copying). Revised the approach to be unbound functions, which doesn't have this same problem. See:
- Enumeration YAML read and write mixins. They utilize the `__name__` of the enumeration (not the value!).
- Allow for classes to be registered and constructed via YAML. See: `b877a09e`
- Allows for set of iterable values to be specified in a configuration file. Often used in conjunction
with creating objects in YAML. See: `7cab0476`.
- Convert each argument via `str()` in the generic_config instead of `obj.str()` which is less portable and
pythonic. Precipitated by changes in the definition of enumeration classes in the jet-hadron package. See:
- Include `--ignore-missing-includes` when running `mypy` automatically. See: `0ac7d0bd`.
- Full type annotations for the package. See: `a83372b1`.
- Fully updated API naming scheme to follow python conventions. See: `cd097f3b`, `c7bedc6b`, `68048970`, and
- Remove `pkgconfig` workaround introduced in `4a3c6216` since `python-lz4` merged in an alternative
[approach](https://github.com/python-lz4/python-lz4/pull/160) to workaround the issue. See: `755c276a`.
- Added `mypy` to Travis CI checks. See: `2c6f7dc0`.
- Reworked iteration over analysis dictionaries. See: `0ead6db8`.
- Updated overwatch-base python version. See: `39fede7e`.
- Existing typing issues identified by `mypy`.
- `Histogram1D` class moved from the `reaction_plane_fit` package to `pachyderm`. See: `89d2eaa3.`
- Added `uproot` dependency and add fix for `lz4` issue that is caused by ROOT. See: `89d2eaa3` and
- version info is now available in the package by simply typing `import pachyderm; pachyderm.version_info`.
- Moved histogram functionality from `utils` to a new `histogram` module. This module also contains the added
`Histogram1D` class (see above). See: `89d2eaa3`.
- Initial release, with most of the development performed in
[alice-yale-dev](https://github.com/ALICEYale/alice-yale-dev), and a bit in