"""Test parametric surrogate integration."""

import time
from optimization_engine.processors.surrogates.neural_surrogate import create_parametric_surrogate_for_study

print("Testing Parametric Neural Surrogate")
print("=" * 60)

# Create surrogate with auto-detection
surrogate = create_parametric_surrogate_for_study()

if surrogate is None:
    print("ERROR: Failed to create surrogate")
    exit(1)

print(f"Surrogate created successfully!")
print(f"  Device: {surrogate.device}")
print(f"  Nodes: {surrogate.num_nodes}")
print(f"  Model val_loss: {surrogate.best_val_loss:.4f}")
print(f"  Design vars: {surrogate.design_var_names}")

# Test prediction with example params
test_params = {
    "beam_half_core_thickness": 7.0,
    "beam_face_thickness": 2.5,
    "holes_diameter": 35.0,
    "hole_count": 10.0
}

print(f"\nTest prediction with params: {test_params}")
results = surrogate.predict(test_params)

print(f"\nResults:")
print(f"  Mass: {results['mass']:.2f} g")
print(f"  Frequency: {results['frequency']:.2f} Hz")
print(f"  Max displacement: {results['max_displacement']:.6f} mm")
print(f"  Max stress: {results['max_stress']:.2f} MPa")
print(f"  Inference time: {results['inference_time_ms']:.2f} ms")

# Speed test
n = 100
start = time.time()
for _ in range(n):
    surrogate.predict(test_params)
elapsed = time.time() - start

print(f"\nSpeed test: {n} predictions in {elapsed:.3f}s")
print(f"  Average: {elapsed/n*1000:.2f} ms per prediction")

# Compare with training data range
print(f"\nExpected range (from training data):")
print(f"  Mass: ~2808 - 5107 g")
print(f"  Frequency: ~15.8 - 21.9 Hz")
print(f"  Max displacement: ~0.02-0.03 mm")

stats = surrogate.get_statistics()
print(f"\nStatistics:")
print(f"  Total predictions: {stats['total_predictions']}")
print(f"  Average time: {stats['average_time_ms']:.2f} ms")

print("\nParametric surrogate test PASSED!")
