flowtracks 1.6.2.dev4__py3-none-any.whl → 1.6.2.dev6__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 (27) hide show
  1. flowtracks/_version.py +3 -3
  2. flowtracks/graphics.py +26 -6
  3. flowtracks/writers.py +31 -3
  4. {flowtracks-1.6.2.dev4.dist-info → flowtracks-1.6.2.dev6.dist-info}/METADATA +1 -1
  5. {flowtracks-1.6.2.dev4.dist-info → flowtracks-1.6.2.dev6.dist-info}/RECORD +27 -27
  6. {flowtracks-1.6.2.dev4.data → flowtracks-1.6.2.dev6.data}/data/flowtracks-examples/batch_Lagrangian_to_Eulerian.py +0 -0
  7. {flowtracks-1.6.2.dev4.data → flowtracks-1.6.2.dev6.data}/data/flowtracks-examples/hdf5_scene_analysis.ipynb +0 -0
  8. {flowtracks-1.6.2.dev4.data → flowtracks-1.6.2.dev6.data}/data/flowtracks-examples/linking_trajectories.ipynb +0 -0
  9. {flowtracks-1.6.2.dev4.data → flowtracks-1.6.2.dev6.data}/data/flowtracks-examples/marimo_dual_rig_trajectories.py +0 -0
  10. {flowtracks-1.6.2.dev4.data → flowtracks-1.6.2.dev6.data}/data/flowtracks-examples/marimo_flowtracks.py +0 -0
  11. {flowtracks-1.6.2.dev4.data → flowtracks-1.6.2.dev6.data}/data/flowtracks-examples/marimo_hdf5_vs_zarr_scene_analysis.py +0 -0
  12. {flowtracks-1.6.2.dev4.data → flowtracks-1.6.2.dev6.data}/data/flowtracks-examples/marimo_linking_trajectories_zarr.py +0 -0
  13. {flowtracks-1.6.2.dev4.data → flowtracks-1.6.2.dev6.data}/data/flowtracks-examples/marimo_phase_averaging_demo.py +0 -0
  14. {flowtracks-1.6.2.dev4.data → flowtracks-1.6.2.dev6.data}/data/flowtracks-examples/marimo_phase_metrics.py +0 -0
  15. {flowtracks-1.6.2.dev4.data → flowtracks-1.6.2.dev6.data}/data/flowtracks-examples/marimo_vtk_writers_preview.py +0 -0
  16. {flowtracks-1.6.2.dev4.data → flowtracks-1.6.2.dev6.data}/data/flowtracks-examples/marimo_zarr_dashboard.py +0 -0
  17. {flowtracks-1.6.2.dev4.data → flowtracks-1.6.2.dev6.data}/data/flowtracks-examples/repeated_interpolation.ipynb +0 -0
  18. {flowtracks-1.6.2.dev4.data → flowtracks-1.6.2.dev6.data}/data/flowtracks-examples/run_pipeline.py +0 -0
  19. {flowtracks-1.6.2.dev4.data → flowtracks-1.6.2.dev6.data}/data/flowtracks-examples/visualize_marimo.py +0 -0
  20. {flowtracks-1.6.2.dev4.data → flowtracks-1.6.2.dev6.data}/data/flowtracks-examples/visualize_results.py +0 -0
  21. {flowtracks-1.6.2.dev4.data → flowtracks-1.6.2.dev6.data}/scripts/analyse_fhdf.py +0 -0
  22. {flowtracks-1.6.2.dev4.dist-info → flowtracks-1.6.2.dev6.dist-info}/WHEEL +0 -0
  23. {flowtracks-1.6.2.dev4.dist-info → flowtracks-1.6.2.dev6.dist-info}/entry_points.txt +0 -0
  24. {flowtracks-1.6.2.dev4.dist-info → flowtracks-1.6.2.dev6.dist-info}/licenses/LICENSE.txt +0 -0
  25. {flowtracks-1.6.2.dev4.dist-info → flowtracks-1.6.2.dev6.dist-info}/licenses/LICENSES/BSD-3-Clause.txt +0 -0
  26. {flowtracks-1.6.2.dev4.dist-info → flowtracks-1.6.2.dev6.dist-info}/licenses/LICENSES/GPL-3.0-only.txt +0 -0
  27. {flowtracks-1.6.2.dev4.dist-info → flowtracks-1.6.2.dev6.dist-info}/top_level.txt +0 -0
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.dev4'
22
- __version_tuple__ = version_tuple = (1, 6, 2, 'dev4')
21
+ __version__ = version = '1.6.2.dev6'
22
+ __version_tuple__ = version_tuple = (1, 6, 2, 'dev6')
23
23
 
24
- __commit_id__ = commit_id = 'gc00cb25a5'
24
+ __commit_id__ = commit_id = 'g519243be4'
flowtracks/graphics.py CHANGED
@@ -20,6 +20,8 @@ PyVista (VTK, GPU-rendered polylines -- the ``vtk`` extra), from the same
20
20
  PolyData the ``.vtp`` ParaView writer saves.
21
21
  """
22
22
 
23
+ from pathlib import Path
24
+
23
25
  import matplotlib.pyplot as pl
24
26
  import numpy as np
25
27
 
@@ -249,7 +251,8 @@ def select_trajectories(source, by="length", n=10, min_points=20, min_extent=0.0
249
251
 
250
252
  def plot_trajectories_3d(source, trajids=None, scalars="speed", context=0,
251
253
  plotter=None, cmap="plasma", clim=None, line_width=3,
252
- point_size=6, title=None, bar_title=None, show=True):
254
+ point_size=6, title=None, bar_title=None, show=True,
255
+ units=None):
253
256
  """Interactive 3D trajectory view (PyVista): polylines coloured by a point
254
257
  array (``speed``, ``time``, ``trajid``), points drawn as spheres so short
255
258
  tracks stay visible.
@@ -264,14 +267,30 @@ def plot_trajectories_3d(source, trajids=None, scalars="speed", context=0,
264
267
  with the same title into one shared colour range, so give each
265
268
  subplot its own title to keep its own range.
266
269
  show - call ``plotter.show()``; pass False to compose or screenshot.
270
+ units - ``{"pos": "m", "vel": "m s-1", "time": "frame"}`` for axis and
271
+ colour-bar titles (``x [m]``, ``speed [m s-1]``). When omitted and
272
+ ``source`` is a Zarr path, whatever the writer recorded is used;
273
+ otherwise titles stay bare rather than guessed.
267
274
 
268
275
  Returns the plotter.
269
276
  """
270
277
  import pyvista as pv
271
278
 
272
- from flowtracks.writers import _trajectory_arrays, trajectory_polydata
273
-
274
- poly = trajectory_polydata(source, trajids)
279
+ from flowtracks.writers import (
280
+ _trajectory_arrays,
281
+ trajectory_polydata,
282
+ trajectory_units,
283
+ )
284
+
285
+ if units is None and isinstance(source, (str, Path)):
286
+ units = trajectory_units(source)
287
+ units = units or {}
288
+ pos_u = f" [{units['pos']}]" if units.get("pos") else ""
289
+ scalar_u = f" [{units['vel']}]" if scalars in ("speed", "velocity") and units.get("vel") else ""
290
+ if not scalar_u and scalars == "time" and units.get("time"):
291
+ scalar_u = f" [{units['time']}]"
292
+
293
+ poly = trajectory_polydata(source, trajids, units=units or None)
275
294
  if plotter is None:
276
295
  plotter = pv.Plotter()
277
296
  if context:
@@ -280,14 +299,15 @@ def plot_trajectories_3d(source, trajids=None, scalars="speed", context=0,
280
299
  plotter.add_points(pos[pick], color="grey", opacity=0.15, point_size=2,
281
300
  name="context")
282
301
  if poly.n_points:
283
- bar = {"title": bar_title or scalars}
302
+ bar = {"title": (bar_title or scalars) + scalar_u}
284
303
  plotter.add_mesh(poly, scalars=scalars, cmap=cmap, clim=clim, line_width=line_width,
285
304
  render_lines_as_tubes=True, scalar_bar_args=bar, name="tracks")
286
305
  plotter.add_mesh(poly.extract_points(np.arange(poly.n_points), adjacent_cells=False),
287
306
  scalars=scalars, cmap=cmap, clim=clim, point_size=point_size,
288
307
  render_points_as_spheres=True, style="points",
289
308
  show_scalar_bar=False, name="points")
290
- plotter.show_grid(xtitle="x", ytitle="y", ztitle="z", fmt="%.3g",
309
+ plotter.show_grid(xtitle=f"x{pos_u}", ytitle=f"y{pos_u}", ztitle=f"z{pos_u}",
310
+ fmt="%.3g",
291
311
  n_xlabels=3, n_ylabels=3, n_zlabels=3)
292
312
  plotter.add_axes()
293
313
  if title:
flowtracks/writers.py CHANGED
@@ -69,17 +69,43 @@ def _trajectory_arrays(source):
69
69
  raise TypeError(f"Unsupported trajectory source: {type(source)!r}")
70
70
 
71
71
 
72
- def trajectory_polydata(source, trajids=None):
72
+ def trajectory_units(source) -> dict:
73
+ """Units recorded on a trajectories store ({pos, vel, time, ...} units).
74
+
75
+ Zarr paths report what the writer recorded; anything else reports {} --
76
+ the caller then labels without units rather than guessing.
77
+ """
78
+ if isinstance(source, (str, Path)):
79
+ try:
80
+ import zarr
81
+
82
+ group = zarr.open_group(str(source), mode="r")
83
+ target = group["trajectories"] if "trajectories" in group else group
84
+ return {
85
+ k[:-6]: v
86
+ for k, v in dict(target.attrs).items()
87
+ if k.endswith("_units")
88
+ }
89
+ except Exception:
90
+ pass
91
+ return {}
92
+
93
+
94
+ def trajectory_polydata(source, trajids=None, units=None):
73
95
  """Lagrangian trajectories as VTK PolyData: points + one polyline per trajid.
74
96
 
75
97
  ``source`` as for :func:`write_trajectories_vtp`. ``trajids`` optionally
76
98
  keeps only those trajectories. Point data: ``trajid``, ``time``,
77
- ``velocity``, ``speed``. Shared by the ``.vtp`` writer and
78
- :func:`flowtracks.graphics.plot_trajectories_3d`.
99
+ ``velocity``, ``speed``. ``units`` (e.g. ``{"pos": "m"}``) is stored as
100
+ field data (``units:<name>``); when omitted and ``source`` is a Zarr path,
101
+ whatever the writer recorded is carried over. Shared by the ``.vtp``
102
+ writer and :func:`flowtracks.graphics.plot_trajectories_3d`.
79
103
  """
80
104
  import pyvista as pv
81
105
 
82
106
  pos, vel, time, trajid = _trajectory_arrays(source)
107
+ if units is None and isinstance(source, (str, Path)):
108
+ units = trajectory_units(source)
83
109
  if trajids is not None:
84
110
  keep = np.isin(trajid, np.asarray(trajids))
85
111
  pos, vel, time, trajid = pos[keep], vel[keep], time[keep], trajid[keep]
@@ -104,6 +130,8 @@ def trajectory_polydata(source, trajids=None):
104
130
  poly.point_data["time"] = time
105
131
  poly.point_data["velocity"] = vel
106
132
  poly.point_data["speed"] = np.linalg.norm(vel, axis=1)
133
+ for k, val in (units or {}).items():
134
+ poly.field_data[f"units:{k}"] = np.array([str(val)])
107
135
  return poly
108
136
 
109
137
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flowtracks
3
- Version: 1.6.2.dev4
3
+ Version: 1.6.2.dev6
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,5 +1,5 @@
1
1
  flowtracks/__init__.py,sha256=iCexskmRtpNJ0fNZWRFkQAqrku7csbKy5NtL2YQNYeo,1532
2
- flowtracks/_version.py,sha256=ZWyF90B5Js1Ikxd3zd_HluOAb1r35l1-eoSda5mck90,541
2
+ flowtracks/_version.py,sha256=-2KICqAEdPWLo6oH9F7DHgtleuBtdR0ws16EQh2o6wM,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
@@ -7,7 +7,7 @@ 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
- flowtracks/graphics.py,sha256=Pror0OmWXmlZz5yyEY2qKKQM5t_BMtKeYIAw26I0JeQ,13043
10
+ flowtracks/graphics.py,sha256=ulMTpPRGzQanAjna480XLMMQJL92Q4Wdtky8inqnwtE,13909
11
11
  flowtracks/interpolation.py,sha256=njuB-bvWK5M2tc2Ibm6ZWNg6Tm6H-PTn0a63IldlJaA,39414
12
12
  flowtracks/io.py,sha256=sujLgtY8WIymMZugDv2jlQeL9QR_hZn-MaZPPKsAPvA,48366
13
13
  flowtracks/nhist.py,sha256=3xdrfSTSpTojXJcyhwBgagHBmKrm0U_AEsP3BjP9H1o,4089
@@ -25,29 +25,29 @@ flowtracks/stitching.py,sha256=HFsIRdAfqyhmES1OwIFslyWTF9U7kPJ5OKtjBl4YWqA,16895
25
25
  flowtracks/trajectory.py,sha256=uL4-byZ2tycdrAwGoET4AfLHuKaWRnc8VHLO5zv9MOg,11831
26
26
  flowtracks/vortex.py,sha256=4lG3QkvvnWhAHy4tl1pJrBGFLdrlP4pxNdhCZI1VZ4Q,2529
27
27
  flowtracks/wall_shear.py,sha256=k9Q5FEchIO9J_onXPOw4PNJQfmsrSyVVvX4RdW-rQlE,6788
28
- flowtracks/writers.py,sha256=NAVz8H2w-Wtiy__acB9uT_NDSO6RqpEywcxm8tk1peg,9273
28
+ flowtracks/writers.py,sha256=0LnRiuqmyhcw8Ju3v9vCOERymNmxHG7cXKy6r8uLOTo,10358
29
29
  flowtracks/zarr_scene.py,sha256=PKCtiTT1t0Hj74Q572ra5DM3uM8lQK1A6DzzfUxvIzI,10468
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,,
30
+ flowtracks-1.6.2.dev6.data/data/flowtracks-examples/batch_Lagrangian_to_Eulerian.py,sha256=e7mQFqyqvCeAHRKiN1IaxdNJi0e2FU84c7QNrx0L-m0,2296
31
+ flowtracks-1.6.2.dev6.data/data/flowtracks-examples/hdf5_scene_analysis.ipynb,sha256=jn0Z_ZVL1-iXaiKXwyAeb74NbXsBpnocCxCSDh814eU,243097
32
+ flowtracks-1.6.2.dev6.data/data/flowtracks-examples/linking_trajectories.ipynb,sha256=udz0GLDiPv68BYySg4yO1HWzaB9Sdy3YA3IhnIHDeII,8820
33
+ flowtracks-1.6.2.dev6.data/data/flowtracks-examples/marimo_dual_rig_trajectories.py,sha256=dzeK0C-knwq1bPOwo0p1RhWrb0RPp-T31rBaGEptXcc,6737
34
+ flowtracks-1.6.2.dev6.data/data/flowtracks-examples/marimo_flowtracks.py,sha256=7FIJNwBx9aBRmaM5ofmYTXSWEjE0wZqDfs8J47Tmw6U,9440
35
+ flowtracks-1.6.2.dev6.data/data/flowtracks-examples/marimo_hdf5_vs_zarr_scene_analysis.py,sha256=bjXlMsLJTxJ0JkvGcVZbuDOFYZU4OvdabtDUgqb15So,4536
36
+ flowtracks-1.6.2.dev6.data/data/flowtracks-examples/marimo_linking_trajectories_zarr.py,sha256=Ny_WUbiZWo0aKw-u2KGFWrhMv-8BvNgBy0UHIqCobYg,8210
37
+ flowtracks-1.6.2.dev6.data/data/flowtracks-examples/marimo_phase_averaging_demo.py,sha256=vg6j2ayKGl-5uj08bdzzb6pujzJJQ_5bUsG7UuPP7dM,9270
38
+ flowtracks-1.6.2.dev6.data/data/flowtracks-examples/marimo_phase_metrics.py,sha256=kBc2e_b-orDrm3AnuUXCcxsvmfQWyCtE826pFeolMGE,9367
39
+ flowtracks-1.6.2.dev6.data/data/flowtracks-examples/marimo_vtk_writers_preview.py,sha256=Otrhhp-QFf6F94EOs6rWu5xOCpbS16EfWy_iMFp7e_I,14611
40
+ flowtracks-1.6.2.dev6.data/data/flowtracks-examples/marimo_zarr_dashboard.py,sha256=jVIum6hdEelH4ef7vRgsfLhrbmMsuErsJBzxrnEImnw,9268
41
+ flowtracks-1.6.2.dev6.data/data/flowtracks-examples/repeated_interpolation.ipynb,sha256=t9SfoIWRu5XP0SrphWbQy508uzyEibVz61FGjl51fjA,8861
42
+ flowtracks-1.6.2.dev6.data/data/flowtracks-examples/run_pipeline.py,sha256=5fGE2tIP6XjFZ1sEYmqBujuLaXFfRL-rNnbr2p2CDfM,7205
43
+ flowtracks-1.6.2.dev6.data/data/flowtracks-examples/visualize_marimo.py,sha256=jWrg5IWjY-bmSQwQjaO5qTr0t_G48CsqJYpevdQrxeY,13026
44
+ flowtracks-1.6.2.dev6.data/data/flowtracks-examples/visualize_results.py,sha256=SbPg3EoDcuIyo0rUz3E-AnT4sLWDVJFhgC6xVcracW4,7583
45
+ flowtracks-1.6.2.dev6.data/scripts/analyse_fhdf.py,sha256=QH08NdImGukTEGuZEKFxjStcSelXBv-8A-22G6KtXqM,1315
46
+ flowtracks-1.6.2.dev6.dist-info/licenses/LICENSE.txt,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
47
+ flowtracks-1.6.2.dev6.dist-info/licenses/LICENSES/BSD-3-Clause.txt,sha256=XiJR9O5snDB6sAz0bcncOU6msceZgjPRxejWEQGg40Q,1505
48
+ flowtracks-1.6.2.dev6.dist-info/licenses/LICENSES/GPL-3.0-only.txt,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
49
+ flowtracks-1.6.2.dev6.dist-info/METADATA,sha256=jdbbG4k4qcw6lRlEaa1CvQrpWv21S7wDBffoIcyH3Cs,4773
50
+ flowtracks-1.6.2.dev6.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
51
+ flowtracks-1.6.2.dev6.dist-info/entry_points.txt,sha256=U6028E7yQZQiZoXWMl7w4xgZUPwPxAGiAuuMB__c-yQ,60
52
+ flowtracks-1.6.2.dev6.dist-info/top_level.txt,sha256=cR54RNb9y2Wfr_BfuOezmNJOMB4GfIHh1-luXTREnQA,11
53
+ flowtracks-1.6.2.dev6.dist-info/RECORD,,