What’s New in Revision 0.10.2
These are the changes in SpectroChemPy-0.10.2. See Release notes for a full changelog, including other versions of SpectroChemPy.
New Features
New official PerkinElmer reader plugin. SpectroChemPy now provides
spectrochempy-perkinelmer, an official plugin for reading PerkinElmer.spbinary files. The reader returns anNDDatasetwith wavelength coordinates and preserves acquisition metadata (instrument model, detector, source, date, serial number, software version, accessory, and image name). The parsing logic is adapted from the BSD-3-Clause licensed specio project. Includes a dedicated documentation page and a gallery example. (#897)read_omnicandread_spgcan now read OMNIC SPG files containing spectra with non-identical x-axis definitions usingallow_inconsistent_x=True. Incompatible spectra are returned as a list ofNDDatasetobjects instead of raising an error (#863).Added a minimal MATLAB
.matwriter for simple numericNDDatasetexchange usingscipy.io.savemat. This is an exchange format, not native SpectroChemPy persistence.
Improvements
Result objects now provide attribute-style access to named outputs and diagnostics, for example
pca.result.scores,pca.result.loadings, andpca.result.explained_variance. The IRIS and TENSOR/CP plugins now follow the same contract throughiris.resultandcp.result.Stabilised official plugin ecosystem. All six official plugins (hypercomplex, iris, tensor, nmr, carroucell, perkinelmer) now follow the same architecture, namespace API convention, and Result object contract.
Namespace-based I/O API (Phase 1). Core domains such as
jcamp,csv,matlab,omnic,opus,quadera,soc,spc,wire, andlabspecnow exposescp.<domain>.read(...). Domains with existing writers (jcamp,csv,matlab) also exposescp.<domain>.write(...). These namespaces delegate to the existing publicread_*andwrite_*functions; no behaviour has changed. Legacy names remain supported.PerkinElmer ``.sp`` reader enriched with additional metadata fields (
instrument_serial_number,instrument_software_version,ir_accessory,image_name). Whenimage_nameis present anddataset.descriptionis empty,image_nameis used as the dataset description.OMNIC acquisition metadata harmonized across SPG and SRS readers.
collection_length,optical_velocity, andlaser_frequencyare now consistently exposed indataset.metafor all three OMNIC formats (SPA, SPG, SRS). Previously, SPG attached none of these fields and SRS omittedoptical_velocity.OMNIC Experiment Information blocks decoded (block-directory key 0x82, subtype 0x79) in SPA and SPG readers. The reader now extracts the experiment file path and short name, accessory/compartment name, and experiment description from the binary block and stores them in
dataset.metaasomnic_experiment_path,omnic_experiment_file,omnic_accessory, andomnic_experiment_title. Malformed or missing blocks are handled defensively.Clarified specialized writer docstrings so format-specific APIs such as
write_csv(),write_jcamp(), andwrite_matlab()no longer advertise the generic multi-protocol export options documented onwrite().Notebook prompts hidden in generated tutorials; gallery example repr noise reduced.
Bug Fixes
Standardized unsupported reader errors so invalid protocols, unrecognized file types, and unsupported CSV origins report the affected filename, requested or detected value, and supported alternatives. (#1143)
Developer
Official plugins now use the
Framework :: SpectroChemPy :: Official PluginTrove classifier inpyproject.tomlas the single source of truth for CI auto-discovery. Adding a new official plugin no longer requires editing workflow files. Documented inCONTRIBUTING.mdand the plugin packaging guide. The plugin template (plugins/plugin-template/pyproject.toml) includes a comment explaining the requirement.Raised all plugin lower bounds from
>=0.9to>=0.10acrosspyproject.tomlandrecipe.yamlfiles. Added theFramework :: SpectroChemPy :: Official Pluginclassifier to each official plugin’spyproject.toml. Addedspectrochempy-perkinelmerto the core[plugins]extra and related requirement files.Refactored CI auto-discovery for official plugins.
publish_plugins.yml,release_plugin.yml,build_package.yml,test_package.yml,build_docs.yml, andinstall_on_colab.ymlnow discover plugins dynamically via the classifier instead of hardcoded allowlists.select_test_targets.py,ci_diagnostics.py, andplugin_version_status.pyuse the same mechanism. Addedsrc/spectrochempy/ci/install_plugins.pyhelper with--editable,--list-names, and pip flags for CI and local development.