Changelog

0.3.3 (unreleased)

Contributors to this version: Ludwig Lierhammer (@ludwiglierhammer)

New features and enhancements

  • new_functions: do_valid_value_check and do_valid_value_clim_check are copies of the old versions from do_missing_value_check and do_missing_value_clim_check that return 1 (fail) for numerically invalid values, otherwise 0 (pass) (#205, #206)

  • A new checker to detect (marine_qc.duplicate_check), get (marine_qc.get_duplicates), flag (marine_qc.flag_duplicates) and remove (marine_qc.remove_duplicates) potentially duplicated observations using splink (#202, #210, #207)

  • flag definitions can now directly be imported via marine_qc.Flags (#207)

  • new plotting routine that plots a graph of points showing the longitude and value of a set of observations coloured according to flagged outcomes: plot_variable_longitude (#240, #244)

  • add new input parameters xlim and ylim in the plotting routines (#240, #244)

  • add new input parameter marker_size in the plotting routines (#240, #244)

  • add new function to combine results from multiple QC checks into a single flag: combine_qr_results (#242, #245)

  • add new function that checks whether both the date and the time is valid: do_datetime_check (#246)

  • optionally, add coastlines in plots using visualization functions (#248)

  • add buoy tracking QC functions to imports in quality_control.qc_multiple_check (#249, #250)

  • the documentation now includes example notebooks how to use marine_qc (#4, #251, #235, #255)

  • quality control functions now support pandas.DataFrames as input, allowing for a more flexible way of passing data using the data key-word-argument (#241, #257)

Breaking changes

  • Both do_mising_value_check and do_missing_value_clim_check now return 0 (pass) for numerically invalid values, otherwise 1 (fail) (#205, #206)

  • The minimum versions of several dependencies have been set to support Python 3.11 or higher (numpy >= 1.24.0, pandas >= 3.0.0, scipy >= 1.11.0, xarray >= v2025.07.0, xclim >= 0.56) (#224)

  • convert buoy tracking QC outcomes from float to int (#249, #250)

  • implement decorator post_format_return_type into buoy tracking QC functions to convert output types to input types (#249, #250)

  • convert all input parameter names from the plutal into the singular in buoy tracking QC function, for instance “lats” to “lat” or “lons” to “lon” (#249, #250)

  • sort parameter order list in buoy tracking QC functions equivalent to other QC functions, for instance [“lon”, “lat”, “date”] to [“lat”, “lon”, “date”] (#249, #250)

  • cartopy has been added to the dependencies (#235)

  • when a pandas.DataFrame is provided as input to remove_duplicates using data keyword-argument, the function returns a pandas.DataFrame instead of a tuple of pandas.Series, making it easier to work with the result (#257)

Internal changes

  • move helper modules to src.marine_qc.helpers (#207)

  • move QC modules to src.marine_qc.quality_control (#207)

  • move visualization modules to src.marine_qc.visualization (#207)

  • locally import some members in submodules src.marine_qc.duplicate_checker, src.marine_qc.helpers, src.marine_qc.quality_control and src.marine_qc.visualization (#207)

  • Upload coverage results to Coveralls instead of Codecov (#58, #232, #233)

  • rename plotting routines: latitude_longitude_plot to plot_latitude_longitude and latitude_variable_plot to plot_latitude_variable (#240, #244)

  • new helper function quality_control.qc_individual_report._do_time_check that is used in both “do_time_check” and “do_datetime_check” (#246)

  • new helper function quality_control.qc_individual_report._do_date_check that is used in both “do_date_check” and “do_datetime_check” (#246)

  • explicitly convert intermediate result in quality_control.helpers.time_control.dayin_year to a python integer to fix incompatible types assignment (#247)

  • new helper function quality_control.qc_individual_report._do_time_check that is used in both do_time_check and do_datetime_check (#246)

  • new helper function quality_control.qc_individual_report._do_date_check that is used in both do_date_check and do_datetime_check (#246)

  • rename quality_control.buoy_tracking_qc into quality_control.qc_buoy_tracking (#249, #250)

  • move “is_monotonic” and “track_day_test” from quality_control.qc_buoy_tracking to quality_control.track_check_utils (#250)

  • the duplicate_check function now suppresses warnings from splink (#257)

  • decorators now use variable arguments instead of lists as inputs (#257)

0.3.2 (2023-04-21)

Contributors to this version: Ludwig Lierhammer (@ludwiglierhammer), Trevor James Smith (@Zeitsperre)

Announcements

  • marine_qc now fully supports Python 3.14 and drops support for Python 3.10. (#182, #161)

New features and enhancements

  • do_date_check now supports flexible input parameters year_init and year_end that define valid year range (#184)

Breaking changes

  • Development dependencies (“dev”, “docs”) are now installed via the new dependency-groups conventions (PEP 735) (#161)

  • prek is now the suggested pre-commit runner (installed by default via pip install –group dev) (#161)

Internal changes

  • Updated the project template and boilerplate code to address configuration issues and benefit from new workflows/conventions (#161):

    • A new workflow has been added to automatically accept minor/patch updates to GitHub Actions and Python deps coming from Dependabot.

    • tox.ini` has migrated to tox.toml (new standard).

    • pyproject.toml and tox.toml now use [dependency-groups] to manage non-end-user dependency lists.

    • The Makefile recipes are much cleaner and now manage some dependency installation calls.

    • Various dependency updates.

  • sphinx documentation now uses internal data types from “auxiliary.py” (#143, #185)

  • correct repository url in documentation (#185)

  • cdm_reader_mapper has been dropped from the dependencies (#183, #188)

  • copy code snippet to load files from GLAMOD test data repo from cdm_reader_mapper (used in testing suite only) (#183, #188)

Bug fixes

  • Staging and deployment worksflows are now fully working again (#160, #161)

  • bump-version workflow is now fully working again (#64, #161)

0.3.1 (2026-03-06)

Contributors to this version: Ludwig Lierhammer (@ludwiglierhammer), John Kennedy (@jjk-code-otter) and Trevor James Smith (@Zeitsperre)

New features and enhancements

  • New functions do_multiple_sequential_check and do_multiple_grouped_check analog to do_multiple_individual_check to run multiple checks at once (#32, #95)

  • Call both plotting functions latitude_longitude_plot and latitude_variable_plot directly from marine_qc (#95)

  • The documentation now uses the furo theme for Sphinx (#122)

  • New functions do_landlocked_check and do_maritime_check to test whether a position is on land/sea using a land-sea mask (#130, #141)

  • decorator external_clim.inspect_climatology now supports str, path-like and xarray objects as input (#141)

  • new validator to validate call signature types in multiple_checks (#15, #128)

Breaking changes

  • rename function do_multiple_row_check to multiple_individual_check (#95)

  • rename module marine_qc.multiple_row_checks to marine_qc.multiple_checks (#95)

  • multiple_checks now raises errors if qc_dict or preproc_dict has an invalid structure (#119, #128)

  • multiple_checks now raises errors if input directory values do not match the available QC functions or their arguments (#119, #128)

Internal changes

  • make multiple checks more flexible using several helper functions (#14, #95)

  • add plotting routines to documentation’s API reference (#95)

  • add helper functions to documentation’s API reference (#95)

  • add section “More theoretical information” to documentation (#95)

  • The numpydoc linting tool has been added to the linting checks, and the pre-commit configurations (#53, #59, #120)

  • The mypy type checking has been added to the pre-commit configurations (#59, #121)

  • Documentation is now build without any warning messages (#96, #122)

  • readthedocs.yaml: set fail_on_warnings to “true” (#61, #122)

  • new validation method validations to validate call signature types for all functions (#128)

  • multiple_checks: merge helper functions _prepare_preprocessed_vars and _prepare_qc_functions into _prepare_functions (#128)

  • multiple_checks: rename helper function _validate_and_normalize_input to _normalize_input (#128)

  • multiple_checks: replace concrete dict types with Mapping in function type hints (#128)

  • new helper function auxiliary.ensure_arrays to ensure that all inputs are NumPy arrays and to increase test coverage (#128)

  • new marine_qc data types: ScalarNumberType, SequenceNumberType and ValueNumberType (#128)

  • remove cdm_reader_mapper.DataBundle-related tests (#139, #146)

  • update testing suite to cover warnings (#148, #149)

  • add unit test for external_clim and increase test coverage (#17, #154)

0.3.0 (2026-03-06)

See 0.3.1

0.2.0 (2025-10-21)

Contributors to this version: Ludwig Lierhammer (@ludwiglierhammer)

Announcements

  • First release on zenodo (#66)

0.1.0 (2025-10-21)

Contributors to this version: Ludwig Lierhammer (@ludwiglierhammer), John Kennedy (@jjk-code-otter) and Trevor James Smith (@Zeitsperre)

Announcements

CI changes

  • Use cruft and cookicutter template https://github.com/Ouranosinc/cookiecutter-pypackage (#13, #30, #55)

New features and enhancements

  • do_night_check: reverse do_day_check (#21)

  • Added documentation (#4, #11, #12)

  • Added get_value_fast for extracting values from climatologies (#24)

  • Added mds_lat_to_yindex_fast for extracting values from climatologies (#24)

  • Added mds_lon_to_xindex_fast for extracting values from climatologies (#24)

  • Implement plotting routines for QC outcomes (#24):

    • marine_qc.plot_qc_outcomes.latitude_variable_plot: Plot a graph of points showing the latitude and value of a set of observations coloured according to the QC outcomes.

    • marine_qc.plot_qc_outcomes.latitude_longitude_plot: Plot a graph of points showing the latitude and longitude of a set of observations coloured according to the QC outcomes.

  • decorator post_formt_return_type has new parameters (#24):

    • dtype: Desired data type of the result. Default is int.

    • multiple: If True, assumes the function returns a sequence of results (e.g., a tuple), and applies format_return_type to each element individually.

  • Both do_bayesian_buddy_check and do_mds_buddy_check allow a list of row numbers to be skipped (ignore_index) (#24).

Internal changes

  • Remove both jupyter notebook specific (nbqa-pyupgrade, nbqa-black, nbqa-isort, nbstripout) and json-related (pretty-format-json) pre-commit hooks (#7)

  • Replace assert statements with if statement raising error messages (#7)

  • Split some try statements into single if statements giving warnings (#7)

  • Fixing some typos in docstrings and comments (#7)

  • Improved unit test coverage (#9)

  • combine time_control.day_in_year and time_control.dayinyear to time_control.day_in_year (#9)

  • new function time_control.valid_month_day to validate month and day information (#9)

  • extract daytime check from do_day_check and do_night_check (#21)

  • vectorised many of the QC checks to speed up processing on large datasets (#24)

  • moved to using pyproj for spherical geometry calculations (#24)

  • removed dependence on old Climatology class (#24)

  • utility functions moved from qc_sequential_reports to track_check_utils (#24)