oceanarray 0.1.0__tar.gz → 0.2.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 (270) hide show
  1. {oceanarray-0.1.0 → oceanarray-0.2.0}/.github/ISSUE_TEMPLATE.md +7 -11
  2. {oceanarray-0.1.0 → oceanarray-0.2.0}/.github/PULL_REQUEST_TEMPLATE.md +5 -7
  3. {oceanarray-0.1.0 → oceanarray-0.2.0}/.github/workflows/docs.yml +5 -5
  4. {oceanarray-0.1.0 → oceanarray-0.2.0}/.github/workflows/docs_deploy.yml +5 -5
  5. oceanarray-0.2.0/.github/workflows/tests.yml +61 -0
  6. {oceanarray-0.1.0 → oceanarray-0.2.0}/.gitignore +0 -2
  7. oceanarray-0.2.0/CHANGELOG.md +90 -0
  8. oceanarray-0.2.0/CITATION.cff +24 -0
  9. oceanarray-0.2.0/CONTRIBUTING.md +125 -0
  10. {oceanarray-0.1.0 → oceanarray-0.2.0}/MIGRATION-BASEDIR.md +26 -4
  11. oceanarray-0.2.0/PKG-INFO +108 -0
  12. oceanarray-0.2.0/README.md +48 -0
  13. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/cli_reference.rst +157 -30
  14. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/index.rst +8 -5
  15. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/legacy.rst +4 -4
  16. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/methods/auto_qc.rst +158 -1
  17. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/methods/standardisation.rst +2 -2
  18. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/methods/time_gridding.rst +2 -2
  19. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/migration.rst +6 -10
  20. oceanarray-0.2.0/docs/source/oceanarray.rst +302 -0
  21. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/project_structure.md +0 -1
  22. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/quickstart.rst +1 -1
  23. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/yaml_configuration.rst +3 -3
  24. oceanarray-0.2.0/environment.yml +13 -0
  25. {oceanarray-0.1.0 → oceanarray-0.2.0}/notebooks/demo_climatology.ipynb +8 -7
  26. {oceanarray-0.1.0 → oceanarray-0.2.0}/notebooks/demo_instrument.ipynb +2 -2
  27. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/__init__.py +12 -10
  28. oceanarray-0.2.0/oceanarray/_version.py +1 -0
  29. oceanarray-0.2.0/oceanarray/analysis/__init__.py +20 -0
  30. oceanarray-0.1.0/oceanarray/clock_offset.py → oceanarray-0.2.0/oceanarray/analysis/clock.py +26 -9
  31. oceanarray-0.2.0/oceanarray/analysis/hydrographic.py +325 -0
  32. oceanarray-0.2.0/oceanarray/analysis/science.py +226 -0
  33. oceanarray-0.2.0/oceanarray/analysis/spectral.py +348 -0
  34. oceanarray-0.2.0/oceanarray/analysis/temporal.py +217 -0
  35. oceanarray-0.2.0/oceanarray/analysis/vector.py +115 -0
  36. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/cli.py +598 -140
  37. oceanarray-0.2.0/oceanarray/config/__init__.py +7 -0
  38. {oceanarray-0.1.0/oceanarray → oceanarray-0.2.0/oceanarray/config}/parameters.py +64 -9
  39. {oceanarray-0.1.0/oceanarray → oceanarray-0.2.0/oceanarray/config}/validation.py +28 -65
  40. oceanarray-0.2.0/oceanarray/inspect.py +117 -0
  41. oceanarray-0.2.0/oceanarray/legacy/tools.py +852 -0
  42. oceanarray-0.2.0/oceanarray/paths.py +163 -0
  43. oceanarray-0.2.0/oceanarray/plotters/__init__.py +201 -0
  44. oceanarray-0.2.0/oceanarray/plotters/_cli_legacy.py +316 -0
  45. oceanarray-0.1.0/oceanarray/plotters/_animation.py → oceanarray-0.2.0/oceanarray/plotters/animation.py +2 -2
  46. oceanarray-0.2.0/oceanarray/plotters/current.py +1640 -0
  47. oceanarray-0.2.0/oceanarray/plotters/diagnostic.py +1549 -0
  48. oceanarray-0.2.0/oceanarray/plotters/helpers.py +247 -0
  49. oceanarray-0.2.0/oceanarray/plotters/hydrography.py +465 -0
  50. oceanarray-0.2.0/oceanarray/plotters/primitives.py +336 -0
  51. oceanarray-0.2.0/oceanarray/plotters/spectrum.py +1012 -0
  52. oceanarray-0.2.0/oceanarray/plotters/timeseries.py +582 -0
  53. oceanarray-0.2.0/oceanarray/plotters/ts.py +481 -0
  54. oceanarray-0.2.0/oceanarray/processors/__init__.py +331 -0
  55. oceanarray-0.2.0/oceanarray/processors/caldip.py +1 -0
  56. oceanarray-0.2.0/oceanarray/processors/coordinate.py +719 -0
  57. oceanarray-0.1.0/oceanarray/time_gridding.py → oceanarray-0.2.0/oceanarray/processors/grid.py +295 -60
  58. oceanarray-0.2.0/oceanarray/processors/helpers.py +357 -0
  59. oceanarray-0.2.0/oceanarray/processors/pressure.py +401 -0
  60. oceanarray-0.2.0/oceanarray/processors/qc.py +818 -0
  61. oceanarray-0.2.0/oceanarray/processors/stack.py +692 -0
  62. {oceanarray-0.1.0/oceanarray → oceanarray-0.2.0/oceanarray/processors}/stage1.py +138 -199
  63. {oceanarray-0.1.0/oceanarray → oceanarray-0.2.0/oceanarray/processors}/stage2.py +23 -100
  64. oceanarray-0.2.0/oceanarray/processors/stage3.py +699 -0
  65. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/report/_array.py +297 -11
  66. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/report/_grid.py +63 -36
  67. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/report/_html_helpers.py +27 -45
  68. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/report/_instrument.py +40 -27
  69. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/report/_mooring.py +177 -48
  70. oceanarray-0.2.0/oceanarray/report/_plots.py +979 -0
  71. oceanarray-0.2.0/oceanarray/report/_recovery_table.py +507 -0
  72. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/report/_stack.py +32 -26
  73. oceanarray-0.2.0/oceanarray/tools/__init__.py +33 -0
  74. {oceanarray-0.1.0/oceanarray → oceanarray-0.2.0/oceanarray/tools}/rapid_interp.py +95 -1
  75. {oceanarray-0.1.0/oceanarray → oceanarray-0.2.0/oceanarray/tools}/readers.py +3 -0
  76. {oceanarray-0.1.0/oceanarray → oceanarray-0.2.0/oceanarray/tools}/writers.py +7 -3
  77. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/utilities.py +176 -0
  78. oceanarray-0.2.0/oceanarray.egg-info/PKG-INFO +108 -0
  79. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray.egg-info/SOURCES.txt +56 -25
  80. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray.egg-info/requires.txt +2 -0
  81. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray.egg-info/scm_file_list.json +57 -26
  82. oceanarray-0.2.0/oceanarray.egg-info/scm_version.json +8 -0
  83. {oceanarray-0.1.0 → oceanarray-0.2.0}/pyproject.toml +18 -16
  84. {oceanarray-0.1.0 → oceanarray-0.2.0}/requirements.txt +6 -0
  85. oceanarray-0.2.0/tests/conftest.py +137 -0
  86. oceanarray-0.2.0/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage1.nc +0 -0
  87. oceanarray-0.2.0/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage2.nc +0 -0
  88. oceanarray-0.2.0/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage3.nc +0 -0
  89. oceanarray-0.2.0/tests/fixtures/proc/dune2_1_2026/dune2_1_2026.mooring.yaml +43 -0
  90. oceanarray-0.2.0/tests/fixtures/proc/dune2_1_2026/dune2_1_2026_grid.nc +0 -0
  91. oceanarray-0.2.0/tests/fixtures/proc/dune2_1_2026/dune2_1_2026_stack.nc +0 -0
  92. oceanarray-0.2.0/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage1.nc +0 -0
  93. oceanarray-0.2.0/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage2.nc +0 -0
  94. oceanarray-0.2.0/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage3.nc +0 -0
  95. oceanarray-0.2.0/tests/integration/conftest.py +63 -0
  96. oceanarray-0.2.0/tests/integration/test_pipeline.py +267 -0
  97. oceanarray-0.2.0/tests/integration/test_recovery_table.py +71 -0
  98. oceanarray-0.2.0/tests/integration/test_stage1.py +86 -0
  99. oceanarray-0.2.0/tests/integration/test_stage2.py +111 -0
  100. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/integration/test_time_gridding.py +18 -11
  101. oceanarray-0.2.0/tests/unit/test_cli.py +92 -0
  102. oceanarray-0.2.0/tests/unit/test_flag_merge.py +34 -0
  103. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/unit/test_logsheets.py +8 -8
  104. oceanarray-0.2.0/tests/unit/test_paths.py +129 -0
  105. oceanarray-0.2.0/tests/unit/test_plot_guard.py +253 -0
  106. oceanarray-0.2.0/tests/unit/test_plotters.py +167 -0
  107. oceanarray-0.2.0/tests/unit/test_process_api.py +281 -0
  108. oceanarray-0.2.0/tests/unit/test_recovery_table.py +59 -0
  109. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/unit/test_report.py +8 -21
  110. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/unit/test_stage1.py +42 -44
  111. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/unit/test_stage2.py +10 -45
  112. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/unit/test_stage3.py +59 -11
  113. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/unit/test_time_gridding.py +16 -17
  114. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/unit/test_utilities.py +54 -0
  115. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/unit/test_validation.py +62 -2
  116. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/unit/test_writers.py +1 -1
  117. oceanarray-0.1.0/.github/workflows/tests.yml +0 -35
  118. oceanarray-0.1.0/.pre-commit-config.yaml +0 -57
  119. oceanarray-0.1.0/.vscode/settings.json +0 -37
  120. oceanarray-0.1.0/.vscode/tasks.json +0 -22
  121. oceanarray-0.1.0/CHANGELOG.md +0 -48
  122. oceanarray-0.1.0/CITATION.cff +0 -11
  123. oceanarray-0.1.0/CONTRIBUTING.md +0 -153
  124. oceanarray-0.1.0/PKG-INFO +0 -503
  125. oceanarray-0.1.0/README.md +0 -445
  126. oceanarray-0.1.0/docs/source/oceanarray.rst +0 -165
  127. oceanarray-0.1.0/environment.yml +0 -9
  128. oceanarray-0.1.0/oceanarray/_version.py +0 -1
  129. oceanarray-0.1.0/oceanarray/mooring_level.py +0 -1368
  130. oceanarray-0.1.0/oceanarray/plotter.py +0 -942
  131. oceanarray-0.1.0/oceanarray/plotters/__init__.py +0 -97
  132. oceanarray-0.1.0/oceanarray/plotters/_current.py +0 -705
  133. oceanarray-0.1.0/oceanarray/plotters/_diagnostic.py +0 -667
  134. oceanarray-0.1.0/oceanarray/plotters/_helpers.py +0 -57
  135. oceanarray-0.1.0/oceanarray/plotters/_primitives.py +0 -101
  136. oceanarray-0.1.0/oceanarray/plotters/_section.py +0 -16
  137. oceanarray-0.1.0/oceanarray/plotters/_timeseries.py +0 -11
  138. oceanarray-0.1.0/oceanarray/read_rbr_hex.py +0 -541
  139. oceanarray-0.1.0/oceanarray/report/_plots.py +0 -4284
  140. oceanarray-0.1.0/oceanarray/stage3.py +0 -2494
  141. oceanarray-0.1.0/oceanarray/tools.py +0 -400
  142. oceanarray-0.1.0/oceanarray/transports.py +0 -1
  143. oceanarray-0.1.0/oceanarray.egg-info/PKG-INFO +0 -503
  144. oceanarray-0.1.0/oceanarray.egg-info/scm_version.json +0 -8
  145. oceanarray-0.1.0/tests/conftest.py +0 -50
  146. oceanarray-0.1.0/tests/integration/conftest.py +0 -24
  147. oceanarray-0.1.0/tests/integration/test_stage1.py +0 -147
  148. oceanarray-0.1.0/tests/integration/test_stage2.py +0 -147
  149. oceanarray-0.1.0/tests/unit/test_plotters.py +0 -226
  150. {oceanarray-0.1.0 → oceanarray-0.2.0}/.github/dependabot.yml +0 -0
  151. {oceanarray-0.1.0 → oceanarray-0.2.0}/.github/workflows/pypi.yml +0 -0
  152. {oceanarray-0.1.0 → oceanarray-0.2.0}/LICENSE +0 -0
  153. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/Makefile +0 -0
  154. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/How do I transform a coordinate system manually_ /342/200/223 Nortek Support Center.pdf" +0 -0
  155. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/array_processing.png +0 -0
  156. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/array_processing_v2.png +0 -0
  157. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/code/3_beam_transformation.py +0 -0
  158. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/code/auto_filt.m +0 -0
  159. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/code/hydro_grid.m +0 -0
  160. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/code/microcat2rodb_2.m +0 -0
  161. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/code/microcat2rodb_3.m +0 -0
  162. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/code/microcat_apply_cal.m +0 -0
  163. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/code/microcat_apply_cal_plus.m +0 -0
  164. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/code/microcat_raw2use_003.m +0 -0
  165. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/code/mooring_interp_wb2_3_5.m +0 -0
  166. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/css/custom.css +0 -0
  167. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/github_solo_workflow.png +0 -0
  168. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/github_workflow2.png +0 -0
  169. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/instrument_processing.png +0 -0
  170. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/instrument_processing_v2.png +0 -0
  171. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/instrument_processing_v4.png +0 -0
  172. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/instrument_processing_v5.png +0 -0
  173. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/instrument_processing_v6.png +0 -0
  174. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/logo.png +0 -0
  175. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/mooring_processing.png +0 -0
  176. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/mooring_processing_V2.png +0 -0
  177. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/mooring_processing_v3.png +0 -0
  178. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/mooring_processing_v4.png +0 -0
  179. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/oceanarray_grid_report.png +0 -0
  180. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/oceanarray_icon.png +0 -0
  181. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/oceanarray_instrument_report.png +0 -0
  182. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/oceanarray_report_header.png +0 -0
  183. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/oceanarray_stack_report.png +0 -0
  184. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/_static/rotary_spectrum_plan.rst +0 -0
  185. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/calibration_dips.rst +0 -0
  186. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/clock_offset.rst +0 -0
  187. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/conf.py +0 -0
  188. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/directory_structure.rst +0 -0
  189. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/file_naming_conventions.rst +0 -0
  190. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/logsheets.rst +0 -0
  191. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/methods/acquisition.rst +0 -0
  192. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/methods/calibration.rst +0 -0
  193. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/methods/concatenation.rst +0 -0
  194. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/methods/conversion.rst +0 -0
  195. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/methods/multisite_merging.rst +0 -0
  196. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/methods/nortek_coordinate_transform.rst +0 -0
  197. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/methods/trimming.rst +0 -0
  198. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/methods/vertical_gridding.rst +0 -0
  199. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/oceanSITES_manual.rst +0 -0
  200. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/oceanarray_format.rst +0 -0
  201. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/processing_framework.rst +0 -0
  202. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/reports.rst +0 -0
  203. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/roadmap.rst +0 -0
  204. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/setup.md +0 -0
  205. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/style_guide.md +0 -0
  206. {oceanarray-0.1.0 → oceanarray-0.2.0}/docs/source/troubleshooting.rst +0 -0
  207. {oceanarray-0.1.0 → oceanarray-0.2.0}/notebooks/demo_check_clock.ipynb +0 -0
  208. {oceanarray-0.1.0 → oceanarray-0.2.0}/notebooks/demo_clock_offset.ipynb +0 -0
  209. {oceanarray-0.1.0 → oceanarray-0.2.0}/notebooks/demo_mooring.ipynb +0 -0
  210. {oceanarray-0.1.0 → oceanarray-0.2.0}/notebooks/demo_stage1.ipynb +0 -0
  211. {oceanarray-0.1.0 → oceanarray-0.2.0}/notebooks/demo_stage2.ipynb +0 -0
  212. {oceanarray-0.1.0 → oceanarray-0.2.0}/notebooks/demo_step1.ipynb +0 -0
  213. {oceanarray-0.1.0 → oceanarray-0.2.0}/notebooks/dsE_1_2018_microcat_7518_temperature.png +0 -0
  214. {oceanarray-0.1.0 → oceanarray-0.2.0}/notebooks/legacy/README.md +0 -0
  215. {oceanarray-0.1.0 → oceanarray-0.2.0}/notebooks/legacy/demo_batch_instrument.ipynb +0 -0
  216. {oceanarray-0.1.0 → oceanarray-0.2.0}/notebooks/legacy/demo_instrument_rdb.ipynb +0 -0
  217. {oceanarray-0.1.0 → oceanarray-0.2.0}/notebooks/legacy/demo_mooring_rdb.ipynb +0 -0
  218. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/config/OS1_sensor_attrs.yaml +0 -0
  219. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/config/OS1_var_names.yaml +0 -0
  220. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/config/OS1_vocab_attrs.yaml +0 -0
  221. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/config/legacy/project_RAPID.yaml +0 -0
  222. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/config/legacy/rodb_keys.txt +0 -0
  223. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/config/legacy/rodb_keys.yaml +0 -0
  224. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/config/logging.yaml +0 -0
  225. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/legacy/__init__.py +0 -0
  226. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/legacy/caldip.py +0 -0
  227. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/legacy/convertOS.py +0 -0
  228. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/legacy/find_deployment.py +0 -0
  229. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/legacy/mooring_rodb.py +0 -0
  230. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/legacy/process_rodb.py +0 -0
  231. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/legacy/rodb.py +0 -0
  232. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logger.py +0 -0
  233. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/__init__.py +0 -0
  234. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/_columns.py +0 -0
  235. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/_config.py +0 -0
  236. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/_firmware.py +0 -0
  237. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/_latex.py +0 -0
  238. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/_render.py +0 -0
  239. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/builders/__init__.py +0 -0
  240. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/builders/caldip_download.py +0 -0
  241. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/builders/caldip_setup.py +0 -0
  242. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/builders/deployment_setup.py +0 -0
  243. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/builders/mooring_download.py +0 -0
  244. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/builders/recovery.py +0 -0
  245. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/data/column_defs.yaml +0 -0
  246. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/data/latex_templates/_base_instrument.tex.j2 +0 -0
  247. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/data/latex_templates/caldip_download.tex.j2 +0 -0
  248. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/data/latex_templates/caldip_setup.tex.j2 +0 -0
  249. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/data/latex_templates/deployment_setup.tex.j2 +0 -0
  250. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/data/latex_templates/mooring_download.tex.j2 +0 -0
  251. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/logsheet/data/latex_templates/recovery.tex.j2 +0 -0
  252. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/oceanarray.mplstyle +0 -0
  253. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray/report/__init__.py +0 -0
  254. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray.egg-info/dependency_links.txt +0 -0
  255. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray.egg-info/entry_points.txt +0 -0
  256. {oceanarray-0.1.0 → oceanarray-0.2.0}/oceanarray.egg-info/top_level.txt +0 -0
  257. {oceanarray-0.1.0 → oceanarray-0.2.0}/pytest.ini +0 -0
  258. {oceanarray-0.1.0 → oceanarray-0.2.0}/requirements-dev.txt +0 -0
  259. {oceanarray-0.1.0 → oceanarray-0.2.0}/requirements-test.txt +0 -0
  260. {oceanarray-0.1.0 → oceanarray-0.2.0}/setup.cfg +0 -0
  261. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/integration/__init__.py +0 -0
  262. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/integration/test_readers.py +0 -0
  263. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/legacy/__init__.py +0 -0
  264. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/legacy/test_convertOS.py +0 -0
  265. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/legacy/test_mooring_rodb.py +0 -0
  266. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/legacy/test_process_rodb.py +0 -0
  267. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/legacy/test_rodb.py +0 -0
  268. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/unit/__init__.py +0 -0
  269. {oceanarray-0.1.0 → oceanarray-0.2.0}/tests/unit/test_logger.py +0 -0
  270. {oceanarray-0.1.0 → oceanarray-0.2.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
@@ -0,0 +1,61 @@
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: pytest tests/unit -m "not slow and not local and not needs_seasenselib" -q
36
+
37
+ integration:
38
+ runs-on: ubuntu-latest
39
+ steps:
40
+ - uses: actions/checkout@v4
41
+
42
+ - name: Set up Python 3.11
43
+ uses: actions/setup-python@v5
44
+ with:
45
+ python-version: "3.11"
46
+ cache: "pip"
47
+
48
+ - name: Install dependencies
49
+ # requirements-test.txt = requirements-dev.txt + the PyPI seasenselib
50
+ # release, so the golden integration tests (stage2/stage3/grid) run for
51
+ # real here rather than skipping.
52
+ run: |
53
+ python -m pip install --upgrade pip
54
+ pip install -r requirements-test.txt
55
+
56
+ - name: Install oceanarray
57
+ run: pip install -e . --no-deps --force-reinstall
58
+
59
+ - name: Run integration tests
60
+ # needs_seasenselib is NOT excluded here: seasenselib is installed above.
61
+ 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,90 @@
1
+ # Changelog
2
+
3
+ All notable changes to oceanarray are documented here.
4
+
5
+ ---
6
+
7
+ ## [0.2.0] — unreleased
8
+
9
+ ### Breaking changes
10
+
11
+ - **`--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).
12
+ - **`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.).
13
+ - **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.
14
+
15
+ ### New features
16
+
17
+ - **`--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`).
18
+ - **`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.
19
+ - **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).
20
+ - **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.
21
+ - **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.
22
+
23
+ ### Bug fixes
24
+
25
+ - **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.
26
+ - **Plot regularisation** ([#50](https://github.com/ocean-uhh/oceanarray/pull/50)): fixed irregular time-axis sampling in instrument report figures.
27
+ - **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.
28
+
29
+ ### Deprecations
30
+
31
+ - **`oceanarray stack`**: deprecated in favour of `oceanarray process MOORING --stage stack`. Emits `DeprecationWarning`. Will be removed in v0.3.0.
32
+ - **`oceanarray grid`**: deprecated in favour of `oceanarray process MOORING --stage grid`. Emits `DeprecationWarning`. Will be removed in v0.3.0.
33
+ - `file_type: rbr-hex-oa` remapped automatically to `rbr-hex` with a `DeprecationWarning`; update mooring YAMLs.
34
+ - `file_type: sbe-asc` remapped automatically to `sbe-ascii`.
35
+
36
+ ### Refactoring
37
+
38
+ - Single-source variable registries in `parameters.py`; `validation.py` derives from it ([#51](https://github.com/ocean-uhh/oceanarray/pull/51)).
39
+ - 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)).
40
+ - Type annotations backfilled on `hydrographic.py` and `temporal.py`; two ANN per-file-ignores removed from `pyproject.toml`.
41
+
42
+ ### Tests
43
+
44
+ - Integration chain tests (stage1 → stage2 → stage3 → stack → grid) over committed `dune2_1_2026` fixtures ([#60](https://github.com/ocean-uhh/oceanarray/pull/60)).
45
+ - CI: integration job now installs seasenselib from PyPI; Windows and macOS unit jobs run seasenselib-free.
46
+
47
+ ---
48
+
49
+ ## [0.1.0] — 2026-07-27
50
+
51
+ First public release.
52
+
53
+ ### Processing pipeline
54
+
55
+ - **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.
56
+ - **Stage 2** — deployment trimming (YAML `deployment_time`/`recovery_time`) and linear clock-drift correction from recovery timestamps.
57
+ - **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`.
58
+
59
+ ### Mooring-level commands
60
+
61
+ - `oceanarray stack` — resample all instruments to a common time axis, stack into a single `(time, N_LEVELS)` dataset ordered deep-first.
62
+ - `oceanarray grid` — linearly interpolate the stacked dataset onto a regular pressure grid (`--pmin`, `--pmax`, `--dp`).
63
+
64
+ ### Reporting
65
+
66
+ - `oceanarray report` — self-contained HTML reports (all figures base64-embedded, offline-readable):
67
+ - Mooring summary: deployment metadata, instrument pipeline status, QC flag breakdown, clock corrections, knockdown figures, clock alignment check.
68
+ - Per-instrument pages (`--instruments`): full time series with QC markers, T-S diagram, current roses, data histograms, QC table, scalar metadata.
69
+ - Stack report (`--stack`): pressure/T/S/velocity time series, T-S diagram, current roses, spacing histogram.
70
+ - Grid report (`--grid`): T/S/density pcolormesh, N², velocity sections, T-S diagram, power spectra.
71
+ - Array report (`--array`): position map, summary table with clickable links to mooring reports.
72
+
73
+ ### CLI
74
+
75
+ - `oceanarray process` — run stage 1, 2, and/or 3 for a mooring or a single instrument (`--serial`).
76
+ - `oceanarray run` — complete pipeline in one command (process + stack + grid + report).
77
+ - `oceanarray validate` — check mooring YAML for missing fields and unknown instrument types.
78
+ - `oceanarray list` — print accepted `instrument:` names and `file_type:` values.
79
+ - `oceanarray logsheet` — generate PDF logsheets from YAML instrument inventory.
80
+
81
+ ### Logsheets
82
+
83
+ - `oceanarray logsheet` subcommand generates LaTeX-rendered PDF deployment logsheets from a cruise configuration YAML.
84
+
85
+ ### Notable design choices
86
+
87
+ - Data provenance: all processing parameters (QC thresholds, declination value, transformation matrix) stored as NetCDF attributes so any file can be reprocessed exactly from itself.
88
+ - Discrete colorbars throughout (≤ 20 levels, `BoundaryNorm`).
89
+ - CF-convention variable names and standard names throughout; OceanSITES QC flag values.
90
+ - `seasenselib` is used for raw file reading but is a separate install (`pip install seasenselib --no-deps` — see installation docs).
@@ -0,0 +1,24 @@
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.2.0
10
+ date-released: 2026-07-27
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:
16
+ converts raw instrument files (Sea-Bird, RBR, Nortek, RDI) to QC-flagged,
17
+ CF-compliant NetCDF and generates self-contained HTML mooring recovery reports.
18
+ keywords:
19
+ - oceanography
20
+ - mooring
21
+ - ADCP
22
+ - CTD
23
+ - NetCDF
24
+ - 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,108 @@
1
+ Metadata-Version: 2.4
2
+ Name: oceanarray
3
+ Version: 0.2.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
+ Python tools for processing moored oceanographic array observations from raw instrument files to quality-controlled, CF-compliant NetCDF.
64
+
65
+ **Documentation**: https://ocean-uhh.github.io/oceanarray/
66
+
67
+ ## Installation
68
+
69
+ ```bash
70
+ pip install oceanarray
71
+ ```
72
+
73
+ `seasenselib` is required for reading raw instrument files (available on PyPI but needs `--no-deps`):
74
+
75
+ ```bash
76
+ pip install pyrsktools pycnv
77
+ pip install seasenselib --no-deps
78
+ ```
79
+
80
+ Python 3.9–3.12 is supported.
81
+
82
+ ## Quick start
83
+
84
+ Create a skeleton YAML, fill in the deployment metadata, then process:
85
+
86
+ ```bash
87
+ oceanarray init dsG3_1_2026 --proc-dir /data/proc
88
+ # edit /data/proc/dsG3_1_2026/dsG3_1_2026.mooring.yaml
89
+ oceanarray validate /data/proc/dsG3_1_2026/dsG3_1_2026.mooring.yaml
90
+ oceanarray process dsG3_1_2026 --raw-dir /data/raw --proc-dir /data/proc --stage 1 2 3 stack grid
91
+ oceanarray report dsG3_1_2026 --raw-dir /data/raw --proc-dir /data/proc --all
92
+ ```
93
+
94
+ See the [documentation](https://ocean-uhh.github.io/oceanarray/) for the recommended first-processing workflow, YAML reference, and CLI reference.
95
+
96
+ ## Python API
97
+
98
+ ```python
99
+ import oceanarray
100
+
101
+ oceanarray.process('dsG3_1_2026', raw_dir='/data/raw', proc_dir='/data/proc')
102
+ ```
103
+
104
+ See the [API reference](https://ocean-uhh.github.io/oceanarray/oceanarray.html) for the full interface.
105
+
106
+ ## License
107
+
108
+ MIT License
@@ -0,0 +1,48 @@
1
+ # OceanArray
2
+
3
+ Python tools for processing moored oceanographic array observations from raw instrument files to quality-controlled, CF-compliant NetCDF.
4
+
5
+ **Documentation**: https://ocean-uhh.github.io/oceanarray/
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ pip install oceanarray
11
+ ```
12
+
13
+ `seasenselib` is required for reading raw instrument files (available on PyPI but needs `--no-deps`):
14
+
15
+ ```bash
16
+ pip install pyrsktools pycnv
17
+ pip install seasenselib --no-deps
18
+ ```
19
+
20
+ Python 3.9–3.12 is supported.
21
+
22
+ ## Quick start
23
+
24
+ Create a skeleton YAML, fill in the deployment metadata, then process:
25
+
26
+ ```bash
27
+ oceanarray init dsG3_1_2026 --proc-dir /data/proc
28
+ # edit /data/proc/dsG3_1_2026/dsG3_1_2026.mooring.yaml
29
+ oceanarray validate /data/proc/dsG3_1_2026/dsG3_1_2026.mooring.yaml
30
+ oceanarray process dsG3_1_2026 --raw-dir /data/raw --proc-dir /data/proc --stage 1 2 3 stack grid
31
+ oceanarray report dsG3_1_2026 --raw-dir /data/raw --proc-dir /data/proc --all
32
+ ```
33
+
34
+ See the [documentation](https://ocean-uhh.github.io/oceanarray/) for the recommended first-processing workflow, YAML reference, and CLI reference.
35
+
36
+ ## Python API
37
+
38
+ ```python
39
+ import oceanarray
40
+
41
+ oceanarray.process('dsG3_1_2026', raw_dir='/data/raw', proc_dir='/data/proc')
42
+ ```
43
+
44
+ See the [API reference](https://ocean-uhh.github.io/oceanarray/oceanarray.html) for the full interface.
45
+
46
+ ## License
47
+
48
+ MIT License