Skip to main content

HAPC: Highly Adaptive Prinicipal Components

A fast and flexible machine learning library for nonparametric high-dimensional regression and classification with guarantees.

⚠️ Breaking changes in 2.7.0 (read first — humans and coding agents)

Code written for hapc ≤ 2.6.0 that uses family = "binomial" must be checked. R and Python behave identically.

2.7.0 was tagged but never reached PyPI (the wheel build failed). 2.7.1 is the first published release with these changes. It also replaces the scikit-learn dependency by scipy: the package no longer uses scikit-learn.

What ≤ 2.6.0 2.7.0
Binomial predictions from hapc() log-odds for norm = "1" and "2", probabilities for "sv" always probabilities; the linear predictor is in log_odds (cv.hapc / cv_hapc already returned probabilities and still do)
probabilities, predicted_classes fields present in some paths removed: use predictions (and predictions > 0.5 if classes are needed)
Intercept of binomial fits fitted with the intercept fixed at 0, then calibrated afterwards (biased for unbalanced outcomes) always an unpenalised intercept estimated jointly, in every norm
intercept argument intercept = FALSE allowed (R, norm = "1") default NULL/None; intercept = FALSE is an error for binomial / logit-hazard; for gaussian it must agree with center (center = TRUE ⇔ intercept)
norm = "2" logistic ridge λ effective penalty λ‖β‖² glmnet's scale, -(1/n)·loglik + (λ/2)‖β‖² (same as glmnet(alpha = 0)): λ values from 2.6.0 are not comparable
norm = "1" binomial basis built from the full HAL design (memory O(n²·Σ C(p,k))) and rebuilt for every fold × λ built from the n×n kernel once per fold; λ along a warm-started path
Python norm = "1" solver sklearn liblinear glmnet's algorithm (IRLS + coordinate descent, no sklearn); max_iter now counts IRLS steps (default 100)
Grid edges (norm = "1"; also "sv"/"2" in R) — extend_grid = k extends the λ grid at either edge; results report lambda_position (interior, lower_edge, upper_edge, null_model), n_extend, lambda_max
Kernel / cross-kernel single-threaded multi-threaded, bit-identical results; set the thread count with the env var HAPC_NUM_THREADS
.Call("logistic_call") (R, unexported) present removed (dead code)

Migration: replace fit$probabilities / fit.probabilities by predictions, replace predictions used as log-odds by log_odds, and drop any intercept = FALSE. The binomial norm = "sv" and norm = "2" paths are still pending a full review: they still materialise the HAL design and do not scale to n ≈ 2000 with p ≈ 30. Prefer norm = "1".

Documentation

Installation

Prerequisites

  • Python 3.8+
  • C++ compiler (g++, clang, or MSVC)
  • CMake 3.15+
  • Eigen3

Quick Install

pip install hapc

Prebuilt wheels are published for Linux (manylinux2014, x86_64), macOS (Intel + Apple Silicon) and Windows, for CPython 3.8–3.12. No compiler, CMake or Eigen is needed when a wheel is available.

Linux / HPC clusters

The Linux wheels use the manylinux2014 baseline (glibc 2.17), so pip install hapc works out of the box on HPC login/compute nodes — no conda toolchain, devtoolset, or sysroot setup required:

pip install hapc

If you must build from the source distribution (niche architecture, very old Python, or an air-gapped node), provide a C++17 compiler and either let CMake fetch Eigen automatically (needs network) or install Eigen and let find_package(Eigen3) find it:

# with conda compilers (recommended on HPC)
conda install -c conda-forge cxx-compiler cmake eigen
pip install hapc --no-binary hapc

Install from GitHub (latest development version)

pip install git+https://github.com/meixide/hapc.git

Or with editable install for development:

git clone https://github.com/meixide/hapc.git
cd hapc
pip install -e .

Install build dependencies

If installation fails, you may need to install build dependencies:

macOS:

brew install cmake eigen

Ubuntu/Debian:

sudo apt-get install cmake libeigen3-dev build-essential

Windows:

pip install cmake
# Install Visual Studio Build Tools or use conda
conda install -c conda-forge eigen

Quick Start

import numpy as np
from hapc.single import single_pcghal
from hapc.cv import pcghal_cv

# Generate sample data
X = np.random.randn(100, 5)
Y = X[:, 0] + 0.5 * X[:, 1] + np.random.randn(100) * 0.1

# Single fit with fixed lambda
result = single_pcghal(X, Y, maxdeg=2, npc=5, single_lambda=0.01)
print(f"Risk: {result.optimizer_output.risk:.6f}")

# Cross-validation to select lambda
lambdas = np.logspace(-4, 0, 10)
cv_result = pcghal_cv(X, Y, maxdeg=2, npc=5, lambdas=lambdas, nfolds=5)
print(f"Best lambda: {cv_result.best_lambda:.6f}")

# Make predictions
X_test = np.random.randn(20, 5)
result = single_pcghal(X, Y, maxdeg=2, npc=5, single_lambda=0.01, predict=X_test)
print(f"Predictions: {result.predictions}")

Usage

Regression

from hapc.single import single_pcghal

result = single_pcghal(
    X, Y,
    maxdeg=2,        # Maximum degree of interactions
    npc=10,          # Number of principal components
    single_lambda=0.01,
    predict=X_test   # Optional: test data for predictions
)

Classification

from hapc.single import single_pcghal

result = single_pcghal(
    X, Y_binary,
    maxdeg=2,
    npc=10,
    single_lambda=0.01,
    predict=X_test
)

Cross-Validation

from hapc.cv import pcghal_cv

cv_result = pcghal_cv(
    X, Y,
    maxdeg=2,
    npc=10,
    lambdas=np.logspace(-4, 0, 20),
    nfolds=5
)
print(cv_result.best_lambda)

Average Treatment Effect (ATE)

Estimate the ATE E[Y(1)] − E[Y(0)] with HAPC nuisance models and a doubly-robust (AIPW) efficient influence function. ate_hapc returns a point estimate and a (1 − alpha) Wald confidence interval.

from hapc import ate_hapc

# W: covariates (n, p); A: binary treatment in {0,1} or {-1,+1}; Y: outcome
res = ate_hapc(W, Y, A, alpha=0.05, method="undersmooth")
print(res.estimate, res.lower, res.upper)

Two bias-control strategies are available through method:

  • method="undersmooth" (default) — single-sample estimator. The outcome model is undersmoothed (λ pushed below the CV-optimal value) until the empirical influence function is within σ / (√n · log n). This requires the full PC basis (npcs = n, the default) and a λ grid that reaches small λ (defaults log_lambda_out_min = -10); otherwise the gate never reaches the low-bias regime and ate_hapc emits a warning. Pass report_undersmoothing=True to print the |mean(EIF)|-vs-λ path.
  • method="crossfit" — DML-style K-fold cross-fitting (cf_folds, default 5, stratified by treatment). Both nuisances are fit on the training folds and the influence function is evaluated out-of-fold, giving honest point estimates and coverage without undersmoothing. Recommended under good overlap.

Discrete-time survival (family = "logit-hazard")

Fit a discrete-time logistic hazard model with HAPC. You supply only the observed right-censored data — baseline covariates X, the observed time T = min(T_event, C), and the event indicator Delta = 1(T_event <= C) — and the wrapper performs the person-period expansion (one row per subject-per-interval-at-risk, hazard label = 1 at the event interval), prepends the visit time as the first HAL covariate, and cross-validates the binomial fit.

Model. The discrete hazard is the conditional event probability in interval t given survival up to t, modelled on the logit scale by a HAPC fit f of the augmented covariate (t, x):

lambda(t | x) = P(T_event = t | T_event >= t, X = x)
logit lambda(t | x) = f(t, x)

Person-period likelihood. Under independent right-censoring the observed-data likelihood factorises over the at-risk intervals,

prod_i prod_{t <= T_i}  lambda(t|x_i)^Y_it * (1 - lambda(t|x_i))^(1 - Y_it),
with  Y_it = 1(T_event_i = t),

which is exactly the Bernoulli (logistic) likelihood of the expanded person-period table — so a binomial HAPC fit of Y_it on (t, x_i) estimates the discrete hazard (Cox 1972; Brown 1975; Allison 1982).

Survival. The conditional survival function follows by the product-limit relation S(t | x) = prod_{s <= t} (1 - lambda(s | x)), returned for new subjects when predict= is supplied.

from hapc import hazard_hapc
import numpy as np

# X: baseline covariates (n, p); T: observed times; Delta: 0/1 event indicator
fit = hazard_hapc(X, T, Delta, norm="1", max_degree=2, time_grid=np.arange(1, 7))
fit.hazard        # estimated hazard per person-period row (CV predictions)
fit.best_lambda, fit.interior   # CV-selected lambda; is it interior to the grid?

# survival curves S(t|x) for new subjects
fit = hazard_hapc(X, T, Delta, norm="1", predict=X_new)
fit.predict_survival            # (m, K) survival probabilities over the grid
library(hapc)
# equivalent to cv.hapc(X, T, family = "logit-hazard", Delta = Delta, norm = "1")
fit <- hazard.hapc(X, T, Delta, norm = "1", max_degree = 2, time_grid = 1:6)
fit$hazard; fit$best_lambda; fit$interior

norm must be "1" (logistic LASSO) or "2" (logistic ridge); norm = "sv" is not implemented for this family and is flagged.

Returns (Python HazardResult / R hapc_hazard):

  • hazard — cross-validated discrete hazard for each person-period row
  • lambdas, risk, best_lambda — CV grid, mean logistic deviance, selected λ
  • interior — whether best_lambda is strictly inside the grid (sanity check)
  • time_grid, ids/id, Y — the discrete grid and person-period bookkeeping
  • predict_hazard, predict_survival — hazard surface and survival curves for new subjects (only when predict= is given)
  • cv — the underlying cross-validation result

Worked end-to-end examples (five hazard data-generating processes, with true-vs-estimated hazard scatters and CV risk-vs-λ curves verifying an interior optimum) are in examples/hazard_logit_hazard_examples.R and examples/hazard_logit_hazard_examples.py.

References. Cox (1972, JRSS B); Brown (1975, Biometrics); Allison (1982, Sociological Methodology); Singer & Willett (2003, Applied Longitudinal Data Analysis); Benkeser & van der Laan (2016, IEEE DSAA).

API Reference

hapc.single.single_pcghal()

Fit PC-GHAL with a single lambda value.

Parameters:

  • X (ndarray, shape (n, p)): Input features
  • Y (ndarray, shape (n,)): Response variable
  • maxdeg (int): Maximum degree of interactions
  • npc (int): Number of principal components
  • single_lambda (float): Regularization parameter
  • max_iter (int, default=100): Maximum iterations
  • tol (float, default=1e-6): Convergence tolerance
  • verbose (bool, default=False): Print progress
  • predict (ndarray, optional): Test data for predictions
  • center (bool, default=True): Center the design matrix

Returns:

  • result.optimizer_output.alpha: Coefficients
  • result.optimizer_output.risk: Final risk
  • result.optimizer_output.iter: Iterations until convergence
  • result.predictions: Predictions on test data (if provided)

hapc.cv.pcghal_cv()

Cross-validation to select lambda.

Parameters:

  • lambdas (ndarray): Grid of lambda values to test
  • nfolds (int, default=5): Number of CV folds
  • ...other parameters same as single_pcghal

Returns:

  • cv_result.best_lambda: Optimal lambda
  • cv_result.mses: CV errors for each lambda
  • cv_result.best_model: Fitted model with best lambda
  • cv_result.predictions: Predictions on test data (if provided)

Contributing

Contributions welcome! The C++ core is shared between R and Python packages.

git clone https://github.com/meixide/hapc.git
cd hapc
pip install -e .
pytest

License

MIT License - see LICENSE file

Metadata

Release files for hapc 2.7.1

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

Source distribution (sdist)

Source distribution for hapc 2.7.1
File Size Uploaded Provenance
hapc-2.7.1.tar.gz 87.6 kB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for hapc 2.7.1
File
hapc-2.7.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
hapc-2.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
hapc-2.7.1-cp312-cp312-macosx_10_13_universal2.whl CPython 3.12 CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64) Details
hapc-2.7.1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
hapc-2.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
hapc-2.7.1-cp311-cp311-macosx_10_9_universal2.whl CPython 3.11 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64) Details
hapc-2.7.1-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
hapc-2.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
hapc-2.7.1-cp310-cp310-macosx_10_9_universal2.whl CPython 3.10 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64) Details
hapc-2.7.1-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
hapc-2.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ x86-64 Details
hapc-2.7.1-cp39-cp39-macosx_10_9_universal2.whl CPython 3.9 CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64) Details
hapc-2.7.1-cp38-cp38-win_amd64.whl CPython 3.8 CPython 3.8 Windows x86-64 Details
hapc-2.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.17+ x86-64 Details
hapc-2.7.1-cp38-cp38-macosx_10_9_universal2.whl CPython 3.8 CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64) Details

Total release size: 6.8 MB

Release files / hapc-2.7.1.tar.gz

Download URL hapc-2.7.1.tar.gz
Size 87.6 kB
Tags Source
SHA-256 checksum
How to use checksums
0351bf27ce3ae157441f4b08be3c3ae410084e07fa27a5bb1d7c7971213e1880
BLAKE2b-256 checksum
How to use checksums
5fc3a0937613136a399f81e2a16f21a5232e57c5c489b7ba9bc1a7452568e20a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hapc-2.7.1-cp312-cp312-win_amd64.whl

Download URL hapc-2.7.1-cp312-cp312-win_amd64.whl
Size 550.3 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
130ca44f6cc229394062a6c75133db984559a2881a8bb4c5c55c23c254f16ce1
BLAKE2b-256 checksum
How to use checksums
b75bb81be1a1783e0a5bfab844c46d07f593273432219dd7bbf76095d10c2c10
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hapc-2.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL hapc-2.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 314.9 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
f2ebe33c604e76d398930dd99565acea1a79d86f175d3bbffaf5cbedc77fe53f
BLAKE2b-256 checksum
How to use checksums
24cf22aa98e4aa663c80f3132235430f6b9e2fc06f6ac4d9ae81bd193eb3d8c1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hapc-2.7.1-cp312-cp312-macosx_10_13_universal2.whl

Download URL hapc-2.7.1-cp312-cp312-macosx_10_13_universal2.whl
Size 491.0 kB
Tags CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
972066474b89cd81c8e469dde66d511b5083bd963f9c8d236cd021da182a1201
BLAKE2b-256 checksum
How to use checksums
6d7433989e576216ce7e78aa59817833ae3474cea73ff88d721d931d9b5c205b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hapc-2.7.1-cp311-cp311-win_amd64.whl

Download URL hapc-2.7.1-cp311-cp311-win_amd64.whl
Size 546.1 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
02d239e5f68ca0de01c9c1ba5a362a778b5da5f10a9d6dca168b8bed6d241e97
BLAKE2b-256 checksum
How to use checksums
ffdca3be2af354bf334912069eb48b2804d3dfcce24329158b4a0a4b7588b2c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hapc-2.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL hapc-2.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 315.4 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
a491ff1e8d0cdba7aa248a21719e94468ff507c0e8a30ccda762e6957380db5a
BLAKE2b-256 checksum
How to use checksums
003381c5e7710a0d077a35c64865cc9192a5115e3804f97a7aed5e6e391f70c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hapc-2.7.1-cp311-cp311-macosx_10_9_universal2.whl

Download URL hapc-2.7.1-cp311-cp311-macosx_10_9_universal2.whl
Size 486.3 kB
Tags CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
00cb1cd12936c2c7832906064e7d78059b720632591353481898e16705c22230
BLAKE2b-256 checksum
How to use checksums
aa036e2c6dee73509fb88bb1f5a922d76d8640efe3bf17406d6df4536863b2c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hapc-2.7.1-cp310-cp310-win_amd64.whl

Download URL hapc-2.7.1-cp310-cp310-win_amd64.whl
Size 543.6 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
73d2fa051388e49b4503efe96d1b153119e13716d67575a22409040de223f4b7
BLAKE2b-256 checksum
How to use checksums
fb1d4dac641454ae6c52250fd024ae334c115e3263910f0ff81ef78679ea955b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hapc-2.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL hapc-2.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 314.4 kB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
a8e7a8b0d09f4cad934cd4b607456e285414781cf4dbb288545d6e6e2e0a61a8
BLAKE2b-256 checksum
How to use checksums
9f09c661f70ac4bf2648070b62b9cab9b7ac3005993a7abe8795ec7e6088964c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hapc-2.7.1-cp310-cp310-macosx_10_9_universal2.whl

Download URL hapc-2.7.1-cp310-cp310-macosx_10_9_universal2.whl
Size 483.6 kB
Tags CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
f388974e2748aa5824b85f4f54f94608596ae8c3d32345c89beb1fa773b3daca
BLAKE2b-256 checksum
How to use checksums
c2ba57a22b6d4751b455ff3b6e84488b2150975490dec2fe05aa9945572ffaf0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hapc-2.7.1-cp39-cp39-win_amd64.whl

Download URL hapc-2.7.1-cp39-cp39-win_amd64.whl
Size 543.9 kB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
315a11222a5af04f20bb77da4fefd4d9cb4fed53ef5688263917765c4187d715
BLAKE2b-256 checksum
How to use checksums
1b693ff184b63c6b3334892a267d88a99a6f56e1bdb73de25e1312cde162195c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hapc-2.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL hapc-2.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 314.8 kB
Tags CPython 3.9 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
4e363e7ae94e5ce2a894a4287813ec0dfe7e6b8ec7e5530ed353913907db2571
BLAKE2b-256 checksum
How to use checksums
ab84b57fefd98ad5ce8bf154cebabbe42b4d0002513e37692aabf7c1563fc707
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hapc-2.7.1-cp39-cp39-macosx_10_9_universal2.whl

Download URL hapc-2.7.1-cp39-cp39-macosx_10_9_universal2.whl
Size 483.8 kB
Tags CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
7f41a3d201f19e79b534ee2a9f08da3fd0d408ff2f4bfe95014aa55bf0cad4a6
BLAKE2b-256 checksum
How to use checksums
0354a0bb21c710e69919d1bf046ab294b167be4cf11abbec9881e993f02ca2d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hapc-2.7.1-cp38-cp38-win_amd64.whl

Download URL hapc-2.7.1-cp38-cp38-win_amd64.whl
Size 540.0 kB
Tags CPython 3.8 Windows x86-64
SHA-256 checksum
How to use checksums
513a30501d5eea0ad520a103767ffd7928ba307717dba7a9a666c752ca2a8552
BLAKE2b-256 checksum
How to use checksums
5399d5256a0a9a4a8d989c5ef7f505a367aa49c022bc86071370e49731958d9a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hapc-2.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL hapc-2.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 312.6 kB
Tags CPython 3.8 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
2d3b8ede6fcdf6d07af4c5d3da1bfe0c28040ca74d6bba30f6c8e38f5da73f06
BLAKE2b-256 checksum
How to use checksums
6eb13b60836e7c931fffd3e7152d8e479805906678164d4b1877850030057c08
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hapc-2.7.1-cp38-cp38-macosx_10_9_universal2.whl

Download URL hapc-2.7.1-cp38-cp38-macosx_10_9_universal2.whl
Size 481.9 kB
Tags CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
5e5b46a6e716067df9a8c30fa92072bfbc70ed88721392a4019c99be4dd517f4
BLAKE2b-256 checksum
How to use checksums
63c0b97421e7f108e91b7bbd3a851b72ab82cc57cd02830a49445a78357b89c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Security for hapc 2.7.1

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

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