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

Uploaded CPython 3.14Windows x86-64

epochly-0.6.14-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.14-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.14-cp314-cp314-macosx_15_0_arm64.whl (5.4 MB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

epochly-0.6.14-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.14-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.14-cp313-cp313-macosx_15_0_arm64.whl (5.4 MB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

epochly-0.6.14-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.14-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.14-cp312-cp312-macosx_15_0_arm64.whl (5.4 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

epochly-0.6.14-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (6.5 MB view details)

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

epochly-0.6.14-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.14-cp311-cp311-macosx_15_0_arm64.whl (5.4 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

epochly-0.6.14-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.14-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.14-cp310-cp310-macosx_15_0_arm64.whl (5.4 MB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

epochly-0.6.14-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.14-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.14-cp39-cp39-macosx_15_0_arm64.whl (5.4 MB view details)

Uploaded CPython 3.9macOS 15.0+ ARM64

File details

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

File metadata

  • Download URL: epochly-0.6.14-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.14-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 37a3d42c19c3801039606b75263c2e931c067c5ae4ebbd82c4d623976bbed052
MD5 7fff17ee4ed62d3a1bd0746ee926a9ad
BLAKE2b-256 16cbe36d82ccbdd9f110fe661b7209ca514821b088387a7ff55545d762708093

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8159003a27e3560a282754aaf940f9901ddfa730cbc864a1a81f16e761b63a56
MD5 698a556489aa334ef64d1a7d9e12e8a2
BLAKE2b-256 d3032c0ee850d6b94f0c9efb493c890202ef793560f3b5b0ae76c35f3ec2cedc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8f034c2abb153d448616645906e9260ed2a97a08117b1f4c1bdde9eed64c4a99
MD5 05d10b2a4a5074065158a2f47bdc5c20
BLAKE2b-256 01ba40237921ac4bb5b918cca1726e3fa7c10c577e588594494e600326a91d5f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 25673568f69b1723cadd0f0cce486eb8e98e96afca24a150687ac9b58f5ec12d
MD5 159eb48b28714883a7fd5510922dd247
BLAKE2b-256 9d9676b59ab39af5acbfeb9cca98d35200dc72b8752c4b66777a9ff81b3b0b02

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: epochly-0.6.14-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.14-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3ec93b246806534371c48e630a67d380af0aaddbf2f5f6d72c331a6f7833c4f5
MD5 a7bc20129a4a21d3a23dd99089eaac22
BLAKE2b-256 d87aa73e6dc4f041d03734e9a63ac2f6841e6579da5db149372b2acf7f232131

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 82d24de7e2f88c090cf91d5611526c66647118ee0e1b89d50d223b2c88cec934
MD5 160301cac580ee0d81c1dbafa071488c
BLAKE2b-256 69452eb4ea41863194daac5d2be5fa4e52bc3b83cc95f4d335f078e09f0659bc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ec9623890198520f77ba3799d68933ef0279b22a7ca6c8e666531e365699b6f1
MD5 509d7915e6c1db9ef79f5097a1d32415
BLAKE2b-256 fc610ba848cffd86647caa713e9d69afa167565b28bcb2353cc6f97927518b54

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 4d759b7a15b4ac13f9a6004102d11181ddffa47ad8485ce005a3934a83131393
MD5 634b21de67f44f143eb79b2f139b615c
BLAKE2b-256 52b23596584f8732f14e7d437798ada1b898b94afb49ac7004fde9df22e71045

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: epochly-0.6.14-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.14-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 772053ad5f351585ee71eab7815c13623025d95ab167b814672e7584b9ab13f9
MD5 dd9ee2283e57cc7478623e30ffe87a33
BLAKE2b-256 da3ed9720ad978bb52de4929cbc9c389b5b9001d902525847f88936d386b1845

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 92010d903b75ee14ccecacdfac14959500d0ecf793ddb6d2faad3cb32588f697
MD5 add82829be1e617c14bf53311d2b3746
BLAKE2b-256 a36f33214cbdd8b18dea254721fb8c9c4d184420797ebc662b21f4a57e583c50

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 eacd8940068f709535a5a316e6d7c3ec33d3141d602e56e93e94f56b5f0f5a29
MD5 4fb3e18c74540cd453d73ee878f00c9b
BLAKE2b-256 aed09a68e86f8b9e9e0348f8695b149bffcbf816502d5f74e733f3096d77662e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 68aad7150f44ed85c4341d92547f2c1735185e19d0c7d34709dc92ffdfb558ef
MD5 469f82b1e8afc5a14cb3e27da6d5d7c8
BLAKE2b-256 4617735f42d9fee526758ea2bdb10941a3ef0f030a20af642bee3bc4040b1441

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: epochly-0.6.14-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.14-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 bc1891e25283bda761c9e3d3af3fd24ef5c07f317552f27c119a80193591b322
MD5 04c2a864603bd86a0ce4cd3b8ac65002
BLAKE2b-256 4d4025fe0b95e5b10dcab79cc260e6d57bad59b3754a511d3d95d11db838db92

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7edb5d1f6bcb2c589078086d51a4ff11924a73df3c009a84973d2f53c0d971d9
MD5 6ec89ef440b721113a74a3962388bab6
BLAKE2b-256 127bd99574ee1ce58040a6caef75dead0c1fdb8cff9898c6522c182f78453bb7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 df202daa8d022926d9a4b7e5a4e7fe20a921a1b552b18b56bb7c115f7b61f528
MD5 c4e6428ce7c18931893326f925d543e7
BLAKE2b-256 dccd98ccb8cd96eb4b6d7756bf69503851e148669157aff0143b12b1a65a5446

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 f64579123b006bb9f023aa784023a3871a2ce1ebf23c271cfc0acf1646fd0994
MD5 d706f38fe3be12d44c47bba258aa483d
BLAKE2b-256 fa06aac5fc507ce3d165394ec7cc24391573faf1c8dd920d8becbffab4c3f994

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: epochly-0.6.14-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.14-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 cd56d939ba132f345f1afd698a3d2e035ddfc410f68048ce539c7cf7865add16
MD5 a1f43fda929ddd7eb2cbf7de18b368e4
BLAKE2b-256 0788467a03a5083f0ea328e2ee848f3c7de247e8d97d62dbdfc686747830d462

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 639092afb82cd9789babd95e9b8bada84754ff9f703745daa4b9428a688e1673
MD5 5905dd77e29c732cda494277ab671e6f
BLAKE2b-256 03b4f0cf17b82b352d546e3bd40377edc0d099ef6d3546637607e052cd9762ef

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 16294a4a66d39ea94b36a97c599bdc394bc7f7617eb6349fd5f36567d7f80171
MD5 e8a0fc38a670172bf89f4a51619420d9
BLAKE2b-256 46c2ea339391f4ea24a338bde0e94b11cb57f5e5ee0bd946692cf306ca84e560

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 eb81ba6d7173bd5a3f240b7ec51fe78d36ab063a88015fa8fee0f2c1b909936e
MD5 54b726b5ee12c17dc4b782542f4cad35
BLAKE2b-256 ad451bd15967bf3f6302ab612fda73b41e23da69da5ba996d1136b4e625f7b00

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: epochly-0.6.14-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.14-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 9e186985bde107e5d4219ae08de9209d53703984bfff6a089baa796b938633f3
MD5 a4caa2747a72d2795079ae64747ebf60
BLAKE2b-256 5492389648687c7102183ab4d074802897a40f4481b88785598063bb3154c34c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cdcbf554b91c501ee686b86174fabbd0c5153f8f0e7aabab8ec1d619da08c453
MD5 acabedf1a11e864b842c7d6293549e5e
BLAKE2b-256 c0ee7f15ce34cfacef2136f66efeb8aa40199aee71e7bca94549eb5bcbeeabb8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 edb2c68e79f4873803cc9347119b6fec1c1a8150f039f0810a3f2885230ffa9d
MD5 6626dd6711869184c1196d581cb3dad5
BLAKE2b-256 11ee7c4b8928f109bd9a5956f96d8f59b42c8a6fa850714e9d28fb7173a6dfc3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epochly-0.6.14-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 f18a5f7f6b307b2541350a9ec8770a8b974f5710859253fda00d815b6f75e05a
MD5 9fc60ccbc6bd4156910eed8207a40007
BLAKE2b-256 1db944644e20a7501bc31e94c72ba695280568da7a22e7ce5c64d13252152565

See more details on using hashes here.

Provenance

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