What’s New in Revision 0.9.3
These are the changes in SpectroChemPy-0.9.3. See Release notes for a full changelog, including other versions of SpectroChemPy.
Bug Fixes
Fixed
NDDataset.squeeze()for singleton dimensions without explicit coordinates and aligned Labspec in-memory byte decoding with the Latin-1 fallback already used for local files.Fixed coordinate propagation in
@_wrap_ndarray_output_to_nddatasetwhentypey="features"andtypex="components"are both set — replaced sequentialifblocks with anelifchain and added an explicit combined case to prevent conflicting coordinate assignments.
Developer
MAINT: Modernized PLS regression tests (
test_pls.py): replaced the network-dependent Corn dataset with a deterministic synthetic latent-variable fixture (seeded RNG), split the monolithic test into 15 focused functions across three test classes covering univariate/multivariate fits, score, predict, transform, fit_transform, inverse_transform, and masked-data handling, removed all plotting from algorithmic validation, and strengthened assertions with sklearn numerical parity checks.MAINT: Modernized kinetic utility tests (
test_kineticutilities.py): split the monolithictest_ABCinto five focused tests (initialization, isothermal integration, isothermal fitting, non-isothermal single-condition fitting, non-isothermal multi-condition fitting), removed all plotting and debug output, and strengthened assertions with numerical convergence checks.MAINT: Modernized curve-fitting model tests (
test_models.py): replaced the monolithictest_modelswith parametrized coverage of construction metadata, evaluation on plain ndarray / unit-valued / Coord inputs, amplitude linearity, and known centre-value regression for all six 1-D models; removed all dead code (commented plotting blocks, unused imports, always-true guard).MAINT: Final analysis test cleanup: replaced legacy
np.random.seed/np.random.randusage in CP decomposition tests withnp.random.default_rng(42)and removed dead/commented test code fromtest_base.py.MAINT: Modernized selected analysis tests with deterministic synthetic datasets, reducing unnecessary real-data dependencies and strengthening numerical, shape, metadata, masking, and reporting assertions.
MAINT: Modernized SIMPLISMA analysis tests using deterministic synthetic datasets, removing the dependency on
als2004dataset.MATand strengthening validation of pure-variable selection, decomposition outputs, reconstruction behavior, and error handling.MAINT: Modernized FastICA analysis tests using deterministic synthetic ICA mixtures, removing the dependency on
als2004dataset.MATand strengthening wrapper parity, transform, inverse-transform, masking, and validation coverage.MAINT: Modernized baseline analysis tests using deterministic synthetic datasets, removing dependencies on external IR and MS test files and strengthening validation of baseline estimation, masking, preprocessing APIs, and multivariate baseline workflows.
MAINT: Converted NMF analysis tests from the legacy MATLAB fixture to a deterministic non-negative synthetic dataset with focused parity, reconstruction, masking, metadata, and non-negativity checks.
MAINT: Moved IRIS
plot_meritcoverage out of core analysis tests into the IRIS plugin test suite, clarifying plugin ownership for plugin/data plotting integration checks.MAINT: Moved IRIS plugin import/export checks (
TestIrisImportsforplot_iris_lcurve,plot_iris_distribution,plot_iris_merit) from the core composite plotting test module into the IRIS plugin test suite, removing all direct IRIS plugin runtime import references from the core test tree.MAINT: Classified plugin-dependent tests with explicit markers and skip guards so optional plugin imports do not fail during core-only collection, while keeping core-only and plugin/integration validation clearly separated.
MAINT: Modernized core dataset tests with stronger
NDDataset,NDMath,Coord,CoordSet,NDArray, andNDComplexArrayvalidation and split the large dataset test module into focused test files.MAINT: Converted legacy plotting tests (1D, 2D, 3D, multiplot) from external spectroscopy files to deterministic synthetic fixtures, making them runnable in core-only CI without testdata downloads.
MAINT: Converted PCA plotting tests (
plot_score,plot_scree) from external IR data to deterministic synthetic datasets; decoupled 5 tests from PCA computation using precomputed score fixtures.MAINT: Classified documentation plotting tests as
docs/integrationtests with explicitpytest.mark.docsandpytest.mark.datamarkers; added graceful skip when IR testdata is unavailable.MAINT: Registered
docsanddatapytest markers in the top-level conftest for use across the test suite.MAINT: Classified all reader/writer I/O tests with explicit
pytest.mark.data(real instrument format files) orpytest.mark.network(remote downloads); core-safe synthetic I/O tests are selectable via-m "not data and not network".MAINT: Converted
test_write_csv.pyfrom a real IR dataset fixture to deterministic syntheticNDDatasetandCoordobjects, removing its hidden external testdata dependency.MAINT: Split the monolithic
test_read.py::test_readinto focused tests with explicit marker separation and shared skip helpers.DEV: Added TODO/FIXME note in
docs/sources/devguide/plugins/packaging.rstexplaining that dev conda uploads for plugins are disabled until distinct dev versions are generated.DEV: Added reusable plugin version-status tooling and temporary
next_patch.devNmetadata injection for plugin development builds, with automatic conda uploads tospectrocat/label/devonmasterwhen release-relevant plugin files changed.CI: Added a dedicated core-only package-test validation row that skips official plugin installation, plugin diagnostics, documentation script execution, external testdata restore, coverage generation, and Codecov upload.
CI: Aligned the plugin release workflow status summary with the shared release-relevant plugin change detector used by the read-only status workflow.
CI: Restored unique TestPyPI development uploads by deriving core push builds from the next patch version and publishing plugin TestPyPI builds from
masteronly when release-relevant plugin files changed.CI: Limited the slow Colab compatibility workflow to manual runs and pull requests labeled
needs-colab.CI: Added an explicit documentation versions manifest and a manual
Repair docs version indexworkflow to refresh the published version dropdown without rebuilding the full documentation.CI: Allowed documentation builds to use canonical core release tags such as
spectrochempy-v0.9.2directly, while publishing versioned docs under the plain semver directory.CI: Added plugin status table to
release_plugin.ymlstep summary, listing official plugins and whether they have changed since their last release tag.CI: Added
confirm_zenodo_enabledcheckbox toprepare_new_release.ymlso maintainers verify Zenodo is active before creating a release PR.CI: Disabled automatic dev conda uploads for official plugins. Plugin conda packages are still built in CI for testing, but only uploaded during stable plugin releases.
CI: Added
plugin_release_status.ymlworkflow (workflow_dispatch) to inspect official plugin changes since their last release tag before deciding to run a release.DOC: Improved maintainer release documentation with explicit Zenodo verification steps, versioned docs checks, docs build notes, and roadmap guidance.
DOC: Clarified that official plugin versions are independent from the core package version and that conda dev plugin builds are not currently published automatically.
DOC: Updated contributor documentation build instructions to use the repository-root
docs/make.pyentry point and currentbuild/htmloutput.DOC: Updated optional plugin installation notes so conda development channels no longer imply automatic plugin dev uploads.
DOC: Aligned workflow comments and recovery notes with the current plugin conda policy.
DOC: Updated plugin release documentation to use canonical core tags, current branch pushes, plugin
__init__.pyversion bumps, and current Anaconda upload behavior.DOC: Clarified that official plugin releases must be run from
masterand can be prepared with the read-only plugin release status workflow.DOC: Finished maintainer release notes cleanup for master checkout, draft release titles, TestPyPI wording, plugin PyPI
skip-existingbehavior, and recovery links.DOC: Tightened the developer guide entry points, Git commands, pull request template guidance, and testing guidance.