feat: constrain normal distribution sigma parameter to a maximum of 999 and add validation test case

main
Cizz22 3 months ago
parent bad7b53337
commit 531cbc307e

@ -364,6 +364,8 @@ def get_distribution_from_db(parameters: dict, is_repairable: bool = True, best_
elif distribution == "Normal":
mu = parameters.get("mu", 0)
sigma = parameters.get("sigma", 1)
if sigma > 1000 or sigma < 0:
sigma = 999
return "Normal", mu, sigma
elif distribution == "Weibull":
# Assuming Weibull parameters are available
@ -374,6 +376,8 @@ def get_distribution_from_db(parameters: dict, is_repairable: bool = True, best_
# Default to Normal
mu = parameters.get("mu", 0)
sigma = parameters.get("sigma", 1)
if sigma > 1000 or sigma < 0:
sigma = 999
return "Normal", mu, sigma
async def update_oh_interval_offset(*, aeros_db_session, overhaul_offset, overhaul_interval, project_name):

@ -225,3 +225,74 @@ async def test_update_equipment_for_simulation_missing_reliability():
assert eq_node["cmDisUnitCode"] == "UHour"
assert eq_node["relDisUnitCode"] == "UHour"
assert eq_node["ohDisUnitCode"] == "UHour"
@pytest.mark.asyncio
async def test_update_equipment_for_simulation_sigma_constraint():
# Mock parameters
db_session = AsyncMock()
aeros_db_session = AsyncMock()
project_name = "TestProject"
simulation_duration = 8760
overhaul_duration = 72
overhaul_interval = 8000
offset = 0
schematic_name = "TestSchematic"
# Mock get_aeros_schematic_by_name
mock_schematic = MagicMock()
mock_schematic.id = 1
# Mock db_session.execute
mock_eq = MagicMock()
mock_eq.location_tag = "EQ_SIGMA"
mock_eq_result = MagicMock()
mock_eq_result.scalars.return_value.all.return_value = [mock_eq]
mock_empty_result = MagicMock()
mock_empty_result.scalars.return_value.all.return_value = []
db_session.execute.side_effect = [
mock_eq_result, # equipments
mock_empty_result, # rbd_group
mock_empty_result # non_repairable
]
# Mock nodes data
mock_nodes_data = [
{"equipmentName": "EQ_SIGMA", "relDisType": "Fixed", "relDisP1": 0}
]
# Mock reliability data with high sigma (> 1000)
mock_reliability_data = {
"EQ_SIGMA": {
"relDisType": "Normal",
"relDisP1": 100, # mu
"relDisP2": 1500, # sigma
"cmDisType": "Fixed",
"cmDisP1": 0,
"cmDisP2": 0
}
}
with patch("src.aeros_equipment.service.get_aeros_schematic_by_name", return_value=mock_schematic), \
patch("src.aeros_equipment.service.get_aeros_equipment_by_location_tag", return_value=mock_nodes_data), \
patch("src.aeros_equipment.service.get_asset_batch", return_value=mock_reliability_data), \
patch("src.aeros_equipment.service.update_oh_interval_offset", return_value=None), \
patch("src.aeros_equipment.service.update_node", return_value=None) as mock_update_node:
# Run
await update_equipment_for_simulation(
db_session=db_session,
aeros_db_session=aeros_db_session,
project_name=project_name,
simulation_duration=simulation_duration,
overhaul_duration=overhaul_duration,
overhaul_interval=overhaul_interval,
offset=offset,
schematic_name=schematic_name
)
# Check if sigma was constrained correctly
called_args = mock_update_node.call_args[1]
eq_node = called_args["equipment_nodes"][0]
assert eq_node["relDisP2"] == 999

Loading…
Cancel
Save