Cizz22 3 months ago
parent 0f62e36bbd
commit 29f8e4d631

@ -10,11 +10,11 @@ router = APIRouter()
active_simulations = {}
@router.get("", response_model=StandardResponse[None])
@router.get("", response_model=StandardResponse[dict])
async def get_all_simulation(db_session: DbSession):
"""Get all simulation."""
simulation_id = "b2dc96df-4d1f-4616-88ed-73ea9dfd62ae"
simulation_id = "eb8a1214-3d8f-48a9-8fa3-877a69a1fe98"
results = await update_contribution_bulk_mappings(db_session=db_session, simulation_id=simulation_id)

@ -93,19 +93,27 @@ def k_of_n_availability(availabilities: list[float], k: int) -> float:
def get_all_components(structure: Structure) -> set:
"""Extract all component names from a structure."""
def get_all_components(structure) -> set:
"""Extract all component/location_tag strings from a nested structure (series, parallel, k_of_n)."""
components = set()
def extract_components(substructure):
def extract(substructure):
if isinstance(substructure, str):
# Found a component or location tag
components.add(substructure)
elif isinstance(substructure, dict):
for component_list in substructure.values():
for component in component_list:
extract_components(component)
extract_components(structure)
# If it's k_of_n, check "components"
if "k_of_n" in substructure and "components" in substructure["k_of_n"]:
for comp in substructure["k_of_n"]["components"]:
extract(comp)
# If it's series/parallel or other nested structures
for value in substructure.values():
extract(value)
elif isinstance(substructure, list):
for item in substructure:
extract(item)
extract(structure)
return components
@ -206,6 +214,7 @@ def compute_all_importance_measures(structure: Structure, availabilities: Dict[s
log.warning(f"Missing components (assuming 100% availability): {missing_components}")
for comp in missing_components:
normalized_availabilities[comp] = 1.0
# Calculate system baseline availability
@ -222,6 +231,7 @@ def compute_all_importance_measures(structure: Structure, availabilities: Dict[s
criticality = criticality_importance(structure, normalized_availabilities, component)
fv = fussell_vesely_importance(structure, normalized_availabilities, component)
results[component] = {
'birnbaum_importance': birnbaum,
'criticality_importance': criticality,

@ -9,7 +9,7 @@ import httpx
from fastapi import HTTPException, status
import ijson
import requests
from sqlalchemy import delete, select, update, and_
from sqlalchemy import delete, desc, select, update, and_
from sqlalchemy.orm import selectinload
from src.config import AEROS_BASE_URL, AEROS_BASE_URL_OLD, DEFAULT_PROJECT_NAME
@ -40,7 +40,7 @@ active_simulations = {}
async def get_all(common: CommonParameters, status):
query = select(AerosSimulation)
if status:
query = query.where(AerosSimulation.status == "completed")
query = query.where(AerosSimulation.status == "completed").order_by(desc(AerosSimulation.created_at))
results = await search_filter_sort_paginate(model=query, **common)

@ -242,7 +242,10 @@ async def create_calc_result_object(
beta=eq_reliability["beta"] if node_type == "RegularNode" else None,
eta=eq_reliability["eta"] if node_type == "RegularNode" else None,
mttr=eq_reliability["mttr"] if node_type == "RegularNode" else None,
parameters=eq_reliability["parameters"] if node_type == "RegularNode" else None
parameters=eq_reliability["parameters"] if node_type == "RegularNode" else None,
contribution=0,
criticality=0,
contribution_factor=0
)

Loading…
Cancel
Save