supply-roster-optimization / test_kit_relationships.py
HaLim
Touchpoint - complete idle analysis data
868114c
raw
history blame
6.55 kB
#!/usr/bin/env python3
"""
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:
# Test importing the kit relationships module
from src.visualization.kit_relationships import (
load_kit_hierarchy,
build_relationship_data,
get_production_timing,
find_dependency_violations
)
print("βœ… Successfully imported kit relationships module")
# Test loading hierarchy data
hierarchy_data = load_kit_hierarchy()
if hierarchy_data:
print(f"βœ… Loaded kit hierarchy: {len(hierarchy_data)} master kits")
# Show some example relationships
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
# Test with sample production data
sample_produced_kits = set(list(hierarchy_data.keys())[:10]) # First 10 kits
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']})")
# Test production timing analysis
sample_timing = {kit: i % 5 + 1 for i, kit in enumerate(sample_produced_kits)} # Random days 1-5
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
# Analyze hierarchy structure
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}")
# Find most complex kit (most 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)")
# Show dependency chains
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]: # Show first 3 dependencies
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
display_hierarchy_structure()
# Test kit relationships
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)