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.16-cp314-cp314-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.14Windows x86-64

epochly-0.6.16-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (7.2 MB view details)

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

epochly-0.6.16-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (7.1 MB view details)

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

epochly-0.6.16-cp314-cp314-macosx_15_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

epochly-0.6.16-cp313-cp313-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.13Windows x86-64

epochly-0.6.16-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (7.2 MB view details)

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

epochly-0.6.16-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (7.1 MB view details)

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

epochly-0.6.16-cp313-cp313-macosx_15_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

epochly-0.6.16-cp312-cp312-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.12Windows x86-64

epochly-0.6.16-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (7.2 MB view details)

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

epochly-0.6.16-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (7.1 MB view details)

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

epochly-0.6.16-cp312-cp312-macosx_15_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

epochly-0.6.16-cp311-cp311-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.11Windows x86-64

epochly-0.6.16-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (7.2 MB view details)

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

epochly-0.6.16-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (7.1 MB view details)

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

epochly-0.6.16-cp311-cp311-macosx_15_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

epochly-0.6.16-cp310-cp310-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.10Windows x86-64

epochly-0.6.16-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (7.1 MB view details)

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

epochly-0.6.16-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (7.0 MB view details)

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

epochly-0.6.16-cp310-cp310-macosx_15_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

epochly-0.6.16-cp39-cp39-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.9Windows x86-64

epochly-0.6.16-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (7.0 MB view details)

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

epochly-0.6.16-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (7.0 MB view details)

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

epochly-0.6.16-cp39-cp39-macosx_15_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.9macOS 15.0+ ARM64

File details

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

File metadata

  • Download URL: epochly-0.6.16-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 3.0 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.16-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 b3de88415be364eba6a12db81f9ac91581c4d5428908324bf022dab77ac4a851
MD5 e790590f032966f87a73ab5f07207970
BLAKE2b-256 23730e2dba11cbc3de04165a4e6ccb0228bd04f286588d66413a05b95c737936

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3b1c4f7385209e331aa7432a869e5f721d79d5c7cf78c552dc1202efc7d57b5e
MD5 f8d5a011044617344542f19937ba6903
BLAKE2b-256 c952479d583de0009ca2b60572e2d1f77858b688fe3a6090c4db7c7f0b59bf3d

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d0adb7a06b55842d58f119841530e07cde3e85e4b23479a90efcb06c12ca7d54
MD5 cbf9541063bdfb780c2be6d57f7c1db5
BLAKE2b-256 e160699e18fdbc45ec1f1d4901fbe8529755df4ff730e3141819f1f0817e5f67

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 eefb8fbc828c93dd712288662b05f200218d10a68ab1dbde69de0df1b19d4d77
MD5 8eb6da4ddcfdb3e060c08dca19ae4b60
BLAKE2b-256 5dee2f0da97c8e02b7a29975d6cc50605520cac01dcb13ba94f9c321133cadea

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: epochly-0.6.16-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 3.0 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.16-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 6809326a9ea5eab8a736f71cf585b40d20e8f589091ed5b3fbfbc1b6ba21a45a
MD5 d5593096368476879347b345489250ff
BLAKE2b-256 2cf74b53c129f2a3defe330cd016f19c10a9238ae88506182212aecb8adc5e9c

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f01551cabf5902158bae2702cd2d9b4f0444249aa4fc548149e593bf21fc721d
MD5 97f9cd56429dfb8f5f0820f4ac3d4b07
BLAKE2b-256 32b8a28014d592fbe584ba17ba99e949c772bf0f3f7f898a3f1ae465218baa5f

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ff5a59a1615d3bc9864469334554a95b81665ad9e0fad7a67f6b8c6e2f37f02a
MD5 252f4092ca54c702927c0de3ea07a47e
BLAKE2b-256 7866a876d6d9fa4db2714c8d753e83e5f5f1a5d16529fc8bcd7e87700ccb491e

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 4ec5c7623bece325c23a9b9a46b703da96e8b51f2d46b708b6aa65d1478da0cf
MD5 d9eae99295fac4e225a94e791748e6aa
BLAKE2b-256 1b321f566a065a773cc494eb7c2c9cd883519fc4b5994ccd6b69dfa3e36da194

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: epochly-0.6.16-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 3.0 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.16-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c44f1efc81750d20943e697a21ab3a0755f642f1bfda6ba4593cbadb4f2b0e51
MD5 3a08745608b5b623ffa73e6ab9061d8e
BLAKE2b-256 6f318741da299b2cc74a2a657b4c403cb04cb9df657e916198ce1bde897c1c08

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 edc0214326f5e01f539114163b65cb87264d28cc1643f252cd4ec6bf3a154b9f
MD5 e619c58dbc2ff654dbe265663217457b
BLAKE2b-256 c33f73cbd6b490c37d6da2cad627457d71b88a81d2cbb142ac2e6556cf1f4dfe

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 57d56002c67bbb9676b378ac807cfc14bd6b94245fc8fcd7fa02ee7d3eb05424
MD5 221ba207da066cd89d71e4ec399e95fd
BLAKE2b-256 d195c241c244086c33fae47c06a428672c5ecef498303e16180a2bdb55b8745d

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 e1b25dd5636b1563e5072a4f7142c6cff36fb9df2a9a51d6e0b7ef5a4cb89e1e
MD5 d432d1352888a82fb5dfbc7f88cef4d4
BLAKE2b-256 194855fbd906de4e784056c148b3878226612ff8d4ad2f915f9dffcfaf94f657

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: epochly-0.6.16-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 3.0 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.16-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b83ab5313a222d6384e6af670f614a85a7eef4595c8c38cb83350e803777ebbd
MD5 7b80be7f43b3749ccfbb1f035d5e532f
BLAKE2b-256 16f29d4ca27c6a6caa4566242aee9625aeab7a87a321a440a3dac1c79b40cb21

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d6508841dd5b37fece31a41703bbeff49c829915afbe12e9da8afb9e4c3c63bd
MD5 8fd7a3f6e177138e52599f460561e84a
BLAKE2b-256 9cf0aae1f16eed731b4180aa9ba6f9e9786c208c0863cc287c30f68266d894f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b4d5e7ac53f23b8c2b7724d641a7aa20879ae34a2b68a58f3f48475bbac27d20
MD5 3d051a95a0f369853965f32f1fe02e57
BLAKE2b-256 231ec4b538dcbbcb150e9ccb2efc63f38e54fd5f50b666f4177183778696f233

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 77af375529dcb288c57ced44fa3baa547914cfe6438f02d629fe02b4fd8281d9
MD5 c8a4b65b6ac15d9ae111227223202792
BLAKE2b-256 6492f541ad329b82b988c533edae86ecedec64c6bcff9d920e0e9f7e90ce8155

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: epochly-0.6.16-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 3.0 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.16-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 457e28d1adb09fcb37349ab8f130dc3b3d7cefff7bccac681e0d862649a47d52
MD5 61e7b45b1fc2ea4c19ac6c0bfbffe323
BLAKE2b-256 0b200a8bc7e6fd404a77a5b8dec5e04ac834e8bfe94b839d56527f4927807ba9

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c7c7c0fcce4161b1b969eee59acf598c88d9ce7352ed212908280b40bbcc5ee4
MD5 5acf5a4e93acced8c4568fa30e1bb2a1
BLAKE2b-256 08a1797d05aa29e0b6db356d426ab51d4eb72b91a3d89d6940ac02804350418a

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9d3472aaa2019d4d1dfe4745dcd8bc8c983ee923e445d48c86cd4df3677797b3
MD5 e58b8633b9863ca34b28b466cb7d5ea4
BLAKE2b-256 63a4816066baaac6d724166d8096736d672ded040f6570ee7d297c9624498df2

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 1ccd960ddb93f82d943dd57e99adbfe236a8e0ad235969777770de58d160919d
MD5 fffdcf0db291f622f6a38dcd0a50831c
BLAKE2b-256 9b3a2da576b520a7a9e9f0d4788ed12b1b9eec2e29291843e148d29df0a367de

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: epochly-0.6.16-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 3.0 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.16-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 91c0ff80d05f4bd3d52b1845f12d41bd8e9549611d5c549deb324d7d8668b4c2
MD5 be71668c921e511e115dac59a030d6b3
BLAKE2b-256 d51a6adb68745cd887dd3b7789b9f6d4d7e1804e132b61b0c7eda7b82d067b86

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c68426928d928c9a87253f109f6af56b35102d8131943f4bc3df3fc26bbd2f47
MD5 51bf08a0073dc45fc5565dcf784f529f
BLAKE2b-256 64bb1d4c798adb2b354e4a134ca76311a428b8937228c9ed25851329aac086c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 af533cd631ca9e4a40589a62837bc0d3598596e04c8703106aa751120712d557
MD5 9b0ba6ba4118af83b7b0f6e630b65fc9
BLAKE2b-256 a9a0b15e84b3e053e3d9f71d4e23077a0e93976ff4ac7936c10cd5188048f933

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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.16-cp39-cp39-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for epochly-0.6.16-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 b029f69cfdc408dbc5284407f454465c6341ee0472a53cfcf8fcddf009a5d99c
MD5 97837582f6f18bfbfa0b0697588f6d58
BLAKE2b-256 721cd93bac8db5ea45308e543b19cf1d158f88ac906e3b26d68d2d1a584bb981

See more details on using hashes here.

Provenance

The following attestation bundles were made for epochly-0.6.16-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