import streamlit as st import streamlit.components.v1 as components import numpy as np import json import math import random def get_color_by_state(state): """Get color for task state""" color_map = { 'PENDING': '#4299e1', # Blue 'IN_PROGRESS': '#f6ad55', # Orange 'COMPLETED': '#68d391', # Green 'BLOCKED': '#fc8181' # Red } return color_map.get(state, '#4299e1') def quantum_simulation_visualizer(simulation_data, height=700): """Create an advanced quantum simulation visualization with interactive animations""" if not simulation_data: return None # Extract simulation steps data steps = simulation_data.get('simulation_steps', []) tasks = simulation_data.get('tasks', []) entanglement_matrix = simulation_data.get('entanglement_matrix', []) if not steps or not tasks: return None # Prepare task data task_data = {} for task in tasks: task_id = task.get('id') task_data[task_id] = { 'title': task.get('title', 'Unknown Task'), 'initial_state': task.get('state', 'PENDING'), 'color': get_color_by_state(task.get('state', 'PENDING')), 'priority': task.get('priority', 1) } # Prepare step data vis_steps = [] for i, step in enumerate(steps): step_data = {'step': i, 'tasks': {}} for task_id, task_step_data in step.items(): # Skip if task not in our task list if task_id not in task_data: continue entropy = task_step_data.get('entropy', 0.5) state = task_step_data.get('state', task_data[task_id]['initial_state']) prob_dist = task_step_data.get('probability_distribution', {}) # Default probability distribution if not available if not prob_dist: prob_dist = {'PENDING': 0.25, 'IN_PROGRESS': 0.25, 'COMPLETED': 0.25, 'BLOCKED': 0.25} # Get quantum state visualization data if available quantum_state = task_step_data.get('quantum_state', {}) vis_data = quantum_state.get('visualization_data', [0.25, 0.25, 0.25, 0.25]) # Create step data for this task step_data['tasks'][task_id] = { 'title': task_data[task_id]['title'], 'state': state, 'entropy': entropy, 'color': get_color_by_state(state), 'probability_distribution': prob_dist, 'bloch_vector': vis_data[:3] if len(vis_data) >= 3 else [0, 0, 0] } vis_steps.append(step_data) # Prepare for HTML/JS visualization steps_json = json.dumps(vis_steps) tasks_json = json.dumps(task_data) entanglement_json = json.dumps(entanglement_matrix) # D3.js and Three.js for visualizations d3_src = "https://d3js.org/d3.v7.min.js" three_src = "https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js" # Create the HTML/JS visualization html_content = f"""