Architecture

benchcore/
├── core/
│   ├── models/
│   └── protocols/
├── engine/
├── comparison/
├── reporting/
├── storage/
└── integrations/
    ├── pytest/
    └── unittest/

Dependency direction

core defines the language of the domain and imports no outer BenchCore layer. It contains models, enums, exceptions, constants, aliases, and Protocols—not execution algorithms, serialization, rendering, filesystem access, or framework imports.

engine owns measurement, calibration, lifecycle, decorators, and statistical calculation. reporting, comparison, and storage compose core types without entering timed regions. Integrations adapt framework lifecycle to the engine.

Import policy

The root benchcore namespace deliberately exports nothing. Users import from the package that owns a capability:

from benchcore.core.models import BenchmarkConfig
from benchcore.engine import Bench
from benchcore.reporting import create_report

Each production class or Protocol has one defining module. Package __init__.py files provide cohesive package-level APIs; parallel root facade modules are not maintained.

Architectural tests enforce these boundaries.