phasorpy 0.3__tar.gz → 0.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. {phasorpy-0.3 → phasorpy-0.5}/LICENSE.txt +1 -1
  2. {phasorpy-0.3 → phasorpy-0.5}/MANIFEST.in +1 -0
  3. {phasorpy-0.3/src/phasorpy.egg-info → phasorpy-0.5}/PKG-INFO +11 -15
  4. {phasorpy-0.3 → phasorpy-0.5}/README.md +1 -1
  5. phasorpy-0.5/docs/_static/switcher.json +23 -0
  6. {phasorpy-0.3 → phasorpy-0.5}/docs/acknowledgments.rst +1 -0
  7. phasorpy-0.5/docs/api/cluster.rst +5 -0
  8. {phasorpy-0.3 → phasorpy-0.5}/docs/api/index.rst +3 -3
  9. {phasorpy-0.3 → phasorpy-0.5}/docs/conf.py +1 -1
  10. {phasorpy-0.3 → phasorpy-0.5}/docs/index.rst +3 -7
  11. {phasorpy-0.3 → phasorpy-0.5}/docs/license.rst +1 -1
  12. {phasorpy-0.3 → phasorpy-0.5}/docs/release.rst +91 -7
  13. {phasorpy-0.3 → phasorpy-0.5}/pyproject.toml +18 -26
  14. phasorpy-0.3/src/phasorpy/io.py → phasorpy-0.5/src/phasorpy/_io.py +1214 -370
  15. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy/_phasorpy.pyx +119 -47
  16. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy/_utils.py +165 -18
  17. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy/cli.py +2 -0
  18. phasorpy-0.5/src/phasorpy/cluster.py +170 -0
  19. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy/color.py +17 -13
  20. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy/components.py +18 -18
  21. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy/conftest.py +2 -0
  22. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy/cursors.py +9 -9
  23. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy/datasets.py +169 -10
  24. phasorpy-0.5/src/phasorpy/io.py +9 -0
  25. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy/phasor.py +281 -100
  26. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy/plot.py +276 -36
  27. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy/utils.py +12 -7
  28. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy/version.py +14 -5
  29. {phasorpy-0.3 → phasorpy-0.5/src/phasorpy.egg-info}/PKG-INFO +11 -15
  30. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy.egg-info/SOURCES.txt +6 -0
  31. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy.egg-info/requires.txt +5 -9
  32. {phasorpy-0.3 → phasorpy-0.5}/tests/test__utils.py +53 -0
  33. phasorpy-0.5/tests/test_cluster.py +94 -0
  34. phasorpy-0.5/tests/test_io.py +1324 -0
  35. {phasorpy-0.3 → phasorpy-0.5}/tests/test_phasor.py +835 -102
  36. {phasorpy-0.3 → phasorpy-0.5}/tests/test_plot.py +110 -4
  37. {phasorpy-0.3 → phasorpy-0.5}/tests/test_utils.py +4 -4
  38. {phasorpy-0.3 → phasorpy-0.5}/tutorials/api/phasorpy_components.py +42 -53
  39. {phasorpy-0.3 → phasorpy-0.5}/tutorials/api/phasorpy_cursors.py +13 -18
  40. phasorpy-0.5/tutorials/api/phasorpy_filtering.py +214 -0
  41. {phasorpy-0.3 → phasorpy-0.5}/tutorials/api/phasorpy_fret.py +14 -15
  42. phasorpy-0.5/tutorials/api/phasorpy_io.py +756 -0
  43. {phasorpy-0.3 → phasorpy-0.5}/tutorials/api/phasorpy_multi-harmonic.py +5 -5
  44. {phasorpy-0.3 → phasorpy-0.5}/tutorials/api/phasorpy_phasorplot.py +11 -10
  45. {phasorpy-0.3 → phasorpy-0.5}/tutorials/phasorpy_introduction.py +86 -57
  46. {phasorpy-0.3 → phasorpy-0.5}/tutorials/phasorpy_lfd_workshop.py +20 -16
  47. phasorpy-0.3/docs/_static/switcher.json +0 -18
  48. phasorpy-0.3/tests/test_io.py +0 -791
  49. {phasorpy-0.3 → phasorpy-0.5}/docs/_static/categorical.png +0 -0
  50. {phasorpy-0.3 → phasorpy-0.5}/docs/_static/custom-icons.js +0 -0
  51. {phasorpy-0.3 → phasorpy-0.5}/docs/_static/logo.png +0 -0
  52. {phasorpy-0.3 → phasorpy-0.5}/docs/_static/srgb_spectrum.png +0 -0
  53. {phasorpy-0.3 → phasorpy-0.5}/docs/api/_phasorpy.rst +0 -0
  54. {phasorpy-0.3 → phasorpy-0.5}/docs/api/_utils.rst +0 -0
  55. {phasorpy-0.3 → phasorpy-0.5}/docs/api/cli.rst +0 -0
  56. {phasorpy-0.3 → phasorpy-0.5}/docs/api/color.rst +0 -0
  57. {phasorpy-0.3 → phasorpy-0.5}/docs/api/components.rst +0 -0
  58. {phasorpy-0.3 → phasorpy-0.5}/docs/api/cursors.rst +0 -0
  59. {phasorpy-0.3 → phasorpy-0.5}/docs/api/datasets.rst +0 -0
  60. {phasorpy-0.3 → phasorpy-0.5}/docs/api/io.rst +0 -0
  61. {phasorpy-0.3 → phasorpy-0.5}/docs/api/phasor.rst +0 -0
  62. {phasorpy-0.3 → phasorpy-0.5}/docs/api/phasorpy.rst +0 -0
  63. {phasorpy-0.3 → phasorpy-0.5}/docs/api/plot.rst +0 -0
  64. {phasorpy-0.3 → phasorpy-0.5}/docs/api/utils.rst +0 -0
  65. {phasorpy-0.3 → phasorpy-0.5}/docs/code_of_conduct.rst +0 -0
  66. {phasorpy-0.3 → phasorpy-0.5}/docs/contributing.rst +0 -0
  67. {phasorpy-0.3 → phasorpy-0.5}/docs/phasor_approach.rst +0 -0
  68. {phasorpy-0.3 → phasorpy-0.5}/setup.cfg +0 -0
  69. {phasorpy-0.3 → phasorpy-0.5}/setup.py +0 -0
  70. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy/__init__.py +0 -0
  71. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy/__main__.py +0 -0
  72. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy/_typing.py +0 -0
  73. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy/py.typed +0 -0
  74. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy.egg-info/dependency_links.txt +0 -0
  75. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy.egg-info/entry_points.txt +0 -0
  76. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy.egg-info/not-zip-safe +0 -0
  77. {phasorpy-0.3 → phasorpy-0.5}/src/phasorpy.egg-info/top_level.txt +0 -0
  78. {phasorpy-0.3 → phasorpy-0.5}/tests/conftest.py +0 -0
  79. {phasorpy-0.3 → phasorpy-0.5}/tests/test__phasorpy.py +0 -0
  80. {phasorpy-0.3 → phasorpy-0.5}/tests/test__typing.py +0 -0
  81. {phasorpy-0.3 → phasorpy-0.5}/tests/test_cli.py +0 -0
  82. {phasorpy-0.3 → phasorpy-0.5}/tests/test_color.py +0 -0
  83. {phasorpy-0.3 → phasorpy-0.5}/tests/test_components.py +0 -0
  84. {phasorpy-0.3 → phasorpy-0.5}/tests/test_cursors.py +0 -0
  85. {phasorpy-0.3 → phasorpy-0.5}/tests/test_datasets.py +0 -0
  86. {phasorpy-0.3 → phasorpy-0.5}/tests/test_nan.py +0 -0
  87. {phasorpy-0.3 → phasorpy-0.5}/tests/test_phasorpy.py +0 -0
  88. {phasorpy-0.3 → phasorpy-0.5}/tutorials/README.rst +0 -0
  89. {phasorpy-0.3 → phasorpy-0.5}/tutorials/api/README.rst +0 -0
  90. {phasorpy-0.3 → phasorpy-0.5}/tutorials/api/phasorpy_lifetime_to_signal.py +0 -0
  91. {phasorpy-0.3 → phasorpy-0.5}/tutorials/api/phasorpy_pca.py +0 -0
  92. {phasorpy-0.3 → phasorpy-0.5}/tutorials/api/phasorpy_phasor_from_lifetime.py +0 -0
  93. {phasorpy-0.3 → phasorpy-0.5}/tutorials/applications/README.rst +0 -0
  94. {phasorpy-0.3 → phasorpy-0.5}/tutorials/benchmarks/README.rst +0 -0
  95. {phasorpy-0.3 → phasorpy-0.5}/tutorials/benchmarks/phasorpy_phasor_from_signal.py +0 -0
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2022-2024 PhasorPy Contributors
3
+ Copyright (c) 2022-2025 PhasorPy Contributors
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -12,6 +12,7 @@ recursive-include tutorials *.py
12
12
  recursive-include tutorials *.rst
13
13
 
14
14
  exclude *.cmd
15
+ exclude docs/sg_execution_times.rst
15
16
 
16
17
  recursive-exclude * __pycache__
17
18
  recursive-exclude * *.py[co]
@@ -1,9 +1,9 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: phasorpy
3
- Version: 0.3
3
+ Version: 0.5
4
4
  Summary: Analysis of fluorescence lifetime and hyperspectral images using the phasor approach
5
5
  Author: PhasorPy Contributors
6
- License: MIT
6
+ License-Expression: MIT
7
7
  Project-URL: Homepage, https://www.phasorpy.org
8
8
  Project-URL: Documentation, https://www.phasorpy.org/docs/stable/
9
9
  Project-URL: Download, https://pypi.org/project/phasorpy/#files
@@ -13,25 +13,24 @@ Project-URL: Release notes, https://www.phasorpy.org/docs/stable/release
13
13
  Classifier: Development Status :: 3 - Alpha
14
14
  Classifier: Intended Audience :: Developers
15
15
  Classifier: Intended Audience :: Science/Research
16
- Classifier: License :: OSI Approved :: MIT License
17
16
  Classifier: Programming Language :: Python
18
17
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
18
  Classifier: Operating System :: OS Independent
20
19
  Classifier: Programming Language :: Python :: 3
21
20
  Classifier: Programming Language :: Python :: 3 :: Only
22
- Classifier: Programming Language :: Python :: 3.10
23
21
  Classifier: Programming Language :: Python :: 3.11
24
22
  Classifier: Programming Language :: Python :: 3.12
25
23
  Classifier: Programming Language :: Python :: 3.13
26
- Requires-Python: >=3.10
24
+ Requires-Python: >=3.11
27
25
  Description-Content-Type: text/markdown
28
26
  License-File: LICENSE.txt
29
- Requires-Dist: numpy>=1.24.0
30
- Requires-Dist: matplotlib>=3.7.0
27
+ Requires-Dist: numpy>=1.25.0
28
+ Requires-Dist: matplotlib>=3.8.0
31
29
  Requires-Dist: scipy>=1.11.0
32
30
  Requires-Dist: click
33
31
  Requires-Dist: pooch
34
32
  Requires-Dist: tqdm
33
+ Requires-Dist: scikit-learn>=1.5.0
35
34
  Requires-Dist: xarray>=2023.4.0
36
35
  Requires-Dist: tifffile>=2024.8.30
37
36
  Provides-Extra: docs
@@ -42,16 +41,13 @@ Requires-Dist: sphinx-copybutton; extra == "docs"
42
41
  Requires-Dist: sphinx_click; extra == "docs"
43
42
  Requires-Dist: pydata-sphinx-theme>=0.16.0; extra == "docs"
44
43
  Requires-Dist: numpydoc; extra == "docs"
45
- Provides-Extra: test
46
- Requires-Dist: pytest; extra == "test"
47
- Requires-Dist: pytest-cov; extra == "test"
48
- Requires-Dist: pytest-runner; extra == "test"
49
- Requires-Dist: pytest-doctestplus; extra == "test"
50
- Requires-Dist: coverage; extra == "test"
51
44
  Provides-Extra: all
52
45
  Requires-Dist: lfdfiles>=2024.5.24; extra == "all"
53
46
  Requires-Dist: sdtfile>=2024.5.24; extra == "all"
54
47
  Requires-Dist: ptufile>=2024.9.14; extra == "all"
48
+ Requires-Dist: liffile>=2025.2.10; extra == "all"
49
+ Requires-Dist: pawflim; extra == "all"
50
+ Dynamic: license-file
55
51
 
56
52
  # PhasorPy
57
53
 
@@ -61,7 +57,7 @@ lifetime and hyperspectral images using the phasor approach.
61
57
  - [Homepage](https://www.phasorpy.org)
62
58
  - [Documentation](https://www.phasorpy.org/docs/stable/)
63
59
  - [Source code](https://github.com/phasorpy/phasorpy)
64
- - [Download releases](https://pypi.org/project/phasorpy/#files)
60
+ - [Install with pip](https://pypi.org/project/phasorpy/) or [conda](https://anaconda.org/conda-forge/phasorpy).
65
61
  - [Data files](https://zenodo.org/communities/phasorpy/)
66
62
  - [Issues and questions](https://github.com/phasorpy/phasorpy/issues)
67
63
 
@@ -6,7 +6,7 @@ lifetime and hyperspectral images using the phasor approach.
6
6
  - [Homepage](https://www.phasorpy.org)
7
7
  - [Documentation](https://www.phasorpy.org/docs/stable/)
8
8
  - [Source code](https://github.com/phasorpy/phasorpy)
9
- - [Download releases](https://pypi.org/project/phasorpy/#files)
9
+ - [Install with pip](https://pypi.org/project/phasorpy/) or [conda](https://anaconda.org/conda-forge/phasorpy).
10
10
  - [Data files](https://zenodo.org/communities/phasorpy/)
11
11
  - [Issues and questions](https://github.com/phasorpy/phasorpy/issues)
12
12
 
@@ -0,0 +1,23 @@
1
+ [
2
+ {
3
+ "name": "dev",
4
+ "version": "0.6",
5
+ "url": "https://www.phasorpy.org/docs/dev/"
6
+ },
7
+ {
8
+ "name": "0.5 (stable)",
9
+ "version": "0.5",
10
+ "url": "https://www.phasorpy.org/docs/stable/",
11
+ "preferred": true
12
+ },
13
+ {
14
+ "name": "0.4",
15
+ "version": "0.4",
16
+ "url": "https://www.phasorpy.org/docs/v0.4/"
17
+ },
18
+ {
19
+ "name": "0.3",
20
+ "version": "0.3",
21
+ "url": "https://www.phasorpy.org/docs/v0.3/"
22
+ }
23
+ ]
@@ -25,6 +25,7 @@ The following people (in alphabetical order) have contributed to the
25
25
  development of PhasorPy by providing code, documentation, tutorials,
26
26
  bug fixes, or expertise:
27
27
 
28
+ - :user:`Rodrigo Blanco <R-Blanco802>`
28
29
  - :user:`Christoph Gohlke <cgohlke>`
29
30
  - Enrico Gratton
30
31
  - :user:`Leonel Malacrida <lmalacrida>`
@@ -0,0 +1,5 @@
1
+ phasorpy.cluster
2
+ ----------------
3
+
4
+ .. automodule:: phasorpy.cluster
5
+ :members:
@@ -5,9 +5,8 @@ This documents the application programming and command line interfaces of the
5
5
  PhasorPy library version |version|.
6
6
 
7
7
  .. note::
8
- The PhasorPy library is in its early stages of development.
9
- It is not nearly feature complete.
10
- Large, backwards-incompatible changes may occur between revisions.
8
+ The PhasorPy library is still under construction. Backwards-incompatible
9
+ changes may occur between revisions.
11
10
 
12
11
  .. toctree::
13
12
  :maxdepth: 3
@@ -16,6 +15,7 @@ PhasorPy library version |version|.
16
15
  phasor
17
16
  cursors
18
17
  components
18
+ cluster
19
19
  plot
20
20
  io
21
21
  color
@@ -18,7 +18,7 @@ sphinx_gallery.gen_rst.EXAMPLE_HEADER = (
18
18
  # project information
19
19
 
20
20
  project = 'PhasorPy'
21
- copyright = '2022-2024 PhasorPy Contributors'
21
+ copyright = '2022-2025 PhasorPy Contributors'
22
22
  author = 'PhasorPy Contributors'
23
23
 
24
24
  import phasorpy
@@ -7,15 +7,10 @@ Welcome to the documentation of PhasorPy version |version|.
7
7
  PhasorPy is an open-source Python library for the analysis of fluorescence
8
8
  lifetime and hyperspectral images using the :doc:`phasor_approach`.
9
9
 
10
- .. note::
11
- The PhasorPy library is in its early stages of development.
12
- It is not nearly feature complete.
13
- Large, backwards-incompatible changes may occur between revisions.
14
-
15
10
  Quickstart
16
11
  ==========
17
12
 
18
- The :doc:`tutorials/index` demonstrate the use the library, from simple
13
+ The :doc:`tutorials/index` demonstrate the use of the library, from simple
19
14
  examples to advanced applications.
20
15
 
21
16
  The :doc:`api/index` contains detailed information about all functions and
@@ -40,7 +35,8 @@ The library's source code and documentation are maintained in the
40
35
  `PhasorPy repository on GitHub <https://github.com/phasorpy/phasorpy>`_.
41
36
 
42
37
  Releases can be downloaded and installed from the
43
- `PhasorPy project on PyPI <https://pypi.org/project/phasorpy/>`_.
38
+ `PhasorPy project on PyPI <https://pypi.org/project/phasorpy/>`_
39
+ or `conda-forge <https://anaconda.org/conda-forge/phasorpy>`_.
44
40
 
45
41
  Sample data files used in tutorials and testing are available from the
46
42
  `PhasorPy community on Zenodo <https://zenodo.org/communities/phasorpy>`_.
@@ -1,7 +1,7 @@
1
1
  MIT License
2
2
  ===========
3
3
 
4
- Copyright © 2022-2024 :ref:`PhasorPy Contributors <contributors>`
4
+ Copyright © 2022-2025 :ref:`PhasorPy Contributors <contributors>`
5
5
 
6
6
  Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  of this software and associated documentation files (the “Software”), to deal
@@ -6,18 +6,102 @@ a release. It includes descriptions of bug fixes, feature enhancements,
6
6
  documentation and maintenance changes.
7
7
 
8
8
  .. note::
9
- The PhasorPy library is in its early stages of development.
10
- It is not nearly feature complete.
11
- Large, backwards-incompatible changes may occur between revisions.
9
+ The PhasorPy library is still under construction. Backwards-incompatible
10
+ changes may occur between revisions.
11
+
12
+ 0.5 (2025.4.11)
13
+ ---------------
14
+
15
+ This is the fifth alpha release of the PhasorPy library.
16
+ It contains several bug fixes and improvements.
17
+ The new ``phasor_cluster_gmm`` function finds clusters in phasor coordinates
18
+ using a Gaussian mixture model.
19
+ The ``phasor_filter_pawflim`` function applies a wavelet filter using the
20
+ pawFLIM library.
21
+ This release supports Python 3.11 to 3.13. Python 3.10 is no longer supported.
22
+
23
+ What's Changed
24
+ ..............
25
+
26
+ * Bump version by @cgohlke in https://github.com/phasorpy/phasorpy/pull/183
27
+ * Bug Fix for phasor_calibrate when skipping axes with harmonic axis by @bruno-pannunzio in https://github.com/phasorpy/phasorpy/pull/185
28
+ * Fixes for liffile 2025.2.6 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/184
29
+ * Fix phasor_normalize with numpy 1.24 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/186
30
+ * Add pawFLIM wavelet filter for phasor coordinates by @bruno-pannunzio in https://github.com/phasorpy/phasorpy/pull/167
31
+ * Add dataset from zenodo.org/records/14860228 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/187
32
+ * Improve support for Leica image files by @cgohlke in https://github.com/phasorpy/phasorpy/pull/188
33
+ * Remove notes about early stage of development by @cgohlke in https://github.com/phasorpy/phasorpy/pull/189
34
+ * Add plot_histograms function by @cgohlke in https://github.com/phasorpy/phasorpy/pull/191
35
+ * Fix NaN padding in phasor_to_simfcs_referenced by @cgohlke in https://github.com/phasorpy/phasorpy/pull/192
36
+ * Return more metadata from IFLI and FBD readers by @cgohlke in https://github.com/phasorpy/phasorpy/pull/193
37
+ * Add more formats to file I/O tutorial by @cgohlke in https://github.com/phasorpy/phasorpy/pull/194
38
+ * Fix module attribute of functions in phasorpy.io by @cgohlke in https://github.com/phasorpy/phasorpy/pull/195
39
+ * Add plot_image helper function by @cgohlke in https://github.com/phasorpy/phasorpy/pull/196
40
+ * Add section on other means to IO tutorial by @cgohlke in https://github.com/phasorpy/phasorpy/pull/197
41
+ * Bump pypa/cibuildwheel from 2.22.0 to 2.23.0 in the github-actions group by @dependabot in https://github.com/phasorpy/phasorpy/pull/198
42
+ * Improve IO tutorial by @cgohlke in https://github.com/phasorpy/phasorpy/pull/199
43
+ * Fix minor issues found by GitHub Copilot by @cgohlke in https://github.com/phasorpy/phasorpy/pull/202
44
+ * Move parse_skip_axis function to _utils module by @cgohlke in https://github.com/phasorpy/phasorpy/pull/203
45
+ * Fix new mypy errors with numpy 2.2.4 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/204
46
+ * Raise minimum requirements by @cgohlke in https://github.com/phasorpy/phasorpy/pull/208
47
+ * Add phasor_cluster_gmm function by @R-Blanco802 in https://github.com/phasorpy/phasorpy/pull/201
48
+ * Require scikit-learn>=1.5.0 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/209
49
+ * Support routing channels in signal_from_sdt by @cgohlke in https://github.com/phasorpy/phasorpy/pull/210
50
+ * Improve tests and documentation of phasor_cluster_gmm by @cgohlke in https://github.com/phasorpy/phasorpy/pull/211
51
+ * Ignore PhasorPlot.contour cmap if colors is set by @cgohlke in https://github.com/phasorpy/phasorpy/pull/213
52
+ * Bump pypa/cibuildwheel from 2.23.1 to 2.23.2 in the github-actions group by @dependabot in https://github.com/phasorpy/phasorpy/pull/214
53
+ * Update Ubuntu version by @cgohlke in https://github.com/phasorpy/phasorpy/pull/219
54
+ * Require Cython>=3.1.0b1 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/216
55
+ * Add PTU file exported from FLIM_testdata.lif with photon filter by @cgohlke in https://github.com/phasorpy/phasorpy/pull/217
56
+ * Fix multi-channel FLIM LABS files containing single-channel phasors by @cgohlke in https://github.com/phasorpy/phasorpy/pull/218
57
+ * Release v0.5 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/220
58
+
59
+ ## New Contributors
60
+ * @R-Blanco802 made their first contribution in https://github.com/phasorpy/phasorpy/pull/201
61
+
62
+ **Full Changelog**: https://github.com/phasorpy/phasorpy/compare/v0.4...v0.5
63
+
64
+ 0.4 (2025.1.30)
65
+ ---------------
66
+
67
+ This is the fourth alpha release of the PhasorPy library.
68
+ It contains several bug fixes and many improvements, mostly to the
69
+ ``phasorpy.io`` module.
70
+ File reader functions are now named ``signal_from_*`` or ``phasor_from_*``
71
+ and have a more consistent API.
72
+ Point mode PTU files, LIF files containing phasor coordinates or hyperspectral
73
+ signals, and FLIM LABS JSON files are supported.
74
+ PhasorPy releases are now available on conda-forge.
75
+ This release supports Python 3.10 to 3.13.
76
+
77
+ What's Changed
78
+ ..............
79
+
80
+ * Bump version by @cgohlke in https://github.com/phasorpy/phasorpy/pull/163
81
+ * Support labelled signal axes by @cgohlke in https://github.com/phasorpy/phasorpy/pull/166
82
+ * Update copyright year by @cgohlke in https://github.com/phasorpy/phasorpy/pull/168
83
+ * Return array coordinates from files in normal units by @cgohlke in https://github.com/phasorpy/phasorpy/pull/169
84
+ * Document availability on conda-forge by @cgohlke in https://github.com/phasorpy/phasorpy/pull/170
85
+ * Fix RST code is two backticks by @cgohlke in https://github.com/phasorpy/phasorpy/pull/171
86
+ * Support reading point mode PTU files by @cgohlke in https://github.com/phasorpy/phasorpy/pull/172
87
+ * Fix phasor_calibrate for handling higher harmonics than size of first dimension of reference_real by @bruno-pannunzio in https://github.com/phasorpy/phasorpy/pull/176
88
+ * Improve io module by @cgohlke in https://github.com/phasorpy/phasorpy/pull/177
89
+ * Add support for Leica LIF files by @cgohlke in https://github.com/phasorpy/phasorpy/pull/178
90
+ * Add support for new FLIM LABS JSON format by @cgohlke in https://github.com/phasorpy/phasorpy/pull/179
91
+ * Reformat with black 25.1 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/180
92
+ * Release v0.4 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/181
93
+ * Fixes for liffile 2025.1.30 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/182
94
+
95
+ **Full Changelog**: https://github.com/phasorpy/phasorpy/compare/v0.3...v0.4
12
96
 
13
97
  0.3 (2024.12.16)
14
98
  ----------------
15
99
 
16
100
  This is the third alpha release of the PhasorPy library.
17
- It fixes the averaging of phasor coordinates in the `phasor_center` and
18
- `phasor_calibrate` functions, replaces the `phasor_filter` function
19
- with `phasor_filter_median`, adds support for multiple harmonics to
20
- `phasor_threshold`, and adds the `real_imspector_tiff` function to read
101
+ It fixes the averaging of phasor coordinates in the ``phasor_center`` and
102
+ ``phasor_calibrate`` functions, replaces the ``phasor_filter`` function
103
+ with ``phasor_filter_median``, adds support for multiple harmonics to
104
+ ``phasor_threshold``, and adds the ``read_imspector_tiff`` function to read
21
105
  ImSpector FLIM TIFF files. This release supports Python 3.10 to 3.13.
22
106
 
23
107
  What's Changed
@@ -2,7 +2,7 @@
2
2
  requires = [
3
3
  "setuptools>=68",
4
4
  "numpy",
5
- "Cython>=3.0.11",
5
+ "cython>=3.1.0b1",
6
6
  ]
7
7
  build-backend = "setuptools.build_meta"
8
8
 
@@ -14,36 +14,35 @@ dynamic = ["version"]
14
14
  dependencies = [
15
15
  # sync with requirements_min.txt
16
16
  # https://scientific-python.org/specs/spec-0000/
17
- "numpy>=1.24.0",
18
- "matplotlib>=3.7.0",
17
+ "numpy>=1.25.0",
18
+ "matplotlib>=3.8.0",
19
19
  "scipy>=1.11.0",
20
20
  "click",
21
21
  "pooch",
22
22
  "tqdm",
23
- # "scikit-image>=0.20.0",
24
- # "scikit-learn>=1.2.2",
25
- # "pandas>=2.0.0",
23
+ "scikit-learn>=1.5.0",
24
+ # "scikit-image>=0.21.0",
25
+ # "pandas>=2.1.0",
26
26
  "xarray>=2023.4.0",
27
27
  "tifffile>=2024.8.30",
28
28
  ]
29
- requires-python = ">=3.10"
29
+ requires-python = ">=3.11"
30
30
  classifiers = [
31
31
  "Development Status :: 3 - Alpha",
32
32
  "Intended Audience :: Developers",
33
33
  "Intended Audience :: Science/Research",
34
- "License :: OSI Approved :: MIT License",
35
34
  "Programming Language :: Python",
36
35
  "Topic :: Software Development :: Libraries :: Python Modules",
37
36
  "Operating System :: OS Independent",
38
37
  "Programming Language :: Python :: 3",
39
38
  "Programming Language :: Python :: 3 :: Only",
40
- "Programming Language :: Python :: 3.10",
41
39
  "Programming Language :: Python :: 3.11",
42
40
  "Programming Language :: Python :: 3.12",
43
41
  "Programming Language :: Python :: 3.13",
44
42
  ]
45
43
  authors = [{ name = "PhasorPy Contributors" }]
46
- license = { text = "MIT" }
44
+ license = "MIT"
45
+ license-files = ["LICENSE.txt"]
47
46
 
48
47
  [project.urls]
49
48
  Homepage = "https://www.phasorpy.org"
@@ -66,23 +65,15 @@ docs = [
66
65
  "pydata-sphinx-theme>=0.16.0",
67
66
  "numpydoc",
68
67
  ]
69
- test = [
70
- "pytest",
71
- "pytest-cov",
72
- "pytest-runner",
73
- "pytest-doctestplus",
74
- "coverage",
75
- ]
76
68
  all = [
77
69
  "lfdfiles>=2024.5.24",
78
70
  "sdtfile>=2024.5.24",
79
71
  "ptufile>=2024.9.14",
72
+ "liffile>=2025.2.10",
73
+ "pawflim",
80
74
  ]
81
75
 
82
76
  [tool.setuptools]
83
- package-dir = { "" = "src" }
84
- packages = ["phasorpy"]
85
- license-files = ["LICENSE.txt"]
86
77
  zip-safe = false
87
78
 
88
79
  [tool.setuptools.dynamic]
@@ -122,7 +113,7 @@ disable = [
122
113
 
123
114
  [tool.black]
124
115
  line-length = 79
125
- target-version = ["py310"]
116
+ target-version = ["py311"]
126
117
  skip-string-normalization = true
127
118
 
128
119
  [tool.isort]
@@ -142,14 +133,15 @@ strict = true
142
133
  warn_unreachable = true
143
134
 
144
135
  [[tool.mypy.overrides]]
145
- module = ["phasorpy._phasorpy", "pooch.*", "scipy.*", "mkl_fft.*"]
136
+ module = ["phasorpy._phasorpy", "pooch.*", "scipy.*", "mkl_fft.*", "sklearn.*"]
146
137
  ignore_missing_imports = true
147
138
 
148
139
  [tool.coverage.run]
149
140
  plugins = ["Cython.Coverage"]
141
+ omit = ["conftest.py", "__main__.py"]
150
142
 
151
143
  [tool.coverage.report]
152
- exclude_lines = ["pragma: no cover", "pragma: ${PY_MAJOR_VERSION} no cover"]
144
+ exclude_lines = ["if TYPE_CHECKING:", "plot.show()", "pragma: no cover", "pragma: ${PY_MAJOR_VERSION} no cover"]
153
145
 
154
146
  [tool.coverage.html]
155
147
  directory = "_htmlcov"
@@ -159,7 +151,7 @@ minversion = "7"
159
151
  log_cli_level = "INFO"
160
152
  # filterwarnings = ["error"] # breaks debugging tests in VSCode (Sept. 2024)
161
153
  xfail_strict = true
162
- addopts = "-rfEXs --strict-config --strict-markers --doctest-modules --doctest-glob=*.py --doctest-glob=*.rst"
154
+ addopts = "-rfEXs --strict-config --strict-markers --doctest-modules --doctest-glob=*.py --doctest-glob=*.rst --ignore=src/phasorpy/_io.py"
163
155
  doctest_optionflags = [
164
156
  "NORMALIZE_WHITESPACE",
165
157
  "ELLIPSIS",
@@ -186,6 +178,6 @@ norecursedirs = [
186
178
  ]
187
179
 
188
180
  [tool.cibuildwheel]
189
- skip = "pp* cp37* cp38* cp39* *musllinux* *i686 *ppc64le *s390x cp39*win*arm64 cp310*win*arm64"
190
- test-requires = ["lfdfiles", "sdtfile", "ptufile", "pytest", "pytest-cov", "pytest-runner", "pytest-doctestplus", "coverage"]
181
+ skip = "pp* cp37* cp38* cp39* cp310* *musllinux* *i686 *ppc64le *s390x cp39*win*arm64"
182
+ test-requires = ["scikit-learn", "lfdfiles", "sdtfile", "ptufile", "liffile", "pawflim", "pytest", "pytest-cov", "pytest-runner", "pytest-doctestplus", "coverage"]
191
183
  test-command = "pytest {project}/tests"