microstructure-tpw 0.3.0__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 (119) hide show
  1. microstructure_tpw-0.3.0.dist-info/METADATA +234 -0
  2. microstructure_tpw-0.3.0.dist-info/RECORD +119 -0
  3. microstructure_tpw-0.3.0.dist-info/WHEEL +5 -0
  4. microstructure_tpw-0.3.0.dist-info/entry_points.txt +7 -0
  5. microstructure_tpw-0.3.0.dist-info/licenses/LICENSE +674 -0
  6. microstructure_tpw-0.3.0.dist-info/top_level.txt +1 -0
  7. odas_tpw/__init__.py +18 -0
  8. odas_tpw/chi/__init__.py +48 -0
  9. odas_tpw/chi/batchelor.py +189 -0
  10. odas_tpw/chi/chi.py +857 -0
  11. odas_tpw/chi/fp07.py +649 -0
  12. odas_tpw/chi/l2_chi.py +153 -0
  13. odas_tpw/chi/l3_chi.py +388 -0
  14. odas_tpw/chi/l4_chi.py +391 -0
  15. odas_tpw/config_base.py +423 -0
  16. odas_tpw/perturb/__init__.py +18 -0
  17. odas_tpw/perturb/adcp.py +274 -0
  18. odas_tpw/perturb/atomic_io.py +47 -0
  19. odas_tpw/perturb/binning.py +761 -0
  20. odas_tpw/perturb/cli.py +591 -0
  21. odas_tpw/perturb/combo.py +346 -0
  22. odas_tpw/perturb/config.py +1046 -0
  23. odas_tpw/perturb/ctd.py +424 -0
  24. odas_tpw/perturb/diag/__init__.py +12 -0
  25. odas_tpw/perturb/diag/_common.py +140 -0
  26. odas_tpw/perturb/diag/chi.py +42 -0
  27. odas_tpw/perturb/diag/cli.py +67 -0
  28. odas_tpw/perturb/diag/data.py +662 -0
  29. odas_tpw/perturb/diag/epsilon.py +45 -0
  30. odas_tpw/perturb/diag/inspector.py +342 -0
  31. odas_tpw/perturb/diag/mixing.py +94 -0
  32. odas_tpw/perturb/diag/render.py +543 -0
  33. odas_tpw/perturb/discover.py +40 -0
  34. odas_tpw/perturb/fp07_cal.py +354 -0
  35. odas_tpw/perturb/gps.py +458 -0
  36. odas_tpw/perturb/hotel.py +572 -0
  37. odas_tpw/perturb/logging_setup.py +181 -0
  38. odas_tpw/perturb/merge.py +320 -0
  39. odas_tpw/perturb/mk_sections.py +310 -0
  40. odas_tpw/perturb/netcdf_schema.py +520 -0
  41. odas_tpw/perturb/pipeline.py +2654 -0
  42. odas_tpw/perturb/plot/__init__.py +15 -0
  43. odas_tpw/perturb/plot/cli.py +107 -0
  44. odas_tpw/perturb/plot/diagnostics.py +195 -0
  45. odas_tpw/perturb/plot/eps_chi.py +524 -0
  46. odas_tpw/perturb/plot/figure.py +679 -0
  47. odas_tpw/perturb/plot/gamma_scaling.py +1097 -0
  48. odas_tpw/perturb/plot/grid.py +112 -0
  49. odas_tpw/perturb/plot/layout.py +361 -0
  50. odas_tpw/perturb/plot/overview.py +547 -0
  51. odas_tpw/perturb/plot/presets/eps-chi.yaml +16 -0
  52. odas_tpw/perturb/plot/presets/profiles.yaml +32 -0
  53. odas_tpw/perturb/plot/presets/scalar.yaml +21 -0
  54. odas_tpw/perturb/plot/profiles.py +652 -0
  55. odas_tpw/perturb/plot/scalar.py +391 -0
  56. odas_tpw/perturb/plot/sections.py +506 -0
  57. odas_tpw/perturb/plot/xaxis.py +396 -0
  58. odas_tpw/perturb/qc_gate.py +177 -0
  59. odas_tpw/perturb/qc_rules.py +373 -0
  60. odas_tpw/perturb/resolve.py +306 -0
  61. odas_tpw/perturb/seawater.py +76 -0
  62. odas_tpw/perturb/speed.py +14 -0
  63. odas_tpw/perturb/trim.py +313 -0
  64. odas_tpw/processing/__init__.py +62 -0
  65. odas_tpw/processing/bottom.py +215 -0
  66. odas_tpw/processing/chi_combine.py +300 -0
  67. odas_tpw/processing/ct_align.py +172 -0
  68. odas_tpw/processing/epsilon_combine.py +210 -0
  69. odas_tpw/processing/mixing.py +630 -0
  70. odas_tpw/processing/thorpe.py +458 -0
  71. odas_tpw/processing/top_trim.py +274 -0
  72. odas_tpw/pyturb/__init__.py +3 -0
  73. odas_tpw/pyturb/__main__.py +5 -0
  74. odas_tpw/pyturb/_compat.py +204 -0
  75. odas_tpw/pyturb/_profind.py +124 -0
  76. odas_tpw/pyturb/bin.py +113 -0
  77. odas_tpw/pyturb/cli.py +175 -0
  78. odas_tpw/pyturb/eps.py +353 -0
  79. odas_tpw/pyturb/merge.py +101 -0
  80. odas_tpw/pyturb/p2nc.py +76 -0
  81. odas_tpw/rsi/__init__.py +31 -0
  82. odas_tpw/rsi/adapter.py +314 -0
  83. odas_tpw/rsi/bench.py +904 -0
  84. odas_tpw/rsi/binning.py +193 -0
  85. odas_tpw/rsi/channels.py +376 -0
  86. odas_tpw/rsi/chi_io.py +980 -0
  87. odas_tpw/rsi/cli.py +1411 -0
  88. odas_tpw/rsi/combine.py +120 -0
  89. odas_tpw/rsi/config.py +126 -0
  90. odas_tpw/rsi/config_patch.py +790 -0
  91. odas_tpw/rsi/convert.py +651 -0
  92. odas_tpw/rsi/deconvolve.py +119 -0
  93. odas_tpw/rsi/diss_look.py +343 -0
  94. odas_tpw/rsi/dissipation.py +669 -0
  95. odas_tpw/rsi/helpers.py +527 -0
  96. odas_tpw/rsi/mixing_look.py +509 -0
  97. odas_tpw/rsi/p_file.py +771 -0
  98. odas_tpw/rsi/pipeline.py +924 -0
  99. odas_tpw/rsi/profile.py +624 -0
  100. odas_tpw/rsi/quick_look.py +758 -0
  101. odas_tpw/rsi/sensor_inventory.py +684 -0
  102. odas_tpw/rsi/shear_noise.py +128 -0
  103. odas_tpw/rsi/speed.py +221 -0
  104. odas_tpw/rsi/vehicle.py +74 -0
  105. odas_tpw/rsi/viewer_base.py +1071 -0
  106. odas_tpw/rsi/window.py +459 -0
  107. odas_tpw/scor160/__init__.py +36 -0
  108. odas_tpw/scor160/cli.py +242 -0
  109. odas_tpw/scor160/compare.py +484 -0
  110. odas_tpw/scor160/despike.py +227 -0
  111. odas_tpw/scor160/goodman.py +288 -0
  112. odas_tpw/scor160/io.py +690 -0
  113. odas_tpw/scor160/l2.py +311 -0
  114. odas_tpw/scor160/l3.py +279 -0
  115. odas_tpw/scor160/l4.py +850 -0
  116. odas_tpw/scor160/nasmyth.py +208 -0
  117. odas_tpw/scor160/ocean.py +287 -0
  118. odas_tpw/scor160/profile.py +231 -0
  119. odas_tpw/scor160/spectral.py +482 -0
@@ -0,0 +1,234 @@
1
+ Metadata-Version: 2.4
2
+ Name: microstructure-tpw
3
+ Version: 0.3.0
4
+ Summary: Ocean microstructure turbulence processing: TKE dissipation and chi from Rockland Scientific instruments
5
+ Author-email: Pat Welch <pat@mousebrains.com>
6
+ License-Expression: GPL-3.0-or-later
7
+ Project-URL: Homepage, https://github.com/mousebrains/turbulence
8
+ Project-URL: Repository, https://github.com/mousebrains/turbulence
9
+ Project-URL: Documentation, https://github.com/mousebrains/turbulence/tree/main/docs
10
+ Project-URL: Changelog, https://github.com/mousebrains/turbulence/blob/main/CHANGELOG.md
11
+ Project-URL: Issues, https://github.com/mousebrains/turbulence/issues
12
+ Keywords: oceanography,turbulence,microprofiler,rockland
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: Topic :: Scientific/Engineering :: Physics
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
21
+ Requires-Python: >=3.12
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Requires-Dist: numpy<3,>=2.0
25
+ Requires-Dist: netCDF4<2,>=1.6
26
+ Requires-Dist: scipy<2,>=1.12
27
+ Requires-Dist: xarray>=2024.1
28
+ Requires-Dist: gsw<4,>=3.6
29
+ Requires-Dist: ruamel.yaml>=0.18
30
+ Requires-Dist: matplotlib<4,>=3.8
31
+ Requires-Dist: cmocean<5,>=3.0
32
+ Provides-Extra: dev
33
+ Requires-Dist: pytest; extra == "dev"
34
+ Requires-Dist: pytest-cov; extra == "dev"
35
+ Requires-Dist: pytest-xdist; extra == "dev"
36
+ Requires-Dist: ruff; extra == "dev"
37
+ Requires-Dist: mypy; extra == "dev"
38
+ Requires-Dist: pre-commit; extra == "dev"
39
+ Dynamic: license-file
40
+
41
+ # microstructure-tpw
42
+
43
+ [![CI](https://github.com/mousebrains/turbulence/actions/workflows/ci.yml/badge.svg)](https://github.com/mousebrains/turbulence/actions/workflows/ci.yml)
44
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12%2B-blue.svg)](https://www.python.org/downloads/)
45
+ [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
46
+ [![codecov](https://codecov.io/gh/mousebrains/turbulence/graph/badge.svg?token=RwbKxeE7rA)](https://codecov.io/gh/mousebrains/turbulence)
47
+ [![Code style: ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff)
48
+ [![type checked: mypy](https://img.shields.io/badge/type%20checked-mypy-blue.svg)](https://mypy-lang.org/)
49
+
50
+ Python tools for reading Rockland Scientific microprofiler data and computing turbulent dissipation rates from VMP (Vertical Microstructure Profiler) and MicroRider instruments.
51
+
52
+ ## Overview
53
+
54
+ `microstructure-tpw` provides a complete processing pipeline for ocean turbulence measurements from Rockland Scientific instruments equipped with shear probes and fast thermistors (FP07). The package reads proprietary `.p` binary data files, converts channels to physical units, detects profiles, and computes both the rate of dissipation of turbulent kinetic energy (epsilon) and the rate of dissipation of thermal variance (chi), following the methods described in the Rockland Scientific ODAS MATLAB Library and associated Technical Notes.
55
+
56
+ - **Epsilon (TKE dissipation rate)** from shear probe spectra ([detailed mathematics](docs/epsilon_mathematics.md)), including Goodman coherent noise removal, Nasmyth spectrum fitting, and Macoun & Lueck wavenumber correction.
57
+
58
+ - **Chi (thermal variance dissipation rate)** from FP07 thermistor spectra ([detailed mathematics](docs/chi_mathematics.md)), including Batchelor/Kraichnan spectrum models, FP07 transfer function correction, and spectral fitting (iterative Peterson & Fer 2014, the default, or MLE).
59
+
60
+ The package is organized into six subpackages under `odas_tpw`:
61
+
62
+ - **rsi** — Rockland Scientific instrument I/O, NetCDF conversion, profiles, epsilon/chi orchestration
63
+ - **chi** — Chi (thermal variance dissipation) calculation
64
+ - **scor160** — ATOMIX shear-probe benchmark processing and shared physics modules
65
+ - **perturb** — Full campaign processing pipeline (trim, merge, calibrate, compute, bin)
66
+ - **processing** — Instrument-agnostic profile processing (top trim, bottom-crash, CT alignment, multi-probe epsilon combining)
67
+ - **pyturb** — Third-party code ([oceancascades/pyturb](https://github.com/oceancascades/pyturb)) hosted in-repo; maintained upstream, not refactored here
68
+
69
+ ## Installation
70
+
71
+ ```bash
72
+ pip install -e ".[dev]" # editable install with dev dependencies
73
+ pip install . # standard install
74
+ ```
75
+
76
+ See [docs/installation.md](docs/installation.md) for more options.
77
+
78
+ ## Quick Start
79
+
80
+ Several CLIs ship with the package (`rsi-tpw`, `perturb`, `perturb-plot`, `perturb-diag`, `scor160-tpw`, `pyturb-cli`); the two primary ones, for different workflows:
81
+
82
+ - **`rsi-tpw`** — single-file or short batch processing on the command line.
83
+ - **`perturb`** — full campaign pipeline driven by a YAML config file
84
+ (trim → merge → profiles → epsilon → chi → bin → combo), with parallel
85
+ workers and stage-aware logging. Use this for cruise-scale runs.
86
+
87
+ The two CLIs use different spectral defaults (`rsi-tpw`: `fft_length=1024`
88
+ with a 4096-sample dissipation window; `perturb`: duration-based
89
+ `fft_sec=1.0` — one second, resolved per instrument sampling rate,
90
+ = 512 samples on a 512-Hz VMP-250 — for both epsilon and chi), so their
91
+ outputs differ in vertical resolution and noise behavior.
92
+
93
+ ### `rsi-tpw` (single files / short batches)
94
+
95
+ ```bash
96
+ # Full pipeline: .p files → epsilon → chi
97
+ rsi-tpw pipeline VMP/*.p -o results/
98
+
99
+ # Or run individual stages
100
+ rsi-tpw eps VMP/*.p -o epsilon/ # writes into epsilon/eps_00/
101
+ rsi-tpw chi VMP/*.p --epsilon-dir epsilon/ -o chi/ # finds eps_00/ automatically
102
+
103
+ # Pre-deployment bench test (dummy probes, instrument at rest): raw-count
104
+ # figures + spectra + an auto-evaluated Rockland checklist (see docs/rsi-tpw/bench.md)
105
+ rsi-tpw bench VMP/*.p -o bench/
106
+ ```
107
+
108
+ > **Note:** `eps` writes into a hash-tracked subdirectory (`epsilon/eps_00/`,
109
+ > see [output directories](docs/rsi-tpw/output_directories.md)). The chi
110
+ > command searches the given `--epsilon-dir` and its `eps_*` subdirectories
111
+ > (most recently modified first), and matches both single-profile
112
+ > (`{stem}_eps.nc`) and per-profile (`{stem}_prof001_eps.nc`, ...) file
113
+ > names, concatenating the latter along time. Only when no matching epsilon
114
+ > files exist anywhere does chi fall back to Method 2 for that file, with a
115
+ > console warning.
116
+
117
+ ```python
118
+ from odas_tpw.rsi.pipeline import run_pipeline
119
+ from pathlib import Path
120
+
121
+ # Full pipeline: .p → profiles → epsilon → chi → binning → combine
122
+ run_pipeline([Path("VMP/file.p")], Path("results/"))
123
+
124
+ # Or use the modular API
125
+ from odas_tpw.rsi.dissipation import compute_diss_file
126
+ from odas_tpw.rsi.chi_io import compute_chi_file
127
+
128
+ compute_diss_file("VMP/file.p", "epsilon/")
129
+ compute_chi_file("VMP/file.p", "chi/")
130
+ ```
131
+
132
+ > **Note:** `get_diss()` and `get_chi()` still work for backward compatibility
133
+ > but are deprecated in favor of `run_pipeline()` or the modular
134
+ > `compute_diss_file()` / `compute_chi_file()` functions.
135
+
136
+ ### `perturb` (campaign-scale batch pipeline)
137
+
138
+ ```bash
139
+ # Write a template config you can edit (cruise paths, GPS file,
140
+ # instrument-specific overrides, parallelism, etc.).
141
+ perturb init my-cruise.yaml
142
+
143
+ # Run the full pipeline — outputs land in <output_root>/{profiles_NN,
144
+ # diss_NN, chi_NN, ctd_NN, *_binned_NN, combo}, with a per-run log under
145
+ # <output_root>/logs/.
146
+ perturb run -c my-cruise.yaml
147
+
148
+ # Or run individual stages against the same config:
149
+ perturb trim -c my-cruise.yaml
150
+ perturb profiles -c my-cruise.yaml
151
+ perturb diss -c my-cruise.yaml
152
+ perturb chi -c my-cruise.yaml
153
+ perturb bin -c my-cruise.yaml
154
+ perturb combo -c my-cruise.yaml
155
+ ```
156
+
157
+ See [docs/perturb/pipeline.md](docs/perturb/pipeline.md) for the full stage list and [docs/perturb/configuration.md](docs/perturb/configuration.md) for the config schema.
158
+
159
+ ## Documentation
160
+
161
+ ### rsi-tpw (science library)
162
+
163
+ | Document | Description |
164
+ |----------|-------------|
165
+ | [CLI Reference](docs/rsi-tpw/cli.md) | All `rsi-tpw` subcommands and flags |
166
+ | [Configuration](docs/rsi-tpw/configuration.md) | YAML config file format and all parameter defaults |
167
+ | [Pipeline](docs/rsi-tpw/pipeline.md) | Processing stages and data flow |
168
+ | [Python API](docs/rsi-tpw/python_api.md) | Using microstructure-tpw from Python code |
169
+ | [Output Directories](docs/rsi-tpw/output_directories.md) | Sequential hash-tracked output scheme |
170
+ | [Vectorization](docs/rsi-tpw/vectorization.md) | Vectorized compute internals |
171
+ | [Bench Test](docs/rsi-tpw/bench.md) | Pre-deployment bench check (`bench`): quick_bench figures + auto checklist |
172
+
173
+ ### perturb (batch pipeline)
174
+
175
+ | Document | Description |
176
+ |----------|-------------|
177
+ | [Pipeline](docs/perturb/pipeline.md) | Batch processing stages and data flow |
178
+ | [CLI Reference](docs/perturb/cli.md) | All `perturb` subcommands and flags |
179
+ | [Configuration](docs/perturb/configuration.md) | YAML config file format for perturb |
180
+ | [Parallel Scaling](docs/perturb/parallel.md) | Benchmark results for multi-core scaling |
181
+ | [Modules](docs/perturb/modules.md) | Module-level reference |
182
+ | [pyturb Comparison](docs/perturb/pyturb_comparison.md) | Comparison with oceancascades/pyturb |
183
+
184
+ ### scor160 (ATOMIX benchmark)
185
+
186
+ | Document | Description |
187
+ |----------|-------------|
188
+ | [CLI Reference](docs/scor160/cli.md) | All `scor160-tpw` subcommands and flags |
189
+
190
+ ### Shared
191
+
192
+ | Document | Description |
193
+ |----------|-------------|
194
+ | [Epsilon Mathematics](docs/epsilon_mathematics.md) | TKE dissipation algorithm details |
195
+ | [Chi Mathematics](docs/chi_mathematics.md) | Thermal dissipation algorithm details |
196
+ | [Mixing Efficiency](docs/mixing_efficiency.md) | Mathematics of the dissipation ratio |
197
+ | [Best Practices](docs/best_practices.md) | Guidance for comparing turbulence measurements |
198
+ | [Bibliography](docs/bibliography.md) | Consolidated references |
199
+ | [Installation](docs/installation.md) | Installation options |
200
+ | [Changelog](CHANGELOG.md) | Version history |
201
+
202
+ ## References
203
+
204
+ This package is a Python implementation derived from the
205
+ [Rockland Scientific ODAS MATLAB Library](https://rocklandscientific.com/support/software/) (v4.5.1)
206
+ and associated
207
+ [Technical Notes](https://rocklandscientific.com/support/technical-notes/)
208
+ (TN-028, TN-051, TN-061).
209
+
210
+ See [docs/bibliography.md](docs/bibliography.md) for the full list of references.
211
+
212
+ ## Testing
213
+
214
+ ```bash
215
+ python -m pytest # run all tests
216
+ python -m pytest tests/test_epsilon.py # epsilon pipeline tests only
217
+ ```
218
+
219
+ ## Development
220
+
221
+ This project was developed in collaboration with [Claude Code](https://claude.ai/code).
222
+
223
+ ## Citation
224
+
225
+ If you use this software in published work, please cite it. Citation metadata
226
+ lives in [`CITATION.cff`](CITATION.cff) — GitHub renders a **"Cite this
227
+ repository"** button from it (BibTeX/APA export). Each tagged release is
228
+ archived on Zenodo with a DOI; cite the *concept* (all-versions) DOI so the
229
+ reference always resolves to the latest release. The DOI badge and identifier
230
+ are added here once the first release is minted.
231
+
232
+ ## License
233
+
234
+ GPLv3 — see [LICENSE](LICENSE) for details.
@@ -0,0 +1,119 @@
1
+ microstructure_tpw-0.3.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
2
+ odas_tpw/__init__.py,sha256=AkzV_Ntg5xnFFQcNL0daoJCjDWaMvFE1xsEsBlVXNx8,796
3
+ odas_tpw/config_base.py,sha256=phXKTlWw7AzJacNLsW89BgU2QB8h1xadcuTkVCriyHs,17290
4
+ odas_tpw/chi/__init__.py,sha256=dZUm_G0sul7rgDEnTFySPA7kOxgSzsCvbj2x_H7lXUU,1175
5
+ odas_tpw/chi/batchelor.py,sha256=td3b2SnMPvYrftgsRSxzxTXHimRuyxOFUKEkDUBK0Js,6391
6
+ odas_tpw/chi/chi.py,sha256=mADkwNM0G3A57g4QQwNPR05Axj9OhAVCGyYC5jyfyeo,33667
7
+ odas_tpw/chi/fp07.py,sha256=vCPVhRyajMqMptsqBniZgfWmjmBwJLBCWGkYLzgOvaU,21075
8
+ odas_tpw/chi/l2_chi.py,sha256=mIqU8jgkDJwRPPxzGp42rdeH8TTpCAC7e0c99xyIG4w,4791
9
+ odas_tpw/chi/l3_chi.py,sha256=xv_ft4XmsF9HUsn1O9ZjPHCuP4Gm0niMY2Qe4_-pKmE,13292
10
+ odas_tpw/chi/l4_chi.py,sha256=4os6POMgATKd1z0hrQCQkHvebV6CJ8-UcbRLQ4aN-tA,14638
11
+ odas_tpw/perturb/__init__.py,sha256=dx6VoTnVpFHM773F4kcIPVu6IEapqmeLuDhxr3r0xw8,509
12
+ odas_tpw/perturb/adcp.py,sha256=sXtzl6SUS7CVpmgC0VGOAK5g9O2g13801oKEjELAA2I,11314
13
+ odas_tpw/perturb/atomic_io.py,sha256=k2cp-aaYjklk9JGKXZE6XYwLSJ7MzrrGvnFbQZNSP6s,1874
14
+ odas_tpw/perturb/binning.py,sha256=RaT9zS81CDoBv2YkMtvHoplif5p1lQ1-EYaZV4HHOYk,31728
15
+ odas_tpw/perturb/cli.py,sha256=p1T4uEPaLu-gJVsirlT1JY239bY_mr-KV2fc5PqEH4Q,20143
16
+ odas_tpw/perturb/combo.py,sha256=7y5Ha7h268Hoa4REFSQfZHi5emTFiQ0dSR981P9pnjE,15065
17
+ odas_tpw/perturb/config.py,sha256=ipNuOdA8AuZLSBU06jWA9mnOEm0nycM7bGm0vspR6ow,44297
18
+ odas_tpw/perturb/ctd.py,sha256=DBboDbIapQi8JF3vEw-x2KKYvGyRos4cMfhpJDna134,17937
19
+ odas_tpw/perturb/discover.py,sha256=Yf0xLQom4Lr2Jpo6FqURW1nNP9bVO2rcaaDV66KD610,980
20
+ odas_tpw/perturb/fp07_cal.py,sha256=SvzXjcVcwEeynkasjzSB5DcfueB33deVgrW9IUbD5kA,12936
21
+ odas_tpw/perturb/gps.py,sha256=AMwsZpH3PWnu_zF7QdhhKOYJxu5_AmSiy-A8OEPdEgM,17804
22
+ odas_tpw/perturb/hotel.py,sha256=BswArDF27KaxTYmBS5k4c9BZPP0Kb-oOelINlJsb7ew,23693
23
+ odas_tpw/perturb/logging_setup.py,sha256=v0JraPCG8LmemPm4mp7YwdlYxFZWHCeIhzOt1efodmA,5809
24
+ odas_tpw/perturb/merge.py,sha256=YpU0An-a-RNTy87KZ2dzxIXfg2DNdHh1lGmeI-JLxj8,11775
25
+ odas_tpw/perturb/mk_sections.py,sha256=lkWnXRuuHQI53D-zMTs0Zk_65fgY20hOkjmptbL3kEA,11931
26
+ odas_tpw/perturb/netcdf_schema.py,sha256=6Mbd_OLEmWRMBCVPnAbnXJ3guAqZOqbUkhR-kiAzST0,17594
27
+ odas_tpw/perturb/pipeline.py,sha256=0E31Gg8j3YyNaz7nmuXv_Q46gUtt7B-KzQGqfQyrWmw,113809
28
+ odas_tpw/perturb/qc_gate.py,sha256=qmnSh-zt_XVd_LSZSSSIZOoZzGcx2Q2jW5pxGMefm00,6788
29
+ odas_tpw/perturb/qc_rules.py,sha256=MMurGctPX8spLz_KFIUwGWFy5UHmlnDCmunCI8NX3ks,14377
30
+ odas_tpw/perturb/resolve.py,sha256=7Dt2DjlM8iyhykM8Jrp5Vmcgay_VBfVeCcuJ1-D8lHU,13489
31
+ odas_tpw/perturb/seawater.py,sha256=G0C8zcaqASx0FuY_eKZac9WWAurKDPV5f5NylmbTG88,2279
32
+ odas_tpw/perturb/speed.py,sha256=1ngYzK7aUb3Id8fjwpsJlnS6e2YDrkrBEoapgeRwpSQ,496
33
+ odas_tpw/perturb/trim.py,sha256=Um7KNHoM4YM1GfC_FM3X1eAXX-cy2AEm7GiXhI9JaaU,13098
34
+ odas_tpw/perturb/diag/__init__.py,sha256=cMiaz6__G8V8UyPYtqK4hX_-JeaaBz7H3Rk6KLJXlD8,584
35
+ odas_tpw/perturb/diag/_common.py,sha256=bWboEugXCzsyf9kEsA5dU8Pe70WMtzd5vvywdeZw0DE,5759
36
+ odas_tpw/perturb/diag/chi.py,sha256=U7m2l_njTr5zLmayTcGsWy5vwFs5lJBy27LacJ0kVz8,1457
37
+ odas_tpw/perturb/diag/cli.py,sha256=XkLaePzab6Fi8r0Adrvmg6pC0GoJKZMxdDNw3r5ACZc,2266
38
+ odas_tpw/perturb/diag/data.py,sha256=r5PV5gk1OeBYqG2ppg16u0NM3LMstbxzcQODkXKCNb8,26790
39
+ odas_tpw/perturb/diag/epsilon.py,sha256=ytptN8umzRytyCoX2cwtyEg8wMJKNqY5LFNaXiPqMcg,1587
40
+ odas_tpw/perturb/diag/inspector.py,sha256=CgmDyIUFpHjdVPxBAuDLjQWkNO5vHw26e_7wvOOlQ9U,14658
41
+ odas_tpw/perturb/diag/mixing.py,sha256=wwr9NS3MsvWoPFESbpIQLzvMcOPQMCsfawCGGz8ELHA,3706
42
+ odas_tpw/perturb/diag/render.py,sha256=0WBzPRt9juDBwe5xXhx5ZRozoCLcE0nfPP6XlLpu7LE,22084
43
+ odas_tpw/perturb/plot/__init__.py,sha256=TgebWzzdNSh7Dm_It7ekyzpP2MLvd6ueZqUjEOIO7gY,664
44
+ odas_tpw/perturb/plot/cli.py,sha256=Vrekjfx6FIKq3Oljh_hXXdtbq9U88AmMM0Y0LOhcyIg,3431
45
+ odas_tpw/perturb/plot/diagnostics.py,sha256=7GyJAMjfAVVmEN3PgTizQ3yM1h_I_Es1e6EUlmhoRjs,7677
46
+ odas_tpw/perturb/plot/eps_chi.py,sha256=uTnRV2_EIDMz5qoOlsuhkn63W18QGylDTdU5K-8VlpM,22616
47
+ odas_tpw/perturb/plot/figure.py,sha256=i-g_vXrU3OPAWee0-Uyt6_7joAnZq3U9zgCkg179L74,30749
48
+ odas_tpw/perturb/plot/gamma_scaling.py,sha256=rvLWo47LK88t7wWUnBbGUrn0fbDvPUNTWkIcJtaY5rA,42597
49
+ odas_tpw/perturb/plot/grid.py,sha256=f8V2wt5zzf-sHbb4e4Cap55eIte2CWQEX6q-JSSDbSY,4236
50
+ odas_tpw/perturb/plot/layout.py,sha256=YxcQUMUCgnkQZ1Yz1mNHJQwovAyIwHidV4C0TMb-pVE,14267
51
+ odas_tpw/perturb/plot/overview.py,sha256=Ux9-QIEtkTy6DhTrTz4vzJTVMFKCZmYW-qOf8Qe2fec,24336
52
+ odas_tpw/perturb/plot/profiles.py,sha256=1G6Czhmxrk6vGGVlZGBfih7x1WUZXX9gUmhe00tqMUw,30152
53
+ odas_tpw/perturb/plot/scalar.py,sha256=0xr9WI6IrzWlkePRqTr-zmEBejne6TJhgdAeDZTGRFM,15931
54
+ odas_tpw/perturb/plot/sections.py,sha256=_cRsoXHrMnQNOedRoA8oCMMObHpw43MPpT_ctFNDSbg,20847
55
+ odas_tpw/perturb/plot/xaxis.py,sha256=fbBbsPy-r5vIC8YTOCE_zuAVBOGan7m9B6aLHMDpbI0,16040
56
+ odas_tpw/perturb/plot/presets/eps-chi.yaml,sha256=nRrBx5kShijtNT9FCEud1ntOdwS9gKw1XbLyUShsg6E,486
57
+ odas_tpw/perturb/plot/presets/profiles.yaml,sha256=fvu1DJTQsC3cLzjTvIpS7ujTbHXvpQRYsvInkUpGgg4,1276
58
+ odas_tpw/perturb/plot/presets/scalar.yaml,sha256=r4XKSz3h8gEKaOve9x_8XKDwCOK_jHZeJ6v-kWq9Bg0,776
59
+ odas_tpw/processing/__init__.py,sha256=jNZZbtgxpRTyguCgZ5Ful5O9V4r8tBgLxDzqDTGd_mc,2273
60
+ odas_tpw/processing/bottom.py,sha256=90mC-xigh8kXNDDwL-0c2c5vueaiepQMwYbpAmGHg34,9648
61
+ odas_tpw/processing/chi_combine.py,sha256=vlkaekHDxyzpoq4KleW4F0kPh3AANydVrwBM1i86DaY,13515
62
+ odas_tpw/processing/ct_align.py,sha256=hn081ZrbGsp1wCnrYyz_tHY9ycPbv2pPrFVutTfkN5c,5901
63
+ odas_tpw/processing/epsilon_combine.py,sha256=3_RWi4IKV_0TI9TPMeYUwTEN_L7yut-L6NFac--IuIo,8265
64
+ odas_tpw/processing/mixing.py,sha256=YDDQV_E12bBUnylwytppVkWsUjzXM99i52EEoDzm-G4,26152
65
+ odas_tpw/processing/thorpe.py,sha256=vckkJpGLwwkyYncQhpLreqe1zfiUeCsc2T3OLFIiFsU,17724
66
+ odas_tpw/processing/top_trim.py,sha256=PdPOxuK3r1OwXWoulU3W0qg2CVdEXp7hiBMinl2w7go,12324
67
+ odas_tpw/pyturb/__init__.py,sha256=xTtLK7MwklkKzqHbRk8OB4oW0GLAkNFH55hXFEuo43A,93
68
+ odas_tpw/pyturb/__main__.py,sha256=3aJ1l3f5dwe_FHfhohmsbbSa7Xxg3JhxI3ehAmPnaro,100
69
+ odas_tpw/pyturb/_compat.py,sha256=Jd53GZz4Zo0syuJDFDuxGf5YG2GxDkEf7buNVyDE7rs,6323
70
+ odas_tpw/pyturb/_profind.py,sha256=LQFsg6FbhAiAyS6Y-KOAT-UkVMhVyl2tGHPgHdekgQk,3694
71
+ odas_tpw/pyturb/bin.py,sha256=I33Xk7Wf_D2azL1_jK3Nqgsa-keNBfc1FtFum841eHc,3578
72
+ odas_tpw/pyturb/cli.py,sha256=WagMueAbJVNuybgzvnImcrX_h2ViCI6sv4J6NXjHs94,7628
73
+ odas_tpw/pyturb/eps.py,sha256=j4WvIj8hmGibZ3lMZhJ5PRjoHPTnTdIhsyuerdM6aTo,12838
74
+ odas_tpw/pyturb/merge.py,sha256=HTbWKiH_euiVHosTyZqSwf9ElupA8womTBt3zjW4GCo,2914
75
+ odas_tpw/pyturb/p2nc.py,sha256=_TYSsH3JfjzsubE9SGYLC7HlhN-Zh8kNCigVO2betmw,2707
76
+ odas_tpw/rsi/__init__.py,sha256=8Ave6B_PvZ3SFyhqDqIJGN8hHbHHbjcQddqBAZZlfaw,934
77
+ odas_tpw/rsi/adapter.py,sha256=odu8C9nTz3wh2NiY9vLPKpWWZCfE0SSKpRMBqWGyRqA,10785
78
+ odas_tpw/rsi/bench.py,sha256=CQKYbQhHrPH-slbsUjThRe1erfIZhUpzpYAwOurDJr4,34924
79
+ odas_tpw/rsi/binning.py,sha256=wG4LazGpsnRD9AHch8RHvUhcWyN9U5YbP5l1UIlVtIQ,7497
80
+ odas_tpw/rsi/channels.py,sha256=A-qbHtBXJ5q6ckIOor9EnenukwRBGud4qDZIkoMmDBs,15952
81
+ odas_tpw/rsi/chi_io.py,sha256=vOwzj1AT2XulxduzXjaFA47gYbKZyd9sQOxJILnEQUw,34799
82
+ odas_tpw/rsi/cli.py,sha256=t-aGemq6KVVYL3DP--zwpx14tklxyWYlp3hQEZAA1SQ,47447
83
+ odas_tpw/rsi/combine.py,sha256=4F2IXx3LVR48DTnabDc2evkxe0pKajqxW2_au0Zm9a0,4430
84
+ odas_tpw/rsi/config.py,sha256=diSkkMZRaYXkqQ1M3Cg-snFeGLg7yXI2JjwPuMhH3l4,4752
85
+ odas_tpw/rsi/config_patch.py,sha256=8fwnRdwxUoQ9oOvoCW6VtWwEt6uIAwIvfjaoleblbG0,32743
86
+ odas_tpw/rsi/convert.py,sha256=4nRe0pNEUoN42-TA1HNIA5aIB8NUJp6lWLNQ9s-ulEQ,22596
87
+ odas_tpw/rsi/deconvolve.py,sha256=BksaMb6i8L7N_nPqgaPkrQcvjAahEXO7P2elluT0GWk,4092
88
+ odas_tpw/rsi/diss_look.py,sha256=Pv9XGmjGiZEti2j27Nrtk5jzudP_FQIFVVuksRluTJ4,12084
89
+ odas_tpw/rsi/dissipation.py,sha256=rggSgsL2u0FnQLuwfP0PFpwtsvLjAXlUUemeh6Xfz4o,21832
90
+ odas_tpw/rsi/helpers.py,sha256=63ZEOzcnJwMNdEx2A3JGku3ZBveGhzO6XrLhpiRS28c,17191
91
+ odas_tpw/rsi/mixing_look.py,sha256=T0cEQK_U2NcUbp7oPXdQJv8TUGSED7xfRFcth0GkuXs,19893
92
+ odas_tpw/rsi/p_file.py,sha256=JFD0MHPge5RPDOtIiEMMWmwFsk9SHrHv_JeOhVhoZVU,35051
93
+ odas_tpw/rsi/pipeline.py,sha256=z7_UjhnxflzUKF7OyKLuZmqy3YEyc6p6X2e-glByA98,34333
94
+ odas_tpw/rsi/profile.py,sha256=IQYXc8BKgnHYvjuS5Zy7vFt_PflsApSkELuQ9RQj6So,26292
95
+ odas_tpw/rsi/quick_look.py,sha256=Pj1aA6FzOd3oF770puP9UmypjQwg1bWT0_rSi_H5Dbo,27409
96
+ odas_tpw/rsi/sensor_inventory.py,sha256=15naa8r3sQAGKuaGQdORAoCG8P0NTUsX8Ioj_vt2ruE,26066
97
+ odas_tpw/rsi/shear_noise.py,sha256=_HGlgMfth3aIfoRlytJh0T2_WIbnQ3bZqLphK2irOuY,4018
98
+ odas_tpw/rsi/speed.py,sha256=YsVVYX_z43nPIz6N3zFRnbhqxX5h4JH5MDBBkQ9wxF4,9057
99
+ odas_tpw/rsi/vehicle.py,sha256=KP8TSvw8qDgGsGTnOR-ZmlXmMuswQxAmblQgO7l7H44,2099
100
+ odas_tpw/rsi/viewer_base.py,sha256=ApM7n8uPL_6oIc4TtlQenFqrifD9gkqvx_R-1a3IkHw,39106
101
+ odas_tpw/rsi/window.py,sha256=p3NcbbGe5IOkWlLXsudmWppJDbo-ExlV0eyfoVxW5tg,15899
102
+ odas_tpw/scor160/__init__.py,sha256=PgrEipIwi04mi8eUpnVHs9NVuCncykI_Ltw2oygdZCc,820
103
+ odas_tpw/scor160/cli.py,sha256=qVCk7ymRRrNcivLRR88s49KG23sBdApy8ps75e0qeCg,8410
104
+ odas_tpw/scor160/compare.py,sha256=2PzWkc04LofiCHtd2UD3r3YtI3Fp9y_iKwKg9z_vtiA,18940
105
+ odas_tpw/scor160/despike.py,sha256=G6KuY1xHOOltTuqV39W4RnOsHu4Yv8OOWB05YZ_LQnA,8522
106
+ odas_tpw/scor160/goodman.py,sha256=wZsqXimy6hFKR25UyoM1KeVOc6L06p6pndMOMdXHHm8,11820
107
+ odas_tpw/scor160/io.py,sha256=Io-r0xtjEPlj7SOfMafVtgZPGKEN5yGvHLo-m-95eX0,26334
108
+ odas_tpw/scor160/l2.py,sha256=G3OcREnEX020p1FYHEBE4RHRiYBqPahU5gU73a-_Cow,10939
109
+ odas_tpw/scor160/l3.py,sha256=HdPv3953uLLqyg8noTI-vvir3_hlNBhQniGht2OxUdc,10231
110
+ odas_tpw/scor160/l4.py,sha256=36SRn6zhc0szeBQya8aYGcU9IozNm5CmOP3QnT_Uues,34355
111
+ odas_tpw/scor160/nasmyth.py,sha256=IOzjVXiFpnpEmcZeQmP_bGUNsiWaDHd8jNw9e16TWY0,6918
112
+ odas_tpw/scor160/ocean.py,sha256=Z_AUdwtQhOT_HYh668YfTK6wegtR8lvbFFnc38FuBfk,10588
113
+ odas_tpw/scor160/profile.py,sha256=Tgb7u13PM1ol8njGm2DThs22IO2l0ju4kPBtZKC-37E,6927
114
+ odas_tpw/scor160/spectral.py,sha256=uHN2WZwVu4pKErruj3r66Tr32lx3_gD4Z48VYahoiak,17295
115
+ microstructure_tpw-0.3.0.dist-info/METADATA,sha256=UWVv2mSaq177ZUbLmZym7sxbCIIa8U4xDjPtFdc_Mww,11231
116
+ microstructure_tpw-0.3.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
117
+ microstructure_tpw-0.3.0.dist-info/entry_points.txt,sha256=rKGQi6aFDERYNhM6RlHsbH3wAmrGm_ZbBSSI__UAuUg,256
118
+ microstructure_tpw-0.3.0.dist-info/top_level.txt,sha256=LzM_clMmlOp5Oc8Y2mxGdcZ78tIErHutBfFTiLi2rBE,9
119
+ microstructure_tpw-0.3.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (83.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,7 @@
1
+ [console_scripts]
2
+ perturb = odas_tpw.perturb.cli:main
3
+ perturb-diag = odas_tpw.perturb.diag.cli:main
4
+ perturb-plot = odas_tpw.perturb.plot.cli:main
5
+ pyturb-cli = odas_tpw.pyturb.cli:main
6
+ rsi-tpw = odas_tpw.rsi.cli:main
7
+ scor160-tpw = odas_tpw.scor160.cli:main