"""Run real experiments to fill paper gaps. 1. Rank sensitivity: LowRankGNN r sweep at d=500 2. DAGMA d=150 5-seed benchmark """ import time, json, numpy as np, sys sys.stdout.reconfigure(encoding='utf-8') # causalscale installed via pip install -e . import torch, causalscale as cs from sklearn.metrics import f1_score def gen_sem_data(d, n, seed=42): np.random.seed(seed) W = np.zeros((d,d)); p=2/(d-1) for i in range(d): for j in range(d): if i!=j and np.random.random()0.3).astype(int) W_tbin = (np.abs(W_true)>0).astype(int) f1 = f1_score(W_tbin.flatten(), W_bin.flatten()) f1s.append(f1); times.append(t1-t0) print(f"F1={f1:.4f}, {t1-t0:.1f}s") f1s=np.array(f1s); times=np.array(times) print(f" Mean: F1={f1s.mean():.4f}+-{f1s.std():.4f}, time={times.mean():.1f}+-{times.std():.1f}s") # Save json.dump({'rank_sensitivity': results_rank, 'dagma_d150': {'f1_mean':round(float(f1s.mean()),4), 'f1_std':round(float(f1s.std()),4), 'time_mean':round(float(times.mean()),1), 'time_std':round(float(times.std()),1)}}, open(r'results/ablation_results.json','w'), indent=2) print("\nSaved ablation_results.json")