oceanarray 0.4.0__tar.gz → 0.5.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.4.0 → oceanarray-0.5.0}/.github/workflows/docs.yml +3 -4
- {oceanarray-0.4.0 → oceanarray-0.5.0}/.github/workflows/docs_deploy.yml +3 -4
- {oceanarray-0.4.0 → oceanarray-0.5.0}/.github/workflows/pypi.yml +3 -3
- {oceanarray-0.4.0 → oceanarray-0.5.0}/.github/workflows/tests.yml +9 -12
- {oceanarray-0.4.0 → oceanarray-0.5.0}/CHANGELOG.md +34 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/CITATION.cff +2 -2
- {oceanarray-0.4.0/oceanarray.egg-info → oceanarray-0.5.0}/PKG-INFO +4 -4
- {oceanarray-0.4.0 → oceanarray-0.5.0}/README.md +1 -1
- oceanarray-0.5.0/VENDORED.txt +9 -0
- oceanarray-0.5.0/docs/source/_static/demo/dune2/dune2_1_2026_grid_report.html +939 -0
- oceanarray-0.5.0/docs/source/_static/demo/dune2/dune2_1_2026_report.html +9281 -0
- oceanarray-0.5.0/docs/source/_static/demo/dune2/dune2_1_2026_stack_report.html +1549 -0
- oceanarray-0.5.0/docs/source/_static/demo/dune2/instrument/dune2_1_2026_2941_report.html +1377 -0
- oceanarray-0.5.0/docs/source/_static/demo/dune2/instrument/dune2_1_2026_9920_report.html +2138 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/clock_offset.rst +2 -2
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/installation.rst +1 -2
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/methods/concatenation.rst +1 -1
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/methods/standardisation.rst +5 -5
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/migration.rst +26 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/oceanarray.rst +9 -5
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/quickstart.rst +1 -1
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/reports.rst +9 -6
- oceanarray-0.5.0/notebooks/demo_mooring.ipynb +363 -0
- oceanarray-0.5.0/notebooks/legacy/README.md +21 -0
- {oceanarray-0.4.0/notebooks → oceanarray-0.5.0/notebooks/legacy}/demo_instrument.ipynb +2 -6
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/__init__.py +6 -0
- oceanarray-0.5.0/oceanarray/_version.py +1 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/cli.py +9 -8
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/config/parameters.py +110 -18
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/config/report_tokens.py +3 -2
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/config/validation.py +155 -1
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/paths.py +5 -1
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/plotters/animation.py +2 -1
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/plotters/current.py +13 -8
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/plotters/diagnostic.py +16 -10
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/plotters/helpers.py +5 -3
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/plotters/hydrography.py +2 -1
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/plotters/timeseries.py +6 -3
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/processors/__init__.py +38 -1
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/processors/caldip.py +4 -2
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/processors/grid.py +38 -50
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/processors/qc.py +44 -41
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/processors/stack.py +64 -13
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/processors/stage1.py +41 -84
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/processors/stage2.py +22 -49
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/processors/stage3.py +25 -20
- oceanarray-0.5.0/oceanarray/processors/units.py +263 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/_array.py +3 -2
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/_css.py +54 -1
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/_encode.py +11 -2
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/_env.py +30 -5
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/_grid.py +18 -9
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/_html_helpers.py +98 -179
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/_instrument.py +25 -25
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/_manifest.py +109 -13
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/_mooring.py +6 -6
- oceanarray-0.5.0/oceanarray/reports/_navs.py +198 -0
- oceanarray-0.5.0/oceanarray/reports/_nc_tables.py +176 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/_pdf.py +4 -2
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/_recovery_table.py +3 -2
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/_stack.py +12 -11
- oceanarray-0.5.0/oceanarray/reports/templates/_nav.html +24 -0
- oceanarray-0.5.0/oceanarray/reports/templates/_nc_coords.html +15 -0
- oceanarray-0.5.0/oceanarray/reports/templates/_nc_globals.html +21 -0
- oceanarray-0.5.0/oceanarray/reports/templates/_nc_scalars.html +24 -0
- oceanarray-0.5.0/oceanarray/reports/templates/_nc_var_macros.html +32 -0
- oceanarray-0.5.0/oceanarray/reports/templates/_nc_variables.html +20 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/base.html +14 -2
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/tools/__init__.py +0 -1
- oceanarray-0.5.0/oceanarray/writers/__init__.py +13 -0
- oceanarray-0.5.0/oceanarray/writers/netcdf.py +364 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0/oceanarray.egg-info}/PKG-INFO +4 -4
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray.egg-info/SOURCES.txt +26 -16
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray.egg-info/scm_file_list.json +26 -16
- oceanarray-0.5.0/oceanarray.egg-info/scm_version.json +8 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/pyproject.toml +9 -5
- oceanarray-0.5.0/scripts/check_vendored.py +111 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/golden/dune2/dune2_1_2026_grid_report.html +316 -85
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/golden/dune2/dune2_1_2026_report.html +86 -4
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/golden/dune2/dune2_1_2026_stack_report.html +639 -320
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/golden/dune2/instrument/dune2_1_2026_2941_report.html +394 -154
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/golden/dune2/instrument/dune2_1_2026_9920_report.html +734 -478
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage1.nc +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage2.nc +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage3.nc +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/proc/dune2_1_2026/dune2_1_2026_grid.nc +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/proc/dune2_1_2026/dune2_1_2026_stack.nc +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage1.nc +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage2.nc +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage3.nc +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/integration/test_stage1_from_raw.py +65 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/integration/test_time_gridding.py +6 -0
- oceanarray-0.5.0/tests/unit/test_canonical_units.py +342 -0
- oceanarray-0.5.0/tests/unit/test_grid_clamp.py +45 -0
- oceanarray-0.5.0/tests/unit/test_nav.py +143 -0
- oceanarray-0.5.0/tests/unit/test_nc_tables.py +55 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_parameters.py +1 -1
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_qc.py +49 -48
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_report.py +6 -1
- oceanarray-0.5.0/tests/unit/test_stack_omission.py +73 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_stage1.py +58 -28
- oceanarray-0.5.0/tests/unit/test_unit_label_literals.py +60 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_validation.py +132 -1
- oceanarray-0.5.0/tests/unit/test_vendored.py +41 -0
- oceanarray-0.5.0/tests/unit/test_writers_netcdf.py +453 -0
- oceanarray-0.4.0/MIGRATION-BASEDIR.md +0 -188
- oceanarray-0.4.0/docs/source/_static/demo/dune2/dune2_1_2026_grid_report.html +0 -684
- oceanarray-0.4.0/docs/source/_static/demo/dune2/dune2_1_2026_report.html +0 -1600
- oceanarray-0.4.0/docs/source/_static/demo/dune2/dune2_1_2026_stack_report.html +0 -1217
- oceanarray-0.4.0/docs/source/_static/demo/dune2/instrument/dune2_1_2026_2941_report.html +0 -1084
- oceanarray-0.4.0/docs/source/_static/demo/dune2/instrument/dune2_1_2026_9920_report.html +0 -1827
- oceanarray-0.4.0/notebooks/demo_mooring.ipynb +0 -408
- oceanarray-0.4.0/notebooks/demo_step1.ipynb +0 -696
- oceanarray-0.4.0/notebooks/legacy/README.md +0 -18
- oceanarray-0.4.0/oceanarray/_version.py +0 -1
- oceanarray-0.4.0/oceanarray/reports/templates/_grid_nc_globals.html +0 -14
- oceanarray-0.4.0/oceanarray/reports/templates/_grid_nc_scalars.html +0 -18
- oceanarray-0.4.0/oceanarray/reports/templates/_grid_nc_variables.html +0 -30
- oceanarray-0.4.0/oceanarray/reports/templates/_instrument_nc_globals.html +0 -14
- oceanarray-0.4.0/oceanarray/reports/templates/_instrument_nc_scalars.html +0 -19
- oceanarray-0.4.0/oceanarray/reports/templates/_instrument_nc_variables.html +0 -30
- oceanarray-0.4.0/oceanarray/reports/templates/_stack_nc_dims.html +0 -11
- oceanarray-0.4.0/oceanarray/tools/writers.py +0 -103
- oceanarray-0.4.0/oceanarray.egg-info/scm_version.json +0 -8
- oceanarray-0.4.0/tests/unit/test_writers.py +0 -100
- {oceanarray-0.4.0 → oceanarray-0.5.0}/.gitattributes +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/.github/ISSUE_TEMPLATE.md +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/.github/dependabot.yml +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/.gitignore +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/CONTRIBUTING.md +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/LICENSE +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/Makefile +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/environment.yml +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/How do I transform a coordinate system manually_ /342/200/223 Nortek Support Center.pdf" +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/array_processing.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/array_processing_v2.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/code/3_beam_transformation.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/code/auto_filt.m +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/code/hydro_grid.m +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/code/microcat2rodb_2.m +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/code/microcat2rodb_3.m +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/code/microcat_apply_cal.m +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/code/microcat_apply_cal_plus.m +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/code/microcat_raw2use_003.m +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/code/mooring_interp_wb2_3_5.m +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/css/custom.css +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/github_solo_workflow.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/github_workflow2.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/instrument_processing.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/instrument_processing_v2.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/instrument_processing_v4.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/instrument_processing_v5.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/instrument_processing_v6.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/logo.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/mooring_processing.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/mooring_processing_V2.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/mooring_processing_v3.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/mooring_processing_v4.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/oceanarray_grid_report.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/oceanarray_icon.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/oceanarray_instrument_report.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/oceanarray_report_header.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/oceanarray_stack_report.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/_static/rotary_spectrum_plan.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/calibration_dips.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/cli_reference.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/conf.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/directory_structure.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/file_naming_conventions.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/index.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/legacy.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/methods/acquisition.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/methods/auto_qc.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/methods/calibration.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/methods/conversion.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/methods/multisite_merging.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/methods/nortek_coordinate_transform.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/methods/time_gridding.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/methods/trimming.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/methods/vertical_gridding.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/oceanSITES_manual.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/oceanarray_format.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/processing_framework.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/project_structure.md +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/roadmap.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/style_guide.md +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/troubleshooting.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/docs/source/yaml_configuration.rst +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/notebooks/demo_climatology.ipynb +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/notebooks/dsE_1_2018_microcat_7518_temperature.png +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/notebooks/legacy/demo_batch_instrument.ipynb +0 -0
- {oceanarray-0.4.0/notebooks → oceanarray-0.5.0/notebooks/legacy}/demo_check_clock.ipynb +0 -0
- {oceanarray-0.4.0/notebooks → oceanarray-0.5.0/notebooks/legacy}/demo_clock_offset.ipynb +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/notebooks/legacy/demo_instrument_rdb.ipynb +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/notebooks/legacy/demo_mooring_rdb.ipynb +0 -0
- {oceanarray-0.4.0/notebooks → oceanarray-0.5.0/notebooks/legacy}/demo_stage1.ipynb +0 -0
- {oceanarray-0.4.0/notebooks → oceanarray-0.5.0/notebooks/legacy}/demo_stage2.ipynb +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/analysis/__init__.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/analysis/clock.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/analysis/hydrographic.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/analysis/science.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/analysis/spectral.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/analysis/temporal.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/analysis/vector.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/config/OS1_sensor_attrs.yaml +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/config/OS1_var_names.yaml +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/config/__init__.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/config/legacy/project_RAPID.yaml +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/config/legacy/rodb_keys.txt +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/config/legacy/rodb_keys.yaml +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/config/logging.yaml +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/config/report.mplstyle +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/inspect.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/legacy/OS1_vocab_attrs.yaml +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/legacy/__init__.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/legacy/caldip.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/legacy/convertOS.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/legacy/find_deployment.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/legacy/mooring_rodb.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/legacy/process_rodb.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/legacy/rodb.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/legacy/tools.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/logger.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/plotters/__init__.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/plotters/_cli_legacy.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/plotters/primitives.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/plotters/spectrum.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/plotters/ts.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/processors/coordinate.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/processors/helpers.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/processors/pressure.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/__init__.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/_figdebug.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/_plots.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/_report_css.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/_slots.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_grid_history.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_instrument_analog_yaml.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_instrument_files.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_instrument_qc.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_instrument_rose_note.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_instrument_windows_note.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_macros.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_mooring_calibration.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_mooring_clock_table.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_mooring_diagram.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_mooring_instruments.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_mooring_issues.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_mooring_pipeline.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_mooring_qc.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_mooring_timing.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_stack_instr_table.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/_stack_roses_note.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/array.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/grid.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/instrument.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/mooring.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/recovery_table.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/reports/templates/stack.html +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/tools/rapid_interp.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/tools/readers.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray/utilities.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray.egg-info/dependency_links.txt +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray.egg-info/entry_points.txt +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray.egg-info/requires.txt +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/oceanarray.egg-info/top_level.txt +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/setup.cfg +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/conftest.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/caldip/castM4_caldip.nc +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/proc/MIXSED2026.array.yaml +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/proc/dune2_1_2026/dune2_1_2026.mooring.yaml +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/raw/dune2_1_2026/aquadopp/9920_recovery.dat +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/raw/dune2_1_2026/aquadopp/9920_recovery.hdr +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/raw/dune2_1_2026/microcat/2941_recovery.asc +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/fixtures/regenerate_dune2_microcat.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/integration/__init__.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/integration/conftest.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/integration/test_pipeline.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/integration/test_readers.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/integration/test_recovery_table.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/integration/test_stage1.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/integration/test_stage2.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/legacy/__init__.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/legacy/test_convertOS.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/legacy/test_mooring_rodb.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/legacy/test_process_rodb.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/legacy/test_rodb.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/test_imports.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/__init__.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_array.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_caldip.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_cli.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_flag_merge.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_grid_manifest.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_helpers.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_instrument_manifest.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_logger.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_manifest.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_mooring_manifest.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_paths.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_pdf_report.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_plot_guard.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_plotters.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_pressure.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_process_api.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_recovery_table.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_report_golden.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_report_tokens.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_stage2.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_stage3.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_time_gridding.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_tools.py +0 -0
- {oceanarray-0.4.0 → oceanarray-0.5.0}/tests/unit/test_utilities.py +0 -0
|
@@ -16,12 +16,12 @@ jobs:
|
|
|
16
16
|
|
|
17
17
|
steps:
|
|
18
18
|
- name: Checkout
|
|
19
|
-
uses: actions/checkout@
|
|
19
|
+
uses: actions/checkout@v7
|
|
20
20
|
with:
|
|
21
21
|
fetch-depth: 0
|
|
22
22
|
|
|
23
23
|
- name: Setup Micromamba
|
|
24
|
-
uses: mamba-org/setup-micromamba@
|
|
24
|
+
uses: mamba-org/setup-micromamba@v3
|
|
25
25
|
with:
|
|
26
26
|
environment-file: docs/environment.yml
|
|
27
27
|
init-shell: bash
|
|
@@ -41,8 +41,7 @@ jobs:
|
|
|
41
41
|
shell: bash -l {0}
|
|
42
42
|
run: |
|
|
43
43
|
set -e
|
|
44
|
-
micromamba run -n oceanarray jupyter nbconvert --to notebook --execute notebooks/
|
|
45
|
-
micromamba run -n oceanarray 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_mooring.ipynb --output=demo_mooring-output.ipynb
|
|
46
45
|
mv notebooks/*output.ipynb docs/source/
|
|
47
46
|
pushd docs
|
|
48
47
|
micromamba run -n oceanarray make clean html
|
|
@@ -15,12 +15,12 @@ jobs:
|
|
|
15
15
|
|
|
16
16
|
steps:
|
|
17
17
|
- name: Checkout
|
|
18
|
-
uses: actions/checkout@
|
|
18
|
+
uses: actions/checkout@v7
|
|
19
19
|
with:
|
|
20
20
|
fetch-depth: 0
|
|
21
21
|
|
|
22
22
|
- name: Setup Micromamba
|
|
23
|
-
uses: mamba-org/setup-micromamba@
|
|
23
|
+
uses: mamba-org/setup-micromamba@v3
|
|
24
24
|
with:
|
|
25
25
|
environment-file: docs/environment.yml
|
|
26
26
|
init-shell: bash
|
|
@@ -40,8 +40,7 @@ jobs:
|
|
|
40
40
|
shell: bash -l {0}
|
|
41
41
|
run: |
|
|
42
42
|
set -e
|
|
43
|
-
micromamba run -n oceanarray jupyter nbconvert --to notebook --execute notebooks/
|
|
44
|
-
micromamba run -n oceanarray 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_mooring.ipynb --output=demo_mooring-output.ipynb
|
|
45
44
|
mv notebooks/*output.ipynb docs/source/
|
|
46
45
|
pushd docs
|
|
47
46
|
micromamba run -n oceanarray make clean html
|
|
@@ -26,7 +26,7 @@ jobs:
|
|
|
26
26
|
id-token: write
|
|
27
27
|
|
|
28
28
|
steps:
|
|
29
|
-
- uses: actions/checkout@
|
|
29
|
+
- uses: actions/checkout@v7
|
|
30
30
|
with:
|
|
31
31
|
ref: ${{ github.ref }}
|
|
32
32
|
fetch-depth: 0
|
|
@@ -35,9 +35,9 @@ jobs:
|
|
|
35
35
|
run: git clean -fxd
|
|
36
36
|
|
|
37
37
|
- name: Set up Python
|
|
38
|
-
uses: actions/setup-python@
|
|
38
|
+
uses: actions/setup-python@v7
|
|
39
39
|
with:
|
|
40
|
-
python-version: "3.
|
|
40
|
+
python-version: "3.13"
|
|
41
41
|
|
|
42
42
|
- name: Install build tools
|
|
43
43
|
run: |
|
|
@@ -13,7 +13,7 @@ concurrency:
|
|
|
13
13
|
jobs:
|
|
14
14
|
unit:
|
|
15
15
|
runs-on: ${{ matrix.os }}
|
|
16
|
-
#
|
|
16
|
+
# Any leg marked experimental is allowed to fail without cancelling real jobs.
|
|
17
17
|
continue-on-error: ${{ matrix.experimental == true }}
|
|
18
18
|
strategy:
|
|
19
19
|
fail-fast: false
|
|
@@ -21,19 +21,16 @@ jobs:
|
|
|
21
21
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
22
22
|
python-version: ["3.11"] # full 3-OS coverage on the primary version
|
|
23
23
|
include:
|
|
24
|
-
# Verify the supported range (requires-python >=3.
|
|
24
|
+
# Verify the supported range (requires-python >=3.11; docs say 3.11–3.13),
|
|
25
25
|
# ubuntu-only to keep the job count down.
|
|
26
|
-
- { os: ubuntu-latest, python-version: "3.10" }
|
|
27
26
|
- { os: ubuntu-latest, python-version: "3.12" }
|
|
28
|
-
|
|
29
|
-
# (via pylablib -> seasenselib) may not have 3.13 wheels yet.
|
|
30
|
-
- { os: ubuntu-latest, python-version: "3.13", experimental: true }
|
|
27
|
+
- { os: ubuntu-latest, python-version: "3.13" }
|
|
31
28
|
|
|
32
29
|
steps:
|
|
33
|
-
- uses: actions/checkout@
|
|
30
|
+
- uses: actions/checkout@v7
|
|
34
31
|
|
|
35
32
|
- name: Set up Python ${{ matrix.python-version }}
|
|
36
|
-
uses: actions/setup-python@
|
|
33
|
+
uses: actions/setup-python@v7
|
|
37
34
|
with:
|
|
38
35
|
python-version: ${{ matrix.python-version }}
|
|
39
36
|
cache: "pip"
|
|
@@ -53,10 +50,10 @@ jobs:
|
|
|
53
50
|
integration:
|
|
54
51
|
runs-on: ubuntu-latest
|
|
55
52
|
steps:
|
|
56
|
-
- uses: actions/checkout@
|
|
53
|
+
- uses: actions/checkout@v7
|
|
57
54
|
|
|
58
55
|
- name: Set up Python 3.11
|
|
59
|
-
uses: actions/setup-python@
|
|
56
|
+
uses: actions/setup-python@v7
|
|
60
57
|
with:
|
|
61
58
|
python-version: "3.11"
|
|
62
59
|
cache: "pip"
|
|
@@ -74,10 +71,10 @@ jobs:
|
|
|
74
71
|
lint:
|
|
75
72
|
runs-on: ubuntu-latest
|
|
76
73
|
steps:
|
|
77
|
-
- uses: actions/checkout@
|
|
74
|
+
- uses: actions/checkout@v7
|
|
78
75
|
|
|
79
76
|
- name: Set up Python 3.11
|
|
80
|
-
uses: actions/setup-python@
|
|
77
|
+
uses: actions/setup-python@v7
|
|
81
78
|
with:
|
|
82
79
|
python-version: "3.11"
|
|
83
80
|
|
|
@@ -6,6 +6,40 @@ All notable changes to oceanarray are documented here.
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.5.0] — 2026-10-12
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **Serial-uniqueness validation** ([#101](https://github.com/ocean-uhh/oceanarray/pull/101)): `validate` refuses duplicate serials within a mooring, a blank serial, and the reserved names `stack`/`grid` (which would collide the per-instrument report filenames `{mooring}_{serial}_report.html`). A trailing `*` is stripped before every check — `1234` and `1234*` on one mooring are a duplicate, a serial that is only `*` is blank — and stays a diagram-only "pay attention to this sensor" annotation, never carried into filenames or nav labels.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- **Report NetCDF-inventory appendix restyled** ([#103](https://github.com/ocean-uhh/oceanarray/pull/103)): the instrument, stack and grid reports share one inventory appendix — a Coordinates table (one row per coordinate variable: type, units, standard/long name, min/max, N valid, attributes), variables grouped by dimension set, QC companions shown inline as a green `(_QC)`, and global attributes split into named groups with a Type column; the per-page variable/scalar/globals templates collapse to one shared set, and the grid page gains a coordinates table it never had. The dune2 test fixture units were canonicalised in place (14 attribute edits, data byte-identical) and the hosted dune2 example suite regenerated. `demo_mooring.ipynb` is ported to `oceanarray.processors.process` and runs on the committed fixture from a clean checkout; `demo_step1.ipynb` is removed, and five old-API demo notebooks move to `notebooks/legacy/`.
|
|
18
|
+
- **Shared masthead nav** ([#100](https://github.com/ocean-uhh/oceanarray/pull/100)): the report masthead navigation is rebuilt from the shared vendored macro, and the six report-design files are re-vendored from ctdcast with a vendoring guard (`scripts/check_vendored.py`).
|
|
19
|
+
- **Canonical units at every stage** ([#102](https://github.com/ocean-uhh/oceanarray/pull/102)): one canonical spelling per quantity is now written to every file — `degree_Celsius`, `mS cm-1`, `dbar`, `m`, `m s-1`, `umol kg-1`, `g kg-1`, `kg m-3`, `1` (practical salinity and turbidity). A registry-scoped pass (`oceanarray.processors.units.canonicalise_units`) runs on the way out of every stage, rewriting the reader spellings (`degC`, `mS/cm`, `meters`, `db`, `S/m`→×10) to the canonical and recording any value conversion in `units_converted_from` / `units_conversion_factor`. Temperature variables carry CF-1.11 `units_metadata = "temperature: on_scale"`. Plot labels are derived from the canonical string by `format_units` (slash form: `mS/cm`, `m/s`, `kg/m³`, `µmol/kg`, `°C`, `PSU`, `NTU`).
|
|
20
|
+
|
|
21
|
+
- **Single netCDF writer** ([#98](https://github.com/ocean-uhh/oceanarray/pull/98)): the six write paths the processing stages used before now go through one `oceanarray.writers.write` seam. The files that were written uncompressed — the seasenselib-written stage files, whose compression parameters its writer silently discarded, and the bare-`to_netcdf` stage3 output — shrink 58–66% on the dune2 fixtures. The two that were already zlib level-5 compressed — the pressure-gridded and stacked outputs — grow about 1% as they move to the common level-4 setting. Decoded values, dtypes, attributes, and time encoding are unchanged; raw values are byte-identical, verified per stage against the old writer. The private `_get_netcdf_writer_params` methods are removed, including the `quantize` key, which was never a valid netCDF4 encoding parameter and never took effect.
|
|
22
|
+
- **Windows log encoding** ([#98](https://github.com/ocean-uhh/oceanarray/pull/98)): `stage1/2/3` open their per-stage log file as UTF-8. On Windows the default cp1252 encoding raised on the ADCP `BEAM→ENU` log message, which aborted the instrument and silently dropped it from the output.
|
|
23
|
+
- **`oceanarray.writers` exposed** ([#99](https://github.com/ocean-uhh/oceanarray/pull/99)): `import oceanarray as oa; oa.writers.write(ds, path)` now resolves after a bare import.
|
|
24
|
+
- **cftime time coordinates preserved** ([#99](https://github.com/ocean-uhh/oceanarray/pull/99)): a time coordinate decoded with `use_cftime=True` (object dtype, e.g. a non-standard calendar) now keeps its `units` and `calendar` on write instead of letting xarray re-guess the epoch from the data. Numpy `datetime64` time is still pinned to the 1970 epoch; only object-dtype cftime time is affected.
|
|
25
|
+
- **Python 3.13 supported** ([#99](https://github.com/ocean-uhh/oceanarray/pull/99)): added to the classifiers and promoted to a required (no longer allow-failure) CI leg.
|
|
26
|
+
|
|
27
|
+
### Breaking changes
|
|
28
|
+
|
|
29
|
+
- **Units spellings in output files changed** ([#102](https://github.com/ocean-uhh/oceanarray/pull/102)): every processed file now carries the canonical units spelling per quantity (above), so a reader matching the old strings (`degC`, `mS/cm`, `meters`, `S/m`, …) must adapt. An unrecognised or missing `units` on a registered variable now **stops that instrument** (`UnitsError`) rather than passing through silently — one bad instrument is logged with its file and skipped, the rest process; the stack still builds but records the omission in an `instruments_omitted` attribute and exits 1. The `dissolved_oxygen` registry entry is corrected to per-mass `umol kg-1` (standard_name `moles_of_oxygen_per_unit_mass_in_sea_water`); turbidity is dimensionless `1` (display label `NTU`). Conductivity in `S/m` is converted ×10 to `mS cm-1` by the units pass, replacing the old `conductivity_normalised_from` attribute with `units_converted_from` / `units_conversion_factor`.
|
|
30
|
+
- **`process` runs stage 3 by default** ([#102](https://github.com/ocean-uhh/oceanarray/pull/102)): `oceanarray process MOORING` with no `--stage` now runs stages 1, 2 and 3 (was 1 and 2). Pass `--stage 1 2` for the old raw→trim-only behaviour. The help text already described "stages 1-3"; the code now matches it.
|
|
31
|
+
- **Oxygen saturation / AOU recomputed on the correct basis** ([#102](https://github.com/ocean-uhh/oceanarray/pull/102)): `derive_oxygen_saturation` previously divided per-mass `dissolved_oxygen` by in-situ density as if it were per-volume, making `oxygen_saturation_pct` and `apparent_oxygen_utilization` ~2.5% low. It now uses a per-mass (`umol kg-1`) input directly and divides only a genuine per-volume (`umol L-1`) variable. Regenerated oxygen products change by the density factor; moorings without an oxygen sensor (the dune2 example) are unaffected.
|
|
32
|
+
- **Minimum Python raised to 3.11** ([#99](https://github.com/ocean-uhh/oceanarray/pull/99)): `requires-python` is now `>=3.11`; the 3.10 classifier and CI leg are dropped. Python 3.10 reached end-of-life, and the core dependencies (xarray, pandas, numpy, matplotlib, gsw, scipy) already require 3.11 — so a 3.10 install silently resolved years-old, untested versions of the whole stack.
|
|
33
|
+
|
|
34
|
+
- **Dead output helpers removed** ([#99](https://github.com/ocean-uhh/oceanarray/pull/99)): `oceanarray.tools.writers.save_dataset` and `save_OS_instrument` are deleted, and `oceanarray/tools/writers.py` with them. Neither had a working caller (only tests and a dead `if 0:` notebook cell); `save_dataset` also wrote `NETCDF4_CLASSIC`, a format nothing else produced. Use `oceanarray.writers.write`. Two legacy notebooks (`notebooks/legacy/demo_batch_instrument.ipynb`, `notebooks/legacy/demo_instrument_rdb.ipynb`) still reference `save_OS_instrument` and no longer run; they are not CI-executed and are left for the notebook refresh.
|
|
35
|
+
- **`None` attributes dropped, not blanked** ([#99](https://github.com/ocean-uhh/oceanarray/pull/99)): a `None`-valued attribute (global or per-variable) is now dropped with a warning instead of written as `""`. `UNK` belongs where a value is determined, not the write seam. On the dune2 fixtures no attribute is affected (0/84 globals are empty); this is a guardrail.
|
|
36
|
+
- **Time encoding pinned** ([#99](https://github.com/ocean-uhh/oceanarray/pull/99)): every datetime variable is written as `seconds since 1970-01-01` (float64, `proleptic_gregorian`) rather than xarray's per-file guess. Decoded instants change by at most 0.13 µs (float64 seconds have ~238 ns spacing at the 2026 epoch, so ≤119 ns rounding; ~0.5 µs by 2050) — negligible against clock drift, which is corrected in whole seconds. **Raw stored values change**, so a reader using `decode_times=False`/`decode_cf=False` sees different numbers. This also removes a pandas-version dependence in the units string (space vs `T`).
|
|
37
|
+
|
|
38
|
+
### Known issues
|
|
39
|
+
|
|
40
|
+
- **Empty-units turbidity files**: a registered variable with an empty `units` fails that one instrument at stage 1 — the handler logs `ERROR: <file>: <reason>`, skips the instrument, and the mooring completes with the others and a non-zero exit (the family rule). Six turbidity files on the drive are affected; the reader fix lands in 0.5.1.
|
|
41
|
+
- **dune2 test fixture stack/grid**: the committed `_stack.nc`/`_grid.nc` fixtures reference instruments not present in the committed raw and YAML — they were built from the full mooring before the fixture was trimmed to two instruments — so running `oceanarray run` on the fixture collapses the stack to those two. A known fixture inconsistency, rebuilt in 0.5.1.
|
|
42
|
+
|
|
9
43
|
## [0.4.0] — 2026-09-08
|
|
10
44
|
|
|
11
45
|
### Added
|
|
@@ -7,8 +7,8 @@ authors:
|
|
|
7
7
|
affiliation: University of Hamburg, Bundesstraße 53, 20146 Hamburg, Germany
|
|
8
8
|
title: oceanarray
|
|
9
9
|
doi: 10.5281/zenodo.21890564
|
|
10
|
-
version: 0.
|
|
11
|
-
date-released: 2026-
|
|
10
|
+
version: 0.5.0
|
|
11
|
+
date-released: 2026-10-12
|
|
12
12
|
url: https://github.com/ocean-uhh/oceanarray
|
|
13
13
|
repository-code: https://github.com/ocean-uhh/oceanarray
|
|
14
14
|
license: MIT
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: oceanarray
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: Multi-stage processing pipeline for moored oceanographic observations: raw instrument files to QC-flagged CF-compliant NetCDF with automated HTML reports.
|
|
5
5
|
Maintainer-email: Eleanor Frajka-Williams <eleanorfrajka@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -35,10 +35,10 @@ Classifier: Intended Audience :: Science/Research
|
|
|
35
35
|
Classifier: Topic :: Scientific/Engineering :: Oceanography
|
|
36
36
|
Classifier: License :: OSI Approved :: MIT License
|
|
37
37
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
38
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
39
38
|
Classifier: Programming Language :: Python :: 3.11
|
|
40
39
|
Classifier: Programming Language :: Python :: 3.12
|
|
41
|
-
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
41
|
+
Requires-Python: >=3.11
|
|
42
42
|
Description-Content-Type: text/markdown
|
|
43
43
|
License-File: LICENSE
|
|
44
44
|
Requires-Dist: numpy>=1.23
|
|
@@ -102,7 +102,7 @@ uv pip install oceanarray
|
|
|
102
102
|
|
|
103
103
|
This pulls in `seasenselib` (used to read raw instrument files in stage 1) automatically.
|
|
104
104
|
|
|
105
|
-
Python 3.
|
|
105
|
+
Python 3.11–3.13 is supported. See the [installation guide](https://ocean-uhh.github.io/oceanarray/installation.html) for isolated-environment (conda / venv / uv) and from-source options.
|
|
106
106
|
|
|
107
107
|
## Quick start
|
|
108
108
|
|
|
@@ -25,7 +25,7 @@ uv pip install oceanarray
|
|
|
25
25
|
|
|
26
26
|
This pulls in `seasenselib` (used to read raw instrument files in stage 1) automatically.
|
|
27
27
|
|
|
28
|
-
Python 3.
|
|
28
|
+
Python 3.11–3.13 is supported. See the [installation guide](https://ocean-uhh.github.io/oceanarray/installation.html) for isolated-environment (conda / venv / uv) and from-source options.
|
|
29
29
|
|
|
30
30
|
## Quick start
|
|
31
31
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# sha256 of the report-design files shared across ctdcast, oceanarray and
|
|
2
|
+
# glidertest; ctdcast main 1a7cd91 is the source of truth. Never
|
|
3
|
+
# hand-edit; re-vendor from ctdcast, then: python scripts/check_vendored.py --update
|
|
4
|
+
0856f12f8f032f8803081e207f1e46b694e68b9a837174960c5bd6fa526370a0 oceanarray/reports/_encode.py
|
|
5
|
+
6804280ebe2f25b1d958cbf01ddfb8c19b12b423f4650cb8a494a7697bfa96f4 oceanarray/reports/_css.py
|
|
6
|
+
aa57d10b7891164f07b0f4c5345c716934af0a3409859d48dae2387fcce71804 oceanarray/reports/_manifest.py
|
|
7
|
+
752c4d4245b7ac4b82a63ea7245707c24deae2c088d03bf9bb6ea7a325ce5f1b oceanarray/config/report_tokens.py
|
|
8
|
+
18cba25d288c74129f4e393199fb0b005f7e0c926a11a4c67aba3104f72e7f61 oceanarray/config/report.mplstyle
|
|
9
|
+
ab5ee1964e0a0aebba73f28bbbaf5a4036450d2be821803d357c9d6ba294a10a oceanarray/reports/templates/_nav.html
|