| |
| """ |
| Test script for kit relationships visualization |
| Tests the actual kit dependency relationships from kit_hierarchy.json |
| """ |
|
|
| import sys |
| import os |
| sys.path.append('src') |
|
|
| def test_kit_relationships(): |
| """Test kit relationships visualization""" |
| print("π Testing Kit Relationships Visualization") |
| print("=" * 50) |
| |
| try: |
| |
| from src.visualization.kit_relationships import ( |
| load_kit_hierarchy, |
| build_relationship_data, |
| get_production_timing, |
| find_dependency_violations |
| ) |
| print("β
Successfully imported kit relationships module") |
| |
| |
| hierarchy_data = load_kit_hierarchy() |
| if hierarchy_data: |
| print(f"β
Loaded kit hierarchy: {len(hierarchy_data)} master kits") |
| |
| |
| print("\nπ Sample Kit Relationships:") |
| count = 0 |
| for kit_id, kit_info in hierarchy_data.items(): |
| if kit_info.get('dependencies') and count < 5: |
| deps = kit_info['dependencies'] |
| kit_name = kit_info.get('name', kit_id)[:50] + "..." if len(kit_info.get('name', '')) > 50 else kit_info.get('name', kit_id) |
| print(f" β’ {kit_id} ({kit_name})") |
| print(f" Depends on: {deps}") |
| count += 1 |
| |
| |
| sample_produced_kits = set(list(hierarchy_data.keys())[:10]) |
| print(f"\nπ§ͺ Testing with {len(sample_produced_kits)} sample produced kits") |
| |
| relationships = build_relationship_data(hierarchy_data, sample_produced_kits) |
| print(f"β
Found {len(relationships)} dependency relationships") |
| |
| if relationships: |
| print("\nπ Sample Relationships:") |
| for i, rel in enumerate(relationships[:5]): |
| print(f" {i+1}. {rel['source']} β {rel['target']} ({rel['source_type']} β {rel['target_type']})") |
| |
| |
| sample_timing = {kit: i % 5 + 1 for i, kit in enumerate(sample_produced_kits)} |
| violations = find_dependency_violations(sample_timing, relationships) |
| print(f"β
Dependency analysis: {len(violations)} violations found") |
| |
| print("\nπ Kit relationships visualization components working!") |
| return True |
| |
| else: |
| print("β οΈ No kit hierarchy data found - please check kit_hierarchy.json") |
| return False |
| |
| except FileNotFoundError: |
| print("β Kit hierarchy file not found at data/hierarchy_exports/kit_hierarchy.json") |
| return False |
| except Exception as e: |
| print(f"β Error testing kit relationships: {e}") |
| import traceback |
| traceback.print_exc() |
| return False |
|
|
| def display_hierarchy_structure(): |
| """Display the structure of the hierarchy data""" |
| print("\nπ Kit Hierarchy Structure Analysis") |
| print("=" * 40) |
| |
| try: |
| from src.visualization.kit_relationships import load_kit_hierarchy |
| hierarchy_data = load_kit_hierarchy() |
| |
| if not hierarchy_data: |
| print("No hierarchy data available") |
| return |
| |
| |
| masters = [] |
| subkits = [] |
| prepacks = [] |
| |
| total_dependencies = 0 |
| |
| for kit_id, kit_info in hierarchy_data.items(): |
| kit_type = kit_info.get('type', 'unknown') |
| dependencies = kit_info.get('dependencies', []) |
| total_dependencies += len(dependencies) |
| |
| if kit_type == 'master': |
| masters.append(kit_id) |
| elif kit_type == 'subkit': |
| subkits.append(kit_id) |
| elif kit_type == 'prepack': |
| prepacks.append(kit_id) |
| |
| print(f"π¦ Total Kits: {len(hierarchy_data)}") |
| print(f" β’ Masters: {len(masters)}") |
| print(f" β’ Subkits: {len(subkits)}") |
| print(f" β’ Prepacks: {len(prepacks)}") |
| print(f"π Total Dependencies: {total_dependencies}") |
| |
| |
| max_deps = 0 |
| most_complex = None |
| |
| for kit_id, kit_info in hierarchy_data.items(): |
| deps = len(kit_info.get('dependencies', [])) |
| if deps > max_deps: |
| max_deps = deps |
| most_complex = kit_id |
| |
| if most_complex: |
| print(f"π Most Complex Kit: {most_complex} ({max_deps} dependencies)") |
| |
| |
| print(f"\nπ Sample Dependency Chains:") |
| chains_shown = 0 |
| for kit_id, kit_info in hierarchy_data.items(): |
| if kit_info.get('dependencies') and chains_shown < 3: |
| deps = kit_info['dependencies'] |
| kit_name = kit_info.get('name', kit_id)[:40] + "..." if len(kit_info.get('name', '')) > 40 else kit_info.get('name', kit_id) |
| print(f" Chain {chains_shown + 1}: {kit_name}") |
| for dep in deps[:3]: |
| dep_info = hierarchy_data.get(dep, {}) |
| dep_name = dep_info.get('name', dep)[:30] + "..." if len(dep_info.get('name', '')) > 30 else dep_info.get('name', dep) |
| print(f" β³ Needs: {dep_name}") |
| chains_shown += 1 |
| |
| print(f"\nThis data will be visualized in the dashboard! π¨") |
| |
| except Exception as e: |
| print(f"Error analyzing hierarchy: {e}") |
|
|
| if __name__ == "__main__": |
| |
| display_hierarchy_structure() |
| |
| |
| success = test_kit_relationships() |
| |
| if success: |
| print(f"\nβ
Kit relationships test completed successfully!") |
| print(f"\nTo see the visualization:") |
| print(f"1. Run: streamlit run app.py") |
| print(f"2. Go to Settings β Run Optimization") |
| print(f"3. Check 'Hierarchy Flow' β 'Kit Relationships' tab") |
| print(f"4. See the interactive network graph! πΈοΈ") |
| else: |
| print(f"\nβ Test failed - check error messages above") |
| |
| print(f"\n" + "=" * 50) |