Hey FlowKit community! Lots of changes in this release, including support for Python 3.11 & 3.12. The major updates: we've moved to a `src` based structure using `pyproject.toml` and finally converted all plotting functions to Bokeh (dropping matplotlib and Seaborn as requirements). Read the notes below for all the changes.
**Special thanks to hbhargava7 and laserson for their contributions to this release!**
New features:
* New utility function `read_multi_dataset_fcs` for reading FCS files with multiple data sets (returns a list of Sample instances).
* `Workspace` class now has an option to load FCS files from the URI parameter embedded in the WSP file (Many thanks to hbhargava7 for PR 168).
* `Sample.plot_scatter_matrix` now displays histograms along the diagonal (Thanks laserson for the suggestion in 169).
* Exporting FlowJo 10 workspaces now supports the `WSPBiexTransform`.
* `Sample.plot_scatter` adds `event_mask` option to filter the plotted events.
* `Sample.plot_contours` & `Sample.plot_channel` methods now use Bokeh.
* Custom heatmap color palette was improved (it's subtle but has better visual contrast between density levels).
API changes:
* `Sample.plot_histogram` method adds `data_min`, `data_max`, and `x_range` kwargs for filtering data ranges and controlling the view range.
* Removed argument `ignore_transforms` in `parse_wsp` utility function.
* Transforms from a GatingML document are no longer imported as undocumented "GML" sub-classes, instead using the documented `Transform` sub-classes.
* Added kwarg `gate_path` to `plot_scatter` method in both Session & Workspace.
* `sample_id` argument now required for `GatingStrategy.is_custom_gate` method.
* Rename `plot_scatter` argument `highlight_indices` to `highlight_mask` (since it takes a Boolean array and not a list of indices).
* `plot_scatter` argument `dim_ids` split to `x_label` & `y_label` for specifying axis labels.
* `plot_gate` argument `dim_ids` split to `x_label` & `y_label` for specifying axis labels.
Bug fixes:
* Fixed KeyError in `Workspace.summary` method when a sample has no gates (see 155).
* Fixed WSP export of "range" `RectangleGate` instances (see 157).
* Fix `ValueError` thrown when compensating a Sample specifying null channels via `null_channel_list` (see 175).
* Fix `Session.plot_scatter` method where mixed compensations are specified for x & y channels (rare).
Documentation:
* Switched to ReadTheDocs theme for documentation.
* Clarify docstrings for null channel usage (see Sample & Matrix constructor docs).
* All notebooks validated and updated for the new release.
Dependencies:
* Dropped support for Python 3.7, added support for Python 3.11 & 3.12.
* FlowIO updated to >=1.3.0,<1.4
* FlowUtils updated to >=1.1.0,<1.2
* Matplotlib & Seaborn removed as dependencies. All plotting now uses the Bokeh library (>=3.1).
* Pandas updated to >=2.0
* Added new dependency contourpy (the library matplotlib uses).
* Other dependency minimum versions updated for Python 3.8 - 3.12 support (See requirements.txt for details).