Releases: phasorpy/phasorpy
v0.8
PhasorPy is an open-source Python library for the analysis of fluorescence lifetime and hyperspectral images using the phasor approach.
This is the eighth alpha release of the PhasorPy library. It contains several improvements and breaking changes.
Filter-related functions have moved from the phasor module to the new filter module. A new signal_filter_ncpca function has been added that filters signals using noise-corrected principal component analysis. The experimental.spectral_vector_denoise function has been renamed to filter.signal_filter_svd.
The signal_from_fbd function has been updated to use the fbdfile package.
This release supports Python 3.12 to 3.14. Python 3.11 is no longer supported.
What's Changed
- Bump version by @cgohlke in #287
- Fix sdist does not contain all tests by @cgohlke in #288
- Improve documentation by @cgohlke in #295
- Mention cell-analysis-tools library by @cgohlke in #296
- Add filter module by @cgohlke in #290
- Document how to calibrate LIF Fast FLIM lifetimes by @cgohlke in #289
- Add signal_filter_ncpca function by @cgohlke in #297
- Raise minimum version requirements by @cgohlke in #298
- Mention napari-phasors software by @cgohlke in #301
- Add phasor_combine function by @cgohlke in #300
- Bump the github-actions group with 2 updates by @dependabot[bot] in #299
- Update to mkl_fft 2.0 by @cgohlke in #302
- Use fbdfile package to read FBD files by @cgohlke in #303
- Support Python 3.14 and drop Python 3.11 by @cgohlke in #304
- Release v0.8 by @cgohlke in #306
Full Changelog: v0.7...v0.8
v0.7
PhasorPy is an open-source Python library for the analysis of fluorescence lifetime and hyperspectral images using the phasor approach.
This is the seventh alpha release of the PhasorPy library. It contains several bug fixes, improvements, and breaking changes.
Lifetime-related functions have moved from the phasor module to the new lifetime module. The cursors and components modules have been renamed to cursor and component respectively.
The new phasor_from_component function calculates phasor coordinates from component fractions. The phasor_component_mvc function calculates mean value coordinates from phasor components. The phasor_to_lifetime_search function finds two lifetime components in multi-harmonic phasor coordinates. The signal_from_pqbin function reads TCSPC histograms from PicoQuant BIN files.
New tutorials demonstrate the multidimensional phasor approach and the programmatic generation of the PhasorPy logo.
This release supports Python 3.11 to 3.13. Wheels for Python 3.14, including free-threaded, are available for testing.
What's Changed
- Bump version by @cgohlke in #250
- Bump pypa/cibuildwheel from 2.23.3 to 3.0.0 in the github-actions group by @dependabot[bot] in #252
- Support reading variants of SimFCS referenced files by @cgohlke in #253
- Add GSLab dataset by @cgohlke in #254
- Fix tests failing with numpy 2.3 by @cgohlke in #255
- Remove numpy pin for static code analysis by @cgohlke in #256
- Add phasor_from_component function by @cgohlke in #257
- Return component fractions as single array by @cgohlke in #258
- Use only latest GitHub Actions runners by @cgohlke in #259
- Add phasor_component_mvc function by @cgohlke in #260
- Move lifetime related functions out of phasor module by @cgohlke in #261
- Add option to specify number of lifetimes in lifetime app by @cgohlke in #263
- Rename cursors and components modules by @cgohlke in #262
- Skip more tests if SKIP_FETCH environment variable is set by @cgohlke in #264
- Improve docstrings and tests by @cgohlke in #265
- Drop support for numpy 1.25 by @cgohlke in #267
- Update Python versions used in workflows by @cgohlke in #268
- Add phasor_to_lifetime_search function for two components by @cgohlke in #266
- Fix io tutorial by @cgohlke in #269
- Fix multi-component fit tutorial by @cgohlke in #270
- Build wheels for Python 3.14 by @cgohlke in #271
- Improve PhasorPlot.polar_grid method by @cgohlke in #272
- Fix PhasorPlot.polar_cursor at origin by @cgohlke in #273
- Pass kwargs from signal_from_ptu to PtuFile.decode_image by @cgohlke in #274
- Add signal_from_pqbin function by @cgohlke in #275
- Build wheels for free-threaded Python by @cgohlke in #276
- Fix signal_from_ptu function kwargs handling by @cgohlke in #277
- Bump pypa/cibuildwheel from 3.1.2 to 3.1.3 in the github-actions group by @dependabot[bot] in #278
- Rename build_manylinux scripts by @cgohlke in #279
- Add tutorial to create PhasorPy logo by @cgohlke in #280
- Make PhasorPy logo square shaped by @cgohlke in #281
- Update pre-commit-hooks by @cgohlke in #282
- Improve PhasorPlot class and its cursor methods by @cgohlke in #284
- Document that LIF files contain Fast FLIM lifetimes by @cgohlke in #286
- Add multidimensional phasor tutorial and dataset by @bruno-pannunzio in #283
- Release v0.7 by @cgohlke in #285
Full Changelog: v0.6...v0.7
v0.6
PhasorPy is an open-source Python library for the analysis of fluorescence lifetime and hyperspectral images using the phasor approach.
This is the sixth alpha release of the PhasorPy library. It contains several bug fixes, improvements, and breaking changes.
The new phasor_component_fit function fits fractions of multiple components to phasor coordinates. The phasor_nearest_neighbor function returns nearest neighbors in phasor coordinates. The phasor_to_normal_lifetime function returns single lifetimes closest to phasor coordinates. The phasor_semicircle_intersect function returns intersections of lines with the universal semicircle.
The LifetimePlots class interactively plots lifetimes in the time domain, frequency domain, and phasor plot. It can be invoked from the command line with python -m phasorpy lifetime.
The two_fractions_from_phasor and graphical_component_analysis functions are renamed to phasor_component_fraction and
phasor_component_graphical, respectively. The versions function has moved to the phasorpy.utils namespace. The spectral_vector_denoise, anscombe_transform, and anscombe_transform_inverse functions have moved to the
phasorpy.experimental namespace.
Functions in the io module now return only the first channel by default.
Three new tutorials are added: "Geometrical interpretation of lifetimes", "Multi-component fit", and "FRET efficiency image". This release supports Python 3.11 to 3.13.
What's Changed
- Bump version by @cgohlke in #221
- Bump pypa/cibuildwheel from 2.23.2 to 2.23.3 in the github-actions group by @dependabot in #223
- Update description of AlliGator software by @cgohlke in #225
- Cython 3.1.0 is released by @cgohlke in #226
- Add phasor_to_normal_lifetime function by @cgohlke in #228
- Read first channel from files by default by @cgohlke in #229
- Update acknowledgments by @cgohlke in #230
- Use importlib to get package versions by @cgohlke in #231
- Use Windows Server 2022 in GitHub Actions by @cgohlke in #232
- Add tutorial about geometrical interpretation of lifetimes by @cgohlke in #233
- Update reference phasor_from_signal benchmark results by @cgohlke in #234
- Sort clusters returned by phasor_cluster_gmm by @cgohlke in #236
- Reorganize io module by @cgohlke in #235
- Update pre-commit configuration by @cgohlke in #237
- Fix test failing with numpy 2.3.0 by @cgohlke in #239
- Add phasor_component_fit function by @cgohlke in #238
- Rename functions in components module by @cgohlke in #240
- Add phasor_semicircle_intersect function by @cgohlke in #241
- Add private helper functions to mask universal semicircle by @cgohlke in #242
- Add private _distance_from_semicircle function by @cgohlke in #244
- Reorganize plot module by @cgohlke in #245
- Add interactive LifetimePlots class by @cgohlke in #247
- Reorganize version, utils, and experimental modules by @cgohlke in #248
- Add phasor_nearest_neighbor function by @bruno-pannunzio in #243
- Release v0.6 by @cgohlke in #249
Full Changelog: v0.5...v0.6
v0.5
PhasorPy is an open-source Python library for the analysis of fluorescence lifetime and hyperspectral images using the phasor approach.
This is the fifth alpha release of the PhasorPy library. It contains several bug fixes and improvements. The new phasor_cluster_gmm function finds clusters in phasor coordinates using a Gaussian mixture model. The phasor_filter_pawflim function applies a wavelet filter using the pawFLIM library. This release supports Python 3.11 to 3.13. Python 3.10 is no longer supported.
What's Changed
- Bump version by @cgohlke in #183
- Bug Fix for phasor_calibrate when skipping axes with harmonic axis by @bruno-pannunzio in #185
- Fixes for liffile 2025.2.6 by @cgohlke in #184
- Fix phasor_normalize with numpy 1.24 by @cgohlke in #186
- Add pawFLIM wavelet filter for phasor coordinates by @bruno-pannunzio in #167
- Add dataset from zenodo.org/records/14860228 by @cgohlke in #187
- Improve support for Leica image files by @cgohlke in #188
- Remove notes about early stage of development by @cgohlke in #189
- Add plot_histograms function by @cgohlke in #191
- Fix NaN padding in phasor_to_simfcs_referenced by @cgohlke in #192
- Return more metadata from IFLI and FBD readers by @cgohlke in #193
- Add more formats to file I/O tutorial by @cgohlke in #194
- Fix module attribute of functions in phasorpy.io by @cgohlke in #195
- Add plot_image helper function by @cgohlke in #196
- Add section on other means to IO tutorial by @cgohlke in #197
- Bump pypa/cibuildwheel from 2.22.0 to 2.23.0 in the github-actions group by @dependabot in #198
- Improve IO tutorial by @cgohlke in #199
- Fix minor issues found by GitHub Copilot by @cgohlke in #202
- Move parse_skip_axis function to _utils module by @cgohlke in #203
- Fix new mypy errors with numpy 2.2.4 by @cgohlke in #204
- Raise minimum requirements by @cgohlke in #208
- Add phasor_cluster_gmm function by @R-Blanco802 in #201
- Require scikit-learn>=1.5.0 by @cgohlke in #209
- Support routing channels in signal_from_sdt by @cgohlke in #210
- Improve tests and documentation of phasor_cluster_gmm by @cgohlke in #211
- Ignore PhasorPlot.contour cmap if colors is set by @cgohlke in #213
- Bump pypa/cibuildwheel from 2.23.1 to 2.23.2 in the github-actions group by @dependabot in #214
- Update Ubuntu version by @cgohlke in #219
- Require Cython>=3.1.0b1 by @cgohlke in #216
- Add PTU file exported from FLIM_testdata.lif with photon filter by @cgohlke in #217
- Fix multi-channel FLIM LABS files containing single-channel phasors by @cgohlke in #218
- Release v0.5 by @cgohlke in #220
New Contributors
- @R-Blanco802 made their first contribution in #201
Full Changelog: v0.4...v0.5
v0.4
PhasorPy is an open-source Python library for the analysis of fluorescence lifetime and hyperspectral images using the phasor approach.
This is the fourth alpha release of the PhasorPy library. It contains several bug fixes and many improvements, mostly to the phasorpy.io module. File reader functions are now named signal_from_* or phasor_from_* and have a more consistent API. Point mode PTU files, LIF files containing phasor coordinates or hyperspectral signals, and FLIM LABS JSON files are supported. PhasorPy releases are now available on conda-forge. This release supports Python 3.10 to 3.13.
What's Changed
- Bump version by @cgohlke in #163
- Support labelled signal axes by @cgohlke in #166
- Update copyright year by @cgohlke in #168
- Return array coordinates from files in normal units by @cgohlke in #169
- Document availability on conda-forge by @cgohlke in #170
- Fix RST code is two backticks by @cgohlke in #171
- Support reading point mode PTU files by @cgohlke in #172
- Fix phasor_calibrate for handling higher harmonics than size of first dimension of reference_real by @bruno-pannunzio in #176
- Improve io module by @cgohlke in #177
- Add support for Leica LIF files by @cgohlke in #178
- Add support for new FLIM LABS JSON format by @cgohlke in #179
- Reformat with black 25.1 by @cgohlke in #180
- Release v0.4 by @cgohlke in #181
- Fixes for liffile 2025.1.30 by @cgohlke in #182
Full Changelog: v0.3...v0.4
v0.3
PhasorPy is an open-source Python library for the analysis of fluorescence lifetime and hyperspectral images using the phasor approach.
This is the third alpha release of the PhasorPy library. It fixes the averaging of phasor coordinates in the phasor_center and phasor_calibrate functions, replaces the phasor_filter function with phasor_filter_median, adds support for multiple harmonics to phasor_threshold, and adds the read_imspector_tiff function to read ImSpector FLIM TIFF files. This release supports Python 3.10 to 3.13.
What's Changed
- Bump version by @cgohlke in #152
- Bump the github-actions group with 2 updates by @dependabot in #153
- Mention GSLab software by @cgohlke in #156
- Mention BrightEyes software by @cgohlke in #157
- Pin numpy<2.2.0 for static code analysis by @cgohlke in #159
- Fix mypy errors with matplotlib-3.10 by @cgohlke in #160
- Fix averaging phasor coordinates and related issues by @cgohlke in #155
- Add support for ImSpector FLIM TIFF files by @cgohlke in #161
- Release v0.3 by @cgohlke in #162
Full Changelog: v0.2...v0.3
v0.2
PhasorPy is an open-source Python library for the analysis of fluorescence lifetime and hyperspectral images using the phasor approach.
This is the second alpha release of the PhasorPy library. It fixes NaN handling in the median filter, simplifies multiple harmonic calibration, and adds functions for spectral vector denoising and Anscombe transformation. This release supports Python 3.10 to 3.13.
What's Changed
- Bump version by @cgohlke in #132
- Add documentation version switcher config file by @cgohlke in #134
- Bump pypa/cibuildwheel from 2.20.0 to 2.21.1 in the github-actions group by @dependabot in #133
- Update FLUTE license by @cgohlke in #137
- Support Linux on AArch64 by @cgohlke in #135
- Improve private parse_harmonic function by @cgohlke in #138
- Add Anscombe transformation functions by @cgohlke in #139
- Mention PhasorPlots for dummies by @cgohlke in #140
- Simplify multiple harmonic calibration by @bruno-pannunzio in #124
- Add documentation version switcher dropdown by @cgohlke in #136
- Mention AlliGator software by @cgohlke in #141
- Bump pypa/cibuildwheel from 2.21.1 to 2.21.3 in the github-actions group by @dependabot in #144
- Add tool to print SHA256 hashes of dataset files by @cgohlke in #143
- Add Convallaria dataset by @bruno-pannunzio in #145
- Mention LIFA software by @cgohlke in #146
- Upgrade GitHub Actions to macOS-13 environment by @cgohlke in #149
- Add spectral vector denoising by @cgohlke in #148
- Replace median filter implementation for NaN handling consistency by @bruno-pannunzio in #147
- Improve median filter by @cgohlke in #150
- Release v0.2 by @cgohlke in #151
Full Changelog: v0.1...v0.2
v0.1
PhasorPy is an open-source Python library for the analysis of fluorescence lifetime and hyperspectral images using the phasor approach.
This is the first alpha release of the PhasorPy library. It contains over 70 documented and tested functions and class methods to calculate, calibrate, filter, transform, store, analyze, and visualize phasor coordinates, as well as to read fluorescence lifetime and hyperspectral signals from PTU, SDT, LSM, and other file formats. Ten tutorials demonstrate the use of the programming interface. An interactive app calculates and plots phasor coordinates of FRET donor and acceptor channels as a function of many model parameters. This release supports Python 3.10 to 3.13.
What's Changed
- Create initial project infrastructure by @cgohlke in #1
- Mention FLIMLib by @cgohlke in #2
- Mention PhasorIdentifier by @cgohlke in #3
- Mention PAM by @cgohlke in #4
- Add color module by @cgohlke in #5
- Add io and datasets modules by @cgohlke in #7
- Add datasets and enable mass downloads by @cgohlke in #8
- Add link to GitHub repo by @cgohlke in #9
- Update .gitignore by @cgohlke in #14
- Add link to FLIM LABS GitHub by @cgohlke in #16
- Improve contributing guide and create PR template by @cgohlke in #15
- Update workflows by @cgohlke in #18
- Enable Dependabot version updates for actions by @cgohlke in #22
- Bump the github-actions group with 3 updates by @dependabot in #23
- Update copyright year by @cgohlke in #24
- Add read functions for PTU, FBD, and FLIF files by @cgohlke in #25
- Fix target-version for black 24.1 by @cgohlke in #29
- Mention tttrlib by @cgohlke in #30
- Add calibration functions to the phasor module by @bruno-pannunzio in #28
- Various additions and improvements to the phasor module by @cgohlke in #32
- Fix datasets.fetch with pooch 1.8.1 by @cgohlke in #34
- Add phasor_from_signal function by @cgohlke in #35
- Mention code contributions by @cgohlke in #38
- Add plot module by @cgohlke in #36
- Fix PhasorPlot.semicircle changes axes limits by @cgohlke in #39
- Fix contour offsets by @cgohlke in #40
- Higher level calibration function by @bruno-pannunzio in #37
- Hide typehints in API documentation by @cgohlke in #41
- Add skip_axes parameter to phasor_calibrate function by @bruno-pannunzio in #42
- Additions and improvements to the phasor module by @cgohlke in #44
- Improve typing by @cgohlke in #45
- Add dtime parameter to read_ptu function by @cgohlke in #46
- Add phasor_from_fret functions by @cgohlke in #49
- Bump the github-actions group with 1 update by @dependabot in #50
- Use Scientific Python SPEC0 instead of NEP29 by @cgohlke in #51
- Add interactive FRET phasor plot by @cgohlke in #52
- Add PhasorPlot.cursor method by @cgohlke in #53
- Fix linting errors in Cython code by @cgohlke in #54
- Improve phasor_from_lifetime tutorial by @cgohlke in #55
- Add functions to convert optimal frequency and lifetime by @cgohlke in #56
- Mention napari-live-flim by @cgohlke in #57
- Mention HySP software by @cgohlke in #58
- Add functions to convert between lifetime fractions and amplitudes by @cgohlke in #60
- Add components module by @bruno-pannunzio in #59
- Support NumPy 2 by @cgohlke in #61
- Build with NumPy 2 by @cgohlke in #62
- Bump peaceiris/actions-gh-pages from 3 to 4 in the github-actions group by @dependabot in #64
- Format docstring examples with blackdoc by @cgohlke in #66
- Add phasor_at_harmonic function by @cgohlke in #65
- Fix phasor_calibrate function to handle multi harmonic calibration by @bruno-pannunzio in #69
- Mention FLIMfit software by @cgohlke in #70
- Fix spelling by @cgohlke in #72
- Bump pypa/cibuildwheel from 2.17.0 to 2.18.1 in the github-actions group by @dependabot in #71
- Numpy 2 is released by @cgohlke in #73
- Mention HORIBA EzTime software by @cgohlke in #75
- Use phasorpy-data repo instead of Zenodo in GitHub Actions by @cgohlke in #74
- Enable code coverage via codecov.io by @cgohlke in #76
- Bump pypa/cibuildwheel from 2.18.1 to 2.19.1 in the github-actions group by @dependabot in #77
- Seed random number generator with constant in tutorials by @cgohlke in #80
- Add graphical component analysis in components module by @bruno-pannunzio in #79
- Add cursors module by @schutyb in #48
- Add geometric helper functions by @cgohlke in #81
- Improve cursors module by @cgohlke in #82
- Add function to project multi-harmonic phasor coordinates onto principal plane by @cgohlke in #78
- Add elliptic cursors by @cgohlke in #84
- Add phasor_to_signal function by @cgohlke in #86
- Add median filtering function by @bruno-pannunzio in #85
- Bump pypa/cibuildwheel from 2.19.1 to 2.19.2 in the github-actions group by @dependabot in #89
- Sort fractions in PhasorPlot.components by @cgohlke in #90
- Fix type of harmonic parameter in phasor_to_signal by @cgohlke in #91
- Add LFD workshop FLIM tutorial by @cgohlke in #63
- Add lifetime_to_signal function by @cgohlke in #93
- Use Cython>=3.0.11 by @cgohlke in #94
- Fix phasor_center with NaN input by @cgohlke in #96
- Fix RuntimeWarning in plot_phasor_image by @cgohlke in #97
- Unify phasor_from_signal functions by @cgohlke in #98
- Add phasor_threshold function to phasor module by @bruno-pannunzio in #88
- Fix undefined and not defined function names in _utils module by @bruno-pannunzio in #100
- Improve handling of NaN values by @cgohlke in #101
- Add default fractions to graphical_component_analysis by @bruno-pannunzio in #103
- Improve tutorials by @cgohlke in #102
- Support writing multi-harmonic phasors to OME-TIFF by @cgohlke in #104
- Bump pypa/cibuildwheel from 2.19.2 to 2.20.0 in the github-actions group by @dependabot in #107
- Do not test wheels on Python 3.13 for now by @cgohlke in #108
- Add dataset from zenodo.org/records/13625087 by @cgohlke in #109
- Test minimum runtime requirements by @cgohlke in #110
- Add EOSS badge and use recommended language by @cgohlke in #111
- Improve io module by @cgohlke in #112
- Disable scikit-learn in requirements_min.txt for now by @cgohlke in #113
- Configure pre-commit hooks by @cgohlke in #114
- Enable mypy strict mode by @cgohlke in #115
- Configure mypy enable_error_code by @cgohlke in...