Skip to content

Core — Physics Layer

Package: hours_eoh/core/

The core/ package contains measurement-driven mechanics — the stable API. It imports only from data.py, params.py, and other core/ modules. Nothing imports from core/ except the layers above it (land/, scenarios/, research/, utils/).


Module Overview

Module What it models
trajectory.py Canonical arc at each ε; ε derivation from physical state
eoh_generation.py Four EOH domain functions + total_eoh() — principled measurement from physical state
eoh_fulfillment.md EOH → TEH pipeline; human/machine split; registration
multipliers.py Condition II: skill-tier multipliers, population-weighted band
fiscal.py Levies, allocations, sufficiency guarantee, trust mechanics
prices.py TEH prices, basket cost, purchasing power arc
capital.py Asset lifecycle, write-down, birth/death events
population.py Age distribution, aging, demographic events (on same page as capital)
eoh_dynamics.py Compounding, regenerative labor, investment ranking
workforce.py Competency reserve, minimum hours allocation
civilization.py Endogenous ε from capital stock (on same page as workforce)
conditions.py Structural conditions I–IV enforcement
dashboard.py EOH health, fiscal health, system dashboard (on same page as conditions)
simulation.py Period simulation engine

The EOH → TEH Pipeline

from hours_eoh.core.eoh_generation import total_eoh
from hours_eoh.core.eoh_fulfillment import (
    eoh_to_teh_pipeline, human_eoh_per_domain, registered_eoh, teh_created,
)
from hours_eoh.core.registration import (
    personal_eoh_registration_share, total_registration_share,
)

epsilon = 0.40

# Step 1: physical state → total EOH (canonical arc here; pass real state for a real collective)
eoh = total_eoh(epsilon=epsilon)

# Step 2: EOH → human/machine split
human = human_eoh_per_domain(eoh, epsilon)

# Step 3: registration — different curves per domain
# Personal: personal_eoh_registration_share(epsilon)  — near-zero at ε=0
# Other:    total_registration_share(epsilon)          — labor composite sigmoid
reg = (registered_eoh(human["personal"], personal_eoh_registration_share(epsilon))
       + registered_eoh(human["infrastructure"] + human["ecological"] + human["knowledge"],
                        total_registration_share(epsilon)))

# Step 4: TEH creation
teh = teh_created(reg)

# Or use the full pipeline in one call — which is what to use, because it also
# handles the labour constraint, deferral and the per-domain registration detail:
result = eoh_to_teh_pipeline(epsilon)

Key design invariant: EOH generation takes physical state. EOH fulfillment takes ε. These two concerns must never be conflated. See Design Principles.