Skip to main content

VBPCApy

License: MIT Python 3.11+ Code style: ruff DOI Docs

Variational Bayesian PCA (Ilin & Raiko, 2010) with support for missing data, sparse masks, optional bias terms, and an orthogonal post-rotation to a PCA basis. The implementation follows the original MATLAB reference while adding Python-native APIs, fast C++ extensions, and runtime autotuning.

Documentation · API Reference · Tutorials

Statement of need

Missing values are common in scientific and industrial tabular datasets, but many analysis pipelines either impute first (masking uncertainty) or drop incomplete samples. VBPCApy models missingness directly and exposes posterior uncertainty outputs alongside reconstructions, enabling uncertainty-aware latent-factor analysis in a single reproducible Python API.

Installation

From PyPI (pre-built wheels for Python 3.11–3.14, Linux/macOS/Windows):

pip install vbpca-py

With plotting support:

pip install vbpca-py[plot]

See the installation guide for building from source and Eigen setup.

Quick start

import numpy as np
from vbpca_py import VBPCA

# 200 samples, 50 features
x = np.random.randn(200, 50)
mask = np.ones_like(x, dtype=bool)

model = VBPCA(n_components=5, maxiters=100)
scores = model.fit_transform(x, mask=mask)
recon = model.reconstruction_
var = model.variance_

More examples: quickstart, mixed missing-table notebook, missing-aware Pipeline, missing data & model selection, genomics dosage data, and sparse data.

The 0.5 API uses samples x features and defaults to modern observation semantics. scores_ contains joint training variational means; transform(X_new) returns conditional projections. The explicit vbpca_py.legacy.VBPCA adapter preserves the feature-first API and historical default. See the migration guide.

Public select_n_components and cross_validate_components also consume samples x features with aligned masks. Explicit probe tables supplied to select_n_components use those axes too; CV constructs its own probes. Requested positive-rank selected models are native VBPCA instances. Feature-first selection remains available explicitly from vbpca_py.legacy. See the executed selection example.

Compatibility modes

The native 0.5 estimator and public selection helpers default to modern; the explicit legacy adapter, low-level solver and PCAOptions() default to strict_legacy. Modern mode uses observation masks/stored sparse entries, preserves finite zeros and small values, and selects post-factor mean and post-rotation prior-variance updates when their ordering options are auto. Strict-legacy mode retains signed-sum sparse empty-axis detection, historical near-zero/epsilon handling and legacy update orders. Changing mode can change fitted results; it does not change input orientation. See the mode comparison and migration example before changing an established workflow.

The public make_xprobe_mask helper defaults to modern sparse splitting: unselected stored zeros are retained and stored NaNs are not sampled. Pass compat_mode="strict_legacy" explicitly to reproduce its historical sparse subtraction behavior. Legacy automatic fits use their configured mode.

Executed examples

The example gallery executes standalone sources during every site build: dense missing observations, sparse stored zeros, the mixed-data Pipeline, cost/probe selection, raw-variable cell CV and plotting helpers. Pages show the actual output, downloadable source and result-derived figures. The bounded fits demonstrate API behavior rather than qualifying convergence or calibration.

For a local build, install the docs and plot extras and run python -m mkdocs build --strict. The public API doctests and the actual quickstart/migration blocks can be run with python scripts/check_public_examples.py; use python scripts/check_gallery_site.py to verify rendered source and figures.

Features

For sparse observations whose values include zero, use compat_mode="modern" and retain those zeros explicitly in storage. Modern fits use the mask-defined observation set through noise updates, probe exclusion and NaN cleanup. See the sparse tutorial for storage and mode choices.

  • Dense or sparse data with explicit missing-entry masks
  • Optional bias estimation and rotation to PCA-aligned solution
  • Posterior covariances for scores and loadings; held-out probe RMS
  • Dense, nearly complete observations use complete-minus-missing noise statistics with full posterior covariances and screened fallback to observed-cell sums.
  • C++ extensions with covariance-aware runtime probes, reproducible hardware profiles and separate native/BLAS allocation reports
  • Missing-aware preprocessing: one-hot, standard/minmax scaling, log, power, winsorize, auto-routing (AutoEncoder)
  • Preflight data diagnostics via check_data() / DataReport
  • scikit-learn-compatible estimator (fit/transform/inverse_transform, get_params/set_params, cloning) — scikit-learn >=1.8 is required
  • Model selection via select_n_components and cross_validate_components
  • Configurable convergence: subspace angle, RMS/cost plateau, ELBO, curvature, composite rules, patience, with per-criterion enable/disable and custom ordering
  • Convergence diagnostics (n_iter_, converged_, convergence_reason_, learning_curve_, best-probe state metadata) and predictive_variance_ (includes observation noise)
  • recommend_config(n, p, priority) — regime-aware default hyperparameters from a surrogate trade study

See the concept guides and API reference for full details.

Typed fit results

PCAResult and LearningCurve are exported from vbpca_py. They describe ordinary result dictionaries, retaining existing keys and array ownership. Learning curves contain numeric histories and metadata with different types:

from vbpca_py import LearningCurve

curve: LearningCurve | None = model.learning_curve_
if curve is not None:
    print(curve.get("convergence_reason"))
    print(curve.get("returned_iteration"))

The low-level pca_full() return annotation is PCAResult. See the result reference for array shapes, optional diagnostic outputs and shared covariance blocks. Type annotations specify dtypes; they do not validate array shapes or make arrays immutable.

Pipeline observation masks

For explicit masks in a scikit-learn Pipeline, place ObservationMasker() before learned preprocessing. Enable metadata routing and pass observation_mask=mask to Pipeline/GridSearchCV, or params={"observation_mask": mask} to cross_validate. The leading step turns excluded placeholders into dense NaNs or sparse stored observations; downstream steps infer missingness in their own feature layout. CV slices training/test masks before feature expansion. Leave transform_input unset for entry masks and supply a fresh aligned mask for new data. Ordinary NaN/stored-entry Pipelines need no metadata opt-in. Run python scripts/example_masked_pipeline.py for mixed input, row CV, grid search and projection; see preprocessing for the contract.

Named output tables

Every native transformer implements get_feature_names_out() and sklearn's set_output(transform="pandas"). Install the data extra for pandas or the polars extra for qualified Polars 2.x output. Default outputs remain NumPy/SciPy. Pandas preserves row indices; Polars preserves row order. Names follow fitted category/reference order and use x0, x1, ... for unnamed inputs, with deterministic suffixes for ambiguous generated labels. VBPCA components are named vbpca0, vbpca1, ...; rank zero has no columns and retains the sample rows. Sparse outputs require default mode and are refused without densification when a dense container is requested.

For a mixed string/NaN mask Pipeline with Polars numerical outputs, keep the leading ObservationMasker in pandas mode. Its raw object buffers cannot be safely wrapped by the native Polars adapter. See python scripts/example_feature_output.py and the preprocessing API for configuration and limits.

Categorical component selection

Dense AutoEncoder and MissingAwareOneHotEncoder fits expose an encoding_schema_ snapshot (EncodingSchema / EncodedVariable, exported from vbpca_py). Pass it to CV to hold out whole variable cells and decode single-binary, dropped-reference, centered and weighted indicators before categorical scoring:

from vbpca_py import AutoEncoder, CVConfig, cross_validate_components

encoder = AutoEncoder(
    column_types=["categorical", "categorical", "continuous"],
    drop="first",
    block_weighting="equal_variance",
    handle_unknown="raise",
)
Z = encoder.fit_transform(X)  # samples x encoded features
best_k, results = cross_validate_components(
    Z.T,
    components=range(5),
    config=CVConfig(encoding_schema=encoder.encoding_schema_, metric="brier"),
)

Continuous and ordinal variables contribute to encoded probe RMS, but are excluded from nominal categorical scores. Gaussian reconstructions are decoded, clipped at 1e-6 and normalized as approximate category probabilities; this is not a calibrated categorical likelihood. Equivalent decoded predictions have equivalent scores; refitting different encodings can yield different predictions. Schema-free categorical selection requires full unweighted one-hot blocks and rejects singleton groups and transformed targets. feature_groups alone cannot identify binary versus numeric columns.

This API splits an already encoded matrix. A schema describes the transform; use the raw-table API below when learning preprocessing within CV folds. For numeric inverse maps, call schema.validate(n_features, strict_numeric=True): each continuous/ordinal variable needs one column, a finite fitted offset and a positive finite weight. Wholly missing numeric training support cannot provide that offset. Default schema validation retains categorical-only scoring compatibility. Unknown categories cannot be distinguished from a dropped reference when handle_unknown="ignore"; use "raise" when scoring new raw data. See the model-selection guide and benchmark validation note.

Live fitting disables the legacy slowing_down criterion because no event counter is supplied. Explicit requests warn, and the learning curve records its unavailability. Stopping flags must be booleans. Accepted heuristic stops do not certify posterior stability; supported thresholds and frozen study policies are unchanged. See the convergence guide.

Raw-table component selection

cross_validate_raw_components accepts samples × original variables, with NaNs or an explicit observation mask. It holds out original variable cells before fitting means, scales, categorical centering and block weights. A fresh AutoEncoder is fitted once per fold and reused across every candidate rank, including first-minimum early stopping.

from vbpca_py import AutoEncoder, CVConfig, cross_validate_raw_components

def make_encoder():
    return AutoEncoder(
        column_types=["categorical", "continuous", "ordinal"],
        # External codebook; do not derive this from held-out values.
        column_levels=[["no", "yes"], None, ["low", "medium", "high"]],
        mean_center_ohe=True,
        block_weighting="equal_variance",
        handle_unknown="raise",
    )

best_k, results, folds = cross_validate_raw_components(
    X, encoder_factory=make_encoder, components=range(4),
    config=CVConfig(n_splits=3, metric="brier", seed=11),
    maxiters=200,
)

Declare column kinds explicitly. column_levels=None (or a None entry) learns levels from training cells; a held-only unknown level raises an error. External nominal vocabularies and ordinal orders support declared levels absent from training. Each returned PreprocessedFold exposes original training/holdout masks, encoded matrices, the fitted encoder and its schema; prepare_raw_cv_folds constructs these without fitting candidate models.

Results include nominal Brier/log/accuracy scores and rmse_variable_j for each numeric input column: continuous values in input units, ordinal values in unrounded level-index units. Numeric summaries report contributing fold counts; encoded prms is also retained. This predicts cells of the same samples; sample-wise sklearn CV evaluates new samples. Run the complete mixed-data example with just example-raw-cv, or python scripts/example_raw_cell_cv.py after installing the package.

Native update kernels reject nonpositive or nonfinite noise variances and malformed sparse pointers with ValueError. Worker factorization failures raise RuntimeError after workers join. See the runtime guide for input and failed-fit semantics.

recommend_config() now disables the relative cost-change and composite stops that the registered downstream convergence audit found could truncate fits. Other recommended controls are retained. This scoped correction does not certify posterior stability for every data regime; see the convergence guide for evidence, remaining limitations and fixed-iteration reference fits.

Development

The 0.5.0 qualification covers the samples-first migration, installed examples and complete wheel/source artifact gates. The 0.4.7 validation covers native failure repairs and numerical references. The 0.4.6 release validation describes the paired fitting-compatibility check and package/adoption gates. General scoring and benchmark validation commands are in scripts/benchmark_study.md.

git clone https://github.com/yoavram-lab/VBPCApy.git
cd VBPCApy
uv sync --extra dev --extra plot
just ci          # lint + typecheck + numerical references + tests
just numerical-reference  # bounded mathematical/reference checks
just docs-serve  # local docs preview

See CONTRIBUTING.md for guidelines.

The numerical validation guide describes the always-run reference checks, compatibility scope and tolerances. Extended Octave comparisons remain separate from the required numerical gate.

The October 2026 backend review records remaining measured costs, reference-paper checks and hardware-tuning requirements. Its diagnostic probes and algebraic prototypes are analysis tools; they do not change the installed solver. Reproduction commands are in scripts/benchmark_study.md.

For source-revision comparisons, the fresh-process profiling procedure checks fixed-policy numerical outputs alongside fit time, RMS allocation and process peak memory under explicit CPU and thread limits. It leaves published study settings unchanged. Posterior variance diagnostics use blocked full-covariance matrix products, preserving bias uncertainty and off-diagonal terms while bounding covariance packing and avoiding extra full reconstruction-sized temporary arrays. See the diagnostic benchmark for comparisons with the historical and optimized einsum implementations.

Sparse score updates reuse their CSC representation while centered values stay unchanged; loading updates consume CSR directly. Centering and bias-enabled rotation invalidate cached values. Sparse native observation loops reuse worker-local scratch vectors, with a Linux CI allocation check that detects allocation growth with the observation count.

Component selection preserves full per-iteration cost traces by default. For fixed-policy PRMS sweeps, SelectionConfig(cost_diagnostics="endpoint") can retain only the returned iteration's cost when no enabled stopping event needs a cost trace. See the diagnostic-mode guide. The dense-mask repair validation records paired measurements and the limits of their interpretation.

The trade-a-* analysis recipes require a local trade-study checkout. After syncing the environment, install its full extras (including adaptive optimisation, surrogate fitting and sensitivity analysis):

# Default: trade-study is checked out alongside VBPCApy.
just trade-a-install-adaptive

# Override the checkout location, including paths containing spaces.
TRADE_STUDY_PATH="/path/to/trade study" just trade-a-install-adaptive

Citation

If you use this package in your research, please cite:

@software{vbpca_py2026,
  author = {Macdonald, Joshua and Naim, Shany and Ram, Yoav},
  title = {{VBPCApy}: Variational Bayesian PCA with Missing Data Support},
  year = {2026},
  url = {https://github.com/yoavram-lab/VBPCApy},
  version = {0.5.0},
}
@article{ilin2010practical,
  title={Practical Approaches to Principal Component Analysis in the Presence of Missing Values},
  author={Ilin, Alexander and Raiko, Tapani},
  journal={Journal of Machine Learning Research},
  volume={11},
  pages={1957--2000},
  year={2010}
}

See CITATION.cff for machine-readable metadata.

License

MIT — see LICENSE.

Metadata

Release files for vbpca-py 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vbpca-py 0.5.0
File Size Uploaded Provenance Actions
vbpca_py-0.5.0.tar.gz 734.8 kB With provenance Details for vbpca_py-0.5.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for vbpca-py 0.5.0
File Actions
vbpca_py-0.5.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for vbpca_py-0.5.0-cp314-cp314-win_amd64.whl
vbpca_py-0.5.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64, Linux glibc 2.24+ x86-64 Details for vbpca_py-0.5.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
vbpca_py-0.5.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details for vbpca_py-0.5.0-cp314-cp314-macosx_11_0_arm64.whl
vbpca_py-0.5.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for vbpca_py-0.5.0-cp313-cp313-win_amd64.whl
vbpca_py-0.5.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.24+ x86-64 Details for vbpca_py-0.5.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
vbpca_py-0.5.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for vbpca_py-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
vbpca_py-0.5.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for vbpca_py-0.5.0-cp312-cp312-win_amd64.whl
vbpca_py-0.5.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.24+ x86-64, Linux glibc 2.28+ x86-64 Details for vbpca_py-0.5.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
vbpca_py-0.5.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for vbpca_py-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
vbpca_py-0.5.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for vbpca_py-0.5.0-cp311-cp311-win_amd64.whl
vbpca_py-0.5.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.24+ x86-64 Details for vbpca_py-0.5.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
vbpca_py-0.5.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for vbpca_py-0.5.0-cp311-cp311-macosx_11_0_arm64.whl

Total release size: 59.3 MB

Release files / vbpca_py-0.5.0.tar.gz

Download URL vbpca_py-0.5.0.tar.gz
Size 734.8 kB
Tags Source
SHA-256 checksum
How to use checksums
431df1c0900482963d3cfa257fca7c6beb022bf4a0bd78609dcc26bea7bf2cdc
BLAKE2b-256 checksum
How to use checksums
3ddaf0bd332f02d5aed3372720f56b8a54909ce3a184ded89587bc63c2fc87fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / vbpca_py-0.5.0-cp314-cp314-win_amd64.whl

Download URL vbpca_py-0.5.0-cp314-cp314-win_amd64.whl
Size 1.1 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
2113e4a40e9cb26825e46eaf02902d54f0a8369cabddc181b6859533b01bc972
BLAKE2b-256 checksum
How to use checksums
29795b52b8dc9e72c5c817e8c78b7080174bff175f3e96a9e42bf6093905dd36
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / vbpca_py-0.5.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL vbpca_py-0.5.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 12.7 MB
Tags CPython 3.14 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6bf8e9dcc8c56336f952ca520483c78b58f5e9b1bb9854b05b0803f1562fcd00
BLAKE2b-256 checksum
How to use checksums
20b9f1938e18e8c9a8da5ff8f826278c6e5fb9ffc7210cc57ddbb3e303bf2d49
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / vbpca_py-0.5.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL vbpca_py-0.5.0-cp314-cp314-macosx_11_0_arm64.whl
Size 915.7 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8558829305d30bfb1c10a835bc6ba67c63fdb3a97f54f0db809faf03d104c737
BLAKE2b-256 checksum
How to use checksums
89162335031ca3bf1166d948c1b05df7fb245a7c72ee8581d09adee4221f8aee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / vbpca_py-0.5.0-cp313-cp313-win_amd64.whl

Download URL vbpca_py-0.5.0-cp313-cp313-win_amd64.whl
Size 1.1 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
97a871adac2e3c75470c6cd92cdfd817c987dccb81a8404632e161f0a51d0dd1
BLAKE2b-256 checksum
How to use checksums
a92fe806f1d45b01ab5e620304978ead48833688d95069d9b67825fe6c3ca1fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / vbpca_py-0.5.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL vbpca_py-0.5.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 12.7 MB
Tags CPython 3.13 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
417135b33df3ba4520f83e72ad28d28bb03579feb921ea296bb94ff6704d31c9
BLAKE2b-256 checksum
How to use checksums
afece9f9f9297ae1f4b5c45ed84ecf5d89006a5578492e43b227d67fd3bc9cfd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / vbpca_py-0.5.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL vbpca_py-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
Size 915.5 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6d5b33ceb7a2d463605aca89e3cc279b524df5327704e1d7718c2a34892078b5
BLAKE2b-256 checksum
How to use checksums
65146e4090c186e17ea64677a7ff445d097df8c61c1c53342deefb8008694dfd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / vbpca_py-0.5.0-cp312-cp312-win_amd64.whl

Download URL vbpca_py-0.5.0-cp312-cp312-win_amd64.whl
Size 1.1 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
94e9e25e467acb6b88396ab51c1c9cfb2422db7a19970c649bf07f3f0c7ac95e
BLAKE2b-256 checksum
How to use checksums
a13a8108a918a3c55d9212b2dfc6c83870253464cfbb24d102293ac70d8444ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / vbpca_py-0.5.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL vbpca_py-0.5.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 12.7 MB
Tags CPython 3.12 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
351218af2d46f6ba40d7338eaac553949f15e68f35343d3488975e3763b1aa38
BLAKE2b-256 checksum
How to use checksums
05cc4a006634e099876b09f7a65fa364925a4249e5120726a941a7a834541b42
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / vbpca_py-0.5.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL vbpca_py-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
Size 915.3 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1b615e5ac739dca3441ee15955a071f64aecbe85670a58e465d9d1084de200a5
BLAKE2b-256 checksum
How to use checksums
1f081751229e6ae970e8bf3e645c502fb6c905d8cf8aa58d2094ec7f334ad95c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / vbpca_py-0.5.0-cp311-cp311-win_amd64.whl

Download URL vbpca_py-0.5.0-cp311-cp311-win_amd64.whl
Size 1.1 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
3148a95dd1c8aa559d6bb1d494ee98f7a00aa8a50cbb97711828f9ff7869ff53
BLAKE2b-256 checksum
How to use checksums
252c7e2d349d3fb33676cfe4b197cc1e8871aee3f6cd64d36624ef057d2eaf11
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / vbpca_py-0.5.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL vbpca_py-0.5.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 12.5 MB
Tags CPython 3.11 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
703ec6a0224cf1ebae468da5282112fcbcf35e9476d73c9fd725627aeeb46705
BLAKE2b-256 checksum
How to use checksums
e0eb4a4fe6659c3db96836def9fbfb224562c1ad164424d89dae08d688d36939
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / vbpca_py-0.5.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL vbpca_py-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Size 899.2 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
a1c384005d60c5c5d144fe02e015cac9c0c16b8c7177945f4f0910f2cbf17b2f
BLAKE2b-256 checksum
How to use checksums
bfda2205e289fde8bea69986c74028a46122dcf36593d09861ff1f9fffcc2114
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Security for vbpca-py 0.5.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 13 files in this release have been uploaded with provenance metadata.

Select from 13 files

Attestation for vbpca_py-0.5.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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