flowtracks 1.6.2.dev1__py3-none-any.whl → 1.6.2.dev3__py3-none-any.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 (28) hide show
  1. flowtracks/__init__.py +10 -0
  2. flowtracks/_version.py +3 -3
  3. flowtracks/eulerian.py +23 -2
  4. flowtracks/phasing.py +111 -0
  5. {flowtracks-1.6.2.dev1.dist-info → flowtracks-1.6.2.dev3.dist-info}/METADATA +1 -1
  6. {flowtracks-1.6.2.dev1.dist-info → flowtracks-1.6.2.dev3.dist-info}/RECORD +28 -27
  7. {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev3.data}/data/flowtracks-examples/batch_Lagrangian_to_Eulerian.py +0 -0
  8. {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev3.data}/data/flowtracks-examples/hdf5_scene_analysis.ipynb +0 -0
  9. {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev3.data}/data/flowtracks-examples/linking_trajectories.ipynb +0 -0
  10. {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev3.data}/data/flowtracks-examples/marimo_dual_rig_trajectories.py +0 -0
  11. {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev3.data}/data/flowtracks-examples/marimo_flowtracks.py +0 -0
  12. {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev3.data}/data/flowtracks-examples/marimo_hdf5_vs_zarr_scene_analysis.py +0 -0
  13. {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev3.data}/data/flowtracks-examples/marimo_linking_trajectories_zarr.py +0 -0
  14. {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev3.data}/data/flowtracks-examples/marimo_phase_averaging_demo.py +0 -0
  15. {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev3.data}/data/flowtracks-examples/marimo_phase_metrics.py +0 -0
  16. {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev3.data}/data/flowtracks-examples/marimo_vtk_writers_preview.py +0 -0
  17. {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev3.data}/data/flowtracks-examples/marimo_zarr_dashboard.py +0 -0
  18. {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev3.data}/data/flowtracks-examples/repeated_interpolation.ipynb +0 -0
  19. {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev3.data}/data/flowtracks-examples/run_pipeline.py +0 -0
  20. {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev3.data}/data/flowtracks-examples/visualize_marimo.py +0 -0
  21. {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev3.data}/data/flowtracks-examples/visualize_results.py +0 -0
  22. {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev3.data}/scripts/analyse_fhdf.py +0 -0
  23. {flowtracks-1.6.2.dev1.dist-info → flowtracks-1.6.2.dev3.dist-info}/WHEEL +0 -0
  24. {flowtracks-1.6.2.dev1.dist-info → flowtracks-1.6.2.dev3.dist-info}/entry_points.txt +0 -0
  25. {flowtracks-1.6.2.dev1.dist-info → flowtracks-1.6.2.dev3.dist-info}/licenses/LICENSE.txt +0 -0
  26. {flowtracks-1.6.2.dev1.dist-info → flowtracks-1.6.2.dev3.dist-info}/licenses/LICENSES/BSD-3-Clause.txt +0 -0
  27. {flowtracks-1.6.2.dev1.dist-info → flowtracks-1.6.2.dev3.dist-info}/licenses/LICENSES/GPL-3.0-only.txt +0 -0
  28. {flowtracks-1.6.2.dev1.dist-info → flowtracks-1.6.2.dev3.dist-info}/top_level.txt +0 -0
flowtracks/__init__.py CHANGED
@@ -21,6 +21,12 @@ from flowtracks.eulerian import (
21
21
  save_zarr,
22
22
  )
23
23
  from flowtracks.phase_average import fluctuations, phase_average
24
+ from flowtracks.phasing import (
25
+ assign_bins,
26
+ bin_of_frame,
27
+ phase_of_frame,
28
+ validate_bins,
29
+ )
24
30
  from flowtracks.smoothing import savitzky_golay
25
31
  from flowtracks.stitching import stitch_trajectories
26
32
  from flowtracks.writers import (
@@ -41,6 +47,10 @@ __all__ = [
41
47
  "finite_difference_velocity",
42
48
  "phase_average",
43
49
  "fluctuations",
50
+ "validate_bins",
51
+ "assign_bins",
52
+ "phase_of_frame",
53
+ "bin_of_frame",
44
54
  "derived_fields",
45
55
  "save_zarr",
46
56
  "save_dataset",
flowtracks/_version.py CHANGED
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.6.2.dev1'
22
- __version_tuple__ = version_tuple = (1, 6, 2, 'dev1')
21
+ __version__ = version = '1.6.2.dev3'
22
+ __version_tuple__ = version_tuple = (1, 6, 2, 'dev3')
23
23
 
24
- __commit_id__ = commit_id = 'g343cf68fa'
24
+ __commit_id__ = commit_id = 'g17f6da530'
flowtracks/eulerian.py CHANGED
@@ -128,11 +128,12 @@ def _bin_counts_sums_ceil(pos, vel, ti, mins, deltas, shape):
128
128
  return counts, sums
129
129
 
130
130
 
131
- def eulerian_grid(scene, grid_params, first, last, cycletime,
131
+ def eulerian_grid(scene, grid_params, first, last, cycletime=None,
132
132
  deltat=90, base_time=100000, min_count=50,
133
133
  smoothing_sigma=None, *, fill_value=float("nan"),
134
134
  qc=None, chunk_frames=None, add_valid=True, fin=None,
135
- voxel_rule="half-open") -> xr.Dataset:
135
+ voxel_rule="half-open", n_frames_in_period=None,
136
+ n_phases=None, phase_zero_frame=None) -> xr.Dataset:
136
137
  """Bin Lagrangian particles onto a (x, y, z, phase) grid of mean velocities.
137
138
 
138
139
  Same math as batch_Lagrangian_to_Eulerian.eulerian_grid, but: reads the
@@ -140,6 +141,15 @@ def eulerian_grid(scene, grid_params, first, last, cycletime,
140
141
  query per frame, bins every particle at once with np.histogramdd, and
141
142
  returns a self-describing Dataset instead of writing HDF5.
142
143
 
144
+ Phase-bin naming (shared with openptv-cloud/openptv-analysis — same
145
+ users, one vocabulary; see :mod:`flowtracks.phasing` for the full
146
+ definition and its rules): ``n_frames_in_period`` is ``cycletime``,
147
+ ``n_phases`` is ``fin``, ``phase_zero_frame`` is ``base_time``. Pass
148
+ either style; when both are given the new-style name wins. Narrow
149
+ (gappy) bins — ``phase_width`` in :mod:`flowtracks.phasing` — are a
150
+ caller-side frame selection (see :func:`flowtracks.phasing.bin_of_frame`);
151
+ this gridder always tiles contiguously.
152
+
143
153
  smoothing_sigma (in grid cells, scalar or per-axis (sx, sy, sz)) applies
144
154
  Gaussian kernel smoothing to the velocity sums AND the counts before the
145
155
  division (Shepard/kernel estimate); min_count then acts on smoothed counts.
@@ -171,6 +181,17 @@ def eulerian_grid(scene, grid_params, first, last, cycletime,
171
181
  prefilter to the strict exclusive box (both bounds exclusive), so
172
182
  the binned set matches the legacy inputs exactly.
173
183
  """
184
+ if n_frames_in_period is not None:
185
+ cycletime = n_frames_in_period
186
+ if cycletime is None:
187
+ raise ValueError(
188
+ "eulerian_grid() needs a period: pass cycletime (legacy) or "
189
+ "n_frames_in_period (shared vocabulary)."
190
+ )
191
+ if n_phases is not None:
192
+ fin = n_phases
193
+ if phase_zero_frame is not None:
194
+ base_time = phase_zero_frame
174
195
  zaman = deltat * 2 + 1
175
196
  fin = int(np.ceil(cycletime / zaman)) if fin is None else int(fin)
176
197
  edges = [np.linspace(grid_params[f"min_{d}"], grid_params[f"max_{d}"],
flowtracks/phasing.py ADDED
@@ -0,0 +1,111 @@
1
+ # SPDX-License-Identifier: GPL-3.0-only
2
+ """One shared phase-bin definition for periodic PTV post-processing.
3
+
4
+ Every package in the OpenPTV family (flowtracks itself, openptv-cloud,
5
+ openptv-analysis — same users) uses these names and these rules, so a
6
+ ``post_analysis.binning`` block means the same thing everywhere:
7
+
8
+ Canonical names (all self-explainable):
9
+
10
+ n_frames_in_period — period length, in frames
11
+ n_phases — number of phase bins per cycle (the output count)
12
+ phase_width — bin width in cycle units [0, 1); default 1/n_phases
13
+ phase_zero_frame — frame anchoring phase 0
14
+
15
+ Rules enforced by :func:`validate_bins` (fail loudly, never ship NaNs):
16
+
17
+ 1 <= n_phases <= n_frames_in_period (more bins than frames would stay
18
+ empty by construction — with whole-frame counting there are only
19
+ n_frames_in_period distinct phases per cycle);
20
+ 0 < phase_width <= 1/n_phases (bins never overlap in time; narrower bins
21
+ leave gaps — some frames go unused, which is intentional).
22
+
23
+ Bins are uniform and start-anchored: bin ``i`` covers
24
+ ``[i/n_phases, i/n_phases + phase_width)``. :func:`assign_bins` returns -1
25
+ for samples falling in gaps.
26
+ """
27
+
28
+ from __future__ import annotations
29
+
30
+ import numpy as np
31
+
32
+ __all__ = [
33
+ "validate_bins",
34
+ "assign_bins",
35
+ "phase_of_frame",
36
+ "bin_of_frame",
37
+ ]
38
+
39
+
40
+ def validate_bins(n_frames_in_period, n_phases, phase_width=None) -> float:
41
+ """Check one bin definition; return the effective width (cycle units).
42
+
43
+ Raises SystemExit on violation — a bad binning must fail loudly before
44
+ any averaging, never ship silent NaN phases.
45
+ """
46
+ try:
47
+ period = int(n_frames_in_period)
48
+ except (TypeError, ValueError):
49
+ raise SystemExit(
50
+ "[phasing] n_frames_in_period must be a positive integer "
51
+ f"(got {n_frames_in_period!r})."
52
+ )
53
+ try:
54
+ n = int(n_phases)
55
+ except (TypeError, ValueError):
56
+ raise SystemExit(
57
+ f"[phasing] n_phases must be a positive integer (got {n_phases!r})."
58
+ )
59
+ if period < 1:
60
+ raise SystemExit("[phasing] n_frames_in_period must be >= 1.")
61
+ if n < 1:
62
+ raise SystemExit("[phasing] n_phases must be >= 1.")
63
+ if n > period:
64
+ raise SystemExit(
65
+ f"[phasing] n_phases ({n}) cannot exceed n_frames_in_period "
66
+ f"({period}): with whole-frame counting there are only {period} "
67
+ "distinct phases per cycle, so the extra bins would stay empty. "
68
+ f"Use n_phases <= {period}."
69
+ )
70
+ spacing = 1.0 / n
71
+ width = float(phase_width) if phase_width is not None else spacing
72
+ if not width > 0:
73
+ raise SystemExit("[phasing] phase_width must be positive.")
74
+ if width > spacing + 1e-12:
75
+ raise SystemExit(
76
+ f"[phasing] phase_width ({width:.4g}) exceeds the phase spacing "
77
+ f"(1/n_phases = {spacing:.4g}): bins would overlap in time. "
78
+ "Maximum is 1/n_phases (contiguous bins, no gaps)."
79
+ )
80
+ return width
81
+
82
+
83
+ def phase_of_frame(frame, n_frames_in_period, phase_zero_frame=0) -> float:
84
+ """Phase in [0, 1) of one frame number."""
85
+ period = int(n_frames_in_period)
86
+ return ((int(frame) - int(phase_zero_frame)) % period) / period
87
+
88
+
89
+ def bin_of_frame(frame, n_phases, n_frames_in_period,
90
+ phase_width=None, phase_zero_frame=0) -> int:
91
+ """Bin index of one frame number, or -1 when it falls in a gap."""
92
+ n = int(n_phases)
93
+ width = float(phase_width) if phase_width is not None else 1.0 / n
94
+ phase = phase_of_frame(frame, n_frames_in_period, phase_zero_frame)
95
+ idx = min(int(phase * n), n - 1)
96
+ return idx if (phase * n - idx) < width * n - 1e-12 else -1
97
+
98
+
99
+ def assign_bins(phase, n_phases, phase_width=None):
100
+ """Bin index per sample phase, or -1 for samples in gaps.
101
+
102
+ phase: array-like floats in [0, 1). Default width (None) = 1/n_phases,
103
+ i.e. contiguous tiling with no gaps.
104
+ """
105
+ phase = np.asarray(phase, dtype=float)
106
+ n = int(n_phases)
107
+ width = float(phase_width) if phase_width is not None else 1.0 / n
108
+ idx = np.minimum((phase * n).astype(int), n - 1)
109
+ intra = phase * n - idx # position inside the bin, 0..1
110
+ keep_fraction = width * n # how much of each bin is covered
111
+ return np.where(intra < keep_fraction - 1e-12, idx, -1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flowtracks
3
- Version: 1.6.2.dev1
3
+ Version: 1.6.2.dev3
4
4
  Summary: Library for handling 3D PTV trajectory databases and Lagrangian/Eulerian turbulence post-processing.
5
5
  Author-email: Yosef Meller <yosefm@gmail.com>
6
6
  License-Expression: GPL-3.0-only AND BSD-3-Clause
@@ -1,9 +1,9 @@
1
- flowtracks/__init__.py,sha256=UHxu1eFrWI0DD2kPLy-GdF2WEMkbx1dBRkN_4NmqD7M,1341
2
- flowtracks/_version.py,sha256=sX-4f5T5duAZRGqZmFciqVEpgoXPx5071sKVdXva8CM,541
1
+ flowtracks/__init__.py,sha256=iCexskmRtpNJ0fNZWRFkQAqrku7csbKy5NtL2YQNYeo,1532
2
+ flowtracks/_version.py,sha256=ioGLROz7BQPlJdI-WwRRXLPAhGzUpsK8HZGSNQ17PCs,541
3
3
  flowtracks/an_scene.py,sha256=QV_gtzp-5h1CqAW1Y6ieGco9BxXQDE4f_7-fcy3fluI,7361
4
4
  flowtracks/analysis.py,sha256=nob5-pKxjPzB34_oQsxmxYALz4Q_s1BTpC5_VgXX3ss,6320
5
5
  flowtracks/combine.py,sha256=-UQtbTH4vjQS88_92h5UZlS60OfQofTWEV6SL1prXgI,4455
6
- flowtracks/eulerian.py,sha256=ksW4pxKS-C56ew3qWtKn6dweIctgDoaR5_1_QK3H6g8,40456
6
+ flowtracks/eulerian.py,sha256=b6otBh_fjwfMPGKsitBMmM-zhcp8qq7SiWyx-cnGaGU,41495
7
7
  flowtracks/flux.py,sha256=w4K_jjDWTBIOj4BkoeNoKjIRcvg_6stCqNF8iivxF-A,15137
8
8
  flowtracks/format_docstrings.py,sha256=iJVJmtTUYEDEcmF5XSRZ08zpvlVc9lU66CZeqSpEKic,1987
9
9
  flowtracks/future_idea_xarray_dask_zarr.py,sha256=4ZS6QuZ2s_sUaiCW0XBo74GrP5fw_clVyhWNjT5gbds,6101
@@ -14,6 +14,7 @@ flowtracks/nhist.py,sha256=3xdrfSTSpTojXJcyhwBgagHBmKrm0U_AEsP3BjP9H1o,4089
14
14
  flowtracks/pairs.py,sha256=ehYDDTmjeRuzkSAMpdlwnwwAZOPNLKGF_e5HmcKw-2g,4034
15
15
  flowtracks/particle.py,sha256=sVng1X8Xp3V9_wgJK2EGsDEx1OFQjd3L63Fzn--MWkM,671
16
16
  flowtracks/phase_average.py,sha256=jjtrHYg0ukGRnJtRawJ6sWhdyrlV_16qBLlfNVxEQHw,3035
17
+ flowtracks/phasing.py,sha256=us7WfMYrx6dCCPNwucvN34G_0A7EKS9ieH1TrnpwM0I,4320
17
18
  flowtracks/pipeline.py,sha256=0wOeeFqQGN_Lhgq-QFeQNg0oEKtJSGDhhZdv81M1PDg,5167
18
19
  flowtracks/provenance.py,sha256=8L2BXmLdBcZRncUkr8oJbeU5JKdebj1Cgxrbzdy5o7A,2115
19
20
  flowtracks/repair.py,sha256=rxaE1hcxQjNx19tLJOhL619lSfkB7Kfh6kXpJ_fSMfg,19122
@@ -26,27 +27,27 @@ flowtracks/vortex.py,sha256=4lG3QkvvnWhAHy4tl1pJrBGFLdrlP4pxNdhCZI1VZ4Q,2529
26
27
  flowtracks/wall_shear.py,sha256=k9Q5FEchIO9J_onXPOw4PNJQfmsrSyVVvX4RdW-rQlE,6788
27
28
  flowtracks/writers.py,sha256=QzZ7gKqRGNti6caPHcwCr_4VUCjzzDxMA2CBS5-pq84,8391
28
29
  flowtracks/zarr_scene.py,sha256=PKCtiTT1t0Hj74Q572ra5DM3uM8lQK1A6DzzfUxvIzI,10468
29
- flowtracks-1.6.2.dev1.data/data/flowtracks-examples/batch_Lagrangian_to_Eulerian.py,sha256=e7mQFqyqvCeAHRKiN1IaxdNJi0e2FU84c7QNrx0L-m0,2296
30
- flowtracks-1.6.2.dev1.data/data/flowtracks-examples/hdf5_scene_analysis.ipynb,sha256=jn0Z_ZVL1-iXaiKXwyAeb74NbXsBpnocCxCSDh814eU,243097
31
- flowtracks-1.6.2.dev1.data/data/flowtracks-examples/linking_trajectories.ipynb,sha256=udz0GLDiPv68BYySg4yO1HWzaB9Sdy3YA3IhnIHDeII,8820
32
- flowtracks-1.6.2.dev1.data/data/flowtracks-examples/marimo_dual_rig_trajectories.py,sha256=dzeK0C-knwq1bPOwo0p1RhWrb0RPp-T31rBaGEptXcc,6737
33
- flowtracks-1.6.2.dev1.data/data/flowtracks-examples/marimo_flowtracks.py,sha256=7FIJNwBx9aBRmaM5ofmYTXSWEjE0wZqDfs8J47Tmw6U,9440
34
- flowtracks-1.6.2.dev1.data/data/flowtracks-examples/marimo_hdf5_vs_zarr_scene_analysis.py,sha256=bjXlMsLJTxJ0JkvGcVZbuDOFYZU4OvdabtDUgqb15So,4536
35
- flowtracks-1.6.2.dev1.data/data/flowtracks-examples/marimo_linking_trajectories_zarr.py,sha256=Ny_WUbiZWo0aKw-u2KGFWrhMv-8BvNgBy0UHIqCobYg,8210
36
- flowtracks-1.6.2.dev1.data/data/flowtracks-examples/marimo_phase_averaging_demo.py,sha256=vg6j2ayKGl-5uj08bdzzb6pujzJJQ_5bUsG7UuPP7dM,9270
37
- flowtracks-1.6.2.dev1.data/data/flowtracks-examples/marimo_phase_metrics.py,sha256=kBc2e_b-orDrm3AnuUXCcxsvmfQWyCtE826pFeolMGE,9367
38
- flowtracks-1.6.2.dev1.data/data/flowtracks-examples/marimo_vtk_writers_preview.py,sha256=Otrhhp-QFf6F94EOs6rWu5xOCpbS16EfWy_iMFp7e_I,14611
39
- flowtracks-1.6.2.dev1.data/data/flowtracks-examples/marimo_zarr_dashboard.py,sha256=jVIum6hdEelH4ef7vRgsfLhrbmMsuErsJBzxrnEImnw,9268
40
- flowtracks-1.6.2.dev1.data/data/flowtracks-examples/repeated_interpolation.ipynb,sha256=t9SfoIWRu5XP0SrphWbQy508uzyEibVz61FGjl51fjA,8861
41
- flowtracks-1.6.2.dev1.data/data/flowtracks-examples/run_pipeline.py,sha256=5fGE2tIP6XjFZ1sEYmqBujuLaXFfRL-rNnbr2p2CDfM,7205
42
- flowtracks-1.6.2.dev1.data/data/flowtracks-examples/visualize_marimo.py,sha256=jWrg5IWjY-bmSQwQjaO5qTr0t_G48CsqJYpevdQrxeY,13026
43
- flowtracks-1.6.2.dev1.data/data/flowtracks-examples/visualize_results.py,sha256=SbPg3EoDcuIyo0rUz3E-AnT4sLWDVJFhgC6xVcracW4,7583
44
- flowtracks-1.6.2.dev1.data/scripts/analyse_fhdf.py,sha256=QH08NdImGukTEGuZEKFxjStcSelXBv-8A-22G6KtXqM,1315
45
- flowtracks-1.6.2.dev1.dist-info/licenses/LICENSE.txt,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
46
- flowtracks-1.6.2.dev1.dist-info/licenses/LICENSES/BSD-3-Clause.txt,sha256=XiJR9O5snDB6sAz0bcncOU6msceZgjPRxejWEQGg40Q,1505
47
- flowtracks-1.6.2.dev1.dist-info/licenses/LICENSES/GPL-3.0-only.txt,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
48
- flowtracks-1.6.2.dev1.dist-info/METADATA,sha256=Rj-Vf--pDCbat5wzy_wvw9yz7TQ4N-UhJAwomgbHUuE,4773
49
- flowtracks-1.6.2.dev1.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
50
- flowtracks-1.6.2.dev1.dist-info/entry_points.txt,sha256=U6028E7yQZQiZoXWMl7w4xgZUPwPxAGiAuuMB__c-yQ,60
51
- flowtracks-1.6.2.dev1.dist-info/top_level.txt,sha256=cR54RNb9y2Wfr_BfuOezmNJOMB4GfIHh1-luXTREnQA,11
52
- flowtracks-1.6.2.dev1.dist-info/RECORD,,
30
+ flowtracks-1.6.2.dev3.data/data/flowtracks-examples/batch_Lagrangian_to_Eulerian.py,sha256=e7mQFqyqvCeAHRKiN1IaxdNJi0e2FU84c7QNrx0L-m0,2296
31
+ flowtracks-1.6.2.dev3.data/data/flowtracks-examples/hdf5_scene_analysis.ipynb,sha256=jn0Z_ZVL1-iXaiKXwyAeb74NbXsBpnocCxCSDh814eU,243097
32
+ flowtracks-1.6.2.dev3.data/data/flowtracks-examples/linking_trajectories.ipynb,sha256=udz0GLDiPv68BYySg4yO1HWzaB9Sdy3YA3IhnIHDeII,8820
33
+ flowtracks-1.6.2.dev3.data/data/flowtracks-examples/marimo_dual_rig_trajectories.py,sha256=dzeK0C-knwq1bPOwo0p1RhWrb0RPp-T31rBaGEptXcc,6737
34
+ flowtracks-1.6.2.dev3.data/data/flowtracks-examples/marimo_flowtracks.py,sha256=7FIJNwBx9aBRmaM5ofmYTXSWEjE0wZqDfs8J47Tmw6U,9440
35
+ flowtracks-1.6.2.dev3.data/data/flowtracks-examples/marimo_hdf5_vs_zarr_scene_analysis.py,sha256=bjXlMsLJTxJ0JkvGcVZbuDOFYZU4OvdabtDUgqb15So,4536
36
+ flowtracks-1.6.2.dev3.data/data/flowtracks-examples/marimo_linking_trajectories_zarr.py,sha256=Ny_WUbiZWo0aKw-u2KGFWrhMv-8BvNgBy0UHIqCobYg,8210
37
+ flowtracks-1.6.2.dev3.data/data/flowtracks-examples/marimo_phase_averaging_demo.py,sha256=vg6j2ayKGl-5uj08bdzzb6pujzJJQ_5bUsG7UuPP7dM,9270
38
+ flowtracks-1.6.2.dev3.data/data/flowtracks-examples/marimo_phase_metrics.py,sha256=kBc2e_b-orDrm3AnuUXCcxsvmfQWyCtE826pFeolMGE,9367
39
+ flowtracks-1.6.2.dev3.data/data/flowtracks-examples/marimo_vtk_writers_preview.py,sha256=Otrhhp-QFf6F94EOs6rWu5xOCpbS16EfWy_iMFp7e_I,14611
40
+ flowtracks-1.6.2.dev3.data/data/flowtracks-examples/marimo_zarr_dashboard.py,sha256=jVIum6hdEelH4ef7vRgsfLhrbmMsuErsJBzxrnEImnw,9268
41
+ flowtracks-1.6.2.dev3.data/data/flowtracks-examples/repeated_interpolation.ipynb,sha256=t9SfoIWRu5XP0SrphWbQy508uzyEibVz61FGjl51fjA,8861
42
+ flowtracks-1.6.2.dev3.data/data/flowtracks-examples/run_pipeline.py,sha256=5fGE2tIP6XjFZ1sEYmqBujuLaXFfRL-rNnbr2p2CDfM,7205
43
+ flowtracks-1.6.2.dev3.data/data/flowtracks-examples/visualize_marimo.py,sha256=jWrg5IWjY-bmSQwQjaO5qTr0t_G48CsqJYpevdQrxeY,13026
44
+ flowtracks-1.6.2.dev3.data/data/flowtracks-examples/visualize_results.py,sha256=SbPg3EoDcuIyo0rUz3E-AnT4sLWDVJFhgC6xVcracW4,7583
45
+ flowtracks-1.6.2.dev3.data/scripts/analyse_fhdf.py,sha256=QH08NdImGukTEGuZEKFxjStcSelXBv-8A-22G6KtXqM,1315
46
+ flowtracks-1.6.2.dev3.dist-info/licenses/LICENSE.txt,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
47
+ flowtracks-1.6.2.dev3.dist-info/licenses/LICENSES/BSD-3-Clause.txt,sha256=XiJR9O5snDB6sAz0bcncOU6msceZgjPRxejWEQGg40Q,1505
48
+ flowtracks-1.6.2.dev3.dist-info/licenses/LICENSES/GPL-3.0-only.txt,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
49
+ flowtracks-1.6.2.dev3.dist-info/METADATA,sha256=kKrzqrX4vP203dJvGLDCw-M09MaprT8BviNIdyEdb2g,4773
50
+ flowtracks-1.6.2.dev3.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
51
+ flowtracks-1.6.2.dev3.dist-info/entry_points.txt,sha256=U6028E7yQZQiZoXWMl7w4xgZUPwPxAGiAuuMB__c-yQ,60
52
+ flowtracks-1.6.2.dev3.dist-info/top_level.txt,sha256=cR54RNb9y2Wfr_BfuOezmNJOMB4GfIHh1-luXTREnQA,11
53
+ flowtracks-1.6.2.dev3.dist-info/RECORD,,