phacker
Measure how likely it is that your best backtest is overfit.
If you try many strategy configurations and keep the one with the best in-sample
Sharpe ratio, part of that Sharpe is selection luck. phacker estimates the
Probability of Backtest Overfitting (PBO): the probability that the configuration
you picked as best in-sample ranks below the median out-of-sample. It implements
combinatorially symmetric cross-validation (CSCV) from
Bailey, D., Borwein, J., López de Prado, M., & Zhu, Q. J. (2016). The Probability of Backtest Overfitting. Journal of Computational Finance, 20(4), 39–69. doi:10.21314/JCF.2016.322
CSCV is deterministic: there is no Monte Carlo, and the same input always gives the same answer. The core is a C++ kernel (OpenMP, SIMD) with a pure-NumPy fallback.
Install
pip install phacker
Wheels are built for CPython 3.11–3.13 on Linux (x86_64, aarch64), macOS (Intel, Apple Silicon) and Windows (x64). On other platforms pip builds from source, and if no C++ compiler is available you get the NumPy implementation alone. Both give the same results; only the speed differs.
import phacker
phacker.backend() # "cpp" if the compiled kernel is available, else "numpy"
Quick start
You need a T × N matrix of P&L: one column per configuration you tried, one row per period, with all columns on the same time index.
import numpy as np
from phacker.cscv import cscv
pnl = np.random.default_rng(0).standard_normal((2000, 500)) # 500 pure-noise strategies
pbo, logits = cscv(pnl, S=16)
pbo # 0.317; noise averages 0.5, but one family can land well away from it
logits.shape # (12870,) = C(16, 8)
Include every configuration you tried, including the ones that did badly. Leaving out failed trials biases PBO downward.
Reading the result
- PBO = 0.5 means selection carried no information. The in-sample winner is equally likely to land above or below the out-of-sample median. This is what pure noise gives, not 0.
- PBO near 0 means the in-sample winner reliably stays above the median out-of-sample.
- PBO above 0.5 means the selection is worse than random. The in-sample winners tend to underperform out-of-sample (mean reversion between halves, for example).
logits holds one value per train/test split, λ = ln(ω / (1 − ω)), where ω is the
in-sample winner's relative out-of-sample rank. PBO is the fraction with λ ≤ 0.
With no skill, ω is uniform and λ follows the standard logistic distribution exactly.
Building a trial matrix from prices
phacker includes a grid backtester for threshold rules on technical indicators.
import pandas as pd
from phacker.indicators import indicators
from phacker.grid import Grid, backtest, linspace
from phacker.cscv import cscv
# a DataFrame with Adj_Close, High, Low, Volume columns on a DatetimeIndex
prices = pd.read_csv("NQ.csv", index_col=0, parse_dates=True)
prices = indicators(prices, ["RSI14", "Z20", "BOLL_B20"])
grid = Grid(
indicators=["RSI14", "Z20", "BOLL_B20"],
entry=linspace(-2, 2, 17), # z-score levels
band=[0.25, 0.5, 1.0, 2.0], # half-width around each level
hold=[1, 5, 10, 20], # bars to hold after a trigger
side="both", # "long", "short" or "both"
cost_bps=0.5, # per unit of position change
)
M = backtest(prices, grid, price_col="Adj_Close", min_periods=60) # TrialMatrix, 1,632 columns
pbo, logits = cscv(M, S=16)
M.names[0] # 'RSI14:entry=-2:band=0.25:hold=1:long'
For each configuration (indicator, entry, band, hold, side) the rule goes long or short
whenever the indicator's z-score is within band of entry, and holds for hold bars.
Positions are lagged one bar, so there is no lookahead. Indicators are standardized
with an expanding-window z-score, so θ means the same thing for every indicator
and no future data leaks into the past. min_periods is the warm-up before the
z-score is defined.
Available indicators: SMA5, SMA20, EMA5, EMA20, RSI14, ATR14, OBV,
BOLL_B20, ADX14, VOL20, Z20.
To bring your own P&L with labels, wrap it in TrialMatrix(pnl, names=[...]).
Diagnostics
from phacker.stats import n_eff, logit_fit, sharpe_se
n_eff(M) # effective number of independent trials
logit_fit(logits) # (KS distance from the logistic null, mean logit)
sharpe_se(returns) # delta-method standard error of each column's Sharpe ratio
n_eff: the participation ratio of the centred trial matrix's singular values. A grid of 1,632 configurations that mostly trade the same signal can have ann_effnear 1. High PBO on a family with a smalln_effmay say more about redundancy than about overfitting.logit_fitcompares the logits to the exact logistic null. It's descriptive only: the C(S, S/2) splits share blocks, so the logits are dependent and a classical KS p-value would be wrong. None is reported.sharpe_seis √((1 − γ₃·SR + (γ₄ − 1)/4·SR²) / (T − 1)), with skewness γ₃ and non-excess kurtosis γ₄. Use it to check that Sharpe estimates on T/2 rows are reliable enough for your choice of S.
Choosing S
S is the number of blocks the rows are split into. It must be even and at most 32.
CSCV evaluates C(S, S/2) splits, each with T/2 rows on each side:
| S | splits |
|---|---|
| 8 | 70 |
| 12 | 924 |
| 16 | 12,870 |
| 20 | 184,756 |
The paper uses S = 16. A larger S gives more splits but shorter blocks. If T isn't a
multiple of S, the last T % S rows are dropped.
Custom metrics
cscv accepts any performance function that maps a (rows, N) array to N scores.
Rows arrive in their original time order, so path-dependent metrics such as drawdown
work too:
pbo, logits = cscv(M, S=16, metric=lambda x: x.mean(axis=0))
The C++ kernel computes the Sharpe ratio only. Any other metric runs the NumPy
implementation (also available directly as phacker.cscv.cscv_reference), which is
much slower at large N.
Performance
With the Sharpe metric, the kernel sums each block once and then reuses those sums. Neighbouring splits are visited in revolving-door (Gray code) order, so each split needs one block added and one removed, and the out-of-sample sums are the totals minus the in-sample ones. Splits are processed in parallel with OpenMP.
N = 1,000 strategies, T = 2,000 rows, S = 16, Intel i7-1365U (10 cores), Windows:
| backend | time |
|---|---|
| NumPy reference | ~250 s |
| C++ kernel, 1 thread | ~0.3 s |
| C++ kernel, OpenMP | ~0.05–0.07 s |
macOS wheels are built without OpenMP and run single-threaded.
Behaviour details
- Flat columns. A configuration with no nonzero returns in a half (it never traded there) gets a Sharpe of 0 in that half rather than NaN.
- Ties. The out-of-sample rank is 1 + the number of strategies strictly worse, so ties rank low.
- First winner. If several strategies share the best in-sample score, the first column wins.
- Both backends follow these rules and agree to within 1e-12 on the logits.
Limitations
- PBO measures the selection process, not a strategy. A family where every
configuration is genuinely good and roughly equal also gives a high PBO (paper
§5.2).
n_effhelps tell these cases apart but doesn't settle it. - The answer is only as honest as the trial list. Omitting configurations you tried biases PBO down, and so does padding the family with configurations designed to fail.
- Never optimize for low PBO. Using CSCV as an objective function overfits PBO itself.
- The splits are dependent, so there's no calibrated goodness-of-fit p-value on the logits.
- Regimes outside the sample are invisible. PBO can't account for structural breaks it never saw.
- Order-dependent metrics (max drawdown, Calmar) have no additive block statistics, so they run on the slow NumPy path only.
Development
git clone https://github.com/ryousuf569/phacker.git
cd phacker
pip install -e ".[test]" # builds the C++ kernel; needs a C++20 compiler
pytest
pytest without installing runs against the source tree on the NumPy backend, and
the C++ parity tests are skipped. On Windows with MinGW on PATH, set
CMAKE_GENERATOR="Visual Studio 17 2022" so the build uses MSVC.
License
MIT. See LICENSE.
Metadata
Release files for phacker 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| phacker-0.1.0.tar.gz | 25.3 kB | With provenance | Details |
Built distributions (wheels)
Total release size: 2.7 MB
Release files / phacker-0.1.0.tar.gz
| Download URL | phacker-0.1.0.tar.gz |
|---|---|
| Size | 25.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
39593eae7e8f8234b459cd3dc44d9ee14b239346649cd01260396075d0b01d03
|
|
BLAKE2b-256 checksum How to use checksums |
cf0c179c3ea3c93a1d5d4f447c34d7a86809b02fa0119d71170a061984e05a52
|
| 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 25, 2026.
Transparency logRelease files / phacker-0.1.0-cp313-cp313-win_amd64.whl
| Download URL | phacker-0.1.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 384.4 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
963effe241dc3b57ed49efcec3381a1cf62efcbbe37bd3745777d93ff04d4f0c
|
|
BLAKE2b-256 checksum How to use checksums |
0e93235f4b18e10d3f71347312333f902720f1cb741a30fb8eb41d994ee8d956
|
| 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 25, 2026.
Transparency logRelease files / phacker-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | phacker-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 190.9 kB |
| Tags | CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
62b630c787a9265363f33658aedb6a1418de35308ef8a2590dc1091e86d60970
|
|
BLAKE2b-256 checksum How to use checksums |
b45821b705d292674b9b5153267c887f0891fde5cabb512b3c3426bc21fd8688
|
| 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 25, 2026.
Transparency logRelease files / phacker-0.1.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | phacker-0.1.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 182.2 kB |
| Tags | CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
37c52be9a8e6f730dca023aa4b051166c4fcad82bad58908d45bb968ef87ae3b
|
|
BLAKE2b-256 checksum How to use checksums |
8a6cdf78694a069e553c0318eec1459743776ae5bc1c08dc9d6f738d5edf3e65
|
| 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 25, 2026.
Transparency logRelease files / phacker-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | phacker-0.1.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 66.0 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
9bb87dca988481f855d468086a7fa7707c5aa31a49425e7bbd2a7efa11a75976
|
|
BLAKE2b-256 checksum How to use checksums |
1077e853b96c30ba3a8bc8ce032b9303bde1f3f94746605e672ae48910bc19f4
|
| 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 25, 2026.
Transparency logRelease files / phacker-0.1.0-cp313-cp313-macosx_10_15_x86_64.whl
| Download URL | phacker-0.1.0-cp313-cp313-macosx_10_15_x86_64.whl |
|---|---|
| Size | 68.4 kB |
| Tags | CPython 3.13 macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
6e6de566c4a99eeb7c7536b5650d63a9a2ee512382d6703b75ca6337638d268e
|
|
BLAKE2b-256 checksum How to use checksums |
4422f920875d607bf8362472c99d5cc47f107a39e31086e44e3981d9f159a314
|
| 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 25, 2026.
Transparency logRelease files / phacker-0.1.0-cp312-cp312-win_amd64.whl
| Download URL | phacker-0.1.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 384.5 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9c12a5721ea11a112d310e5c3789d89873d05c73eed2f7f92541c5c27e5833bd
|
|
BLAKE2b-256 checksum How to use checksums |
f99d6300d65ce8af5f12fd4ba4c13bb3a473b22b08c5b4d84e7153a779665a0f
|
| 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 25, 2026.
Transparency logRelease files / phacker-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | phacker-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 191.0 kB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
e7ceffe8683bfd6dcdec3cc6d0d2739efe05e0bd8ca8741d9ede902b7bb23554
|
|
BLAKE2b-256 checksum How to use checksums |
0d44d710fd7f12924bf5e61ae8247254aef487034c450b3e3ef7576245566309
|
| 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 25, 2026.
Transparency logRelease files / phacker-0.1.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | phacker-0.1.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 182.2 kB |
| Tags | CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
c93b18e65752647936a9aa593053b36c41e5bdb33884d53bddee25f1479d7fba
|
|
BLAKE2b-256 checksum How to use checksums |
8009d881895d39571b223e4a789bfc9da9fe5fdbbf5a029d9fdda8b06a483371
|
| 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 25, 2026.
Transparency logRelease files / phacker-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | phacker-0.1.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 66.0 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
00bfe8cd5d0681a0fd8ac7411c1de5ffc57b4f407b1b50ed28d2f74e46aabbf9
|
|
BLAKE2b-256 checksum How to use checksums |
4ab0415ff11c700d6b140743e1b132a81f67e0b3b1161e82dc7f1047b4c7b08f
|
| 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 25, 2026.
Transparency logRelease files / phacker-0.1.0-cp312-cp312-macosx_10_15_x86_64.whl
| Download URL | phacker-0.1.0-cp312-cp312-macosx_10_15_x86_64.whl |
|---|---|
| Size | 68.4 kB |
| Tags | CPython 3.12 macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
bc1c7287649c8eb5dfa07f720f7a43be471cdfa79859cac74f8368de4d4b9e53
|
|
BLAKE2b-256 checksum How to use checksums |
aab86d419006d87965b7fa8944ef05efb00af5d9662a157d87fad7c98d62ad51
|
| 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 25, 2026.
Transparency logRelease files / phacker-0.1.0-cp311-cp311-win_amd64.whl
| Download URL | phacker-0.1.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 384.6 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
8c37eeaa118a657d66c6f09f9330affc6a93cf3582c77093a1c0effa60851171
|
|
BLAKE2b-256 checksum How to use checksums |
1a79e9de932892a8ddc16ba3e8ae4b531d48bab742a2716c95178b1d140f286a
|
| 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 25, 2026.
Transparency logRelease files / phacker-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | phacker-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 191.2 kB |
| Tags | CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
7d462eb7e2ea87200baf36e52419bc6280570c6f57bdb50a035bd51a1f3a358e
|
|
BLAKE2b-256 checksum How to use checksums |
d4d1ee3c3a29beb840cd6cbb7ed9423bcad19a9cff377bf493d0a58cec8b59a3
|
| 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 25, 2026.
Transparency logRelease files / phacker-0.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | phacker-0.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 183.1 kB |
| Tags | CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
b7061abaf4fbb6ceeacd1010594a7f4f69b0e06244fbb330d003b92ca08f205e
|
|
BLAKE2b-256 checksum How to use checksums |
04f7dc4b2fed342ae45fb38fe28ba207298ace4f4047265f087cffd6189bc92a
|
| 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 25, 2026.
Transparency logRelease files / phacker-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | phacker-0.1.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 66.8 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
9fdb83598a75fb0e2d15c3d5ba80745f4b01454cdecab64f325ce0e46a8b6f8a
|
|
BLAKE2b-256 checksum How to use checksums |
7796087058126440b3fc973d1329b42b472dc5920b0dfe3b8294bc608c897681
|
| 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 25, 2026.
Transparency logRelease files / phacker-0.1.0-cp311-cp311-macosx_10_15_x86_64.whl
| Download URL | phacker-0.1.0-cp311-cp311-macosx_10_15_x86_64.whl |
|---|---|
| Size | 68.9 kB |
| Tags | CPython 3.11 macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
d65e99f4a99c4eac3e396536de6e90fe19a44de56f75649887ceb89c729aed68
|
|
BLAKE2b-256 checksum How to use checksums |
f870ca50351840c411cac72e00df1926c472f9a0937446b7cc0181cd8f805d89
|
| 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 25, 2026.
Transparency logSecurity for phacker 0.1.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 16 files in this release have been uploaded with provenance metadata.
Attestation for phacker-0.1.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 25, 2026.
Transparency logA 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.