babylon.engine.dialectics.rent

RentDialectic — Ground Rent extraction (V3 Ch37-47).

Three-category decomposition: agricultural, resource, urban.

See also

babylon.economics.rent: Ground rent extraction calculations.

Classes

RentDialectic(**data)

Ground Rent extraction — Absolute ↔ Differential.

RentPole(**data)

Pole A for the Rent dialectic — three-category decomposition.

class babylon.engine.dialectics.rent.RentDialectic(**data)[source]

Bases: Dialectic[RentPole, EmptyPole]

Ground Rent extraction — Absolute ↔ Differential.

Pole A holds the three-category rent decomposition (agricultural, resource, urban) from economics.rent.types.

Weight semantics:

< 0: Rent is a minor claims category (small rentier share). > 0: Rent dominates surplus distribution (rentier economy).

Motion law:

Reads upstream total_surplus to compute rentier share. Weight = 2 * (rent_share) - 1, clamped to [-1, 1].

Parameters:
type_tag: str
step(inputs, world)[source]

Motion law T for rent dynamics.

Parameters:
  • inputs (TickInputs) – Upstream outputs. Looks for total_surplus.

  • world (WorldView) – Read-only world context.

Return type:

RentDialectic

Returns:

New RentDialectic with updated weight.

observe()[source]

Project rent extraction state.

Return type:

dict[str, Any]

Returns:

Observation dict with rent categories and total.

invariants()[source]

Verify rent components are non-negative.

Return type:

list[str]

Returns:

List of violation descriptions.

model_config: ClassVar[ConfigDict] = {'frozen': True}

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

id: UUID
pole_a: A
pole_b: B
weight: float
parent_id: UUID | None
tick_created: int
tick_updated: int
class babylon.engine.dialectics.rent.RentPole(**data)[source]

Bases: BaseModel

Pole A for the Rent dialectic — three-category decomposition.

Reimplements the three-category rent aggregation from economics.rent.types.RentExtraction. The formula total_rent = agri + resource + urban is identical. This is intentional: the dialectic receives pre-aggregated county-level data and does not perform data-source lookups.

See also

babylon.economics.rent.types.RentExtraction

Parameters:
agricultural_rent

Rent from farming / rural land.

resource_rent

Rent from extractive industries.

urban_rent

Rent from urban / building-site monopoly.

model_config: ClassVar[ConfigDict] = {'frozen': True}

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

agricultural_rent: float
resource_rent: float
urban_rent: float
property total_rent: float

Total ground rent across all categories.