flowtracks 1.6.2.dev1__py3-none-any.whl → 1.6.2.dev4__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.
- flowtracks/__init__.py +10 -0
- flowtracks/_version.py +3 -3
- flowtracks/eulerian.py +29 -2
- flowtracks/io.py +10 -1
- flowtracks/phasing.py +111 -0
- flowtracks/writers.py +19 -1
- {flowtracks-1.6.2.dev1.dist-info → flowtracks-1.6.2.dev4.dist-info}/METADATA +1 -1
- {flowtracks-1.6.2.dev1.dist-info → flowtracks-1.6.2.dev4.dist-info}/RECORD +30 -29
- {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/data/flowtracks-examples/batch_Lagrangian_to_Eulerian.py +0 -0
- {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/data/flowtracks-examples/hdf5_scene_analysis.ipynb +0 -0
- {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/data/flowtracks-examples/linking_trajectories.ipynb +0 -0
- {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/data/flowtracks-examples/marimo_dual_rig_trajectories.py +0 -0
- {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/data/flowtracks-examples/marimo_flowtracks.py +0 -0
- {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/data/flowtracks-examples/marimo_hdf5_vs_zarr_scene_analysis.py +0 -0
- {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/data/flowtracks-examples/marimo_linking_trajectories_zarr.py +0 -0
- {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/data/flowtracks-examples/marimo_phase_averaging_demo.py +0 -0
- {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/data/flowtracks-examples/marimo_phase_metrics.py +0 -0
- {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/data/flowtracks-examples/marimo_vtk_writers_preview.py +0 -0
- {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/data/flowtracks-examples/marimo_zarr_dashboard.py +0 -0
- {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/data/flowtracks-examples/repeated_interpolation.ipynb +0 -0
- {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/data/flowtracks-examples/run_pipeline.py +0 -0
- {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/data/flowtracks-examples/visualize_marimo.py +0 -0
- {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/data/flowtracks-examples/visualize_results.py +0 -0
- {flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/scripts/analyse_fhdf.py +0 -0
- {flowtracks-1.6.2.dev1.dist-info → flowtracks-1.6.2.dev4.dist-info}/WHEEL +0 -0
- {flowtracks-1.6.2.dev1.dist-info → flowtracks-1.6.2.dev4.dist-info}/entry_points.txt +0 -0
- {flowtracks-1.6.2.dev1.dist-info → flowtracks-1.6.2.dev4.dist-info}/licenses/LICENSE.txt +0 -0
- {flowtracks-1.6.2.dev1.dist-info → flowtracks-1.6.2.dev4.dist-info}/licenses/LICENSES/BSD-3-Clause.txt +0 -0
- {flowtracks-1.6.2.dev1.dist-info → flowtracks-1.6.2.dev4.dist-info}/licenses/LICENSES/GPL-3.0-only.txt +0 -0
- {flowtracks-1.6.2.dev1.dist-info → flowtracks-1.6.2.dev4.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.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 6, 2, '
|
|
21
|
+
__version__ = version = '1.6.2.dev4'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 6, 2, 'dev4')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gc00cb25a5'
|
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"
|
|
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,21 @@ 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
|
+
|
|
153
|
+
Input contract (NOT validated — the caller states it): positions in
|
|
154
|
+
METRES, velocities in METRES PER SECOND. The output dataset is labelled
|
|
155
|
+
``m`` / ``m s-1`` (CF) on that basis. Per-frame velocities (no frame
|
|
156
|
+
rate known) average arithmetically fine, but the ``m s-1`` label is then
|
|
157
|
+
wrong — relabel to ``m frame-1`` downstream, or state the frame rate.
|
|
158
|
+
|
|
143
159
|
smoothing_sigma (in grid cells, scalar or per-axis (sx, sy, sz)) applies
|
|
144
160
|
Gaussian kernel smoothing to the velocity sums AND the counts before the
|
|
145
161
|
division (Shepard/kernel estimate); min_count then acts on smoothed counts.
|
|
@@ -171,6 +187,17 @@ def eulerian_grid(scene, grid_params, first, last, cycletime,
|
|
|
171
187
|
prefilter to the strict exclusive box (both bounds exclusive), so
|
|
172
188
|
the binned set matches the legacy inputs exactly.
|
|
173
189
|
"""
|
|
190
|
+
if n_frames_in_period is not None:
|
|
191
|
+
cycletime = n_frames_in_period
|
|
192
|
+
if cycletime is None:
|
|
193
|
+
raise ValueError(
|
|
194
|
+
"eulerian_grid() needs a period: pass cycletime (legacy) or "
|
|
195
|
+
"n_frames_in_period (shared vocabulary)."
|
|
196
|
+
)
|
|
197
|
+
if n_phases is not None:
|
|
198
|
+
fin = n_phases
|
|
199
|
+
if phase_zero_frame is not None:
|
|
200
|
+
base_time = phase_zero_frame
|
|
174
201
|
zaman = deltat * 2 + 1
|
|
175
202
|
fin = int(np.ceil(cycletime / zaman)) if fin is None else int(fin)
|
|
176
203
|
edges = [np.linspace(grid_params[f"min_{d}"], grid_params[f"max_{d}"],
|
flowtracks/io.py
CHANGED
|
@@ -1226,7 +1226,8 @@ def read_zarr_trajectories(zarr_path, first=None, last=None, group="trajectories
|
|
|
1226
1226
|
return []
|
|
1227
1227
|
|
|
1228
1228
|
|
|
1229
|
-
def save_zarr_trajectories(trajects, zarr_path, group="trajectories", overwrite=True
|
|
1229
|
+
def save_zarr_trajectories(trajects, zarr_path, group="trajectories", overwrite=True,
|
|
1230
|
+
units=None):
|
|
1230
1231
|
"""
|
|
1231
1232
|
Save a list of Trajectory objects into a Zarr directory store.
|
|
1232
1233
|
|
|
@@ -1235,6 +1236,11 @@ def save_zarr_trajectories(trajects, zarr_path, group="trajectories", overwrite=
|
|
|
1235
1236
|
zarr_path - path to the target .zarr directory.
|
|
1236
1237
|
group - sub-group name inside the Zarr store.
|
|
1237
1238
|
overwrite - if True, overwrite existing arrays in the group.
|
|
1239
|
+
units - dict of per-array units recorded on the group, e.g.
|
|
1240
|
+
{"pos": "m", "vel": "m s-1", "accel": "m s-2", "time": "frame"}.
|
|
1241
|
+
The writer never guesses: omit it only when the caller truly does
|
|
1242
|
+
not know, in which case no unit claim is stored. Honest rule: no
|
|
1243
|
+
frame rate means per-frame velocity units ("m frame-1"), never "m s-1".
|
|
1238
1244
|
"""
|
|
1239
1245
|
import zarr
|
|
1240
1246
|
|
|
@@ -1275,4 +1281,7 @@ def save_zarr_trajectories(trajects, zarr_path, group="trajectories", overwrite=
|
|
|
1275
1281
|
accel_arr = np.concatenate(all_accel, axis=0)
|
|
1276
1282
|
target_group.create_array("accel", data=accel_arr, overwrite=overwrite)
|
|
1277
1283
|
|
|
1284
|
+
if units:
|
|
1285
|
+
target_group.attrs.update({f"{k}_units": v for k, v in units.items()})
|
|
1286
|
+
|
|
1278
1287
|
|
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)
|
flowtracks/writers.py
CHANGED
|
@@ -134,13 +134,20 @@ def _clean(values: np.ndarray) -> np.ndarray:
|
|
|
134
134
|
|
|
135
135
|
|
|
136
136
|
def write_eulerian_series(ds: xr.Dataset, out_dir: Path, prefix: str = "phase",
|
|
137
|
-
|
|
137
|
+
time_dim: str = "phase", dt: float = 1.0,
|
|
138
|
+
units: dict | None = None) -> Path:
|
|
138
139
|
"""Write one Eulerian grid file per ``time_dim`` step plus a ``.pvd`` series.
|
|
139
140
|
|
|
140
141
|
Grid type is chosen from axis spacing: ``vtkImageData`` (``.vti``) when x,
|
|
141
142
|
y and z are each uniformly spaced, ``vtkRectilinearGrid`` (``.vtr``)
|
|
142
143
|
otherwise. Vector fields named by ``VEL_VARS`` are combined into a single
|
|
143
144
|
"velocity" array; every other data variable is written as a scalar.
|
|
145
|
+
|
|
146
|
+
``units`` maps array name to unit string (e.g. ``{"velocity": "m s-1"}``)
|
|
147
|
+
and is stored as grid field data (``units:<name>``); when omitted, the
|
|
148
|
+
dataset's own ``units`` attrs are carried over where present. VTK has no
|
|
149
|
+
unit system, so this is annotation, not enforcement — but the reader no
|
|
150
|
+
longer has to guess.
|
|
144
151
|
"""
|
|
145
152
|
import pyvista as pv
|
|
146
153
|
|
|
@@ -179,6 +186,17 @@ def write_eulerian_series(ds: xr.Dataset, out_dir: Path, prefix: str = "phase",
|
|
|
179
186
|
# skip rather than silently reshape/truncate them.
|
|
180
187
|
continue
|
|
181
188
|
grid.point_data[name] = _clean(da.values).ravel(order="F")
|
|
189
|
+
fields = dict(units) if units else {}
|
|
190
|
+
for name, da in snap.data_vars.items():
|
|
191
|
+
if name not in fields and da.attrs.get("units"):
|
|
192
|
+
fields[name] = da.attrs["units"]
|
|
193
|
+
if "velocity" in grid.point_data:
|
|
194
|
+
for v in VEL_VARS:
|
|
195
|
+
if v in fields:
|
|
196
|
+
fields["velocity"] = fields.pop(v)
|
|
197
|
+
break
|
|
198
|
+
for k, val in fields.items():
|
|
199
|
+
grid.field_data[f"units:{k}"] = np.array([str(val)])
|
|
182
200
|
path = out_dir / f"{prefix}_{i:04d}.{ext}"
|
|
183
201
|
grid.save(str(path))
|
|
184
202
|
entries.append((i * dt, path))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flowtracks
|
|
3
|
-
Version: 1.6.2.
|
|
3
|
+
Version: 1.6.2.dev4
|
|
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,19 +1,20 @@
|
|
|
1
|
-
flowtracks/__init__.py,sha256=
|
|
2
|
-
flowtracks/_version.py,sha256=
|
|
1
|
+
flowtracks/__init__.py,sha256=iCexskmRtpNJ0fNZWRFkQAqrku7csbKy5NtL2YQNYeo,1532
|
|
2
|
+
flowtracks/_version.py,sha256=ZWyF90B5Js1Ikxd3zd_HluOAb1r35l1-eoSda5mck90,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=
|
|
6
|
+
flowtracks/eulerian.py,sha256=PMt0_TtjrFwRPEvSEKm_wn8YZdClSux4yXEuxiB2EjM,41872
|
|
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
|
|
10
10
|
flowtracks/graphics.py,sha256=Pror0OmWXmlZz5yyEY2qKKQM5t_BMtKeYIAw26I0JeQ,13043
|
|
11
11
|
flowtracks/interpolation.py,sha256=njuB-bvWK5M2tc2Ibm6ZWNg6Tm6H-PTn0a63IldlJaA,39414
|
|
12
|
-
flowtracks/io.py,sha256=
|
|
12
|
+
flowtracks/io.py,sha256=sujLgtY8WIymMZugDv2jlQeL9QR_hZn-MaZPPKsAPvA,48366
|
|
13
13
|
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
|
|
@@ -24,29 +25,29 @@ flowtracks/stitching.py,sha256=HFsIRdAfqyhmES1OwIFslyWTF9U7kPJ5OKtjBl4YWqA,16895
|
|
|
24
25
|
flowtracks/trajectory.py,sha256=uL4-byZ2tycdrAwGoET4AfLHuKaWRnc8VHLO5zv9MOg,11831
|
|
25
26
|
flowtracks/vortex.py,sha256=4lG3QkvvnWhAHy4tl1pJrBGFLdrlP4pxNdhCZI1VZ4Q,2529
|
|
26
27
|
flowtracks/wall_shear.py,sha256=k9Q5FEchIO9J_onXPOw4PNJQfmsrSyVVvX4RdW-rQlE,6788
|
|
27
|
-
flowtracks/writers.py,sha256=
|
|
28
|
+
flowtracks/writers.py,sha256=NAVz8H2w-Wtiy__acB9uT_NDSO6RqpEywcxm8tk1peg,9273
|
|
28
29
|
flowtracks/zarr_scene.py,sha256=PKCtiTT1t0Hj74Q572ra5DM3uM8lQK1A6DzzfUxvIzI,10468
|
|
29
|
-
flowtracks-1.6.2.
|
|
30
|
-
flowtracks-1.6.2.
|
|
31
|
-
flowtracks-1.6.2.
|
|
32
|
-
flowtracks-1.6.2.
|
|
33
|
-
flowtracks-1.6.2.
|
|
34
|
-
flowtracks-1.6.2.
|
|
35
|
-
flowtracks-1.6.2.
|
|
36
|
-
flowtracks-1.6.2.
|
|
37
|
-
flowtracks-1.6.2.
|
|
38
|
-
flowtracks-1.6.2.
|
|
39
|
-
flowtracks-1.6.2.
|
|
40
|
-
flowtracks-1.6.2.
|
|
41
|
-
flowtracks-1.6.2.
|
|
42
|
-
flowtracks-1.6.2.
|
|
43
|
-
flowtracks-1.6.2.
|
|
44
|
-
flowtracks-1.6.2.
|
|
45
|
-
flowtracks-1.6.2.
|
|
46
|
-
flowtracks-1.6.2.
|
|
47
|
-
flowtracks-1.6.2.
|
|
48
|
-
flowtracks-1.6.2.
|
|
49
|
-
flowtracks-1.6.2.
|
|
50
|
-
flowtracks-1.6.2.
|
|
51
|
-
flowtracks-1.6.2.
|
|
52
|
-
flowtracks-1.6.2.
|
|
30
|
+
flowtracks-1.6.2.dev4.data/data/flowtracks-examples/batch_Lagrangian_to_Eulerian.py,sha256=e7mQFqyqvCeAHRKiN1IaxdNJi0e2FU84c7QNrx0L-m0,2296
|
|
31
|
+
flowtracks-1.6.2.dev4.data/data/flowtracks-examples/hdf5_scene_analysis.ipynb,sha256=jn0Z_ZVL1-iXaiKXwyAeb74NbXsBpnocCxCSDh814eU,243097
|
|
32
|
+
flowtracks-1.6.2.dev4.data/data/flowtracks-examples/linking_trajectories.ipynb,sha256=udz0GLDiPv68BYySg4yO1HWzaB9Sdy3YA3IhnIHDeII,8820
|
|
33
|
+
flowtracks-1.6.2.dev4.data/data/flowtracks-examples/marimo_dual_rig_trajectories.py,sha256=dzeK0C-knwq1bPOwo0p1RhWrb0RPp-T31rBaGEptXcc,6737
|
|
34
|
+
flowtracks-1.6.2.dev4.data/data/flowtracks-examples/marimo_flowtracks.py,sha256=7FIJNwBx9aBRmaM5ofmYTXSWEjE0wZqDfs8J47Tmw6U,9440
|
|
35
|
+
flowtracks-1.6.2.dev4.data/data/flowtracks-examples/marimo_hdf5_vs_zarr_scene_analysis.py,sha256=bjXlMsLJTxJ0JkvGcVZbuDOFYZU4OvdabtDUgqb15So,4536
|
|
36
|
+
flowtracks-1.6.2.dev4.data/data/flowtracks-examples/marimo_linking_trajectories_zarr.py,sha256=Ny_WUbiZWo0aKw-u2KGFWrhMv-8BvNgBy0UHIqCobYg,8210
|
|
37
|
+
flowtracks-1.6.2.dev4.data/data/flowtracks-examples/marimo_phase_averaging_demo.py,sha256=vg6j2ayKGl-5uj08bdzzb6pujzJJQ_5bUsG7UuPP7dM,9270
|
|
38
|
+
flowtracks-1.6.2.dev4.data/data/flowtracks-examples/marimo_phase_metrics.py,sha256=kBc2e_b-orDrm3AnuUXCcxsvmfQWyCtE826pFeolMGE,9367
|
|
39
|
+
flowtracks-1.6.2.dev4.data/data/flowtracks-examples/marimo_vtk_writers_preview.py,sha256=Otrhhp-QFf6F94EOs6rWu5xOCpbS16EfWy_iMFp7e_I,14611
|
|
40
|
+
flowtracks-1.6.2.dev4.data/data/flowtracks-examples/marimo_zarr_dashboard.py,sha256=jVIum6hdEelH4ef7vRgsfLhrbmMsuErsJBzxrnEImnw,9268
|
|
41
|
+
flowtracks-1.6.2.dev4.data/data/flowtracks-examples/repeated_interpolation.ipynb,sha256=t9SfoIWRu5XP0SrphWbQy508uzyEibVz61FGjl51fjA,8861
|
|
42
|
+
flowtracks-1.6.2.dev4.data/data/flowtracks-examples/run_pipeline.py,sha256=5fGE2tIP6XjFZ1sEYmqBujuLaXFfRL-rNnbr2p2CDfM,7205
|
|
43
|
+
flowtracks-1.6.2.dev4.data/data/flowtracks-examples/visualize_marimo.py,sha256=jWrg5IWjY-bmSQwQjaO5qTr0t_G48CsqJYpevdQrxeY,13026
|
|
44
|
+
flowtracks-1.6.2.dev4.data/data/flowtracks-examples/visualize_results.py,sha256=SbPg3EoDcuIyo0rUz3E-AnT4sLWDVJFhgC6xVcracW4,7583
|
|
45
|
+
flowtracks-1.6.2.dev4.data/scripts/analyse_fhdf.py,sha256=QH08NdImGukTEGuZEKFxjStcSelXBv-8A-22G6KtXqM,1315
|
|
46
|
+
flowtracks-1.6.2.dev4.dist-info/licenses/LICENSE.txt,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
|
|
47
|
+
flowtracks-1.6.2.dev4.dist-info/licenses/LICENSES/BSD-3-Clause.txt,sha256=XiJR9O5snDB6sAz0bcncOU6msceZgjPRxejWEQGg40Q,1505
|
|
48
|
+
flowtracks-1.6.2.dev4.dist-info/licenses/LICENSES/GPL-3.0-only.txt,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
|
|
49
|
+
flowtracks-1.6.2.dev4.dist-info/METADATA,sha256=5FSsqSUpZRPt6m3eOTVB-aQF_2vDOZOelKmkNibfg-k,4773
|
|
50
|
+
flowtracks-1.6.2.dev4.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
51
|
+
flowtracks-1.6.2.dev4.dist-info/entry_points.txt,sha256=U6028E7yQZQiZoXWMl7w4xgZUPwPxAGiAuuMB__c-yQ,60
|
|
52
|
+
flowtracks-1.6.2.dev4.dist-info/top_level.txt,sha256=cR54RNb9y2Wfr_BfuOezmNJOMB4GfIHh1-luXTREnQA,11
|
|
53
|
+
flowtracks-1.6.2.dev4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flowtracks-1.6.2.dev1.data → flowtracks-1.6.2.dev4.data}/data/flowtracks-examples/run_pipeline.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|