fix: mass extraction NaN in Hydrotech Beam DOE — two bugs
Bug 1 — Journal (solve_simulation.py simple workflow): Expression lookup for p173 fails silently for derived/measurement expressions, so _temp_mass.txt was never written. Added MeasureManager fallback via extract_part_mass() (already used in assembly workflow). Bug 2 — Extractor (extract_mass_from_expression.py): Journal writes 'p173=<value>' format but extractor tried float() on the whole content including 'p173='. Added key=value parsing. Defense in depth — nx_interface.py: Added stdout parsing fallback: if _temp_mass.txt still missing, parse mass from journal output captured via solver.py stdout passthrough. Files changed: - optimization_engine/nx/solve_simulation.py — MeasureManager fallback - optimization_engine/extractors/extract_mass_from_expression.py — key=value parse - optimization_engine/nx/solver.py — include stdout in result dict - projects/hydrotech-beam/studies/01_doe_landscape/nx_interface.py — stdout fallback Tags: hydrotech-beam, mass-extraction
This commit is contained in:
@@ -42,13 +42,19 @@ def extract_mass_from_expression(prt_file: Path, expression_name: str = "p173")
|
||||
# Read mass from file
|
||||
try:
|
||||
with open(mass_file, 'r') as f:
|
||||
mass_kg = float(f.read().strip())
|
||||
content = f.read().strip()
|
||||
|
||||
# Handle key=value format (e.g., "p173=1185.767")
|
||||
if '=' in content:
|
||||
content = content.split('=', 1)[1]
|
||||
|
||||
mass_kg = float(content)
|
||||
|
||||
print(f"[OK] Mass from {expression_name}: {mass_kg:.6f} kg ({mass_kg * 1000:.2f} g)")
|
||||
return mass_kg
|
||||
|
||||
except ValueError as e:
|
||||
raise ValueError(f"Could not parse mass from {mass_file}: {e}")
|
||||
raise ValueError(f"Could not parse mass from {mass_file} (content: {content!r}): {e}")
|
||||
except Exception as e:
|
||||
raise RuntimeError(f"Failed to read mass file: {e}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user