import streamlit as st import streamlit.components.v1 as components import json import random import math import numpy as np def generate_network_data(tasks): """Generate network data from tasks for D3 visualization""" nodes = [] links = [] used_ids = set() for task in tasks: task_id = task.get('id') if task_id in used_ids: continue used_ids.add(task_id) # Extract relevant data task_title = task.get('title', 'Unknown Task') task_state = task.get('state', 'PENDING') task_entropy = task.get('entropy', 0.5) task_priority = task.get('priority', 1) task_assignee = task.get('assignee', None) # Add node nodes.append({ 'id': task_id, 'title': task_title, 'state': task_state, 'entropy': task_entropy, 'priority': task_priority, 'assignee': task_assignee, 'size': 10 + (task_entropy * 15) + (task_priority * 3) # Size based on entropy and priority }) # Add links for entangled tasks for entangled_id in task.get('entangled_tasks', []): if task_id != entangled_id: # Avoid self-links links.append({ 'source': task_id, 'target': entangled_id, 'value': 0.5 + random.random() * 0.5 # Random strength between 0.5 and 1.0 }) return {'nodes': nodes, 'links': links} def quantum_entanglement_network(tasks, height=600, width=None): """Create an enhanced entanglement network visualization with D3""" if not tasks or len(tasks) == 0: return None # Generate network data network_data = generate_network_data(tasks) # Convert to JSON for JavaScript network_json = json.dumps(network_data) # Calculate width if not provided if not width: width = "100%" # Create HTML/JavaScript visualization html = f"""