phasorpy 0.9__tar.gz → 0.10__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 (129) hide show
  1. {phasorpy-0.9 → phasorpy-0.10}/PKG-INFO +8 -6
  2. {phasorpy-0.9 → phasorpy-0.10}/README.md +1 -1
  3. phasorpy-0.10/docs/_static/switcher.json +18 -0
  4. {phasorpy-0.9 → phasorpy-0.10}/docs/acknowledgments.rst +1 -1
  5. {phasorpy-0.9 → phasorpy-0.10}/docs/conf.py +2 -0
  6. {phasorpy-0.9 → phasorpy-0.10}/docs/contributing.rst +1 -1
  7. {phasorpy-0.9 → phasorpy-0.10}/docs/phasor_approach.rst +17 -8
  8. {phasorpy-0.9 → phasorpy-0.10}/pyproject.toml +34 -18
  9. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/__init__.py +1 -1
  10. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/_phasorpy.pyx +255 -105
  11. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/_utils.py +24 -29
  12. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/cli.py +5 -2
  13. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/cluster.py +18 -1
  14. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/component.py +381 -14
  15. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/cursor.py +15 -8
  16. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/datasets.py +16 -4
  17. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/filter.py +525 -28
  18. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/io/__init__.py +12 -9
  19. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/io/_flimlabs.py +17 -6
  20. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/io/_leica.py +12 -9
  21. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/io/_ometiff.py +12 -6
  22. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/io/_other.py +105 -16
  23. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/io/_simfcs.py +14 -12
  24. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/lifetime.py +143 -58
  25. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/phasor.py +16 -14
  26. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/plot/_functions.py +16 -15
  27. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/plot/_lifetime_plots.py +18 -20
  28. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/plot/_phasorplot.py +26 -16
  29. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/plot/_phasorplot_fret.py +18 -17
  30. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/utils.py +14 -13
  31. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy.egg-info/PKG-INFO +8 -6
  32. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy.egg-info/SOURCES.txt +1 -0
  33. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy.egg-info/requires.txt +7 -3
  34. {phasorpy-0.9 → phasorpy-0.10}/tests/io/_conftest.py +2 -2
  35. {phasorpy-0.9 → phasorpy-0.10}/tests/io/test_other.py +24 -0
  36. {phasorpy-0.9 → phasorpy-0.10}/tests/io/test_simfcs.py +4 -4
  37. {phasorpy-0.9 → phasorpy-0.10}/tests/test__phasorpy.py +27 -0
  38. {phasorpy-0.9 → phasorpy-0.10}/tests/test__utils.py +0 -7
  39. {phasorpy-0.9 → phasorpy-0.10}/tests/test_cluster.py +13 -0
  40. {phasorpy-0.9 → phasorpy-0.10}/tests/test_component.py +186 -0
  41. {phasorpy-0.9 → phasorpy-0.10}/tests/test_cursor.py +5 -0
  42. {phasorpy-0.9 → phasorpy-0.10}/tests/test_filter.py +334 -27
  43. {phasorpy-0.9 → phasorpy-0.10}/tests/test_lifetime.py +100 -6
  44. {phasorpy-0.9 → phasorpy-0.10}/tests/test_phasor.py +4 -4
  45. {phasorpy-0.9 → phasorpy-0.10}/tools/sha256.py +3 -3
  46. {phasorpy-0.9 → phasorpy-0.10}/tutorials/api/phasorpy_component.py +2 -2
  47. {phasorpy-0.9 → phasorpy-0.10}/tutorials/api/phasorpy_filter.py +145 -27
  48. {phasorpy-0.9 → phasorpy-0.10}/tutorials/api/phasorpy_io.py +34 -15
  49. {phasorpy-0.9 → phasorpy-0.10}/tutorials/api/phasorpy_lifetime_to_signal.py +36 -12
  50. phasorpy-0.10/tutorials/applications/phasorpy_nadh_concentration.py +432 -0
  51. {phasorpy-0.9 → phasorpy-0.10}/tutorials/misc/phasorpy_logo.py +8 -9
  52. {phasorpy-0.9 → phasorpy-0.10}/tutorials/phasorpy_lfd_workshop.py +1 -1
  53. phasorpy-0.9/docs/_static/switcher.json +0 -23
  54. {phasorpy-0.9 → phasorpy-0.10}/LICENSE.txt +0 -0
  55. {phasorpy-0.9 → phasorpy-0.10}/MANIFEST.in +0 -0
  56. {phasorpy-0.9 → phasorpy-0.10}/docs/_static/categorical.png +0 -0
  57. {phasorpy-0.9 → phasorpy-0.10}/docs/_static/custom-icons.js +0 -0
  58. {phasorpy-0.9 → phasorpy-0.10}/docs/_static/favicon.ico +0 -0
  59. {phasorpy-0.9 → phasorpy-0.10}/docs/_static/phasorpy_logo.png +0 -0
  60. {phasorpy-0.9 → phasorpy-0.10}/docs/_static/phasorpy_logo.svg +0 -0
  61. {phasorpy-0.9 → phasorpy-0.10}/docs/_static/srgb_spectrum.png +0 -0
  62. {phasorpy-0.9 → phasorpy-0.10}/docs/api/_phasorpy.rst +0 -0
  63. {phasorpy-0.9 → phasorpy-0.10}/docs/api/_utils.rst +0 -0
  64. {phasorpy-0.9 → phasorpy-0.10}/docs/api/cli.rst +0 -0
  65. {phasorpy-0.9 → phasorpy-0.10}/docs/api/cluster.rst +0 -0
  66. {phasorpy-0.9 → phasorpy-0.10}/docs/api/color.rst +0 -0
  67. {phasorpy-0.9 → phasorpy-0.10}/docs/api/component.rst +0 -0
  68. {phasorpy-0.9 → phasorpy-0.10}/docs/api/cursor.rst +0 -0
  69. {phasorpy-0.9 → phasorpy-0.10}/docs/api/datasets.rst +0 -0
  70. {phasorpy-0.9 → phasorpy-0.10}/docs/api/experimental.rst +0 -0
  71. {phasorpy-0.9 → phasorpy-0.10}/docs/api/filter.rst +0 -0
  72. {phasorpy-0.9 → phasorpy-0.10}/docs/api/index.rst +0 -0
  73. {phasorpy-0.9 → phasorpy-0.10}/docs/api/io.rst +0 -0
  74. {phasorpy-0.9 → phasorpy-0.10}/docs/api/lifetime.rst +0 -0
  75. {phasorpy-0.9 → phasorpy-0.10}/docs/api/phasor.rst +0 -0
  76. {phasorpy-0.9 → phasorpy-0.10}/docs/api/phasorpy.rst +0 -0
  77. {phasorpy-0.9 → phasorpy-0.10}/docs/api/plot.rst +0 -0
  78. {phasorpy-0.9 → phasorpy-0.10}/docs/api/utils.rst +0 -0
  79. {phasorpy-0.9 → phasorpy-0.10}/docs/code_of_conduct.rst +0 -0
  80. {phasorpy-0.9 → phasorpy-0.10}/docs/index.rst +0 -0
  81. {phasorpy-0.9 → phasorpy-0.10}/docs/license.rst +0 -0
  82. {phasorpy-0.9 → phasorpy-0.10}/setup.cfg +0 -0
  83. {phasorpy-0.9 → phasorpy-0.10}/setup.py +0 -0
  84. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/__main__.py +0 -0
  85. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/_typing.py +0 -0
  86. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/color.py +0 -0
  87. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/conftest.py +0 -0
  88. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/experimental.py +0 -0
  89. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/plot/__init__.py +0 -0
  90. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy/py.typed +0 -0
  91. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy.egg-info/dependency_links.txt +0 -0
  92. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy.egg-info/entry_points.txt +0 -0
  93. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy.egg-info/not-zip-safe +0 -0
  94. {phasorpy-0.9 → phasorpy-0.10}/src/phasorpy.egg-info/top_level.txt +0 -0
  95. {phasorpy-0.9 → phasorpy-0.10}/tests/conftest.py +0 -0
  96. {phasorpy-0.9 → phasorpy-0.10}/tests/io/test_flimlabs.py +0 -0
  97. {phasorpy-0.9 → phasorpy-0.10}/tests/io/test_leica.py +0 -0
  98. {phasorpy-0.9 → phasorpy-0.10}/tests/io/test_ometiff.py +0 -0
  99. {phasorpy-0.9 → phasorpy-0.10}/tests/plot/test_functions.py +0 -0
  100. {phasorpy-0.9 → phasorpy-0.10}/tests/plot/test_lifetime_plots.py +0 -0
  101. {phasorpy-0.9 → phasorpy-0.10}/tests/plot/test_phasorplot.py +0 -0
  102. {phasorpy-0.9 → phasorpy-0.10}/tests/plot/test_phasorplot_fret.py +0 -0
  103. {phasorpy-0.9 → phasorpy-0.10}/tests/test__typing.py +0 -0
  104. {phasorpy-0.9 → phasorpy-0.10}/tests/test_cli.py +0 -0
  105. {phasorpy-0.9 → phasorpy-0.10}/tests/test_color.py +0 -0
  106. {phasorpy-0.9 → phasorpy-0.10}/tests/test_datasets.py +0 -0
  107. {phasorpy-0.9 → phasorpy-0.10}/tests/test_experimental.py +0 -0
  108. {phasorpy-0.9 → phasorpy-0.10}/tests/test_nan.py +0 -0
  109. {phasorpy-0.9 → phasorpy-0.10}/tests/test_phasorpy.py +0 -0
  110. {phasorpy-0.9 → phasorpy-0.10}/tests/test_utils.py +0 -0
  111. {phasorpy-0.9 → phasorpy-0.10}/tools/build_manylinux.cmd +0 -0
  112. {phasorpy-0.9 → phasorpy-0.10}/tools/build_manylinux.sh +0 -0
  113. {phasorpy-0.9 → phasorpy-0.10}/tutorials/README.rst +0 -0
  114. {phasorpy-0.9 → phasorpy-0.10}/tutorials/api/README.rst +0 -0
  115. {phasorpy-0.9 → phasorpy-0.10}/tutorials/api/phasorpy_cursor.py +0 -0
  116. {phasorpy-0.9 → phasorpy-0.10}/tutorials/api/phasorpy_fret.py +0 -0
  117. {phasorpy-0.9 → phasorpy-0.10}/tutorials/api/phasorpy_multi_harmonic.py +0 -0
  118. {phasorpy-0.9 → phasorpy-0.10}/tutorials/api/phasorpy_pca.py +0 -0
  119. {phasorpy-0.9 → phasorpy-0.10}/tutorials/api/phasorpy_phasor_from_lifetime.py +0 -0
  120. {phasorpy-0.9 → phasorpy-0.10}/tutorials/api/phasorpy_phasorplot.py +0 -0
  121. {phasorpy-0.9 → phasorpy-0.10}/tutorials/applications/README.rst +0 -0
  122. {phasorpy-0.9 → phasorpy-0.10}/tutorials/applications/phasorpy_component_fit.py +0 -0
  123. {phasorpy-0.9 → phasorpy-0.10}/tutorials/applications/phasorpy_fret_efficiency.py +0 -0
  124. {phasorpy-0.9 → phasorpy-0.10}/tutorials/applications/phasorpy_multidimensional.py +0 -0
  125. {phasorpy-0.9 → phasorpy-0.10}/tutorials/misc/README.rst +0 -0
  126. {phasorpy-0.9 → phasorpy-0.10}/tutorials/misc/phasorpy_apps.py +0 -0
  127. {phasorpy-0.9 → phasorpy-0.10}/tutorials/misc/phasorpy_phasor_from_signal.py +0 -0
  128. {phasorpy-0.9 → phasorpy-0.10}/tutorials/phasorpy_introduction.py +0 -0
  129. {phasorpy-0.9 → phasorpy-0.10}/tutorials/phasorpy_lifetime_geometry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: phasorpy
3
- Version: 0.9
3
+ Version: 0.10
4
4
  Summary: Analysis of luminescence lifetime and hyperspectral images using the phasor approach
5
5
  Author: PhasorPy Contributors
6
6
  License-Expression: MIT
@@ -10,7 +10,7 @@ Project-URL: Download, https://pypi.org/project/phasorpy/#files
10
10
  Project-URL: Source code, https://github.com/phasorpy/phasorpy
11
11
  Project-URL: Issue tracker, https://github.com/phasorpy/phasorpy/issues
12
12
  Project-URL: Release notes, https://www.phasorpy.org/docs/stable/release
13
- Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Development Status :: 4 - Beta
14
14
  Classifier: Intended Audience :: Developers
15
15
  Classifier: Intended Audience :: Science/Research
16
16
  Classifier: Programming Language :: Python
@@ -24,26 +24,28 @@ Classifier: Programming Language :: Python :: 3.14
24
24
  Requires-Python: >=3.12
25
25
  Description-Content-Type: text/markdown
26
26
  License-File: LICENSE.txt
27
- Requires-Dist: numpy>=2.0.0
27
+ Requires-Dist: numpy>=2.1.0
28
28
  Requires-Dist: matplotlib>=3.9.0
29
- Requires-Dist: pandas>=2.2.0
29
+ Requires-Dist: pandas>=2.3.0
30
30
  Requires-Dist: scikit-learn>=1.5.0
31
- Requires-Dist: scipy>=1.13.0
31
+ Requires-Dist: scipy>=1.14.0
32
32
  Requires-Dist: tifffile>=2024.8.30
33
33
  Requires-Dist: xarray>=2024.6.0
34
34
  Requires-Dist: click
35
35
  Requires-Dist: pooch
36
36
  Requires-Dist: tqdm
37
37
  Provides-Extra: all
38
+ Requires-Dist: czifile>=2026.4.11; extra == "all"
38
39
  Requires-Dist: fbdfile>=2025.9.18; extra == "all"
39
40
  Requires-Dist: lfdfiles>=2024.5.24; extra == "all"
40
41
  Requires-Dist: liffile>=2025.2.10; extra == "all"
41
42
  Requires-Dist: ptufile>=2024.9.14; extra == "all"
42
43
  Requires-Dist: sdtfile>=2024.5.24; extra == "all"
43
44
  Requires-Dist: pawflim>=1.0.4; extra == "all"
45
+ Requires-Dist: imagecodecs==2026.3.6; (sys_platform == "darwin" and platform_machine == "x86_64") and extra == "all"
44
46
  Dynamic: license-file
45
47
 
46
- # <img src="docs/_static/phasorpy_logo.svg" alt="PhasorPy" width="48" height="48" align="left"> PhasorPy
48
+ # <img src="https://www.phasorpy.org/_static/phasorpy_logo.svg" alt="&#x25CB;" width="48" height="48" align="left"/> PhasorPy
47
49
 
48
50
  PhasorPy is an open-source Python library for the analysis of luminescence
49
51
  lifetime and hyperspectral images using the phasor approach.
@@ -1,4 +1,4 @@
1
- # <img src="docs/_static/phasorpy_logo.svg" alt="PhasorPy" width="48" height="48" align="left"> PhasorPy
1
+ # <img src="https://www.phasorpy.org/_static/phasorpy_logo.svg" alt="&#x25CB;" width="48" height="48" align="left"/> PhasorPy
2
2
 
3
3
  PhasorPy is an open-source Python library for the analysis of luminescence
4
4
  lifetime and hyperspectral images using the phasor approach.
@@ -0,0 +1,18 @@
1
+ [
2
+ {
3
+ "name": "dev",
4
+ "version": "0.11",
5
+ "url": "https://www.phasorpy.org/docs/dev/"
6
+ },
7
+ {
8
+ "name": "0.10 (stable)",
9
+ "version": "0.10",
10
+ "url": "https://www.phasorpy.org/docs/stable/",
11
+ "preferred": true
12
+ },
13
+ {
14
+ "name": "0.9",
15
+ "version": "0.9",
16
+ "url": "https://www.phasorpy.org/docs/v0.9/"
17
+ }
18
+ ]
@@ -8,7 +8,7 @@ at the University of the Republic and Institut Pasteur de Montevideo, and the
8
8
  at the University of California, Irvine.
9
9
 
10
10
  PhasorPy was inspired by the
11
- `Globals for Images · SimFCS <https://www.lfd.uci.edu/globals/>`_ software by
11
+ `Globals for Images - SimFCS <https://www.lfd.uci.edu/globals/>`_ software by
12
12
  Enrico Gratton.
13
13
 
14
14
  This software project was supported in part by the
@@ -65,6 +65,7 @@ html_theme = 'pydata_sphinx_theme'
65
65
  html_static_path = ['_static']
66
66
  html_js_files = ['custom-icons.js']
67
67
  html_show_sourcelink = False
68
+ html_sidebars = {'**': ['sidebar-nav-bs']}
68
69
 
69
70
  html_title = f'PhasorPy {version} documentation'
70
71
  html_logo = '_static/phasorpy_logo.svg'
@@ -164,6 +165,7 @@ class TutorialOrder:
164
165
  # applications
165
166
  'component_fit',
166
167
  'fret_efficiency',
168
+ 'nadh_concentration',
167
169
  'multidimensional',
168
170
  # misc
169
171
  'logo',
@@ -205,7 +205,7 @@ static type checker::
205
205
 
206
206
 
207
207
  The PhasorPy project follows the Scientific Python
208
- `SPEC 0 Minimum Supported Dependencies
208
+ `SPEC 0 - Minimum Supported Dependencies
209
209
  <https://scientific-python.org/specs/spec-0000/>`_ recommendation
210
210
  for Python, NumPy, and other dependencies.
211
211
 
@@ -1,14 +1,14 @@
1
1
  Phasor approach
2
2
  ===============
3
3
 
4
- The phasor approach to fluorescence lifetime imaging, and more recently
4
+ "The phasor approach to fluorescence lifetime imaging, and more recently
5
5
  hyperspectral fluorescence imaging, has increased the use of these
6
6
  techniques, and improved the ease and intuitiveness of the data analysis.
7
7
  The fit-free nature of the phasor plots increases the speed of the analysis
8
8
  and reduces the dimensionality, optimization of data handling and storage.
9
- The reciprocity principle between the real and imaginary spacewhere the
9
+ The reciprocity principle between the real and imaginary space--where the
10
10
  phasor and the pixel that the phasor originated from are linked and can be
11
- converted from one anotherhas helped the expansion of this method.
11
+ converted from one another--has helped the expansion of this method.
12
12
  The phasor coordinates calculated from a pixel, where multiple fluorescent
13
13
  species are present, depends on the phasor positions of those components.
14
14
  The relative positions are governed by the linear combination properties of
@@ -21,7 +21,7 @@ the total fluorescence from that image pixel.
21
21
  The higher the fractional intensity contribution of a vertex, the closer is
22
22
  the resultant phasor. The linear additivity in the phasor space can be
23
23
  exploited to obtain the fractional intensity contribution from multiple
24
- species and quantify their contribution.”
24
+ species and quantify their contribution."
25
25
  (quoted from :ref:`Malacrida et al., 2021 <malacrida-2021>`)
26
26
 
27
27
  The following resources provide an overview of the history, theory,
@@ -168,7 +168,8 @@ approach to analyze fluorescence time-resolved or spectral images:
168
168
  - :ref:`Napari-phasors <napari_phasors>`,
169
169
  :ref:`Napari-flim-phasor-plotter <napari_flim_phasor_plotter>`,
170
170
  :ref:`Napari-live-flim <napari_live_flim>`,
171
- :ref:`FLOPA <flopa>`
171
+ :ref:`FLOPA <flopa>`,
172
+ :ref:`FLIMari <flimari>`
172
173
  * - **ImageJ**
173
174
  - :ref:`Spectral/Time Gated Phasor PlugIns <phasor_plugins>`
174
175
  * - **Matlab**
@@ -189,7 +190,7 @@ Details:
189
190
  -
190
191
  .. _simfcs:
191
192
 
192
- `Globals for Images · SimFCS <https://www.lfd.uci.edu/globals/>`__
193
+ `Globals for Images - SimFCS <https://www.lfd.uci.edu/globals/>`__
193
194
  is a free, closed-source, Windows desktop application for fluorescence image
194
195
  analysis, visualization, simulation, and acquisition.
195
196
  The software was developed by Enrico Gratton during 1998-2022 at the
@@ -228,6 +229,14 @@ Details:
228
229
  is a napari plugin for FLIM data opening, processing and analysis.
229
230
  The plugin is distributed under the GPLv3 license.
230
231
 
232
+ -
233
+
234
+ .. _flimari:
235
+
236
+ `FLIMari <https://github.com/GuangchenW/FLIMari>`__
237
+ is a napari plugin for FLIM analysis. It provides an interactive,
238
+ phasor-based lifetime visualization and analysis pipeline.
239
+ The plugin is distributed under the MIT license.
231
240
  -
232
241
  .. _hysp:
233
242
 
@@ -314,9 +323,9 @@ Details:
314
323
  -
315
324
  .. _phasor_plugins:
316
325
 
317
- `Spectral Phasor PlugIn <http://spechron.com/Spectral%20Phasor-Download.aspx>`__
326
+ `Spectral Phasor PlugIn <https://web.archive.org/web/20250621131318/http://spechron.com/Spectral%20Phasor-Introduction.aspx>`__
318
327
  and
319
- `Time Gated Phasor PlugIn <http://spechron.com/Time%20gated%20Phasor-Download.aspx>`__
328
+ `Time Gated Phasor PlugIn <https://web.archive.org/web/20240910041344/http://spechron.com/Time%20gated%20Phasor%20Introduction.aspx>`__
320
329
  are open-source ImageJ plugins by Farzad Fereidouni, which provide
321
330
  visualization, segmentation, and unmixing of time-resolved and spectral
322
331
  images using the phasor approach. The software is distributed under an
@@ -1,8 +1,8 @@
1
1
  [build-system]
2
2
  requires = [
3
3
  "setuptools>=68",
4
- "numpy>=2.0.0",
5
- "cython>=3.2.2",
4
+ "numpy>=2.1.0",
5
+ "cython>=3.2.4",
6
6
  ]
7
7
  build-backend = "setuptools.build_meta"
8
8
 
@@ -14,12 +14,12 @@ dynamic = ["version"]
14
14
  dependencies = [
15
15
  # sync with [dependency-groups.run]
16
16
  # https://scientific-python.org/specs/spec-0000/
17
- "numpy>=2.0.0",
17
+ "numpy>=2.1.0",
18
18
  "matplotlib>=3.9.0",
19
- "pandas>=2.2.0",
20
- # "scikit-image>=0.23.0",
19
+ "pandas>=2.3.0",
20
+ # "scikit-image>=0.24.0",
21
21
  "scikit-learn>=1.5.0",
22
- "scipy>=1.13.0",
22
+ "scipy>=1.14.0",
23
23
  "tifffile>=2024.8.30",
24
24
  "xarray>=2024.6.0",
25
25
  "click",
@@ -28,7 +28,7 @@ dependencies = [
28
28
  ]
29
29
  requires-python = ">=3.12"
30
30
  classifiers = [
31
- "Development Status :: 3 - Alpha",
31
+ "Development Status :: 4 - Beta",
32
32
  "Intended Audience :: Developers",
33
33
  "Intended Audience :: Science/Research",
34
34
  "Programming Language :: Python",
@@ -58,23 +58,25 @@ phasorpy = "phasorpy.cli:main"
58
58
  [project.optional-dependencies]
59
59
  all = [
60
60
  # sync with [dependency-groups.optional]
61
+ "czifile>=2026.4.11",
61
62
  "fbdfile>=2025.9.18",
62
63
  "lfdfiles>=2024.5.24",
63
64
  "liffile>=2025.2.10",
64
65
  "ptufile>=2024.9.14",
65
66
  "sdtfile>=2024.5.24",
66
67
  "pawflim>=1.0.4",
68
+ "imagecodecs==2026.3.6; sys_platform == 'darwin' and platform_machine == 'x86_64'",
67
69
  # "mkl-fft>=2.1.1",
68
70
  ]
69
71
 
70
72
  [dependency-groups]
71
73
  run = [
72
74
  # runtime dependencies; sync with [project.dependencies]
73
- "numpy>=2.0.0",
74
- "matplotlib>=3.9.0",
75
- "pandas>=2.2.0",
75
+ "numpy>=2.1.0",
76
+ "matplotlib>=3.10.0",
77
+ "pandas>=2.3.0",
76
78
  "scikit-learn>=1.5.0",
77
- "scipy>=1.13.0",
79
+ "scipy>=1.14.0",
78
80
  "tifffile>=2024.8.30",
79
81
  "xarray>=2024.6.0",
80
82
  "click",
@@ -83,23 +85,26 @@ run = [
83
85
  ]
84
86
  optional = [
85
87
  # optional runtime dependencies; sync with [project.optional-dependencies]
88
+ "czifile>=2026.4.11",
86
89
  "fbdfile>=2025.9.18",
87
90
  "lfdfiles>=2024.5.24",
88
91
  "liffile>=2025.2.10",
89
92
  "ptufile>=2024.9.14",
90
93
  "sdtfile>=2024.5.24",
91
94
  "pawflim>=1.0.4",
95
+ "imagecodecs==2026.3.6; sys_platform == 'darwin' and platform_machine == 'x86_64'",
92
96
  ]
93
97
  minimal = [
94
98
  # minimal runtime versions for testing against oldest supported versions
95
- "numpy==2.0.2; python_version == \"3.12\"",
96
- "matplotlib==3.9.4; python_version == \"3.12\"",
97
- "pandas==2.2.3; python_version == \"3.12\"",
99
+ "numpy==2.1.0; python_version == \"3.12\"",
100
+ "matplotlib==3.10.3; python_version == \"3.12\"",
101
+ "pandas==2.3.2; python_version == \"3.12\"",
98
102
  "scikit-learn==1.5.0; python_version == \"3.12\"",
99
- "scipy==1.13.1; python_version == \"3.12\"",
103
+ "scipy==1.14.1; python_version == \"3.12\"",
100
104
  "tifffile==2024.8.30; python_version == \"3.12\"",
101
105
  "xarray==2024.6.0; python_version == \"3.12\"",
102
106
  # optional
107
+ "czifile==2026.4.11; python_version == \"3.12\"",
103
108
  "fbdfile==2025.9.18; python_version == \"3.12\"",
104
109
  "lfdfiles==2024.5.24; python_version == \"3.12\"",
105
110
  "liffile==2025.2.10; python_version == \"3.12\"",
@@ -109,8 +114,8 @@ minimal = [
109
114
  ]
110
115
  build = [
111
116
  # build requirements
112
- "cython>=3.2.2",
113
- "numpy>=2.0.0",
117
+ "cython>=3.2.4",
118
+ "numpy>=2.1.0",
114
119
  "abi3audit",
115
120
  "build",
116
121
  "cibuildwheel",
@@ -174,6 +179,10 @@ version = { attr = "phasorpy.__version__" }
174
179
  [tool.setuptools.package-data]
175
180
  phasorpy = ["py.typed"]
176
181
 
182
+ [tool.check-unicode]
183
+ allow-codepoints = ["U+00B0", "U+00F6", "U+039B", "U+03BB"]
184
+ check-confusables = true
185
+
177
186
  [tool.ruff]
178
187
  line-length = 79
179
188
  exclude = [
@@ -295,7 +304,7 @@ disable = [
295
304
 
296
305
  [tool.black]
297
306
  line-length = 79
298
- target-version = ["py312", "py313"]
307
+ target-version = ["py312", "py313", "py314"]
299
308
  skip-string-normalization = true
300
309
 
301
310
  [tool.isort]
@@ -355,6 +364,7 @@ directory = "_htmlcov"
355
364
 
356
365
  [tool.pytest.ini_options]
357
366
  minversion = "7"
367
+ log_level = "INFO"
358
368
  log_cli_level = "INFO"
359
369
  # filterwarnings = ["error"] # breaks debugging tests in VSCode (Sept. 2024)
360
370
  xfail_strict = true
@@ -406,6 +416,7 @@ test-command = "pytest {project}/tests"
406
416
  test-skip = ["cp314t*"]
407
417
  test-requires = [
408
418
  # sync with [dependency-groups.optional]
419
+ "czifile>=2026.4.11",
409
420
  "fbdfile",
410
421
  "lfdfiles",
411
422
  "liffile",
@@ -421,6 +432,11 @@ test-requires = [
421
432
  "pytest-runner",
422
433
  ]
423
434
 
435
+ [[tool.cibuildwheel.overrides]]
436
+ select = "*-macosx_x86_64"
437
+ inherit.test-requires = "append"
438
+ test-requires = ["imagecodecs==2026.3.6"]
439
+
424
440
  [tool.cibuildwheel.test-environment]
425
441
  PHASORPY_DATA_ON_GITHUB = "1"
426
442
  SKIP_FETCH = "1"
@@ -5,5 +5,5 @@ from __future__ import annotations
5
5
  __all__ = ['__version__']
6
6
 
7
7
 
8
- __version__ = '0.9'
8
+ __version__ = '0.10'
9
9
  """PhasorPy version string."""