Skip to content

v1.1.0 β€” Installable PyPI Package, CI/CD & Reproducible Benchmarks

Latest

Choose a tag to compare

@rfonod rfonod released this 08 Jul 19:45
· 1 commit to main since this release
5b00177

πŸš€ v1.1.0 β€” Installable PyPI Package, CI/CD & Reproducible Benchmarks

Stabilo-Optimize is now a proper installable Python package on PyPI (pip install stabilo-optimize), with a unified stabilo-optimize console command, full CI/CD, Zenodo archival metadata, and a reproducibility fix that makes seeded benchmark runs fully deterministic.

⚠️ This release contains breaking changes for users upgrading from v1.0.0. See Migrating from v1.0.0 below.


πŸ“¦ Installation

pip install stabilo-optimize        # from PyPI
pip install -e '.[dev]'             # from source, with dev extras

Installing provides the stabilo-optimize console command (python -m stabilo_optimize is equivalent).


✨ New Features

Installable package & unified CLI: benchmark.py/utils/ are restructured into the stabilo_optimize package with a single console entry point and lazy subcommand dispatch: benchmark and plot.

File logging: -l/--log-file on both subcommands tees console output to a file β€” ANSI color codes stripped, resolved absolute path printed to the console, appended across runs with a timestamped separator, and gitignored (*.log) by default.

CI/CD: ci.yml runs ruff lint, a cross-platform pytest matrix (Linux Python 3.9-3.13, macOS, Windows), and a build + wheel-install smoke test. publish.yml publishes to PyPI via trusted (OIDC) publishing on GitHub Release.

Zenodo metadata: new .zenodo.json powers the GitHub β†’ Zenodo archive integration, cross-linking stabilo (as a dependency), geo-trax, and hbb2obb.


πŸ”§ Improvements & Bug Fixes

Fully reproducible seeded runs: cv2.setRNGSeed is now seeded alongside np.random. Stabilo's RANSAC-based homography/affine estimation uses OpenCV's own internal RNG, which np.random.seed never reached β€” a given config's seed now makes every metric (Mean_IoU, Homography_error_norm, Mean_corner_error) bit-identical across repeat runs, not just the injected perturbations.

OpenCV 5.0 compatibility: bumped to stabilo>=1.3.1, which pins opencv-python<5.0.0. OpenCV 5.0 silently dropped cv2.AKAZE_create/BRISK_create/KAZE_create, breaking 3 of the 6 supported detectors.

Quieter low verbosity: Stabilo's own internal logger previously leaked WARNING+ messages to stderr regardless of --verbosity. --verbosity now controls it too β€” fully silent at 0, up to Stabilo's own info-level output at 3.


⚠️ Migrating from v1.0.0

  • Commands: invoke via stabilo-optimize benchmark <config> / stabilo-optimize plot <path> instead of python benchmark.py ... / python utils/plot.py ....
  • Install: pip install stabilo-optimize (or pip install -e '.[dev]' from source) replaces pip install -r requirements.txt; requirements.txt is removed.

πŸ§ͺ Testing

  • New pytest suite: 27 tests covering the deterministic core logic, reproducibility, and file logging.
  • ruff check --select F,E9 clean; python -m build && twine check verified.

πŸ“š Citation

If you use Stabilo-Optimize in your research, please cite it (see CITATION.cff / the README citation block, now at v1.1.0).

Full Changelog: v1.0.0...v1.1.0