phasorpy 0.10__tar.gz → 0.12__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.10 → phasorpy-0.12}/PKG-INFO +18 -4
- {phasorpy-0.10 → phasorpy-0.12}/README.md +13 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/_static/switcher.json +13 -3
- phasorpy-0.12/docs/about.rst +83 -0
- phasorpy-0.12/docs/acknowledgments.rst +3 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/index.rst +2 -2
- {phasorpy-0.10 → phasorpy-0.12}/docs/conf.py +18 -13
- {phasorpy-0.10 → phasorpy-0.12}/docs/contributing.rst +36 -13
- {phasorpy-0.10 → phasorpy-0.12}/docs/index.rst +11 -11
- {phasorpy-0.10 → phasorpy-0.12}/docs/phasor_approach.rst +129 -50
- {phasorpy-0.10 → phasorpy-0.12}/pyproject.toml +25 -18
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/__init__.py +1 -1
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/_phasorpy.pyx +89 -11
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/_utils.py +4 -4
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/cli.py +126 -3
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/cluster.py +3 -3
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/color.py +3 -3
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/component.py +45 -21
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/cursor.py +7 -8
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/datasets.py +43 -4
- phasorpy-0.12/src/phasorpy/experimental.py +264 -0
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/filter.py +107 -35
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/io/__init__.py +34 -16
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/io/_flimlabs.py +5 -3
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/io/_leica.py +16 -0
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/io/_ometiff.py +98 -2
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/io/_other.py +323 -10
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/io/_simfcs.py +17 -1
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/lifetime.py +38 -16
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/phasor.py +24 -8
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/plot/__init__.py +3 -0
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/plot/_functions.py +10 -11
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/plot/_lifetime_plots.py +2 -2
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/plot/_phasorplot.py +29 -13
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/plot/_phasorplot_fret.py +3 -3
- phasorpy-0.12/src/phasorpy/plot/_spectral_plots.py +734 -0
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/utils.py +9 -2
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy.egg-info/PKG-INFO +18 -4
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy.egg-info/SOURCES.txt +4 -0
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy.egg-info/requires.txt +4 -3
- {phasorpy-0.10 → phasorpy-0.12}/tests/conftest.py +4 -4
- {phasorpy-0.10 → phasorpy-0.12}/tests/io/test_flimlabs.py +8 -10
- {phasorpy-0.10 → phasorpy-0.12}/tests/io/test_leica.py +4 -8
- {phasorpy-0.10 → phasorpy-0.12}/tests/io/test_ometiff.py +35 -11
- phasorpy-0.12/tests/io/test_other.py +729 -0
- {phasorpy-0.10 → phasorpy-0.12}/tests/io/test_simfcs.py +13 -17
- {phasorpy-0.10 → phasorpy-0.12}/tests/plot/test_functions.py +20 -18
- {phasorpy-0.10 → phasorpy-0.12}/tests/plot/test_lifetime_plots.py +6 -10
- {phasorpy-0.10 → phasorpy-0.12}/tests/plot/test_phasorplot.py +22 -24
- {phasorpy-0.10 → phasorpy-0.12}/tests/plot/test_phasorplot_fret.py +2 -6
- phasorpy-0.12/tests/plot/test_spectral_plots.py +242 -0
- {phasorpy-0.10 → phasorpy-0.12}/tests/test__phasorpy.py +42 -35
- {phasorpy-0.10 → phasorpy-0.12}/tests/test__typing.py +1 -5
- {phasorpy-0.10 → phasorpy-0.12}/tests/test__utils.py +20 -23
- {phasorpy-0.10 → phasorpy-0.12}/tests/test_cli.py +32 -7
- {phasorpy-0.10 → phasorpy-0.12}/tests/test_cluster.py +19 -12
- {phasorpy-0.10 → phasorpy-0.12}/tests/test_color.py +2 -6
- {phasorpy-0.10 → phasorpy-0.12}/tests/test_component.py +68 -63
- {phasorpy-0.10 → phasorpy-0.12}/tests/test_cursor.py +53 -26
- {phasorpy-0.10 → phasorpy-0.12}/tests/test_datasets.py +10 -14
- phasorpy-0.12/tests/test_experimental.py +114 -0
- {phasorpy-0.10 → phasorpy-0.12}/tests/test_filter.py +268 -53
- {phasorpy-0.10 → phasorpy-0.12}/tests/test_lifetime.py +100 -70
- {phasorpy-0.10 → phasorpy-0.12}/tests/test_nan.py +28 -32
- {phasorpy-0.10 → phasorpy-0.12}/tests/test_phasor.py +88 -66
- {phasorpy-0.10 → phasorpy-0.12}/tests/test_phasorpy.py +1 -5
- {phasorpy-0.10 → phasorpy-0.12}/tests/test_utils.py +3 -7
- {phasorpy-0.10 → phasorpy-0.12}/tools/build_manylinux.cmd +1 -1
- {phasorpy-0.10 → phasorpy-0.12}/tools/build_manylinux.sh +1 -1
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_component.py +6 -6
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_cursor.py +1 -1
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_filter.py +24 -13
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_fret.py +3 -3
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_io.py +42 -21
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_lifetime_to_signal.py +4 -4
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_multi_harmonic.py +1 -1
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_pca.py +1 -1
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_phasor_from_lifetime.py +2 -2
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_phasorplot.py +3 -3
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/applications/phasorpy_component_fit.py +5 -3
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/applications/phasorpy_fret_efficiency.py +2 -2
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/applications/phasorpy_multidimensional.py +3 -1
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/applications/phasorpy_nadh_concentration.py +4 -4
- phasorpy-0.12/tutorials/applications/phasorpy_nadh_fraction.py +251 -0
- phasorpy-0.12/tutorials/misc/phasorpy_apps.py +114 -0
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/misc/phasorpy_phasor_from_signal.py +1 -1
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/phasorpy_introduction.py +1 -1
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/phasorpy_lfd_workshop.py +7 -2
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/phasorpy_lifetime_geometry.py +20 -19
- phasorpy-0.10/docs/acknowledgments.rst +0 -42
- phasorpy-0.10/src/phasorpy/experimental.py +0 -146
- phasorpy-0.10/tests/io/test_other.py +0 -357
- phasorpy-0.10/tests/test_experimental.py +0 -37
- phasorpy-0.10/tutorials/misc/phasorpy_apps.py +0 -77
- {phasorpy-0.10 → phasorpy-0.12}/LICENSE.txt +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/MANIFEST.in +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/_static/categorical.png +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/_static/custom-icons.js +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/_static/favicon.ico +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/_static/phasorpy_logo.png +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/_static/phasorpy_logo.svg +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/_static/srgb_spectrum.png +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/_phasorpy.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/_utils.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/cli.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/cluster.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/color.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/component.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/cursor.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/datasets.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/experimental.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/filter.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/io.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/lifetime.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/phasor.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/phasorpy.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/plot.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/api/utils.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/code_of_conduct.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/docs/license.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/setup.cfg +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/setup.py +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/__main__.py +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/_typing.py +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/conftest.py +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/py.typed +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy.egg-info/dependency_links.txt +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy.egg-info/entry_points.txt +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy.egg-info/not-zip-safe +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy.egg-info/top_level.txt +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/tests/io/_conftest.py +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/tools/sha256.py +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/README.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/README.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/applications/README.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/misc/README.rst +0 -0
- {phasorpy-0.10 → phasorpy-0.12}/tutorials/misc/phasorpy_logo.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: phasorpy
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.12
|
|
4
4
|
Summary: Analysis of luminescence lifetime and hyperspectral images using the phasor approach
|
|
5
5
|
Author: PhasorPy Contributors
|
|
6
6
|
License-Expression: MIT
|
|
@@ -29,7 +29,7 @@ Requires-Dist: matplotlib>=3.9.0
|
|
|
29
29
|
Requires-Dist: pandas>=2.3.0
|
|
30
30
|
Requires-Dist: scikit-learn>=1.5.0
|
|
31
31
|
Requires-Dist: scipy>=1.14.0
|
|
32
|
-
Requires-Dist: tifffile>=
|
|
32
|
+
Requires-Dist: tifffile>=2026.5.2
|
|
33
33
|
Requires-Dist: xarray>=2024.6.0
|
|
34
34
|
Requires-Dist: click
|
|
35
35
|
Requires-Dist: pooch
|
|
@@ -37,12 +37,13 @@ Requires-Dist: tqdm
|
|
|
37
37
|
Provides-Extra: all
|
|
38
38
|
Requires-Dist: czifile>=2026.4.11; extra == "all"
|
|
39
39
|
Requires-Dist: fbdfile>=2025.9.18; extra == "all"
|
|
40
|
-
Requires-Dist: lfdfiles>=
|
|
40
|
+
Requires-Dist: lfdfiles>=2026.6.24; extra == "all"
|
|
41
41
|
Requires-Dist: liffile>=2025.2.10; extra == "all"
|
|
42
42
|
Requires-Dist: ptufile>=2024.9.14; extra == "all"
|
|
43
43
|
Requires-Dist: sdtfile>=2024.5.24; extra == "all"
|
|
44
44
|
Requires-Dist: pawflim>=1.0.4; extra == "all"
|
|
45
|
-
Requires-Dist:
|
|
45
|
+
Requires-Dist: brighteyes-mcs-reader>=0.1.0; extra == "all"
|
|
46
|
+
Requires-Dist: imagecodecs==2026.6.6; (sys_platform == "darwin" and platform_machine == "x86_64") and extra == "all"
|
|
46
47
|
Dynamic: license-file
|
|
47
48
|
|
|
48
49
|
# <img src="https://www.phasorpy.org/_static/phasorpy_logo.svg" alt="○" width="48" height="48" align="left"/> PhasorPy
|
|
@@ -50,6 +51,19 @@ Dynamic: license-file
|
|
|
50
51
|
PhasorPy is an open-source Python library for the analysis of luminescence
|
|
51
52
|
lifetime and hyperspectral images using the phasor approach.
|
|
52
53
|
|
|
54
|
+
The phasor approach represents time-resolved and spectral signals as
|
|
55
|
+
phasor coordinates (normalized Fourier coefficients at harmonic frequencies)
|
|
56
|
+
for intuitive visualization and analysis.
|
|
57
|
+
|
|
58
|
+
PhasorPy enables reproducible phasor-based fluorescence lifetime imaging
|
|
59
|
+
(FLIM) and hyperspectral imaging (HSI) workflows in scientific Python.
|
|
60
|
+
It provides tools to read microscopy data in many file formats and to
|
|
61
|
+
calculate, calibrate, filter, visualize, and interconvert phasor coordinates,
|
|
62
|
+
lifetimes, and signals. Phasor coordinates can be exported to standard
|
|
63
|
+
formats and analyzed through cursor-based region-of-interest selection,
|
|
64
|
+
cluster detection, multi-component unmixing, FRET efficiency and concentration
|
|
65
|
+
estimation.
|
|
66
|
+
|
|
53
67
|
- [Homepage](https://www.phasorpy.org)
|
|
54
68
|
- [Documentation](https://www.phasorpy.org/docs/stable/)
|
|
55
69
|
- [Source code](https://github.com/phasorpy/phasorpy)
|
|
@@ -3,6 +3,19 @@
|
|
|
3
3
|
PhasorPy is an open-source Python library for the analysis of luminescence
|
|
4
4
|
lifetime and hyperspectral images using the phasor approach.
|
|
5
5
|
|
|
6
|
+
The phasor approach represents time-resolved and spectral signals as
|
|
7
|
+
phasor coordinates (normalized Fourier coefficients at harmonic frequencies)
|
|
8
|
+
for intuitive visualization and analysis.
|
|
9
|
+
|
|
10
|
+
PhasorPy enables reproducible phasor-based fluorescence lifetime imaging
|
|
11
|
+
(FLIM) and hyperspectral imaging (HSI) workflows in scientific Python.
|
|
12
|
+
It provides tools to read microscopy data in many file formats and to
|
|
13
|
+
calculate, calibrate, filter, visualize, and interconvert phasor coordinates,
|
|
14
|
+
lifetimes, and signals. Phasor coordinates can be exported to standard
|
|
15
|
+
formats and analyzed through cursor-based region-of-interest selection,
|
|
16
|
+
cluster detection, multi-component unmixing, FRET efficiency and concentration
|
|
17
|
+
estimation.
|
|
18
|
+
|
|
6
19
|
- [Homepage](https://www.phasorpy.org)
|
|
7
20
|
- [Documentation](https://www.phasorpy.org/docs/stable/)
|
|
8
21
|
- [Source code](https://github.com/phasorpy/phasorpy)
|
|
@@ -1,15 +1,25 @@
|
|
|
1
1
|
[
|
|
2
2
|
{
|
|
3
3
|
"name": "dev",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.13",
|
|
5
5
|
"url": "https://www.phasorpy.org/docs/dev/"
|
|
6
6
|
},
|
|
7
7
|
{
|
|
8
|
-
"name": "0.
|
|
9
|
-
"version": "0.
|
|
8
|
+
"name": "0.12 (stable)",
|
|
9
|
+
"version": "0.12",
|
|
10
10
|
"url": "https://www.phasorpy.org/docs/stable/",
|
|
11
11
|
"preferred": true
|
|
12
12
|
},
|
|
13
|
+
{
|
|
14
|
+
"name": "0.11",
|
|
15
|
+
"version": "0.11",
|
|
16
|
+
"url": "https://www.phasorpy.org/docs/v0.11/"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "0.10",
|
|
20
|
+
"version": "0.10",
|
|
21
|
+
"url": "https://www.phasorpy.org/docs/v0.10/"
|
|
22
|
+
},
|
|
13
23
|
{
|
|
14
24
|
"name": "0.9",
|
|
15
25
|
"version": "0.9",
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
About PhasorPy
|
|
2
|
+
==============
|
|
3
|
+
|
|
4
|
+
The PhasorPy project's mission is to advance and democratize phasor analysis
|
|
5
|
+
through the open-source PhasorPy library.
|
|
6
|
+
|
|
7
|
+
.. _funding:
|
|
8
|
+
|
|
9
|
+
Founding and funding
|
|
10
|
+
--------------------
|
|
11
|
+
|
|
12
|
+
The PhasorPy project was established in 2023 by the
|
|
13
|
+
`Advanced Bioimaging Unit <https://www.uba.uy>`_
|
|
14
|
+
at the University of the Republic and Institut Pasteur de Montevideo, and the
|
|
15
|
+
`Laboratory for Fluorescence Dynamics <https://www.lfd.uci.edu>`_
|
|
16
|
+
at the University of California, Irvine.
|
|
17
|
+
|
|
18
|
+
The project was supported by the
|
|
19
|
+
`Essential Open Source Software for Science (EOSS)
|
|
20
|
+
<https://chanzuckerberg.com/eoss/>`_ program at
|
|
21
|
+
`Chan Zuckerberg Initiative <https://chanzuckerberg.com/>`_
|
|
22
|
+
(grant number 2022-252604; 2022-2024).
|
|
23
|
+
|
|
24
|
+
Project goals
|
|
25
|
+
-------------
|
|
26
|
+
|
|
27
|
+
The original goals were to create an open-source Python library based on
|
|
28
|
+
sound software engineering principles, establish a community of users
|
|
29
|
+
and developers, and reimplement core phasor-based functionality of the
|
|
30
|
+
discontinued closed-source
|
|
31
|
+
`Globals for Images - SimFCS <https://www.lfd.uci.edu/globals/>`_
|
|
32
|
+
software by Enrico Gratton.
|
|
33
|
+
|
|
34
|
+
The current goals are to improve community sustainability and to advance the
|
|
35
|
+
PhasorPy library toward a stable, extensible platform that supports
|
|
36
|
+
large-scale automated workflows, AI-assisted analysis, and robust integration
|
|
37
|
+
with the scientific Python ecosystem, while continuing to serve as a reliable
|
|
38
|
+
base for graphical applications and training resources.
|
|
39
|
+
|
|
40
|
+
.. _governance:
|
|
41
|
+
|
|
42
|
+
.. _contributors:
|
|
43
|
+
|
|
44
|
+
Governance and contributors
|
|
45
|
+
---------------------------
|
|
46
|
+
|
|
47
|
+
PhasorPy is developed collaboratively by
|
|
48
|
+
`contributors to the PhasorPy repository
|
|
49
|
+
<https://github.com/phasorpy/phasorpy/graphs/contributors?all=1>`_
|
|
50
|
+
and governed by
|
|
51
|
+
`members of the PhasorPy organization
|
|
52
|
+
<https://github.com/orgs/phasorpy/people>`_.
|
|
53
|
+
|
|
54
|
+
Technical direction is developed through open discussion and
|
|
55
|
+
consensus-building in issues, pull requests, and community meetings.
|
|
56
|
+
Members of the PhasorPy organization make final technical and release
|
|
57
|
+
decisions.
|
|
58
|
+
|
|
59
|
+
Infrastructure hosting, funded activities, and institutional partnerships are
|
|
60
|
+
coordinated through the `Advanced Bioimaging Unit <https://www.uba.uy>`__.
|
|
61
|
+
|
|
62
|
+
See the :doc:`Contributing guide <contributing>` to get involved.
|
|
63
|
+
|
|
64
|
+
Acknowledgments
|
|
65
|
+
---------------
|
|
66
|
+
|
|
67
|
+
We thank the PhasorPy user community for feedback, bug reports, feature
|
|
68
|
+
suggestions, and data files that have helped improve the library.
|
|
69
|
+
|
|
70
|
+
We acknowledge the open-source scientific Python ecosystem that PhasorPy
|
|
71
|
+
builds on, including Python, NumPy, SciPy, Matplotlib, and scikit-learn,
|
|
72
|
+
the microscopy file-format stack (including tifffile, ptufile, and related
|
|
73
|
+
tools), and the documentation toolchain based on Sphinx and Sphinx-Gallery.
|
|
74
|
+
|
|
75
|
+
We also acknowledge GitHub for providing a platform for collaborative
|
|
76
|
+
development and hosting documentation, PyPI and conda-forge for package
|
|
77
|
+
distribution, and Zenodo for hosting sample data.
|
|
78
|
+
|
|
79
|
+
Citation
|
|
80
|
+
--------
|
|
81
|
+
|
|
82
|
+
If PhasorPy contributes to research that leads to a publication, please cite
|
|
83
|
+
`doi: 10.5281/zenodo.13862586 <https://doi.org/10.5281/zenodo.13862586>`_.
|
|
@@ -5,8 +5,8 @@ This documents the application programming and command-line interfaces of
|
|
|
5
5
|
the PhasorPy library version |version|.
|
|
6
6
|
|
|
7
7
|
.. note::
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
PhasorPy is still under active development, and changes in new releases
|
|
9
|
+
may require updates to existing code.
|
|
10
10
|
|
|
11
11
|
.. toctree::
|
|
12
12
|
:maxdepth: 3
|
|
@@ -13,6 +13,7 @@ sys.path.insert(0, os.path.dirname(__file__))
|
|
|
13
13
|
|
|
14
14
|
# remove the examples header from HTML tutorials
|
|
15
15
|
import sphinx_gallery.gen_rst
|
|
16
|
+
from sphinx_gallery.sorting import ExplicitOrder
|
|
16
17
|
|
|
17
18
|
sphinx_gallery.gen_rst.EXAMPLE_HEADER = (
|
|
18
19
|
sphinx_gallery.gen_rst.EXAMPLE_HEADER.replace(
|
|
@@ -46,7 +47,6 @@ extensions = [
|
|
|
46
47
|
# don't enable intersphinx since tutorials are getting littered with links
|
|
47
48
|
# 'sphinx.ext.intersphinx',
|
|
48
49
|
# 'numpydoc',
|
|
49
|
-
'sphinx_inline_tabs',
|
|
50
50
|
'sphinx_copybutton',
|
|
51
51
|
'sphinx_click',
|
|
52
52
|
'sphinx_issues',
|
|
@@ -63,7 +63,7 @@ exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
|
|
63
63
|
# html_theme = 'sphinx_rtd_theme'
|
|
64
64
|
html_theme = 'pydata_sphinx_theme'
|
|
65
65
|
html_static_path = ['_static']
|
|
66
|
-
html_js_files = ['custom-icons.js']
|
|
66
|
+
html_js_files = [('custom-icons.js', {'defer': 'defer'})]
|
|
67
67
|
html_show_sourcelink = False
|
|
68
68
|
html_sidebars = {'**': ['sidebar-nav-bs']}
|
|
69
69
|
|
|
@@ -130,6 +130,13 @@ sphinx_gallery_conf = {
|
|
|
130
130
|
'filename_pattern': 'phasorpy_',
|
|
131
131
|
'examples_dirs': '../tutorials',
|
|
132
132
|
'gallery_dirs': 'tutorials',
|
|
133
|
+
'subsection_order': ExplicitOrder(
|
|
134
|
+
[
|
|
135
|
+
'../tutorials/applications',
|
|
136
|
+
'../tutorials/api',
|
|
137
|
+
'../tutorials/misc',
|
|
138
|
+
]
|
|
139
|
+
),
|
|
133
140
|
'reference_url': {'phasorpy': None},
|
|
134
141
|
'matplotlib_animations': True,
|
|
135
142
|
'within_subsection_order': 'conf.TutorialOrder',
|
|
@@ -140,9 +147,6 @@ sphinx_gallery_conf = {
|
|
|
140
147
|
# 'backreferences_dir': None,
|
|
141
148
|
}
|
|
142
149
|
|
|
143
|
-
# TODO: remove MathJax 3 link once scroll bar issue is resolved
|
|
144
|
-
mathjax_path = 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js'
|
|
145
|
-
|
|
146
150
|
|
|
147
151
|
class TutorialOrder:
|
|
148
152
|
"""Order tutorials in gallery subsections."""
|
|
@@ -151,22 +155,23 @@ class TutorialOrder:
|
|
|
151
155
|
'introduction',
|
|
152
156
|
'lifetime_geometry',
|
|
153
157
|
'lfd_workshop',
|
|
158
|
+
# applications
|
|
159
|
+
'component_fit',
|
|
160
|
+
'fret_efficiency',
|
|
161
|
+
'nadh_fraction',
|
|
162
|
+
'nadh_concentration',
|
|
163
|
+
'multidimensional',
|
|
154
164
|
# api
|
|
155
165
|
'io',
|
|
166
|
+
'lifetime_to_signal',
|
|
156
167
|
'phasor_from_lifetime',
|
|
157
|
-
'
|
|
168
|
+
'fret',
|
|
158
169
|
'filter',
|
|
170
|
+
'multi_harmonic',
|
|
159
171
|
'phasorplot',
|
|
160
172
|
'cursor',
|
|
161
173
|
'component',
|
|
162
|
-
'fret',
|
|
163
|
-
'lifetime_to_signal',
|
|
164
174
|
'pca',
|
|
165
|
-
# applications
|
|
166
|
-
'component_fit',
|
|
167
|
-
'fret_efficiency',
|
|
168
|
-
'nadh_concentration',
|
|
169
|
-
'multidimensional',
|
|
170
175
|
# misc
|
|
171
176
|
'logo',
|
|
172
177
|
'apps',
|
|
@@ -4,7 +4,7 @@ Contributing guide
|
|
|
4
4
|
As a community-maintained project, PhasorPy welcomes contributions in the form
|
|
5
5
|
of bug reports, bug fixes, feature implementations, documentation, datasets,
|
|
6
6
|
and enhancement proposals.
|
|
7
|
-
This
|
|
7
|
+
This guide explains how to contribute.
|
|
8
8
|
|
|
9
9
|
The :doc:`code_of_conduct` applies to everyone participating in the
|
|
10
10
|
PhasorPy community.
|
|
@@ -61,9 +61,9 @@ and include the following items in the bug report:
|
|
|
61
61
|
output of::
|
|
62
62
|
|
|
63
63
|
$ python -m phasorpy versions
|
|
64
|
-
Python-3.14.
|
|
65
|
-
phasorpy-0.
|
|
66
|
-
numpy-2.
|
|
64
|
+
Python-3.14.6
|
|
65
|
+
phasorpy-0.11
|
|
66
|
+
numpy-2.5.1
|
|
67
67
|
...
|
|
68
68
|
|
|
69
69
|
Contribute code or documentation
|
|
@@ -74,13 +74,13 @@ a GitHub repository at
|
|
|
74
74
|
`https://github.com/phasorpy/phasorpy <https://github.com/phasorpy/phasorpy>`_.
|
|
75
75
|
|
|
76
76
|
The repository is based on `git <https://git-scm.com/>`_, a distributed
|
|
77
|
-
version control
|
|
77
|
+
version control system for tracking changes in source code files and for
|
|
78
78
|
coordinating work among programmers collaboratively developing the code.
|
|
79
79
|
|
|
80
80
|
PhasorPy uses GitHub's `fork and pull collaborative development model
|
|
81
81
|
<https://docs.github.com/en/pull-requests/collaborating-with-pull-requests>`_.
|
|
82
82
|
All contributions to the PhasorPy source code and documentation should
|
|
83
|
-
be developed in personal forks
|
|
83
|
+
be developed in personal forks of the repository, and then submitted as
|
|
84
84
|
`pull requests <https://github.com/phasorpy/phasorpy/pulls>`_ (PRs).
|
|
85
85
|
|
|
86
86
|
The PhasorPy project loosely follows the
|
|
@@ -88,6 +88,30 @@ The PhasorPy project loosely follows the
|
|
|
88
88
|
`pyOpenSci <https://www.pyopensci.org/python-package-guide/>`_
|
|
89
89
|
development guidelines.
|
|
90
90
|
|
|
91
|
+
The PhasorPy project follows and adapts the `SciPy AI policy
|
|
92
|
+
<https://scipy.github.io/devdocs/dev/conduct/ai_policy.html>`_.
|
|
93
|
+
|
|
94
|
+
Copyright
|
|
95
|
+
.........
|
|
96
|
+
|
|
97
|
+
All code in PhasorPy is released under the :doc:`license`.
|
|
98
|
+
Contributors license their code under the same license when submitting it
|
|
99
|
+
to PhasorPy's version control repository.
|
|
100
|
+
That means contributors must have the right to submit the code to PhasorPy
|
|
101
|
+
and must comply with the terms of any MIT-compatible open-source license
|
|
102
|
+
associated with submitted code.
|
|
103
|
+
|
|
104
|
+
Accountability
|
|
105
|
+
..............
|
|
106
|
+
|
|
107
|
+
Contributors are responsible for all code submitted to the PhasorPy repository.
|
|
108
|
+
They must understand it and be able to explain it, regardless of whether it
|
|
109
|
+
was manually written or AI-generated.
|
|
110
|
+
|
|
111
|
+
Contributors must disclose whether AI has been used to assist in the
|
|
112
|
+
development of code or documentation. If so, specify the tool(s) used,
|
|
113
|
+
how they were used, and which code or text is AI-generated.
|
|
114
|
+
|
|
91
115
|
Fork the repository
|
|
92
116
|
...................
|
|
93
117
|
|
|
@@ -195,7 +219,7 @@ must conform to certain styles, which can be checked and applied with
|
|
|
195
219
|
|
|
196
220
|
$ python -m pre_commit run --all-files
|
|
197
221
|
|
|
198
|
-
|
|
222
|
+
Tests and user-facing classes and functions must use
|
|
199
223
|
`type hints <https://peps.python.org/pep-0484/>`_
|
|
200
224
|
and pass verification with the
|
|
201
225
|
`MyPy <https://mypy.readthedocs.io>`_
|
|
@@ -203,7 +227,6 @@ static type checker::
|
|
|
203
227
|
|
|
204
228
|
$ python -m mypy
|
|
205
229
|
|
|
206
|
-
|
|
207
230
|
The PhasorPy project follows the Scientific Python
|
|
208
231
|
`SPEC 0 - Minimum Supported Dependencies
|
|
209
232
|
<https://scientific-python.org/specs/spec-0000/>`_ recommendation
|
|
@@ -219,7 +242,7 @@ following the `numpydoc
|
|
|
219
242
|
standard.
|
|
220
243
|
|
|
221
244
|
Examples in docstrings must run and pass as
|
|
222
|
-
`doctests <https://docs.python.org/3/library/doctest.html>`_
|
|
245
|
+
`doctests <https://docs.python.org/3/library/doctest.html>`_::
|
|
223
246
|
|
|
224
247
|
$ python -m pytest -v src/phasorpy
|
|
225
248
|
|
|
@@ -232,7 +255,7 @@ to generate the documentation in HTML format published at
|
|
|
232
255
|
|
|
233
256
|
Sphinx documentation is written in the
|
|
234
257
|
`reStructuredText <https://docutils.sourceforge.io/rst.html>`_
|
|
235
|
-
markup language in
|
|
258
|
+
markup language in .rst files in the ``docs`` and ``tutorials`` folders.
|
|
236
259
|
|
|
237
260
|
All user-facing classes and functions should be included in the
|
|
238
261
|
``docs/api/*.rst`` files.
|
|
@@ -251,8 +274,8 @@ Examples in the .rst files must run and pass as doctests::
|
|
|
251
274
|
|
|
252
275
|
$ python -m pytest -v docs
|
|
253
276
|
|
|
254
|
-
Documentation in HTML format
|
|
255
|
-
and
|
|
277
|
+
Documentation can be built in HTML format from docstrings, .rst files,
|
|
278
|
+
and tutorials by running::
|
|
256
279
|
|
|
257
280
|
$ cd docs
|
|
258
281
|
$ make clean
|
|
@@ -263,7 +286,7 @@ Then open ``_build/html/index.html`` in a web browser.
|
|
|
263
286
|
Commit the changes
|
|
264
287
|
..................
|
|
265
288
|
|
|
266
|
-
Commit
|
|
289
|
+
Commit modified and new files to the local repository::
|
|
267
290
|
|
|
268
291
|
$ git add phasorpy/new_file.py
|
|
269
292
|
$ git commit -a -m "Summarize changes in 50 characters or less"
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
PhasorPy documentation
|
|
3
3
|
======================
|
|
4
4
|
|
|
5
|
-
Welcome to the documentation
|
|
5
|
+
Welcome to the documentation for PhasorPy version |version|.
|
|
6
6
|
|
|
7
7
|
PhasorPy is an open-source Python library for the analysis of luminescence
|
|
8
8
|
lifetime and hyperspectral images using the :doc:`phasor_approach`.
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
Project guide
|
|
11
|
+
=============
|
|
12
12
|
|
|
13
13
|
The :doc:`tutorials/index` demonstrate how to use the library, from simple
|
|
14
14
|
examples to advanced applications.
|
|
@@ -16,17 +16,17 @@ examples to advanced applications.
|
|
|
16
16
|
The :doc:`api/index` contains detailed information about all functions and
|
|
17
17
|
classes of the library.
|
|
18
18
|
|
|
19
|
-
The :doc:`release/index` list recent bug fixes, feature enhancements,
|
|
20
|
-
and maintenance changes.
|
|
19
|
+
The :doc:`release/index` list recent bug fixes, feature enhancements,
|
|
20
|
+
documentation, and maintenance changes.
|
|
21
21
|
|
|
22
|
-
The :doc:`contributing
|
|
23
|
-
submit fixes, and improve the documentation.
|
|
22
|
+
The :doc:`Contributing guide <contributing>` explains how to get support,
|
|
23
|
+
report bugs, submit fixes, and improve the documentation.
|
|
24
24
|
|
|
25
25
|
The :doc:`code_of_conduct` applies to everyone participating in the
|
|
26
26
|
PhasorPy community.
|
|
27
27
|
|
|
28
|
-
The :doc:`
|
|
29
|
-
|
|
28
|
+
The :doc:`About <about>` page describes the project's history, goals,
|
|
29
|
+
funding, and governance.
|
|
30
30
|
|
|
31
31
|
The PhasorPy library and documentation are released under the permissive
|
|
32
32
|
:doc:`license`.
|
|
@@ -44,7 +44,7 @@ Sample data files used in tutorials and testing are available from the
|
|
|
44
44
|
Report issues with the code or documentation on the
|
|
45
45
|
`issue tracker on GitHub <https://github.com/phasorpy/phasorpy/issues>`_.
|
|
46
46
|
|
|
47
|
-
Questions about
|
|
47
|
+
Questions about using the PhasorPy library can be asked on the
|
|
48
48
|
`issue tracker on GitHub <https://github.com/phasorpy/phasorpy/issues>`_.
|
|
49
49
|
|
|
50
50
|
Please cite
|
|
@@ -62,8 +62,8 @@ Contents
|
|
|
62
62
|
api/index
|
|
63
63
|
release/index
|
|
64
64
|
contributing
|
|
65
|
-
acknowledgments
|
|
66
65
|
license
|
|
66
|
+
about
|
|
67
67
|
|
|
68
68
|
Indices and tables
|
|
69
69
|
------------------
|