Volatility modeling in Python with fast GARCH-family C extensions.
Project description
scivol
Volatility modeling in Python. GARCH-family models with C extensions for speed.
Install
pip install scivol
Prebuilt wheels are the default installation path on supported platforms.
If no compatible wheel is available, pip falls back to building from the
source distribution, which requires a working C toolchain.
tqdm ships as a normal dependency, so progress bars are available out of the box.
Quick start
import numpy as np
from scivol import GARCH, Normal, StudentT
np.random.seed(42)
returns = np.random.randn(1000) * 0.01
spec = GARCH(1, 1) + Normal()
result = spec.fit(returns)
result.summary()
For workflows that iterate over many fits, progress bars are enabled by default. You can disable them globally:
import scivol
scivol.settings.show_progress = False
Output:
══════════════════════════════════════════════════════════════════════
GARCH Model Estimation Results
══════════════════════════════════════════════════════════════════════
Model: GARCH(1,1)+Normal
Method: MLE
Date: 2026-01-30 15:42:38
──────────────────────────────────────────────────────────────────────
No. Observations: 1000 Converged: Yes
No. Parameters: 3 Iterations: 42
Time Elapsed: 0.030s
──────────────────────────────────────────────────────────────────────
Log-Likelihood: 3456.7890
AIC: -6907.5780
BIC: -6892.8560
──────────────────────────────────────────────────────────────────────
Parameter Estimates
──────────────────────────────────────────────────────────────────────
Parameter Coef Std Err t-stat P>|t|
──────────────────────────────────────────────────────────────────────
omega 1.2345e-06 2.34e-07 5.27 <0.001
alpha[1] 0.0523 0.0084 6.23 <0.001
beta[1] 0.9412 0.0092 102.30 <0.001
──────────────────────────────────────────────────────────────────────
Model Diagnostics
──────────────────────────────────────────────────────────────────────
Persistence (α + β): 0.993500
Stationary: Yes
Unconditional Variance: 1.900000e-04
Half-life (periods): 106.3
══════════════════════════════════════════════════════════════════════
Contents
- Model specification
- Components
- Estimation
- Automatic model selection
- Results
- Display settings
- Diagnostics
- API reference
Model specification
Build models by combining components with +. scivol orders them automatically: MEAN, then VOLATILITY, then DENSITY.
from scivol import GARCH, GJRGARCH, ARMA, DCC, Normal, StudentT, SkewT
spec = GARCH(1, 1) # Normal density by default
spec = GARCH(1, 1) + StudentT() # Explicit density
spec = GJRGARCH(1, 1) + StudentT() # Asymmetric volatility
spec = ARMA(1, 1) + GARCH(1, 1) + SkewT() # Mean + volatility + density
dcc = DCC(1, 1) # Dynamic correlations (multivariate)
One component per role. If you omit the density, Normal() is added for you.
Alternative operators produce the same result:
spec = garch + normal # __add__
spec = garch < normal # __lt__
spec = garch << normal # __lshift__
spec = normal >> garch # __rlshift__
Components
GARCH(p, q)
Conditional variance:
σ²_t = ω + Σᵢ αᵢ·ε²_{t-i} + Σⱼ βⱼ·σ²_{t-j}
Stationary when Σα + Σβ < 1.
spec = GARCH(1, 1) # most common
spec = GARCH(2, 1)
Parameters: omega (ω > 0), alpha[1:p] (ARCH terms), beta[1:q] (GARCH terms).
GJRGARCH(p, q)
Adds a leverage term so that negative shocks raise volatility more than positive shocks of the same size:
σ²_t = ω + Σᵢ (αᵢ + γᵢ·I(ε_{t-i}<0))·ε²_{t-i} + Σⱼ βⱼ·σ²_{t-j}
A negative shock contributes (α + γ)·ε² to the next period's variance; a positive shock contributes α·ε².
Stationarity:
- Symmetric densities (Normal, Student-t): α + 0.5·γ + β < 1
- Asymmetric densities (Skew-t): α + γ·P(z < 0) + β < 1
spec = GJRGARCH(1, 1) + StudentT()
Parameters: omega, alpha[1:p], gamma[1:p] (leverage), beta[1:q].
DCC(p, q)
Dynamic Conditional Correlation for multivariate return series.
DCC.fit() uses a two-step workflow:
- Fit a univariate volatility model to each series.
- Fit Gaussian DCC dynamics to the resulting standardised residuals.
from scivol import DCC, GARCH, StudentT
dcc = DCC(1, 1)
result = dcc.fit(returns_df, univariate_spec=GARCH(1, 1) + StudentT())
Result access focuses on the economically useful correlation objects:
result.Rtfor the full time-varying correlation pathresult.corr(i, j)for a single pairresult.unconditional_corrfor the long-run correlation matrix
ARMA(p, q)
Conditional mean. Currently limited to ARMA(1,1).
spec = ARMA(1, 1) + GARCH(1, 1)
Normal()
Gaussian density. No extra parameters. Default when none is specified.
StudentT()
Heavier tails than Normal. One extra parameter: nu (ν > 2). Lower ν means fatter tails; as ν grows, the distribution approaches Normal.
SkewT()
Hansen's skewed Student-t. Two extra parameters: nu (ν > 2) and lambda (−1 < λ < 1). λ = 0 gives a symmetric Student-t; λ < 0 shifts weight to the left tail.
Estimation
MLE
The default method.
result = spec.fit(data)
result = spec.fit(
data,
solver="trust",
log_mode=True,
verbose=True,
)
Solvers:
| Solver | Method | Notes |
|---|---|---|
"slsqp" |
Sequential quadratic programming | Default; fast and reliable |
"nelder-mead" |
Derivative-free simplex | Slow but dependable |
"trust" |
Trust-region (gradient + Hessian) | Fast when it converges |
"trust-exact" |
Trust-region in log-space | Most stable for difficult data |
Log-mode (log_mode=True) transforms constrained parameters into unconstrained space before optimization:
| Parameter | Constraint | Transform |
|---|---|---|
| ω | ω > 0 | softplus(z) |
| α, β | > 0, sum < 1 | softmax |
| γ (GJR) | γ > 0 | 4-class softmax |
| ν | ν > 2 | 2 + softplus(z) |
| λ | −1 < λ < 1 | tanh(z) |
This guarantees stationarity by construction and avoids boundary problems during optimization.
QMLE
Quasi-maximum likelihood: fit under Normal likelihood, then compute sandwich standard errors valid under distributional misspecification. Pass method='qmle':
spec = GARCH(1, 1) + Normal()
result = spec.fit(data, method='qmle')
result.std_errors # MLE standard errors
result.std_errors_robust # sandwich (robust) standard errors
For Student-t or Skew-t, QMLE runs a two-step procedure: first it estimates GARCH parameters under Normal likelihood with sandwich errors, then it fixes those parameters and estimates the distribution parameters by MLE.
spec = GARCH(1, 1) + StudentT()
result = spec.fit(data, method='qmle')
spec = GJRGARCH(1, 1) + Normal()
result = spec.fit(data, method='qmle')
Automatic model selection
By GARCH order
Search over lag orders with auto=True:
spec = GARCH(auto=True) + Normal() # p, q in [1, 3]
spec = GJRGARCH(auto=True) + Normal()
spec = GARCH(auto={'max_p': 2, 'max_q': 2}) + Normal() # narrower grid
spec = GJRGARCH(p=1, q='auto') + StudentT() # fix p, search q
By volatility model
AutoVol searches across both GARCH and GJRGARCH families:
from scivol import AutoVol
spec = AutoVol() + Normal()
result = spec.fit(returns)
spec = AutoVol(candidates=['GJRGARCH'], max_p=2, max_q=2) + StudentT()
By distribution
AutoDensity searches across Normal, StudentT, and SkewT:
from scivol import AutoDensity
spec = GARCH(1, 1) + AutoDensity()
spec = GARCH(1, 1) + AutoDensity(candidates=['Normal', 'StudentT'])
Full search
Combine them to search volatility model, order, and distribution at once:
from scivol import AutoVol, AutoDensity
spec = AutoVol() + AutoDensity()
result = spec.fit(returns, verbose_selection=True)
print(result.spec)
result.selection_summary()
Selection criterion
The default score is:
Score = AIC + diagnostic_weight × n_failed_tests
where n_failed_tests counts failures of the DGT and Ljung-Box tests. Default diagnostic_weight is 50.
# Heavier diagnostic penalty
result = spec.fit(returns, diagnostic_weight=100.0)
# AIC only
result = spec.fit(returns, diagnostic_weight=0.0)
For full control, pass a callable:
def my_criterion(result, diagnostics):
score = result.bic
if diagnostics is not None:
if diagnostics['dgt']['p_value'] < 0.01:
score += 200
if diagnostics['ljung_box'][1]['reject']:
score += 100
return score
spec = AutoVol() + AutoDensity()
result = spec.fit(returns, criterion=my_criterion)
The diagnostics dict matches what result.diagnostic_tests() returns:
{
'distribution': 'StudentT',
'dist_params': {'nu': 7.42, 'lam': None},
'n_obs': 1000,
'alpha': 0.05,
'dgt': {
'n_cells': 40, 'chi2_stat': 34.2,
'df': 39, 'p_value': 0.689, 'reject': False,
},
'ljung_box': {
1: {'lags': 10, 'q_stat': 8.42, 'p_value': 0.588, 'reject': False},
2: {'lags': 10, 'q_stat': 7.91, 'p_value': 0.637, 'reject': False},
3: {'lags': 10, 'q_stat': 11.2, 'p_value': 0.340, 'reject': False},
4: {'lags': 10, 'q_stat': 9.87, 'p_value': 0.452, 'reject': False},
},
'pit': np.ndarray,
}
Pass diagnostic_kwargs to tune test settings:
result = spec.fit(returns, diagnostic_kwargs={'lags': 20, 'n_cells': 50})
When criterion is provided, diagnostic_weight is ignored.
Parallel fitting
Auto-selection fits candidates in parallel by default:
result = spec.fit(returns) # all cores
result = spec.fit(returns, n_jobs=4) # 4 workers
result = spec.fit(returns, n_jobs=1) # sequential
Multi-series fitting
Fit one specification to many series at once:
spec = GARCH(1, 1) + Normal()
results = spec.fit_multiple([returns1, returns2, returns3], n_jobs=4)
for i, r in enumerate(results):
print(f"Series {i}: persistence = {r.garch_params.persistence:.4f}")
Auto-selection works here too -- each series gets its own best model:
spec = GARCH(auto=True) + AutoDensity()
results = spec.fit_multiple(returns_list, n_jobs=4)
Inspecting candidates
result.selection_summary()
for c in result._selection_candidates[:5]:
print(f"{c.spec}: AIC={c.aic:.2f}, Score={c.score:.2f}")
QMLE with AutoDensity is redundant (QMLE always uses Normal likelihood). scivol warns and fits Normal only.
Results
spec.fit() returns an EstimationResult.
Parameters
result.params # flat array: [omega, alpha_1, ..., beta_q, nu?, lambda?]
gp = result.garch_params
gp.omega # constant
gp.alpha # ARCH coefficients (array)
gp.gamma # leverage coefficients (GJR-GARCH only)
gp.beta # GARCH coefficients (array)
gp.persistence # α+β (GARCH) or α+0.5γ+β (GJR-GARCH)
dp = result.dist_params
dp.nu # degrees of freedom (StudentT, SkewT)
dp.lam # skewness (SkewT)
Fit statistics
result.loglikelihood
result.aic
result.bic
result.hqic
Conditional variances and residuals
result.sigma2 # σ²_t
result.volatility # σ_t
result.std_resid # ε_t / σ_t
Standard errors
result.std_errors # MLE (from inverse Hessian)
result.std_errors_robust # sandwich (QMLE only)
result.cov_matrix # H⁻¹
result.cov_robust # H⁻¹ @ OPG @ H⁻¹
Output
result.summary() # full table
result.summary(robust=True) # with sandwich SEs
print(result) # compact
result.to_dict() # for programmatic use
Display settings
Override how parameter names appear in summaries, print output, and to_dict() keys:
import scivol
scivol.settings.names.gamma = "leverage"
scivol.settings.names.nu = "df"
scivol.settings.names.alpha = "a"
# Now result.summary() shows "leverage[1]" instead of "gamma[1]"
# and result.to_dict() uses "leverage" as a key
Overrides apply to indexed variants too: renaming alpha to a turns alpha[1], alpha[2] into a[1], a[2].
Reset with:
scivol.settings.names.reset()
Available names: omega, alpha, gamma, beta, nu, lambda, const, ar, ma.
Internal attribute names (gp.omega, dp.nu, etc.) never change.
Diagnostics
DGT and Ljung-Box tests
Check whether the fitted distribution captures the data:
spec = GARCH(1, 1) + StudentT()
result = spec.fit(returns)
result.diagnostic_tests()
======================================================================
Model Diagnostic Tests
======================================================================
Distribution: StudentT (nu=7.42)
Observations: 1000
Alpha: 0.05
DGT Test (Diebold-Gunther-Tay)
----------------------------------------------------------------------
Cells: 40 df: 39
Chi2 stat: 34.20 p-value: 0.6891
Reject H0: No (uniform PIT)
Ljung-Box Tests on PIT Moments
----------------------------------------------------------------------
Moment Lags Q-stat p-value Reject
---------- ------ ------------ ------------ ----------
(u-0.5)^1 10 8.42 0.5880 No
(u-0.5)^2 10 7.91 0.6371 No
(u-0.5)^3 10 11.23 0.3396 No
(u-0.5)^4 10 9.87 0.4518 No
======================================================================
The DGT test checks whether PIT residuals are uniform -- "No" rejection means the distribution fits. Ljung-Box tests check for serial correlation in PIT moments: moment 1 targets the mean, moment 2 the variance, moments 3--4 skewness and kurtosis.
result.diagnostic_tests(alpha=0.01, n_cells=50, lags=20)
diag = result.diagnostic_tests(print_results=False)
diag['dgt']['p_value']
diag['ljung_box'][2]['reject']
Auto-selection uses these tests internally to penalize poorly fitting candidates.
Analytical gradients and Hessians are verified in the internal development test suite against independent AD reference implementations. That validation machinery is intended for library development rather than end-user workflows.
API reference
Exports
from scivol import (
GARCH, GJRGARCH, ARMA, DCC,
Normal, StudentT, SkewT,
AutoDensity, AutoVol,
Component, CompositeSpec, Role,
DCCParams, DCCResult,
settings, __version__,
)
spec.fit()
result = spec.fit(
data, # 1D array, Series, or DataFrame
method="mle", # "mle" or "qmle"
solver="trust",
log_mode=True,
verbose=False,
n_jobs=None, # parallel workers (auto-selection)
diagnostic_weight=50.0, # AIC penalty per failed test
criterion=None, # custom scoring callable
diagnostic_kwargs=None, # forwarded to diagnostic_tests()
)
GARCH
g = GARCH(1, 1)
g = GARCH(auto=True)
g = GARCH(auto={'max_p': 2, 'max_q': 2})
g.p, g.q, g.n_params, g.signature
g.fitted_params # {'omega': ..., 'alpha': [...], 'beta': [...]}
g.persistence()
g.is_stationary()
g.unconditional_variance()
GJRGARCH
gjr = GJRGARCH(1, 1)
gjr = GJRGARCH(auto=True)
gjr.n_params # 1 + 2p + q
gjr.fitted_params # includes 'gamma'
gjr.persistence() # α + 0.5·γ + β
gjr.persistence(p_neg=0.6)
AutoVol
av = AutoVol()
av = AutoVol(candidates=['GJRGARCH'], max_p=2, max_q=2)
av.get_candidates() # list of (model, p, q) tuples
AutoDensity
ad = AutoDensity()
ad = AutoDensity(candidates=['Normal', 'StudentT'])
DCC
dcc = DCC(1, 1)
dcc.p, dcc.q, dcc.n_params, dcc.signature
EstimationResult
result.params, result.garch_params, result.dist_params
result.loglikelihood, result.aic, result.bic, result.hqic
result.sigma2, result.volatility, result.std_resid
result.std_errors, result.std_errors_robust
result.cov_matrix, result.cov_robust
result.success, result.niter, result.time_elapsed
result.summary(), result.to_dict(), result.diagnostic_tests()
result.selection_summary()
result._selection_candidates # list of all evaluated models
DCCResult
result.params, result.log_likelihood, result.aic, result.bic
result.Rt
result.corr(0, 1)
result.unconditional_corr
result.std_errors, result.std_errors_robust
result.summary()
Examples
Fit GARCH(1,1) and inspect results
import numpy as np
from scivol import GARCH, Normal
returns = np.random.randn(1000) * 0.01
spec = GARCH(1, 1) + Normal()
result = spec.fit(returns)
print(f"Persistence: {result.garch_params.persistence:.4f}")
print(f"Log-likelihood: {result.loglikelihood:.2f}")
result.summary()
Compare MLE and sandwich standard errors
from scivol import GARCH, Normal
spec = GARCH(1, 1) + Normal()
result = spec.fit(returns, method='qmle')
print("Parameter MLE SE Robust SE")
print("-" * 40)
for i, name in enumerate(['omega', 'alpha', 'beta']):
print(f"{name:10} {result.std_errors[i]:10.6f} {result.std_errors_robust[i]:10.6f}")
GJR-GARCH leverage effect
from scivol import GJRGARCH, StudentT
spec = GJRGARCH(1, 1) + StudentT()
result = spec.fit(returns)
gp = result.garch_params
print(f"alpha: {gp.alpha[0]:.4f}")
print(f"gamma: {gp.gamma[0]:.4f}")
print(f"beta: {gp.beta[0]:.4f}")
print(f"nu: {result.dist_params.nu:.2f}")
if gp.gamma[0] > 0:
ratio = (gp.alpha[0] + gp.gamma[0]) / gp.alpha[0]
print(f"Negative shocks hit {ratio:.1f}x harder than positive")
Full automatic search
from scivol import AutoVol, AutoDensity
spec = AutoVol() + AutoDensity()
result = spec.fit(returns, verbose_selection=True)
print(f"Best: {result.spec}")
result.selection_summary()
Fit DCC and inspect correlations
import numpy as np
import pandas as pd
from scivol import DCC, GARCH, Normal
rng = np.random.default_rng(42)
returns = rng.standard_normal(1000) * 0.01
returns_df = pd.DataFrame(
{
"stock": returns,
"bond": returns * 0.3 + rng.standard_normal(len(returns)) * 0.005,
"commodity": returns * -0.2 + rng.standard_normal(len(returns)) * 0.008,
}
)
dcc = DCC(1, 1)
result = dcc.fit(returns_df, univariate_spec=GARCH(1, 1) + Normal())
stock_bond = result.corr("stock", "bond")
print(stock_bond.tail())
print(result.unconditional_corr)
One-step-ahead variance forecast
from scivol import GARCH, GJRGARCH, Normal
import numpy as np
# GARCH(1,1)
spec = GARCH(1, 1) + Normal()
result = spec.fit(returns)
gp = result.garch_params
h_next = gp.omega + gp.alpha[0] * returns[-1]**2 + gp.beta[0] * result.sigma2[-1]
print(f"GARCH forecast σ: {np.sqrt(h_next):.6f}")
# GJR-GARCH(1,1)
spec_gjr = GJRGARCH(1, 1) + Normal()
result_gjr = spec_gjr.fit(returns)
gp = result_gjr.garch_params
indicator = 1.0 if returns[-1] < 0 else 0.0
h_next = (gp.omega
+ gp.alpha[0] * returns[-1]**2
+ gp.gamma[0] * indicator * returns[-1]**2
+ gp.beta[0] * result_gjr.sigma2[-1])
print(f"GJR forecast σ: {np.sqrt(h_next):.6f}")
License
[Add license information]
Citation
[Add citation information]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file scivol-0.1.0.tar.gz.
File metadata
- Download URL: scivol-0.1.0.tar.gz
- Upload date:
- Size: 141.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b30307c9d9f1c57075d84bbfdcbf12894f459f0ef12d30fa116e488ffe6a73b4
|
|
| MD5 |
f384f2231444f1b9f429f01cc9c595c7
|
|
| BLAKE2b-256 |
dd0e6754c99b7c2569c91fd017a1d8f1c4453d573f7bfceb30c1e31cdf4b3eab
|
Provenance
The following attestation bundles were made for scivol-0.1.0.tar.gz:
Publisher:
wheels.yml on vengveng/scivol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scivol-0.1.0.tar.gz -
Subject digest:
b30307c9d9f1c57075d84bbfdcbf12894f459f0ef12d30fa116e488ffe6a73b4 - Sigstore transparency entry: 1459079400
- Sigstore integration time:
-
Permalink:
vengveng/scivol@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/vengveng
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Trigger Event:
push
-
Statement type:
File details
Details for the file scivol-0.1.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: scivol-0.1.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 311.0 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a69ec84c46e6d04b49d13418edbee4ba5609a030f76a9d3478c55b21cc809c4
|
|
| MD5 |
de25a28a2d9e151b4dd2bee45c6aada1
|
|
| BLAKE2b-256 |
1d5f45d7fa67203f219c0e26bc9ff0e3818e79bb064e068f81b92d0f224ddefb
|
Provenance
The following attestation bundles were made for scivol-0.1.0-cp312-cp312-win_amd64.whl:
Publisher:
wheels.yml on vengveng/scivol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scivol-0.1.0-cp312-cp312-win_amd64.whl -
Subject digest:
7a69ec84c46e6d04b49d13418edbee4ba5609a030f76a9d3478c55b21cc809c4 - Sigstore transparency entry: 1459080064
- Sigstore integration time:
-
Permalink:
vengveng/scivol@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/vengveng
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Trigger Event:
push
-
Statement type:
File details
Details for the file scivol-0.1.0-cp312-cp312-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: scivol-0.1.0-cp312-cp312-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 921.0 kB
- Tags: CPython 3.12, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5306013e311ec311671757215aea783e0799e89c1c0f00340c86cb38cd704402
|
|
| MD5 |
63924edd8ae1ff2382a47cc9a2c87c92
|
|
| BLAKE2b-256 |
e8432ace55a9e97006a5ef283f4f35bb063f7dca6c7551bc27f9a17087477675
|
Provenance
The following attestation bundles were made for scivol-0.1.0-cp312-cp312-musllinux_1_2_x86_64.whl:
Publisher:
wheels.yml on vengveng/scivol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scivol-0.1.0-cp312-cp312-musllinux_1_2_x86_64.whl -
Subject digest:
5306013e311ec311671757215aea783e0799e89c1c0f00340c86cb38cd704402 - Sigstore transparency entry: 1459080248
- Sigstore integration time:
-
Permalink:
vengveng/scivol@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/vengveng
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Trigger Event:
push
-
Statement type:
File details
Details for the file scivol-0.1.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: scivol-0.1.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 923.4 kB
- Tags: CPython 3.12, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7680528aaec099228f4b86fa073396d6cc9cda68ed2366f498f650dfd1eacd5
|
|
| MD5 |
2d6fd16081933892ed885dee826fd5d5
|
|
| BLAKE2b-256 |
048fcf353105900dc9c9bf6e03592621810dfc2edd411a115ceef68d4d683fcd
|
Provenance
The following attestation bundles were made for scivol-0.1.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
wheels.yml on vengveng/scivol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scivol-0.1.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
b7680528aaec099228f4b86fa073396d6cc9cda68ed2366f498f650dfd1eacd5 - Sigstore transparency entry: 1459080541
- Sigstore integration time:
-
Permalink:
vengveng/scivol@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/vengveng
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Trigger Event:
push
-
Statement type:
File details
Details for the file scivol-0.1.0-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: scivol-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 292.9 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2d3d1d46d7f5e0eba96074780b192c43a9524f1a30335a34f36e2aef55e8ef9
|
|
| MD5 |
55a2759ba2defd6d7bbe8f5dfb60f90d
|
|
| BLAKE2b-256 |
faaeb573777e7bd721ab216dc7deb6d5e504913588d0c775c114f518b0b8145d
|
Provenance
The following attestation bundles were made for scivol-0.1.0-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
wheels.yml on vengveng/scivol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scivol-0.1.0-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
a2d3d1d46d7f5e0eba96074780b192c43a9524f1a30335a34f36e2aef55e8ef9 - Sigstore transparency entry: 1459079675
- Sigstore integration time:
-
Permalink:
vengveng/scivol@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/vengveng
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Trigger Event:
push
-
Statement type:
File details
Details for the file scivol-0.1.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: scivol-0.1.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 311.0 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b16629b09007b63ab0579895ed615c0c7f1e7e87192bfabc080bf6d038fc56fc
|
|
| MD5 |
95d9a1855ac600ea98bc58ab4f85384a
|
|
| BLAKE2b-256 |
8508ae501cbf6e4aa3ab7834de53c2d891004e56b5cc848e966a13ee89d4789d
|
Provenance
The following attestation bundles were made for scivol-0.1.0-cp311-cp311-win_amd64.whl:
Publisher:
wheels.yml on vengveng/scivol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scivol-0.1.0-cp311-cp311-win_amd64.whl -
Subject digest:
b16629b09007b63ab0579895ed615c0c7f1e7e87192bfabc080bf6d038fc56fc - Sigstore transparency entry: 1459080136
- Sigstore integration time:
-
Permalink:
vengveng/scivol@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/vengveng
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Trigger Event:
push
-
Statement type:
File details
Details for the file scivol-0.1.0-cp311-cp311-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: scivol-0.1.0-cp311-cp311-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 923.5 kB
- Tags: CPython 3.11, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a517bbdcbac552322dc677a504819d3fc3fc59f18ec6658e111e7a878ffb96f
|
|
| MD5 |
51dc8d18809fa7cfbb60fe2d390395a7
|
|
| BLAKE2b-256 |
a52616b0dd608b28cfb29d8f3c1da14885ea46570dc6cae2e85b30d9ddd4e15f
|
Provenance
The following attestation bundles were made for scivol-0.1.0-cp311-cp311-musllinux_1_2_x86_64.whl:
Publisher:
wheels.yml on vengveng/scivol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scivol-0.1.0-cp311-cp311-musllinux_1_2_x86_64.whl -
Subject digest:
0a517bbdcbac552322dc677a504819d3fc3fc59f18ec6658e111e7a878ffb96f - Sigstore transparency entry: 1459080457
- Sigstore integration time:
-
Permalink:
vengveng/scivol@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/vengveng
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Trigger Event:
push
-
Statement type:
File details
Details for the file scivol-0.1.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: scivol-0.1.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 925.8 kB
- Tags: CPython 3.11, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e10539ceaace931c6133fff2ad1cd70bc1eb7c732077aff0b5916d63b40e7fa
|
|
| MD5 |
bd68c41df3ad11534ab3b2ef5c69ae28
|
|
| BLAKE2b-256 |
5b78d536392403bc4b085d63005592a437c178095feaa205ffec32d7983143e3
|
Provenance
The following attestation bundles were made for scivol-0.1.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
wheels.yml on vengveng/scivol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scivol-0.1.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
8e10539ceaace931c6133fff2ad1cd70bc1eb7c732077aff0b5916d63b40e7fa - Sigstore transparency entry: 1459080377
- Sigstore integration time:
-
Permalink:
vengveng/scivol@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/vengveng
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Trigger Event:
push
-
Statement type:
File details
Details for the file scivol-0.1.0-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: scivol-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 292.9 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
01ae772b5c396026a76c97788e34006238dacfdb25069fabf67a3925aaea4a32
|
|
| MD5 |
f3fac825f1c46190deb954a6dc0013aa
|
|
| BLAKE2b-256 |
afd811df7aba5d37d40e02ed13ebae6c9b6b45a49058becce8d707f9f21fc562
|
Provenance
The following attestation bundles were made for scivol-0.1.0-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
wheels.yml on vengveng/scivol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scivol-0.1.0-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
01ae772b5c396026a76c97788e34006238dacfdb25069fabf67a3925aaea4a32 - Sigstore transparency entry: 1459079867
- Sigstore integration time:
-
Permalink:
vengveng/scivol@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/vengveng
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Trigger Event:
push
-
Statement type:
File details
Details for the file scivol-0.1.0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: scivol-0.1.0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 311.0 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
019230d3804176d9fe5c6b30efb58e21b569135af7b2d9d0abc4ee2db57d02e0
|
|
| MD5 |
1548f053457b1feba258c3e313604953
|
|
| BLAKE2b-256 |
8fcb39f07e4f26b32044b8cfaf8599d13677c68258a69c86140f51c9b5eefeb6
|
Provenance
The following attestation bundles were made for scivol-0.1.0-cp310-cp310-win_amd64.whl:
Publisher:
wheels.yml on vengveng/scivol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scivol-0.1.0-cp310-cp310-win_amd64.whl -
Subject digest:
019230d3804176d9fe5c6b30efb58e21b569135af7b2d9d0abc4ee2db57d02e0 - Sigstore transparency entry: 1459079950
- Sigstore integration time:
-
Permalink:
vengveng/scivol@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/vengveng
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Trigger Event:
push
-
Statement type:
File details
Details for the file scivol-0.1.0-cp310-cp310-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: scivol-0.1.0-cp310-cp310-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 923.5 kB
- Tags: CPython 3.10, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da922e1597feca69f9102cd7d852b42342c6bbacb755807ed6f20d85cf5b40db
|
|
| MD5 |
ec7e777a44a717ab1ada9e7e00a7fe26
|
|
| BLAKE2b-256 |
917927a02c2b9c3033bd8795fd0d1ef426a0294ddaf63508755d84bc6a87e4af
|
Provenance
The following attestation bundles were made for scivol-0.1.0-cp310-cp310-musllinux_1_2_x86_64.whl:
Publisher:
wheels.yml on vengveng/scivol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scivol-0.1.0-cp310-cp310-musllinux_1_2_x86_64.whl -
Subject digest:
da922e1597feca69f9102cd7d852b42342c6bbacb755807ed6f20d85cf5b40db - Sigstore transparency entry: 1459080647
- Sigstore integration time:
-
Permalink:
vengveng/scivol@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/vengveng
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Trigger Event:
push
-
Statement type:
File details
Details for the file scivol-0.1.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: scivol-0.1.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 925.8 kB
- Tags: CPython 3.10, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63cda047c15337a53abb01f9b9a965c6af43e09ad17eaa31843128e6017b892f
|
|
| MD5 |
78a12bec85c44831cdab986e8b172338
|
|
| BLAKE2b-256 |
5f6c4f5d306a278531edccd5f1260e069a14bb739787bb2c5b680e1a0042a784
|
Provenance
The following attestation bundles were made for scivol-0.1.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
wheels.yml on vengveng/scivol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scivol-0.1.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
63cda047c15337a53abb01f9b9a965c6af43e09ad17eaa31843128e6017b892f - Sigstore transparency entry: 1459079545
- Sigstore integration time:
-
Permalink:
vengveng/scivol@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/vengveng
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Trigger Event:
push
-
Statement type:
File details
Details for the file scivol-0.1.0-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: scivol-0.1.0-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 292.9 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
06d3c9115e1399952034071d11e92f10cba895510e9ac73134606f8a50895b70
|
|
| MD5 |
0592253f18cf320315f4a405db998f87
|
|
| BLAKE2b-256 |
e61ae8242ab857fc5248f76bb0c1f6daccc543ef0ee7ae01eaba2ecfa0f647ef
|
Provenance
The following attestation bundles were made for scivol-0.1.0-cp310-cp310-macosx_11_0_arm64.whl:
Publisher:
wheels.yml on vengveng/scivol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scivol-0.1.0-cp310-cp310-macosx_11_0_arm64.whl -
Subject digest:
06d3c9115e1399952034071d11e92f10cba895510e9ac73134606f8a50895b70 - Sigstore transparency entry: 1459079777
- Sigstore integration time:
-
Permalink:
vengveng/scivol@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/vengveng
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@c968c6ee2ff5a8d0143e419b447688fd57ee59ac -
Trigger Event:
push
-
Statement type: