Add IEKF UQ results

#7
.claude/settings.json CHANGED
@@ -1,5 +1,6 @@
1
  {
2
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
 
3
  "permissions": {
4
  "allow": [
5
  "Bash(julia --project *)",
 
1
  {
2
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
3
+ "autoMemoryEnabled": false,
4
  "permissions": {
5
  "allow": [
6
  "Bash(julia --project *)",
CLAUDE.md CHANGED
@@ -62,12 +62,20 @@ calibration_benchmark/
62
  β”‚ β”œβ”€β”€ bayesian/ ABC + HM results
63
  β”‚ β”œβ”€β”€ UKI_results/ UKI results
64
  β”‚ β”œβ”€β”€ adam_results/ ADAM gradient optimizer results
 
 
 
65
  β”‚ β”œβ”€β”€ levenberg_marquardt_results/ LM gradient optimizer results
66
- β”‚ └── ces-eki-dmc_results/ CES-EKI-DMC ensemble-results files (UQ source)
67
- β”‚ β”œβ”€β”€ ces-eki-dmc_l63_ensemble_results_2026-06-15.nc
68
- β”‚ β”œβ”€β”€ ces-eki-dmc_l96_ensemble_results_2026-06-15.nc
69
- β”‚ β”œβ”€β”€ ces-eki-dmc_l96_nn_forcing_ensemble_results_2026-06-15.nc
70
- β”‚ └── ces-eki-dmc_l96_spatial_forcing_ensemble_results_2026-06-15.nc
 
 
 
 
 
71
  β”œβ”€β”€ examples/ lorenz_demo.ipynb + lorenz.py (reference, not app code)
72
  β”œβ”€β”€ From_Rob_6-10/ Raw collaborator data drop β€” NOT read by the app
73
  β”œβ”€β”€ .cache/ known_methods_snapshot.json (auto-generated, safe to delete)
 
62
  β”‚ β”œβ”€β”€ bayesian/ ABC + HM results
63
  β”‚ β”œβ”€β”€ UKI_results/ UKI results
64
  β”‚ β”œβ”€β”€ adam_results/ ADAM gradient optimizer results
65
+ β”‚ β”‚ filenames follow `leaderboard_adam_<benchmark-tag>_<date>.nc`;
66
+ β”‚ β”‚ benchmark tags: `l63` β†’ L63, `l96_const-force` β†’ L96,
67
+ β”‚ β”‚ `l96_vec-force` β†’ L96_SPATIAL_FORCING (no L96_NN_FORCING yet)
68
  β”‚ β”œβ”€β”€ levenberg_marquardt_results/ LM gradient optimizer results
69
+ β”‚ β”‚ filenames follow `leaderboard_lm_<benchmark-tag>_<date>.nc`;
70
+ β”‚ β”‚ same benchmark tags as adam_results/ (no L96_NN_FORCING yet)
71
+ β”‚ β”œβ”€β”€ ces-eki-dmc_results/ CES-EKI-DMC ensemble-results files (UQ source)
72
+ β”‚ β”‚ filenames follow `ces-eki-dmc_<benchmark-tag>_ensemble_results_<date>[_minimal].nc`;
73
+ β”‚ β”‚ benchmark tags: `l63` β†’ L63, `l96` (no suffix) β†’ L96,
74
+ β”‚ β”‚ `l96_nn_forcing` β†’ L96_NN_FORCING, `l96_spatial_forcing` β†’ L96_SPATIAL_FORCING
75
+ β”‚ └── gnki-uq_results/ IEKF (a.k.a GNKI) ensemble-results files (UQ source)
76
+ β”‚ filenames follow `leaderboard_gnki_<benchmark-tag>_<date>[_minimal].nc`;
77
+ β”‚ benchmark tags: `l63` β†’ L63, `l96_const-force` β†’ L96,
78
+ β”‚ `l96_flux-force` β†’ L96_NN_FORCING, `l96_vec-force` β†’ L96_SPATIAL_FORCING
79
  β”œβ”€β”€ examples/ lorenz_demo.ipynb + lorenz.py (reference, not app code)
80
  β”œβ”€β”€ From_Rob_6-10/ Raw collaborator data drop β€” NOT read by the app
81
  β”œβ”€β”€ .cache/ known_methods_snapshot.json (auto-generated, safe to delete)
data/gnki-uq_results/leaderboard_gnki_l63_2026-07-07_minimal.nc ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a6f8bcb81074d1c26eb1fca23f8f23b1f9962d157a6515a0269d0f9c68f2e2e1
3
+ size 673072
data/gnki-uq_results/leaderboard_gnki_l96_const-force_2026-07-07_minimal.nc ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f01ca145dca3bb97378e7ad5b2cf5c4a8fbc5db45576ac3036600e0d41caf124
3
+ size 809872
data/gnki-uq_results/leaderboard_gnki_l96_flux-force_2026-07-07_minimal.nc ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:44d18f3e3d79324e53f2cee5cf38137a53bc1f343e756c6efbdad5c84e00222e
3
+ size 809872
data/gnki-uq_results/leaderboard_gnki_l96_vec-force_2026-07-07_minimal.nc ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ec7d3760d1a8cf35b043e44130085c2c16b87b0d8d5c6eb11120e7ef83f5edea
3
+ size 809872
src/data_store.py CHANGED
@@ -83,10 +83,22 @@ UQ_TARGET_LEVELS: list[float] = [1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5]
83
  # Each NC must carry output_coverage (coverage_quantile, k_iter, ensemble_size, random_seed),
84
  # target_scaling, and output_dim.
85
  UQ_BUDGET_FILES: dict[str, list[tuple[str, str]]] = {
86
- "L63": [("ces-eki-dmc", "ces-eki-dmc_results/ces-eki-dmc_l63_ensemble_results_2026-06-15_minimal.nc")],
87
- "L96": [("ces-eki-dmc", "ces-eki-dmc_results/ces-eki-dmc_l96_ensemble_results_2026-06-15_minimal.nc")],
88
- "L96_NN_FORCING": [("ces-eki-dmc", "ces-eki-dmc_results/ces-eki-dmc_l96_nn_forcing_ensemble_results_2026-06-15_minimal.nc")],
89
- "L96_SPATIAL_FORCING": [("ces-eki-dmc", "ces-eki-dmc_results/ces-eki-dmc_l96_spatial_forcing_ensemble_results_2026-06-15_minimal.nc")],
 
 
 
 
 
 
 
 
 
 
 
 
90
  }
91
 
92
  # Quantile levels used for the all-quantiles-satisfied budget-for-coverage condition.
 
83
  # Each NC must carry output_coverage (coverage_quantile, k_iter, ensemble_size, random_seed),
84
  # target_scaling, and output_dim.
85
  UQ_BUDGET_FILES: dict[str, list[tuple[str, str]]] = {
86
+ "L63": [
87
+ ("ces-eki-dmc", "ces-eki-dmc_results/ces-eki-dmc_l63_ensemble_results_2026-06-15_minimal.nc"),
88
+ ("iekf", "gnki-uq_results/leaderboard_gnki_l63_2026-07-07_minimal.nc"),
89
+ ],
90
+ "L96": [
91
+ ("ces-eki-dmc", "ces-eki-dmc_results/ces-eki-dmc_l96_ensemble_results_2026-06-15_minimal.nc"),
92
+ ("iekf", "gnki-uq_results/leaderboard_gnki_l96_const-force_2026-07-07_minimal.nc"),
93
+ ],
94
+ "L96_NN_FORCING": [
95
+ ("ces-eki-dmc", "ces-eki-dmc_results/ces-eki-dmc_l96_nn_forcing_ensemble_results_2026-06-15_minimal.nc"),
96
+ ("iekf", "gnki-uq_results/leaderboard_gnki_l96_flux-force_2026-07-07_minimal.nc"),
97
+ ],
98
+ "L96_SPATIAL_FORCING": [
99
+ ("ces-eki-dmc", "ces-eki-dmc_results/ces-eki-dmc_l96_spatial_forcing_ensemble_results_2026-06-15_minimal.nc"),
100
+ ("iekf", "gnki-uq_results/leaderboard_gnki_l96_vec-force_2026-07-07_minimal.nc"),
101
+ ],
102
  }
103
 
104
  # Quantile levels used for the all-quantiles-satisfied budget-for-coverage condition.