diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d913163eb1df5f4af49ab81ce0f0654287a856aa --- /dev/null +++ b/README.md @@ -0,0 +1,165 @@ +--- +license: cc-by-4.0 +library_name: mpac +tags: + - biology + - genomics + - dna + - mpra + - cis-regulatory + - variant-effect-prediction +pipeline_tag: other +--- + +# MPAC: Malinois with Parallel Aggregated Cross-validation + +MPAC predicts cis-regulatory activity of 200 bp human DNA sequences in three cell +lines (K562, HepG2, SK-N-SH), and the allelic skew caused by non-coding variants. +It is a convolutional network trained on massively parallel reporter assay (MPRA) +measurements from 776,474 sequences. + +This repository holds the **110 MPAC checkpoints**. The autosomes are split into 11 +pairs whose chromosome numbers sum to 23 (chr1+chr22, chr2+chr21, ... chr11+chr12). +Each pair is held out as a test fold for 10 models that differ in which pair was +used for validation, giving 11 x 10 = 110 models under `crossval/`. + +All 110 share one architecture (`BassetBranched`, 4,110,587 parameters) described by +the single `config.json`. + +## Why there is no default model + +Every MPAC checkpoint is tied to a chromosome fold, so there is deliberately no +`model.safetensors` at the repository root. Scoring a sequence with a fold that +trained on its chromosome leaks training data and inflates accuracy, and it does so +silently -- nothing errors, the numbers just get better than they should be. +Nominating one checkpoint as "the" model would make that the default behaviour. + +The correct ensemble for a query is the fold whose **test** chromosomes contain the +query's source chromosome; its 10 replicate predictions are averaged. +`MPACEnsemble.from_pretrained` picks it for you, and `provenance.json` records the +test and validation chromosomes for every file. + +Only autosomes are covered. Sequences on chrX, chrY, or outside the human genome +have no held-out fold; `from_pretrained` raises rather than guessing. + +## Usage + +```python +from modeling_mpac import MPACEnsemble + +# The ten models that never saw chr7 during training +ensemble = MPACEnsemble.from_pretrained("", chromosome=7, device="cuda") + +sequences = ["ACGT" * 50, "TTGC" * 50] # 200 bp each +preds = ensemble.predict(sequences, device="cuda") # (2, 3) tensor +print(dict(zip(ensemble.output_names, preds[0].tolist()))) +``` + +`predict` handles the two steps that are easy to get wrong, and that produce +plausible-looking but incorrect numbers when omitted: + +1. **MPRA vector context.** The models were trained on the full 600 bp construct, not + a bare 200mer. `predict` pads each sequence with the flanking plasmid sequence + (`MPRA_UPSTREAM` / `MPRA_DOWNSTREAM`). If you call the model directly you must + supply a `(batch, 4, 600)` tensor yourself, e.g. via `add_flanks(x)`. +2. **Reverse-complement averaging.** Predictions are averaged over the forward strand + and the reverse complement. The flip is applied to the **flanked 600 bp tensor**, + not to the bare insert -- flipping the insert and then attaching + forward-orientation flanks is not a reverse complement, and costs about 0.05 + Pearson. Disable with `rc_average=False` only if you know why. + +Allelic skew for a variant is the difference in predicted activity between the +alternate and reference sequence. The preprint averages 18 sliding 200 bp windows +placed at 10 bp increments around the variant; a single variant-centred window is +used when reproducing empirical MPRA measurements directly. See +[john-c-butts/MPAC](https://github.com/john-c-butts/MPAC) for that tooling. + +## Outputs + +Three values per sequence, in the order `["K562", "HepG2", "SKNSH"]`, on the scale of +MPRA activity log2 fold-change. They are not probabilities and are not calibrated +across cell types. + +## Verified performance + +Predicted vs empirical MPRA activity across all 754,588 length-200 sequences on +covered chromosomes, each scored by the ensemble that held its chromosome out: + +| Cell type | Pearson r | Preprint (Fig. 1B) | +| --- | --- | --- | +| K562 | 0.892 | 0.89 | +| HepG2 | 0.888 | 0.89 | +| SK-N-SH | 0.879 | 0.88 | + +Applying an activity-noise filter raises these (row-wise `lfcSE < 0.5` gives +0.909 / 0.906 / 0.902 at n = 639,806). Reproduce with `verify.py`. + +The inference path (flanking, reverse-complement averaging, one-hot encoding) was +separately checked against an independent implementation on the chr7+chr13 test set +and agrees to five decimal places in both Pearson and Spearman correlation. + +## Limitations + +- Trained on episomal reporter activity in three immortalized cell lines. Predictions + are a model of the assay, not of endogenous expression in tissue. +- The 200 bp variable region is the entire input. Long-range regulatory context, + chromatin state, and cell types outside the three assayed lines are out of scope. +- Accuracy on sequences unlike the training library (non-human, heavily repetitive, + extreme GC) is uncharacterized. + +## Provenance + +The 110 checkpoints were trained by the authors of the preprint below and deposited +at [Zenodo](https://doi.org/10.5281/zenodo.15178434). This repository is a +repackaging: weights are converted from the original `torch_checkpoint.pt` pickles to +safetensors, with no retraining or modification. All 110 files here were confirmed +byte-identical to the Zenodo deposit before conversion, and every converted +checkpoint reproduces the original `boda` loader bitwise. `provenance.json` maps each +file to its original source path, training timestamp, and chromosome split. + +The architecture originates with Malinois in +[sjgosai/boda2](https://github.com/sjgosai/boda2). MPAC variant-effect tooling lives +at [john-c-butts/MPAC](https://github.com/john-c-butts/MPAC) and +[Reilly-Lab-Yale/MPAC_gnomAD_and_satmut](https://github.com/Reilly-Lab-Yale/MPAC_gnomAD_and_satmut). + +## License + +**CC-BY-4.0**, matching the Zenodo deposit these checkpoints are published under. +Use them for any purpose, including commercially, with attribution to the paper +below. + +`modeling_mpac.py` is derived from the model-definition code in +[sjgosai/boda2](https://github.com/sjgosai/boda2), which is MIT licensed, and it +retains that notice. MIT permits redistribution here; the CC-BY-4.0 term above +governs the weights. + +## Citation + +```bibtex +@article{butts2025mpac, + title = {Identifying non-coding variant effects at scale via machine learning + models of cis-regulatory reporter assays}, + author = {Butts, John C. and Rong, Stephen and Gosai, Sager J. and + Castro, Rodrigo I. and Noon, Mackenzie and Adeniran, Kehinde and + Ghosh, Rohit and Sabeti, Pardis C. and Tewhey, Ryan and Reilly, Steven K.}, + journal = {bioRxiv}, + year = {2025}, + doi = {10.1101/2025.04.16.648420} +} +``` + +Malinois and the CODA framework: + +```bibtex +@article{gosai2024coda, + title = {Machine-guided design of cell-type-targeting cis-regulatory elements}, + author = {Gosai, Sager J. and Castro, Rodrigo I. and Fuentes, Natalia and + Butts, John C. and Mouri, Kousuke and Alasoadura, Michael and + Kales, Susan and Nguyen, Thanh Thanh L. and Noche, Ramil R. and + Rao, Arya S. and Joy, Mary T. and Sabeti, Pardis C. and + Reilly, Steven K. and Tewhey, Ryan}, + journal = {Nature}, + year = {2024}, + doi = {10.1038/s41586-024-08070-z} +} +``` diff --git a/config.json b/config.json new file mode 100644 index 0000000000000000000000000000000000000000..ae5da5c6062deba50b9a9172310cb87eac7f0c42 --- /dev/null +++ b/config.json @@ -0,0 +1,26 @@ +{ + "branched_activation": "ReLU", + "branched_channels": 140, + "branched_dropout_p": 0.5757068086404574, + "conv1_channels": 300, + "conv1_kernel_size": 19, + "conv2_channels": 200, + "conv2_kernel_size": 11, + "conv3_channels": 200, + "conv3_kernel_size": 7, + "input_len": 600, + "linear_activation": "ReLU", + "linear_channels": 1000, + "linear_dropout_p": 0.11625456877954289, + "n_branched_layers": 3, + "n_linear_layers": 1, + "n_outputs": 3, + "output_names": [ + "K562", + "HepG2", + "SKNSH" + ], + "use_batch_norm": true, + "use_weight_norm": false, + "variable_region_len": 200 +} \ No newline at end of file diff --git a/crossval/test_10_13/val_11_12.safetensors b/crossval/test_10_13/val_11_12.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..7a3985bb16e27c4feeda17fab9260bac57dded7e --- /dev/null +++ b/crossval/test_10_13/val_11_12.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4edafa0b53b6ca2a12947c2b6521244103e273cd5e836e2bd12bbc8fe064bc3 +size 16445652 diff --git a/crossval/test_10_13/val_1_22.safetensors b/crossval/test_10_13/val_1_22.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..0dfa58741a5cf0290d52ce070456bdf89a9c4aa7 --- /dev/null +++ b/crossval/test_10_13/val_1_22.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ba7e8c743088b9769101fdeb9e00381fa3ce94aa14da28cbdae22de8f1cee15 +size 16445652 diff --git a/crossval/test_10_13/val_2_21.safetensors b/crossval/test_10_13/val_2_21.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..f10ab23fc9bb70f6de385e724dae597835121f7e --- /dev/null +++ b/crossval/test_10_13/val_2_21.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0264699c0a598bb54f3c972886262fcdea1791742af06ac8b9683705f9ccfc48 +size 16445652 diff --git a/crossval/test_10_13/val_3_20.safetensors b/crossval/test_10_13/val_3_20.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..f6276c2e7616d874ec40a53090ce94b5751a54c1 --- /dev/null +++ b/crossval/test_10_13/val_3_20.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be78b35c3e0b457f747eded7d144052c0dd48f0d1aad9165360bd7aadeedfa6a +size 16445652 diff --git a/crossval/test_10_13/val_4_19.safetensors b/crossval/test_10_13/val_4_19.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..4c5bf590bad05003c2ea3232ef24b8eef00f65be --- /dev/null +++ b/crossval/test_10_13/val_4_19.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff7cb36fd02f103b196c94ea2bad9a0daaea3115797403a497a998ffc03b076c +size 16445652 diff --git a/crossval/test_10_13/val_5_18.safetensors b/crossval/test_10_13/val_5_18.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..caf8ed0cb98e259e0c8d7fd4cfe4069ba3e45722 --- /dev/null +++ b/crossval/test_10_13/val_5_18.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8bd32450188a58640638ed103534cc2af70461f1d152f6b7c5ba02f52ed1eff +size 16445652 diff --git a/crossval/test_10_13/val_6_17.safetensors b/crossval/test_10_13/val_6_17.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..ee879e54070f37a929e197da9be47fa2042370c3 --- /dev/null +++ b/crossval/test_10_13/val_6_17.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d850c7142c017e443b4acdc6eab96ab7a06cd9ff16ff0eed81c13b662c986d5a +size 16445652 diff --git a/crossval/test_10_13/val_7_16.safetensors b/crossval/test_10_13/val_7_16.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..2b5d27769b94b81467cfadc6ae06f7b98df0033b --- /dev/null +++ b/crossval/test_10_13/val_7_16.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e827aeb905e101e41e5c0c04ae5acd25d6164effaa4110011dc40b0dac8f425 +size 16445652 diff --git a/crossval/test_10_13/val_8_15.safetensors b/crossval/test_10_13/val_8_15.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..c2fab1b868792daf71ccbd9ba4fce680be3a0ccf --- /dev/null +++ b/crossval/test_10_13/val_8_15.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:639d9a83be65c08312fdaa682d361597e975b070ecd2e637232aa067984c4704 +size 16445652 diff --git a/crossval/test_10_13/val_9_14.safetensors b/crossval/test_10_13/val_9_14.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..5973515404dd6b6f19ef0c69d91b49b80ff9ad9d --- /dev/null +++ b/crossval/test_10_13/val_9_14.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5dcdb66222aa6219e3d38d718be45de98836121e13ac072b4771d4f4904cd1dd +size 16445652 diff --git a/crossval/test_11_12/val_10_13.safetensors b/crossval/test_11_12/val_10_13.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..4c1480080b38a6c06527d2ea4e72c33340c879f0 --- /dev/null +++ b/crossval/test_11_12/val_10_13.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f21c981063fb0989036d6cda2890f78bffa821063f3a839c965bde1c33dd5f05 +size 16445652 diff --git a/crossval/test_11_12/val_1_22.safetensors b/crossval/test_11_12/val_1_22.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..7bff1d97b0ce491bb2708cba9242f0268aab43d6 --- /dev/null +++ b/crossval/test_11_12/val_1_22.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46889bc9ff68f71cbdce7542a0a35e13da3b8b1b84ec02c91d4e086e64603e3e +size 16445652 diff --git a/crossval/test_11_12/val_2_21.safetensors b/crossval/test_11_12/val_2_21.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..14e101dc0537113951a530368b848947bbe19683 --- /dev/null +++ b/crossval/test_11_12/val_2_21.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36757d938e610443e898292cdd3861ab30f91f907a2e68daae28e55c3131e202 +size 16445652 diff --git a/crossval/test_11_12/val_3_20.safetensors b/crossval/test_11_12/val_3_20.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..e9b3cdb1f78cf54caebaf5ff6e41054dca8506fa --- /dev/null +++ b/crossval/test_11_12/val_3_20.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce70e5af301aa9d64343e266003c62d13f4a3f63f48ab918475c348d11fcadd7 +size 16445652 diff --git a/crossval/test_11_12/val_4_19.safetensors b/crossval/test_11_12/val_4_19.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..34cde7625437685e37a7b09a16d1eb043b346cf2 --- /dev/null +++ b/crossval/test_11_12/val_4_19.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:971767fe36688e4708b0bc85cf119c0eb9c1787c3b3dfcb583fe72fce2a0b511 +size 16445652 diff --git a/crossval/test_11_12/val_5_18.safetensors b/crossval/test_11_12/val_5_18.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..f3c4ad41c2f7599192ce9e40276a9f1c8d26a407 --- /dev/null +++ b/crossval/test_11_12/val_5_18.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20191dcdc37479cbb94948c617e3fc07edce4680537039e4e1898e76c91d674d +size 16445652 diff --git a/crossval/test_11_12/val_6_17.safetensors b/crossval/test_11_12/val_6_17.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..b2cff642c05b2992cd9b97f69241b52aeeb46e0f --- /dev/null +++ b/crossval/test_11_12/val_6_17.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b506ac488d8c9c4c655dd7a82870021ac56eafcc93fa59d8e6e93caacba50409 +size 16445652 diff --git a/crossval/test_11_12/val_7_16.safetensors b/crossval/test_11_12/val_7_16.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..2dc3a3f570adccc967140022a20a7e1a7ec4ff62 --- /dev/null +++ b/crossval/test_11_12/val_7_16.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bff9e3e1b12666b6c5e4c2fddbfc2082a541f2c3325377ccebbd83298f497419 +size 16445652 diff --git a/crossval/test_11_12/val_8_15.safetensors b/crossval/test_11_12/val_8_15.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..9bdc3e9197d1b9daa26ca0aa2b679aa33d78f9f4 --- /dev/null +++ b/crossval/test_11_12/val_8_15.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:554423caab7027a16c6db80ee2081333e8d89292f6dd55ed56ca3033ca1603ea +size 16445652 diff --git a/crossval/test_11_12/val_9_14.safetensors b/crossval/test_11_12/val_9_14.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..4d5e03dc6b4e10c02b4af71074b2f79f2f645d3c --- /dev/null +++ b/crossval/test_11_12/val_9_14.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e46f7d52b63702177a20a95edafaa8e786b44a7905c0073f9fc6ed6e44424db6 +size 16445652 diff --git a/crossval/test_1_22/val_10_13.safetensors b/crossval/test_1_22/val_10_13.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..6fe16e258302c7de92ac922289ec0e3f92e265d4 --- /dev/null +++ b/crossval/test_1_22/val_10_13.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f51aa6c9daad5ebcd57a9a37294a365b02e58609b26b1738a397274aa7dd432 +size 16445652 diff --git a/crossval/test_1_22/val_11_12.safetensors b/crossval/test_1_22/val_11_12.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..3054ef3e764322436c09973d55c7ccd81e768a81 --- /dev/null +++ b/crossval/test_1_22/val_11_12.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb278df1ba736d9ea3b208bd77c27bc2bccd5c9a28188b9627a060eea3873ef4 +size 16445652 diff --git a/crossval/test_1_22/val_2_21.safetensors b/crossval/test_1_22/val_2_21.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..77c3c50ebbee72bb9996236972266c4e23bf07db --- /dev/null +++ b/crossval/test_1_22/val_2_21.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e5a94110ab1e9c6bfa89039d74cd689b3158c354653aaee3e540ad09c38651b +size 16445652 diff --git a/crossval/test_1_22/val_3_20.safetensors b/crossval/test_1_22/val_3_20.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..ca11097beb72fcd1968fcdc52d94365075f85af2 --- /dev/null +++ b/crossval/test_1_22/val_3_20.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1e52be65ea30acbc21ce9eb134a48e1d4bd9a22d626cc9a58ccc1f2bc3157b2 +size 16445652 diff --git a/crossval/test_1_22/val_4_19.safetensors b/crossval/test_1_22/val_4_19.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..15fa2a19da6a1a0c45b0ef0f1ddf9106710aa1a4 --- /dev/null +++ b/crossval/test_1_22/val_4_19.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2d1b556a765cf6671a820cd93bcf00d56771e1ef8ec1ad44c573868c6949fe5 +size 16445652 diff --git a/crossval/test_1_22/val_5_18.safetensors b/crossval/test_1_22/val_5_18.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..40f098c1c26c7a1a18decb8e30f433f6644c69b1 --- /dev/null +++ b/crossval/test_1_22/val_5_18.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a4d2fee3a61e858768e43f7cdcd58c59a78f55afcd0a7972eed11776a19acdb +size 16445652 diff --git a/crossval/test_1_22/val_6_17.safetensors b/crossval/test_1_22/val_6_17.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..53d0ae2d5b4f007405a98ca1040abb28f6882425 --- /dev/null +++ b/crossval/test_1_22/val_6_17.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:afe9b89c183118a1d574be81870eb9cfaa64784d2e142932c52af05ac995b811 +size 16445652 diff --git a/crossval/test_1_22/val_7_16.safetensors b/crossval/test_1_22/val_7_16.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..772968a158c52c2b46354ec0c5dfe67a90dd2dd2 --- /dev/null +++ b/crossval/test_1_22/val_7_16.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c347a5b62e6b29171fdf34747b95c88dd0e016b8a2f4a04147b1e5101f01f4c5 +size 16445652 diff --git a/crossval/test_1_22/val_8_15.safetensors b/crossval/test_1_22/val_8_15.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..fbaa7fb45c4dd287b14d7bd139e21d153ef2d207 --- /dev/null +++ b/crossval/test_1_22/val_8_15.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5af860532e6df1804fb875e6f346ab7cc6ffaf18f137d6718b5eca2547476bb0 +size 16445652 diff --git a/crossval/test_1_22/val_9_14.safetensors b/crossval/test_1_22/val_9_14.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..c56bce04066c508a3ff7df1d0f311157e5e34cd8 --- /dev/null +++ b/crossval/test_1_22/val_9_14.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43d5ef50852901435ed5f61cfae2690e99d4ea38f3067c3a99d7770f2bce0a44 +size 16445652 diff --git a/crossval/test_2_21/val_10_13.safetensors b/crossval/test_2_21/val_10_13.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..8d900b755f6a121bea6cc9a9a075f05cc9f0989a --- /dev/null +++ b/crossval/test_2_21/val_10_13.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff24474f4fc5f7a0e01f9a6d056827ece7a57b8990b0b779d2b711ea94802866 +size 16445652 diff --git a/crossval/test_2_21/val_11_12.safetensors b/crossval/test_2_21/val_11_12.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..cae3d16df61bc7415c64103792fca4646d0c6aae --- /dev/null +++ b/crossval/test_2_21/val_11_12.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08dea24dcca3eed96e2c38363de38c8ccffca9aeb205001964ead8459455b39e +size 16445652 diff --git a/crossval/test_2_21/val_1_22.safetensors b/crossval/test_2_21/val_1_22.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..1c49eba59503235ddcfbefc24a1d9342f8e95484 --- /dev/null +++ b/crossval/test_2_21/val_1_22.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7bb47cd71be84496488e012e5a700c0772a8949423354efa29756cfbf2423b3 +size 16445652 diff --git a/crossval/test_2_21/val_3_20.safetensors b/crossval/test_2_21/val_3_20.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..18cf8a564898f3ea07eecc538d16bc81d6bcb6b0 --- /dev/null +++ b/crossval/test_2_21/val_3_20.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a66d45dd0f12117b1386ad70849f6b617222f07cbff2871b8865df39c42b5aba +size 16445652 diff --git a/crossval/test_2_21/val_4_19.safetensors b/crossval/test_2_21/val_4_19.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..9575f79019fa518a23248ead0c9f17922ba023e6 --- /dev/null +++ b/crossval/test_2_21/val_4_19.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:babc74a57078874ec4efa999a1e86a36522201c2bb2de08060427e7088632c6a +size 16445652 diff --git a/crossval/test_2_21/val_5_18.safetensors b/crossval/test_2_21/val_5_18.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..bc76c11aa14b4593d31d95eca1b7e5b84dce6e85 --- /dev/null +++ b/crossval/test_2_21/val_5_18.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5def7f2aa52b34db37548e2c9b8dd9c2e1bc4d9cbca825e6d3e3aae9fecd3660 +size 16445652 diff --git a/crossval/test_2_21/val_6_17.safetensors b/crossval/test_2_21/val_6_17.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..2054260f9ff61233f0ddcddf6867d6b2f7296cf9 --- /dev/null +++ b/crossval/test_2_21/val_6_17.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f9fb591d248e2fb5b3caf30b606feee3056990908b0bdd8378d485d8d2c477a +size 16445652 diff --git a/crossval/test_2_21/val_7_16.safetensors b/crossval/test_2_21/val_7_16.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..ea6fbd675e9e1fa5841fb181824049795cfb285b --- /dev/null +++ b/crossval/test_2_21/val_7_16.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c15407a665a4ef5819b9e038a3ee374f5d42aaf767bea764dea913db0b611f0b +size 16445652 diff --git a/crossval/test_2_21/val_8_15.safetensors b/crossval/test_2_21/val_8_15.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..e0246104dc2da49c6779291dd66fb3d5d6592cce --- /dev/null +++ b/crossval/test_2_21/val_8_15.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89087c9af0956e26664bf1d3bd804216394292e85ae6dff8d12369dafac858eb +size 16445652 diff --git a/crossval/test_2_21/val_9_14.safetensors b/crossval/test_2_21/val_9_14.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..285300d7cc450f7674a306903719b91c595356c7 --- /dev/null +++ b/crossval/test_2_21/val_9_14.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73b76f1a25ab6e8353b8ba60cb8a05417f6604637eb5f75f78853735a86a759e +size 16445652 diff --git a/crossval/test_3_20/val_10_13.safetensors b/crossval/test_3_20/val_10_13.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..d6f94cc0366046f0e0322ccd4752e6ca86c45799 --- /dev/null +++ b/crossval/test_3_20/val_10_13.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a04999edbbd45cfe305368ff814ff0e9c83c154111dd160ea142cd292f3a940 +size 16445652 diff --git a/crossval/test_3_20/val_11_12.safetensors b/crossval/test_3_20/val_11_12.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..b4534bf7b2d19fcf4bb496be2fe8a8b81f62d48f --- /dev/null +++ b/crossval/test_3_20/val_11_12.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:258fdbcc5c368cda367c82fa73357565276140e3b4f33af614fd25d62253ffb3 +size 16445652 diff --git a/crossval/test_3_20/val_1_22.safetensors b/crossval/test_3_20/val_1_22.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..eb0c011736372fabf45ec6d3202b5faaeb594ee9 --- /dev/null +++ b/crossval/test_3_20/val_1_22.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7ca76d95d70b6ae1e5d3bb4a785dfad92285773941baec984f57a22978a4887 +size 16445652 diff --git a/crossval/test_3_20/val_2_21.safetensors b/crossval/test_3_20/val_2_21.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..8804b4dc99e743c3834cacee67be16c13705a26b --- /dev/null +++ b/crossval/test_3_20/val_2_21.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:049cb28366427f3323af6b27e5256b772cb5c6b779a05a5b5557aa4d639de27c +size 16445652 diff --git a/crossval/test_3_20/val_4_19.safetensors b/crossval/test_3_20/val_4_19.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..a2895bf627cd97006fb1b7df12c3b13cb15b78f0 --- /dev/null +++ b/crossval/test_3_20/val_4_19.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9733c13c420a2a50cba26f9b8aeea516c782854b844f20d8b2d5b3057dc0906 +size 16445652 diff --git a/crossval/test_3_20/val_5_18.safetensors b/crossval/test_3_20/val_5_18.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..71687757547f8408044ab413fb5e3274c1241061 --- /dev/null +++ b/crossval/test_3_20/val_5_18.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:418d7333c14d70afee24f2ece1aff43cf00497930d89afa413f239557818291f +size 16445652 diff --git a/crossval/test_3_20/val_6_17.safetensors b/crossval/test_3_20/val_6_17.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..90ca64f8eab4a94ecffe8d8eeb343fa37b0ce4bf --- /dev/null +++ b/crossval/test_3_20/val_6_17.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67ed2ee69d23350ff6b159272eee3a16d53664bb8d07ec640c530069c993576b +size 16445652 diff --git a/crossval/test_3_20/val_7_16.safetensors b/crossval/test_3_20/val_7_16.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..bd968b502d82ebe128703f27e2ff89b11ed40240 --- /dev/null +++ b/crossval/test_3_20/val_7_16.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04f1cefd40405b7b5b318944e3a3c275744e540a0ec8a877587ad1bfea41cb32 +size 16445652 diff --git a/crossval/test_3_20/val_8_15.safetensors b/crossval/test_3_20/val_8_15.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..78e0c6287418acffd6941f15ae4e06eefda68ad4 --- /dev/null +++ b/crossval/test_3_20/val_8_15.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28ecfabee8967a2bcb3e09db2304ec095432f110d7b5d53b0e3cce087ed471b0 +size 16445652 diff --git a/crossval/test_3_20/val_9_14.safetensors b/crossval/test_3_20/val_9_14.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..04a9e9714ae7c5d964a7de990890b8de11ad9c54 --- /dev/null +++ b/crossval/test_3_20/val_9_14.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3352f300c2e5ccbbceae53a91606a3d4c661f9485d95c0365f5892a107088697 +size 16445652 diff --git a/crossval/test_4_19/val_10_13.safetensors b/crossval/test_4_19/val_10_13.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..22d893d5d1b18c8bede2ba4fda915b4f1823f225 --- /dev/null +++ b/crossval/test_4_19/val_10_13.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c0e3520d01f3626b7c765a391ae2d7d1499917da82649ed1a86110368e51886 +size 16445652 diff --git a/crossval/test_4_19/val_11_12.safetensors b/crossval/test_4_19/val_11_12.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..0c9613e503a0f1f524ab6dc1c9b4be311119233a --- /dev/null +++ b/crossval/test_4_19/val_11_12.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:439ed8dab77f4994a898659570b800d739fda27aa5fa6bf7a745ee0764fc671d +size 16445652 diff --git a/crossval/test_4_19/val_1_22.safetensors b/crossval/test_4_19/val_1_22.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..7d2afd8d034a91c33b1c8293e36179fb9fa56fd4 --- /dev/null +++ b/crossval/test_4_19/val_1_22.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7470fd3f67528f0d8119dc210bdbf5dd79fc78060756e1505310df2b8b17a96e +size 16445652 diff --git a/crossval/test_4_19/val_2_21.safetensors b/crossval/test_4_19/val_2_21.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..d2908743912418d1ae8e503225fc2bb041c94d07 --- /dev/null +++ b/crossval/test_4_19/val_2_21.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c6988f3ab2a5ad0099c7f7acbb26b72e0d50f02c0da625d7de2cfca90b431b7 +size 16445652 diff --git a/crossval/test_4_19/val_3_20.safetensors b/crossval/test_4_19/val_3_20.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..e4ac3eacdc192e6cb13993a799ae9f7940d36bd0 --- /dev/null +++ b/crossval/test_4_19/val_3_20.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40f54faeb548b88fcf512bfcc12bd9edce6fac687c3009bf5c1bf9c4095c6e4e +size 16445652 diff --git a/crossval/test_4_19/val_5_18.safetensors b/crossval/test_4_19/val_5_18.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..9c97251af520e590d4fa0b0a9a2bef54af5159eb --- /dev/null +++ b/crossval/test_4_19/val_5_18.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f75deea685804863402239370a58addff090f0b191686a5167dbb5921f170f2 +size 16445652 diff --git a/crossval/test_4_19/val_6_17.safetensors b/crossval/test_4_19/val_6_17.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..2fffc7152920cc1fb128dbbcb9ce1c4b8a98ac0d --- /dev/null +++ b/crossval/test_4_19/val_6_17.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32e4779afead31a03f5c1d7ecb79fb1253a767293402895fc792c5f1c0ee295a +size 16445652 diff --git a/crossval/test_4_19/val_7_16.safetensors b/crossval/test_4_19/val_7_16.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..644f2ee263de7a4b3342d395bb7292d1c7401dd9 --- /dev/null +++ b/crossval/test_4_19/val_7_16.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:577391f7126dccffd0f54b5db4f400d2195624e793c4b1e7fb49d09287077181 +size 16445652 diff --git a/crossval/test_4_19/val_8_15.safetensors b/crossval/test_4_19/val_8_15.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..5c8730953ba626c0e6c8f2dd20fce30bdf70fc4b --- /dev/null +++ b/crossval/test_4_19/val_8_15.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ffe5cff95ea2a414dbf83f6bee1c78393980147985eccd535af211f13e87bd6 +size 16445652 diff --git a/crossval/test_4_19/val_9_14.safetensors b/crossval/test_4_19/val_9_14.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..8511ca770cb8fe665673bd08501f7c0177624cb1 --- /dev/null +++ b/crossval/test_4_19/val_9_14.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49dfa8e58c328159a0ae3467798b5fbf1a1074f054f62e147e163d90daa2211b +size 16445652 diff --git a/crossval/test_5_18/val_10_13.safetensors b/crossval/test_5_18/val_10_13.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..89a2fc0031cc3e151990670a86b2386785c776d2 --- /dev/null +++ b/crossval/test_5_18/val_10_13.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c74c55637a5421e2494d2a89f8fd01e021cbcc21f137dd58b31ae6ad342c995 +size 16445652 diff --git a/crossval/test_5_18/val_11_12.safetensors b/crossval/test_5_18/val_11_12.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..67a9ec459325ac23f6d62e6859b47b50759b43cb --- /dev/null +++ b/crossval/test_5_18/val_11_12.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c9ed8e3e08ee06362c9f3809a0d5deebe8740ec194aacfec87fa0a62caf3f94 +size 16445652 diff --git a/crossval/test_5_18/val_1_22.safetensors b/crossval/test_5_18/val_1_22.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..19bfa49702064877740fd681894b1c5b72a23173 --- /dev/null +++ b/crossval/test_5_18/val_1_22.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94a8e824b922e573af1de9241434adcf30f772ede4a7d49b11bb8d50cdfba48d +size 16445652 diff --git a/crossval/test_5_18/val_2_21.safetensors b/crossval/test_5_18/val_2_21.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..fe95803659ec356fb4c4e47065c087446213bd9c --- /dev/null +++ b/crossval/test_5_18/val_2_21.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3588274f3a6ea9b67bdda8f683f5b7a3b95af7fce6f401358bdbe3f94c433320 +size 16445652 diff --git a/crossval/test_5_18/val_3_20.safetensors b/crossval/test_5_18/val_3_20.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..14d951bd3462c41e16202b4012199320c1570d78 --- /dev/null +++ b/crossval/test_5_18/val_3_20.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffd46d9eda1ddb9e7aff88f6dcbf6433a13286bbb573131059e492b891940c7c +size 16445652 diff --git a/crossval/test_5_18/val_4_19.safetensors b/crossval/test_5_18/val_4_19.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..6e12cc19153b516af6368d497736265f455c0171 --- /dev/null +++ b/crossval/test_5_18/val_4_19.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a5c949e40b0627207e52acc5dd83743f63fb7873bab85bd6ca095180efcf19b +size 16445652 diff --git a/crossval/test_5_18/val_6_17.safetensors b/crossval/test_5_18/val_6_17.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..606797c07e8dc498f26263395e739cc5c1526ca3 --- /dev/null +++ b/crossval/test_5_18/val_6_17.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4d90bcdc29dd9b6bd11ff55e308571d497808de6584fe146126073527b7ecac +size 16445652 diff --git a/crossval/test_5_18/val_7_16.safetensors b/crossval/test_5_18/val_7_16.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..d517853af0caa252c311e1987cb5e1891af06a7e --- /dev/null +++ b/crossval/test_5_18/val_7_16.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c80f0b5ec73864529fee0b0bd789d9c7d8447e39ad058daba02b8731ba10e490 +size 16445652 diff --git a/crossval/test_5_18/val_8_15.safetensors b/crossval/test_5_18/val_8_15.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..59d0a6b9cf7ebc55c4e761e66d88afdc21589ffc --- /dev/null +++ b/crossval/test_5_18/val_8_15.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2956a99ef56a6c8f56ce3e8ba207aaea1e4ec8fe0d5261efbbdba1c547bd6b9 +size 16445652 diff --git a/crossval/test_5_18/val_9_14.safetensors b/crossval/test_5_18/val_9_14.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..5855d30bbb690860ee938dc6daf6c2ed97b4438e --- /dev/null +++ b/crossval/test_5_18/val_9_14.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35ff955c95656594256a1154daaabc2196a992ca8fb50c3378e7e3f7d362f6d1 +size 16445652 diff --git a/crossval/test_6_17/val_10_13.safetensors b/crossval/test_6_17/val_10_13.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..de24c40e662ec76cb356ae0abcbbe426e7a69003 --- /dev/null +++ b/crossval/test_6_17/val_10_13.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8b842efe227322328fdd99abc4456f22eb3a7f40d1324d02568a77b3f05f43c +size 16445652 diff --git a/crossval/test_6_17/val_11_12.safetensors b/crossval/test_6_17/val_11_12.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..49818ad91f8a10cec3f2328901bcebb7b0f9f94e --- /dev/null +++ b/crossval/test_6_17/val_11_12.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:447e41e7061cba1dc0227e09a9005d73fc2dc7e1e168158873829c09e9c78fb1 +size 16445652 diff --git a/crossval/test_6_17/val_1_22.safetensors b/crossval/test_6_17/val_1_22.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..4f039cc97baa681d8c29b25bd14ed2ef6114100c --- /dev/null +++ b/crossval/test_6_17/val_1_22.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc291dc34db2a102824230e8bc5bb71c88ba9fa15d553a2af1c45f51cb321367 +size 16445652 diff --git a/crossval/test_6_17/val_2_21.safetensors b/crossval/test_6_17/val_2_21.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..8112d6d0fc4204b54d3f61de239119289b5053a0 --- /dev/null +++ b/crossval/test_6_17/val_2_21.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a3fc5b909d5a5446ea0be1e44245df3422478d75357b68c6dce7fb88d8eec19 +size 16445652 diff --git a/crossval/test_6_17/val_3_20.safetensors b/crossval/test_6_17/val_3_20.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..f41564bd8cad130abbe79da9dbe16f7186c96096 --- /dev/null +++ b/crossval/test_6_17/val_3_20.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9cf4d7e7ba41778f23186afe2124f1bfa5bdceac73eedebc5b57ae48f2e2454b +size 16445652 diff --git a/crossval/test_6_17/val_4_19.safetensors b/crossval/test_6_17/val_4_19.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..17484c9c3d6060bc423c7838834ef070f8e6f666 --- /dev/null +++ b/crossval/test_6_17/val_4_19.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2859e00662b87e0bde03847ab27b630f7b73d72fcff4badab055fd9ce4b443cf +size 16445652 diff --git a/crossval/test_6_17/val_5_18.safetensors b/crossval/test_6_17/val_5_18.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..eb35a137e4c5ee771a1ff07658d495b71b8866f9 --- /dev/null +++ b/crossval/test_6_17/val_5_18.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae74ede3a4279054d4871a25e056d0e84453daa52fea876b2ef1a2dac7ae0f0b +size 16445652 diff --git a/crossval/test_6_17/val_7_16.safetensors b/crossval/test_6_17/val_7_16.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..e10394d077b53563e3a6269d6e45adb3b3e1917d --- /dev/null +++ b/crossval/test_6_17/val_7_16.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f486dad2751649ecff9f4d9393cedbad4f899b701a4b91018fc93df8b4ae0e36 +size 16445652 diff --git a/crossval/test_6_17/val_8_15.safetensors b/crossval/test_6_17/val_8_15.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..1a52a265e2b4d69f53a72bed5b327fae51cf8360 --- /dev/null +++ b/crossval/test_6_17/val_8_15.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbc05ea87d80d8139fd4c33ee778c9df4f0346924e31de82447ce82c8a97d628 +size 16445652 diff --git a/crossval/test_6_17/val_9_14.safetensors b/crossval/test_6_17/val_9_14.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..97220ddd46bc24ae8e9f0d6636bddfd82e0dd781 --- /dev/null +++ b/crossval/test_6_17/val_9_14.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:004b4dd87e150378ca06da38f0547fafc9496c5d783c6335de0964cd657fc66c +size 16445652 diff --git a/crossval/test_7_16/val_10_13.safetensors b/crossval/test_7_16/val_10_13.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..0361c8b19b2e24c951c7b4994d21df18884542e8 --- /dev/null +++ b/crossval/test_7_16/val_10_13.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d933fd290b3703b5a2e1959abfac139c5a4265771191769f15a77babcef6599 +size 16445652 diff --git a/crossval/test_7_16/val_11_12.safetensors b/crossval/test_7_16/val_11_12.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..3a5e8ff12e2470181de2b8c7a4e28fe957f96bd3 --- /dev/null +++ b/crossval/test_7_16/val_11_12.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a7b7611ef2bd525d3ef804386d7b52b0880fd1a3d525881e0351f4f347970c5 +size 16445652 diff --git a/crossval/test_7_16/val_1_22.safetensors b/crossval/test_7_16/val_1_22.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..e49bc0fd6d22d81a8197eeff01cc0e95c6d74968 --- /dev/null +++ b/crossval/test_7_16/val_1_22.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d36a3f3b82d9ed3069da8c540e8116597c911cfbbdcb0caec361876c55d69c1d +size 16445652 diff --git a/crossval/test_7_16/val_2_21.safetensors b/crossval/test_7_16/val_2_21.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..2473e9e4fba7248c939902c65b01cabf917c659e --- /dev/null +++ b/crossval/test_7_16/val_2_21.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70fb15f79d3a993bea2407fa90634f39776b60bbdefa4c686ad0b5488be07152 +size 16445652 diff --git a/crossval/test_7_16/val_3_20.safetensors b/crossval/test_7_16/val_3_20.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..63da5aaa1fea84ad4c2628600a449bce87febe50 --- /dev/null +++ b/crossval/test_7_16/val_3_20.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e84e50f3082c96c240722c8a5f9c072f826365bc67c2d3b81eb3b59667f3f830 +size 16445652 diff --git a/crossval/test_7_16/val_4_19.safetensors b/crossval/test_7_16/val_4_19.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..0d9408dc9ad951b90755666f72130787426fed60 --- /dev/null +++ b/crossval/test_7_16/val_4_19.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d54ddb84a35eb3ad5b2fe3beafb016d176d0092197c4c85214e9fc0b231b90c5 +size 16445652 diff --git a/crossval/test_7_16/val_5_18.safetensors b/crossval/test_7_16/val_5_18.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..d2b05efa7da5325577959523448e16e2f431a3be --- /dev/null +++ b/crossval/test_7_16/val_5_18.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1758a6d80690a270e6271884bd4da166e74e3260ef620e0e4eea2ff675305fc7 +size 16445652 diff --git a/crossval/test_7_16/val_6_17.safetensors b/crossval/test_7_16/val_6_17.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..6c0dfadf92c7e0e3fea3e6c466eb5cb95340165e --- /dev/null +++ b/crossval/test_7_16/val_6_17.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f3cdce898fa2bb2fbcafb74da2c80f1ee2209b4f90565b643f0dd63f8307a27 +size 16445652 diff --git a/crossval/test_7_16/val_8_15.safetensors b/crossval/test_7_16/val_8_15.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..0e1c4ce974f47acbc386e88c9cf992d6edad0d13 --- /dev/null +++ b/crossval/test_7_16/val_8_15.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff4f9f5ec252184070665620186473aca87653ae3d24e12afa8d32ee86de5e0f +size 16445652 diff --git a/crossval/test_7_16/val_9_14.safetensors b/crossval/test_7_16/val_9_14.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..50ebe277936c2c1f57b719fb9f93d8dffbb04f30 --- /dev/null +++ b/crossval/test_7_16/val_9_14.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4d2a1b9a0d72ce55daf41e2d9da92892d0953438895410cfa86d780da14110a +size 16445652 diff --git a/crossval/test_8_15/val_10_13.safetensors b/crossval/test_8_15/val_10_13.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..c6d7e0dd955a14054b8109e09078db0faa38e7e7 --- /dev/null +++ b/crossval/test_8_15/val_10_13.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55495bc3be8bf10f6d14f6a790725c4c039f130553ce518ac81ead38855eb6c0 +size 16445652 diff --git a/crossval/test_8_15/val_11_12.safetensors b/crossval/test_8_15/val_11_12.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..24df3a2438129a87dacc7ff90f7cf34c1fb529e4 --- /dev/null +++ b/crossval/test_8_15/val_11_12.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:366bc354f7451fadb5252f6b9ec7186447168c68aa2c79080effb64a08326b54 +size 16445652 diff --git a/crossval/test_8_15/val_1_22.safetensors b/crossval/test_8_15/val_1_22.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..971f1a1cb6ceb3a75a3c67c4ddfbda3e6ca6af18 --- /dev/null +++ b/crossval/test_8_15/val_1_22.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7410a96556f822b06dfdfc0c9eae9b5ac62c8f4c69856a614083c1df8460abb +size 16445652 diff --git a/crossval/test_8_15/val_2_21.safetensors b/crossval/test_8_15/val_2_21.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..20585857f57594b2ab90fe40219627b211b51122 --- /dev/null +++ b/crossval/test_8_15/val_2_21.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9d10c1183b608e6d7ec97df35f9f95f8e65bb3cde1f57c2edd3d6dece98d85b +size 16445652 diff --git a/crossval/test_8_15/val_3_20.safetensors b/crossval/test_8_15/val_3_20.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..b8782c53c45c8995187e1eff572682bd2411b0af --- /dev/null +++ b/crossval/test_8_15/val_3_20.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c0b22313e5d8a93334e505888c05f968dd356ba2a9b7c66c302ee3d693e6b37 +size 16445652 diff --git a/crossval/test_8_15/val_4_19.safetensors b/crossval/test_8_15/val_4_19.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..1218c84c2d12a266fbd614cc818f03c1564e13fb --- /dev/null +++ b/crossval/test_8_15/val_4_19.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdb4548740f0b2f9351621952a7024f3c38fc6a9ee8a1a4b2e61e16681341be7 +size 16445652 diff --git a/crossval/test_8_15/val_5_18.safetensors b/crossval/test_8_15/val_5_18.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..4fdf9993b696037cf453bbb59db4f96143a697b0 --- /dev/null +++ b/crossval/test_8_15/val_5_18.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df6800fb8e16a3692c1ad500e0868c5cedd1472d552bd98f906ccf947da8a839 +size 16445652 diff --git a/crossval/test_8_15/val_6_17.safetensors b/crossval/test_8_15/val_6_17.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..5f82c3667dbc84404a9d5e04194615f9b3618e40 --- /dev/null +++ b/crossval/test_8_15/val_6_17.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3805b6df7cef8d35b7c67ddd4b165ef157af36d43f62011aac0760588e918900 +size 16445652 diff --git a/crossval/test_8_15/val_7_16.safetensors b/crossval/test_8_15/val_7_16.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..b9d8c8b19b83795be862ad7fb1297ceb4d719cde --- /dev/null +++ b/crossval/test_8_15/val_7_16.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b485f03629dba515ff2bb84fc09a870d744e46efe21b8dda0d9775dd1e3c83e +size 16445652 diff --git a/crossval/test_8_15/val_9_14.safetensors b/crossval/test_8_15/val_9_14.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..7dfa0b7d10e499af3e767d1c689c3a2ac13a2481 --- /dev/null +++ b/crossval/test_8_15/val_9_14.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5653ec915502d1b26db065e472f960b146d544491063db568ca8ae3777f38552 +size 16445652 diff --git a/crossval/test_9_14/val_10_13.safetensors b/crossval/test_9_14/val_10_13.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..959c29b2d3d4e9d182ed37563c060e083a134470 --- /dev/null +++ b/crossval/test_9_14/val_10_13.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e59bc26354b098f833d4860616d37799e6840ffe0a88870d05a7abccc83e918 +size 16445652 diff --git a/crossval/test_9_14/val_11_12.safetensors b/crossval/test_9_14/val_11_12.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..1fd187f7b0e4ae897d75b00d14bbccf8d39582b8 --- /dev/null +++ b/crossval/test_9_14/val_11_12.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24185b0a7b2cf8cade5fc4af38eb75545dd8cb5aeb66b436983bbe2f79d7c337 +size 16445652 diff --git a/crossval/test_9_14/val_1_22.safetensors b/crossval/test_9_14/val_1_22.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..305be8b4b03d5d81f552343f89736346b2c3857b --- /dev/null +++ b/crossval/test_9_14/val_1_22.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce2fbf085c7dee5760fb476841478835768834a8146dc00e1b32e588814841ed +size 16445652 diff --git a/crossval/test_9_14/val_2_21.safetensors b/crossval/test_9_14/val_2_21.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..aa3f2b4cff70993c4c9b7f36cd1cf41ac601e593 --- /dev/null +++ b/crossval/test_9_14/val_2_21.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e74ed210b9490f4cdce02e63943e1d2620fc11c97ee52ad9d042f32e087de3e5 +size 16445652 diff --git a/crossval/test_9_14/val_3_20.safetensors b/crossval/test_9_14/val_3_20.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..f5dffc5bb185bcfc735d6f136815c6d6c0919616 --- /dev/null +++ b/crossval/test_9_14/val_3_20.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e5ec9bd51d38476530a80a2c8c755176e9d32a96dfc158ca4b8c2ebaa436025 +size 16445652 diff --git a/crossval/test_9_14/val_4_19.safetensors b/crossval/test_9_14/val_4_19.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..2746bd5a7354a8a5893bdb07d16727e7aa52da45 --- /dev/null +++ b/crossval/test_9_14/val_4_19.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:060d5e832e4453c488ca7d12ae0713c6d1af6a0822f5aec100b167d625ba46bb +size 16445652 diff --git a/crossval/test_9_14/val_5_18.safetensors b/crossval/test_9_14/val_5_18.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..e4e3646a247cfc42c4a4fb915acbf4992aa1072f --- /dev/null +++ b/crossval/test_9_14/val_5_18.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5bc7229e52f71a708a1e20608fa094787c2ae67ae4b10b6aab649458efc7580f +size 16445652 diff --git a/crossval/test_9_14/val_6_17.safetensors b/crossval/test_9_14/val_6_17.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..887e8088ed73d0b2f2e31d7a0274596537b9c97f --- /dev/null +++ b/crossval/test_9_14/val_6_17.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7eb323ffb17b5f77662fe032db0b79a87f007532368812d0aa09b1641901b7e +size 16445652 diff --git a/crossval/test_9_14/val_7_16.safetensors b/crossval/test_9_14/val_7_16.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..8e7fe5902644ef79963bae614be3656f979df6fd --- /dev/null +++ b/crossval/test_9_14/val_7_16.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95618c6250af593b8f10a9a4309ae4e1e5cb3e50540b2c436cdd1b8c958a7e77 +size 16445652 diff --git a/crossval/test_9_14/val_8_15.safetensors b/crossval/test_9_14/val_8_15.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..0eda6fa5cc3cecacfe0fefb8216a2a4d0ebfc6c6 --- /dev/null +++ b/crossval/test_9_14/val_8_15.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a463e8e29bb57e47674bc561a989ebd7479ec0c0b6a115d26ae4718a9ed783c +size 16445652 diff --git a/modeling_mpac.py b/modeling_mpac.py new file mode 100644 index 0000000000000000000000000000000000000000..858079c2189b7a78c54739d22034c6d248cfd8d8 --- /dev/null +++ b/modeling_mpac.py @@ -0,0 +1,516 @@ +""" +Standalone definition of the MPAC model architecture (`BassetBranched`). + +This module is deliberately self-contained: it depends only on `torch` (plus +`huggingface_hub` for the `from_pretrained` mixin). It does not import +`boda`, `lightning`, or any of the training-time machinery. Layer classes and +the forward pass are transcribed from `boda/model/basset.py` and +`boda/model/custom_layers.py` so that state dicts load with identical keys and +produce bitwise-identical outputs. + +MIT License + +Copyright (c) 2025 Sagar Gosai, Rodrigo Castro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +""" + +import math +import os +from collections import OrderedDict + +import torch +import torch.nn as nn +from torch.func import functional_call, stack_module_state, vmap + +try: + from huggingface_hub import PyTorchModelHubMixin +except ImportError: # keeps the file usable as a plain torch module offline + class PyTorchModelHubMixin: + def __init_subclass__(cls, **kwargs): + super().__init_subclass__() + + +__all__ = [ + 'STANDARD_NT', 'MPRA_UPSTREAM', 'MPRA_DOWNSTREAM', 'CELL_TYPES', + 'dna2tensor', 'MPACModel', 'MPACEnsemble', 'fold_for_chromosome', +] + +# ----------------------------------------------------------------------------- +# Assay constants +# ----------------------------------------------------------------------------- + +STANDARD_NT = ['A', 'C', 'G', 'T'] + +# Vector context flanking the 200 bp variable region in the MPRA library. The +# model is trained on the full 600 bp construct, so predictions on a bare 200mer +# are only meaningful once these are attached (see `MPACModel.add_flanks`). +MPRA_UPSTREAM = 'ACGAAAATGTTGGATGCTCATACTCGTCCTTTTTCAATATTATTGAAGCATTTATCAGGGTTACTAGTACGTCTCTCAAGGATAAGTAAGTAATATTAAGGTACGGGAGGTATTGGACAGGCCGCAATAAAATATCTTTATTTTCATTACATCTGTGTGTTGGTTTTTTGTGTGAATCGATAGTACTAACATACGCTCTCCATCAAAACAAAACGAAACAAAACAAACTAGCAAAATAGGCTGTCCCCAGTGCAAGTGCAGGTGCCAGAACATTTCTCTGGCCTAACTGGCCGCTTGACG' +MPRA_DOWNSTREAM = 'CACTGCGGCTCCTGCGATCTAACTGGCCGGTACCTGAGCTCGCTAGCCTCGAGGATATCAAGATCTGGCCTCGGCGGCCAAGCTTAGACACTAGAGGGTATATAATGGAAGCTCGACTTCCAGCTTGGCAATCCGGTACTGTTGGTAAAGCCACCATGGTGAGCAAGGGCGAGGAGCTGTTCACCGGGGTGGTGCCCATCCTGGTCGAGCTGGACGGCGACGTAAACGGCCACAAGTTCAGCGTGTCCGGCGAGGGCGAGGGCGATGCCACCTACGGCAAGCTGACCCTGAAGTTCATCT' + +CELL_TYPES = ['K562', 'HepG2', 'SKNSH'] + + +def dna2tensor(sequence_str, vocab_list=STANDARD_NT): + """One-hot encode a DNA string as a (4, len) float tensor.""" + seq_tensor = torch.zeros((len(vocab_list), len(sequence_str))) + for i, letter in enumerate(sequence_str): + seq_tensor[vocab_list.index(letter), i] = 1. + return seq_tensor + + +def get_padding(kernel_size): + left = (kernel_size - 1) // 2 + right = kernel_size - 1 - left + return [max(0, x) for x in [left, right]] + + +# ----------------------------------------------------------------------------- +# Layers +# ----------------------------------------------------------------------------- + +class Conv1dNorm(nn.Module): + """Conv1d with optional weight norm and batch norm.""" + + def __init__(self, in_channels, out_channels, kernel_size, + stride=1, padding=0, dilation=1, groups=1, + bias=True, batch_norm=True, weight_norm=True): + super().__init__() + self.conv = nn.Conv1d(in_channels, out_channels, kernel_size, + stride, padding, dilation, groups, bias) + if weight_norm: + self.conv = nn.utils.weight_norm(self.conv) + if batch_norm: + self.bn_layer = nn.BatchNorm1d(out_channels, eps=1e-05, momentum=0.1, + affine=True, track_running_stats=True) + + def forward(self, input): + try: + return self.bn_layer(self.conv(input)) + except AttributeError: + return self.conv(input) + + +class LinearNorm(nn.Module): + """Linear with optional weight norm and batch norm.""" + + def __init__(self, in_features, out_features, bias=True, + batch_norm=True, weight_norm=True): + super().__init__() + self.linear = nn.Linear(in_features, out_features, bias=True) + if weight_norm: + self.linear = nn.utils.weight_norm(self.linear) + if batch_norm: + self.bn_layer = nn.BatchNorm1d(out_features, eps=1e-05, momentum=0.1, + affine=True, track_running_stats=True) + + def forward(self, input): + try: + return self.bn_layer(self.linear(input)) + except AttributeError: + return self.linear(input) + + +class GroupedLinear(nn.Module): + """Independent linear map per group, applied to a (batch, groups*in) tensor.""" + + def __init__(self, in_group_size, out_group_size, groups): + super().__init__() + + self.in_group_size = in_group_size + self.out_group_size = out_group_size + self.groups = groups + + self.weight = nn.Parameter(torch.zeros(groups, in_group_size, out_group_size)) + self.bias = nn.Parameter(torch.zeros(groups, 1, out_group_size)) + + self.reset_parameters(self.weight, self.bias) + + def reset_parameters(self, weights, bias): + nn.init.kaiming_uniform_(weights, a=math.sqrt(3)) + fan_in, _ = nn.init._calculate_fan_in_and_fan_out(weights) + bound = 1 / math.sqrt(fan_in) + nn.init.uniform_(bias, -bound, bound) + + def forward(self, x): + reorg = x.permute(1, 0).reshape(self.groups, self.in_group_size, -1).permute(0, 2, 1) + hook = torch.bmm(reorg, self.weight) + self.bias + reorg = hook.permute(0, 2, 1).reshape(self.out_group_size * self.groups, -1).permute(1, 0) + return reorg + + +class RepeatLayer(nn.Module): + def __init__(self, *args): + super().__init__() + self.args = args + + def forward(self, x): + return x.repeat(*self.args) + + +class BranchedLinear(nn.Module): + """Per-output-branch MLP tower built from GroupedLinear layers.""" + + def __init__(self, in_features, hidden_group_size, out_group_size, + n_branches=1, n_layers=1, activation='ReLU', dropout_p=0.5): + super().__init__() + + self.in_features = in_features + self.hidden_group_size = hidden_group_size + self.out_group_size = out_group_size + self.n_branches = n_branches + self.n_layers = n_layers + + self.branches = OrderedDict() + + self.nonlin = getattr(nn, activation)() + self.dropout = nn.Dropout(p=dropout_p) + + self.intake = RepeatLayer(1, n_branches) + cur_size = in_features + + for i in range(n_layers): + if i + 1 == n_layers: + setattr(self, f'branched_layer_{i+1}', GroupedLinear(cur_size, out_group_size, n_branches)) + else: + setattr(self, f'branched_layer_{i+1}', GroupedLinear(cur_size, hidden_group_size, n_branches)) + cur_size = hidden_group_size + + def forward(self, x): + hook = self.intake(x) + + i = -1 + for i in range(self.n_layers - 1): + hook = getattr(self, f'branched_layer_{i+1}')(hook) + hook = self.dropout(self.nonlin(hook)) + hook = getattr(self, f'branched_layer_{i+2}')(hook) + + return hook + + +# ----------------------------------------------------------------------------- +# Model +# ----------------------------------------------------------------------------- + +class MPACModel( + nn.Module, + PyTorchModelHubMixin, + library_name='mpac', + tags=['biology', 'genomics', 'dna', 'mpra', 'cis-regulatory'], + license='mit', +): + """The `BassetBranched` architecture used by every MPAC checkpoint. + + Consumes one-hot DNA of shape (batch, 4, input_len) and returns one activity + value per output branch, shape (batch, n_outputs). For the released weights + the branches are `CELL_TYPES` and `input_len` is 600. + """ + + def __init__(self, input_len=600, + conv1_channels=300, conv1_kernel_size=19, + conv2_channels=200, conv2_kernel_size=11, + conv3_channels=200, conv3_kernel_size=7, + n_linear_layers=2, linear_channels=1000, + linear_activation='ReLU', linear_dropout_p=0.3, + n_branched_layers=1, branched_channels=250, + branched_activation='ReLU6', branched_dropout_p=0., + n_outputs=280, + use_batch_norm=True, use_weight_norm=False, + variable_region_len=200, output_names=None): + super().__init__() + + self.input_len = input_len + + self.conv1_channels = conv1_channels + self.conv1_kernel_size = conv1_kernel_size + self.conv1_pad = get_padding(conv1_kernel_size) + + self.conv2_channels = conv2_channels + self.conv2_kernel_size = conv2_kernel_size + self.conv2_pad = get_padding(conv2_kernel_size) + + self.conv3_channels = conv3_channels + self.conv3_kernel_size = conv3_kernel_size + self.conv3_pad = get_padding(conv3_kernel_size) + + self.n_linear_layers = n_linear_layers + self.linear_channels = linear_channels + self.linear_activation = linear_activation + self.linear_dropout_p = linear_dropout_p + + self.n_branched_layers = n_branched_layers + self.branched_channels = branched_channels + self.branched_activation = branched_activation + self.branched_dropout_p = branched_dropout_p + + self.n_outputs = n_outputs + + self.use_batch_norm = use_batch_norm + self.use_weight_norm = use_weight_norm + + self.variable_region_len = variable_region_len + self.output_names = list(output_names) if output_names is not None else None + assert self.output_names is None or len(self.output_names) == n_outputs, \ + f"output_names has {len(self.output_names)} entries but n_outputs is {n_outputs}" + + self.pad1 = nn.ConstantPad1d(self.conv1_pad, 0.) + self.conv1 = Conv1dNorm(4, self.conv1_channels, self.conv1_kernel_size, + stride=1, padding=0, dilation=1, groups=1, bias=True, + batch_norm=self.use_batch_norm, weight_norm=self.use_weight_norm) + self.pad2 = nn.ConstantPad1d(self.conv2_pad, 0.) + self.conv2 = Conv1dNorm(self.conv1_channels, self.conv2_channels, self.conv2_kernel_size, + stride=1, padding=0, dilation=1, groups=1, bias=True, + batch_norm=self.use_batch_norm, weight_norm=self.use_weight_norm) + self.pad3 = nn.ConstantPad1d(self.conv3_pad, 0.) + self.conv3 = Conv1dNorm(self.conv2_channels, self.conv3_channels, self.conv3_kernel_size, + stride=1, padding=0, dilation=1, groups=1, bias=True, + batch_norm=self.use_batch_norm, weight_norm=self.use_weight_norm) + + self.pad4 = nn.ConstantPad1d((1, 1), 0.) + + self.maxpool_3 = nn.MaxPool1d(3, padding=0) + self.maxpool_4 = nn.MaxPool1d(4, padding=0) + + next_in_channels = self.conv3_channels * self.get_flatten_factor(self.input_len) + + for i in range(self.n_linear_layers): + setattr(self, f'linear{i+1}', + LinearNorm(next_in_channels, self.linear_channels, bias=True, + batch_norm=self.use_batch_norm, weight_norm=self.use_weight_norm)) + next_in_channels = self.linear_channels + + self.branched = BranchedLinear(next_in_channels, self.branched_channels, + self.branched_channels, self.n_outputs, + self.n_branched_layers, self.branched_activation, + self.branched_dropout_p) + + self.output = GroupedLinear(self.branched_channels, 1, self.n_outputs) + + self.nonlin = getattr(nn, self.linear_activation)() + + self.dropout = nn.Dropout(p=self.linear_dropout_p) + + self._register_flanks() + + def get_flatten_factor(self, input_len): + hook = input_len + assert hook % 3 == 0 + hook = hook // 3 + assert hook % 4 == 0 + hook = hook // 4 + assert (hook + 2) % 4 == 0 + return (hook + 2) // 4 + + # -- MPRA vector context --------------------------------------------------- + + def _register_flanks(self): + """Precompute the one-hot flanks that pad a variable region up to input_len. + + Registered non-persistently so they stay out of the state dict, which + keeps key parity with the original `boda` checkpoints. + """ + pad_total = self.input_len - self.variable_region_len + if pad_total <= 0: + self.register_buffer('left_flank', None, persistent=False) + self.register_buffer('right_flank', None, persistent=False) + return + + left_len = pad_total // 2 + right_len = pad_total - left_len + assert left_len <= len(MPRA_UPSTREAM) and right_len <= len(MPRA_DOWNSTREAM), \ + f"need {left_len}/{right_len} bp of flank, have {len(MPRA_UPSTREAM)}/{len(MPRA_DOWNSTREAM)}" + + self.register_buffer('left_flank', dna2tensor(MPRA_UPSTREAM[-left_len:]).unsqueeze(0), + persistent=False) + self.register_buffer('right_flank', dna2tensor(MPRA_DOWNSTREAM[:right_len]).unsqueeze(0), + persistent=False) + + def add_flanks(self, x): + """Concatenate MPRA vector context onto a (batch, 4, variable_region_len) tensor.""" + assert x.shape[-1] == self.variable_region_len, \ + f"expected variable region of {self.variable_region_len} bp, got {x.shape[-1]}" + *batch_dims, _, _ = x.shape + pieces = [] + if self.left_flank is not None: + pieces.append(self.left_flank.expand(*batch_dims, -1, -1)) + pieces.append(x) + if self.right_flank is not None: + pieces.append(self.right_flank.expand(*batch_dims, -1, -1)) + return torch.cat(pieces, axis=-1) + + # -- computation ----------------------------------------------------------- + + def encode(self, x): + hook = self.nonlin(self.conv1(self.pad1(x))) + hook = self.maxpool_3(hook) + hook = self.nonlin(self.conv2(self.pad2(hook))) + hook = self.maxpool_4(hook) + hook = self.nonlin(self.conv3(self.pad3(hook))) + hook = self.maxpool_4(self.pad4(hook)) + hook = torch.flatten(hook, start_dim=1) + return hook + + def decode(self, x): + hook = x + for i in range(self.n_linear_layers): + hook = self.dropout(self.nonlin(getattr(self, f'linear{i+1}')(hook))) + hook = self.branched(hook) + return hook + + def classify(self, x): + return self.output(x) + + def forward(self, x): + """Predict activity from a fully assembled (batch, 4, input_len) one-hot tensor.""" + return self.classify(self.decode(self.encode(x))) + + # -- convenience ----------------------------------------------------------- + + @torch.no_grad() + def predict(self, sequences, batch_size=128, rc_average=True, device=None): + """Predict activity for a list of bare variable-region DNA strings. + + Handles the two steps that are easy to get wrong: attaching the MPRA + vector context, and averaging the forward and reverse-complement passes + (the convention used throughout the CODA papers). + + Returns a (len(sequences), n_outputs) float tensor on the CPU, with + columns ordered as `self.output_names`. + """ + if isinstance(sequences, str): + raise TypeError("pass a list of sequences, not a single string") + + device = device if device is not None else next(self.parameters()).device + was_training = self.training + self.eval() + + results = [] + try: + for start in range(0, len(sequences), batch_size): + chunk = sequences[start:start + batch_size] + batch = torch.stack([dna2tensor(s.upper()) for s in chunk]).to(device) + # Flanks go on first: the reverse complement is of the whole 600 bp + # construct, vector context included. Flipping the bare insert and + # then adding forward-orientation flanks is not a reverse complement. + prepped = self.add_flanks(batch) + preds = self(prepped) + if rc_average: + preds = (preds + self(prepped.flip(dims=[1, 2]))).div(2.) + results.append(preds.cpu()) + finally: + self.train(was_training) + + return torch.cat(results, dim=0) + + +class MPACEnsemble(nn.Module): + """Mean prediction over a set of architecturally identical `MPACModel`s. + + Uses `torch.func.vmap` over stacked parameters, matching `ConsistentModelPool` + in the CODA inference scripts. + """ + + def __init__(self, models): + super().__init__() + + models = list(models) + assert len(models) > 0, "need at least one model" + for m in models: + m.eval() + + self._template = models[0] + self.n_models = len(models) + self.output_names = self._template.output_names + self.variable_region_len = self._template.variable_region_len + self.input_len = self._template.input_len + + params, buffers = stack_module_state(models) + # Keep the stacked tensors visible to .to()/.cuda() by registering them. + self.params = nn.ParameterDict( + {k.replace('.', '/'): nn.Parameter(v, requires_grad=False) for k, v in params.items()} + ) + self._buffer_keys = list(buffers.keys()) + for k, v in buffers.items(): + self.register_buffer(k.replace('.', '/'), v) + + def _unpack(self): + params = {k.replace('/', '.'): v for k, v in self.params.items()} + buffers = {k: getattr(self, k.replace('.', '/')) for k in self._buffer_keys} + return params, buffers + + def forward(self, x): + params, buffers = self._unpack() + + def fmodel(p, b, data): + return functional_call(self._template, (p, b), (data,)) + + preds = vmap(fmodel, in_dims=(0, 0, None))(params, buffers, x) + return preds.mean(dim=0) + + def add_flanks(self, x): + return self._template.add_flanks(x) + + predict = MPACModel.predict + + @classmethod + def from_pretrained(cls, repo_id, chromosome, device='cpu', **kwargs): + """Load the ten MPAC models that held `chromosome` out as their test fold. + + This is the intended entry point. Picking a fold by hand is easy to get + wrong, and getting it wrong silently leaks training data into your + predictions rather than raising an error. + + `chromosome` accepts '7', 7, or 'chr7'. + """ + import json + + from huggingface_hub import hf_hub_download, snapshot_download + from safetensors.torch import load_file + + chrom = str(chromosome).lower().replace('chr', '') + + provenance = json.load(open(hf_hub_download(repo_id, 'provenance.json', **kwargs))) + fold = fold_for_chromosome(provenance, chrom) + + config = json.load(open(hf_hub_download(repo_id, 'config.json', **kwargs))) + local = snapshot_download(repo_id, allow_patterns=[f'{fold}/*'], **kwargs) + + models = [] + for record in sorted(r['file'] for r in provenance + if os.path.dirname(r['file']) == fold): + model = MPACModel(**config) + model.load_state_dict(load_file(os.path.join(local, record))) + models.append(model.eval().to(device)) + + assert len(models) == 10, \ + f"expected 10 replicates for {fold}, found {len(models)}" + return cls(models).to(device) + + +def fold_for_chromosome(provenance, chromosome): + """Return the directory of the fold that held `chromosome` out as test data.""" + chrom = str(chromosome).lower().replace('chr', '') + folds = {os.path.dirname(r['file']) for r in provenance + if chrom in [str(c) for c in (r.get('test_chrs') or [])]} + assert len(folds) == 1, ( + f"chromosome {chrom} maps to {len(folds)} folds ({sorted(folds)}); " + f"MPAC covers autosomes 1-22 only, so chrX, chrY and non-human sequence " + f"have no held-out ensemble" + ) + return folds.pop() diff --git a/provenance.json b/provenance.json new file mode 100644 index 0000000000000000000000000000000000000000..4b38971749a38047ba98a32c5b8f622a5a329bbe --- /dev/null +++ b/provenance.json @@ -0,0 +1,1762 @@ +[ + { + "file": "crossval/test_10_13/val_5_18.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_10_val_5/model_artifacts__20230111_233239__997250.tar.gz", + "timestamp": "20230111_233239", + "random_tag": 997250, + "val_chrs": [ + "5", + "18" + ], + "test_chrs": [ + "10", + "13" + ], + "role": "crossval", + "fold": "chr10_13" + }, + { + "file": "crossval/test_10_13/val_9_14.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_10_val_9/model_artifacts__20230111_234320__438979.tar.gz", + "timestamp": "20230111_234320", + "random_tag": 438979, + "val_chrs": [ + "9", + "14" + ], + "test_chrs": [ + "10", + "13" + ], + "role": "crossval", + "fold": "chr10_13" + }, + { + "file": "crossval/test_10_13/val_3_20.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_10_val_3/model_artifacts__20230111_235821__277233.tar.gz", + "timestamp": "20230111_235821", + "random_tag": 277233, + "val_chrs": [ + "3", + "20" + ], + "test_chrs": [ + "10", + "13" + ], + "role": "crossval", + "fold": "chr10_13" + }, + { + "file": "crossval/test_10_13/val_7_16.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_10_val_7/model_artifacts__20230112_012222__381748.tar.gz", + "timestamp": "20230112_012222", + "random_tag": 381748, + "val_chrs": [ + "7", + "16" + ], + "test_chrs": [ + "10", + "13" + ], + "role": "crossval", + "fold": "chr10_13" + }, + { + "file": "crossval/test_10_13/val_8_15.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_10_val_8/model_artifacts__20230112_012717__535279.tar.gz", + "timestamp": "20230112_012717", + "random_tag": 535279, + "val_chrs": [ + "8", + "15" + ], + "test_chrs": [ + "10", + "13" + ], + "role": "crossval", + "fold": "chr10_13" + }, + { + "file": "crossval/test_10_13/val_6_17.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_10_val_6/model_artifacts__20230112_020147__347055.tar.gz", + "timestamp": "20230112_020147", + "random_tag": 347055, + "val_chrs": [ + "6", + "17" + ], + "test_chrs": [ + "10", + "13" + ], + "role": "crossval", + "fold": "chr10_13" + }, + { + "file": "crossval/test_10_13/val_11_12.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_10_val_11/model_artifacts__20230112_023108__931734.tar.gz", + "timestamp": "20230112_023108", + "random_tag": 931734, + "val_chrs": [ + "11", + "12" + ], + "test_chrs": [ + "10", + "13" + ], + "role": "crossval", + "fold": "chr10_13" + }, + { + "file": "crossval/test_10_13/val_2_21.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_10_val_2/model_artifacts__20230112_023138__998417.tar.gz", + "timestamp": "20230112_023138", + "random_tag": 998417, + "val_chrs": [ + "2", + "21" + ], + "test_chrs": [ + "10", + "13" + ], + "role": "crossval", + "fold": "chr10_13" + }, + { + "file": "crossval/test_10_13/val_1_22.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_10_val_1/model_artifacts__20230112_024434__335913.tar.gz", + "timestamp": "20230112_024434", + "random_tag": 335913, + "val_chrs": [ + "1", + "22" + ], + "test_chrs": [ + "10", + "13" + ], + "role": "crossval", + "fold": "chr10_13" + }, + { + "file": "crossval/test_10_13/val_4_19.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_10_val_4/model_artifacts__20230112_035135__123814.tar.gz", + "timestamp": "20230112_035135", + "random_tag": 123814, + "val_chrs": [ + "4", + "19" + ], + "test_chrs": [ + "10", + "13" + ], + "role": "crossval", + "fold": "chr10_13" + }, + { + "file": "crossval/test_11_12/val_6_17.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_11_val_6/model_artifacts__20230111_233248__277586.tar.gz", + "timestamp": "20230111_233248", + "random_tag": 277586, + "val_chrs": [ + "6", + "17" + ], + "test_chrs": [ + "11", + "12" + ], + "role": "crossval", + "fold": "chr11_12" + }, + { + "file": "crossval/test_11_12/val_8_15.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_11_val_8/model_artifacts__20230111_234647__930924.tar.gz", + "timestamp": "20230111_234647", + "random_tag": 930924, + "val_chrs": [ + "8", + "15" + ], + "test_chrs": [ + "11", + "12" + ], + "role": "crossval", + "fold": "chr11_12" + }, + { + "file": "crossval/test_11_12/val_1_22.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_11_val_1/model_artifacts__20230111_235303__659225.tar.gz", + "timestamp": "20230111_235303", + "random_tag": 659225, + "val_chrs": [ + "1", + "22" + ], + "test_chrs": [ + "11", + "12" + ], + "role": "crossval", + "fold": "chr11_12" + }, + { + "file": "crossval/test_11_12/val_7_16.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_11_val_7/model_artifacts__20230111_235956__930333.tar.gz", + "timestamp": "20230111_235956", + "random_tag": 930333, + "val_chrs": [ + "7", + "16" + ], + "test_chrs": [ + "11", + "12" + ], + "role": "crossval", + "fold": "chr11_12" + }, + { + "file": "crossval/test_11_12/val_5_18.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_11_val_5/model_artifacts__20230112_001449__939787.tar.gz", + "timestamp": "20230112_001449", + "random_tag": 939787, + "val_chrs": [ + "5", + "18" + ], + "test_chrs": [ + "11", + "12" + ], + "role": "crossval", + "fold": "chr11_12" + }, + { + "file": "crossval/test_11_12/val_9_14.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_11_val_9/model_artifacts__20230112_002507__882336.tar.gz", + "timestamp": "20230112_002507", + "random_tag": 882336, + "val_chrs": [ + "9", + "14" + ], + "test_chrs": [ + "11", + "12" + ], + "role": "crossval", + "fold": "chr11_12" + }, + { + "file": "crossval/test_11_12/val_3_20.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_11_val_3/model_artifacts__20230112_005738__896100.tar.gz", + "timestamp": "20230112_005738", + "random_tag": 896100, + "val_chrs": [ + "3", + "20" + ], + "test_chrs": [ + "11", + "12" + ], + "role": "crossval", + "fold": "chr11_12" + }, + { + "file": "crossval/test_11_12/val_10_13.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_11_val_10/model_artifacts__20230112_010807__554895.tar.gz", + "timestamp": "20230112_010807", + "random_tag": 554895, + "val_chrs": [ + "10", + "13" + ], + "test_chrs": [ + "11", + "12" + ], + "role": "crossval", + "fold": "chr11_12" + }, + { + "file": "crossval/test_11_12/val_2_21.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_11_val_2/model_artifacts__20230112_023851__149481.tar.gz", + "timestamp": "20230112_023851", + "random_tag": 149481, + "val_chrs": [ + "2", + "21" + ], + "test_chrs": [ + "11", + "12" + ], + "role": "crossval", + "fold": "chr11_12" + }, + { + "file": "crossval/test_11_12/val_4_19.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_11_val_4/model_artifacts__20230112_040839__627462.tar.gz", + "timestamp": "20230112_040839", + "random_tag": 627462, + "val_chrs": [ + "4", + "19" + ], + "test_chrs": [ + "11", + "12" + ], + "role": "crossval", + "fold": "chr11_12" + }, + { + "file": "crossval/test_1_22/val_3_20.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_1_val_3/model_artifacts__20230111_190417__993143.tar.gz", + "timestamp": "20230111_190417", + "random_tag": 993143, + "val_chrs": [ + "3", + "20" + ], + "test_chrs": [ + "1", + "22" + ], + "role": "crossval", + "fold": "chr1_22" + }, + { + "file": "crossval/test_1_22/val_2_21.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_1_val_2/model_artifacts__20230111_192235__715916.tar.gz", + "timestamp": "20230111_192235", + "random_tag": 715916, + "val_chrs": [ + "2", + "21" + ], + "test_chrs": [ + "1", + "22" + ], + "role": "crossval", + "fold": "chr1_22" + }, + { + "file": "crossval/test_1_22/val_9_14.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_1_val_9/model_artifacts__20230111_232551__863644.tar.gz", + "timestamp": "20230111_232551", + "random_tag": 863644, + "val_chrs": [ + "9", + "14" + ], + "test_chrs": [ + "1", + "22" + ], + "role": "crossval", + "fold": "chr1_22" + }, + { + "file": "crossval/test_1_22/val_4_19.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_1_val_4/model_artifacts__20230112_000934__941678.tar.gz", + "timestamp": "20230112_000934", + "random_tag": 941678, + "val_chrs": [ + "4", + "19" + ], + "test_chrs": [ + "1", + "22" + ], + "role": "crossval", + "fold": "chr1_22" + }, + { + "file": "crossval/test_1_22/val_5_18.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_1_val_5/model_artifacts__20230112_003327__287605.tar.gz", + "timestamp": "20230112_003327", + "random_tag": 287605, + "val_chrs": [ + "5", + "18" + ], + "test_chrs": [ + "1", + "22" + ], + "role": "crossval", + "fold": "chr1_22" + }, + { + "file": "crossval/test_1_22/val_11_12.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_1_val_11/model_artifacts__20230112_003539__758935.tar.gz", + "timestamp": "20230112_003539", + "random_tag": 758935, + "val_chrs": [ + "11", + "12" + ], + "test_chrs": [ + "1", + "22" + ], + "role": "crossval", + "fold": "chr1_22" + }, + { + "file": "crossval/test_1_22/val_8_15.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_1_val_8/model_artifacts__20230112_014853__150994.tar.gz", + "timestamp": "20230112_014853", + "random_tag": 150994, + "val_chrs": [ + "8", + "15" + ], + "test_chrs": [ + "1", + "22" + ], + "role": "crossval", + "fold": "chr1_22" + }, + { + "file": "crossval/test_1_22/val_6_17.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_1_val_6/model_artifacts__20230112_020038__431749.tar.gz", + "timestamp": "20230112_020038", + "random_tag": 431749, + "val_chrs": [ + "6", + "17" + ], + "test_chrs": [ + "1", + "22" + ], + "role": "crossval", + "fold": "chr1_22" + }, + { + "file": "crossval/test_1_22/val_10_13.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_1_val_10/model_artifacts__20230112_024037__325298.tar.gz", + "timestamp": "20230112_024037", + "random_tag": 325298, + "val_chrs": [ + "10", + "13" + ], + "test_chrs": [ + "1", + "22" + ], + "role": "crossval", + "fold": "chr1_22" + }, + { + "file": "crossval/test_1_22/val_7_16.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_1_val_7/model_artifacts__20230112_182326__436818.tar.gz", + "timestamp": "20230112_182326", + "random_tag": 436818, + "val_chrs": [ + "7", + "16" + ], + "test_chrs": [ + "1", + "22" + ], + "role": "crossval", + "fold": "chr1_22" + }, + { + "file": "crossval/test_2_21/val_6_17.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_2_val_6/model_artifacts__20230111_233731__117900.tar.gz", + "timestamp": "20230111_233731", + "random_tag": 117900, + "val_chrs": [ + "6", + "17" + ], + "test_chrs": [ + "2", + "21" + ], + "role": "crossval", + "fold": "chr2_21" + }, + { + "file": "crossval/test_2_21/val_11_12.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_2_val_11/model_artifacts__20230112_002409__248129.tar.gz", + "timestamp": "20230112_002409", + "random_tag": 248129, + "val_chrs": [ + "11", + "12" + ], + "test_chrs": [ + "2", + "21" + ], + "role": "crossval", + "fold": "chr2_21" + }, + { + "file": "crossval/test_2_21/val_5_18.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_2_val_5/model_artifacts__20230112_003824__879872.tar.gz", + "timestamp": "20230112_003824", + "random_tag": 879872, + "val_chrs": [ + "5", + "18" + ], + "test_chrs": [ + "2", + "21" + ], + "role": "crossval", + "fold": "chr2_21" + }, + { + "file": "crossval/test_2_21/val_8_15.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_2_val_8/model_artifacts__20230112_004119__145637.tar.gz", + "timestamp": "20230112_004119", + "random_tag": 145637, + "val_chrs": [ + "8", + "15" + ], + "test_chrs": [ + "2", + "21" + ], + "role": "crossval", + "fold": "chr2_21" + }, + { + "file": "crossval/test_2_21/val_9_14.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_2_val_9/model_artifacts__20230112_005430__748782.tar.gz", + "timestamp": "20230112_005430", + "random_tag": 748782, + "val_chrs": [ + "9", + "14" + ], + "test_chrs": [ + "2", + "21" + ], + "role": "crossval", + "fold": "chr2_21" + }, + { + "file": "crossval/test_2_21/val_4_19.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_2_val_4/model_artifacts__20230112_014533__217034.tar.gz", + "timestamp": "20230112_014533", + "random_tag": 217034, + "val_chrs": [ + "4", + "19" + ], + "test_chrs": [ + "2", + "21" + ], + "role": "crossval", + "fold": "chr2_21" + }, + { + "file": "crossval/test_2_21/val_7_16.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_2_val_7/model_artifacts__20230112_023910__737605.tar.gz", + "timestamp": "20230112_023910", + "random_tag": 737605, + "val_chrs": [ + "7", + "16" + ], + "test_chrs": [ + "2", + "21" + ], + "role": "crossval", + "fold": "chr2_21" + }, + { + "file": "crossval/test_2_21/val_10_13.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_2_val_10/model_artifacts__20230112_031741__363749.tar.gz", + "timestamp": "20230112_031741", + "random_tag": 363749, + "val_chrs": [ + "10", + "13" + ], + "test_chrs": [ + "2", + "21" + ], + "role": "crossval", + "fold": "chr2_21" + }, + { + "file": "crossval/test_2_21/val_1_22.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_2_val_1/model_artifacts__20230112_041842__826676.tar.gz", + "timestamp": "20230112_041842", + "random_tag": 826676, + "val_chrs": [ + "1", + "22" + ], + "test_chrs": [ + "2", + "21" + ], + "role": "crossval", + "fold": "chr2_21" + }, + { + "file": "crossval/test_2_21/val_3_20.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_2_val_3/model_artifacts__20230112_173424__415672.tar.gz", + "timestamp": "20230112_173424", + "random_tag": 415672, + "val_chrs": [ + "3", + "20" + ], + "test_chrs": [ + "2", + "21" + ], + "role": "crossval", + "fold": "chr2_21" + }, + { + "file": "crossval/test_3_20/val_4_19.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_3_val_4/model_artifacts__20230111_231119__118523.tar.gz", + "timestamp": "20230111_231119", + "random_tag": 118523, + "val_chrs": [ + "4", + "19" + ], + "test_chrs": [ + "3", + "20" + ], + "role": "crossval", + "fold": "chr3_20" + }, + { + "file": "crossval/test_3_20/val_9_14.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_3_val_9/model_artifacts__20230111_233905__427951.tar.gz", + "timestamp": "20230111_233905", + "random_tag": 427951, + "val_chrs": [ + "9", + "14" + ], + "test_chrs": [ + "3", + "20" + ], + "role": "crossval", + "fold": "chr3_20" + }, + { + "file": "crossval/test_3_20/val_10_13.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_3_val_10/model_artifacts__20230112_003310__726801.tar.gz", + "timestamp": "20230112_003310", + "random_tag": 726801, + "val_chrs": [ + "10", + "13" + ], + "test_chrs": [ + "3", + "20" + ], + "role": "crossval", + "fold": "chr3_20" + }, + { + "file": "crossval/test_3_20/val_11_12.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_3_val_11/model_artifacts__20230112_011318__784858.tar.gz", + "timestamp": "20230112_011318", + "random_tag": 784858, + "val_chrs": [ + "11", + "12" + ], + "test_chrs": [ + "3", + "20" + ], + "role": "crossval", + "fold": "chr3_20" + }, + { + "file": "crossval/test_3_20/val_2_21.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_3_val_2/model_artifacts__20230112_015916__701525.tar.gz", + "timestamp": "20230112_015916", + "random_tag": 701525, + "val_chrs": [ + "2", + "21" + ], + "test_chrs": [ + "3", + "20" + ], + "role": "crossval", + "fold": "chr3_20" + }, + { + "file": "crossval/test_3_20/val_1_22.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_3_val_1/model_artifacts__20230112_023929__405606.tar.gz", + "timestamp": "20230112_023929", + "random_tag": 405606, + "val_chrs": [ + "1", + "22" + ], + "test_chrs": [ + "3", + "20" + ], + "role": "crossval", + "fold": "chr3_20" + }, + { + "file": "crossval/test_3_20/val_5_18.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_3_val_5/model_artifacts__20230112_030210__392582.tar.gz", + "timestamp": "20230112_030210", + "random_tag": 392582, + "val_chrs": [ + "5", + "18" + ], + "test_chrs": [ + "3", + "20" + ], + "role": "crossval", + "fold": "chr3_20" + }, + { + "file": "crossval/test_3_20/val_6_17.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_3_val_6/model_artifacts__20230112_030423__258279.tar.gz", + "timestamp": "20230112_030423", + "random_tag": 258279, + "val_chrs": [ + "6", + "17" + ], + "test_chrs": [ + "3", + "20" + ], + "role": "crossval", + "fold": "chr3_20" + }, + { + "file": "crossval/test_3_20/val_8_15.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_3_val_8/model_artifacts__20230112_031424__606064.tar.gz", + "timestamp": "20230112_031424", + "random_tag": 606064, + "val_chrs": [ + "8", + "15" + ], + "test_chrs": [ + "3", + "20" + ], + "role": "crossval", + "fold": "chr3_20" + }, + { + "file": "crossval/test_3_20/val_7_16.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_3_val_7/model_artifacts__20230112_042933__832450.tar.gz", + "timestamp": "20230112_042933", + "random_tag": 832450, + "val_chrs": [ + "7", + "16" + ], + "test_chrs": [ + "3", + "20" + ], + "role": "crossval", + "fold": "chr3_20" + }, + { + "file": "crossval/test_4_19/val_2_21.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_4_val_2/model_artifacts__20230112_005647__982883.tar.gz", + "timestamp": "20230112_005647", + "random_tag": 982883, + "val_chrs": [ + "2", + "21" + ], + "test_chrs": [ + "4", + "19" + ], + "role": "crossval", + "fold": "chr4_19" + }, + { + "file": "crossval/test_4_19/val_3_20.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_4_val_3/model_artifacts__20230112_011252__557951.tar.gz", + "timestamp": "20230112_011252", + "random_tag": 557951, + "val_chrs": [ + "3", + "20" + ], + "test_chrs": [ + "4", + "19" + ], + "role": "crossval", + "fold": "chr4_19" + }, + { + "file": "crossval/test_4_19/val_11_12.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_4_val_11/model_artifacts__20230112_012419__846505.tar.gz", + "timestamp": "20230112_012419", + "random_tag": 846505, + "val_chrs": [ + "11", + "12" + ], + "test_chrs": [ + "4", + "19" + ], + "role": "crossval", + "fold": "chr4_19" + }, + { + "file": "crossval/test_4_19/val_6_17.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_4_val_6/model_artifacts__20230112_012839__343552.tar.gz", + "timestamp": "20230112_012839", + "random_tag": 343552, + "val_chrs": [ + "6", + "17" + ], + "test_chrs": [ + "4", + "19" + ], + "role": "crossval", + "fold": "chr4_19" + }, + { + "file": "crossval/test_4_19/val_7_16.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_4_val_7/model_artifacts__20230112_014000__223633.tar.gz", + "timestamp": "20230112_014000", + "random_tag": 223633, + "val_chrs": [ + "7", + "16" + ], + "test_chrs": [ + "4", + "19" + ], + "role": "crossval", + "fold": "chr4_19" + }, + { + "file": "crossval/test_4_19/val_9_14.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_4_val_9/model_artifacts__20230112_015830__811736.tar.gz", + "timestamp": "20230112_015830", + "random_tag": 811736, + "val_chrs": [ + "9", + "14" + ], + "test_chrs": [ + "4", + "19" + ], + "role": "crossval", + "fold": "chr4_19" + }, + { + "file": "crossval/test_4_19/val_5_18.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_4_val_5/model_artifacts__20230112_021008__371487.tar.gz", + "timestamp": "20230112_021008", + "random_tag": 371487, + "val_chrs": [ + "5", + "18" + ], + "test_chrs": [ + "4", + "19" + ], + "role": "crossval", + "fold": "chr4_19" + }, + { + "file": "crossval/test_4_19/val_1_22.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_4_val_1/model_artifacts__20230112_022358__442606.tar.gz", + "timestamp": "20230112_022358", + "random_tag": 442606, + "val_chrs": [ + "1", + "22" + ], + "test_chrs": [ + "4", + "19" + ], + "role": "crossval", + "fold": "chr4_19" + }, + { + "file": "crossval/test_4_19/val_10_13.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_4_val_10/model_artifacts__20230112_023014__868441.tar.gz", + "timestamp": "20230112_023014", + "random_tag": 868441, + "val_chrs": [ + "10", + "13" + ], + "test_chrs": [ + "4", + "19" + ], + "role": "crossval", + "fold": "chr4_19" + }, + { + "file": "crossval/test_4_19/val_8_15.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_4_val_8/model_artifacts__20230112_033649__433315.tar.gz", + "timestamp": "20230112_033649", + "random_tag": 433315, + "val_chrs": [ + "8", + "15" + ], + "test_chrs": [ + "4", + "19" + ], + "role": "crossval", + "fold": "chr4_19" + }, + { + "file": "crossval/test_5_18/val_11_12.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_5_val_11/model_artifacts__20230111_233924__132454.tar.gz", + "timestamp": "20230111_233924", + "random_tag": 132454, + "val_chrs": [ + "11", + "12" + ], + "test_chrs": [ + "5", + "18" + ], + "role": "crossval", + "fold": "chr5_18" + }, + { + "file": "crossval/test_5_18/val_1_22.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_5_val_1/model_artifacts__20230111_235836__604174.tar.gz", + "timestamp": "20230111_235836", + "random_tag": 604174, + "val_chrs": [ + "1", + "22" + ], + "test_chrs": [ + "5", + "18" + ], + "role": "crossval", + "fold": "chr5_18" + }, + { + "file": "crossval/test_5_18/val_4_19.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_5_val_4/model_artifacts__20230112_002558__263046.tar.gz", + "timestamp": "20230112_002558", + "random_tag": 263046, + "val_chrs": [ + "4", + "19" + ], + "test_chrs": [ + "5", + "18" + ], + "role": "crossval", + "fold": "chr5_18" + }, + { + "file": "crossval/test_5_18/val_10_13.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_5_val_10/model_artifacts__20230112_003033__415256.tar.gz", + "timestamp": "20230112_003033", + "random_tag": 415256, + "val_chrs": [ + "10", + "13" + ], + "test_chrs": [ + "5", + "18" + ], + "role": "crossval", + "fold": "chr5_18" + }, + { + "file": "crossval/test_5_18/val_8_15.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_5_val_8/model_artifacts__20230112_004545__982498.tar.gz", + "timestamp": "20230112_004545", + "random_tag": 982498, + "val_chrs": [ + "8", + "15" + ], + "test_chrs": [ + "5", + "18" + ], + "role": "crossval", + "fold": "chr5_18" + }, + { + "file": "crossval/test_5_18/val_7_16.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_5_val_7/model_artifacts__20230112_014434__525150.tar.gz", + "timestamp": "20230112_014434", + "random_tag": 525150, + "val_chrs": [ + "7", + "16" + ], + "test_chrs": [ + "5", + "18" + ], + "role": "crossval", + "fold": "chr5_18" + }, + { + "file": "crossval/test_5_18/val_3_20.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_5_val_3/model_artifacts__20230112_023021__269702.tar.gz", + "timestamp": "20230112_023021", + "random_tag": 269702, + "val_chrs": [ + "3", + "20" + ], + "test_chrs": [ + "5", + "18" + ], + "role": "crossval", + "fold": "chr5_18" + }, + { + "file": "crossval/test_5_18/val_9_14.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_5_val_9/model_artifacts__20230112_032301__307278.tar.gz", + "timestamp": "20230112_032301", + "random_tag": 307278, + "val_chrs": [ + "9", + "14" + ], + "test_chrs": [ + "5", + "18" + ], + "role": "crossval", + "fold": "chr5_18" + }, + { + "file": "crossval/test_5_18/val_2_21.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_5_val_2/model_artifacts__20230112_033119__914315.tar.gz", + "timestamp": "20230112_033119", + "random_tag": 914315, + "val_chrs": [ + "2", + "21" + ], + "test_chrs": [ + "5", + "18" + ], + "role": "crossval", + "fold": "chr5_18" + }, + { + "file": "crossval/test_5_18/val_6_17.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_5_val_6/model_artifacts__20230112_044219__995623.tar.gz", + "timestamp": "20230112_044219", + "random_tag": 995623, + "val_chrs": [ + "6", + "17" + ], + "test_chrs": [ + "5", + "18" + ], + "role": "crossval", + "fold": "chr5_18" + }, + { + "file": "crossval/test_6_17/val_5_18.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_6_val_5/model_artifacts__20230112_003816__931154.tar.gz", + "timestamp": "20230112_003816", + "random_tag": 931154, + "val_chrs": [ + "5", + "18" + ], + "test_chrs": [ + "6", + "17" + ], + "role": "crossval", + "fold": "chr6_17" + }, + { + "file": "crossval/test_6_17/val_9_14.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_6_val_9/model_artifacts__20230112_005344__197182.tar.gz", + "timestamp": "20230112_005344", + "random_tag": 197182, + "val_chrs": [ + "9", + "14" + ], + "test_chrs": [ + "6", + "17" + ], + "role": "crossval", + "fold": "chr6_17" + }, + { + "file": "crossval/test_6_17/val_7_16.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_6_val_7/model_artifacts__20230112_005837__838473.tar.gz", + "timestamp": "20230112_005837", + "random_tag": 838473, + "val_chrs": [ + "7", + "16" + ], + "test_chrs": [ + "6", + "17" + ], + "role": "crossval", + "fold": "chr6_17" + }, + { + "file": "crossval/test_6_17/val_10_13.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_6_val_10/model_artifacts__20230112_010900__765813.tar.gz", + "timestamp": "20230112_010900", + "random_tag": 765813, + "val_chrs": [ + "10", + "13" + ], + "test_chrs": [ + "6", + "17" + ], + "role": "crossval", + "fold": "chr6_17" + }, + { + "file": "crossval/test_6_17/val_4_19.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_6_val_4/model_artifacts__20230112_023213__911133.tar.gz", + "timestamp": "20230112_023213", + "random_tag": 911133, + "val_chrs": [ + "4", + "19" + ], + "test_chrs": [ + "6", + "17" + ], + "role": "crossval", + "fold": "chr6_17" + }, + { + "file": "crossval/test_6_17/val_8_15.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_6_val_8/model_artifacts__20230112_030053__300343.tar.gz", + "timestamp": "20230112_030053", + "random_tag": 300343, + "val_chrs": [ + "8", + "15" + ], + "test_chrs": [ + "6", + "17" + ], + "role": "crossval", + "fold": "chr6_17" + }, + { + "file": "crossval/test_6_17/val_1_22.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_6_val_1/model_artifacts__20230112_033521__524593.tar.gz", + "timestamp": "20230112_033521", + "random_tag": 524593, + "val_chrs": [ + "1", + "22" + ], + "test_chrs": [ + "6", + "17" + ], + "role": "crossval", + "fold": "chr6_17" + }, + { + "file": "crossval/test_6_17/val_11_12.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_6_val_11/model_artifacts__20230112_040504__132558.tar.gz", + "timestamp": "20230112_040504", + "random_tag": 132558, + "val_chrs": [ + "11", + "12" + ], + "test_chrs": [ + "6", + "17" + ], + "role": "crossval", + "fold": "chr6_17" + }, + { + "file": "crossval/test_6_17/val_3_20.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_6_val_3/model_artifacts__20230112_040520__506180.tar.gz", + "timestamp": "20230112_040520", + "random_tag": 506180, + "val_chrs": [ + "3", + "20" + ], + "test_chrs": [ + "6", + "17" + ], + "role": "crossval", + "fold": "chr6_17" + }, + { + "file": "crossval/test_6_17/val_2_21.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_6_val_2/model_artifacts__20230112_043920__870508.tar.gz", + "timestamp": "20230112_043920", + "random_tag": 870508, + "val_chrs": [ + "2", + "21" + ], + "test_chrs": [ + "6", + "17" + ], + "role": "crossval", + "fold": "chr6_17" + }, + { + "file": "crossval/test_7_16/val_3_20.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_7_val_3/model_artifacts__20230111_234041__233096.tar.gz", + "timestamp": "20230111_234041", + "random_tag": 233096, + "val_chrs": [ + "3", + "20" + ], + "test_chrs": [ + "7", + "16" + ], + "role": "crossval", + "fold": "chr7_16" + }, + { + "file": "crossval/test_7_16/val_1_22.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_7_val_1/model_artifacts__20230112_005920__369226.tar.gz", + "timestamp": "20230112_005920", + "random_tag": 369226, + "val_chrs": [ + "1", + "22" + ], + "test_chrs": [ + "7", + "16" + ], + "role": "crossval", + "fold": "chr7_16" + }, + { + "file": "crossval/test_7_16/val_11_12.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_7_val_11/model_artifacts__20230112_011949__620636.tar.gz", + "timestamp": "20230112_011949", + "random_tag": 620636, + "val_chrs": [ + "11", + "12" + ], + "test_chrs": [ + "7", + "16" + ], + "role": "crossval", + "fold": "chr7_16" + }, + { + "file": "crossval/test_7_16/val_4_19.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_7_val_4/model_artifacts__20230112_015315__170342.tar.gz", + "timestamp": "20230112_015315", + "random_tag": 170342, + "val_chrs": [ + "4", + "19" + ], + "test_chrs": [ + "7", + "16" + ], + "role": "crossval", + "fold": "chr7_16" + }, + { + "file": "crossval/test_7_16/val_5_18.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_7_val_5/model_artifacts__20230112_023015__950528.tar.gz", + "timestamp": "20230112_023015", + "random_tag": 950528, + "val_chrs": [ + "5", + "18" + ], + "test_chrs": [ + "7", + "16" + ], + "role": "crossval", + "fold": "chr7_16" + }, + { + "file": "crossval/test_7_16/val_9_14.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_7_val_9/model_artifacts__20230112_023239__627813.tar.gz", + "timestamp": "20230112_023239", + "random_tag": 627813, + "val_chrs": [ + "9", + "14" + ], + "test_chrs": [ + "7", + "16" + ], + "role": "crossval", + "fold": "chr7_16" + }, + { + "file": "crossval/test_7_16/val_6_17.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_7_val_6/model_artifacts__20230112_032324__192945.tar.gz", + "timestamp": "20230112_032324", + "random_tag": 192945, + "val_chrs": [ + "6", + "17" + ], + "test_chrs": [ + "7", + "16" + ], + "role": "crossval", + "fold": "chr7_16" + }, + { + "file": "crossval/test_7_16/val_10_13.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_7_val_10/model_artifacts__20230112_033504__678937.tar.gz", + "timestamp": "20230112_033504", + "random_tag": 678937, + "val_chrs": [ + "10", + "13" + ], + "test_chrs": [ + "7", + "16" + ], + "role": "crossval", + "fold": "chr7_16" + }, + { + "file": "crossval/test_7_16/val_2_21.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_7_val_2/model_artifacts__20230112_042513__545458.tar.gz", + "timestamp": "20230112_042513", + "random_tag": 545458, + "val_chrs": [ + "2", + "21" + ], + "test_chrs": [ + "7", + "16" + ], + "role": "crossval", + "fold": "chr7_16" + }, + { + "file": "crossval/test_7_16/val_8_15.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_7_val_8/model_artifacts__20230112_050443__633662.tar.gz", + "timestamp": "20230112_050443", + "random_tag": 633662, + "val_chrs": [ + "8", + "15" + ], + "test_chrs": [ + "7", + "16" + ], + "role": "crossval", + "fold": "chr7_16" + }, + { + "file": "crossval/test_8_15/val_10_13.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_8_val_10/model_artifacts__20230111_231916__547307.tar.gz", + "timestamp": "20230111_231916", + "random_tag": 547307, + "val_chrs": [ + "10", + "13" + ], + "test_chrs": [ + "8", + "15" + ], + "role": "crossval", + "fold": "chr8_15" + }, + { + "file": "crossval/test_8_15/val_2_21.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_8_val_2/model_artifacts__20230111_235235__239767.tar.gz", + "timestamp": "20230111_235235", + "random_tag": 239767, + "val_chrs": [ + "2", + "21" + ], + "test_chrs": [ + "8", + "15" + ], + "role": "crossval", + "fold": "chr8_15" + }, + { + "file": "crossval/test_8_15/val_4_19.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_8_val_4/model_artifacts__20230112_010218__786570.tar.gz", + "timestamp": "20230112_010218", + "random_tag": 786570, + "val_chrs": [ + "4", + "19" + ], + "test_chrs": [ + "8", + "15" + ], + "role": "crossval", + "fold": "chr8_15" + }, + { + "file": "crossval/test_8_15/val_5_18.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_8_val_5/model_artifacts__20230112_011225__624161.tar.gz", + "timestamp": "20230112_011225", + "random_tag": 624161, + "val_chrs": [ + "5", + "18" + ], + "test_chrs": [ + "8", + "15" + ], + "role": "crossval", + "fold": "chr8_15" + }, + { + "file": "crossval/test_8_15/val_3_20.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_8_val_3/model_artifacts__20230112_032522__994866.tar.gz", + "timestamp": "20230112_032522", + "random_tag": 994866, + "val_chrs": [ + "3", + "20" + ], + "test_chrs": [ + "8", + "15" + ], + "role": "crossval", + "fold": "chr8_15" + }, + { + "file": "crossval/test_8_15/val_7_16.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_8_val_7/model_artifacts__20230112_032715__402958.tar.gz", + "timestamp": "20230112_032715", + "random_tag": 402958, + "val_chrs": [ + "7", + "16" + ], + "test_chrs": [ + "8", + "15" + ], + "role": "crossval", + "fold": "chr8_15" + }, + { + "file": "crossval/test_8_15/val_1_22.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_8_val_1/model_artifacts__20230112_033415__555153.tar.gz", + "timestamp": "20230112_033415", + "random_tag": 555153, + "val_chrs": [ + "1", + "22" + ], + "test_chrs": [ + "8", + "15" + ], + "role": "crossval", + "fold": "chr8_15" + }, + { + "file": "crossval/test_8_15/val_6_17.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_8_val_6/model_artifacts__20230112_034146__220003.tar.gz", + "timestamp": "20230112_034146", + "random_tag": 220003, + "val_chrs": [ + "6", + "17" + ], + "test_chrs": [ + "8", + "15" + ], + "role": "crossval", + "fold": "chr8_15" + }, + { + "file": "crossval/test_8_15/val_9_14.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_8_val_9/model_artifacts__20230112_035958__844529.tar.gz", + "timestamp": "20230112_035958", + "random_tag": 844529, + "val_chrs": [ + "9", + "14" + ], + "test_chrs": [ + "8", + "15" + ], + "role": "crossval", + "fold": "chr8_15" + }, + { + "file": "crossval/test_8_15/val_11_12.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_8_val_11/model_artifacts__20230112_082925__883327.tar.gz", + "timestamp": "20230112_082925", + "random_tag": 883327, + "val_chrs": [ + "11", + "12" + ], + "test_chrs": [ + "8", + "15" + ], + "role": "crossval", + "fold": "chr8_15" + }, + { + "file": "crossval/test_9_14/val_4_19.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_9_val_4/model_artifacts__20230112_004715__989057.tar.gz", + "timestamp": "20230112_004715", + "random_tag": 989057, + "val_chrs": [ + "4", + "19" + ], + "test_chrs": [ + "9", + "14" + ], + "role": "crossval", + "fold": "chr9_14" + }, + { + "file": "crossval/test_9_14/val_5_18.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_9_val_5/model_artifacts__20230112_004934__133559.tar.gz", + "timestamp": "20230112_004934", + "random_tag": 133559, + "val_chrs": [ + "5", + "18" + ], + "test_chrs": [ + "9", + "14" + ], + "role": "crossval", + "fold": "chr9_14" + }, + { + "file": "crossval/test_9_14/val_10_13.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_9_val_10/model_artifacts__20230112_010359__394899.tar.gz", + "timestamp": "20230112_010359", + "random_tag": 394899, + "val_chrs": [ + "10", + "13" + ], + "test_chrs": [ + "9", + "14" + ], + "role": "crossval", + "fold": "chr9_14" + }, + { + "file": "crossval/test_9_14/val_1_22.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_9_val_1/model_artifacts__20230112_011852__672429.tar.gz", + "timestamp": "20230112_011852", + "random_tag": 672429, + "val_chrs": [ + "1", + "22" + ], + "test_chrs": [ + "9", + "14" + ], + "role": "crossval", + "fold": "chr9_14" + }, + { + "file": "crossval/test_9_14/val_2_21.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_9_val_2/model_artifacts__20230112_012316__421576.tar.gz", + "timestamp": "20230112_012316", + "random_tag": 421576, + "val_chrs": [ + "2", + "21" + ], + "test_chrs": [ + "9", + "14" + ], + "role": "crossval", + "fold": "chr9_14" + }, + { + "file": "crossval/test_9_14/val_11_12.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_9_val_11/model_artifacts__20230112_023617__549629.tar.gz", + "timestamp": "20230112_023617", + "random_tag": 549629, + "val_chrs": [ + "11", + "12" + ], + "test_chrs": [ + "9", + "14" + ], + "role": "crossval", + "fold": "chr9_14" + }, + { + "file": "crossval/test_9_14/val_3_20.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_9_val_3/model_artifacts__20230112_030608__546744.tar.gz", + "timestamp": "20230112_030608", + "random_tag": 546744, + "val_chrs": [ + "3", + "20" + ], + "test_chrs": [ + "9", + "14" + ], + "role": "crossval", + "fold": "chr9_14" + }, + { + "file": "crossval/test_9_14/val_6_17.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_9_val_6/model_artifacts__20230112_045850__411630.tar.gz", + "timestamp": "20230112_045850", + "random_tag": 411630, + "val_chrs": [ + "6", + "17" + ], + "test_chrs": [ + "9", + "14" + ], + "role": "crossval", + "fold": "chr9_14" + }, + { + "file": "crossval/test_9_14/val_8_15.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_9_val_8/model_artifacts__20230112_051056__680970.tar.gz", + "timestamp": "20230112_051056", + "random_tag": 680970, + "val_chrs": [ + "8", + "15" + ], + "test_chrs": [ + "9", + "14" + ], + "role": "crossval", + "fold": "chr9_14" + }, + { + "file": "crossval/test_9_14/val_7_16.safetensors", + "source": "gs://tewhey-public-data/crossval_models/models_230111/test_9_val_7/model_artifacts__20230112_053708__678212.tar.gz", + "timestamp": "20230112_053708", + "random_tag": 678212, + "val_chrs": [ + "7", + "16" + ], + "test_chrs": [ + "9", + "14" + ], + "role": "crossval", + "fold": "chr9_14" + } +] \ No newline at end of file