Skip to content

v1.2.1

Latest

Choose a tag to compare

@pvankatwyk pvankatwyk released this 13 May 14:10
· 1 commit to master since this release

[1.2.1] — 2026-05-13 (package) | Model: v1.1.0

Added

  • docs/index.rst — PyPI, Python version, License, and CI badges to match README.md.
  • ise.models.pretrained.get_model_dir() prints stderr progress when ISEFlow weights are downloaded from HuggingFace Hub for the first time; stays silent on cached loads (previously could appear to hang during HF metadata sync).
  • Stepwise progress printouts to all examples/ scripts (example_ais.py, example_gris.py, example_absolute_forcings.py, process_training_data.py, recreate_manuscript_results.py) so users can follow what the script is doing as it runs.

Fixed

  • tests/ise/data/test_input_classes.py resolved the AIS/GrIS pretrained directories via the local-only ISEFlow_AIS_v1_1_0_path / ISEFlow_GrIS_v1_1_0_path constants, which point at the bundled fallback directory (not the HuggingFace cache). The AIS fallback dir does not ship scaler_X.pkl, so the 5 AIS comparison tests failed with FileNotFoundError whenever weights were served from the HF cache. Switched to get_model_dir("v1.1.0", "AIS"/"GrIS") so the test always reads the scaler from the same directory the model loads its weights from. (CI was unaffected because these tests are marked slow and skipped there.)
  • from ise import ISEFlow, ISEFlow_AIS, ISEFlow_GrIS now works — names were in __all__ but never imported, raising ImportError.
  • ISEFlowGrISInputs._assign_model_configs defaulted to the AIS model-configs JSON, so GrIS-only ISM names (e.g. "AWI-ISSM1") raised ValueError: Model name ... not found. Added gris_ismip6_model_configs_path in ise/utils/__init__.py and switched the GrIS dataclass default. Regression test added.
  • Silenced sklearn.exceptions.InconsistentVersionWarning package-wide — bundled pretrained scalers were pickled with an older sklearn version but unpickle correctly.
  • Plugged file-handle leaks (pickle.load(open(...))with open(...) as f) in feature_engineer.scale_data(), FeatureEngineer.scale_data(), and unscale_output() / unscale_input() in ise/utils/functions.py.
  • Replaced bare except: in ise.utils.functions.load_ml_data with except FileNotFoundError: so KeyboardInterrupt/SystemExit/MemoryError are no longer swallowed.

Changed

  • ProjectionProcessor ocean-forcing warnings (AIS and GrIS) now list the directory, expected NetCDF variable names, and files actually found, instead of an opaque "Directory X does not contain N files." message.
  • Moved the in-body from scipy.ndimage import uniform_filter1d to the top of ise/models/iseflow.py (PEP 8 E402).

Documentation

  • Full docstring audit across ise/. Notable fixes: removed phantom smooth_projection arg from ISEFlow.forward; converted ISEFlow.predict's misleading Raises: Warning into a proper Sphinx Warns block; removed stale Raises: NotImplementedError from ISEFlow.load; documented previously-undocumented args (NormalizingFlow.fit's X_val/y_val/lr/wd, LSTM.fit's wandb_run); corrected NormalizingFlow.aleatoric return shape to (N,); added save/load docstrings to RobustScaler and LogScaler; clarified that unscale_output/unscale_input accept any sklearn scaler with inverse_transform, not only MinMaxScaler.
  • docs/model_versions.rst: corrected the GrIS v1.1.0 input list (aSMB, aST, sector, etc.) and replaced an unverified aogcm="MIROC6" example with a real bundled name (noresm1-m_rcp85).
  • README.md and docs/index.rst: replaced the GitHub Releases pointer with a Manuscript code archives section listing Zenodo DOIs per publication, reflecting the move from per-paper GitHub releases to the maintained ise-py package plus frozen Zenodo snapshots.
  • .gitignore: ignore .bugs.md (local docs-audit scratchpad).