19 mock_config = MagicMock(spec=PintleEngineConfig)
23 max_lox_tank_pressure_psi=700,
24 max_fuel_tank_pressure_psi=850
26 mock_config.lox_tank =
None
27 mock_config.fuel_tank =
None
28 mock_config.chamber_geometry = MagicMock()
29 mock_config.chamber = MagicMock()
30 mock_config.nozzle = MagicMock()
31 mock_config.injector = MagicMock()
32 mock_config.injector.type =
"pintle"
33 mock_config.injector.geometry = MagicMock()
34 mock_config.combustion = MagicMock()
35 mock_config.optimizer = MagicMock()
36 mock_config.optimizer.mode =
"cma"
37 mock_config.optimizer.num_workers = 1
40 mock_runner = MagicMock()
46 with patch(
'engine.optimizer.layers.layer1_static_optimization.copy.deepcopy',
47 side_effect=
lambda o, *a, **k: o), \
48 patch(
'engine.optimizer.layers.layer1_static_optimization.PintleEngineRunner'), \
49 patch(
'engine.optimizer.layers.layer1_static_optimization.cma.CMAEvolutionStrategy')
as mock_cma, \
50 patch(
'engine.optimizer.layers.layer1_static_optimization.minimize')
as mock_minimize, \
51 patch(
'engine.optimizer.layers.layer1_static_optimization.ProcessPoolExecutor'):
54 mock_es = mock_cma.return_value
55 mock_es.stop.return_value =
True
56 mock_es.result.xbest = [0.001, 1.0, 8.0, 0.1, 0.015, 0.0006, 16, 0.003, 550.0, 650.0]
57 mock_es.result.fbest = 0.1
60 mock_lbfgs_res = MagicMock()
61 mock_lbfgs_res.x = np.array([0.001, 1.0, 8.0, 0.1, 0.015, 0.0006, 16, 0.003, 560.0, 660.0])
62 mock_lbfgs_res.fun = 0.05
63 mock_lbfgs_res.success =
True
64 mock_minimize.return_value = mock_lbfgs_res
67 with patch(
'engine.optimizer.layers.layer1_static_optimization.create_layer1_apply_x_to_config')
as mock_create_apply:
68 mock_apply = MagicMock()
69 mock_apply.return_value = (mock_config, 560.0, 660.0)
70 mock_create_apply.return_value = mock_apply
73 mock_update_progress = MagicMock()
74 mock_log_status = MagicMock()
76 requirements = mock_config.design_requirements.model_dump()
79 optimized_config, results = run_layer1_optimization(
80 config_obj=mock_config,
82 requirements=requirements,
83 target_burn_time=10.0,
84 tolerances={
"thrust": 0.1,
"apogee": 0.15},
85 pressure_config={
"mode":
"optimizer_controlled"},
86 update_progress=mock_update_progress,
87 log_status=mock_log_status
91 self.assertIsNotNone(optimized_config.lox_tank)
92 self.assertIsNotNone(optimized_config.fuel_tank)
93 self.assertEqual(optimized_config.lox_tank.initial_pressure_psi, 560.0)
94 self.assertEqual(optimized_config.fuel_tank.initial_pressure_psi, 660.0)
95 print(f
"✓ LOX Pressure: {optimized_config.lox_tank.initial_pressure_psi} psi")
96 print(f
"✓ Fuel Pressure: {optimized_config.fuel_tank.initial_pressure_psi} psi")