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.
Files changed (137) hide show
  1. {phasorpy-0.10 → phasorpy-0.12}/PKG-INFO +18 -4
  2. {phasorpy-0.10 → phasorpy-0.12}/README.md +13 -0
  3. {phasorpy-0.10 → phasorpy-0.12}/docs/_static/switcher.json +13 -3
  4. phasorpy-0.12/docs/about.rst +83 -0
  5. phasorpy-0.12/docs/acknowledgments.rst +3 -0
  6. {phasorpy-0.10 → phasorpy-0.12}/docs/api/index.rst +2 -2
  7. {phasorpy-0.10 → phasorpy-0.12}/docs/conf.py +18 -13
  8. {phasorpy-0.10 → phasorpy-0.12}/docs/contributing.rst +36 -13
  9. {phasorpy-0.10 → phasorpy-0.12}/docs/index.rst +11 -11
  10. {phasorpy-0.10 → phasorpy-0.12}/docs/phasor_approach.rst +129 -50
  11. {phasorpy-0.10 → phasorpy-0.12}/pyproject.toml +25 -18
  12. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/__init__.py +1 -1
  13. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/_phasorpy.pyx +89 -11
  14. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/_utils.py +4 -4
  15. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/cli.py +126 -3
  16. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/cluster.py +3 -3
  17. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/color.py +3 -3
  18. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/component.py +45 -21
  19. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/cursor.py +7 -8
  20. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/datasets.py +43 -4
  21. phasorpy-0.12/src/phasorpy/experimental.py +264 -0
  22. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/filter.py +107 -35
  23. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/io/__init__.py +34 -16
  24. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/io/_flimlabs.py +5 -3
  25. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/io/_leica.py +16 -0
  26. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/io/_ometiff.py +98 -2
  27. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/io/_other.py +323 -10
  28. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/io/_simfcs.py +17 -1
  29. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/lifetime.py +38 -16
  30. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/phasor.py +24 -8
  31. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/plot/__init__.py +3 -0
  32. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/plot/_functions.py +10 -11
  33. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/plot/_lifetime_plots.py +2 -2
  34. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/plot/_phasorplot.py +29 -13
  35. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/plot/_phasorplot_fret.py +3 -3
  36. phasorpy-0.12/src/phasorpy/plot/_spectral_plots.py +734 -0
  37. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/utils.py +9 -2
  38. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy.egg-info/PKG-INFO +18 -4
  39. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy.egg-info/SOURCES.txt +4 -0
  40. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy.egg-info/requires.txt +4 -3
  41. {phasorpy-0.10 → phasorpy-0.12}/tests/conftest.py +4 -4
  42. {phasorpy-0.10 → phasorpy-0.12}/tests/io/test_flimlabs.py +8 -10
  43. {phasorpy-0.10 → phasorpy-0.12}/tests/io/test_leica.py +4 -8
  44. {phasorpy-0.10 → phasorpy-0.12}/tests/io/test_ometiff.py +35 -11
  45. phasorpy-0.12/tests/io/test_other.py +729 -0
  46. {phasorpy-0.10 → phasorpy-0.12}/tests/io/test_simfcs.py +13 -17
  47. {phasorpy-0.10 → phasorpy-0.12}/tests/plot/test_functions.py +20 -18
  48. {phasorpy-0.10 → phasorpy-0.12}/tests/plot/test_lifetime_plots.py +6 -10
  49. {phasorpy-0.10 → phasorpy-0.12}/tests/plot/test_phasorplot.py +22 -24
  50. {phasorpy-0.10 → phasorpy-0.12}/tests/plot/test_phasorplot_fret.py +2 -6
  51. phasorpy-0.12/tests/plot/test_spectral_plots.py +242 -0
  52. {phasorpy-0.10 → phasorpy-0.12}/tests/test__phasorpy.py +42 -35
  53. {phasorpy-0.10 → phasorpy-0.12}/tests/test__typing.py +1 -5
  54. {phasorpy-0.10 → phasorpy-0.12}/tests/test__utils.py +20 -23
  55. {phasorpy-0.10 → phasorpy-0.12}/tests/test_cli.py +32 -7
  56. {phasorpy-0.10 → phasorpy-0.12}/tests/test_cluster.py +19 -12
  57. {phasorpy-0.10 → phasorpy-0.12}/tests/test_color.py +2 -6
  58. {phasorpy-0.10 → phasorpy-0.12}/tests/test_component.py +68 -63
  59. {phasorpy-0.10 → phasorpy-0.12}/tests/test_cursor.py +53 -26
  60. {phasorpy-0.10 → phasorpy-0.12}/tests/test_datasets.py +10 -14
  61. phasorpy-0.12/tests/test_experimental.py +114 -0
  62. {phasorpy-0.10 → phasorpy-0.12}/tests/test_filter.py +268 -53
  63. {phasorpy-0.10 → phasorpy-0.12}/tests/test_lifetime.py +100 -70
  64. {phasorpy-0.10 → phasorpy-0.12}/tests/test_nan.py +28 -32
  65. {phasorpy-0.10 → phasorpy-0.12}/tests/test_phasor.py +88 -66
  66. {phasorpy-0.10 → phasorpy-0.12}/tests/test_phasorpy.py +1 -5
  67. {phasorpy-0.10 → phasorpy-0.12}/tests/test_utils.py +3 -7
  68. {phasorpy-0.10 → phasorpy-0.12}/tools/build_manylinux.cmd +1 -1
  69. {phasorpy-0.10 → phasorpy-0.12}/tools/build_manylinux.sh +1 -1
  70. {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_component.py +6 -6
  71. {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_cursor.py +1 -1
  72. {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_filter.py +24 -13
  73. {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_fret.py +3 -3
  74. {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_io.py +42 -21
  75. {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_lifetime_to_signal.py +4 -4
  76. {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_multi_harmonic.py +1 -1
  77. {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_pca.py +1 -1
  78. {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_phasor_from_lifetime.py +2 -2
  79. {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/phasorpy_phasorplot.py +3 -3
  80. {phasorpy-0.10 → phasorpy-0.12}/tutorials/applications/phasorpy_component_fit.py +5 -3
  81. {phasorpy-0.10 → phasorpy-0.12}/tutorials/applications/phasorpy_fret_efficiency.py +2 -2
  82. {phasorpy-0.10 → phasorpy-0.12}/tutorials/applications/phasorpy_multidimensional.py +3 -1
  83. {phasorpy-0.10 → phasorpy-0.12}/tutorials/applications/phasorpy_nadh_concentration.py +4 -4
  84. phasorpy-0.12/tutorials/applications/phasorpy_nadh_fraction.py +251 -0
  85. phasorpy-0.12/tutorials/misc/phasorpy_apps.py +114 -0
  86. {phasorpy-0.10 → phasorpy-0.12}/tutorials/misc/phasorpy_phasor_from_signal.py +1 -1
  87. {phasorpy-0.10 → phasorpy-0.12}/tutorials/phasorpy_introduction.py +1 -1
  88. {phasorpy-0.10 → phasorpy-0.12}/tutorials/phasorpy_lfd_workshop.py +7 -2
  89. {phasorpy-0.10 → phasorpy-0.12}/tutorials/phasorpy_lifetime_geometry.py +20 -19
  90. phasorpy-0.10/docs/acknowledgments.rst +0 -42
  91. phasorpy-0.10/src/phasorpy/experimental.py +0 -146
  92. phasorpy-0.10/tests/io/test_other.py +0 -357
  93. phasorpy-0.10/tests/test_experimental.py +0 -37
  94. phasorpy-0.10/tutorials/misc/phasorpy_apps.py +0 -77
  95. {phasorpy-0.10 → phasorpy-0.12}/LICENSE.txt +0 -0
  96. {phasorpy-0.10 → phasorpy-0.12}/MANIFEST.in +0 -0
  97. {phasorpy-0.10 → phasorpy-0.12}/docs/_static/categorical.png +0 -0
  98. {phasorpy-0.10 → phasorpy-0.12}/docs/_static/custom-icons.js +0 -0
  99. {phasorpy-0.10 → phasorpy-0.12}/docs/_static/favicon.ico +0 -0
  100. {phasorpy-0.10 → phasorpy-0.12}/docs/_static/phasorpy_logo.png +0 -0
  101. {phasorpy-0.10 → phasorpy-0.12}/docs/_static/phasorpy_logo.svg +0 -0
  102. {phasorpy-0.10 → phasorpy-0.12}/docs/_static/srgb_spectrum.png +0 -0
  103. {phasorpy-0.10 → phasorpy-0.12}/docs/api/_phasorpy.rst +0 -0
  104. {phasorpy-0.10 → phasorpy-0.12}/docs/api/_utils.rst +0 -0
  105. {phasorpy-0.10 → phasorpy-0.12}/docs/api/cli.rst +0 -0
  106. {phasorpy-0.10 → phasorpy-0.12}/docs/api/cluster.rst +0 -0
  107. {phasorpy-0.10 → phasorpy-0.12}/docs/api/color.rst +0 -0
  108. {phasorpy-0.10 → phasorpy-0.12}/docs/api/component.rst +0 -0
  109. {phasorpy-0.10 → phasorpy-0.12}/docs/api/cursor.rst +0 -0
  110. {phasorpy-0.10 → phasorpy-0.12}/docs/api/datasets.rst +0 -0
  111. {phasorpy-0.10 → phasorpy-0.12}/docs/api/experimental.rst +0 -0
  112. {phasorpy-0.10 → phasorpy-0.12}/docs/api/filter.rst +0 -0
  113. {phasorpy-0.10 → phasorpy-0.12}/docs/api/io.rst +0 -0
  114. {phasorpy-0.10 → phasorpy-0.12}/docs/api/lifetime.rst +0 -0
  115. {phasorpy-0.10 → phasorpy-0.12}/docs/api/phasor.rst +0 -0
  116. {phasorpy-0.10 → phasorpy-0.12}/docs/api/phasorpy.rst +0 -0
  117. {phasorpy-0.10 → phasorpy-0.12}/docs/api/plot.rst +0 -0
  118. {phasorpy-0.10 → phasorpy-0.12}/docs/api/utils.rst +0 -0
  119. {phasorpy-0.10 → phasorpy-0.12}/docs/code_of_conduct.rst +0 -0
  120. {phasorpy-0.10 → phasorpy-0.12}/docs/license.rst +0 -0
  121. {phasorpy-0.10 → phasorpy-0.12}/setup.cfg +0 -0
  122. {phasorpy-0.10 → phasorpy-0.12}/setup.py +0 -0
  123. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/__main__.py +0 -0
  124. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/_typing.py +0 -0
  125. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/conftest.py +0 -0
  126. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy/py.typed +0 -0
  127. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy.egg-info/dependency_links.txt +0 -0
  128. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy.egg-info/entry_points.txt +0 -0
  129. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy.egg-info/not-zip-safe +0 -0
  130. {phasorpy-0.10 → phasorpy-0.12}/src/phasorpy.egg-info/top_level.txt +0 -0
  131. {phasorpy-0.10 → phasorpy-0.12}/tests/io/_conftest.py +0 -0
  132. {phasorpy-0.10 → phasorpy-0.12}/tools/sha256.py +0 -0
  133. {phasorpy-0.10 → phasorpy-0.12}/tutorials/README.rst +0 -0
  134. {phasorpy-0.10 → phasorpy-0.12}/tutorials/api/README.rst +0 -0
  135. {phasorpy-0.10 → phasorpy-0.12}/tutorials/applications/README.rst +0 -0
  136. {phasorpy-0.10 → phasorpy-0.12}/tutorials/misc/README.rst +0 -0
  137. {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.10
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>=2024.8.30
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>=2024.5.24; extra == "all"
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: imagecodecs==2026.3.6; (sys_platform == "darwin" and platform_machine == "x86_64") and extra == "all"
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="&#x25CB;" 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.11",
4
+ "version": "0.13",
5
5
  "url": "https://www.phasorpy.org/docs/dev/"
6
6
  },
7
7
  {
8
- "name": "0.10 (stable)",
9
- "version": "0.10",
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>`_.
@@ -0,0 +1,3 @@
1
+ :orphan:
2
+
3
+ See :doc:`about`
@@ -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
- The PhasorPy library is still under construction. Backwards-incompatible
9
- changes may occur between revisions.
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
- 'multi_harmonic',
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 document provides information on how to contribute.
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.1
65
- phasorpy-0.8
66
- numpy-2.3.5
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 software for tracking changes in the source code files and for
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/copies of the code, and then submitted as
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
- User-facing classes and functions must use
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 the .rst files in the ``docs`` and ``tutorials`` folders.
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 can be built from the docstrings, .rst,
255
- and tutorial files by running::
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 changed and new files to the local repository::
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 of PhasorPy version |version|.
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
- Quickstart
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, documentation,
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` explains how to get support, report bugs,
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:`acknowledgments` list individuals and organizations that
29
- contributed to the development of PhasorPy.
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 the usage of the PhasorPy library are answered on the
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
  ------------------