Skip to main content

pls4all

pls4all is the slim, PLS-only subset of nirs4all-methods — a thin Python binding over the portable libn4m C ABI (a C++17 PLS / NIRS engine). The wheel bundles the libn4m shared library, so pip install pls4all is self-contained; no separate native build is required. For the full method surface (preprocessing, selectors, diagnostics, augmenters, …) install the nirs4all-methods package instead and import it as n4m — both load the same libn4m.

The binding loads libn4m with ctypes.CDLL (so the GIL is released during native calls) and exposes:

  • version() / abi_version() introspection,
  • a Pythonic Context and Config (RAII lifecycle wrappers),
  • the PLS fit/predict surface and a scikit-learn-compatible pls4all.sklearn.PLSRegression (and the other PLS-family estimators),
  • a typed Pls4allError raised on any non-OK status, carrying the context's last_error message.

Quick start

import numpy as np
import pls4all
from pls4all.sklearn import PLSRegression

print(pls4all.version())      # e.g. "1.0.10+abi.2.3.0"
print(pls4all.abi_version())  # (2, 3, 0)

rng = np.random.default_rng(0)
X = rng.standard_normal((40, 12))
y = X @ rng.standard_normal(12)

model = PLSRegression(n_components=5).fit(X, y)
print(model.predict(X).shape)  # (40,)

Low-level lifecycle, if you need it:

with pls4all.Context() as ctx, pls4all.Config() as cfg:
    cfg.algorithm = pls4all.Algorithm.PLS_REGRESSION
    cfg.solver = pls4all.Solver.SIMPLS
    cfg.n_components = 5
    # ... drive a fit through the C ABI ...

scikit-learn is an optional dependency (only pls4all.sklearn needs it); the core import pls4all works with NumPy alone.

Pure-native estimator selection in the full package

The full nirs4all-methods distribution (imported as n4m) exposes the native single-level finetuning driver. It is not part of the slim pls4all namespace. Build the validation plan and search space through public owning objects:

import numpy as np

from n4m.model_selection import (
    Algorithm,
    Metric,
    Sampler,
    SearchSpace,
    ValidationPlan,
    finetune_estimator,
)

rng = np.random.default_rng(42)
X = rng.normal(size=(60, 12))
y = X @ rng.normal(size=12) + rng.normal(scale=0.02, size=60)
fold_ids = np.arange(X.shape[0], dtype=np.int32) % 5

with ValidationPlan.from_fold_ids(fold_ids) as plan:
    with SearchSpace() as space:
        space.add_int("n_components", 1, 10)
        result = finetune_estimator(
            Algorithm.PLS_REGRESSION,
            X,
            y,
            plan,
            space,
            n_trials=30,
            sampler=Sampler.TPE,
            metric=Metric.RMSE,
            seed=42,
            timeout_seconds=20.0,
        )

print(result.best_params)       # for example: {"n_components": 6}
print(result.best_score)
print(result.timed_out)         # True only for a successful partial timeout
print(len(result.trials))       # owning completed/failed trial snapshots

The eligible algorithms are PLS_REGRESSION, PLS_CANONICAL, PLS_SVD, OPLS, SPARSE_PLS and PCR. The five non-sparse routes require the exact keyword n_components, a non-log integer axis. SPARSE_PLS accepts any non-empty subset of n_components and sparsity_lambda; omitted axes retain the native defaults 2 and 0.0. sparsity_lambda must stay in [0, 1) and may be declared with space.add_float(..., log=True) when low > 0.

This call selects a configuration and returns an owning trace; it does not fit a final estimator on all rows. A timeout before any completion raises N4MError with CANCELLED. A later timeout returns the best partial result with result.timed_out is True and fewer trials than result.requested_trials. See docs/methods/optimization.md for the exact schema, status and validation-plan contracts.

Relation to nirs4all conformal learning and robustness

The Python bindings are thin translation layers over the libn4m C ABI. They expose native kernels, scikit-learn-compatible PLS estimators and the single-estimator finetune_estimator(...) selection trace, but they do not own the higher-level nirs4all statistical lifecycle.

Use nirs4all.run(tuning=...) when the workflow needs final winner projection, workspace persistence, .n4a packaging, optional nirs4all.calibrate() / predict_calibrated() semantics, CalibratedRunResult, or nirs4all.robustness() / RobustnessReport artifacts. Those guarantees and invalidation reasons are produced by nirs4all, not by n4m or pls4all.

Binding consumers must not reimplement tuning/conformal/robustness guarantees from raw native predictions. A UI, Studio panel or alternate language binding that wants to display conformal intervals or robustness summaries should consume the public nirs4all artifact/schema surfaces instead of inferring guarantees locally from finetune_estimator(...) or PLSRegression.predict(...).

Loading libn4m

The bundled wheel ships libn4m inside pls4all/lib/, found automatically. For development against a local build the loader searches, in order:

  1. $PLS4ALL_LIB_PATH — explicit path to libn4m for this package,
  2. $N4M_LIB_PATH — shared libn4m override honoured by both pls4all and n4m,
  3. pls4all/lib/libn4m* next to the installed package (wheel layout),
  4. <repo-root>/build/dev-release/cpp/src/libn4m* (developer convenience),
  5. the standard system search path (LD_LIBRARY_PATH, macOS rpath, Windows PATH).

Building libn4m from source (developers)

cmake --preset dev-release
cmake --build --preset dev-release --parallel

This produces build/dev-release/cpp/src/libn4m.so (.dylib / .dll on macOS / Windows), which the loader rules above pick up.

See https://github.com/GBeurier/nirs4all-methods for the full project.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pls4all-1.0.12.tar.gz (143.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pls4all-1.0.12-py3-none-win_amd64.whl (1.4 MB view details)

Uploaded Python 3Windows x86-64

pls4all-1.0.12-py3-none-musllinux_1_2_x86_64.whl (5.1 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

pls4all-1.0.12-py3-none-musllinux_1_2_aarch64.whl (4.5 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

pls4all-1.0.12-py3-none-manylinux_2_28_x86_64.whl (5.2 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

pls4all-1.0.12-py3-none-manylinux_2_28_aarch64.whl (4.0 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

pls4all-1.0.12-py3-none-macosx_11_0_universal2.whl (7.9 MB view details)

Uploaded Python 3macOS 11.0+ universal2 (ARM64, x86-64)

File details

Details for the file pls4all-1.0.12.tar.gz.

File metadata

  • Download URL: pls4all-1.0.12.tar.gz
  • Upload date:
  • Size: 143.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pls4all-1.0.12.tar.gz
Algorithm Hash digest
SHA256 3a4a0ea6377b13cf851718c90000d09537b01e923cd23a9ed3560f996ec53304
MD5 13c621412589554a3e9591b8ea3b9885
BLAKE2b-256 9c0527adf3fe18e286571639974d21c72d76adad17465907a7ab77ad324c1a59

See more details on using hashes here.

Provenance

The following attestation bundles were made for pls4all-1.0.12.tar.gz:

Publisher: release-python.yml on GBeurier/nirs4all-methods

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pls4all-1.0.12-py3-none-win_amd64.whl.

File metadata

  • Download URL: pls4all-1.0.12-py3-none-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pls4all-1.0.12-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 5ac810490356a87dab994f0e8e251d50f42cfec81c310f673732eb964c687337
MD5 1a7339e295c777fc0c0c2436e8c8720c
BLAKE2b-256 cf79d5b9c2c76a1ceec24de864546560fbda4fb52c76abf6ffa05b658a864e8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pls4all-1.0.12-py3-none-win_amd64.whl:

Publisher: release-python.yml on GBeurier/nirs4all-methods

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pls4all-1.0.12-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pls4all-1.0.12-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 46bdd885c2d513dcb37a56fe3fcf8a865ace0c3d18cbf71991c9a69ac32d39ac
MD5 3147eec2690ed2efb2c1c23cc3bc646e
BLAKE2b-256 95648dc381310169562102aa39416f5476ee23ac9c8c6672ad4245abd7b27ae8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pls4all-1.0.12-py3-none-musllinux_1_2_x86_64.whl:

Publisher: release-python.yml on GBeurier/nirs4all-methods

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pls4all-1.0.12-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pls4all-1.0.12-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 51f248603137dc26117ecfb3574201f4eed905ccd9985edcb8b2724853187da7
MD5 035fd3ed13ecf259e3f1e3f76355cbe5
BLAKE2b-256 a1d5f96ba903b06b593700fea3910a42f3b96fd7f217561df75e4587356113a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pls4all-1.0.12-py3-none-musllinux_1_2_aarch64.whl:

Publisher: release-python.yml on GBeurier/nirs4all-methods

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pls4all-1.0.12-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pls4all-1.0.12-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 801ff01898a0cd32e985f1c0fd17c47bdb064afd224c05c1f121781c3f73e37b
MD5 3c0195d4577364c67b43552301b73b70
BLAKE2b-256 1ce5a02d7d094ffd46d7d6adf9083f1d41eb1d27d3dc48045783086ac9c21381

See more details on using hashes here.

Provenance

The following attestation bundles were made for pls4all-1.0.12-py3-none-manylinux_2_28_x86_64.whl:

Publisher: release-python.yml on GBeurier/nirs4all-methods

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pls4all-1.0.12-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pls4all-1.0.12-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 847e26bc15a5634d47fdebc29bf2f966014ac3057beef182ebb5d125dac470eb
MD5 605309704d2f1ea8a7ef0526235a37d0
BLAKE2b-256 4bca10eba9f4e95155f4ebc216865255d94dd0140cd80a9ff3b95ee5112bd497

See more details on using hashes here.

Provenance

The following attestation bundles were made for pls4all-1.0.12-py3-none-manylinux_2_28_aarch64.whl:

Publisher: release-python.yml on GBeurier/nirs4all-methods

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pls4all-1.0.12-py3-none-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for pls4all-1.0.12-py3-none-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 15ba47daec4a343ae605f069dabbc9f648b23657115770001436afb5d62a3eb2
MD5 020d6baaf2dad017a1c76672fc46c59e
BLAKE2b-256 73101e937b4de11219702b79d1767862d1329745f1416af69699261d19569391

See more details on using hashes here.

Provenance

The following attestation bundles were made for pls4all-1.0.12-py3-none-macosx_11_0_universal2.whl:

Publisher: release-python.yml on GBeurier/nirs4all-methods

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.0.18

7 files

1.0.17

7 files

1.0.16

7 files

1.0.15

7 files

1.0.13

7 files

This release

1.0.12 This release

7 files

1.0.11

7 files

1.0.10

7 files

1.0.9

7 files

1.0.8

7 files

1.0.7

7 files

1.0.6

7 files

1.0.5

7 files

1.0.2

7 files

1.0.1

7 files

0.99.0

7 files

0.97.3

7 files

0.97.2

7 files

0.97.1

7 files

0.97.0

7 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page