Skip to main content

Epochly - Transparent performance optimization for Python applications

Project description

Epochly

PyPI version Python 3.9-3.14

Epochly is a drop-in Python performance overlay. It accelerates workloads via GPU acceleration and multicore parallelism when safe and beneficial, and yields to normal execution when it cannot help. No code changes required.

Installation

From PyPI:

pip install epochly

From source:

git clone https://github.com/chandlercvaughn/epochly.git
cd epochly
python3 -m venv .venv
source .venv/bin/activate
pip install -e .

Quick Start

Default Decorator (Monitor-First)

The plain @optimize decorator runs your function on the transparent monitor-only path by default. Epochly observes the workload and adds bounded instrumentation; on a fresh default install it does not automatically JIT-compile, and epochly.stats() reflects LEVEL_0_MONITOR (no acceleration by default). This is intentional: the default path never changes results and never pays a cold-start cost you did not ask for.

import epochly

@epochly.optimize
def numeric_kernel(n):
    total = 0.0
    for i in range(n):
        total += (i * 1.5) ** 0.5
    return total

# Runs on the transparent monitor path by default (no acceleration).
for _ in range(50):
    numeric_kernel(10000)

status = epochly.stats()
print("realized level:", status.get("realized_level"))

To turn observation into measurable speedups, opt in to an explicit level (next example) or lower the JIT hot-path threshold with EPOCHLY_JIT_HOT_PATH_THRESHOLD.

Explicit JIT (Measurable Speedups, level=2)

Pass level=2 to request JIT compilation of numeric inner loops. The first call pays a one-time compilation cost; subsequent calls run compiled. On numeric-heavy loops this is where the headline JIT speedups (see docs/benchmarks.md) are realized.

import epochly

@epochly.optimize(level=2)
def numeric_kernel(n):
    total = 0.0
    for i in range(n):
        total += (i * 1.5) ** 0.5
    return total

# Warmup triggers compilation; later calls run the compiled kernel.
for _ in range(5):
    numeric_kernel(50000)

status = epochly.stats()
print("realized level:", status.get("realized_level"))
print("optimization effective:", status.get("optimization_effective"))

Context Manager

from epochly import optimize_context

with optimize_context(level=2):
    result = numeric_kernel(50000)

Key Capabilities

The default decorator path is monitor-only: it observes and never changes results, but it does not accelerate by default. The speedup figures below are realized on the explicit, opt-in paths named in each bullet (and detailed with their reproduction recipes in docs/benchmarks.md).

  • Drop-in overlay: no code changes required; Epochly decides whether to accelerate
  • GPU acceleration (L4): up to 64x on large array workloads, on the explicit level=4 path when CUDA hardware is available (requires EPOCHLY_GPU_ENABLED=true and an NVIDIA GPU; not active by default)
  • Multicore parallelism (L3): up to 8x per core on CPU-heavy tasks via the explicit level=3 process-pool path (not active by default)
  • JIT prefilter (L1/L2): bytecode prefilter classifies eligible kernels; the explicit level=2 path JIT-compiles admitted numeric inner loops (the default path stays at L0 monitoring until you opt in)
  • Monitoring (L0): the default path; pass-through with instrumentation; bounded overhead (< 5%) on unsuitable workloads
  • Rollback safety: circuit breaker with cache invalidation; on failure, execution rolls back to the unmodified path without silent misclassification
  • Truth surface: unified status/metrics/inspect surface reflects measured execution, never heuristics

Enhancement Levels

Epochly operates through five progressive enhancement levels:

Level Name Behavior
L0 Monitoring Pass-through with instrumentation; no acceleration
L1 Prefilter Bytecode prefilter classifies eligible kernels; threading for admitted ones
L2 JIT JIT compilation of prefilter-admitted kernels
L3 Multicore Process pool dispatch with shared memory for parallel workloads
L4 GPU CUDA acceleration via CuPy when NVIDIA GPU is detected

Unsuitable workloads receive L0 pass-through with bounded overhead (5% wall-clock budget verified in tests/validation/test_acceleration_proof.py).

Level 3 requires a __main__ guard

The Level 3 multicore path dispatches work to a process pool. On macOS and Windows (and any platform where the multiprocessing start method is spawn or forkserver), each pool worker re-imports your program's main module during startup. If your script runs at module top level with no if __name__ == "__main__": guard, that re-import would replay your module-level side effects (file writes, network calls, payments) once per worker.

Epochly will not silently replay those side effects. When it detects an unguarded __main__ (or a script fed via stdin / python -c, whose module path resolves to <stdin>) under a spawn-class start method, it refuses Level 3 process-pool dispatch, emits one warning, records the UNSAFE_MAIN_MODULE fallback reason on the truth surface, and falls back to a lower level. Wrap your entry point to enable Level 3:

import epochly


@epochly.optimize(level=3)
def crunch(n):
    total = 0
    for i in range(n):
        total += (i * i) % 7
    return total


if __name__ == "__main__":  # required for Level 3 on spawn/forkserver platforms
    for _ in range(8):
        crunch(200000)

This is the standard Python multiprocessing "safe importing of the main module" requirement; Epochly enforces it rather than letting it corrupt your program.

Architecture

  • Truth surface: single unified schema for status, metrics, and inspect outputs. optimization_effective and optimization_summary reflect measured execution, not heuristics. Rollback events, fallback reason codes, admission decisions, and realized enhancement level are surfaced in machine-readable artifacts.
  • Circuit breaker: bounded HALF_OPEN probe concurrency; on failure, execution rolls back to the unmodified code path with full cache invalidation. No silent drift.
  • Inference plugin: optimizes .generate/.encode/__call__ on ML model objects when safe; falls back otherwise.
  • Prefilter correctness: all rejection paths emit explicit, machine-readable fallback reason codes. No silent false rejects on known-valid numeric workloads.
  • Memory safety: adjacent-block coalescing in HybridLargeBlockManager; real OS mprotect(PROT_NONE) guard pages; serialized FastMemoryPool bookkeeping under contention; TOCTOU guards in stale shared-memory cleanup.

Environment

  • Python 3.9 through 3.14
  • Linux, macOS, or Windows
  • NVIDIA GPU optional (required for L4)
  • Project virtual environment: .venv at project root
  • Cross-version development venvs: .venv-py38 through .venv-py313 alongside .venv

Running Tests

Always activate the virtual environment first.

source .venv/bin/activate
pytest tests/unit/<module>/ -v

Examples:

source .venv/bin/activate
pytest tests/unit/core/ -v
pytest tests/unit/jit/ -v
pytest tests/unit/memory/ -v

Never use pytest --cov. The pytest-cov plugin imports Epochly before environment variables are set, causing OpenBLAS thread creation and memory exhaustion. Use coverage.py directly instead:

source .venv/bin/activate
coverage run -m pytest tests/unit/<module>/ -v
coverage report --include="src/epochly/<module>/*" --show-missing

Project Structure

epochly/
├── src/epochly/           # Main source code
│   ├── core/             # Core runtime, enhancement levels, decorator
│   ├── jit/              # JIT compilation, artifact store, compilation queue
│   ├── memory/           # Memory management, shared memory, circuit breaker
│   ├── gpu/              # GPU detection, CUDA acceleration (L4)
│   ├── inference/        # ML model inference plugin
│   ├── monitoring/       # Metrics, telemetry, Prometheus exporter
│   ├── security/         # Signed pickle, AST sanitizer, access control
│   ├── licensing/        # License validation, trial endpoint hardening
│   ├── cli/              # Command-line interface
│   ├── config.py         # Configuration system
│   ├── bytecode_prefilter.py  # L1/L2 eligibility classification
│   └── ...
├── tests/
│   ├── unit/             # Unit tests (per-module)
│   ├── integration/     # Integration tests
│   ├── validation/      # Validation contract tests
│   └── e2e/             # End-to-end tests
├── .github/workflows/   # GitHub Actions CI/CD workflows
├── benchmarks/          # Benchmarking system
├── scripts/             # Helper scripts
├── dashboard/           # Dashboard application
└── docs/                # Documentation

CI/CD

Epochly uses GitHub Actions with self-hosted runners:

  • 16 self-hosted Linux runners on 192.168.1.17 (NVIDIA RTX 4070, Python 3.9-3.14, GPU label)
  • Self-hosted macOS runners on Mac-Studio
  • GitHub-hosted Windows runners

Key workflows:

  • release-gate.yml — tier-1/tier-2 test matrix across all platforms and Python versions
  • post-merge-assurance.yml — commit-scoped PMA on every main merge
  • full-matrix-validation.yml — nightly full matrix across all OS/Python combinations
  • security-scan.yml — Bandit + dependency audit
  • smoke-tests.yml — quick smoke validation
  • wheels.yml — build and test wheels
  • publish-pypi.yml — publish to PyPI after release gate passes

Security

For Epochly's security policy, vulnerability reporting process, threat model, and per-field telemetry data flow, see SECURITY.md and docs/security/. The latter contains threat-model.md and telemetry-data-flow.md.

Built-in security properties of the runtime:

  • Memory isolation between interpreters
  • Access control for shared memory
  • Audit logging for all operations
  • HMAC-signed pickle helper for trusted IPC boundaries (epochly.security.signed_pickle)
  • Hardened AST sanitizer for dynamically-compiled user code paths
  • Prometheus exporter defaults to loopback (127.0.0.1) with explicit warning on 0.0.0.0
  • Bounded Prometheus metric-name cardinality (user-input hashing + 1000-name ceiling)

Stabilization Evidence

P0 Stabilization (2026-04-16)

24 behavioral assertions in validation-contract.md, 30+ new regression tests:

  • Bounded HALF_OPEN probe concurrency in memory circuit breaker
  • Adjacent-block coalescing in HybridLargeBlockManager
  • Real OS mprotect(PROT_NONE) enforcement on memory-pool guard pages
  • Fixed small-slab bitmap math
  • Serialized FastMemoryPool bookkeeping under contention
  • Linux RTX 4070 verification: 1012 passed, 90 skipped, 0 failed
  • 5% wall-clock overhead budget preserved on non-beneficial workloads

Phase 2 Stabilization (M5-M13)

116 additional behavioral assertions across 9 milestones:

  • NUMA-aware memory placement and monitoring hardening (M5-M6)
  • Runtime, JIT, and ML-path correctness (M7-M8)
  • Licensing integrity (M9)
  • Boot-sequence, core, and config robustness (M10)
  • CLI, Jupyter, and deployment paths (M11)
  • GPU and native inference sweep on RTX 4070 (M12)
  • Progression integrity, hygiene, Cython wheel verification (M13)
  • Hygiene guardrails as executable tests: tests/validation/test_no_mocks_in_src.py, tests/validation/test_no_banned_env_writes.py

Transparent-Optimizer Trust Mission (M1-M9)

107 features across 9 milestones making Epochly a trustworthy transparent optimizer for the qeval evaluation corpus:

  • M1: Baseline gap map and ranked failure classification
  • M2: Truth surface unification — single schema, measured-only reporting
  • M3: Prefilter correctness — no silent false rejects, machine-readable fallback reason codes
  • M4: L3 multicore and shared memory — TOCTOU race fix, process pool caching fix
  • M5: L4 GPU admission — duplicate-init fix, numerical tolerance tightening, cross-version validation
  • M6: Rollback and circuit breaker — cache invalidation on rollback, drift detection
  • M7: optimize/wrap() bootstrap and inference plugin — 4-step bootstrap fix, ML model optimization
  • M8: Stability hardening — numerical differential tests, concurrency/memory safety, packaging/API verification
  • M9: Final qeval-gated verification — all P0 regression families HELD/PASS or CLOSED

Configuration

from epochly import configure, EnhancementLevel

# Set optimization level
configure(enhancement_level=EnhancementLevel.LEVEL_3_FULL)

# Enable profiling
configure(profile_enabled=True)

# Control worker threads
configure(max_workers=8)

Monitoring

import epochly

# Get performance metrics
metrics = epochly.get_metrics()
print(f"Enhancement level: {metrics.get('enhancement_level')}")
print(f"Functions optimized: {metrics.get('functions_optimized', 0)}")

# Check current status
status = epochly.get_status()
print(f"Enabled: {status['enabled']}")

Deployment

# Selective activation by environment
export EPOCHLY_ENABLED=1
python your_app.py

# Inspect deployment state
epochly-deploy status

# Enable or disable deployment
epochly-deploy enable
epochly-deploy disable

# Select a deployment mode
epochly-deploy set-mode monitor

# Monitor deployment for 60 seconds
epochly-deploy monitor --duration 60

# Emergency stop
epochly-deploy emergencystop

Contributing

# Development setup
git clone https://github.com/chandlercvaughn/epochly.git
cd epochly
python3 -m venv .venv
source .venv/bin/activate
pip install -e '.[dev]'
pre-commit install

# Run tests (always activate the venv first)
source .venv/bin/activate
pytest tests/unit/<module>/ -v

# Cross-version testing
.venv-py39/bin/python -m pytest tests/unit/cli/ -v
.venv-py310/bin/python -m pytest tests/unit/cli/ -v

# Coverage (use coverage.py directly, NOT pytest --cov)
source .venv/bin/activate
coverage run -m pytest tests/unit/<module>/ -v
coverage report --include="src/epochly/<module>/*" --show-missing

Cython extensions build with python setup.py build_ext --inplace.

License

Epochly is proprietary commercial software licensed under the Epochly Software License Agreement (ESLA). See LICENSE for the complete license terms.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

epochly-0.6.15-cp314-cp314-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.14Windows x86-64

epochly-0.6.15-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (6.5 MB view details)

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

epochly-0.6.15-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (6.5 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

epochly-0.6.15-cp314-cp314-macosx_15_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

epochly-0.6.15-cp313-cp313-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.13Windows x86-64

epochly-0.6.15-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (6.6 MB view details)

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

epochly-0.6.15-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (6.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

epochly-0.6.15-cp313-cp313-macosx_15_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

epochly-0.6.15-cp312-cp312-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.12Windows x86-64

epochly-0.6.15-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (6.6 MB view details)

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

epochly-0.6.15-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (6.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

epochly-0.6.15-cp312-cp312-macosx_15_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

epochly-0.6.15-cp311-cp311-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.11Windows x86-64

epochly-0.6.15-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (6.6 MB view details)

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

epochly-0.6.15-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (6.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

epochly-0.6.15-cp311-cp311-macosx_15_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

epochly-0.6.15-cp310-cp310-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.10Windows x86-64

epochly-0.6.15-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (6.4 MB view details)

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

epochly-0.6.15-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (6.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

epochly-0.6.15-cp310-cp310-macosx_15_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

epochly-0.6.15-cp39-cp39-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.9Windows x86-64

epochly-0.6.15-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (6.4 MB view details)

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

epochly-0.6.15-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (6.3 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

epochly-0.6.15-cp39-cp39-macosx_15_0_arm64.whl (5.5 MB view details)

Uploaded CPython 3.9macOS 15.0+ ARM64

File details

Details for the file epochly-0.6.15-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: epochly-0.6.15-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for epochly-0.6.15-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 ff32e201a794f0d2a41aba07c286d94ece5739957bf4954d4b82e39729fd8b91
MD5 ad4da89b1e0aaeaa4cd900a466734367
BLAKE2b-256 af78c1ebf4c186aa2aad172b88ce7b686ea9d6eaa4cea89f1841c5597d018ecb

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp314-cp314-win_amd64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2e68604788c838399c727692c97155b7c4a2ae0f9eb1e608fe909fe7949d5ecb
MD5 f1a869ba86b2865244e54c17fac73fd5
BLAKE2b-256 d9fd6db361726e462a08d7b397373e1e2f956ce69984446e7f5635716a7d71b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 44aad04e25bec255b43508aa8c375b61d994040e74e603f7436631849228bb23
MD5 12c5932a04de667b0c6ee020fe0cb757
BLAKE2b-256 d43dec38903c9c38f1e899eeb75cabb9b97806f3d044664106a24ba8b446a1f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 792662daec5a1b9b05222d41ad80d8c865b5209656b6ec0a95e8f89fe35218a0
MD5 8969ecda512572b0f1d7c8d2afee1811
BLAKE2b-256 016a277e11d6c109aabff0d4901ea180dd19ca69b1c68547d7d6c5b22fea10ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp314-cp314-macosx_15_0_arm64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: epochly-0.6.15-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for epochly-0.6.15-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c3faee4e5a3b823a514e44d8cd4dcab901eae6776a1575b0f74543e22acee3da
MD5 053f2fc93206cbc5f56976e3bd7d2267
BLAKE2b-256 3b8a16db53a06444187e12e9e67b2a480c748f535edb0ec750f5f1405eacae04

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp313-cp313-win_amd64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d798d87bf1409ae711299b0e481adda4780a96ed6169f1cebccd20d7b11ec46d
MD5 e2a78750558d71a18d90860efb41befd
BLAKE2b-256 61c3359d040d32cbcee6f01ca8db692fe322870e79b211e6acc03e8afdf1286c

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 41b48cdfe218cc4ca3ec98f9931ec9cea468bd029a8dfc446f30795617ed0785
MD5 3983614c66066e131491c4f158fd216a
BLAKE2b-256 902ce8ac8b1e79344962db86b8f4326870ce6af3b491ac02eed50d64eb518f8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 4fde01e4bfd9e5d7a8c0c099a2192cc28e04264aa2335555117fd5c1ca7cb1b8
MD5 d876a52ea4c99af4a91239a7cc6f6b30
BLAKE2b-256 ad914ef471daf103ebeedcbe7bcef567c7045ff984ed7c30f67100f72dffc9db

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp313-cp313-macosx_15_0_arm64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: epochly-0.6.15-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for epochly-0.6.15-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 285187ccceff6858b9a1a9cf5aa4fe36bc33db67838c521ac0d392682d1f701c
MD5 f4d9ba2ed5bd6f3358e0d7bde2a68afc
BLAKE2b-256 e4011d199fded16196892956534c8dc542cb118deb2f06e7c71219e0407b0a2c

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp312-cp312-win_amd64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 35d06f95b19b3813d3f951725c097488f94b95b897a2492bb87600ad9ef1c891
MD5 37de4a1458971085441ca769c57e81a4
BLAKE2b-256 5961af9761249af1bf532fc21a83d14dc383b66758c0797f09273b965cbee1c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bcb456a5328baac6a4d214e63b9c60ad2c93455c5563768810d5e3af5ea92717
MD5 82478111968b74bf56c58bdb1c9c742a
BLAKE2b-256 83b070fa69abbe89a8ed40e79f4a76bf37fb3301b963d4c9584aa725f0232c0a

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 82aef534e50ab6610be11a41a81742f96d241dd6188ac96d99589856c8aeb582
MD5 2114afd0600b88c0fe9d7351bf75dd7f
BLAKE2b-256 cefbc930dc4d6a89d426a82bff6b40210f04a22912d66f2d41ef0070e6ee7d46

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp312-cp312-macosx_15_0_arm64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: epochly-0.6.15-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for epochly-0.6.15-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a39f97820b2ff7dafab5a369b898efacf4e995c853112a9b385fb489c711f8fb
MD5 3835ad41ef2244b9aac5cdc7271f80eb
BLAKE2b-256 08890928de226577f690e0280e43e0aea6cbd7ea5a03b3a688c2dfb1b1b166bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp311-cp311-win_amd64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 23a6e9c71755ea921014b1888045511f162b4f5309f4ad9539a2558dc4ec87dd
MD5 52ce946d33b7323fabd966059daca6e2
BLAKE2b-256 1bb893a942453f5f51545fbbb9384fad2336a98da5d840191e0a9d9e5da21178

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 53243f0a58315284c3aa3ba55c5e747192b82f763ccd270e4665e15ddbcde229
MD5 a82761f367084f5e54e641c956e4d514
BLAKE2b-256 120ae95058e727d81ad69a2ad1e686c35a20a21f5fb8911a8b530567b699c57a

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 c5d23b8a24da3a870999a71e1af47dcda742d7725efffc3b55aef85d36660d68
MD5 8ea54a78f2aa389f168fec66d0f8aa10
BLAKE2b-256 e7941156460a72922b39db74974014e9575452031c86553af75b5e5e28d3d040

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp311-cp311-macosx_15_0_arm64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: epochly-0.6.15-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for epochly-0.6.15-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 3119eb706fcb2ed8f9d4afe0cc73ded04316588694040e110708c8932c78379f
MD5 a637843c8dfca751f5c00f8158592456
BLAKE2b-256 9b89373996546378453cb2ba532c08ad666e8a71c636401378f8817c9b4cc2e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp310-cp310-win_amd64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2162ae898e7e1b8a4af2aab757a5cbb23abe3a4a8a0509665f037f101ecc39d3
MD5 d3e55e06ed2822b0cacb266e24f30c20
BLAKE2b-256 8ac0eff9262ecc654350d47f60020ec4ee3e890511033e04cf9e6c227939831b

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 282ea1a62dba58cb72ea880bb97e613ccfdfa539fa73747a84a9d0bca31bbd57
MD5 353e9b533889a3d4fb264c2c7ecd4ed2
BLAKE2b-256 30e8522d681818151f4c433a8763a524042e3614467bc560a17f03b52a307cbd

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 10c4239e9cf1b21adba0dc679b6f0d7db1266ac402872b920fa1bca883486fa3
MD5 e7039742360bf44fc459b40d1ea7f070
BLAKE2b-256 7373b2515d925e29fb0b46c7c3da1c372723bf13c3e49769b906811b8fe58f8f

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp310-cp310-macosx_15_0_arm64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: epochly-0.6.15-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for epochly-0.6.15-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 2bc0668e11cbc933f678cecc0df4f5c5d4e6420e5f22c62701dcae8c5fbb5755
MD5 305c3a2ef9dd586134ddcc574a64158c
BLAKE2b-256 17475479b83f669e65248df2d0559322153b4c10260e0b6c9732c3e08da4ea34

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp39-cp39-win_amd64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a9cf4eaf1749090f7eb4a9aa5661b0fd3258efc1445b877c7b2e3ca49c4497c0
MD5 8eac50bb527da780af52f3ff58ff430a
BLAKE2b-256 2e9dbbf871dce8d514e28e1237f747c7fd0496e55c51359ecd254758491a5289

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6001c5981d9f354dc89d0f0b7c5f6045f709249327a2c694742bf87e8131fa01
MD5 86377b98e6a5b027944f5dc9f831276b
BLAKE2b-256 3cd23c5aea79543b7d405b31e2ac8957a42f8af6a3e2a558aeba97a2068f724e

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

File details

Details for the file epochly-0.6.15-cp39-cp39-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for epochly-0.6.15-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 5d0bec828197dfd26c0ce7200d69e29468f4a6785fd091940a6db8227e27a47b
MD5 a531e91ba23460ad9f7aad985c12b843
BLAKE2b-256 8a9fc1fabc2b4601876e779333c0adfa589aef18a6a1b372d70b2310a0e9a094

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.15-cp39-cp39-macosx_15_0_arm64.whl:

Publisher: publish-pypi.yml on chandlercvaughn/epochly

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

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page