phasorpy 0.4__tar.gz → 0.6__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.
- {phasorpy-0.4 → phasorpy-0.6}/MANIFEST.in +1 -0
- {phasorpy-0.4/src/phasorpy.egg-info → phasorpy-0.6}/PKG-INFO +11 -16
- {phasorpy-0.4 → phasorpy-0.6}/README.md +1 -1
- {phasorpy-0.4 → phasorpy-0.6}/docs/_static/switcher.json +9 -9
- phasorpy-0.6/docs/acknowledgments.rst +42 -0
- phasorpy-0.6/docs/api/cluster.rst +5 -0
- phasorpy-0.6/docs/api/experimental.rst +5 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/api/index.rst +4 -3
- {phasorpy-0.4 → phasorpy-0.6}/docs/code_of_conduct.rst +4 -3
- {phasorpy-0.4 → phasorpy-0.6}/docs/conf.py +37 -3
- {phasorpy-0.4 → phasorpy-0.6}/docs/contributing.rst +6 -4
- {phasorpy-0.4 → phasorpy-0.6}/docs/index.rst +1 -7
- {phasorpy-0.4 → phasorpy-0.6}/docs/phasor_approach.rst +2 -2
- {phasorpy-0.4 → phasorpy-0.6}/docs/release.rst +120 -5
- {phasorpy-0.4 → phasorpy-0.6}/pyproject.toml +18 -27
- phasorpy-0.6/src/phasorpy/__init__.py +9 -0
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy/_phasorpy.pyx +237 -51
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy/_utils.py +201 -7
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy/cli.py +58 -3
- phasorpy-0.6/src/phasorpy/cluster.py +206 -0
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy/color.py +16 -11
- phasorpy-0.6/src/phasorpy/components.py +484 -0
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy/conftest.py +2 -0
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy/cursors.py +9 -9
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy/datasets.py +129 -51
- phasorpy-0.4/src/phasorpy/utils.py → phasorpy-0.6/src/phasorpy/experimental.py +133 -189
- phasorpy-0.6/src/phasorpy/io/__init__.py +137 -0
- phasorpy-0.6/src/phasorpy/io/_flimlabs.py +350 -0
- phasorpy-0.6/src/phasorpy/io/_leica.py +329 -0
- phasorpy-0.6/src/phasorpy/io/_ometiff.py +445 -0
- phasorpy-0.6/src/phasorpy/io/_other.py +782 -0
- phasorpy-0.6/src/phasorpy/io/_simfcs.py +627 -0
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy/phasor.py +572 -97
- phasorpy-0.6/src/phasorpy/plot/__init__.py +27 -0
- phasorpy-0.6/src/phasorpy/plot/_functions.py +717 -0
- phasorpy-0.6/src/phasorpy/plot/_lifetime_plots.py +553 -0
- phasorpy-0.4/src/phasorpy/plot.py → phasorpy-0.6/src/phasorpy/plot/_phasorplot.py +62 -1037
- phasorpy-0.6/src/phasorpy/plot/_phasorplot_fret.py +559 -0
- phasorpy-0.6/src/phasorpy/utils.py +161 -0
- {phasorpy-0.4 → phasorpy-0.6/src/phasorpy.egg-info}/PKG-INFO +11 -16
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy.egg-info/SOURCES.txt +22 -6
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy.egg-info/requires.txt +5 -10
- {phasorpy-0.4 → phasorpy-0.6}/tests/conftest.py +1 -2
- {phasorpy-0.4 → phasorpy-0.6}/tests/test__phasorpy.py +78 -18
- {phasorpy-0.4 → phasorpy-0.6}/tests/test__utils.py +28 -0
- {phasorpy-0.4 → phasorpy-0.6}/tests/test_cli.py +15 -1
- phasorpy-0.6/tests/test_cluster.py +98 -0
- {phasorpy-0.4 → phasorpy-0.6}/tests/test_components.py +153 -32
- phasorpy-0.4/tests/test_utils.py → phasorpy-0.6/tests/test_experimental.py +11 -34
- {phasorpy-0.4 → phasorpy-0.6}/tests/test_nan.py +17 -8
- {phasorpy-0.4 → phasorpy-0.6}/tests/test_phasor.py +1047 -109
- phasorpy-0.6/tests/test_phasorpy.py +12 -0
- phasorpy-0.6/tests/test_utils.py +52 -0
- phasorpy-0.6/tutorials/api/phasorpy_components.py +287 -0
- {phasorpy-0.4 → phasorpy-0.6}/tutorials/api/phasorpy_cursors.py +11 -16
- phasorpy-0.6/tutorials/api/phasorpy_filtering.py +214 -0
- {phasorpy-0.4 → phasorpy-0.6}/tutorials/api/phasorpy_fret.py +14 -15
- phasorpy-0.6/tutorials/api/phasorpy_io.py +754 -0
- {phasorpy-0.4 → phasorpy-0.6}/tutorials/api/phasorpy_multi-harmonic.py +2 -2
- {phasorpy-0.4 → phasorpy-0.6}/tutorials/api/phasorpy_phasorplot.py +11 -10
- phasorpy-0.6/tutorials/applications/phasorpy_component_fit.py +191 -0
- phasorpy-0.6/tutorials/applications/phasorpy_fret_efficiency.py +150 -0
- {phasorpy-0.4 → phasorpy-0.6}/tutorials/benchmarks/phasorpy_phasor_from_signal.py +31 -30
- {phasorpy-0.4 → phasorpy-0.6}/tutorials/phasorpy_introduction.py +73 -48
- {phasorpy-0.4 → phasorpy-0.6}/tutorials/phasorpy_lfd_workshop.py +11 -11
- phasorpy-0.6/tutorials/phasorpy_lifetime_geometry.py +306 -0
- phasorpy-0.4/docs/acknowledgments.rst +0 -35
- phasorpy-0.4/src/phasorpy/__init__.py +0 -10
- phasorpy-0.4/src/phasorpy/_io.py +0 -2431
- phasorpy-0.4/src/phasorpy/components.py +0 -313
- phasorpy-0.4/src/phasorpy/io.py +0 -5
- phasorpy-0.4/src/phasorpy/version.py +0 -72
- phasorpy-0.4/tests/test_io.py +0 -1172
- phasorpy-0.4/tests/test_phasorpy.py +0 -18
- phasorpy-0.4/tests/test_plot.py +0 -534
- phasorpy-0.4/tutorials/api/phasorpy_components.py +0 -261
- {phasorpy-0.4 → phasorpy-0.6}/LICENSE.txt +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/_static/categorical.png +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/_static/custom-icons.js +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/_static/logo.png +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/_static/srgb_spectrum.png +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/api/_phasorpy.rst +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/api/_utils.rst +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/api/cli.rst +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/api/color.rst +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/api/components.rst +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/api/cursors.rst +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/api/datasets.rst +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/api/io.rst +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/api/phasor.rst +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/api/phasorpy.rst +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/api/plot.rst +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/api/utils.rst +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/docs/license.rst +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/setup.cfg +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/setup.py +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy/__main__.py +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy/_typing.py +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy/py.typed +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy.egg-info/dependency_links.txt +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy.egg-info/entry_points.txt +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy.egg-info/not-zip-safe +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/src/phasorpy.egg-info/top_level.txt +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/tests/test__typing.py +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/tests/test_color.py +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/tests/test_cursors.py +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/tests/test_datasets.py +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/tutorials/README.rst +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/tutorials/api/README.rst +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/tutorials/api/phasorpy_lifetime_to_signal.py +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/tutorials/api/phasorpy_pca.py +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/tutorials/api/phasorpy_phasor_from_lifetime.py +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/tutorials/applications/README.rst +0 -0
- {phasorpy-0.4 → phasorpy-0.6}/tutorials/benchmarks/README.rst +0 -0
@@ -1,9 +1,9 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: phasorpy
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.6
|
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.
|
24
|
+
Requires-Python: >=3.11
|
27
25
|
Description-Content-Type: text/markdown
|
28
26
|
License-File: LICENSE.txt
|
29
|
-
Requires-Dist: numpy>=1.
|
30
|
-
Requires-Dist: matplotlib>=3.
|
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,17 +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"
|
55
|
-
Requires-Dist: liffile>=2025.
|
48
|
+
Requires-Dist: liffile>=2025.2.10; extra == "all"
|
49
|
+
Requires-Dist: pawflim; extra == "all"
|
50
|
+
Dynamic: license-file
|
56
51
|
|
57
52
|
# PhasorPy
|
58
53
|
|
@@ -71,7 +66,7 @@ PhasorPy is a community-maintained project.
|
|
71
66
|
in the form of bug reports, bug fixes, feature implementations, documentation,
|
72
67
|
datasets, and enhancement proposals are welcome.
|
73
68
|
|
74
|
-
This software project
|
69
|
+
This software project was supported in part by the
|
75
70
|
[Essential Open Source Software for Science (EOSS)](https://chanzuckerberg.com/eoss/)
|
76
71
|
program at
|
77
72
|
[Chan Zuckerberg Initiative](https://chanzuckerberg.com/).
|
@@ -15,7 +15,7 @@ PhasorPy is a community-maintained project.
|
|
15
15
|
in the form of bug reports, bug fixes, feature implementations, documentation,
|
16
16
|
datasets, and enhancement proposals are welcome.
|
17
17
|
|
18
|
-
This software project
|
18
|
+
This software project was supported in part by the
|
19
19
|
[Essential Open Source Software for Science (EOSS)](https://chanzuckerberg.com/eoss/)
|
20
20
|
program at
|
21
21
|
[Chan Zuckerberg Initiative](https://chanzuckerberg.com/).
|
@@ -1,23 +1,23 @@
|
|
1
1
|
[
|
2
2
|
{
|
3
3
|
"name": "dev",
|
4
|
-
"version": "0.
|
4
|
+
"version": "0.7",
|
5
5
|
"url": "https://www.phasorpy.org/docs/dev/"
|
6
6
|
},
|
7
7
|
{
|
8
|
-
"name": "0.
|
9
|
-
"version": "0.
|
8
|
+
"name": "0.6 (stable)",
|
9
|
+
"version": "0.6",
|
10
10
|
"url": "https://www.phasorpy.org/docs/stable/",
|
11
11
|
"preferred": true
|
12
12
|
},
|
13
13
|
{
|
14
|
-
"name": "0.
|
15
|
-
"version": "0.
|
16
|
-
"url": "https://www.phasorpy.org/docs/v0.
|
14
|
+
"name": "0.5",
|
15
|
+
"version": "0.5",
|
16
|
+
"url": "https://www.phasorpy.org/docs/v0.5/"
|
17
17
|
},
|
18
18
|
{
|
19
|
-
"name": "0.
|
20
|
-
"version": "0.
|
21
|
-
"url": "https://www.phasorpy.org/docs/v0.
|
19
|
+
"name": "0.4",
|
20
|
+
"version": "0.4",
|
21
|
+
"url": "https://www.phasorpy.org/docs/v0.4/"
|
22
22
|
}
|
23
23
|
]
|
@@ -0,0 +1,42 @@
|
|
1
|
+
Acknowledgments
|
2
|
+
===============
|
3
|
+
|
4
|
+
The PhasorPy project was established by the
|
5
|
+
`Advanced Bioimaging Unit <https://pasteur.uy/en/units/advanced-bioimaging>`_
|
6
|
+
at the University of the Republic and Institut Pasteur de Montevideo and the
|
7
|
+
`Laboratory for Fluorescence Dynamics <https://www.lfd.uci.edu>`_
|
8
|
+
at the University of California, Irvine.
|
9
|
+
|
10
|
+
PhasorPy was inspired by the
|
11
|
+
`Globals for Images · SimFCS <https://www.lfd.uci.edu/globals/>`_ software by
|
12
|
+
Enrico Gratton.
|
13
|
+
|
14
|
+
This software project was supported in part by the
|
15
|
+
`Essential Open Source Software for Science (EOSS)
|
16
|
+
<https://chanzuckerberg.com/eoss/>`_ program at
|
17
|
+
`Chan Zuckerberg Initiative <https://chanzuckerberg.com/>`_
|
18
|
+
(grant number 2022-252604, 2022-2024).
|
19
|
+
|
20
|
+
.. _contributors:
|
21
|
+
|
22
|
+
Contributors
|
23
|
+
------------
|
24
|
+
|
25
|
+
PhasorPy is developed by `contributors to the PhasorPy repository
|
26
|
+
<https://github.com/phasorpy/phasorpy/graphs/contributors>`_
|
27
|
+
and
|
28
|
+
`members of the PhasorPy organization
|
29
|
+
<https://github.com/orgs/phasorpy/people>`_.
|
30
|
+
|
31
|
+
User Community
|
32
|
+
--------------
|
33
|
+
|
34
|
+
Many thanks to the PhasorPy user community for their feedback, bug reports,
|
35
|
+
feature suggestions, and data files that have helped improve the library.
|
36
|
+
|
37
|
+
Citation
|
38
|
+
--------
|
39
|
+
|
40
|
+
If PhasorPy contributes to a project that leads to a publication,
|
41
|
+
please cite
|
42
|
+
`doi: 10.5281/zenodo.13862586 <https://doi.org/10.5281/zenodo.13862586>`_.
|
@@ -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
|
9
|
-
|
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,9 +15,11 @@ PhasorPy library version |version|.
|
|
16
15
|
phasor
|
17
16
|
cursors
|
18
17
|
components
|
18
|
+
cluster
|
19
19
|
plot
|
20
20
|
io
|
21
21
|
color
|
22
|
+
experimental
|
22
23
|
datasets
|
23
24
|
utils
|
24
25
|
_utils
|
@@ -1,3 +1,5 @@
|
|
1
|
+
:orphan:
|
2
|
+
|
1
3
|
Code of conduct
|
2
4
|
===============
|
3
5
|
|
@@ -68,9 +70,8 @@ Enforcement
|
|
68
70
|
-----------
|
69
71
|
|
70
72
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
71
|
-
reported to
|
72
|
-
|
73
|
-
- `Leonel Malacrida <conduct@phasorpy.org>`_
|
73
|
+
reported to `<conduct@phasorpy.org>`_ and `PhasorPy organization members
|
74
|
+
<https://github.com/orgs/phasorpy/people>`_.
|
74
75
|
|
75
76
|
All complaints will be reviewed and investigated promptly and fairly.
|
76
77
|
|
@@ -2,9 +2,10 @@
|
|
2
2
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
3
3
|
# pylint: skip-file
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
import os
|
6
|
+
import sys
|
7
|
+
|
8
|
+
sys.path.insert(0, os.path.dirname(__file__))
|
8
9
|
|
9
10
|
# remove the examples header from HTML tutorials
|
10
11
|
import sphinx_gallery.gen_rst
|
@@ -123,8 +124,41 @@ sphinx_gallery_conf = {
|
|
123
124
|
'gallery_dirs': 'tutorials',
|
124
125
|
'reference_url': {'phasorpy': None},
|
125
126
|
'matplotlib_animations': True,
|
127
|
+
'within_subsection_order': 'conf.TutorialOrder',
|
126
128
|
}
|
127
129
|
|
130
|
+
|
131
|
+
class TutorialOrder:
|
132
|
+
"""Order tutorials in gallery subsections."""
|
133
|
+
|
134
|
+
tutorials = [
|
135
|
+
'introduction',
|
136
|
+
'lifetime_geometry',
|
137
|
+
'lfd_workshop',
|
138
|
+
# api
|
139
|
+
'io',
|
140
|
+
'phasor_from_lifetime',
|
141
|
+
'multi-harmonic',
|
142
|
+
'filtering',
|
143
|
+
'phasorplot',
|
144
|
+
'cursors',
|
145
|
+
'components',
|
146
|
+
'fret',
|
147
|
+
'lifetime_to_signal',
|
148
|
+
'pca',
|
149
|
+
# applications
|
150
|
+
'component_fit',
|
151
|
+
'fret_efficiency',
|
152
|
+
# benchmarks
|
153
|
+
'phasor_from_signal',
|
154
|
+
]
|
155
|
+
|
156
|
+
def __init__(self, srcdir: str): ...
|
157
|
+
|
158
|
+
def __call__(self, filename: str) -> int:
|
159
|
+
return self.tutorials.index(filename[9:-3])
|
160
|
+
|
161
|
+
|
128
162
|
copybutton_prompt_text = (
|
129
163
|
r'>>> |\.\.\. |\$ |In \[\d*\]: | {2,5}\.\.\.: | {5,8}: '
|
130
164
|
)
|
@@ -61,9 +61,9 @@ and include the following items in the bug report:
|
|
61
61
|
of::
|
62
62
|
|
63
63
|
$ python -m phasorpy versions
|
64
|
-
Python
|
65
|
-
phasorpy
|
66
|
-
numpy
|
64
|
+
Python-3.13.3
|
65
|
+
phasorpy-0.5
|
66
|
+
numpy-2.2.6
|
67
67
|
...
|
68
68
|
|
69
69
|
Contribute code or documentation
|
@@ -289,4 +289,6 @@ and must pass before code or documentation can be accepted.
|
|
289
289
|
Other PhasorPy developers will review the pull request to check and help
|
290
290
|
to improve its implementation, documentation, and style.
|
291
291
|
|
292
|
-
Pull requests must be approved by a
|
292
|
+
Pull requests must be approved by a
|
293
|
+
`PhasorPy organization member <https://github.com/orgs/phasorpy/people>`_
|
294
|
+
before merging.
|
@@ -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
|
@@ -67,7 +62,6 @@ Contents
|
|
67
62
|
api/index
|
68
63
|
release
|
69
64
|
contributing
|
70
|
-
code_of_conduct
|
71
65
|
acknowledgments
|
72
66
|
license
|
73
67
|
|
@@ -200,8 +200,8 @@ approach to analyze fluorescence time-resolved or spectral images:
|
|
200
200
|
microscopy written in MATLAB by Alexander Vallmitjana, released under
|
201
201
|
the CC BY 4.0 license.
|
202
202
|
|
203
|
-
- `AlliGator <https://
|
204
|
-
is
|
203
|
+
- `AlliGator <https://github.com/smXplorer/AlliGator>`_
|
204
|
+
is an open-source software for fluorescence lifetime image data
|
205
205
|
analysis using the phasor approach and standard nonlinear fitting.
|
206
206
|
The software is written in LabVIEW for Windows by Xavier Michalet.
|
207
207
|
|
@@ -6,15 +6,131 @@ 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
|
10
|
-
|
11
|
-
|
9
|
+
The PhasorPy library is still under construction. Backwards-incompatible
|
10
|
+
changes may occur between revisions.
|
11
|
+
|
12
|
+
0.6 (2025.6.22)
|
13
|
+
---------------
|
14
|
+
|
15
|
+
This is the sixth alpha release of the PhasorPy library.
|
16
|
+
It contains several bug fixes, improvements, and breaking changes.
|
17
|
+
|
18
|
+
The new ``phasor_component_fit`` function fits fractions of multiple
|
19
|
+
components to phasor coordinates.
|
20
|
+
The ``phasor_nearest_neighbor`` function returns nearest neighbors in phasor
|
21
|
+
coordinates.
|
22
|
+
The ``phasor_to_normal_lifetime`` function returns single lifetimes closest
|
23
|
+
to phasor coordinates.
|
24
|
+
The ``phasor_semicircle_intersect`` function returns intersections of lines
|
25
|
+
with the universal semicircle.
|
26
|
+
|
27
|
+
The ``LifetimePlots`` class interactively plots lifetimes in the time domain,
|
28
|
+
frequency domain, and phasor plot. It can be invoked from the command line
|
29
|
+
with ``python -m phasorpy lifetime``.
|
30
|
+
|
31
|
+
The ``two_fractions_from_phasor`` and ``graphical_component_analysis``
|
32
|
+
functions are renamed to ``phasor_component_fraction`` and
|
33
|
+
``phasor_component_graphical``, respectively.
|
34
|
+
The ``versions`` function has moved to the ``phasorpy.utils`` namespace.
|
35
|
+
The ``spectral_vector_denoise``, ``anscombe_transform``, and
|
36
|
+
``anscombe_transform_inverse`` functions have moved to the
|
37
|
+
``phasorpy.experimental`` namespace.
|
38
|
+
|
39
|
+
Functions in the ``io`` module now return only the first channel by default.
|
40
|
+
|
41
|
+
Three new tutorials are added: "Geometrical interpretation of lifetimes",
|
42
|
+
"Multi-component fit", and "FRET efficiency image".
|
43
|
+
This release supports Python 3.11 to 3.13.
|
44
|
+
|
45
|
+
What's Changed
|
46
|
+
..............
|
47
|
+
|
48
|
+
* Bump version by @cgohlke in https://github.com/phasorpy/phasorpy/pull/221
|
49
|
+
* Bump pypa/cibuildwheel from 2.23.2 to 2.23.3 in the github-actions group by @dependabot in https://github.com/phasorpy/phasorpy/pull/223
|
50
|
+
* Update description of AlliGator software by @cgohlke in https://github.com/phasorpy/phasorpy/pull/225
|
51
|
+
* Cython 3.1.0 is released by @cgohlke in https://github.com/phasorpy/phasorpy/pull/226
|
52
|
+
* Add phasor_to_normal_lifetime function by @cgohlke in https://github.com/phasorpy/phasorpy/pull/228
|
53
|
+
* Read first channel from files by default by @cgohlke in https://github.com/phasorpy/phasorpy/pull/229
|
54
|
+
* Update acknowledgments by @cgohlke in https://github.com/phasorpy/phasorpy/pull/230
|
55
|
+
* Use importlib to get package versions by @cgohlke in https://github.com/phasorpy/phasorpy/pull/231
|
56
|
+
* Use Windows Server 2022 in GitHub Actions by @cgohlke in https://github.com/phasorpy/phasorpy/pull/232
|
57
|
+
* Add tutorial about geometrical interpretation of lifetimes by @cgohlke in https://github.com/phasorpy/phasorpy/pull/233
|
58
|
+
* Update reference phasor_from_signal benchmark results by @cgohlke in https://github.com/phasorpy/phasorpy/pull/234
|
59
|
+
* Sort clusters returned by phasor_cluster_gmm by @cgohlke in https://github.com/phasorpy/phasorpy/pull/236
|
60
|
+
* Reorganize io module by @cgohlke in https://github.com/phasorpy/phasorpy/pull/235
|
61
|
+
* Update pre-commit configuration by @cgohlke in https://github.com/phasorpy/phasorpy/pull/237
|
62
|
+
* Fix test failing with numpy 2.3.0 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/239
|
63
|
+
* Add phasor_component_fit function by @cgohlke in https://github.com/phasorpy/phasorpy/pull/238
|
64
|
+
* Rename functions in components module by @cgohlke in https://github.com/phasorpy/phasorpy/pull/240
|
65
|
+
* Add phasor_semicircle_intersect function by @cgohlke in https://github.com/phasorpy/phasorpy/pull/241
|
66
|
+
* Add private helper functions to mask universal semicircle by @cgohlke in https://github.com/phasorpy/phasorpy/pull/242
|
67
|
+
* Add private _distance_from_semicircle function by @cgohlke in https://github.com/phasorpy/phasorpy/pull/244
|
68
|
+
* Reorganize plot module by @cgohlke in https://github.com/phasorpy/phasorpy/pull/245
|
69
|
+
* Add interactive LifetimePlots class by @cgohlke in https://github.com/phasorpy/phasorpy/pull/247
|
70
|
+
* Reorganize version, utils, and experimental modules by @cgohlke in https://github.com/phasorpy/phasorpy/pull/248
|
71
|
+
* Add phasor_nearest_neighbor function by @bruno-pannunzio in https://github.com/phasorpy/phasorpy/pull/243
|
72
|
+
* Release v0.6 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/244
|
73
|
+
|
74
|
+
**Full Changelog**: https://github.com/phasorpy/phasorpy/compare/v0.5...v0.6
|
75
|
+
|
76
|
+
0.5 (2025.4.11)
|
77
|
+
---------------
|
78
|
+
|
79
|
+
This is the fifth alpha release of the PhasorPy library.
|
80
|
+
It contains several bug fixes and improvements.
|
81
|
+
The new ``phasor_cluster_gmm`` function finds clusters in phasor coordinates
|
82
|
+
using a Gaussian mixture model.
|
83
|
+
The ``phasor_filter_pawflim`` function applies a wavelet filter using the
|
84
|
+
pawFLIM library.
|
85
|
+
This release supports Python 3.11 to 3.13. Python 3.10 is no longer supported.
|
86
|
+
|
87
|
+
What's Changed
|
88
|
+
..............
|
89
|
+
|
90
|
+
* Bump version by @cgohlke in https://github.com/phasorpy/phasorpy/pull/183
|
91
|
+
* Bug Fix for phasor_calibrate when skipping axes with harmonic axis by @bruno-pannunzio in https://github.com/phasorpy/phasorpy/pull/185
|
92
|
+
* Fixes for liffile 2025.2.6 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/184
|
93
|
+
* Fix phasor_normalize with numpy 1.24 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/186
|
94
|
+
* Add pawFLIM wavelet filter for phasor coordinates by @bruno-pannunzio in https://github.com/phasorpy/phasorpy/pull/167
|
95
|
+
* Add dataset from zenodo.org/records/14860228 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/187
|
96
|
+
* Improve support for Leica image files by @cgohlke in https://github.com/phasorpy/phasorpy/pull/188
|
97
|
+
* Remove notes about early stage of development by @cgohlke in https://github.com/phasorpy/phasorpy/pull/189
|
98
|
+
* Add plot_histograms function by @cgohlke in https://github.com/phasorpy/phasorpy/pull/191
|
99
|
+
* Fix NaN padding in phasor_to_simfcs_referenced by @cgohlke in https://github.com/phasorpy/phasorpy/pull/192
|
100
|
+
* Return more metadata from IFLI and FBD readers by @cgohlke in https://github.com/phasorpy/phasorpy/pull/193
|
101
|
+
* Add more formats to file I/O tutorial by @cgohlke in https://github.com/phasorpy/phasorpy/pull/194
|
102
|
+
* Fix module attribute of functions in phasorpy.io by @cgohlke in https://github.com/phasorpy/phasorpy/pull/195
|
103
|
+
* Add plot_image helper function by @cgohlke in https://github.com/phasorpy/phasorpy/pull/196
|
104
|
+
* Add section on other means to IO tutorial by @cgohlke in https://github.com/phasorpy/phasorpy/pull/197
|
105
|
+
* 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
|
106
|
+
* Improve IO tutorial by @cgohlke in https://github.com/phasorpy/phasorpy/pull/199
|
107
|
+
* Fix minor issues found by GitHub Copilot by @cgohlke in https://github.com/phasorpy/phasorpy/pull/202
|
108
|
+
* Move parse_skip_axis function to _utils module by @cgohlke in https://github.com/phasorpy/phasorpy/pull/203
|
109
|
+
* Fix new mypy errors with numpy 2.2.4 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/204
|
110
|
+
* Raise minimum requirements by @cgohlke in https://github.com/phasorpy/phasorpy/pull/208
|
111
|
+
* Add phasor_cluster_gmm function by @R-Blanco802 in https://github.com/phasorpy/phasorpy/pull/201
|
112
|
+
* Require scikit-learn>=1.5.0 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/209
|
113
|
+
* Support routing channels in signal_from_sdt by @cgohlke in https://github.com/phasorpy/phasorpy/pull/210
|
114
|
+
* Improve tests and documentation of phasor_cluster_gmm by @cgohlke in https://github.com/phasorpy/phasorpy/pull/211
|
115
|
+
* Ignore PhasorPlot.contour cmap if colors is set by @cgohlke in https://github.com/phasorpy/phasorpy/pull/213
|
116
|
+
* 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
|
117
|
+
* Update Ubuntu version by @cgohlke in https://github.com/phasorpy/phasorpy/pull/219
|
118
|
+
* Require Cython>=3.1.0b1 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/216
|
119
|
+
* Add PTU file exported from FLIM_testdata.lif with photon filter by @cgohlke in https://github.com/phasorpy/phasorpy/pull/217
|
120
|
+
* Fix multi-channel FLIM LABS files containing single-channel phasors by @cgohlke in https://github.com/phasorpy/phasorpy/pull/218
|
121
|
+
* Release v0.5 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/220
|
122
|
+
|
123
|
+
## New Contributors
|
124
|
+
* @R-Blanco802 made their first contribution in https://github.com/phasorpy/phasorpy/pull/201
|
125
|
+
|
126
|
+
**Full Changelog**: https://github.com/phasorpy/phasorpy/compare/v0.4...v0.5
|
12
127
|
|
13
128
|
0.4 (2025.1.30)
|
14
129
|
---------------
|
15
130
|
|
16
131
|
This is the fourth alpha release of the PhasorPy library.
|
17
|
-
It contains several bug fixes and many improvements, mostly to the
|
132
|
+
It contains several bug fixes and many improvements, mostly to the
|
133
|
+
``phasorpy.io`` module.
|
18
134
|
File reader functions are now named ``signal_from_*`` or ``phasor_from_*``
|
19
135
|
and have a more consistent API.
|
20
136
|
Point mode PTU files, LIF files containing phasor coordinates or hyperspectral
|
@@ -42,7 +158,6 @@ What's Changed
|
|
42
158
|
|
43
159
|
**Full Changelog**: https://github.com/phasorpy/phasorpy/compare/v0.3...v0.4
|
44
160
|
|
45
|
-
|
46
161
|
0.3 (2024.12.16)
|
47
162
|
----------------
|
48
163
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
requires = [
|
3
3
|
"setuptools>=68",
|
4
4
|
"numpy",
|
5
|
-
"
|
5
|
+
"cython>=3.1.0",
|
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.
|
18
|
-
"matplotlib>=3.
|
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
|
-
|
24
|
-
# "scikit-
|
25
|
-
# "pandas>=2.
|
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.
|
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 =
|
44
|
+
license = "MIT"
|
45
|
+
license-files = ["LICENSE.txt"]
|
47
46
|
|
48
47
|
[project.urls]
|
49
48
|
Homepage = "https://www.phasorpy.org"
|
@@ -66,28 +65,19 @@ 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",
|
80
|
-
"liffile>=2025.
|
72
|
+
"liffile>=2025.2.10",
|
73
|
+
"pawflim",
|
81
74
|
]
|
82
75
|
|
83
76
|
[tool.setuptools]
|
84
|
-
package-dir = { "" = "src" }
|
85
|
-
packages = ["phasorpy"]
|
86
|
-
license-files = ["LICENSE.txt"]
|
87
77
|
zip-safe = false
|
88
78
|
|
89
79
|
[tool.setuptools.dynamic]
|
90
|
-
version = { attr = "phasorpy.
|
80
|
+
version = { attr = "phasorpy.__version__" }
|
91
81
|
|
92
82
|
[tool.setuptools.package-data]
|
93
83
|
phasorpy = ["py.typed"]
|
@@ -123,7 +113,7 @@ disable = [
|
|
123
113
|
|
124
114
|
[tool.black]
|
125
115
|
line-length = 79
|
126
|
-
target-version = ["
|
116
|
+
target-version = ["py311"]
|
127
117
|
skip-string-normalization = true
|
128
118
|
|
129
119
|
[tool.isort]
|
@@ -143,14 +133,15 @@ strict = true
|
|
143
133
|
warn_unreachable = true
|
144
134
|
|
145
135
|
[[tool.mypy.overrides]]
|
146
|
-
module = ["phasorpy._phasorpy", "pooch.*", "scipy.*", "mkl_fft.*"]
|
136
|
+
module = ["phasorpy._phasorpy", "pooch.*", "scipy.*", "mkl_fft.*", "sklearn.*"]
|
147
137
|
ignore_missing_imports = true
|
148
138
|
|
149
139
|
[tool.coverage.run]
|
150
140
|
plugins = ["Cython.Coverage"]
|
141
|
+
omit = ["conftest.py", "__main__.py"]
|
151
142
|
|
152
143
|
[tool.coverage.report]
|
153
|
-
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"]
|
154
145
|
|
155
146
|
[tool.coverage.html]
|
156
147
|
directory = "_htmlcov"
|
@@ -187,6 +178,6 @@ norecursedirs = [
|
|
187
178
|
]
|
188
179
|
|
189
180
|
[tool.cibuildwheel]
|
190
|
-
skip = "pp* cp37* cp38* cp39* *musllinux* *i686 *ppc64le *s390x cp39*win*arm64
|
191
|
-
test-requires = ["lfdfiles", "sdtfile", "ptufile", "liffile", "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"]
|
192
183
|
test-command = "pytest {project}/tests"
|