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.
- {oceanarray-0.1.0 → oceanarray-0.3.0}/.github/ISSUE_TEMPLATE.md +7 -11
- {oceanarray-0.1.0 → oceanarray-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +5 -7
- {oceanarray-0.1.0 → oceanarray-0.3.0}/.github/workflows/docs.yml +5 -5
- {oceanarray-0.1.0 → oceanarray-0.3.0}/.github/workflows/docs_deploy.yml +12 -5
- oceanarray-0.3.0/.github/workflows/tests.yml +63 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/.gitignore +0 -2
- oceanarray-0.3.0/CHANGELOG.md +117 -0
- oceanarray-0.3.0/CITATION.cff +22 -0
- oceanarray-0.3.0/CONTRIBUTING.md +125 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/MIGRATION-BASEDIR.md +26 -4
- oceanarray-0.3.0/PKG-INFO +120 -0
- oceanarray-0.3.0/README.md +60 -0
- oceanarray-0.3.0/docs/source/_static/logo.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/cli_reference.rst +158 -128
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/file_naming_conventions.rst +4 -3
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/index.rst +8 -12
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/legacy.rst +5 -5
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/auto_qc.rst +158 -1
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/nortek_coordinate_transform.rst +4 -4
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/standardisation.rst +12 -11
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/time_gridding.rst +2 -2
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/vertical_gridding.rst +2 -2
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/migration.rst +6 -10
- oceanarray-0.3.0/docs/source/oceanarray.rst +293 -0
- oceanarray-0.3.0/docs/source/project_structure.md +211 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/quickstart.rst +1 -1
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/yaml_configuration.rst +3 -3
- oceanarray-0.3.0/environment.yml +13 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/demo_climatology.ipynb +8 -7
- {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/demo_instrument.ipynb +2 -2
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/__init__.py +12 -10
- oceanarray-0.3.0/oceanarray/_version.py +1 -0
- oceanarray-0.3.0/oceanarray/analysis/__init__.py +20 -0
- oceanarray-0.1.0/oceanarray/clock_offset.py → oceanarray-0.3.0/oceanarray/analysis/clock.py +26 -9
- oceanarray-0.3.0/oceanarray/analysis/hydrographic.py +325 -0
- oceanarray-0.3.0/oceanarray/analysis/science.py +226 -0
- oceanarray-0.3.0/oceanarray/analysis/spectral.py +348 -0
- oceanarray-0.3.0/oceanarray/analysis/temporal.py +217 -0
- oceanarray-0.3.0/oceanarray/analysis/vector.py +115 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/cli.py +653 -407
- oceanarray-0.3.0/oceanarray/config/__init__.py +7 -0
- {oceanarray-0.1.0/oceanarray → oceanarray-0.3.0/oceanarray/config}/parameters.py +289 -12
- {oceanarray-0.1.0/oceanarray → oceanarray-0.3.0/oceanarray/config}/validation.py +28 -65
- oceanarray-0.3.0/oceanarray/inspect.py +117 -0
- oceanarray-0.3.0/oceanarray/legacy/tools.py +852 -0
- oceanarray-0.3.0/oceanarray/paths.py +163 -0
- oceanarray-0.3.0/oceanarray/plotters/__init__.py +201 -0
- oceanarray-0.3.0/oceanarray/plotters/_cli_legacy.py +316 -0
- oceanarray-0.1.0/oceanarray/plotters/_animation.py → oceanarray-0.3.0/oceanarray/plotters/animation.py +2 -2
- oceanarray-0.3.0/oceanarray/plotters/current.py +1641 -0
- oceanarray-0.3.0/oceanarray/plotters/diagnostic.py +1553 -0
- oceanarray-0.3.0/oceanarray/plotters/helpers.py +244 -0
- oceanarray-0.3.0/oceanarray/plotters/hydrography.py +465 -0
- oceanarray-0.3.0/oceanarray/plotters/primitives.py +336 -0
- oceanarray-0.3.0/oceanarray/plotters/spectrum.py +1009 -0
- oceanarray-0.3.0/oceanarray/plotters/timeseries.py +581 -0
- oceanarray-0.3.0/oceanarray/plotters/ts.py +482 -0
- oceanarray-0.3.0/oceanarray/processors/__init__.py +352 -0
- oceanarray-0.3.0/oceanarray/processors/caldip.py +1 -0
- oceanarray-0.3.0/oceanarray/processors/coordinate.py +719 -0
- oceanarray-0.1.0/oceanarray/time_gridding.py → oceanarray-0.3.0/oceanarray/processors/grid.py +295 -60
- oceanarray-0.3.0/oceanarray/processors/helpers.py +357 -0
- oceanarray-0.3.0/oceanarray/processors/pressure.py +401 -0
- oceanarray-0.3.0/oceanarray/processors/qc.py +770 -0
- oceanarray-0.3.0/oceanarray/processors/stack.py +692 -0
- {oceanarray-0.1.0/oceanarray → oceanarray-0.3.0/oceanarray/processors}/stage1.py +139 -200
- {oceanarray-0.1.0/oceanarray → oceanarray-0.3.0/oceanarray/processors}/stage2.py +24 -101
- oceanarray-0.3.0/oceanarray/processors/stage3.py +711 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/report/_array.py +313 -37
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/report/_grid.py +79 -60
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/report/_html_helpers.py +27 -45
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/report/_instrument.py +40 -27
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/report/_mooring.py +177 -48
- oceanarray-0.3.0/oceanarray/report/_plots.py +1003 -0
- oceanarray-0.3.0/oceanarray/report/_recovery_table.py +499 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/report/_stack.py +142 -133
- oceanarray-0.3.0/oceanarray/tools/__init__.py +33 -0
- {oceanarray-0.1.0/oceanarray → oceanarray-0.3.0/oceanarray/tools}/rapid_interp.py +95 -1
- {oceanarray-0.1.0/oceanarray → oceanarray-0.3.0/oceanarray/tools}/readers.py +3 -0
- {oceanarray-0.1.0/oceanarray → oceanarray-0.3.0/oceanarray/tools}/writers.py +7 -3
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/utilities.py +176 -0
- oceanarray-0.3.0/oceanarray.egg-info/PKG-INFO +120 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray.egg-info/SOURCES.txt +65 -47
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray.egg-info/requires.txt +2 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray.egg-info/scm_file_list.json +194 -176
- oceanarray-0.3.0/oceanarray.egg-info/scm_version.json +8 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/pyproject.toml +12 -31
- {oceanarray-0.1.0 → oceanarray-0.3.0}/requirements-dev.txt +0 -3
- {oceanarray-0.1.0 → oceanarray-0.3.0}/requirements.txt +6 -0
- oceanarray-0.3.0/tests/conftest.py +137 -0
- oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage1.nc +0 -0
- oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage2.nc +0 -0
- oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage3.nc +0 -0
- oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/dune2_1_2026.mooring.yaml +43 -0
- oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/dune2_1_2026_grid.nc +0 -0
- oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/dune2_1_2026_stack.nc +0 -0
- oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage1.nc +0 -0
- oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage2.nc +0 -0
- oceanarray-0.3.0/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage3.nc +0 -0
- oceanarray-0.3.0/tests/fixtures/raw/dune2_1_2026/aquadopp/9920_recovery.dat +9960 -0
- oceanarray-0.3.0/tests/fixtures/raw/dune2_1_2026/aquadopp/9920_recovery.hdr +174 -0
- oceanarray-0.3.0/tests/fixtures/raw/dune2_1_2026/microcat/2941_recovery.asc +19948 -0
- oceanarray-0.3.0/tests/fixtures/regenerate_dune2_microcat.py +73 -0
- oceanarray-0.3.0/tests/integration/conftest.py +63 -0
- oceanarray-0.3.0/tests/integration/test_pipeline.py +267 -0
- oceanarray-0.3.0/tests/integration/test_readers.py +273 -0
- oceanarray-0.3.0/tests/integration/test_recovery_table.py +71 -0
- oceanarray-0.3.0/tests/integration/test_stage1.py +86 -0
- oceanarray-0.3.0/tests/integration/test_stage1_from_raw.py +158 -0
- oceanarray-0.3.0/tests/integration/test_stage2.py +111 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/integration/test_time_gridding.py +18 -11
- oceanarray-0.3.0/tests/test_imports.py +26 -0
- oceanarray-0.3.0/tests/unit/test_array.py +233 -0
- oceanarray-0.3.0/tests/unit/test_cli.py +164 -0
- oceanarray-0.3.0/tests/unit/test_flag_merge.py +34 -0
- oceanarray-0.3.0/tests/unit/test_parameters.py +122 -0
- oceanarray-0.3.0/tests/unit/test_paths.py +129 -0
- oceanarray-0.3.0/tests/unit/test_plot_guard.py +272 -0
- oceanarray-0.3.0/tests/unit/test_plotters.py +167 -0
- oceanarray-0.3.0/tests/unit/test_process_api.py +401 -0
- oceanarray-0.3.0/tests/unit/test_recovery_table.py +59 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_report.py +8 -21
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_stage1.py +42 -44
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_stage2.py +10 -45
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_stage3.py +68 -20
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_time_gridding.py +16 -17
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_utilities.py +54 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_validation.py +62 -2
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_writers.py +1 -1
- oceanarray-0.1.0/.github/workflows/tests.yml +0 -35
- oceanarray-0.1.0/.pre-commit-config.yaml +0 -57
- oceanarray-0.1.0/.vscode/settings.json +0 -37
- oceanarray-0.1.0/.vscode/tasks.json +0 -22
- oceanarray-0.1.0/CHANGELOG.md +0 -48
- oceanarray-0.1.0/CITATION.cff +0 -11
- oceanarray-0.1.0/CONTRIBUTING.md +0 -153
- oceanarray-0.1.0/PKG-INFO +0 -503
- oceanarray-0.1.0/README.md +0 -445
- oceanarray-0.1.0/docs/source/_static/logo.png +0 -0
- oceanarray-0.1.0/docs/source/logsheets.rst +0 -223
- oceanarray-0.1.0/docs/source/oceanarray.rst +0 -165
- oceanarray-0.1.0/docs/source/project_structure.md +0 -219
- oceanarray-0.1.0/environment.yml +0 -9
- oceanarray-0.1.0/oceanarray/_version.py +0 -1
- oceanarray-0.1.0/oceanarray/logsheet/__init__.py +0 -60
- oceanarray-0.1.0/oceanarray/logsheet/_columns.py +0 -97
- oceanarray-0.1.0/oceanarray/logsheet/_config.py +0 -245
- oceanarray-0.1.0/oceanarray/logsheet/_firmware.py +0 -43
- oceanarray-0.1.0/oceanarray/logsheet/_latex.py +0 -128
- oceanarray-0.1.0/oceanarray/logsheet/_render.py +0 -126
- oceanarray-0.1.0/oceanarray/logsheet/builders/__init__.py +0 -13
- oceanarray-0.1.0/oceanarray/logsheet/builders/caldip_download.py +0 -195
- oceanarray-0.1.0/oceanarray/logsheet/builders/caldip_setup.py +0 -188
- oceanarray-0.1.0/oceanarray/logsheet/builders/deployment_setup.py +0 -218
- oceanarray-0.1.0/oceanarray/logsheet/builders/mooring_download.py +0 -243
- oceanarray-0.1.0/oceanarray/logsheet/builders/recovery.py +0 -157
- oceanarray-0.1.0/oceanarray/logsheet/data/column_defs.yaml +0 -686
- oceanarray-0.1.0/oceanarray/logsheet/data/latex_templates/_base_instrument.tex.j2 +0 -42
- oceanarray-0.1.0/oceanarray/logsheet/data/latex_templates/caldip_download.tex.j2 +0 -47
- oceanarray-0.1.0/oceanarray/logsheet/data/latex_templates/caldip_setup.tex.j2 +0 -70
- oceanarray-0.1.0/oceanarray/logsheet/data/latex_templates/deployment_setup.tex.j2 +0 -97
- oceanarray-0.1.0/oceanarray/logsheet/data/latex_templates/mooring_download.tex.j2 +0 -54
- oceanarray-0.1.0/oceanarray/logsheet/data/latex_templates/recovery.tex.j2 +0 -103
- oceanarray-0.1.0/oceanarray/mooring_level.py +0 -1368
- oceanarray-0.1.0/oceanarray/plotter.py +0 -942
- oceanarray-0.1.0/oceanarray/plotters/__init__.py +0 -97
- oceanarray-0.1.0/oceanarray/plotters/_current.py +0 -705
- oceanarray-0.1.0/oceanarray/plotters/_diagnostic.py +0 -667
- oceanarray-0.1.0/oceanarray/plotters/_helpers.py +0 -57
- oceanarray-0.1.0/oceanarray/plotters/_primitives.py +0 -101
- oceanarray-0.1.0/oceanarray/plotters/_section.py +0 -16
- oceanarray-0.1.0/oceanarray/plotters/_timeseries.py +0 -11
- oceanarray-0.1.0/oceanarray/read_rbr_hex.py +0 -541
- oceanarray-0.1.0/oceanarray/report/_plots.py +0 -4284
- oceanarray-0.1.0/oceanarray/stage3.py +0 -2494
- oceanarray-0.1.0/oceanarray/tools.py +0 -400
- oceanarray-0.1.0/oceanarray/transports.py +0 -1
- oceanarray-0.1.0/oceanarray.egg-info/PKG-INFO +0 -503
- oceanarray-0.1.0/oceanarray.egg-info/scm_version.json +0 -8
- oceanarray-0.1.0/tests/conftest.py +0 -50
- oceanarray-0.1.0/tests/integration/conftest.py +0 -24
- oceanarray-0.1.0/tests/integration/test_readers.py +0 -3
- oceanarray-0.1.0/tests/integration/test_stage1.py +0 -147
- oceanarray-0.1.0/tests/integration/test_stage2.py +0 -147
- oceanarray-0.1.0/tests/unit/test_logsheets.py +0 -678
- oceanarray-0.1.0/tests/unit/test_plotters.py +0 -226
- {oceanarray-0.1.0 → oceanarray-0.3.0}/.github/dependabot.yml +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/.github/workflows/pypi.yml +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/LICENSE +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/Makefile +0 -0
- {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
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/array_processing.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/array_processing_v2.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/3_beam_transformation.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/auto_filt.m +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/hydro_grid.m +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat2rodb_2.m +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat2rodb_3.m +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat_apply_cal.m +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat_apply_cal_plus.m +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat_raw2use_003.m +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/code/mooring_interp_wb2_3_5.m +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/css/custom.css +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/github_solo_workflow.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/github_workflow2.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing_v2.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing_v4.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing_v5.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing_v6.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/mooring_processing.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/mooring_processing_V2.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/mooring_processing_v3.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/mooring_processing_v4.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_grid_report.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_icon.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_instrument_report.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_report_header.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_stack_report.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/_static/rotary_spectrum_plan.rst +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/calibration_dips.rst +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/clock_offset.rst +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/conf.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/directory_structure.rst +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/acquisition.rst +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/calibration.rst +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/concatenation.rst +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/conversion.rst +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/multisite_merging.rst +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/methods/trimming.rst +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/oceanSITES_manual.rst +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/oceanarray_format.rst +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/processing_framework.rst +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/reports.rst +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/roadmap.rst +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/setup.md +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/style_guide.md +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/docs/source/troubleshooting.rst +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/demo_check_clock.ipynb +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/demo_clock_offset.ipynb +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/demo_mooring.ipynb +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/demo_stage1.ipynb +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/demo_stage2.ipynb +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/demo_step1.ipynb +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/dsE_1_2018_microcat_7518_temperature.png +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/legacy/README.md +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/legacy/demo_batch_instrument.ipynb +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/legacy/demo_instrument_rdb.ipynb +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/notebooks/legacy/demo_mooring_rdb.ipynb +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/config/OS1_sensor_attrs.yaml +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/config/OS1_var_names.yaml +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/config/legacy/project_RAPID.yaml +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/config/legacy/rodb_keys.txt +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/config/legacy/rodb_keys.yaml +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/config/logging.yaml +0 -0
- {oceanarray-0.1.0/oceanarray/config → oceanarray-0.3.0/oceanarray/legacy}/OS1_vocab_attrs.yaml +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/legacy/__init__.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/legacy/caldip.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/legacy/convertOS.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/legacy/find_deployment.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/legacy/mooring_rodb.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/legacy/process_rodb.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/legacy/rodb.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/logger.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/oceanarray.mplstyle +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray/report/__init__.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray.egg-info/dependency_links.txt +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray.egg-info/entry_points.txt +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/oceanarray.egg-info/top_level.txt +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/pytest.ini +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/requirements-test.txt +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/setup.cfg +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/integration/__init__.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/legacy/__init__.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/legacy/test_convertOS.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/legacy/test_mooring_rodb.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/legacy/test_process_rodb.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/legacy/test_rodb.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/__init__.py +0 -0
- {oceanarray-0.1.0 → oceanarray-0.3.0}/tests/unit/test_logger.py +0 -0
- {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
|
|
4
|
-
title: "[Bug] <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
|
|
36
|
+
- OS: [e.g., macOS 13.3, Ubuntu 22.04]
|
|
37
37
|
- Python version: [e.g., 3.11]
|
|
38
|
-
-
|
|
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/
|
|
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
|
|
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
|
|
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
|
|
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 [
|
|
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 `
|
|
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
|
|
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
|
|
38
|
-
micromamba run -n
|
|
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
|
|
45
|
-
micromamba run -n
|
|
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
|
|
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
|
|
37
|
-
micromamba run -n
|
|
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
|
|
44
|
-
micromamba run -n
|
|
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
|
|
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
|
|
@@ -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
|
|
4
|
-
`--raw-dir` and `--proc-dir` instead. `--basedir`
|
|
5
|
-
|
|
6
|
-
|
|
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
|
+
[](https://pypi.org/project/oceanarray/)
|
|
64
|
+
[](https://pypi.org/project/oceanarray/)
|
|
65
|
+
[](https://github.com/ocean-uhh/oceanarray/blob/main/LICENSE)
|
|
66
|
+
[](https://github.com/ocean-uhh/oceanarray/actions/workflows/tests.yml)
|
|
67
|
+
[](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
|