"""Seed data for the transport example from the README.""" from __future__ import annotations from physcom.models.entity import Entity, Dependency from physcom.models.domain import Domain, MetricBound # ── Platforms ─────────────────────────────────────────────────── PLATFORMS: list[Entity] = [ Entity( name="Car", dimension="platform", description="Four-wheeled enclosed road vehicle", dependencies=[ Dependency("environment", "ground_surface", "true", None, "requires"), Dependency("environment", "gravity", "true", None, "requires"), Dependency("physical", "mass_kg", "3000", "kg", "range_max"), Dependency("physical", "mass_kg", "800", "kg", "range_min"), Dependency("force", "force_required_watts", "15000", "watts", "range_min"), Dependency("infrastructure", "road_network", "true", None, "requires"), Dependency("environment", "medium", "ground", None, "requires"), ], ), Entity( name="Airplane", dimension="platform", description="Fixed-wing aircraft for atmospheric flight", dependencies=[ Dependency("environment", "atmosphere", "standard", None, "requires"), Dependency("environment", "gravity", "true", None, "requires"), Dependency("physical", "mass_kg", "500", "kg", "range_min"), Dependency("force", "force_required_watts", "100000", "watts", "range_min"), Dependency("infrastructure", "runway", "true", None, "requires"), Dependency("environment", "medium", "air", None, "requires"), ], ), Entity( name="Train", dimension="platform", description="Rail-guided vehicle", dependencies=[ Dependency("environment", "ground_surface", "true", None, "requires"), Dependency("environment", "gravity", "true", None, "requires"), Dependency("physical", "mass_kg", "10000", "kg", "range_min"), Dependency("force", "force_required_watts", "500000", "watts", "range_min"), Dependency("infrastructure", "rail_network", "true", None, "requires"), Dependency("environment", "medium", "ground", None, "requires"), ], ), Entity( name="Bicycle", dimension="platform", description="Two-wheeled human-scale vehicle", dependencies=[ Dependency("environment", "ground_surface", "true", None, "requires"), Dependency("environment", "gravity", "true", None, "requires"), Dependency("physical", "mass_kg", "30", "kg", "range_max"), Dependency("force", "force_required_watts", "75", "watts", "range_min"), Dependency("infrastructure", "road_network", "true", None, "requires"), Dependency("environment", "medium", "ground", None, "requires"), ], ), Entity( name="Walking", dimension="platform", description="Bipedal locomotion", dependencies=[ Dependency("environment", "ground_surface", "true", None, "requires"), Dependency("environment", "gravity", "true", None, "requires"), Dependency("physical", "mass_kg", "150", "kg", "range_max"), Dependency("force", "force_required_watts", "75", "watts", "range_min"), Dependency("infrastructure", "fuel_infrastructure", "none", None, "requires"), Dependency("environment", "medium", "ground", None, "requires"), ], ), Entity( name="Wheelchair", dimension="platform", description="Wheeled chair for seated mobility", dependencies=[ Dependency("environment", "ground_surface", "true", None, "requires"), Dependency("environment", "gravity", "true", None, "requires"), Dependency("physical", "mass_kg", "200", "kg", "range_max"), Dependency("force", "force_required_watts", "50", "watts", "range_min"), Dependency("infrastructure", "road_network", "true", None, "requires"), Dependency("environment", "medium", "ground", None, "requires"), ], ), Entity( name="Scooter", dimension="platform", description="Small two-wheeled standing vehicle", dependencies=[ Dependency("environment", "ground_surface", "true", None, "requires"), Dependency("environment", "gravity", "true", None, "requires"), Dependency("physical", "mass_kg", "50", "kg", "range_max"), Dependency("force", "force_required_watts", "200", "watts", "range_min"), Dependency("infrastructure", "road_network", "true", None, "requires"), Dependency("environment", "medium", "ground", None, "requires"), ], ), Entity( name="Spaceship", dimension="platform", description="Vehicle designed for space travel", dependencies=[ Dependency("environment", "atmosphere", "vacuum_or_thin", None, "requires"), Dependency("physical", "mass_kg", "5000", "kg", "range_min"), Dependency("force", "force_required_watts", "1000000", "watts", "range_min"), Dependency("infrastructure", "launch_facility", "true", None, "requires"), Dependency("environment", "medium", "space", None, "requires"), ], ), Entity( name="Teleporter", dimension="platform", description="Hypothetical matter transmission device", dependencies=[ Dependency("physical", "mass_kg", "0", "kg", "range_min"), Dependency("force", "force_required_watts", "1000000000", "watts", "range_min"), Dependency("infrastructure", "teleport_network", "true", None, "requires"), ], ), ] # ── Power Sources ─────────────────────────────────────────────── POWER_SOURCES: list[Entity] = [ Entity( name="Internal Combustion Engine", dimension="power_source", description="Gas/petrol-powered engine", dependencies=[ Dependency("force", "force_output_watts", "100000", "watts", "provides"), Dependency("infrastructure", "fuel_infrastructure", "gas_station", None, "requires"), Dependency("environment", "atmosphere", "standard", None, "requires"), Dependency("physical", "mass_kg", "50", "kg", "range_min"), Dependency("force", "thrust_profile", "high_continuous", None, "provides"), ], ), Entity( name="Lithium Ion Battery", dimension="power_source", description="Rechargeable electric battery pack", dependencies=[ Dependency("force", "force_output_watts", "50000", "watts", "provides"), Dependency("infrastructure", "fuel_infrastructure", "charging_station", None, "requires"), Dependency("physical", "mass_kg", "10", "kg", "range_min"), Dependency("force", "thrust_profile", "moderate_continuous", None, "provides"), ], ), Entity( name="Hydrogen Combustion Engine", dimension="power_source", description="Hydrogen fuel cell or combustion engine", dependencies=[ Dependency("force", "force_output_watts", "80000", "watts", "provides"), Dependency("infrastructure", "fuel_infrastructure", "hydrogen_station", None, "requires"), Dependency("physical", "mass_kg", "30", "kg", "range_min"), Dependency("force", "thrust_profile", "high_continuous", None, "provides"), ], ), Entity( name="Human Pedalling", dimension="power_source", description="Human-powered via pedalling mechanism", dependencies=[ Dependency("force", "force_output_watts", "75", "watts", "provides"), Dependency("infrastructure", "fuel_infrastructure", "none", None, "requires"), Dependency("physical", "mass_kg", "0", "kg", "range_min"), Dependency("force", "thrust_profile", "low_continuous", None, "provides"), ], ), Entity( name="Modular Nuclear Reactor", dimension="power_source", description="Small modular nuclear fission reactor", dependencies=[ Dependency("force", "force_output_watts", "50000000", "watts", "provides"), Dependency("infrastructure", "fuel_infrastructure", "nuclear_fuel", None, "requires"), Dependency("physical", "mass_kg", "2000", "kg", "range_min"), Dependency("force", "thrust_profile", "extreme_continuous", None, "provides"), Dependency("material", "radiation_shielding", "true", None, "requires"), ], ), Entity( name="Coal Steam Engine", dimension="power_source", description="Coal-fired boiler with steam locomotion", dependencies=[ Dependency("force", "force_output_watts", "200000", "watts", "provides"), Dependency("infrastructure", "fuel_infrastructure", "coal_supply", None, "requires"), Dependency("environment", "atmosphere", "standard", None, "requires"), Dependency("physical", "mass_kg", "500", "kg", "range_min"), Dependency("force", "thrust_profile", "high_continuous", None, "provides"), ], ), Entity( name="Solar Sail", dimension="power_source", description="Propulsion via radiation pressure from a star", dependencies=[ Dependency("environment", "atmosphere", "vacuum_or_thin", None, "requires"), Dependency("environment", "star_proximity", "true", None, "requires"), Dependency("physical", "surface_area_m2", "100", "m^2", "range_min"), Dependency("force", "force_output_watts", "1", "watts", "provides"), Dependency("force", "thrust_profile", "continuous_low", None, "provides"), Dependency("environment", "medium", "space", None, "requires"), ], ), Entity( name="Cannonfire Recoil", dimension="power_source", description="Propulsion via sequential cannon blasts", dependencies=[ Dependency("force", "force_output_watts", "500000", "watts", "provides"), Dependency("infrastructure", "fuel_infrastructure", "ammunition", None, "requires"), Dependency("physical", "mass_kg", "100", "kg", "range_min"), Dependency("force", "thrust_profile", "high_burst", None, "provides"), ], ), Entity( name="Pushed by a Friend", dimension="power_source", description="External human pushing the vehicle", dependencies=[ Dependency("force", "force_output_watts", "50", "watts", "provides"), Dependency("infrastructure", "fuel_infrastructure", "none", None, "requires"), Dependency("physical", "mass_kg", "0", "kg", "range_min"), Dependency("environment", "ground_surface", "true", None, "requires"), Dependency("force", "thrust_profile", "low_continuous", None, "provides"), ], ), ] # ── Domains ───────────────────────────────────────────────────── URBAN_COMMUTING = Domain( name="urban_commuting", description="Daily travel within a city, 1-50km range", metric_bounds=[ MetricBound("speed", weight=0.25, norm_min=5, norm_max=120), MetricBound("cost_efficiency", weight=0.25, norm_min=0.01, norm_max=2.0), MetricBound("safety", weight=0.25, norm_min=0.0, norm_max=1.0), MetricBound("availability", weight=0.15, norm_min=0.0, norm_max=1.0), MetricBound("range_fuel", weight=0.10, norm_min=5, norm_max=500), ], ) INTERPLANETARY = Domain( name="interplanetary_travel", description="Travel between planets within a solar system", metric_bounds=[ MetricBound("speed", weight=0.30, norm_min=1000, norm_max=300000), MetricBound("range_fuel", weight=0.30, norm_min=1e6, norm_max=1e10), MetricBound("safety", weight=0.20, norm_min=0.0, norm_max=1.0), MetricBound("cost_efficiency", weight=0.10, norm_min=1e3, norm_max=1e9), MetricBound("range_degradation", weight=0.10, norm_min=100, norm_max=36500), ], ) def load_transport_seed(repo) -> dict: """Load all transport seed data into the repository. Returns counts.""" from physcom.db.repository import Repository repo: Repository counts = {"platforms": 0, "power_sources": 0, "domains": 0} for entity in PLATFORMS: repo.add_entity(entity) counts["platforms"] += 1 for entity in POWER_SOURCES: repo.add_entity(entity) counts["power_sources"] += 1 repo.add_domain(URBAN_COMMUTING) repo.add_domain(INTERPLANETARY) counts["domains"] = 2 return counts