EXONYX / scripts /benchmark.py
Aditya-Jadhav150
Deploy clean EXONYX Backend
8f0e1cb
Raw
History Blame Contribute Delete
4.2 kB
import requests
import time
import csv
import os
API_BASE_URL = "http://127.0.0.1:8000/api/v1"
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
CSV_PATH = os.path.join(BASE_DIR, "..", "brain", "9716afda-a559-4f4e-8d1a-078dbb58bad6", "benchmark_results.csv")
TARGETS = [
{"target_name": "Kepler-10", "mission": "Kepler", "gt_period": 0.837491, "gt_radius": 1.47},
{"target_name": "Kepler-22", "mission": "Kepler", "gt_period": 289.8623, "gt_radius": 2.38},
{"target_name": "Kepler-452", "mission": "Kepler", "gt_period": 384.843, "gt_radius": 1.63},
{"target_name": "Kepler-90", "mission": "Kepler", "gt_period": 7.008151, "gt_radius": 1.31}, # Kepler-90b
{"target_name": "TRAPPIST-1", "mission": "K2", "gt_period": 1.51087, "gt_radius": 1.116}, # TRAPPIST-1b
{"target_name": "Kepler-13", "mission": "Kepler", "gt_period": 1.763588, "gt_radius": 16.5} # Eclipsing Binary / Hot Jupiter
]
print("==================================================")
print("EXONYX SCIENTIFIC VALIDATION CAMPAIGN (BENCHMARK)")
print("==================================================")
results = []
for target in TARGETS:
print(f"\nEvaluating Ground Truth Exoplanet System: {target['target_name']}")
start = time.time()
payload = {
"target_name": target['target_name'],
"mission": target['mission'],
"dataset_type": "Real"
}
rec_period = 0.0
rec_radius = 0.0
tls_sde = 0.0
cnn_conf = 0.0
fp_risk = 0.0
pli = 0.0
try:
res = requests.post(f"{API_BASE_URL}/data/load", json=payload, timeout=300) # Increased timeout for larger datasets
if res.status_code == 200:
data = res.json()
if data.get("status") == "success":
val = data.get("validation_summary", {})
char = data.get("characterization", {})
pli_dict = data.get("pli", {})
rec_period = char.get('period_days', 0)
rec_radius = char.get('planet_radius_earth', 0)
tls_sde = val.get('sde', 0)
cnn_conf = val.get('cnn_confidence', 0)
if cnn_conf is None: cnn_conf = 0.0
fp_risk = pli_dict.get('fp_risk', 0)
pli = pli_dict.get('score', 0)
print(f" [PASS] Successfully recovered transits!")
print(f" - Planet Likelihood Index (PLI): {pli:.1f}")
print(f" - Orbital Period: {rec_period:.4f} days")
print(f" - Planet Radius: {rec_radius:.2f} R_Earth")
else:
print(f" [FAIL] Engine returned error: {data.get('message')}")
else:
print(f" [FAIL] HTTP Error: {res.status_code}")
except Exception as e:
print(f" [FAIL] Request failed: {e}")
runtime = time.time() - start
print(f" Elapsed Time: {runtime:.1f}s")
# Calculate errors
gt_period = target['gt_period']
gt_radius = target['gt_radius']
period_err_abs = abs(rec_period - gt_period) if rec_period > 0 else 0
period_err_pct = (period_err_abs / gt_period * 100) if gt_period > 0 and rec_period > 0 else 0
radius_err_abs = abs(rec_radius - gt_radius) if rec_radius > 0 else 0
radius_err_pct = (radius_err_abs / gt_radius * 100) if gt_radius > 0 and rec_radius > 0 else 0
results.append({
"Target": target['target_name'],
"GT_Period": gt_period,
"Rec_Period": rec_period,
"Period_Err_Abs": period_err_abs,
"Period_Err_Pct": period_err_pct,
"GT_Radius": gt_radius,
"Rec_Radius": rec_radius,
"Radius_Err_Abs": radius_err_abs,
"Radius_Err_Pct": radius_err_pct,
"TLS_SDE": tls_sde,
"CNN_Conf": cnn_conf,
"FP_Risk": fp_risk,
"PLI": pli,
"Runtime": runtime
})
os.makedirs(os.path.dirname(CSV_PATH), exist_ok=True)
with open(CSV_PATH, 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=results[0].keys())
writer.writeheader()
writer.writerows(results)
print(f"\nBenchmark completed. Results written to {CSV_PATH}")