babylon.models.entities.precarity_state

Precarity state model for social class economic conditions.

This module defines the PrecarityState model which tracks the economic precarity of working-class populations in the Babylon simulation.

Epoch 1 (The Ledger) - Political Economy of Liquidity specification.

The PrecarityState model captures the material conditions that determine whether a class can survive through acquiescence or must turn to revolution:

  • nominal_wage: Raw wage in currency units

  • ppp_factor: Purchasing power parity adjustment

  • inflation_index: Price level multiplier

  • subsistence_threshold: Minimum for survival

  • organization: Collective capacity to resist

Key computed fields:

  • real_wage: (nominal_wage * ppp_factor) / inflation_index

  • precarity_index: 1 - sigmoid(real_wage - subsistence_threshold)

  • proletarianization_risk: precarity_index * (1 - organization)

The sigmoid function maps the wage-subsistence gap to a probability:

  • When real_wage >> subsistence_threshold, precarity_index -> 0 (secure)

  • When real_wage << subsistence_threshold, precarity_index -> 1 (precarious)

  • When real_wage == subsistence_threshold, precarity_index -> 0.5 (marginal)

Classes

PrecarityState(**data)

Economic precarity metrics for a social class.

class babylon.models.entities.precarity_state.PrecarityState(**data)[source]

Bases: BaseModel

Economic precarity metrics for a social class.

Tracks nominal wages, PPP, inflation and computes real wages and precarity. Part of the Political Economy of Liquidity (Epoch 1: The Ledger).

Parameters:
nominal_wage

Raw wage in currency units. Defaults to 10.0.

ppp_factor

Purchasing power parity adjustment [0, 1]. Defaults to 1.0.

inflation_index

Price level multiplier (>= 1.0). Defaults to 1.0.

subsistence_threshold

Minimum for survival. Defaults to 5.0.

organization

Collective capacity to resist [0, 1]. Defaults to 0.5.

Example

>>> precarity = PrecarityState(nominal_wage=3.0, subsistence_threshold=5.0)
>>> precarity.real_wage
3.0
>>> precarity.precarity_index > 0.5  # Below subsistence = precarious
True
model_config: ClassVar[ConfigDict] = {'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

nominal_wage: Annotated[float]
ppp_factor: Annotated[float]
inflation_index: float
subsistence_threshold: Annotated[float]
organization: Annotated[float]
property real_wage: Annotated[float, FieldInfo(annotation=NoneType, required=True, description='Non-negative economic value (wealth, wages, rent, GDP)', metadata=[Ge(ge=0.0)])]

Calculate real wage adjusted for PPP and inflation.

Returns:

(nominal_wage * ppp_factor) / inflation_index

property precarity_index: Annotated[float, FieldInfo(annotation=NoneType, required=True, description='Value in range [0.0, 1.0] representing likelihood', metadata=[Ge(ge=0.0), Le(le=1.0)])]

Calculate precarity based on wage-subsistence gap.

Uses sigmoid function to map gap to probability: - precarity = 1 - sigmoid(real_wage - subsistence_threshold) - At subsistence threshold: precarity = 0.5 - Above subsistence: precarity < 0.5 (secure) - Below subsistence: precarity > 0.5 (precarious)

Returns:

Probability [0, 1] where 1 is maximum precarity.

property proletarianization_risk: Annotated[float, FieldInfo(annotation=NoneType, required=True, description='Value in range [0.0, 1.0] representing likelihood', metadata=[Ge(ge=0.0), Le(le=1.0)])]

Calculate risk of class falling into precarious proletariat.

Risk is modulated by organization: organized classes can resist proletarianization even under precarious conditions.

  • proletarianization_risk = precarity_index * (1 - organization)

  • High organization provides protection (multiplier near 0)

  • Low organization means full exposure to precarity

Returns:

Probability [0, 1] where 1 is maximum risk.