Paramify-test / test_analysis.py
bluestpanda
chanages
23ca2e7
#!/usr/bin/env python3
"""
Test script to verify the analysis functions work correctly without Streamlit.
"""
import json
import sys
import os
# Add src directory to path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src'))
from structure_analysis import detect_summary_fields, classify_data_structure, get_hierarchy_summary
def analyze_with_llm(data, target_field="rotation_enabled"):
"""
Analyze data and generate a prompt for LLM analysis.
Returns structured analysis without requiring Ollama.
"""
print(f"DEBUG: Starting analysis with target_field: {target_field}")
print(f"DEBUG: Data type: {type(data)}")
print(f"DEBUG: Data keys: {list(data.keys()) if isinstance(data, dict) else 'Not a dict'}")
# Detect summary fields
print("DEBUG: Detecting summary fields...")
summary_fields = detect_summary_fields(data)
print(f"DEBUG: Found summary fields: {summary_fields}")
print("DEBUG: Classifying data structure...")
classification = classify_data_structure(data)
print(f"DEBUG: Classification result: {classification}")
print("DEBUG: Getting hierarchy summary...")
hierarchy_summary = get_hierarchy_summary(data)
print(f"DEBUG: Hierarchy summary: {hierarchy_summary}")
# Extract samples
print("DEBUG: Extracting samples...")
sample_object = {}
if 'results' in data:
print("DEBUG: Found 'results' key in data")
for section_name, section in data['results'].items():
print(f"DEBUG: Processing section '{section_name}': {type(section)}")
if isinstance(section, list) and len(section) > 0:
sample_object = section[0]
print(f"DEBUG: Found sample object from list: {sample_object}")
break
elif isinstance(section, dict):
for key, value in section.items():
if isinstance(value, list) and len(value) > 0:
sample_object = value[0] if isinstance(value[0], dict) else {}
print(f"DEBUG: Found sample object from dict list: {sample_object}")
break
else:
print("DEBUG: No 'results' key found in data")
summary_sample = data.get('results', {}).get('summary', {}) or data.get('summary', {})
print(f"DEBUG: Summary sample: {summary_sample}")
# Count objects with target field
def count_objects_with_field(obj, field_name):
count = 0
if isinstance(obj, dict):
if field_name in obj:
count += 1
for v in obj.values():
count += count_objects_with_field(v, field_name)
elif isinstance(obj, list):
for item in obj:
count += count_objects_with_field(item, field_name)
return count
print("DEBUG: Counting objects with target field...")
total_objects = count_objects_with_field(data, target_field)
print(f"DEBUG: Total objects with '{target_field}': {total_objects}")
# Generate analysis
print("DEBUG: Generating analysis...")
analysis = {
"summary_fields_detected": summary_fields[:10],
"classification": classification,
"hierarchy_summary": hierarchy_summary,
"total_objects": total_objects,
"sample_object": sample_object,
"summary_sample": summary_sample,
"recommended_fields": []
}
print(f"DEBUG: Initial analysis: {analysis}")
# Recommend fields based on priority
print("DEBUG: Generating field recommendations...")
if summary_fields:
analysis["recommended_fields"].extend(summary_fields[:3])
print(f"DEBUG: Added summary fields: {summary_fields[:3]}")
if classification.get('config_fields'):
analysis["recommended_fields"].extend(classification['config_fields'][:2])
print(f"DEBUG: Added config fields: {classification['config_fields'][:2]}")
if sample_object:
target_related = [k for k in sample_object.keys() if target_field in k.lower()]
analysis["recommended_fields"].extend(target_related)
print(f"DEBUG: Added target-related fields: {target_related}")
print(f"DEBUG: Final recommended fields: {analysis['recommended_fields']}")
print("DEBUG: Analysis completed successfully")
return analysis
def test_analysis_functions():
"""Test the analysis functions with sample data."""
# Load test data
with open('test_data.json', 'r') as f:
data = json.load(f)
print("=== Testing Analysis Functions ===")
print(f"Data loaded: {type(data)}")
print(f"Data keys: {list(data.keys())}")
print()
# Test detect_summary_fields
print("Testing detect_summary_fields...")
summary_fields = detect_summary_fields(data)
print(f"Summary fields found: {summary_fields}")
print()
# Test classify_data_structure
print("Testing classify_data_structure...")
classification = classify_data_structure(data)
print(f"Classification result: {classification}")
print()
# Test get_hierarchy_summary
print("Testing get_hierarchy_summary...")
hierarchy_summary = get_hierarchy_summary(data)
print(f"Hierarchy summary: {hierarchy_summary}")
print()
# Test the full analysis function
print("Testing full analysis...")
try:
analysis_result = analyze_with_llm(data, "rotation_enabled")
print("✅ Analysis completed successfully!")
print(f"Analysis keys: {list(analysis_result.keys())}")
print(f"Recommended fields: {analysis_result.get('recommended_fields', [])}")
print(f"Total objects with 'rotation_enabled': {analysis_result.get('total_objects', 0)}")
except Exception as e:
print(f"❌ Analysis failed: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
test_analysis_functions()