Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

RobustCov

RobustCov — robust multivariate geometry

PyPI Python Docs CI Wheels License

Robust covariance, anomaly scoring, PCA, and monitoring for difficult multivariate data.

robustcov is a Python/C++ library for robust multivariate geometry. It estimates covariance, scatter, precision, principal subspaces, and related latent structure when empirical covariance is unreliable because the data are contaminated, heavy-tailed, high-dimensional, incomplete, structured, or shifting.

Use it to:

  • fit robust covariance or scatter and compute Mahalanobis anomaly scores;
  • convert held-out anomaly or monitoring scores into conformal p-values and calibrated alert labels;
  • perform robust PCA, low-rank-plus-sparse decomposition, reconstruction diagnostics, and subspace monitoring;
  • build robust whitening transforms, kernels, and metrics for learned features or embeddings;
  • handle bad cells, missing values, matrix-valued observations, and multilinear low-rank structure;
  • estimate sparse precision graphs or recover robust independent sources and latent factors.

The package provides numerical estimators and diagnostics with sklearn-style fit APIs. It does not train neural networks or replace a production monitoring platform.

Status: alpha / experimental. Core estimator interfaces are intended to remain recognizable, but some APIs may change before 1.0.

Start from your problem

Your data or goal Start with
A minority of complete rows are outliers and n is comfortably larger than p FastMCD, DetS, or DetMM
Broad heavy tails or an ill-conditioned/high-dimensional covariance RegularizedCauchy, StudentTScatter, RegularizedTyler, or MRCD
Isolated bad cells or missing entries CellMCD, CellRCov, CellPCA, or SparseCellPCA
A matrix is low rank plus sparse, arbitrarily large cell corruption PrincipalComponentPursuit (PCP)
Matrix-valued or multilinear observations MMCD or RobustMultilinearPCA
Robust dimensionality reduction or a fixed-reference subspace monitor RobustPCA, DistributionallyRobustPCA, SubspaceStability, or RobustSubspaceMonitor
Follow a slowly changing subspace in a stream Experimental OnlineRobustSubspaceTracker
Turn a held-out anomaly or monitoring score into a finite-sample alert ConformalAlertCalibrator
Sparse conditional-dependence structure RobustGraphicalLasso or SGLASSO
Learned features, embeddings, whitening, or robust kernels FeatureGeometry
Independent or temporally correlated latent sources TwoScatterICA, RobustSOBI, or RobustFactorModel

See the documentation for the task-oriented workflow map, estimator selection guide, examples, benchmarks, and API reference.

Method families

  • Covariance and scatter: FastMCD, DetS, DetMM, MRCD, KMRCD, regularized Cauchy, Student-t, and Tyler estimators.
  • Cellwise and structured data: CellMCD, CellRCov, MMCD, RobustMultilinearPCA, CellPCA, and SparseCellPCA.
  • Matrix decomposition, PCA, and monitoring: PrincipalComponentPursuit, RobustPCA, DensityPowerRobustPCA, experimental DistributionallyRobustPCA, SubspaceStability, RobustSubspaceMonitor, experimental OnlineRobustSubspaceTracker, and ConformalAlertCalibrator.
  • Sparse precision: RobustGraphicalLasso and SGLASSO.
  • Latent structure: TwoScatterICA, SOBI, RobustSOBI, and RobustFactorModel.
  • Reusable geometry: robust distances, anomaly diagnostics, whitening, FeatureGeometry, full-matrix kernels, SPD utilities, and optional OpenMP acceleration.

Installation

From PyPI after a release is published:

python -m pip install -U pip
python -m pip install robustcov

Supported release wheels are built for CPython 3.12, 3.13, and 3.14 on Ubuntu, Windows, and macOS by GitHub Actions. The package uses a C++/pybind11 backend built with scikit-build-core.

Dependency lower bounds are selected per Python version so Python 3.12 users are not forced onto the versions needed only for Python 3.14. The exact oldest tested sets are recorded in requirements/minimum.txt and exercised by CI.

Plotting is optional and is not installed with the numerical core:

python -m pip install "robustcov[plot]"

The package can be imported without the compiled extension. NumPy-backed estimators continue to work, while native-only estimators such as FastMCD and TylerShape raise an actionable error when fitted. Check the active installation with robustcov.native_available(). A native-free development wheel can be built explicitly with:

python -m build --wheel -Ccmake.define.ROBUSTCOV_BUILD_NATIVE=OFF

Inside a conda environment, install the PyPI wheels with pip:

conda create -n robustcov python=3.12 pip
conda activate robustcov
python -m pip install robustcov

For local development:

git clone https://github.com/smiryusupov/robustcov.git
cd robustcov

python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate

python -m pip install -U pip
python -m pip install -e ".[dev,docs,examples]"
python -m compileall -q robustcov tests examples benchmarks docs
python -m pytest -q

Quickstart

import numpy as np
import robustcov as rc

rng = np.random.default_rng(0)

# Heavy-tailed data with injected outliers
X = rng.standard_t(df=3, size=(400, 5))
X[:30] += 8.0

est = rc.FastMCD(quality="balanced", random_state=42).fit(X)

print(est.location_)
print(est.covariance_)
print(est.radial_kurtosis_)

det = rc.RobustOutlierDetector(
    estimator=rc.FastMCD(quality="balanced", random_state=42),
    contamination=0.075,
).fit(X)
print(det.labels_)

Calibrate a separate held-out set of anomaly scores instead of choosing an operational alert threshold heuristically:

calibrator = rc.ConformalAlertCalibrator(alpha=0.05).fit(
    -det.score_samples(X_calibration)
)
p_values = calibrator.p_values(-det.score_samples(X_new))
alerts = calibrator.predict_alerts(-det.score_samples(X_new))

The usual finite-sample marginal interpretation requires exchangeability between the held-out calibration scores and future inlier scores.

For a normal subspace that is expected to evolve gradually, use the experimental online tracker rather than silently updating a frozen monitor:

tracker = rc.OnlineRobustSubspaceTracker(
    n_components=3,
    update_interval=64,
    buffer_size=256,
    adaptation_rate=0.5,
).fit(X_initial)

update = tracker.update(X_next_batch)
print(update.n_accepted, update.n_rejected, update.change_detected)

The tracker is a RobustCov composition inspired by robust subspace-tracking research; it is not an implementation of NORST and does not inherit NORST's theoretical guarantees.

For deterministic smooth high-breakdown scatter and an efficiency refinement:

dets = rc.DetS(breakdown=0.50).fit(X)
detmm = rc.DetMM(breakdown=0.50, efficiency=0.95).fit(X)

print(dets.weights_)
print(detmm.covariance_)

These estimators require the central half-sample to be nonsingular. Use MRCD when p is too large for that condition.

For small-sample or high-dimensional heavy-tailed data:

est = rc.RegularizedCauchy(alpha=0.10).fit(X)
print(est.covariance_)

student = rc.StudentTScatter(df=3, alpha=0.05).fit(X)
print(student.radial_kurtosis_)

For high-dimensional data with a minority of contaminated rows:

mrcd = rc.MRCD(
    contamination=0.20,
    max_condition_number=50,
    random_state=0,
).fit(X)

print(mrcd.regularization_)
print(mrcd.standardized_condition_number_)
print(mrcd.support_)

For non-elliptical inlier structure, fit MRCD in a kernel feature space:

kmrcd = rc.KMRCD(
    kernel="rbf",
    gamma="median",
    contamination=0.15,
    random_state=0,
).fit(X)

print(kmrcd.support_)
print(kmrcd.distances_)

The RBF bandwidth strongly affects the geometry. The median heuristic is a useful starting point, not an automatic guarantee of good separation.

For matrix-valued observations such as sensor-by-time windows:

mmcd = rc.MMCD(
    contamination=0.20,
    random_state=0,
).fit(X_matrices)

print(mmcd.row_covariance_)
print(mmcd.column_covariance_)
print(mmcd.mahalanobis(X_matrices))

For tables with isolated bad cells and missing entries:

cellmcd = rc.CellMCD(alpha=0.75, quantile=0.99).fit(X)

print(cellmcd.cell_outlier_mask_)
X_corrected = cellmcd.corrected_data_

For high-dimensional tables with bad cells, abnormal rows, and missing entries:

cellrcov = rc.CellRCov(
    n_components=4,
    residual_shrinkage="auto",
).fit(X)

print(cellrcov.covariance_)
print(cellrcov.residual_shrinkage_)
print(cellrcov.cell_outlier_mask_)

For sparse interpretable loadings under the same contamination model:

sparse_pca = rc.SparseCellPCA(
    n_components=3,
    alpha=0.05,
    sparsity_threshold=0.01,
).fit(X)

print(sparse_pca.n_nonzero_loadings_)
print(sparse_pca.loading_support_)

For a sparse conditional-dependence graph:

graph = rc.RobustGraphicalLasso(
    alpha="ebic",
    scatter_estimator=rc.CellMCD(
        alpha=0.75,
        min_samples_per_feature=None,
    ),
).fit(X)

print(graph.partial_correlation_)
print(graph.edge_list(feature_names))

For a sparse graph when radial magnitudes are extremely heavy-tailed:

shape_graph = rc.SGLASSO(
    alpha=0.12,
).fit(X)

print(shape_graph.partial_correlation_)
print(shape_graph.edge_list(feature_names))

SGLASSO estimates a shape precision matrix up to a common scale. It is not cellwise robust; use a CellMCD-based RobustGraphicalLasso when individual coordinates are corrupted.

For dimensionality reduction under cellwise and rowwise contamination:

cellpca = rc.CellPCA(n_components=3).fit(X)

Z = cellpca.transform(X)
print(cellpca.cell_outlier_mask_)
print(cellpca.case_outlier_mask_)
X_corrected = cellpca.corrected_data_

For automatic exploratory selection:

auto = rc.AutoRobustScatter(selection="diagnostic").fit(X)

print(auto.best_estimator_name_)
print(auto.summary())

Low-rank plus sparse decomposition

PrincipalComponentPursuit implements the canonical convex program often called robust PCA in the matrix-decomposition literature. It separates one observed matrix into a low-rank signal and sparse, arbitrarily large cell corruption:

pcp = rc.PrincipalComponentPursuit(tol=1e-7).fit(X)

low_rank = pcp.low_rank_
sparse_corruption = pcp.sparse_
flagged_cells = pcp.sparse_support_
print(pcp.decomposition_summary())

Use it when the scientific model is X = low_rank + sparse. It is not a covariance estimator, does not handle missing values or dense noise, and does not replace RobustPCA for heavy tails or rowwise outliers.

Robust PCA

RobustPCA computes principal components from any compatible robust scatter estimator. The interface follows ordinary PCA, with additional distances for diagnosing unusual observations.

pca = rc.RobustPCA(
    n_components=0.95,
    estimator=rc.RegularizedCauchy(alpha=0.10),
).fit(X)

Z = pca.transform(X)
score_distance = pca.score_distances(X)
orthogonal_distance = pca.orthogonal_distances(X)

rc.plot_robust_pca_outlier_map(
    pca,
    output_path="robust_pca_outlier_map.png",
    show=False,
)

Score distance measures how far a row lies along the retained components. Orthogonal distance measures the part that those components cannot reconstruct. This implementation uses an eigendecomposition of a robust scatter matrix; it is not the low-rank-plus-sparse method with the same common name.

For a direct low-rank fit with density-power residual weighting:

dpd_pca = rc.DensityPowerRobustPCA(
    n_components=5,
    alpha=0.30,
).fit(X)

Z_dpd = dpd_pca.transform(X)
cell_weights = dpd_pca.cell_weights(X)

This estimator requires a fixed component count and complete finite input.

Bootstrap the fitted loadings and retained subspace with:

stability = rc.SubspaceStability(
    pca=pca,
    n_resamples=200,
    resampling="stationary",
    block_length=20,
    random_state=0,
).fit(X)

print(stability.loading_interval_)
print(stability.max_principal_angle_degrees_)

Use resampling="iid" for independent rows, a block or stationary bootstrap for ordered weakly dependent observations, and resampling="cluster" for repeated measurements grouped by subject, site, or account.

Experimental adversarial covariance filtering

For an approximately Gaussian reference with a known upper bound on arbitrarily replaced rows, robustcov.experimental provides a practical spectral-filtering composite:

from robustcov.experimental import SpectralFilteringCovariance

filtered = SpectralFilteringCovariance(
    contamination=0.10,
    random_state=0,
).fit(X)

print(filtered.n_removed_)
print(filtered.covariance_)

The estimator filters dominant directions in lifted quadratic features and exposes its support and iteration diagnostics. It is inspired by algorithmic robust-statistics filtering, but it is not the optimal Gaussian algorithm from the cited papers and carries no corresponding finite-sample guarantee. Use the Tyler/Student-t/Cauchy family instead for clean heavy-tailed data, and CellMCD or CellRCov for cellwise corruption. See docs/adversarial_covariance_filtering.rst.

Experimental distributionally robust PCA

DistributionallyRobustPCA is available only from robustcov.experimental. It evaluates a weighted-Wasserstein worst-case reconstruction risk over a deterministic adaptive candidate path. Identity transport geometry is retained as a required ordinary-PCA control; anisotropic geometry is what expresses the assumed train-to-deployment shift.

from robustcov.experimental import DistributionallyRobustPCA

dro_pca = DistributionallyRobustPCA(
    n_components=2,
    radius=2.5,
    transport_geometry="residual",
    formulation="exact",
).fit(X_train)

print(dro_pca.exact_worst_case_risk_)
print(dro_pca.selected_gamma_)

The current exact formulation ranks a finite deterministic path using the exact scalar-dual ambiguity-set risk; it does not claim a global solution of the non-convex Grassmann problem. See docs/distributionally_robust_pca.rst and the held-out shift benchmark before using it in scientific comparisons.

Rolling subspace monitoring

RobustSubspaceMonitor compares incoming batches with a fixed reference fit. A separate robust model is fitted to the current rolling window, allowing the monitor to distinguish movement of the center from changes in scale, covariance shape, or principal directions.

monitor = rc.RobustSubspaceMonitor(
    n_components=0.95,
    estimator=rc.RegularizedCauchy(alpha=0.10),
    window_size=256,
    threshold_scale=1.2,
    alarm_patience=2,
).fit(X_reference)

result = monitor.update(X_batch)
if result.ready:
    print(result.summary())
    print(result.exceeded)

New rows are scored against the reference before the rolling model is updated. A persistent production problem therefore cannot redefine the baseline before it is detected.

Main estimators

Estimator Best use case Notes
FastMCD Separable contamination, n >> p Fast robust covariance and support diagnostics
DetS Rowwise contamination with smooth high-breakdown weighting Deterministic Tukey-bisquare S-estimator; requires ceil(n/2) > p
DetMM The same regime when higher Gaussian efficiency is desired DetS start with fixed robust scale and a less aggressive MM refinement
MRCD Rowwise contamination with p close to or greater than n Regularized high-breakdown subset covariance with automatic condition control
KMRCD Non-elliptical inlier structure or implicit kernel data MRCD subset search in a positive-semidefinite kernel feature space
MMCD Matrix-valued observations with contaminated rows/samples Robust mean matrix and Kronecker row/column covariance factors
RobustMultilinearPCA Matrix-valued low-rank data with bad cells, abnormal samples, and missing entries Robust Tucker-2 fit with cellwise and casewise redescending weights
CellMCD Tables with isolated corrupted or missing cells and n > p Observed-likelihood covariance fit with cell-level flags and conditional predictions
CellRCov High-dimensional tables with bad cells, abnormal rows, and missing entries Robust low-rank covariance plus a diagonally regularized residual covariance
CellPCA Low-rank tables with cell errors, abnormal rows, and missing entries Cellwise and casewise redescending weights in a weighted low-rank fit
SparseCellPCA Interpretable low-rank tables with the same contamination model CellPCA weights plus exact-zero elastic-net loading updates
RegularizedCauchy Very heavy tails, small samples, p close to n Strong radial downweighting plus shrinkage
StudentTScatter Diffuse heavy tails Smooth heavy-tail scatter estimator
RegularizedTyler Heavy-tailed shape estimation Scale-free shape unless scale correction is requested
AutoRobustScatter Exploratory estimator selection Diagnostic or stability-based selector
ClusterRobustOutlierDetector Multimodal data Cluster-then-local-robust-scatter diagnostic
PrincipalComponentPursuit One matrix is low rank plus sparse gross cell corruption Nuclear-norm plus entrywise-L1 convex decomposition solved by inexact ALM
RobustPCA Robust dimensionality reduction and subspace diagnostics Eigendecomposition of a robust location and scatter estimate
DensityPowerRobustPCA Direct robust low-rank fitting with cell residual weights Gaussian density-power-divergence alternating regressions
experimental DistributionallyRobustPCA Principal subspaces under stated train-to-target distribution shift Exact weighted-Wasserstein risk over a deterministic adaptive candidate path

KLRegularizedTyler and WieselTyler are currently documented as aliases/prototype variants around the regularized Tyler implementation. HellingerRegularizedTyler is experimental.

For a scenario-specific decision table, capability limits, and cross-method results, see docs/method_comparison.rst. The comparison separates covariance, PCA, matrix-valued, and sparse-graph tasks rather than declaring one global winner.

Robust kernels for GP and kernel methods

A robust scatter estimate can be used as a fixed full-matrix input metric for kernel methods. robustcov supplies the metric and kernel adapters; model fitting remains in scikit-learn, GPyTorch, or another downstream library.

import robustcov as rc

metric = rc.RobustInputMetric(
    estimator=rc.RegularizedCauchy(alpha=0.05, scale_correction="radial_median"),
).fit(X_train)

K = rc.robust_rbf_kernel(
    X_train,
    precision=metric.precision_,
    center=metric.location_,
    length_scale=1.0,
)

For scikit-learn's GaussianProcessRegressor, use the optional adapter:

from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import ConstantKernel, WhiteKernel
from robustcov.sklearn_kernels import RobustMahalanobisRBF

kernel = (
    ConstantKernel(1.0)
    * RobustMahalanobisRBF(precision=metric.precision_, center=metric.location_)
    + WhiteKernel(1e-2)
)

gp = GaussianProcessRegressor(kernel=kernel).fit(X_train, y_train)

For GPyTorch, robustcov.gpytorch_kernels.RobustMahalanobisRBFKernel and RobustMahalanobisMaternKernel provide frozen robust metric kernels that can be wrapped by gpytorch.kernels.ScaleKernel.

Visual diagnostics

est = rc.FastMCD(quality="balanced", random_state=0).fit(X)

rc.plot_robust_distance_profile(
    est,
    output_path="distance_profile.png",
    show=False,
)

rc.plot_mahalanobis_qq(
    est,
    output_path="qq.png",
    show=False,
)

rc.plot_covariance_heatmap(
    est.covariance_,
    title="FastMCD covariance",
    output_path="covariance.png",
    show=False,
)

Diagnostic reports summarize robust-distance behavior:

report = rc.diagnostic_report(est)
print(report.summary())

Reports include radial kurtosis, detected fraction, condition number, support fraction, QQ tail deviation, and heuristic recommendations.

Multimodal data

A single global robust covariance model can fail when the data have several legitimate modes. Use cluster-aware diagnostics when modes correspond to meaningful groups, regimes, or segments.

det = rc.ClusterRobustOutlierDetector(
    n_clusters=3,
    contamination=0.05,
    random_state=0,
).fit(X)

scores = det.decision_function(X)
labels = det.predict(X)

rc.plot_cluster_robust_distances(
    det,
    X,
    output_path="cluster_distances.png",
    show=False,
)

This is not a full robust mixture model. It is a practical cluster-then-robust-scatter diagnostic.

OpenMP acceleration

If OpenMP is available at build time, the C++ backend can parallelize distance evaluation, covariance accumulation, Tyler scatter updates, and FastMCD candidate evaluation.

import robustcov as rc

print(rc.native_available())
print(rc.has_openmp())
rc.set_num_threads(4)

est = rc.FastMCD(n_init=500, n_jobs=4, random_state=0).fit(X)

For reproducible scaling benchmarks, avoid BLAS/OpenMP oversubscription:

OMP_NUM_THREADS=4 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 \
python benchmarks/openmp_scaling.py \
  --n 8000 \
  --p 20 \
  --threads 1 2 4 \
  --csv results/openmp_scaling.csv

Documentation

Build the Sphinx docs locally:

python -m pip install -e ".[docs]"
python -m sphinx -b html docs docs/_build/html

Main documentation entry points:

  • What RobustCov does: package scope, boundaries, and the reusable geometry model
  • Workflows: anomaly scoring, PCA and monitoring, feature geometry, structured data, sparse precision, and latent factors
  • Choose an estimator: recommendations by contamination model and dimensional regime
  • Examples by task and domain: runnable examples with source and generated figures
  • Benchmarks and validation: task-specific comparisons, failure cases, performance, and reviewed C-MAPSS snapshots
  • Methods and API reference: mathematical details, provenance, fitted attributes, and public interfaces

Do not commit docs/_build/; it is generated by Sphinx.

Benchmarks

Run the task-specific cross-method comparison:

OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 OMP_NUM_THREADS=2 \
python benchmarks/compare_methods.py \
  --profile quick \
  --csv results/method_comparison.csv \
  --rst results/method_comparison.rst

The script compares methods only where their fitted quantities and ground-truth metrics are compatible. It now covers scatter, kernel outlier detection, robust PCA, matrix/tensor methods, sparse precision, ICA, SOBI, and robust factor models. Use --profile full --families scatter --repeats 3 (and repeat for the other families) for slower, more stable local timing runs.

Run the focused latent-structure benchmark and generate its plots:

OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 OMP_NUM_THREADS=2 \
python benchmarks/latent_structure_benchmarks.py \
  --profile quick \
  --families ica sobi pca factor \
  --csv results/latent_structure.csv \
  --plot-dir results/latent_structure_plots

Audit benchmark ownership across the public estimator surface:

python benchmarks/benchmark_inventory.py --strict

Generate the older benchmark report:

OMP_NUM_THREADS=4 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 \
python benchmarks/make_report.py --outdir results/report

This writes CSV files, plots, a Markdown report, and a standalone HTML report:

results/report/benchmark_report.html
results/report/benchmark_report.md
results/report/*.csv
results/report/*.png
results/report/latent_structure/*.png

The benchmark pages report both successful and weak cases. Covariance-based methods are most appropriate when anomalies or changes are expressed through location, scale, correlation, or a low-dimensional subspace.

Examples

The example gallery is grouped by method family. List the available groups:

python examples/run_use_case_gallery.py --list

Run one family:

python examples/run_use_case_gallery.py --group ica
python examples/run_use_case_gallery.py --group pca
python examples/run_use_case_gallery.py --group robust
python examples/run_use_case_gallery.py --group monitoring

The new source-separation and factor-model examples are explicit scripts:

python examples/ica_two_scatter.py
python examples/sobi_source_separation.py
python examples/robust_factor_model.py

Run every registered gallery example with:

python examples/run_use_case_gallery.py --all

Refresh generated gallery assets after editing examples:

python docs/generate_gallery_assets.py
python -m sphinx -b html docs docs/_build/html

External and Kaggle examples

External examples live under examples_external/. Raw datasets are never bundled with the package or committed to the repository. Optional loaders cache explicit downloads under ROBUSTCOV_DATA_DIR, XDG_CACHE_HOME/robustcov, or ~/.cache/robustcov.

List supported cached datasets:

python -m robustcov.datasets list
python -m robustcov.datasets info gas_sensor_drift
python -m robustcov.datasets info cmapss

Run the distribution-shift examples without storing data in the repository:

python examples_external/gas_sensor_drift_dro_pca.py --download
python examples_external/cmapss_dro_pca_monitoring.py --download --subset FD002

Kaggle-style manual example:

python examples_external/kaggle_credit_card_fraud.py \
  --data /path/to/creditcard.csv \
  --outdir results/external/credit_card_fraud

Collect external result summaries:

python examples_external/collect_external_results.py \
  --root results/external \
  --outdir results/external_registry

External result pages should be read as evidence, not as leaderboard claims. Some datasets are strong wins, some are competitive but slower, and some are included mainly to show limitations.

Scope

robustcov currently focuses on a coherent robust multivariate workflow:

  1. covariance, scatter, and sparse precision estimation under rowwise, cellwise, heavy-tailed, and high-dimensional contamination;
  2. robust PCA, low-rank-plus-sparse decomposition, latent-factor methods, and source separation;
  3. anomaly scoring, conformal alert calibration, and fixed or adaptive subspace monitoring; and
  4. reproducible method benchmarks and reviewed external case studies.

The package does not attempt to cover every robust-learning problem. Methods are added when they fit this geometry-and-monitoring workflow and can be supported by clear provenance, tests, diagnostics, and evidence.

Development

python -m pip install -e ".[dev,docs]"
python -m pytest -q
python -m sphinx -b html docs docs/_build/html

Build distribution artifacts:

python -m build
python -m twine check dist/*

Release wheels are built by .github/workflows/wheels.yml using cibuildwheel. A manual workflow dispatch publishes the release candidate to TestPyPI and smoke-tests the installed package outside the checkout. A matching signed v* tag publishes the same checked artifacts to PyPI through a protected Trusted Publisher environment. See RELEASE.md for the full checklist.

Project status

This is a pre-1.0 alpha package. Public APIs may change. The goal of the early releases is to make the estimators, diagnostics, benchmarks, and documentation easy to inspect before stabilizing the interface.

License

Apache-2.0. See LICENSE.

Methods, attribution, and citation

robustcov distinguishes published algorithms, literature-based adaptations, package-specific compositions, and software utilities. Each canonical estimator records its primary references, the package's implementation contribution, and material differences from the cited method.

import robustcov as rc

info = rc.get_method_provenance(rc.RobustSOBI)
print(info.status)
print(info.references)
print(info.robustcov_contribution)

The full registry is documented in docs/methods_and_references.rst. Method pages cite the underlying literature and document implementation-specific behavior, assumptions, and limitations.

When using robustcov, cite both:

  1. the software release using CITATION.cff; and
  2. the primary methodological references for the estimators used.

The machine-readable method bibliography is available in docs/references.bib. A JOSS paper draft is maintained in the paper/ directory.

Contributing

Contributions are welcome. See CONTRIBUTING.md for development setup and checks before opening a pull request. New public estimators must add both benchmark ownership and method-provenance metadata. Release notes are tracked in CHANGELOG.md.

Download files

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

Source Distribution

robustcov-0.1.0a3.tar.gz (11.9 MB view details)

Uploaded Source

Built Distributions

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

robustcov-0.1.0a3-cp314-cp314-win_amd64.whl (656.3 kB view details)

Uploaded CPython 3.14Windows x86-64

robustcov-0.1.0a3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (467.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

robustcov-0.1.0a3-cp314-cp314-macosx_11_0_x86_64.whl (335.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ x86-64

robustcov-0.1.0a3-cp314-cp314-macosx_11_0_arm64.whl (325.5 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

robustcov-0.1.0a3-cp313-cp313-win_amd64.whl (643.3 kB view details)

Uploaded CPython 3.13Windows x86-64

robustcov-0.1.0a3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (467.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

robustcov-0.1.0a3-cp313-cp313-macosx_11_0_x86_64.whl (335.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

robustcov-0.1.0a3-cp313-cp313-macosx_11_0_arm64.whl (325.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

robustcov-0.1.0a3-cp312-cp312-win_amd64.whl (643.2 kB view details)

Uploaded CPython 3.12Windows x86-64

robustcov-0.1.0a3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (467.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

robustcov-0.1.0a3-cp312-cp312-macosx_11_0_x86_64.whl (335.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

robustcov-0.1.0a3-cp312-cp312-macosx_11_0_arm64.whl (325.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

File details

Details for the file robustcov-0.1.0a3.tar.gz.

File metadata

  • Download URL: robustcov-0.1.0a3.tar.gz
  • Upload date:
  • Size: 11.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for robustcov-0.1.0a3.tar.gz
Algorithm Hash digest
SHA256 d5ed29cd9eb99229237cbc10b2f40481bcc31f238f959397952752142987ad6d
MD5 736f602f5f757e44035ae2d2c7c1dea2
BLAKE2b-256 cd4255f79c1725632d27532fa9475723b5d74cee9806002b536ec40a44824b66

See more details on using hashes here.

Provenance

The following attestation bundles were made for robustcov-0.1.0a3.tar.gz:

Publisher: wheels.yml on smiryusupov/robustcov

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

File details

Details for the file robustcov-0.1.0a3-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: robustcov-0.1.0a3-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 656.3 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for robustcov-0.1.0a3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 b48b368875a1ed45da8ca6a0d1b1366d7bf21f845d80d66120f7e9b64abdd550
MD5 40c11931d1ba7a2ef7761e8483d1dac4
BLAKE2b-256 ba4528a6465f28fdbdd8fcfb1d3519a0c7e99977daba804d465755164d01e137

See more details on using hashes here.

Provenance

The following attestation bundles were made for robustcov-0.1.0a3-cp314-cp314-win_amd64.whl:

Publisher: wheels.yml on smiryusupov/robustcov

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

File details

Details for the file robustcov-0.1.0a3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for robustcov-0.1.0a3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 088d45fba0267c802ada11cb63f64b7b00632fe92e88ed20e79e8284366becf9
MD5 c6a8e6a95d4ad53232c7ae17f47c0f83
BLAKE2b-256 3beda26db1d8cbd23fa17a1814e88ee07b596a44e358462fc0d810ef0b37f9cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for robustcov-0.1.0a3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on smiryusupov/robustcov

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

File details

Details for the file robustcov-0.1.0a3-cp314-cp314-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for robustcov-0.1.0a3-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 7533973f7233c4f0a6937c48dd93b76812e9e4895a8f8f91250fde01e5d41363
MD5 f5bb64f0c4fcb391216a52b4deec3adb
BLAKE2b-256 2d74fff5eb86f85710e05450e8623f4e11d7de2fab6b651cce395e03464943b2

See more details on using hashes here.

Provenance

The following attestation bundles were made for robustcov-0.1.0a3-cp314-cp314-macosx_11_0_x86_64.whl:

Publisher: wheels.yml on smiryusupov/robustcov

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

File details

Details for the file robustcov-0.1.0a3-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for robustcov-0.1.0a3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b4f35f1de1e58f274e4134a9c30df8aa24f7bca8cd938705d5624ecaea25c014
MD5 1837418da714a2c761980a11f2c94938
BLAKE2b-256 5e1a93dccc11a279ad6af5c810fb92410a39f56b92a3a0365e2fbc4651c7a70e

See more details on using hashes here.

Provenance

The following attestation bundles were made for robustcov-0.1.0a3-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: wheels.yml on smiryusupov/robustcov

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

File details

Details for the file robustcov-0.1.0a3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: robustcov-0.1.0a3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 643.3 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for robustcov-0.1.0a3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 d0f43a5bf1dc72317193139c734be11f1c0f58ac41e15450367f28b16d070fc7
MD5 28f50dc767c56a35ec29fb5decf7d11c
BLAKE2b-256 04e2a1a59e7c850f610700f08a8f6fc3eb14682afceb432d0574e745c7ae5a97

See more details on using hashes here.

Provenance

The following attestation bundles were made for robustcov-0.1.0a3-cp313-cp313-win_amd64.whl:

Publisher: wheels.yml on smiryusupov/robustcov

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

File details

Details for the file robustcov-0.1.0a3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for robustcov-0.1.0a3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9c905c4def87c9df9250688e7078ba16346b82b9c99efa8c21b1d36e91399596
MD5 8993b477152d803413a956025df4d737
BLAKE2b-256 ede7a2e307a9ec04012e045f16aca14fc195c2b1796e69670648a6422bbc3f71

See more details on using hashes here.

Provenance

The following attestation bundles were made for robustcov-0.1.0a3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on smiryusupov/robustcov

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

File details

Details for the file robustcov-0.1.0a3-cp313-cp313-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for robustcov-0.1.0a3-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 dacc65dab109b69e9011c831c7fafb7e7f5ae827e7403575d8fd79cf03b08c7f
MD5 2978702763c8a34c929cd02469106eca
BLAKE2b-256 ab696efbb2cc6c8a49aea5e61719ada7ecf311c1406b5b885a033381b36f31a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for robustcov-0.1.0a3-cp313-cp313-macosx_11_0_x86_64.whl:

Publisher: wheels.yml on smiryusupov/robustcov

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

File details

Details for the file robustcov-0.1.0a3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for robustcov-0.1.0a3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a95866bb61dce67aa02012cf53946ac556de1c13df0c411ee96fc78ef9f5d4ae
MD5 1df5de7f6dd7a570b3de61b06c8fa674
BLAKE2b-256 9ba17026fc22fb8d276d73e196e8733d321d9f55d42024745fb100ecc17e3275

See more details on using hashes here.

Provenance

The following attestation bundles were made for robustcov-0.1.0a3-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: wheels.yml on smiryusupov/robustcov

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

File details

Details for the file robustcov-0.1.0a3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: robustcov-0.1.0a3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 643.2 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for robustcov-0.1.0a3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 94a484ff757d7775683cf642392361d0a70f43437bff3b66640de2e86efde2b1
MD5 f11f199c9e56a3ede14bfa25856fc485
BLAKE2b-256 da5ae9d88e09fc2f272b87d3acaf6b82469dbb040165860e6d5cfab5533645ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for robustcov-0.1.0a3-cp312-cp312-win_amd64.whl:

Publisher: wheels.yml on smiryusupov/robustcov

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

File details

Details for the file robustcov-0.1.0a3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for robustcov-0.1.0a3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0e0615ccb699444718873636468ad1fcec647760bf5767389f22d3011ad43e3b
MD5 b063596be462c3e72f99a4ca7f224454
BLAKE2b-256 b0f308ccda9c18a914009f659e28d61c098f3f0b4c22f7dc0da103272720240b

See more details on using hashes here.

Provenance

The following attestation bundles were made for robustcov-0.1.0a3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on smiryusupov/robustcov

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

File details

Details for the file robustcov-0.1.0a3-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for robustcov-0.1.0a3-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 bf5fe235d1769e4bc4c2037e01eaaf370ce32d4857504101ce7815d01fc6e371
MD5 dd5a420576a6c34e22301f1ee4b11f11
BLAKE2b-256 56428a05285cc634a71c7776838916e03d468aee14023d747f18016292b66a2d

See more details on using hashes here.

Provenance

The following attestation bundles were made for robustcov-0.1.0a3-cp312-cp312-macosx_11_0_x86_64.whl:

Publisher: wheels.yml on smiryusupov/robustcov

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

File details

Details for the file robustcov-0.1.0a3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for robustcov-0.1.0a3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ff2bbdf0204b2c6a5c19b148e0b9bbbee3455ca66359c810f6d28e852aa4b59b
MD5 a4345d84775bc99cd98f7dd9ea8401d9
BLAKE2b-256 e78adee747ecf5e97c2bf31db79348b6b610fd0608b5d85e059e78a06a3d2a0a

See more details on using hashes here.

Provenance

The following attestation bundles were made for robustcov-0.1.0a3-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: wheels.yml on smiryusupov/robustcov

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

Release history Release notifications | RSS feed

0.2.0

13 files

0.1.0

13 files

This release

0.1.0a3 This release

13 files

0.0.2

13 files

0.0.1

13 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