atal-narayan commited on
Commit
ea65b0e
·
verified ·
1 Parent(s): 1c7d7df

Publish COPRA Flow v0.1.0 artifacts and documentation

Browse files
Files changed (10) hide show
  1. LICENSE +21 -0
  2. README.md +109 -0
  3. SHA256SUMS +9 -0
  4. config.json +51 -0
  5. copra-flow.pt +3 -0
  6. example.npz +3 -0
  7. release.json +18 -0
  8. splits.json +0 -0
  9. training_history.json +404 -0
  10. validation_results.json +57 -0
LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Atal Narayan Sahu and COPRA Flow contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
README.md ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ language:
4
+ - en
5
+ tags:
6
+ - physics
7
+ - optics
8
+ - ultrafast-optics
9
+ - tg-frog
10
+ - pulse-retrieval
11
+ - flow-matching
12
+ - pytorch
13
+ datasets:
14
+ - atal-narayan/copra-flow-tg-frog
15
+ ---
16
+
17
+ # COPRA Flow
18
+
19
+ COPRA Flow refines ultrafast laser pulse reconstructions from transient-grating
20
+ frequency-resolved optical gating (TG-FROG) measurements. A conditional flow
21
+ model takes a COPRA reconstruction and the measured trace, then produces a
22
+ refined complex electric field.
23
+
24
+ - **Code and installation:** [atalnarayan/copra-flow](https://github.com/atalnarayan/copra-flow)
25
+ - **Training data:** [COPRA Flow TG-FROG](https://huggingface.co/datasets/atal-narayan/copra-flow-tg-frog)
26
+ - **Weights:** [`copra-flow.pt`](copra-flow.pt), PyTorch checkpoint, approximately 7 MB
27
+ - **License:** MIT
28
+
29
+ ## Run the model
30
+
31
+ Install the code following the GitHub README. From the code repository, download
32
+ this checkpoint with the Hugging Face CLI:
33
+
34
+ ```bash
35
+ hf download atal-narayan/copra-flow copra-flow.pt --revision v0.1.0 --local-dir checkpoints
36
+ uv run copra-flow example --out data/example.npz
37
+ uv run copra-flow infer --checkpoint checkpoints/copra-flow.pt \
38
+ --input data/example.npz --out-dir runs/example
39
+ ```
40
+
41
+ The command performs 400 COPRA iterations and 64 Euler flow refinement steps.
42
+ It writes `prediction.npz` and `metrics.json`. No training data or ground-truth
43
+ pulse is required for inference. See the
44
+ [inference guide](https://github.com/atalnarayan/copra-flow/blob/main/docs/inference.md)
45
+ for preparing experimental measurements or refining an existing COPRA field.
46
+
47
+ Inputs use 256 temporal samples at 2.5 fs spacing. The measurement must follow
48
+ the documented frequency and delay conventions. This is a custom scientific
49
+ PyTorch model; load it through `copra-flow`, rather than a Transformers pipeline.
50
+
51
+ ## Model and training
52
+
53
+ The model has **1,754,770 parameters**. It predicts a conditional vector field
54
+ using two-channel real/imaginary pulse fields and a peak-normalized,
55
+ square-root-transformed TG-FROG trace. The architecture uses 128 hidden channels,
56
+ eight residual blocks, a 256-dimensional condition embedding, and a
57
+ 128-dimensional time embedding.
58
+
59
+ Training used 270,000 source–target pairs from 9,000 synthetic pulses, with
60
+ 30,000 pairs from 1,000 disjoint pulses for validation. All source candidates
61
+ for a pulse stay in the same partition. The run used AdamW, learning rate
62
+ 0.0003, batch size 64, and 50 epochs on an NVIDIA A100 40 GB GPU with mixed
63
+ precision. The released checkpoint was selected by validation loss at epoch
64
+ 46, update 194,074; its validation flow loss was 0.017534218672072208.
65
+
66
+ `config.json` contains the training and architecture settings. `splits.json`
67
+ contains the fixed pulse split, and `training_history.json` records all 50
68
+ epochs. This release preserves every model tensor exactly, removes optimizer
69
+ state, and replaces machine-specific paths with portable relative paths.
70
+ It is intended for inference and evaluation, not exact training resumption.
71
+ Source and release hashes are recorded in `release.json` and `SHA256SUMS`.
72
+
73
+ ## Evaluation
74
+
75
+ The paper's synthetic benchmark evaluates the final COPRA source for each of
76
+ 1,000 validation pulses with 64 Euler steps:
77
+
78
+ | Method | Mean pulse MAE ↓ | Mean trace SSIM ↑ |
79
+ | --- | ---: | ---: |
80
+ | COPRA | 0.4685 | 0.9709 |
81
+ | COPRA + direct Hann | 0.3345 | 0.8207 |
82
+ | COPRA Flow | 0.0674 | 0.9103 |
83
+
84
+ These are validation results, not results on an independent held-out test set.
85
+ The same validation partition selected the checkpoint. Pulse errors use the
86
+ synthetic benchmark's target alignment and normalization. A complete rerun
87
+ matched the six reference metric means within an absolute tolerance of 0.0001;
88
+ see `validation_results.json` and the code's benchmark script.
89
+
90
+ ## Scope and limitations
91
+
92
+ Training uses synthetic TG-FROG traces at 800 nm with 1% additive Gaussian
93
+ trace noise and nonnegative clipping. Performance on other pulse distributions,
94
+ noise conditions, acquisition systems, or physical grids is not established.
95
+ Improved pulse error does not guarantee improved trace consistency; check the
96
+ reconstructed trace when interpreting a result. Smoothness alone does not
97
+ establish pulse accuracy.
98
+
99
+ The experimental inference workflow executes, but the historical experimental
100
+ metric table does not reproduce exactly, including when rerunning the original
101
+ research scripts. See the
102
+ [reproducibility notes](https://github.com/atalnarayan/copra-flow/blob/main/docs/reproducibility.md)
103
+ for the observed differences and verification limits. This release does not
104
+ claim an exact reproduction of that table.
105
+
106
+ ## Citation
107
+
108
+ Citation metadata is maintained in the code repository's
109
+ [CITATION.cff](https://github.com/atalnarayan/copra-flow/blob/main/CITATION.cff).
SHA256SUMS ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ 520145a615164fbf664950a5fd2a46107841ad4959bc823b2c112c5791dfdf8e LICENSE
2
+ 5061fe95f4821a57af14aea7b1916022c50ca382c8bda20ae9e9343d285a40cc README.md
3
+ f380df7043bd1e95a92437735e14640f79c0eb1ede970a0c1ced2e2cbfe66808 config.json
4
+ 07ee14467fc6ea7ada500121e1aeed71f24f0d2c6138147f6704a05acd4095b5 copra-flow.pt
5
+ 18694e1f4a17ca3e404fab5e9b76dfd14480942316fe4ae61704fa57975b8fc9 example.npz
6
+ 1cb0660e95c3dd56277c3d47cf02a016da0903805659e856dec5047b71abf7cc release.json
7
+ 7d4b6284dc550969600d87e9f7dd91734dc3d32fb5172667634269ee700b630b splits.json
8
+ 3cda8c91cad4fb8c4bcda9277c64f4a9e4c5162ca6102711be887766a242d39a training_history.json
9
+ 7db3171cbe99c70baabe7467354bb3315f1e191a1f0e0d5739d2e1b2bb087935 validation_results.json
config.json ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "dataset": {
3
+ "cache_shards": 16,
4
+ "data_dir": "data/flow_matching_10k",
5
+ "include_hard_negatives": true,
6
+ "max_shards": null,
7
+ "max_source_weight": 5.0,
8
+ "min_source_weight": 0.0,
9
+ "normalize_trace": true,
10
+ "seed": 42,
11
+ "source_mode": "all",
12
+ "split": "train",
13
+ "split_file": "splits.json",
14
+ "trace_transform": "sqrt",
15
+ "use_source_weights": true,
16
+ "validation_fraction": 0.1
17
+ },
18
+ "loss": {
19
+ "path_noise_std": 0.0,
20
+ "time_eps": 0.0001
21
+ },
22
+ "model": {
23
+ "condition_dim": 256,
24
+ "condition_on_source": false,
25
+ "dropout": 0.0,
26
+ "field_length": 256,
27
+ "hidden_channels": 128,
28
+ "residual_blocks": 8,
29
+ "time_embedding_dim": 128,
30
+ "trace_base_channels": 24,
31
+ "trace_layers": 4
32
+ },
33
+ "training": {
34
+ "amp": true,
35
+ "batch_size": 64,
36
+ "checkpoint_every": 1,
37
+ "compile_model": false,
38
+ "device": "cuda",
39
+ "epochs": 50,
40
+ "grad_clip_norm": 1.0,
41
+ "learning_rate": 0.0003,
42
+ "log_every": 25,
43
+ "max_train_batches": null,
44
+ "max_val_batches": null,
45
+ "num_workers": 4,
46
+ "out_dir": "runs/copra-flow",
47
+ "seed": 42,
48
+ "validate_every": 1,
49
+ "weight_decay": 0.0001
50
+ }
51
+ }
copra-flow.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:07ee14467fc6ea7ada500121e1aeed71f24f0d2c6138147f6704a05acd4095b5
3
+ size 7057902
example.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:18694e1f4a17ca3e404fab5e9b76dfd14480942316fe4ae61704fa57975b8fc9
3
+ size 280603
release.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "best_validation_flow_loss": 0.017534218672072208,
3
+ "checkpoint_sha256": "07ee14467fc6ea7ada500121e1aeed71f24f0d2c6138147f6704a05acd4095b5",
4
+ "code_repository": "https://github.com/atalnarayan/copra-flow",
5
+ "code_revision": "a70b5ead847ef180e660095471ecc2db074e6a2c",
6
+ "dataset_repository": "atal-narayan/copra-flow-tg-frog",
7
+ "epoch": 46,
8
+ "format_version": 1,
9
+ "global_step": 194074,
10
+ "license": "mit",
11
+ "machine_specific_paths_removed": true,
12
+ "name": "COPRA Flow",
13
+ "optimizer_state_included": false,
14
+ "parameter_count": 1754770,
15
+ "source_checkpoint_sha256": "9d7159f8d5495832592ac0a17365a35e442742ae9ff319d7c7144520c847a3d9",
16
+ "version": "v0.1.0",
17
+ "weights_bit_identical_to_source": true
18
+ }
splits.json ADDED
The diff for this file is too large to render. See raw diff
 
training_history.json ADDED
@@ -0,0 +1,404 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "history": [
3
+ {
4
+ "best_val_loss": 0.039760063515543176,
5
+ "epoch": 1,
6
+ "global_step": 4219,
7
+ "train_loss": 0.048370899312272335,
8
+ "val_loss": 0.039760063515543176,
9
+ "val_velocity_mse": 0.03949241956342449
10
+ },
11
+ {
12
+ "best_val_loss": 0.03155958008116433,
13
+ "epoch": 2,
14
+ "global_step": 8438,
15
+ "train_loss": 0.03499699404569571,
16
+ "val_loss": 0.03155958008116433,
17
+ "val_velocity_mse": 0.03132850126917365
18
+ },
19
+ {
20
+ "best_val_loss": 0.02882730234354766,
21
+ "epoch": 3,
22
+ "global_step": 12657,
23
+ "train_loss": 0.030509617545627168,
24
+ "val_loss": 0.02882730234354766,
25
+ "val_velocity_mse": 0.028554000174884856
26
+ },
27
+ {
28
+ "best_val_loss": 0.027223503759214236,
29
+ "epoch": 4,
30
+ "global_step": 16876,
31
+ "train_loss": 0.02752542236539959,
32
+ "val_loss": 0.027223503759214236,
33
+ "val_velocity_mse": 0.02700459882060983
34
+ },
35
+ {
36
+ "best_val_loss": 0.02561977235719498,
37
+ "epoch": 5,
38
+ "global_step": 21095,
39
+ "train_loss": 0.025577741026088972,
40
+ "val_loss": 0.02561977235719498,
41
+ "val_velocity_mse": 0.02545351006968348
42
+ },
43
+ {
44
+ "best_val_loss": 0.0242692795537436,
45
+ "epoch": 6,
46
+ "global_step": 25314,
47
+ "train_loss": 0.02391287040351253,
48
+ "val_loss": 0.0242692795537436,
49
+ "val_velocity_mse": 0.024098803883970482
50
+ },
51
+ {
52
+ "best_val_loss": 0.02334500584147696,
53
+ "epoch": 7,
54
+ "global_step": 29533,
55
+ "train_loss": 0.02270620756741312,
56
+ "val_loss": 0.02334500584147696,
57
+ "val_velocity_mse": 0.023134769776017902
58
+ },
59
+ {
60
+ "best_val_loss": 0.02334500584147696,
61
+ "epoch": 8,
62
+ "global_step": 33752,
63
+ "train_loss": 0.021694983564525608,
64
+ "val_loss": 0.024200269045915875,
65
+ "val_velocity_mse": 0.023980851785075277
66
+ },
67
+ {
68
+ "best_val_loss": 0.022769615025337,
69
+ "epoch": 9,
70
+ "global_step": 37971,
71
+ "train_loss": 0.020887004655242163,
72
+ "val_loss": 0.022769615025337,
73
+ "val_velocity_mse": 0.022586058968229336
74
+ },
75
+ {
76
+ "best_val_loss": 0.022260717521888265,
77
+ "epoch": 10,
78
+ "global_step": 42190,
79
+ "train_loss": 0.02003164939064922,
80
+ "val_loss": 0.022260717521888265,
81
+ "val_velocity_mse": 0.021982301976770036
82
+ },
83
+ {
84
+ "best_val_loss": 0.021717482185892777,
85
+ "epoch": 11,
86
+ "global_step": 46409,
87
+ "train_loss": 0.01939831668315453,
88
+ "val_loss": 0.021717482185892777,
89
+ "val_velocity_mse": 0.021489336470594762
90
+ },
91
+ {
92
+ "best_val_loss": 0.0209960921752904,
93
+ "epoch": 12,
94
+ "global_step": 50628,
95
+ "train_loss": 0.018800052028113166,
96
+ "val_loss": 0.0209960921752904,
97
+ "val_velocity_mse": 0.020898054225811126
98
+ },
99
+ {
100
+ "best_val_loss": 0.0209960921752904,
101
+ "epoch": 13,
102
+ "global_step": 54847,
103
+ "train_loss": 0.018252122872201123,
104
+ "val_loss": 0.021723932831355534,
105
+ "val_velocity_mse": 0.021559210957339738
106
+ },
107
+ {
108
+ "best_val_loss": 0.020144825595726907,
109
+ "epoch": 14,
110
+ "global_step": 59066,
111
+ "train_loss": 0.017749218866083365,
112
+ "val_loss": 0.020144825595726907,
113
+ "val_velocity_mse": 0.02002382862157246
114
+ },
115
+ {
116
+ "best_val_loss": 0.020144825595726907,
117
+ "epoch": 15,
118
+ "global_step": 63285,
119
+ "train_loss": 0.01737314341351404,
120
+ "val_loss": 0.02020938856664227,
121
+ "val_velocity_mse": 0.020047664452693674
122
+ },
123
+ {
124
+ "best_val_loss": 0.019933219938509182,
125
+ "epoch": 16,
126
+ "global_step": 67504,
127
+ "train_loss": 0.016984601340645805,
128
+ "val_loss": 0.019933219938509182,
129
+ "val_velocity_mse": 0.019860347839139862
130
+ },
131
+ {
132
+ "best_val_loss": 0.019614729162520057,
133
+ "epoch": 17,
134
+ "global_step": 71723,
135
+ "train_loss": 0.016502560571526558,
136
+ "val_loss": 0.019614729162520057,
137
+ "val_velocity_mse": 0.019502528752984683
138
+ },
139
+ {
140
+ "best_val_loss": 0.019614729162520057,
141
+ "epoch": 18,
142
+ "global_step": 75942,
143
+ "train_loss": 0.016225659600268096,
144
+ "val_loss": 0.02001298490319965,
145
+ "val_velocity_mse": 0.019915231435037435
146
+ },
147
+ {
148
+ "best_val_loss": 0.01907965998430409,
149
+ "epoch": 19,
150
+ "global_step": 80161,
151
+ "train_loss": 0.01588083613978694,
152
+ "val_loss": 0.01907965998430409,
153
+ "val_velocity_mse": 0.018915601661984822
154
+ },
155
+ {
156
+ "best_val_loss": 0.01907965998430409,
157
+ "epoch": 20,
158
+ "global_step": 84380,
159
+ "train_loss": 0.015566516729744125,
160
+ "val_loss": 0.01913045131629194,
161
+ "val_velocity_mse": 0.019057416352632046
162
+ },
163
+ {
164
+ "best_val_loss": 0.01907965998430409,
165
+ "epoch": 21,
166
+ "global_step": 88599,
167
+ "train_loss": 0.015295855905269067,
168
+ "val_loss": 0.019084638624545385,
169
+ "val_velocity_mse": 0.01895866795221586
170
+ },
171
+ {
172
+ "best_val_loss": 0.01907965998430409,
173
+ "epoch": 22,
174
+ "global_step": 92818,
175
+ "train_loss": 0.015068221784855276,
176
+ "val_loss": 0.01933192863498431,
177
+ "val_velocity_mse": 0.01924421370817797
178
+ },
179
+ {
180
+ "best_val_loss": 0.019020103234877146,
181
+ "epoch": 23,
182
+ "global_step": 97037,
183
+ "train_loss": 0.014716366195795617,
184
+ "val_loss": 0.019020103234877146,
185
+ "val_velocity_mse": 0.018923386160447114
186
+ },
187
+ {
188
+ "best_val_loss": 0.01863780426286431,
189
+ "epoch": 24,
190
+ "global_step": 101256,
191
+ "train_loss": 0.014551253272580306,
192
+ "val_loss": 0.01863780426286431,
193
+ "val_velocity_mse": 0.01855770379070566
194
+ },
195
+ {
196
+ "best_val_loss": 0.01863780426286431,
197
+ "epoch": 25,
198
+ "global_step": 105475,
199
+ "train_loss": 0.014335928779160751,
200
+ "val_loss": 0.01937202660432423,
201
+ "val_velocity_mse": 0.019298528307683464
202
+ },
203
+ {
204
+ "best_val_loss": 0.01863780426286431,
205
+ "epoch": 26,
206
+ "global_step": 109694,
207
+ "train_loss": 0.014139085923416245,
208
+ "val_loss": 0.019486618616969695,
209
+ "val_velocity_mse": 0.019388307728417424
210
+ },
211
+ {
212
+ "best_val_loss": 0.01863780426286431,
213
+ "epoch": 27,
214
+ "global_step": 113913,
215
+ "train_loss": 0.013962219816922406,
216
+ "val_loss": 0.01891431351006627,
217
+ "val_velocity_mse": 0.018772572249686446
218
+ },
219
+ {
220
+ "best_val_loss": 0.01863780426286431,
221
+ "epoch": 28,
222
+ "global_step": 118132,
223
+ "train_loss": 0.013814259375462984,
224
+ "val_loss": 0.018865748732062832,
225
+ "val_velocity_mse": 0.01877909741535195
226
+ },
227
+ {
228
+ "best_val_loss": 0.01845446058255094,
229
+ "epoch": 29,
230
+ "global_step": 122351,
231
+ "train_loss": 0.013589550947192566,
232
+ "val_loss": 0.01845446058255094,
233
+ "val_velocity_mse": 0.018339544156891926
234
+ },
235
+ {
236
+ "best_val_loss": 0.01845446058255094,
237
+ "epoch": 30,
238
+ "global_step": 126570,
239
+ "train_loss": 0.013435004625586883,
240
+ "val_loss": 0.018775178734878346,
241
+ "val_velocity_mse": 0.01869818495749347
242
+ },
243
+ {
244
+ "best_val_loss": 0.017927906914814704,
245
+ "epoch": 31,
246
+ "global_step": 130789,
247
+ "train_loss": 0.013200156528301383,
248
+ "val_loss": 0.017927906914814704,
249
+ "val_velocity_mse": 0.017874638566366043
250
+ },
251
+ {
252
+ "best_val_loss": 0.017927906914814704,
253
+ "epoch": 32,
254
+ "global_step": 135008,
255
+ "train_loss": 0.01310668048058363,
256
+ "val_loss": 0.018309819042932853,
257
+ "val_velocity_mse": 0.018275553875886745
258
+ },
259
+ {
260
+ "best_val_loss": 0.017927906914814704,
261
+ "epoch": 33,
262
+ "global_step": 139227,
263
+ "train_loss": 0.012972866195715605,
264
+ "val_loss": 0.018503636373941704,
265
+ "val_velocity_mse": 0.018387774342118995
266
+ },
267
+ {
268
+ "best_val_loss": 0.017927906914814704,
269
+ "epoch": 34,
270
+ "global_step": 143446,
271
+ "train_loss": 0.012931580841254321,
272
+ "val_loss": 0.019117971031573106,
273
+ "val_velocity_mse": 0.01907257352824579
274
+ },
275
+ {
276
+ "best_val_loss": 0.017927906914814704,
277
+ "epoch": 35,
278
+ "global_step": 147665,
279
+ "train_loss": 0.01262996628631942,
280
+ "val_loss": 0.018617702523188822,
281
+ "val_velocity_mse": 0.018537213953871177
282
+ },
283
+ {
284
+ "best_val_loss": 0.017927906914814704,
285
+ "epoch": 36,
286
+ "global_step": 151884,
287
+ "train_loss": 0.012559264660006092,
288
+ "val_loss": 0.01829620239648547,
289
+ "val_velocity_mse": 0.01820652960821478
290
+ },
291
+ {
292
+ "best_val_loss": 0.017927906914814704,
293
+ "epoch": 37,
294
+ "global_step": 156103,
295
+ "train_loss": 0.012401056233559507,
296
+ "val_loss": 0.01799670454394668,
297
+ "val_velocity_mse": 0.01792410507312676
298
+ },
299
+ {
300
+ "best_val_loss": 0.017927906914814704,
301
+ "epoch": 38,
302
+ "global_step": 160322,
303
+ "train_loss": 0.012327932121338552,
304
+ "val_loss": 0.018183529605346322,
305
+ "val_velocity_mse": 0.01807728126796006
306
+ },
307
+ {
308
+ "best_val_loss": 0.017927906914814704,
309
+ "epoch": 39,
310
+ "global_step": 164541,
311
+ "train_loss": 0.012218607810788823,
312
+ "val_loss": 0.01806522283141118,
313
+ "val_velocity_mse": 0.01798392593962893
314
+ },
315
+ {
316
+ "best_val_loss": 0.017927906914814704,
317
+ "epoch": 40,
318
+ "global_step": 168760,
319
+ "train_loss": 0.012007822082507107,
320
+ "val_loss": 0.018169880389168398,
321
+ "val_velocity_mse": 0.018171396032015463
322
+ },
323
+ {
324
+ "best_val_loss": 0.017927906914814704,
325
+ "epoch": 41,
326
+ "global_step": 172979,
327
+ "train_loss": 0.011967390129781074,
328
+ "val_loss": 0.017935370404108454,
329
+ "val_velocity_mse": 0.01786259362406568
330
+ },
331
+ {
332
+ "best_val_loss": 0.017927906914814704,
333
+ "epoch": 42,
334
+ "global_step": 177198,
335
+ "train_loss": 0.01175453150514659,
336
+ "val_loss": 0.01834996097357765,
337
+ "val_velocity_mse": 0.0182461737623331
338
+ },
339
+ {
340
+ "best_val_loss": 0.017927906914814704,
341
+ "epoch": 43,
342
+ "global_step": 181417,
343
+ "train_loss": 0.011790214158867449,
344
+ "val_loss": 0.018066336671863473,
345
+ "val_velocity_mse": 0.01797330983008927
346
+ },
347
+ {
348
+ "best_val_loss": 0.017927906914814704,
349
+ "epoch": 44,
350
+ "global_step": 185636,
351
+ "train_loss": 0.011659870573177555,
352
+ "val_loss": 0.018028129656453614,
353
+ "val_velocity_mse": 0.017978237838105066
354
+ },
355
+ {
356
+ "best_val_loss": 0.017851904242126737,
357
+ "epoch": 45,
358
+ "global_step": 189855,
359
+ "train_loss": 0.01151867015307147,
360
+ "val_loss": 0.017851904242126737,
361
+ "val_velocity_mse": 0.01775320437796382
362
+ },
363
+ {
364
+ "best_val_loss": 0.017534218672072208,
365
+ "epoch": 46,
366
+ "global_step": 194074,
367
+ "train_loss": 0.011408890792439973,
368
+ "val_loss": 0.017534218672072208,
369
+ "val_velocity_mse": 0.017501561924803264
370
+ },
371
+ {
372
+ "best_val_loss": 0.017534218672072208,
373
+ "epoch": 47,
374
+ "global_step": 198293,
375
+ "train_loss": 0.011332371521036534,
376
+ "val_loss": 0.018026406452782563,
377
+ "val_velocity_mse": 0.017964028369591656
378
+ },
379
+ {
380
+ "best_val_loss": 0.017534218672072208,
381
+ "epoch": 48,
382
+ "global_step": 202512,
383
+ "train_loss": 0.011249471013550122,
384
+ "val_loss": 0.018014545434279675,
385
+ "val_velocity_mse": 0.017935520937559065
386
+ },
387
+ {
388
+ "best_val_loss": 0.017534218672072208,
389
+ "epoch": 49,
390
+ "global_step": 206731,
391
+ "train_loss": 0.011179602435192004,
392
+ "val_loss": 0.018949583041241398,
393
+ "val_velocity_mse": 0.01884937141937559
394
+ },
395
+ {
396
+ "best_val_loss": 0.017534218672072208,
397
+ "epoch": 50,
398
+ "global_step": 210950,
399
+ "train_loss": 0.011112038898307138,
400
+ "val_loss": 0.018457344781333353,
401
+ "val_velocity_mse": 0.018436944999569244
402
+ }
403
+ ]
404
+ }
validation_results.json ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "environment": {
3
+ "device": "mps",
4
+ "numpy": "2.5.1",
5
+ "python": "3.12.2",
6
+ "scipy": "1.18.0",
7
+ "torch": "2.5.1"
8
+ },
9
+ "pulses": 1000,
10
+ "reference_comparison": {
11
+ "copra_hann_direct_final_pulse_mae": {
12
+ "absolute_error": 1.8179416860775177e-09,
13
+ "expected": 0.3344596439450979,
14
+ "observed": 0.3344596457630396,
15
+ "passed": true,
16
+ "tolerance": 0.0001
17
+ },
18
+ "predicted_pulse_mae": {
19
+ "absolute_error": 8.795470464978417e-06,
20
+ "expected": 0.0674247687458992,
21
+ "observed": 0.06741597327543422,
22
+ "passed": true,
23
+ "tolerance": 0.0001
24
+ },
25
+ "predicted_trace_ssim": {
26
+ "absolute_error": 3.990351403748704e-07,
27
+ "expected": 0.9102954186510317,
28
+ "observed": 0.9102958176861721,
29
+ "passed": true,
30
+ "tolerance": 0.0001
31
+ },
32
+ "source_pulse_mae": {
33
+ "absolute_error": 1.2144446004391796e-09,
34
+ "expected": 0.46853104860335587,
35
+ "observed": 0.46853104738891127,
36
+ "passed": true,
37
+ "tolerance": 0.0001
38
+ },
39
+ "source_trace_ssim": {
40
+ "absolute_error": 0.0,
41
+ "expected": 0.9709196563363075,
42
+ "observed": 0.9709196563363075,
43
+ "passed": true,
44
+ "tolerance": 0.0001
45
+ },
46
+ "target_trace_ssim": {
47
+ "absolute_error": 0.0,
48
+ "expected": 0.927486524318055,
49
+ "observed": 0.927486524318055,
50
+ "passed": true,
51
+ "tolerance": 0.0001
52
+ }
53
+ },
54
+ "reference_status": "passed",
55
+ "solver": "64-step Euler",
56
+ "source_kind": "copra_final"
57
+ }