pivtools 0.1.3__cp311-cp311-win_amd64.whl

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 (127) hide show
  1. pivtools-0.1.3.dist-info/METADATA +222 -0
  2. pivtools-0.1.3.dist-info/RECORD +127 -0
  3. pivtools-0.1.3.dist-info/WHEEL +5 -0
  4. pivtools-0.1.3.dist-info/entry_points.txt +3 -0
  5. pivtools-0.1.3.dist-info/top_level.txt +3 -0
  6. pivtools_cli/__init__.py +5 -0
  7. pivtools_cli/_build_marker.c +25 -0
  8. pivtools_cli/_build_marker.cp311-win_amd64.pyd +0 -0
  9. pivtools_cli/cli.py +225 -0
  10. pivtools_cli/example.py +139 -0
  11. pivtools_cli/lib/PIV_2d_cross_correlate.c +334 -0
  12. pivtools_cli/lib/PIV_2d_cross_correlate.h +22 -0
  13. pivtools_cli/lib/common.h +36 -0
  14. pivtools_cli/lib/interp2custom.c +146 -0
  15. pivtools_cli/lib/interp2custom.h +48 -0
  16. pivtools_cli/lib/peak_locate_gsl.c +711 -0
  17. pivtools_cli/lib/peak_locate_gsl.h +40 -0
  18. pivtools_cli/lib/peak_locate_gsl_print.c +736 -0
  19. pivtools_cli/lib/peak_locate_lm.c +751 -0
  20. pivtools_cli/lib/peak_locate_lm.h +27 -0
  21. pivtools_cli/lib/xcorr.c +342 -0
  22. pivtools_cli/lib/xcorr.h +31 -0
  23. pivtools_cli/lib/xcorr_cache.c +78 -0
  24. pivtools_cli/lib/xcorr_cache.h +26 -0
  25. pivtools_cli/piv/interp2custom/interp2custom.py +69 -0
  26. pivtools_cli/piv/piv.py +240 -0
  27. pivtools_cli/piv/piv_backend/base.py +825 -0
  28. pivtools_cli/piv/piv_backend/cpu_instantaneous.py +1005 -0
  29. pivtools_cli/piv/piv_backend/factory.py +28 -0
  30. pivtools_cli/piv/piv_backend/gpu_instantaneous.py +15 -0
  31. pivtools_cli/piv/piv_backend/infilling.py +445 -0
  32. pivtools_cli/piv/piv_backend/outlier_detection.py +306 -0
  33. pivtools_cli/piv/piv_backend/profile_cpu_instantaneous.py +230 -0
  34. pivtools_cli/piv/piv_result.py +40 -0
  35. pivtools_cli/piv/save_results.py +342 -0
  36. pivtools_cli/piv_cluster/cluster.py +108 -0
  37. pivtools_cli/preprocessing/filters.py +399 -0
  38. pivtools_cli/preprocessing/preprocess.py +79 -0
  39. pivtools_cli/tests/helpers.py +107 -0
  40. pivtools_cli/tests/instantaneous_piv/test_piv_integration.py +167 -0
  41. pivtools_cli/tests/instantaneous_piv/test_piv_integration_multi.py +553 -0
  42. pivtools_cli/tests/preprocessing/test_filters.py +41 -0
  43. pivtools_core/__init__.py +5 -0
  44. pivtools_core/config.py +703 -0
  45. pivtools_core/config.yaml +135 -0
  46. pivtools_core/image_handling/__init__.py +0 -0
  47. pivtools_core/image_handling/load_images.py +464 -0
  48. pivtools_core/image_handling/readers/__init__.py +53 -0
  49. pivtools_core/image_handling/readers/generic_readers.py +50 -0
  50. pivtools_core/image_handling/readers/lavision_reader.py +190 -0
  51. pivtools_core/image_handling/readers/registry.py +24 -0
  52. pivtools_core/paths.py +49 -0
  53. pivtools_core/vector_loading.py +248 -0
  54. pivtools_gui/__init__.py +3 -0
  55. pivtools_gui/app.py +687 -0
  56. pivtools_gui/calibration/__init__.py +0 -0
  57. pivtools_gui/calibration/app/__init__.py +0 -0
  58. pivtools_gui/calibration/app/views.py +1186 -0
  59. pivtools_gui/calibration/calibration_planar/planar_calibration_production.py +570 -0
  60. pivtools_gui/calibration/vector_calibration_production.py +544 -0
  61. pivtools_gui/config.py +703 -0
  62. pivtools_gui/image_handling/__init__.py +0 -0
  63. pivtools_gui/image_handling/load_images.py +464 -0
  64. pivtools_gui/image_handling/readers/__init__.py +53 -0
  65. pivtools_gui/image_handling/readers/generic_readers.py +50 -0
  66. pivtools_gui/image_handling/readers/lavision_reader.py +190 -0
  67. pivtools_gui/image_handling/readers/registry.py +24 -0
  68. pivtools_gui/masking/__init__.py +0 -0
  69. pivtools_gui/masking/app/__init__.py +0 -0
  70. pivtools_gui/masking/app/views.py +123 -0
  71. pivtools_gui/paths.py +49 -0
  72. pivtools_gui/piv_runner.py +261 -0
  73. pivtools_gui/pivtools.py +58 -0
  74. pivtools_gui/plotting/__init__.py +0 -0
  75. pivtools_gui/plotting/app/__init__.py +0 -0
  76. pivtools_gui/plotting/app/views.py +1671 -0
  77. pivtools_gui/plotting/plot_maker.py +220 -0
  78. pivtools_gui/post_processing/POD/__init__.py +0 -0
  79. pivtools_gui/post_processing/POD/app/__init__.py +0 -0
  80. pivtools_gui/post_processing/POD/app/views.py +647 -0
  81. pivtools_gui/post_processing/POD/pod_decompose.py +979 -0
  82. pivtools_gui/post_processing/POD/views.py +1096 -0
  83. pivtools_gui/post_processing/__init__.py +0 -0
  84. pivtools_gui/static/404.html +1 -0
  85. pivtools_gui/static/_next/static/chunks/117-d5793c8e79de5511.js +2 -0
  86. pivtools_gui/static/_next/static/chunks/484-cfa8b9348ce4f00e.js +1 -0
  87. pivtools_gui/static/_next/static/chunks/869-320a6b9bdafbb6d3.js +1 -0
  88. pivtools_gui/static/_next/static/chunks/app/_not-found/page-12f067ceb7415e55.js +1 -0
  89. pivtools_gui/static/_next/static/chunks/app/layout-b907d5f31ac82e9d.js +1 -0
  90. pivtools_gui/static/_next/static/chunks/app/page-334cc4e8444cde2f.js +1 -0
  91. pivtools_gui/static/_next/static/chunks/fd9d1056-ad15f396ddf9b7e5.js +1 -0
  92. pivtools_gui/static/_next/static/chunks/framework-f66176bb897dc684.js +1 -0
  93. pivtools_gui/static/_next/static/chunks/main-a1b3ced4d5f6d998.js +1 -0
  94. pivtools_gui/static/_next/static/chunks/main-app-8a63c6f5e7baee11.js +1 -0
  95. pivtools_gui/static/_next/static/chunks/pages/_app-72b849fbd24ac258.js +1 -0
  96. pivtools_gui/static/_next/static/chunks/pages/_error-7ba65e1336b92748.js +1 -0
  97. pivtools_gui/static/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  98. pivtools_gui/static/_next/static/chunks/webpack-4a8ca7c99e9bb3d8.js +1 -0
  99. pivtools_gui/static/_next/static/css/7d3f2337d7ea12a5.css +3 -0
  100. pivtools_gui/static/_next/static/vQeR20OUdSSKlK4vukC4q/_buildManifest.js +1 -0
  101. pivtools_gui/static/_next/static/vQeR20OUdSSKlK4vukC4q/_ssgManifest.js +1 -0
  102. pivtools_gui/static/file.svg +1 -0
  103. pivtools_gui/static/globe.svg +1 -0
  104. pivtools_gui/static/grid.svg +8 -0
  105. pivtools_gui/static/index.html +1 -0
  106. pivtools_gui/static/index.txt +8 -0
  107. pivtools_gui/static/next.svg +1 -0
  108. pivtools_gui/static/vercel.svg +1 -0
  109. pivtools_gui/static/window.svg +1 -0
  110. pivtools_gui/stereo_reconstruction/__init__.py +0 -0
  111. pivtools_gui/stereo_reconstruction/app/__init__.py +0 -0
  112. pivtools_gui/stereo_reconstruction/app/views.py +1985 -0
  113. pivtools_gui/stereo_reconstruction/stereo_calibration_production.py +606 -0
  114. pivtools_gui/stereo_reconstruction/stereo_reconstruction_production.py +544 -0
  115. pivtools_gui/utils.py +63 -0
  116. pivtools_gui/vector_loading.py +248 -0
  117. pivtools_gui/vector_merging/__init__.py +1 -0
  118. pivtools_gui/vector_merging/app/__init__.py +1 -0
  119. pivtools_gui/vector_merging/app/views.py +759 -0
  120. pivtools_gui/vector_statistics/app/__init__.py +1 -0
  121. pivtools_gui/vector_statistics/app/views.py +710 -0
  122. pivtools_gui/vector_statistics/ensemble_statistics.py +49 -0
  123. pivtools_gui/vector_statistics/instantaneous_statistics.py +311 -0
  124. pivtools_gui/video_maker/__init__.py +0 -0
  125. pivtools_gui/video_maker/app/__init__.py +0 -0
  126. pivtools_gui/video_maker/app/views.py +436 -0
  127. pivtools_gui/video_maker/video_maker.py +662 -0
@@ -0,0 +1,222 @@
1
+ Metadata-Version: 2.4
2
+ Name: pivtools
3
+ Version: 0.1.3
4
+ Summary: PIVTOOLs - Particle Image Velocimetry Tools with CLI and GUI
5
+ Author-email: Your Name <your.email@example.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/MTT69/python-PIVTOOLs
8
+ Project-URL: Repository, https://github.com/MTT69/python-PIVTOOLs
9
+ Project-URL: Issues, https://github.com/MTT69/python-PIVTOOLs/issues
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Science/Research
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Topic :: Scientific/Engineering :: Image Processing
18
+ Classifier: Framework :: Flask
19
+ Requires-Python: >=3.11
20
+ Description-Content-Type: text/markdown
21
+ Requires-Dist: dask[distributed]==2025.7.0
22
+ Requires-Dist: loguru==0.7.3
23
+ Requires-Dist: numpy==2.2.6
24
+ Requires-Dist: opencv-python==4.12.0.88
25
+ Requires-Dist: pandas==2.3.1
26
+ Requires-Dist: pillow==11.3.0
27
+ Requires-Dist: PyYAML==6.0.2
28
+ Requires-Dist: scipy==1.16.1
29
+ Requires-Dist: tifffile==2025.6.11
30
+ Requires-Dist: tqdm==4.67.1
31
+ Requires-Dist: numba==0.61.2
32
+ Requires-Dist: psutil==6.1.1
33
+ Requires-Dist: pytest==8.4.2
34
+ Requires-Dist: rawpy==0.25.1
35
+ Requires-Dist: scikit-image==0.25.2
36
+ Requires-Dist: lvpyio==1.3.1; sys_platform != "darwin"
37
+ Requires-Dist: bottleneck==1.6.0
38
+ Requires-Dist: scikit-learn==1.7.2
39
+ Requires-Dist: threadpoolctl==3.6.0
40
+ Requires-Dist: Flask==3.1.1
41
+ Requires-Dist: flask-cors==6.0.1
42
+ Requires-Dist: matplotlib==3.10.5
43
+
44
+ # PIVTOOLs
45
+
46
+ Particle Image Velocimetry Tools - A comprehensive toolkit for PIV analysis with both command-line and GUI interfaces.
47
+
48
+ ## Installation
49
+
50
+ Install PIVTOOLs with a single command:
51
+
52
+ ```bash
53
+ pip install pivtools
54
+ ```
55
+
56
+ This installs the complete toolkit including:
57
+ - **Core utilities** for image handling and vector processing
58
+ - **Command-line interface** (`pivtools-cli`) for automated workflows
59
+ - **Web-based GUI** (`pivtools-gui`) for interactive analysis
60
+
61
+ The package includes pre-compiled C extensions for optimal performance on Windows, macOS, and Linux.
62
+
63
+ ## Quick Start
64
+
65
+ ### Initialize a new PIVTOOLs workspace
66
+
67
+ ```bash
68
+ pivtools-cli init
69
+ ```
70
+
71
+ This creates a default `config.yaml` file in your current directory that you can edit to configure your PIV analysis.
72
+
73
+ ### Run PIV analysis (command-line)
74
+
75
+ ```bash
76
+ pivtools-cli run
77
+ ```
78
+
79
+ This runs the PIV analysis using the `config.yaml` in your current directory.
80
+
81
+ ### Launch the GUI
82
+
83
+ ```bash
84
+ pivtools-gui
85
+ ```
86
+
87
+ This starts the web-based GUI at http://localhost:5000 where you can interactively configure and run PIV analysis.
88
+
89
+ ## Configuration
90
+
91
+ Edit the `config.yaml` file to configure:
92
+
93
+ - Input/output paths
94
+ - Image formats and processing parameters
95
+ - PIV algorithm settings
96
+ - Filtering and post-processing options
97
+ - Calibration parameters
98
+
99
+ See the example `config.yaml` for all available options.
100
+
101
+ ## Requirements
102
+
103
+ - Python 3.8+
104
+ - FFTW library (automatically handled during installation)
105
+ - Camera calibration images (for accurate scaling)
106
+
107
+ ## Development
108
+
109
+ For development installation with local C compilation:
110
+
111
+ ```bash
112
+ # Install FFTW first (platform-specific)
113
+ # Windows: vcpkg install fftw3[threads]:x64-windows-static
114
+ # macOS: brew install fftw gcc
115
+ # Linux: apt-get install libfftw3-dev
116
+
117
+ # Set environment variables
118
+ export FFTW_INC_PATH=/path/to/fftw/include
119
+ export FFTW_LIB_PATH=/path/to/fftw/lib
120
+
121
+ # Install in development mode
122
+ pip install -e .
123
+ ```
124
+
125
+ ## License
126
+
127
+ MIT License
128
+
129
+ Particle Image Velocimetry Tools - A comprehensive toolkit for PIV analysis with both command-line and GUI interfaces.
130
+
131
+ ## Installation
132
+
133
+ Install PIVTOOLs from PyPI:
134
+
135
+ ```bash
136
+ pip install PIVTOOLs
137
+ ```
138
+
139
+ This will install the package with pre-compiled C extensions for your platform.
140
+
141
+ ## Quick Start
142
+
143
+ ### Initialize a new PIV workspace
144
+
145
+ ```bash
146
+ pivtools-cli init
147
+ ```
148
+
149
+ This creates a `config.yaml` file in your current directory with default settings.
150
+
151
+ ### Run PIV analysis (command line)
152
+
153
+ ```bash
154
+ pivtools-cli run
155
+ ```
156
+
157
+ ### Launch the GUI
158
+
159
+ ```bash
160
+ pivtools-gui
161
+ ```
162
+
163
+ Then open http://localhost:5000 in your browser.
164
+
165
+ ## Configuration
166
+
167
+ Edit the `config.yaml` file to configure:
168
+
169
+ - Input/output paths
170
+ - Image formats and processing parameters
171
+ - PIV algorithm settings
172
+ - Filtering and post-processing options
173
+
174
+ ## Requirements
175
+
176
+ - Python 3.8+
177
+ - FFTW library (automatically handled during installation)
178
+ - See `requirements.txt` for full dependencies
179
+
180
+ ## Development
181
+
182
+ For development installation:
183
+
184
+ ```bash
185
+ git clone https://github.com/MTT69/python-PIVTOOLs.git
186
+ cd python-PIVTOOLs
187
+ pip install -e .
188
+ ```
189
+
190
+ ## Building from Source
191
+
192
+ If building from source, ensure FFTW is installed:
193
+
194
+ ### Linux (Ubuntu/Debian)
195
+ ```bash
196
+ sudo apt-get install libfftw3-dev
197
+ ```
198
+
199
+ ### macOS
200
+ ```bash
201
+ brew install fftw
202
+ ```
203
+
204
+ ### Windows
205
+ Install FFTW via vcpkg:
206
+ ```bash
207
+ vcpkg install fftw3[threads]:x64-windows-static
208
+ ```
209
+
210
+ Set environment variables:
211
+ ```bash
212
+ set FFTW_INC_PATH=C:\path\to\fftw\include
213
+ set FFTW_LIB_PATH=C:\path\to\fftw\lib
214
+ ```
215
+
216
+ ## License
217
+
218
+ MIT License
219
+
220
+ ## Contributing
221
+
222
+ Contributions welcome! Please see the GitHub repository for issues and pull requests.
@@ -0,0 +1,127 @@
1
+ pivtools_cli/__init__.py,sha256=TCN6JDj60_2T52cRzg5cKLnnJD-Q7x6I6PQoWyGtA28,78
2
+ pivtools_cli/_build_marker.c,sha256=HgT14FR7feRflvhJ_NFTWtMSee0pJ4SutY7aES9yw0M,904
3
+ pivtools_cli/_build_marker.cp311-win_amd64.pyd,sha256=gcsYt-yIiJNuLqxZ6wOyX7zyypWqXG5r99yEoCO7xf0,10752
4
+ pivtools_cli/cli.py,sha256=rpG7ESR3gGfad3dgKrKno0OtlM62eSmjWpNJ1F5ztoQ,5065
5
+ pivtools_cli/example.py,sha256=jCvw6g4nW0D39nUj1fprazjdXxcyMULFIrma5QHUOnM,5714
6
+ pivtools_cli/lib/PIV_2d_cross_correlate.c,sha256=s5chtbXoGBsGHJ0pHirhzbQ5KAgod4ShqG9huKaekWY,12003
7
+ pivtools_cli/lib/PIV_2d_cross_correlate.h,sha256=IIssyq15xFdkemynGCK0LyDmn7poSVlGcYiKZVDCtcY,815
8
+ pivtools_cli/lib/common.h,sha256=xKgbwTgtcgn1_GuoJfgDu_iQYEiQi2BFZJgQsr68joo,988
9
+ pivtools_cli/lib/interp2custom.c,sha256=8Cbmxsf9UsvUcqQl-EvJQpVybnQQ7mV5UyedhiqjRMs,5116
10
+ pivtools_cli/lib/interp2custom.h,sha256=E7kqOBCx9psU0vKt8TUccAWyGvGDZT1vyp4Ec6AxWds,1374
11
+ pivtools_cli/lib/peak_locate_gsl.c,sha256=HSC-gi1pEL6YCYiOLmJ_xCTQmM9ca7iYVjlzREVKk0M,23283
12
+ pivtools_cli/lib/peak_locate_gsl.h,sha256=OBLsaRCVbV9wtcO7X64OEs1JWpirbcd_5Beo6cTpSgM,1266
13
+ pivtools_cli/lib/peak_locate_gsl_print.c,sha256=mROzmBewR23J8JOsMObepv9pY4rLqom3_BnA9JXawY4,23693
14
+ pivtools_cli/lib/peak_locate_lm.c,sha256=1xCxclk10GWFL2JysQGdvyD-7-37KF7VGykvDfvUGGU,24831
15
+ pivtools_cli/lib/peak_locate_lm.h,sha256=FmzujmV3tKIafcOSlCmUrCXO0SaSPdw_d2OuB_yz6oc,1015
16
+ pivtools_cli/lib/xcorr.c,sha256=NL9yfGoWc2c6nEwh4wHs5zkt-VdIfs_eQATsUwQuo3w,9389
17
+ pivtools_cli/lib/xcorr.h,sha256=iwDX03pxMTANtt98mybVfnnuCNlznAjDaSZud01Ohqs,865
18
+ pivtools_cli/lib/xcorr_cache.c,sha256=OHjQmeXD0FuQTEfmWBCIEIixOx5l8x02Rlpecfbabjo,2068
19
+ pivtools_cli/lib/xcorr_cache.h,sha256=fySLUPYud3wjPok0jzXzTBFxe9xF8oy7s9fFZcb6Dh0,770
20
+ pivtools_cli/piv/piv.py,sha256=-89b8fXnkaQsz2es4an_1LKtP6eljQl9q4zB_oFqfbY,8574
21
+ pivtools_cli/piv/piv_result.py,sha256=IZt99qEakPbfhMoF9fwDS_aiivYFDVTfZ0jzLPo-NDs,1290
22
+ pivtools_cli/piv/save_results.py,sha256=znnI0uIz4dOQkNGb2yLMuJ8lf7Ai3-vxLbC3UGEcMn4,12484
23
+ pivtools_cli/piv/interp2custom/interp2custom.py,sha256=QebcIbU9tJG3J8Stz3ieFfelXCmFMITKzO4eXNsHXm8,2498
24
+ pivtools_cli/piv/piv_backend/base.py,sha256=vCw2i-_SNY-e5vSlxAlVwtTtV5U1pzlip5Sl7TP8peU,32695
25
+ pivtools_cli/piv/piv_backend/cpu_instantaneous.py,sha256=JGCVd5ak-V98t9aoGLTfBi_Nq83jGR96wUWLqvR440M,46176
26
+ pivtools_cli/piv/piv_backend/factory.py,sha256=CSbh46PwJ9bLsRDWay9VdazCG5pN4uFOolBSXe_VqMs,1082
27
+ pivtools_cli/piv/piv_backend/gpu_instantaneous.py,sha256=Kv5IXZzLOFm684QmufbcKisApUto_qnn2D5NXcgCfbE,345
28
+ pivtools_cli/piv/piv_backend/infilling.py,sha256=fCZI1Zckq6pXxS98ncFefkdb-9ZMiJ7QCSE2GSmkzmg,13934
29
+ pivtools_cli/piv/piv_backend/outlier_detection.py,sha256=ODMG5FyzJlOwbNeraQIh-UJGNN5afOEIbrgCbzJKsDc,10112
30
+ pivtools_cli/piv/piv_backend/profile_cpu_instantaneous.py,sha256=rlmmVn_SYAxeMWIHJjfQqyc7V0eMuASKm8WsPS03k9E,9215
31
+ pivtools_cli/piv_cluster/cluster.py,sha256=RvGz_zQVq5WWSxBT1AOf92UN3rsP5cLn54RQx9Pn9-0,3248
32
+ pivtools_cli/preprocessing/filters.py,sha256=xmWn-CP2UY0b3BHmPY9h8JasagQy8eQwevLMmR8_254,12384
33
+ pivtools_cli/preprocessing/preprocess.py,sha256=2Z5oaV4Xw-jNx5lxNQ_OvIv-xHjnV-JujWLI6YS8vKk,2636
34
+ pivtools_cli/tests/helpers.py,sha256=RS7fn9uYTueYN2qsmAga-tmJngjjoXHhlGH7U7YgQos,3408
35
+ pivtools_cli/tests/instantaneous_piv/test_piv_integration.py,sha256=xmNC1OzNhc6S_u0tIkieDTTAiHWgFSXh1TQofICX4no,7594
36
+ pivtools_cli/tests/instantaneous_piv/test_piv_integration_multi.py,sha256=UrDAe-8nUhj6S9U81SJxuryJNMesWqzr3ngvOvJ3hs8,24992
37
+ pivtools_cli/tests/preprocessing/test_filters.py,sha256=7T99Eh3XZnOk9iwzCGhxRrjNpiZl1bgB4ovhfY0eqt4,1706
38
+ pivtools_core/__init__.py,sha256=gdkQ-__c9lUKr5kuIEidyKbXb0FqFvFmHpt9IpQLI-I,89
39
+ pivtools_core/config.py,sha256=-DyOptJFdSrSDugukIK58H76AJVqyAChRTNDVi93Caw,25498
40
+ pivtools_core/config.yaml,sha256=_p5Rq-cFR7okGgYFjeMi-H18p7LQKwpeDJFNU099PuU,2507
41
+ pivtools_core/paths.py,sha256=hCVs2CZWWqMzmRY4jmNJ-9zWPsHh4ol41nFGxR0kBG4,1830
42
+ pivtools_core/vector_loading.py,sha256=G_5vMaxK_puTfmlOvkNJai3TWUvyDXErtpxy95cyRXU,9883
43
+ pivtools_core/image_handling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
+ pivtools_core/image_handling/load_images.py,sha256=SueCu2Jk30XSgopIMycjQmyw3CcjGikhhsWA8hSj-vI,17133
45
+ pivtools_core/image_handling/readers/__init__.py,sha256=ceQb08ZH0L_0YoP6aZt8Izo6u6RziDKQJTQ4fYOG7wE,1701
46
+ pivtools_core/image_handling/readers/generic_readers.py,sha256=9bB7cxjp3ynmr4FNJRlzDfwyS1qVT27rIF93r7QuoYs,1466
47
+ pivtools_core/image_handling/readers/lavision_reader.py,sha256=uX10HMheQSBY3Q3a44vkwuJt_O8PAH1tp57l7a7DP9c,6895
48
+ pivtools_core/image_handling/readers/registry.py,sha256=WghMnGSZwn9v0K7F6gjsQqTN6Rdwr-KX0M2s9p_b1HE,799
49
+ pivtools_gui/__init__.py,sha256=1t4eNKRFGrnQAV8Xhb2PCy7TTOPmFWswEdNN5F2zx48,96
50
+ pivtools_gui/app.py,sha256=90FkcQF2jS9NYGzeI_043PhMlvUZ2K4P54aPEBg_rX0,24310
51
+ pivtools_gui/config.py,sha256=ZLH39DeNFDiOT1xgv7mYpeZ00hA3_L4vgRGKlU4HnMg,25536
52
+ pivtools_gui/paths.py,sha256=hCVs2CZWWqMzmRY4jmNJ-9zWPsHh4ol41nFGxR0kBG4,1830
53
+ pivtools_gui/piv_runner.py,sha256=HIOF1agVty6SoYe6UYfZdkFWJK20xgCZeSGFuaCbbTY,9336
54
+ pivtools_gui/pivtools.py,sha256=tJHGSwtoZTw04jGOJQn_nyiFXv-H5Ukr7oRnm3LSBIU,2324
55
+ pivtools_gui/utils.py,sha256=puxR65XqGobX3NM1kBzCC74X8bNTFE1oXgxutvGx6CQ,2062
56
+ pivtools_gui/vector_loading.py,sha256=AV-3DWtqzX7kfaszuCifwNzoUq__BLc1w8s5pC0Nc4Y,9896
57
+ pivtools_gui/calibration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
+ pivtools_gui/calibration/vector_calibration_production.py,sha256=r5VFSvMIi6Q_2xAMucDZeoVczT11uqgw8grFpARfgvo,20878
59
+ pivtools_gui/calibration/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
+ pivtools_gui/calibration/app/views.py,sha256=jH2Xhg9z8JpTnROdPMykM1dAkT11-xW9cWmZVgpplGw,49567
61
+ pivtools_gui/calibration/calibration_planar/planar_calibration_production.py,sha256=7iQ_bboj9GvOE7gK5WEfPNIXWuCpGeOO2YONMmoOgy0,20992
62
+ pivtools_gui/image_handling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ pivtools_gui/image_handling/load_images.py,sha256=ft19PKoF1nQqSqQR234Ka_qvn7RbqC9Ej1t_8pOcvO4,17185
64
+ pivtools_gui/image_handling/readers/__init__.py,sha256=ceQb08ZH0L_0YoP6aZt8Izo6u6RziDKQJTQ4fYOG7wE,1701
65
+ pivtools_gui/image_handling/readers/generic_readers.py,sha256=9bB7cxjp3ynmr4FNJRlzDfwyS1qVT27rIF93r7QuoYs,1466
66
+ pivtools_gui/image_handling/readers/lavision_reader.py,sha256=uX10HMheQSBY3Q3a44vkwuJt_O8PAH1tp57l7a7DP9c,6895
67
+ pivtools_gui/image_handling/readers/registry.py,sha256=WghMnGSZwn9v0K7F6gjsQqTN6Rdwr-KX0M2s9p_b1HE,799
68
+ pivtools_gui/masking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
+ pivtools_gui/masking/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
+ pivtools_gui/masking/app/views.py,sha256=HxKFbtO2DKF1zo-ocXsx0lJ3dtVjfOOQT-akXQjSakw,4356
71
+ pivtools_gui/plotting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
+ pivtools_gui/plotting/plot_maker.py,sha256=vkBb6R-EqdOkfmNfdFKtmmsG2RtiRwiQHBBN1sv2x-w,7912
73
+ pivtools_gui/plotting/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
+ pivtools_gui/plotting/app/views.py,sha256=B-9MbXuc3AM5oxdqo7phgP-ZIoAQbM8x7GsOdXinZeo,70580
75
+ pivtools_gui/post_processing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
+ pivtools_gui/post_processing/POD/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
+ pivtools_gui/post_processing/POD/pod_decompose.py,sha256=wKt7aSPSY9bReWlFWsIVjr7O2ZX76hDnaPe687BsToA,40853
78
+ pivtools_gui/post_processing/POD/views.py,sha256=mrmFfBvLxQnEhjRinw-9EYxRSVoJVyfah1-Z2ztK6tk,39587
79
+ pivtools_gui/post_processing/POD/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
+ pivtools_gui/post_processing/POD/app/views.py,sha256=O0kj6VSgAhEXwqoOs_pVgkYcL718vgghX8zyey_wfOY,23095
81
+ pivtools_gui/static/404.html,sha256=6hSLqEVmzt_q0agpRcOrsZMO_uQ3NK__rdoTcBGZsAM,7169
82
+ pivtools_gui/static/file.svg,sha256=K2eBLDJcGZoCU2zb7qDFk6cvcH0yO3LuPgjbqwZ1O9Q,391
83
+ pivtools_gui/static/globe.svg,sha256=thS5vxg5JZV2YayFFJj-HYAp_UOmL7_thvniYkpX588,1035
84
+ pivtools_gui/static/grid.svg,sha256=PatfsKDW1NHlgVIoNOFQroApsnlFJw_AaBK5wUhG3Ck,322
85
+ pivtools_gui/static/index.html,sha256=19M49qYhKTjjWsL05LSUQbFVnZcr0nRN4zg5f8pF9js,5038
86
+ pivtools_gui/static/index.txt,sha256=5V4ug1kzjvhPG77Q5EBWHJbp87pbJrnG2kiN5MnWR48,2523
87
+ pivtools_gui/static/next.svg,sha256=VZld-tbstJRaHoVt3KA8XhaqW_E_0htN9qdK55NXvPw,1375
88
+ pivtools_gui/static/vercel.svg,sha256=8IEzey_uY1tFW2MnVAaj5_OdagFOJa2Q2rWmfmKhKsQ,128
89
+ pivtools_gui/static/window.svg,sha256=ZEdoxKrrR2e84pM0TusMEl-4BKlNgBRAQkByIC2F46E,385
90
+ pivtools_gui/static/_next/static/chunks/117-d5793c8e79de5511.js,sha256=fAKiBGIPUmb5lrgCc5dRKQOPD49Js-XTLRQNdRszRsM,123743
91
+ pivtools_gui/static/_next/static/chunks/484-cfa8b9348ce4f00e.js,sha256=wIRwajMwtHpN-RF4hSGbeZb7LTWhOYMzE2-Ce9ArGBw,199401
92
+ pivtools_gui/static/_next/static/chunks/869-320a6b9bdafbb6d3.js,sha256=qweqobJ2PY3SiqzRGcBj6SSyG0Eg9XdFDEHYjOOMu9U,31760
93
+ pivtools_gui/static/_next/static/chunks/fd9d1056-ad15f396ddf9b7e5.js,sha256=uL3flIHYWdZI4eBQ-DIus97-PdP5vRP0xE3W8uz1q4A,172834
94
+ pivtools_gui/static/_next/static/chunks/framework-f66176bb897dc684.js,sha256=QlDVPwvHVuzi3daQoAit0df9yIdSjGcfTf6NkW13h7c,139978
95
+ pivtools_gui/static/_next/static/chunks/main-a1b3ced4d5f6d998.js,sha256=WoWBqCHelNFC3c2uyuLDSv4VGoxie0pq05SA_DSrGRk,116355
96
+ pivtools_gui/static/_next/static/chunks/main-app-8a63c6f5e7baee11.js,sha256=6EjJ5B9_cAr2jN2A60YIzmhJUk-bQ65agJjrna3QDZ0,461
97
+ pivtools_gui/static/_next/static/chunks/polyfills-42372ed130431b0a.js,sha256=vQV7eVcqRIt23KzbfymK5NFP6FW0KoJqj9nGhDwMjtw,112595
98
+ pivtools_gui/static/_next/static/chunks/webpack-4a8ca7c99e9bb3d8.js,sha256=VberB4_1FrtedbRamgVORPp2Le8nhXODovsE6y4TBg8,3458
99
+ pivtools_gui/static/_next/static/chunks/app/layout-b907d5f31ac82e9d.js,sha256=nwPQ9CGeAN6NtMqPnpaIBoc_ypZRP9AveA4EmDZvAUU,19630
100
+ pivtools_gui/static/_next/static/chunks/app/page-334cc4e8444cde2f.js,sha256=o1daY-Chej11CJmzK8QAnYw9LrIulXf4DTpYidEJKUo,247784
101
+ pivtools_gui/static/_next/static/chunks/app/_not-found/page-12f067ceb7415e55.js,sha256=u5LYOU4LZ2HFeEcz6xZqSflSnU4WDt-TnQNu3CdcEWk,1745
102
+ pivtools_gui/static/_next/static/chunks/pages/_app-72b849fbd24ac258.js,sha256=QN-PY1h1HDIO4K4ZYwFl6rtEeaxWCynYauVLK_oWmzE,280
103
+ pivtools_gui/static/_next/static/chunks/pages/_error-7ba65e1336b92748.js,sha256=oxr2dz6MkKWnm3jN3fWb2RPhCHB4-JgrzVMS_wTNr_E,247
104
+ pivtools_gui/static/_next/static/css/7d3f2337d7ea12a5.css,sha256=ph5yXSZjyA-7VuSLMeeEc5SJ8QkSQMGHUbih022qkOg,50905
105
+ pivtools_gui/static/_next/static/vQeR20OUdSSKlK4vukC4q/_buildManifest.js,sha256=UGi5XJhF4u-NRxMqU360JM2afxCS1essSVUEqY6sl5c,224
106
+ pivtools_gui/static/_next/static/vQeR20OUdSSKlK4vukC4q/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
107
+ pivtools_gui/stereo_reconstruction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
+ pivtools_gui/stereo_reconstruction/stereo_calibration_production.py,sha256=NrGaveQwJ85hoYHUSmSQFcpLOT314bTL52yh0w_jnfA,22690
109
+ pivtools_gui/stereo_reconstruction/stereo_reconstruction_production.py,sha256=8YiAv1XcNEnxETrSe6ak2f1fV3b3u0fTzenAg3xLxcs,23370
110
+ pivtools_gui/stereo_reconstruction/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
111
+ pivtools_gui/stereo_reconstruction/app/views.py,sha256=1kwUYpD7AHRuVKBYJHKJ0nytJvx1bevEGMewjcGLLyM,86611
112
+ pivtools_gui/vector_merging/__init__.py,sha256=9p2z6kQmk5MQIlZo9GO9onjm0XiNvx7n5LMexZx7MMU,25
113
+ pivtools_gui/vector_merging/app/__init__.py,sha256=fsk-7hvu3U81cSI3bzlEhkxBn5wKiJwx3Pp2_YihVY4,33
114
+ pivtools_gui/vector_merging/app/views.py,sha256=JTmn5E6iXALpFJIIVvZjuHI1wna7MK7FhxkNCCNpbzA,29579
115
+ pivtools_gui/vector_statistics/ensemble_statistics.py,sha256=aWEJJE8ezY1QqR4xZxnrKAXIDViUioVgz4YQUWYINaM,1903
116
+ pivtools_gui/vector_statistics/instantaneous_statistics.py,sha256=N562N-yXC6jqe4Tl7r7cnpgOsNHIQn6G9x-zDzyANpY,13621
117
+ pivtools_gui/vector_statistics/app/__init__.py,sha256=049Cnkf4Xp6d2svaU5vuqhKSBYFCcfkz0NqS_8xqsOo,32
118
+ pivtools_gui/vector_statistics/app/views.py,sha256=0briGw8W8sXqa7SvZk2Dg1__jM6W8KFWafdPcvIAFcA,28371
119
+ pivtools_gui/video_maker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
+ pivtools_gui/video_maker/video_maker.py,sha256=v36BNk1hngp1ShA4vkIdKkgNBOy5TTfzQ9tSmXbJB_0,25894
121
+ pivtools_gui/video_maker/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
+ pivtools_gui/video_maker/app/views.py,sha256=WbB1s5t2wezyq_8oRoQhz6kEjmU-WMfc8PcCTL8OGBQ,15461
123
+ pivtools-0.1.3.dist-info/METADATA,sha256=pp8RyBq75A7mp4XKM20xBH-oymgRzZDnyIuogAU6SnM,5393
124
+ pivtools-0.1.3.dist-info/WHEEL,sha256=JLOMsP7F5qtkAkINx5UnzbFguf8CqZeraV8o04b0I8I,101
125
+ pivtools-0.1.3.dist-info/entry_points.txt,sha256=JgwFyXuMhE_2VrI47Ttfa9orRAlN-BqTciCEsP-Of38,92
126
+ pivtools-0.1.3.dist-info/top_level.txt,sha256=e4Rz-x7jNhaWrUXqk498a0zS9__XfDSrSPHlPiuobu0,40
127
+ pivtools-0.1.3.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: false
4
+ Tag: cp311-cp311-win_amd64
5
+
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ pivtools-cli = pivtools_cli.cli:main
3
+ pivtools-gui = pivtools_gui.app:main
@@ -0,0 +1,3 @@
1
+ pivtools_cli
2
+ pivtools_core
3
+ pivtools_gui
@@ -0,0 +1,5 @@
1
+ """
2
+ PIVTOOLs - Particle Image Velocimetry Tools
3
+ """
4
+
5
+ __version__ = "0.1.2"
@@ -0,0 +1,25 @@
1
+ #include <Python.h>
2
+
3
+ // This file creates a minimal, valid Python C-extension.
4
+ // Its only purpose is to define the `PyInit__build_marker` function
5
+ // to satisfy the linker and force setuptools to build a platform-specific wheel.
6
+
7
+ // 1. Define an empty method table
8
+ static PyMethodDef BuildMarkerMethods[] = {
9
+ {NULL, NULL, 0, NULL} /* Sentinel */
10
+ };
11
+
12
+ // 2. Define the module structure
13
+ static struct PyModuleDef buildmarkermodule = {
14
+ PyModuleDef_HEAD_INIT,
15
+ "pivtools_cli._build_marker", // Module name
16
+ NULL, // Module docstring
17
+ -1, // Module state size (no state)
18
+ BuildMarkerMethods // Method table
19
+ };
20
+
21
+ // 3. Define the module initialization function
22
+ // This is the function the linker was looking for.
23
+ PyMODINIT_FUNC PyInit__build_marker(void) {
24
+ return PyModule_Create(&buildmarkermodule);
25
+ }
pivtools_cli/cli.py ADDED
@@ -0,0 +1,225 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ PIVTOOLs CLI - Command line interface for PIVTOOLs
4
+ """
5
+
6
+ import argparse
7
+ import os
8
+ import shutil
9
+ import sys
10
+ from pathlib import Path
11
+
12
+ def init_command(args):
13
+ """Initialize a new PIVTOOLs workspace with default config.yaml"""
14
+ cwd = Path.cwd()
15
+
16
+ # Check if config.yaml already exists
17
+ config_path = cwd / "config.yaml"
18
+ if config_path.exists():
19
+ if not args.force:
20
+ print(f"config.yaml already exists at {config_path}")
21
+ print("Use --force to overwrite")
22
+ return
23
+ else:
24
+ print(f"Overwriting existing config.yaml")
25
+
26
+ # Get the default config from package
27
+ try:
28
+ default_config = "config.yaml"
29
+
30
+ if not default_config.exists():
31
+ # Fallback: create a basic config
32
+ create_default_config(config_path)
33
+ else:
34
+ shutil.copy2(default_config, config_path)
35
+ print(f"Created config.yaml at {config_path}")
36
+
37
+ except ImportError:
38
+ # Fallback if package not properly installed
39
+ create_default_config(config_path)
40
+
41
+ print("PIVTOOLs workspace initialized!")
42
+ print(f"Edit {config_path} to configure your PIV analysis")
43
+
44
+ def create_default_config(config_path):
45
+ """Create a default config.yaml file"""
46
+ default_config = """
47
+ paths:
48
+ base_paths:
49
+ - ./data
50
+ source_paths:
51
+ - ./images
52
+ camera_numbers:
53
+ - 1
54
+ camera_count: 1
55
+ images:
56
+ num_images: 100
57
+ image_format: B%05d.tif
58
+ vector_format: '%05d.mat'
59
+ time_resolved: false
60
+ dtype: float32
61
+ batches:
62
+ size: 25
63
+ logging:
64
+ file: pypiv.log
65
+ level: INFO
66
+ console: true
67
+ processing:
68
+ instantaneous: true
69
+ ensemble: false
70
+ stereo: false
71
+ backend: cpu
72
+ debug: false
73
+ auto_compute_params: false
74
+ omp_threads: 4
75
+ dask_workers_per_node: 5
76
+ dask_threads_per_worker: 1
77
+ dask_memory_limit: 12GB
78
+ outlier_detection:
79
+ enabled: true
80
+ methods:
81
+ - threshold: 0.25
82
+ type: peak_mag
83
+ - epsilon: 0.2
84
+ threshold: 2
85
+ type: median_2d
86
+ infilling:
87
+ mid_pass:
88
+ method: biharmonic
89
+ parameters:
90
+ ksize: 3
91
+ final_pass:
92
+ enabled: true
93
+ method: biharmonic
94
+ parameters:
95
+ ksize: 3
96
+ plots:
97
+ save_extension: .png
98
+ save_pickle: true
99
+ fontsize: 14
100
+ title_fontsize: 16
101
+ videos:
102
+ - endpoint: ''
103
+ type: instantaneous
104
+ use_merged: false
105
+ variable: ux
106
+ video_length: 100
107
+ statistics_extraction: null
108
+ instantaneous_piv:
109
+ window_size:
110
+ - - 128
111
+ - 128
112
+ - - 64
113
+ - 64
114
+ - - 32
115
+ - 32
116
+ overlap:
117
+ - 50
118
+ - 50
119
+ - 50
120
+ runs:
121
+ - 3
122
+ time_resolved: false
123
+ window_type: gaussian
124
+ num_peaks: 1
125
+ peak_finder: gauss3
126
+ secondary_peak: false
127
+ calibration_format:
128
+ image_format: calib%05d.tif
129
+ calibration:
130
+ active: pinhole
131
+ scale_factor:
132
+ dt: 0.56
133
+ px_per_mm: 3.41
134
+ source_path_idx: 0
135
+ pinhole:
136
+ source_path_idx: 0
137
+ camera: 1
138
+ image_index: 0
139
+ file_pattern: calib%05d.tif
140
+ pattern_cols: 10
141
+ pattern_rows: 10
142
+ dot_spacing_mm: 28.89
143
+ enhance_dots: true
144
+ asymmetric: false
145
+ dot_distance_mm: 28.9
146
+ grid_tolerance: 0.5
147
+ ransac_threshold: 3
148
+ dt: 0.0275
149
+ stereo:
150
+ source_path_idx: 0
151
+ camera_pair:
152
+ - 1
153
+ - 2
154
+ file_pattern: planar_calibration_plate_*.tif
155
+ pattern_cols: 10
156
+ pattern_rows: 10
157
+ dot_spacing_mm: 28.89
158
+ enhance_dots: true
159
+ asymmetric: false
160
+ dt: 2
161
+ filters:
162
+ - type: pod
163
+ masking:
164
+ enabled: true
165
+ mask_file_pattern: mask_Cam%d.mat
166
+ mask_threshold: 0.01
167
+ mode: file
168
+ rectangular:
169
+ top: 64
170
+ bottom: 64
171
+ left: 0
172
+ right: 0
173
+ """
174
+
175
+ with open(config_path, 'w') as f:
176
+ f.write(default_config.strip())
177
+ print(f"Created default config.yaml at {config_path}")
178
+
179
+ def run_command(args):
180
+ """Run PIV analysis using the current config"""
181
+ try:
182
+ from pivtools_cli.example import main as run_piv
183
+ run_piv()
184
+ except ImportError as e:
185
+ print(f"Error importing PIVTOOLs: {e}")
186
+ print("Make sure PIVTOOLs is properly installed")
187
+ sys.exit(1)
188
+
189
+ def main():
190
+ parser = argparse.ArgumentParser(
191
+ description="PIVTOOLs - Particle Image Velocimetry Tools",
192
+ prog="pivtools-cli"
193
+ )
194
+
195
+ subparsers = parser.add_subparsers(dest="command", help="Available commands")
196
+
197
+ # init command
198
+ init_parser = subparsers.add_parser(
199
+ "init",
200
+ help="Initialize a new PIVTOOLs workspace with default config.yaml"
201
+ )
202
+ init_parser.add_argument(
203
+ "--force", "-f",
204
+ action="store_true",
205
+ help="Overwrite existing config.yaml"
206
+ )
207
+ init_parser.set_defaults(func=init_command)
208
+
209
+ # run command
210
+ run_parser = subparsers.add_parser(
211
+ "run",
212
+ help="Run PIV analysis using config.yaml"
213
+ )
214
+ run_parser.set_defaults(func=run_command)
215
+
216
+ args = parser.parse_args()
217
+
218
+ if not args.command:
219
+ parser.print_help()
220
+ return
221
+
222
+ args.func(args)
223
+
224
+ if __name__ == "__main__":
225
+ main()