oceanarray 0.1.0__tar.gz → 0.3.0__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.
Files changed (281) hide show
  1. {oceanarray-0.1.0 → oceanarray-0.3.0}/.github/ISSUE_TEMPLATE.md +7 -11
  2. {oceanarray-0.1.0 → oceanarray-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +5 -7
  3. {oceanarray-0.1.0 → oceanarray-0.3.0}/.github/workflows/docs.yml +5 -5
  4. {oceanarray-0.1.0 → oceanarray-0.3.0}/.github/workflows/docs_deploy.yml +12 -5
  5. oceanarray-0.3.0/.github/workflows/tests.yml +63 -0
  6. {oceanarray-0.1.0 → oceanarray-0.3.0}/.gitignore +0 -2
  7. oceanarray-0.3.0/CHANGELOG.md +117 -0
  8. oceanarray-0.3.0/CITATION.cff +22 -0
  9. oceanarray-0.3.0/CONTRIBUTING.md +125 -0
  10. {oceanarray-0.1.0 → oceanarray-0.3.0}/MIGRATION-BASEDIR.md +26 -4
  11. oceanarray-0.3.0/PKG-INFO +120 -0
  12. oceanarray-0.3.0/README.md +60 -0
  13. oceanarray-0.3.0/docs/source/_static/logo.png +0 -0
  14. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/cli_reference.rst +158 -128
  15. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/file_naming_conventions.rst +4 -3
  16. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/index.rst +8 -12
  17. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/legacy.rst +5 -5
  18. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/auto_qc.rst +158 -1
  19. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/nortek_coordinate_transform.rst +4 -4
  20. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/standardisation.rst +12 -11
  21. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/time_gridding.rst +2 -2
  22. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/vertical_gridding.rst +2 -2
  23. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/migration.rst +6 -10
  24. oceanarray-0.3.0/docs/source/oceanarray.rst +293 -0
  25. oceanarray-0.3.0/docs/source/project_structure.md +211 -0
  26. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/quickstart.rst +1 -1
  27. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/yaml_configuration.rst +3 -3
  28. oceanarray-0.3.0/environment.yml +13 -0
  29. {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/demo_climatology.ipynb +8 -7
  30. {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/demo_instrument.ipynb +2 -2
  31. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/__init__.py +12 -10
  32. oceanarray-0.3.0/oceanarray/_version.py +1 -0
  33. oceanarray-0.3.0/oceanarray/analysis/__init__.py +20 -0
  34. oceanarray-0.1.0/oceanarray/clock_offset.py → oceanarray-0.3.0/oceanarray/analysis/clock.py +26 -9
  35. oceanarray-0.3.0/oceanarray/analysis/hydrographic.py +325 -0
  36. oceanarray-0.3.0/oceanarray/analysis/science.py +226 -0
  37. oceanarray-0.3.0/oceanarray/analysis/spectral.py +348 -0
  38. oceanarray-0.3.0/oceanarray/analysis/temporal.py +217 -0
  39. oceanarray-0.3.0/oceanarray/analysis/vector.py +115 -0
  40. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/cli.py +653 -407
  41. oceanarray-0.3.0/oceanarray/config/__init__.py +7 -0
  42. {oceanarray-0.1.0/oceanarray → oceanarray-0.3.0/oceanarray/config}/parameters.py +289 -12
  43. {oceanarray-0.1.0/oceanarray → oceanarray-0.3.0/oceanarray/config}/validation.py +28 -65
  44. oceanarray-0.3.0/oceanarray/inspect.py +117 -0
  45. oceanarray-0.3.0/oceanarray/legacy/tools.py +852 -0
  46. oceanarray-0.3.0/oceanarray/paths.py +163 -0
  47. oceanarray-0.3.0/oceanarray/plotters/__init__.py +201 -0
  48. oceanarray-0.3.0/oceanarray/plotters/_cli_legacy.py +316 -0
  49. oceanarray-0.1.0/oceanarray/plotters/_animation.py → oceanarray-0.3.0/oceanarray/plotters/animation.py +2 -2
  50. oceanarray-0.3.0/oceanarray/plotters/current.py +1641 -0
  51. oceanarray-0.3.0/oceanarray/plotters/diagnostic.py +1553 -0
  52. oceanarray-0.3.0/oceanarray/plotters/helpers.py +244 -0
  53. oceanarray-0.3.0/oceanarray/plotters/hydrography.py +465 -0
  54. oceanarray-0.3.0/oceanarray/plotters/primitives.py +336 -0
  55. oceanarray-0.3.0/oceanarray/plotters/spectrum.py +1009 -0
  56. oceanarray-0.3.0/oceanarray/plotters/timeseries.py +581 -0
  57. oceanarray-0.3.0/oceanarray/plotters/ts.py +482 -0
  58. oceanarray-0.3.0/oceanarray/processors/__init__.py +352 -0
  59. oceanarray-0.3.0/oceanarray/processors/caldip.py +1 -0
  60. oceanarray-0.3.0/oceanarray/processors/coordinate.py +719 -0
  61. oceanarray-0.1.0/oceanarray/time_gridding.py → oceanarray-0.3.0/oceanarray/processors/grid.py +295 -60
  62. oceanarray-0.3.0/oceanarray/processors/helpers.py +357 -0
  63. oceanarray-0.3.0/oceanarray/processors/pressure.py +401 -0
  64. oceanarray-0.3.0/oceanarray/processors/qc.py +770 -0
  65. oceanarray-0.3.0/oceanarray/processors/stack.py +692 -0
  66. {oceanarray-0.1.0/oceanarray → oceanarray-0.3.0/oceanarray/processors}/stage1.py +139 -200
  67. {oceanarray-0.1.0/oceanarray → oceanarray-0.3.0/oceanarray/processors}/stage2.py +24 -101
  68. oceanarray-0.3.0/oceanarray/processors/stage3.py +711 -0
  69. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/report/_array.py +313 -37
  70. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/report/_grid.py +79 -60
  71. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/report/_html_helpers.py +27 -45
  72. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/report/_instrument.py +40 -27
  73. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/report/_mooring.py +177 -48
  74. oceanarray-0.3.0/oceanarray/report/_plots.py +1003 -0
  75. oceanarray-0.3.0/oceanarray/report/_recovery_table.py +499 -0
  76. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/report/_stack.py +142 -133
  77. oceanarray-0.3.0/oceanarray/tools/__init__.py +33 -0
  78. {oceanarray-0.1.0/oceanarray → oceanarray-0.3.0/oceanarray/tools}/rapid_interp.py +95 -1
  79. {oceanarray-0.1.0/oceanarray → oceanarray-0.3.0/oceanarray/tools}/readers.py +3 -0
  80. {oceanarray-0.1.0/oceanarray → oceanarray-0.3.0/oceanarray/tools}/writers.py +7 -3
  81. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/utilities.py +176 -0
  82. oceanarray-0.3.0/oceanarray.egg-info/PKG-INFO +120 -0
  83. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray.egg-info/SOURCES.txt +65 -47
  84. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray.egg-info/requires.txt +2 -0
  85. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray.egg-info/scm_file_list.json +194 -176
  86. oceanarray-0.3.0/oceanarray.egg-info/scm_version.json +8 -0
  87. {oceanarray-0.1.0 → oceanarray-0.3.0}/pyproject.toml +12 -31
  88. {oceanarray-0.1.0 → oceanarray-0.3.0}/requirements-dev.txt +0 -3
  89. {oceanarray-0.1.0 → oceanarray-0.3.0}/requirements.txt +6 -0
  90. oceanarray-0.3.0/tests/conftest.py +137 -0
  91. oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage1.nc +0 -0
  92. oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage2.nc +0 -0
  93. oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage3.nc +0 -0
  94. oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/dune2_1_2026.mooring.yaml +43 -0
  95. oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/dune2_1_2026_grid.nc +0 -0
  96. oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/dune2_1_2026_stack.nc +0 -0
  97. oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage1.nc +0 -0
  98. oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage2.nc +0 -0
  99. oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage3.nc +0 -0
  100. oceanarray-0.3.0/tests/fixtures/raw/dune2_1_2026/aquadopp/9920_recovery.dat +9960 -0
  101. oceanarray-0.3.0/tests/fixtures/raw/dune2_1_2026/aquadopp/9920_recovery.hdr +174 -0
  102. oceanarray-0.3.0/tests/fixtures/raw/dune2_1_2026/microcat/2941_recovery.asc +19948 -0
  103. oceanarray-0.3.0/tests/fixtures/regenerate_dune2_microcat.py +73 -0
  104. oceanarray-0.3.0/tests/integration/conftest.py +63 -0
  105. oceanarray-0.3.0/tests/integration/test_pipeline.py +267 -0
  106. oceanarray-0.3.0/tests/integration/test_readers.py +273 -0
  107. oceanarray-0.3.0/tests/integration/test_recovery_table.py +71 -0
  108. oceanarray-0.3.0/tests/integration/test_stage1.py +86 -0
  109. oceanarray-0.3.0/tests/integration/test_stage1_from_raw.py +158 -0
  110. oceanarray-0.3.0/tests/integration/test_stage2.py +111 -0
  111. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/integration/test_time_gridding.py +18 -11
  112. oceanarray-0.3.0/tests/test_imports.py +26 -0
  113. oceanarray-0.3.0/tests/unit/test_array.py +233 -0
  114. oceanarray-0.3.0/tests/unit/test_cli.py +164 -0
  115. oceanarray-0.3.0/tests/unit/test_flag_merge.py +34 -0
  116. oceanarray-0.3.0/tests/unit/test_parameters.py +122 -0
  117. oceanarray-0.3.0/tests/unit/test_paths.py +129 -0
  118. oceanarray-0.3.0/tests/unit/test_plot_guard.py +272 -0
  119. oceanarray-0.3.0/tests/unit/test_plotters.py +167 -0
  120. oceanarray-0.3.0/tests/unit/test_process_api.py +401 -0
  121. oceanarray-0.3.0/tests/unit/test_recovery_table.py +59 -0
  122. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_report.py +8 -21
  123. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_stage1.py +42 -44
  124. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_stage2.py +10 -45
  125. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_stage3.py +68 -20
  126. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_time_gridding.py +16 -17
  127. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_utilities.py +54 -0
  128. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_validation.py +62 -2
  129. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_writers.py +1 -1
  130. oceanarray-0.1.0/.github/workflows/tests.yml +0 -35
  131. oceanarray-0.1.0/.pre-commit-config.yaml +0 -57
  132. oceanarray-0.1.0/.vscode/settings.json +0 -37
  133. oceanarray-0.1.0/.vscode/tasks.json +0 -22
  134. oceanarray-0.1.0/CHANGELOG.md +0 -48
  135. oceanarray-0.1.0/CITATION.cff +0 -11
  136. oceanarray-0.1.0/CONTRIBUTING.md +0 -153
  137. oceanarray-0.1.0/PKG-INFO +0 -503
  138. oceanarray-0.1.0/README.md +0 -445
  139. oceanarray-0.1.0/docs/source/_static/logo.png +0 -0
  140. oceanarray-0.1.0/docs/source/logsheets.rst +0 -223
  141. oceanarray-0.1.0/docs/source/oceanarray.rst +0 -165
  142. oceanarray-0.1.0/docs/source/project_structure.md +0 -219
  143. oceanarray-0.1.0/environment.yml +0 -9
  144. oceanarray-0.1.0/oceanarray/_version.py +0 -1
  145. oceanarray-0.1.0/oceanarray/logsheet/__init__.py +0 -60
  146. oceanarray-0.1.0/oceanarray/logsheet/_columns.py +0 -97
  147. oceanarray-0.1.0/oceanarray/logsheet/_config.py +0 -245
  148. oceanarray-0.1.0/oceanarray/logsheet/_firmware.py +0 -43
  149. oceanarray-0.1.0/oceanarray/logsheet/_latex.py +0 -128
  150. oceanarray-0.1.0/oceanarray/logsheet/_render.py +0 -126
  151. oceanarray-0.1.0/oceanarray/logsheet/builders/__init__.py +0 -13
  152. oceanarray-0.1.0/oceanarray/logsheet/builders/caldip_download.py +0 -195
  153. oceanarray-0.1.0/oceanarray/logsheet/builders/caldip_setup.py +0 -188
  154. oceanarray-0.1.0/oceanarray/logsheet/builders/deployment_setup.py +0 -218
  155. oceanarray-0.1.0/oceanarray/logsheet/builders/mooring_download.py +0 -243
  156. oceanarray-0.1.0/oceanarray/logsheet/builders/recovery.py +0 -157
  157. oceanarray-0.1.0/oceanarray/logsheet/data/column_defs.yaml +0 -686
  158. oceanarray-0.1.0/oceanarray/logsheet/data/latex_templates/_base_instrument.tex.j2 +0 -42
  159. oceanarray-0.1.0/oceanarray/logsheet/data/latex_templates/caldip_download.tex.j2 +0 -47
  160. oceanarray-0.1.0/oceanarray/logsheet/data/latex_templates/caldip_setup.tex.j2 +0 -70
  161. oceanarray-0.1.0/oceanarray/logsheet/data/latex_templates/deployment_setup.tex.j2 +0 -97
  162. oceanarray-0.1.0/oceanarray/logsheet/data/latex_templates/mooring_download.tex.j2 +0 -54
  163. oceanarray-0.1.0/oceanarray/logsheet/data/latex_templates/recovery.tex.j2 +0 -103
  164. oceanarray-0.1.0/oceanarray/mooring_level.py +0 -1368
  165. oceanarray-0.1.0/oceanarray/plotter.py +0 -942
  166. oceanarray-0.1.0/oceanarray/plotters/__init__.py +0 -97
  167. oceanarray-0.1.0/oceanarray/plotters/_current.py +0 -705
  168. oceanarray-0.1.0/oceanarray/plotters/_diagnostic.py +0 -667
  169. oceanarray-0.1.0/oceanarray/plotters/_helpers.py +0 -57
  170. oceanarray-0.1.0/oceanarray/plotters/_primitives.py +0 -101
  171. oceanarray-0.1.0/oceanarray/plotters/_section.py +0 -16
  172. oceanarray-0.1.0/oceanarray/plotters/_timeseries.py +0 -11
  173. oceanarray-0.1.0/oceanarray/read_rbr_hex.py +0 -541
  174. oceanarray-0.1.0/oceanarray/report/_plots.py +0 -4284
  175. oceanarray-0.1.0/oceanarray/stage3.py +0 -2494
  176. oceanarray-0.1.0/oceanarray/tools.py +0 -400
  177. oceanarray-0.1.0/oceanarray/transports.py +0 -1
  178. oceanarray-0.1.0/oceanarray.egg-info/PKG-INFO +0 -503
  179. oceanarray-0.1.0/oceanarray.egg-info/scm_version.json +0 -8
  180. oceanarray-0.1.0/tests/conftest.py +0 -50
  181. oceanarray-0.1.0/tests/integration/conftest.py +0 -24
  182. oceanarray-0.1.0/tests/integration/test_readers.py +0 -3
  183. oceanarray-0.1.0/tests/integration/test_stage1.py +0 -147
  184. oceanarray-0.1.0/tests/integration/test_stage2.py +0 -147
  185. oceanarray-0.1.0/tests/unit/test_logsheets.py +0 -678
  186. oceanarray-0.1.0/tests/unit/test_plotters.py +0 -226
  187. {oceanarray-0.1.0 → oceanarray-0.3.0}/.github/dependabot.yml +0 -0
  188. {oceanarray-0.1.0 → oceanarray-0.3.0}/.github/workflows/pypi.yml +0 -0
  189. {oceanarray-0.1.0 → oceanarray-0.3.0}/LICENSE +0 -0
  190. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/Makefile +0 -0
  191. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/How do I transform a coordinate system manually_ /342/200/223 Nortek Support Center.pdf" +0 -0
  192. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/array_processing.png +0 -0
  193. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/array_processing_v2.png +0 -0
  194. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/3_beam_transformation.py +0 -0
  195. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/auto_filt.m +0 -0
  196. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/hydro_grid.m +0 -0
  197. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat2rodb_2.m +0 -0
  198. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat2rodb_3.m +0 -0
  199. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat_apply_cal.m +0 -0
  200. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat_apply_cal_plus.m +0 -0
  201. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat_raw2use_003.m +0 -0
  202. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/mooring_interp_wb2_3_5.m +0 -0
  203. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/css/custom.css +0 -0
  204. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/github_solo_workflow.png +0 -0
  205. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/github_workflow2.png +0 -0
  206. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing.png +0 -0
  207. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing_v2.png +0 -0
  208. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing_v4.png +0 -0
  209. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing_v5.png +0 -0
  210. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing_v6.png +0 -0
  211. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/mooring_processing.png +0 -0
  212. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/mooring_processing_V2.png +0 -0
  213. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/mooring_processing_v3.png +0 -0
  214. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/mooring_processing_v4.png +0 -0
  215. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_grid_report.png +0 -0
  216. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_icon.png +0 -0
  217. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_instrument_report.png +0 -0
  218. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_report_header.png +0 -0
  219. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_stack_report.png +0 -0
  220. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/rotary_spectrum_plan.rst +0 -0
  221. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/calibration_dips.rst +0 -0
  222. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/clock_offset.rst +0 -0
  223. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/conf.py +0 -0
  224. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/directory_structure.rst +0 -0
  225. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/acquisition.rst +0 -0
  226. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/calibration.rst +0 -0
  227. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/concatenation.rst +0 -0
  228. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/conversion.rst +0 -0
  229. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/multisite_merging.rst +0 -0
  230. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/trimming.rst +0 -0
  231. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/oceanSITES_manual.rst +0 -0
  232. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/oceanarray_format.rst +0 -0
  233. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/processing_framework.rst +0 -0
  234. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/reports.rst +0 -0
  235. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/roadmap.rst +0 -0
  236. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/setup.md +0 -0
  237. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/style_guide.md +0 -0
  238. {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/troubleshooting.rst +0 -0
  239. {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/demo_check_clock.ipynb +0 -0
  240. {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/demo_clock_offset.ipynb +0 -0
  241. {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/demo_mooring.ipynb +0 -0
  242. {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/demo_stage1.ipynb +0 -0
  243. {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/demo_stage2.ipynb +0 -0
  244. {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/demo_step1.ipynb +0 -0
  245. {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/dsE_1_2018_microcat_7518_temperature.png +0 -0
  246. {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/legacy/README.md +0 -0
  247. {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/legacy/demo_batch_instrument.ipynb +0 -0
  248. {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/legacy/demo_instrument_rdb.ipynb +0 -0
  249. {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/legacy/demo_mooring_rdb.ipynb +0 -0
  250. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/config/OS1_sensor_attrs.yaml +0 -0
  251. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/config/OS1_var_names.yaml +0 -0
  252. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/config/legacy/project_RAPID.yaml +0 -0
  253. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/config/legacy/rodb_keys.txt +0 -0
  254. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/config/legacy/rodb_keys.yaml +0 -0
  255. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/config/logging.yaml +0 -0
  256. {oceanarray-0.1.0/oceanarray/config → oceanarray-0.3.0/oceanarray/legacy}/OS1_vocab_attrs.yaml +0 -0
  257. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/legacy/__init__.py +0 -0
  258. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/legacy/caldip.py +0 -0
  259. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/legacy/convertOS.py +0 -0
  260. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/legacy/find_deployment.py +0 -0
  261. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/legacy/mooring_rodb.py +0 -0
  262. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/legacy/process_rodb.py +0 -0
  263. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/legacy/rodb.py +0 -0
  264. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/logger.py +0 -0
  265. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/oceanarray.mplstyle +0 -0
  266. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/report/__init__.py +0 -0
  267. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray.egg-info/dependency_links.txt +0 -0
  268. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray.egg-info/entry_points.txt +0 -0
  269. {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray.egg-info/top_level.txt +0 -0
  270. {oceanarray-0.1.0 → oceanarray-0.3.0}/pytest.ini +0 -0
  271. {oceanarray-0.1.0 → oceanarray-0.3.0}/requirements-test.txt +0 -0
  272. {oceanarray-0.1.0 → oceanarray-0.3.0}/setup.cfg +0 -0
  273. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/integration/__init__.py +0 -0
  274. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/legacy/__init__.py +0 -0
  275. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/legacy/test_convertOS.py +0 -0
  276. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/legacy/test_mooring_rodb.py +0 -0
  277. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/legacy/test_process_rodb.py +0 -0
  278. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/legacy/test_rodb.py +0 -0
  279. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/__init__.py +0 -0
  280. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_logger.py +0 -0
  281. {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_tools.py +0 -0
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: "🐛 Bug Report / 💡 Feature Request"
3
- about: "Report a bug or suggest an improvement for the amocarray project"
4
- title: "[Bug] <brief description>" or "[Feature] <brief description>"
3
+ about: "Report a bug or suggest an improvement for oceanarray"
4
+ title: "[Bug] <brief description>"
5
5
  labels: []
6
6
  assignees: []
7
7
  ---
@@ -33,24 +33,20 @@ If you can, include a minimal, reproducible example or link to a failing test.
33
33
 
34
34
  ## Environment
35
35
 
36
- - OS: [e.g., macOS 13.3, Ubuntu 22.04, etc.]
36
+ - OS: [e.g., macOS 13.3, Ubuntu 22.04]
37
37
  - Python version: [e.g., 3.11]
38
- - amocarray version: [if applicable]
38
+ - `oceanarray` version: [`pip show oceanarray`]
39
+ - `seasenselib` version: [`pip show seasenselib`]
39
40
  - Virtualenv / Conda / System Python?: [env type]
40
41
 
41
42
 
42
43
  ## Checklist
43
44
 
44
- - [ ] I have checked the existing [issues](https://github.com/AMOCcommunity/amocarray/issues) to avoid duplicates.
45
+ - [ ] I have checked the existing [issues](https://github.com/ocean-uhh/oceanarray/issues) to avoid duplicates.
45
46
  - [ ] I have included steps to reproduce the issue, if it's a bug.
46
47
  - [ ] I have described the motivation clearly, if it's a feature request.
47
48
 
48
49
 
49
50
  ## Additional context
50
51
 
51
- Add any other context or screenshots about the problem or feature request here.
52
-
53
- ---
54
-
55
- *This issue template was prepared with assistance from ChatGPT to support clear and collaborative development.*
56
-
52
+ Add any other context or screenshots about the problem here.
@@ -2,7 +2,7 @@ You can delete unused sections.
2
2
 
3
3
  ## PR Title Convention
4
4
 
5
- Please prefix your pull request title with one of the following tags for clarity:
5
+ Please prefix your pull request title with one of the following tags:
6
6
 
7
7
  - `[DOC]` for documentation updates
8
8
  - `[FIX]` for bug fixes
@@ -13,7 +13,7 @@ Please prefix your pull request title with one of the following tags for clarity
13
13
  - `[CLEANUP]` for general maintenance
14
14
 
15
15
  Example:
16
- > `[FIX] Correct dimension handling in OSNAP reader`
16
+ > `[FIX] Correct dimension handling in RBR reader`
17
17
 
18
18
  **Description:**
19
19
 
@@ -25,11 +25,10 @@ Please describe your changes clearly and concisely.
25
25
 
26
26
  **Checklist:**
27
27
 
28
- - [ ] I have followed the [coding conventions](https://amoccommunity.github.io/amocarray/conventions.html).
28
+ - [ ] I have followed the [code conventions](CONTRIBUTING.md).
29
29
  - [ ] I have updated or added tests to cover my changes.
30
30
  - [ ] I have updated the documentation if needed.
31
- - [ ] I have run `pytest` to check that all tests pass.
32
- - [ ] I have run `pre-commit run --all-files` to lint and format the code.
31
+ - [ ] I have run `ruff check . --fix` and `pytest` — all tests pass.
33
32
 
34
33
  **Related Issues / Pull Requests:**
35
34
 
@@ -41,7 +40,6 @@ Link any related issues, pull requests, or discussions:
41
40
 
42
41
  Include any additional information reviewers might need:
43
42
 
44
- - Screenshots (if UI/outputs are affected)
43
+ - Screenshots (if outputs are affected)
45
44
  - Design decisions or trade-offs
46
45
  - Anything reviewers should look at closely
47
-
@@ -34,16 +34,16 @@ jobs:
34
34
  - name: Install package (editable)
35
35
  shell: bash -l {0}
36
36
  run: |
37
- micromamba run -n TEST python -m pip install --upgrade pip
38
- micromamba run -n TEST python -m pip install -e . --no-deps --force-reinstall
37
+ micromamba run -n oceanarray python -m pip install --upgrade pip
38
+ micromamba run -n oceanarray python -m pip install -e . --no-deps --force-reinstall
39
39
 
40
40
  - name: Build documentation
41
41
  shell: bash -l {0}
42
42
  run: |
43
43
  set -e
44
- micromamba run -n TEST jupyter nbconvert --to notebook --execute notebooks/demo_instrument.ipynb --output=demo_instrument-output.ipynb --ExecutePreprocessor.allow_errors=True
45
- micromamba run -n TEST jupyter nbconvert --to notebook --execute notebooks/demo_mooring.ipynb --output=demo_mooring-output.ipynb --ExecutePreprocessor.allow_errors=True
44
+ micromamba run -n oceanarray jupyter nbconvert --to notebook --execute notebooks/demo_instrument.ipynb --output=demo_instrument-output.ipynb --ExecutePreprocessor.allow_errors=True
45
+ micromamba run -n oceanarray jupyter nbconvert --to notebook --execute notebooks/demo_mooring.ipynb --output=demo_mooring-output.ipynb --ExecutePreprocessor.allow_errors=True
46
46
  mv notebooks/*output.ipynb docs/source/
47
47
  pushd docs
48
- micromamba run -n TEST make clean html
48
+ micromamba run -n oceanarray make clean html
49
49
  popd
@@ -33,18 +33,18 @@ jobs:
33
33
  - name: Install package (editable)
34
34
  shell: bash -l {0}
35
35
  run: |
36
- micromamba run -n TEST python -m pip install --upgrade pip
37
- micromamba run -n TEST python -m pip install -e . --no-deps --force-reinstall
36
+ micromamba run -n oceanarray python -m pip install --upgrade pip
37
+ micromamba run -n oceanarray python -m pip install -e . --no-deps --force-reinstall
38
38
 
39
39
  - name: Build documentation
40
40
  shell: bash -l {0}
41
41
  run: |
42
42
  set -e
43
- micromamba run -n TEST jupyter nbconvert --to notebook --execute notebooks/demo_instrument.ipynb --output=demo_instrument-output.ipynb --ExecutePreprocessor.allow_errors=True
44
- micromamba run -n TEST jupyter nbconvert --to notebook --execute notebooks/demo_mooring.ipynb --output=demo_mooring-output.ipynb --ExecutePreprocessor.allow_errors=True
43
+ micromamba run -n oceanarray jupyter nbconvert --to notebook --execute notebooks/demo_instrument.ipynb --output=demo_instrument-output.ipynb --ExecutePreprocessor.allow_errors=True
44
+ micromamba run -n oceanarray jupyter nbconvert --to notebook --execute notebooks/demo_mooring.ipynb --output=demo_mooring-output.ipynb --ExecutePreprocessor.allow_errors=True
45
45
  mv notebooks/*output.ipynb docs/source/
46
46
  pushd docs
47
- micromamba run -n TEST make clean html
47
+ micromamba run -n oceanarray make clean html
48
48
  popd
49
49
 
50
50
  - name: Deploy to GitHub Pages
@@ -54,3 +54,10 @@ jobs:
54
54
  publish_dir: docs/build/html
55
55
  # Optional: publish_branch: gh-pages
56
56
  # Optional: cname: docs.example.org
57
+ # Replace gh-pages with a single commit each deploy. The built site is
58
+ # regenerable, so its history has no value. The saving is smaller than it
59
+ # looks: git deltas near-identical HTML well, and squashing 70-120 deploys
60
+ # shrinks a fresh clone by only 4-18%. What it does bound is the growth from
61
+ # re-executed demo notebooks, whose embedded PNGs differ every build and so
62
+ # never delta. Current site size dominates, not history - keep _static small.
63
+ force_orphan: true
@@ -0,0 +1,63 @@
1
+ name: Run tests
2
+
3
+ on:
4
+ push:
5
+ branches: ["**"]
6
+ pull_request:
7
+
8
+ jobs:
9
+ unit:
10
+ runs-on: ${{ matrix.os }}
11
+ strategy:
12
+ matrix:
13
+ os: [ubuntu-latest, macos-latest, windows-latest]
14
+ python-version: ["3.11"]
15
+ fail-fast: true
16
+
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - name: Set up Python ${{ matrix.python-version }}
21
+ uses: actions/setup-python@v5
22
+ with:
23
+ python-version: ${{ matrix.python-version }}
24
+ cache: "pip"
25
+
26
+ - name: Install dependencies
27
+ run: |
28
+ python -m pip install --upgrade pip
29
+ pip install -r requirements-dev.txt
30
+
31
+ - name: Install oceanarray
32
+ run: pip install -e . --no-deps --force-reinstall
33
+
34
+ - name: Run unit tests
35
+ run: >
36
+ pytest tests/unit -m "not slow and not local and not needs_seasenselib" -q
37
+ ${{ matrix.os == 'ubuntu-latest' && '--cov=oceanarray --cov-report=term-missing --cov-fail-under=38' || '--no-cov' }}
38
+
39
+ integration:
40
+ runs-on: ubuntu-latest
41
+ steps:
42
+ - uses: actions/checkout@v4
43
+
44
+ - name: Set up Python 3.11
45
+ uses: actions/setup-python@v5
46
+ with:
47
+ python-version: "3.11"
48
+ cache: "pip"
49
+
50
+ - name: Install dependencies
51
+ # requirements-test.txt = requirements-dev.txt + the PyPI seasenselib
52
+ # release, so the golden integration tests (stage2/stage3/grid) run for
53
+ # real here rather than skipping.
54
+ run: |
55
+ python -m pip install --upgrade pip
56
+ pip install -r requirements-test.txt
57
+
58
+ - name: Install oceanarray
59
+ run: pip install -e . --no-deps --force-reinstall
60
+
61
+ - name: Run integration tests
62
+ # needs_seasenselib is NOT excluded here: seasenselib is installed above.
63
+ run: pytest tests/integration -m "not local" -q
@@ -31,8 +31,6 @@ matlab_calibration/
31
31
 
32
32
  logs/*log
33
33
 
34
- # Claude Code configuration
35
- .claude/
36
34
 
37
35
  # VSCode settings
38
36
  .vscode/*
@@ -0,0 +1,117 @@
1
+ # Changelog
2
+
3
+ All notable changes to oceanarray are documented here.
4
+
5
+ ---
6
+
7
+ ## [0.3.0] — 2026-08-11
8
+
9
+ ### Breaking changes
10
+
11
+ - **`oceanarray.logsheet` subpackage deleted** ([#66](https://github.com/ocean-uhh/oceanarray/pull/66)): the deprecated `logsheet` subpackage has been removed from the tree. `oceanarray logsheet` still emits a `DeprecationWarning` and exits 1. Use the standalone [`logsheet`](https://github.com/eleanorfrajka/logsheet) package: `pip install git+https://github.com/eleanorfrajka/logsheet`, then `logsheet build ...`.
12
+ - **`oceanarray run` skips grid when stack fails** ([#65](https://github.com/ocean-uhh/oceanarray/pull/65)): if the stack stage fails, the grid stage is now skipped rather than attempted on incomplete input. This matches `process()` behaviour.
13
+
14
+ ### Bug fixes
15
+
16
+ - **Grid report N² computed at latitude 0**: the grid report derived buoyancy frequency (N²) at latitude 0° because its `_dms_to_deg` import still pointed at the removed `mooring_level` module and failed silently inside a broad `except`. The import now resolves from `utilities`, so N² uses the mooring's actual latitude.
17
+
18
+ ### Refactoring
19
+
20
+ - **`STAGES` registry as single source of truth in CLI dispatch** ([#65](https://github.com/ocean-uhh/oceanarray/pull/65)): `process()` accepts a stage list (always applied in `STAGES` order); `cmd_process` and `cmd_run` route through a single `process()` call; argparse `choices` are derived from `STAGES`.
21
+ - **Plot/report hardening** ([#64](https://github.com/ocean-uhh/oceanarray/pull/64)): `render_b64` guard, `plt.style.context`, `vlabel()` helper, `SIGMA_GRID` fix, and a `VARIABLES` registry (21 entries with `valid_min`/`valid_max`).
22
+
23
+ ### Documentation
24
+
25
+ - Updated developer docs (`project_structure.md`, `methods/standardisation.rst`, `methods/vertical_gridding.rst`, `methods/nortek_coordinate_transform.rst`, `legacy.rst`) to the current `oceanarray.processors.*` module layout after the reorg; fixed broken import examples and API references.
26
+
27
+ ### Tests
28
+
29
+ - Golden Stage 1 tests, reader and `_array` helper tests, plus associated bug fixes and dead-code removal ([#63](https://github.com/ocean-uhh/oceanarray/pull/63)).
30
+
31
+ ---
32
+
33
+ ## [0.2.0] — 2026-08-07
34
+
35
+ ### Breaking changes
36
+
37
+ - **`oceanarray logsheet` disabled**: calling `oceanarray logsheet` now emits a `DeprecationWarning` and exits 1. The `logsheet` subpackage remains in the tree but is unused (deleted in v0.3.0). Use the standalone [`logsheet`](https://github.com/eleanorfrajka/logsheet) package: `pip install git+https://github.com/eleanorfrajka/logsheet`, then `logsheet build ...`.
38
+ - **`--basedir` removed** ([#52](https://github.com/ocean-uhh/oceanarray/pull/52)): use `--raw-dir` and `--proc-dir` instead. See the [migration guide](https://ocean-uhh.github.io/oceanarray/migration.html).
39
+ - **`plotter.py` retired** ([#53](https://github.com/ocean-uhh/oceanarray/pull/53)): the monolithic `oceanarray/plotter.py` and all backward-compatibility re-export shims have been removed. Import from canonical modules (`oceanarray.plotters.current`, `oceanarray.plotters.timeseries`, etc.).
40
+ - **Subpackage reorganisation** ([#49](https://github.com/ocean-uhh/oceanarray/pull/49), [#59](https://github.com/ocean-uhh/oceanarray/pull/59)): processing modules moved from `oceanarray/instrument/` and `oceanarray/mooring/` into `oceanarray.processors.*`. Top-level `oceanarray` imports unchanged; internal paths have moved.
41
+
42
+ ### New features
43
+
44
+ - **`--stage stack grid` in `oceanarray process`**: the `--stage` flag now accepts `stack` and `grid` in addition to `1`, `2`, `3`. Run the full pipeline as `oceanarray process MOORING --stage 1 2 3 stack grid`. New flags `--dt`, `--dp`, `--pmin`, `--pmax` added to `process` (same defaults as `oceanarray run`).
45
+ - **`process()` public API** ([#58](https://github.com/ocean-uhh/oceanarray/pull/58)): `oceanarray.process(mooring_yaml, proc_dir, stages=…)` runs any combination of Stage 1–3, stack, and grid in a single call. `oceanarray.STAGES` is the registry of available stages.
46
+ - **Array report** ([#48](https://github.com/ocean-uhh/oceanarray/pull/48)): `oceanarray report <array.yaml> --array` generates a multi-mooring HTML summary with smart rebuild (only re-renders sections whose NC files are newer than the existing report).
47
+ - **Wave / frequency diagnostics** ([#47](https://github.com/ocean-uhh/oceanarray/pull/47)): rotary power spectra, near-inertial band energy, and wave diagnostics added to ADCP instrument reports.
48
+ - **Release automation** ([#61](https://github.com/ocean-uhh/oceanarray/pull/61)): pushing a `v*` tag now auto-creates a draft GitHub release with PR-based release notes; publishing the draft triggers PyPI upload.
49
+
50
+ ### Bug fixes
51
+
52
+ - **QC flags unified to OceanSITES table** ([#54](https://github.com/ocean-uhh/oceanarray/pull/54)): all QC flag values now use the standard OceanSITES convention (0 no QC, 1 good, 2 probably good, 3 probably bad, 4 bad, 9 missing). Previously mixed conventions caused flag collisions on merge.
53
+ - **Plot regularisation** ([#50](https://github.com/ocean-uhh/oceanarray/pull/50)): fixed irregular time-axis sampling in instrument report figures.
54
+ - **Turbidity `units=MISSING`** ([#61](https://github.com/ocean-uhh/oceanarray/pull/61)): stage1 now strips placeholder `units` strings (`"MISSING"`, `""`) written by the RBR RSK reader when the instrument database has no units entry, and emits a `UserWarning` so the operator can verify the sensor spec.
55
+
56
+ ### Deprecations
57
+
58
+ - **`oceanarray stack`**: deprecated in favour of `oceanarray process MOORING --stage stack`. Emits `DeprecationWarning`. Will be removed in v0.3.0.
59
+ - **`oceanarray grid`**: deprecated in favour of `oceanarray process MOORING --stage grid`. Emits `DeprecationWarning`. Will be removed in v0.3.0.
60
+ - `file_type: rbr-hex-oa` remapped automatically to `rbr-hex` with a `DeprecationWarning`; update mooring YAMLs.
61
+ - `file_type: sbe-asc` remapped automatically to `sbe-ascii`.
62
+
63
+ ### Refactoring
64
+
65
+ - Single-source variable registries in `parameters.py`; `validation.py` derives from it ([#51](https://github.com/ocean-uhh/oceanarray/pull/51)).
66
+ - Figure-returning shape for `report/_plots.py` ([#56](https://github.com/ocean-uhh/oceanarray/pull/56)); `draw_*` helpers relocated to `plotters/` ([#57](https://github.com/ocean-uhh/oceanarray/pull/57)).
67
+ - Type annotations backfilled on `hydrographic.py` and `temporal.py`; two ANN per-file-ignores removed from `pyproject.toml`.
68
+
69
+ ### Tests
70
+
71
+ - Integration chain tests (stage1 → stage2 → stage3 → stack → grid) over committed `dune2_1_2026` fixtures ([#60](https://github.com/ocean-uhh/oceanarray/pull/60)).
72
+ - CI: integration job now installs seasenselib from PyPI; Windows and macOS unit jobs run seasenselib-free.
73
+
74
+ ---
75
+
76
+ ## [0.1.0] — 2026-07-27
77
+
78
+ First public release.
79
+
80
+ ### Processing pipeline
81
+
82
+ - **Stage 1** — raw instrument files → CF-NetCDF: Sea-Bird SBE37 MicroCAT (`sbe-cnv`, `sbe-ascii`), Nortek Aquadopp (`nortek-raw`, `nortek-ascii`, `nortek-csv`), RBR Solo/Duet (`rbr-rsk`, `rbr-dat`), RDI WorkHorse ADCP (`rdi-raw`). Nortek BEAM→XYZ transformation matrix parsed from `.hdr` file and applied at stage 1; matrix stored in output for reproducibility.
83
+ - **Stage 2** — deployment trimming (YAML `deployment_time`/`recovery_time`) and linear clock-drift correction from recovery timestamps.
84
+ - **Stage 3** — QARTOD gross-range and spike QC on T/C/S/P; pressure interpolation (QC flag 8) for instruments without a pressure sensor; Aquadopp XYZ→ENU rotation using heading/pitch/roll + IGRF magnetic declination (`ppigrf`); tilt QC on velocity; potential density via `gsw`.
85
+
86
+ ### Mooring-level commands
87
+
88
+ - `oceanarray stack` — resample all instruments to a common time axis, stack into a single `(time, N_LEVELS)` dataset ordered deep-first.
89
+ - `oceanarray grid` — linearly interpolate the stacked dataset onto a regular pressure grid (`--pmin`, `--pmax`, `--dp`).
90
+
91
+ ### Reporting
92
+
93
+ - `oceanarray report` — self-contained HTML reports (all figures base64-embedded, offline-readable):
94
+ - Mooring summary: deployment metadata, instrument pipeline status, QC flag breakdown, clock corrections, knockdown figures, clock alignment check.
95
+ - Per-instrument pages (`--instruments`): full time series with QC markers, T-S diagram, current roses, data histograms, QC table, scalar metadata.
96
+ - Stack report (`--stack`): pressure/T/S/velocity time series, T-S diagram, current roses, spacing histogram.
97
+ - Grid report (`--grid`): T/S/density pcolormesh, N², velocity sections, T-S diagram, power spectra.
98
+ - Array report (`--array`): position map, summary table with clickable links to mooring reports.
99
+
100
+ ### CLI
101
+
102
+ - `oceanarray process` — run stage 1, 2, and/or 3 for a mooring or a single instrument (`--serial`).
103
+ - `oceanarray run` — complete pipeline in one command (process + stack + grid + report).
104
+ - `oceanarray validate` — check mooring YAML for missing fields and unknown instrument types.
105
+ - `oceanarray list` — print accepted `instrument:` names and `file_type:` values.
106
+ - `oceanarray logsheet` — generate PDF logsheets from YAML instrument inventory.
107
+
108
+ ### Logsheets
109
+
110
+ - `oceanarray logsheet` subcommand generates LaTeX-rendered PDF deployment logsheets from a cruise configuration YAML.
111
+
112
+ ### Notable design choices
113
+
114
+ - Data provenance: all processing parameters (QC thresholds, declination value, transformation matrix) stored as NetCDF attributes so any file can be reprocessed exactly from itself.
115
+ - Discrete colorbars throughout (≤ 20 levels, `BoundaryNorm`).
116
+ - CF-convention variable names and standard names throughout; OceanSITES QC flag values.
117
+ - `seasenselib` is used for raw file reading but is a separate install (`pip install seasenselib --no-deps` — see installation docs).
@@ -0,0 +1,22 @@
1
+ cff-version: 1.2.0
2
+ message: "If you use this software, please cite it using the metadata below."
3
+ authors:
4
+ - family-names: Frajka-Williams
5
+ given-names: Eleanor
6
+ orcid: https://orcid.org/0000-0001-8773-7838
7
+ affiliation: University of Hamburg, Bundesstraße 53, 20146 Hamburg, Germany
8
+ title: oceanarray
9
+ version: 0.3.0
10
+ date-released: 2026-08-11
11
+ url: https://github.com/ocean-uhh/oceanarray
12
+ repository-code: https://github.com/ocean-uhh/oceanarray
13
+ license: MIT
14
+ abstract: >
15
+ Multi-stage processing pipeline for moored oceanographic array observations: converts raw instrument files (Sea-Bird, RBR, Nortek, RDI) to QC-flagged, CF-compliant NetCDF and generates self-contained HTML mooring recovery reports.
16
+ keywords:
17
+ - oceanography
18
+ - mooring
19
+ - ADCP
20
+ - CTD
21
+ - NetCDF
22
+ - quality-control
@@ -0,0 +1,125 @@
1
+ # Contributing to oceanarray
2
+
3
+ Thanks for taking the time to contribute.
4
+
5
+ All contributions are welcome: bug reports, feature suggestions, documentation improvements, and code.
6
+
7
+ ## Table of Contents
8
+
9
+ - [I Have a Question](#i-have-a-question)
10
+ - [Reporting Bugs](#reporting-bugs)
11
+ - [Suggesting Enhancements](#suggesting-enhancements)
12
+ - [Your First Code Contribution](#your-first-code-contribution)
13
+ - [Improving The Documentation](#improving-the-documentation)
14
+
15
+ ---
16
+
17
+ ## I Have a Question
18
+
19
+ Read the [documentation](https://ocean-uhh.github.io/oceanarray/) first.
20
+ Then search [existing issues](https://github.com/ocean-uhh/oceanarray/issues) — your question may already be answered.
21
+
22
+ If you still need help, [open an issue](https://github.com/ocean-uhh/oceanarray/issues/new) and include:
23
+
24
+ - What you were trying to do and what you expected to happen.
25
+ - A minimal reproducible example (e.g. a short script or notebook cell).
26
+ - Your platform, Python version, and `pip show oceanarray seasenselib` output.
27
+
28
+ ---
29
+
30
+ ## Reporting Bugs
31
+
32
+ Security vulnerabilities must be reported by email to [eleanorfrajka@gmail.com](mailto:eleanorfrajka@gmail.com) — do not use the public issue tracker.
33
+
34
+ For all other bugs:
35
+
36
+ 1. Confirm you are on the latest release (`pip show oceanarray`).
37
+ 2. [Open an issue](https://github.com/ocean-uhh/oceanarray/issues/new) with:
38
+ - Steps to reproduce (minimal script if possible).
39
+ - Expected vs. actual behaviour.
40
+ - Full traceback.
41
+ - OS, Python version, `oceanarray` and `seasenselib` versions.
42
+
43
+ ---
44
+
45
+ ## Suggesting Enhancements
46
+
47
+ [Open an issue](https://github.com/ocean-uhh/oceanarray/issues/new) describing:
48
+
49
+ - What you want to do that is currently impossible or inconvenient.
50
+ - Why it would be useful to other users (not just your specific cruise).
51
+ - Whether you are willing to implement it yourself.
52
+
53
+ Keep in mind that oceanarray is designed for reproducible processing of moored array data. Features that require cruise-specific raw data, add heavy new dependencies, or break the CF-NetCDF output contract are unlikely to be merged.
54
+
55
+ ---
56
+
57
+ ## Your First Code Contribution
58
+
59
+ ### Architecture overview
60
+
61
+ | Layer | Modules | Role |
62
+ |-------|---------|------|
63
+ | Tier 1 | `tools/`, `utilities.py` | Pure functions, no side effects |
64
+ | Tier 2 | `processors/stage1.py` … `processors/grid.py` | Processing orchestrators — read, transform, write CF-NetCDF |
65
+ | Tier 3 | `cli.py` | Entry point — argument parsing, subcommand dispatch |
66
+ | — | `plotters/`, `report/` | Visualisation and HTML report generation |
67
+ | — | `analysis/` | Science utilities (filtering, isopycnals, QC) |
68
+ | — | `config/` | Parameters, variable registry, YAML validation |
69
+
70
+ Processing flows from raw files → Stage 1 (CF-NetCDF) → Stage 2 (trimming + clock) → Stage 3 (QC + ENU) → stack → grid.
71
+
72
+ ### Development setup
73
+
74
+ ```bash
75
+ git clone https://github.com/ocean-uhh/oceanarray.git
76
+ cd oceanarray
77
+ python -m venv venv && source venv/bin/activate
78
+ pip install -e .
79
+ pip install -r requirements-dev.txt
80
+ # seasenselib (needed for raw file reading):
81
+ pip install pyrsktools pycnv
82
+ pip install seasenselib --no-deps
83
+ ```
84
+
85
+ ### Workflow
86
+
87
+ 1. Fork the repository and create a feature branch from `main`.
88
+ 2. Make your changes, following the conventions below.
89
+ 3. Run `ruff check . --fix` and then `pytest` — all tests must pass.
90
+ 4. Open a pull request against `main`. Use a title prefixed with `[FEAT]`, `[FIX]`, `[REFACTOR]`, `[DOC]`, `[TEST]`, or `[CLEANUP]`.
91
+
92
+ ### Code conventions
93
+
94
+ - **Docstrings**: NumPy style on every public function and class. Include `Parameters`, `Returns`, and `Raises` sections. Period at the end.
95
+ - **Type annotations**: all public function arguments and return values.
96
+ - **Lint**: `ruff check .` must be clean. No bare `except:`. No suppressed warnings without a comment explaining why.
97
+ - **Units**: never strip or assume units. Use `gsw` for all seawater property calculations.
98
+ - **Plot style**: discrete colorbars (`BoundaryNorm`, ≤ 20 levels); call `plt.style.use(str(P.MPLSTYLE))` at the start of every plot function.
99
+ - **Data provenance**: store all processing parameters (thresholds, coefficients) in NC output attributes so any file can be reprocessed exactly from itself.
100
+
101
+ ### Testing
102
+
103
+ Tests live in `tests/unit/` and `tests/integration/`. Run the full suite:
104
+
105
+ ```bash
106
+ pytest # all tests
107
+ pytest tests/unit -m "not slow and not needs_seasenselib" # without seasenselib
108
+ pytest --cov=oceanarray --cov-report=term-missing -q # with coverage
109
+ ```
110
+
111
+ New or changed code must have test coverage. Integration tests use committed NetCDF fixtures in `tests/fixtures/`.
112
+
113
+ ---
114
+
115
+ ## Improving The Documentation
116
+
117
+ Documentation is built with Sphinx from `docs/source/`. To build locally:
118
+
119
+ ```bash
120
+ pip install -r requirements-dev.txt
121
+ cd docs && make clean html
122
+ open build/html/index.html
123
+ ```
124
+
125
+ Docstring changes are picked up automatically. For narrative docs, edit `.rst` files in `docs/source/`. The API reference is auto-generated from docstrings via `autodoc`.
@@ -1,9 +1,9 @@
1
1
  # Migrating from --basedir to --raw-dir / --proc-dir
2
2
 
3
- The `--basedir` flag is deprecated. All subcommands now accept
4
- `--raw-dir` and `--proc-dir` instead. `--basedir` still works and
5
- will continue to work indefinitely, but it prints a `DeprecationWarning`
6
- on every invocation.
3
+ The `--basedir` flag has been **removed**. All subcommands now require
4
+ `--raw-dir` and `--proc-dir` instead. Passing `--basedir` prints a migration
5
+ message naming the replacement and exits without processing. This document
6
+ explains how to convert an old `--basedir` layout to the current one.
7
7
 
8
8
  ---
9
9
 
@@ -166,3 +166,25 @@ The old `--basedir DIR` resolved paths as:
166
166
  The new `--raw-dir`/`--proc-dir` flags give you explicit control over
167
167
  each root, support mooring-first raw layout, and put logs in a
168
168
  `processing_logs/` subdirectory.
169
+
170
+ ---
171
+
172
+ ## If you call the Python API directly (notebooks / scripts)
173
+
174
+ The same removal touched the Python entry points:
175
+
176
+ - **Processor constructors are keyword-only and required.** Replace
177
+ `MooringProcessor(basedir)` with
178
+ `MooringProcessor(raw_dir=RAW, proc_dir=PROC)`, and
179
+ `Stage2Processor(basedir)` / `Stage3Processor` / `MooringStacker` /
180
+ `MooringGridder` / `MooringReport` / `TimeGriddingProcessor` with
181
+ `proc_dir=PROC` (add `raw_dir=RAW` for stage 1 and the report). A positional
182
+ or `base_dir=` call now raises `TypeError`.
183
+ - **Removed convenience functions:** `stage1_mooring`,
184
+ `process_multiple_moorings`, `stage2_mooring`,
185
+ `process_multiple_moorings_stage2`. Use the `oceanarray` CLI, or loop over
186
+ moorings yourself constructing the processor directly.
187
+ - **`time_gridding_mooring(mooring, proc_dir, ...)`** and
188
+ `process_multiple_moorings_time_gridding` — the second positional argument is
189
+ now the **proc root**, not a cruise base dir. Update call sites; a positional
190
+ `basedir` value will be silently misused as `proc_dir`.
@@ -0,0 +1,120 @@
1
+ Metadata-Version: 2.4
2
+ Name: oceanarray
3
+ Version: 0.3.0
4
+ Summary: Multi-stage processing pipeline for moored oceanographic observations: raw instrument files to QC-flagged CF-compliant NetCDF with automated HTML reports.
5
+ Maintainer-email: Eleanor Frajka-Williams <eleanorfrajka@gmail.com>
6
+ License: MIT License
7
+
8
+ Copyright (c) 2025 Eleanor Frajka-Williams
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
28
+ Project-URL: Documentation, https://ocean-uhh.github.io/oceanarray
29
+ Project-URL: Homepage, https://github.com/ocean-uhh/oceanarray
30
+ Project-URL: Repository, https://github.com/ocean-uhh/oceanarray
31
+ Project-URL: Issue Tracker, https://github.com/ocean-uhh/oceanarray/issues
32
+ Keywords: oceanography,mooring,ADCP,CTD,NetCDF,QC,oceanographic-data,AMOC
33
+ Classifier: Development Status :: 4 - Beta
34
+ Classifier: Intended Audience :: Science/Research
35
+ Classifier: Topic :: Scientific/Engineering :: Oceanography
36
+ Classifier: License :: OSI Approved :: MIT License
37
+ Classifier: Programming Language :: Python :: 3 :: Only
38
+ Classifier: Programming Language :: Python :: 3.9
39
+ Classifier: Programming Language :: Python :: 3.10
40
+ Classifier: Programming Language :: Python :: 3.11
41
+ Classifier: Programming Language :: Python :: 3.12
42
+ Requires-Python: >=3.9
43
+ Description-Content-Type: text/markdown
44
+ License-File: LICENSE
45
+ Requires-Dist: numpy>=1.23
46
+ Requires-Dist: pandas>=2.0
47
+ Requires-Dist: xarray>=2023.12.0
48
+ Requires-Dist: netcdf4>=1.6
49
+ Requires-Dist: scipy>=1.10
50
+ Requires-Dist: matplotlib>=3.7
51
+ Requires-Dist: gsw>=3.6.16
52
+ Requires-Dist: ppigrf
53
+ Requires-Dist: ioos_qc
54
+ Requires-Dist: dolfyn
55
+ Requires-Dist: pycwt
56
+ Requires-Dist: jinja2>=3.0
57
+ Requires-Dist: packaging>=21.0
58
+ Requires-Dist: ruamel.yaml>=0.18
59
+ Dynamic: license-file
60
+
61
+ # OceanArray
62
+
63
+ [![PyPI](https://img.shields.io/pypi/v/oceanarray.svg)](https://pypi.org/project/oceanarray/)
64
+ [![Python versions](https://img.shields.io/pypi/pyversions/oceanarray.svg)](https://pypi.org/project/oceanarray/)
65
+ [![License: MIT](https://img.shields.io/pypi/l/oceanarray.svg)](https://github.com/ocean-uhh/oceanarray/blob/main/LICENSE)
66
+ [![Tests](https://github.com/ocean-uhh/oceanarray/actions/workflows/tests.yml/badge.svg)](https://github.com/ocean-uhh/oceanarray/actions/workflows/tests.yml)
67
+ [![Documentation](https://img.shields.io/badge/docs-ocean--uhh.github.io-blue.svg)](https://ocean-uhh.github.io/oceanarray/)
68
+
69
+ Python tools for processing moored oceanographic array observations from raw instrument files to quality-controlled, CF-compliant NetCDF.
70
+
71
+ **Documentation**: https://ocean-uhh.github.io/oceanarray/
72
+
73
+ ## Installation
74
+
75
+ ```bash
76
+ pip install oceanarray
77
+ ```
78
+
79
+ `seasenselib` is required for reading raw instrument files (available on PyPI but needs `--no-deps`):
80
+
81
+ ```bash
82
+ pip install pyrsktools pycnv
83
+ pip install seasenselib --no-deps
84
+ ```
85
+
86
+ Python 3.9–3.12 is supported.
87
+
88
+ ## Quick start
89
+
90
+ Create a skeleton YAML, fill in the deployment metadata, then process:
91
+
92
+ ```bash
93
+ oceanarray init dsG3_1_2026 --proc-dir /data/proc
94
+ # edit /data/proc/dsG3_1_2026/dsG3_1_2026.mooring.yaml
95
+ oceanarray validate /data/proc/dsG3_1_2026/dsG3_1_2026.mooring.yaml
96
+ oceanarray process dsG3_1_2026 --raw-dir /data/raw --proc-dir /data/proc --stage 1 2 3 stack grid
97
+ oceanarray report dsG3_1_2026 --raw-dir /data/raw --proc-dir /data/proc --all
98
+ ```
99
+
100
+ See the [documentation](https://ocean-uhh.github.io/oceanarray/) for the recommended first-processing workflow, YAML reference, and CLI reference.
101
+
102
+ ## Python API
103
+
104
+ ```python
105
+ import oceanarray
106
+
107
+ oceanarray.process('dsG3_1_2026', raw_dir='/data/raw', proc_dir='/data/proc')
108
+ ```
109
+
110
+ See the [API reference](https://ocean-uhh.github.io/oceanarray/oceanarray.html) for the full interface.
111
+
112
+ ## Acknowledgements
113
+
114
+ Development was assisted by Claude Code (Anthropic) and GitHub Copilot code review.
115
+
116
+ The data-processing approach draws on methods developed for the RAPID mooring array programme (UK/US funded). `oceanarray` is developed toward the DFG Ocean Array infrastructure project (DFG project number 571027118), from which it takes its name, and was first applied in the AEI–DFG MIXSED project (DFG project number 541914507).
117
+
118
+ ## License
119
+
120
+ MIT License