phasorpy 0.6__tar.gz → 0.7__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 (118) hide show
  1. {phasorpy-0.6 → phasorpy-0.7}/MANIFEST.in +4 -0
  2. {phasorpy-0.6/src/phasorpy.egg-info → phasorpy-0.7}/PKG-INFO +2 -2
  3. phasorpy-0.7/docs/_static/favicon.ico +0 -0
  4. phasorpy-0.7/docs/_static/phasorpy_logo.png +0 -0
  5. phasorpy-0.7/docs/_static/phasorpy_logo.svg +238 -0
  6. {phasorpy-0.6 → phasorpy-0.7}/docs/_static/switcher.json +8 -8
  7. phasorpy-0.7/docs/api/component.rst +5 -0
  8. phasorpy-0.7/docs/api/cursor.rst +5 -0
  9. {phasorpy-0.6 → phasorpy-0.7}/docs/api/index.rst +3 -2
  10. phasorpy-0.7/docs/api/lifetime.rst +5 -0
  11. {phasorpy-0.6 → phasorpy-0.7}/docs/conf.py +9 -7
  12. {phasorpy-0.6 → phasorpy-0.7}/docs/release.rst +69 -1
  13. {phasorpy-0.6 → phasorpy-0.7}/pyproject.toml +5 -4
  14. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/__init__.py +1 -1
  15. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/_phasorpy.pyx +281 -9
  16. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/_utils.py +101 -28
  17. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/cli.py +19 -1
  18. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/cluster.py +10 -16
  19. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/color.py +11 -7
  20. phasorpy-0.6/src/phasorpy/components.py → phasorpy-0.7/src/phasorpy/component.py +255 -32
  21. phasorpy-0.6/src/phasorpy/cursors.py → phasorpy-0.7/src/phasorpy/cursor.py +31 -33
  22. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/datasets.py +117 -7
  23. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/experimental.py +8 -10
  24. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/io/__init__.py +1 -0
  25. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/io/_flimlabs.py +20 -10
  26. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/io/_leica.py +3 -1
  27. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/io/_ometiff.py +2 -3
  28. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/io/_other.py +115 -7
  29. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/io/_simfcs.py +41 -16
  30. phasorpy-0.7/src/phasorpy/lifetime.py +2058 -0
  31. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/phasor.py +71 -1947
  32. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/plot/_functions.py +8 -2
  33. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/plot/_lifetime_plots.py +33 -23
  34. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/plot/_phasorplot.py +547 -159
  35. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/plot/_phasorplot_fret.py +11 -9
  36. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/utils.py +21 -10
  37. {phasorpy-0.6 → phasorpy-0.7/src/phasorpy.egg-info}/PKG-INFO +2 -2
  38. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy.egg-info/SOURCES.txt +23 -13
  39. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy.egg-info/requires.txt +1 -1
  40. {phasorpy-0.6 → phasorpy-0.7}/tests/test__phasorpy.py +5 -5
  41. {phasorpy-0.6 → phasorpy-0.7}/tests/test__utils.py +8 -3
  42. {phasorpy-0.6 → phasorpy-0.7}/tests/test_cli.py +8 -0
  43. {phasorpy-0.6 → phasorpy-0.7}/tests/test_cluster.py +11 -11
  44. phasorpy-0.6/tests/test_components.py → phasorpy-0.7/tests/test_component.py +228 -18
  45. phasorpy-0.6/tests/test_cursors.py → phasorpy-0.7/tests/test_cursor.py +35 -20
  46. {phasorpy-0.6 → phasorpy-0.7}/tests/test_datasets.py +3 -0
  47. {phasorpy-0.6 → phasorpy-0.7}/tests/test_experimental.py +2 -2
  48. phasorpy-0.7/tests/test_lifetime.py +1781 -0
  49. {phasorpy-0.6 → phasorpy-0.7}/tests/test_nan.py +45 -43
  50. {phasorpy-0.6 → phasorpy-0.7}/tests/test_phasor.py +89 -1614
  51. phasorpy-0.7/tools/build_manylinux.cmd +13 -0
  52. phasorpy-0.7/tools/build_manylinux.sh +10 -0
  53. phasorpy-0.7/tools/sha256.py +36 -0
  54. phasorpy-0.6/tutorials/api/phasorpy_components.py → phasorpy-0.7/tutorials/api/phasorpy_component.py +11 -11
  55. phasorpy-0.6/tutorials/api/phasorpy_cursors.py → phasorpy-0.7/tutorials/api/phasorpy_cursor.py +29 -32
  56. phasorpy-0.6/tutorials/api/phasorpy_filtering.py → phasorpy-0.7/tutorials/api/phasorpy_filter.py +3 -3
  57. {phasorpy-0.6 → phasorpy-0.7}/tutorials/api/phasorpy_fret.py +4 -4
  58. {phasorpy-0.6 → phasorpy-0.7}/tutorials/api/phasorpy_io.py +42 -42
  59. {phasorpy-0.6 → phasorpy-0.7}/tutorials/api/phasorpy_lifetime_to_signal.py +3 -3
  60. phasorpy-0.6/tutorials/api/phasorpy_multi-harmonic.py → phasorpy-0.7/tutorials/api/phasorpy_multi_harmonic.py +1 -1
  61. {phasorpy-0.6 → phasorpy-0.7}/tutorials/api/phasorpy_pca.py +4 -4
  62. {phasorpy-0.6 → phasorpy-0.7}/tutorials/api/phasorpy_phasor_from_lifetime.py +8 -7
  63. {phasorpy-0.6 → phasorpy-0.7}/tutorials/api/phasorpy_phasorplot.py +139 -37
  64. {phasorpy-0.6 → phasorpy-0.7}/tutorials/applications/phasorpy_component_fit.py +35 -20
  65. {phasorpy-0.6 → phasorpy-0.7}/tutorials/applications/phasorpy_fret_efficiency.py +19 -11
  66. phasorpy-0.7/tutorials/applications/phasorpy_multidimensional.py +315 -0
  67. phasorpy-0.7/tutorials/misc/README.rst +4 -0
  68. phasorpy-0.7/tutorials/misc/phasorpy_logo.py +141 -0
  69. {phasorpy-0.6 → phasorpy-0.7}/tutorials/phasorpy_introduction.py +39 -37
  70. {phasorpy-0.6 → phasorpy-0.7}/tutorials/phasorpy_lfd_workshop.py +16 -14
  71. {phasorpy-0.6 → phasorpy-0.7}/tutorials/phasorpy_lifetime_geometry.py +94 -80
  72. phasorpy-0.6/docs/_static/logo.png +0 -0
  73. phasorpy-0.6/docs/api/components.rst +0 -5
  74. phasorpy-0.6/docs/api/cursors.rst +0 -5
  75. phasorpy-0.6/tutorials/benchmarks/README.rst +0 -4
  76. {phasorpy-0.6 → phasorpy-0.7}/LICENSE.txt +0 -0
  77. {phasorpy-0.6 → phasorpy-0.7}/README.md +0 -0
  78. {phasorpy-0.6 → phasorpy-0.7}/docs/_static/categorical.png +0 -0
  79. {phasorpy-0.6 → phasorpy-0.7}/docs/_static/custom-icons.js +0 -0
  80. {phasorpy-0.6 → phasorpy-0.7}/docs/_static/srgb_spectrum.png +0 -0
  81. {phasorpy-0.6 → phasorpy-0.7}/docs/acknowledgments.rst +0 -0
  82. {phasorpy-0.6 → phasorpy-0.7}/docs/api/_phasorpy.rst +0 -0
  83. {phasorpy-0.6 → phasorpy-0.7}/docs/api/_utils.rst +0 -0
  84. {phasorpy-0.6 → phasorpy-0.7}/docs/api/cli.rst +0 -0
  85. {phasorpy-0.6 → phasorpy-0.7}/docs/api/cluster.rst +0 -0
  86. {phasorpy-0.6 → phasorpy-0.7}/docs/api/color.rst +0 -0
  87. {phasorpy-0.6 → phasorpy-0.7}/docs/api/datasets.rst +0 -0
  88. {phasorpy-0.6 → phasorpy-0.7}/docs/api/experimental.rst +0 -0
  89. {phasorpy-0.6 → phasorpy-0.7}/docs/api/io.rst +0 -0
  90. {phasorpy-0.6 → phasorpy-0.7}/docs/api/phasor.rst +0 -0
  91. {phasorpy-0.6 → phasorpy-0.7}/docs/api/phasorpy.rst +0 -0
  92. {phasorpy-0.6 → phasorpy-0.7}/docs/api/plot.rst +0 -0
  93. {phasorpy-0.6 → phasorpy-0.7}/docs/api/utils.rst +0 -0
  94. {phasorpy-0.6 → phasorpy-0.7}/docs/code_of_conduct.rst +0 -0
  95. {phasorpy-0.6 → phasorpy-0.7}/docs/contributing.rst +0 -0
  96. {phasorpy-0.6 → phasorpy-0.7}/docs/index.rst +0 -0
  97. {phasorpy-0.6 → phasorpy-0.7}/docs/license.rst +0 -0
  98. {phasorpy-0.6 → phasorpy-0.7}/docs/phasor_approach.rst +0 -0
  99. {phasorpy-0.6 → phasorpy-0.7}/setup.cfg +0 -0
  100. {phasorpy-0.6 → phasorpy-0.7}/setup.py +0 -0
  101. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/__main__.py +0 -0
  102. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/_typing.py +0 -0
  103. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/conftest.py +0 -0
  104. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/plot/__init__.py +0 -0
  105. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy/py.typed +0 -0
  106. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy.egg-info/dependency_links.txt +0 -0
  107. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy.egg-info/entry_points.txt +0 -0
  108. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy.egg-info/not-zip-safe +0 -0
  109. {phasorpy-0.6 → phasorpy-0.7}/src/phasorpy.egg-info/top_level.txt +0 -0
  110. {phasorpy-0.6 → phasorpy-0.7}/tests/conftest.py +0 -0
  111. {phasorpy-0.6 → phasorpy-0.7}/tests/test__typing.py +0 -0
  112. {phasorpy-0.6 → phasorpy-0.7}/tests/test_color.py +0 -0
  113. {phasorpy-0.6 → phasorpy-0.7}/tests/test_phasorpy.py +0 -0
  114. {phasorpy-0.6 → phasorpy-0.7}/tests/test_utils.py +0 -0
  115. {phasorpy-0.6 → phasorpy-0.7}/tutorials/README.rst +0 -0
  116. {phasorpy-0.6 → phasorpy-0.7}/tutorials/api/README.rst +0 -0
  117. {phasorpy-0.6 → phasorpy-0.7}/tutorials/applications/README.rst +0 -0
  118. {phasorpy-0.6/tutorials/benchmarks → phasorpy-0.7/tutorials/misc}/phasorpy_phasor_from_signal.py +0 -0
@@ -14,6 +14,10 @@ recursive-include tutorials *.rst
14
14
  exclude *.cmd
15
15
  exclude docs/sg_execution_times.rst
16
16
 
17
+ include tools/*.py
18
+ include tools/*.sh
19
+ include tools/*.cmd
20
+
17
21
  recursive-exclude * __pycache__
18
22
  recursive-exclude * *.py[co]
19
23
  recursive-exclude * *Copy*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: phasorpy
3
- Version: 0.6
3
+ Version: 0.7
4
4
  Summary: Analysis of fluorescence lifetime and hyperspectral images using the phasor approach
5
5
  Author: PhasorPy Contributors
6
6
  License-Expression: MIT
@@ -24,7 +24,7 @@ Classifier: Programming Language :: Python :: 3.13
24
24
  Requires-Python: >=3.11
25
25
  Description-Content-Type: text/markdown
26
26
  License-File: LICENSE.txt
27
- Requires-Dist: numpy>=1.25.0
27
+ Requires-Dist: numpy>=1.26.0
28
28
  Requires-Dist: matplotlib>=3.8.0
29
29
  Requires-Dist: scipy>=1.11.0
30
30
  Requires-Dist: click
Binary file
@@ -0,0 +1,238 @@
1
+ <?xml version="1.0" encoding="utf-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" width="466.821818pt" height="475.2pt" viewBox="0 0 466.821818 475.2" xmlns="http://www.w3.org/2000/svg" version="1.1">
5
+ <metadata>
6
+ <rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
7
+ <cc:Work>
8
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
9
+ <dc:date>2025-08-16T13:06:26.207012</dc:date>
10
+ <dc:format>image/svg+xml</dc:format>
11
+ <dc:creator>
12
+ <cc:Agent>
13
+ <dc:title>Matplotlib v3.10.3, https://matplotlib.org/</dc:title>
14
+ </cc:Agent>
15
+ </dc:creator>
16
+ </cc:Work>
17
+ </rdf:RDF>
18
+ </metadata>
19
+ <defs>
20
+ <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style>
21
+ </defs>
22
+ <g id="figure_1">
23
+ <g id="patch_1">
24
+ <path d="M 0 475.2
25
+ L 466.821818 475.2
26
+ L 466.821818 0
27
+ L 0 0
28
+ L 0 475.2
29
+ z
30
+ " style="fill: none"/>
31
+ </g>
32
+ <g id="axes_1">
33
+ <g id="patch_2">
34
+ <path d="M 442.865455 237.6
35
+ C 442.865455 182.070506 420.782921 128.758553 381.517639 89.493271
36
+ C 342.252357 50.227989 288.940403 28.145455 233.410909 28.145455
37
+ C 177.881415 28.145455 124.569462 50.227989 85.30418 89.493271
38
+ C 46.038898 128.758553 23.956364 182.070506 23.956364 237.6
39
+ " clip-path="url(#peaa5e65bc5)" style="fill: none; stroke: #808080; stroke-linejoin: miter"/>
40
+ </g>
41
+ <g id="patch_3">
42
+ <path d="M 442.865455 237.6
43
+ C 442.865455 182.070506 420.782921 128.758553 381.517639 89.493271
44
+ C 342.252357 50.227989 288.940403 28.145455 233.410909 28.145455
45
+ C 177.881415 28.145455 124.569462 50.227989 85.30418 89.493271
46
+ C 46.038898 128.758553 23.956364 182.070506 23.956364 237.6
47
+ " clip-path="url(#peaa5e65bc5)" style="fill: none; stroke: #1f77b4; stroke-width: 25; stroke-linejoin: miter; stroke-linecap: round"/>
48
+ </g>
49
+ <g id="line2d_1"/>
50
+ <g id="patch_4">
51
+ <path d="M 298.117675 163.206254
52
+ C 307.005354 163.206254 315.530214 159.675142 321.814752 153.390604
53
+ C 328.09929 147.106065 331.630402 138.581206 331.630402 129.693527
54
+ C 331.630402 120.805848 328.09929 112.280988 321.814752 105.99645
55
+ C 315.530214 99.711912 307.005354 96.1808 298.117675 96.1808
56
+ C 289.229996 96.1808 280.705137 99.711912 274.420598 105.99645
57
+ C 268.13606 112.280988 264.604948 120.805848 264.604948 129.693527
58
+ C 264.604948 138.581206 268.13606 147.106065 274.420598 153.390604
59
+ C 280.705137 159.675142 289.229996 163.206254 298.117675 163.206254
60
+ L 298.117675 163.206254
61
+ z
62
+ " clip-path="url(#peaa5e65bc5)" style="fill: none; stroke: #1f77b4; stroke-width: 25; stroke-linejoin: miter"/>
63
+ </g>
64
+ <g id="axes_2">
65
+ <g id="line2d_2">
66
+ <path d="M 33.934017 302.312103
67
+ L 52.708312 303.145145
68
+ L 60.530936 303.285992
69
+ L 65.224509 303.115831
70
+ L 68.353559 302.767921
71
+ L 71.482608 302.104113
72
+ L 73.047133 301.605824
73
+ L 74.611657 300.964941
74
+ L 76.176182 300.153793
75
+ L 77.740707 299.141708
76
+ L 79.305231 297.895328
77
+ L 80.869756 296.379095
78
+ L 82.434281 294.55597
79
+ L 83.998805 292.388356
80
+ L 85.56333 289.839242
81
+ L 87.127855 286.873547
82
+ L 88.692379 283.459621
83
+ L 90.256904 279.570861
84
+ L 91.821428 275.187373
85
+ L 93.385953 270.2976
86
+ L 94.950478 264.899823
87
+ L 96.515002 259.003446
88
+ L 99.644052 245.813598
89
+ L 102.773101 231.05248
90
+ L 107.466675 207.143939
91
+ L 112.160249 183.246069
92
+ L 115.289298 168.602365
93
+ L 116.853823 161.934547
94
+ L 118.418347 155.802157
95
+ L 119.982872 150.265116
96
+ L 121.547397 145.369973
97
+ L 123.111921 141.149153
98
+ L 124.676446 137.620767
99
+ L 126.240971 134.788968
100
+ L 127.805495 132.644787
101
+ L 129.37002 131.167393
102
+ L 130.934545 130.325665
103
+ L 132.499069 130.08
104
+ L 134.063594 130.384228
105
+ L 135.628119 131.187554
106
+ L 137.192643 132.436435
107
+ L 138.757168 134.076305
108
+ L 140.321693 136.053113
109
+ L 141.886217 138.314617
110
+ L 145.015267 143.497746
111
+ L 148.144316 149.276877
112
+ L 154.402414 161.575759
113
+ L 160.660513 173.769381
114
+ L 165.354087 182.443472
115
+ L 170.047661 190.601851
116
+ L 174.741235 198.227271
117
+ L 179.434809 205.335712
118
+ L 184.128383 211.955743
119
+ L 188.821957 218.119189
120
+ L 193.515531 223.85745
121
+ L 198.209105 229.200278
122
+ L 202.902678 234.175488
123
+ L 207.596252 238.808971
124
+ L 212.289826 243.1248
125
+ L 216.9834 247.145351
126
+ L 221.676974 250.891419
127
+ L 226.370548 254.382332
128
+ L 231.064122 257.636052
129
+ L 235.757696 260.669275
130
+ L 240.45127 263.497516
131
+ L 246.709369 266.97442
132
+ L 252.967467 270.14383
133
+ L 259.225566 273.034227
134
+ L 265.483664 275.671441
135
+ L 271.741763 278.0789
136
+ L 277.999862 280.277854
137
+ L 285.822485 282.762525
138
+ L 293.645108 284.985144
139
+ L 301.467731 286.975585
140
+ L 309.290354 288.760295
141
+ L 318.677502 290.663147
142
+ L 328.06465 292.338714
143
+ L 339.016323 294.046839
144
+ L 349.967995 295.528544
145
+ L 362.484193 296.989279
146
+ L 376.564914 298.387397
147
+ L 392.210161 299.694814
148
+ L 409.419932 300.896578
149
+ L 429.758752 302.071605
150
+ L 432.887802 302.233093
151
+ L 432.887802 302.233093
152
+ " clip-path="url(#p717529631e)" style="fill: none; stroke: #ff7f0e; stroke-width: 25; stroke-linecap: round"/>
153
+ </g>
154
+ </g>
155
+ <g id="axes_3">
156
+ <g id="line2d_3">
157
+ <path d="M 79.176198 378.045938
158
+ L 85.224618 372.974192
159
+ L 92.482722 366.605631
160
+ L 108.208614 352.38659
161
+ L 116.676403 344.890774
162
+ L 123.934507 338.774217
163
+ L 129.982927 333.996198
164
+ L 134.821663 330.434753
165
+ L 139.660399 327.142595
166
+ L 144.499135 324.151431
167
+ L 149.337871 321.490065
168
+ L 152.966923 319.726017
169
+ L 156.595975 318.171527
170
+ L 160.225027 316.835021
171
+ L 163.854079 315.72374
172
+ L 167.483131 314.843707
173
+ L 171.112183 314.19969
174
+ L 174.741235 313.79518
175
+ L 178.370287 313.632369
176
+ L 181.999339 313.712139
177
+ L 185.628391 314.034058
178
+ L 189.257443 314.596381
179
+ L 192.886495 315.396061
180
+ L 196.515547 316.428764
181
+ L 200.144599 317.688894
182
+ L 203.773651 319.169623
183
+ L 207.402703 320.862926
184
+ L 211.031755 322.759627
185
+ L 215.870491 325.587041
186
+ L 220.709227 328.73043
187
+ L 225.547963 332.159519
188
+ L 230.386699 335.841285
189
+ L 236.435119 340.744598
190
+ L 243.693223 346.972253
191
+ L 253.370695 355.636354
192
+ L 270.306271 370.850811
193
+ L 277.564375 377.025496
194
+ L 283.612795 381.868451
195
+ L 288.451531 385.491953
196
+ L 293.290267 388.854511
197
+ L 298.129003 391.923743
198
+ L 302.967739 394.67009
199
+ L 306.596791 396.501922
200
+ L 310.225843 398.127257
201
+ L 313.854895 399.537289
202
+ L 317.483947 400.724375
203
+ L 321.113 401.682083
204
+ L 324.742052 402.405223
205
+ L 328.371104 402.889876
206
+ L 332.000156 403.133417
207
+ L 335.629208 403.134524
208
+ L 339.25826 402.893192
209
+ L 342.887312 402.41073
210
+ L 346.516364 401.68975
211
+ L 350.145416 400.734162
212
+ L 353.774468 399.549142
213
+ L 357.40352 398.141112
214
+ L 361.032572 396.517704
215
+ L 364.661624 394.687713
216
+ L 368.290676 392.661058
217
+ L 373.129412 389.672056
218
+ L 377.968148 386.381855
219
+ L 382.806884 382.822139
220
+ L 387.64562 379.027192
221
+ L 387.64562 379.027192
222
+ " clip-path="url(#p1db590b24e)" style="fill: none; stroke: #2ca02c; stroke-width: 25; stroke-linecap: round"/>
223
+ </g>
224
+ </g>
225
+ </g>
226
+ </g>
227
+ <defs>
228
+ <clipPath id="peaa5e65bc5">
229
+ <rect x="7.2" y="7.2" width="452.421818" height="460.8"/>
230
+ </clipPath>
231
+ <clipPath id="p717529631e">
232
+ <rect x="13.986327" y="110.88" width="438.849164" height="207.36"/>
233
+ </clipPath>
234
+ <clipPath id="p1db590b24e">
235
+ <rect x="63.752727" y="300.7296" width="339.316364" height="115.2"/>
236
+ </clipPath>
237
+ </defs>
238
+ </svg>
@@ -1,23 +1,23 @@
1
1
  [
2
2
  {
3
3
  "name": "dev",
4
- "version": "0.7",
4
+ "version": "0.8",
5
5
  "url": "https://www.phasorpy.org/docs/dev/"
6
6
  },
7
7
  {
8
- "name": "0.6 (stable)",
9
- "version": "0.6",
8
+ "name": "0.7 (stable)",
9
+ "version": "0.7",
10
10
  "url": "https://www.phasorpy.org/docs/stable/",
11
11
  "preferred": true
12
12
  },
13
+ {
14
+ "name": "0.6",
15
+ "version": "0.6",
16
+ "url": "https://www.phasorpy.org/docs/v0.6/"
17
+ },
13
18
  {
14
19
  "name": "0.5",
15
20
  "version": "0.5",
16
21
  "url": "https://www.phasorpy.org/docs/v0.5/"
17
- },
18
- {
19
- "name": "0.4",
20
- "version": "0.4",
21
- "url": "https://www.phasorpy.org/docs/v0.4/"
22
22
  }
23
23
  ]
@@ -0,0 +1,5 @@
1
+ phasorpy.component
2
+ ------------------
3
+
4
+ .. automodule:: phasorpy.component
5
+ :members:
@@ -0,0 +1,5 @@
1
+ phasorpy.cursor
2
+ ---------------
3
+
4
+ .. automodule:: phasorpy.cursor
5
+ :members:
@@ -13,9 +13,10 @@ PhasorPy library version |version|.
13
13
 
14
14
  phasorpy
15
15
  phasor
16
- cursors
17
- components
16
+ lifetime
17
+ component
18
18
  cluster
19
+ cursor
19
20
  plot
20
21
  io
21
22
  color
@@ -0,0 +1,5 @@
1
+ phasorpy.lifetime
2
+ -----------------
3
+
4
+ .. automodule:: phasorpy.lifetime
5
+ :members:
@@ -60,8 +60,8 @@ html_static_path = ['_static']
60
60
  html_js_files = ['custom-icons.js']
61
61
  html_show_sourcelink = False
62
62
 
63
- html_logo = '_static/logo.png'
64
- # html_favicon = ''
63
+ html_logo = '_static/phasorpy_logo.svg'
64
+ html_favicon = '_static/favicon.ico'
65
65
 
66
66
  pygments_style = 'sphinx'
67
67
 
@@ -138,19 +138,21 @@ class TutorialOrder:
138
138
  # api
139
139
  'io',
140
140
  'phasor_from_lifetime',
141
- 'multi-harmonic',
142
- 'filtering',
141
+ 'multi_harmonic',
142
+ 'filter',
143
143
  'phasorplot',
144
- 'cursors',
145
- 'components',
144
+ 'cursor',
145
+ 'component',
146
146
  'fret',
147
147
  'lifetime_to_signal',
148
148
  'pca',
149
149
  # applications
150
150
  'component_fit',
151
151
  'fret_efficiency',
152
- # benchmarks
152
+ 'multidimensional',
153
+ # misc
153
154
  'phasor_from_signal',
155
+ 'logo',
154
156
  ]
155
157
 
156
158
  def __init__(self, srcdir: str): ...
@@ -9,6 +9,74 @@ documentation and maintenance changes.
9
9
  The PhasorPy library is still under construction. Backwards-incompatible
10
10
  changes may occur between revisions.
11
11
 
12
+ 0.7 (2025.8.22)
13
+ ---------------
14
+
15
+ This is the seventh alpha release of the PhasorPy library.
16
+ It contains several bug fixes, improvements, and breaking changes.
17
+
18
+ Lifetime-related functions have moved from the ``phasor`` module to the new
19
+ ``lifetime`` module.
20
+ The ``cursors`` and ``components`` modules have been renamed to ``cursor``
21
+ and ``component`` respectively.
22
+
23
+ The new ``phasor_from_component`` function calculates phasor coordinates from
24
+ component fractions.
25
+ The ``phasor_component_mvc`` function calculates mean value coordinates
26
+ from phasor components.
27
+ The ``phasor_to_lifetime_search`` function finds two lifetime components
28
+ in multi-harmonic phasor coordinates.
29
+ The ``signal_from_pqbin`` function reads TCSPC histograms from PicoQuant BIN
30
+ files.
31
+
32
+ New tutorials demonstrate the multidimensional phasor approach and the
33
+ programmatic generation of the PhasorPy logo.
34
+
35
+ This release supports Python 3.11 to 3.13. Wheels for Python 3.14, including
36
+ free-threaded, are available for testing.
37
+
38
+ What's Changed
39
+ ..............
40
+
41
+ * Bump version by @cgohlke in https://github.com/phasorpy/phasorpy/pull/250
42
+ * Bump pypa/cibuildwheel from 2.23.3 to 3.0.0 in the github-actions group by @dependabot[bot] in https://github.com/phasorpy/phasorpy/pull/252
43
+ * Support reading variants of SimFCS referenced files by @cgohlke in https://github.com/phasorpy/phasorpy/pull/253
44
+ * Add GSLab dataset by @cgohlke in https://github.com/phasorpy/phasorpy/pull/254
45
+ * Fix tests failing with numpy 2.3 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/255
46
+ * Remove numpy pin for static code analysis by @cgohlke in https://github.com/phasorpy/phasorpy/pull/256
47
+ * Add phasor_from_component function by @cgohlke in https://github.com/phasorpy/phasorpy/pull/257
48
+ * Return component fractions as single array by @cgohlke in https://github.com/phasorpy/phasorpy/pull/258
49
+ * Use only latest GitHub Actions runners by @cgohlke in https://github.com/phasorpy/phasorpy/pull/259
50
+ * Add phasor_component_mvc function by @cgohlke in https://github.com/phasorpy/phasorpy/pull/260
51
+ * Move lifetime related functions out of phasor module by @cgohlke in https://github.com/phasorpy/phasorpy/pull/261
52
+ * Add option to specify number of lifetimes in lifetime app by @cgohlke in https://github.com/phasorpy/phasorpy/pull/263
53
+ * Rename cursors and components modules by @cgohlke in https://github.com/phasorpy/phasorpy/pull/262
54
+ * Skip more tests if SKIP_FETCH environment variable is set by @cgohlke in https://github.com/phasorpy/phasorpy/pull/264
55
+ * Improve docstrings and tests by @cgohlke in https://github.com/phasorpy/phasorpy/pull/265
56
+ * Drop support for numpy 1.25 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/267
57
+ * Update Python versions used in workflows by @cgohlke in https://github.com/phasorpy/phasorpy/pull/268
58
+ * Add phasor_to_lifetime_search function for two components by @cgohlke in https://github.com/phasorpy/phasorpy/pull/266
59
+ * Fix io tutorial by @cgohlke in https://github.com/phasorpy/phasorpy/pull/269
60
+ * Fix multi-component fit tutorial by @cgohlke in https://github.com/phasorpy/phasorpy/pull/270
61
+ * Build wheels for Python 3.14 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/271
62
+ * Improve PhasorPlot.polar_grid method by @cgohlke in https://github.com/phasorpy/phasorpy/pull/272
63
+ * Fix PhasorPlot.polar_cursor at origin by @cgohlke in https://github.com/phasorpy/phasorpy/pull/273
64
+ * Pass kwargs from signal_from_ptu to PtuFile.decode_image by @cgohlke in https://github.com/phasorpy/phasorpy/pull/274
65
+ * Add signal_from_pqbin function by @cgohlke in https://github.com/phasorpy/phasorpy/pull/275
66
+ * Build wheels for free-threaded Python by @cgohlke in https://github.com/phasorpy/phasorpy/pull/276
67
+ * Fix signal_from_ptu function kwargs handling by @cgohlke in https://github.com/phasorpy/phasorpy/pull/277
68
+ * Bump pypa/cibuildwheel from 3.1.2 to 3.1.3 in the github-actions group by @dependabot[bot] in https://github.com/phasorpy/phasorpy/pull/278
69
+ * Rename build_manylinux scripts by @cgohlke in https://github.com/phasorpy/phasorpy/pull/279
70
+ * Add tutorial to create PhasorPy logo by @cgohlke in https://github.com/phasorpy/phasorpy/pull/280
71
+ * Make PhasorPy logo square shaped by @cgohlke in https://github.com/phasorpy/phasorpy/pull/281
72
+ * Update pre-commit-hooks by @cgohlke in https://github.com/phasorpy/phasorpy/pull/282
73
+ * Improve PhasorPlot class and its cursor methods by @cgohlke in https://github.com/phasorpy/phasorpy/pull/284
74
+ * Document that LIF files contain Fast FLIM lifetimes by @cgohlke in https://github.com/phasorpy/phasorpy/pull/286
75
+ * Add multidimensional phasor tutorial and dataset by @bruno-pannunzio in https://github.com/phasorpy/phasorpy/pull/283
76
+ * Release v0.7 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/285
77
+
78
+ **Full Changelog**: https://github.com/phasorpy/phasorpy/compare/v0.6...v0.7
79
+
12
80
  0.6 (2025.6.22)
13
81
  ---------------
14
82
 
@@ -69,7 +137,7 @@ What's Changed
69
137
  * Add interactive LifetimePlots class by @cgohlke in https://github.com/phasorpy/phasorpy/pull/247
70
138
  * Reorganize version, utils, and experimental modules by @cgohlke in https://github.com/phasorpy/phasorpy/pull/248
71
139
  * 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
140
+ * Release v0.6 by @cgohlke in https://github.com/phasorpy/phasorpy/pull/249
73
141
 
74
142
  **Full Changelog**: https://github.com/phasorpy/phasorpy/compare/v0.5...v0.6
75
143
 
@@ -14,7 +14,7 @@ dynamic = ["version"]
14
14
  dependencies = [
15
15
  # sync with requirements_min.txt
16
16
  # https://scientific-python.org/specs/spec-0000/
17
- "numpy>=1.25.0",
17
+ "numpy>=1.26.0",
18
18
  "matplotlib>=3.8.0",
19
19
  "scipy>=1.11.0",
20
20
  "click",
@@ -113,7 +113,7 @@ disable = [
113
113
 
114
114
  [tool.black]
115
115
  line-length = 79
116
- target-version = ["py311"]
116
+ target-version = ["py311", "py312", "py313"]
117
117
  skip-string-normalization = true
118
118
 
119
119
  [tool.isort]
@@ -127,7 +127,7 @@ ignore-words-list = "ba,compiletime,hist,nd,unparseable,HSI"
127
127
  [tool.mypy]
128
128
  packages = ["phasorpy"]
129
129
  mypy_path = "$MYPY_CONFIG_FILE_DIR/src"
130
- plugins = ["numpy.typing.mypy_plugin"]
130
+ plugins = []
131
131
  enable_error_code = ["ignore-without-code", "redundant-expr", "truthy-bool"]
132
132
  strict = true
133
133
  warn_unreachable = true
@@ -178,6 +178,7 @@ norecursedirs = [
178
178
  ]
179
179
 
180
180
  [tool.cibuildwheel]
181
- skip = "pp* cp37* cp38* cp39* cp310* *musllinux* *i686 *ppc64le *s390x cp39*win*arm64"
181
+ skip = "cp38* cp39* cp310* *musllinux* *i686 *ppc64le *s390x"
182
182
  test-requires = ["scikit-learn", "lfdfiles", "sdtfile", "ptufile", "liffile", "pawflim", "pytest", "pytest-cov", "pytest-runner", "pytest-doctestplus", "coverage"]
183
183
  test-command = "pytest {project}/tests"
184
+ test-environment = "SKIP_FETCH=1"
@@ -5,5 +5,5 @@ from __future__ import annotations
5
5
  __all__ = ['__version__']
6
6
 
7
7
 
8
- __version__ = '0.6'
8
+ __version__ = '0.7'
9
9
  """PhasorPy version string."""