flowtracks 1.5.2.dev2__tar.gz → 1.6.1.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/.github/workflows/python-package.yml +2 -2
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/.github/workflows/python-publish.yml +25 -5
- {flowtracks-1.5.2.dev2/flowtracks.egg-info → flowtracks-1.6.1.dev1}/PKG-INFO +1 -1
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/_version.py +3 -3
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/an_scene.py +11 -1
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/analysis.py +8 -1
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/io.py +33 -5
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/scene.py +16 -1
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1/flowtracks.egg-info}/PKG-INFO +1 -1
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks.egg-info/SOURCES.txt +1 -0
- flowtracks-1.6.1.dev1/flowtracks.egg-info/entry_points.txt +2 -0
- flowtracks-1.6.1.dev1/flowtracks.egg-info/scm_version.json +8 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/pyproject.toml +3 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/setup.py +4 -5
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_io.py +29 -19
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_scene.py +60 -31
- flowtracks-1.6.1.dev1/tests/test_zarr_scene.py +191 -0
- flowtracks-1.5.2.dev2/flowtracks.egg-info/scm_version.json +0 -8
- flowtracks-1.5.2.dev2/tests/test_zarr_scene.py +0 -208
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/.gitignore +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/CLAUDE.md +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/LICENSE.txt +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/README.md +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/RELEASE.md +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/SPEEDUP_PLAN.md +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/WRITERS_PLAN.md +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/benchmarks/BASELINE.md +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/benchmarks/bench_interp.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/benchmarks/bench_io.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/benchmarks/bench_pairs.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10001 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10002 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10003 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10004 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10005 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10006 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10007 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10008 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10009 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10010 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10011 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10012 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10013 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10014 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10015 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10016 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10017 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10018 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10019 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10020 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10021 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10022 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10023 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10024 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10025 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10026 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10027 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10028 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10029 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10030 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10031 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10032 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10033 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10034 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10035 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10036 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10037 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10038 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10039 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10040 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10041 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10042 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10043 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10044 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10045 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10046 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10047 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10048 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10049 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10050 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10051 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10052 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10053 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10054 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10055 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10056 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10057 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10058 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10059 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10060 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10061 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10062 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10063 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10064 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10065 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10066 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10067 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10068 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10069 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10070 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10071 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10072 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10073 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10074 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10075 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10076 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10077 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10078 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10079 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10080 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10081 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10082 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10083 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10084 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10085 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10086 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10087 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10088 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10089 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10090 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10091 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10092 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10093 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10094 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10095 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10096 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10097 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10098 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10099 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10100 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10101 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10102 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10103 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10104 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10105 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10106 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10107 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10108 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10109 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10110 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10111 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10112 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10113 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10114 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10115 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10116 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10117 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10118 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10119 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10120 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10121 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10122 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10123 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10124 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10125 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10126 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10127 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10128 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10129 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10130 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10131 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10132 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10133 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10134 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10135 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10136 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10137 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10138 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10139 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10140 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10141 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10142 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10143 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10144 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10145 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10146 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10147 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10148 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10149 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10150 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10151 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10152 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10153 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10154 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10155 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10156 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10157 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10158 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10159 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10160 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10161 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10162 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10163 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10164 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10165 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10166 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10167 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10168 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10169 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10170 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10171 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10172 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10173 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10174 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10175 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10176 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10177 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10178 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10179 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10180 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10181 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10182 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10183 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10184 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10185 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10186 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10187 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10188 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10189 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10190 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10191 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10192 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10193 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10194 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10195 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10196 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10197 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10198 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10199 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles/xuap.10200 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/particles.h5 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/readme.txt +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/seq_hdf.cfg +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10001 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10002 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10003 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10004 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10005 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10006 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10007 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10008 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10009 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10010 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10011 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10012 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10013 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10014 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10015 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10016 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10017 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10018 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10019 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10020 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10021 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10022 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10023 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10024 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10025 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10026 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10027 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10028 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10029 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10030 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10031 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10032 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10033 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10034 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10035 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10036 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10037 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10038 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10039 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10040 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10041 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10042 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10043 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10044 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10045 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10046 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10047 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10048 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10049 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10050 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10051 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10052 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10053 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10054 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10055 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10056 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10057 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10058 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10059 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10060 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10061 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10062 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10063 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10064 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10065 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10066 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10067 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10068 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10069 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10070 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10071 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10072 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10073 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10074 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10075 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10076 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10077 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10078 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10079 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10080 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10081 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10082 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10083 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10084 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10085 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10086 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10087 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10088 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10089 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10090 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10091 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10092 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10093 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10094 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10095 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10096 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10097 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10098 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10099 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10100 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10101 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10102 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10103 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10104 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10105 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10106 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10107 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10108 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10109 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10110 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10111 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10112 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10113 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10114 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10115 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10116 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10117 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10118 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10119 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10120 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10121 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10122 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10123 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10124 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10125 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10126 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10127 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10128 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10129 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10130 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10131 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10132 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10133 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10134 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10135 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10136 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10137 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10138 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10139 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10140 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10141 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10142 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10143 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10144 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10145 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10146 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10147 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10148 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10149 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10150 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10151 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10152 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10153 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10154 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10155 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10156 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10157 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10158 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10159 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10160 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10161 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10162 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10163 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10164 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10165 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10166 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10167 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10168 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10169 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10170 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10171 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10172 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10173 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10174 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10175 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10176 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10177 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10178 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10179 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10180 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10181 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10182 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10183 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10184 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10185 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10186 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10187 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10188 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10189 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10190 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10191 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10192 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10193 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10194 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10195 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10196 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10197 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10198 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10199 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers/ptv_is.10200 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/accel/c/0/0 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/accel/c/0/1 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/accel/c/1/0 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/accel/c/1/1 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/accel/c/2/0 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/accel/c/2/1 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/accel/c/3/0 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/accel/c/3/1 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/pos/c/0/0 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/pos/c/0/1 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/pos/c/1/0 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/pos/c/1/1 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/pos/c/2/0 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/pos/c/2/1 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/pos/c/3/0 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/pos/c/3/1 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/time/c/0 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/time/c/1 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/time/c/2 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/time/c/3 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/trajid/c/0 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/trajid/c/1 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/trajid/c/2 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/trajid/c/3 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/vel/c/0/0 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/vel/c/0/1 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/vel/c/1/0 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/vel/c/1/1 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/vel/c/2/0 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/vel/c/2/1 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/vel/c/3/0 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/data/tracers.zarr/trajectories/vel/c/3/1 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/doc/_static/hdf5_scene_analysis.html +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/doc/_static/repeated_interpolation.html +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/doc/an_scene.rst +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/doc/analysis.rst +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/doc/conf.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/doc/datastruct.rst +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/doc/graphics.rst +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/doc/index.rst +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/doc/interpolation.rst +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/doc/io.rst +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/doc/pairs.rst +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/doc/particle.rst +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/doc/repair.rst +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/doc/scene.rst +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/doc/sequence.rst +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/doc/smoothing.rst +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/examples/batch_Lagrangian_to_Eulerian.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/examples/hdf5_scene_analysis.ipynb +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/examples/linking_trajectories.ipynb +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/examples/marimo_dual_rig_trajectories.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/examples/marimo_flowtracks.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/examples/marimo_hdf5_vs_zarr_scene_analysis.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/examples/marimo_linking_trajectories_zarr.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/examples/marimo_phase_averaging_demo.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/examples/marimo_phase_metrics.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/examples/marimo_vtk_writers_preview.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/examples/marimo_zarr_dashboard.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/examples/repeated_interpolation.ipynb +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/examples/run_pipeline.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/examples/visualize_marimo.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/examples/visualize_results.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/__init__.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/combine.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/eulerian.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/flux.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/format_docstrings.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/future_idea_xarray_dask_zarr.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/graphics.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/interpolation.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/nhist.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/pairs.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/particle.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/phase_average.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/pipeline.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/provenance.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/repair.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/sequence.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/smoothing.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/stitching.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/trajectory.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/vortex.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/wall_shear.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/writers.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks/zarr_scene.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks.egg-info/dependency_links.txt +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks.egg-info/requires.txt +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks.egg-info/scm_file_list.json +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/flowtracks.egg-info/top_level.txt +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/future_plan.md +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/peek_zarr.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/plotting_trajectories_using_postptv.ipynb +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/requriments.txt +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/scripts/analyse_fhdf.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/scripts/convert_tracers_to_zarr.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/scripts/run_postptv_analysis.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/scripts/view_trajectories_3d.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/setup.cfg +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/conftest.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/helpers.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_analysis.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_binning_equivalence.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_derived_fields.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_eulerian_grid.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_eulerian_upgrades.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_flux.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_graphics_3d.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_idw_call.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_interp.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_nhist.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_phase_align_synthetic_sets.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_phase_average_xr.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_phase_shift_extraction_and_vtr_export.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_post_analysis_edge_cases.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_post_analysis_xr.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_provenance.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_repair.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_sequence.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_smoothing.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_speedup_equivalence.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_stitching.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_streamlined_zarr_paraview.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_turbulent_statistics.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_vortex_and_wall_shear.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_writers.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_zarr_io.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_zarr_pipeline_end_to_end.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/test_zarr_trajectories.py +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/testing_fodder/interpolant.cfg +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/testing_fodder/ptvis/ptv_is.10001 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/testing_fodder/ptvis/ptv_is.10002 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/testing_fodder/ptvis/ptv_is.10003 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/testing_fodder/ptvis/ptv_is.10004 +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/testing_fodder/sequence.cfg +0 -0
- {flowtracks-1.5.2.dev2 → flowtracks-1.6.1.dev1}/tests/testing_fodder/three_trajects_simple.h5 +0 -0
|
@@ -18,9 +18,9 @@ jobs:
|
|
|
18
18
|
python-version: ["3.11", "3.12", "3.13"]
|
|
19
19
|
|
|
20
20
|
steps:
|
|
21
|
-
- uses: actions/checkout@
|
|
21
|
+
- uses: actions/checkout@v5
|
|
22
22
|
- name: Set up Python ${{ matrix.python-version }}
|
|
23
|
-
uses: actions/setup-python@
|
|
23
|
+
uses: actions/setup-python@v6
|
|
24
24
|
with:
|
|
25
25
|
python-version: ${{ matrix.python-version }}
|
|
26
26
|
- name: Install dependencies
|
|
@@ -26,8 +26,8 @@ jobs:
|
|
|
26
26
|
test:
|
|
27
27
|
runs-on: ubuntu-latest
|
|
28
28
|
steps:
|
|
29
|
-
- uses: actions/checkout@
|
|
30
|
-
- uses: actions/setup-python@
|
|
29
|
+
- uses: actions/checkout@v5
|
|
30
|
+
- uses: actions/setup-python@v6
|
|
31
31
|
with:
|
|
32
32
|
python-version: "3.12"
|
|
33
33
|
- name: Test and lint
|
|
@@ -41,12 +41,14 @@ jobs:
|
|
|
41
41
|
release-build:
|
|
42
42
|
runs-on: ubuntu-latest
|
|
43
43
|
needs: test
|
|
44
|
+
outputs:
|
|
45
|
+
is_dev: ${{ steps.check.outputs.is_dev }}
|
|
44
46
|
steps:
|
|
45
|
-
- uses: actions/checkout@
|
|
47
|
+
- uses: actions/checkout@v5
|
|
46
48
|
with:
|
|
47
49
|
fetch-depth: 0 # setuptools-scm derives the version from tags
|
|
48
50
|
|
|
49
|
-
- uses: actions/setup-python@
|
|
51
|
+
- uses: actions/setup-python@v6
|
|
50
52
|
with:
|
|
51
53
|
python-version: "3.x"
|
|
52
54
|
|
|
@@ -56,16 +58,31 @@ jobs:
|
|
|
56
58
|
python -m build
|
|
57
59
|
|
|
58
60
|
- name: Check the version
|
|
61
|
+
id: check
|
|
59
62
|
run: |
|
|
60
63
|
VERSION=$(ls dist/*.whl | sed -E 's/.*flowtracks-([^-]+)-.*/\1/')
|
|
61
64
|
echo "Built version: $VERSION"
|
|
65
|
+
echo "is_dev=false" >> "$GITHUB_OUTPUT"
|
|
62
66
|
if [ "${{ github.event_name }}" = "release" ]; then
|
|
63
67
|
# a release must build exactly its tag's version (v1.2.2 -> 1.2.2)
|
|
64
68
|
if [ "$VERSION" != "${GITHUB_REF#refs/tags/v}" ]; then
|
|
65
69
|
echo "Error: tag ${GITHUB_REF#refs/tags/} builds $VERSION"; exit 1
|
|
66
70
|
fi
|
|
67
71
|
else
|
|
68
|
-
case "$VERSION" in
|
|
72
|
+
case "$VERSION" in
|
|
73
|
+
*.dev*) echo "is_dev=true" >> "$GITHUB_OUTPUT" ;;
|
|
74
|
+
*)
|
|
75
|
+
# A push build can see a freshly created tag on HEAD (tagging
|
|
76
|
+
# master HEAD for a release races this workflow). That commit
|
|
77
|
+
# is published by the release event, not here: pass the gate
|
|
78
|
+
# but skip PyPI below instead of failing the run.
|
|
79
|
+
if git describe --exact-match HEAD >/dev/null 2>&1; then
|
|
80
|
+
echo "HEAD is tagged ($(git describe --exact-match HEAD)); release event handles publishing"
|
|
81
|
+
else
|
|
82
|
+
echo "Error: $VERSION is not a dev version"; exit 1
|
|
83
|
+
fi
|
|
84
|
+
;;
|
|
85
|
+
esac
|
|
69
86
|
fi
|
|
70
87
|
|
|
71
88
|
- name: Upload distributions
|
|
@@ -75,6 +92,9 @@ jobs:
|
|
|
75
92
|
path: dist/
|
|
76
93
|
|
|
77
94
|
pypi-publish:
|
|
95
|
+
# On push of a tagged commit (tag/release racing this workflow) there is
|
|
96
|
+
# nothing to publish here -- the release event publishes it.
|
|
97
|
+
if: github.event_name == 'release' || needs.release-build.outputs.is_dev == 'true'
|
|
78
98
|
runs-on: ubuntu-latest
|
|
79
99
|
needs:
|
|
80
100
|
- release-build
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flowtracks
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.6.1.dev1
|
|
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: GNU GENERAL PUBLIC LICENSE
|
|
@@ -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.
|
|
22
|
-
__version_tuple__ = version_tuple = (1,
|
|
21
|
+
__version__ = version = '1.6.1.dev1'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 6, 1, 'dev1')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g1e6b0cfe9'
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
|
|
3
3
|
import numpy as np
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
import tables
|
|
7
|
+
except ImportError: # optional legacy dependency; zarr paths do not need it
|
|
8
|
+
tables = None
|
|
5
9
|
|
|
6
10
|
from .scene import gen_query_string, read_dual_scene
|
|
7
11
|
from .trajectory import Trajectory
|
|
@@ -21,6 +25,12 @@ class AnalysedScene(object):
|
|
|
21
25
|
Arguments:
|
|
22
26
|
analysis_file - path to the HDF file containing analysis results.
|
|
23
27
|
"""
|
|
28
|
+
if tables is None:
|
|
29
|
+
raise ImportError(
|
|
30
|
+
"PyTables ('tables') is required for the legacy AnalysedScene. "
|
|
31
|
+
"The project now uses Zarr; install the 'legacy-io' extra "
|
|
32
|
+
"only if you need the old format."
|
|
33
|
+
)
|
|
24
34
|
self._file = tables.open_file(analysis_file, "r")
|
|
25
35
|
self._table = self._file.get_node('/analysis')
|
|
26
36
|
|
|
@@ -14,7 +14,6 @@ fluid velocity around a particle from its surrounding tracers.
|
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
16
|
import numpy as np
|
|
17
|
-
import tables
|
|
18
17
|
|
|
19
18
|
|
|
20
19
|
def companion_indices(trids, companions):
|
|
@@ -132,6 +131,14 @@ def analysis(scene, analysis_file, conf_file, analysers, frame_range=-1):
|
|
|
132
131
|
descr.extend(analyser.descr())
|
|
133
132
|
descr = np.dtype(descr)
|
|
134
133
|
|
|
134
|
+
try:
|
|
135
|
+
import tables
|
|
136
|
+
except ImportError:
|
|
137
|
+
raise ImportError(
|
|
138
|
+
"PyTables ('tables') is required for analysis() HDF5 output. "
|
|
139
|
+
"The project now uses Zarr; install the 'legacy-io' extra only "
|
|
140
|
+
"if you need the old format."
|
|
141
|
+
)
|
|
135
142
|
outfile = tables.open_file(analysis_file, "w", title="Analysis results.")
|
|
136
143
|
table = outfile.create_table('/', 'analysis', descr)
|
|
137
144
|
table.attrs['config'] = conf_file
|
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
"""
|
|
5
5
|
The main entry points for using the module are the :func:`trajectories`
|
|
6
6
|
function (or its counterpart :func:`iter_trajectories`) for reading the data
|
|
7
|
-
for a scene; and either :func:`
|
|
8
|
-
:func:`
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
for a scene; and either :func:`save_zarr_trajectories` /
|
|
8
|
+
:func:`read_zarr_trajectories` for the current Zarr format, or the legacy
|
|
9
|
+
:func:`save_trajectories` (obsolete directory of NPZ files) and
|
|
10
|
+
:func:`save_particles_table` (legacy PyTables HDF5, requires the optional
|
|
11
|
+
``tables`` dependency).
|
|
11
12
|
|
|
12
13
|
The trajectory reader, unless otherwise noted, will try to infer the format
|
|
13
14
|
from the file name (see :func:`infer_format`).
|
|
@@ -24,7 +25,6 @@ from configparser import ConfigParser
|
|
|
24
25
|
from io import StringIO
|
|
25
26
|
|
|
26
27
|
import numpy as np
|
|
27
|
-
import tables
|
|
28
28
|
from scipy import io
|
|
29
29
|
|
|
30
30
|
from .particle import Particle
|
|
@@ -37,6 +37,22 @@ from .trajectory import (
|
|
|
37
37
|
trajectories_in_frame,
|
|
38
38
|
)
|
|
39
39
|
|
|
40
|
+
try:
|
|
41
|
+
import tables
|
|
42
|
+
except ImportError: # optional legacy dependency; zarr paths do not need it
|
|
43
|
+
tables = None
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _require_tables():
|
|
47
|
+
if tables is None:
|
|
48
|
+
raise ImportError(
|
|
49
|
+
"PyTables ('tables') is required for legacy HDF5 I/O "
|
|
50
|
+
"(save_particles_table, save_frames_hdf, trajectories_table, "
|
|
51
|
+
"Scene with .h5 files). The project now uses Zarr "
|
|
52
|
+
"(save_zarr_trajectories, read_zarr_trajectories, ZarrScene); "
|
|
53
|
+
"install the 'legacy-io' extra only if you need the old format."
|
|
54
|
+
)
|
|
55
|
+
|
|
40
56
|
|
|
41
57
|
class FramesIterator(object):
|
|
42
58
|
def __init__(self, fname_tmpl, fmt, skip, first=None, last=None, usecols=None):
|
|
@@ -540,6 +556,7 @@ def trajectories(fname, first=None, last=None, frate=1.0, fmt=None, traj_min_len
|
|
|
540
556
|
traj_min_len=traj_min_len)
|
|
541
557
|
|
|
542
558
|
elif fmt == 'hdf':
|
|
559
|
+
_require_tables()
|
|
543
560
|
scene = Scene(fname, (first, last))
|
|
544
561
|
it = scene.iter_trajectories()
|
|
545
562
|
if iter_allowed:
|
|
@@ -728,6 +745,10 @@ def save_particles_table(filename, trajects, trim=None):
|
|
|
728
745
|
(frame number) and trajid - the last one may be indexed. Note that no extra
|
|
729
746
|
(per-trajectory or meta) data is allowed here, unlike the npz save format.
|
|
730
747
|
|
|
748
|
+
.. deprecated::
|
|
749
|
+
Legacy PyTables/HDF5 format. Prefer
|
|
750
|
+
:func:`save_zarr_trajectories` + :class:`ZarrScene`.
|
|
751
|
+
|
|
731
752
|
Arguments:
|
|
732
753
|
filename - name of output PyTables HDF5 file to create. The 'h5' extension
|
|
733
754
|
is recommended so that infer_format() knows what to do with it.
|
|
@@ -735,6 +756,7 @@ def save_particles_table(filename, trajects, trim=None):
|
|
|
735
756
|
trim - if None, remove this many time points from each end of each
|
|
736
757
|
trajectory before saving.
|
|
737
758
|
"""
|
|
759
|
+
_require_tables()
|
|
738
760
|
table = None
|
|
739
761
|
trim_len = 0 if trim is None else trim * 2
|
|
740
762
|
|
|
@@ -794,6 +816,7 @@ def save_frames_hdf(filename, frames):
|
|
|
794
816
|
is recommended so that ``infer_format()`` knows what to do with it.
|
|
795
817
|
frames - an iterable sequence of ParticleSnapshot objects to save.
|
|
796
818
|
"""
|
|
819
|
+
_require_tables()
|
|
797
820
|
table = None
|
|
798
821
|
outfile = tables.open_file(filename, mode='w')
|
|
799
822
|
min_pos = np.full(3, np.inf)
|
|
@@ -862,6 +885,10 @@ def trajectories_table(fname, first=None, last=None):
|
|
|
862
885
|
Reads trajectories from a PyTables HDF5 file, as saved by
|
|
863
886
|
save_particles_table().
|
|
864
887
|
|
|
888
|
+
.. deprecated::
|
|
889
|
+
Legacy PyTables/HDF5 format. Prefer
|
|
890
|
+
:func:`read_zarr_trajectories` + :class:`ZarrScene`.
|
|
891
|
+
|
|
865
892
|
Arguments:
|
|
866
893
|
fname - path to file to read.
|
|
867
894
|
first, last - inclusive range of frames to read.
|
|
@@ -869,6 +896,7 @@ def trajectories_table(fname, first=None, last=None):
|
|
|
869
896
|
Returns:
|
|
870
897
|
trajects - a list of Trajectory objects, each trimmed to the frame range.
|
|
871
898
|
"""
|
|
899
|
+
_require_tables()
|
|
872
900
|
outfile = tables.open_file(fname, mode='r')
|
|
873
901
|
table = outfile.get_node('/particles')
|
|
874
902
|
|
|
@@ -19,7 +19,11 @@ import itertools as it
|
|
|
19
19
|
from configparser import ConfigParser
|
|
20
20
|
|
|
21
21
|
import numpy as np
|
|
22
|
-
|
|
22
|
+
|
|
23
|
+
try:
|
|
24
|
+
import tables
|
|
25
|
+
except ImportError: # optional legacy dependency; ZarrScene needs no tables
|
|
26
|
+
tables = None
|
|
23
27
|
|
|
24
28
|
from .particle import Particle
|
|
25
29
|
from .trajectory import ParticleSnapshot, Trajectory
|
|
@@ -73,6 +77,11 @@ class Scene(object):
|
|
|
73
77
|
This class is the programmer's interface to an HDF files containing
|
|
74
78
|
particle trajectory data. It manages access by frames or trajectories,
|
|
75
79
|
as well as by segments.
|
|
80
|
+
|
|
81
|
+
.. deprecated::
|
|
82
|
+
Legacy PyTables/HDF5 backend. Prefer
|
|
83
|
+
:class:`flowtracks.zarr_scene.ZarrScene` (duck-typed compatible)
|
|
84
|
+
and open stores via :func:`open_scene`.
|
|
76
85
|
"""
|
|
77
86
|
def __init__(self, file_name, frame_range=None):
|
|
78
87
|
"""
|
|
@@ -81,6 +90,12 @@ class Scene(object):
|
|
|
81
90
|
frame_range - use only frames in this range for iterating the data.
|
|
82
91
|
the default is None, meaning to use all present frams.
|
|
83
92
|
"""
|
|
93
|
+
if tables is None:
|
|
94
|
+
raise ImportError(
|
|
95
|
+
"PyTables ('tables') is required for the legacy HDF5 Scene. "
|
|
96
|
+
"The project now uses Zarr (ZarrScene); install the "
|
|
97
|
+
"'legacy-io' extra only if you need the old format."
|
|
98
|
+
)
|
|
84
99
|
self._file = tables.open_file(file_name)
|
|
85
100
|
self._table = self._file.get_node('/particles')
|
|
86
101
|
try:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flowtracks
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.6.1.dev1
|
|
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: GNU GENERAL PUBLIC LICENSE
|
|
@@ -514,6 +514,7 @@ flowtracks/zarr_scene.py
|
|
|
514
514
|
flowtracks.egg-info/PKG-INFO
|
|
515
515
|
flowtracks.egg-info/SOURCES.txt
|
|
516
516
|
flowtracks.egg-info/dependency_links.txt
|
|
517
|
+
flowtracks.egg-info/entry_points.txt
|
|
517
518
|
flowtracks.egg-info/requires.txt
|
|
518
519
|
flowtracks.egg-info/scm_file_list.json
|
|
519
520
|
flowtracks.egg-info/scm_version.json
|
|
@@ -30,6 +30,9 @@ classifiers = [
|
|
|
30
30
|
"Topic :: Scientific/Engineering"
|
|
31
31
|
]
|
|
32
32
|
|
|
33
|
+
[project.scripts]
|
|
34
|
+
postptv-combine = "flowtracks.combine:main"
|
|
35
|
+
|
|
33
36
|
[tool.setuptools_scm]
|
|
34
37
|
# vX.Y.Z tag -> X.Y.Z; N commits after it -> X.Y.(Z+1).devN. No local
|
|
35
38
|
# "+g<sha>" suffix: PyPI rejects local versions, and every master push is
|
|
@@ -17,9 +17,8 @@ setup(
|
|
|
17
17
|
packages=find_packages(),
|
|
18
18
|
data_files=[('flowtracks-examples', [f for f in glob('examples/*') if os.path.isfile(f)])],
|
|
19
19
|
scripts=['scripts/analyse_fhdf.py'],
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
},
|
|
20
|
+
# NOTE: console_scripts live in pyproject.toml [project.scripts], which
|
|
21
|
+
# setuptools treats as authoritative; defining entry_points here as well
|
|
22
|
+
# would be silently ignored (setuptools warns "`scripts` defined outside
|
|
23
|
+
# of `pyproject.toml` is ignored").
|
|
25
24
|
)
|
|
@@ -68,23 +68,33 @@ class TestPtvis(unittest.TestCase):
|
|
|
68
68
|
trjs = io.trajectories_ptvis(inName, xuap = True, traj_min_len = None)
|
|
69
69
|
self.assertEqual(len(trjs), 332)
|
|
70
70
|
|
|
71
|
-
def
|
|
72
|
-
"""
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
71
|
+
def test_trajectories_zarr(self):
|
|
72
|
+
"""Zarr round-trip works"""
|
|
73
|
+
import tempfile
|
|
74
|
+
|
|
75
|
+
with tempfile.TemporaryDirectory() as tmpdir:
|
|
76
|
+
zarr_path = os.path.join(tmpdir, 'table.zarr')
|
|
77
|
+
io.save_zarr_trajectories(self.correct, zarr_path)
|
|
78
|
+
loaded = io.read_zarr_trajectories(zarr_path)
|
|
79
|
+
self.compare_trajectories(
|
|
80
|
+
sorted(loaded, key=lambda t: t.trajid()),
|
|
81
|
+
sorted(self.correct, key=lambda t: t.trajid()),
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
def test_trim_zarr(self):
|
|
85
|
+
"""Zarr trajectory trimming via frame-range read"""
|
|
86
|
+
import tempfile
|
|
87
|
+
|
|
88
|
+
correct = io.trajectories_ptvis(self.tmpl, self.first + 1, self.last - 1)
|
|
89
|
+
|
|
90
|
+
with tempfile.TemporaryDirectory() as tmpdir:
|
|
91
|
+
zarr_path = os.path.join(tmpdir, 'table.zarr')
|
|
92
|
+
io.save_zarr_trajectories(self.correct, zarr_path)
|
|
93
|
+
|
|
94
|
+
loaded = io.read_zarr_trajectories(
|
|
95
|
+
zarr_path, first=self.first + 1, last=self.last - 1)
|
|
96
|
+
self.compare_trajectories(
|
|
97
|
+
sorted(loaded, key=lambda t: t.trajid()),
|
|
98
|
+
sorted(correct, key=lambda t: t.trajid()),
|
|
99
|
+
)
|
|
90
100
|
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
"""
|
|
2
2
|
Test the input/output routines in flowtracks: read/write files and verify
|
|
3
|
-
correct results.
|
|
3
|
+
correct results (Zarr backend).
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
+
import tempfile
|
|
6
7
|
import unittest
|
|
7
8
|
|
|
8
9
|
import numpy as np
|
|
9
10
|
import numpy.testing as nptest
|
|
10
11
|
|
|
11
|
-
from flowtracks.
|
|
12
|
+
from flowtracks.io import save_zarr_trajectories
|
|
13
|
+
from flowtracks.scene import gen_query_string
|
|
12
14
|
from flowtracks.trajectory import Trajectory, take_snapshot
|
|
15
|
+
from flowtracks.zarr_scene import ZarrScene
|
|
13
16
|
|
|
14
17
|
|
|
15
18
|
class TestScene(unittest.TestCase):
|
|
@@ -18,9 +21,6 @@ class TestScene(unittest.TestCase):
|
|
|
18
21
|
There are 3 trajectories of 4 frames each, each going along a separate
|
|
19
22
|
axis.
|
|
20
23
|
"""
|
|
21
|
-
tmpl = "tests/testing_fodder/three_trajects_simple.h5"
|
|
22
|
-
self.scene = Scene(tmpl)
|
|
23
|
-
|
|
24
24
|
# ptv_is files are in [mm], [mm/s], etc.
|
|
25
25
|
correct_pos = np.r_[0.1, 0.2, 0.3, 0.5] / 1000.
|
|
26
26
|
correct_vel = np.r_[0.1, 0.1, 0.2, 0.] / 1000.
|
|
@@ -30,28 +30,38 @@ class TestScene(unittest.TestCase):
|
|
|
30
30
|
self.correct = []
|
|
31
31
|
for axis in [0, 1, 2]:
|
|
32
32
|
pos = np.zeros((4, 3))
|
|
33
|
-
pos[:,axis] = correct_pos
|
|
33
|
+
pos[:, axis] = correct_pos
|
|
34
34
|
|
|
35
35
|
vel = np.zeros((4, 3))
|
|
36
|
-
vel[:,axis] = correct_vel
|
|
36
|
+
vel[:, axis] = correct_vel
|
|
37
37
|
|
|
38
38
|
accel = np.zeros((4, 3))
|
|
39
|
-
accel[:,axis] = correct_accel
|
|
39
|
+
accel[:, axis] = correct_accel
|
|
40
40
|
|
|
41
41
|
self.correct.append(Trajectory(pos, vel, t, len(self.correct),
|
|
42
42
|
accel=accel))
|
|
43
43
|
|
|
44
|
+
self._tmpdir = tempfile.TemporaryDirectory()
|
|
45
|
+
self._zarr_path = self._tmpdir.name + "/three_trajects_simple.zarr"
|
|
46
|
+
save_zarr_trajectories(self.correct, self._zarr_path)
|
|
47
|
+
self.scene = ZarrScene(self._zarr_path)
|
|
48
|
+
|
|
49
|
+
def tearDown(self):
|
|
50
|
+
self._tmpdir.cleanup()
|
|
51
|
+
|
|
44
52
|
def test_keys(self):
|
|
45
53
|
"""Reading known available keys with the needed exclusions"""
|
|
46
|
-
|
|
47
|
-
self.assertEqual(list(self.scene.keys()), correct_keys)
|
|
54
|
+
self.assertEqual(set(self.scene.keys()), {'velocity', 'pos', 'accel'})
|
|
48
55
|
|
|
49
56
|
def test_iter_trajectories(self):
|
|
50
57
|
"""Iterating trajectories and getting correct Trajectory objects"""
|
|
51
58
|
trjs = [tr for tr in self.scene.iter_trajectories()]
|
|
52
59
|
self.assertEqual(len(trjs), len(self.correct))
|
|
53
60
|
|
|
54
|
-
for trj, correct in zip(
|
|
61
|
+
for trj, correct in zip(
|
|
62
|
+
sorted(trjs, key=lambda t: t.trajid()),
|
|
63
|
+
sorted(self.correct, key=lambda t: t.trajid()),
|
|
64
|
+
):
|
|
55
65
|
nptest.assert_array_almost_equal(trj.pos(), correct.pos())
|
|
56
66
|
nptest.assert_array_almost_equal(trj.velocity(), correct.velocity())
|
|
57
67
|
nptest.assert_array_almost_equal(trj.accel(), correct.accel())
|
|
@@ -64,7 +74,10 @@ class TestScene(unittest.TestCase):
|
|
|
64
74
|
trjs = [tr for tr in self.scene.iter_trajectories()]
|
|
65
75
|
self.assertEqual(len(trjs), len(self.correct))
|
|
66
76
|
|
|
67
|
-
for trj, correct in zip(
|
|
77
|
+
for trj, correct in zip(
|
|
78
|
+
sorted(trjs, key=lambda t: t.trajid()),
|
|
79
|
+
sorted(self.correct, key=lambda t: t.trajid()),
|
|
80
|
+
):
|
|
68
81
|
nptest.assert_array_almost_equal(trj.pos(), correct.pos()[1:-1])
|
|
69
82
|
nptest.assert_array_almost_equal(trj.velocity(), correct.velocity()[1:-1])
|
|
70
83
|
nptest.assert_array_almost_equal(trj.accel(), correct.accel()[1:-1])
|
|
@@ -72,49 +85,65 @@ class TestScene(unittest.TestCase):
|
|
|
72
85
|
self.assertEqual(trj.trajid(), correct.trajid())
|
|
73
86
|
|
|
74
87
|
def test_iter_frames(self):
|
|
75
|
-
"""Iterating the
|
|
88
|
+
"""Iterating the store by frames, getting correct ParticleSnapshot objects"""
|
|
76
89
|
schm = self.correct[0].schema()
|
|
77
|
-
correct_frames = [take_snapshot(self.correct, frm, schm)
|
|
90
|
+
correct_frames = [take_snapshot(self.correct, frm, schm)
|
|
78
91
|
for frm in range(10001, 10005)]
|
|
79
92
|
|
|
80
93
|
frames = [frm for frm in self.scene.iter_frames()]
|
|
81
94
|
self.assertEqual(len(frames), len(correct_frames))
|
|
82
95
|
|
|
83
96
|
for frm, correct in zip(frames, correct_frames):
|
|
84
|
-
nptest.assert_array_almost_equal(
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
nptest.assert_array_almost_equal(
|
|
97
|
+
nptest.assert_array_almost_equal(
|
|
98
|
+
frm.pos()[np.argsort(frm.trajid())],
|
|
99
|
+
correct.pos()[np.argsort(correct.trajid())])
|
|
100
|
+
nptest.assert_array_almost_equal(
|
|
101
|
+
frm.velocity()[np.argsort(frm.trajid())],
|
|
102
|
+
correct.velocity()[np.argsort(correct.trajid())])
|
|
103
|
+
nptest.assert_array_almost_equal(
|
|
104
|
+
frm.accel()[np.argsort(frm.trajid())],
|
|
105
|
+
correct.accel()[np.argsort(correct.trajid())])
|
|
106
|
+
nptest.assert_array_equal(
|
|
107
|
+
np.sort(frm.trajid()), np.sort(correct.trajid()))
|
|
88
108
|
self.assertEqual(frm.time(), correct.time())
|
|
89
109
|
|
|
90
110
|
def test_iter_frames_subrange(self):
|
|
91
111
|
"""Iterating frames subrange"""
|
|
92
|
-
print(self.scene.__dict__)
|
|
93
112
|
self.scene.set_frame_range((10002, 10004))
|
|
94
|
-
print(self.scene.__dict__)
|
|
95
113
|
|
|
96
114
|
schm = self.correct[0].schema()
|
|
97
|
-
correct_frames = [take_snapshot(self.correct, frm, schm)
|
|
115
|
+
correct_frames = [take_snapshot(self.correct, frm, schm)
|
|
98
116
|
for frm in range(10002, 10004)]
|
|
99
117
|
|
|
100
118
|
frames = [frm for frm in self.scene.iter_frames()]
|
|
101
119
|
self.assertEqual(len(frames), len(correct_frames))
|
|
102
120
|
|
|
103
121
|
for frm, correct in zip(frames, correct_frames):
|
|
104
|
-
nptest.assert_array_almost_equal(
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
nptest.assert_array_almost_equal(
|
|
122
|
+
nptest.assert_array_almost_equal(
|
|
123
|
+
frm.pos()[np.argsort(frm.trajid())],
|
|
124
|
+
correct.pos()[np.argsort(correct.trajid())])
|
|
125
|
+
nptest.assert_array_almost_equal(
|
|
126
|
+
frm.velocity()[np.argsort(frm.trajid())],
|
|
127
|
+
correct.velocity()[np.argsort(correct.trajid())])
|
|
128
|
+
nptest.assert_array_almost_equal(
|
|
129
|
+
frm.accel()[np.argsort(frm.trajid())],
|
|
130
|
+
correct.accel()[np.argsort(correct.trajid())])
|
|
131
|
+
nptest.assert_array_equal(
|
|
132
|
+
np.sort(frm.trajid()), np.sort(correct.trajid()))
|
|
108
133
|
self.assertEqual(frm.time(), correct.time())
|
|
109
134
|
|
|
110
135
|
def test_collect(self):
|
|
111
|
-
"""Slicing the
|
|
136
|
+
"""Slicing the store by keys or expressions"""
|
|
112
137
|
v = self.scene.collect(['velocity'])[0]
|
|
113
|
-
self.assertEqual(v.shape, (12,3))
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
138
|
+
self.assertEqual(v.shape, (12, 3))
|
|
139
|
+
|
|
140
|
+
by_id = {}
|
|
141
|
+
for trj in self.scene.iter_trajectories():
|
|
142
|
+
by_id[trj.trajid()] = trj.velocity()
|
|
143
|
+
v_stacked = np.stack(
|
|
144
|
+
[by_id[i] for i in sorted(by_id)], axis=0)
|
|
145
|
+
nptest.assert_array_almost_equal(v_stacked[0, :, 0], v_stacked[1, :, 1])
|
|
146
|
+
nptest.assert_array_almost_equal(v_stacked[0, :, 0], v_stacked[2, :, 2])
|
|
118
147
|
|
|
119
148
|
class TestUtils(unittest.TestCase):
|
|
120
149
|
def test_query_string(self):
|