babylon.engine.services
Service container for dependency injection.
This module provides a ServiceContainer dataclass that aggregates all dependencies needed by the simulation engine, enabling clean injection for testing and configuration.
Sprint 3: Central Committee (Dependency Injection) Paradox Refactor: Added GameDefines for centralized coefficients. Spec 008: Added metrics field for dependency-injected telemetry.
Classes
|
Loud observability for economics-calculator fallbacks (C.8 / spec 2.R). |
|
Container for all simulation services. |
- class babylon.engine.services.EconomicsFallbackTally(national_params_observations=0, melt_calculator_wired=False, basket_calculator_wired=False, gamma_calculator_wired=False, melt_unavailable=0, gamma_basket_calculator_none=0, gamma_iii_calculator_none=0, gamma_iii_returned_none=0)[source]
Bases:
objectLoud observability for economics-calculator fallbacks (C.8 / spec 2.R).
TickDynamicsSystemsubstitutes a hardcoded coefficient whenever an economics calculator is unwired (None) or returns no data. Historically these substitutions were silent — a fully-unwired run reported gamma_III = 0.33 forever with no trace of why. This tally records each fallback and the wired-vs-None status of every calculator so the run manifest can attest whether gamma was genuinely computed or merely defaulted.Pure instrumentation: recording a fallback NEVER changes a computed value. The caller selects the fallback constant first, then calls
record_*.A fresh tally is created per
ServiceContainer(default_factory), so counters are scoped to a single run and safe across processes/tests.- Parameters:
- national_params_observations: int = 0
How many times
_compute_national_paramsran (year boundaries seen).
- melt_calculator_wired: bool = False
Wired-vs-None status of each calculator (snapshot; last observation wins).
Per-fallback counters.
- observe_wiring(*, melt, basket, gamma)[source]
Record calculator wired-vs-None status for this observation.
Count a MELT-unavailable early return (calculator wired but no data).
- Return type:
- record_gamma_basket_calculator_none()[source]
Count a gamma_basket fallback taken because the calculator is
None.- Return type:
- record_gamma_iii_calculator_none()[source]
Count a gamma_III fallback taken because the calculator is
None.- Return type:
- record_gamma_iii_returned_none()[source]
Count a gamma_III fallback taken because a wired calculator returned no data.
- Return type:
- __init__(national_params_observations=0, melt_calculator_wired=False, basket_calculator_wired=False, gamma_calculator_wired=False, melt_unavailable=0, gamma_basket_calculator_none=0, gamma_iii_calculator_none=0, gamma_iii_returned_none=0)
- class babylon.engine.services.ServiceContainer(config, database, event_bus, formulas, defines, metrics, field_registry=None, opposition_registry=None, reserve_army_data_source=None, dispossession_data_source=None, productivity_data_source=None, melt_calculator=None, basket_calculator=None, gamma_calculator=None, capital_calculator=None, throughput_calculator=None, transition_engine=None, tensor_registry=None, economics_fallbacks=<factory>, community_hypergraph=None, turnover_profile_source=None, inventory_data_source=None, depreciation_data_source=None, hex_grid=None, persistence=None, tracer=None, boundary_register=None, auditor=None, distribution_calculator=None, interest_calculator=None, credit_cycle_detector=None, fictitious_capital_calculator=None, rent_calculator=None, housing_calculator=None, counter_tendency_calculator=None, value_basis_converter=None, financial_crisis_assessor=None, z1_source=None, housing_data_source=None, periphery_labor_source=None, final_demand_source=None, industry_county_allocator=None, production_chain_calculator=None, bea_industries=None)[source]
Bases:
objectContainer for all simulation services.
Aggregates the six core services needed by the simulation, plus optional economics calculator services for tick dynamics (Feature 017):
- Core:
config: Immutable simulation parameters
database: Database connection for persistence
event_bus: Publish/subscribe communication
formulas: Registry of mathematical formulas
defines: Centralized game coefficients (Paradox Refactor)
metrics: Telemetry collector for observability (Spec 008)
- Field Topology (Feature 002, optional for backward compatibility):
field_registry: Contradiction field computation registry
- Economics (Feature 017, all optional for backward compatibility):
melt_calculator: National MELT computation (Feature 013)
basket_calculator: Basket visibility computation (Feature 013)
gamma_calculator: Reproductive visibility computation (Feature 015)
capital_calculator: Capital stock computation (Feature 012)
throughput_calculator: Throughput position computation (Feature 014)
transition_engine: Class transition engine (Feature 016)
tensor_registry: Cached economic tensor data (Feature 011)
Example
>>> container = ServiceContainer.create() >>> rent = container.formulas.get("imperial_rent") >>> container.event_bus.publish(Event(...)) >>> with container.database.session() as session: ... # do database work >>> container.database.close() >>> default_org = container.defines.DEFAULT_ORGANIZATION >>> container.metrics.increment("ticks_processed")
- Parameters:
config (SimulationConfig)
database (DatabaseProtocol)
event_bus (EventBus)
formulas (FormulaRegistry)
defines (GameDefines)
metrics (MetricsCollectorProtocol)
field_registry (Any)
opposition_registry (Any)
reserve_army_data_source (Any)
dispossession_data_source (Any)
productivity_data_source (Any)
melt_calculator (Any)
basket_calculator (Any)
gamma_calculator (Any)
capital_calculator (Any)
throughput_calculator (Any)
transition_engine (Any)
tensor_registry (Any)
economics_fallbacks (EconomicsFallbackTally)
community_hypergraph (Any)
turnover_profile_source (Any)
inventory_data_source (Any)
depreciation_data_source (Any)
hex_grid (Any)
persistence (Any)
tracer (Any)
boundary_register (Any)
auditor (Any)
distribution_calculator (Any)
interest_calculator (Any)
credit_cycle_detector (Any)
fictitious_capital_calculator (Any)
rent_calculator (Any)
housing_calculator (Any)
counter_tendency_calculator (Any)
value_basis_converter (Any)
financial_crisis_assessor (Any)
z1_source (Any)
housing_data_source (Any)
periphery_labor_source (Any)
final_demand_source (Any)
industry_county_allocator (Any)
production_chain_calculator (Any)
- config: SimulationConfig
- database: DatabaseProtocol
- formulas: FormulaRegistry
- defines: GameDefines
- metrics: MetricsCollectorProtocol
- economics_fallbacks: EconomicsFallbackTally
- bea_industries: list[str] | None = None
The configured BEA Summary industry list — defines the alignment baseline for FR-006 (industry-list mismatch fail-fast). Set at scenario-load time; None until then (the Spec 057 pipeline falls back to graceful-degradation stub behavior when None per data-model.md ServiceContainer notes).
- __init__(config, database, event_bus, formulas, defines, metrics, field_registry=None, opposition_registry=None, reserve_army_data_source=None, dispossession_data_source=None, productivity_data_source=None, melt_calculator=None, basket_calculator=None, gamma_calculator=None, capital_calculator=None, throughput_calculator=None, transition_engine=None, tensor_registry=None, economics_fallbacks=<factory>, community_hypergraph=None, turnover_profile_source=None, inventory_data_source=None, depreciation_data_source=None, hex_grid=None, persistence=None, tracer=None, boundary_register=None, auditor=None, distribution_calculator=None, interest_calculator=None, credit_cycle_detector=None, fictitious_capital_calculator=None, rent_calculator=None, housing_calculator=None, counter_tendency_calculator=None, value_basis_converter=None, financial_crisis_assessor=None, z1_source=None, housing_data_source=None, periphery_labor_source=None, final_demand_source=None, industry_county_allocator=None, production_chain_calculator=None, bea_industries=None)
- Parameters:
config (SimulationConfig)
database (DatabaseProtocol)
event_bus (EventBus)
formulas (FormulaRegistry)
defines (GameDefines)
metrics (MetricsCollectorProtocol)
field_registry (Any)
opposition_registry (Any)
reserve_army_data_source (Any)
dispossession_data_source (Any)
productivity_data_source (Any)
melt_calculator (Any)
basket_calculator (Any)
gamma_calculator (Any)
capital_calculator (Any)
throughput_calculator (Any)
transition_engine (Any)
tensor_registry (Any)
economics_fallbacks (EconomicsFallbackTally)
community_hypergraph (Any)
turnover_profile_source (Any)
inventory_data_source (Any)
depreciation_data_source (Any)
hex_grid (Any)
persistence (Any)
tracer (Any)
boundary_register (Any)
auditor (Any)
distribution_calculator (Any)
interest_calculator (Any)
credit_cycle_detector (Any)
fictitious_capital_calculator (Any)
rent_calculator (Any)
housing_calculator (Any)
counter_tendency_calculator (Any)
value_basis_converter (Any)
financial_crisis_assessor (Any)
z1_source (Any)
housing_data_source (Any)
periphery_labor_source (Any)
final_demand_source (Any)
industry_county_allocator (Any)
production_chain_calculator (Any)
- Return type:
None
- classmethod create(config=None, defines=None, metrics=None, *, hex_grid=None, persistence=None, tracer=None, reserve_army_data_source=None, dispossession_data_source=None, productivity_data_source=None, field_registry=None, opposition_registry=None, melt_calculator=None, basket_calculator=None, gamma_calculator=None, capital_calculator=None, throughput_calculator=None, transition_engine=None, tensor_registry=None, community_hypergraph=None, turnover_profile_source=None, inventory_data_source=None, depreciation_data_source=None, distribution_calculator=None, interest_calculator=None, credit_cycle_detector=None, fictitious_capital_calculator=None, rent_calculator=None, housing_calculator=None, counter_tendency_calculator=None, value_basis_converter=None, financial_crisis_assessor=None, z1_source=None, housing_data_source=None, periphery_labor_source=None, final_demand_source=None, industry_county_allocator=None, production_chain_calculator=None, bea_industries=None)[source]
Factory method to create a fully-initialized container.
Creates all services with sensible defaults. Uses in-memory SQLite for database isolation in tests.
- Parameters:
config (
SimulationConfig|None) – Optional custom config. If None, uses default SimulationConfig.defines (
GameDefines|None) – Optional custom defines. If None, uses default GameDefines.metrics (
MetricsCollectorProtocol|None) – Optional custom metrics collector. If None, creates a new MetricsCollector instance. Pass a mock for testing.field_registry (
Any) – Optional FieldRegistry for contradiction fields (Feature 002).melt_calculator (
Any) – Optional MELTCalculator (Feature 013).basket_calculator (
Any) – Optional BasketVisibilityCalculator (Feature 013).gamma_calculator (
Any) – Optional GammaIIICalculator (Feature 015).capital_calculator (
Any) – Optional CapitalStockCalculator (Feature 012).throughput_calculator (
Any) – Optional ThroughputCalculator (Feature 014).transition_engine (
Any) – Optional ClassTransitionEngine (Feature 016).tensor_registry (
Any) – Optional TensorRegistry for cached tensor data (Feature 011).community_hypergraph (
Any) – Optional XGI Hypergraph for community membership (Feature 022).hex_grid (Any)
persistence (Any)
tracer (Any)
reserve_army_data_source (Any)
dispossession_data_source (Any)
productivity_data_source (Any)
opposition_registry (Any)
turnover_profile_source (Any)
inventory_data_source (Any)
depreciation_data_source (Any)
distribution_calculator (Any)
interest_calculator (Any)
credit_cycle_detector (Any)
fictitious_capital_calculator (Any)
rent_calculator (Any)
housing_calculator (Any)
counter_tendency_calculator (Any)
value_basis_converter (Any)
financial_crisis_assessor (Any)
z1_source (Any)
housing_data_source (Any)
periphery_labor_source (Any)
final_demand_source (Any)
industry_county_allocator (Any)
production_chain_calculator (Any)
- Return type:
- Returns:
ServiceContainer with all services initialized