I love how stupid this project is
si units and redefining speed metric as thrust/weight ratio
This commit is contained in:
@@ -41,7 +41,6 @@ class ConstraintResolver:
|
||||
self._check_requires_vs_excludes(all_deps, result)
|
||||
self._check_mutual_exclusion(all_deps, result)
|
||||
self._check_range_incompatibility(all_deps, result)
|
||||
self._check_power_density(combination, result)
|
||||
self._check_energy_density(combination, result)
|
||||
self._check_unmet_requirements(all_deps, result)
|
||||
|
||||
@@ -125,35 +124,6 @@ class ConstraintResolver:
|
||||
f"but {max_name} limits {key} <= {max_val}"
|
||||
)
|
||||
|
||||
def _check_power_density(
|
||||
self, combination: Combination, result: ConstraintResult
|
||||
) -> None:
|
||||
"""Rule 4: If power source W/kg << platform required W/kg → warn/block."""
|
||||
density_provided: list[tuple[str, float]] = []
|
||||
density_required: list[tuple[str, float]] = []
|
||||
|
||||
for entity in combination.entities:
|
||||
for dep in entity.dependencies:
|
||||
if dep.key == "power_density_w_kg" and dep.constraint_type == "provides":
|
||||
density_provided.append((entity.name, float(dep.value)))
|
||||
elif dep.key == "power_density_required_w_kg" and dep.constraint_type == "range_min":
|
||||
density_required.append((entity.name, float(dep.value)))
|
||||
|
||||
for req_name, req_density in density_required:
|
||||
for prov_name, prov_density in density_provided:
|
||||
if prov_density < req_density * 0.01:
|
||||
result.violations.append(
|
||||
f"{prov_name} provides {prov_density} W/kg but "
|
||||
f"{req_name} requires {req_density} W/kg "
|
||||
f"(power density deficit > 100x)"
|
||||
)
|
||||
elif prov_density < req_density:
|
||||
result.warnings.append(
|
||||
f"{prov_name} provides {prov_density} W/kg but "
|
||||
f"{req_name} requires {req_density} W/kg "
|
||||
f"(under-powered)"
|
||||
)
|
||||
|
||||
def _check_energy_density(
|
||||
self, combination: Combination, result: ConstraintResult
|
||||
) -> None:
|
||||
@@ -166,9 +136,9 @@ class ConstraintResolver:
|
||||
|
||||
for entity in combination.entities:
|
||||
for dep in entity.dependencies:
|
||||
if dep.key == "energy_density_wh_kg" and dep.constraint_type == "provides":
|
||||
if dep.key == "energy_density" and dep.constraint_type == "provides":
|
||||
density_provided.append((entity.name, float(dep.value)))
|
||||
elif dep.key == "energy_density_wh_kg" and dep.constraint_type == "range_min":
|
||||
elif dep.key == "energy_density" and dep.constraint_type == "range_min":
|
||||
density_required.append((entity.name, float(dep.value)))
|
||||
|
||||
for req_name, req_density in density_required:
|
||||
@@ -177,14 +147,14 @@ class ConstraintResolver:
|
||||
for prov_name, prov_density in density_provided:
|
||||
if prov_density < req_density * 0.25:
|
||||
result.violations.append(
|
||||
f"{prov_name} provides {prov_density:.0f} Wh/kg but "
|
||||
f"{req_name} requires {req_density:.0f} Wh/kg "
|
||||
f"{prov_name} provides {prov_density:.0f} J/kg but "
|
||||
f"{req_name} requires {req_density:.0f} J/kg "
|
||||
f"(energy density deficit > 4x)"
|
||||
)
|
||||
elif prov_density < req_density:
|
||||
result.warnings.append(
|
||||
f"{prov_name} provides {prov_density:.0f} Wh/kg but "
|
||||
f"{req_name} requires {req_density:.0f} Wh/kg "
|
||||
f"{prov_name} provides {prov_density:.0f} J/kg but "
|
||||
f"{req_name} requires {req_density:.0f} J/kg "
|
||||
f"(under-density)"
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user