#!/usr/bin/env python3
"""
Auto-generated by submit_fisher_condor.py.
Concatenates per-job CSVs and renders combined LaTeX tables (one per detector).
"""
import sys, importlib.util, pathlib
import pandas as pd

outdir = pathlib.Path(r"/home/chrism/cosmem/fisher_run19")

csv_files = [
    r"/home/chrism/cosmem/fisher_run19/jobs/aLIGO_HLV_baseline/scenario_0000/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/aLIGO_HLV_var01/scenario_0001/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/aLIGO_HLV_var02/scenario_0002/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/aLIGO_HLV_var03/scenario_0003/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/aLIGO_HLV_var04/scenario_0004/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/aLIGO_HLV_var05/scenario_0005/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/aLIGO_HLV_var06/scenario_0006/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/aLIGO_HLV_var07/scenario_0007/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/aLIGO_HLV_var08/scenario_0008/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_baseline/scenario_0000/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_var01/scenario_0001/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_var02/scenario_0002/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_var03/scenario_0003/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_var04/scenario_0004/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_var05/scenario_0005/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_var06/scenario_0006/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_var07/scenario_0007/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_var08/scenario_0008/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/CE_baseline/scenario_0000/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/CE_var01/scenario_0001/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/CE_var02/scenario_0002/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/CE_var03/scenario_0003/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/CE_var04/scenario_0004/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/CE_var05/scenario_0005/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/CE_var06/scenario_0006/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/CE_var07/scenario_0007/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/CE_var08/scenario_0008/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_CE_baseline/scenario_0000/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_CE_var01/scenario_0001/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_CE_var02/scenario_0002/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_CE_var03/scenario_0003/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_CE_var04/scenario_0004/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_CE_var05/scenario_0005/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_CE_var06/scenario_0006/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_CE_var07/scenario_0007/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/ET_CE_var08/scenario_0008/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/LISA_light_seeds_baseline/scenario_0000/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/LISA_light_seeds_var01/scenario_0001/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/LISA_light_seeds_var02/scenario_0002/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/LISA_light_seeds_var03/scenario_0003/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/LISA_light_seeds_var04/scenario_0004/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/LISA_heavy_seeds_baseline/scenario_0000/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/LISA_heavy_seeds_var01/scenario_0001/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/LISA_heavy_seeds_var02/scenario_0002/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/LISA_heavy_seeds_var03/scenario_0003/fisher_table.csv",
    r"/home/chrism/cosmem/fisher_run19/jobs/LISA_heavy_seeds_var04/scenario_0004/fisher_table.csv",
]

dfs = []
for p in csv_files:
    p = pathlib.Path(p)
    if p.exists():
        dfs.append(pd.read_csv(p))
    else:
        print(f"WARNING: {p} not found — job may have failed", file=sys.stderr)

if not dfs:
    sys.exit("No job outputs found — nothing to merge.")

combined = pd.concat(dfs, ignore_index=True)

out_csv = outdir / "fisher_combined.csv"
combined.to_csv(out_csv, index=False)
print(f"Saved combined CSV : {out_csv}  ({len(combined)} rows)")

# ── Set up sys.path so `import cosmem` works when fisher_population_table.py
# is exec'd.  Priority: (1) baked-in pythonpath from config, (2) environment.
import os as _os
for _p in [r""] + _os.environ.get("PYTHONPATH", "").split(_os.pathsep):
    if _p and _p not in sys.path:
        sys.path.insert(0, _p)

# Load format_combined_latex_table from the fisher script and render
# a single table containing all detectors.
fisher_path = pathlib.Path(r"/home/chrism/cosmem/fisher_population_table.py")
spec = importlib.util.spec_from_file_location("fisher_pop", fisher_path)
mod  = importlib.util.module_from_spec(spec)
try:
    spec.loader.exec_module(mod)
    tex     = mod.format_combined_latex_table(combined)
    tex_path = outdir / "fisher_combined.tex"
    tex_path.write_text(tex)
    print(f"Saved combined LaTeX: {tex_path}")
except Exception as exc:
    print(f"LaTeX render failed: {exc}", file=sys.stderr)
    import traceback; traceback.print_exc(file=sys.stderr)
    print("(CSV is still valid — render manually if needed)")

print("Merge complete.")
