Skip to content

EOH Generation

Module: hours_eoh/core/eoh_generation.py

Measurement-driven — these functions take the actual physical state of the civilization and return entropy obligations, derived from physical inputs via calibrated constants. ε is not a primary input here; these functions measure what entropy demands, not who fulfills it.


Four Domain Functions

personal_eoh(population, age_distribution, …)float

Entropy obligation from human bodies — biological needs across the population.

Inputs: population, age distribution, and the personal standard (survival, the operating base, or sufficiency)

Arc: At ε = 0 this domain consumes nearly all labor. The physical obligation never disappears — only who (or what) fulfills it changes.


infrastructure_eoh(capital_age_ratio, …)float

Entropy obligation from built systems — maintenance burden of the capital stock.

Inputs: capital stock in TEH — the stock you hold now, used exactly as supplied — and capital age ratio (older stock generates more EOH)

Arc: Grows as the capital stock expands. Drives increasing stewardship obligation at high ε.


ecological_eoh(ecosystem_health, monitoring_capability, …)float

Entropy obligation from natural systems — what ecosystem degradation demands.

Inputs: ecosystem health index, monitoring capability, the stewarded area, and the ecological STOCKS — deferred ecological EOH, the thermal obligation and the restoration obligation

Arc: Independent of automation level. Since the Phase 4e/4f partition the domain carries stocks only: the recurring cost of land at reference condition, and its response to degradation, belong to the Ground Use Fee, where they scale with land held. With no stock supplied the domain is zero — which is an assignment, not an absence.


knowledge_eoh(knowledge_base_size, …)float

Entropy obligation from information systems — skill atrophy, institutional memory, standard drift.

Arc: Grows monotonically with ε, from almost nothing at subsistence to roughly a third of the obligation at ε = 0.99. It does not become dominant: personal EOH remains the largest domain across the whole arc (eoh arc --domain-shares).


total_eoh(…)dict[str, float]

Aggregate entropy obligation across all four domains.

from hours_eoh.core.eoh_generation import total_eoh

# Canonical arc at ε = 0.40 (the physical state is filled from the reference arc)
eoh = total_eoh(epsilon=0.40)

# Or real physical state, which is the point of the generation layer
eoh = total_eoh(population=5_000_000, capital_stock=8.0e9, capital_age_ratio=0.45,
                ecosystem_health=0.68, monitoring_capability=0.55)
# Returns: {personal, infrastructure, ecological, knowledge, total, ...}
print(eoh["total"])

Supporting Functions

Function Returns Description
ecological_eoh_breakdown(ecosystem_health, …) dict The terms that sum to ecological_eoh() — baseline, spike, visible deferred and thermal
domain_labor_requirements(eoh_by_domain, epsilon, …) dict Headcount needed per domain: the human-labor share divided by annual hours per worker
eoh_to_essential_domains(eoh_by_domain, …) dict The four EOH domains distributed across the seven essential workforce domains, for Condition IV
epsilon_delta_sensitivity(base_epsilon, delta_epsilon, …) dict Sensitivity of EOH totals to Δε at a given point

Design invariant

EOH generation functions must not use ε to proxy physical assumptions. If ε is accepted as an optional backward-compat parameter, it must call canonical_physical_state(epsilon) to derive physical state — it must never use ε directly inside EOH calculation logic. See Extending the Library.