New features:
* Workspace class now supports Boolean gates when parsing a FlowJo workspace (see 179).
* Added `get_keywords` method to Workspace for getting sample keywords stored in a FlowJo workspace (see 210).
* Workspace method `get_gate_events` now supports source kwarg to control pre-processing of returned events (see 196).
* Session & GatingStrategy classes now support renaming gates via the `rename_gate` method (see 219).
* Session & GatingStrategy classes now support removing custom sample gates via the `sample_id` kwarg in the `remove_gate` method (see 221).
* Sample class now supports renaming channels via a new `rename_channel` method (see 198).
* Sample class methods `get_events`, `get_channel_events` and `as_dataframe` support `event_mask` kwarg for filtering events using a Boolean array (see 218).
* Sample class method `as_dataframe` supports new `col_multi_index` option to control column index type.
* Matrix class now supports comparison operator for determining if 2 Matrix instances are the same (see 200).
* New utils module function `generate_transforms` to generate a set of transforms for a Sample (see 162).
API changes:
* Transform class: removed `id` attribute. This allows more convenient use of independently using transforms outside of a GatingStrategy (see 191).
* GatingStrategy class: added transform_id arg to `add_transform` method.
* Session class: added transform_id arg to `add_transform` method.
* Workspace class: `get_transforms` now returns a dictionary LUT of transform IDs and transform instances.
* Matrix class: removed `id` attribute. This allows more convenient use of independently using matrices outside of a GatingStrategy (see 199).
* Session class: `get_comp_matrices` now returns a dictionary LUT of matrix IDs and Matrix instances.
* GatingResults class: the 'level' column of the report is now indexed at 0 (for root level).
Bug fixes:
* Ensure exporting of QuadrantGate raises NotImplementedError (see 209).
* Fixed plot_scatter error with 0 or 1 points (and 2 points with extent) (see 197).
* Better error for invalid gate names '.' & '..' (see 220).
Documentation:
* Added more informative docstrings for transforms
* Testing code reorganized to factor constants to new test config file (Thanks ksebby for PR 213).
Dependencies:
* Drops Python 3.8 support (EOL as of Oct 2024).
* Updated dependency versions for compatibility w/ Python 3.9 - 3.12 (see requirements.txt for details).