Releases: la-niche/nonos
nonos v0.20.0
Summary
This is likely the biggest release so far.
It contains many (small) breaking changes, a wave of deprecations, adds new features and improves support for type checking.
While this version contains the foundations of what we envision as a future, stable API, it is still meant to be (mostly) backwards compatible, save for known breaking changes listed thereafter, most of which correspond to long deprecated or plain broken features.
Versions 3.10 to 3.14 of Python are supported.
Breaking Changes
- API: drop deprecated
GasField.codeproperty by @neutrinoceros in #537 - API: remove deprecated
rotate_gridargument by @neutrinoceros in #539 - API: remove deprecated method
GasDataSet.from_npyby @neutrinoceros in #545 - API: enforce
GasField.dataarray as a read-only view by @neutrinoceros in #555 - API: rewrite
nonos.loaderswith a single entry point by @neutrinoceros in #614 - API: rename
output_numbertosnapshot_uidby @neutrinoceros in #632, #640 and #651 - API: terminate deprecation cycle for planet-number arguments used to specify rotations by @neutrinoceros in #644
- API: drop long-deprecated an unused
nbinargument by @neutrinoceros in #673
Deprecations
- DEPR: deprecate now redundant
computefunction by @neutrinoceros in #542 - DEPR: deprecate
GasDataSetabbreviated attributes by @neutrinoceros in #553 - DEPR: fix missing spaces in deprecation messages by @neutrinoceros in #556
- DEPR: deprecate
nonos.tools.find_(around,nearest)by @neutrinoceros in #607 - DEPR: deprecate
nonos.styling.set_mpl_styleby @neutrinoceros in #635
Dependencies
- DEP: adjust lower bound on
packagingto an actually testable version by @neutrinoceros in #633 - DEP: require matplotlib 3.7 or newer by @neutrinoceros in #634
- DEP: require
exceptiongroupon Python 3.10 by @neutrinoceros in #637
Added
- ENH: implement
GasField.replaceas a convenience function around(copy|dataclasses).replaceby @neutrinoceros in #542 - ENH: improve forward compatibility with lick 0.10.0 (dev) by @neutrinoceros in #573
- ENH: implement
GasField.effective_dimby @neutrinoceros in #605 - ENH: add
GasField.as_ndviewand shorthand methods by @neutrinoceros in #623 - ENH: add integrity checks (to be used in
GasField.__post_init__) by @neutrinoceros in #637 - ENH: implement
GasFieldintegrity checks by @neutrinoceros in #631 - ENH: add integrity checks to
Coordinatesby @neutrinoceros in #643 - ENH/TYP: add explicit support for 0D Field reductions by @neutrinoceros in #652
- ENH: ignore any candidate parameter file that cannot be parsed by @neutrinoceros in #657
- ENH: add
closest_(index,value)andbracketting_valuesfunction tononos.api.toolsby @neutrinoceros in #607, #650 and #665 - ENH: add support for basic arithmetic operations between
Fieldobjects and numbers, or each other by @neutrinoceros in #670 - DEPR: improve deprecation warnings for
GasFieldproperties by @neutrinoceros in #543 - DEPR: add since info to remaining deprecation warnings by @neutrinoceros in #547
Type checking
- TYP: tighten type hints around interpolation methods in NonosLick by @neutrinoceros in #531
- RFC/TYP: rewrite Binary readers to construct return values iteratively under type-safe conditions by @neutrinoceros in #532
- RFC: make native_geometry a read-only property by @neutrinoceros in #533
- TYP: fine tune ty configuration to allow using it for type checking by @neutrinoceros in #534
- TYP: define finer type aliases for float arrays by @neutrinoceros in #563
- TYP: refine annotations on
PlanetDataby @neutrinoceros in #564 - TYP: refine annotations on
OrbitalElementsby @neutrinoceros in #565 - TYP: refine annotations on
PlanetReaderimpls by @neutrinoceros in #566 - TYP: drop support for type-checking on Python 3.10, add explicit support for 3.14 instead by @neutrinoceros in #568
- TYP: refine annotations for
nonos._geometryby @neutrinoceros in #567 - TYP: refine annotations for
nonos.api.satellite(1/2) by @neutrinoceros in #569 - TYP: refine annotations for
nonos.api.analysis(1/2) by @neutrinoceros in #570 - TYP: refine annotations for
nonos.api.analysis(2/2) by @neutrinoceros in #571 - TYP: refine annotations for
nonos.api.satellite(2/2) by @neutrinoceros in #572 - TYP: fix typechecking NonosLick by @neutrinoceros in #574
- TYP: refine type annotations on
PlanetReaderby @neutrinoceros in #576 - TYP: fix typechecking
GasFieldby @neutrinoceros in #577 - TYP/DEP: add scipy-stubs + all optional deps as type-check time dependencies by @neutrinoceros in #580
- TYP: add missing type annotations on function arguments and return values by @neutrinoceros in #583
- TYP: simplify type annotations on
find_*funcs by @neutrinoceros in #589 - TYP: selectively fix a couple
no-any-returnviolations, ignore the rest by @neutrinoceros in #595 - TYP: add missing type parameters in generic annotations by @neutrinoceros in #598
- TYP: add a missing type parameters in generic annotation by @neutrinoceros in #599
- TYP: move single ignore
import-untypedto local level by @neutrinoceros in #600 - TYP: refine type annotations for
BinReaderand impls by @neutrinoceros in #601 - TYP: fix incorrect assumption that
GasField.data.dimcould be anything other than 3 by @neutrinoceros in #611 - TYP: fix incorrect assumption that
GasField.data.dimcould be anything other than 3 (follow up) by @neutrinoceros in #612 - TYP: improve propagation of dtype metadata through loaders by @neutrinoceros in #604
- TYP: relax an overpromising type annotation by @neutrinoceros in #613
- TYP: properly annotate
GasField.mapby @neutrinoceros in #615 - TYP: fix inconsistent type annotations in geometry module by @neutrinoceros in #671
- DEPR: make deprecations visible to static analysis by @neutrinoceros in #548
Documentation
- DOC: remove useless docstring by @neutrinoceros in #606
- DOC: overhaul README page by @neutrinoceros in #616
- DOC: apply ruff format to README.md by @neutrinoceros in #624
- DOC: format code snippets in documentation by @neutrinoceros in #626
- DOC: rewrite docstring directives using standard notation by @neutrinoceros in #629
Refactors
- RFC/DEPR: rewrite
GasFieldas a dataclass by @neutrinoceros in #538 - CLN: drop unused default value by @neutrinoceros in #541
- RFC: use
GasField.replaceinternally by @neutrinoceros in #544 - RFC: convert an internal datatype from a
TypedDictto a dataclass by @neutrinoceros in #549 - RFC: drop redundant Path.resolve call by @neutrinoceros in #550
- RFC/DEPR: rename internal functions (parse->resolve) by @neutrinoceros in #551
- RFC: avoid self-triggered deprecations internal to
GasFieldby @neutrinoceros in #554 - RFC: rewrite while loop using a bool condition by @neutrinoceros in #578
- RFC: use
AssertionErrorinstead ofRuntimeErrorfor purely defensive branches by @neutrinoceros in https://github.c...
nonos-cli v0.1.1
Summary
This is a compatibility release for future versions of nonos.
There are no intended user visible changes, beyond avoiding deprecation warnings from nonos 0.20.0
Dependencies
- DEP: require matplotlib 3.7 or newer by @neutrinoceros in #636
- DEP: require nonos 0.20.0 or newer by @neutrinoceros in #645
Refactors
- RFC: drop unused kwargs in configure_logger by @neutrinoceros in #591
- RFC: leverage
Field.effective_ndimby @neutrinoceros in #663
Internal
- REL: prepare nonos-cli 0.1.1 by @neutrinoceros in #676
nonos v0.19.1
What's Changed
- TYP: refine pathlike annotations by @neutrinoceros in #495
- BUG: avoid a spurious divide-by-zero warning when converting from cartesian to native coordinates for idefix and pluto vtk inputs by @neutrinoceros in #520
Internal
- CLN: cleanup unused statement by @neutrinoceros in #496
- Lock file maintenance by @renovate[bot] in #497
- Lock file maintenance by @renovate[bot] in #498
- Update astral-sh/setup-uv action to v6.8.0 by @renovate[bot] in #499
- Update pypa/gh-action-pypi-publish action to v1.13.0 by @renovate[bot] in #500
- Update actions/download-artifact action to v5 by @renovate[bot] in #501
- SEC: apply zizmor-generated auto-fixes by @neutrinoceros in #502
- SEC: refine GHA permissions by @neutrinoceros in #503
- SEC: add zizmor as a pre-commit hook by @neutrinoceros in #504
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #505
- Lock file maintenance by @renovate[bot] in #506
- Update astral-sh/setup-uv action to v7 by @renovate[bot] in #507
- Update GitHub Artifact Actions (major) by @renovate[bot] in #508
- Lock file maintenance by @renovate[bot] in #509
- TST/DEP: upgrade pytest to version 9 by @neutrinoceros in #510
- Lock file maintenance by @renovate[bot] in #511
- Lock file maintenance by @renovate[bot] in #512
- MNT: migrate auto-updates from renovate to dependabot by @neutrinoceros in #517
- Bump actions/checkout from 5.0.0 to 6.0.0 in /.github/workflows by @dependabot[bot] in #519
- Bump astral-sh/setup-uv from 7.1.2 to 7.1.4 in /.github/workflows in the gha-patches group by @dependabot[bot] in #518
- REL: prepare release 0.19.1 by @neutrinoceros in #521
Full Changelog: v0.19.0...v0.19.1
nonos v0.19.0
What's Changed
This is the first release of nonos that does not include the nonos command line interface (by default): we refactored it out as a standalone package, nonos-cli, whose version 0.1.0 was released at the same time.
See https://github.com/la-niche/nonos/releases/tag/cli-v0.1.0 for recommended installation method + additional details.
If you're upgrading from a previous version of nonos, and wish to keep installing the CLI, you can update your requirement to nonos[cli]>=0.19.0. Note that if you were installing as nonos[all], you should not see any breaking change, as the CLI is also included there.
CPython 3.10 to 3.14 is supported.
Fixed
- BUG: correct exit method for
python -m nonosby @neutrinoceros in #453
Breaking changes
- API: remove deprecated module
nonos.api.from_simulation, and dependent, deprecated APIs by @neutrinoceros in #463 - API/CLI: split out the CLI into a new package (
nonos-cli) by @neutrinoceros in #464
Refactors
- RFC: idiomatic bytes to str conversion by @neutrinoceros in #452
Documentation
- DOC: add PyPI classifiers by @neutrinoceros in #451
- DOC: fix outdated metadata by @neutrinoceros in #466
- DOC: advertise development status instead a plain 'WIP' sign by @neutrinoceros in #485
Internal
- Bump astral-sh/setup-uv from 6.0.1 to 6.1.0 in /.github/workflows in the actions group by @dependabot[bot] in #440
- TST: set
--exclude-newerin oldest-deps env resolution by @neutrinoceros in #442 - Bump astral-sh/setup-uv from 6.1.0 to 6.3.1 in /.github/workflows in the actions group by @dependabot[bot] in #441
- TST: upgrade bleeding-edge CI to Python 3.14 by @neutrinoceros in #443
- MNT: lock file maintenance by @neutrinoceros in #444
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #445
- MNT: lockfile maintenance by @neutrinoceros in #446
- TST: re-implement devdeps locking+syncing with a more reliable strategy by @neutrinoceros in #447
- MNT: lock file maintenance by @neutrinoceros in #448
- MNT: add Python 3.14 to stable CI by @neutrinoceros in #449
- Bump astral-sh/setup-uv from 6.3.1 to 6.4.3 in /.github/workflows in the actions group by @dependabot[bot] in #450
- MNT: configure Renovate by @neutrinoceros in #455
- Lock file maintenance by @renovate[bot] in #457
- MNT: disable dependabot by @neutrinoceros in #458
- Lock file maintenance by @renovate[bot] in #460
- Update actions/checkout action to v5 by @renovate[bot] in #461
- Update actions/download-artifact action to v5 by @renovate[bot] in #462
- TST: fixup broken CI caching by @neutrinoceros in #465
- MNT: upgrade pre-commit hooks by @neutrinoceros in #468
- RFC: lint
__init__.pyfiles by @neutrinoceros in #469 - Lock file maintenance by @renovate[bot] in #470
- MNT: refine coverage settings by @neutrinoceros in #471
- BUG: fixup undefined names in dunder all by @neutrinoceros in #472
- MNT: refine pre-commit config for prek compatibility by @neutrinoceros in #474
- Update astral-sh/setup-uv action to v6.6.0 by @renovate[bot] in #476
- Update actions/checkout action to v4.3.0 by @renovate[bot] in #482
- Lock file maintenance by @renovate[bot] in #484
- Update actions/checkout action to v5 by @renovate[bot] in #483
- REL: prepare releases (nonos 0.19.0 + nonos-cli 0.1.0) by @neutrinoceros in #481
- REL: fixup release pre-checks by @neutrinoceros in #489
- REL: prepare releases (nonos 0.19.0 + nonos-cli 0.1.0) (tentative fixup) by @neutrinoceros in #491
- REL: prepare releases (nonos 0.19.0 + nonos-cli 0.1.0) (duplicate unsupported reusable workflow) by @neutrinoceros in #492
New Contributors
Full Changelog: v0.18.0...v0.19.0
nonos-cli v0.1.0
What's Changed
This is the first release of nonos-cli as a standalone package ! Most of the code isn't new; it was previously embedded within the main nonos package up to version 0.18.0, but we've decoupled our CLI from the core library so the latter could drastically reduce its dependencies to a bare minimum. nonos-cli itself depends on nonos, and can be installed in the following ways
# via a tool installer (recommended), such as uv or pipx
uv tool install nonos-cli
#
pipx install nonos-cli
# or as part of a working virtual env (discouraged, but supported)
python -m pip install nonos-cli
In all scenarios, you may want to include all optional dependencies (required e.g. for Line Integral Convolution support), by replacing nonos-cli with 'nonos-cli[all]' (quotes may or may not matter depending on your shell, but quoting is the portable option).
CPython 3.10 to 3.14 is supported.
Improved
- CLN: simplify argument parser settings by @neutrinoceros in #459
- DEP: re-implement warning and error message in loguru (ditch termcolor) by @neutrinoceros in #480
- RFC: lazy string interpolation in all logger messages by @neutrinoceros in #488
Internal
- CLN: clean up unused markup in warning messages by @neutrinoceros in #487
- REL: prepare releases (nonos 0.19.0 + nonos-cli 0.1.0) by @neutrinoceros in #481
- REL: fixup release pre-checks by @neutrinoceros in #489
- REL: prepare releases (nonos 0.19.0 + nonos-cli 0.1.0) (tentative fixup) by @neutrinoceros in #491
- REL: prepare releases (nonos 0.19.0 + nonos-cli 0.1.0) (duplicate unsupported reusable workflow) by @neutrinoceros in #492
Full Changelog: v0.18.0...cli-v0.1.0
v0.18.0
Summary
This version introduces support for vtk files issued by newest versions of idefix (including native-geometry metadata).
Support for Python 3.9 is discontinued. This version supports Python 3.10 to 3.13
Changed
- ENH: (CLI): support colormap extension packages other than cblind (cmasher, cmocean, cmyt) by @neutrinoceros in #377
- ENH: prefer native coordinates over reconstructed arrays in vtk files by @neutrinoceros in #371
- ENH: enable color in help messages with CPython >= 3.14 by @neutrinoceros in #425
- ENH: enable suggestions on typos with CPython >= 3.14 by @neutrinoceros in #426
Fixed
- BUG: explicitly set non graphic matplotlib backend within CLI if there's nothing to show by @neutrinoceros in #358
- BUG: fix missing progress bar when running CLI on a single CPU by @neutrinoceros in #376
- BUG: make
Plotable.plotreturn unconditionally by @neutrinoceros in #385 - BUG: fix reading coordinates in
Fargo3DReader.readby @volodia99 in #384
Dependencies
- DEP: drop
cblindas a hard dependency by @neutrinoceros in #378 - DEP: drop
lickas a hard dependency by @neutrinoceros in #379 - DEP: drop dependency on
rich(replaced by atomic dependenciestermcolor+tqdm) by @neutrinoceros in #375 - DEP: drop
scipyas a hard dependency by @neutrinoceros in #380 - DEP: drop support for Python 3.9 by @neutrinoceros in #374
- DEP: require inifix >= 5.1.0 and use its features by @neutrinoceros in #405
Internal
- Bump the actions group in /requirements with 2 updates by @dependabot in #355
- Bump astral-sh/setup-uv from 2 to 3 in /.github/workflows in the actions group by @dependabot in #356
- TST: add CPython 3.13 to regular test matrix by @neutrinoceros in #357
- BLD: migrate build backend from setuptools to hatchling by @neutrinoceros in #359
- Bump the actions group in /requirements with 4 updates by @dependabot in #361
- MNT: auto fix typos by @neutrinoceros in #362
- RFC: avoid pyplot interface in lib by @neutrinoceros in #364
- RFC: avoid pyplot interface in tests (1/2) by @neutrinoceros in #365
- TST: improve state cleanup in test fixture by @neutrinoceros in #366
- TST: move all imports at test module top level by @neutrinoceros in #367
- RFC: avoid pyplot interface in tests (2/3) by @neutrinoceros in #368
- TST: avoid pyplot interface in tests (3/3) by @neutrinoceros in #370
- BLD: exclude tests, docs and dev-only configuration files from published artifacts by @neutrinoceros in #373
- TST: filter a transitive deprecation warning from matplotlib 3.11 (dev) by @neutrinoceros in #381
- Bump astral-sh/setup-uv from 3 to 4 in /.github/workflows in the actions group by @dependabot in #382
- Bump the actions group in /requirements with 3 updates by @dependabot in #383
- TST: pin and upgrade GitHub Actions by @neutrinoceros in #388
- REL: bump pypa/gh-action-pypi-publish by @neutrinoceros in #389
- TST: rewrite testing workflows around uv.lock by @neutrinoceros in #390
- MNT: move doc dependencies to a PEP 735 dependency group by @neutrinoceros in #391
- Bump the actions group in /.github/workflows with 2 updates by @dependabot in #392
- DEP: lockfile maintenance by @neutrinoceros in #393
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in #394
- TST: update uv configuration in bleeding-edge CI by @neutrinoceros in #395
- TST: fix class introspection tests by @neutrinoceros in #398
- RFC: drop internal mixin class by @neutrinoceros in #396
- RFC: avoid abstract base classes (abc), prefer composition by @neutrinoceros in #397
- DEP: manually bump uv.lock by @neutrinoceros in #400
- TYP: fix ~20 errors discovered with pyright by @neutrinoceros in #399
- TYP: avoid defining a type alias as a regular variable by @neutrinoceros in #401
- RFC: refactor
Plotablearound typed data structures by @neutrinoceros in #386 - Bump the actions group in /.github/workflows with 4 updates by @dependabot in #402
- BLD: migrate package layout to src by @neutrinoceros in #360
- TST: small coverage improvements by @neutrinoceros in #403
- MNT: bump uv.lock by @neutrinoceros in #404
- TST: fix up coverage settings by @neutrinoceros in #406
- [ci skip] TST: remove outdated comment by @neutrinoceros in #407
- TYP: improve type checking in
process_fieldfunction by @neutrinoceros in #408 - TYP: ignore an unfixable pyright error by @neutrinoceros in #409
- TYP: fix an isolated pyright error by @neutrinoceros in #410
- BLD: switch build backend to
flit-coreby @neutrinoceros in #411 - BLD: require flit-core 3.11 or newer by @neutrinoceros in #412
- Bump the actions group in /.github/workflows with 3 updates by @dependabot in #413
- MNT: lock file maintenance by @neutrinoceros in #414
- TST: CI simplifications by @neutrinoceros in #416
- Bump the actions group across 1 directory with 3 updates by @dependabot in #417
- MNT: migrate typo-checker pre-commit hook (typos -> codespell) by @neutrinoceros in #419
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in #418
- TST: bump ubuntu image (20.04 -> 22.04) by @neutrinoceros in #421
- MNT: lockfile maintenance by @neutrinoceros in #420
- MNT: refine inifix pre-commit hooks configuration by @neutrinoceros in #422
- TST: upgrade GHA (
setup-uvanddownload-artifact) by @neutrinoceros in #423 - Bump astral-sh/setup-uv from 6.0.0 to 6.0.1 in /.github/workflows in the actions group by @dependabot in #424
- MNT: lock file maintenance by @neutrinoceros in #427
- RFC: refactor Coordinates class into a separate module by @neutrinoceros in #332
- CLN: cleanup a couple inline TODO comments by @neutrinoceros in #431
- TST: bump coverage
--fail-underthreshold to 90% by @neutrinoceros in #433 - TST: fine tune venv cache suffixes by @neutrinoceros in #434
- TST: cleanup unused test path by @neutrinoceros in #435
- TST: disable cache pruning by @neutrinoceros in #436
- MNT: only publish to PyPI from
la-nicheby @neutrinoceros in #437 - MNT: upgrade pre-commit hooks by @neutrinoceros in #439
- REL: prepare release 0.18.0 by @neutrinoceros in #438
Full Changelog: v0.17...v0.18.0
v0.17 (yanked)
What's Changed
- BUG: VTK slice reader by @volodia99 in https://github.com/volodia99/nonos/pull/353
- RLS: prep v0.17 by @volodia99 in https://github.com/volodia99/nonos/pull/354
Full Changelog: volodia99/nonos@v0.16.0...v0.17
v0.16.0
What's Changed
- BUG : add return type for operation methods of GasField + cleanup by @volodia99 in https://github.com/volodia99/nonos/pull/334
- UPT: name_operation argument in all GasField methods that may need it by @volodia99 in https://github.com/volodia99/nonos/pull/333
- Bump the actions group in /requirements with 4 updates by @dependabot in https://github.com/volodia99/nonos/pull/335
- BUG: avoid mutating
GasField's state inGasField.mapwhen rotation is requested by @neutrinoceros in https://github.com/volodia99/nonos/pull/336 - RFC: simplify array transformation logic in
GasField.mapby @neutrinoceros in https://github.com/volodia99/nonos/pull/337 - Bump the actions group in /requirements with 3 updates by @dependabot in https://github.com/volodia99/nonos/pull/339
- TST: make numexpr an optional test dependency by @neutrinoceros in https://github.com/volodia99/nonos/pull/340
- Bump the actions group in /requirements with 3 updates by @dependabot in https://github.com/volodia99/nonos/pull/341
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/volodia99/nonos/pull/342
- TST: speed up env resolution with uv by @neutrinoceros in https://github.com/volodia99/nonos/pull/343
- TST: weekly tests against Python 3.13 by @neutrinoceros in https://github.com/volodia99/nonos/pull/344
- Bump the actions group in /requirements with 3 updates by @dependabot in https://github.com/volodia99/nonos/pull/345
- BUG: handle a deprecation in inifix 5.0.0 by @neutrinoceros in https://github.com/volodia99/nonos/pull/346
- Bump the actions group in /requirements with 4 updates by @dependabot in https://github.com/volodia99/nonos/pull/347
- MNT: fixup coverage reporting by @neutrinoceros in https://github.com/volodia99/nonos/pull/348
- TST: migrate to official astral-sh/setup-uv action by @neutrinoceros in https://github.com/volodia99/nonos/pull/349
- MNT: simplify setup-uv usage following 2.1.1 release by @neutrinoceros in https://github.com/volodia99/nonos/pull/350
- REL: prep release 0.16 by @volodia99 in https://github.com/volodia99/nonos/pull/352
Full Changelog: volodia99/nonos@v0.15.1...v0.16.0
v0.15.1
What's Changed
- ENH: return path to saved file in GasField.save by @neutrinoceros in https://github.com/volodia99/nonos/pull/329
- TST: fix 3 bugs in
NPYReaderrelated to reading from directories which lack density files by @neutrinoceros in https://github.com/volodia99/nonos/pull/330 - REL: prep release 0.15.1 by @neutrinoceros in https://github.com/volodia99/nonos/pull/331
Full Changelog: volodia99/nonos@v0.15.0...v0.15.1
v0.15.0
What's Changed
- ENH: NonosLick with new lick options by @volodia99 in https://github.com/volodia99/nonos/pull/303
- BUG: hotfix a crash when saving to a non-existent dir by @neutrinoceros in https://github.com/volodia99/nonos/pull/327
- REL: prep release 0.15.0 by @neutrinoceros in https://github.com/volodia99/nonos/pull/328
Full Changelog: volodia99/nonos@v0.14.2...v0.15.0