import json from typing import Optional, Dict, Any, List, Tuple def create_instruction_description(instruction: Dict[str, Any]) -> str: parts = [] movement = instruction.get('cameraMovement') shot_type = instruction.get('initialShotType') frames = instruction.get('frameCount') subject_idx = instruction.get('subjectIndex') if movement and shot_type: parts.append(f"{movement} {shot_type}") elif movement: parts.append(f"{movement} shot") elif shot_type: parts.append(f"Static {shot_type}") if subject_idx is not None: parts.append(f"of subject {subject_idx}") if frames is not None: parts.append(f"lasting {frames} frames") if not parts: return "No camera instruction details available" return " ".join(parts) def load_simulation_data(file) -> Tuple[Optional[List[Dict[str, Any]]], Optional[List[str]]]: if file is None: return None, None try: json_data = json.load(open(file.name)) simulations = json_data['simulations'] descriptions = [] for i, sim in enumerate(simulations): header = f"Simulation {i + 1}" instruction_texts = [] for j, instruction in enumerate(sim['instructions']): inst_desc = create_instruction_description(instruction) instruction_texts.append(f" {j + 1}. {inst_desc}") full_description = f"{header}\n" + "\n".join(instruction_texts) subject_count = len(sim['subjects']) full_description = f"{full_description}\n ({subject_count} subjects)" descriptions.append(full_description) return simulations, descriptions except Exception as e: print(f"Error loading simulation data: {str(e)}") return None, None