Metadata-Version: 2.4
Name: spectrochempy
Version: 0.10.2
Summary: Processing, analysis and modelling Spectroscopic data for Chemistry with Python
Author-email: Arnaud Travert <contact@spectrochempy.fr>, Christian Fernandez <christian.fernandez@ensicaen.fr>
License: CeCILL-B FREE SOFTWARE LICENSE AGREEMENT
Project-URL: documentation, https://www.spectrochempy.fr/latest
Project-URL: homepage, https://www.spectrochempy.fr
Project-URL: issues, https://github.com/spectrochempy/spectrochempy/issues
Project-URL: repository, https://github.com/spectrochempy/spectrochempy
Keywords: spectroscopy,chemistry,data analysis
Classifier: Development Status :: 3 - Alpha
Classifier: Topic :: Utilities
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Software Development :: Libraries
Classifier: Intended Audience :: Science/Research
Classifier: License :: CeCILL-B Free Software License Agreement (CECILL-B)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: colorama
Requires-Dist: dill
Requires-Dist: ipython
Requires-Dist: jinja2
Requires-Dist: lazy_loader
Requires-Dist: matplotlib
Requires-Dist: numpy
Requires-Dist: pluggy
Requires-Dist: pint
Requires-Dist: pyyaml
Requires-Dist: requests
Requires-Dist: scikit-learn
Requires-Dist: scipy
Requires-Dist: tzlocal
Provides-Extra: build
Requires-Dist: setuptools; extra == "build"
Requires-Dist: setuptools_scm; extra == "build"
Requires-Dist: toml; extra == "build"
Requires-Dist: jinja2; extra == "build"
Requires-Dist: anaconda-client; extra == "build"
Provides-Extra: cp
Requires-Dist: spectrochempy[tensor]; extra == "cp"
Provides-Extra: dev
Requires-Dist: toml; extra == "dev"
Requires-Dist: ruff; extra == "dev"
Requires-Dist: pre-commit; extra == "dev"
Requires-Dist: spectrochempy[interactive]; extra == "dev"
Requires-Dist: spectrochempy[test]; extra == "dev"
Requires-Dist: spectrochempy[docs]; extra == "dev"
Provides-Extra: docs
Requires-Dist: ipykernel==6.29.5; extra == "docs"
Requires-Dist: ipywidgets==8.1.5; extra == "docs"
Requires-Dist: jsonschema==4.23.0; extra == "docs"
Requires-Dist: jupyter==1.1.1; extra == "docs"
Requires-Dist: jupyter-sphinx; extra == "docs"
Requires-Dist: jupytext==1.16.7; extra == "docs"
Requires-Dist: nbconvert==7.17.1; extra == "docs"
Requires-Dist: nbformat==5.10.4; extra == "docs"
Requires-Dist: nbsphinx==0.9.6; extra == "docs"
Requires-Dist: numpydoc==1.8.0; extra == "docs"
Requires-Dist: pickleshare; extra == "docs"
Requires-Dist: pypandoc==1.15; extra == "docs"
Requires-Dist: setuptools_scm; extra == "docs"
Requires-Dist: sphinx==7.4.7; extra == "docs"
Requires-Dist: sphinx-tabs==3.4.7; extra == "docs"
Requires-Dist: sphinx-copybutton==0.5.2; extra == "docs"
Requires-Dist: sphinx-design==0.6.0; extra == "docs"
Requires-Dist: sphinx-gallery==0.19.0; extra == "docs"
Requires-Dist: sphinx-rtd-theme==3.0.2; extra == "docs"
Requires-Dist: sphinxcontrib-bibtex==2.6.3; extra == "docs"
Requires-Dist: xarray; extra == "docs"
Requires-Dist: json5==0.10.0; extra == "docs"
Provides-Extra: interactive
Requires-Dist: jupyter; extra == "interactive"
Requires-Dist: jupyterlab; extra == "interactive"
Requires-Dist: ipykernel; extra == "interactive"
Requires-Dist: ipyparallel; extra == "interactive"
Requires-Dist: nodejs; extra == "interactive"
Requires-Dist: jupyter_server; extra == "interactive"
Provides-Extra: nmr
Requires-Dist: spectrochempy-nmr<0.2,>=0.1; extra == "nmr"
Provides-Extra: iris
Requires-Dist: spectrochempy-iris<0.2,>=0.1; extra == "iris"
Provides-Extra: tensor
Requires-Dist: spectrochempy-tensor<0.2,>=0.1; extra == "tensor"
Provides-Extra: plugins
Requires-Dist: spectrochempy[nmr]; extra == "plugins"
Requires-Dist: spectrochempy[iris]; extra == "plugins"
Requires-Dist: spectrochempy[tensor]; extra == "plugins"
Requires-Dist: spectrochempy-hypercomplex<0.2,>=0.1; extra == "plugins"
Requires-Dist: spectrochempy-carroucell<0.2,>=0.1; extra == "plugins"
Requires-Dist: spectrochempy-perkinelmer<0.2,>=0.1; extra == "plugins"
Provides-Extra: test
Requires-Dist: coverage; extra == "test"
Requires-Dist: ipywidgets; extra == "test"
Requires-Dist: pyfakefs; extra == "test"
Requires-Dist: pytest; extra == "test"
Requires-Dist: pytest-cov; extra == "test"
Requires-Dist: pytest-doctestplus; extra == "test"
Requires-Dist: pytest-ruff; extra == "test"
Requires-Dist: pytest-mock; extra == "test"
Requires-Dist: pytest-xdist; extra == "test"
Requires-Dist: numpydoc; extra == "test"
Requires-Dist: xarray; extra == "test"
Dynamic: license-file

<h1 align ="center">
<img src='https://github.com/spectrochempy/spectrochempy/raw/master/docs/_static/scpy.png' width="150">
<br>
SpectroChemPy
</h1>

[![Tests Actions Status](https://github.com/spectrochempy/spectrochempy/actions/workflows/test_package.yml/badge.svg)](https://github.com/spectrochempy/spectrochempy/actions)
[![codecov](https://codecov.io/gh/spectrochempy/spectrochempy/graph/badge.svg?token=A0NHMQNQ1E)](https://codecov.io/gh/spectrochempy/spectrochempy)
![Conda](https://img.shields.io/conda/v/spectrocat/spectrochempy)
[![PyPI version](https://badge.fury.io/py/spectrochempy.svg)](https://badge.fury.io/py/spectrochempy)
[![Docs](https://readthedocs.org/projects/docs/badge/?version=latest)](https://www.spectrochempy.fr/latest)
[![DOI](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.3823841-blue.svg)](https://doi.org/10.5281/zenodo.3823841)
![Conda](https://img.shields.io/conda/l/spectrocat/spectrochempy)

## What is SpectroChemPy?

SpectroChemPy (SCPy) is a framework for processing, analyzing, and modeling
spectroscopic data for chemistry with Python. It is cross-platform (Linux,
Windows, macOS) and combines a lightweight scientific core with optional
plugins for domain-specific workflows.

Its central object, `NDDataset`, provides numerical data together with
coordinates, units, masks, labels, provenance, and metadata, making it easier
to build reproducible spectroscopy workflows in Python.

## Key Features

* **Core Data Structure**: `NDDataset` with coordinates, units, masks, labels,
  provenance, and metadata
* **Project Management**: Organize and manipulate multiple datasets within a
  `Project`
* **Data Processing**:
  * Unit-aware mathematical operations
  * Baseline correction, automatic subtraction, interpolation, FFT workflows
  * Core processing with plugin-specific extensions where appropriate
* **Analysis Tools**:
  * SVD, PCA, MCR-ALS, EFA, PLS, fitting, and related result objects
* **I/O and Interoperability**:
  * Import from major spectroscopy and scientific data formats
  * Export to lightweight interchange formats such as CSV, JCAMP-DX, and
    minimal MATLAB `.mat` exchange files
  * Portable `NDDataset ↔ xarray.Dataset ↔ NetCDF` round-trips for the
    maintained portable subset
  * Safe native `.scp` / `.pscp` persistence by default, with explicit legacy
    opt-in only for historical trusted archives
* **Plugin System**:
  * Automatic discovery of optional plugins
  * Namespaced APIs: `scp.nmr.read_topspin(...)`, `scp.iris.IRIS()`
  * Dataset accessors for plugin-bound operations

## Official Plugins

Extend SpectroChemPy with official plugins (installed separately):

| Plugin | Install | What it provides |
|--------|---------|------------------|
| `spectrochempy-carroucell` | `pip install spectrochempy-carroucell` | Carroucell experiment reader |
| `spectrochempy-hypercomplex` | `pip install spectrochempy-hypercomplex` | Quaternion / hypercomplex support |
| `spectrochempy-iris` | `pip install spectrochempy-iris` | 2D-IRIS analysis tools |
| `spectrochempy-nmr` | `pip install spectrochempy-nmr` | Bruker TopSpin reader, NMR-specific processing |
| `spectrochempy-perkinelmer` | `pip install spectrochempy-perkinelmer` | PerkinElmer ``.sp`` IR file reader |
| `spectrochempy-tensor` | `pip install spectrochempy-tensor` | Tensor learning tools |


Or via conda from the `spectrocat` channel (`conda-forge` provides the dependencies):

```bash
mamba install -c spectrocat -c conda-forge spectrochempy-nmr
```

Plugins are discovered automatically once installed — no manual loading step required.

### Experimental plugins

`spectrochempy-cantera` is available as an **experimental** plugin. It is not
officially supported, not included in aggregate extras, and must be installed
manually::

    pip install spectrochempy-cantera

> **⚠️ WARNING**: SpectroChemPy is under active development. The current design may undergo major changes. Please report any issues to our [Issue Tracker](https://github.com/spectrochempy/spectrochempy/issues).

## Quick Links

* 📚 [Documentation](https://www.spectrochempy.fr)
* 🔌 [Plugins](https://www.spectrochempy.fr/userguide/plugins/index.html)
* 🚀 [Installation Guide](https://www.spectrochempy.fr/gettingstarted/install/index.html)
* 📓 [Example Notebooks](https://www.spectrochempy.fr/gettingstarted/examples/index.html)
* 🐛 [Issue Tracker](https://github.com/spectrochempy/spectrochempy/issues)
* 📝 [How to Cite](https://www.spectrochempy.fr/credits/citing.html)
* 💻 [Source Code](https://github.com/spectrochempy/spectrochempy)

## For contributors

If you want to contribute, start with:

* [`CONTRIBUTING.md`](CONTRIBUTING.md)
* the developer guide under [`docs/sources/devguide/`](docs/sources/devguide/)
* the [issue tracker](https://github.com/spectrochempy/spectrochempy/issues)

Maintainer-specific release and architecture notes live in
[`maintainers/`](maintainers/).

## License

[CeCILL-B FREE SOFTWARE LICENSE AGREEMENT](https://cecill.info/licences/Licence_CeCILL-B_V1-en.html)
