diff --git a/.gitattributes b/.gitattributes index 9ceb8458c8a8c60d02605f9f43cf4983eac51550..9e16d9afd9f7780029d5cfb6970d82e654834ae7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,3 +6,5 @@ *.npz filter=lfs diff=lfs merge=lfs -text *.npy filter=lfs diff=lfs merge=lfs -text data/splits/train_val_split.json filter=lfs diff=lfs merge=lfs -text +releases/2026-10-02/iar_completion/runtime_snapshot/java/review_MolWURCS.jar filter=lfs diff=lfs merge=lfs -text +releases/2026-10-02/iar_completion/runtime_snapshot/java/review_wurcsframework-1.3.1.jar filter=lfs diff=lfs merge=lfs -text diff --git a/README.md b/README.md index 1073894c2c28a4db6c6d13a459d6f17768323d37..0d282397f1d22ee24ca9a9dc9860bdd4d8db03ca 100644 --- a/README.md +++ b/README.md @@ -2,103 +2,29 @@ license: apache-2.0 tags: - glycans -- wurcs - bertose -- affinose -- reproducibility -- training-code -- pytorch --- -# BERTose and AFFINose Training Code +# BERTose and BERToseBind shared code -This repository is the public training and reproducibility companion for the BERTose and AFFINose Hugging Face release. It contains the code, configs, tokenizer assets, split files, and provenance notes needed to understand how the released checkpoints were trained and evaluated. +This repository preserves the original submission and provides the revised code once under [`releases/2026-10-02/`](releases/2026-10-02/README.md). -The released inference checkpoints live separately: +Start with the [shared workbench notebook](https://huggingface.co/supanthadey1/bertose-affinose-inference/blob/main/BERTose_workbench.ipynb) for sequence embeddings, BERToseBind prediction and supported IAR completion. The notebook uses this same code package and downloads only the required separately supplied model/data assets. You can download the notebook from its Hub page and open it in Jupyter or upload it into Google Colab. -- BERTose glycan encoder: `supanthadey1/bertose-glycan-encoder` -- BERTose IAR resolver: `supanthadey1/bertose-iar-resolver` -- AFFINose interaction model: `supanthadey1/affinose-interaction-model` -- Cloud inference notebook: `supanthadey1/bertose-affinose-inference` - -## Repository Map - -| Public workflow | Files | -|---|---| -| BERTose multimodal pretraining | `code/training/train_multimodal.py`, `code/training/multimodal_dataset.py`, `code/training/multimodal_masking.py`, `configs/` | -| BERTose WURCS-BPE tokenizer training | `code/training/train_wurcs_bpe.py`, `code/model/wurcs_bpe_tokenizer.py`, `data/vocab/` | -| BERTose IAR / contrastive refinement | `code/contrastive/`, `code/contrastive_training/`, `code/tokenizer/generate_bpe_ambiguity.py` | -| AFFINose interaction training | `code/affinose/README.md` | -| Benchmark reproduction | `code/benchmarks/`, `code/downstream_tasks/utils/` | -| Embedding and biology probes | `code/probes/` | -| Split and vocabulary assets | `data/splits/`, `data/vocab/` | -| Compute and lineage provenance | `provenance/` | - -Some executable filenames and directories retain historical names so that provenance remains traceable to the original training runs. In public-facing text, use BERTose for the glycan encoder / IAR workflows and AFFINose for the protein-glycan interaction workflow. - -## What Is Included - -- Core BERTose architecture and dataset utilities. -- BERTose multimodal pretraining entrypoint and configs. -- WURCS-BPE tokenizer training and ambiguity-token generation code. -- Contrastive refinement / IAR training and negative generation scripts. -- AFFINose interaction-model data construction, split generation, training, and inference code. -- Benchmark and probe scripts used for manuscript analyses. -- Vocabulary files, ambiguity-token maps, train/validation split metadata, and leakage-exclusion lists. -- Compute-provenance notes and representative launch scripts. - -## What Is Not Included - -Large training artifacts are intentionally not bundled here: - -- Full pretraining corpus pickles such as `sequences_bpe.pkl`. -- Multi-GB intermediate mapping files. -- Full training checkpoints; released checkpoints are hosted in the separate model repositories listed above. -- ESM-C protein embeddings required for AFFINose training; users should generate or provide those separately according to the ESM-C access rules. - -## Quick Import Check - -After downloading the repository, a lightweight import check should work without access to the full training data: +## Install locally ```bash -cd code -PYTHONDONTWRITEBYTECODE=1 python - <<'PY' -import importlib - -for module in [ - "training.multimodal_dataset", - "training.masking", - "training.multimodal_masking", - "training.train_multimodal", - "training.train_wurcs_bpe", - "model.dataset", - "downstream_tasks.utils.tokenizer", - "downstream_tasks.utils.wurcs_bpe_tokenizer", - "downstream_tasks.utils.dataset", -]: - importlib.import_module(module) - print("ok", module) -PY +python3.12 -m venv .venv +source .venv/bin/activate +python -m pip install huggingface_hub==1.1.5 +hf download supanthadey1/bertose-affinose-training-code --repo-type model --revision main \ + --include "releases/2026-10-02/*" --local-dir shared-code +cd shared-code/releases/2026-10-02 +python -m pip install -r requirements-workbench.txt ``` -Full training requires the original large data artifacts and appropriate GPU resources. - -## Environment - -Install the core dependencies with: - -```bash -pip install -r requirements.txt -``` - -Some probe scripts also use optional scientific plotting and glycan-analysis packages. See `requirements.txt` for the split between core and optional dependencies. - -## Reproducibility Notes - -- `MANIFEST.md` documents the file provenance and model-lineage mapping. -- `RELEASE_AUDIT.md` documents the public-release state, fixed gaps, verification checks, and known scope limits. -- Cluster launch scripts under `provenance/compute_provenance/` preserve the original compute context. They are provenance records, not portable one-command launchers for every environment. +See the [package README](releases/2026-10-02/README.md) for the task commands and [reproduction instructions](releases/2026-10-02/docs/reproduction.md) for training entrypoints, additional input contracts and compute requirements. The complete sources, configurations, figures and execution evidence are preserved here. Portable inference checks do not establish a complete portable training or benchmark rerun. -## License And Citation +Model weights remain versioned under `releases/2026-09-28/` in the [encoder](https://huggingface.co/supanthadey1/bertose-glycan-encoder), [BERToseBind](https://huggingface.co/supanthadey1/affinose-interaction-model) and [IAR](https://huggingface.co/supanthadey1/bertose-iar-resolver) repositories. Shared data remain in [GlyCorpus](https://huggingface.co/datasets/supanthadey1/glycorpus). Their scientific-file hashes are recorded in the asset downloader configuration. -This repository is released under the Apache License 2.0 as a research reproducibility companion for the BERTose and AFFINose manuscript. See `LICENSE`. Third-party dependencies and external models, including EvolutionaryScale ESM-C, retain their own licenses and access terms. Please cite the associated manuscript once available. +Original code uses Apache-2.0 with preserved third-party notices and exceptions. Revised weights use Apache-2.0. Author-generated data use CC-BY-4.0; inherited inputs and ESM-C dependencies retain their own terms. See the versioned LICENSE, NOTICE and provenance manifest. diff --git a/releases/2026-10-02/iar_completion/requirements.txt b/releases/2026-10-02/iar_completion/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..488e9d20b718a457e64a1b8263e1536004f3ec87 --- /dev/null +++ b/releases/2026-10-02/iar_completion/requirements.txt @@ -0,0 +1,5 @@ +# Local artifact checks: Python 3.12.4, these already installed versions. +# Historical final job: Python 3.10.16, torch 2.9.1+cu128; NumPy unrecorded. +torch==2.9.1 +numpy==1.26.4 +tqdm>=4.0 diff --git a/releases/2026-10-02/iar_completion/runtime_dependencies.json b/releases/2026-10-02/iar_completion/runtime_dependencies.json new file mode 100644 index 0000000000000000000000000000000000000000..d8ff34801f54dcdbc4882b992fe08f5467a3dc88 --- /dev/null +++ b/releases/2026-10-02/iar_completion/runtime_dependencies.json @@ -0,0 +1,280 @@ +{ + "scope": "Static dependency audit of the unchanged final entrypoint; no full pipeline replay", + "final_source": "originals/wa3_final_iar_readout_all.py", + "top_level_external_packages": [ + "numpy", + "torch" + ], + "transitive_direct_packages": [ + "tqdm (submitted WA0 harness and distiller)" + ], + "external_executables": [ + "java", + "javac" + ], + "imports": [ + { + "module": "__future__", + "names": [ + "annotations" + ], + "line": 111 + }, + { + "module": "base64", + "line": 113 + }, + { + "module": "builtins", + "line": 114 + }, + { + "module": "collections", + "line": 115 + }, + { + "module": "csv", + "line": 116 + }, + { + "module": "functools", + "line": 117 + }, + { + "module": "gzip", + "line": 118 + }, + { + "module": "hashlib", + "line": 119 + }, + { + "module": "importlib.util", + "line": 120 + }, + { + "module": "json", + "line": 121 + }, + { + "module": "os", + "line": 122 + }, + { + "module": "platform", + "line": 123 + }, + { + "module": "re", + "line": 124 + }, + { + "module": "shutil", + "line": 125 + }, + { + "module": "subprocess", + "line": 126 + }, + { + "module": "sys", + "line": 127 + }, + { + "module": "time", + "line": 128 + }, + { + "module": "pathlib", + "names": [ + "Path" + ], + "line": 129 + }, + { + "module": "numpy", + "line": 131 + }, + { + "module": "torch", + "line": 132 + }, + { + "module": "frozen_training.a5_wurcs_bpe", + "line": 339 + }, + { + "module": "frozen_tree_runtime", + "line": 340 + }, + { + "module": "pipelib", + "names": [ + "parse_record", + "SIDE_RE", + "node_index" + ], + "line": 521 + }, + { + "module": "classify", + "names": [ + "PLAIN_LINK" + ], + "line": 522 + } + ], + "path_bindings": [ + { + "variable": "PROJ", + "source_expression": "Path(\"/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training\")", + "line": 137 + }, + { + "variable": "PKGD", + "source_expression": "PROJ / \"data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1\"", + "line": 138 + }, + { + "variable": "WA0_HARNESS", + "source_expression": "PROJ / \"writing/glycangt_heldout_ipa_validation/cluster/heldout_ipa_eval.py\"", + "line": 139 + }, + { + "variable": "WA0_VOCAB", + "source_expression": "PROJ / \"data/bpe_vocabulary_clean.json\"", + "line": 140 + }, + { + "variable": "WA0_AMB", + "source_expression": "PROJ / \"data/bpe_ambiguity_tokens.json\"", + "line": 141 + }, + { + "variable": "WA0_CKPT_PATH", + "source_expression": "PROJ / \"checkpoints_v5b_excluded/best_v5b_excluded_model.pt\"", + "line": 142 + }, + { + "variable": "BENCH_DIR", + "source_expression": "PROJ / \"writing/glycangt_heldout_ipa_validation\"", + "line": 143 + }, + { + "variable": "SCHEMA_DIR", + "source_expression": "Path(\"/work/ratul1/supantha/glycan-SD-VS/review/iar_pipe_schema_20260823_r1\")", + "line": 144 + }, + { + "variable": "JAVA_BIN", + "source_expression": "Path(\"/work/ratul1/supantha/miniconda3/envs/DeepGlycanSite/bin\")", + "line": 145 + }, + { + "variable": "ROOT", + "source_expression": "Path(\"/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc\")", + "line": 146 + }, + { + "variable": "TRAIN_MOD", + "source_expression": "ROOT / (\"writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/\"\n \"run_review_md_temporal_20x6_training_r3.py\")", + "line": 147 + }, + { + "variable": "CK", + "source_expression": "ROOT / (\"writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/\"\n \"review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/\"\n \"review_md20x6_checkpoint_best.pt\")", + "line": 149 + }, + { + "variable": "WORK", + "source_expression": "Path(os.environ[\"WORK\"])", + "line": 154 + }, + { + "variable": "OUT", + "source_expression": "WORK / \"outputs\"", + "line": 156 + }, + { + "variable": "JAVA_DIR", + "source_expression": "WORK / \"inputs/java\"", + "line": 157 + }, + { + "variable": "SETS", + "source_expression": "{\n \"bench1392\": {\"runs\": BENCH_RUNS, \"wa0_root\": BENCH_DIR / \"outputs\",\n \"baseline_runs\": [\"benchmark1392_residue_full\", \"benchmark1392_linkage_full\"]},\n \"seal162\": {\"runs\": SEAL_RUNS, \"wa0_root\": WORK / \"inputs/wa0_seal\",\n \"baseline_runs\": [\"seal162_residue_t080\", \"seal162_linkage_t080\"]},\n}", + "line": 182 + } + ], + "dynamic_imports": [ + { + "entry": "load_wa0_evaluator", + "path_variable": "WA0_HARNESS", + "included": "runtime_snapshot/project/writing/glycangt_heldout_ipa_validation/cluster/heldout_ipa_eval.py", + "transitive": [ + "writing/cluster/nature_submission/code/training/ipa_bpe_distillation.py", + "writing/cluster/nature_submission/code/model/__init__.py", + "writing/cluster/nature_submission/code/model/multimodal_glycan_bert_v3.py", + "writing/cluster/nature_submission/code/model/glycan_bert.py", + "bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py" + ], + "scope": "Original harness imported and initialized with identity model in smoke check" + }, + { + "entry": "build_wa3_tokenizer", + "included": "runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1", + "transitive": [ + "three frozen Python sources", + "review_bpe_vocabulary.json", + "review_bpe_ambiguity_tokens.json", + "bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py" + ], + "scope": "Imports through generated temporary shim verified" + }, + { + "entry": "load_achem", + "included": "runtime_snapshot/schema", + "transitive": [ + "pipelib.py", + "classify.py" + ], + "scope": "Imports verified; these dependencies were not hash-pinned by final job" + }, + { + "entry": "load_model", + "path_variable": "TRAIN_MOD", + "in_surrounding_code_package": "../bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/run_review_md_temporal_20x6_training_r3.py", + "transitive": "Native runtime imports and authority receipts in ../bertose_source; additional immutable external workspace inputs remain required", + "scope": "Not called in local checks because it loads the full encoder checkpoint" + } + ], + "external_data": [ + { + "resource": "WA3 checkpoint", + "sha256": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "included": false + }, + { + "resource": "Parent index and six training arrays", + "details": "provenance/required_input_hashes.json", + "included": false + }, + { + "resource": "Benchmark and grey-seal CSVs", + "details": "provenance/final_run/run_manifest.json inputs", + "included": false + }, + { + "resource": "Four original WA0 case_details.jsonl and summary.md pairs", + "runs": [ + "benchmark1392_residue_full", + "benchmark1392_linkage_full", + "seal162_residue_t080", + "seal162_linkage_t080" + ], + "included": false + } + ], + "lineage_sources_are_runtime_imports": false, + "java_helper_compilation_checked": false +} diff --git a/releases/2026-10-02/iar_completion/runtime_snapshot/java/review_A5WurcsArrayTreeAudit.java b/releases/2026-10-02/iar_completion/runtime_snapshot/java/review_A5WurcsArrayTreeAudit.java new file mode 100644 index 0000000000000000000000000000000000000000..d9d26d3d4f7e5cfd8718ddd32615f96973a16a8d --- /dev/null +++ b/releases/2026-10-02/iar_completion/runtime_snapshot/java/review_A5WurcsArrayTreeAudit.java @@ -0,0 +1,467 @@ +package review.a5; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Base64; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Queue; +import java.util.Set; + +import org.glycoinfo.WURCSFramework.util.array.WURCSImporter; +import org.glycoinfo.WURCSFramework.wurcs.array.GLIP; +import org.glycoinfo.WURCSFramework.wurcs.array.GLIPs; +import org.glycoinfo.WURCSFramework.wurcs.array.LIN; +import org.glycoinfo.WURCSFramework.wurcs.array.RES; +import org.glycoinfo.WURCSFramework.wurcs.array.UniqueRES; +import org.glycoinfo.WURCSFramework.wurcs.array.WURCSArray; + +/** + * Original-axis official WURCS adjudicator. + * + *
This helper deliberately uses WURCSImporter/WURCSArray rather than a + * normalized WURCSGraph. RES list order is the sequence residue axis and + * every GLIP carries its explicit RESIndex, so no normalized-backbone + * permutation is applied to depth or topology targets.
+ */ +public final class A5WurcsArrayTreeAudit { + private A5WurcsArrayTreeAudit() {} + + private static final Base64.Decoder B64_DECODER = Base64.getUrlDecoder(); + private static final Base64.Encoder B64_ENCODER = + Base64.getUrlEncoder().withoutPadding(); + + private static String b64(String value) { + return B64_ENCODER.encodeToString(value.getBytes(StandardCharsets.UTF_8)); + } + + private static String sha256(String value) throws Exception { + byte[] digest = MessageDigest.getInstance("SHA-256") + .digest(value.getBytes(StandardCharsets.UTF_8)); + StringBuilder result = new StringBuilder(64); + for (byte item : digest) { + result.append(String.format("%02x", item & 0xff)); + } + return result.toString(); + } + + private static boolean probabilityIsExact(GLIP linkage) { + return linkage.getBackboneProbabilityLower() == 1.0 + && linkage.getBackboneProbabilityUpper() == 1.0 + && linkage.getModificationProbabilityLower() == 1.0 + && linkage.getModificationProbabilityUpper() == 1.0; + } + + private static String pairKey(int left, int right) { + return Math.min(left, right) + ":" + Math.max(left, right); + } + + private static String process(String rowIndex, String wurcs) throws Exception { + WURCSImporter importer = new WURCSImporter(); + WURCSArray array = importer.extractWURCSArray(wurcs); + List": 942, + "k?-o1": 943, + "3|d": 944, + "EE": 945, + "hxxxxh": 946, + "u2112A": 947, + "3|e": 948, + "f4-h1": 949, + "3}": 950, + "CCO": 951, + "F/4F/4": 952, + "a1122m-1x": 953, + "i4-k1": 954, + "g4-i1": 955, + "axxxh-1x": 956, + "c4-d2": 957, + ")/3(CCCCCC$16)": 958, + "eE": 959, + "u12": 960, + "a2222h-1b": 961, + "CCCCC$": 962, + "q3-": 963, + "u212": 964, + "zz": 965, + "a6-o1": 966, + "c?-d2": 967, + "p3-q1": 968, + "a6-n1": 969, + "p2": 970, + "N?|": 971, + "N?|O": 972, + "N?|O?|": 973, + "N?|O?|P": 974, + "N?|O?|P?|": 975, + "N?|O?|P?|Q": 976, + "N?|O?|P?|Q?|": 977, + "N?|O?|P?|Q?|R": 978, + "N?|O?|P?|Q?|R?|": 979, + "N?|O?|P?|Q?|R?|S": 980, + "N?|O?|P?|Q?|R?|S?|": 981, + "N?|O?|P?|Q?|R?|S?|T": 982, + "?|U": 983, + "?|U?|": 984, + "?|U?|V": 985, + "ad222": 986, + "1m": 987, + "f6-g1": 988, + "6}": 989, + "1*NC(CCCCCC$4": 990, + "r?-s1": 991, + "e?-f2": 992, + "*Cl": 993, + "l1-": 994, + "F/4F/4F/3=O": 995, + "a?|b?}-{": 996, + "a?|b?}-{a?|b": 997, + "a?|b?}-{a?|b?": 998, + "Br": 999, + "xm-1u": 1000, + "a2222h-1x": 1001, + "g?-i1": 1002, + "u2122m": 1003, + "d22h": 1004, + "a5-c1": 1005, + "ad122": 1006, + "i?-l1": 1007, + "s?-": 1008, + "a211h-1b": 1009, + "3*": 1010, + "3*OCCC": 1011, + "c4-k1": 1012, + "d6-h1": 1013, + "a1x2": 1014, + "h4-j1": 1015, + "c4-g1": 1016, + "a2-": 1017, + "k6-o1": 1018, + "a1122A-1b": 1019, + "?|h?|i?|j?|k?}": 1020, + "g6-i1": 1021, + "^XCC": 1022, + "a3|b": 1023, + "3|c3|d": 1024, + "(CCCCCC$5": 1025, + "=^E": 1026, + "a3|b3|c3|d": 1027, + "5*OCC/3=O": 1028, + "*OPOCCN": 1029, + "/3O": 1030, + "ax12xh-1d": 1031, + "a3|b3|c3|d3|e": 1032, + "C/5O/3=O": 1033, + "n?-o2": 1034, + "b?-h1": 1035, + "r4-": 1036, + "d6-g1": 1037, + "6~n": 1038, + "4*OP^XOP^XO": 1039, + "a?-j1": 1040, + "j3-k2": 1041, + "m3-n2": 1042, + "a21EE": 1043, + "a3|b3|c3|d3|e3|f": 1044, + "b4-f1": 1045, + "c4-i1": 1046, + "c7-": 1047, + "a2112A-1b": 1048, + "a1-d3~n": 1049, + "hdx": 1050, + "a1221m-1b": 1051, + "C=^ZCCC=^Z": 1052, + "hdxdh": 1053, + "a2d12": 1054, + "a3|b3|c3|d3|e3|f3|g": 1055, + "e3-f2": 1056, + "C=^ZCCC=^ZCCCCCC/3=O": 1057, + "q2-": 1058, + "O/2=O": 1059, + "/11": 1060, + "q4-r1": 1061, + "3|o": 1062, + "m1-": 1063, + "*NC=O": 1064, + "a1112h-1b": 1065, + "h6-i1": 1066, + "u22": 1067, + "c8-": 1068, + "/3CO/6=O": 1069, + "/3CO/6=O/3C": 1070, + "/7)O(/6)": 1071, + "a6-r1": 1072, + "a?-b2": 1073, + "3|l": 1074, + "g6-j1": 1075, + "a222h-1b": 1076, + "3|h3|i": 1077, + "3*OCC=C": 1078, + "q3-r1": 1079, + "4*OCCCC": 1080, + "/8)O(": 1081, + "6*OCCCC": 1082, + "1A": 1083, + "d6-f1": 1084, + "axxxxA-1x": 1085, + "d11h": 1086, + "g3-h2": 1087, + "a1-e": 1088, + "*OC(CCCCCC$4/8)O(": 1089, + "C/1": 1090, + "/5)": 1091, + "e?-i1": 1092, + "dd2": 1093, + "c3-d2": 1094, + "/7)O(/6)O/3=O": 1095, + "w1": 1096, + "(CCCCCC$4)/3=O": 1097, + "c6-m1": 1098, + "g1-": 1099, + "h?-j1": 1100, + "3|n": 1101, + "a6-h1": 1102, + "CN*2": 1103, + "dd1": 1104, + "g6-h1": 1105, + "a21eE": 1106, + "a1111": 1107, + "u122h": 1108, + "a1212": 1109, + "i6-l1": 1110, + "a?-k1": 1111, + "u21": 1112, + "i?-k1": 1113, + "a6-g1": 1114, + "n2-8": 1115, + "a21FF": 1116, + "6*S": 1117, + "(CCCCCC$2": 1118, + "a?-g1": 1119, + "o3|o": 1120, + "a122h-1b": 1121, + "p2-o3|o": 1122, + "p2-o3|o6": 1123, + "?}*OPO": 1124, + "=^XCC": 1125, + "d22": 1126, + "a2122m-1a": 1127, + "c8-d2": 1128, + "dd1dh": 1129, + "d?-k1": 1130, + "dd2dh": 1131, + "CC$2": 1132, + "3|m": 1133, + "h1-": 1134, + "CCCCCCCCC/3=O": 1135, + "3|h3|i3|j": 1136, + "1*OP^XOCCN": 1137, + "r2": 1138, + "Cl/6": 1139, + "=^XCC/3O": 1140, + "h6-j1": 1141, + "/4=O": 1142, + "C^S": 1143, + "/6=O/3=O": 1144, + "a1-c3~n": 1145, + "/8)": 1146, + "a1x1": 1147, + "a1-d4~n": 1148, + "9*OCC/3=O": 1149, + "c5-e1": 1150, + "2*O": 1151, + "c4-j1": 1152, + "a?-m1": 1153, + "l?-m2": 1154, + "4|i": 1155, + "5)": 1156, + "Aad2": 1157, + "xm": 1158, + "f?-h1": 1159, + "axx1xh-1u": 1160, + "a?-i1": 1161, + "u11222h": 1162, + "N(CCCCCC$5": 1163, + "a4-d1": 1164, + "3*OSiC/3C/3C": 1165, + "h1122h": 1166, + "h8-": 1167, + "b1-": 1168, + "a4334h-1x": 1169, + "1-d4|d": 1170, + "CCCCCCCCCCC/5O/3=O": 1171, + "r2-": 1172, + "*N*": 1173, + "h8-i2": 1174, + "r4-s1": 1175, + "i6-j2": 1176, + "r3-": 1177, + "d2|": 1178, + "A?}-{": 1179, + "A?": 1180, + "C=^ZCCCCCCCCC/3=O": 1181, + "?}*OCC": 1182, + "a3344h-1a": 1183, + "p?-q2": 1184, + "A?|B?}-{": 1185, + "A?|B?": 1186, + "h222h": 1187, + "b5-": 1188, + "a1112h-1x": 1189, + "u2121A": 1190, + "a?-n1": 1191, + "CCCCCCCCCC/3=O": 1192, + "2*NCO": 1193, + "1-d4|d6|": 1194, + "($": 1195, + "axx2xh-1d": 1196, + "c?-n1": 1197, + "3|h3|i3|j3|k": 1198, + "uxx2": 1199, + "xA-1": 1200, + "2*OCCC/4C/4C/3=O": 1201, + "f6-h1": 1202, + "?|U?|V?|": 1203, + "?|U?|V?|W": 1204, + "?|U?|V?|W?|": 1205, + "?|U?|V?|W?|X": 1206, + "?|U?|V?|W?|X?|": 1207, + "?|U?|V?|W?|X?|Y": 1208, + "?|a": 1209, + "6*OSiCC/4C/4C": 1210, + "/7=O": 1211, + "/12": 1212, + "a1221h-1a": 1213, + "s2-": 1214, + "3*OPO/3O/3=O": 1215, + "d1-c3|c6": 1216, + "6*OCCC/4C/4C/3=O": 1217, + "u1122m": 1218, + "CN$": 1219, + "xxxh": 1220, + "3|p": 1221, + "hU122h": 1222, + "s?-t1": 1223, + "c5-d1": 1224, + "a1211h-1b": 1225, + "m4-o1": 1226, + "Cl/3=O": 1227, + "3*F": 1228, + "?|h?|i?|j?|k?|l?|m?}": 1229, + "e3-g1": 1230, + "ad1": 1231, + "g?-j1": 1232, + "a1211h-1x": 1233, + "f7-": 1234, + "/4C/3=O": 1235, + "/13": 1236, + "n2-o1": 1237, + "n6-": 1238, + "a6-p1": 1239, + "3*OSiCC/4C/4C/3C/3C": 1240, + "o?-p2": 1241, + "u4": 1242, + "n1*1O(CCCCCC$3/6)NCN": 1243, + "j6-k2": 1244, + "axx2xh-1u": 1245, + "O/2=O/2=O": 1246, + "A?|B?|C?|D?}-{": 1247, + "A?|B?|C?|D?": 1248, + "u222h": 1249, + "6*F": 1250, + "4*F": 1251, + "*OPOCCN/3O/3=O": 1252, + "e7-": 1253, + "122h-2a": 1254, + "ax22": 1255, + "a4344h-1x": 1256, + "a?-h1": 1257, + "a2|": 1258, + "f1-": 1259, + "3*O": 1260, + "?|H?|I?|J?}-{": 1261, + "?|H?|I?|J?": 1262, + "6n2-8": 1263, + "h3-i2": 1264, + "7*NCC/3=O": 1265, + "a6-b2": 1266, + "/4=O/3C": 1267, + "m6-n2": 1268, + "e4|": 1269, + "=^EC(CCCCCC$": 1270, + "6*OSiCC/4C/4C/3C/3C": 1271, + "t2-": 1272, + "c2|": 1273, + "b?-i1": 1274, + "A": 1275, + "l4-n1": 1276, + "d2|e2": 1277, + "a1122A-1x": 1278, + "i6-j1": 1279, + "h6-k1": 1280, + "*S": 1281, + "k3-l2": 1282, + "a222h-1x": 1283, + "2*OSiC/3C/3C": 1284, + "e6-g1": 1285, + "a1221h-1x": 1286, + "xA-1u": 1287, + "b2|": 1288, + "q2-p": 1289, + "q2-p3|p": 1290, + "q2-p3|p6": 1291, + "a2221m-1a": 1292, + "n3|n": 1293, + "Aa11": 1294, + "a4|": 1295, + "6*I": 1296, + "NCCO": 1297, + "3|h3|i3|j3|k3|l": 1298, + "4|h": 1299, + "a2|b2|": 1300, + "a2|b2|c2|": 1301, + "r3-s1": 1302, + "n3|n6": 1303, + "e4|f": 1304, + "ux12": 1305, + "u112": 1306, + "a2|b2|c2|d2|e2": 1307, + "j?-m1": 1308, + "n1*1": 1309, + "o2-n3|n6": 1310, + "?|h?|i?|j?|k?|l?}": 1311, + "s4-": 1312, + "4*NC=O": 1313, + "xh-2x": 1314, + "a121": 1315, + "b4|": 1316, + "6)/3=O": 1317, + "6*NCC": 1318, + "c?-o1": 1319, + "o1-": 1320, + "4*OSiC/3C/3C": 1321, + "^XO*": 1322, + "a2211h-1x": 1323, + "o4-q1": 1324, + "dxx": 1325, + "(CC": 1326, + "7*OCC/3=O": 1327, + "^XO*/3CO/6=O/3C": 1328, + "axxxxx": 1329, + "6/9": 1330, + "a?-o1": 1331, + "a?|b?|c?}*OC": 1332, + "7*OP^XOCCN/3O/3=O": 1333, + "a4|b4|": 1334, + "a4|b4|c": 1335, + "a4|b4|c4|d": 1336, + "a4|b4|c4|d4|": 1337, + "6*O": 1338, + "3*NCC": 1339, + "CCCC$": 1340, + "/2C": 1341, + "a1-c4~n": 1342, + "ad2": 1343, + "a21d2": 1344, + "uxx2xh": 1345, + "2*NCCO": 1346, + "i3|i": 1347, + "*OC(CCCCCC$4/7)": 1348, + "h4h": 1349, + "*OC(CCCCCC$4/7)C/3=O": 1350, + "n2*1O": 1351, + "CCCCCCC/3=O": 1352, + "CO($": 1353, + "e4|f4|": 1354, + "2*N=^XCC/3O": 1355, + "1*OC": 1356, + "b?-j1": 1357, + "334h": 1358, + "=^EC(CCCCCC$6/9": 1359, + "6*OS(CCCCCC$4/7)": 1360, + "a?-r1": 1361, + "ad122m-1b": 1362, + "n?}": 1363, + "(/4)*2": 1364, + "d221h": 1365, + "4}": 1366, + "d12h": 1367, + "a4|b4|c4|d4|e4|f4|": 1368, + "a4|b4|c4|d4|e4|f4|g": 1369, + "axx21": 1370, + "A?|B?|C?}-{": 1371, + "A?|B?|C?": 1372, + "CO/4=O/3C": 1373, + "m?-p1": 1374, + "d4-j1": 1375, + "d111h": 1376, + "3|r": 1377, + "ux12xh": 1378, + "h6-l1": 1379, + "a2211h-1a": 1380, + "/4)*2": 1381, + "N$": 1382, + "s3-": 1383, + "c4-l1": 1384, + "l?-p1": 1385, + "ax1": 1386, + "6*OCCCCCCCC": 1387, + "j3|j": 1388, + "N/3=O": 1389, + "ad122h-1": 1390, + "Ad1zz": 1391, + "3*OCCC/4C/4C/3=O": 1392, + "i6-k1": 1393, + "k4-m1": 1394, + "3*OC^R": 1395, + "6*Br": 1396, + "ad222m-1b": 1397, + "a1-d2": 1398, + "j6-m1": 1399, + "d8-": 1400, + "g8-": 1401, + "n4-p1": 1402, + "a1-b4~n": 1403, + "=^ZCC": 1404, + "/10=O(/4)CN*2": 1405, + "a2212h-1b": 1406, + "i3|i6": 1407, + "1*NCCN": 1408, + "a8-": 1409, + "g8-h2": 1410, + "u2222h": 1411, + "s2-r": 1412, + "s2-r3|r": 1413, + "s2-r3|r6": 1414, + "C^RO": 1415, + "2*OP": 1416, + "a1111h-1a": 1417, + "a2d12m-1a": 1418, + "ax21": 1419, + "l6-p1": 1420, + "3|q": 1421, + "k3|k": 1422, + "2111m": 1423, + "f3-h1": 1424, + "c1-": 1425, + "1*": 1426, + "2*I": 1427, + "(CCCN": 1428, + "Ad2zz": 1429, + "j2-i3|i6": 1430, + "a6-q1": 1431, + "k2-j3|j": 1432, + "k2-j3|j6": 1433, + "a21EEA-1a": 1434, + "3|s": 1435, + "d2h": 1436, + "a6-b": 1437, + "NCC": 1438, + "s3|s": 1439, + "/12C": 1440, + "k?-n1": 1441, + "b5-c1": 1442, + "t2-s3|s": 1443, + "t2-s3|s6": 1444, + "x2h": 1445, + "a2212h-1x": 1446, + "a?-p1": 1447, + "(CCCCCN$": 1448, + "y1": 1449, + "a2121h-1b": 1450, + "l2-k3|k": 1451, + "l2-k3|k6": 1452, + "(CCCCCC$12": 1453, + "xxh": 1454, + "NC$": 1455, + "a2222h-1a": 1456, + "(N": 1457, + "a2221h-1b": 1458, + "j?-l1": 1459, + "6*OC^XO*/3CO/6=O/3C": 1460, + "2*OCCC": 1461, + "r2-q": 1462, + "r2-q3|q": 1463, + "r2-q3|q6": 1464, + "s4-t1": 1465, + "a1-d2~n": 1466, + "a1d22": 1467, + "d21h": 1468, + "7*OPO/3O/3=O": 1469, + "ad21": 1470, + "a2d22": 1471, + "?|U?|V?|W?|X?|Y?|": 1472, + "?|U?|V?|W?|X?|Y?|Z": 1473, + "?|aa?|": 1474, + "?|aa?|a": 1475, + "?|aa?|ab": 1476, + "?*OPO/3O/3=O": 1477, + "a1222h-1a": 1478, + "(CCCCCC$11": 1479, + "d7-e1": 1480, + "2*NC(CCCCCC$4)/3=O": 1481, + "5*OC": 1482, + "a1x2xh-1u": 1483, + "(CCCCCC$2/5": 1484, + "ad222m-1x": 1485, + "C^X": 1486, + "l?-q1": 1487, + "/4)*2/10=O": 1488, + "x22h": 1489, + "3*OC(CCCCCC$4/7)OC": 1490, + "d8-e2": 1491, + "l?-n1": 1492, + "a3344h-1x": 1493, + "k6-n1": 1494, + "j6-k1": 1495, + "6*NS": 1496, + "N$2": 1497, + "l3-m2": 1498, + "/4O/3=O": 1499, + "4|h4|i": 1500, + "ad112": 1501, + "j4-l1": 1502, + "C(CCCCCC$6)/3=O": 1503, + "122h-2x": 1504, + "8*": 1505, + "n1*1O(CCCCCC$3/6)NS": 1506, + "a1-b3~n": 1507, + "3*OP^XOCCN/3O/3=O": 1508, + "344h": 1509, + "a6-s1": 1510, + "6*Cl": 1511, + "CF/4F/4F/3=O": 1512, + "CF/4F/4F/3=O/3=O": 1513, + "e7-f1": 1514, + "A1": 1515, + "a6-t1": 1516, + "8*N": 1517, + "a3-b2": 1518, + "h22": 1519, + "a?-s1": 1520, + "6*OSiC/3C/3C": 1521, + "*OSCF/4F/4F/3=O/3=O": 1522, + "11xh": 1523, + "p4-r1": 1524, + "s2": 1525, + "k?-m1": 1526, + "a1x1xh-1u": 1527, + "/7=O/5": 1528, + "axxxxxh-1a": 1529, + "a6-u1": 1530, + "a1122m-1b": 1531, + "s3-t1": 1532, + "C=^ZCCCCCCC/3=O": 1533, + "|f2": 1534, + "8*(N": 1535, + "6*OP^XOCCN": 1536, + "222m": 1537, + "l/3=O": 1538, + "*O*": 1539, + "h12": 1540, + "6*SO/2=O/2=O": 1541, + "a1-f": 1542, + "(CCCCCC$4)/3C": 1543, + "t?-": 1544, + "Ad1dd11h": 1545, + "2*OPN": 1546, + "#N": 1547, + "a2|b2|c2|d2|e2|f2": 1548, + "p6-": 1549, + "a?-q1": 1550, + "c?-q1": 1551, + "4|j": 1552, + "f?-i1": 1553, + "1n1-": 1554, + "(CCCNCC$": 1555, + "Aad21122h-2b": 1556, + "4)/3=O": 1557, + "/14": 1558, + "a1211h-1a": 1559, + "2*C": 1560, + "b6-h1": 1561, + "n1*1O(CCCCCC$3": 1562, + "3*OC^RCO/4=O/3C": 1563, + "m3|m": 1564, + "C=^ZCCC=^ZCCC=^ZCC": 1565, + "b3|b": 1566, + "a?|b?|c?|d?}*OC": 1567, + "a21FFA-1a": 1568, + "a21EEA-1x": 1569, + "(CCCCNC$": 1570, + "h11": 1571, + "d6-e2": 1572, + "u1211h": 1573, + "h21": 1574, + "Ad2dd22h": 1575, + "Ad1dd22h": 1576, + "t2": 1577, + "z1": 1578, + "a1222h-1x": 1579, + "f6-i1": 1580, + "b3-e1": 1581, + "a1d21": 1582, + "b8-": 1583, + "/15": 1584, + "Aad22111m": 1585, + "ad111": 1586, + "4*OSC/3=O/3=O": 1587, + "a21eEA-1a": 1588, + "O/5O/5=O/3O/3=O": 1589, + "a344": 1590, + "c?-p1": 1591, + "O/9": 1592, + "n?-q1": 1593, + "3*N*": 1594, + "Ad2dd11h": 1595, + "4*C": 1596, + "2*OCC=C": 1597, + "3)": 1598, + "a6-b3*N*": 1599, + "C#N": 1600, + "/8)O": 1601, + "a1*OC": 1602, + "n2-m3|m": 1603, + "n2-m3|m6": 1604, + "CCCl/6": 1605, + "CCCl/6Cl/6": 1606, + "CCCl/6Cl/6Cl/3=O": 1607, + "ad22": 1608, + "6*NCN(CCCCCC$5": 1609, + "6*OPO*": 1610, + "q?-r2": 1611, + "?|i?}": 1612, + "a?|b?|c?|d?|e?}*OC": 1613, + "c6-n1": 1614, + "A2": 1615, + "x2xh": 1616, + "4*OSiCC/4C/4C/3C/3C": 1617, + "m?-q1": 1618, + "12m": 1619, + "7*N": 1620, + "=^EC(CCCCCC$6/9)O(": 1621, + "a21eEA-1x": 1622, + "1n2-": 1623, + "j6-n1": 1624, + "l?-o1": 1625, + "n3-o2": 1626, + "a21FFA-1x": 1627, + "a4-e1": 1628, + "haxx": 1629, + "m?-r1": 1630, + "adxx": 1631, + "a?-t1": 1632, + "2*OS(CCCCCC$4/7)": 1633, + "a2221h-1x": 1634, + "a222h-1a": 1635, + "b3": 1636, + "t3-": 1637, + "Aad": 1638, + "c3-f1": 1639, + "h6-i2": 1640, + "q4-s1": 1641, + "CC^R": 1642, + "3|h3|i3|j3|k3|l3|m": 1643, + "3*CO": 1644, + "a1-e3~n": 1645, + "Aa11122h-2a": 1646, + "3*OS(CCCCCC$4/7)": 1647, + "ud222m": 1648, + "a?|b?|c?|d?}*OSO": 1649, + "$5": 1650, + "u2-": 1651, + "a6-b1*N*": 1652, + "g4-": 1653, + "u1221h": 1654, + "a6-c2": 1655, + "h-1u": 1656, + "p1-": 1657, + "/18": 1658, + "/11=O": 1659, + "OC": 1660, + "a3": 1661, + "3*S": 1662, + "xm-1x": 1663, + "6*OPOCCN/3O/3=O": 1664, + "CCCC$4": 1665, + "f6|": 1666, + "2*OSiCC/4C/4C/3C/3C": 1667, + "C^RO*2": 1668, + "a6-d2": 1669, + "=N": 1670, + "111h": 1671, + "p3-q2": 1672, + "(CCCCCC$3)": 1673, + "1*NC(CCCCCC$4/5)": 1674, + "a4344h-1b": 1675, + "c?-r1": 1676, + "/20": 1677, + "3*OCCC^R": 1678, + "u1121h": 1679, + "21m": 1680, + "d4-k1": 1681, + "11m": 1682, + "CCCCCCCCCCC/3=O": 1683, + "1-d?|i?}": 1684, + "e6-f2": 1685, + "a1121A-1a": 1686, + "2*OSC/3=O/3=O": 1687, + "C/4O/3=O": 1688, + "a2x": 1689, + "j?-n1": 1690, + "FFA": 1691, + "u?-": 1692, + "C/6=O/3=O": 1693, + "a4334h-1b": 1694, + "a1211m-1a": 1695, + "d6-i1": 1696, + "a2-c1": 1697, + "/5C/3=O": 1698, + "1*OPO/3O/3=O": 1699, + "ad211": 1700, + "ax1xx": 1701, + "4*OC(CCCCCC$4/7)OC": 1702, + "5)/3=O": 1703, + "1*OCCCCCCCC": 1704, + "b4-g1": 1705, + "6*OCCC": 1706, + "a2111h-1b": 1707, + "4*OCCC/4C/4C/3=O": 1708, + "2*NCOC(CCCCCC$6)/3=O": 1709, + "Aadxxxx": 1710, + "(CCN": 1711, + "a6": 1712, + "C^RO*2/3CO/6=O/3C": 1713, + "n1*1NCCO": 1714, + ")F": 1715, + "CC^S": 1716, + "2*Br": 1717, + "a?|b?|c?|d?|e?}*OSO": 1718, + "3*NS": 1719, + "C1": 1720, + "j6-l1": 1721, + "u1112h": 1722, + "12/10=O(/4)*2": 1723, + "?*OCC/3=O": 1724, + "^XO*2": 1725, + "h6|": 1726, + ")O(/4": 1727, + "a1221h-1b": 1728, + "o2-p1": 1729, + "/5)O": 1730, + "a344h-1x": 1731, + "*OPOPO": 1732, + "c6-d2": 1733, + "a2x2": 1734, + "B1": 1735, + "a1121h-1a": 1736, + "a1-e4~n": 1737, + "o6-": 1738, + "Aad11": 1739, + "ad122m-1x": 1740, + "1*NC(CCCCCC$4/7)O": 1741, + "xd": 1742, + "b6-i1": 1743, + "ad221": 1744, + "a6-v1": 1745, + "|g2": 1746, + "/7O": 1747, + "a121h-1b": 1748, + "d3-g1": 1749, + "C(CCCCCC$11": 1750, + "3*OSC/3=O/3=O": 1751, + "b6|": 1752, + "?%": 1753, + "u2221h": 1754, + "h4334h": 1755, + "C/9": 1756, + "b4-c2": 1757, + "4*": 1758, + "#C": 1759, + "c6|": 1760, + "4*Cl": 1761, + "ux11xh": 1762, + "CC^X": 1763, + "a2111h-1a": 1764, + "haxxxh-2x": 1765, + "uxx1": 1766, + "a6-e2": 1767, + "4*NC": 1768, + "b6|c6|": 1769, + "b6|c6|d": 1770, + "?*OP^XOCCN/3O/3=O": 1771, + "ha2": 1772, + "t?-u1": 1773, + "6|e": 1774, + "b6-j1": 1775, + "?*": 1776, + "c?-s1": 1777, + "b6|c6|d6|e": 1778, + "/14)": 1779, + "a6|": 1780, + "1-d4|d6|i": 1781, + "1-d4|d6|i4|i": 1782, + "1-d4|d6|i4|i6}": 1783, + ")OC(": 1784, + "ax11xh-1d": 1785, + "xxxm": 1786, + "e?-j1": 1787, + "a2|b2|c2|d2|e2|f2|g2": 1788, + "t3-u1": 1789, + "g6-k1": 1790, + "a1-c2": 1791, + "5*OPO/3O/3=O": 1792, + "u1122": 1793, + "g6-h2": 1794, + "i6-m1": 1795, + "ha122h-2a": 1796, + "/8)OC/3=O": 1797, + "a?-u1": 1798, + "C#N(/4)": 1799, + "C#N(/4)CN": 1800, + "/12C/11=O": 1801, + "/6O": 1802, + "7*NC=O": 1803, + "4*NCC": 1804, + "f?-h2": 1805, + "CCCCCCCCCCCCCC": 1806, + "b6|c6|d6|e6|": 1807, + "a2221m-1x": 1808, + "8*NC": 1809, + "/17": 1810, + "CCCCC$12/10=O(/4)*2": 1811, + "4*O": 1812, + "/21": 1813, + "h3|h": 1814, + "a21x2": 1815, + "/3=N": 1816, + "CCCCCCCCCCCC": 1817, + "1n2-3": 1818, + "m6-q1": 1819, + "a1222h-1b": 1820, + "e6-h1": 1821, + "c?-t1": 1822, + "a6-f2": 1823, + "2*NCCF/4F/4F/3=O": 1824, + "a6|b6|c6|d6|e6|": 1825, + "f6|g": 1826, + "f1-a?|b?|c?|d?|e?}": 1827, + "k6-q1": 1828, + "a1d21m-1a": 1829, + "l3|l": 1830, + "udxxxm": 1831, + "h?-k1": 1832, + "1*NC^S": 1833, + "t4-": 1834, + "c1-b3|b": 1835, + "a1-g": 1836, + "6*OCC=C": 1837, + "r?-s2": 1838, + "D1": 1839, + "a1112m-1a": 1840, + "u?-v1": 1841, + "k6-m1": 1842, + "4*S": 1843, + "f6|g6|": 1844, + "u1222h": 1845, + "1*OP^XO": 1846, + "c4-m1": 1847, + "%.": 1848, + "a434": 1849, + "P^XO*2": 1850, + "?|H?|I?|J?|K?}-{": 1851, + "?|H?|I?|J?|K?": 1852, + "3*NCN(CCCCCC$5": 1853, + "Ad1d111h": 1854, + "a2212h-1a": 1855, + "n?|o?}": 1856, + "1-d?|h?}": 1857, + "q1-": 1858, + "Ad2d222h": 1859, + "Ad1d221h": 1860, + "a2121h-1a": 1861, + "f6|g6|h6|": 1862, + "f6|g6|h6|i": 1863, + "/5C": 1864, + "f7-g1": 1865, + "(CCCCCC$2/5)O(/4": 1866, + "c7-d1": 1867, + "a3|": 1868, + "Ad1d112h": 1869, + "a3-d1": 1870, + "a8": 1871, + "a2121h-1x": 1872, + "1*NC(CCCCCC$4/7)": 1873, + "q?-s1": 1874, + "b7-": 1875, + "CCNN$2": 1876, + "CCNN$2/4)": 1877, + "hUxxxh": 1878, + "4*OCCC": 1879, + "Ad2d112h": 1880, + "Ad2d221h": 1881, + "%?%": 1882, + "b?-g2": 1883, + "Ad2d111h": 1884, + "e4-h1": 1885, + "e1-": 1886, + "ud122m": 1887, + "a4344h-1a": 1888, + "2*NCCC^R": 1889, + "ud2": 1890, + "7)": 1891, + "8*(NCCNN$2/4)": 1892, + "m2-l3|l": 1893, + "m2-l3|l6": 1894, + "u2121h": 1895, + "/20=O": 1896, + "1n2-3n1*1O(CCCCCC$3": 1897, + "g3-i1": 1898, + "u1x2xh": 1899, + "d?-l1": 1900, + "1*NC^R": 1901, + "n2*1O(CCCCCC$3": 1902, + "F/3=O/3=O": 1903, + "Aax1": 1904, + "3*OCCCC/3=O": 1905, + "4h": 1906, + "d5-": 1907, + "ax12xh-1x": 1908, + "6*OC(CCCCCC$4/7)OC": 1909, + "13": 1910, + "ad12": 1911, + "v?-": 1912, + "6*OSC/3=O/3=O": 1913, + "d2h-1x": 1914, + "5*OCC": 1915, + "a1-c2~n": 1916, + "u4334h": 1917, + "a1112h-1a": 1918, + "22h-1a": 1919, + "(CCCCCCCCCC$": 1920, + "C(": 1921, + "4|h4|i4}": 1922, + "Aadxxxxxh-2x": 1923, + "uxx1xh": 1924, + "dxh": 1925, + "5/3=O": 1926, + "6*NCC/3=O": 1927, + "a221": 1928, + "b?-k1": 1929, + "/21C": 1930, + "(CCCCCC$4/5)": 1931, + "a2111h-1x": 1932, + "u1122A": 1933, + "/21C/20=O": 1934, + "2*S": 1935, + "Aa11122h-2x": 1936, + "POCCN": 1937, + "b4-h1": 1938, + "3|h3|i3|j3|k3|l3}": 1939, + "e?-k1": 1940, + "k6-l1": 1941, + "2-3": 1942, + "4*OP^XOCCN/3O/3=O": 1943, + "?|aa?|ab?|a": 1944, + "?|aa?|ab?|ac": 1945, + "?|aa?|ab?|ac?|": 1946, + "?|aa?|ab?|ac?|ad": 1947, + "k6-l2": 1948, + "axx1xh-1d": 1949, + "O/6=O/3=O": 1950, + "1*NC/2C": 1951, + "a?|b?}*OC": 1952, + "l6-q1": 1953, + "r4-t1": 1954, + "d1-": 1955, + "Aad1122h-2b": 1956, + "?*OC": 1957, + "a2x1": 1958, + "ax22xh-1d": 1959, + "o3-p2": 1960, + "5*OSiCC/4C/4C": 1961, + "6*C": 1962, + "u4-": 1963, + "2*OC(CCCCCC$4/7)OC": 1964, + "112m": 1965, + "h3|h6": 1966, + "t3|": 1967, + "t3|t": 1968, + "3*OCCCCCCCCCC": 1969, + "F/18": 1970, + "b8-c2": 1971, + "k4-o1": 1972, + "a5-d1": 1973, + "2*OC(CCCCCC$4/8)O(": 1974, + "a1-e2": 1975, + "/8O": 1976, + "a1121h-1b": 1977, + "u2-t3|t": 1978, + "u2-t3|t6": 1979, + "1*NCCCCC$": 1980, + "6*OC(CCCCCC$4/8)O(": 1981, + "a2221h-1a": 1982, + "4*OCC=C": 1983, + "4*OS(CCCCCC$4/7)": 1984, + "s?-t2": 1985, + "8*NS": 1986, + "d6-j1": 1987, + "p6-q2": 1988, + "a7": 1989, + "d2h-1b": 1990, + "u2212h": 1991, + "5*N=^XCC/3O": 1992, + "E1": 1993, + "3*OPO*": 1994, + "4*OPOPO": 1995, + "e8-": 1996, + "u4344h": 1997, + "a3n2-": 1998, + "=O(": 1999, + "/10=O/10=O(/4)*2": 2000, + "a?-d2": 2001, + "1*NC^S(CCCCCC$4)/3C": 2002, + "a1121h-1x": 2003, + "d5-e1": 2004, + "3*OC(CCCCCC$4/8)O(": 2005, + "f6|g6|h6|i6|": 2006, + "f6|g6|h6|i6|j": 2007, + "axx21h-1b": 2008, + "Ad1dd12h": 2009, + "/5)O(/4)*2": 2010, + "e8-f2": 2011, + "q3-r2": 2012, + "a26": 2013, + "u2211h": 2014, + "b1-b": 2015, + "g7-": 2016, + "b4-j1": 2017, + "a3344m-1x": 2018, + "/6)OC": 2019, + "h-2b": 2020, + "1*NC(CCCCCC$4/7)Cl": 2021, + "Ad1d222h": 2022, + "a7-b1": 2023, + "F1": 2024, + "ax12xA-1u": 2025, + "1*NCC(CCCCCC$5": 2026, + "ud122h": 2027, + "o?-q1": 2028, + "a1121A-1x": 2029, + "a?-f2": 2030, + "1*NCCNCC$2": 2031, + "1*NCCNCC$2/5C": 2032, + "a3344h-1b": 2033, + "a1111h-1x": 2034, + "m?-o1": 2035, + "Ad2dd21h": 2036, + "Ad2dd12h": 2037, + "g4-j1": 2038, + "a1-d6~n": 2039, + "1*OCC/3=O": 2040, + "ud1": 2041, + "4*OP^XOP": 2042, + "/2O/2=O": 2043, + "?}*OP^XOCCN": 2044, + "h11dd1dh": 2045, + "b4-i1": 2046, + "d2h-1a": 2047, + "a1-e2~n": 2048, + "a?|b?|c?}*OCC": 2049, + "j4|j": 2050, + "a2d12m-1x": 2051, + "PO/2O/2=O": 2052, + "/16": 2053, + "(CCCCCC$4/6)": 2054, + "/7)O(": 2055, + "b2-d1": 2056, + "a1d22m-1a": 2057, + "a1-c6~n": 2058, + "c?-f2": 2059, + "2*OCCCCCCCCCC": 2060, + "A?|B?|C?|D?|E?|F?|G?": 2061, + "h22dd2dh": 2062, + "/10O/9": 2063, + "Ad1dd21h": 2064, + "q6-": 2065, + "1-d4|d6|j4|j": 2066, + "1-d4|d6|j4|j6}": 2067, + "3*OCCC/3=O": 2068, + "ad122h-1x": 2069, + "4|h4|i4|j": 2070, + "a112h-1x": 2071, + "a?|b?|c?}*OSO": 2072, + "/6CC$": 2073, + "/15)": 2074, + "CCCCCCC$": 2075, + "2*Cl": 2076, + "l6-o1": 2077, + "1*(CCCCCC$2/5)O(/4": 2078, + "h12dd2dh": 2079, + "?|U?|V?}-{": 2080, + "?|U?|V?": 2081, + "f8-": 2082, + "u2221m": 2083, + "1*NC^R(CCCCCC$4)/3C": 2084, + "b1-c2": 2085, + "x22h-2a": 2086, + "3*NCCF/4F/4F/3=O": 2087, + "c?-u1": 2088, + ")OCO($": 2089 + }, + "merges": [ + [ + "?", + "|" + ], + [ + "1", + "2" + ], + [ + "C", + "C" + ], + [ + "1", + "-" + ], + [ + "-", + "1" + ], + [ + "1-", + "5" + ], + [ + "h", + "-1" + ], + [ + "12", + "2" + ], + [ + "/", + "3" + ], + [ + "=", + "O" + ], + [ + "/3", + "=O" + ], + [ + "a", + "2" + ], + [ + "*", + "N" + ], + [ + "CC", + "/3=O" + ], + [ + "122", + "h-1" + ], + [ + "x", + "x" + ], + [ + "*N", + "CC/3=O" + ], + [ + "2", + "*NCC/3=O" + ], + [ + "a", + "?|" + ], + [ + "a?|", + "b" + ], + [ + "?|", + "c" + ], + [ + "a?|b", + "?|c" + ], + [ + "?|", + "d" + ], + [ + "a?|b?|c", + "?|d" + ], + [ + "?|", + "e" + ], + [ + "a?|b?|c?|d", + "?|e" + ], + [ + "?|", + "f" + ], + [ + "a?|b?|c?|d?|e", + "?|f" + ], + [ + "?", + "-" + ], + [ + "a2", + "122h-1" + ], + [ + "?|", + "g" + ], + [ + "a?|b?|c?|d?|e?|f", + "?|g" + ], + [ + "?|", + "h" + ], + [ + "?|", + "i" + ], + [ + "?|h", + "?|i" + ], + [ + "1", + "12" + ], + [ + "?|", + "j" + ], + [ + "?|h?|i", + "?|j" + ], + [ + "?|", + "k" + ], + [ + "?|h?|i?|j", + "?|k" + ], + [ + "?|", + "l" + ], + [ + "?|h?|i?|j?|k", + "?|l" + ], + [ + "a2", + "112" + ], + [ + "?|", + "m" + ], + [ + "?|h?|i?|j?|k?|l", + "?|m" + ], + [ + "a2112", + "h-1" + ], + [ + "4", + "-" + ], + [ + "a", + "1" + ], + [ + "?|h?|i?|j?|k?|l?|m", + "?|" + ], + [ + "*", + "O" + ], + [ + "122", + "h" + ], + [ + "n", + "?|" + ], + [ + "n?|", + "o" + ], + [ + "?", + "}" + ], + [ + "CC", + "CC" + ], + [ + "a1", + "122h-1" + ], + [ + "2", + "-" + ], + [ + "n?|o", + "?|" + ], + [ + "n?|o?|", + "p" + ], + [ + "?}", + "-" + ], + [ + "?}-", + "{" + ], + [ + "a2122h-1", + "b" + ], + [ + "3", + "-" + ], + [ + "xx", + "xx" + ], + [ + "n?|o?|p", + "?|" + ], + [ + "n?|o?|p?|", + "q" + ], + [ + "b", + "1" + ], + [ + "n?|o?|p?|q", + "?|" + ], + [ + "n?|o?|p?|q?|", + "r" + ], + [ + "a2122h-1", + "x" + ], + [ + "u", + "2" + ], + [ + "d", + "1" + ], + [ + "c", + "1" + ], + [ + "a2112h-1", + "b" + ], + [ + "2", + "1" + ], + [ + "n?|o?|p?|q?|r", + "?|" + ], + [ + "n?|o?|p?|q?|r?|", + "s" + ], + [ + "m", + "-1" + ], + [ + "122", + "1" + ], + [ + "6", + "-" + ], + [ + "n?|o?|p?|q?|r?|s", + "?|" + ], + [ + "n?|o?|p?|q?|r?|s?|", + "t" + ], + [ + "a1122h-1", + "a" + ], + [ + "e", + "1" + ], + [ + "u", + "xxxx" + ], + [ + "-", + "2" + ], + [ + "h-1", + "x" + ], + [ + "*O", + "C" + ], + [ + "d", + "21" + ], + [ + "a2112h-1", + "x" + ], + [ + "2-", + "6" + ], + [ + "122h", + "-2" + ], + [ + "A", + "a" + ], + [ + "O", + "/3=O" + ], + [ + "CCCC", + "CC" + ], + [ + "f", + "1" + ], + [ + "CCCCCC", + "$" + ], + [ + "(", + "CCCCCC$" + ], + [ + "uxxxx", + "h" + ], + [ + "u2", + "122h" + ], + [ + "?|", + "u" + ], + [ + "a", + "1221" + ], + [ + "a1221", + "m-1" + ], + [ + "Aa", + "d21" + ], + [ + "Aad21", + "122h-2" + ], + [ + "a", + "xxxx" + ], + [ + "a", + "4-" + ], + [ + "a1122h-1", + "x" + ], + [ + "a", + "?-" + ], + [ + "5", + "*NCC/3=O" + ], + [ + "(CCCCCC$", + "4" + ], + [ + "c", + "?-" + ], + [ + "axxxx", + "h-1x" + ], + [ + "a4-", + "b1" + ], + [ + "*OC", + "(CCCCCC$4" + ], + [ + "g", + "1" + ], + [ + "h", + "1" + ], + [ + "*O", + "CC/3=O" + ], + [ + "*OC(CCCCCC$4", + ")" + ], + [ + "b", + "?-" + ], + [ + "?|u", + "?|" + ], + [ + "?|u?|", + "v" + ], + [ + "b", + "4-" + ], + [ + "a?-", + "b1" + ], + [ + "i", + "1" + ], + [ + "112", + "h" + ], + [ + "b4-", + "c1" + ], + [ + "d", + "?-" + ], + [ + "a1221m-1", + "a" + ], + [ + "*O", + "S" + ], + [ + "u2", + "112h" + ], + [ + "b?-", + "c1" + ], + [ + "c", + "3-" + ], + [ + "j", + "1" + ], + [ + "a2122h-1", + "a" + ], + [ + "Aad21122h-2", + "a" + ], + [ + "a1122h-1", + "b" + ], + [ + "O/3=O", + "/3=O" + ], + [ + "c3-", + "d1" + ], + [ + "c?-", + "d1" + ], + [ + "u", + "1" + ], + [ + "a", + "6-" + ], + [ + "k", + "1" + ], + [ + "?|u?|v", + "?|" + ], + [ + "?|u?|v?|", + "w" + ], + [ + "Aad21122h-2", + "x" + ], + [ + "a", + "3-" + ], + [ + "A", + "-1" + ], + [ + "*OS", + "O/3=O/3=O" + ], + [ + "h-1", + "a" + ], + [ + "A", + "U" + ], + [ + "a1221m-1", + "x" + ], + [ + "1-", + "?" + ], + [ + "*N", + "CC" + ], + [ + "d?-", + "e1" + ], + [ + "a3-", + "b1" + ], + [ + "e", + "?-" + ], + [ + "c", + "6-" + ], + [ + "b", + "3-" + ], + [ + "d", + "2-" + ], + [ + "21", + "1" + ], + [ + "d2-", + "e1" + ], + [ + "l", + "1" + ], + [ + "2", + "*N" + ], + [ + "u1", + "122h" + ], + [ + "a2112h-1", + "a" + ], + [ + "e", + "4-" + ], + [ + "*NCC", + "O/3=O" + ], + [ + "5", + "*NCCO/3=O" + ], + [ + "m-1", + "a" + ], + [ + "a1", + "1221" + ], + [ + "c", + "4-" + ], + [ + "e?-", + "f1" + ], + [ + "b3-", + "c1" + ], + [ + "a2", + "211" + ], + [ + "*O", + "P" + ], + [ + "?|u?|v?|w", + "?|" + ], + [ + "?|u?|v?|w?|", + "x" + ], + [ + "1", + "1" + ], + [ + "m", + "1" + ], + [ + "3", + "|" + ], + [ + "*OC(CCCCCC$4)", + "/3=O" + ], + [ + "f", + "?-" + ], + [ + "d", + "4-" + ], + [ + "e4-", + "f1" + ], + [ + "2", + "2" + ], + [ + "a2", + "12" + ], + [ + "n", + "1" + ], + [ + "/", + "4" + ], + [ + "h", + "2" + ], + [ + "x", + "h" + ], + [ + "a2", + "122" + ], + [ + "AU", + "d21" + ], + [ + "1-", + "4" + ], + [ + "m-1", + "x" + ], + [ + "AUd21", + "122h" + ], + [ + "h-1", + "b" + ], + [ + "/3", + "O/3=O" + ], + [ + "?|u?|v?|w?|x", + "?|" + ], + [ + "?|u?|v?|w?|x?|", + "y" + ], + [ + "*OP", + "O" + ], + [ + "-", + "b1" + ], + [ + "3", + "*OCC/3=O" + ], + [ + "a11221", + "h-1a" + ], + [ + "a2211", + "m-1a" + ], + [ + "c4-", + "d1" + ], + [ + "g", + "?-" + ], + [ + "u", + "1221" + ], + [ + "a2122", + "A-1" + ], + [ + "2", + "*OCC/3=O" + ], + [ + "u1221", + "m" + ], + [ + "6", + "*OSO/3=O/3=O" + ], + [ + "o", + "1" + ], + [ + "4", + "*OCC/3=O" + ], + [ + "g", + "2" + ], + [ + "d", + "2" + ], + [ + "i", + "?-" + ], + [ + "n?|o?|p?|q?|r?|s?|t", + "?" + ], + [ + "h", + "?-" + ], + [ + "Aa", + "d1" + ], + [ + "3", + "*OC" + ], + [ + "e", + "3-" + ], + [ + "Aad1", + "122h-2" + ], + [ + "?|u", + "?}-{" + ], + [ + "?|u", + "?" + ], + [ + "n?|o?|p?|q?|r", + "?}-{" + ], + [ + "n?|o?|p?|q?|r", + "?" + ], + [ + "f?-", + "g1" + ], + [ + "d", + "3-" + ], + [ + "/3", + "C" + ], + [ + "b", + "6-" + ], + [ + "6", + "*OCC/3=O" + ], + [ + "n?|o", + "?}-{" + ], + [ + "n?|o", + "?" + ], + [ + "*O", + "CC" + ], + [ + "?|u?|v?|w?|x?|y", + "?|" + ], + [ + "?|u?|v?|w?|x?|y?|", + "z" + ], + [ + "^", + "X" + ], + [ + "f", + "3-" + ], + [ + "n?|o?|p?|q?|r?|s", + "?}-{" + ], + [ + "n?|o?|p?|q?|r?|s", + "?" + ], + [ + "/4", + "C" + ], + [ + "n?|o?|p", + "?}-{" + ], + [ + "n?|o?|p", + "?" + ], + [ + "3", + "*OC(CCCCCC$4)" + ], + [ + "uxxxx", + "m" + ], + [ + "n?|o?|p?|q", + "?}-{" + ], + [ + "n?|o?|p?|q", + "?" + ], + [ + "a", + "1-" + ], + [ + "g?-", + "h1" + ], + [ + "e3-", + "f1" + ], + [ + "p", + "1" + ], + [ + "j", + "?-" + ], + [ + "?|h?|i?|j?|k?|l", + "?}-{" + ], + [ + "?|h?|i?|j?|k?|l", + "?" + ], + [ + "n", + "?}-{" + ], + [ + "n", + "?" + ], + [ + "h?-", + "i1" + ], + [ + "/", + "7" + ], + [ + "a2", + "-b1" + ], + [ + "*OPO", + "/3O/3=O" + ], + [ + "?|u?|v", + "?}-{" + ], + [ + "?|u?|v", + "?" + ], + [ + "k", + "?-" + ], + [ + "i?-", + "j1" + ], + [ + "a11221", + "h-1x" + ], + [ + "d3-", + "e1" + ], + [ + "^X", + "O" + ], + [ + "CCCC", + "CCCC" + ], + [ + "c", + "2-" + ], + [ + "a1", + "122" + ], + [ + "c", + "2" + ], + [ + "a6-", + "b1" + ], + [ + "c2-", + "d1" + ], + [ + "?|h?|i?|j?|k?|l?|m", + "?" + ], + [ + "d4-", + "e1" + ], + [ + "?|h?|i?|j?|k", + "?}-{" + ], + [ + "?|h?|i?|j?|k", + "?" + ], + [ + "/", + "6" + ], + [ + "CC", + "N" + ], + [ + "?|u?|v?|w?|x?|y?|z", + "?|" + ], + [ + "4-", + "i1" + ], + [ + "x", + "h-1" + ], + [ + "b", + "2-" + ], + [ + "2", + "*OC(CCCCCC$4)" + ], + [ + "?|h?|i?|j", + "?}-{" + ], + [ + "?|h?|i?|j", + "?" + ], + [ + "h", + "2-" + ], + [ + "b2-", + "c1" + ], + [ + "l", + "?-" + ], + [ + "q", + "1" + ], + [ + "d", + "xxxx" + ], + [ + "4", + "*OC(CCCCCC$4)" + ], + [ + "C", + "/3=O" + ], + [ + "4-", + "h1" + ], + [ + "A-1", + "a" + ], + [ + "/", + "5" + ], + [ + "6", + "*OC(CCCCCC$4)" + ], + [ + "AU", + "dxxxx" + ], + [ + "f3-", + "g1" + ], + [ + ")", + "O" + ], + [ + "a2", + "11" + ], + [ + "h", + "4-i1" + ], + [ + "A", + "?|" + ], + [ + "A?|", + "B" + ], + [ + "A-1", + "x" + ], + [ + "a2122A-1", + "b" + ], + [ + "~", + "n" + ], + [ + "2", + "*OSO/3=O/3=O" + ], + [ + "a", + "x" + ], + [ + "i", + "4-" + ], + [ + "j?-", + "k1" + ], + [ + "*OP", + "^XO" + ], + [ + "m", + "?-" + ], + [ + "g", + "4-h1" + ], + [ + "m-1", + "b" + ], + [ + "r", + "1" + ], + [ + "=", + "^" + ], + [ + "?|h?|i", + "?}-{" + ], + [ + "?|h?|i", + "?" + ], + [ + "g", + "2-" + ], + [ + "/", + "1" + ], + [ + "a", + "5" + ], + [ + "3", + "4" + ], + [ + "a212", + "h-1b" + ], + [ + "g", + "3-" + ], + [ + "2", + "*OC" + ], + [ + "k?-", + "l1" + ], + [ + "S", + "O/3=O/3=O" + ], + [ + "f?-", + "g2" + ], + [ + "2*N", + "SO/3=O/3=O" + ], + [ + "?|h", + "?}-{" + ], + [ + "?|h", + "?" + ], + [ + "Aad1122h-2", + "a" + ], + [ + "*N", + "C" + ], + [ + "A?|B", + "?|" + ], + [ + "A?|B?|", + "C" + ], + [ + "i4-", + "j1" + ], + [ + "Aad1122h-2", + "x" + ], + [ + "a?|b?|c?|d?|e?|f?|g", + "?" + ], + [ + "d", + "6-" + ], + [ + "a2211", + "m-1x" + ], + [ + "2", + "*OC(CCCCCC$4)/3=O" + ], + [ + "h2-", + "i1" + ], + [ + "=^", + "Z" + ], + [ + "22", + "2" + ], + [ + "f", + "4-" + ], + [ + "4", + "|" + ], + [ + "a?|b?|c?|d?|e?|f", + "?}-{" + ], + [ + "a?|b?|c?|d?|e?|f", + "?" + ], + [ + "AUdxxxx", + "xh" + ], + [ + "3", + "*OC(CCCCCC$4)/3=O" + ], + [ + "f4-", + "g1" + ], + [ + "l?-", + "m1" + ], + [ + "e", + "2-" + ], + [ + "xh-1", + "u" + ], + [ + "a", + "xx" + ], + [ + "h2", + "122h" + ], + [ + "a212", + "h-1x" + ], + [ + "2-", + "5" + ], + [ + "e2-", + "f1" + ], + [ + "?|u?|v?|w", + "?}-{" + ], + [ + "?|u?|v?|w", + "?" + ], + [ + "b", + "2" + ], + [ + "i", + "2-" + ], + [ + "g2-", + "h1" + ], + [ + "*OP^XO", + "CCN" + ], + [ + "*OS", + "i" + ], + [ + "j", + "4-" + ], + [ + "l", + "4-" + ], + [ + "g3-", + "h1" + ], + [ + "a2122A-1", + "x" + ], + [ + "/4C", + "/4C" + ], + [ + "3", + "*OSO/3=O/3=O" + ], + [ + "A?|B?|C", + "?|" + ], + [ + "A?|B?|C?|", + "D" + ], + [ + "e", + "2" + ], + [ + "3-", + "7" + ], + [ + "4", + "*OC" + ], + [ + "i2-", + "j1" + ], + [ + "AU", + "d1" + ], + [ + "i", + "3-" + ], + [ + "C", + "=^Z" + ], + [ + "a5", + "-b1" + ], + [ + "e4-", + "g1" + ], + [ + "AUd1", + "122h" + ], + [ + "a?|b?|c?|d?|e", + "?}-{" + ], + [ + "a?|b?|c?|d?|e", + "?" + ], + [ + "f", + "6-" + ], + [ + "12", + "h" + ], + [ + "a212", + "1" + ], + [ + "a", + "d" + ], + [ + "s", + "1" + ], + [ + "1221", + "h" + ], + [ + "j4-", + "k1" + ], + [ + "h2", + "112h" + ], + [ + "6", + "*OC" + ], + [ + "h", + "3-" + ], + [ + "c6-", + "h1" + ], + [ + "k", + "2-" + ], + [ + "/6", + ")" + ], + [ + "l4-", + "m1" + ], + [ + "u1", + "1221h" + ], + [ + "j", + "2" + ], + [ + "a4-", + "c1" + ], + [ + "*O", + "CCCC" + ], + [ + "*", + "1" + ], + [ + "n", + "?-" + ], + [ + "8", + "-" + ], + [ + "/3C", + "/3C" + ], + [ + "/3", + "(CCCCCC$" + ], + [ + "4", + "*OC(CCCCCC$4)/3=O" + ], + [ + "a?|b?|c?|d", + "?}-{" + ], + [ + "a?|b?|c?|d", + "?" + ], + [ + "4", + "*OSO/3=O/3=O" + ], + [ + "*O", + "CCCCCCCC" + ], + [ + "(CCCCCC$", + "3" + ], + [ + "7", + "-" + ], + [ + "uxxxx", + "xh" + ], + [ + "f", + "2-" + ], + [ + "c6-", + "g1" + ], + [ + "*", + "2" + ], + [ + "j", + "2-" + ], + [ + "u2", + "211" + ], + [ + "*OCC", + "C" + ], + [ + "axxxx", + "m-1x" + ], + [ + "f", + "2" + ], + [ + "k", + "4-" + ], + [ + "4", + "*OPO/3O/3=O" + ], + [ + "a", + "12" + ], + [ + "m?-", + "n1" + ], + [ + "f2-", + "g1" + ], + [ + "a", + "122h-1" + ], + [ + "h3-", + "i1" + ], + [ + "k2-", + "l1" + ], + [ + "A?|B?|C?|D", + "?|" + ], + [ + "A?|B?|C?|D?|", + "E" + ], + [ + "x", + "h-1x" + ], + [ + "3", + "34" + ], + [ + "u2211", + "m" + ], + [ + "i", + "2" + ], + [ + "b6-", + "c1" + ], + [ + "*", + "C" + ], + [ + "c6-", + "i1" + ], + [ + "d4-", + "h1" + ], + [ + "d?-", + "h1" + ], + [ + "o", + "?-" + ], + [ + "*1", + "O" + ], + [ + "n", + "2" + ], + [ + "k", + "2" + ], + [ + "a1122", + "2" + ], + [ + "C", + "N" + ], + [ + "h", + "a" + ], + [ + "c?-", + "i1" + ], + [ + "A?|B?|C?|D?|E", + "?|" + ], + [ + "A?|B?|C?|D?|E?|", + "F" + ], + [ + "c?-", + "h1" + ], + [ + "a2", + "1" + ], + [ + "*OP^XOCCN", + "/3O/3=O" + ], + [ + "u2", + "122" + ], + [ + "A?|B?|C?|D?|E?|F", + "?|" + ], + [ + "A?|B?|C?|D?|E?|F?|", + "G" + ], + [ + "i3-", + "j1" + ], + [ + "a", + "4" + ], + [ + "3", + "*NCC/3=O" + ], + [ + "j2-", + "k1" + ], + [ + "j", + "3-" + ], + [ + "/4", + ")" + ], + [ + "6", + "|" + ], + [ + "a2112", + "A-1a" + ], + [ + "a2", + "2" + ], + [ + "ha", + "122h-2" + ], + [ + "m", + "4-" + ], + [ + "/3(CCCCCC$", + "1" + ], + [ + "c6-", + "k1" + ], + [ + "k4-", + "l1" + ], + [ + "?|u?|v?|w?|x", + "?}-{" + ], + [ + "?|u?|v?|w?|x", + "?" + ], + [ + "t", + "1" + ], + [ + "/7", + ")O" + ], + [ + "5", + "-" + ], + [ + "a?|b?|c", + "?}-{" + ], + [ + "a?|b?|c?}-{", + "a?|b?|c" + ], + [ + "a?|b?|c?}-{a?|b?|c", + "?" + ], + [ + "u", + "xx" + ], + [ + "/1", + "0" + ], + [ + "g", + "6-" + ], + [ + "h2", + "h" + ], + [ + "n", + "2-" + ], + [ + "C/3=O", + "/3=O" + ], + [ + "^", + "R" + ], + [ + "f3-", + "g2" + ], + [ + "?|", + "H" + ], + [ + "n1", + "*1O" + ], + [ + "*OSi", + "CC" + ], + [ + "*OSiCC", + "/4C/4C" + ], + [ + "e", + "6-" + ], + [ + "*", + "F" + ], + [ + "h", + "6-" + ], + [ + "6", + "*OC(CCCCCC$4)/3=O" + ], + [ + "/", + "2" + ], + [ + "xh-1", + "d" + ], + [ + "3|", + "g" + ], + [ + "2-", + "?" + ], + [ + "u2", + "12h" + ], + [ + "ax", + "12" + ], + [ + "c6-", + "d1" + ], + [ + "C=^Z", + "CC" + ], + [ + "?|H", + "?|" + ], + [ + "?|H?|", + "I" + ], + [ + "?}", + "*OC" + ], + [ + "d", + "h" + ], + [ + "22", + "h" + ], + [ + "i", + "6-" + ], + [ + "a2112", + "m-1a" + ], + [ + "(CCCCCC$3", + "/6)" + ], + [ + "c?-", + "k1" + ], + [ + "11", + "h" + ], + [ + "x", + "2" + ], + [ + "c?-", + "g1" + ], + [ + "l", + "2-" + ], + [ + "4", + "*N" + ], + [ + "5", + "*N" + ], + [ + "/7", + ")" + ], + [ + "b3-", + "c2" + ], + [ + "a211", + "h-1a" + ], + [ + "m", + "3-" + ], + [ + "?|H?|I", + "?|" + ], + [ + "?|H?|I?|", + "J" + ], + [ + "n?-", + "o1" + ], + [ + "a6-", + "c1" + ], + [ + "3", + "~n" + ], + [ + "n", + "4-" + ], + [ + "/7", + "C" + ], + [ + "m4-", + "n1" + ], + [ + "/10", + "=O" + ], + [ + "a2", + "222" + ], + [ + "A", + "d1" + ], + [ + "d?-", + "g1" + ], + [ + "*OPO", + "*" + ], + [ + "b4-", + "d1" + ], + [ + "a212", + "h-1a" + ], + [ + "x", + "1" + ], + [ + "o?-", + "p1" + ], + [ + "A", + "d2" + ], + [ + "k", + "6-" + ], + [ + "u2", + "112" + ], + [ + "d4-", + "g1" + ], + [ + "f6-", + "g2" + ], + [ + "6", + "*OPO/3O/3=O" + ], + [ + "u2122", + "A" + ], + [ + "o", + "4-" + ], + [ + "a6-", + "d1" + ], + [ + "a1122", + "m-1a" + ], + [ + "(CCCCCC$3/6)", + "N" + ], + [ + "(", + "/4)" + ], + [ + "p", + "?-" + ], + [ + "/", + "8" + ], + [ + "j3-", + "k1" + ], + [ + "4", + "~n" + ], + [ + "c6-", + "j1" + ], + [ + "uxxxx", + "A" + ], + [ + "122", + "2" + ], + [ + "1", + "*NC" + ], + [ + "A-1", + "b" + ], + [ + "k", + "3-" + ], + [ + "d?-", + "i1" + ], + [ + "?|u?|v?|w?|x?|y", + "?}-{" + ], + [ + "?|u?|v?|w?|x?|y", + "?" + ], + [ + "b?-", + "c2" + ], + [ + "j", + "6-" + ], + [ + "c6-", + "f1" + ], + [ + "l", + "2" + ], + [ + "a211", + "h-1x" + ], + [ + "a2112", + "A-1x" + ], + [ + "a12", + "11" + ], + [ + "1", + "h" + ], + [ + "6", + "*N" + ], + [ + "C", + "/3C/3C" + ], + [ + "*OSi", + "C/3C/3C" + ], + [ + "n4-", + "o1" + ], + [ + "3|", + "c" + ], + [ + "3", + "*N" + ], + [ + "a11222", + "h-1a" + ], + [ + "4", + ")" + ], + [ + ")", + "/3(CCCCCC$1" + ], + [ + "n1*1O", + "(CCCCCC$3/6)N" + ], + [ + "l", + "3-" + ], + [ + "O", + "/5" + ], + [ + "g", + "3|g" + ], + [ + "a6-", + "l1" + ], + [ + "*OS", + "O" + ], + [ + "c6-", + "e1" + ], + [ + "C", + "$" + ], + [ + "34", + "4" + ], + [ + "c3-", + "e1" + ], + [ + "a2121", + "A-1a" + ], + [ + "C", + "O" + ], + [ + "a1", + "112" + ], + [ + "d6-", + "e1" + ], + [ + "c?-", + "j1" + ], + [ + "/4C/4C", + "/3=O" + ], + [ + "g3|g", + "6" + ], + [ + "a", + "112" + ], + [ + "b3-", + "d1" + ], + [ + "a2112", + "m-1x" + ], + [ + "e?-", + "h1" + ], + [ + "*OCCC", + "/4C/4C/3=O" + ], + [ + "3|", + "f" + ], + [ + "?}", + "*OSO" + ], + [ + "(CCCCCC$4", + "/7)" + ], + [ + "h2-", + "g3|g6" + ], + [ + "d4-", + "f1" + ], + [ + "F", + "/4" + ], + [ + "3", + "*OCC" + ], + [ + "n", + "3-" + ], + [ + "c4-", + "e1" + ], + [ + "l2-", + "m1" + ], + [ + "ha122h-2", + "b" + ], + [ + "*OSiCC/4C/4C", + "/3C/3C" + ], + [ + "o4-", + "p1" + ], + [ + "/6", + "=O" + ], + [ + "q", + "?-" + ], + [ + "ax", + "11" + ], + [ + "a122h-1", + "a" + ], + [ + "c?-", + "f1" + ], + [ + "AUdxxxx", + "h" + ], + [ + "6", + "*" + ], + [ + "u", + "d" + ], + [ + "2", + "*NCC" + ], + [ + "h", + "xh" + ], + [ + "m3-", + "n1" + ], + [ + "6", + "*OP^XOCCN/3O/3=O" + ], + [ + "a1-", + "d" + ], + [ + "i?-", + "j2" + ], + [ + "=", + "C" + ], + [ + "d4-", + "i1" + ], + [ + "a2122", + "m-1b" + ], + [ + "m", + "2-" + ], + [ + "C", + "l" + ], + [ + "b6-", + "c2" + ], + [ + "a22", + "21" + ], + [ + "CC", + "$" + ], + [ + "6", + ")" + ], + [ + "/", + "9" + ], + [ + ")O", + "(" + ], + [ + "n", + "2-6" + ], + [ + "a2", + "22" + ], + [ + "^", + "S" + ], + [ + "axx", + "2" + ], + [ + "334", + "4" + ], + [ + "F", + "/3=O" + ], + [ + "h?-", + "i2" + ], + [ + "g?-", + "h2" + ], + [ + "?|h?|i", + "?}" + ], + [ + "k3-", + "l1" + ], + [ + "O/5", + "=O" + ], + [ + "3", + "*OCCCCCCCC" + ], + [ + "a2122A-1", + "a" + ], + [ + "l3-", + "m1" + ], + [ + "j?-", + "k2" + ], + [ + "/2", + "=O" + ], + [ + "a3-", + "c1" + ], + [ + "222", + "h" + ], + [ + "O/5=O", + "/3O/3=O" + ], + [ + "uxx", + "xh" + ], + [ + "c?-", + "e1" + ], + [ + "a2121", + "A-1x" + ], + [ + "c?-", + "l1" + ], + [ + "/10=O", + "(/4)" + ], + [ + "?|h", + "?}" + ], + [ + "?|H?|I?|J", + "?|" + ], + [ + "?|H?|I?|J?|", + "K" + ], + [ + "5", + "n2-6" + ], + [ + "o", + "2" + ], + [ + "c6-", + "l1" + ], + [ + "u", + "x" + ], + [ + "CCCCCC", + "CC/3=O" + ], + [ + "a", + "3344" + ], + [ + "1-", + "d" + ], + [ + "Ad2", + "d" + ], + [ + "b?-", + "e1" + ], + [ + "a1-", + "b1" + ], + [ + "a?|b?|c?|d?|e?|f", + "?}" + ], + [ + "Ad1", + "d" + ], + [ + "a6-", + "j1" + ], + [ + "o", + "3-" + ], + [ + "-2", + "x" + ], + [ + "C=^ZCC", + "C=^ZCC" + ], + [ + "l", + "6-" + ], + [ + "c", + "5-" + ], + [ + "b6-", + "f1" + ], + [ + "C", + "(CCCCCC$" + ], + [ + "2", + "*OCCCCCCCC" + ], + [ + "e6-", + "f1" + ], + [ + "p", + "4-" + ], + [ + "a4", + "334" + ], + [ + "m", + "6-" + ], + [ + "2", + "*OCC" + ], + [ + "*OS", + "(CCCCCC$4/7)" + ], + [ + "a6-", + "e1" + ], + [ + "b?-", + "f1" + ], + [ + "d?-", + "f1" + ], + [ + "a1-", + "c" + ], + [ + "*OP^XO", + "P" + ], + [ + "m", + "2" + ], + [ + "*OC(CCCCCC$4", + "/7)O" + ], + [ + "1", + "*NCC" + ], + [ + "a1-", + "b2" + ], + [ + "p?-", + "q1" + ], + [ + "m?-", + "n2" + ], + [ + "a?|b?|c?|d?|e", + "?}" + ], + [ + "a?-", + "d1" + ], + [ + "u2112", + "m" + ], + [ + "e?-", + "g1" + ], + [ + "1-", + "c" + ], + [ + "v", + "1" + ], + [ + "3", + "*OCCCC" + ], + [ + "21", + "h" + ], + [ + "n3-", + "o1" + ], + [ + "d3-", + "f1" + ], + [ + "a112", + "1" + ], + [ + "r", + "?-" + ], + [ + "a2211", + "m-1b" + ], + [ + "a2", + "d" + ], + [ + "?|h?|i?|j", + "?}" + ], + [ + "b4-", + "e1" + ], + [ + "i3-", + "j2" + ], + [ + "u2", + "11h" + ], + [ + "3", + "*C" + ], + [ + "a?-", + "c1" + ], + [ + "(CCCCCC$4", + ")" + ], + [ + "CCCC", + "CC/3=O" + ], + [ + "q", + "2" + ], + [ + "a?-", + "e1" + ], + [ + "?|u?|v?|w?|x?|y?|z", + "?" + ], + [ + "6", + "*OCC" + ], + [ + "/5", + "O/5=O/3O/3=O" + ], + [ + "d?-", + "j1" + ], + [ + "h", + "U" + ], + [ + "a6-", + "k1" + ], + [ + "a11222", + "h-1x" + ], + [ + "a5", + "-" + ], + [ + "3|", + "i" + ], + [ + "4", + "*NCC/3=O" + ], + [ + "b?-", + "g1" + ], + [ + "o3-", + "p1" + ], + [ + "p", + "3-" + ], + [ + "a4", + "344" + ], + [ + "1-c", + "3|c" + ], + [ + "C", + "^R" + ], + [ + "a122h-1", + "x" + ], + [ + "a22", + "12" + ], + [ + "a6-", + "f1" + ], + [ + "C", + "/7C" + ], + [ + "x", + "21" + ], + [ + "1", + "*N" + ], + [ + "j", + "1-" + ], + [ + "CCN", + "/5O/5=O/3O/3=O" + ], + [ + "q?-", + "r1" + ], + [ + "C/7C", + "/7C" + ], + [ + "2", + "*OCCCC" + ], + [ + "d?-", + "e2" + ], + [ + "3|", + "b" + ], + [ + "C/7C/7C", + "/3O/3=O" + ], + [ + "axx", + "1" + ], + [ + "a1-", + "b" + ], + [ + "k", + "1-" + ], + [ + "*OS", + "C/3=O/3=O" + ], + [ + "(", + "/6)" + ], + [ + "a211", + "1" + ], + [ + "c?-", + "m1" + ], + [ + "a", + "1222" + ], + [ + "n", + "1-" + ], + [ + "b6-", + "d1" + ], + [ + "Aa", + "x21" + ], + [ + "a4-", + "b2" + ], + [ + "ax12", + "xh-1u" + ], + [ + "ax11", + "xh-1u" + ], + [ + "1-c3|c", + "6" + ], + [ + "122h-2", + "b" + ], + [ + "f", + "3|f" + ], + [ + "3|", + "j" + ], + [ + "-2", + "b" + ], + [ + "4", + "*OCC" + ], + [ + "a?-", + "f1" + ], + [ + "*OC(CCCCCC$4/7)O", + "C" + ], + [ + "b?-", + "d1" + ], + [ + "4|", + "d" + ], + [ + "2*N", + "C" + ], + [ + "m2-", + "n1" + ], + [ + "122", + "m" + ], + [ + "5", + "*OC(CCCCCC$4)/3=O" + ], + [ + "O", + "/6=O" + ], + [ + "o", + "2-" + ], + [ + "*OP^XOP", + "^XO" + ], + [ + "axxxx", + "xh-1x" + ], + [ + "Aax21", + "122h-2b" + ], + [ + "3|", + "h" + ], + [ + "(", + "CCCC" + ], + [ + "2", + "*OPO/3O/3=O" + ], + [ + "q", + "4-" + ], + [ + "f3|f", + "6" + ], + [ + "c4-", + "f1" + ], + [ + "?|H?|I?|J?|K", + "?|" + ], + [ + "?|H?|I?|J?|K?|", + "L" + ], + [ + "?|H?|I?|J?|K?|L", + "?|" + ], + [ + "?|H?|I?|J?|K?|L?|", + "M" + ], + [ + "?|H?|I?|J?|K?|L?|M", + "?|" + ], + [ + "-2", + "a" + ], + [ + "CCCC", + "CCCCCC" + ], + [ + ")O", + "C" + ], + [ + "3|", + "k" + ], + [ + "3-", + "6" + ], + [ + "6", + "*NC" + ], + [ + "d3-", + "e2" + ], + [ + "/10=O(/4)", + "*2" + ], + [ + "/3(CCCCCC$", + "8" + ], + [ + ")/3(CCCCCC$1", + "4)" + ], + [ + "5", + "*OC(CCCCCC$4)" + ], + [ + "b6-", + "g1" + ], + [ + "p4-", + "q1" + ], + [ + "h", + "4-" + ], + [ + "xxxx", + "h" + ], + [ + "a2112", + "m-1b" + ], + [ + "g2-", + "f3|f6" + ], + [ + "p", + "2-" + ], + [ + "a2122", + "m-1x" + ], + [ + "3", + "*NC" + ], + [ + "ha122h-2", + "x" + ], + [ + "F", + "F" + ], + [ + "C", + "/5" + ], + [ + "b6-", + "e1" + ], + [ + "x", + "m-1" + ], + [ + "a6-", + "m1" + ], + [ + "a6-", + "i1" + ], + [ + "a?-", + "l1" + ], + [ + "h", + "4" + ], + [ + "k?-", + "l2" + ], + [ + "?", + "*OSO/3=O/3=O" + ], + [ + "/3(CCCCCC$1", + "0" + ], + [ + "1222", + "h" + ], + [ + "a1", + "11" + ], + [ + "d", + "x" + ], + [ + "2", + "*" + ], + [ + "P", + "O" + ], + [ + "2", + "*F" + ], + [ + "a1", + "1" + ], + [ + "c4-", + "h1" + ], + [ + "d", + "7-" + ], + [ + "i", + "1-" + ], + [ + "<", + "Q" + ], + [ + "" + ], + [ + "k?-", + "o1" + ], + [ + "3|", + "d" + ], + [ + "E", + "E" + ], + [ + "h", + "xxxxh" + ], + [ + "u2112", + "A" + ], + [ + "3|", + "e" + ], + [ + "f", + "4-h1" + ], + [ + "3", + "}" + ], + [ + "CC", + "O" + ], + [ + "F/4", + "F/4" + ], + [ + "a1122", + "m-1x" + ], + [ + "i4-", + "k1" + ], + [ + "g", + "4-i1" + ], + [ + "axx", + "xh-1x" + ], + [ + "c4-", + "d2" + ], + [ + ")/3(CCCCCC$1", + "6)" + ], + [ + "e", + "E" + ], + [ + "u", + "12" + ], + [ + "a2222", + "h-1b" + ], + [ + "CCCC", + "C$" + ], + [ + "q", + "3-" + ], + [ + "u2", + "12" + ], + [ + "z", + "z" + ], + [ + "a6-", + "o1" + ], + [ + "c?-", + "d2" + ], + [ + "p3-", + "q1" + ], + [ + "a6-", + "n1" + ], + [ + "p", + "2" + ], + [ + "N", + "?|" + ], + [ + "N?|", + "O" + ], + [ + "N?|O", + "?|" + ], + [ + "N?|O?|", + "P" + ], + [ + "N?|O?|P", + "?|" + ], + [ + "N?|O?|P?|", + "Q" + ], + [ + "N?|O?|P?|Q", + "?|" + ], + [ + "N?|O?|P?|Q?|", + "R" + ], + [ + "N?|O?|P?|Q?|R", + "?|" + ], + [ + "N?|O?|P?|Q?|R?|", + "S" + ], + [ + "N?|O?|P?|Q?|R?|S", + "?|" + ], + [ + "N?|O?|P?|Q?|R?|S?|", + "T" + ], + [ + "?|", + "U" + ], + [ + "?|U", + "?|" + ], + [ + "?|U?|", + "V" + ], + [ + "ad", + "222" + ], + [ + "1", + "m" + ], + [ + "f6-", + "g1" + ], + [ + "6", + "}" + ], + [ + "1*NC", + "(CCCCCC$4" + ], + [ + "r?-", + "s1" + ], + [ + "e?-", + "f2" + ], + [ + "*C", + "l" + ], + [ + "l", + "1-" + ], + [ + "F/4F/4", + "F/3=O" + ], + [ + "a?|b", + "?}-{" + ], + [ + "a?|b?}-{", + "a?|b" + ], + [ + "a?|b?}-{a?|b", + "?" + ], + [ + "B", + "r" + ], + [ + "xm-1", + "u" + ], + [ + "a2222", + "h-1x" + ], + [ + "g?-", + "i1" + ], + [ + "u2122", + "m" + ], + [ + "d", + "22h" + ], + [ + "a5-", + "c1" + ], + [ + "ad", + "122" + ], + [ + "i?-", + "l1" + ], + [ + "s", + "?-" + ], + [ + "a211", + "h-1b" + ], + [ + "3", + "*" + ], + [ + "3", + "*OCCC" + ], + [ + "c4-", + "k1" + ], + [ + "d6-", + "h1" + ], + [ + "a1", + "x2" + ], + [ + "h4-", + "j1" + ], + [ + "c4-", + "g1" + ], + [ + "a2", + "-" + ], + [ + "k6-", + "o1" + ], + [ + "a1122", + "A-1b" + ], + [ + "?|h?|i?|j?|k", + "?}" + ], + [ + "g6-", + "i1" + ], + [ + "^X", + "CC" + ], + [ + "a", + "3|b" + ], + [ + "3|c", + "3|d" + ], + [ + "(CCCCCC$", + "5" + ], + [ + "=^", + "E" + ], + [ + "a3|b", + "3|c3|d" + ], + [ + "5", + "*OCC/3=O" + ], + [ + "*OPO", + "CCN" + ], + [ + "/3", + "O" + ], + [ + "ax12", + "xh-1d" + ], + [ + "a3|b3|c3|d", + "3|e" + ], + [ + "C/5", + "O/3=O" + ], + [ + "n?-", + "o2" + ], + [ + "b?-", + "h1" + ], + [ + "r", + "4-" + ], + [ + "d6-", + "g1" + ], + [ + "6", + "~n" + ], + [ + "4", + "*OP^XOP^XO" + ], + [ + "a?-", + "j1" + ], + [ + "j3-", + "k2" + ], + [ + "m3-", + "n2" + ], + [ + "a21", + "EE" + ], + [ + "a3|b3|c3|d3|e", + "3|f" + ], + [ + "b4-", + "f1" + ], + [ + "c4-", + "i1" + ], + [ + "c", + "7-" + ], + [ + "a2112", + "A-1b" + ], + [ + "a1-d", + "3~n" + ], + [ + "h", + "dx" + ], + [ + "a1221m-1", + "b" + ], + [ + "C=^ZCC", + "C=^Z" + ], + [ + "hdx", + "dh" + ], + [ + "a2d", + "12" + ], + [ + "a3|b3|c3|d3|e3|f", + "3|g" + ], + [ + "e3-", + "f2" + ], + [ + "C=^ZCCC=^Z", + "CCCCCC/3=O" + ], + [ + "q", + "2-" + ], + [ + "O", + "/2=O" + ], + [ + "/", + "11" + ], + [ + "q4-", + "r1" + ], + [ + "3|", + "o" + ], + [ + "m", + "1-" + ], + [ + "*NC", + "=O" + ], + [ + "a1112", + "h-1b" + ], + [ + "h6-", + "i1" + ], + [ + "u2", + "2" + ], + [ + "c", + "8-" + ], + [ + "/3C", + "O/6=O" + ], + [ + "/3CO/6=O", + "/3C" + ], + [ + "/7)O", + "(/6)" + ], + [ + "a6-", + "r1" + ], + [ + "a?-", + "b2" + ], + [ + "3|", + "l" + ], + [ + "g6-", + "j1" + ], + [ + "a222", + "h-1b" + ], + [ + "3|h", + "3|i" + ], + [ + "3*OCC", + "=C" + ], + [ + "q3-", + "r1" + ], + [ + "4", + "*OCCCC" + ], + [ + "/8", + ")O(" + ], + [ + "6", + "*OCCCC" + ], + [ + "1", + "A" + ], + [ + "d6-", + "f1" + ], + [ + "axxxx", + "A-1x" + ], + [ + "d1", + "1h" + ], + [ + "g3-", + "h2" + ], + [ + "a1-", + "e" + ], + [ + "*OC(CCCCCC$4", + "/8)O(" + ], + [ + "C", + "/1" + ], + [ + "/5", + ")" + ], + [ + "e?-", + "i1" + ], + [ + "d", + "d2" + ], + [ + "c3-", + "d2" + ], + [ + "/7)O(/6)", + "O/3=O" + ], + [ + "w", + "1" + ], + [ + "(CCCCCC$4)", + "/3=O" + ], + [ + "c6-", + "m1" + ], + [ + "g", + "1-" + ], + [ + "h?-", + "j1" + ], + [ + "3|", + "n" + ], + [ + "a6-", + "h1" + ], + [ + "CN", + "*2" + ], + [ + "d", + "d1" + ], + [ + "g6-", + "h1" + ], + [ + "a21", + "eE" + ], + [ + "a111", + "1" + ], + [ + "u", + "122h" + ], + [ + "a12", + "12" + ], + [ + "i6-", + "l1" + ], + [ + "a?-", + "k1" + ], + [ + "u2", + "1" + ], + [ + "i?-", + "k1" + ], + [ + "a6-", + "g1" + ], + [ + "n2-", + "8" + ], + [ + "a21", + "FF" + ], + [ + "6*", + "S" + ], + [ + "(CCCCCC$", + "2" + ], + [ + "a?-", + "g1" + ], + [ + "o", + "3|o" + ], + [ + "a122h-1", + "b" + ], + [ + "p2-", + "o3|o" + ], + [ + "p2-o3|o", + "6" + ], + [ + "?}", + "*OPO" + ], + [ + "=", + "^XCC" + ], + [ + "d", + "22" + ], + [ + "a2122", + "m-1a" + ], + [ + "c8-", + "d2" + ], + [ + "dd1", + "dh" + ], + [ + "d?-", + "k1" + ], + [ + "dd2", + "dh" + ], + [ + "CC$", + "2" + ], + [ + "3|", + "m" + ], + [ + "h", + "1-" + ], + [ + "CCCCCCCC", + "C/3=O" + ], + [ + "3|h3|i", + "3|j" + ], + [ + "1", + "*OP^XOCCN" + ], + [ + "r", + "2" + ], + [ + "Cl", + "/6" + ], + [ + "=^XCC", + "/3O" + ], + [ + "h6-", + "j1" + ], + [ + "/4", + "=O" + ], + [ + "C", + "^S" + ], + [ + "/6=O", + "/3=O" + ], + [ + "a1-c", + "3~n" + ], + [ + "/8", + ")" + ], + [ + "a1", + "x1" + ], + [ + "a1-d", + "4~n" + ], + [ + "9", + "*OCC/3=O" + ], + [ + "c5-", + "e1" + ], + [ + "2", + "*O" + ], + [ + "c4-", + "j1" + ], + [ + "a?-", + "m1" + ], + [ + "l?-", + "m2" + ], + [ + "4|", + "i" + ], + [ + "5", + ")" + ], + [ + "Aa", + "d2" + ], + [ + "x", + "m" + ], + [ + "f?-", + "h1" + ], + [ + "axx1", + "xh-1u" + ], + [ + "a?-", + "i1" + ], + [ + "u1", + "1222h" + ], + [ + "N", + "(CCCCCC$5" + ], + [ + "a4-", + "d1" + ], + [ + "3", + "*OSiC/3C/3C" + ], + [ + "h1", + "122h" + ], + [ + "h", + "8-" + ], + [ + "b", + "1-" + ], + [ + "a4334", + "h-1x" + ], + [ + "1-d", + "4|d" + ], + [ + "CCCCCCCCCC", + "C/5O/3=O" + ], + [ + "r", + "2-" + ], + [ + "*N", + "*" + ], + [ + "h8-", + "i2" + ], + [ + "r4-", + "s1" + ], + [ + "i6-", + "j2" + ], + [ + "r", + "3-" + ], + [ + "d2", + "|" + ], + [ + "A", + "?}-{" + ], + [ + "A", + "?" + ], + [ + "C=^Z", + "CCCCCCCCC/3=O" + ], + [ + "?}", + "*OCC" + ], + [ + "a3344", + "h-1a" + ], + [ + "p?-", + "q2" + ], + [ + "A?|B", + "?}-{" + ], + [ + "A?|B", + "?" + ], + [ + "h", + "222h" + ], + [ + "b", + "5-" + ], + [ + "a1112", + "h-1x" + ], + [ + "u212", + "1A" + ], + [ + "a?-", + "n1" + ], + [ + "CCCCCCCC", + "CC/3=O" + ], + [ + "2*N", + "CO" + ], + [ + "1-d4|d", + "6|" + ], + [ + "(", + "$" + ], + [ + "axx2", + "xh-1d" + ], + [ + "c?-", + "n1" + ], + [ + "3|h3|i3|j", + "3|k" + ], + [ + "uxx", + "2" + ], + [ + "x", + "A-1" + ], + [ + "2", + "*OCCC/4C/4C/3=O" + ], + [ + "f6-", + "h1" + ], + [ + "?|U?|V", + "?|" + ], + [ + "?|U?|V?|", + "W" + ], + [ + "?|U?|V?|W", + "?|" + ], + [ + "?|U?|V?|W?|", + "X" + ], + [ + "?|U?|V?|W?|X", + "?|" + ], + [ + "?|U?|V?|W?|X?|", + "Y" + ], + [ + "?|", + "a" + ], + [ + "6", + "*OSiCC/4C/4C" + ], + [ + "/7", + "=O" + ], + [ + "/", + "12" + ], + [ + "a1221", + "h-1a" + ], + [ + "s", + "2-" + ], + [ + "3", + "*OPO/3O/3=O" + ], + [ + "d", + "1-c3|c6" + ], + [ + "6", + "*OCCC/4C/4C/3=O" + ], + [ + "u1", + "122m" + ], + [ + "CN", + "$" + ], + [ + "xx", + "xh" + ], + [ + "3|", + "p" + ], + [ + "hU", + "122h" + ], + [ + "s?-", + "t1" + ], + [ + "c5-", + "d1" + ], + [ + "a1211", + "h-1b" + ], + [ + "m4-", + "o1" + ], + [ + "Cl", + "/3=O" + ], + [ + "3", + "*F" + ], + [ + "?|h?|i?|j?|k?|l?|m", + "?}" + ], + [ + "e3-", + "g1" + ], + [ + "a", + "d1" + ], + [ + "g?-", + "j1" + ], + [ + "a1211", + "h-1x" + ], + [ + "f", + "7-" + ], + [ + "/4C", + "/3=O" + ], + [ + "/1", + "3" + ], + [ + "n2-", + "o1" + ], + [ + "n", + "6-" + ], + [ + "a6-", + "p1" + ], + [ + "3", + "*OSiCC/4C/4C/3C/3C" + ], + [ + "o?-", + "p2" + ], + [ + "u", + "4" + ], + [ + "n1*1O(CCCCCC$3/6)N", + "CN" + ], + [ + "j6-", + "k2" + ], + [ + "axx2", + "xh-1u" + ], + [ + "O/2=O", + "/2=O" + ], + [ + "A?|B?|C?|D", + "?}-{" + ], + [ + "A?|B?|C?|D", + "?" + ], + [ + "u2", + "22h" + ], + [ + "6", + "*F" + ], + [ + "4", + "*F" + ], + [ + "*OPOCCN", + "/3O/3=O" + ], + [ + "e", + "7-" + ], + [ + "122h-2", + "a" + ], + [ + "ax", + "22" + ], + [ + "a4344", + "h-1x" + ], + [ + "a?-", + "h1" + ], + [ + "a2", + "|" + ], + [ + "f", + "1-" + ], + [ + "3", + "*O" + ], + [ + "?|H?|I?|J", + "?}-{" + ], + [ + "?|H?|I?|J", + "?" + ], + [ + "6", + "n2-8" + ], + [ + "h3-", + "i2" + ], + [ + "7", + "*NCC/3=O" + ], + [ + "a6-", + "b2" + ], + [ + "/4=O", + "/3C" + ], + [ + "m6-", + "n2" + ], + [ + "e", + "4|" + ], + [ + "=^E", + "C(CCCCCC$" + ], + [ + "6", + "*OSiCC/4C/4C/3C/3C" + ], + [ + "t", + "2-" + ], + [ + "c2", + "|" + ], + [ + "b?-", + "i1" + ], + [ + "A", + "" + ], + [ + "l4-", + "n1" + ], + [ + "d2|", + "e2" + ], + [ + "a1122", + "A-1x" + ], + [ + "i6-", + "j1" + ], + [ + "h6-", + "k1" + ], + [ + "*", + "S" + ], + [ + "k3-", + "l2" + ], + [ + "a222", + "h-1x" + ], + [ + "2", + "*OSiC/3C/3C" + ], + [ + "e6-", + "g1" + ], + [ + "a1221", + "h-1x" + ], + [ + "xA-1", + "u" + ], + [ + "b2", + "|" + ], + [ + "q2-", + "p" + ], + [ + "q2-p", + "3|p" + ], + [ + "q2-p3|p", + "6" + ], + [ + "a2221", + "m-1a" + ], + [ + "n", + "3|n" + ], + [ + "A", + "a11" + ], + [ + "a", + "4|" + ], + [ + "6*", + "I" + ], + [ + "N", + "CCO" + ], + [ + "3|h3|i3|j3|k", + "3|l" + ], + [ + "4|", + "h" + ], + [ + "a2|", + "b2|" + ], + [ + "a2|b2|", + "c2|" + ], + [ + "r3-", + "s1" + ], + [ + "n3|n", + "6" + ], + [ + "e4|", + "f" + ], + [ + "ux", + "12" + ], + [ + "u", + "112" + ], + [ + "a2|b2|c2|", + "d2|e2" + ], + [ + "j?-", + "m1" + ], + [ + "n1", + "*1" + ], + [ + "o2-", + "n3|n6" + ], + [ + "?|h?|i?|j?|k?|l", + "?}" + ], + [ + "s", + "4-" + ], + [ + "4", + "*NC=O" + ], + [ + "xh", + "-2x" + ], + [ + "a12", + "1" + ], + [ + "b", + "4|" + ], + [ + "6)", + "/3=O" + ], + [ + "6", + "*NCC" + ], + [ + "c?-", + "o1" + ], + [ + "o", + "1-" + ], + [ + "4", + "*OSiC/3C/3C" + ], + [ + "^XO", + "*" + ], + [ + "a2211", + "h-1x" + ], + [ + "o4-", + "q1" + ], + [ + "d", + "xx" + ], + [ + "(", + "CC" + ], + [ + "7", + "*OCC/3=O" + ], + [ + "^XO*", + "/3CO/6=O/3C" + ], + [ + "axxxx", + "x" + ], + [ + "6", + "/9" + ], + [ + "a?-", + "o1" + ], + [ + "a?|b?|c", + "?}*OC" + ], + [ + "7", + "*OP^XOCCN/3O/3=O" + ], + [ + "a4|", + "b4|" + ], + [ + "a4|b4|", + "c" + ], + [ + "a4|b4|c", + "4|d" + ], + [ + "a4|b4|c4|d", + "4|" + ], + [ + "6", + "*O" + ], + [ + "3", + "*NCC" + ], + [ + "CCCC", + "$" + ], + [ + "/2", + "C" + ], + [ + "a1-c", + "4~n" + ], + [ + "a", + "d2" + ], + [ + "a21", + "d2" + ], + [ + "uxx2", + "xh" + ], + [ + "2*NCC", + "O" + ], + [ + "i", + "3|i" + ], + [ + "*OC(CCCCCC$4", + "/7)" + ], + [ + "h4", + "h" + ], + [ + "*OC(CCCCCC$4/7)", + "C/3=O" + ], + [ + "n2", + "*1O" + ], + [ + "CCCCCC", + "C/3=O" + ], + [ + "CO", + "($" + ], + [ + "e4|f", + "4|" + ], + [ + "2*N", + "=^XCC/3O" + ], + [ + "1", + "*OC" + ], + [ + "b?-", + "j1" + ], + [ + "334", + "h" + ], + [ + "=^EC(CCCCCC$", + "6/9" + ], + [ + "6", + "*OS(CCCCCC$4/7)" + ], + [ + "a?-", + "r1" + ], + [ + "ad122", + "m-1b" + ], + [ + "n", + "?}" + ], + [ + "(/4)", + "*2" + ], + [ + "d2", + "21h" + ], + [ + "4", + "}" + ], + [ + "d", + "12h" + ], + [ + "a4|b4|c4|d4|", + "e4|f4|" + ], + [ + "a4|b4|c4|d4|e4|f4|", + "g" + ], + [ + "axx", + "21" + ], + [ + "A?|B?|C", + "?}-{" + ], + [ + "A?|B?|C", + "?" + ], + [ + "CO", + "/4=O/3C" + ], + [ + "m?-", + "p1" + ], + [ + "d4-", + "j1" + ], + [ + "d1", + "11h" + ], + [ + "3|", + "r" + ], + [ + "ux12", + "xh" + ], + [ + "h6-", + "l1" + ], + [ + "a2211", + "h-1a" + ], + [ + "/4)", + "*2" + ], + [ + "N", + "$" + ], + [ + "s", + "3-" + ], + [ + "c4-", + "l1" + ], + [ + "l?-", + "p1" + ], + [ + "ax", + "1" + ], + [ + "6", + "*OCCCCCCCC" + ], + [ + "j", + "3|j" + ], + [ + "N", + "/3=O" + ], + [ + "ad", + "122h-1" + ], + [ + "Ad1", + "zz" + ], + [ + "3", + "*OCCC/4C/4C/3=O" + ], + [ + "i6-", + "k1" + ], + [ + "k4-", + "m1" + ], + [ + "3*OC", + "^R" + ], + [ + "6*", + "Br" + ], + [ + "ad222", + "m-1b" + ], + [ + "a1-", + "d2" + ], + [ + "j6-", + "m1" + ], + [ + "d", + "8-" + ], + [ + "g", + "8-" + ], + [ + "n4-", + "p1" + ], + [ + "a1-b", + "4~n" + ], + [ + "=^Z", + "CC" + ], + [ + "/10=O(/4)", + "CN*2" + ], + [ + "a2212", + "h-1b" + ], + [ + "i3|i", + "6" + ], + [ + "1*NCC", + "N" + ], + [ + "a", + "8-" + ], + [ + "g8-", + "h2" + ], + [ + "u2", + "222h" + ], + [ + "s2-", + "r" + ], + [ + "s2-r", + "3|r" + ], + [ + "s2-r3|r", + "6" + ], + [ + "C^R", + "O" + ], + [ + "2", + "*OP" + ], + [ + "a1111", + "h-1a" + ], + [ + "a2d12", + "m-1a" + ], + [ + "ax", + "21" + ], + [ + "l6-", + "p1" + ], + [ + "3|", + "q" + ], + [ + "k", + "3|k" + ], + [ + "211", + "1m" + ], + [ + "f3-", + "h1" + ], + [ + "c", + "1-" + ], + [ + "1", + "*" + ], + [ + "2*", + "I" + ], + [ + "(CC", + "CN" + ], + [ + "Ad2", + "zz" + ], + [ + "j2-", + "i3|i6" + ], + [ + "a6-", + "q1" + ], + [ + "k2-", + "j3|j" + ], + [ + "k2-j3|j", + "6" + ], + [ + "a21EE", + "A-1a" + ], + [ + "3|", + "s" + ], + [ + "d2", + "h" + ], + [ + "a6-", + "b" + ], + [ + "N", + "CC" + ], + [ + "s", + "3|s" + ], + [ + "/12", + "C" + ], + [ + "k?-", + "n1" + ], + [ + "b5-", + "c1" + ], + [ + "t2-", + "s3|s" + ], + [ + "t2-s3|s", + "6" + ], + [ + "x2", + "h" + ], + [ + "a2212", + "h-1x" + ], + [ + "a?-", + "p1" + ], + [ + "(CCCC", + "CN$" + ], + [ + "y", + "1" + ], + [ + "a2121", + "h-1b" + ], + [ + "l2-", + "k3|k" + ], + [ + "l2-k3|k", + "6" + ], + [ + "(CCCCCC$", + "12" + ], + [ + "xx", + "h" + ], + [ + "N", + "C$" + ], + [ + "a2222", + "h-1a" + ], + [ + "(", + "N" + ], + [ + "a2221", + "h-1b" + ], + [ + "j?-", + "l1" + ], + [ + "6*OC", + "^XO*/3CO/6=O/3C" + ], + [ + "2", + "*OCCC" + ], + [ + "r2-", + "q" + ], + [ + "r2-q", + "3|q" + ], + [ + "r2-q3|q", + "6" + ], + [ + "s4-", + "t1" + ], + [ + "a1-d2", + "~n" + ], + [ + "a1", + "d22" + ], + [ + "d21", + "h" + ], + [ + "7", + "*OPO/3O/3=O" + ], + [ + "a", + "d21" + ], + [ + "a2d", + "22" + ], + [ + "?|U?|V?|W?|X?|Y", + "?|" + ], + [ + "?|U?|V?|W?|X?|Y?|", + "Z" + ], + [ + "?|a", + "a?|" + ], + [ + "?|aa?|", + "a" + ], + [ + "?|aa?|a", + "b" + ], + [ + "?", + "*OPO/3O/3=O" + ], + [ + "a1222", + "h-1a" + ], + [ + "(CCCCCC$", + "11" + ], + [ + "d7-", + "e1" + ], + [ + "2*NC", + "(CCCCCC$4)/3=O" + ], + [ + "5", + "*OC" + ], + [ + "a1x2", + "xh-1u" + ], + [ + "(CCCCCC$2", + "/5" + ], + [ + "ad222", + "m-1x" + ], + [ + "C", + "^X" + ], + [ + "l?-", + "q1" + ], + [ + "/4)*2", + "/10=O" + ], + [ + "x", + "22h" + ], + [ + "3", + "*OC(CCCCCC$4/7)OC" + ], + [ + "d8-", + "e2" + ], + [ + "l?-", + "n1" + ], + [ + "a3344", + "h-1x" + ], + [ + "k6-", + "n1" + ], + [ + "j6-", + "k1" + ], + [ + "6*N", + "S" + ], + [ + "N$", + "2" + ], + [ + "l3-", + "m2" + ], + [ + "/4", + "O/3=O" + ], + [ + "4|h", + "4|i" + ], + [ + "ad", + "112" + ], + [ + "j4-", + "l1" + ], + [ + "C(CCCCCC$", + "6)/3=O" + ], + [ + "122h-2", + "x" + ], + [ + "8", + "*" + ], + [ + "n1*1O(CCCCCC$3/6)N", + "S" + ], + [ + "a1-b", + "3~n" + ], + [ + "3", + "*OP^XOCCN/3O/3=O" + ], + [ + "344", + "h" + ], + [ + "a6-", + "s1" + ], + [ + "6", + "*Cl" + ], + [ + "C", + "F/4F/4F/3=O" + ], + [ + "CF/4F/4F/3=O", + "/3=O" + ], + [ + "e7-", + "f1" + ], + [ + "A", + "1" + ], + [ + "a6-", + "t1" + ], + [ + "8", + "*N" + ], + [ + "a3-", + "b2" + ], + [ + "h", + "22" + ], + [ + "a?-", + "s1" + ], + [ + "6", + "*OSiC/3C/3C" + ], + [ + "*OS", + "CF/4F/4F/3=O/3=O" + ], + [ + "11", + "xh" + ], + [ + "p4-", + "r1" + ], + [ + "s", + "2" + ], + [ + "k?-", + "m1" + ], + [ + "a1x1", + "xh-1u" + ], + [ + "/7=O", + "/5" + ], + [ + "axxxxx", + "h-1a" + ], + [ + "a6-", + "u1" + ], + [ + "a1122", + "m-1b" + ], + [ + "s3-", + "t1" + ], + [ + "C=^Z", + "CCCCCCC/3=O" + ], + [ + "|", + "f2" + ], + [ + "8*", + "(N" + ], + [ + "6", + "*OP^XOCCN" + ], + [ + "222", + "m" + ], + [ + "l", + "/3=O" + ], + [ + "*O", + "*" + ], + [ + "h", + "12" + ], + [ + "6*S", + "O/2=O/2=O" + ], + [ + "a1-", + "f" + ], + [ + "(CCCCCC$4)", + "/3C" + ], + [ + "t", + "?-" + ], + [ + "Ad1d", + "d11h" + ], + [ + "2*OP", + "N" + ], + [ + "#", + "N" + ], + [ + "a2|b2|c2|d2|e2", + "|f2" + ], + [ + "p", + "6-" + ], + [ + "a?-", + "q1" + ], + [ + "c?-", + "q1" + ], + [ + "4|", + "j" + ], + [ + "f?-", + "i1" + ], + [ + "1", + "n1-" + ], + [ + "(CCCN", + "CC$" + ], + [ + "Aad21122h-2", + "b" + ], + [ + "4)", + "/3=O" + ], + [ + "/1", + "4" + ], + [ + "a1211", + "h-1a" + ], + [ + "2", + "*C" + ], + [ + "b6-", + "h1" + ], + [ + "n1*1O", + "(CCCCCC$3" + ], + [ + "3*OC^R", + "CO/4=O/3C" + ], + [ + "m", + "3|m" + ], + [ + "C=^ZCCC=^ZCC", + "C=^ZCC" + ], + [ + "b", + "3|b" + ], + [ + "a?|b?|c?|d", + "?}*OC" + ], + [ + "a21FF", + "A-1a" + ], + [ + "a21EE", + "A-1x" + ], + [ + "(CCCC", + "NC$" + ], + [ + "h1", + "1" + ], + [ + "d6-", + "e2" + ], + [ + "u12", + "11h" + ], + [ + "h", + "21" + ], + [ + "Ad2d", + "d22h" + ], + [ + "Ad1d", + "d22h" + ], + [ + "t", + "2" + ], + [ + "z", + "1" + ], + [ + "a1222", + "h-1x" + ], + [ + "f6-", + "i1" + ], + [ + "b3-", + "e1" + ], + [ + "a1", + "d21" + ], + [ + "b", + "8-" + ], + [ + "/1", + "5" + ], + [ + "Aad2", + "2111m" + ], + [ + "ad1", + "11" + ], + [ + "4", + "*OSC/3=O/3=O" + ], + [ + "a21eE", + "A-1a" + ], + [ + "O/5", + "O/5=O/3O/3=O" + ], + [ + "a", + "344" + ], + [ + "c?-", + "p1" + ], + [ + "O", + "/9" + ], + [ + "n?-", + "q1" + ], + [ + "3*N", + "*" + ], + [ + "Ad2d", + "d11h" + ], + [ + "4", + "*C" + ], + [ + "2*OCC", + "=C" + ], + [ + "3", + ")" + ], + [ + "a6-b", + "3*N*" + ], + [ + "C", + "#N" + ], + [ + "/8", + ")O" + ], + [ + "a1", + "*OC" + ], + [ + "n2-", + "m3|m" + ], + [ + "n2-m3|m", + "6" + ], + [ + "CC", + "Cl/6" + ], + [ + "CCCl/6", + "Cl/6" + ], + [ + "CCCl/6Cl/6", + "Cl/3=O" + ], + [ + "ad", + "22" + ], + [ + "6*NC", + "N(CCCCCC$5" + ], + [ + "6", + "*OPO*" + ], + [ + "q?-", + "r2" + ], + [ + "?|i", + "?}" + ], + [ + "a?|b?|c?|d?|e", + "?}*OC" + ], + [ + "c6-", + "n1" + ], + [ + "A", + "2" + ], + [ + "x2", + "xh" + ], + [ + "4", + "*OSiCC/4C/4C/3C/3C" + ], + [ + "m?-", + "q1" + ], + [ + "12", + "m" + ], + [ + "7", + "*N" + ], + [ + "=^EC(CCCCCC$6/9", + ")O(" + ], + [ + "a21eE", + "A-1x" + ], + [ + "1", + "n2-" + ], + [ + "j6-", + "n1" + ], + [ + "l?-", + "o1" + ], + [ + "n3-", + "o2" + ], + [ + "a21FF", + "A-1x" + ], + [ + "a4-", + "e1" + ], + [ + "h", + "axx" + ], + [ + "m?-", + "r1" + ], + [ + "ad", + "xx" + ], + [ + "a?-", + "t1" + ], + [ + "2", + "*OS(CCCCCC$4/7)" + ], + [ + "a2221", + "h-1x" + ], + [ + "a222", + "h-1a" + ], + [ + "b", + "3" + ], + [ + "t", + "3-" + ], + [ + "Aa", + "d" + ], + [ + "c3-", + "f1" + ], + [ + "h6-", + "i2" + ], + [ + "q4-", + "s1" + ], + [ + "CC", + "^R" + ], + [ + "3|h3|i3|j3|k3|l", + "3|m" + ], + [ + "3*C", + "O" + ], + [ + "a1-e", + "3~n" + ], + [ + "Aa11", + "122h-2a" + ], + [ + "3", + "*OS(CCCCCC$4/7)" + ], + [ + "ud", + "222m" + ], + [ + "a?|b?|c?|d", + "?}*OSO" + ], + [ + "$", + "5" + ], + [ + "u", + "2-" + ], + [ + "a6-b1", + "*N*" + ], + [ + "g", + "4-" + ], + [ + "u1221", + "h" + ], + [ + "a6-", + "c2" + ], + [ + "h-1", + "u" + ], + [ + "p", + "1-" + ], + [ + "/1", + "8" + ], + [ + "/11", + "=O" + ], + [ + "O", + "C" + ], + [ + "a", + "3" + ], + [ + "3*", + "S" + ], + [ + "x", + "m-1x" + ], + [ + "6", + "*OPOCCN/3O/3=O" + ], + [ + "CCCC$", + "4" + ], + [ + "f", + "6|" + ], + [ + "2", + "*OSiCC/4C/4C/3C/3C" + ], + [ + "C^RO", + "*2" + ], + [ + "a6-", + "d2" + ], + [ + "=", + "N" + ], + [ + "11", + "1h" + ], + [ + "p3-", + "q2" + ], + [ + "(CCCCCC$3", + ")" + ], + [ + "1*NC(CCCCCC$4", + "/5)" + ], + [ + "a4344", + "h-1b" + ], + [ + "c?-", + "r1" + ], + [ + "/2", + "0" + ], + [ + "3*OCCC", + "^R" + ], + [ + "u112", + "1h" + ], + [ + "21", + "m" + ], + [ + "d4-", + "k1" + ], + [ + "11", + "m" + ], + [ + "CCCCCCCCCC", + "C/3=O" + ], + [ + "1-d", + "?|i?}" + ], + [ + "e6-", + "f2" + ], + [ + "a1121", + "A-1a" + ], + [ + "2", + "*OSC/3=O/3=O" + ], + [ + "C", + "/4O/3=O" + ], + [ + "a2", + "x" + ], + [ + "j?-", + "n1" + ], + [ + "FF", + "A" + ], + [ + "u", + "?-" + ], + [ + "C", + "/6=O/3=O" + ], + [ + "a4334", + "h-1b" + ], + [ + "a1211", + "m-1a" + ], + [ + "d6-", + "i1" + ], + [ + "a2-", + "c1" + ], + [ + "/5", + "C/3=O" + ], + [ + "1", + "*OPO/3O/3=O" + ], + [ + "ad21", + "1" + ], + [ + "ax1", + "xx" + ], + [ + "4", + "*OC(CCCCCC$4/7)OC" + ], + [ + "5)", + "/3=O" + ], + [ + "1", + "*OCCCCCCCC" + ], + [ + "b4-", + "g1" + ], + [ + "6", + "*OCCC" + ], + [ + "a2111", + "h-1b" + ], + [ + "4", + "*OCCC/4C/4C/3=O" + ], + [ + "2*NCO", + "C(CCCCCC$6)/3=O" + ], + [ + "Aa", + "dxxxx" + ], + [ + "(", + "CCN" + ], + [ + "a", + "6" + ], + [ + "C^RO*2", + "/3CO/6=O/3C" + ], + [ + "n1*1", + "NCCO" + ], + [ + ")", + "F" + ], + [ + "CC", + "^S" + ], + [ + "2*", + "Br" + ], + [ + "a?|b?|c?|d?|e", + "?}*OSO" + ], + [ + "3*N", + "S" + ], + [ + "C", + "1" + ], + [ + "j6-", + "l1" + ], + [ + "u1", + "112h" + ], + [ + "12", + "/10=O(/4)*2" + ], + [ + "?", + "*OCC/3=O" + ], + [ + "^XO", + "*2" + ], + [ + "h", + "6|" + ], + [ + ")O(", + "/4" + ], + [ + "a1221", + "h-1b" + ], + [ + "o2-", + "p1" + ], + [ + "/5", + ")O" + ], + [ + "a344", + "h-1x" + ], + [ + "*OPO", + "PO" + ], + [ + "c6-", + "d2" + ], + [ + "a2", + "x2" + ], + [ + "B", + "1" + ], + [ + "a1121", + "h-1a" + ], + [ + "a1-e", + "4~n" + ], + [ + "o", + "6-" + ], + [ + "Aad1", + "1" + ], + [ + "ad122", + "m-1x" + ], + [ + "1*NC(CCCCCC$4", + "/7)O" + ], + [ + "x", + "d" + ], + [ + "b6-", + "i1" + ], + [ + "ad2", + "21" + ], + [ + "a6-", + "v1" + ], + [ + "|", + "g2" + ], + [ + "/7", + "O" + ], + [ + "a121", + "h-1b" + ], + [ + "d3-", + "g1" + ], + [ + "C(CCCCCC$", + "11" + ], + [ + "3", + "*OSC/3=O/3=O" + ], + [ + "b", + "6|" + ], + [ + "?", + "%" + ], + [ + "u22", + "21h" + ], + [ + "h4", + "334h" + ], + [ + "C", + "/9" + ], + [ + "b4-", + "c2" + ], + [ + "4", + "*" + ], + [ + "#", + "C" + ], + [ + "c", + "6|" + ], + [ + "4", + "*Cl" + ], + [ + "ux", + "11xh" + ], + [ + "CC", + "^X" + ], + [ + "a2111", + "h-1a" + ], + [ + "haxx", + "xh-2x" + ], + [ + "uxx", + "1" + ], + [ + "a6-", + "e2" + ], + [ + "4", + "*NC" + ], + [ + "b6|", + "c6|" + ], + [ + "b6|c6|", + "d" + ], + [ + "?", + "*OP^XOCCN/3O/3=O" + ], + [ + "h", + "a2" + ], + [ + "t?-", + "u1" + ], + [ + "6|", + "e" + ], + [ + "b6-", + "j1" + ], + [ + "?", + "*" + ], + [ + "c?-", + "s1" + ], + [ + "b6|c6|d", + "6|e" + ], + [ + "/1", + "4)" + ], + [ + "a", + "6|" + ], + [ + "1-d4|d6|", + "i" + ], + [ + "1-d4|d6|i", + "4|i" + ], + [ + "1-d4|d6|i4|i", + "6}" + ], + [ + ")OC", + "(" + ], + [ + "ax11", + "xh-1d" + ], + [ + "xx", + "xm" + ], + [ + "e?-", + "j1" + ], + [ + "a2|b2|c2|d2|e2|f2", + "|g2" + ], + [ + "t3-", + "u1" + ], + [ + "g6-", + "k1" + ], + [ + "a1-", + "c2" + ], + [ + "5", + "*OPO/3O/3=O" + ], + [ + "u1", + "122" + ], + [ + "g6-", + "h2" + ], + [ + "i6-", + "m1" + ], + [ + "ha122h-2", + "a" + ], + [ + "/8)O", + "C/3=O" + ], + [ + "a?-", + "u1" + ], + [ + "C#N", + "(/4)" + ], + [ + "C#N(/4)", + "CN" + ], + [ + "/12C", + "/11=O" + ], + [ + "/6", + "O" + ], + [ + "7", + "*NC=O" + ], + [ + "4", + "*NCC" + ], + [ + "f?-", + "h2" + ], + [ + "CCCCCCCC", + "CCCCCC" + ], + [ + "b6|c6|d6|e", + "6|" + ], + [ + "a2221", + "m-1x" + ], + [ + "8", + "*NC" + ], + [ + "/1", + "7" + ], + [ + "CCCCC$", + "12/10=O(/4)*2" + ], + [ + "4", + "*O" + ], + [ + "/", + "21" + ], + [ + "h", + "3|h" + ], + [ + "a21", + "x2" + ], + [ + "/3", + "=N" + ], + [ + "CCCCCCCC", + "CCCC" + ], + [ + "1n2-", + "3" + ], + [ + "m6-", + "q1" + ], + [ + "a1222", + "h-1b" + ], + [ + "e6-", + "h1" + ], + [ + "c?-", + "t1" + ], + [ + "a6-", + "f2" + ], + [ + "2*NCC", + "F/4F/4F/3=O" + ], + [ + "a6|", + "b6|c6|d6|e6|" + ], + [ + "f6|", + "g" + ], + [ + "f1-", + "a?|b?|c?|d?|e?}" + ], + [ + "k6-", + "q1" + ], + [ + "a1d21", + "m-1a" + ], + [ + "l", + "3|l" + ], + [ + "ud", + "xxxm" + ], + [ + "h?-", + "k1" + ], + [ + "1*NC", + "^S" + ], + [ + "t", + "4-" + ], + [ + "c1-", + "b3|b" + ], + [ + "a1-", + "g" + ], + [ + "6*OCC", + "=C" + ], + [ + "r?-", + "s2" + ], + [ + "D", + "1" + ], + [ + "a1112", + "m-1a" + ], + [ + "u?-", + "v1" + ], + [ + "k6-", + "m1" + ], + [ + "4", + "*S" + ], + [ + "f6|g", + "6|" + ], + [ + "u", + "1222h" + ], + [ + "1", + "*OP^XO" + ], + [ + "c4-", + "m1" + ], + [ + "%", + "." + ], + [ + "a4", + "34" + ], + [ + "P", + "^XO*2" + ], + [ + "?|H?|I?|J?|K", + "?}-{" + ], + [ + "?|H?|I?|J?|K", + "?" + ], + [ + "3*NC", + "N(CCCCCC$5" + ], + [ + "Ad1", + "d111h" + ], + [ + "a2212", + "h-1a" + ], + [ + "n?|o", + "?}" + ], + [ + "1-d", + "?|h?}" + ], + [ + "q", + "1-" + ], + [ + "Ad2d", + "222h" + ], + [ + "Ad1", + "d221h" + ], + [ + "a2121", + "h-1a" + ], + [ + "f6|g6|", + "h6|" + ], + [ + "f6|g6|h6|", + "i" + ], + [ + "/5", + "C" + ], + [ + "f7-", + "g1" + ], + [ + "(CCCCCC$2/5", + ")O(/4" + ], + [ + "c7-", + "d1" + ], + [ + "a", + "3|" + ], + [ + "Ad1d", + "112h" + ], + [ + "a3-", + "d1" + ], + [ + "a", + "8" + ], + [ + "a2121", + "h-1x" + ], + [ + "1*NC", + "(CCCCCC$4/7)" + ], + [ + "q?-", + "s1" + ], + [ + "b", + "7-" + ], + [ + "CCN", + "N$2" + ], + [ + "CCNN$2", + "/4)" + ], + [ + "hU", + "xxxh" + ], + [ + "4", + "*OCCC" + ], + [ + "Ad2d", + "112h" + ], + [ + "Ad2", + "d221h" + ], + [ + "%", + "?%" + ], + [ + "b?-", + "g2" + ], + [ + "Ad2", + "d111h" + ], + [ + "e4-", + "h1" + ], + [ + "e", + "1-" + ], + [ + "ud", + "122m" + ], + [ + "a4344", + "h-1a" + ], + [ + "2*NCC", + "C^R" + ], + [ + "u", + "d2" + ], + [ + "7", + ")" + ], + [ + "8*(N", + "CCNN$2/4)" + ], + [ + "m2-", + "l3|l" + ], + [ + "m2-l3|l", + "6" + ], + [ + "u212", + "1h" + ], + [ + "/20", + "=O" + ], + [ + "1n2-3", + "n1*1O(CCCCCC$3" + ], + [ + "g3-", + "i1" + ], + [ + "u1", + "x2xh" + ], + [ + "d?-", + "l1" + ], + [ + "1*NC", + "^R" + ], + [ + "n2*1O", + "(CCCCCC$3" + ], + [ + "F/3=O", + "/3=O" + ], + [ + "Aa", + "x1" + ], + [ + "3*OCC", + "CC/3=O" + ], + [ + "4", + "h" + ], + [ + "d", + "5-" + ], + [ + "ax12", + "xh-1x" + ], + [ + "6", + "*OC(CCCCCC$4/7)OC" + ], + [ + "1", + "3" + ], + [ + "ad", + "12" + ], + [ + "v", + "?-" + ], + [ + "6", + "*OSC/3=O/3=O" + ], + [ + "d2", + "h-1x" + ], + [ + "5", + "*OCC" + ], + [ + "a1-c2", + "~n" + ], + [ + "u4", + "334h" + ], + [ + "a1112", + "h-1a" + ], + [ + "22", + "h-1a" + ], + [ + "(CCCC", + "CCCCCC$" + ], + [ + "C", + "(" + ], + [ + "4|h4|i", + "4}" + ], + [ + "Aadxxxx", + "xh-2x" + ], + [ + "uxx1", + "xh" + ], + [ + "d", + "xh" + ], + [ + "5", + "/3=O" + ], + [ + "6", + "*NCC/3=O" + ], + [ + "a2", + "21" + ], + [ + "b?-", + "k1" + ], + [ + "/21", + "C" + ], + [ + "(CCCCCC$4", + "/5)" + ], + [ + "a2111", + "h-1x" + ], + [ + "u1122", + "A" + ], + [ + "/21C", + "/20=O" + ], + [ + "2*", + "S" + ], + [ + "Aa11", + "122h-2x" + ], + [ + "PO", + "CCN" + ], + [ + "b4-", + "h1" + ], + [ + "3|h3|i3|j3|k3|l", + "3}" + ], + [ + "e?-", + "k1" + ], + [ + "k6-", + "l1" + ], + [ + "2-", + "3" + ], + [ + "4", + "*OP^XOCCN/3O/3=O" + ], + [ + "?|aa?|ab", + "?|a" + ], + [ + "?|aa?|ab?|a", + "c" + ], + [ + "?|aa?|ab?|ac", + "?|" + ], + [ + "?|aa?|ab?|ac?|", + "ad" + ], + [ + "k6-", + "l2" + ], + [ + "axx1", + "xh-1d" + ], + [ + "O/6=O", + "/3=O" + ], + [ + "1*NC", + "/2C" + ], + [ + "a?|b", + "?}*OC" + ], + [ + "l6-", + "q1" + ], + [ + "r4-", + "t1" + ], + [ + "d", + "1-" + ], + [ + "Aad1122h-2", + "b" + ], + [ + "?", + "*OC" + ], + [ + "a2", + "x1" + ], + [ + "ax22", + "xh-1d" + ], + [ + "o3-", + "p2" + ], + [ + "5", + "*OSiCC/4C/4C" + ], + [ + "6", + "*C" + ], + [ + "u", + "4-" + ], + [ + "2", + "*OC(CCCCCC$4/7)OC" + ], + [ + "112", + "m" + ], + [ + "h3|h", + "6" + ], + [ + "t", + "3|" + ], + [ + "t3|", + "t" + ], + [ + "3*OCCCC", + "CCCCCC" + ], + [ + "F", + "/18" + ], + [ + "b8-", + "c2" + ], + [ + "k4-", + "o1" + ], + [ + "a5-", + "d1" + ], + [ + "2", + "*OC(CCCCCC$4/8)O(" + ], + [ + "a1-", + "e2" + ], + [ + "/8", + "O" + ], + [ + "a1121", + "h-1b" + ], + [ + "u2-", + "t3|t" + ], + [ + "u2-t3|t", + "6" + ], + [ + "1*N", + "CCCCC$" + ], + [ + "6", + "*OC(CCCCCC$4/8)O(" + ], + [ + "a2221", + "h-1a" + ], + [ + "4*OCC", + "=C" + ], + [ + "4", + "*OS(CCCCCC$4/7)" + ], + [ + "s?-", + "t2" + ], + [ + "8*N", + "S" + ], + [ + "d6-", + "j1" + ], + [ + "p6-", + "q2" + ], + [ + "a", + "7" + ], + [ + "d2", + "h-1b" + ], + [ + "u22", + "12h" + ], + [ + "5*N", + "=^XCC/3O" + ], + [ + "E", + "1" + ], + [ + "3", + "*OPO*" + ], + [ + "4", + "*OPOPO" + ], + [ + "e", + "8-" + ], + [ + "u4", + "344h" + ], + [ + "a3", + "n2-" + ], + [ + "=O", + "(" + ], + [ + "/10=O", + "/10=O(/4)*2" + ], + [ + "a?-", + "d2" + ], + [ + "1*NC^S", + "(CCCCCC$4)/3C" + ], + [ + "a1121", + "h-1x" + ], + [ + "d5-", + "e1" + ], + [ + "3", + "*OC(CCCCCC$4/8)O(" + ], + [ + "f6|g6|h6|i", + "6|" + ], + [ + "f6|g6|h6|i6|", + "j" + ], + [ + "axx21", + "h-1b" + ], + [ + "Ad1d", + "d12h" + ], + [ + "/5)O", + "(/4)*2" + ], + [ + "e8-", + "f2" + ], + [ + "q3-", + "r2" + ], + [ + "a2", + "6" + ], + [ + "u2211", + "h" + ], + [ + "b1-", + "b" + ], + [ + "g", + "7-" + ], + [ + "b4-", + "j1" + ], + [ + "a3344", + "m-1x" + ], + [ + "/6", + ")OC" + ], + [ + "h", + "-2b" + ], + [ + "1*NC(CCCCCC$4/7)", + "Cl" + ], + [ + "Ad1d", + "222h" + ], + [ + "a7", + "-b1" + ], + [ + "F", + "1" + ], + [ + "ax12", + "xA-1u" + ], + [ + "1*NCC", + "(CCCCCC$5" + ], + [ + "ud", + "122h" + ], + [ + "o?-", + "q1" + ], + [ + "a1121", + "A-1x" + ], + [ + "a?-", + "f2" + ], + [ + "1*NCCN", + "CC$2" + ], + [ + "1*NCCNCC$2", + "/5C" + ], + [ + "a3344", + "h-1b" + ], + [ + "a1111", + "h-1x" + ], + [ + "m?-", + "o1" + ], + [ + "Ad2d", + "d21h" + ], + [ + "Ad2d", + "d12h" + ], + [ + "g4-", + "j1" + ], + [ + "a1-d", + "6~n" + ], + [ + "1", + "*OCC/3=O" + ], + [ + "u", + "d1" + ], + [ + "4", + "*OP^XOP" + ], + [ + "/2", + "O/2=O" + ], + [ + "?}", + "*OP^XOCCN" + ], + [ + "h11", + "dd1dh" + ], + [ + "b4-", + "i1" + ], + [ + "d2", + "h-1a" + ], + [ + "a1-e2", + "~n" + ], + [ + "a?|b?|c", + "?}*OCC" + ], + [ + "j", + "4|j" + ], + [ + "a2d12", + "m-1x" + ], + [ + "PO", + "/2O/2=O" + ], + [ + "/1", + "6" + ], + [ + "(CCCCCC$4", + "/6)" + ], + [ + "/7)O", + "(" + ], + [ + "b2-", + "d1" + ], + [ + "a1d22", + "m-1a" + ], + [ + "a1-c", + "6~n" + ], + [ + "c?-", + "f2" + ], + [ + "2*OCCCC", + "CCCCCC" + ], + [ + "A?|B?|C?|D?|E?|F?|G", + "?" + ], + [ + "h22", + "dd2dh" + ], + [ + "/10", + "O/9" + ], + [ + "Ad1d", + "d21h" + ], + [ + "q", + "6-" + ], + [ + "1-d4|d6|", + "j4|j" + ], + [ + "1-d4|d6|j4|j", + "6}" + ], + [ + "3*OCC", + "C/3=O" + ], + [ + "ad122h-1", + "x" + ], + [ + "4|h4|i", + "4|j" + ], + [ + "a112", + "h-1x" + ], + [ + "a?|b?|c", + "?}*OSO" + ], + [ + "/6", + "CC$" + ], + [ + "/1", + "5)" + ], + [ + "CCCCCC", + "C$" + ], + [ + "2", + "*Cl" + ], + [ + "l6-", + "o1" + ], + [ + "1*", + "(CCCCCC$2/5)O(/4" + ], + [ + "h12", + "dd2dh" + ], + [ + "?|U?|V", + "?}-{" + ], + [ + "?|U?|V", + "?" + ], + [ + "f", + "8-" + ], + [ + "u22", + "21m" + ], + [ + "1*NC^R", + "(CCCCCC$4)/3C" + ], + [ + "b1-", + "c2" + ], + [ + "x22h", + "-2a" + ], + [ + "3*NCC", + "F/4F/4F/3=O" + ], + [ + "c?-", + "u1" + ], + [ + ")O", + "CO($" + ] + ], + "metadata": { + "vocab_size": 2090, + "num_merges": 2000 + } +} \ No newline at end of file diff --git a/releases/2026-10-02/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_ambiguity_tokens.json b/releases/2026-10-02/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_ambiguity_tokens.json new file mode 100644 index 0000000000000000000000000000000000000000..e9f47f68349c95c2e7d98cfc0cb5e0e76927700a --- /dev/null +++ b/releases/2026-10-02/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_ambiguity_tokens.json @@ -0,0 +1,764 @@ +{ + "ambiguous_ids": [ + 39, + 114, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 140, + 141, + 142, + 143, + 144, + 145, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 155, + 156, + 157, + 158, + 163, + 164, + 165, + 167, + 168, + 170, + 175, + 176, + 180, + 181, + 183, + 184, + 192, + 193, + 197, + 198, + 217, + 218, + 226, + 229, + 237, + 238, + 239, + 241, + 247, + 251, + 258, + 264, + 265, + 273, + 275, + 276, + 295, + 298, + 299, + 309, + 322, + 323, + 329, + 334, + 335, + 336, + 340, + 341, + 342, + 345, + 349, + 350, + 351, + 352, + 353, + 354, + 355, + 359, + 360, + 361, + 363, + 364, + 365, + 366, + 367, + 368, + 369, + 371, + 372, + 373, + 375, + 376, + 377, + 378, + 379, + 380, + 383, + 384, + 385, + 387, + 388, + 389, + 390, + 391, + 401, + 405, + 409, + 415, + 416, + 419, + 420, + 421, + 426, + 427, + 428, + 430, + 431, + 432, + 434, + 435, + 440, + 441, + 442, + 444, + 445, + 446, + 450, + 462, + 463, + 470, + 476, + 477, + 478, + 481, + 487, + 488, + 489, + 493, + 494, + 496, + 499, + 516, + 535, + 536, + 538, + 539, + 540, + 552, + 590, + 592, + 602, + 603, + 604, + 608, + 609, + 620, + 635, + 636, + 637, + 640, + 646, + 647, + 649, + 654, + 659, + 660, + 661, + 667, + 668, + 675, + 676, + 688, + 690, + 711, + 716, + 720, + 721, + 734, + 742, + 752, + 754, + 778, + 788, + 791, + 793, + 808, + 809, + 810, + 817, + 820, + 831, + 833, + 834, + 843, + 844, + 859, + 869, + 870, + 873, + 880, + 885, + 886, + 893, + 894, + 910, + 928, + 938, + 939, + 940, + 941, + 942, + 943, + 944, + 950, + 952, + 953, + 958, + 959, + 961, + 963, + 972, + 979, + 987, + 988, + 989, + 994, + 995, + 996, + 1000, + 1001, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1019, + 1021, + 1026, + 1038, + 1050, + 1055, + 1072, + 1078, + 1115, + 1116, + 1124, + 1138, + 1150, + 1161, + 1167, + 1168, + 1169, + 1170, + 1171, + 1172, + 1173, + 1178, + 1193, + 1197, + 1220, + 1233, + 1250, + 1253, + 1262, + 1267, + 1301, + 1305, + 1317, + 1318, + 1333, + 1342, + 1349, + 1360, + 1370, + 1371, + 1372, + 1373, + 1374, + 1383, + 1389, + 1390, + 1391, + 1396, + 1416, + 1420, + 1425, + 1428, + 1433, + 1445, + 1478, + 1483, + 1499, + 1500, + 1501, + 1503, + 1513, + 1524, + 1531, + 1561, + 1563, + 1566, + 1567, + 1568, + 1600, + 1601, + 1602, + 1605, + 1608, + 1626, + 1634, + 1635, + 1636, + 1661, + 1669, + 1671, + 1672, + 1686, + 1726, + 1737, + 1738, + 1739, + 1740, + 1741, + 1752, + 1763, + 1773, + 1780, + 1790, + 1796, + 1798, + 1804, + 1829, + 1842, + 1888, + 1893, + 1905, + 1907, + 1912, + 1918, + 1923, + 1940, + 1945, + 1948, + 1951, + 1961, + 1991, + 1992, + 1993, + 2016, + 2020, + 2021, + 2030, + 2033, + 2034, + 2035, + 2064, + 2066, + 2067, + 2077, + 2093, + 2100, + 2101, + 2105, + 2110 + ], + "ambiguous_tokens": { + "%?%": 1763, + "-?": 1918, + "1-?": 273, + "1-a?|b?|c?|d?|e?|f?}": 928, + "1-a?|b?|c?|d?|e?}": 869, + "1-d?|i?}": 2100, + "2-?": 721, + "-?": 2016, + "?": 39, + "?%": 1669, + "?*OCC/3=O": 2033, + "?*OPO/3O/3=O": 1796, + "?*OSO/3=O/3=O": 1078, + "?-": 149, + "?-?": 2067, + "?|": 114, + "?|A": 434, + "?|B": 462, + "?|C": 493, + "?|D": 535, + "?|E": 608, + "?|F": 635, + "?|G": 646, + "?|H": 667, + "?|I": 675, + "?|J": 688, + "?|K": 831, + "?|L": 939, + "?|L?|M": 942, + "?|L?|M?|N": 943, + "?|M": 940, + "?|N": 941, + "?|O": 1003, + "?|O?|P": 1011, + "?|O?|P?|Q": 1012, + "?|O?|P?|Q?|R": 1013, + "?|O?|P?|Q?|R?|S": 1014, + "?|O?|P?|Q?|R?|S?|T": 1015, + "?|O?|P?|Q?|R?|S?|T?|U": 1016, + "?|O?|P?|Q?|R?|S?|T?|U?|V": 1017, + "?|P": 1004, + "?|Q": 1005, + "?|R": 1006, + "?|S": 1007, + "?|T": 1008, + "?|U": 1009, + "?|V": 1010, + "?|W": 1167, + "?|W?|X": 1170, + "?|W?|X?|Y": 1171, + "?|X": 1168, + "?|Y": 1169, + "?|Z": 1370, + "?|Z?|a": 1371, + "?|Z?|aa?|": 1372, + "?|Z?|aa?|ab": 1373, + "?|a": 552, + "?|ac": 1738, + "?|ac?|ad": 1739, + "?|ad": 1737, + "?|c": 133, + "?|d": 135, + "?|e": 137, + "?|f": 140, + "?|g": 142, + "?|h": 144, + "?|h?}": 2064, + "?|i": 147, + "?|i?}": 1842, + "?|j": 150, + "?|k": 152, + "?|l": 155, + "?|m": 157, + "?|n": 164, + "?|o": 167, + "?|p": 175, + "?|s": 192, + "?|t": 197, + "?|u": 217, + "?|v": 238, + "?|w": 264, + "?|x": 298, + "?|y": 322, + "?|z": 387, + "?}": 163, + "?}*OC": 716, + "?}*OCC/3=O": 870, + "?}*OPO/3O/3=O": 742, + "?}*OSO/3=O/3=O": 592, + "?}-{": 170, + "?}-{a?|b": 994, + "?}-{a?|b?": 995, + "?}-{a?|b?|c": 602, + "?}-{a?|b?|c?": 603, + "?}-{a?|b?|c?|d": 487, + "?}-{a?|b?|c?|d?": 488, + "?}-{a?|b?|c?|d?|e": 476, + "?}-{a?|b?|c?|d?|e?": 477, + "?}-{a?|b?|c?|d?|e?|f": 440, + "?}-{a?|b?|c?|d?|e?|f?": 441, + "?}-{a?|b?|c?|d?|e?|f?|g": 444, + "?}-{a?|b?|c?|d?|e?|f?|g?": 445, + "?}-{a?|b?|c?|d?|e?|f?|g?|h": 430, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?": 431, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i": 419, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?": 420, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j": 383, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?": 384, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k": 371, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?": 372, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l": 340, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?": 341, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m": 389, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?": 390, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n": 378, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?": 379, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o": 359, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?": 360, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p": 349, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?": 350, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q": 375, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?": 376, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r": 353, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?": 354, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s": 367, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?": 368, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t": 334, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?": 335, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u": 364, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?": 365, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v": 426, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?": 427, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w": 538, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?": 539, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x": 659, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?": 660, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y": 808, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?": 809, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z": 987, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?": 988, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A": 1499, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?": 1500, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B": 1389, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?": 1390, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C": 1634, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?": 1635, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D": 1600, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?": 1601, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J": 1566, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?": 1567, + "a?-": 226, + "a?-b1": 241, + "a?-b2": 1267, + "a?-c1": 972, + "a?-d1": 959, + "a?-e1": 979, + "a?-f1": 1055, + "a?-g1": 1342, + "a?-h1": 1561, + "a?-i1": 1420, + "a?-j1": 1233, + "a?-k1": 1318, + "a?-l1": 1115, + "a?-m1": 1416, + "a?-n1": 1425, + "a?-o1": 1605, + "a?-p1": 1740, + "a?-q1": 1912, + "a?-r1": 1661, + "a?-s1": 1907, + "a?-t1": 2020, + "a?|": 131, + "a?|b": 132, + "a?|b?|c": 134, + "a?|b?|c?|d": 136, + "a?|b?|c?|d?|e": 138, + "a?|b?|c?|d?|e?|f": 141, + "a?|b?|c?|d?|e?|f?|g": 143, + "a?|b?|c?|d?|e?|f?|g?|h": 145, + "a?|b?|c?|d?|e?|f?|g?|h?|i": 148, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j": 151, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k": 153, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l": 156, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m": 158, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n": 165, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o": 168, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p": 176, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|": 180, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q": 181, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|": 183, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r": 184, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s": 193, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t": 198, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u": 218, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v": 239, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w": 265, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x": 299, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y": 323, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z": 388, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A": 435, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B": 463, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C": 494, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D": 536, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E": 609, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F": 636, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G": 647, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H": 668, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I": 676, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J": 690, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K": 833, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K?|L?|M?|N": 944, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K?|L?|M?|N?|O?|P?|Q?|R?|S?|T?|U?|V": 1019, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K?|L?|M?|N?|O?|P?|Q?|R?|S?|T?|U?|V?|W?|X?|Y": 1172, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K?|L?|M?|N?|O?|P?|Q?|R?|S?|T?|U?|V?|W?|X?|Y?|Z?|aa?|ab": 1374, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K?|L?|M?|N?|O?|P?|Q?|R?|S?|T?|U?|V?|W?|X?|Y?|Z?|aa?|ab?|ac?|ad": 1741, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?": 1568, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?": 1602, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?": 1636, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?": 1391, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?": 1501, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?": 989, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?": 810, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?": 661, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?": 540, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?": 428, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?": 366, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?": 336, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?": 369, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?": 355, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?": 377, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?": 351, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?}": 2105, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?": 361, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?}": 1524, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?": 380, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?}": 1478, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?": 391, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?}": 1483, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?": 342, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?}": 1262, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?": 373, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?}": 958, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?": 385, + "a?|b?|c?|d?|e?|f?|g?|h?|i?}": 886, + "a?|b?|c?|d?|e?|f?|g?|h?|i?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?": 421, + "a?|b?|c?|d?|e?|f?|g?|h?}": 1000, + "a?|b?|c?|d?|e?|f?|g?|h?}*OSO/3=O/3=O": 2035, + "a?|b?|c?|d?|e?|f?|g?|h?}-{a?|b?|c?|d?|e?|f?|g?|h?": 432, + "a?|b?|c?|d?|e?|f?|g?}": 1150, + "a?|b?|c?|d?|e?|f?|g?}-{a?|b?|c?|d?|e?|f?|g?": 446, + "a?|b?|c?|d?|e?|f?}": 834, + "a?|b?|c?|d?|e?|f?}*OC": 2110, + "a?|b?|c?|d?|e?|f?}*OSO/3=O/3=O": 1333, + "a?|b?|c?|d?|e?|f?}-{a?|b?|c?|d?|e?|f?": 442, + "a?|b?|c?|d?|e?}": 791, + "a?|b?|c?|d?|e?}*OC": 2034, + "a?|b?|c?|d?|e?}*OSO/3=O/3=O": 1253, + "a?|b?|c?|d?|e?}-{a?|b?|c?|d?|e?": 478, + "a?|b?|c?|d?}": 1923, + "a?|b?|c?|d?}*OC": 1951, + "a?|b?|c?|d?}*OSO/3=O/3=O": 1349, + "a?|b?|c?|d?}-{a?|b?|c?|d?": 489, + "a?|b?|c?}*OC": 1563, + "a?|b?|c?}*OCC/3=O": 1773, + "a?|b?|c?}*OSO/3=O/3=O": 2030, + "a?|b?|c?}-{a?|b?|c?": 604, + "a?|b?}*OSO/3=O/3=O": 2101, + "a?|b?}-{a?|b?": 996, + "b?-": 237, + "b?-c1": 251, + "b?-c2": 793, + "b?-d1": 1072, + "b?-e1": 910, + "b?-f1": 938, + "b?-g1": 1021, + "b?-h1": 1250, + "b?-i1": 1531, + "b?-j1": 1671, + "c?-": 229, + "c?-d1": 258, + "c?-d2": 1161, + "c?-e1": 880, + "c?-f1": 844, + "c?-g1": 711, + "c?-h1": 649, + "c?-i1": 654, + "c?-j1": 820, + "c?-k1": 720, + "c?-l1": 894, + "c?-m1": 1038, + "c?-n1": 1445, + "c?-o1": 1608, + "c?-p1": 1992, + "c?-q1": 1945, + "c?-r1": 2066, + "d?-": 247, + "d?-e1": 275, + "d?-e2": 1050, + "d?-f1": 961, + "d?-g1": 754, + "d?-h1": 640, + "d?-i1": 788, + "d?-j1": 1001, + "d?-k1": 1360, + "e?-": 276, + "e?-f1": 295, + "e?-f2": 1197, + "e?-g1": 953, + "e?-h1": 817, + "e?-i1": 1305, + "f1-a?|b?|c?|d?|e?}": 1798, + "f?-": 309, + "f?-g1": 363, + "f?-g2": 499, + "f?-h1": 1396, + "f?-i1": 1940, + "g1-a?|b?|c?|d?|e?|f?}": 1672, + "g?-": 329, + "g?-h1": 401, + "g?-h2": 885, + "g?-i1": 1178, + "g?-j1": 1513, + "h?-": 352, + "h?-i1": 409, + "h?-i2": 893, + "h?-j1": 1301, + "i1-a?|b?|c?|d?|e?|f?|g?|h?}": 1961, + "i1-a?|b?|c?|d?|e?}": 2077, + "i?-": 345, + "i?-j1": 415, + "i?-j2": 859, + "i?-k1": 1317, + "i?-l1": 1193, + "j1-a?|b?|c?|d?|e?|f?|g?|h?|i?}": 1905, + "j?-": 405, + "j?-k1": 470, + "j?-k2": 873, + "j?-l1": 1752, + "j?-m1": 1626, + "j?-n1": 2093, + "k?-": 416, + "k?-l1": 496, + "k?-l2": 1116, + "k?-m1": 1888, + "k?-n1": 1780, + "k?-o1": 1124, + "l?-": 450, + "l?-m1": 516, + "l?-m2": 1383, + "l?-n1": 1790, + "l?-o1": 1991, + "l?-p1": 1726, + "l?-q1": 1804, + "m?-": 481, + "m?-n1": 620, + "m?-n2": 950, + "m?-p1": 1686, + "m?-q1": 2021, + "m?-r1": 1948, + "n?-": 590, + "n?-o1": 734, + "n?-o2": 1220, + "n?-q1": 1893, + "o?-": 637, + "o?-p1": 752, + "o?-p2": 1503, + "p?-": 778, + "p?-q1": 952, + "p?-q2": 1433, + "q?-": 843, + "q?-r1": 1026, + "q?-r2": 1993, + "r?-": 963, + "r?-s1": 1138, + "s?-": 1173, + "s?-t1": 1428, + "t?-": 1829 + }, + "definition": "non-special vocabulary token containing literal question mark", + "schema": "bertose_a5_literal_question_mark_ambiguity_v1", + "source_vocabulary": "review_bpe_vocabulary.json", + "training_authorized": false +} diff --git a/releases/2026-10-02/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json b/releases/2026-10-02/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json new file mode 100644 index 0000000000000000000000000000000000000000..b572bd7f979062ce20f91e3adfa0b17d6192f2c4 --- /dev/null +++ b/releases/2026-10-02/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json @@ -0,0 +1,10264 @@ +{ + "merges": [ + [ + "?", + "|" + ], + [ + "1", + "2" + ], + [ + "1", + "-" + ], + [ + "C", + "C" + ], + [ + "-", + "1" + ], + [ + "1-", + "5" + ], + [ + "h", + "-1" + ], + [ + "12", + "2" + ], + [ + "/", + "3" + ], + [ + "=", + "O" + ], + [ + "/3", + "=O" + ], + [ + "a", + "2" + ], + [ + "122", + "h-1" + ], + [ + "*", + "N" + ], + [ + "CC", + "/3=O" + ], + [ + "x", + "x" + ], + [ + "*N", + "CC/3=O" + ], + [ + "a", + "?|" + ], + [ + "a?|", + "b" + ], + [ + "?|", + "c" + ], + [ + "a?|b", + "?|c" + ], + [ + "?|", + "d" + ], + [ + "a?|b?|c", + "?|d" + ], + [ + "?|", + "e" + ], + [ + "a?|b?|c?|d", + "?|e" + ], + [ + "2", + "*NCC/3=O" + ], + [ + "?|", + "f" + ], + [ + "a?|b?|c?|d?|e", + "?|f" + ], + [ + "?|", + "g" + ], + [ + "a?|b?|c?|d?|e?|f", + "?|g" + ], + [ + "?|", + "h" + ], + [ + "a?|b?|c?|d?|e?|f?|g", + "?|h" + ], + [ + "a2", + "122h-1" + ], + [ + "?|", + "i" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h", + "?|i" + ], + [ + "?", + "-" + ], + [ + "?|", + "j" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i", + "?|j" + ], + [ + "?|", + "k" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j", + "?|k" + ], + [ + "1", + "12" + ], + [ + "?|", + "l" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k", + "?|l" + ], + [ + "?|", + "m" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l", + "?|m" + ], + [ + "a2", + "112" + ], + [ + "4", + "-" + ], + [ + "a", + "1" + ], + [ + "*", + "O" + ], + [ + "?", + "}" + ], + [ + "?|", + "n" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m", + "?|n" + ], + [ + "a2112", + "h-1" + ], + [ + "?|", + "o" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n", + "?|o" + ], + [ + "-", + "{" + ], + [ + "?}", + "-{" + ], + [ + "122", + "h" + ], + [ + "a1", + "122h-1" + ], + [ + "CC", + "CC" + ], + [ + "2", + "-" + ], + [ + "?|", + "p" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o", + "?|p" + ], + [ + "a2122h-1", + "b" + ], + [ + "3", + "-" + ], + [ + "b", + "1" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p", + "?|" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|", + "q" + ], + [ + "xx", + "xx" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q", + "?|" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|", + "r" + ], + [ + "c", + "1" + ], + [ + "d", + "1" + ], + [ + "a2122h-1", + "x" + ], + [ + "u", + "2" + ], + [ + "m", + "-1" + ], + [ + "a2112h-1", + "b" + ], + [ + "2", + "1" + ], + [ + "?|", + "s" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r", + "?|s" + ], + [ + "122", + "1" + ], + [ + "6", + "-" + ], + [ + "a1122h-1", + "a" + ], + [ + "?|", + "t" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s", + "?|t" + ], + [ + "O", + "/3=O" + ], + [ + "e", + "1" + ], + [ + "u", + "xxxx" + ], + [ + "*O", + "C" + ], + [ + "h-1", + "x" + ], + [ + "d", + "21" + ], + [ + "a2112h-1", + "x" + ], + [ + "-", + "2" + ], + [ + "d21", + "122h" + ], + [ + "2-", + "6" + ], + [ + "A", + "a" + ], + [ + "CCCC", + "CC" + ], + [ + "f", + "1" + ], + [ + "uxxxx", + "h" + ], + [ + "a", + "1221" + ], + [ + "CCCCCC", + "$" + ], + [ + "a1221", + "m-1" + ], + [ + "(", + "CCCCCC$" + ], + [ + "?|", + "u" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t", + "?|u" + ], + [ + "u2", + "122h" + ], + [ + "Aa", + "d21122h" + ], + [ + "Aad21122h", + "-2" + ], + [ + "a", + "4-" + ], + [ + "a1122h-1", + "x" + ], + [ + "a", + "xxxx" + ], + [ + "5", + "*NCC/3=O" + ], + [ + "a", + "?-" + ], + [ + "4", + ")" + ], + [ + "a4-", + "b1" + ], + [ + "c", + "?-" + ], + [ + "*O", + "CC/3=O" + ], + [ + "axxxx", + "h-1x" + ], + [ + "g", + "1" + ], + [ + "*OC", + "(CCCCCC$" + ], + [ + "h", + "1" + ], + [ + "*OC(CCCCCC$", + "4)" + ], + [ + "b", + "4-" + ], + [ + "b", + "?-" + ], + [ + "?|", + "v" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u", + "?|v" + ], + [ + "i", + "1" + ], + [ + "a?-", + "b1" + ], + [ + "b4-", + "c1" + ], + [ + "112", + "h" + ], + [ + "*O", + "S" + ], + [ + "a1221m-1", + "a" + ], + [ + "a2122h-1", + "a" + ], + [ + "d", + "?-" + ], + [ + "c", + "3-" + ], + [ + "O/3=O", + "/3=O" + ], + [ + "a1122h-1", + "b" + ], + [ + "b?-", + "c1" + ], + [ + "u2", + "112h" + ], + [ + "j", + "1" + ], + [ + "Aad21122h-2", + "a" + ], + [ + "c3-", + "d1" + ], + [ + "a", + "3-" + ], + [ + "*OS", + "O/3=O/3=O" + ], + [ + "c?-", + "d1" + ], + [ + "A", + "-1" + ], + [ + "u", + "1" + ], + [ + "a", + "6-" + ], + [ + "a3-", + "b1" + ], + [ + "k", + "1" + ], + [ + "?|", + "w" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v", + "?|w" + ], + [ + "Aad21122h-2", + "x" + ], + [ + "21", + "1" + ], + [ + "c", + "6-" + ], + [ + "2", + "*N" + ], + [ + "a1221m-1", + "x" + ], + [ + "b", + "3-" + ], + [ + "A", + "U" + ], + [ + "1-", + "?" + ], + [ + "m-1", + "a" + ], + [ + "d?-", + "e1" + ], + [ + "e", + "?-" + ], + [ + "h-1", + "a" + ], + [ + "d", + "2-" + ], + [ + "*O", + "P" + ], + [ + "/3", + "O/3=O" + ], + [ + "a2112h-1", + "a" + ], + [ + "d2-", + "e1" + ], + [ + "*N", + "CC" + ], + [ + "l", + "1" + ], + [ + "a2", + "211" + ], + [ + "u1", + "122h" + ], + [ + "e", + "4-" + ], + [ + "c", + "4-" + ], + [ + "5", + "*NCC" + ], + [ + "5*NCC", + "O/3=O" + ], + [ + "b3-", + "c1" + ], + [ + "[", + "C" + ], + [ + "[C", + "@" + ], + [ + "2", + "2" + ], + [ + "e?-", + "f1" + ], + [ + "1", + "1" + ], + [ + "3", + "|" + ], + [ + "?|", + "x" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w", + "?|x" + ], + [ + "1-", + "4" + ], + [ + "a1", + "1221" + ], + [ + "m", + "1" + ], + [ + "h-1", + "b" + ], + [ + "a2", + "122" + ], + [ + "a2", + "12" + ], + [ + "d", + "4-" + ], + [ + "*OP", + "O" + ], + [ + "e4-", + "f1" + ], + [ + "f", + "?-" + ], + [ + "n", + "1" + ], + [ + "-", + "b1" + ], + [ + "*OC(CCCCCC$4)", + "/3=O" + ], + [ + "C", + "/" + ], + [ + "a2211", + "m-1a" + ], + [ + "h", + "2" + ], + [ + "AU", + "d21122h" + ], + [ + "x", + "h" + ], + [ + "m-1", + "x" + ], + [ + "a", + "1-" + ], + [ + "a2122", + "A-1" + ], + [ + "c4-", + "d1" + ], + [ + "?|", + "y" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x", + "?|y" + ], + [ + "3", + "*OCC/3=O" + ], + [ + "d1", + "122h" + ], + [ + "H", + "]" + ], + [ + "2", + "*OCC/3=O" + ], + [ + "u", + "1221" + ], + [ + "g", + "?-" + ], + [ + "u1221", + "m" + ], + [ + "^", + "X" + ], + [ + "3", + "*OC" + ], + [ + "6", + "*OSO/3=O/3=O" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?" + ], + [ + "4", + "*OCC/3=O" + ], + [ + "o", + "1" + ], + [ + "b", + "6-" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?" + ], + [ + "d", + "3-" + ], + [ + "4", + "|" + ], + [ + "i", + "?-" + ], + [ + "/3", + "C" + ], + [ + "e", + "3-" + ], + [ + "g", + "2" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?" + ], + [ + "h", + "?-" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?" + ], + [ + "*OPO", + "/3O/3=O" + ], + [ + "d", + "2" + ], + [ + "a11221", + "h-1a" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?" + ], + [ + "6", + "*OCC/3=O" + ], + [ + "f?-", + "g1" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?" + ], + [ + "*O", + "CC" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?" + ], + [ + "(", + "C" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?" + ], + [ + "C", + "/3=O" + ], + [ + "[C@", + "@" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?" + ], + [ + "CCCC", + "CCCC" + ], + [ + "?|", + "z" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y", + "?|z" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?" + ], + [ + "^X", + "O" + ], + [ + "O", + ")" + ], + [ + "e3-", + "f1" + ], + [ + "f", + "3-" + ], + [ + "b", + "2-" + ], + [ + "3", + "*OC(CCCCCC$4)" + ], + [ + "uxxxx", + "m" + ], + [ + "a2", + "-b1" + ], + [ + "p", + "1" + ], + [ + "g?-", + "h1" + ], + [ + "c", + "2-" + ], + [ + "6", + "|" + ], + [ + "a6-", + "b1" + ], + [ + "j", + "?-" + ], + [ + "d1122h", + "-2" + ], + [ + "Aa", + "d1122h-2" + ], + [ + "d4-", + "e1" + ], + [ + "h?-", + "i1" + ], + [ + "a1", + "122" + ], + [ + "d3-", + "e1" + ], + [ + "CC", + "N" + ], + [ + "c2-", + "d1" + ], + [ + "O", + "/" + ], + [ + "i?-", + "j1" + ], + [ + "k", + "?-" + ], + [ + "a2122A-1", + "b" + ], + [ + "b2-", + "c1" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?" + ], + [ + "(C", + ")" + ], + [ + "m-1", + "b" + ], + [ + "a11221", + "h-1x" + ], + [ + "~", + "n" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?" + ], + [ + "(", + "O)" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?" + ], + [ + "a2", + "11" + ], + [ + "?|", + "A" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z", + "?|A" + ], + [ + "c", + "2" + ], + [ + "A-1", + "a" + ], + [ + "h", + "2-" + ], + [ + "C/", + "4" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f" + ], + [ + "?}-{a?|b?|c?|d?|e?|f", + "?" + ], + [ + "a?|b?|c?|d?|e?|f", + "?}-{a?|b?|c?|d?|e?|f?" + ], + [ + "h", + "4-" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g", + "?}-{a?|b?|c?|d?|e?|f?|g?" + ], + [ + "2", + "*OC(CCCCCC$4)" + ], + [ + "q", + "1" + ], + [ + "3", + "4" + ], + [ + "l", + "?-" + ], + [ + "a212", + "h-1b" + ], + [ + "x", + "h-1" + ], + [ + ")", + "O" + ], + [ + "*OP", + "^XO" + ], + [ + "d", + "xxxx" + ], + [ + "4", + "*OC(CCCCCC$4)" + ], + [ + "=", + "C" + ], + [ + "g", + "4-" + ], + [ + "=", + "^" + ], + [ + "6", + "*OC(CCCCCC$4)" + ], + [ + "AU", + "dxxxx" + ], + [ + "?|", + "B" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A", + "?|B" + ], + [ + "f3-", + "g1" + ], + [ + "A-1", + "x" + ], + [ + "h4-", + "i1" + ], + [ + "/", + "6" + ], + [ + "/", + "7" + ], + [ + "2", + "*OSO/3=O/3=O" + ], + [ + "j?-", + "k1" + ], + [ + "i", + "4-" + ], + [ + "[C@", + "]" + ], + [ + "a", + "x" + ], + [ + "r", + "1" + ], + [ + "2", + "*OC" + ], + [ + "?}-{", + "a?|b?|c?|d?|e" + ], + [ + "?}-{a?|b?|c?|d?|e", + "?" + ], + [ + "a?|b?|c?|d?|e", + "?}-{a?|b?|c?|d?|e?" + ], + [ + "f", + "4-" + ], + [ + "d", + "6-" + ], + [ + "m", + "?-" + ], + [ + "g", + "2-" + ], + [ + "a", + "5" + ], + [ + "22", + "2" + ], + [ + "a", + "d" + ], + [ + "g4-", + "h1" + ], + [ + "?}-{", + "a?|b?|c?|d" + ], + [ + "?}-{a?|b?|c?|d", + "?" + ], + [ + "a?|b?|c?|d", + "?}-{a?|b?|c?|d?" + ], + [ + "1", + "*N" + ], + [ + "g", + "3-" + ], + [ + "S", + "O/3=O/3=O" + ], + [ + "?|", + "C" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B", + "?|C" + ], + [ + "2*N", + "SO/3=O/3=O" + ], + [ + "k?-", + "l1" + ], + [ + "e", + "2-" + ], + [ + "/", + "4" + ], + [ + "f?-", + "g2" + ], + [ + "/", + "5" + ], + [ + "i4-", + "j1" + ], + [ + "[C@@", + "]" + ], + [ + "}", + "C" + ], + [ + "=^", + "Z" + ], + [ + "CC", + "C" + ], + [ + "h2-", + "i1" + ], + [ + "*OPO", + "*" + ], + [ + "*OPO*", + "/3O/3=O" + ], + [ + "b6-", + "c1" + ], + [ + "e2-", + "f1" + ], + [ + "f4-", + "g1" + ], + [ + "2", + "*OC(CCCCCC$4)/3=O" + ], + [ + "a2211", + "m-1x" + ], + [ + "4", + "*OC" + ], + [ + "AUdxxxx", + "xh" + ], + [ + "l?-", + "m1" + ], + [ + "*OP^XO", + "CCN" + ], + [ + "a5", + "-b1" + ], + [ + "[C@@", + "H]" + ], + [ + "3", + "*OC(CCCCCC$4)/3=O" + ], + [ + "2-", + "5" + ], + [ + "i", + "2-" + ], + [ + "Aad1122h-2", + "x" + ], + [ + "a", + "xx" + ], + [ + "h2", + "122h" + ], + [ + "e4-", + "g1" + ], + [ + "a212", + "h-1x" + ], + [ + "6", + "*OC" + ], + [ + "j", + "4-" + ], + [ + "xh-1", + "u" + ], + [ + "g2-", + "h1" + ], + [ + "a2122A-1", + "x" + ], + [ + "<", + "Q" + ], + [ + "" + ], + [ + "?|", + "D" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C", + "?|D" + ], + [ + "[C@", + "H]" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?" + ], + [ + "*OS", + "i" + ], + [ + "/", + "1" + ], + [ + "f", + "6-" + ], + [ + "g3-", + "h1" + ], + [ + "l", + "4-" + ], + [ + "a212", + "1" + ], + [ + "e", + "2" + ], + [ + "3", + "*OSO/3=O/3=O" + ], + [ + "i2-", + "j1" + ], + [ + "s", + "1" + ], + [ + "34", + "4" + ], + [ + "?|", + "a" + ], + [ + "3-", + "7" + ], + [ + "M", + "I" + ], + [ + "i", + "3-" + ], + [ + "12", + "h" + ], + [ + "8", + "-" + ], + [ + "/6", + ")" + ], + [ + "@", + "S" + ], + [ + "E", + "S" + ], + [ + "L", + "ES" + ], + [ + "@S", + "MI" + ], + [ + "@SMI", + "LES" + ], + [ + "@SMILES", + "@" + ], + [ + "j4-", + "k1" + ], + [ + "c6-", + "h1" + ], + [ + "k", + "2-" + ], + [ + "b", + "2" + ], + [ + "*", + "1" + ], + [ + "AU", + "d1122h" + ], + [ + "a4-", + "c1" + ], + [ + "h", + "3-" + ], + [ + "Aad1122h-2", + "a" + ], + [ + "h2", + "112h" + ], + [ + "=", + "@SMILES@" + ], + [ + "@", + "=@SMILES@" + ], + [ + "C", + "N" + ], + [ + "1221", + "h" + ], + [ + "*O", + "CCCC" + ], + [ + "a", + "122h-1" + ], + [ + "4", + "*OSO/3=O/3=O" + ], + [ + "u1", + "1221h" + ], + [ + "5", + "-" + ], + [ + "*OP^XOCCN", + "/3O/3=O" + ], + [ + "j", + "2" + ], + [ + "4", + "/7" + ], + [ + "*", + "2" + ], + [ + "*O", + "CCCCCCCC" + ], + [ + "l4-", + "m1" + ], + [ + "n", + "?-" + ], + [ + "f", + "2-" + ], + [ + "?}", + "*OSO/3=O/3=O" + ], + [ + "c6-", + "d1" + ], + [ + "*", + "C" + ], + [ + "/3", + "(CCCCCC$" + ], + [ + "/3C", + "/3C" + ], + [ + "a", + "4" + ], + [ + "122h", + "-2" + ], + [ + "j", + "2-" + ], + [ + "C", + "(CCCCCC$" + ], + [ + "4", + "*OC(CCCCCC$4)/3=O" + ], + [ + "?}-{", + "a?|b?|c" + ], + [ + "?}-{a?|b?|c", + "?" + ], + [ + "a?|b?|c", + "?}-{a?|b?|c?" + ], + [ + "(CCCCCC$", + "3" + ], + [ + "4", + "*OPO/3O/3=O" + ], + [ + "c6-", + "g1" + ], + [ + "?|", + "E" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D", + "?|E" + ], + [ + "k", + "4-" + ], + [ + "uxxxx", + "xh" + ], + [ + "a", + "12" + ], + [ + "C", + "/3C/3C" + ], + [ + "4", + "*N" + ], + [ + "[", + "H]" + ], + [ + "f2-", + "g1" + ], + [ + "u2", + "211" + ], + [ + "axxxx", + "m-1x" + ], + [ + "f", + "2" + ], + [ + "m?-", + "n1" + ], + [ + "^", + "R" + ], + [ + "3", + "*OCC" + ], + [ + "/", + "4)" + ], + [ + "a211", + "h-1a" + ], + [ + "*1", + "O" + ], + [ + "h", + "a" + ], + [ + "i", + "2" + ], + [ + "c6-", + "i1" + ], + [ + "h3-", + "i1" + ], + [ + "k2-", + "l1" + ], + [ + "u2211", + "m" + ], + [ + "k", + "2" + ], + [ + "a2112", + "A-1a" + ], + [ + "n", + "2" + ], + [ + "?|", + "F" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E", + "?|F" + ], + [ + "o", + "?-" + ], + [ + "e", + "6-" + ], + [ + "x", + "h-1x" + ], + [ + "d?-", + "h1" + ], + [ + "7", + "-" + ], + [ + "", + "@" + ], + [ + ")", + "C" + ], + [ + "6", + "*N" + ], + [ + "a1122", + "2" + ], + [ + "?|", + "G" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F", + "?|G" + ], + [ + "3", + "}" + ], + [ + "c?-", + "h1" + ], + [ + "d4-", + "h1" + ], + [ + "a2", + "2" + ], + [ + "t", + "1" + ], + [ + "a2", + "1" + ], + [ + "c?-", + "i1" + ], + [ + "j", + "3-" + ], + [ + "j2-", + "k1" + ], + [ + "3|", + "g" + ], + [ + "i3-", + "j1" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?" + ], + [ + "3", + "*N" + ], + [ + "m", + "4-" + ], + [ + "u2", + "122" + ], + [ + "k4-", + "l1" + ], + [ + "O/", + "5" + ], + [ + "?|", + "H" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G", + "?|H" + ], + [ + "ha", + "122h-2" + ], + [ + "/3(CCCCCC$", + "1" + ], + [ + "}C", + "(O)" + ], + [ + "n", + "2-" + ], + [ + "(", + "[H]" + ], + [ + "h2", + "h" + ], + [ + "?|", + "I" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H", + "?|I" + ], + [ + "n1", + "*1O" + ], + [ + "d6-", + "e1" + ], + [ + "u", + "xx" + ], + [ + "CC", + "/4" + ], + [ + "g", + "6-" + ], + [ + "c6-", + "k1" + ], + [ + "u2", + "12h" + ], + [ + "i", + "n" + ], + [ + "l", + "2-" + ], + [ + "C/3=O", + "/3=O" + ], + [ + "a2112", + "m-1a" + ], + [ + "?|", + "J" + ], + [ + "a2", + "22" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I", + "?|J" + ], + [ + "3", + "~n" + ], + [ + "o", + "l" + ], + [ + ")O", + "(" + ], + [ + "3", + "*NCC/3=O" + ], + [ + "{", + "1" + ], + [ + "*", + "F" + ], + [ + "CC/4", + "C/4" + ], + [ + "*OSi", + "CC/4C/4" + ], + [ + "a1122", + "m-1a" + ], + [ + "d", + "h" + ], + [ + "6", + "*OC(CCCCCC$4)/3=O" + ], + [ + "h", + "6-" + ], + [ + "0", + "=O" + ], + [ + "E", + "R" + ], + [ + "a1-", + "d" + ], + [ + "CC", + "^" + ], + [ + "a2", + "222" + ], + [ + "a6-", + "c1" + ], + [ + "(CCCCCC$3", + "/6)" + ], + [ + "f3-", + "g2" + ], + [ + "c?-", + "g1" + ], + [ + "=^Z", + "CCC" + ], + [ + "i", + "6-" + ], + [ + "C/", + "7" + ], + [ + "A-1", + "b" + ], + [ + "?}", + "*OC" + ], + [ + "m", + "3-" + ], + [ + "4", + "~n" + ], + [ + "a3-", + "c1" + ], + [ + "c?-", + "k1" + ], + [ + "2-", + "?" + ], + [ + "xh-1", + "d" + ], + [ + "O/5", + "=O" + ], + [ + "C", + "(" + ], + [ + "C/4", + "C/3=O" + ], + [ + "11", + "h" + ], + [ + "2", + "*OCC" + ], + [ + "ER", + "R" + ], + [ + "ERR", + "O" + ], + [ + "ERRO", + "R" + ], + [ + "n", + "4-" + ], + [ + "ax", + "12" + ], + [ + "/", + "2" + ], + [ + "n?-", + "o1" + ], + [ + "m4-", + "n1" + ], + [ + "a", + "3" + ], + [ + "x", + "2" + ], + [ + "c6-", + "e1" + ], + [ + "22", + "h" + ], + [ + "O/5=O", + "/3O/3=O" + ], + [ + "a1-", + "c" + ], + [ + "?}", + "*OPO/3O/3=O" + ], + [ + "6", + "}" + ], + [ + "3", + "34" + ], + [ + "b4-", + "d1" + ], + [ + "e", + "n" + ], + [ + "A", + "d1" + ], + [ + "g", + "3|g" + ], + [ + "/", + "8" + ], + [ + "b3-", + "c2" + ], + [ + "u2", + "112" + ], + [ + "o?-", + "p1" + ], + [ + "k", + "6-" + ], + [ + "d?-", + "g1" + ], + [ + "A", + "d2" + ], + [ + "CC", + "[C@]" + ], + [ + "6", + "*OPO/3O/3=O" + ], + [ + "c6-", + "f1" + ], + [ + "x", + "1" + ], + [ + "[C@@H]", + "(O)" + ], + [ + "g3|g", + "6" + ], + [ + "k", + "3-" + ], + [ + "(CCCCCC$3/6)", + "N" + ], + [ + "3|", + "c" + ], + [ + "f6-", + "g2" + ], + [ + "([H]", + ")" + ], + [ + "c6-", + "j1" + ], + [ + "{", + "2" + ], + [ + "j3-", + "k1" + ], + [ + "6", + "*OCC" + ], + [ + "122", + "2" + ], + [ + "a211", + "h-1x" + ], + [ + "h2-", + "g3|g6" + ], + [ + "o", + "4-" + ], + [ + "u2122", + "A" + ], + [ + "j", + "6-" + ], + [ + "a122h-1", + "a" + ], + [ + "p", + "?-" + ], + [ + "c3-", + "e1" + ], + [ + "a2121", + "A-1a" + ], + [ + "uxxxx", + "A" + ], + [ + "{", + "3}" + ], + [ + "b3-", + "d1" + ], + [ + "a6-", + "d1" + ], + [ + "l", + "2" + ], + [ + "6", + "=O" + ], + [ + "a12", + "11" + ], + [ + "d?-", + "i1" + ], + [ + "4/7", + ")" + ], + [ + ")O", + "C" + ], + [ + "a?|b?|c?|d?|e", + "?}" + ], + [ + "d4-", + "g1" + ], + [ + "b?-", + "c2" + ], + [ + "3|", + "f" + ], + [ + "1", + "h" + ], + [ + "e6-", + "f1" + ], + [ + "a", + "112" + ], + [ + "a2112", + "A-1x" + ], + [ + "a2122", + "m-1b" + ], + [ + "l", + "3-" + ], + [ + "*OSi", + "C/3C/3C" + ], + [ + "C", + "$" + ], + [ + "/5", + "O/5=O/3O/3=O" + ], + [ + "a11222", + "h-1a" + ], + [ + "C/4", + "C/4C/3=O" + ], + [ + "n4-", + "o1" + ], + [ + "n", + "3-" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?" + ], + [ + ")", + "/3(CCCCCC$1" + ], + [ + "a3", + "344" + ], + [ + "C/", + "5" + ], + [ + "n1*1O", + "(CCCCCC$3/6)N" + ], + [ + "a212", + "h-1a" + ], + [ + "a6-", + "l1" + ], + [ + "e?-", + "h1" + ], + [ + "/4)", + "*2" + ], + [ + "l2-", + "m1" + ], + [ + "c?-", + "j1" + ], + [ + "c4-", + "e1" + ], + [ + "a2122A-1", + "a" + ], + [ + "F", + "/4" + ], + [ + "a2112", + "m-1x" + ], + [ + "a1", + "112" + ], + [ + "CCCC", + "CCCCCC" + ], + [ + "*OP^XO", + "P" + ], + [ + "m", + "2-" + ], + [ + "/1", + "0=O" + ], + [ + "ha122h-2", + "b" + ], + [ + "?|", + "K" + ], + [ + "a22", + "21" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J", + "?|K" + ], + [ + "a?|b?|c?|d?|e?|f", + "?}" + ], + [ + "a1-", + "b" + ], + [ + "m3-", + "n1" + ], + [ + "*", + "S" + ], + [ + "u", + "d" + ], + [ + "6", + ")" + ], + [ + "i", + "c" + ], + [ + "5", + "*N" + ], + [ + "d4-", + "f1" + ], + [ + "q", + "?-" + ], + [ + "c?-", + "f1" + ], + [ + "a4", + "334" + ], + [ + "6", + "*OP^XOCCN/3O/3=O" + ], + [ + "AUdxxxx", + "h" + ], + [ + "*OSiCC/4C/4", + "C/3C/3C" + ], + [ + "4", + "*OCC" + ], + [ + "ax", + "11" + ], + [ + "^", + "S" + ], + [ + "a222", + "h-1b" + ], + [ + "h", + "xh" + ], + [ + "k3-", + "l1" + ], + [ + "o4-", + "p1" + ], + [ + "1-", + "a" + ], + [ + "d4-", + "i1" + ], + [ + "O/", + "6=O" + ], + [ + "i?-", + "j2" + ], + [ + "C/5", + "O/3=O" + ], + [ + "i", + "d" + ], + [ + "222", + "h" + ], + [ + "3", + "~" + ], + [ + "CC", + "$" + ], + [ + "l3-", + "m1" + ], + [ + "C", + "^R" + ], + [ + "4", + "~" + ], + [ + "4|", + "d" + ], + [ + "1-", + "a?|b?|c?|d?|e?}" + ], + [ + "?}", + "*OCC/3=O" + ], + [ + "r", + "o" + ], + [ + "n", + "2-6" + ], + [ + "j?-", + "k2" + ], + [ + "o", + "2" + ], + [ + "F", + "/3=O" + ], + [ + "=O", + ")" + ], + [ + "3", + "*OCCCCCCCC" + ], + [ + "1-", + "c" + ], + [ + "a2121", + "A-1x" + ], + [ + "c?-", + "e1" + ], + [ + "axx", + "2" + ], + [ + "*OP^XOP", + "^XO" + ], + [ + "CCN", + "/5O/5=O/3O/3=O" + ], + [ + "a2211", + "m-1b" + ], + [ + "g?-", + "h2" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i", + "?}" + ], + [ + "O", + "C" + ], + [ + "uxx", + "xh" + ], + [ + "=^", + "E" + ], + [ + "h", + "4" + ], + [ + "(CCCCCC$", + "4/7)" + ], + [ + "C/", + "1" + ], + [ + "h?-", + "i2" + ], + [ + "c?-", + "l1" + ], + [ + "o", + "3-" + ], + [ + "l", + "6-" + ], + [ + "1-", + "d" + ], + [ + "c6-", + "l1" + ], + [ + "3", + "*C" + ], + [ + "@", + "a" + ], + [ + "a6-", + "j1" + ], + [ + "m", + "6-" + ], + [ + "5", + "n2-6" + ], + [ + "5n2-6", + "n1*1O(CCCCCC$3/6)N" + ], + [ + "{", + "5" + ], + [ + "b6-", + "c2" + ], + [ + "p", + "4-" + ], + [ + "/", + "9" + ], + [ + "a1-", + "e" + ], + [ + "b?-", + "e1" + ], + [ + "Ad2", + "d" + ], + [ + "a", + "n" + ], + [ + "u", + "x" + ], + [ + "a4", + "344" + ], + [ + "(CCCCCC$4/7)", + "C/3=O/3=O" + ], + [ + "a1-", + "b1" + ], + [ + "v", + "1" + ], + [ + "=^ZCCC", + "=^ZCCC" + ], + [ + "a112", + "1" + ], + [ + "2", + "*OCCCCCCCC" + ], + [ + "[C@H]", + "(O)" + ], + [ + "n3-", + "o1" + ], + [ + "4", + "*NCC/3=O" + ], + [ + "@=@SMILES@", + "C" + ], + [ + "a2112", + "m-1b" + ], + [ + "CCCCCC", + "CC/3=O" + ], + [ + "d3-", + "f1" + ], + [ + "1-", + "a?|b?|c?|d?|e?|f?}" + ], + [ + "=", + "CC" + ], + [ + "-2", + "x" + ], + [ + "Ad1", + "d" + ], + [ + "ERROR", + "1-" + ], + [ + "8", + "-b1" + ], + [ + "h", + "y" + ], + [ + "CC^", + "Z" + ], + [ + "a1-", + "b2" + ], + [ + "a2", + "-" + ], + [ + "b?-", + "f1" + ], + [ + "?|", + "L" + ], + [ + "?|", + "M" + ], + [ + "?|", + "N" + ], + [ + "?|L", + "?|M" + ], + [ + "?|L?|M", + "?|N" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K", + "?|L?|M?|N" + ], + [ + "ad", + "222" + ], + [ + "@=@SMILES@", + "O" + ], + [ + "a6-", + "f1" + ], + [ + "m", + "2" + ], + [ + "*OS", + "(CCCCCC$4/7)C/3=O/3=O" + ], + [ + "m?-", + "n2" + ], + [ + "a6-", + "e1" + ], + [ + "p?-", + "q1" + ], + [ + "e?-", + "g1" + ], + [ + "a6-", + "k1" + ], + [ + "c", + "5-" + ], + [ + "1-c", + "3|c" + ], + [ + "o3-", + "p1" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j", + "?}" + ], + [ + "a?-", + "d1" + ], + [ + "4/7", + ")OC" + ], + [ + "d?-", + "f1" + ], + [ + "3", + "*OCCCC" + ], + [ + "r", + "?-" + ], + [ + "CC", + "[C@@]" + ], + [ + "CCCC", + "CC/3=O" + ], + [ + "b6-", + "f1" + ], + [ + "1", + "*NCC" + ], + [ + "C", + "/3O/3=O" + ], + [ + "3|", + "i" + ], + [ + "u2112", + "m" + ], + [ + "21", + "h" + ], + [ + "a?-", + "c1" + ], + [ + "*OP^XOP^XO", + "CCN/5O/5=O/3O/3=O" + ], + [ + "3|", + "b" + ], + [ + "*", + "/2" + ], + [ + "p", + "3-" + ], + [ + "u2", + "11h" + ], + [ + "(", + "{2" + ], + [ + "a?-", + "e1" + ], + [ + "C/7", + "C/7" + ], + [ + "b4-", + "e1" + ], + [ + "a122h-1", + "x" + ], + [ + "g", + "en" + ], + [ + "5", + ")" + ], + [ + "f6-", + "g1" + ], + [ + "C/7C/7", + "C/3O/3=O" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?" + ], + [ + "C", + "l" + ], + [ + "2*N", + "CCC" + ], + [ + "a11222", + "h-1x" + ], + [ + "1-c3|c", + "6" + ], + [ + "?}-{", + "a?|b" + ], + [ + "?}-{a?|b", + "?" + ], + [ + "a?|b", + "?}-{a?|b?" + ], + [ + "a", + "1222" + ], + [ + "C", + "=^Z" + ], + [ + "f", + "3|f" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h", + "?}" + ], + [ + "d?-", + "j1" + ], + [ + "2", + "*OCCCC" + ], + [ + "?|", + "O" + ], + [ + "?|", + "P" + ], + [ + "?|", + "Q" + ], + [ + "?|", + "R" + ], + [ + "?|", + "S" + ], + [ + "?|", + "T" + ], + [ + "?|", + "U" + ], + [ + "?|", + "V" + ], + [ + "?|O", + "?|P" + ], + [ + "?|O?|P", + "?|Q" + ], + [ + "?|O?|P?|Q", + "?|R" + ], + [ + "?|O?|P?|Q?|R", + "?|S" + ], + [ + "?|O?|P?|Q?|R?|S", + "?|T" + ], + [ + "?|O?|P?|Q?|R?|S?|T", + "?|U" + ], + [ + "?|O?|P?|Q?|R?|S?|T?|U", + "?|V" + ], + [ + "a2", + "d" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K?|L?|M?|N", + "?|O?|P?|Q?|R?|S?|T?|U?|V" + ], + [ + "q", + "2" + ], + [ + "b?-", + "g1" + ], + [ + "a22", + "12" + ], + [ + "2*N", + "C" + ], + [ + "4|", + "i" + ], + [ + "CN", + "(CCCCCC$" + ], + [ + "q?-", + "r1" + ], + [ + "CC", + "O" + ], + [ + "4)", + "/3=O" + ], + [ + "axx", + "1" + ], + [ + "o", + "2-" + ], + [ + "1", + "m" + ], + [ + "3|", + "j" + ], + [ + "*OS", + "C/3=O/3=O" + ], + [ + "1*N", + "C(CCCCCC$" + ], + [ + "f3|f", + "6" + ], + [ + "b6-", + "d1" + ], + [ + "[C@@]", + "3" + ], + [ + "c?-", + "m1" + ], + [ + "m2-", + "n1" + ], + [ + "ad", + "122" + ], + [ + "i3-", + "j2" + ], + [ + "122", + "m" + ], + [ + "*", + "I" + ], + [ + "4|d", + "6|" + ], + [ + "/3C", + "O/6=O" + ], + [ + "/3CO/6=O", + "/3C" + ], + [ + "a211", + "1" + ], + [ + "h", + "U" + ], + [ + "3-", + "6" + ], + [ + "d?-", + "e2" + ], + [ + "g2-", + "f3|f6" + ], + [ + "/10=O", + "(" + ], + [ + "a1122", + "A-1b" + ], + [ + "a6-", + "i1" + ], + [ + "a?-", + "f1" + ], + [ + "ERROR1-", + "ERROR" + ], + [ + "n", + "1-" + ], + [ + "6", + "~n" + ], + [ + "*OPO", + "CCN" + ], + [ + "3|", + "k" + ], + [ + "3|", + "h" + ], + [ + "e", + "t" + ], + [ + "-2", + "b" + ], + [ + "e", + "4|" + ], + [ + "O/", + "4" + ], + [ + " ", + "@" + ], + [ + "p", + "2-" + ], + [ + "3|", + "d" + ], + [ + "C", + "^S" + ], + [ + "CC", + "=C" + ], + [ + "ax11", + "xh-1u" + ], + [ + "b?-", + "d1" + ], + [ + "4|", + "b" + ], + [ + "4|", + "h" + ], + [ + "4", + "}" + ], + [ + "5", + "*OC(CCCCCC$4)/3=O" + ], + [ + "ax12", + "xh-1u" + ], + [ + "?", + "*OSO/3=O/3=O" + ], + [ + "4|", + "c" + ], + [ + "(C)", + "C" + ], + [ + "3|", + "e" + ], + [ + "p4-", + "q1" + ], + [ + "*OP^XOCCN", + "C/7C/7C/3O/3=O" + ], + [ + "-2", + "a" + ], + [ + "f", + "4|" + ], + [ + "q", + "4-" + ], + [ + "u2112", + "A" + ], + [ + "C", + "=C" + ], + [ + "/7", + ")O(" + ], + [ + "{3}", + "[C@@H](O)" + ], + [ + "c4-", + "f1" + ], + [ + "xxxx", + "h" + ], + [ + "*OC(CCCCCC$", + "4/7)OC" + ], + [ + "F", + "F" + ], + [ + "1-", + "b" + ], + [ + "5", + "*OC(CCCCCC$4)" + ], + [ + "c4-", + "h1" + ], + [ + "a2122", + "m-1x" + ], + [ + "/3(CCCCCC$1", + "0" + ], + [ + "/3(CCCCCC$10", + ")/3(CCCCCC$1" + ], + [ + "p3-", + "q1" + ], + [ + "a1", + "11" + ], + [ + "C", + "^X" + ], + [ + "ha122h-2", + "x" + ], + [ + "e", + "E" + ], + [ + "@a", + "c" + ], + [ + ")/3(CCCCCC$1", + "4)" + ], + [ + "*OSiCC/4C/4", + "C" + ], + [ + "*OSiCC/4C/4C", + "/3(CCCCCC$" + ], + [ + "*OSiCC/4C/4C/3(CCCCCC$", + "8" + ], + [ + "*OSiCC/4C/4C/3(CCCCCC$8", + ")/3(CCCCCC$14)" + ], + [ + "b6-", + "e1" + ], + [ + "a6-", + "m1" + ], + [ + "a2222", + "h-1b" + ], + [ + "a?-", + "l1" + ], + [ + "k?-", + "l2" + ], + [ + "@ac", + "id" + ], + [ + "x", + "m-1" + ], + [ + "x", + "y" + ], + [ + "1222", + "h" + ], + [ + "ic", + "@acid" + ], + [ + "d3-", + "e2" + ], + [ + "h", + "xxxxh" + ], + [ + "k?-", + "o1" + ], + [ + "gen", + "in" + ], + [ + "q", + "3-" + ], + [ + "CC^", + "E" + ], + [ + "a1221m-1", + "b" + ], + [ + "C", + "=O" + ], + [ + "c5-", + "d1" + ], + [ + "d", + "x" + ], + [ + "/3(CCCCCC$10)/3(CCCCCC$1", + "6)" + ], + [ + "2", + "*F" + ], + [ + "axx", + "xh-1x" + ], + [ + "E", + "E" + ], + [ + "g6-", + "h1" + ], + [ + "hy", + "d" + ], + [ + "r?-", + "s1" + ], + [ + "axxxx", + "xh-1x" + ], + [ + "O/", + "2" + ], + [ + "b6-", + "g1" + ], + [ + "F/4", + "F/4" + ], + [ + "a2222", + "h-1x" + ], + [ + "hyd", + "ro" + ], + [ + "a1122", + "m-1x" + ], + [ + "CCCC", + "C$" + ], + [ + "S", + "(CCCCCC$" + ], + [ + "a3344", + "h-1a" + ], + [ + "}C", + "O)" + ], + [ + "a?|b?|c?|d?|e?|f?|g", + "?}" + ], + [ + "i4-", + "k1" + ], + [ + "B", + "r" + ], + [ + "ad222", + "m-1b" + ], + [ + "u2", + "12" + ], + [ + "z", + "z" + ], + [ + "a211", + "h-1b" + ], + [ + "3|c", + "3|d" + ], + [ + "p", + "2" + ], + [ + "6", + "~" + ], + [ + "5", + "*OCC/3=O" + ], + [ + "c?-", + "d2" + ], + [ + "3|b", + "3|c3|d" + ], + [ + "o", + "n" + ], + [ + "a6-", + "n1" + ], + [ + "a6-", + "o1" + ], + [ + "=O", + "/5" + ], + [ + "?|", + "W" + ], + [ + "?|", + "X" + ], + [ + "?|", + "Y" + ], + [ + "?|W", + "?|X" + ], + [ + "?|W?|X", + "?|Y" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K?|L?|M?|N?|O?|P?|Q?|R?|S?|T?|U?|V", + "?|W?|X?|Y" + ], + [ + "s", + "?-" + ], + [ + "3|b3|c3|d", + "3|e" + ], + [ + "CCCCCCCCCC", + "C/5O/3=O" + ], + [ + "4|", + "j" + ], + [ + "6|", + "h" + ], + [ + "g?-", + "i1" + ], + [ + "6|", + "c" + ], + [ + "6|", + "d" + ], + [ + "*C", + "l" + ], + [ + "g4-", + "i1" + ], + [ + "*", + "/3CO/6=O/3C" + ], + [ + "h6-", + "i1" + ], + [ + "6|", + "b" + ], + [ + "u", + "12" + ], + [ + "3|b3|c3|d3|e", + "3|f" + ], + [ + "=C", + "1" + ], + [ + "F/4F/4", + "F/3=O" + ], + [ + "h4", + "h" + ], + [ + "6|", + "i" + ], + [ + "a", + "6|b" + ], + [ + "i?-", + "l1" + ], + [ + "h4-", + "j1" + ], + [ + "r", + "4-" + ], + [ + "*", + "Br" + ], + [ + "e?-", + "f2" + ], + [ + "d", + "i" + ], + [ + "xm-1", + "u" + ], + [ + "c4-", + "i1" + ], + [ + "f4-", + "h1" + ], + [ + "2", + "*OPO/3O/3=O" + ], + [ + "w", + "1" + ], + [ + "k", + "1-" + ], + [ + "e", + "6|" + ], + [ + "a2122", + "m-1a" + ], + [ + "3|b3|c3|d3|e3|f", + "3|g" + ], + [ + "=O", + "/3C" + ], + [ + "q", + "2-" + ], + [ + "2", + "(C)" + ], + [ + "2", + "C" + ], + [ + "6|", + "g" + ], + [ + "f", + "6|g" + ], + [ + "u2122", + "m" + ], + [ + "hydro", + "xy" + ], + [ + "/4)", + "CN" + ], + [ + "3|", + "o" + ], + [ + "c4-", + "k1" + ], + [ + "d", + "22h" + ], + [ + "n?-", + "o2" + ], + [ + "*OPOCCN", + "/3O/3=O" + ], + [ + "4", + "/8" + ], + [ + "a1", + "1" + ], + [ + "j", + "1-" + ], + [ + "3|b3|c3|d3|e3|f3|g", + "3|h" + ], + [ + "CCCCCCCC", + "C/3=O" + ], + [ + "d6-", + "f1" + ], + [ + "/2", + "=O" + ], + [ + "a2112", + "A-1b" + ], + [ + "22", + "h-1b" + ], + [ + "j3-", + "k2" + ], + [ + "}", + "[C@@H](O)" + ], + [ + "a?-", + "j1" + ], + [ + "d6-", + "h1" + ], + [ + "[C@H]", + "1" + ], + [ + "a122h-1", + "b" + ], + [ + "7", + "-b1" + ], + [ + "g6-", + "i1" + ], + [ + "a1", + "x2" + ], + [ + "3|b3|c3|d3|e3|f3|g3|h", + "3|i" + ], + [ + "3|", + "l" + ], + [ + "a1", + "*OPO*/3O/3=O" + ], + [ + "k6-", + "o1" + ], + [ + "6|", + "j" + ], + [ + "a1-d", + "3~n" + ], + [ + "q3-", + "r1" + ], + [ + "3|", + "n" + ], + [ + "c", + "7-" + ], + [ + "a2", + "8-b1" + ], + [ + "b?-", + "h1" + ], + [ + "6", + "*OCCCC" + ], + [ + "d6-", + "g1" + ], + [ + "a?|b?|c?|d?|e", + "?}*OSO/3=O/3=O" + ], + [ + "u2", + "2" + ], + [ + "a21", + "EE" + ], + [ + "c", + "c" + ], + [ + "e", + "r" + ], + [ + "u", + "4" + ], + [ + "4", + "*OP^XOP^XOCCN/5O/5=O/3O/3=O" + ], + [ + "b4-", + "f1" + ], + [ + "g3-", + "h2" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k", + "?}" + ], + [ + "a6-", + "r1" + ], + [ + "b2-", + "d1" + ], + [ + "e3-", + "g1" + ], + [ + "O/4", + "=O/3C" + ], + [ + "a?-", + "b2" + ], + [ + "dx", + "dh" + ], + [ + "h", + "dxdh" + ], + [ + "{3}[C@@H](O)", + "CC[C@]" + ], + [ + "4", + "*OCCCC" + ], + [ + "=^Z", + "CCCCCC/3=O" + ], + [ + "/7)O(", + "/6)" + ], + [ + "a21", + "eE" + ], + [ + "P", + "O" + ], + [ + "O/2", + "=O" + ], + [ + "a6-", + "g1" + ], + [ + "ax12", + "xh-1d" + ], + [ + "d", + "d1" + ], + [ + "d", + "7-" + ], + [ + "u", + "122h" + ], + [ + "a", + "7-b1" + ], + [ + "a", + "8-" + ], + [ + "m3-", + "n2" + ], + [ + "ad122", + "m-1b" + ], + [ + "o", + "3|o" + ], + [ + "b", + "5-" + ], + [ + "Cl", + "/3=O" + ], + [ + "c4-", + "g1" + ], + [ + "1", + "A" + ], + [ + "d", + "d2" + ], + [ + "/10=O(", + "/4)*2" + ], + [ + "3|", + "m" + ], + [ + "C", + "O/4=O/3C" + ], + [ + "axxxx", + "A-1x" + ], + [ + "a1112", + "h-1b" + ], + [ + "3*OCC", + "=C" + ], + [ + "o3|o", + "6" + ], + [ + "p2-", + "o3|o6" + ], + [ + "O/", + "7" + ], + [ + "h?-", + "j1" + ], + [ + "i", + "1-" + ], + [ + "q4-", + "r1" + ], + [ + "CC=C", + "4" + ], + [ + "e?-", + "i1" + ], + [ + "A", + "" + ], + [ + "a111", + "1" + ], + [ + "a2d", + "12" + ], + [ + "a5", + "-" + ], + [ + "a4334", + "h-1x" + ], + [ + "ERROR1-ERROR", + "2" + ], + [ + "[C@@]", + "(C)" + ], + [ + "a1-", + "f" + ], + [ + "c6-", + "m1" + ], + [ + "2", + "/5" + ], + [ + "a", + "b" + ], + [ + "i?-", + "k1" + ], + [ + "a?-", + "k1" + ], + [ + "4/8", + ")O(" + ], + [ + "d1", + "1h" + ], + [ + "h", + "222h" + ], + [ + "/7", + "=O/5" + ], + [ + "a6-", + "h1" + ], + [ + "[C@]", + "5" + ], + [ + "$", + "4)" + ], + [ + "*OC(CCCCCC$", + "4/8)O(" + ], + [ + "6*OC(CCCCCC$4)", + "/3(CCCCCC$10)/3(CCCCCC$16)" + ], + [ + "6|", + "k" + ], + [ + "u2", + "1" + ], + [ + "4", + "/5" + ], + [ + "c3-", + "d2" + ], + [ + "CC", + "(C)" + ], + [ + "a?|b?|c?|d?|e?|f", + "?}*OSO/3=O/3=O" + ], + [ + "r", + "2-" + ], + [ + "d2", + "|" + ], + [ + "([H]", + ")C" + ], + [ + "344", + "h" + ], + [ + "h1", + "122h" + ], + [ + "*OC(CCCCCC$4/8)O(", + "/7)O(/6)" + ], + [ + "*OC(CCCCCC$4/8)O(/7)O(/6)", + "O/3=O" + ], + [ + "2", + ")" + ], + [ + "a?-", + "g1" + ], + [ + "n2-", + "8" + ], + [ + "e3-", + "f2" + ], + [ + "*", + "(CCCCCC$" + ], + [ + "{", + "7" + ], + [ + "a21", + "FF" + ], + [ + "a2221", + "m-1a" + ], + [ + "a?|b?|c?|d", + "?}*OSO/3=O/3=O" + ], + [ + "3|b3|c3|d3|e3|f3|g3|h3|i", + "3|j" + ], + [ + "a1-", + "d2" + ], + [ + "a1-c", + "3~n" + ], + [ + "a1-d", + "4~n" + ], + [ + "6", + "*S" + ], + [ + "3", + ")" + ], + [ + "dd1", + "dh" + ], + [ + "(", + "N" + ], + [ + "a12", + "12" + ], + [ + "i6-", + "j1" + ], + [ + "d?-", + "k1" + ], + [ + "dd2", + "dh" + ], + [ + "l", + "1-" + ], + [ + "2", + "*O" + ], + [ + "c", + "8-" + ], + [ + "r", + "2" + ], + [ + "(", + "CC" + ], + [ + "Aa", + "d2" + ], + [ + "m4-", + "o1" + ], + [ + "}C(O)", + "=O)" + ], + [ + "?|", + "Z" + ], + [ + "?|Z", + "?|a" + ], + [ + "?|Z?|a", + "a?|" + ], + [ + "?|Z?|aa?|", + "ab" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K?|L?|M?|N?|O?|P?|Q?|R?|S?|T?|U?|V?|W?|X?|Y", + "?|Z?|aa?|ab" + ], + [ + "h", + "8-" + ], + [ + "3|", + "p" + ], + [ + "[C@H](O)", + "C" + ], + [ + "a4-", + "d1" + ], + [ + "d", + "22" + ], + [ + "h8-", + "i2" + ], + [ + "1", + "*OC" + ], + [ + "^XO", + "*/3CO/6=O/3C" + ], + [ + "l?-", + "m2" + ], + [ + "r4-", + "s1" + ], + [ + "A", + "2" + ], + [ + "Q", + "Q" + ], + [ + "d", + "1-c3|c6" + ], + [ + "r", + "3-" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?" + ], + [ + "c4-", + "j1" + ], + [ + ")C", + "l" + ], + [ + "7", + "*N" + ], + [ + "C/1", + "0=O" + ], + [ + "f?-", + "h1" + ], + [ + "1", + "*OP^XOCCNC/7C/7C/3O/3=O" + ], + [ + "C(CCCCCC$", + "4)/3=O" + ], + [ + "3*OC", + "^R" + ], + [ + "9", + "*OCC/3=O" + ], + [ + "[C@]", + "3" + ], + [ + "8", + "*N" + ], + [ + "n", + "6-" + ], + [ + "g6-", + "j1" + ], + [ + "i6-", + "l1" + ], + [ + "3", + "*OPO/3O/3=O" + ], + [ + "s", + "t" + ], + [ + "b", + "3" + ], + [ + "s", + "2-" + ], + [ + "u1", + "1222h" + ], + [ + "3", + "*F" + ], + [ + "4|", + "k" + ], + [ + "ad", + "22h-1b" + ], + [ + "u1", + "122m" + ], + [ + "2*OCC", + "C/4C/4C/3=O" + ], + [ + "a?-", + "m1" + ], + [ + "f6-", + "h1" + ], + [ + "a", + "8-b1" + ], + [ + "a1", + "x1" + ], + [ + "a?-", + "i1" + ], + [ + "({2", + "8" + ], + [ + "3", + "*OSiC/3C/3C" + ], + [ + ",", + "2" + ], + [ + "7", + "*NCC/3=O" + ], + [ + "a?-", + "n1" + ], + [ + "axx1", + "xh-1u" + ], + [ + "CCCCCCCC", + "CC/3=O" + ], + [ + "s?-", + "t1" + ], + [ + "3", + "*NCC" + ], + [ + "[C@]", + "1" + ], + [ + "CCCCCCCC", + "CCCC" + ], + [ + "b", + "1-b" + ], + [ + "p?-", + "q2" + ], + [ + ")O", + "C/3=O" + ], + [ + "4", + "(C)" + ], + [ + "6*OCC", + "C/4C/4C/3=O" + ], + [ + "CN(CCCCCC$", + "5" + ], + [ + "C", + "1" + ], + [ + "1-a", + "4|" + ], + [ + "2*N", + "CC" + ], + [ + "4*N", + "C=O" + ], + [ + "2*NC", + "O" + ], + [ + "3|b3|c3|d3|e3|f3|g3|h3|i3|j", + "3|k" + ], + [ + "3", + "*O" + ], + [ + "c?-", + "n1" + ], + [ + "n2-", + "o1" + ], + [ + "x", + "m" + ], + [ + "4|", + "g" + ], + [ + "uxx", + "2" + ], + [ + "x", + "A-1" + ], + [ + "e4|", + "e6|" + ], + [ + "a2", + "|" + ], + [ + "1-a4|", + "a6|b" + ], + [ + "1-a4|a6|b", + "4|b" + ], + [ + "1-a4|a6|b4|b", + "6|c" + ], + [ + "1-a4|a6|b4|b6|c", + "4|c" + ], + [ + "1-a4|a6|b4|b6|c4|c", + "6|d" + ], + [ + "1-a4|a6|b4|b6|c4|c6|d", + "4|d6|" + ], + [ + "1-a4|a6|b4|b6|c4|c6|d4|d6|", + "e4|e6|" + ], + [ + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|", + "f4|" + ], + [ + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|", + "f6|g" + ], + [ + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g", + "4|g" + ], + [ + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g", + "6|h" + ], + [ + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h", + "4|h" + ], + [ + "*/2", + "C" + ], + [ + "u212", + "1A" + ], + [ + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h", + "6|i" + ], + [ + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h6|i", + "4|i" + ], + [ + "j6-", + "k2" + ], + [ + "(", + "$" + ], + [ + "1-d", + "4|d6|" + ], + [ + "i6-", + "j2" + ], + [ + "CCCCCCCC", + "CCCCCC" + ], + [ + "t", + "2-" + ], + [ + "(", + "OC" + ], + [ + "a1211", + "h-1x" + ], + [ + "a6-", + "p1" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m", + "?}" + ], + [ + "a4344", + "h-1x" + ], + [ + "a1221", + "h-1a" + ], + [ + "=^E", + "C(CCCCCC$" + ], + [ + "a1112", + "h-1x" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l", + "?}" + ], + [ + "c8-", + "d2" + ], + [ + "(", + "O" + ], + [ + "3|p", + "6" + ], + [ + "p", + "3|p6" + ], + [ + "q2-", + "p3|p6" + ], + [ + "d1", + "1" + ], + [ + "y", + "c" + ], + [ + "a1122", + "A-1x" + ], + [ + "n", + "3|n" + ], + [ + "@=@SMILES@", + "CC" + ], + [ + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h6|i4|i", + "6|j" + ], + [ + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h6|i4|i6|j", + "4|j" + ], + [ + "a1211", + "h-1b" + ], + [ + "h6-", + "j1" + ], + [ + "u2", + "22h" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?" + ], + [ + "d2|", + "e2" + ], + [ + "o?-", + "p2" + ], + [ + "N", + "CC$" + ], + [ + "c2", + "|" + ], + [ + "l4-", + "n1" + ], + [ + "=", + "{5" + ], + [ + "n3|n", + "6" + ], + [ + "o2-", + "n3|n6" + ], + [ + "(", + "CCCC" + ], + [ + "=", + "N" + ], + [ + "[C@@H]", + "1" + ], + [ + "g?-", + "j1" + ], + [ + "r", + "i" + ], + [ + "CC^E", + "CC^Z" + ], + [ + "b2", + "|" + ], + [ + "b5-", + "c1" + ], + [ + "3", + "*OSiCC/4C/4C/3C/3C" + ], + [ + "C=^Z", + "CCCCCCCCC/3=O" + ], + [ + "n2", + "*1O" + ], + [ + "O/2=O", + "/2=O" + ], + [ + "/3", + "O" + ], + [ + "CCCCCCCCCC", + "C/3=O" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n", + "?}" + ], + [ + "6", + "*OSiCC/4C/4C/3(CCCCCC$8)/3(CCCCCC$14)" + ], + [ + "a2|", + "b2|" + ], + [ + "a2|b2|", + "c2|" + ], + [ + "axx2", + "xh-1d" + ], + [ + "axx2", + "xh-1u" + ], + [ + "*O", + "*/2C" + ], + [ + "b?-", + "i1" + ], + [ + "r3-", + "s1" + ], + [ + "A", + "1" + ], + [ + "=^ZCCC", + "=^ZCCCCCC/3=O" + ], + [ + "a2|b2|c2|", + "d2|e2" + ], + [ + "e6-", + "g1" + ], + [ + "j6-", + "k1" + ], + [ + "o4-", + "q1" + ], + [ + "a", + "d2" + ], + [ + "C(", + "CCCC" + ], + [ + "2", + "*OSiC/3C/3C" + ], + [ + "6", + "/9" + ], + [ + "u", + "112" + ], + [ + "/4)CN", + "*2" + ], + [ + "6", + "n2-8" + ], + [ + "6n2-8", + "n1*1O(CCCCCC$3/6)N" + ], + [ + "m", + "1-" + ], + [ + "m6-", + "n2" + ], + [ + "6", + "*F" + ], + [ + "[C@@]", + "2" + ], + [ + "CCCCCC", + "C/3=O" + ], + [ + "=", + "^X" + ], + [ + "=O", + "/3=O" + ], + [ + "hU", + "122h" + ], + [ + "/", + "11" + ], + [ + "s", + "4-" + ], + [ + "2", + "*C" + ], + [ + "c2-", + "e1" + ], + [ + "xA-1", + "u" + ], + [ + "3*OC^R", + "CO/4=O/3C" + ], + [ + "a?-", + "h1" + ], + [ + "(C)", + "CC" + ], + [ + "a?|b?|c", + "?}*OC" + ], + [ + "6", + "*I" + ], + [ + "6", + "*O" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?" + ], + [ + "xx", + "xh" + ], + [ + "2(C)", + "[C@@]3" + ], + [ + "n4-", + "p1" + ], + [ + "h3-", + "i2" + ], + [ + "ic", + "~" + ], + [ + "y", + "1" + ], + [ + "a222", + "h-1x" + ], + [ + "e", + "7-" + ], + [ + "h", + "1-" + ], + [ + "11", + "/1" + ], + [ + "3*OCC", + "C^X" + ], + [ + "4", + "*F" + ], + [ + "}C(O)", + "=C" + ], + [ + "xh", + "-2x" + ], + [ + "6", + "*OSiCC/4C/4C/3C/3C" + ], + [ + "k4-", + "m1" + ], + [ + "{1", + "6}" + ], + [ + "7", + "*OCC/3=O" + ], + [ + "6", + "*NCC" + ], + [ + "O", + "($" + ], + [ + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h6|i4|i6|j4|j", + "6|k" + ], + [ + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h6|i4|i6|j4|j6|k", + "4|k" + ], + [ + "334", + "h" + ], + [ + "CC^Z", + "CC^Z" + ], + [ + "k", + "3|k" + ], + [ + "[C@]", + "(C)" + ], + [ + "k3-", + "l2" + ], + [ + "*OPO", + "PO" + ], + [ + "4|b", + "4|c" + ], + [ + "4|b4|c", + "4|d" + ], + [ + "4|b4|c4|d", + "4|" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?" + ], + [ + "6)", + "/3=O" + ], + [ + "[C@@]", + "4" + ], + [ + "a?-", + "o1" + ], + [ + "1-a", + "4|b4|c4|d4|" + ], + [ + "ax", + "22" + ], + [ + "c?-", + "o1" + ], + [ + "s", + "3-" + ], + [ + "*OC(CCCCCC$", + "4/7)" + ], + [ + "*OC(CCCCCC$4/7)", + "C/3=O" + ], + [ + "3|", + "q" + ], + [ + "3*C", + "O" + ], + [ + "{", + "3" + ], + [ + "2*NCCC", + "^R" + ], + [ + "a6-", + "b2" + ], + [ + "ol", + "e" + ], + [ + "/7=O/5", + "CCCCCCCCCCC/3=O" + ], + [ + "3|b3|c3|d3|e3|f3|g3|h3|i3|j3|k", + "3|l" + ], + [ + "}C", + "1" + ], + [ + "4", + "*OSiC/3C/3C" + ], + [ + "a1221", + "h-1x" + ], + [ + "e4|", + "f4|" + ], + [ + "uxx2", + "xh" + ], + [ + "a12", + "1" + ], + [ + "j?-", + "m1" + ], + [ + "[C@H]", + "3" + ], + [ + "a1-c", + "4~n" + ], + [ + "d", + "xx" + ], + [ + "3|", + "r" + ], + [ + "k3|k", + "6" + ], + [ + "l2-", + "k3|k6" + ], + [ + ")", + "F" + ], + [ + "?}-{", + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C" + ], + [ + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C", + "?" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C", + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?" + ], + [ + "d1", + "11" + ], + [ + "a1-b", + "4~n" + ], + [ + "a3-", + "d1" + ], + [ + "ux", + "12" + ], + [ + "{", + "8" + ], + [ + "(", + "/6)" + ], + [ + "6|", + "l" + ], + [ + "[C@H]", + "4" + ], + [ + "f3-", + "h1" + ], + [ + "j", + "3|j" + ], + [ + "-", + "3" + ], + [ + "5", + "*OPO*/3O/3=O" + ], + [ + "6", + "*OS(CCCCCC$4/7)C/3=O/3=O" + ], + [ + "h6-", + "k1" + ], + [ + "4", + "}C(O)" + ], + [ + "N", + "$" + ], + [ + "C", + ")C" + ], + [ + "e4|f4|", + "g" + ], + [ + "i", + "3|i" + ], + [ + "1-a4|b4|c4|d4|", + "e4|f4|g" + ], + [ + "=", + "C/" + ], + [ + "211", + "1m" + ], + [ + "=^X", + "CC" + ], + [ + "CC$", + "2" + ], + [ + "a?-", + "r1" + ], + [ + "axx", + "21" + ], + [ + "CN", + "$" + ], + [ + "N", + "CCO" + ], + [ + "a5-", + "c1" + ], + [ + "b3-", + "e1" + ], + [ + "z", + "1" + ], + [ + "=^EC(CCCCCC$", + "6/9" + ], + [ + "?", + "%" + ], + [ + "u2", + "222h" + ], + [ + "b?-", + "j1" + ], + [ + "g", + "1-a?|b?|c?|d?|e?|f?}" + ], + [ + "i6-", + "k1" + ], + [ + "6", + "*OCCCCCCCC" + ], + [ + "d", + "12h" + ], + [ + "3*OCC", + "C/4C/4C/3=O" + ], + [ + "C", + ")" + ], + [ + "d1", + "11h" + ], + [ + "d2", + "21h" + ], + [ + "d4-", + "j1" + ], + [ + "ad", + "112" + ], + [ + "4|", + "l" + ], + [ + "j3|j", + "6" + ], + [ + "k2-", + "j3|j6" + ], + [ + "CC", + "^R" + ], + [ + "m?-", + "p1" + ], + [ + "{1", + "}" + ], + [ + "/1", + "5" + ], + [ + "a21", + "d2" + ], + [ + "a4344", + "h-1b" + ], + [ + "6", + "*OPOCCN/3O/3=O" + ], + [ + "a1", + "d21" + ], + [ + "3|q", + "6" + ], + [ + "C", + "=^ZCCC=^ZCCC" + ], + [ + "q", + "3|q6" + ], + [ + "r2-", + "q3|q6" + ], + [ + "*", + "/5O/5=O/3O/3=O" + ], + [ + "hy", + "l" + ], + [ + ",", + "1" + ], + [ + "3|", + "s" + ], + [ + "g", + "l" + ], + [ + "O", + "*2" + ], + [ + "3|r", + "6" + ], + [ + "e7-", + "f1" + ], + [ + "r", + "3|r6" + ], + [ + "s2-", + "r3|r6" + ], + [ + "a", + "m" + ], + [ + "a1-d", + "3~" + ], + [ + "6", + "*Br" + ], + [ + "a1111", + "h-1a" + ], + [ + "g", + "8-" + ], + [ + "O/", + "8" + ], + [ + "4", + "[C@@](C)" + ], + [ + "4[C@@](C)", + "3" + ], + [ + "=^XCC", + "/3O" + ], + [ + "CCCC", + "$" + ], + [ + "ux12", + "xh" + ], + [ + "C/10=O", + "(" + ], + [ + "[C@@]", + "1" + ], + [ + "g8-", + "h2" + ], + [ + "n1", + "*1" + ], + [ + "O/5", + "O/5=O/3O/3=O" + ], + [ + "a1122", + "m-1b" + ], + [ + "a2212", + "h-1b" + ], + [ + "ax", + "1" + ], + [ + "l?-", + "p1" + ], + [ + "Ad2", + "zz" + ], + [ + "s", + "3|s" + ], + [ + "=^E", + "C(" + ], + [ + "n", + "2*OC" + ], + [ + "ole", + "an" + ], + [ + "5", + "*OPO/3O/3=O" + ], + [ + "[C@@]", + "5" + ], + [ + "ad", + "122h-1" + ], + [ + "s3|s", + "6" + ], + [ + "t2-", + "s3|s6" + ], + [ + "?|", + "ad" + ], + [ + "?|a", + "c" + ], + [ + "?|ac", + "?|ad" + ], + [ + "a?-", + "p1" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K?|L?|M?|N?|O?|P?|Q?|R?|S?|T?|U?|V?|W?|X?|Y?|Z?|aa?|ab", + "?|ac?|ad" + ], + [ + "et", + "hyl" + ], + [ + "i3|i", + "6" + ], + [ + "j4-", + "l1" + ], + [ + "*OPO*/3O/3=O", + "~n" + ], + [ + "5", + "*OC" + ], + [ + "O", + "/3O/3=O" + ], + [ + "a2211", + "h-1x" + ], + [ + "l6-", + "p1" + ], + [ + "*(CCCCCC$", + "2/5" + ], + [ + "Ad1", + "zz" + ], + [ + "j?-", + "l1" + ], + [ + "7", + "*OP^XOCCN/3O/3=O" + ], + [ + "}C", + "(" + ], + [ + ")O", + "C(" + ], + [ + "({28", + "}C(O)=O)" + ], + [ + "a6-", + "q1" + ], + [ + "j6-", + "m1" + ], + [ + "p4-", + "r1" + ], + [ + "([H])", + "CC[C@]" + ], + [ + "c4-", + "l1" + ], + [ + "m", + "3|m" + ], + [ + "%", + "?%" + ], + [ + "j2-", + "i3|i6" + ], + [ + "(C)", + "/" + ], + [ + "2", + "*I" + ], + [ + "CC", + "C/3=O" + ], + [ + "a1-c", + "3~" + ], + [ + "a2222", + "h-1a" + ], + [ + "gl", + "yc" + ], + [ + "Aa", + "d21" + ], + [ + "a4-", + "b2" + ], + [ + "a?|b?|c", + "?}*OCC/3=O" + ], + [ + "d7-", + "e1" + ], + [ + "a2-", + "c1" + ], + [ + "d2", + "h" + ], + [ + "a2d12", + "m-1a" + ], + [ + "n", + "1-4" + ], + [ + "*", + "(N" + ], + [ + "k?-", + "n1" + ], + [ + "s4-", + "t1" + ], + [ + "a21EE", + "A-1a" + ], + [ + "a2211", + "h-1a" + ], + [ + "a", + "r" + ], + [ + "a1-d2", + "~n" + ], + [ + "o", + "s" + ], + [ + "1*NC(CCCCCC$", + "4/5" + ], + [ + "a2212", + "h-1x" + ], + [ + "ax", + "21" + ], + [ + "l?-", + "n1" + ], + [ + "CN(CCCCCC$", + "12" + ], + [ + "a2121", + "h-1b" + ], + [ + "x", + "21" + ], + [ + "x2", + "h" + ], + [ + "4", + "4" + ], + [ + "?", + "*OPO/3O/3=O" + ], + [ + "N", + "C$" + ], + [ + "f", + "1-a?|b?|c?|d?|e?}" + ], + [ + "h6-", + "l1" + ], + [ + "Aad2", + "2111m" + ], + [ + "d21", + "h" + ], + [ + "s3-", + "t1" + ], + [ + "/1", + "0" + ], + [ + "l?-", + "q1" + ], + [ + "m3|m", + "6" + ], + [ + "n2-", + "m3|m6" + ], + [ + "([H])", + "CC=C4" + ], + [ + "o", + "ic@acid" + ], + [ + "9", + "-b1" + ], + [ + "a1-b", + "3~n" + ], + [ + "a222", + "h-1a" + ], + [ + "|", + "f2" + ], + [ + "1", + "*OCCCCCCCC" + ], + [ + "a1222", + "h-1a" + ], + [ + "a2|b2|c2|d2|e2", + "|f2" + ], + [ + "222", + "m" + ], + [ + "7", + "*OPO/3O/3=O" + ], + [ + "a1-", + "a" + ], + [ + "t", + "ri" + ], + [ + "a1-e", + "3~n" + ], + [ + "6", + "*OP^XOCCNC/7C/7C/3O/3=O" + ], + [ + "a2221", + "h-1b" + ], + [ + "ol", + "@=@SMILES@C" + ], + [ + "#", + "N" + ], + [ + "2*N", + "C(CCCCCC$4)/3=O" + ], + [ + "c3-", + "f1" + ], + [ + "O/", + "9" + ], + [ + "p", + "6-" + ], + [ + "t", + "?-" + ], + [ + "/4)*2", + "/10=O" + ], + [ + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h6|i4|i6|j4|j6|k4|k", + "6|l" + ], + [ + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h6|i4|i6|j4|j6|k4|k6|l", + "4|l" + ], + [ + "a", + "c" + ], + [ + "4|h", + "4|i" + ], + [ + "C/", + "2" + ], + [ + "C=^Z", + "CCCCCCC/3=O" + ], + [ + "a", + "d21" + ], + [ + "a1", + "*OC" + ], + [ + "a1121", + "A-1a" + ], + [ + "a1x2", + "xh-1u" + ], + [ + "o", + "genin" + ], + [ + "?|i", + "?}" + ], + [ + "[C@]", + "2" + ], + [ + "a6-", + "u1" + ], + [ + "ad222", + "m-1x" + ], + [ + "xx", + "h" + ], + [ + "3*OCC", + "C^R" + ], + [ + "C", + "F/4F/4F/3=O" + ], + [ + "CF/4F/4F/3=O", + "/3=O" + ], + [ + "h", + "22" + ], + [ + "@a", + "glyc" + ], + [ + "@aglyc", + "on" + ], + [ + "CCC", + "NCC$" + ], + [ + "a1", + "d22" + ], + [ + "a1-", + "g" + ], + [ + "a4334", + "h-1b" + ], + [ + "b", + "3*N" + ], + [ + "d3-", + "g1" + ], + [ + "6", + "n1-4" + ], + [ + "a1-c", + "4~" + ], + [ + "A", + "4" + ], + [ + "[C@]", + "4" + ], + [ + "*OS", + "CF/4F/4F/3=O/3=O" + ], + [ + "6", + "*OSiC/3C/3C" + ], + [ + "6*OC", + "^XO*/3CO/6=O/3C" + ], + [ + "d6-", + "e2" + ], + [ + "C", + "=^ZCCC=^ZCCCCCC/3=O" + ], + [ + "a3344", + "h-1x" + ], + [ + "2*NCCC", + "^X" + ], + [ + "6", + "*Cl" + ], + [ + "a6-", + "s1" + ], + [ + "s", + "2" + ], + [ + "1-a4|b4|c4|d4|e4|f4|g", + "4|h4|i" + ], + [ + "a1211", + "h-1a" + ], + [ + "C(CCCCCC$", + "6)/3=O" + ], + [ + "C/", + "2C" + ], + [ + "[C@]", + "12" + ], + [ + "a2d", + "22" + ], + [ + "a6-", + "t1" + ], + [ + "o", + "1-" + ], + [ + "11", + "xh" + ], + [ + "CC^ECC^Z", + "$4)" + ], + [ + "O/", + "6" + ], + [ + "{", + "22" + ], + [ + "4-", + "6*OC^XO*/3CO/6=O/3C" + ], + [ + "d", + "8-" + ], + [ + "in", + "e" + ], + [ + "k?-", + "m1" + ], + [ + "x", + "22h" + ], + [ + ")", + "-" + ], + [ + "2*NCCC", + "^XO" + ], + [ + "h", + "21" + ], + [ + "n?-", + "q1" + ], + [ + "4", + "*OSC/3=O/3=O" + ], + [ + "a", + "d111" + ], + [ + "id", + "e" + ], + [ + "u", + "2-" + ], + [ + "6*S", + "O/2=O/2=O" + ], + [ + "a1-", + "c2" + ], + [ + "m", + "ethyl" + ], + [ + "t", + "2" + ], + [ + "=^Z", + "CCC/3=O" + ], + [ + "a3-", + "b2" + ], + [ + "h1", + "1" + ], + [ + "j1-", + "a?|b?|c?|d?|e?|f?|g?|h?|i?}" + ], + [ + "11/1", + "4)" + ], + [ + "a?-", + "s1" + ], + [ + "*N", + "*/2" + ], + [ + "3", + "*OC(CCCCCC$4/7)OC" + ], + [ + "a1-d", + "4~" + ], + [ + "a3-", + "e1" + ], + [ + "a?-", + "q1" + ], + [ + "c", + "(O)" + ], + [ + "a", + "l" + ], + [ + "6n1-4", + "n2*OC" + ], + [ + "[C@]5", + "([H])" + ], + [ + "ol", + "ic~" + ], + [ + "-", + "?" + ], + [ + "1", + "n1-" + ], + [ + "a1x1", + "xh-1u" + ], + [ + "3", + "*OP^XOCCN/3O/3=O" + ], + [ + "a1-", + "e2" + ], + [ + "a?|b?|c?|d", + "?}" + ], + [ + "(CCCCCC$", + "4)" + ], + [ + "*OP^XOP", + "O/5O/5=O/3O/3=O" + ], + [ + "4", + "*C" + ], + [ + "a2", + "6" + ], + [ + "x", + "h-1a" + ], + [ + "CC^ECC^Z$4)", + "/9" + ], + [ + "l3-", + "m2" + ], + [ + "(CCCCCC$4)", + "/3C" + ], + [ + "/3", + "=N" + ], + [ + "{1", + "4}" + ], + [ + "12", + "m" + ], + [ + "8", + "*(N" + ], + [ + "a1211", + "m-1a" + ], + [ + "2*OCC", + "=C" + ], + [ + "C/", + "9" + ], + [ + "a21FF", + "A-1a" + ], + [ + "f?-", + "i1" + ], + [ + "k6-", + "n1" + ], + [ + "122h-2", + "b" + ], + [ + "Aa", + "x21" + ], + [ + "Ad2d", + "d22h" + ], + [ + "c?-", + "q1" + ], + [ + "h", + "12" + ], + [ + "4", + "/6)" + ], + [ + "m?-", + "r1" + ], + [ + "Ad1d", + "d11h" + ], + [ + "a1222", + "h-1x" + ], + [ + "a?|b?|c?|d", + "?}*OC" + ], + [ + "*2", + "/6" + ], + [ + "5n2-6n1*1O(CCCCCC$3/6)N", + "CN(CCCCCC$12" + ], + [ + "a21eE", + "A-1a" + ], + [ + "u12", + "11h" + ], + [ + "a", + "344" + ], + [ + "a6-", + "b3*N" + ], + [ + "(C)", + "CC[C@@]" + ], + [ + "[C@H]", + "2" + ], + [ + "1", + "*OPO/3O/3=O" + ], + [ + "i1-", + "a?|b?|c?|d?|e?|f?|g?|h?}" + ], + [ + "2*N", + "=^XCC/3O" + ], + [ + "n1*1O", + "(CCCCCC$3" + ], + [ + "u4", + "344h" + ], + [ + "2*N", + "CCO" + ], + [ + "5", + "*OCC" + ], + [ + "=C", + "(C" + ], + [ + "a21EE", + "A-1x" + ], + [ + "q4-", + "s1" + ], + [ + "t", + "3-" + ], + [ + "=O", + ")C" + ], + [ + "Ad1d", + "d22h" + ], + [ + "[C@@H]", + "2" + ], + [ + "{2", + "}" + ], + [ + "122h-2", + "x" + ], + [ + "a21eE", + "A-1x" + ], + [ + "e", + "1-" + ], + [ + "f", + "7-" + ], + [ + "b6-", + "h1" + ], + [ + "k6-", + "l1" + ], + [ + "ud", + "222m" + ], + [ + "1-b", + "3|b" + ], + [ + "c4-", + "d2" + ], + [ + "C/", + "11" + ], + [ + "f6-", + "i1" + ], + [ + "g", + "1-" + ], + [ + "n3-", + "o2" + ], + [ + "{3}[C@@H](O)CC[C@]", + "2(C)[C@@]3" + ], + [ + "Ad2d", + "d11h" + ], + [ + "CCC", + "l" + ], + [ + "l?-", + "o1" + ], + [ + "c?-", + "p1" + ], + [ + "q?-", + "r2" + ], + [ + "y", + "l" + ], + [ + "/6", + "Cl" + ], + [ + "/6", + "Cl/3=O" + ], + [ + "/6Cl", + "/6Cl/3=O" + ], + [ + "C/4", + "O/3=O" + ], + [ + "CCCl", + "/6Cl/6Cl/3=O" + ], + [ + "b", + "1-" + ], + [ + ")O(", + "/8" + ], + [ + "A", + "a11" + ], + [ + "CC", + "^X" + ], + [ + "a1d21", + "m-1a" + ], + [ + "c6-", + "n1" + ], + [ + "2*NCO", + "CCCl/6Cl/6Cl/3=O" + ], + [ + "4", + "*OSiCC/4C/4C/3C/3C" + ], + [ + "c6-", + "d2" + ], + [ + "o", + "6-" + ], + [ + "#N", + "(" + ], + [ + "4", + "*NCC" + ], + [ + "5)", + "/3=O" + ], + [ + "6*N", + "CN(CCCCCC$5" + ], + [ + "C/10=O(", + "/4)*2" + ], + [ + "d8-", + "e2" + ], + [ + "", + "-?" + ], + [ + "h", + "axx" + ], + [ + "3|b3|c3|d3|e3|f3|g3|h3|i3|j3|k3|l", + "3|m" + ], + [ + "l", + "3|l" + ], + [ + "a?-", + "t1" + ], + [ + "m?-", + "q1" + ], + [ + "1", + "n2-" + ], + [ + "CC[C@]", + "3" + ], + [ + "a4-", + "e1" + ], + [ + "o", + "p" + ], + [ + "a21FF", + "A-1x" + ], + [ + "a2221", + "h-1x" + ], + [ + "B", + "1" + ], + [ + "d", + "5-" + ], + [ + "a?|b?|c", + "?}*OSO/3=O/3=O" + ], + [ + "x2", + "xh" + ], + [ + "/5", + "C/3=O" + ], + [ + "?", + "*OCC/3=O" + ], + [ + "a?|b?|c?|d?|e", + "?}*OC" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h", + "?}*OSO/3=O/3=O" + ], + [ + "d", + "d" + ], + [ + "ad", + "xx" + ], + [ + "e6-", + "f2" + ], + [ + "2", + "*OS(CCCCCC$4/7)C/3=O/3=O" + ], + [ + "a8-", + "b3" + ], + [ + "ad2", + "21" + ], + [ + "in", + "@=@SMILES@O" + ], + [ + "@", + "p" + ], + [ + "[C@H]", + "(C" + ], + [ + "(CCCCCC$3", + ")" + ], + [ + "/10=O(", + "/4)CN*2" + ], + [ + "CC^", + "S" + ], + [ + "u112", + "1h" + ], + [ + "=", + "{" + ], + [ + "@=@SMILES@CC", + "1" + ], + [ + "=^EC(CCCCCC$6/9", + ")O(/8" + ], + [ + "C", + "2" + ], + [ + "N$", + "2" + ], + [ + "j6-", + "n1" + ], + [ + "3*OCCCCCCCC", + "CCCCCCCC/3=O" + ], + [ + "FF", + "A" + ], + [ + "a1-e", + "4~n" + ], + [ + "h6-", + "i2" + ], + [ + "o2-", + "p1" + ], + [ + "β", + "," + ], + [ + "3*OCCC^X", + "CCCCCCCCCCC/5O/3=O" + ], + [ + "4*OCC", + "C/4C/4C/3=O" + ], + [ + "$", + "5" + ], + [ + "?|h", + "?}" + ], + [ + "6|c", + "6|d" + ], + [ + "c?-", + "r1" + ], + [ + "?-", + "?" + ], + [ + "@", + "olean" + ], + [ + "@olean", + "olic~" + ], + [ + "C/", + "12" + ], + [ + "axxxx", + "xh-1a" + ], + [ + "b4-", + "g1" + ], + [ + ")O(", + "/4)" + ], + [ + "3", + "*OS(CCCCCC$4/7)C/3=O/3=O" + ], + [ + "6|c6|d", + "6|" + ], + [ + "e", + "c" + ], + [ + "i", + "1-a?|b?|c?|d?|e?}" + ], + [ + "l3|l", + "6" + ], + [ + "m2-", + "l3|l6" + ], + [ + "|", + "g2" + ], + [ + "C/", + "6=O" + ], + [ + "/1", + "8" + ], + [ + "3", + "*S" + ], + [ + "=O", + ")O" + ], + [ + "@=@SMILES@O", + "{3}" + ], + [ + "a3344", + "m-1x" + ], + [ + "u1221", + "h" + ], + [ + "21", + "m" + ], + [ + "={5", + "4}C(O)" + ], + [ + ")", + "O/3=O" + ], + [ + "a1222", + "h-1b" + ], + [ + "f", + "1-" + ], + [ + "j?-", + "n1" + ], + [ + "4", + "*O" + ], + [ + "d6-", + "i1" + ], + [ + "h-1", + "u" + ], + [ + "{3}", + "[C@H](O)" + ], + [ + "/", + "12" + ], + [ + "/1", + "7" + ], + [ + "1-d", + "?|i?}" + ], + [ + "a?|b", + "?}*OSO/3=O/3=O" + ], + [ + "d4-", + "k1" + ], + [ + "{3}", + "[C@H](O)C" + ], + [ + "Aa", + "d" + ], + [ + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o", + "?}" + ], + [ + "1", + "0" + ], + [ + "12", + "[H]" + ], + [ + "122h-2", + "a" + ], + [ + "@", + "2" + ], + [ + "a?|b?|c?|d?|e?|f", + "?}*OC" + ], + [ + "}C(O)", + "C" + ], + [ + "2", + "*OSC/3=O/3=O" + ], + [ + "2", + "*OSiCC/4C/4C/3C/3C" + ] + ], + "metadata": { + "num_merges": 2000, + "vocab_size": 2114 + }, + "review_trace": { + "authority_generation": "r3_dependency_closed", + "bounded_distance_cache": true, + "development_or_excluded_rows_read_for_merge_learning": 0, + "fit_contributor_manifest": "review_bpe_fit_contributors.tsv.gz", + "fit_contributor_manifest_sha256": "4ec8dfaeacef355092313507ab71c628f48ddf1a4fe39e7663748060a07af297", + "fit_non_special_unit_occurrences": 4306785, + "fit_only_character_alphabet": [ + "\t", + " ", + "\"", + "#", + "$", + "%", + "'", + "(", + ")", + "*", + "+", + ",", + "-", + ".", + "/", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + ":", + "<", + "=", + ">", + "?", + "@", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "[", + "\\", + "]", + "^", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "{", + "|", + "}", + "~", + "Δ", + "α", + "β", + "γ", + "δ", + "ζ", + "ξ", + "С", + "’", + "′", + "″", + "→", + "−" + ], + "fit_only_character_alphabet_size": 104, + "fit_parent_count": 221899, + "fit_unique_non_special_unit_strings": 20949, + "max_token_length": null, + "merge_tie_rule": "highest_frequency_then_lexicographic_pair", + "minimum_pair_frequency": 2, + "num_merges_realized": 2000, + "num_merges_requested": 2000, + "official_submitted_artifacts_modified": false, + "parser": "fail_closed_parser_v3_exact_semantic_units", + "schema": "bertose_a5_later_role_train_only_bpe_v1", + "scientific_launch_authorized": false, + "successor_partition_sha256": "86a8c6742156683d502c93fc71b31b9a93450037d647e5a90db437a015bb3bbc", + "training_authorized": false + }, + "special_tokens": { + "[BRANCH_CLOSE]": 6, + "[BRANCH_OPEN]": 5, + "[END]": 3, + "[LINK]": 7, + "[MASK]": 4, + "[MOD]": 8, + "[PAD]": 0, + "[RESIDUE_ERROR]": 9, + "[START]": 2, + "[UNK]": 1 + }, + "token_to_id": { + "\t": 10, + " ": 11, + " @": 1066, + "\"": 12, + "#": 13, + "#N": 1824, + "#N(": 2010, + "$": 14, + "$4)": 1325, + "$5": 2063, + "%": 15, + "%?%": 1763, + "'": 16, + "(": 17, + "($": 1470, + "(/6)": 1642, + "(C": 374, + "(C)": 422, + "(C)/": 1765, + "(C)C": 1080, + "(C)CC": 1562, + "(C)CC[C@@]": 1958, + "(CC": 1366, + "(CCCC": 1510, + "(CCCCCC$": 216, + "(CCCCCC$3": 605, + "(CCCCCC$3)": 2045, + "(CCCCCC$3/6)": 709, + "(CCCCCC$3/6)N": 763, + "(CCCCCC$4)": 1924, + "(CCCCCC$4)/3C": 1931, + "(CCCCCC$4/7)": 891, + "(CCCCCC$4/7)C/3=O/3=O": 915, + "(N": 1357, + "(O": 1485, + "(O)": 429, + "(OC": 1475, + "([H]": 673, + "([H])": 766, + "([H])C": 1336, + "([H])CC=C4": 1807, + "([H])CC[C@]": 1760, + "({2": 978, + "({28": 1421, + "({28}C(O)=O)": 1756, + ")": 18, + ")-": 1890, + ")/3(CCCCCC$1": 811, + ")/3(CCCCCC$14)": 1107, + ")C": 643, + ")Cl": 1393, + ")F": 1633, + ")O": 453, + ")O(": 693, + ")O(/4)": 2073, + ")O(/8": 2001, + ")O/3=O": 2090, + ")OC": 790, + ")OC(": 1755, + ")OC/3=O": 1434, + "*": 19, + "*(CCCCCC$": 1345, + "*(CCCCCC$2/5": 1750, + "*(N": 1779, + "*/2": 975, + "*/2C": 1465, + "*/3CO/6=O/3C": 1183, + "*/5O/5=O/3O/3=O": 1697, + "*1": 569, + "*1O": 625, + "*2": 587, + "*2/6": 1952, + "*Br": 1196, + "*C": 594, + "*Cl": 1181, + "*F": 696, + "*I": 1043, + "*N": 127, + "*N*/2": 1908, + "*NCC": 283, + "*NCC/3=O": 130, + "*O": 162, + "*O*/2C": 1530, + "*OC": 202, + "*OC(CCCCCC$": 233, + "*OC(CCCCCC$4)": 235, + "*OC(CCCCCC$4)/3=O": 312, + "*OC(CCCCCC$4/7)": 1610, + "*OC(CCCCCC$4/7)C/3=O": 1611, + "*OC(CCCCCC$4/7)OC": 1093, + "*OC(CCCCCC$4/8)O(": 1326, + "*OC(CCCCCC$4/8)O(/7)O(/6)": 1339, + "*OC(CCCCCC$4/8)O(/7)O(/6)O/3=O": 1340, + "*OCC": 370, + "*OCC/3=O": 230, + "*OCCCC": 579, + "*OCCCCCCCC": 588, + "*OP": 279, + "*OPO": 307, + "*OPO*": 507, + "*OPO*/3O/3=O": 508, + "*OPO*/3O/3=O~n": 1745, + "*OPO/3O/3=O": 356, + "*OPOCCN": 1059, + "*OPOCCN/3O/3=O": 1221, + "*OPOPO": 1596, + "*OP^XO": 454, + "*OP^XOCCN": 517, + "*OP^XOCCN/3O/3=O": 584, + "*OP^XOCCNC/7C/7C/3O/3=O": 1083, + "*OP^XOP": 827, + "*OP^XOPO/5O/5=O/3O/3=O": 1925, + "*OP^XOP^XO": 882, + "*OP^XOP^XOCCN/5O/5=O/3O/3=O": 973, + "*OS": 244, + "*OS(CCCCCC$4/7)C/3=O/3=O": 949, + "*OSC/3=O/3=O": 1033, + "*OSCF/4F/4F/3=O/3=O": 1863, + "*OSO/3=O/3=O": 257, + "*OSi": 541, + "*OSiC/3C/3C": 801, + "*OSiCC/4C/4": 698, + "*OSiCC/4C/4C": 1108, + "*OSiCC/4C/4C/3(CCCCCC$": 1109, + "*OSiCC/4C/4C/3(CCCCCC$8": 1110, + "*OSiCC/4C/4C/3(CCCCCC$8)/3(CCCCCC$14)": 1111, + "*OSiCC/4C/4C/3C/3C": 848, + "*S": 837, + "+": 20, + ",": 21, + ",1": 1699, + ",2": 1423, + "-": 22, + "-1": 118, + "-2": 206, + "-2a": 1084, + "-2b": 1063, + "-2x": 930, + "-3": 1647, + "-?": 1918, + "-b1": 311, + "-{": 169, + ".": 23, + "/": 24, + "/1": 542, + "/10": 1803, + "/10=O": 829, + "/10=O(": 1052, + "/10=O(/4)*2": 1292, + "/10=O(/4)CN*2": 2046, + "/11": 1555, + "/12": 2098, + "/15": 1688, + "/17": 2099, + "/18": 2082, + "/2": 733, + "/2=O": 1228, + "/3": 122, + "/3(CCCCCC$": 595, + "/3(CCCCCC$1": 670, + "/3(CCCCCC$10": 1099, + "/3(CCCCCC$10)/3(CCCCCC$1": 1100, + "/3(CCCCCC$10)/3(CCCCCC$16)": 1132, + "/3=N": 1932, + "/3=O": 124, + "/3C": 346, + "/3C/3C": 596, + "/3CO/6=O": 1045, + "/3CO/6=O/3C": 1046, + "/3O": 1522, + "/3O/3=O": 280, + "/4": 498, + "/4)": 623, + "/4)*2": 818, + "/4)*2/10=O": 1830, + "/4)CN": 1216, + "/4)CN*2": 1544, + "/5": 500, + "/5C/3=O": 2032, + "/5O/5=O/3O/3=O": 803, + "/6": 467, + "/6)": 558, + "/6Cl": 1995, + "/6Cl/3=O": 1996, + "/6Cl/6Cl/3=O": 1997, + "/7": 468, + "/7)O(": 1089, + "/7)O(/6)": 1273, + "/7=O/5": 1322, + "/7=O/5CCCCCCCCCCC/3=O": 1618, + "/8": 749, + "/9": 908, + "0": 25, + "0=O": 703, + "1": 26, + "1*N": 490, + "1*NC(CCCCCC$": 1034, + "1*NC(CCCCCC$4/5": 1787, + "1*NCC": 967, + "1*OC": 1381, + "1*OCCCCCCCC": 1813, + "1*OPO/3O/3=O": 1960, + "1*OP^XOCCNC/7C/7C/3O/3=O": 1397, + "1-": 116, + "1-4": 300, + "1-5": 119, + "1-?": 273, + "1-a": 856, + "1-a4|": 1439, + "1-a4|a6|b": 1453, + "1-a4|a6|b4|b": 1454, + "1-a4|a6|b4|b6|c": 1455, + "1-a4|a6|b4|b6|c4|c": 1456, + "1-a4|a6|b4|b6|c4|c6|d": 1457, + "1-a4|a6|b4|b6|c4|c6|d4|d6|": 1458, + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|": 1459, + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|": 1460, + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g": 1461, + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g": 1462, + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h": 1463, + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h": 1464, + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h6|i": 1467, + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h6|i4|i": 1468, + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h6|i4|i6|j": 1494, + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h6|i4|i6|j4|j": 1495, + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h6|i4|i6|j4|j6|k": 1589, + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h6|i4|i6|j4|j6|k4|k": 1590, + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h6|i4|i6|j4|j6|k4|k6|l": 1831, + "1-a4|a6|b4|b6|c4|c6|d4|d6|e4|e6|f4|f6|g4|g6|h4|h6|i4|i6|j4|j6|k4|k6|l4|l": 1832, + "1-a4|b4|c4|d4|": 1606, + "1-a4|b4|c4|d4|e4|f4|g": 1656, + "1-a4|b4|c4|d4|e4|f4|g4|h4|i": 1873, + "1-a?|b?|c?|d?|e?|f?}": 928, + "1-a?|b?|c?|d?|e?}": 869, + "1-b": 1095, + "1-b3|b": 1982, + "1-c": 878, + "1-c3|c": 956, + "1-c3|c6": 993, + "1-d": 897, + "1-d4|d6|": 1471, + "1-d?|i?}": 2100, + "10": 2106, + "11": 296, + "11/1": 1578, + "11/14)": 1906, + "112": 154, + "112h": 243, + "11h": 726, + "11xh": 1881, + "12": 115, + "122": 121, + "1221": 194, + "1221h": 578, + "1222": 771, + "1222h": 1120, + "122h": 171, + "122h-1": 126, + "122h-2": 598, + "122h-2a": 2108, + "122h-2b": 1942, + "122h-2x": 1975, + "122m": 1042, + "12[H]": 2107, + "12h": 556, + "12m": 1934, + "1A": 1290, + "1h": 795, + "1m": 1031, + "1n1-": 1919, + "1n2-": 2022, + "2": 27, + "2(C)": 1210, + "2(C)[C@@]3": 1570, + "2)": 1341, + "2*C": 1557, + "2*F": 1133, + "2*I": 1766, + "2*N": 269, + "2*N=^XCC/3O": 1962, + "2*NC": 1023, + "2*NC(CCCCCC$4)/3=O": 1825, + "2*NCC": 1440, + "2*NCC/3=O": 139, + "2*NCCC": 991, + "2*NCCC^R": 1615, + "2*NCCC^X": 1869, + "2*NCCC^XO": 1891, + "2*NCCO": 1965, + "2*NCO": 1442, + "2*NCOCCCl/6Cl/6Cl/3=O": 2006, + "2*NSO/3=O/3=O": 495, + "2*O": 1363, + "2*OC": 475, + "2*OC(CCCCCC$4)": 447, + "2*OC(CCCCCC$4)/3=O": 512, + "2*OCC": 727, + "2*OCC/3=O": 327, + "2*OCC=C": 1937, + "2*OCCC/4C/4C/3=O": 1415, + "2*OCCCC": 1002, + "2*OCCCCCCCC": 920, + "2*OPO/3O/3=O": 1202, + "2*OS(CCCCCC$4/7)C/3=O/3=O": 2039, + "2*OSC/3=O/3=O": 2112, + "2*OSO/3=O/3=O": 469, + "2*OSiC/3C/3C": 1541, + "2*OSiCC/4C/4C/3C/3C": 2113, + "2-": 174, + "2-5": 521, + "2-6": 208, + "2-?": 721, + "2/5": 1315, + "21": 191, + "211": 267, + "2111m": 1658, + "21h": 971, + "21m": 2088, + "22": 294, + "222": 484, + "222h": 862, + "222m": 1816, + "22h": 739, + "22h-1b": 1230, + "2C": 1211, + "3": 28, + "3)": 1355, + "3*C": 899, + "3*CO": 1613, + "3*F": 1411, + "3*N": 662, + "3*NCC": 1429, + "3*NCC/3=O": 694, + "3*O": 1444, + "3*OC": 332, + "3*OC(CCCCCC$4)": 397, + "3*OC(CCCCCC$4)/3=O": 520, + "3*OC(CCCCCC$4/7)OC": 1909, + "3*OCC": 622, + "3*OCC/3=O": 324, + "3*OCC=C": 1297, + "3*OCCC/4C/4C/3=O": 1676, + "3*OCCCC": 962, + "3*OCCCCCCCC": 877, + "3*OCCCCCCCCCCCCCCCC/3=O": 2055, + "3*OCCC^R": 1847, + "3*OCCC^X": 1579, + "3*OCCC^XCCCCCCCCCCC/5O/3=O": 2061, + "3*OC^R": 1399, + "3*OC^RCO/4=O/3C": 1560, + "3*OPO/3O/3=O": 1406, + "3*OP^XOCCN/3O/3=O": 1921, + "3*OS(CCCCCC$4/7)C/3=O/3=O": 2074, + "3*OSO/3=O/3=O": 548, + "3*OSiC/3C/3C": 1422, + "3*OSiCC/4C/4C/3C/3C": 1518, + "3*S": 2083, + "3-": 178, + "3-6": 1049, + "3-7": 553, + "334": 744, + "334h": 1591, + "34": 449, + "344": 551, + "344h": 1337, + "3|": 297, + "3|b": 974, + "3|b3|c3|d": 1162, + "3|b3|c3|d3|e": 1174, + "3|b3|c3|d3|e3|f": 1187, + "3|b3|c3|d3|e3|f3|g": 1207, + "3|b3|c3|d3|e3|f3|g3|h": 1225, + "3|b3|c3|d3|e3|f3|g3|h3|i": 1240, + "3|b3|c3|d3|e3|f3|g3|h3|i3|j": 1350, + "3|b3|c3|d3|e3|f3|g3|h3|i3|j3|k": 1443, + "3|b3|c3|d3|e3|f3|g3|h3|i3|j3|k3|l": 1619, + "3|b3|c3|d3|e3|f3|g3|h3|i3|j3|k3|l3|m": 2018, + "3|c": 764, + "3|c3|d": 1157, + "3|d": 1068, + "3|e": 1081, + "3|f": 794, + "3|g": 657, + "3|h": 1061, + "3|i": 969, + "3|j": 1032, + "3|k": 1060, + "3|l": 1241, + "3|m": 1293, + "3|n": 1247, + "3|o": 1217, + "3|p": 1376, + "3|p6": 1486, + "3|q": 1612, + "3|q6": 1693, + "3|r": 1630, + "3|r6": 1703, + "3|s": 1700, + "3}": 648, + "3~": 863, + "3~n": 691, + "4": 29, + "4(C)": 1435, + "4)": 227, + "4)/3=O": 1028, + "4*C": 1926, + "4*F": 1580, + "4*N": 614, + "4*NC=O": 1441, + "4*NCC": 2011, + "4*NCC/3=O": 923, + "4*O": 2094, + "4*OC": 514, + "4*OC(CCCCCC$4)": 456, + "4*OC(CCCCCC$4)/3=O": 601, + "4*OCC": 849, + "4*OCC/3=O": 337, + "4*OCCC/4C/4C/3=O": 2062, + "4*OCCCC": 1271, + "4*OPO/3O/3=O": 606, + "4*OP^XOP^XOCCN/5O/5=O/3O/3=O": 1259, + "4*OSC/3=O/3=O": 1894, + "4*OSO/3=O/3=O": 581, + "4*OSiC/3C/3C": 1621, + "4*OSiCC/4C/4C/3C/3C": 2007, + "4-": 160, + "4-6*OC^XO*/3CO/6=O/3C": 1885, + "4/5": 1330, + "4/6)": 1947, + "4/7": 586, + "4/7)": 789, + "4/7)OC": 960, + "4/8": 1222, + "4/8)O(": 1319, + "44": 1795, + "4[C@@](C)": 1713, + "4[C@@](C)3": 1714, + "4|": 344, + "4|b": 1073, + "4|b4|c": 1597, + "4|b4|c4|d": 1598, + "4|b4|c4|d4|": 1599, + "4|c": 1079, + "4|d": 868, + "4|d6|": 1044, + "4|g": 1448, + "4|h": 1074, + "4|h4|i": 1834, + "4|i": 1024, + "4|j": 1176, + "4|k": 1412, + "4|l": 1682, + "4}": 1075, + "4}C(O)": 1651, + "4~": 867, + "4~n": 718, + "5": 30, + "5)": 984, + "5)/3=O": 2012, + "5*N": 841, + "5*NCC": 289, + "5*NCC/3=O": 225, + "5*NCCO/3=O": 290, + "5*OC": 1746, + "5*OC(CCCCCC$4)": 1096, + "5*OC(CCCCCC$4)/3=O": 1076, + "5*OCC": 1966, + "5*OCC/3=O": 1160, + "5*OPO*/3O/3=O": 1648, + "5*OPO/3O/3=O": 1732, + "5-": 583, + "5n2-6": 903, + "5n2-6n1*1O(CCCCCC$3/6)N": 904, + "5n2-6n1*1O(CCCCCC$3/6)NCN(CCCCCC$12": 1953, + "6": 31, + "6)": 839, + "6)/3=O": 1603, + "6*Br": 1709, + "6*Cl": 1870, + "6*F": 1549, + "6*I": 1564, + "6*N": 644, + "6*NCC": 1587, + "6*NCN(CCCCCC$5": 2013, + "6*O": 1565, + "6*OC": 528, + "6*OC(CCCCCC$4)": 460, + "6*OC(CCCCCC$4)/3(CCCCCC$10)/3(CCCCCC$16)": 1327, + "6*OC(CCCCCC$4)/3=O": 701, + "6*OCC": 770, + "6*OCC/3=O": 362, + "6*OCCC/4C/4C/3=O": 1436, + "6*OCCCC": 1251, + "6*OCCCCCCCC": 1674, + "6*OC^XO*/3CO/6=O/3C": 1865, + "6*OPO/3O/3=O": 757, + "6*OPOCCN/3O/3=O": 1691, + "6*OP^XOCCN/3O/3=O": 846, + "6*OP^XOCCNC/7C/7C/3O/3=O": 1821, + "6*OS(CCCCCC$4/7)C/3=O/3=O": 1649, + "6*OSO/3=O/3=O": 333, + "6*OSiC/3C/3C": 1864, + "6*OSiCC/4C/4C/3(CCCCCC$8)/3(CCCCCC$14)": 1525, + "6*OSiCC/4C/4C/3C/3C": 1583, + "6*S": 1354, + "6*SO/2=O/2=O": 1898, + "6-": 195, + "6/9": 1542, + "6=O": 786, + "6n1-4": 1859, + "6n1-4n2*OC": 1915, + "6n2-8": 1545, + "6n2-8n1*1O(CCCCCC$3/6)N": 1546, + "6|": 403, + "6|b": 1185, + "6|c": 1179, + "6|c6|d": 2065, + "6|c6|d6|": 2075, + "6|d": 1180, + "6|g": 1212, + "6|h": 1177, + "6|i": 1191, + "6|j": 1244, + "6|k": 1328, + "6|l": 1643, + "6}": 743, + "6~": 1159, + "6~n": 1058, + "7": 32, + "7*N": 1394, + "7*NCC/3=O": 1424, + "7*OCC/3=O": 1586, + "7*OPO/3O/3=O": 1817, + "7*OP^XOCCN/3O/3=O": 1753, + "7-": 641, + "7-b1": 1237, + "8": 33, + "8*(N": 1935, + "8*N": 1402, + "8-": 557, + "8-b1": 933, + "9": 34, + "9*OCC/3=O": 1400, + "9-b1": 1809, + ":": 35, + "<": 36, + "": 534, + "-?": 2016, + "@": 642, + "@2": 2109, + "@p": 2043, + "=": 37, + "=@SMILES@": 575, + "=C": 457, + "=C(C": 1967, + "=C/": 1657, + "=C1": 1188, + "=CC": 929, + "=N": 1511, + "=O": 123, + "=O)": 876, + "=O)C": 1971, + "=O)O": 2084, + "=O/3=O": 1553, + "=O/3C": 1208, + "=O/5": 1166, + "=^": 459, + "=^E": 889, + "=^EC(": 1729, + "=^EC(CCCCCC$": 1481, + "=^EC(CCCCCC$6/9": 1668, + "=^EC(CCCCCC$6/9)O(/8": 2051, + "=^X": 1552, + "=^XCC": 1659, + "=^XCC/3O": 1715, + "=^Z": 504, + "=^ZCCC": 712, + "=^ZCCC/3=O": 1902, + "=^ZCCC=^ZCCC": 918, + "=^ZCCC=^ZCCCCCC/3=O": 1534, + "=^ZCCCCCC/3=O": 1272, + "={": 2049, + "={5": 1507, + "={54}C(O)": 2089, + ">": 38, + "?": 39, + "?%": 1669, + "?*OCC/3=O": 2033, + "?*OPO/3O/3=O": 1796, + "?*OSO/3=O/3=O": 1078, + "?-": 149, + "?-?": 2067, + "?|": 114, + "?|A": 434, + "?|B": 462, + "?|C": 493, + "?|D": 535, + "?|E": 608, + "?|F": 635, + "?|G": 646, + "?|H": 667, + "?|I": 675, + "?|J": 688, + "?|K": 831, + "?|L": 939, + "?|L?|M": 942, + "?|L?|M?|N": 943, + "?|M": 940, + "?|N": 941, + "?|O": 1003, + "?|O?|P": 1011, + "?|O?|P?|Q": 1012, + "?|O?|P?|Q?|R": 1013, + "?|O?|P?|Q?|R?|S": 1014, + "?|O?|P?|Q?|R?|S?|T": 1015, + "?|O?|P?|Q?|R?|S?|T?|U": 1016, + "?|O?|P?|Q?|R?|S?|T?|U?|V": 1017, + "?|P": 1004, + "?|Q": 1005, + "?|R": 1006, + "?|S": 1007, + "?|T": 1008, + "?|U": 1009, + "?|V": 1010, + "?|W": 1167, + "?|W?|X": 1170, + "?|W?|X?|Y": 1171, + "?|X": 1168, + "?|Y": 1169, + "?|Z": 1370, + "?|Z?|a": 1371, + "?|Z?|aa?|": 1372, + "?|Z?|aa?|ab": 1373, + "?|a": 552, + "?|ac": 1738, + "?|ac?|ad": 1739, + "?|ad": 1737, + "?|c": 133, + "?|d": 135, + "?|e": 137, + "?|f": 140, + "?|g": 142, + "?|h": 144, + "?|h?}": 2064, + "?|i": 147, + "?|i?}": 1842, + "?|j": 150, + "?|k": 152, + "?|l": 155, + "?|m": 157, + "?|n": 164, + "?|o": 167, + "?|p": 175, + "?|s": 192, + "?|t": 197, + "?|u": 217, + "?|v": 238, + "?|w": 264, + "?|x": 298, + "?|y": 322, + "?|z": 387, + "?}": 163, + "?}*OC": 716, + "?}*OCC/3=O": 870, + "?}*OPO/3O/3=O": 742, + "?}*OSO/3=O/3=O": 592, + "?}-{": 170, + "?}-{a?|b": 994, + "?}-{a?|b?": 995, + "?}-{a?|b?|c": 602, + "?}-{a?|b?|c?": 603, + "?}-{a?|b?|c?|d": 487, + "?}-{a?|b?|c?|d?": 488, + "?}-{a?|b?|c?|d?|e": 476, + "?}-{a?|b?|c?|d?|e?": 477, + "?}-{a?|b?|c?|d?|e?|f": 440, + "?}-{a?|b?|c?|d?|e?|f?": 441, + "?}-{a?|b?|c?|d?|e?|f?|g": 444, + "?}-{a?|b?|c?|d?|e?|f?|g?": 445, + "?}-{a?|b?|c?|d?|e?|f?|g?|h": 430, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?": 431, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i": 419, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?": 420, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j": 383, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?": 384, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k": 371, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?": 372, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l": 340, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?": 341, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m": 389, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?": 390, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n": 378, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?": 379, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o": 359, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?": 360, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p": 349, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?": 350, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q": 375, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?": 376, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r": 353, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?": 354, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s": 367, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?": 368, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t": 334, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?": 335, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u": 364, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?": 365, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v": 426, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?": 427, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w": 538, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?": 539, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x": 659, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?": 660, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y": 808, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?": 809, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z": 987, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?": 988, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A": 1499, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?": 1500, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B": 1389, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?": 1390, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C": 1634, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?": 1635, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D": 1600, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?": 1601, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J": 1566, + "?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?": 1567, + "@": 40, + "@=@SMILES@": 576, + "@=@SMILES@C": 924, + "@=@SMILES@CC": 1493, + "@=@SMILES@CC1": 2050, + "@=@SMILES@O": 946, + "@=@SMILES@O{3}": 2085, + "@S": 559, + "@SMI": 562, + "@SMILES": 563, + "@SMILES@": 564, + "@a": 900, + "@ac": 1106, + "@acid": 1117, + "@aglyc": 1851, + "@aglycon": 1852, + "@olean": 2068, + "@oleanolic~": 2069, + "A": 41, + "A-1": 259, + "A-1a": 437, + "A-1b": 715, + "A-1x": 465, + "A1": 1533, + "A2": 1385, + "A4": 1861, + "A": 1306, + "AU": 272, + "AUd1122h": 570, + "AUd21122h": 316, + "AUdxxxx": 461, + "AUdxxxxh": 847, + "AUdxxxxxh": 515, + "Aa": 209, + "Aa11": 2002, + "Aad": 2104, + "Aad1122h-2": 407, + "Aad1122h-2a": 573, + "Aad1122h-2x": 523, + "Aad2": 1367, + "Aad21": 1771, + "Aad21122h": 220, + "Aad21122h-2": 221, + "Aad21122h-2a": 254, + "Aad21122h-2x": 266, + "Aad22111m": 1800, + "Aax21": 1943, + "Ad1": 747, + "Ad1d": 931, + "Ad1dd11h": 1949, + "Ad1dd22h": 1972, + "Ad1zz": 1751, + "Ad2": 755, + "Ad2d": 911, + "Ad2dd11h": 1989, + "Ad2dd22h": 1944, + "Ad2zz": 1727, + "B": 42, + "B1": 2028, + "Br": 1152, + "C": 43, + "C$": 802, + "C(": 724, + "C(CCCC": 1540, + "C(CCCCCC$": 600, + "C(CCCCCC$4)/3=O": 1398, + "C(CCCCCC$6)/3=O": 1875, + "C)": 1677, + "C)C": 1653, + "C/": 313, + "C/1": 892, + "C/10=O": 1395, + "C/10=O(": 1718, + "C/10=O(/4)*2": 2014, + "C/11": 1984, + "C/12": 2070, + "C/2": 1835, + "C/2C": 1876, + "C/3=O": 381, + "C/3=O/3=O": 686, + "C/3C/3C": 613, + "C/3O/3=O": 968, + "C/4": 439, + "C/4C/3=O": 725, + "C/4C/4C/3=O": 805, + "C/4O/3=O": 1998, + "C/5": 813, + "C/5O/3=O": 860, + "C/6=O": 2081, + "C/7": 714, + "C/7C/7": 980, + "C/7C/7C/3O/3=O": 986, + "C/9": 1938, + "C1": 1438, + "C2": 2052, + "C=C": 1088, + "C=O": 1129, + "C=^Z": 998, + "C=^ZCCC=^ZCCC": 1694, + "C=^ZCCC=^ZCCCCCC/3=O": 1867, + "C=^ZCCCCCCC/3=O": 1836, + "C=^ZCCCCCCCCC/3=O": 1519, + "CC": 117, + "CC$": 864, + "CC$2": 1660, + "CC(C)": 1332, + "CC/3=O": 128, + "CC/4": 680, + "CC/4C/4": 697, + "CC=C": 1070, + "CC=C4": 1304, + "CCC": 505, + "CCC/3=O": 1767, + "CCCC": 173, + "CCCC$": 1716, + "CCCCC$": 1146, + "CCCCCC": 210, + "CCCCCC$": 214, + "CCCCCC/3=O": 965, + "CCCCCCC/3=O": 1551, + "CCCCCCCC": 386, + "CCCCCCCC/3=O": 926, + "CCCCCCCCC/3=O": 1226, + "CCCCCCCCCC": 826, + "CCCCCCCCCC/3=O": 1427, + "CCCCCCCCCCC/3=O": 1523, + "CCCCCCCCCCC/5O/3=O": 1175, + "CCCCCCCCCCCC": 1431, + "CCCCCCCCCCCCCC": 1473, + "CCCNCC$": 1853, + "CCCl": 1990, + "CCCl/6Cl/6Cl/3=O": 1999, + "CCN": 412, + "CCN/5O/5=O/3O/3=O": 883, + "CCO": 1027, + "CC[C@@]": 964, + "CC[C@]": 756, + "CC[C@]3": 2023, + "CC^": 706, + "CC^E": 1127, + "CC^ECC^Z": 1515, + "CC^ECC^Z$4)": 1882, + "CC^ECC^Z$4)/9": 1929, + "CC^R": 1685, + "CC^S": 2047, + "CC^X": 2003, + "CC^Z": 935, + "CC^ZCC^Z": 1592, + "CF/4F/4F/3=O": 1848, + "CF/4F/4F/3=O/3=O": 1849, + "CN": 577, + "CN$": 1663, + "CN(CCCCCC$": 1025, + "CN(CCCCCC$12": 1791, + "CN(CCCCCC$5": 1437, + "CO/4=O/3C": 1294, + "C^R": 866, + "C^S": 1069, + "C^X": 1103, + "Cl": 990, + "Cl/3=O": 1288, + "D": 44, + "E": 45, + "EE": 1135, + "ER": 704, + "ERR": 728, + "ERRO": 729, + "ERROR": 730, + "ERROR1-": 932, + "ERROR1-ERROR": 1056, + "ERROR1-ERROR2": 1311, + "ES": 560, + "F": 46, + "F/3=O": 875, + "F/4": 823, + "F/4F/4": 1142, + "F/4F/4F/3=O": 1189, + "FF": 1094, + "FFA": 2056, + "G": 47, + "H": 48, + "H]": 326, + "I": 49, + "J": 50, + "K": 51, + "L": 52, + "LES": 561, + "M": 53, + "MI": 554, + "N": 54, + "N$": 1652, + "N$2": 2053, + "NC$": 1797, + "NCC$": 1504, + "NCCO": 1664, + "O": 55, + "O($": 1588, + "O)": 393, + "O*2": 1702, + "O/": 414, + "O/2": 1140, + "O/2=O": 1276, + "O/2=O/2=O": 1521, + "O/3=O": 199, + "O/3=O/3=O": 249, + "O/3O/3=O": 1747, + "O/4": 1065, + "O/4=O/3C": 1266, + "O/5": 666, + "O/5=O": 723, + "O/5=O/3O/3=O": 740, + "O/5O/5=O/3O/3=O": 1722, + "O/6": 1883, + "O/6=O": 858, + "O/7": 1300, + "O/8": 1712, + "O/9": 1827, + "OC": 887, + "P": 56, + "PO": 1275, + "Q": 57, + "QQ": 1386, + "R": 58, + "S": 59, + "S(CCCCCC$": 1147, + "SO/3=O/3=O": 492, + "T": 60, + "U": 61, + "V": 62, + "W": 63, + "X": 64, + "Y": 65, + "Z": 66, + "[": 67, + "[BRANCH_CLOSE]": 6, + "[BRANCH_OPEN]": 5, + "[C": 292, + "[C@": 293, + "[C@@": 382, + "[C@@H]": 519, + "[C@@H](O)": 760, + "[C@@H]1": 1512, + "[C@@H]2": 1973, + "[C@@]": 502, + "[C@@](C)": 1312, + "[C@@]1": 1719, + "[C@@]2": 1550, + "[C@@]3": 1037, + "[C@@]4": 1604, + "[C@@]5": 1733, + "[C@H]": 537, + "[C@H](C": 2044, + "[C@H](O)": 921, + "[C@H](O)C": 1377, + "[C@H]1": 1235, + "[C@H]2": 1959, + "[C@H]3": 1627, + "[C@H]4": 1644, + "[C@]": 472, + "[C@](C)": 1594, + "[C@]1": 1430, + "[C@]12": 1877, + "[C@]2": 1843, + "[C@]3": 1401, + "[C@]4": 1862, + "[C@]5": 1324, + "[C@]5([H])": 1916, + "[END]": 3, + "[H]": 615, + "[LINK]": 7, + "[MASK]": 4, + "[MOD]": 8, + "[PAD]": 0, + "[RESIDUE_ERROR]": 9, + "[START]": 2, + "[UNK]": 1, + "\\": 68, + "]": 69, + "^": 70, + "^R": 621, + "^S": 851, + "^X": 331, + "^XO": 392, + "^XO*/3CO/6=O/3C": 1382, + "a": 71, + "a1": 161, + "a1*OC": 1838, + "a1*OPO*/3O/3=O": 1242, + "a1-": 319, + "a1-a": 1818, + "a1-b": 835, + "a1-b1": 916, + "a1-b2": 936, + "a1-b3~n": 1810, + "a1-b4~n": 1638, + "a1-c": 741, + "a1-c2": 1899, + "a1-c3~": 1768, + "a1-c3~n": 1352, + "a1-c4~": 1860, + "a1-c4~n": 1628, + "a1-d": 705, + "a1-d2": 1351, + "a1-d2~n": 1785, + "a1-d3~": 1708, + "a1-d3~n": 1245, + "a1-d4~": 1910, + "a1-d4~n": 1353, + "a1-e": 909, + "a1-e2": 1922, + "a1-e3~n": 1820, + "a1-e4~n": 2057, + "a1-f": 1313, + "a1-g": 1855, + "a11": 1223, + "a111": 1102, + "a1111": 1307, + "a1111h-1a": 1710, + "a1112": 825, + "a1112h-1b": 1296, + "a1112h-1x": 1482, + "a112": 797, + "a1121": 919, + "a1121A-1a": 1839, + "a1122": 410, + "a11221": 301, + "a11221h-1a": 358, + "a11221h-1x": 424, + "a11222": 645, + "a11222h-1a": 804, + "a11222h-1x": 992, + "a1122A-1b": 1053, + "a1122A-1x": 1491, + "a1122h-1": 172, + "a1122h-1a": 196, + "a1122h-1b": 250, + "a1122h-1x": 223, + "a1122m-1a": 699, + "a1122m-1b": 1723, + "a1122m-1x": 1145, + "a12": 612, + "a121": 1625, + "a1211": 787, + "a1211h-1a": 1874, + "a1211h-1b": 1496, + "a1211h-1x": 1476, + "a1211m-1a": 1936, + "a1212": 1358, + "a1221": 213, + "a1221h-1a": 1480, + "a1221h-1x": 1622, + "a1221m-1": 215, + "a1221m-1a": 245, + "a1221m-1b": 1128, + "a1221m-1x": 270, + "a1222": 997, + "a1222h-1a": 1814, + "a1222h-1b": 2091, + "a1222h-1x": 1950, + "a122h-1": 580, + "a122h-1a": 777, + "a122h-1b": 1236, + "a122h-1x": 982, + "a1d21": 1692, + "a1d21m-1a": 2004, + "a1d22": 1854, + "a1x1": 1419, + "a1x1xh-1u": 1920, + "a1x2": 1239, + "a1x2xh-1u": 1840, + "a2": 125, + "a2-": 937, + "a2-b1": 399, + "a2-c1": 1775, + "a21": 653, + "a211": 433, + "a2111": 1047, + "a2112": 159, + "a2112A-1a": 633, + "a2112A-1b": 1229, + "a2112A-1x": 798, + "a2112h-1": 166, + "a2112h-1a": 281, + "a2112h-1b": 190, + "a2112h-1x": 205, + "a2112m-1a": 687, + "a2112m-1b": 925, + "a2112m-1x": 824, + "a211h-1a": 624, + "a211h-1b": 1156, + "a211h-1x": 772, + "a212": 305, + "a2121": 546, + "a2121A-1a": 780, + "a2121A-1x": 879, + "a2121h-1b": 1792, + "a2122": 304, + "a2122A-1": 320, + "a2122A-1a": 822, + "a2122A-1b": 417, + "a2122A-1x": 532, + "a2122h-1": 146, + "a2122h-1a": 246, + "a2122h-1b": 177, + "a2122h-1x": 187, + "a2122m-1a": 1206, + "a2122m-1b": 799, + "a2122m-1x": 1098, + "a212h-1a": 815, + "a212h-1b": 451, + "a212h-1x": 527, + "a21EE": 1255, + "a21EEA-1a": 1782, + "a21EEA-1x": 1968, + "a21FF": 1347, + "a21FFA-1a": 1939, + "a21FFA-1x": 2026, + "a21d2": 1689, + "a21eE": 1274, + "a21eEA-1a": 1954, + "a21eEA-1x": 1976, + "a22": 651, + "a2211": 285, + "a2211h-1a": 1783, + "a2211h-1x": 1748, + "a2211m-1a": 314, + "a2211m-1b": 884, + "a2211m-1x": 513, + "a2212": 1022, + "a2212h-1b": 1724, + "a2212h-1x": 1788, + "a222": 689, + "a2221": 832, + "a2221h-1b": 1822, + "a2221h-1x": 2027, + "a2221m-1a": 1348, + "a2222": 707, + "a2222h-1a": 1769, + "a2222h-1b": 1114, + "a2222h-1x": 1143, + "a222h-1a": 1811, + "a222h-1b": 852, + "a222h-1x": 1575, + "a26": 1927, + "a28-b1": 1249, + "a2d": 1018, + "a2d12": 1308, + "a2d12m-1a": 1777, + "a2d22": 1878, + "a2|": 1452, + "a2|b2|": 1526, + "a2|b2|c2|": 1527, + "a2|b2|c2|d2|e2": 1535, + "a2|b2|c2|d2|e2|f2": 1815, + "a3": 736, + "a3-": 256, + "a3-b1": 262, + "a3-b2": 1903, + "a3-c1": 719, + "a3-d1": 1639, + "a3-e1": 1911, + "a3344": 812, + "a3344h-1a": 1148, + "a3344h-1x": 1868, + "a3344m-1x": 2086, + "a344": 1956, + "a4": 597, + "a4-": 222, + "a4-b1": 228, + "a4-b2": 1772, + "a4-c1": 571, + "a4-d1": 1378, + "a4-e1": 2024, + "a4334": 845, + "a4334h-1b": 1856, + "a4334h-1x": 1310, + "a4344": 914, + "a4344h-1b": 1690, + "a4344h-1x": 1479, + "a5": 483, + "a5-": 1309, + "a5-b1": 518, + "a5-c1": 1665, + "a6-": 261, + "a6-b1": 404, + "a6-b2": 1616, + "a6-b3*N": 1957, + "a6-c1": 708, + "a6-d1": 784, + "a6-e1": 951, + "a6-f1": 947, + "a6-g1": 1277, + "a6-h1": 1323, + "a6-i1": 1054, + "a6-j1": 901, + "a6-k1": 954, + "a6-l1": 816, + "a6-m1": 1113, + "a6-n1": 1164, + "a6-o1": 1165, + "a6-p1": 1477, + "a6-q1": 1757, + "a6-r1": 1263, + "a6-s1": 1871, + "a6-t1": 1879, + "a6-u1": 1844, + "a6|b": 1192, + "a7-b1": 1282, + "a8-": 1283, + "a8-b1": 1418, + "a8-b3": 2040, + "a?-": 226, + "a?-b1": 241, + "a?-b2": 1267, + "a?-c1": 972, + "a?-d1": 959, + "a?-e1": 979, + "a?-f1": 1055, + "a?-g1": 1342, + "a?-h1": 1561, + "a?-i1": 1420, + "a?-j1": 1233, + "a?-k1": 1318, + "a?-l1": 1115, + "a?-m1": 1416, + "a?-n1": 1425, + "a?-o1": 1605, + "a?-p1": 1740, + "a?-q1": 1912, + "a?-r1": 1661, + "a?-s1": 1907, + "a?-t1": 2020, + "a?|": 131, + "a?|b": 132, + "a?|b?|c": 134, + "a?|b?|c?|d": 136, + "a?|b?|c?|d?|e": 138, + "a?|b?|c?|d?|e?|f": 141, + "a?|b?|c?|d?|e?|f?|g": 143, + "a?|b?|c?|d?|e?|f?|g?|h": 145, + "a?|b?|c?|d?|e?|f?|g?|h?|i": 148, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j": 151, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k": 153, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l": 156, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m": 158, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n": 165, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o": 168, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p": 176, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|": 180, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q": 181, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|": 183, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r": 184, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s": 193, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t": 198, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u": 218, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v": 239, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w": 265, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x": 299, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y": 323, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z": 388, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A": 435, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B": 463, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C": 494, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D": 536, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E": 609, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F": 636, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G": 647, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H": 668, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I": 676, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J": 690, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K": 833, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K?|L?|M?|N": 944, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K?|L?|M?|N?|O?|P?|Q?|R?|S?|T?|U?|V": 1019, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K?|L?|M?|N?|O?|P?|Q?|R?|S?|T?|U?|V?|W?|X?|Y": 1172, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K?|L?|M?|N?|O?|P?|Q?|R?|S?|T?|U?|V?|W?|X?|Y?|Z?|aa?|ab": 1374, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?|K?|L?|M?|N?|O?|P?|Q?|R?|S?|T?|U?|V?|W?|X?|Y?|Z?|aa?|ab?|ac?|ad": 1741, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?|E?|F?|G?|H?|I?|J?": 1568, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?|D?": 1602, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?|C?": 1636, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?|B?": 1391, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?|A?": 1501, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?|z?": 989, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?|y?": 810, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?|x?": 661, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?|w?": 540, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?|v?": 428, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?|u?": 366, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?|t?": 336, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?|s?": 369, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?|r?": 355, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?|q?": 377, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?|p?": 351, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?}": 2105, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?|o?": 361, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?}": 1524, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?|n?": 380, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?}": 1478, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?|m?": 391, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?}": 1483, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?|l?": 342, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?}": 1262, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?|k?": 373, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?}": 958, + "a?|b?|c?|d?|e?|f?|g?|h?|i?|j?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?|j?": 385, + "a?|b?|c?|d?|e?|f?|g?|h?|i?}": 886, + "a?|b?|c?|d?|e?|f?|g?|h?|i?}-{a?|b?|c?|d?|e?|f?|g?|h?|i?": 421, + "a?|b?|c?|d?|e?|f?|g?|h?}": 1000, + "a?|b?|c?|d?|e?|f?|g?|h?}*OSO/3=O/3=O": 2035, + "a?|b?|c?|d?|e?|f?|g?|h?}-{a?|b?|c?|d?|e?|f?|g?|h?": 432, + "a?|b?|c?|d?|e?|f?|g?}": 1150, + "a?|b?|c?|d?|e?|f?|g?}-{a?|b?|c?|d?|e?|f?|g?": 446, + "a?|b?|c?|d?|e?|f?}": 834, + "a?|b?|c?|d?|e?|f?}*OC": 2110, + "a?|b?|c?|d?|e?|f?}*OSO/3=O/3=O": 1333, + "a?|b?|c?|d?|e?|f?}-{a?|b?|c?|d?|e?|f?": 442, + "a?|b?|c?|d?|e?}": 791, + "a?|b?|c?|d?|e?}*OC": 2034, + "a?|b?|c?|d?|e?}*OSO/3=O/3=O": 1253, + "a?|b?|c?|d?|e?}-{a?|b?|c?|d?|e?": 478, + "a?|b?|c?|d?}": 1923, + "a?|b?|c?|d?}*OC": 1951, + "a?|b?|c?|d?}*OSO/3=O/3=O": 1349, + "a?|b?|c?|d?}-{a?|b?|c?|d?": 489, + "a?|b?|c?}*OC": 1563, + "a?|b?|c?}*OCC/3=O": 1773, + "a?|b?|c?}*OSO/3=O/3=O": 2030, + "a?|b?|c?}-{a?|b?|c?": 604, + "a?|b?}*OSO/3=O/3=O": 2101, + "a?|b?}-{a?|b?": 996, + "ab": 1316, + "ac": 1833, + "ad": 485, + "ad111": 1895, + "ad112": 1681, + "ad122": 1040, + "ad122h-1": 1734, + "ad122m-1b": 1285, + "ad2": 1539, + "ad21": 1837, + "ad221": 2041, + "ad222": 945, + "ad222m-1b": 1153, + "ad222m-1x": 1845, + "ad22h-1b": 1413, + "adxx": 2037, + "al": 1914, + "am": 1707, + "an": 912, + "ar": 1784, + "ax": 473, + "ax1": 1725, + "ax11": 850, + "ax11xh-1u": 1071, + "ax12": 732, + "ax12xh-1d": 1278, + "ax12xh-1u": 1077, + "ax21": 1789, + "ax22": 1607, + "axx": 524, + "axx1": 1029, + "axx1xh-1u": 1426, + "axx2": 881, + "axx21": 1662, + "axx2xh-1d": 1528, + "axx2xh-1u": 1529, + "axxxh-1x": 1134, + "axxxx": 224, + "axxxxA-1x": 1295, + "axxxxh-1x": 231, + "axxxxm-1x": 618, + "axxxxxh-1a": 2071, + "axxxxxh-1x": 1139, + "b": 72, + "b1": 179, + "b1-": 2000, + "b1-b": 1432, + "b2": 568, + "b2-": 396, + "b2-c1": 418, + "b2-d1": 1264, + "b2|": 1516, + "b3": 1408, + "b3*N": 1857, + "b3-": 271, + "b3-c1": 291, + "b3-c2": 750, + "b3-d1": 783, + "b3-e1": 1666, + "b4-": 236, + "b4-c1": 242, + "b4-d1": 745, + "b4-e1": 981, + "b4-f1": 1260, + "b4-g1": 2072, + "b5-": 1287, + "b5-c1": 1517, + "b6-": 339, + "b6-c1": 509, + "b6-c2": 906, + "b6-d1": 1036, + "b6-e1": 1112, + "b6-f1": 966, + "b6-g1": 1141, + "b6-h1": 1979, + "b?-": 237, + "b?-c1": 251, + "b?-c2": 793, + "b?-d1": 1072, + "b?-e1": 910, + "b?-f1": 938, + "b?-g1": 1021, + "b?-h1": 1250, + "b?-i1": 1531, + "b?-j1": 1671, + "c": 73, + "c(O)": 1913, + "c1": 185, + "c2": 436, + "c2-": 402, + "c2-d1": 413, + "c2-e1": 1558, + "c2|": 1505, + "c3-": 248, + "c3-d1": 255, + "c3-d2": 1331, + "c3-e1": 779, + "c3-f1": 1826, + "c4-": 288, + "c4-d1": 321, + "c4-d2": 1983, + "c4-e1": 821, + "c4-f1": 1091, + "c4-g1": 1289, + "c4-h1": 1097, + "c4-i1": 1200, + "c4-j1": 1392, + "c4-k1": 1218, + "c4-l1": 1761, + "c5-": 955, + "c5-d1": 1130, + "c6-": 268, + "c6-d1": 593, + "c6-d2": 2008, + "c6-e1": 738, + "c6-f1": 758, + "c6-g1": 607, + "c6-h1": 566, + "c6-i1": 628, + "c6-j1": 767, + "c6-k1": 682, + "c6-l1": 898, + "c6-m1": 1314, + "c6-n1": 2005, + "c7-": 1248, + "c8-": 1364, + "c8-d2": 1484, + "c?-": 229, + "c?-d1": 258, + "c?-d2": 1161, + "c?-e1": 880, + "c?-f1": 844, + "c?-g1": 711, + "c?-h1": 649, + "c?-i1": 654, + "c?-j1": 820, + "c?-k1": 720, + "c?-l1": 894, + "c?-m1": 1038, + "c?-n1": 1445, + "c?-o1": 1608, + "c?-p1": 1992, + "c?-q1": 1945, + "c?-r1": 2066, + "cc": 1256, + "d": 74, + "d1": 186, + "d1-c3|c6": 1387, + "d11": 1489, + "d111": 1637, + "d111h": 1678, + "d1122h": 325, + "d1122h-2": 406, + "d11h": 1320, + "d12h": 1675, + "d2": 357, + "d2-": 278, + "d2-e1": 282, + "d21": 204, + "d21122h": 207, + "d21h": 1801, + "d22": 1379, + "d221h": 1679, + "d22h": 1219, + "d2h": 1776, + "d2|": 1335, + "d2|e2": 1502, + "d3-": 343, + "d3-e1": 411, + "d3-e2": 1122, + "d3-f1": 927, + "d3-g1": 1858, + "d4-": 306, + "d4-e1": 408, + "d4-f1": 842, + "d4-g1": 792, + "d4-h1": 650, + "d4-i1": 857, + "d4-j1": 1680, + "d4-k1": 2102, + "d5-": 2029, + "d6-": 480, + "d6-e1": 678, + "d6-e2": 1866, + "d6-f1": 1227, + "d6-g1": 1252, + "d6-h1": 1234, + "d6-i1": 2095, + "d7-": 1280, + "d7-e1": 1774, + "d8-": 1886, + "d8-e2": 2015, + "d?-": 247, + "d?-e1": 275, + "d?-e2": 1050, + "d?-f1": 961, + "d?-g1": 754, + "d?-h1": 640, + "d?-i1": 788, + "d?-j1": 1001, + "d?-k1": 1360, + "dd": 2036, + "dd1": 1279, + "dd1dh": 1356, + "dd2": 1291, + "dd2dh": 1361, + "dh": 700, + "di": 1198, + "dx": 1131, + "dxdh": 1268, + "dxx": 1629, + "dxxxx": 455, + "e": 75, + "e1": 200, + "e1-": 1977, + "e2": 547, + "e2-": 497, + "e2-f1": 510, + "e3-": 347, + "e3-f1": 394, + "e3-f2": 1344, + "e3-g1": 1265, + "e4-": 287, + "e4-f1": 308, + "e4-g1": 526, + "e4|": 1064, + "e4|e6|": 1451, + "e4|f4|": 1623, + "e4|f4|g": 1654, + "e6-": 638, + "e6-f1": 796, + "e6-f2": 2038, + "e6-g1": 1536, + "e6|": 1205, + "e7-": 1576, + "e7-f1": 1704, + "e?-": 276, + "e?-f1": 295, + "e?-f2": 1197, + "e?-g1": 953, + "e?-h1": 817, + "e?-i1": 1305, + "eE": 1105, + "ec": 2076, + "en": 746, + "er": 1257, + "et": 1062, + "ethyl": 1742, + "f": 76, + "f1": 211, + "f1-": 2092, + "f1-a?|b?|c?|d?|e?}": 1798, + "f2": 619, + "f2-": 591, + "f2-g1": 616, + "f3-": 395, + "f3-g1": 464, + "f3-g2": 710, + "f3-h1": 1645, + "f3|f": 999, + "f3|f6": 1035, + "f4-": 479, + "f4-g1": 511, + "f4-h1": 1201, + "f4|": 1085, + "f6-": 543, + "f6-g1": 985, + "f6-g2": 765, + "f6-h1": 1417, + "f6-i1": 1985, + "f6|g": 1213, + "f7-": 1978, + "f?-": 309, + "f?-g1": 363, + "f?-g2": 499, + "f?-h1": 1396, + "f?-i1": 1940, + "g": 77, + "g1": 232, + "g1-": 1986, + "g1-a?|b?|c?|d?|e?|f?}": 1672, + "g2": 348, + "g2-": 482, + "g2-f3|f6": 1051, + "g2-h1": 531, + "g3-": 491, + "g3-h1": 544, + "g3-h2": 1261, + "g3|g": 748, + "g3|g6": 761, + "g4-": 458, + "g4-h1": 486, + "g4-i1": 1182, + "g6-": 681, + "g6-h1": 1136, + "g6-i1": 1238, + "g6-j1": 1404, + "g8-": 1711, + "g8-h2": 1720, + "g?-": 329, + "g?-h1": 401, + "g?-h2": 885, + "g?-i1": 1178, + "g?-j1": 1513, + "gen": 983, + "genin": 1125, + "gl": 1701, + "glyc": 1770, + "h": 78, + "h-1": 120, + "h-1a": 277, + "h-1b": 303, + "h-1u": 2096, + "h-1x": 203, + "h1": 234, + "h1-": 1577, + "h11": 1904, + "h1122h": 1338, + "h12": 1946, + "h2": 315, + "h2-": 438, + "h2-g3|g6": 773, + "h2-i1": 506, + "h21": 1892, + "h2112h": 574, + "h2122h": 525, + "h22": 1850, + "h222h": 1321, + "h2h": 674, + "h3-": 572, + "h3-i1": 629, + "h3-i2": 1572, + "h4": 890, + "h4-": 443, + "h4-i1": 466, + "h4-j1": 1194, + "h4h": 1190, + "h6-": 702, + "h6-i1": 1184, + "h6-i2": 2058, + "h6-j1": 1497, + "h6-k1": 1650, + "h6-l1": 1799, + "h8-": 1375, + "h8-i2": 1380, + "h?-": 352, + "h?-i1": 409, + "h?-i2": 893, + "h?-j1": 1301, + "hU": 1048, + "hU122h": 1554, + "ha": 626, + "ha122h-2": 669, + "ha122h-2b": 830, + "ha122h-2x": 1104, + "haxx": 2017, + "hdxdh": 1269, + "hxh": 853, + "hxxxxh": 1123, + "hy": 934, + "hyd": 1137, + "hydro": 1144, + "hydroxy": 1215, + "hyl": 1698, + "i": 79, + "i1": 240, + "i1-": 1302, + "i1-a?|b?|c?|d?|e?|f?|g?|h?}": 1961, + "i1-a?|b?|c?|d?|e?}": 2077, + "i2": 627, + "i2-": 522, + "i2-j1": 549, + "i3-": 555, + "i3-j1": 658, + "i3-j2": 1041, + "i3|i": 1655, + "i3|i6": 1743, + "i4-": 471, + "i4-j1": 501, + "i4-k1": 1151, + "i6-": 713, + "i6-j1": 1359, + "i6-j2": 1472, + "i6-k1": 1673, + "i6-l1": 1405, + "i?-": 345, + "i?-j1": 415, + "i?-j2": 859, + "i?-k1": 1317, + "i?-l1": 1193, + "ic": 840, + "ic@acid": 1121, + "ic~": 1573, + "id": 861, + "ide": 1896, + "in": 684, + "in@=@SMILES@O": 2042, + "ine": 1887, + "j": 80, + "j1": 253, + "j1-": 1224, + "j1-a?|b?|c?|d?|e?|f?|g?|h?|i?}": 1905, + "j2": 585, + "j2-": 599, + "j2-i3|i6": 1764, + "j2-k1": 656, + "j3-": 655, + "j3-k1": 769, + "j3-k2": 1231, + "j3|j": 1646, + "j3|j6": 1683, + "j4-": 529, + "j4-k1": 565, + "j4-l1": 1744, + "j6-": 776, + "j6-k1": 1537, + "j6-k2": 1469, + "j6-m1": 1758, + "j6-n1": 2054, + "j?-": 405, + "j?-k1": 470, + "j?-k2": 873, + "j?-l1": 1752, + "j?-m1": 1626, + "j?-n1": 2093, + "k": 81, + "k1": 263, + "k1-": 1204, + "k2": 632, + "k2-": 567, + "k2-j3|j6": 1684, + "k2-l1": 630, + "k3-": 762, + "k3-l1": 854, + "k3-l2": 1595, + "k3|k": 1593, + "k3|k6": 1631, + "k4-": 610, + "k4-l1": 665, + "k4-m1": 1584, + "k6-": 753, + "k6-l1": 1980, + "k6-n1": 1941, + "k6-o1": 1243, + "k?-": 416, + "k?-l1": 496, + "k?-l2": 1116, + "k?-m1": 1888, + "k?-n1": 1780, + "k?-o1": 1124, + "l": 82, + "l1": 284, + "l1-": 1362, + "l2": 785, + "l2-": 685, + "l2-k3|k6": 1632, + "l2-m1": 819, + "l3-": 800, + "l3-m1": 865, + "l3-m2": 1930, + "l3|l": 2019, + "l3|l6": 2078, + "l4-": 545, + "l4-m1": 589, + "l4-n1": 1506, + "l6-": 896, + "l6-p1": 1749, + "l?-": 450, + "l?-m1": 516, + "l?-m2": 1383, + "l?-n1": 1790, + "l?-o1": 1991, + "l?-p1": 1726, + "l?-q1": 1804, + "m": 83, + "m-1": 189, + "m-1a": 274, + "m-1b": 423, + "m-1x": 318, + "m1": 302, + "m1-": 1547, + "m2": 948, + "m2-": 828, + "m2-l3|l6": 2079, + "m2-n1": 1039, + "m3-": 717, + "m3-n1": 836, + "m3-n2": 1284, + "m3|m": 1762, + "m3|m6": 1805, + "m4-": 663, + "m4-n1": 735, + "m4-o1": 1368, + "m6-": 902, + "m6-n2": 1548, + "m?-": 481, + "m?-n1": 620, + "m?-n2": 950, + "m?-p1": 1686, + "m?-q1": 2021, + "m?-r1": 1948, + "methyl": 1900, + "n": 84, + "n1": 310, + "n1*1": 1721, + "n1*1O": 677, + "n1*1O(CCCCCC$3": 1963, + "n1*1O(CCCCCC$3/6)N": 814, + "n1-": 1057, + "n1-4": 1778, + "n2": 634, + "n2*1O": 1520, + "n2*OC": 1730, + "n2-": 672, + "n2-6": 872, + "n2-8": 1343, + "n2-m3|m6": 1806, + "n2-o1": 1446, + "n3-": 807, + "n3-o1": 922, + "n3-o2": 1987, + "n3|n": 1492, + "n3|n6": 1508, + "n4-": 731, + "n4-o1": 806, + "n4-p1": 1571, + "n6-": 1403, + "n?-": 590, + "n?-o1": 734, + "n?-o2": 1220, + "n?-q1": 1893, + "o": 85, + "o1": 338, + "o1-": 1880, + "o2": 874, + "o2-": 1030, + "o2-n3|n6": 1509, + "o2-p1": 2059, + "o3-": 895, + "o3-p1": 957, + "o3|o": 1286, + "o3|o6": 1298, + "o4-": 774, + "o4-p1": 855, + "o4-q1": 1538, + "o6-": 2009, + "o?-": 637, + "o?-p1": 752, + "o?-p2": 1503, + "ogenin": 1841, + "oic@acid": 1808, + "ol": 692, + "ol@=@SMILES@C": 1823, + "ole": 1617, + "olean": 1731, + "olic~": 1917, + "on": 1163, + "op": 2025, + "os": 1786, + "p": 86, + "p1": 400, + "p2": 1158, + "p2-": 1067, + "p2-o3|o6": 1299, + "p3-": 976, + "p3-q1": 1101, + "p3|p6": 1487, + "p4-": 907, + "p4-q1": 1082, + "p4-r1": 1759, + "p6-": 1828, + "p?-": 778, + "p?-q1": 952, + "p?-q2": 1433, + "q": 87, + "q1": 448, + "q2": 1020, + "q2-": 1209, + "q2-p3|p6": 1488, + "q3-": 1126, + "q3-r1": 1246, + "q3|q6": 1695, + "q4-": 1086, + "q4-r1": 1303, + "q4-s1": 1969, + "q?-": 843, + "q?-r1": 1026, + "q?-r2": 1993, + "r": 88, + "r1": 474, + "r2": 1365, + "r2-": 1334, + "r2-q3|q6": 1696, + "r3-": 1388, + "r3-s1": 1532, + "r3|r6": 1705, + "r4-": 1195, + "r4-s1": 1384, + "r?-": 963, + "r?-s1": 1138, + "ri": 1514, + "ro": 871, + "s": 89, + "s1": 550, + "s2": 1872, + "s2-": 1409, + "s2-r3|r6": 1706, + "s3-": 1609, + "s3-t1": 1802, + "s3|s": 1728, + "s3|s6": 1735, + "s4-": 1556, + "s4-t1": 1781, + "s?-": 1173, + "s?-t1": 1428, + "st": 1407, + "t": 90, + "t1": 652, + "t2": 1901, + "t2-": 1474, + "t2-s3|s6": 1736, + "t3-": 1970, + "t?-": 1829, + "tri": 1819, + "u": 91, + "u1": 260, + "u112": 1543, + "u1121h": 2048, + "u11221h": 582, + "u11222h": 1410, + "u1122h": 286, + "u1122m": 1414, + "u12": 1186, + "u1211h": 1955, + "u1221": 328, + "u1221h": 2087, + "u1221m": 330, + "u122h": 1281, + "u2": 188, + "u2-": 1897, + "u21": 1329, + "u2112": 751, + "u2112A": 1087, + "u2112h": 252, + "u2112m": 970, + "u211h": 977, + "u212": 1154, + "u2121A": 1466, + "u2122": 664, + "u2122A": 775, + "u2122h": 219, + "u2122m": 1214, + "u212h": 683, + "u22": 1254, + "u2211": 617, + "u2211m": 631, + "u2222h": 1670, + "u222h": 1498, + "u4": 1258, + "u4344h": 1964, + "ud": 838, + "ud222m": 1981, + "ux": 913, + "ux12": 1640, + "ux12xh": 1717, + "uxx": 679, + "uxx2": 1449, + "uxx2xh": 1624, + "uxxxh": 888, + "uxxxx": 201, + "uxxxxA": 781, + "uxxxxh": 212, + "uxxxxm": 398, + "uxxxxxh": 611, + "v": 92, + "v1": 917, + "w": 93, + "w1": 1203, + "x": 94, + "x1": 759, + "x2": 737, + "x21": 1793, + "x22h": 1889, + "x2h": 1794, + "x2xh": 2031, + "xA-1": 1450, + "xA-1u": 1559, + "xh": 317, + "xh-1": 452, + "xh-1a": 1928, + "xh-1d": 722, + "xh-1u": 530, + "xh-1x": 639, + "xh-2x": 1582, + "xm": 1447, + "xm-1": 1118, + "xm-1u": 1199, + "xx": 129, + "xxh": 1846, + "xxxh": 1569, + "xxxx": 182, + "xxxxh": 1092, + "xy": 1119, + "y": 95, + "y1": 1574, + "yc": 1490, + "yl": 1994, + "z": 96, + "z1": 1667, + "zz": 1155, + "{": 97, + "{1": 695, + "{14}": 1933, + "{16}": 1585, + "{1}": 1687, + "{2": 768, + "{22": 1884, + "{2}": 1974, + "{3": 1614, + "{3}": 782, + "{3}[C@@H](O)": 1090, + "{3}[C@@H](O)CC[C@]": 1270, + "{3}[C@@H](O)CC[C@]2(C)[C@@]3": 1988, + "{3}[C@H](O)": 2097, + "{3}[C@H](O)C": 2103, + "{5": 905, + "{7": 1346, + "{8": 1641, + "|": 98, + "|f2": 1812, + "|g2": 2080, + "}": 99, + "}C": 503, + "}C(": 1754, + "}C(O)": 671, + "}C(O)=C": 1581, + "}C(O)=O)": 1369, + "}C(O)C": 2111, + "}C1": 1620, + "}CO)": 1149, + "}[C@@H](O)": 1232, + "~": 100, + "~n": 425, + "Δ": 101, + "α": 102, + "β": 103, + "β,": 2060, + "γ": 104, + "δ": 105, + "ζ": 106, + "ξ": 107, + "С": 108, + "’": 109, + "′": 110, + "″": 111, + "→": 112, + "−": 113 + } +} diff --git a/releases/2026-10-02/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py b/releases/2026-10-02/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py new file mode 100644 index 0000000000000000000000000000000000000000..ce35d1fb5983918c87aedebaf3f1b2d3949b7baa --- /dev/null +++ b/releases/2026-10-02/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py @@ -0,0 +1,287 @@ +"""Fail-closed WURCS tree channels for the review-only A5 runtime. + +The fitted BPE vocabulary is deliberately not changed here. This module only +repairs deterministic transform-time annotations. A tree depth is emitted +only when every linkage is a full, unambiguous residue-pair token, exactly one +endpoint of every bond is the anomeric donor, and the resulting directed graph +is one rooted tree. Otherwise residue tokens receive an explicit UNKNOWN +depth while the original WURCS units remain available to BPE. + +This file is an isolated review runtime. It must not be copied over the shared +``training/a5_wurcs_bpe.py`` module. +""" + +from __future__ import annotations + +from collections import defaultdict, deque +from dataclasses import dataclass +from pathlib import Path +from typing import Optional + +from training.a5_topology import node_index, node_label +from training.a5_wurcs_bpe import A5WURCSBPETokenizer, A5WURCSPreTokenizer + + +BRANCH_DEPTH_UNKNOWN = 202 +BRANCH_DEPTH_VOCAB_SIZE = 203 + +LINKAGE_NONE = 0 +LINKAGE_1_2 = 1 +LINKAGE_1_3 = 2 +LINKAGE_1_4 = 3 +LINKAGE_1_6 = 4 +LINKAGE_2_3 = 5 +LINKAGE_2_6 = 6 +LINKAGE_3_6 = 7 +LINKAGE_OTHER_EXACT = 8 +LINKAGE_UNKNOWN = 9 +LINKAGE_VOCAB_SIZE = 10 + + +@dataclass(frozen=True) +class TreeChannelAnalysis: + residue_count: int + exact_undirected_tree: bool + exact_rooted_tree: bool + failure_reason: str + depths: dict[int, int] + branch_open_counts: dict[int, int] + distance_matrix: list[list[int]] + + +def _distance_matrix(adjacency: dict[int, set[int]], count: int) -> list[list[int]]: + matrix: list[list[int]] = [] + for source in range(count): + distances = {source: 0} + queue: deque[int] = deque([source]) + while queue: + current = queue.popleft() + for neighbor in sorted(adjacency[current]): + if neighbor not in distances: + distances[neighbor] = distances[current] + 1 + queue.append(neighbor) + if len(distances) != count: + return [] + matrix.append([distances[target] for target in range(count)]) + return matrix + + +class ReviewA5WURCSPreTokenizerV3(A5WURCSPreTokenizer): + """A5 semantic units with fail-closed branch and linkage channels.""" + + def _sections( + self, wurcs: str + ) -> tuple[list[str], list[str], list[str], list[int | None]]: + parts = self._split_wurcs_sections(wurcs) + if len(parts) < 4: + return [], [], [], [] + residue_definitions = self.RESIDUE_PATTERN.findall(parts[2]) + index_list = parts[3].split("-") if parts[3] else [] + linkages = parts[4].split("_") if len(parts) > 4 and parts[4] else [] + anomeric = self._instance_anomeric_positions(residue_definitions, index_list) + return residue_definitions, index_list, linkages, anomeric + + def analyze_tree(self, wurcs: str) -> TreeChannelAnalysis: + _, index_list, linkages, anomeric = self._sections(wurcs) + count = len(index_list) + if count == 0: + return TreeChannelAnalysis(0, False, False, "missing_residue_instances", {}, {}, []) + if count == 1: + if linkages: + return TreeChannelAnalysis( + 1, False, False, "single_residue_has_linkage_tokens", {}, {}, [] + ) + return TreeChannelAnalysis(1, True, True, "", {0: 0}, {}, [[0]]) + + adjacency: dict[int, set[int]] = {index: set() for index in range(count)} + directed_children: dict[int, list[int]] = defaultdict(list) + child_parent: dict[int, int] = {} + seen_edges: set[tuple[int, int]] = set() + orientation_failure = "" + + for linkage in linkages: + match = self.A5_LINKAGE_PATTERN.fullmatch(linkage) + if match is None: + return TreeChannelAnalysis( + count, False, False, "non_exact_linkage_token", {}, {}, [] + ) + left_label, left_position, right_label, right_position = match.groups() + try: + left = node_index(left_label) - 1 + right = node_index(right_label) - 1 + except ValueError: + return TreeChannelAnalysis( + count, False, False, "invalid_residue_label", {}, {}, [] + ) + if not (0 <= left < count and 0 <= right < count) or left == right: + return TreeChannelAnalysis( + count, False, False, "invalid_residue_edge", {}, {}, [] + ) + edge = tuple(sorted((left, right))) + if edge in seen_edges: + return TreeChannelAnalysis( + count, False, False, "duplicate_residue_edge", {}, {}, [] + ) + seen_edges.add(edge) + adjacency[left].add(right) + adjacency[right].add(left) + + left_is_donor = ( + left_position != "?" + and anomeric[left] is not None + and int(left_position) == anomeric[left] + ) + right_is_donor = ( + right_position != "?" + and anomeric[right] is not None + and int(right_position) == anomeric[right] + ) + if left_is_donor == right_is_donor: + orientation_failure = "bond_donor_not_unique" + continue + child = left if left_is_donor else right + parent = right if left_is_donor else left + if child in child_parent and child_parent[child] != parent: + orientation_failure = "residue_has_multiple_parents" + continue + child_parent[child] = parent + directed_children[parent].append(child) + + if len(seen_edges) != count - 1: + return TreeChannelAnalysis( + count, False, False, "edge_count_not_residue_count_minus_one", {}, {}, [] + ) + distances = _distance_matrix(adjacency, count) + if not distances: + return TreeChannelAnalysis( + count, False, False, "residue_graph_disconnected", {}, {}, [] + ) + if orientation_failure: + return TreeChannelAnalysis( + count, True, False, orientation_failure, {}, {}, distances + ) + + roots = sorted(set(range(count)) - set(child_parent)) + if len(roots) != 1: + return TreeChannelAnalysis( + count, True, False, "root_not_unique", {}, {}, distances + ) + depths = {roots[0]: 0} + queue: deque[int] = deque([roots[0]]) + while queue: + parent = queue.popleft() + for child in sorted(directed_children.get(parent, [])): + if child in depths: + return TreeChannelAnalysis( + count, True, False, "directed_cycle", {}, {}, distances + ) + depths[child] = depths[parent] + 1 + queue.append(child) + if len(depths) != count: + return TreeChannelAnalysis( + count, True, False, "directed_tree_disconnected", {}, {}, distances + ) + if max(depths.values()) >= BRANCH_DEPTH_UNKNOWN: + return TreeChannelAnalysis( + count, True, False, "exact_depth_collides_with_unknown_id", {}, {}, distances + ) + branch_counts = { + parent: len(children) - 1 + for parent, children in directed_children.items() + if len(children) > 1 + } + return TreeChannelAnalysis( + count, True, True, "", depths, branch_counts, distances + ) + + @staticmethod + def exact_linkage_type(linkage: str) -> int: + match = ReviewA5WURCSPreTokenizerV3.A5_LINKAGE_PATTERN.fullmatch(linkage) + if match is None: + return LINKAGE_UNKNOWN + _, left_position, _, right_position = match.groups() + if left_position == "?" or right_position == "?": + return LINKAGE_UNKNOWN + positions = tuple(sorted((int(left_position), int(right_position)))) + mapping = { + (1, 2): LINKAGE_1_2, + (1, 3): LINKAGE_1_3, + (1, 4): LINKAGE_1_4, + (1, 6): LINKAGE_1_6, + (2, 3): LINKAGE_2_3, + (2, 6): LINKAGE_2_6, + (3, 6): LINKAGE_3_6, + } + return mapping.get(positions, LINKAGE_OTHER_EXACT) + + def pre_tokenize(self, wurcs: str) -> list[dict]: + # Reuse only the already-audited semantic WURCS unit extraction. All + # v2 branch markers, depths, linkage classes, and distance matrices are + # discarded and rebuilt below. + inherited = super().pre_tokenize(wurcs) + units = [dict(unit) for unit in inherited if unit.get("text") != "[BRANCH_OPEN]"] + analysis = self.analyze_tree(wurcs) + first_unit_for_residue: set[int] = set() + repaired: list[dict] = [] + for unit in units: + unit.pop("distance_matrix", None) + residue_id = int(unit.get("residue_id", -1)) + unit["linkage_type"] = LINKAGE_NONE + if residue_id >= 0: + depth = ( + analysis.depths[residue_id] + if analysis.exact_rooted_tree + else BRANCH_DEPTH_UNKNOWN + ) + unit["branch_depth"] = depth + if residue_id not in first_unit_for_residue: + for _ in range(analysis.branch_open_counts.get(residue_id, 0)): + repaired.append( + { + "text": "[BRANCH_OPEN]", + "type": "special", + "residue_id": -1, + "branch_depth": depth, + "linkage_type": LINKAGE_NONE, + } + ) + first_unit_for_residue.add(residue_id) + else: + unit["branch_depth"] = 0 + if unit.get("type") == "linkage": + unit["linkage_type"] = self.exact_linkage_type(str(unit["text"])) + repaired.append(unit) + + if repaired: + repaired[0]["distance_matrix"] = analysis.distance_matrix + repaired[0]["tree_channels_valid"] = analysis.exact_rooted_tree + repaired[0]["tree_channel_failure_reason"] = analysis.failure_reason + return repaired + + +class ReviewA5WURCSBPETokenizerV3(A5WURCSBPETokenizer): + """Existing train-only BPE vocabulary with repaired transform channels.""" + + def __init__(self, vocab_path: Optional[str | Path] = None) -> None: + super().__init__(vocab_path) + self.pre_tokenizer = ReviewA5WURCSPreTokenizerV3() + + def tokenize_sequence(self, wurcs: str, max_length: int = 256) -> dict: + encoded = super().tokenize_sequence(wurcs, max_length=max_length) + analysis = self.pre_tokenizer.analyze_tree(wurcs) + encoded["tree_channels_valid"] = analysis.exact_rooted_tree + encoded["tree_channel_failure_reason"] = analysis.failure_reason + return encoded + + +__all__ = [ + "BRANCH_DEPTH_UNKNOWN", + "BRANCH_DEPTH_VOCAB_SIZE", + "LINKAGE_NONE", + "LINKAGE_OTHER_EXACT", + "LINKAGE_UNKNOWN", + "LINKAGE_VOCAB_SIZE", + "ReviewA5WURCSBPETokenizerV3", + "ReviewA5WURCSPreTokenizerV3", + "TreeChannelAnalysis", +] diff --git a/releases/2026-10-02/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py b/releases/2026-10-02/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py new file mode 100644 index 0000000000000000000000000000000000000000..03a3fe5a3680355dd47dfbda69e58efb565ece06 --- /dev/null +++ b/releases/2026-10-02/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py @@ -0,0 +1,180 @@ +"""Residue-level shortest-path targets used by the A5 topology objective.""" + +from __future__ import annotations + +import hashlib +import json +import re +from collections import deque + + +EDGE_RE = re.compile( + r"(?P[A-Za-z]+)(?P [0-9?]+)-(?P [A-Za-z]+)(?P [0-9?]+)" +) +RESDEF_RE = re.compile(r"\[([^\]]*)\]") +WURCS_RES_INDEX_ALPHABET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + + +def node_label(index: int) -> str: + if index < 1: + raise ValueError("WURCS residue indices are one-based") + letters = WURCS_RES_INDEX_ALPHABET + base = len(letters) + index -= 1 + label = "" + while True: + label = letters[index % base] + label + index = index // base - 1 + if index < 0: + return label + + +def node_index(label: str) -> int: + if not label: + raise ValueError("WURCS residue label cannot be empty") + base = len(WURCS_RES_INDEX_ALPHABET) + value = 0 + for character in label: + try: + digit = WURCS_RES_INDEX_ALPHABET.index(character) + 1 + except ValueError as error: + raise ValueError(f"Invalid WURCS residue label: {label}") from error + value = value * base + digit + return value + + +def split_wurcs_sections(body: str) -> list[str]: + sections: list[str] = [] + current: list[str] = [] + bracket_depth = 0 + for character in body: + if character == "[": + bracket_depth += 1 + elif character == "]" and bracket_depth: + bracket_depth -= 1 + if character == "/" and bracket_depth == 0: + sections.append("".join(current)) + current = [] + else: + current.append(character) + sections.append("".join(current)) + return sections + + +def split_wurcs(wurcs: str) -> tuple[list[str], dict[str, str], str]: + if not wurcs.startswith("WURCS=2.0/"): + return [], {}, "" + parts = split_wurcs_sections(wurcs[len("WURCS=2.0/") :]) + if len(parts) < 4: + return [], {}, "" + residue_definitions = RESDEF_RE.findall(parts[1]) + sequence = parts[2].split("-") if parts[2] else [] + node_to_residue: dict[str, str] = {} + for index, value in enumerate(sequence, start=1): + try: + residue = residue_definitions[int(value) - 1] + except (ValueError, IndexError): + residue = "" + node_to_residue[node_label(index)] = residue + return residue_definitions, node_to_residue, "/".join(parts[3:]) + + +def _hash_fields(*values: object) -> str: + payload = "\x1f".join(str(value) for value in values).encode("utf-8") + return hashlib.sha256(payload).hexdigest() + + +def build_residue_shortest_path(wurcs: str) -> dict[str, object]: + """Build the same immutable residue target frozen by the P0/P1 audit.""" + _, node_to_residue, linkage_section = split_wurcs(wurcs) + node_ids = list(node_to_residue) + if not node_ids or any(not node_to_residue[node] for node in node_ids): + return _failure("missing_or_unmapped_residue_sequence", len(node_ids), 0) + if len(node_ids) < 2: + return _failure( + "fewer_than_two_residues_no_off_diagonal_target", len(node_ids), 0 + ) + + adjacency: dict[str, set[str]] = {node: set() for node in node_ids} + parsed_edges: list[tuple[str, str]] = [] + unparsed_tokens: list[str] = [] + for token in linkage_section.split("_") if linkage_section else []: + match = EDGE_RE.fullmatch(token) + if not match: + if token: + unparsed_tokens.append(token) + continue + left, right = match.group("n1"), match.group("n2") + if left not in adjacency or right not in adjacency or left == right: + unparsed_tokens.append(token) + continue + parsed_edges.append(tuple(sorted((left, right)))) + adjacency[left].add(right) + adjacency[right].add(left) + + reason = "" + if unparsed_tokens: + reason = "one_or_more_edge_tokens_not_unambiguous_residue_pairs" + elif len(set(parsed_edges)) != len(parsed_edges): + reason = "duplicate_residue_edge" + elif len(parsed_edges) != len(node_ids) - 1: + reason = "edge_count_not_residue_count_minus_one" + + seen = {node_ids[0]} + queue = deque([node_ids[0]]) + while queue: + node = queue.popleft() + for neighbor in sorted(adjacency[node]): + if neighbor not in seen: + seen.add(neighbor) + queue.append(neighbor) + if not reason and len(seen) != len(node_ids): + reason = "residue_graph_disconnected" + if reason: + return _failure(reason, len(node_ids), len(parsed_edges)) + + matrix: list[list[int]] = [] + for source in node_ids: + distance = {source: 0} + queue = deque([source]) + while queue: + node = queue.popleft() + for neighbor in sorted(adjacency[node]): + if neighbor not in distance: + distance[neighbor] = distance[node] + 1 + queue.append(neighbor) + matrix.append([distance[target] for target in node_ids]) + + matrix_payload = json.dumps(matrix, separators=(",", ":")) + matrix_sha256 = hashlib.sha256(matrix_payload.encode("utf-8")).hexdigest() + return { + "target_valid": True, + "failure_reason": "", + "residue_count": len(node_ids), + "parsed_edge_count": len(parsed_edges), + "valid_unordered_pair_count": len(node_ids) * (len(node_ids) - 1) // 2, + "matrix": matrix, + "matrix_sha256": matrix_sha256, + "target_identity_sha256": _hash_fields( + "residue_shortest_path_v2", + wurcs, + matrix_sha256, + len(node_ids), + len(parsed_edges), + ), + "schema": "residue_shortest_path_v2", + } + + +def _failure(reason: str, residues: int, edges: int) -> dict[str, object]: + return { + "target_valid": False, + "failure_reason": reason, + "residue_count": residues, + "parsed_edge_count": edges, + "valid_unordered_pair_count": 0, + "matrix": [], + "matrix_sha256": "", + "target_identity_sha256": "", + "schema": "residue_shortest_path_v2", + } diff --git a/releases/2026-10-02/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py b/releases/2026-10-02/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py new file mode 100644 index 0000000000000000000000000000000000000000..4ca91c571f8a538e026b1c086a14d81a0e3d59db --- /dev/null +++ b/releases/2026-10-02/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py @@ -0,0 +1,368 @@ +"""Deterministic train-only WURCS BPE utilities for A5.""" + +from __future__ import annotations + +import re +from collections import Counter, defaultdict +from pathlib import Path +from typing import Iterable, Optional + +from .a5_topology import node_index, node_label + +try: + from bert_training_v4.downstream_tasks.utils.wurcs_bpe_tokenizer import ( + WURCSBPETokenizer, + WURCSPreTokenizer, + ) +except ImportError: + from ..bert_training_v4.downstream_tasks.utils.wurcs_bpe_tokenizer import ( + WURCSBPETokenizer, + WURCSPreTokenizer, + ) + + +SUBMITTED_FIT_ALPHABET = tuple( + "#$%()*-./0123456789<=>?ABCDEFGHIJKLMNOPQRSTUVWXYZ^abcdefghijklmnopqrstuvwxyz{|}~" +) + + +class _TopLevelBracketPattern: + """Expose regex-like findall while respecting nested SMILES brackets.""" + + @staticmethod + def findall(text: str) -> list[str]: + residues: list[str] = [] + depth = 0 + start = -1 + for index, character in enumerate(text): + if character == "[": + if depth == 0: + start = index + 1 + depth += 1 + elif character == "]" and depth: + depth -= 1 + if depth == 0 and start >= 0: + residues.append(text[start:index]) + start = -1 + if depth: + return [] + return residues + + +class A5WURCSPreTokenizer(WURCSPreTokenizer): + """Submitted pre-tokenizer with nested bracket-safe residue extraction.""" + + A5_LINKAGE_PATTERN = re.compile( + r"([A-Za-z]+)(\d+|\?)-([A-Za-z]+)(\d+|\?)" + ) + A5_ANOMERIC_PATTERN = re.compile(r"-([0-9]+)([abuxo])(?:_|$)") + + def __init__(self) -> None: + super().__init__() + self.RESIDUE_PATTERN = _TopLevelBracketPattern() + + def _split_wurcs_sections(self, wurcs: str) -> list[str]: + sections = super()._split_wurcs_sections(wurcs) + if len(sections) <= 5: + return sections + # WURCS LIN modifications may contain unbracketed slashes. The format + # has exactly five top-level sections, so every trailing fragment + # belongs to the linkage section rather than a new section. + return sections[:4] + ["/".join(sections[4:])] + + def _instance_anomeric_positions( + self, residue_definitions: list[str], index_list: list[str] + ) -> list[int | None]: + positions: list[int | None] = [] + for definition_index in index_list: + try: + residue_definition = residue_definitions[int(definition_index) - 1] + except (IndexError, ValueError): + positions.append(None) + continue + match = self.A5_ANOMERIC_PATTERN.search(residue_definition) + positions.append(int(match.group(1)) if match is not None else None) + return positions + + def _analyze_a5_tree( + self, + linkages: list[str], + residue_count: int, + anomeric_positions: list[int | None] | None = None, + ) -> tuple[dict[str, int], dict[str, int], dict[int, list[int]]]: + branch_points: dict[str, int] = defaultdict(int) + children: dict[str, list[str]] = defaultdict(list) + all_residues: set[str] = set() + adjacency: dict[int, list[int]] = defaultdict(list) + for linkage in linkages: + match = self.A5_LINKAGE_PATTERN.match(linkage) + if not match: + continue + left, left_position, right, right_position = match.groups() + try: + left_index = node_index(left) - 1 + right_index = node_index(right) - 1 + except ValueError: + continue + if not ( + 0 <= left_index < residue_count + and 0 <= right_index < residue_count + and left_index != right_index + ): + continue + parent, child = left, right + if anomeric_positions is not None: + left_anomeric = anomeric_positions[left_index] + right_anomeric = anomeric_positions[right_index] + left_is_donor = ( + left_position != "?" + and left_anomeric is not None + and int(left_position) == left_anomeric + ) + right_is_donor = ( + right_position != "?" + and right_anomeric is not None + and int(right_position) == right_anomeric + ) + if left_is_donor and not right_is_donor: + parent, child = right, left + elif right_is_donor and not left_is_donor: + parent, child = left, right + children[parent].append(child) + all_residues.update((parent, child)) + adjacency[left_index].append(right_index) + adjacency[right_index].append(left_index) + + for residue, child_labels in children.items(): + if len(child_labels) > 1: + branch_points[residue] = len(child_labels) - 1 + child_set = {child for values in children.values() for child in values} + roots = all_residues - child_set + root = min(roots, key=node_index) if roots else node_label(1) + depths = {root: 0} + queue = [root] + while queue: + current = queue.pop(0) + for child in children.get(current, []): + if child not in depths: + depths[child] = depths[current] + 1 + queue.append(child) + return dict(branch_points), depths, adjacency + + def _a5_linkage_type(self, linkage: str) -> int: + match = self.A5_LINKAGE_PATTERN.match(linkage) + if not match: + return 8 + _, from_position, _, to_position = match.groups() + try: + positions = (int(from_position), int(to_position)) + except ValueError: + return 8 + linkage_types = { + (1, 2): 0, + (2, 1): 0, + (1, 3): 1, + (3, 1): 1, + (1, 4): 2, + (4, 1): 2, + (1, 6): 3, + (6, 1): 3, + (2, 3): 4, + (3, 2): 4, + (2, 6): 5, + (6, 2): 5, + (3, 6): 6, + (6, 3): 6, + } + return linkage_types.get(positions, 7) + + def pre_tokenize(self, wurcs: str) -> list[dict]: + # Reuse the submitted semantic split, then correct only its tree + # annotations. This keeps the BPE unit text and special-token behavior. + inherited_units = super().pre_tokenize(wurcs) + try: + parts = self._split_wurcs_sections(wurcs) + index_list = parts[3].split("-") if len(parts) > 3 and parts[3] else [] + linkages = parts[4].split("_") if len(parts) > 4 and parts[4] else [] + residue_definitions = self.RESIDUE_PATTERN.findall(parts[2]) + anomeric_positions = self._instance_anomeric_positions( + residue_definitions, index_list + ) + branch_points, depths, adjacency = self._analyze_a5_tree( + linkages, len(index_list), anomeric_positions + ) + except (IndexError, ValueError): + return inherited_units + + units: list[dict] = [] + opened_residues: set[int] = set() + for inherited in inherited_units: + if inherited.get("text") == "[BRANCH_OPEN]": + continue + unit = dict(inherited) + residue_id = int(unit.get("residue_id", -1)) + if residue_id >= 0: + label = node_label(residue_id + 1) + if residue_id not in opened_residues: + for _ in range(branch_points.get(label, 0)): + units.append( + { + "text": "[BRANCH_OPEN]", + "type": "special", + "residue_id": -1, + "branch_depth": depths.get(label, 0), + "linkage_type": 0, + } + ) + opened_residues.add(residue_id) + unit["branch_depth"] = depths.get(label, 0) + elif unit.get("type") == "linkage": + unit["linkage_type"] = self._a5_linkage_type(str(unit["text"])) + units.append(unit) + + if units: + units[0]["distance_matrix"] = self._compute_distance_matrix( + adjacency, len(index_list) + ) + return units + + +class A5WURCSBPETokenizer(WURCSBPETokenizer): + """Train-only BPE with a fit-derived alphabet and deterministic merge ties.""" + + def __init__(self, vocab_path: Optional[str | Path] = None) -> None: + super().__init__(str(vocab_path) if vocab_path is not None else None) + self.pre_tokenizer = A5WURCSPreTokenizer() + + @classmethod + def train_from_fit_corpus( + cls, + wurcs_strings: Iterable[str], + num_merges: int = 2000, + output_path: Optional[str | Path] = None, + min_frequency: int = 2, + max_token_length: Optional[int] = None, + ) -> "A5WURCSBPETokenizer": + tokenizer = cls() + pre_tokenizer = tokenizer.pre_tokenizer + unit_counts: Counter[str] = Counter() + for wurcs in wurcs_strings: + for unit in pre_tokenizer.pre_tokenize(wurcs): + if unit["type"] != "special": + unit_counts[unit["text"]] += 1 + + # The submitted tokenizer learned the base character inventory from its + # corpus. Preserve that behavior, but fit it from training parents only. + tokenizer.fit_alphabet = tuple( + sorted({char for unit in unit_counts for char in unit}) + ) + + next_id = len(tokenizer.special_tokens) + for char in tokenizer.fit_alphabet: + tokenizer.token_to_id[char] = next_id + tokenizer.id_to_token[next_id] = char + next_id += 1 + + word_freqs: dict[tuple[str, ...], int] = { + tuple(unit): count + for unit, count in sorted(unit_counts.items()) + if count >= min_frequency + } + merges: list[tuple[str, str]] = [] + for _ in range(num_merges): + pair_counts: Counter[tuple[str, str]] = Counter() + for word, frequency in word_freqs.items(): + for index in range(len(word) - 1): + pair_counts[(word[index], word[index + 1])] += frequency + candidates = [ + (pair, count) + for pair, count in pair_counts.items() + if count >= min_frequency + and ( + max_token_length is None + or len(pair[0]) + len(pair[1]) <= max_token_length + ) + ] + if not candidates: + break + best_pair, _ = min( + candidates, + key=lambda item: (-item[1], item[0][0], item[0][1]), + ) + new_token = best_pair[0] + best_pair[1] + merges.append(best_pair) + tokenizer.token_to_id[new_token] = next_id + tokenizer.id_to_token[next_id] = new_token + next_id += 1 + + merged_freqs: Counter[tuple[str, ...]] = Counter() + for word, frequency in word_freqs.items(): + merged_word: list[str] = [] + index = 0 + while index < len(word): + if ( + index < len(word) - 1 + and word[index] == best_pair[0] + and word[index + 1] == best_pair[1] + ): + merged_word.append(new_token) + index += 2 + else: + merged_word.append(word[index]) + index += 1 + merged_freqs[tuple(merged_word)] += frequency + word_freqs = dict(merged_freqs) + + tokenizer.merges = merges + if output_path is not None: + tokenizer.save_vocab(str(output_path)) + return tokenizer + + def tokenize_sequence(self, wurcs: str, max_length: int = 256) -> dict: + units = self.pre_tokenizer.pre_tokenize(wurcs) + tokens: list[str] = [] + token_ids: list[int] = [] + residue_ids: list[int] = [] + branch_depths: list[int] = [] + linkage_types: list[int] = [] + + for unit in units: + unit_tokens = ( + [unit["text"]] + if unit["type"] == "special" + else self.apply_bpe(unit["text"]) + ) + for token in unit_tokens: + tokens.append(token) + token_ids.append( + self.token_to_id.get(token, self.token_to_id["[UNK]"]) + ) + residue_ids.append(int(unit["residue_id"])) + branch_depths.append(int(unit["branch_depth"])) + linkage_types.append(int(unit["linkage_type"])) + + if len(tokens) > max_length: + tokens = tokens[: max_length - 1] + ["[END]"] + token_ids = token_ids[: max_length - 1] + [self.token_to_id["[END]"]] + residue_ids = residue_ids[: max_length - 1] + [-1] + branch_depths = branch_depths[: max_length - 1] + [0] + linkage_types = linkage_types[: max_length - 1] + [0] + + length = len(tokens) + attention_mask = [1] * length + padding = max_length - length + tokens.extend(["[PAD]"] * padding) + token_ids.extend([self.token_to_id["[PAD]"]] * padding) + residue_ids.extend([-1] * padding) + branch_depths.extend([0] * padding) + linkage_types.extend([0] * padding) + attention_mask.extend([0] * padding) + return { + "tokens": tokens, + "token_ids": token_ids, + "residue_ids": residue_ids, + "branch_depths": branch_depths, + "linkage_types": linkage_types, + "attention_mask": attention_mask, + "length": length, + } diff --git a/releases/2026-10-02/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/__init__.py b/releases/2026-10-02/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b947a53482b1106aa5fdaa919cc02ae35dd8c391 --- /dev/null +++ b/releases/2026-10-02/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/__init__.py @@ -0,0 +1,3 @@ +# Model module +from .multimodal_glycan_bert_v3 import MultimodalGlycanBERT, MultimodalGlycanBERTConfig + diff --git a/releases/2026-10-02/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/glycan_bert.py b/releases/2026-10-02/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/glycan_bert.py new file mode 100644 index 0000000000000000000000000000000000000000..bc2ca3ff916d1016b30e82c22dea19762f613f44 --- /dev/null +++ b/releases/2026-10-02/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/glycan_bert.py @@ -0,0 +1,303 @@ +""" +Glycan BERT Model + +Transformer-based masked language model for glycan structures. +Based on BERT/ESM2 architecture adapted for atomic glycan tokenization. +""" + +import torch +import torch.nn as nn +import math + + +class GlycanBERTConfig: + """Configuration for GlycanBERT.""" + + def __init__( + self, + vocab_size: int = 102, + hidden_size: int = 384, + num_hidden_layers: int = 6, + num_attention_heads: int = 6, + intermediate_size: int = 1536, + hidden_dropout_prob: float = 0.1, + attention_probs_dropout_prob: float = 0.1, + max_position_embeddings: int = 512, + layer_norm_eps: float = 1e-12, + pad_token_id: int = 0, + mask_token_id: int = 4, + initializer_range: float = 0.02 + ): + self.vocab_size = vocab_size + self.hidden_size = hidden_size + self.num_hidden_layers = num_hidden_layers + self.num_attention_heads = num_attention_heads + self.intermediate_size = intermediate_size + self.hidden_dropout_prob = hidden_dropout_prob + self.attention_probs_dropout_prob = attention_probs_dropout_prob + self.max_position_embeddings = max_position_embeddings + self.layer_norm_eps = layer_norm_eps + self.pad_token_id = pad_token_id + self.mask_token_id = mask_token_id + self.initializer_range = initializer_range + + +class GlycanBERTEmbeddings(nn.Module): + """ + Embeddings for glycan tokens including token and positional embeddings. + """ + + def __init__(self, config: GlycanBERTConfig): + super().__init__() + self.token_embeddings = nn.Embedding(config.vocab_size, config.hidden_size, padding_idx=config.pad_token_id) + self.position_embeddings = nn.Embedding(config.max_position_embeddings, config.hidden_size) + + self.LayerNorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.dropout = nn.Dropout(config.hidden_dropout_prob) + + # position_ids (1, max_seq_len) is contiguous in memory and exported when serialized + self.register_buffer("position_ids", torch.arange(config.max_position_embeddings).expand((1, -1))) + + def forward(self, input_ids: torch.Tensor) -> torch.Tensor: + """ + Args: + input_ids: Tensor of shape (batch_size, seq_len) + + Returns: + Embeddings of shape (batch_size, seq_len, hidden_size) + """ + batch_size, seq_len = input_ids.shape + + # Token embeddings + token_embeds = self.token_embeddings(input_ids) + + # Position embeddings + position_ids = self.position_ids[:, :seq_len] + position_embeds = self.position_embeddings(position_ids) + + # Combine + embeddings = token_embeds + position_embeds + embeddings = self.LayerNorm(embeddings) + embeddings = self.dropout(embeddings) + + return embeddings + + +class GlycanBERTAttention(nn.Module): + """Multi-head self-attention.""" + + def __init__(self, config: GlycanBERTConfig): + super().__init__() + assert config.hidden_size % config.num_attention_heads == 0 + + self.num_attention_heads = config.num_attention_heads + self.attention_head_size = config.hidden_size // config.num_attention_heads + self.all_head_size = self.num_attention_heads * self.attention_head_size + + self.query = nn.Linear(config.hidden_size, self.all_head_size) + self.key = nn.Linear(config.hidden_size, self.all_head_size) + self.value = nn.Linear(config.hidden_size, self.all_head_size) + + self.dropout = nn.Dropout(config.attention_probs_dropout_prob) + + def transpose_for_scores(self, x: torch.Tensor) -> torch.Tensor: + """Reshape for multi-head attention.""" + new_shape = x.size()[:-1] + (self.num_attention_heads, self.attention_head_size) + x = x.view(*new_shape) + return x.permute(0, 2, 1, 3) # (batch, heads, seq_len, head_size) + + def forward( + self, + hidden_states: torch.Tensor, + attention_mask: torch.Tensor = None + ) -> torch.Tensor: + """ + Args: + hidden_states: (batch_size, seq_len, hidden_size) + attention_mask: (batch_size, seq_len) - 1 for valid, 0 for padding + + Returns: + Attention output: (batch_size, seq_len, hidden_size) + """ + batch_size, seq_len, _ = hidden_states.shape + + # Linear projections + query_layer = self.transpose_for_scores(self.query(hidden_states)) + key_layer = self.transpose_for_scores(self.key(hidden_states)) + value_layer = self.transpose_for_scores(self.value(hidden_states)) + + # Attention scores + attention_scores = torch.matmul(query_layer, key_layer.transpose(-1, -2)) + attention_scores = attention_scores / math.sqrt(self.attention_head_size) + + # Apply attention mask + if attention_mask is not None: + # Convert mask to additive mask + attention_mask = attention_mask.unsqueeze(1).unsqueeze(2) # (batch, 1, 1, seq_len) + attention_mask = (1.0 - attention_mask) * -10000.0 + attention_scores = attention_scores + attention_mask + + # Attention probabilities + attention_probs = nn.functional.softmax(attention_scores, dim=-1) + attention_probs = self.dropout(attention_probs) + + # Apply attention to values + context_layer = torch.matmul(attention_probs, value_layer) + + # Reshape back + context_layer = context_layer.permute(0, 2, 1, 3).contiguous() + new_shape = context_layer.size()[:-2] + (self.all_head_size,) + context_layer = context_layer.view(*new_shape) + + return context_layer + + +class GlycanBERTLayer(nn.Module): + """Single transformer layer.""" + + def __init__(self, config: GlycanBERTConfig): + super().__init__() + self.attention = GlycanBERTAttention(config) + self.attention_output = nn.Linear(config.hidden_size, config.hidden_size) + self.attention_layer_norm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + + self.intermediate = nn.Linear(config.hidden_size, config.intermediate_size) + self.output = nn.Linear(config.intermediate_size, config.hidden_size) + self.output_layer_norm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + + self.dropout = nn.Dropout(config.hidden_dropout_prob) + + def forward( + self, + hidden_states: torch.Tensor, + attention_mask: torch.Tensor = None + ) -> torch.Tensor: + """ + Args: + hidden_states: (batch_size, seq_len, hidden_size) + attention_mask: (batch_size, seq_len) + + Returns: + Output: (batch_size, seq_len, hidden_size) + """ + # Self-attention + attention_output = self.attention(hidden_states, attention_mask) + attention_output = self.attention_output(attention_output) + attention_output = self.dropout(attention_output) + + # Add & Norm + hidden_states = self.attention_layer_norm(hidden_states + attention_output) + + # Feed-forward + intermediate_output = self.intermediate(hidden_states) + intermediate_output = nn.functional.gelu(intermediate_output) + + layer_output = self.output(intermediate_output) + layer_output = self.dropout(layer_output) + + # Add & Norm + layer_output = self.output_layer_norm(hidden_states + layer_output) + + return layer_output + + +class GlycanBERT(nn.Module): + """ + Glycan BERT model for masked language modeling. + """ + + def __init__(self, config: GlycanBERTConfig): + super().__init__() + self.config = config + + # Embeddings + self.embeddings = GlycanBERTEmbeddings(config) + + # Transformer layers + self.layers = nn.ModuleList([GlycanBERTLayer(config) for _ in range(config.num_hidden_layers)]) + + # MLM head + self.mlm_head = nn.Linear(config.hidden_size, config.vocab_size) + + # Initialize weights + self.apply(self._init_weights) + + def _init_weights(self, module): + """Initialize weights.""" + if isinstance(module, nn.Linear): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.bias is not None: + module.bias.data.zero_() + elif isinstance(module, nn.Embedding): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.padding_idx is not None: + module.weight.data[module.padding_idx].zero_() + elif isinstance(module, nn.LayerNorm): + module.bias.data.zero_() + module.weight.data.fill_(1.0) + + def forward( + self, + input_ids: torch.Tensor, + attention_mask: torch.Tensor = None, + labels: torch.Tensor = None + ): + """ + Args: + input_ids: (batch_size, seq_len) + attention_mask: (batch_size, seq_len) - 1 for valid, 0 for padding + labels: (batch_size, seq_len) - token IDs to predict, -100 for positions to ignore + + Returns: + If labels provided: (loss, logits) + Else: logits + """ + # Create attention mask if not provided + if attention_mask is None: + attention_mask = (input_ids != self.config.pad_token_id).float() + + # Embeddings + hidden_states = self.embeddings(input_ids) + + # Transformer layers + for layer in self.layers: + hidden_states = layer(hidden_states, attention_mask) + + # MLM prediction + logits = self.mlm_head(hidden_states) + + # Calculate loss if labels provided + loss = None + if labels is not None: + loss_fct = nn.CrossEntropyLoss() # -100 is ignored + loss = loss_fct(logits.view(-1, self.config.vocab_size), labels.view(-1)) + + if loss is not None: + return loss, logits + return logits + + def get_embeddings( + self, + input_ids: torch.Tensor, + attention_mask: torch.Tensor = None + ) -> torch.Tensor: + """ + Get contextualized embeddings (for downstream tasks). + + Args: + input_ids: (batch_size, seq_len) + attention_mask: (batch_size, seq_len) + + Returns: + Embeddings: (batch_size, seq_len, hidden_size) + """ + if attention_mask is None: + attention_mask = (input_ids != self.config.pad_token_id).float() + + hidden_states = self.embeddings(input_ids) + + for layer in self.layers: + hidden_states = layer(hidden_states, attention_mask) + + return hidden_states + diff --git a/releases/2026-10-02/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/multimodal_glycan_bert_v3.py b/releases/2026-10-02/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/multimodal_glycan_bert_v3.py new file mode 100644 index 0000000000000000000000000000000000000000..dc52d2c5d8b48df2251bc9001c59b0d694482364 --- /dev/null +++ b/releases/2026-10-02/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/multimodal_glycan_bert_v3.py @@ -0,0 +1,1084 @@ +""" +Multimodal Glycan BERT Model v3 + +Extends GlycanBERT to handle three modalities: +- Sequence (WURCS atomic tokenization) +- MS (mass spectrometry peaks, RT, intensity) +- 3D structure (VQ-VAE discrete tokens, 4 per residue) + +Each modality has its own encoder, with cross-attention for sequence-structure alignment. +""" + +import torch +import torch.nn as nn +from typing import Dict, Optional, Tuple +import math + +try: + from .glycan_bert import GlycanBERTConfig, GlycanBERTEmbeddings, GlycanBERTLayer +except ImportError: + from glycan_bert import GlycanBERTConfig, GlycanBERTEmbeddings, GlycanBERTLayer + + +class ConvGlycanBERTEmbeddings(nn.Module): + """ + Improved Convolutional front-end that mixes local WURCS context before the Transformer. + + Key improvements over original: + 1. Position embeddings added BEFORE convolution (provides spatial context to conv) + 2. Residual connection (conv enriches embeddings rather than replacing them) + 3. Multi-scale convolutions (kernel sizes 3, 5, 7) for better receptive field + 4. Proper layer normalization on the residual path + """ + + def __init__(self, config): + super().__init__() + self.token_embeddings = nn.Embedding( + config.vocab_size, config.hidden_size, padding_idx=config.pad_token_id + ) + self.position_embeddings = nn.Embedding( + config.max_position_embeddings, config.hidden_size + ) + + # NEW: Branch depth embeddings - encodes depth in glycan tree (0=root, 1=child, etc.) + max_branch_depth = getattr(config, "max_branch_depth", 8) + self.branch_embeddings = nn.Embedding(max_branch_depth, config.hidden_size) + + # NEW: Linkage type embeddings - encodes chemistry of glycosidic bond + # 0=none, 1=1-3, 2=1-4, 3=1-6, etc. + num_linkage_types = getattr(config, "num_linkage_types", 9) + self.linkage_embeddings = nn.Embedding(num_linkage_types, config.hidden_size) + + # Multi-scale convolutions for different receptive fields + kernel_size = getattr(config, "cnn_kernel_size", 3) + # Split channels evenly: 256 + 256 + 256 = 768 for hidden_size=768 + channels_per_scale = config.hidden_size // 3 + self.conv_layers = nn.ModuleList([ + nn.Conv1d( + in_channels=config.hidden_size, + out_channels=channels_per_scale, + kernel_size=kernel_size + 2 * i, # Kernels: 3, 5, 7 + padding=(kernel_size + 2 * i) // 2, # Same padding + ) + for i in range(3) + ]) + self.conv_activation = nn.GELU() + self.conv_proj = nn.Linear(channels_per_scale * 3, config.hidden_size) # Project concatenated back + + self.LayerNorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.conv_norm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.dropout = nn.Dropout(config.hidden_dropout_prob) + self.register_buffer( + "position_ids", + torch.arange(config.max_position_embeddings).expand((1, -1)), + ) + + self.hidden_size = config.hidden_size + + def forward(self, input_ids, branch_depths=None, linkage_types=None): + seq_len = input_ids.shape[1] + + # Step 1: Token + Position embeddings FIRST (provides spatial context to conv) + x = self.token_embeddings(input_ids) # (batch, seq, hidden) + position_ids = self.position_ids[:, :seq_len] + x = x + self.position_embeddings(position_ids) + + # NEW: Add branch depth embeddings (encodes tree structure) + if branch_depths is not None: + # Clamp to valid range + branch_depths = branch_depths.clamp(0, self.branch_embeddings.num_embeddings - 1) + x = x + self.branch_embeddings(branch_depths) + + # NEW: Add linkage type embeddings (encodes bond chemistry) + if linkage_types is not None: + linkage_types = linkage_types.clamp(0, self.linkage_embeddings.num_embeddings - 1) + x = x + self.linkage_embeddings(linkage_types) + + x = self.LayerNorm(x) + + # Step 2: Multi-scale convolution with RESIDUAL connection + # Convolution expects (batch, hidden, seq) + conv_in = x.permute(0, 2, 1) + + # Apply multi-scale convolutions and concatenate + conv_outputs = [] + for conv in self.conv_layers: + conv_out = self.conv_activation(conv(conv_in)) + conv_outputs.append(conv_out) + + # Concatenate multi-scale features and project back + conv_out = torch.cat(conv_outputs, dim=1) # (batch, hidden, seq) + conv_out = conv_out.permute(0, 2, 1) # (batch, seq, hidden) + conv_out = self.conv_proj(conv_out) # Project to correct size + + # Step 3: Residual connection - conv ENRICHES rather than replaces + x = self.conv_norm(x + self.dropout(conv_out)) + + return x + + +def create_residue_level_mask( + seq_residue_ids: torch.Tensor, # (batch, N_seq) + struct_residue_ids: torch.Tensor # (batch, N_struct) +) -> torch.Tensor: + """ + Create residue-level attention mask for cross-attention. + + Maps WURCS tokens to VQ-VAE structural tokens based on residue IDs. + A WURCS token with residue_id=0 can only attend to VQ-VAE tokens with residue_id=0. + + Args: + seq_residue_ids: Residue IDs for sequence tokens (batch, N_seq) + struct_residue_ids: Residue IDs for structural tokens (batch, N_struct) + + Returns: + Boolean mask (batch, N_seq, N_struct) where True = can attend + """ + # Expand dimensions for broadcasting + # seq: (batch, N_seq, 1) + # struct: (batch, 1, N_struct) + mask = seq_residue_ids.unsqueeze(2) == struct_residue_ids.unsqueeze(1) + # Shape: (batch, N_seq, N_struct) + + # Mask out structural tokens (residue_id = -1) and MS tokens (residue_id = -2) + # Only tokens with residue_id >= 0 can attend + mask &= (seq_residue_ids.unsqueeze(2) >= 0) + + return mask # True = can attend, False = cannot attend + + +class MultimodalGlycanBERTConfig: + """Configuration for Multimodal GlycanBERT v3.""" + + def __init__( + self, + # Sequence modality + seq_vocab_size: int = 166, + seq_hidden_size: int = 768, + seq_num_layers: int = 12, + seq_num_heads: int = 12, + seq_max_length: int = 512, + + # MS modality + ms_vocab_size: int = 242, + ms_hidden_size: int = 384, + ms_num_layers: int = 6, + ms_num_heads: int = 6, + ms_max_length: int = 150, + + # 3D structure modality + struct_vocab_size: int = 1024, # VQ-VAE codebook size + struct_hidden_size: int = 512, + struct_num_layers: int = 8, + struct_num_heads: int = 8, + struct_max_length: int = 200, + use_3d: bool = True, + + # Cross-attention + use_cross_attention: bool = True, + cross_attn_num_heads: int = 8, + + # Fusion + fusion_hidden_size: int = 768, + fusion_num_layers: int = 2, + + # Training + hidden_dropout_prob: float = 0.1, + attention_probs_dropout_prob: float = 0.1, + layer_norm_eps: float = 1e-12, + initializer_range: float = 0.02, + + # Conv front-end + use_cnn_frontend: bool = True, + cnn_kernel_size: int = 3, + + # Loss weights + seq_loss_weight: float = 0.60, + ms_loss_weight: float = 0.15, + struct_loss_weight: float = 0.25, + dist_loss_weight: float = 0.25, + + # Token IDs + pad_token_id: int = 0, + mask_token_id: int = 1, + ): + # Sequence config + self.seq_vocab_size = seq_vocab_size + self.seq_hidden_size = seq_hidden_size + self.seq_num_layers = seq_num_layers + self.seq_num_heads = seq_num_heads + self.seq_max_length = seq_max_length + + # MS config + self.ms_vocab_size = ms_vocab_size + self.ms_vocab_offset = seq_vocab_size # MS tokens start at 166 + self.ms_total_vocab_size = seq_vocab_size + ms_vocab_size # 408 total + self.ms_hidden_size = ms_hidden_size + self.ms_num_layers = ms_num_layers + self.ms_num_heads = ms_num_heads + self.ms_max_length = ms_max_length + + # Structure config + self.struct_vocab_size = struct_vocab_size + self.struct_hidden_size = struct_hidden_size + self.struct_num_layers = struct_num_layers + self.struct_num_heads = struct_num_heads + self.struct_max_length = struct_max_length + self.use_3d = use_3d + + # Cross-attention config + self.use_cross_attention = use_cross_attention + self.cross_attn_num_heads = cross_attn_num_heads + + # Fusion config + self.fusion_hidden_size = fusion_hidden_size + self.fusion_num_layers = fusion_num_layers + + # Training config + self.hidden_dropout_prob = hidden_dropout_prob + self.attention_probs_dropout_prob = attention_probs_dropout_prob + self.layer_norm_eps = layer_norm_eps + self.initializer_range = initializer_range + + # Conv front-end + self.use_cnn_frontend = use_cnn_frontend + self.cnn_kernel_size = cnn_kernel_size + + # Loss weights + self.seq_loss_weight = seq_loss_weight + self.ms_loss_weight = ms_loss_weight + self.struct_loss_weight = struct_loss_weight + self.dist_loss_weight = dist_loss_weight + + # Token IDs + self.pad_token_id = pad_token_id + self.mask_token_id = mask_token_id + + def to_seq_config(self) -> GlycanBERTConfig: + """Convert to sequence-only config.""" + return GlycanBERTConfig( + vocab_size=self.seq_vocab_size, + hidden_size=self.seq_hidden_size, + num_hidden_layers=self.seq_num_layers, + num_attention_heads=self.seq_num_heads, + intermediate_size=self.seq_hidden_size * 4, + hidden_dropout_prob=self.hidden_dropout_prob, + attention_probs_dropout_prob=self.attention_probs_dropout_prob, + max_position_embeddings=self.seq_max_length, + layer_norm_eps=self.layer_norm_eps, + pad_token_id=self.pad_token_id, + mask_token_id=self.mask_token_id, + initializer_range=self.initializer_range, + ) + + def to_ms_config(self) -> GlycanBERTConfig: + """Convert to MS-only config.""" + return GlycanBERTConfig( + vocab_size=self.ms_total_vocab_size, + hidden_size=self.ms_hidden_size, + num_hidden_layers=self.ms_num_layers, + num_attention_heads=self.ms_num_heads, + intermediate_size=self.ms_hidden_size * 4, + hidden_dropout_prob=self.hidden_dropout_prob, + attention_probs_dropout_prob=self.attention_probs_dropout_prob, + max_position_embeddings=self.ms_max_length, + layer_norm_eps=self.layer_norm_eps, + pad_token_id=self.pad_token_id, + mask_token_id=self.mask_token_id, + initializer_range=self.initializer_range, + ) + + def to_struct_config(self) -> GlycanBERTConfig: + """Convert to structure-only config.""" + return GlycanBERTConfig( + vocab_size=self.struct_vocab_size, + hidden_size=self.struct_hidden_size, + num_hidden_layers=self.struct_num_layers, + num_attention_heads=self.struct_num_heads, + intermediate_size=self.struct_hidden_size * 4, + hidden_dropout_prob=self.hidden_dropout_prob, + attention_probs_dropout_prob=self.attention_probs_dropout_prob, + max_position_embeddings=self.struct_max_length, + layer_norm_eps=self.layer_norm_eps, + pad_token_id=self.pad_token_id, + mask_token_id=self.mask_token_id, + initializer_range=self.initializer_range, + ) + + +# ============================================================================= +# Improvement #1: Monosaccharide-Level Pooling +# ============================================================================= + +class MonosaccharidePooling(nn.Module): + """ + Pool token representations to monosaccharide level, then aggregate. + + This bridges the gap between token-level BERT and monosaccharide-level CNNs/GNNs. + Uses monosaccharide_indices from the data to know where each residue starts. + """ + + def __init__(self, hidden_size: int, num_attention_heads: int = 8, dropout: float = 0.1): + super().__init__() + self.hidden_size = hidden_size + + # Attention pooling over monosaccharide representations + self.mono_attention = nn.MultiheadAttention( + embed_dim=hidden_size, + num_heads=num_attention_heads, + dropout=dropout, + batch_first=True + ) + self.mono_norm = nn.LayerNorm(hidden_size) + + # Final aggregation to single glycan representation + self.glycan_query = nn.Parameter(torch.randn(1, 1, hidden_size) * 0.02) + self.glycan_attention = nn.MultiheadAttention( + embed_dim=hidden_size, + num_heads=num_attention_heads, + dropout=dropout, + batch_first=True + ) + self.glycan_norm = nn.LayerNorm(hidden_size) + + def forward( + self, + hidden_states: torch.Tensor, # (batch, seq_len, hidden) + residue_ids: torch.Tensor, # (batch, seq_len) - which residue each token belongs to + attention_mask: torch.Tensor = None, # (batch, seq_len) + ) -> torch.Tensor: + """ + Pool tokens to monosaccharide level, then to glycan level. + + Returns: + Glycan representation: (batch, hidden_size) + """ + batch_size = hidden_states.size(0) + device = hidden_states.device + + # Get unique residue IDs per sample (excluding -1 padding) + max_residues = 50 # Reasonable max for glycans + + # Pool tokens within each residue using mean pooling + mono_reps = torch.zeros(batch_size, max_residues, self.hidden_size, device=device) + mono_mask = torch.zeros(batch_size, max_residues, dtype=torch.bool, device=device) + + for b in range(batch_size): + unique_residues = torch.unique(residue_ids[b][residue_ids[b] >= 0]) + for i, rid in enumerate(unique_residues): + if i >= max_residues: + break + token_mask = residue_ids[b] == rid + if attention_mask is not None: + token_mask = token_mask & (attention_mask[b] > 0) + if token_mask.sum() > 0: + mono_reps[b, i] = hidden_states[b][token_mask].mean(dim=0) + mono_mask[b, i] = True + + # Apply attention over monosaccharide representations + # Convert mask for attention: True = valid, need to invert for PyTorch + key_padding_mask = ~mono_mask # True = ignore + + mono_out, _ = self.mono_attention( + mono_reps, mono_reps, mono_reps, + key_padding_mask=key_padding_mask + ) + mono_out = self.mono_norm(mono_reps + mono_out) + + # Aggregate to single glycan representation using learned query + glycan_query = self.glycan_query.expand(batch_size, -1, -1) + glycan_out, _ = self.glycan_attention( + glycan_query, mono_out, mono_out, + key_padding_mask=key_padding_mask + ) + glycan_out = self.glycan_norm(glycan_query + glycan_out) + + return glycan_out.squeeze(1) # (batch, hidden) + + +# ============================================================================= +# Improvement #2: Residue Type Embeddings +# ============================================================================= + +# Common monosaccharide types vocabulary +MONOSACCHARIDE_VOCAB = { + '[PAD_MONO]': 0, '[UNK_MONO]': 1, + 'Glc': 2, 'GlcNAc': 3, 'GlcA': 4, 'GlcN': 5, + 'Gal': 6, 'GalNAc': 7, 'GalA': 8, 'GalN': 9, + 'Man': 10, 'ManNAc': 11, 'ManA': 12, 'ManN': 13, + 'Fuc': 14, 'Rha': 15, 'Xyl': 16, 'Ara': 17, + 'Neu5Ac': 18, 'Neu5Gc': 19, 'Kdn': 20, 'Sia': 21, + 'GalNAcA': 22, 'GlcNAcA': 23, 'IdoA': 24, 'GulA': 25, + 'Rib': 26, 'Lyx': 27, 'All': 28, 'Alt': 29, + 'Tal': 30, 'Ido': 31, 'Qui': 32, 'Oli': 33, + 'Tyv': 34, 'Abe': 35, 'Par': 36, 'Dig': 37, + 'Col': 38, 'Dha': 39, 'Kdo': 40, 'Hep': 41, + 'NeuroGc': 42, 'Muramic': 43, 'LDManHep': 44, 'DDManHep': 45, + 'Bac': 46, 'Pse': 47, 'Leg': 48, 'Aci': 49, + '6dTal': 50, 'Fru': 51, 'Tag': 52, 'Sor': 53, + 'Psi': 54, 'Sed': 55, 'MurNAc': 56, 'MurNGc': 57, + 'Api': 58, 'Erwiniose': 59, 'Yer': 60, 'Thre': 61, + # Add more as needed, up to ~70 +} + + +class ResidueTypeEmbeddings(nn.Module): + """ + Learnable embeddings for monosaccharide types. + + Instead of the model having to learn that 'a1221m' = Fucose from character patterns, + we explicitly add a Fucose embedding to all tokens belonging to that residue. + """ + + def __init__(self, hidden_size: int, num_mono_types: int = 70): + super().__init__() + self.mono_embeddings = nn.Embedding(num_mono_types, hidden_size) + self.mono_vocab = MONOSACCHARIDE_VOCAB + self.hidden_size = hidden_size + + def forward( + self, + token_embeddings: torch.Tensor, # (batch, seq_len, hidden) + residue_ids: torch.Tensor, # (batch, seq_len) + mono_type_ids: torch.Tensor = None, # (batch, max_residues) - monosaccharide type per residue + ) -> torch.Tensor: + """ + Add residue type embeddings to token embeddings. + + Args: + token_embeddings: Base token embeddings + residue_ids: Which residue each token belongs to (-1 for special tokens) + mono_type_ids: Monosaccharide type ID for each residue position + + Returns: + Enhanced embeddings with residue type information + """ + if mono_type_ids is None: + return token_embeddings + + batch_size, seq_len, _ = token_embeddings.shape + enhanced = token_embeddings.clone() + + # Add mono type embedding to each token based on its residue + for b in range(batch_size): + for pos in range(seq_len): + rid = residue_ids[b, pos].item() + if rid >= 0 and rid < mono_type_ids.size(1): + mono_id = mono_type_ids[b, rid] + enhanced[b, pos] = enhanced[b, pos] + self.mono_embeddings(mono_id) + + return enhanced + + @staticmethod + def get_mono_type_id(mono_name: str) -> int: + """Convert monosaccharide name to type ID.""" + return MONOSACCHARIDE_VOCAB.get(mono_name, MONOSACCHARIDE_VOCAB['[UNK_MONO]']) + + +# ============================================================================= +# Improvement #4: Relative Position Encoding for Glycan Trees +# ============================================================================= + +class RelativePositionBias(nn.Module): + """ + Compute relative position bias for attention based on residue IDs. + + Tokens in the same residue get distance 0. + Tokens in adjacent residues get distance ±1. + This helps the model understand glycan tree structure. + """ + + def __init__(self, num_heads: int, max_distance: int = 10): + super().__init__() + self.num_heads = num_heads + self.max_distance = max_distance + + # Learnable bias for each relative distance (-max to +max) + num_distances = 2 * max_distance + 1 + self.relative_bias = nn.Embedding(num_distances, num_heads) + + def forward(self, residue_ids: torch.Tensor) -> torch.Tensor: + """ + Compute relative position bias. + + Args: + residue_ids: (batch, seq_len) + + Returns: + Bias to add to attention scores: (batch, num_heads, seq_len, seq_len) + """ + # Compute pairwise residue distances + # (batch, seq_len, 1) - (batch, 1, seq_len) = (batch, seq_len, seq_len) + distance = residue_ids.unsqueeze(2) - residue_ids.unsqueeze(1) + + # Clamp to max distance range and shift to 0-indexed + distance_clamped = distance.clamp(-self.max_distance, self.max_distance) + distance_idx = distance_clamped + self.max_distance # Now 0 to 2*max_distance + + # Look up bias: (batch, seq_len, seq_len, num_heads) + bias = self.relative_bias(distance_idx) + + # Transpose to (batch, num_heads, seq_len, seq_len) + bias = bias.permute(0, 3, 1, 2) + + return bias + + +class CrossAttentionLayer(nn.Module): + """ + Cross-attention layer for sequence-structure alignment. + + Allows sequence tokens to attend to structural atoms using attention masks. + """ + + def __init__(self, config: MultimodalGlycanBERTConfig): + super().__init__() + self.num_heads = config.cross_attn_num_heads + self.hidden_size = config.seq_hidden_size + self.head_dim = self.hidden_size // self.num_heads + + assert self.hidden_size % self.num_heads == 0, "hidden_size must be divisible by num_heads" + + # Query from sequence, Key/Value from structure (VQ-VAE tokens) + self.query = nn.Linear(config.seq_hidden_size, self.hidden_size) + self.key = nn.Linear(config.struct_hidden_size, self.hidden_size) + self.value = nn.Linear(config.struct_hidden_size, self.hidden_size) + + self.output = nn.Linear(self.hidden_size, config.seq_hidden_size) + self.dropout = nn.Dropout(config.attention_probs_dropout_prob) + self.layer_norm = nn.LayerNorm(config.seq_hidden_size, eps=config.layer_norm_eps) + + def forward( + self, + seq_hidden: torch.Tensor, # (batch, seq_len, seq_hidden) + struct_hidden: torch.Tensor, # (batch, struct_len, struct_hidden) + attention_mask: Optional[torch.Tensor] = None, # (batch, seq_len, struct_len) + ) -> torch.Tensor: + """ + Apply cross-attention from sequence to structure. + + Args: + seq_hidden: Sequence hidden states + struct_hidden: Structure hidden states + attention_mask: Boolean mask (True = can attend, False = cannot attend) + + Returns: + Updated sequence hidden states + """ + batch_size, seq_len, _ = seq_hidden.shape + struct_len = struct_hidden.shape[1] + + # Project to Q, K, V + Q = self.query(seq_hidden) # (batch, seq_len, hidden) + K = self.key(struct_hidden) # (batch, struct_len, hidden) + V = self.value(struct_hidden) # (batch, struct_len, hidden) + + # Reshape for multi-head attention + Q = Q.view(batch_size, seq_len, self.num_heads, self.head_dim).transpose(1, 2) # (batch, heads, seq_len, head_dim) + K = K.view(batch_size, struct_len, self.num_heads, self.head_dim).transpose(1, 2) # (batch, heads, struct_len, head_dim) + V = V.view(batch_size, struct_len, self.num_heads, self.head_dim).transpose(1, 2) # (batch, heads, struct_len, head_dim) + + # Compute attention scores + scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(self.head_dim) # (batch, heads, seq_len, struct_len) + + # Apply attention mask + if attention_mask is not None: + # attention_mask: (batch, seq_len, struct_len) -> (batch, 1, seq_len, struct_len) + attention_mask = attention_mask.unsqueeze(1) + # Convert boolean mask to float: True -> 0.0, False -> -10000.0 + attention_mask = (~attention_mask).float() * -10000.0 + scores = scores + attention_mask + + # Softmax and dropout + attn_weights = torch.softmax(scores, dim=-1) # (batch, heads, seq_len, struct_len) + attn_weights = self.dropout(attn_weights) + + # Apply attention to values + context = torch.matmul(attn_weights, V) # (batch, heads, seq_len, head_dim) + + # Reshape back + context = context.transpose(1, 2).contiguous().view(batch_size, seq_len, self.hidden_size) + + # Output projection + output = self.output(context) + output = self.dropout(output) + + # Residual connection + layer norm + output = self.layer_norm(seq_hidden + output) + + return output + + +class MultimodalGlycanBERT(nn.Module): + """ + Multimodal BERT for glycan representation learning (v3). + + Architecture: + 1. Separate encoders for each modality (sequence, MS, 3D structure) + 2. Cross-attention for sequence-structure alignment + 3. Modality-specific MLM heads + 4. Fusion layer for combined representation + """ + + def __init__(self, config: MultimodalGlycanBERTConfig): + super().__init__() + self.config = config + + # ===== Sequence Encoder ===== + seq_config = config.to_seq_config() + seq_config.cnn_kernel_size = config.cnn_kernel_size + + if config.use_cnn_frontend: + print(f"✅ Enabled Convolutional Front-End (Kernel={config.cnn_kernel_size})") + self.seq_embeddings = ConvGlycanBERTEmbeddings(seq_config) + else: + self.seq_embeddings = GlycanBERTEmbeddings(seq_config) + self.seq_layers = nn.ModuleList([GlycanBERTLayer(seq_config) for _ in range(seq_config.num_hidden_layers)]) + self.seq_mlm_head = nn.Linear(seq_config.hidden_size, seq_config.vocab_size) + + # ===== MS Encoder ===== + ms_config = config.to_ms_config() + self.ms_embeddings = GlycanBERTEmbeddings(ms_config) + self.ms_layers = nn.ModuleList([GlycanBERTLayer(ms_config) for _ in range(ms_config.num_hidden_layers)]) + self.ms_mlm_head = nn.Linear(ms_config.hidden_size, ms_config.vocab_size) + + # ===== Structure Encoder (VQ-VAE tokens) ===== + if config.use_3d: + struct_config = config.to_struct_config() + self.struct_embeddings = GlycanBERTEmbeddings(struct_config) + self.struct_layers = nn.ModuleList([GlycanBERTLayer(struct_config) for _ in range(struct_config.num_hidden_layers)]) + self.struct_mlm_head = nn.Linear(struct_config.hidden_size, struct_config.vocab_size) + + # Cross-attention layer (sequence → VQ-VAE structural tokens) + if config.use_cross_attention: + self.cross_attention = CrossAttentionLayer(config) + + # ===== Projection layers (align hidden sizes) ===== + if config.ms_hidden_size != config.seq_hidden_size: + self.ms_projection = nn.Linear(config.ms_hidden_size, config.seq_hidden_size) + else: + self.ms_projection = nn.Identity() + + if config.use_3d and config.struct_hidden_size != config.seq_hidden_size: + self.struct_projection = nn.Linear(config.struct_hidden_size, config.seq_hidden_size) + else: + self.struct_projection = nn.Identity() + + # ===== Fusion Layer ===== + # Concatenate seq + ms + struct + fusion_input_size = config.seq_hidden_size * (3 if config.use_3d else 2) + self.fusion_layer = nn.Sequential( + nn.Linear(fusion_input_size, config.fusion_hidden_size), + nn.LayerNorm(config.fusion_hidden_size, eps=config.layer_norm_eps), + nn.GELU(), + nn.Dropout(config.hidden_dropout_prob), + nn.Linear(config.fusion_hidden_size, config.fusion_hidden_size), + ) + + # ===== Distance Prediction Head (Topology) ===== + # OPTIMIZED: Project down to 128 dim first to save GPU memory + # (Batch, 256, 256, 768) -> (Batch, 256, 256, 128) reduces memory by 6x + self.dist_proj = nn.Linear(config.seq_hidden_size, 128) + self.distance_head = nn.Sequential( + nn.Linear(128, 64), + nn.ReLU(), + nn.Linear(64, 1) + ) + + # Initialize weights + self.apply(self._init_weights) + + def _init_weights(self, module): + """Initialize weights.""" + if isinstance(module, nn.Linear): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.bias is not None: + module.bias.data.zero_() + elif isinstance(module, nn.Embedding): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.padding_idx is not None: + module.weight.data[module.padding_idx].zero_() + elif isinstance(module, nn.LayerNorm): + module.bias.data.zero_() + module.weight.data.fill_(1.0) + + def forward( + self, + seq_token_ids: torch.Tensor, + seq_attention_mask: torch.Tensor, + seq_residue_ids: torch.Tensor, + seq_branch_depths: Optional[torch.Tensor] = None, # NEW: Branch depths + seq_linkage_types: Optional[torch.Tensor] = None, # NEW: Linkage types + ms_token_ids: torch.Tensor = None, + ms_attention_mask: torch.Tensor = None, + has_ms: torch.Tensor = None, + struct_token_ids: Optional[torch.Tensor] = None, + struct_attention_mask: Optional[torch.Tensor] = None, + struct_residue_ids: Optional[torch.Tensor] = None, + has_3d: Optional[torch.Tensor] = None, + seq_labels: Optional[torch.Tensor] = None, + ms_labels: Optional[torch.Tensor] = None, + struct_labels: Optional[torch.Tensor] = None, + dist_labels: Optional[torch.Tensor] = None, # NEW: Topology distance labels + return_dict: bool = True, + ) -> Dict[str, torch.Tensor]: + """ + Forward pass for multimodal BERT v3. + + Args: + seq_token_ids: (batch_size, seq_len) - Sequence token IDs + seq_attention_mask: (batch_size, seq_len) - Sequence attention mask + seq_residue_ids: (batch_size, seq_len) - Sequence token residue IDs + ms_token_ids: (batch_size, ms_len) - MS token IDs + ms_attention_mask: (batch_size, ms_len) - MS attention mask + has_ms: (batch_size,) - Boolean mask for samples with MS data + struct_token_ids: (batch_size, struct_len) - Structure VQ-VAE token IDs (optional) + struct_attention_mask: (batch_size, struct_len) - Structure attention mask (optional) + struct_residue_ids: (batch_size, struct_len) - Structure token residue IDs (optional) + has_3d: (batch_size,) - Boolean mask for samples with 3D data (optional) + seq_labels: (batch_size, seq_len) - Masked sequence labels (optional) + ms_labels: (batch_size, ms_len) - Masked MS labels (optional) + struct_labels: (batch_size, struct_len) - Masked structure labels (optional) + return_dict: Whether to return dict or tuple + + Returns: + Dictionary containing logits, hidden states, losses, etc. + """ + batch_size = seq_token_ids.shape[0] + device = seq_token_ids.device + + # ===== Sequence Encoder ===== + # Pass branch_depths and linkage_types to embeddings for tree-aware encoding + seq_hidden = self.seq_embeddings(seq_token_ids, seq_branch_depths, seq_linkage_types) + for layer in self.seq_layers: + seq_hidden = layer(seq_hidden, seq_attention_mask) + + seq_pooled = seq_hidden[:, 0, :] # [CLS] token + seq_logits = self.seq_mlm_head(seq_hidden) + + # ===== Distance Predictions (Topology) ===== + # Compute pairwise distance predictions + # MEMORY OPTIMIZATION: Project to 128-dim first + seq_hidden_small = self.dist_proj(seq_hidden) # (batch, seq_len, 128) + + # Expand for pairwise: (batch, seq_len, 1, 128) - (batch, 1, seq_len, 128) + h_i = seq_hidden_small.unsqueeze(2) + h_j = seq_hidden_small.unsqueeze(1) + h_diff = torch.abs(h_i - h_j) # (batch, seq_len, seq_len, 128) - Much smaller! + dist_predictions = self.distance_head(h_diff) # (batch, seq_len, seq_len, 1) + + # ===== MS Encoder ===== + ms_hidden = None + ms_pooled = None + ms_logits = None + + if ms_token_ids is not None: + ms_hidden = self.ms_embeddings(ms_token_ids) + for layer in self.ms_layers: + ms_hidden = layer(ms_hidden, ms_attention_mask) + + ms_pooled = ms_hidden[:, 0, :] # [CLS] token + ms_logits = self.ms_mlm_head(ms_hidden) + + # Zero out MS representations for samples without MS data + if has_ms is not None: + has_ms_expanded = has_ms.unsqueeze(1).float() # (batch, 1) + ms_pooled = ms_pooled * has_ms_expanded + + # ===== Structure Encoder ===== + struct_pooled = None + struct_logits = None + struct_hidden = None + + if self.config.use_3d and struct_token_ids is not None: + struct_hidden = self.struct_embeddings(struct_token_ids) + for layer in self.struct_layers: + struct_hidden = layer(struct_hidden, struct_attention_mask) + + struct_pooled = struct_hidden[:, 0, :] # [CLS] token + struct_logits = self.struct_mlm_head(struct_hidden) + + # Zero out structure representations for samples without 3D data + if has_3d is not None: + has_3d_expanded = has_3d.unsqueeze(1).float() # (batch, 1) + struct_pooled = struct_pooled * has_3d_expanded + + # ===== Cross-Attention (Sequence → VQ-VAE Structural Tokens) ===== + # Use residue-level alignment between WURCS tokens and VQ-VAE tokens + if self.config.use_cross_attention and struct_residue_ids is not None: + # Create residue-level mask + # WURCS token with residue_id=0 → VQ-VAE tokens with residue_id=0 + residue_mask = create_residue_level_mask( + seq_residue_ids=seq_residue_ids, + struct_residue_ids=struct_residue_ids, + ) # (batch, N_seq, N_struct) + + # Apply cross-attention: sequence tokens attend to VQ-VAE tokens + seq_hidden = self.cross_attention( + seq_hidden=seq_hidden, + struct_hidden=struct_hidden, # VQ-VAE token features + attention_mask=residue_mask, # Residue-based mask + ) + + # Update seq_pooled after cross-attention + seq_pooled = seq_hidden[:, 0, :] + + # ===== Fusion ===== + # Project to common hidden size + ms_pooled_projected = self.ms_projection(ms_pooled) + + if self.config.use_3d and struct_pooled is not None: + struct_pooled_projected = self.struct_projection(struct_pooled) + combined = torch.cat([seq_pooled, ms_pooled_projected, struct_pooled_projected], dim=-1) + else: + combined = torch.cat([seq_pooled, ms_pooled_projected], dim=-1) + + fused_repr = self.fusion_layer(combined) + + # ===== Compute Losses ===== + total_loss = None + seq_loss = None + ms_loss = None + struct_loss = None + dist_loss = None # NEW: Topology distance loss + + if seq_labels is not None: + loss_fct = nn.CrossEntropyLoss(ignore_index=-100) + seq_loss = loss_fct( + seq_logits.view(-1, self.config.seq_vocab_size), + seq_labels.view(-1) + ) + + if ms_labels is not None: + ms_labels_masked = ms_labels.clone() + ms_labels_masked[~has_ms] = -100 + # Only compute loss if there are valid labels (not all -100) + if (ms_labels_masked != -100).any(): + loss_fct = nn.CrossEntropyLoss(ignore_index=-100) + ms_loss = loss_fct( + ms_logits.view(-1, self.config.ms_total_vocab_size), + ms_labels_masked.view(-1) + ) + else: + ms_loss = torch.tensor(0.0, device=seq_token_ids.device) + + if self.config.use_3d and struct_labels is not None and struct_logits is not None: + struct_labels_masked = struct_labels.clone() + if has_3d is not None: + struct_labels_masked[~has_3d] = -100 + # Only compute loss if there are valid labels (not all -100) + if (struct_labels_masked != -100).any(): + loss_fct = nn.CrossEntropyLoss(ignore_index=-100) + struct_loss = loss_fct( + struct_logits.view(-1, self.config.struct_vocab_size), + struct_labels_masked.view(-1) + ) + else: + struct_loss = torch.tensor(0.0, device=seq_token_ids.device) + + # ===== Distance Loss (Topology) ===== + if dist_labels is not None: + # dist_predictions: (Batch, Seq, Seq, 1) -> (Batch, Seq, Seq) + preds = dist_predictions.squeeze(-1) + + # Create mask for valid distance pairs (label != -1) + # Also respect attention mask to avoid padding + valid_mask = (dist_labels != -1) & (seq_attention_mask.unsqueeze(1) * seq_attention_mask.unsqueeze(2) == 1) + + # DEBUG: Print once + if not hasattr(self, '_dist_debug_printed'): + print(f"[DIST DEBUG] dist_labels shape: {dist_labels.shape}, valid_mask.sum: {valid_mask.sum().item()}") + self._dist_debug_printed = True + + if valid_mask.sum() > 0: + # MSE loss on valid positions only + loss_fct = nn.MSELoss() + dist_loss = loss_fct(preds[valid_mask], dist_labels[valid_mask].float()) + else: + dist_loss = torch.tensor(0.0, device=seq_token_ids.device) + else: + # DEBUG: dist_labels is None + if not hasattr(self, '_dist_none_printed'): + print("[DIST DEBUG] dist_labels is None!") + self._dist_none_printed = True + + # Weighted combination + losses = [] + if seq_loss is not None: + losses.append(self.config.seq_loss_weight * seq_loss) + if ms_loss is not None: + losses.append(self.config.ms_loss_weight * ms_loss) + if struct_loss is not None: + losses.append(self.config.struct_loss_weight * struct_loss) + if dist_loss is not None: + losses.append(self.config.dist_loss_weight * dist_loss) + + if losses: + total_loss = sum(losses) + + if return_dict: + return { + 'loss': total_loss, + 'seq_loss': seq_loss, + 'ms_loss': ms_loss, + 'struct_loss': struct_loss, + 'dist_loss': dist_loss, # NEW: Topology loss + 'seq_logits': seq_logits, + 'ms_logits': ms_logits, + 'struct_logits': struct_logits, + 'dist_predictions': dist_predictions, # NEW: Distance predictions + 'seq_hidden': seq_hidden, + 'ms_hidden': ms_hidden, + 'struct_hidden': struct_hidden, + 'seq_pooled': seq_pooled, + 'ms_pooled': ms_pooled, + 'struct_pooled': struct_pooled, + 'fused_repr': fused_repr, + } + else: + return (total_loss, seq_logits, ms_logits, struct_logits, fused_repr) + + def get_multimodal_representation( + self, + seq_token_ids: torch.Tensor, + seq_attention_mask: torch.Tensor, + seq_residue_ids: torch.Tensor, + ms_token_ids: torch.Tensor, + ms_attention_mask: torch.Tensor, + has_ms: torch.Tensor, + struct_token_ids: Optional[torch.Tensor] = None, + struct_attention_mask: Optional[torch.Tensor] = None, + struct_residue_ids: Optional[torch.Tensor] = None, + has_3d: Optional[torch.Tensor] = None, + ) -> torch.Tensor: + """Get fused multimodal representation (for inference).""" + outputs = self.forward( + seq_token_ids=seq_token_ids, + seq_attention_mask=seq_attention_mask, + seq_residue_ids=seq_residue_ids, + ms_token_ids=ms_token_ids, + ms_attention_mask=ms_attention_mask, + has_ms=has_ms, + struct_token_ids=struct_token_ids, + struct_attention_mask=struct_attention_mask, + struct_residue_ids=struct_residue_ids, + has_3d=has_3d, + return_dict=True, + ) + return outputs['fused_repr'] + + +if __name__ == "__main__": + # Test the model + print("="*80) + print("Testing Multimodal GlycanBERT v3") + print("="*80) + + # Create config + config = MultimodalGlycanBERTConfig( + seq_vocab_size=166, + seq_hidden_size=768, + seq_num_layers=12, + seq_num_heads=12, + ms_vocab_size=242, + ms_hidden_size=384, + ms_num_layers=6, + ms_num_heads=6, + struct_vocab_size=1024, + struct_hidden_size=512, + struct_num_layers=8, + struct_num_heads=8, + use_3d=True, + use_cross_attention=True, + seq_loss_weight=0.60, + ms_loss_weight=0.15, + struct_loss_weight=0.25, + ) + + print(f"\nConfig:") + print(f" Sequence vocab: {config.seq_vocab_size}") + print(f" MS vocab: {config.ms_vocab_size}") + print(f" Structure vocab: {config.struct_vocab_size}") + print(f" Loss weights: seq={config.seq_loss_weight}, ms={config.ms_loss_weight}, struct={config.struct_loss_weight}") + + # Create model + model = MultimodalGlycanBERT(config) + + # Count parameters + total_params = sum(p.numel() for p in model.parameters()) + trainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad) + + print(f"\nModel Parameters:") + print(f" Total: {total_params:,}") + print(f" Trainable: {trainable_params:,}") + + # Test forward pass + print(f"\n{'='*80}") + print("Testing Forward Pass (with Conv front-end)") + print("="*80) + + batch_size = 4 + seq_len = 128 + ms_len = 50 + struct_len = 40 + + # Create dummy inputs + seq_token_ids = torch.randint(0, config.seq_vocab_size, (batch_size, seq_len)) + seq_attention_mask = torch.ones(batch_size, seq_len) + # Approximate: ~5 tokens per residue + seq_residue_ids = torch.div( + torch.arange(seq_len), 5, rounding_mode="floor" + ).unsqueeze(0).expand(batch_size, -1) + + ms_token_ids = torch.randint(config.ms_vocab_offset, config.ms_total_vocab_size, (batch_size, ms_len)) + ms_attention_mask = torch.ones(batch_size, ms_len) + struct_token_ids = torch.randint(0, config.struct_vocab_size, (batch_size, struct_len)) + struct_attention_mask = torch.ones(batch_size, struct_len) + # Approximate: 4 tokens per residue for VQ-VAE tokens + struct_residue_ids = torch.div( + torch.arange(struct_len), 4, rounding_mode="floor" + ).unsqueeze(0).expand(batch_size, -1) + + has_ms = torch.tensor([True, True, False, True]) + has_3d = torch.tensor([True, False, True, True]) + + # Create labels for MLM + seq_labels = seq_token_ids.clone() + seq_labels[seq_labels != config.mask_token_id] = -100 + ms_labels = ms_token_ids.clone() + ms_labels[ms_labels != config.mask_token_id] = -100 + struct_labels = struct_token_ids.clone() + struct_labels[struct_labels != config.mask_token_id] = -100 + + # Forward pass + outputs = model( + seq_token_ids=seq_token_ids, + seq_attention_mask=seq_attention_mask, + seq_residue_ids=seq_residue_ids, + ms_token_ids=ms_token_ids, + ms_attention_mask=ms_attention_mask, + has_ms=has_ms, + struct_token_ids=struct_token_ids, + struct_attention_mask=struct_attention_mask, + struct_residue_ids=struct_residue_ids, + has_3d=has_3d, + seq_labels=seq_labels, + ms_labels=ms_labels, + struct_labels=struct_labels, + ) + + print(f"\nOutput shapes:") + print(f" seq_logits: {outputs['seq_logits'].shape}") + print(f" ms_logits: {outputs['ms_logits'].shape}") + print(f" struct_logits: {outputs['struct_logits'].shape}") + print(f" fused_repr: {outputs['fused_repr'].shape}") + + print(f"\nLosses:") + print(f" Total loss: {outputs['loss'].item():.4f}") + print(f" Sequence loss: {outputs['seq_loss'].item():.4f}") + print(f" MS loss: {outputs['ms_loss'].item():.4f}") + print(f" Structure loss: {outputs['struct_loss'].item():.4f}") + + print(f"\n{'='*80}") + print("Model Test Complete!") + print("="*80) diff --git a/releases/2026-10-02/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/training/ipa_bpe_distillation.py b/releases/2026-10-02/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/training/ipa_bpe_distillation.py new file mode 100644 index 0000000000000000000000000000000000000000..f42469136b7d0fee9262d19f3ac7a73e5c56f46f --- /dev/null +++ b/releases/2026-10-02/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/training/ipa_bpe_distillation.py @@ -0,0 +1,377 @@ +#!/usr/bin/env python3 +""" +IPA Self-Distillation for BPE Tokenized Glycan Sequences +Iterative Pseudo-Annotation (IPA) to resolve ambiguous BPE tokens. +""" + +import sys +import torch +import torch.nn.functional as F +import numpy as np +from pathlib import Path +from typing import List, Dict, Set, Tuple +import logging +import pickle +import json +import argparse +from copy import deepcopy +from tqdm import tqdm + +# Add parent path for model imports +sys.path.insert(0, str(Path(__file__).parent.parent)) + +from model.multimodal_glycan_bert_v3 import MultimodalGlycanBERT, MultimodalGlycanBERTConfig + +logger = logging.getLogger(__name__) + + +class BPEIPADistiller: + """IPA Self-Distillation for BPE tokenized sequences.""" + + def __init__( + self, + checkpoint_path: str, + vocab_path: str, + ambiguity_path: str, + device: str = "cuda", + threshold: float = 0.8, + batch_size: int = 32, + ): + self.checkpoint_path = Path(checkpoint_path) + self.vocab_path = Path(vocab_path) + self.device = torch.device(device) + self.threshold = threshold + self.batch_size = batch_size + + # Load vocabulary + logger.info(f"Loading BPE vocabulary from {vocab_path}") + with open(vocab_path, 'r') as f: + vocab = json.load(f) + + self.vocab = vocab + self.token_to_id = vocab.get('token_to_id', vocab) + self.id_to_token = {v: k for k, v in self.token_to_id.items()} + self.vocab_size = len(self.token_to_id) + + # Special tokens + self.pad_id = self.token_to_id.get('[PAD]', 0) + self.mask_id = self.token_to_id.get('[MASK]', 4) + self.start_id = self.token_to_id.get('[START]', 2) + self.end_id = self.token_to_id.get('[END]', 3) + + logger.info(f"Vocabulary size: {self.vocab_size}") + logger.info(f"MASK token ID: {self.mask_id}") + + # Load ambiguous token IDs + logger.info(f"Loading ambiguity data from {ambiguity_path}") + with open(ambiguity_path, 'r') as f: + ambig_data = json.load(f) + + self.ambiguous_token_ids = set(ambig_data.get('ambiguous_ids', [])) + self.ambiguous_tokens = ambig_data.get('ambiguous_tokens', {}) + + logger.info(f"Ambiguous BPE tokens: {len(self.ambiguous_token_ids)}") + + # Load model + logger.info(f"Loading model from {checkpoint_path}") + self.model = self._load_model() + self.model.to(self.device) + self.model.eval() + + logger.info(f"BPE IPA Distiller initialized (threshold={threshold})") + + def _load_model(self) -> MultimodalGlycanBERT: + """Load model from checkpoint.""" + checkpoint = torch.load(self.checkpoint_path, map_location=self.device) + + if 'config' in checkpoint: + cfg = checkpoint['config']['model'] + else: + cfg = { + 'sequence': {'vocab_size': 2200, 'hidden_size': 768, 'num_hidden_layers': 12, + 'num_attention_heads': 12, 'max_length': 256}, + 'mass_spectrometry': {'vocab_size': 242, 'hidden_size': 384, + 'num_hidden_layers': 6, 'num_attention_heads': 6, 'max_length': 150}, + 'structure_3d': {'vocab_size': 1024, 'hidden_size': 512, + 'num_hidden_layers': 8, 'num_attention_heads': 8, 'max_length': 200}, + 'fusion': {'fusion_hidden_size': 768, 'fusion_num_layers': 2}, + } + + config = MultimodalGlycanBERTConfig( + seq_vocab_size=cfg['sequence']['vocab_size'], + seq_hidden_size=cfg['sequence']['hidden_size'], + seq_num_layers=cfg['sequence']['num_hidden_layers'], + seq_num_heads=cfg['sequence']['num_attention_heads'], + seq_max_length=cfg['sequence']['max_length'], + ms_vocab_size=cfg['mass_spectrometry']['vocab_size'], + ms_hidden_size=cfg['mass_spectrometry']['hidden_size'], + ms_num_layers=cfg['mass_spectrometry']['num_hidden_layers'], + ms_num_heads=cfg['mass_spectrometry']['num_attention_heads'], + ms_max_length=cfg['mass_spectrometry']['max_length'], + struct_vocab_size=cfg['structure_3d']['vocab_size'], + struct_hidden_size=cfg['structure_3d']['hidden_size'], + struct_num_layers=cfg['structure_3d']['num_hidden_layers'], + struct_num_heads=cfg['structure_3d']['num_attention_heads'], + struct_max_length=cfg['structure_3d']['max_length'], + fusion_hidden_size=cfg['fusion']['fusion_hidden_size'], + fusion_num_layers=cfg['fusion']['fusion_num_layers'], + ) + + model = MultimodalGlycanBERT(config) + + if 'model_state_dict' in checkpoint: + model.load_state_dict(checkpoint['model_state_dict']) + else: + model.load_state_dict(checkpoint) + + return model + + def find_ambiguous_sequences(self, sequences: List[Dict]) -> Tuple[List[Dict], List[Dict], Dict]: + """Separate sequences into ambiguous and clean.""" + ambiguous, clean = [], [] + total_ambig_tokens = 0 + + for seq in sequences: + token_ids = seq.get('token_ids', []) + ambig_count = sum(1 for tid in token_ids if tid in self.ambiguous_token_ids) + + if ambig_count > 0: + seq_copy = seq.copy() + seq_copy['_ambig_count'] = ambig_count + ambiguous.append(seq_copy) + total_ambig_tokens += ambig_count + else: + clean.append(seq) + + stats = { + 'total_sequences': len(sequences), + 'ambiguous_sequences': len(ambiguous), + 'clean_sequences': len(clean), + 'total_ambiguous_tokens': total_ambig_tokens, + 'ambiguous_percentage': 100 * len(ambiguous) / len(sequences) if sequences else 0, + } + + return ambiguous, clean, stats + + @torch.no_grad() + def resolve_batch(self, sequences: List[Dict], max_length: int = 256) -> Tuple[List[Dict], int, int]: + """Resolve ambiguous tokens in a batch.""" + if not sequences: + return [], 0, 0 + + batch_token_ids, batch_attention_masks, batch_ambig_positions = [], [], [] + + for seq in sequences: + token_ids = list(seq.get('token_ids', [])) + ambig_positions = [i for i, tid in enumerate(token_ids) if tid in self.ambiguous_token_ids] + batch_ambig_positions.append(ambig_positions) + + if len(token_ids) > max_length: + token_ids = token_ids[:max_length] + + attention_mask = [1] * len(token_ids) + pad_length = max_length - len(token_ids) + token_ids = token_ids + [self.pad_id] * pad_length + attention_mask = attention_mask + [0] * pad_length + + masked_ids = token_ids.copy() + for pos in ambig_positions: + if pos < max_length: + masked_ids[pos] = self.mask_id + + batch_token_ids.append(masked_ids) + batch_attention_masks.append(attention_mask) + + seq_tensor = torch.tensor(batch_token_ids, dtype=torch.long, device=self.device) + attention_tensor = torch.tensor(batch_attention_masks, dtype=torch.long, device=self.device) + residue_tensor = torch.zeros_like(seq_tensor) + + batch_size = seq_tensor.shape[0] + ms_len, struct_len = 150, 200 + + outputs = self.model( + seq_token_ids=seq_tensor, + seq_attention_mask=attention_tensor, + seq_residue_ids=residue_tensor, + ms_token_ids=torch.zeros(batch_size, ms_len, dtype=torch.long, device=self.device), + ms_attention_mask=torch.zeros(batch_size, ms_len, dtype=torch.long, device=self.device), + has_ms=torch.zeros(batch_size, dtype=torch.bool, device=self.device), + struct_token_ids=torch.zeros(batch_size, struct_len, dtype=torch.long, device=self.device), + struct_attention_mask=torch.zeros(batch_size, struct_len, dtype=torch.long, device=self.device), + struct_residue_ids=torch.full((batch_size, struct_len), -1, dtype=torch.long, device=self.device), + has_3d=torch.zeros(batch_size, dtype=torch.bool, device=self.device), + return_dict=True, + ) + + logits = outputs['seq_logits'] + + resolved_sequences = [] + total_resolved, total_remaining = 0, 0 + + for i, seq in enumerate(sequences): + resolved = deepcopy(seq) + token_ids = list(resolved['token_ids']) + ambig_positions = batch_ambig_positions[i] + n_resolved = 0 + + for pos in ambig_positions: + if pos >= max_length: + continue + + pos_logits = logits[i, pos] + probs = F.softmax(pos_logits, dim=-1) + top_prob, top_idx = probs.max(dim=-1) + confidence = top_prob.item() + pred_id = top_idx.item() + + if (confidence >= self.threshold and + pred_id not in self.ambiguous_token_ids and + pred_id != token_ids[pos]): + + original_token = self.id_to_token.get(token_ids[pos], '?') + new_token = self.id_to_token.get(pred_id, '?') + + token_ids[pos] = pred_id + n_resolved += 1 + + if 'resolved_positions' not in resolved: + resolved['resolved_positions'] = [] + resolved['resolved_positions'].append({ + 'pos': pos, 'original': original_token, + 'resolved': new_token, 'confidence': confidence, + }) + + resolved['token_ids'] = token_ids + if n_resolved > 0: + resolved['is_distilled'] = True + + resolved_sequences.append(resolved) + total_resolved += n_resolved + n_remaining = sum(1 for tid in token_ids if tid in self.ambiguous_token_ids) + total_remaining += n_remaining + + return resolved_sequences, total_resolved, total_remaining + + def run_ipa(self, sequences: List[Dict], iterations: int = 3) -> Tuple[List[Dict], Dict]: + """Run IPA self-distillation.""" + logger.info(f"Starting BPE IPA self-distillation (threshold={self.threshold}, iterations={iterations})") + + ambiguous, clean, initial_stats = self.find_ambiguous_sequences(sequences) + + logger.info(f"Initial: {initial_stats['ambiguous_sequences']} ambiguous sequences ({initial_stats['ambiguous_percentage']:.1f}%)") + logger.info(f"Total ambiguous tokens: {initial_stats['total_ambiguous_tokens']}") + + stats = {'initial': initial_stats, 'iterations': [], 'threshold': self.threshold} + current_sequences = ambiguous + + for iteration in range(iterations): + logger.info(f"\n=== Iteration {iteration + 1}/{iterations} ===") + + resolved_this_iter, total_remaining = 0, 0 + new_sequences = [] + + num_batches = (len(current_sequences) + self.batch_size - 1) // self.batch_size + + for batch_idx in tqdm(range(num_batches), desc=f"Iteration {iteration + 1}"): + start_idx = batch_idx * self.batch_size + end_idx = min(start_idx + self.batch_size, len(current_sequences)) + batch = current_sequences[start_idx:end_idx] + + resolved_batch, n_resolved, n_remaining = self.resolve_batch(batch) + new_sequences.extend(resolved_batch) + resolved_this_iter += n_resolved + total_remaining += n_remaining + + current_sequences = new_sequences + stats['iterations'].append({ + 'iteration': iteration + 1, + 'tokens_resolved': resolved_this_iter, + 'tokens_remaining': total_remaining, + }) + + logger.info(f" Resolved {resolved_this_iter} tokens, {total_remaining} remaining") + + if resolved_this_iter == 0: + logger.info(" No progress, stopping early") + break + + all_sequences = clean + current_sequences + _, still_ambiguous, final_stats = self.find_ambiguous_sequences(current_sequences) + + stats['final'] = { + 'total_sequences': len(all_sequences), + 'fully_resolved': initial_stats['ambiguous_sequences'] - final_stats['ambiguous_sequences'], + 'still_ambiguous': final_stats['ambiguous_sequences'], + 'remaining_ambiguous_tokens': final_stats['total_ambiguous_tokens'], + 'total_tokens_resolved': sum(it['tokens_resolved'] for it in stats['iterations']), + } + + logger.info(f"\n=== IPA Complete ===") + logger.info(f"Total tokens resolved: {stats['final']['total_tokens_resolved']}") + + return all_sequences, stats + + +def main(): + parser = argparse.ArgumentParser(description="BPE IPA Self-Distillation") + parser.add_argument("--checkpoint", type=str, required=True) + parser.add_argument("--sequences", type=str, required=True) + parser.add_argument("--vocab", type=str, required=True) + parser.add_argument("--ambiguity", type=str, required=True) + parser.add_argument("--output", type=str, required=True) + parser.add_argument("--threshold", type=float, default=0.8) + parser.add_argument("--iterations", type=int, default=3) + parser.add_argument("--batch-size", type=int, default=32) + parser.add_argument("--device", type=str, default="cuda") + + args = parser.parse_args() + + logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') + + logger.info(f"Loading sequences from {args.sequences}") + with open(args.sequences, 'rb') as f: + sequences = pickle.load(f) + + if isinstance(sequences, dict): + sequences = list(sequences.values()) + + logger.info(f"Loaded {len(sequences)} sequences") + + distiller = BPEIPADistiller( + checkpoint_path=args.checkpoint, + vocab_path=args.vocab, + ambiguity_path=args.ambiguity, + device=args.device, + threshold=args.threshold, + batch_size=args.batch_size, + ) + + expanded_sequences, stats = distiller.run_ipa(sequences=sequences, iterations=args.iterations) + + output_path = Path(args.output) + output_path.parent.mkdir(parents=True, exist_ok=True) + + with open(output_path, 'wb') as f: + pickle.dump(expanded_sequences, f) + + logger.info(f"Saved {len(expanded_sequences)} expanded sequences to {output_path}") + + stats_path = output_path.with_suffix('.stats.json') + with open(stats_path, 'w') as f: + json.dump(stats, f, indent=2) + + print("\n" + "="*60) + print("BPE IPA SELF-DISTILLATION SUMMARY") + print("="*60) + print(f"Input sequences: {stats['initial']['total_sequences']}") + print(f"Initially ambiguous: {stats['initial']['ambiguous_sequences']} ({stats['initial']['ambiguous_percentage']:.1f}%)") + print(f"Ambiguous tokens: {stats['initial']['total_ambiguous_tokens']}") + print(f"Threshold: {stats['threshold']}") + print(f"Iterations run: {len(stats['iterations'])}") + print(f"Tokens resolved: {stats['final']['total_tokens_resolved']}") + print(f"Still ambiguous: {stats['final']['still_ambiguous']}") + print("="*60) + + +if __name__ == "__main__": + main() diff --git a/releases/2026-10-02/iar_completion/runtime_snapshot/project/writing/glycangt_heldout_ipa_validation/cluster/heldout_ipa_eval.py b/releases/2026-10-02/iar_completion/runtime_snapshot/project/writing/glycangt_heldout_ipa_validation/cluster/heldout_ipa_eval.py new file mode 100644 index 0000000000000000000000000000000000000000..f25141c84c2124870c674e16e0b218b4490ece4b --- /dev/null +++ b/releases/2026-10-02/iar_completion/runtime_snapshot/project/writing/glycangt_heldout_ipa_validation/cluster/heldout_ipa_eval.py @@ -0,0 +1,962 @@ +#!/usr/bin/env python3 +""" +Held-out IPA-style ambiguity completion evaluation for bertose_v5b_excluded. + +This script turns fully specified held-out glycans into synthetic ambiguity-style +test cases by masking semantic WURCS-BPE spans, then evaluates whether the +leakage-proof Bertose checkpoint can recover the hidden truth. +""" + +from __future__ import annotations + +import argparse +import csv +import importlib.util +import json +import logging +import random +import sys +from collections import Counter, defaultdict +from dataclasses import dataclass +from pathlib import Path +from typing import Any, Dict, Iterable, List, Optional, Sequence + +import torch +import torch.nn.functional as F +from tqdm import tqdm + + +LOGGER = logging.getLogger("heldout_ipa_eval") + +THIS_FILE = Path(__file__).resolve() +ANALYSIS_ROOT = THIS_FILE.parent.parent +WRITING_ROOT = ANALYSIS_ROOT.parent +PROJECT_ROOT = WRITING_ROOT.parent +TOKENIZER_UTILS_ROOT = PROJECT_ROOT / "bert_training_v4" / "downstream_tasks" / "utils" + + +def first_existing_path(*candidates: Path) -> Path: + for candidate in candidates: + if candidate.exists(): + return candidate + return candidates[0] + + +NATURE_CODE_ROOT = first_existing_path( + WRITING_ROOT / "cluster" / "nature_submission" / "code", + PROJECT_ROOT / "nature_submission" / "code", +) +DEFAULT_CHECKPOINT = first_existing_path( + WRITING_ROOT / "cluster" / "nature_submission" / "checkpoints" / "bertose_v5b_excluded.pt", + PROJECT_ROOT / "checkpoints_v5b_excluded" / "best_v5b_excluded_model.pt", +) +DEFAULT_VOCAB = first_existing_path( + WRITING_ROOT / "cluster" / "nature_submission" / "data" / "vocab" / "bpe_vocabulary_clean.json", + PROJECT_ROOT / "data" / "bpe_vocabulary_clean.json", +) +DEFAULT_AMBIGUITY = first_existing_path( + WRITING_ROOT / "cluster" / "nature_submission" / "data" / "vocab" / "bpe_ambiguity_tokens.json", + PROJECT_ROOT / "data" / "bpe_ambiguity_tokens.json", +) +IPA_DISTILLATION_MODULE = first_existing_path( + NATURE_CODE_ROOT / "training" / "ipa_bpe_distillation.py", + PROJECT_ROOT / "bertose" / "code" / "training" / "ipa_bpe_distillation.py", + PROJECT_ROOT / "bert_v5_bpe_topo" / "ipa_bpe_distillation.py", +) +WURCS_TOKENIZER_MODULE = first_existing_path( + TOKENIZER_UTILS_ROOT / "wurcs_bpe_tokenizer.py", + NATURE_CODE_ROOT / "tokenizer" / "wurcs_bpe_tokenizer.py", + PROJECT_ROOT / "bertose" / "code" / "tokenizer" / "wurcs_bpe_tokenizer.py", +) + + +def load_attr_from_module(module_path: Path, attr_name: str) -> Any: + spec = importlib.util.spec_from_file_location(f"heldout_dynamic_{module_path.stem}", module_path) + if spec is None or spec.loader is None: + raise ImportError(f"Could not load module spec from {module_path}") + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return getattr(module, attr_name) + + +BPEIPADistiller = load_attr_from_module(IPA_DISTILLATION_MODULE, "BPEIPADistiller") +WURCSBPETokenizer = load_attr_from_module(WURCS_TOKENIZER_MODULE, "WURCSBPETokenizer") + + +SPECIAL_TOKEN_NAMES = { + "[PAD]", + "[UNK]", + "[START]", + "[END]", + "[MASK]", + "[BRANCH_OPEN]", + "[BRANCH_CLOSE]", + "[LINK]", + "[MOD]", + "[RESIDUE_ERROR]", +} + + +@dataclass +class TokenSpan: + start: int + end: int + unit_type: str + unit_text: str + residue_id: int + token_texts: List[str] + + @property + def positions(self) -> List[int]: + return list(range(self.start, self.end + 1)) + + +@dataclass +class EvalCase: + case_id: str + glycan_index: int + wurcs: str + wurcs_length: int + source_membership: str + source_count: str + unit_type: str + unit_text: str + residue_id: int + mask_start: int + mask_end: int + positions: List[int] + truth_tokens: List[str] + truth_token_ids: List[int] + masked_token_ids: List[int] + attention_mask: List[int] + residue_ids: List[int] + branch_depths: List[int] + linkage_types: List[int] + mask_plan: str + + +class HeldoutIPAEvaluator: + def __init__( + self, + checkpoint: Path, + vocab: Path, + ambiguity: Path, + device: str, + threshold: float, + batch_size: int, + top_k: int, + max_length: int, + ) -> None: + self.distiller = BPEIPADistiller( + checkpoint_path=str(checkpoint), + vocab_path=str(vocab), + ambiguity_path=str(ambiguity), + device=device, + threshold=threshold, + batch_size=batch_size, + ) + self.tokenizer = WURCSBPETokenizer(str(vocab)) + self.device = self.distiller.device + self.threshold = threshold + self.batch_size = batch_size + self.top_k = top_k + self.max_length = max_length + self.model = self.distiller.model + self.model.eval() + + self.special_token_ids = { + self.distiller.token_to_id[name] + for name in SPECIAL_TOKEN_NAMES + if name in self.distiller.token_to_id + } + self.invalid_prediction_ids = set(self.special_token_ids) | set(self.distiller.ambiguous_token_ids) + + LOGGER.info( + "Evaluator ready | device=%s threshold=%.2f batch_size=%d top_k=%d max_length=%d", + self.device, + self.threshold, + self.batch_size, + self.top_k, + self.max_length, + ) + + def build_cases( + self, + rows: Sequence[Dict[str, str]], + span_types: Sequence[str], + selection_mode: str, + max_cases_per_glycan: int, + seed: int, + mask_requirements: Optional[Dict[str, int]] = None, + ) -> tuple[List[EvalCase], Dict[str, Any]]: + rng = random.Random(seed) + span_types = set(span_types) + mask_requirements = mask_requirements or {} + + all_cases: List[EvalCase] = [] + build_stats: Dict[str, Any] = { + "glycans_seen": len(rows), + "glycans_with_eligible_spans": 0, + "glycans_without_eligible_spans": 0, + "spans_seen_by_type": Counter(), + "spans_eligible_by_type": Counter(), + "spans_selected_by_type": Counter(), + "spans_skipped_truth_ambiguous": Counter(), + "spans_skipped_truncated": Counter(), + "glycans_skipped_mask_plan": 0, + } + + for glycan_index, row in enumerate(tqdm(rows, desc="Building held-out cases")): + wurcs = row["wurcs"] + tokenized, spans, span_meta = self._tokenize_with_spans(wurcs) + for unit_type, count in span_meta["seen_by_type"].items(): + build_stats["spans_seen_by_type"][unit_type] += count + for unit_type, count in span_meta["skipped_truncated_by_type"].items(): + build_stats["spans_skipped_truncated"][unit_type] += count + + eligible_spans: List[TokenSpan] = [] + for span in spans: + if span.unit_type not in span_types: + continue + if any(token_id in self.invalid_prediction_ids for token_id in self._slice(tokenized["token_ids"], span)): + build_stats["spans_skipped_truth_ambiguous"][span.unit_type] += 1 + continue + build_stats["spans_eligible_by_type"][span.unit_type] += 1 + eligible_spans.append(span) + + if not eligible_spans: + build_stats["glycans_without_eligible_spans"] += 1 + continue + + build_stats["glycans_with_eligible_spans"] += 1 + eligible_spans_by_type: Dict[str, List[TokenSpan]] = defaultdict(list) + for span in eligible_spans: + eligible_spans_by_type[span.unit_type].append(span) + + selected_spans = self._select_spans( + spans=eligible_spans, + spans_by_type=eligible_spans_by_type, + selection_mode=selection_mode, + max_cases_per_glycan=max_cases_per_glycan, + rng=rng, + mask_requirements=mask_requirements, + ) + if mask_requirements and not selected_spans: + build_stats["glycans_skipped_mask_plan"] += 1 + continue + + for local_idx, span in enumerate(selected_spans): + build_stats["spans_selected_by_type"][span.unit_type] += 1 + if mask_requirements: + selected_ordered = sorted(selected_spans, key=lambda item: (item.start, item.end)) + truth_ids: List[int] = [] + truth_tokens: List[str] = [] + positions: List[int] = [] + mask_start = min(span.start for span in selected_ordered) + mask_end = max(span.end for span in selected_ordered) + masked_token_ids = list(tokenized["token_ids"]) + unit_text = " | ".join(f"{span.unit_type}:{span.unit_text}" for span in selected_ordered) + mask_plan = ",".join(f"{unit_type}:{count}" for unit_type, count in sorted(mask_requirements.items())) + case_id = f"g{glycan_index:04d}_plan_{mask_plan.replace(',', '_').replace(':', 'x')}" + for span in selected_ordered: + truth_ids.extend(self._slice(tokenized["token_ids"], span)) + truth_tokens.extend(self._slice(tokenized["tokens"], span)) + positions.extend(span.positions) + for pos in span.positions: + masked_token_ids[pos] = self.distiller.mask_id + all_cases.append( + EvalCase( + case_id=case_id, + glycan_index=glycan_index, + wurcs=wurcs, + wurcs_length=len(wurcs), + source_membership=row.get("source_membership", ""), + source_count=row.get("source_count", ""), + unit_type=mask_plan, + unit_text=unit_text, + residue_id=selected_ordered[0].residue_id, + mask_start=mask_start, + mask_end=mask_end, + positions=positions, + truth_tokens=truth_tokens, + truth_token_ids=truth_ids, + masked_token_ids=masked_token_ids, + attention_mask=list(tokenized["attention_mask"]), + residue_ids=list(tokenized["residue_ids"]), + branch_depths=list(tokenized["branch_depths"]), + linkage_types=list(tokenized["linkage_types"]), + mask_plan=mask_plan, + ) + ) + else: + for local_idx, span in enumerate(selected_spans): + truth_ids = self._slice(tokenized["token_ids"], span) + truth_tokens = self._slice(tokenized["tokens"], span) + masked_token_ids = list(tokenized["token_ids"]) + for pos in span.positions: + masked_token_ids[pos] = self.distiller.mask_id + + all_cases.append( + EvalCase( + case_id=f"g{glycan_index:04d}_s{local_idx:02d}_{span.unit_type}_{span.start}_{span.end}", + glycan_index=glycan_index, + wurcs=wurcs, + wurcs_length=len(wurcs), + source_membership=row.get("source_membership", ""), + source_count=row.get("source_count", ""), + unit_type=span.unit_type, + unit_text=span.unit_text, + residue_id=span.residue_id, + mask_start=span.start, + mask_end=span.end, + positions=span.positions, + truth_tokens=truth_tokens, + truth_token_ids=truth_ids, + masked_token_ids=masked_token_ids, + attention_mask=list(tokenized["attention_mask"]), + residue_ids=list(tokenized["residue_ids"]), + branch_depths=list(tokenized["branch_depths"]), + linkage_types=list(tokenized["linkage_types"]), + mask_plan=f"{span.unit_type}:1", + ) + ) + + build_stats["num_cases"] = len(all_cases) + build_stats["num_masked_positions"] = sum(len(case.positions) for case in all_cases) + build_stats["avg_masked_positions_per_case"] = ( + build_stats["num_masked_positions"] / len(all_cases) if all_cases else 0.0 + ) + build_stats["span_types"] = sorted(span_types) + return all_cases, self._json_ready(build_stats) + + def evaluate_cases(self, cases: Sequence[EvalCase], iterations: int) -> tuple[List[Dict[str, Any]], Dict[str, Any]]: + if not cases: + return [], {} + + results: List[Dict[str, Any]] = [] + num_batches = (len(cases) + self.batch_size - 1) // self.batch_size + + for batch_idx in tqdm(range(num_batches), desc="Evaluating held-out cases"): + start = batch_idx * self.batch_size + end = min(start + self.batch_size, len(cases)) + batch_cases = list(cases[start:end]) + batch_results = self._evaluate_batch(batch_cases=batch_cases, iterations=iterations) + results.extend(batch_results) + + summary = self._summarize_results(results=results, iterations=iterations) + return results, summary + + def _evaluate_batch(self, batch_cases: Sequence[EvalCase], iterations: int) -> List[Dict[str, Any]]: + current_token_ids = [list(case.masked_token_ids) for case in batch_cases] + unresolved_positions = [set(case.positions) for case in batch_cases] + initial_position_details: List[List[Dict[str, Any]]] = [[] for _ in batch_cases] + accepted_updates_per_case: List[List[Dict[str, Any]]] = [[] for _ in batch_cases] + + for iteration_idx in range(iterations): + logits = self._forward_logits(batch_cases=batch_cases, current_token_ids=current_token_ids) + + progress_this_round = 0 + for case_idx, case in enumerate(batch_cases): + if not unresolved_positions[case_idx]: + continue + + iteration_updates: List[Dict[str, Any]] = [] + for local_pos_idx, pos in enumerate(case.positions): + position_logits = logits[case_idx, pos] + probs = F.softmax(position_logits, dim=-1) + top_probs, top_ids = torch.topk(probs, k=self.top_k) + + top_tokens = [self.distiller.id_to_token[int(token_id)] for token_id in top_ids.tolist()] + detail = { + "position": pos, + "truth_token": case.truth_tokens[local_pos_idx], + "truth_token_id": case.truth_token_ids[local_pos_idx], + "top_ids": [int(token_id) for token_id in top_ids.tolist()], + "top_tokens": top_tokens, + "top_probs": [float(prob) for prob in top_probs.tolist()], + "top1_id": int(top_ids[0].item()), + "top1_token": top_tokens[0], + "top1_prob": float(top_probs[0].item()), + "top1_correct": int(top_ids[0].item()) == case.truth_token_ids[local_pos_idx], + "top5_contains_truth": case.truth_token_ids[local_pos_idx] in { + int(token_id) for token_id in top_ids.tolist() + }, + } + + if iteration_idx == 0: + initial_position_details[case_idx].append(detail) + + if pos not in unresolved_positions[case_idx]: + continue + + pred_id = detail["top1_id"] + pred_prob = detail["top1_prob"] + if pred_prob < self.threshold: + continue + if pred_id in self.invalid_prediction_ids: + continue + + current_token_ids[case_idx][pos] = pred_id + unresolved_positions[case_idx].remove(pos) + progress_this_round += 1 + iteration_updates.append( + { + "iteration": iteration_idx + 1, + "position": pos, + "predicted_id": pred_id, + "predicted_token": detail["top1_token"], + "confidence": pred_prob, + "correct": pred_id == detail["truth_token_id"], + } + ) + + if iteration_updates: + accepted_updates_per_case[case_idx].extend(iteration_updates) + + if progress_this_round == 0: + LOGGER.info("Stopping early after iteration %d because no new positions were accepted", iteration_idx + 1) + break + + batch_results: List[Dict[str, Any]] = [] + for case_idx, case in enumerate(batch_cases): + final_token_ids = [current_token_ids[case_idx][pos] for pos in case.positions] + final_tokens = [self.distiller.id_to_token[token_id] for token_id in final_token_ids] + final_correct_flags = [ + final_token_ids[pos_idx] == case.truth_token_ids[pos_idx] + for pos_idx in range(len(case.positions)) + ] + resolved_flags = [ + case.positions[pos_idx] not in unresolved_positions[case_idx] + for pos_idx in range(len(case.positions)) + ] + initial_details = initial_position_details[case_idx] + + batch_results.append( + { + "case_id": case.case_id, + "glycan_index": case.glycan_index, + "wurcs": case.wurcs, + "wurcs_length": case.wurcs_length, + "source_membership": case.source_membership, + "source_count": case.source_count, + "unit_type": case.unit_type, + "mask_plan": case.mask_plan, + "unit_text": case.unit_text, + "residue_id": case.residue_id, + "positions": case.positions, + "mask_start": case.mask_start, + "mask_end": case.mask_end, + "num_masked_positions": len(case.positions), + "truth_tokens": case.truth_tokens, + "truth_token_ids": case.truth_token_ids, + "initial_position_details": initial_details, + "accepted_updates": accepted_updates_per_case[case_idx], + "final_tokens": final_tokens, + "final_token_ids": final_token_ids, + "resolved_flags": resolved_flags, + "final_correct_flags": final_correct_flags, + "initial_top1_correct_count": sum(1 for item in initial_details if item["top1_correct"]), + "initial_top5_correct_count": sum(1 for item in initial_details if item["top5_contains_truth"]), + "resolved_count": sum(1 for flag in resolved_flags if flag), + "final_correct_count": sum(1 for flag in final_correct_flags if flag), + "initial_span_exact_top1": all(item["top1_correct"] for item in initial_details) if initial_details else False, + "initial_span_exact_top5": all(item["top5_contains_truth"] for item in initial_details) if initial_details else False, + "iterative_span_exact": all(final_correct_flags) if final_correct_flags else False, + "iterations_used": max( + (update["iteration"] for update in accepted_updates_per_case[case_idx]), + default=0, + ), + } + ) + + return batch_results + + def _forward_logits( + self, + batch_cases: Sequence[EvalCase], + current_token_ids: Sequence[List[int]], + ) -> torch.Tensor: + batch_size = len(batch_cases) + + seq_token_ids = torch.tensor(current_token_ids, dtype=torch.long, device=self.device) + seq_attention_mask = torch.tensor( + [case.attention_mask for case in batch_cases], dtype=torch.long, device=self.device + ) + seq_residue_ids = torch.tensor( + [case.residue_ids for case in batch_cases], dtype=torch.long, device=self.device + ) + seq_branch_depths = torch.tensor( + [case.branch_depths for case in batch_cases], dtype=torch.long, device=self.device + ) + seq_linkage_types = torch.tensor( + [case.linkage_types for case in batch_cases], dtype=torch.long, device=self.device + ) + + ms_len = 150 + struct_len = 200 + outputs = self.model( + seq_token_ids=seq_token_ids, + seq_attention_mask=seq_attention_mask, + seq_residue_ids=seq_residue_ids, + seq_branch_depths=seq_branch_depths, + seq_linkage_types=seq_linkage_types, + ms_token_ids=torch.zeros(batch_size, ms_len, dtype=torch.long, device=self.device), + ms_attention_mask=torch.zeros(batch_size, ms_len, dtype=torch.long, device=self.device), + has_ms=torch.zeros(batch_size, dtype=torch.bool, device=self.device), + struct_token_ids=torch.zeros(batch_size, struct_len, dtype=torch.long, device=self.device), + struct_attention_mask=torch.zeros(batch_size, struct_len, dtype=torch.long, device=self.device), + struct_residue_ids=torch.full((batch_size, struct_len), -1, dtype=torch.long, device=self.device), + has_3d=torch.zeros(batch_size, dtype=torch.bool, device=self.device), + return_dict=True, + ) + return outputs["seq_logits"] + + def _tokenize_with_spans(self, wurcs: str) -> tuple[Dict[str, Any], List[TokenSpan], Dict[str, Counter]]: + tokenized = self.tokenizer.tokenize(wurcs, max_length=self.max_length) + unpadded_tokens = tokenized["tokens"][: tokenized["length"]] + units = self.tokenizer.pre_tokenizer.pre_tokenize(wurcs) + + spans: List[TokenSpan] = [] + raw_cursor = 0 + span_meta = { + "seen_by_type": Counter(), + "skipped_truncated_by_type": Counter(), + } + + for unit in units: + unit_tokens = [unit["text"]] if unit["type"] == "special" else self.tokenizer.apply_bpe(unit["text"]) + span_start = raw_cursor + span_end = raw_cursor + len(unit_tokens) - 1 + raw_cursor += len(unit_tokens) + + if unit["type"] != "special": + span_meta["seen_by_type"][unit["type"]] += 1 + + if unit["type"] == "special": + continue + if span_end >= len(unpadded_tokens): + span_meta["skipped_truncated_by_type"][unit["type"]] += 1 + continue + if unpadded_tokens[span_start : span_end + 1] != unit_tokens: + span_meta["skipped_truncated_by_type"][unit["type"]] += 1 + continue + + spans.append( + TokenSpan( + start=span_start, + end=span_end, + unit_type=unit["type"], + unit_text=unit["text"], + residue_id=unit["residue_id"], + token_texts=unit_tokens, + ) + ) + + return tokenized, spans, span_meta + + @staticmethod + def _slice(values: Sequence[Any], span: TokenSpan) -> List[Any]: + return list(values[span.start : span.end + 1]) + + @staticmethod + def _select_spans( + spans: Sequence[TokenSpan], + spans_by_type: Dict[str, List[TokenSpan]], + selection_mode: str, + max_cases_per_glycan: int, + rng: random.Random, + mask_requirements: Optional[Dict[str, int]] = None, + ) -> List[TokenSpan]: + ordered = sorted(spans, key=lambda item: (item.start, item.end)) + mask_requirements = mask_requirements or {} + if mask_requirements: + selected: List[TokenSpan] = [] + for unit_type, count in sorted(mask_requirements.items()): + unit_spans = sorted(spans_by_type.get(unit_type, []), key=lambda item: (item.start, item.end)) + if len(unit_spans) < count: + return [] + if selection_mode == "all": + chosen = unit_spans[:count] + elif selection_mode == "first": + chosen = unit_spans[:count] + elif selection_mode == "sample": + chosen = sorted(rng.sample(unit_spans, count), key=lambda item: (item.start, item.end)) + else: + raise ValueError(f"Unsupported selection mode: {selection_mode}") + selected.extend(chosen) + return sorted(selected, key=lambda item: (item.start, item.end)) + if selection_mode == "all": + return ordered + if selection_mode == "first": + return ordered[:max_cases_per_glycan] + if selection_mode == "sample": + k = min(max_cases_per_glycan, len(ordered)) + return sorted(rng.sample(ordered, k), key=lambda item: (item.start, item.end)) + raise ValueError(f"Unsupported selection mode: {selection_mode}") + + @staticmethod + def _json_ready(obj: Any) -> Any: + if isinstance(obj, Counter): + return dict(obj) + if isinstance(obj, defaultdict): + return {key: HeldoutIPAEvaluator._json_ready(value) for key, value in obj.items()} + if isinstance(obj, dict): + return {key: HeldoutIPAEvaluator._json_ready(value) for key, value in obj.items()} + if isinstance(obj, list): + return [HeldoutIPAEvaluator._json_ready(value) for value in obj] + return obj + + def _summarize_results(self, results: Sequence[Dict[str, Any]], iterations: int) -> Dict[str, Any]: + total_cases = len(results) + total_positions = sum(result["num_masked_positions"] for result in results) + if total_cases == 0 or total_positions == 0: + return {} + + overall = self._aggregate_slice(results) + by_unit_type = { + unit_type: self._aggregate_slice([result for result in results if result["unit_type"] == unit_type]) + for unit_type in sorted({result["unit_type"] for result in results}) + } + + return { + "num_cases": total_cases, + "num_masked_positions": total_positions, + "iterations_requested": iterations, + "threshold": self.threshold, + "top_k": self.top_k, + "overall": overall, + "by_unit_type": by_unit_type, + } + + @staticmethod + def _aggregate_slice(results: Sequence[Dict[str, Any]]) -> Dict[str, Any]: + total_cases = len(results) + total_positions = sum(result["num_masked_positions"] for result in results) + initial_top1_correct = sum(result["initial_top1_correct_count"] for result in results) + initial_top5_correct = sum(result["initial_top5_correct_count"] for result in results) + resolved_count = sum(result["resolved_count"] for result in results) + final_correct_count = sum(result["final_correct_count"] for result in results) + + return { + "num_cases": total_cases, + "num_masked_positions": total_positions, + "avg_masked_positions_per_case": total_positions / total_cases if total_cases else 0.0, + "initial_top1_token_accuracy": initial_top1_correct / total_positions if total_positions else 0.0, + "initial_top5_token_accuracy": initial_top5_correct / total_positions if total_positions else 0.0, + "initial_exact_span_accuracy_top1": ( + sum(1 for result in results if result["initial_span_exact_top1"]) / total_cases if total_cases else 0.0 + ), + "initial_exact_span_accuracy_top5": ( + sum(1 for result in results if result["initial_span_exact_top5"]) / total_cases if total_cases else 0.0 + ), + "iterative_resolved_fraction": resolved_count / total_positions if total_positions else 0.0, + "iterative_accuracy_among_resolved": final_correct_count / resolved_count if resolved_count else 0.0, + "iterative_final_token_accuracy": final_correct_count / total_positions if total_positions else 0.0, + "iterative_exact_span_accuracy": ( + sum(1 for result in results if result["iterative_span_exact"]) / total_cases if total_cases else 0.0 + ), + "avg_iterations_used_per_case": ( + sum(result["iterations_used"] for result in results) / total_cases if total_cases else 0.0 + ), + } + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description="Held-out IPA-style evaluation for bertose_v5b_excluded") + parser.add_argument( + "--input-csv", + type=Path, + default=ANALYSIS_ROOT / "data" / "benchmark_exclusion_1392_unseen_to_bertose_v5b_excluded.csv", + ) + parser.add_argument( + "--checkpoint", + type=Path, + default=DEFAULT_CHECKPOINT, + ) + parser.add_argument( + "--vocab", + type=Path, + default=DEFAULT_VOCAB, + ) + parser.add_argument( + "--ambiguity", + type=Path, + default=DEFAULT_AMBIGUITY, + ) + parser.add_argument("--output-dir", type=Path, default=ANALYSIS_ROOT / "outputs") + parser.add_argument("--run-name", type=str, default="benchmark1392_pilot") + parser.add_argument("--device", type=str, default="cuda") + parser.add_argument("--batch-size", type=int, default=32) + parser.add_argument("--iterations", type=int, default=3) + parser.add_argument("--threshold", type=float, default=0.80) + parser.add_argument("--top-k", type=int, default=5) + parser.add_argument("--max-length", type=int, default=256) + parser.add_argument("--limit", type=int, default=None) + parser.add_argument("--seed", type=int, default=42) + parser.add_argument("--shuffle", action="store_true") + parser.add_argument("--selection-mode", choices=["sample", "first", "all"], default="sample") + parser.add_argument("--max-cases-per-glycan", type=int, default=1) + parser.add_argument("--span-types", type=str, default="residue,linkage") + parser.add_argument("--mask-plan", type=str, default="") + parser.add_argument("--log-level", type=str, default="INFO") + return parser.parse_args() + + +def parse_mask_plan(mask_plan: str) -> Dict[str, int]: + mask_plan = mask_plan.strip() + if not mask_plan: + return {} + requirements: Dict[str, int] = {} + for item in mask_plan.split(","): + part = item.strip() + if not part: + continue + if ":" not in part: + raise ValueError(f"Invalid mask-plan item: {part}") + unit_type, count_str = part.split(":", 1) + unit_type = unit_type.strip() + count = int(count_str.strip()) + if count <= 0: + raise ValueError(f"Mask-plan counts must be positive: {part}") + requirements[unit_type] = count + return requirements + + +def setup_logging(level: str) -> None: + logging.basicConfig( + level=getattr(logging, level.upper(), logging.INFO), + format="%(asctime)s - %(levelname)s - %(message)s", + ) + + +def load_rows(input_csv: Path, limit: Optional[int], shuffle: bool, seed: int) -> List[Dict[str, str]]: + with input_csv.open() as handle: + rows = list(csv.DictReader(handle)) + + if "in_reconstructed_leakage_proof_pretrain" in rows[0]: + not_unseen = [ + row["wurcs"] + for row in rows + if row["in_reconstructed_leakage_proof_pretrain"].strip().lower() != "false" + ] + if not_unseen: + raise ValueError( + f"Input CSV contains {len(not_unseen)} glycans that are not marked unseen to the leakage-proof model" + ) + + if shuffle: + rng = random.Random(seed) + rng.shuffle(rows) + + if limit is not None: + rows = rows[:limit] + + return rows + + +def write_json(path: Path, payload: Dict[str, Any]) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(json.dumps(payload, indent=2)) + + +def write_jsonl(path: Path, rows: Iterable[Dict[str, Any]]) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + with path.open("w") as handle: + for row in rows: + handle.write(json.dumps(row) + "\n") + + +def write_case_csv(path: Path, rows: Sequence[Dict[str, Any]]) -> None: + flat_rows = [] + for row in rows: + flat_rows.append( + { + "case_id": row["case_id"], + "glycan_index": row["glycan_index"], + "unit_type": row["unit_type"], + "mask_plan": row.get("mask_plan", row["unit_type"]), + "unit_text": row["unit_text"], + "mask_start": row["mask_start"], + "mask_end": row["mask_end"], + "num_masked_positions": row["num_masked_positions"], + "initial_top1_correct_count": row["initial_top1_correct_count"], + "initial_top5_correct_count": row["initial_top5_correct_count"], + "resolved_count": row["resolved_count"], + "final_correct_count": row["final_correct_count"], + "initial_span_exact_top1": row["initial_span_exact_top1"], + "initial_span_exact_top5": row["initial_span_exact_top5"], + "iterative_span_exact": row["iterative_span_exact"], + "iterations_used": row["iterations_used"], + "truth_tokens": "|".join(row["truth_tokens"]), + "final_tokens": "|".join(row["final_tokens"]), + "wurcs": row["wurcs"], + } + ) + + fieldnames = list(flat_rows[0].keys()) if flat_rows else [ + "case_id", + "glycan_index", + "unit_type", + "mask_plan", + "unit_text", + "mask_start", + "mask_end", + "num_masked_positions", + "initial_top1_correct_count", + "initial_top5_correct_count", + "resolved_count", + "final_correct_count", + "initial_span_exact_top1", + "initial_span_exact_top5", + "iterative_span_exact", + "iterations_used", + "truth_tokens", + "final_tokens", + "wurcs", + ] + + with path.open("w", newline="") as handle: + writer = csv.DictWriter(handle, fieldnames=fieldnames) + writer.writeheader() + writer.writerows(flat_rows) + + +def write_summary_markdown( + path: Path, + *, + args: argparse.Namespace, + input_rows: Sequence[Dict[str, str]], + build_stats: Dict[str, Any], + summary: Dict[str, Any], +) -> None: + overall = summary.get("overall", {}) + by_unit_type = summary.get("by_unit_type", {}) + + lines = [ + "# Held-out IPA Evaluation Summary", + "", + "## Run", + "", + f"- run_name: `{args.run_name}`", + f"- input_csv: `{args.input_csv}`", + f"- checkpoint: `{args.checkpoint}`", + f"- vocab: `{args.vocab}`", + f"- ambiguity: `{args.ambiguity}`", + f"- device: `{args.device}`", + f"- threshold: `{args.threshold}`", + f"- iterations: `{args.iterations}`", + f"- top_k: `{args.top_k}`", + f"- selection_mode: `{args.selection_mode}`", + f"- max_cases_per_glycan: `{args.max_cases_per_glycan}`", + f"- span_types: `{args.span_types}`", + f"- mask_plan: `{args.mask_plan or 'single-span default'}`", + "", + "## Dataset", + "", + f"- glycans_loaded: `{len(input_rows)}`", + f"- cases_built: `{build_stats.get('num_cases', 0)}`", + f"- masked_positions: `{build_stats.get('num_masked_positions', 0)}`", + f"- glycans_with_eligible_spans: `{build_stats.get('glycans_with_eligible_spans', 0)}`", + f"- glycans_without_eligible_spans: `{build_stats.get('glycans_without_eligible_spans', 0)}`", + f"- glycans_skipped_mask_plan: `{build_stats.get('glycans_skipped_mask_plan', 0)}`", + "", + "## Overall Metrics", + "", + ] + + metric_order = [ + "initial_top1_token_accuracy", + "initial_top5_token_accuracy", + "initial_exact_span_accuracy_top1", + "initial_exact_span_accuracy_top5", + "iterative_resolved_fraction", + "iterative_accuracy_among_resolved", + "iterative_final_token_accuracy", + "iterative_exact_span_accuracy", + "avg_iterations_used_per_case", + ] + for metric in metric_order: + value = overall.get(metric) + if value is not None: + lines.append(f"- {metric}: `{value:.4f}`") + + if by_unit_type: + lines.extend(["", "## By Evaluation Group", ""]) + for unit_type, unit_metrics in by_unit_type.items(): + lines.append(f"### {unit_type}") + lines.append("") + for metric in metric_order: + value = unit_metrics.get(metric) + if value is not None: + lines.append(f"- {metric}: `{value:.4f}`") + lines.append("") + + path.write_text("\n".join(lines).rstrip() + "\n") + + +def main() -> None: + args = parse_args() + setup_logging(args.log_level) + + LOGGER.info("Loading held-out rows from %s", args.input_csv) + rows = load_rows(input_csv=args.input_csv, limit=args.limit, shuffle=args.shuffle, seed=args.seed) + LOGGER.info("Loaded %d glycans", len(rows)) + + span_types = [item.strip() for item in args.span_types.split(",") if item.strip()] + mask_requirements = parse_mask_plan(args.mask_plan) + if mask_requirements: + span_types = sorted(set(span_types) | set(mask_requirements)) + evaluator = HeldoutIPAEvaluator( + checkpoint=args.checkpoint, + vocab=args.vocab, + ambiguity=args.ambiguity, + device=args.device, + threshold=args.threshold, + batch_size=args.batch_size, + top_k=args.top_k, + max_length=args.max_length, + ) + + cases, build_stats = evaluator.build_cases( + rows=rows, + span_types=span_types, + selection_mode=args.selection_mode, + max_cases_per_glycan=args.max_cases_per_glycan, + seed=args.seed, + mask_requirements=mask_requirements, + ) + LOGGER.info( + "Built %d evaluation cases across %d masked positions", + build_stats.get("num_cases", 0), + build_stats.get("num_masked_positions", 0), + ) + + results, summary = evaluator.evaluate_cases(cases=cases, iterations=args.iterations) + + run_dir = args.output_dir / args.run_name + run_dir.mkdir(parents=True, exist_ok=True) + write_json(run_dir / "build_stats.json", build_stats) + write_json(run_dir / "summary.json", summary) + write_jsonl(run_dir / "case_details.jsonl", results) + write_case_csv(run_dir / "case_results.csv", results) + write_summary_markdown( + run_dir / "summary.md", + args=args, + input_rows=rows, + build_stats=build_stats, + summary=summary, + ) + + LOGGER.info("Saved outputs under %s", run_dir) + if summary: + LOGGER.info( + "Overall top1=%.4f top5=%.4f iterative_final=%.4f span_exact=%.4f", + summary["overall"]["initial_top1_token_accuracy"], + summary["overall"]["initial_top5_token_accuracy"], + summary["overall"]["iterative_final_token_accuracy"], + summary["overall"]["iterative_exact_span_accuracy"], + ) + + +if __name__ == "__main__": + main() diff --git a/releases/2026-10-02/iar_completion/runtime_snapshot/schema/classify.py b/releases/2026-10-02/iar_completion/runtime_snapshot/schema/classify.py new file mode 100644 index 0000000000000000000000000000000000000000..4a3c778461420a0334162c108d946db65e9a1968 --- /dev/null +++ b/releases/2026-10-02/iar_completion/runtime_snapshot/schema/classify.py @@ -0,0 +1,78 @@ +"""Definitive classification of '|' in WURCS LIN + residue-definition sections.""" +import re, collections, json, sys +sys.path.insert(0,'.') +from pipelib import (split_sections, _TopLevelBracket, parse_record, ALT_GROUP_RE, + SIDE_RE, node_index) + +TOKEN_RE = re.compile(r"[A-Za-z]+[0-9?]+") + +def groups_in(entry): + return [m.group(0) for m in ALT_GROUP_RE.finditer(entry)] + +def group_kind(g): + members = g.split("|") + parsed = [] + for m in members: + mm = SIDE_RE.match(m) + if not mm: return None + parsed.append((mm.group(1), mm.group(2))) + res = [p[0] for p in parsed]; pos = [p[1] for p in parsed] + ures, upos = set(res), set(pos) + if len(ures) == 1 and len(upos) > 1: + return ("P_ALT_UNK" if "?" in upos else "P_ALT"), parsed + if len(upos) == 1 and len(ures) > 1: + return ("R_ALT_UNK" if "?" in upos else "R_ALT"), parsed + if len(ures) == 1 and len(upos) == 1: + return "DEGENERATE", parsed + return "JOINT_ALT", parsed + +# entry-level shape: is it a plain 2-sided linkage with no repeat furniture? +PLAIN_LINK = re.compile(r"^([A-Za-z0-9?|]+)-([A-Za-z0-9?|]+)$") + +def classify_entry(entry, rec): + """Returns dict describing one pipe-bearing LIN entry.""" + out = {} + out["repeat"] = ("{" in entry) or ("}" in entry) + out["tilde"] = "~" in entry + out["substituent"] = "*" in entry + gs = groups_in(entry) + kinds = [] + for g in gs: + k = group_kind(g) + kinds.append(k[0] if k else "UNPARSED") + out["groups"] = gs + out["kinds"] = kinds + m = PLAIN_LINK.match(entry) + out["plain_link"] = bool(m) + out["r205"] = False + out["r205_detail"] = None + if m and not out["repeat"] and not out["tilde"] and not out["substituent"]: + L, R = m.group(1), m.group(2) + for altside, fixside in ((L, R), (R, L)): + if "|" not in altside or "|" in fixside: + continue + k = group_kind(altside) + if not k or k[0] != "P_ALT": + continue + fm = SIDE_RE.match(fixside) + if not fm or fm.group(2) == "?": + continue + dres, dpos = fm.group(1), int(fm.group(2)) + ares = k[1][0][0] + apos = sorted(int(p) for _, p in k[1]) + try: + di = node_index(dres) - 1; ai = node_index(ares) - 1 + except ValueError: + continue + if not (0 <= di < rec["nres"] and 0 <= ai < rec["nres"]): + continue + danom = rec["anom"][di]; aanom = rec["anom"][ai] + donor_ok = (danom is not None and danom == dpos) + acceptor_ok = (aanom is None) or (aanom not in apos) + if donor_ok and acceptor_ok: + out["r205"] = True + out["r205_detail"] = dict(donor_skel=rec["skel"][di], donor_pos=dpos, + acceptor_skel=rec["skel"][ai], alts=apos, + acceptor_subs=sorted(rec["subs"][ai])) + break + return out diff --git a/releases/2026-10-02/iar_completion/runtime_snapshot/schema/pipelib.py b/releases/2026-10-02/iar_completion/runtime_snapshot/schema/pipelib.py new file mode 100644 index 0000000000000000000000000000000000000000..0e43338409cf0e85244235340a3c1fa342d902fa --- /dev/null +++ b/releases/2026-10-02/iar_completion/runtime_snapshot/schema/pipelib.py @@ -0,0 +1,119 @@ +"""Shared WURCS '|' classification library. Frozen-parser-faithful where it matters.""" +import re + +WURCS_RES_INDEX_ALPHABET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + +def node_index(label): + base = len(WURCS_RES_INDEX_ALPHABET) + value = 0 + for ch in label: + d = WURCS_RES_INDEX_ALPHABET.index(ch) + 1 # raises ValueError + value = value * base + d + return value + +def split_sections(wurcs): + """Frozen A5WURCSPreTokenizer._split_wurcs_sections semantics.""" + if wurcs.startswith("WURCS="): + body = wurcs[6:] + else: + return None + sections, cur, depth = [], [], 0 + for ch in body: + if ch == "[": + depth += 1; cur.append(ch) + elif ch == "]": + if depth: depth -= 1 + cur.append(ch) + elif ch == "/" and depth == 0: + sections.append("".join(cur)); cur = [] + else: + cur.append(ch) + sections.append("".join(cur)) + if len(sections) > 5: + sections = sections[:4] + ["/".join(sections[4:])] + return sections + +class _TopLevelBracket: + @staticmethod + def findall(text): + out, depth, start = [], 0, -1 + for i, c in enumerate(text): + if c == "[": + if depth == 0: start = i + 1 + depth += 1 + elif c == "]" and depth: + depth -= 1 + if depth == 0 and start >= 0: + out.append(text[start:i]); start = -1 + return [] if depth else out + +ANOM_RE = re.compile(r"-([0-9]+)([abuxo])(?:_|$)") +RING_RE = re.compile(r"^(\d+)-(\d+|\?)$") + +def parse_record(wurcs): + """Return dict with sections, residue defs, per-instance def index, anomeric pos, LIN entries.""" + s = split_sections(wurcs) + if s is None or len(s) < 4: + return None + defs = _TopLevelBracket.findall(s[2]) + idx_list = s[3].split("-") if s[3] else [] + lin = s[4] if len(s) > 4 else "" + anom, skel, ring, subs = [], [], [], [] + for di in idx_list: + try: + d = defs[int(di) - 1] + except (IndexError, ValueError): + anom.append(None); skel.append(None); ring.append(None); subs.append(set()); continue + m = ANOM_RE.search(d) + anom.append(int(m.group(1)) if m else None) + parts = d.split("_") + skel.append(parts[0].split("-")[0]) + r = None; sb = set() + for p in parts[1:]: + mr = RING_RE.match(p) + if mr: + r = (int(mr.group(1)), mr.group(2)); continue + # substituent forms like '2*NCC/3=O', '3|4*OCC/3=O', '6%?%*OC' + for mm in re.finditer(r"(\d+)(?:%\?%)?\*", p): + sb.add(int(mm.group(1))) + ring.append(r); subs.append(sb) + return dict(wurcs=wurcs, sections=s, defs=defs, idx_list=idx_list, lin=lin, + anom=anom, skel=skel, ring=ring, subs=subs, nres=len(idx_list)) + +# ---- alternation groups ------------------------------------------------- +ALT_GROUP_RE = re.compile(r"(?:[A-Za-z]+[0-9?]+)(?:\|[A-Za-z]+[0-9?]+)+") +SIDE_RE = re.compile(r"^([A-Za-z]+)([0-9?]+)$") + +def alt_groups(entry): + return [(m.group(0), m.start(), m.end()) for m in ALT_GROUP_RE.finditer(entry)] + +def classify_group(text): + members = text.split("|") + parsed = [] + for m in members: + mm = SIDE_RE.match(m) + if not mm: return None + parsed.append((mm.group(1), mm.group(2))) + residues = {p[0] for p in parsed} + positions = {p[1] for p in parsed} + n = len(parsed) + if len(residues) == 1 and len(positions) == n: + kind = "POS_ALT" + elif len(positions) == 1 and len(residues) == n: + kind = "RES_ALT_Q" if "?" in positions else "RES_ALT" + elif len(residues) == 1: + kind = "POS_ALT_DUP" + elif len(positions) == 1: + kind = "RES_ALT_DUP" + else: + kind = "JOINT_ALT" + return dict(kind=kind, n=n, residues=sorted(residues), positions=sorted(positions), + parsed=parsed, all_q=(positions == {"?"}), any_q=("?" in positions)) + +# split a LIN entry into left/right around the top-level '-' that separates the two sides +LINK_SPLIT_RE = re.compile(r"^(?P [A-Za-z0-9?|%]+?)(?P \}?)-(?P
\{?)(?P [A-Za-z0-9?|%]+)(?P .*)$") + +def split_entry(entry): + m = LINK_SPLIT_RE.match(entry) + if not m: return None + return m.group("L"), m.group("R"), m.group("lb"), m.group("rb"), m.group("tail") diff --git a/releases/2026-10-02/iar_inference/README.md b/releases/2026-10-02/iar_inference/README.md new file mode 100644 index 0000000000000000000000000000000000000000..01f3788324c95920c853a688f360194d49740fd3 --- /dev/null +++ b/releases/2026-10-02/iar_inference/README.md @@ -0,0 +1,58 @@ +# Full-checkpoint IAR inference on two recorded cases + +This entry point loads the full frozen BERTose WA3 checkpoint and runs the saved 211-class linkage readout on two real, previously executed single-linkage cases. It preserves the original masked side channels, training-frequency-weighted neutral linkage embedding, input-of-`sequence_head` feature, NumPy float32 feature normalization, 0.80 acceptance threshold and maximum of three rounds. No fitting occurs. + +The fixture was rebuilt with the frozen tokenizer and official WURCS helper in Slurm job 16662851. That job accepted `g8-h2` for the benchmark case and abstained on the grey-seal case. These two cases are an inference check, not an estimate of completion accuracy. The full portable forward passed in job 16683971; the earlier preparation check recorded here loaded no model. + +## Files and dependencies + +Keep these three released directories together, or supply the two root arguments below: + +```text +code/ + iar_inference/ # this runner, configuration and two-case fixtures + iar_completion/ # saved readout, metadata, original source and vocabulary + bertose_source/ # unchanged model sources and small component authorities +``` + +`config.json` pins the 14 required files under `bertose_source`, five files under `iar_completion`, copied helpers and four fixture files. The full checkpoint is supplied separately through `--checkpoint`; it is not copied here. Its required SHA-256 is `8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82`. + +Python 3.10 or later is required. `requirements.txt` records the PyTorch and NumPy versions used by the executed CPU reference. Use a CPU-capable PyTorch build. The runner always uses CPU float32, even on a machine with CUDA. Allow several GB of memory for the complete historical checkpoint and model. On Nova, run the full command only in a Slurm compute allocation. + +## Run + +Check the small files without importing PyTorch or opening the checkpoint: + +```bash +python code/iar_inference/infer.py --preflight-only +``` + +Run the full checkpoint and compare both cases with the saved execution: + +```bash +python code/iar_inference/infer.py \ + --checkpoint /absolute/path/to/review_md20x6_checkpoint_best.pt \ + --output-dir /absolute/path/to/new_iar_output \ + --threads 4 +``` + +The output directory must not exist and its parent must exist. To relocate the companion artifacts, add `--source-root /absolute/path/to/bertose_source` and `--readout-root /absolute/path/to/iar_completion`. Their internal relative layouts and bytes must remain intact. No Nova path, Java installation, training dataset or scheduler is required by this runner. + +A successful full run writes `inference_report.json` and two `caseN_pre_sequence_head.npy` arrays. It must report `PASS_PORTABLE_FULL_WA3_TWO_CASE_REFERENCE_CHECK`, 505 strictly loaded state entries, 138,487,995 model parameters, 12 verified component bindings, two finite model forwards, the recorded acceptance/abstention decisions and the same ordered top-10 token IDs. Hidden vectors and probabilities must agree with the CPU reference using `atol=2e-5, rtol=2e-5`; exact equality and maximum hidden differences are reported separately. This tolerance is an explicit smoke-test criterion, not a claim of historical CUDA bitwise replay. A mismatch fails the run. + +## What the loader preserves + +The loader imports the byte-pinned R5 composite and MD factory from the released source tree. The factory receives the exact original composite class and module through the two attributes it uses from the training executor. It constructs the original `A111`/`A1111`, 2,114-token model with temporal size 128. It retains the unmodified production configuration validation, constructor authority checks, no-follow authority-file reads, tensor-surface validation and live model contract. It also explicitly rechecks the component authorities after strict checkpoint loading. `isolated_test_fixture` remains false. + +The original R5 source pin matches the R5 executor's bound source. Its constructor independently validates the frozen R4 lineage, sequence vocabulary and tokenizer bindings, topology source and MS authority/receipt/certificate. The loader neither edits those checks nor changes their archival authorization flags. It does not invoke the training launcher, optimizer/planner authorities or the later static-release launch bootstrap. Those gates authorize a different operation: this entry point has no training path and supplies explicitly absent MS, static and MD carriers, as the executed IAR smoke did. Full checkpoint loading does not establish that active physical-modality inference is portable. + +`original_inference_helpers.py` contains only eight verbatim function definitions from the final historical IAR source: the absent-carrier constructor, hook/capture utilities and forward helper, plus its failure function. Preflight compares their ASTs with that pinned source. The historical module itself is not imported because its top level changes `builtins.open` and requires a `WORK` environment variable. The saved `iar_completion/readout.py` is used unchanged. The full historical checkpoint uses `torch.load(..., weights_only=False)` only after its complete bytes match the mandatory SHA-256, through the same open file descriptor; do not replace this with untrusted checkpoint bytes. + +## Scope limits + +- The runner accepts only the two byte-pinned rebuilt fixture cases. Their WURCS strings and helper records are provenance; raw WURCS is not converted at runtime. Moving the fixture files does not require regenerating them, so no input export helper is needed. +- General glycan completion, new masking cases, residue or multi-token fallback, corpus reconstruction and full historical metrics are outside this executable interface. +- The complete checkpoint is loaded, but the two forwards exercise sequence inference with MS, static and MD explicitly absent. Active carrier paths, CUDA and other checkpoints are untested here. +- A passing small-file preflight does not establish successful checkpoint loading or numerical inference. Only a completed full-run report does so for these two cases. + +The public runner passed a fresh-extraction CPU execution in Nova job 16683971: full strict loading, both hidden vectors bitwise equal to the prior reference, and unchanged ordered predictions and abstention. The receipt is in `../provenance/portable_execution_20260930/iar_portable_report.json`. diff --git a/releases/2026-10-02/iar_inference/SHA256SUMS b/releases/2026-10-02/iar_inference/SHA256SUMS new file mode 100644 index 0000000000000000000000000000000000000000..e5eecb89a6fc43ed5955ff1715a47a1513e5e03d --- /dev/null +++ b/releases/2026-10-02/iar_inference/SHA256SUMS @@ -0,0 +1,10 @@ +8fc1d034d7b8a3d7c12cdfa958f1b5825be73cedabce8e96a83441e883bea0e7 README.md +043a38744f9fd832181d822ae8481488d954604bf615b2eb05c4c8ad29794325 config.json +a212cfbd49ec2f951e942c92caaac63260687a626eca588cb692d86bb1e52198 fixtures/case0_pre_sequence_head.npy +6ffca438526432a33168a85a0fee1158fd2a9c9f23ecb97f587235f204ae50b3 fixtures/case1_pre_sequence_head.npy +60ac0c0fd1b6e0ada2d847d1fccff4f6fe7c085aab3146247dc5d7bfebbabc27 fixtures/rebuilt_two_case_inputs.json +60dcdb6262457962da84c7b239c194fac343bd8d27db0e05f15906acb9bf5f4b fixtures/reference_smoke_report.json +9237b349668ea3fb5266f4696169fd958e9f997e5064ede0ab06e41859b17361 infer.py +87fa484e1f6105fa476dff4cf8c7e6aea71a2aac537796131a4858632f54b906 original_inference_helpers.py +4e36f9237dc494eb47898ff3ab9a5b1a483f5004aa933a5294af794edd0757ce preparation_validation.json +16e89b25a13eabc8586ba2a8ec32890ecf321f652b03f7548c63112d13cb2e62 requirements.txt diff --git a/releases/2026-10-02/iar_inference/config.json b/releases/2026-10-02/iar_inference/config.json new file mode 100644 index 0000000000000000000000000000000000000000..1358ea5e17591e1ac41939e01a534c7f488e25fa --- /dev/null +++ b/releases/2026-10-02/iar_inference/config.json @@ -0,0 +1,178 @@ +{ + "schema": "bertose_portable_two_case_iar_v1", + "source_root": "../bertose_source", + "readout_root": "../iar_completion", + "model_sources": { + "r5": "writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_composite_r5.py", + "md_core": "writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/review_md_temporal_20x6_core_r3.py" + }, + "source_files": [ + { + "path": "writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_composite_r4.py", + "bytes": 70358, + "sha256": "52a311636e7631b97711aab63aec28e2ada47a446d1aecc1a47921d584f69f9d" + }, + { + "path": "writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_composite_r5.py", + "bytes": 58459, + "sha256": "24c35257fc61e1c9c77630d2b0075775a7f46b6500ecb5f175ef8f42bd214e0e" + }, + { + "path": "writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/review_md_temporal_20x6_core_r3.py", + "bytes": 48643, + "sha256": "3e96d8092239c2c21f217ad5bae4ee7e07dbe0f7630b213bad468d6b08d3b1c1" + }, + { + "path": "writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_r4_lineage_receipt_r1.json", + "bytes": 1716, + "sha256": "b5fbdff168de23676208484ccccc3cc32f613ea411d193e6d8930456e8edeeef" + }, + { + "path": "writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r3/review_a5_topology_loss_v2.py", + "bytes": 8067, + "sha256": "64eaf9174f523ae909c84987049d071bf3869ca8e83919f14f0572ef77b0530e" + }, + { + "path": "writing/review/multimodal/runtime/a5_ms_acquisition_top30_v3_20260721_r3/review_a5_ms_acquisition_top30_runtime_v3.py", + "bytes": 43711, + "sha256": "68c0d543c5411276ef56c7072bded4ebda886f46b9fa4ebf3c95c1e54c1a08c6" + }, + { + "path": "data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_receipt.json", + "bytes": 5797, + "sha256": "399df3de2b6c4d5e88aa442c8326214ab9cff2e8f0411e6921762bbade1475ba" + }, + { + "path": "data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_summary.json", + "bytes": 7777, + "sha256": "93ed219d807d4a7735be96bf7cf6a59a0bd407619925ee194aed6d473048cdf0" + }, + { + "path": "data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bytes": 138150, + "sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b" + }, + { + "path": "data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py", + "bytes": 14161, + "sha256": "6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4" + }, + { + "path": "data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py", + "bytes": 11405, + "sha256": "10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04" + }, + { + "path": "data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_authority.json", + "bytes": 20541, + "sha256": "48914855c4e458ff02452ad4db3743a4fbef12221e0313584db4c2b1bd684cd4" + }, + { + "path": "data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_receipt.json", + "bytes": 6260, + "sha256": "f654177eb6fde7289b6755812c2be298084697cf0d85159b3ec9da310fe3d4b4" + }, + { + "path": "data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_independent_certificate.json", + "bytes": 19121, + "sha256": "53098620a5c22dafdc951ba743515b4b10b1673c02f0aa4d881db669584902fa" + } + ], + "readout_files": [ + { + "path": "readout.py", + "bytes": 5515, + "sha256": "42464d76c743a302bae79ced6b09af9657444c6f977535b5de49dcf59a5a8a90" + }, + { + "path": "model_metadata.json", + "bytes": 3132, + "sha256": "bbf016ce2f1a7dc82940be28397cbe8083da7ad0f5f525b1cf7345fd42a5758d" + }, + { + "path": "assets/linkage_readout.pt", + "bytes": 663845, + "sha256": "a03990a02a1737de05a7fa1739164e84fa6a0a4170ebaa65317a9f3c2f16c0b0" + }, + { + "path": "originals/wa3_final_iar_readout_all.py", + "bytes": 82622, + "sha256": "72f8583bf32799ba29c09829d138900c0cbb589f73bd278f389da6fa8a786730" + }, + { + "path": "runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bytes": 138150, + "sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b" + } + ], + "local_files": [ + { + "path": "original_inference_helpers.py", + "bytes": 4608, + "sha256": "87fa484e1f6105fa476dff4cf8c7e6aea71a2aac537796131a4858632f54b906" + }, + { + "path": "fixtures/case0_pre_sequence_head.npy", + "bytes": 3200, + "sha256": "a212cfbd49ec2f951e942c92caaac63260687a626eca588cb692d86bb1e52198" + }, + { + "path": "fixtures/case1_pre_sequence_head.npy", + "bytes": 3200, + "sha256": "6ffca438526432a33168a85a0fee1158fd2a9c9f23ecb97f587235f204ae50b3" + }, + { + "path": "fixtures/rebuilt_two_case_inputs.json", + "bytes": 42915, + "sha256": "60ac0c0fd1b6e0ada2d847d1fccff4f6fe7c085aab3146247dc5d7bfebbabc27" + }, + { + "path": "fixtures/reference_smoke_report.json", + "bytes": 7532, + "sha256": "60dcdb6262457962da84c7b239c194fac343bd8d27db0e05f15906acb9bf5f4b" + } + ], + "original_helper_functions": [ + "fail", + "all_absent", + "_linkage_hook", + "find_linkage_embedding", + "_cap_hook", + "find_lm_projection", + "_gather_h", + "_forward" + ], + "checkpoint": { + "sha256": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "md_cell_id": "A1111", + "base_cell_id": "A111", + "best_epoch": 58, + "state_entries": 505, + "parameter_count": 138487995, + "vocabulary_size": 2114, + "md_temporal_size": 128 + }, + "inference": { + "device": "cpu", + "dtype": "float32", + "threshold": 0.8, + "maximum_rounds": 3, + "neutral_module": "sequence_embeddings.linkage_embeddings", + "hidden_module": "sequence_head", + "neutral_training_counts": [ + 97966, + 150442, + 219104, + 95827, + 13486, + 11976, + 23, + 36422 + ], + "hidden_allclose_atol": 2e-05, + "hidden_allclose_rtol": 2e-05, + "probability_allclose_atol": 2e-05, + "probability_allclose_rtol": 2e-05 + }, + "scope": "The two byte-pinned, official-helper-rebuilt single-linkage cases only; physical modalities explicitly absent. No refit, raw-WURCS conversion, fallback, corpus metrics or training authorization." +} diff --git a/releases/2026-10-02/iar_inference/fixtures/case0_pre_sequence_head.npy b/releases/2026-10-02/iar_inference/fixtures/case0_pre_sequence_head.npy new file mode 100644 index 0000000000000000000000000000000000000000..53d2d9b6e82f6d20183258a5acb7a0213dc9eac2 --- /dev/null +++ b/releases/2026-10-02/iar_inference/fixtures/case0_pre_sequence_head.npy @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a212cfbd49ec2f951e942c92caaac63260687a626eca588cb692d86bb1e52198 +size 3200 diff --git a/releases/2026-10-02/iar_inference/fixtures/case1_pre_sequence_head.npy b/releases/2026-10-02/iar_inference/fixtures/case1_pre_sequence_head.npy new file mode 100644 index 0000000000000000000000000000000000000000..9c979dc808b15c26de49e3ab801f60cbf5752ad0 --- /dev/null +++ b/releases/2026-10-02/iar_inference/fixtures/case1_pre_sequence_head.npy @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ffca438526432a33168a85a0fee1158fd2a9c9f23ecb97f587235f204ae50b3 +size 3200 diff --git a/releases/2026-10-02/iar_inference/fixtures/rebuilt_two_case_inputs.json b/releases/2026-10-02/iar_inference/fixtures/rebuilt_two_case_inputs.json new file mode 100644 index 0000000000000000000000000000000000000000..481f56cdaeb624b2b8f7ded15b5cc700334d0de8 --- /dev/null +++ b/releases/2026-10-02/iar_inference/fixtures/rebuilt_two_case_inputs.json @@ -0,0 +1,3718 @@ +[ + { + "dataset": "bench1392", + "source_case_id": "g0000_s00_linkage_38_38", + "recorded_source_sha256": "124effa978c07bab00e7056c41d4c727a2a4c7d766d8d2a510c11a0fc52d3721", + "official_helper": { + "rooted": true, + "depths": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "parents": [ + -1, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "helper_error": false + }, + "rebuilt_case": { + "case_id": "g0000_s00_linkage_38_38", + "glycan_index": 0, + "wurcs": "WURCS=2.0/2,10,9/[AUd21122h_5*NCC/3=O][Aad21122h-2a_2-6_5*NCC/3=O]/1-2-2-2-2-2-2-2-2-2/a8-b2_b8-c2_c8-d2_d8-e2_e8-f2_f8-g2_g8-h2_h8-i2_i8-j2", + "mask_plan": "linkage:1", + "units": [ + { + "g": 35, + "unit_type": "linkage", + "unit_text": "g8-h2" + } + ], + "wa0_iterative_span_exact": true, + "wa0_initial_span_exact_top1": true, + "unit_text": "linkage:g8-h2", + "positions": [ + 43 + ], + "truth_ids": [ + 1720 + ], + "masked_ids": [ + 2, + 316, + 225, + 254, + 208, + 225, + 254, + 208, + 225, + 254, + 208, + 225, + 254, + 208, + 225, + 254, + 208, + 225, + 254, + 208, + 225, + 254, + 208, + 225, + 254, + 208, + 225, + 254, + 208, + 225, + 1283, + 568, + 72, + 557, + 436, + 1484, + 2015, + 75, + 557, + 619, + 76, + 557, + 348, + 4, + 1380, + 79, + 557, + 585, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "attention_mask": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "residue_ids": [ + -1, + 0, + 0, + 1, + 1, + 1, + 2, + 2, + 2, + 3, + 3, + 3, + 4, + 4, + 4, + 5, + 5, + 5, + 6, + 6, + 6, + 7, + 7, + 7, + 8, + 8, + 8, + 9, + 9, + 9, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "branch_depths": [ + 0, + 0, + 0, + 1, + 1, + 1, + 2, + 2, + 2, + 3, + 3, + 3, + 4, + 4, + 4, + 5, + 5, + 5, + 6, + 6, + 6, + 7, + 7, + 7, + 8, + 8, + 8, + 9, + 9, + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linkage_types": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "branch_depths_blank": [ + 0, + 0, + 0, + 1, + 1, + 1, + 2, + 2, + 2, + 3, + 3, + 3, + 4, + 4, + 4, + 5, + 5, + 5, + 6, + 6, + 6, + 7, + 7, + 7, + 8, + 8, + 8, + 9, + 9, + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linkage_types_blank": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 9, + 8, + 8, + 8, + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "enumerated_alternative": false, + "unknown_question_mark": false, + "wa3_truth_uses_invalid_token": false, + "single_answer": true + } + }, + { + "dataset": "seal162", + "source_case_id": "g0000_s00_linkage_9_9", + "recorded_source_sha256": "86b08c4b8c5081ee90eef3401ae5b0a09595c301f6c79f3d892521b3ea3e33d1", + "official_helper": { + "rooted": true, + "depths": [ + 0, + 1, + 2 + ], + "parents": [ + -1, + 0, + 1 + ], + "helper_error": false + }, + "rebuilt_case": { + "case_id": "g0000_s00_linkage_9_9", + "glycan_index": 0, + "wurcs": "WURCS=2.0/3,3,2/[h2122h_2*NCC/3=O][a2112h-1b_1-5][a2122h-1b_1-5_2*NCC/3=O_6*OSO/3=O/3=O]/1-2-3/a4-b1_b3-c1", + "mask_plan": "linkage:1", + "units": [ + { + "g": 8, + "unit_type": "linkage", + "unit_text": "a4-b1" + } + ], + "wa0_iterative_span_exact": true, + "wa0_initial_span_exact_top1": true, + "unit_text": "linkage:a4-b1", + "positions": [ + 9 + ], + "truth_ids": [ + 228 + ], + "masked_ids": [ + 2, + 525, + 139, + 190, + 119, + 177, + 119, + 139, + 333, + 4, + 291, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "attention_mask": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "residue_ids": [ + -1, + 0, + 0, + 1, + 1, + 2, + 2, + 2, + 2, + -2, + -2, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "branch_depths": [ + 0, + 0, + 0, + 1, + 1, + 2, + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linkage_types": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "branch_depths_blank": [ + 0, + 0, + 0, + 1, + 1, + 2, + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "linkage_types_blank": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "enumerated_alternative": false, + "unknown_question_mark": false, + "wa3_truth_uses_invalid_token": false, + "single_answer": true + } + } +] diff --git a/releases/2026-10-02/iar_inference/fixtures/reference_smoke_report.json b/releases/2026-10-02/iar_inference/fixtures/reference_smoke_report.json new file mode 100644 index 0000000000000000000000000000000000000000..61adc743e1ce1839c70100dc2577cf5c84993458 --- /dev/null +++ b/releases/2026-10-02/iar_inference/fixtures/reference_smoke_report.json @@ -0,0 +1,253 @@ +{ + "schema": "iar_two_real_saved_readout_full_model_smoke_v1", + "status": "PASS_FULL_WA3_STRICT_LOAD_AND_TWO_REAL_SAVED_READOUT_FORWARDS", + "started_unix": 1790740892.3816009, + "script_sha256": "d757fda5194ba6a6ce9fc03096b5596e47f7889844034aa70efbac33fb8235cb", + "scope": "Strict full WA3 plus two recorded single-linkage cases and fixed saved readout; no refit or metrics.", + "limits": [ + "CPU smoke, not historical CUDA numerical replay or model-quality evidence.", + "No residue or multi-token fallback; no full corpus parity or seeded case reconstruction.", + "Original Nova native authority bootstrap can read complete sequence/topology packages." + ], + "manifest_sha256": "440a748a14e9c09d017677ef3477d19ed02169a8e5ee048ff8b3f05bdaa1a12d", + "runtime": { + "python": "3.10.16", + "torch": "2.9.1+cu128", + "numpy": "2.2.6", + "device": "cpu", + "precision": "float32", + "threads": 4, + "host": "nova18-wide-4", + "slurm_job_id": "16662851" + }, + "phase": "two_case_saved_readout_forward", + "inputs_sha256": "60ac0c0fd1b6e0ada2d847d1fccff4f6fe7c085aab3146247dc5d7bfebbabc27", + "full_model": { + "state_entries": 505, + "parameters": 138487995, + "strict_load": true, + "checkpoint_sha256": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "neutral_vector": { + "shape": [ + 768 + ], + "dtype": "float32", + "sha256_c_order_bytes": "297bc451bcb34097045af18278e9cbeabbf38fdb22777d77aee87001784d4b29" + }, + "hidden_capture_input_of": "sequence_head" + }, + "readout": { + "sha256": "a03990a02a1737de05a7fa1739164e84fa6a0a4170ebaa65317a9f3c2f16c0b0", + "classes": 211, + "fit": { + "dev_accuracy_for_selection": 0.7359, + "best_epoch": 46, + "tokens": 211, + "train_samples": 111989, + "development_samples": 27690, + "feature_dim": 768 + }, + "refit": false + }, + "forward_calls": 2, + "cases": [ + { + "dataset": "bench1392", + "case_id": "g0000_s00_linkage_38_38", + "used_saved_readout": true, + "wa3_position": 43, + "truth_token_id": 1720, + "truth_token": "g8-h2", + "final_token_id": 1720, + "final_token": "g8-h2", + "abstained": false, + "rounds": [ + { + "iteration": 1, + "hidden_sha256_c_order_bytes": "ff29f35c4eb22549a5185b89c2bf9dabe5ff7f4a3fdc44291cbfa724eb5349ee", + "top10": [ + { + "token_id": 1720, + "token": "g8-h2", + "probability": 0.9999593496322632 + }, + { + "token_id": 1261, + "token": "g3-h2", + "probability": 4.006435483461246e-05 + }, + { + "token_id": 1380, + "token": "h8-i2", + "probability": 2.607788189834537e-07 + }, + { + "token_id": 1122, + "token": "d3-e2", + "probability": 1.445049662152087e-07 + }, + { + "token_id": 531, + "token": "g2-h1", + "probability": 1.0591251964342518e-07 + }, + { + "token_id": 544, + "token": "g3-h1", + "probability": 6.952672038096352e-08 + }, + { + "token_id": 1548, + "token": "m6-n2", + "probability": 1.4976388129639417e-08 + }, + { + "token_id": 1572, + "token": "h3-i2", + "probability": 8.80937189862152e-09 + }, + { + "token_id": 710, + "token": "f3-g2", + "probability": 6.006392716528808e-09 + }, + { + "token_id": 486, + "token": "g4-h1", + "probability": 4.912561468728427e-09 + } + ], + "accepted": true + } + ] + }, + { + "dataset": "seal162", + "case_id": "g0000_s00_linkage_9_9", + "used_saved_readout": true, + "wa3_position": 9, + "truth_token_id": 228, + "truth_token": "a4-b1", + "final_token_id": 4, + "final_token": "[MASK]", + "abstained": true, + "rounds": [ + { + "iteration": 1, + "hidden_sha256_c_order_bytes": "1cd693d3ea8df175d65f0eca3673ce2a73dff666d1cf06aa84bf4943127c3be8", + "top10": [ + { + "token_id": 228, + "token": "a4-b1", + "probability": 0.7713369131088257 + }, + { + "token_id": 262, + "token": "a3-b1", + "probability": 0.2158111184835434 + }, + { + "token_id": 404, + "token": "a6-b1", + "probability": 0.01060701534152031 + }, + { + "token_id": 399, + "token": "a2-b1", + "probability": 0.002030769130215049 + }, + { + "token_id": 518, + "token": "a5-b1", + "probability": 9.787840826902539e-05 + }, + { + "token_id": 1282, + "token": "a7-b1", + "probability": 7.618743984494358e-05 + }, + { + "token_id": 710, + "token": "f3-g2", + "probability": 1.4471691429207567e-05 + }, + { + "token_id": 1252, + "token": "d6-g1", + "probability": 8.236345820478164e-06 + }, + { + "token_id": 1331, + "token": "c3-d2", + "probability": 2.9395614546956494e-06 + }, + { + "token_id": 466, + "token": "h4-i1", + "probability": 1.904394366647466e-06 + } + ], + "accepted": false + }, + { + "iteration": 2, + "hidden_sha256_c_order_bytes": "1cd693d3ea8df175d65f0eca3673ce2a73dff666d1cf06aa84bf4943127c3be8", + "top10": [ + { + "token_id": 228, + "token": "a4-b1", + "probability": 0.7713369131088257 + }, + { + "token_id": 262, + "token": "a3-b1", + "probability": 0.2158111184835434 + }, + { + "token_id": 404, + "token": "a6-b1", + "probability": 0.01060701534152031 + }, + { + "token_id": 399, + "token": "a2-b1", + "probability": 0.002030769130215049 + }, + { + "token_id": 518, + "token": "a5-b1", + "probability": 9.787840826902539e-05 + }, + { + "token_id": 1282, + "token": "a7-b1", + "probability": 7.618743984494358e-05 + }, + { + "token_id": 710, + "token": "f3-g2", + "probability": 1.4471691429207567e-05 + }, + { + "token_id": 1252, + "token": "d6-g1", + "probability": 8.236345820478164e-06 + }, + { + "token_id": 1331, + "token": "c3-d2", + "probability": 2.9395614546956494e-06 + }, + { + "token_id": 466, + "token": "h4-i1", + "probability": 1.904394366647466e-06 + } + ], + "accepted": false + } + ] + } + ], + "finished_unix": 1790740986.703624 +} diff --git a/releases/2026-10-02/iar_inference/infer.py b/releases/2026-10-02/iar_inference/infer.py new file mode 100644 index 0000000000000000000000000000000000000000..755c8c0312ecc5082eb992e534bf1d7c343b4f30 --- /dev/null +++ b/releases/2026-10-02/iar_inference/infer.py @@ -0,0 +1,290 @@ +#!/usr/bin/env python3 +"""Strict full-WA3 CPU inference on two recorded single-linkage IAR cases. + +The full model uses unchanged, pinned released classes and authority checks. +This entry point neither fits a readout nor imports the historical main script. +""" +from pathlib import Path +import argparse +import ast +import hashlib +import importlib.util +import json +import os +import platform +import sys +import time +from types import SimpleNamespace + + +ROOT = Path(__file__).resolve().parent +sys.dont_write_bytecode = True + + +def require(condition, message): + if not condition: + raise ValueError(message) + + +def sha256(path): + digest = hashlib.sha256() + with Path(path).open("rb") as handle: + for block in iter(lambda: handle.read(4 << 20), b""): + digest.update(block) + return digest.hexdigest() + + +def load_module(name, path): + spec = importlib.util.spec_from_file_location(name, path) + require(spec is not None and spec.loader is not None, "Cannot import " + str(path)) + module = importlib.util.module_from_spec(spec) + sys.modules[name] = module + spec.loader.exec_module(module) + return module + + +def read_config(path=ROOT / "config.json", source_root=None, readout_root=None): + path = Path(path).resolve() + config = json.loads(path.read_text()) + require(config["schema"] == "bertose_portable_two_case_iar_v1", "Unknown config schema") + source = Path(source_root).resolve() if source_root else (path.parent / config["source_root"]).resolve() + readout = Path(readout_root).resolve() if readout_root else (path.parent / config["readout_root"]).resolve() + return config, source, readout + + +def preflight(config, source_root, readout_root): + """Check small source/authority/fixture bytes without torch or a checkpoint.""" + verified = [] + for root, key in ((source_root, "source_files"), (readout_root, "readout_files"), (ROOT, "local_files")): + for item in config[key]: + path = root / item["path"] + require(path.is_file() and path.stat().st_size == item["bytes"], "Missing/changed file: " + str(path)) + require(sha256(path) == item["sha256"], "SHA-256 differs: " + str(path)) + verified.append({"path": str(path), "sha256": item["sha256"]}) + # Verify that the copied helpers retain the original function ASTs. Do not + # import the monolithic historical source (it changes builtins.open). + def functions(path): + return {n.name: ast.dump(n, include_attributes=False) for n in ast.parse(path.read_text()).body + if isinstance(n, ast.FunctionDef)} + original = functions(readout_root / "originals/wa3_final_iar_readout_all.py") + portable = functions(ROOT / "original_inference_helpers.py") + names = config["original_helper_functions"] + require(set(portable) == set(names), "Unexpected portable inference helper") + require(all(portable[n] == original[n] for n in names), "Original helper semantics changed") + records = json.loads((ROOT / "fixtures/rebuilt_two_case_inputs.json").read_text()) + require(len(records) == 2, "Expected exactly two recorded cases") + for record in records: + case = record["rebuilt_case"] + require(len(case["positions"]) == len(case["units"]) == len(case["truth_ids"]) == 1, + "Only one masked token and one semantic unit are supported") + require(case["single_answer"] and case["units"][0]["unit_type"] == "linkage", "Not an ordinary single linkage") + for key in ("masked_ids", "attention_mask", "residue_ids", "branch_depths_blank", "linkage_types_blank"): + require(len(case[key]) == 256 and all(type(v) is int for v in case[key]), "Invalid input channel: " + key) + position = case["positions"][0] + require(0 <= position < 256 and case["attention_mask"][position] == 1 + and case["masked_ids"][position] == 4 and case["residue_ids"][position] == -2 + and case["branch_depths_blank"][position] == 0 and case["linkage_types_blank"][position] == 9, + "Masked linkage channel contract changed") + return records, verified + + +def load_model(checkpoint, config, source_root): + """Load the pinned full checkpoint through the original production classes. + + Caller must run preflight first. The R5 constructor independently reopens + all twelve component authorities with its original no-follow traversal. + """ + import torch + checkpoint = Path(checkpoint).resolve() + expected = config["checkpoint"] + # Keep the same descriptor for hashing and deserialization. weights_only=False + # is permitted only for these exact, predeclared historical checkpoint bytes. + with checkpoint.open("rb") as handle: + before = os.fstat(handle.fileno()) + digest = hashlib.sha256() + for block in iter(lambda: handle.read(4 << 20), b""): + digest.update(block) + require(digest.hexdigest() == expected["sha256"], "Full checkpoint SHA-256 differs; refusing deserialization") + handle.seek(0) + saved = torch.load(handle, map_location="cpu", weights_only=False) + after = os.fstat(handle.fileno()) + require((before.st_dev, before.st_ino, before.st_size, before.st_mtime_ns) + == (after.st_dev, after.st_ino, after.st_size, after.st_mtime_ns), "Checkpoint changed during load") + require(saved.get("md_cell_id") == expected["md_cell_id"] + and int(saved["selection"]["best_epoch"]) == expected["best_epoch"], "Checkpoint cell/epoch identity differs") + r5 = load_module("_portable_iar_r5", source_root / config["model_sources"]["r5"]) + md = load_module("_portable_iar_md", source_root / config["model_sources"]["md_core"]) + # The original factory accesses exactly these two attributes of the executor. + # No training planner, scheduler or static-release launcher is needed here. + executor_binding = SimpleNamespace(_composite=r5, NativeEightCompositeR5=r5.NativeEightCompositeR5) + model_type = md.make_md_enabled_composite_class(executor_binding) + model = model_type(r5.NativeEightConfig(cell_id=expected["base_cell_id"], seq_vocab_size=expected["vocabulary_size"]), + md_cell_id=expected["md_cell_id"], md_temporal_size=expected["md_temporal_size"]) + require(len(saved["model_state"]) == expected["state_entries"], "Checkpoint state count differs") + model.load_state_dict(saved["model_state"], strict=True) + del saved + require(len(model.state_dict()) == expected["state_entries"] + and sum(p.numel() for p in model.parameters()) == expected["parameter_count"], "Full model inventory differs") + require(all(p.dtype == torch.float32 for p in model.parameters()), "Expected float32 model parameters") + model.eval().requires_grad_(False) + model.verify_live_contract() + bindings = dict(model.reverify_component_authorities()) + require(bindings == dict(r5.EXPECTED_COMPONENT_BINDINGS), "Component authority bindings differ") + return model, bindings + + +def run_cases(model, records, config, readout_root, output_dir): + import numpy as np + import torch + helper = load_module("_portable_iar_helpers", ROOT / "original_inference_helpers.py") + readout = load_module("_portable_iar_readout", readout_root / "readout.py") + payload, linear, metadata = readout.load_readout(readout_root) + contract = config["inference"] + require(metadata["linkage_input"]["training_counts"] == contract["neutral_training_counts"] + and metadata["evaluation"]["threshold"] == contract["threshold"] + and metadata["evaluation"]["rounds"] == contract["maximum_rounds"], "Readout inference contract differs") + require(metadata["encoder"]["checkpoint_sha256"] == config["checkpoint"]["sha256"], "Readout encoder binding differs") + vocab = json.loads((readout_root / metadata["vocabulary"]["path"]).read_text())["token_to_id"] + id_to_token = {v: k for k, v in vocab.items()} + cases = [r["rebuilt_case"] for r in records] + require(all(c["truth_ids"][0] in payload["token_ids"] for c in cases), "Fixture truth is outside saved readout") + lk_name, linkage = helper.find_linkage_embedding(model) + head_name, head = helper.find_lm_projection(model) + require(lk_name == contract["neutral_module"] and head_name == contract["hidden_module"], "Hook module differs") + counts = np.asarray(contract["neutral_training_counts"], dtype=np.float64) + weights = torch.as_tensor(counts / counts.sum(), dtype=torch.float32) + helper.HOOK["vec"] = (linkage.weight[1:9].detach().float() * weights[:, None]).sum(0) + neutral_sha = hashlib.sha256(helper.HOOK["vec"].numpy().tobytes()).hexdigest() + hooks = [linkage.register_forward_hook(helper._linkage_hook), head.register_forward_hook(helper._cap_hook)] + current = [list(c["masked_ids"]) for c in cases] + unresolved = [True] * len(cases) + histories = [[] for _ in cases] + comparisons = [] + positions = [(i, c["positions"][0]) for i, c in enumerate(cases)] + tensor = lambda key: torch.tensor([c[key] for c in cases], dtype=torch.long) + reference = json.loads((ROOT / "fixtures/reference_smoke_report.json").read_text()) + try: + for iteration in range(contract["maximum_rounds"]): + helper.CAP["h"] = None + logits = helper._forward(model, "cpu", torch.tensor(current, dtype=torch.long), + tensor("attention_mask"), tensor("residue_ids"), tensor("branch_depths_blank"), + tensor("linkage_types_blank"), positions) + require(tuple(logits.shape) == (2, 256, 2114) and torch.isfinite(logits).all().item(), "Invalid full MLM output") + progress = 0 + for i, case in enumerate(cases): + if not unresolved[i]: + continue + position = case["positions"][0] + hidden = helper._gather_h(2, 256, i, position).float().cpu().numpy()[None, :] + require(hidden.shape == (1, 768) and np.isfinite(hidden).all(), "Invalid hidden feature") + if iteration == 0: + expected_hidden = np.load(ROOT / ("fixtures/case%d_pre_sequence_head.npy" % i), allow_pickle=False) + matches = bool(np.allclose(hidden, expected_hidden, atol=contract["hidden_allclose_atol"], + rtol=contract["hidden_allclose_rtol"])) + comparisons.append({"case_id": case["case_id"], "hidden_allclose": matches, + "hidden_max_abs_difference": float(np.max(np.abs(hidden - expected_hidden))), + "hidden_bitwise_equal": bool(np.array_equal(hidden, expected_hidden))}) + require(matches, "Hidden feature differs from executed reference for " + case["case_id"]) + with (output_dir / ("case%d_pre_sequence_head.npy" % i)).open("xb") as handle: + np.save(handle, hidden, allow_pickle=False) + probabilities = readout.probabilities(hidden, payload, linear)[0] + pp, indices = torch.topk(torch.from_numpy(probabilities), k=10) + ids = [int(payload["token_ids"][int(j)]) for j in indices] + # Every saved class is verified by load_readout as an ordinary + # linkage token; it therefore cannot be a special/ambiguous ID. + accepted = float(pp[0]) >= contract["threshold"] + histories[i].append({"iteration": iteration + 1, + "hidden_sha256_c_order_bytes": hashlib.sha256(hidden.tobytes()).hexdigest(), + "top10": [{"token_id": token, "token": id_to_token[token], "probability": float(p)} + for token, p in zip(ids, pp)], "accepted": accepted}) + if accepted: + current[i][position] = ids[0] + unresolved[i] = False + progress += 1 + if progress == 0: + break + finally: + for hook in hooks: + hook.remove() + helper.HOOK["mask"] = None + helper.CAP["h"] = None + results = [{"dataset": record["dataset"], "case_id": case["case_id"], "used_saved_readout": True, + "wa3_position": case["positions"][0], "truth_token_id": case["truth_ids"][0], + "truth_token": id_to_token[case["truth_ids"][0]], "final_token_id": current[i][case["positions"][0]], + "final_token": id_to_token[current[i][case["positions"][0]]], "abstained": unresolved[i], "rounds": histories[i]} + for i, (record, case) in enumerate(zip(records, cases))] + for result, expected in zip(results, reference["cases"]): + for key in ("dataset", "case_id", "wa3_position", "truth_token_id", "final_token_id", "abstained"): + require(result[key] == expected[key], "Reference result differs: " + key) + require(len(result["rounds"]) == len(expected["rounds"]), "Reference round count differs") + for actual_round, expected_round in zip(result["rounds"], expected["rounds"]): + require(actual_round["accepted"] == expected_round["accepted"], "Reference acceptance differs") + require([x["token_id"] for x in actual_round["top10"]] == [x["token_id"] for x in expected_round["top10"]], + "Reference top-10 token order differs") + require(np.allclose([x["probability"] for x in actual_round["top10"]], + [x["probability"] for x in expected_round["top10"]], + atol=contract["probability_allclose_atol"], rtol=contract["probability_allclose_rtol"]), + "Reference probabilities differ") + return {"cases": results, "forward_calls": iteration + 1, "reference_comparisons": comparisons, + "neutral_vector_sha256_c_order_bytes": neutral_sha, + "neutral_vector_bitwise_reference_match": neutral_sha == reference["full_model"]["neutral_vector"]["sha256_c_order_bytes"], + "readout": {"sha256": metadata["readout"]["sha256"], "classes": len(payload["token_ids"]), "fit": metadata["fit"], "refit": False}} + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--config", type=Path, default=ROOT / "config.json") + parser.add_argument("--source-root", type=Path, help="Released bertose_source root; preserves its relative layout") + parser.add_argument("--readout-root", type=Path, help="Released iar_completion root") + parser.add_argument("--checkpoint", type=Path, help="Full pinned WA3 review_md20x6_checkpoint_best.pt") + parser.add_argument("--output-dir", type=Path, help="New directory for report and two hidden feature arrays") + parser.add_argument("--threads", type=int, default=4, choices=range(1, 9)) + parser.add_argument("--preflight-only", action="store_true", help="Small-file integrity and input checks only; no torch/checkpoint load") + args = parser.parse_args() + config, source, readout = read_config(args.config, args.source_root, args.readout_root) + records, verified = preflight(config, source, readout) + if args.preflight_only: + print(json.dumps({"status": "PASS_PREFLIGHT_ONLY", "verified_files": len(verified), "cases": len(records), + "checkpoint_loaded": False, "model_forward_executed": False}, indent=2)) + return + if args.checkpoint is None or args.output_dir is None: + parser.error("--checkpoint and --output-dir are required for inference") + output = args.output_dir.absolute() + require(output.parent.is_dir() and not output.exists(), "Output directory must be new with an existing parent") + output.mkdir() + report = {"schema": "bertose_portable_two_case_iar_result_v1", "status": "RUNNING", "started_unix": time.time(), + "scope": config["scope"], "config_sha256": sha256(args.config), "inference_script_sha256": sha256(Path(__file__)), + "checkpoint_path": str(args.checkpoint.resolve()), "verified_files": verified, + "limits": ["Two recorded single-linkage inputs only; no general raw-WURCS conversion or corpus parity.", + "Physical modalities are explicitly absent; their active paths and residue/multitoken fallback are untested.", + "This is CPU inference, not a historical CUDA numerical replay or a model-quality estimate.", + "Original component/model guards are retained. Training/static-release launch bootstrap is outside this inference scope."]} + try: + import numpy as np + import torch + torch.set_num_threads(args.threads) + torch.set_num_interop_threads(1) + report["runtime"] = {"python": platform.python_version(), "torch": torch.__version__, "numpy": np.__version__, + "device": "cpu", "precision": "float32", "threads": args.threads, "host": platform.node()} + report["phase"] = "strict_full_checkpoint_load" + model, bindings = load_model(args.checkpoint, config, source) + report["full_model"] = {"state_entries": len(model.state_dict()), "parameters": sum(p.numel() for p in model.parameters()), + "strict_load": True, "checkpoint_sha256": config["checkpoint"]["sha256"], + "component_authorities": bindings} + report["phase"] = "two_recorded_case_inference_and_reference_comparison" + report.update(run_cases(model, records, config, readout, output)) + report["status"] = "PASS_PORTABLE_FULL_WA3_TWO_CASE_REFERENCE_CHECK" + except (Exception, SystemExit) as error: + report["status"] = "FAIL" + report["error"] = type(error).__name__ + ": " + str(error) + raise + finally: + report["finished_unix"] = time.time() + with (output / "inference_report.json").open("x") as handle: + json.dump(report, handle, indent=2, allow_nan=False) + handle.write("\n") + print(json.dumps({"status": report["status"], "report": str(output / "inference_report.json")}, indent=2)) + + +if __name__ == "__main__": + main() diff --git a/releases/2026-10-02/iar_inference/original_inference_helpers.py b/releases/2026-10-02/iar_inference/original_inference_helpers.py new file mode 100644 index 0000000000000000000000000000000000000000..56a3075025df9ffa41b82444b73670bee5eeaaab --- /dev/null +++ b/releases/2026-10-02/iar_inference/original_inference_helpers.py @@ -0,0 +1,97 @@ +"""Verbatim selected functions from the hash-bound final IAR source. + +Only these inference helpers are copied. The original module's import-time open +replacement, Nova paths, fitting functions and main() are not imported or run. +See config.json for the original source pin and helper names. +""" +import torch + +HOOK = {"mask": None, "vec": None} +CAP = {"h": None} + +def fail(msg: str): + raise SystemExit("FAIL-CLOSED: " + msg) + + +def all_absent(B, dev): # contract from iar_bytype3_20260825_r1/bytype.py (job 12094273) + return {"ms_token_ids": torch.empty((0, 64), dtype=torch.long, device=dev), + "ms_attention_mask": torch.zeros((0, 64), dtype=torch.bool, device=dev), + "ms_input_mask": torch.zeros((0, 64), dtype=torch.bool, device=dev), "ms_labels": None, + "ms_acquisition_parent_indices": torch.empty((0,), dtype=torch.long, device=dev), + "ms_parent_available": torch.zeros((B,), dtype=torch.bool, device=dev), "ms_mode": "development", + "static_token_ids": torch.zeros((B, 1, 4), dtype=torch.long, device=dev), + "static_attention_mask": torch.zeros((B, 1, 4), dtype=torch.bool, device=dev), + "static_residue_ids": torch.full((B, 1, 4), -1, dtype=torch.long, device=dev), + "static_slot_ids": torch.full((B, 1, 4), -1, dtype=torch.long, device=dev), + "static_state_mask": torch.zeros((B, 1), dtype=torch.bool, device=dev), + "static_state_ids": torch.full((B, 1), -1, dtype=torch.long, device=dev), + "static_input_mask": torch.zeros((B, 1, 4), dtype=torch.bool, device=dev), "static_labels": None, + "static_parent_available": torch.zeros((B,), dtype=torch.bool, device=dev), + "md_values": torch.zeros((B, 2, 20, 6), dtype=torch.float32, device=dev), + "md_feature_mask": torch.zeros((B, 2, 20, 6), dtype=torch.bool, device=dev), + "md_child_present_mask": torch.zeros((B, 2), dtype=torch.bool, device=dev), + "md_state_row_ids": torch.full((B, 2), -1, dtype=torch.long, device=dev), + "md_window_input_mask": torch.zeros((B, 2, 20), dtype=torch.bool, device=dev), "md_labels": None, + "md_parent_available": torch.zeros((B,), dtype=torch.bool, device=dev)} + + +def _linkage_hook(module, inputs, output): + m = HOOK["mask"] + if m is None: + return None + if output.dim() == 3 and tuple(output.shape[:2]) == tuple(m.shape): + idx = m + elif output.dim() == 2 and output.shape[0] == m.numel(): + idx = m.reshape(-1) + else: + fail("linkage embedding output %s does not match mask %s" % (tuple(output.shape), tuple(m.shape))) + out = output.clone() + out[idx] = HOOK["vec"].to(out.dtype) + return out + + +def find_linkage_embedding(model): + cands = [(n, m) for n, m in model.named_modules() if isinstance(m, torch.nn.Embedding) and m.num_embeddings == 10] + named = [(n, m) for n, m in cands if "linkage" in n.lower()] + if len(named) != 1: + fail("linkage embedding not unique: %s" % [n for n, _ in cands]) + return named[0] + + +def _cap_hook(module, inputs, output): + CAP["h"] = inputs[0].detach() + + +def find_lm_projection(model): + cands = [(n, m) for n, m in model.named_modules() if isinstance(m, torch.nn.Linear) and m.out_features == 2114] + if len(cands) > 1: + pref = [(n, m) for n, m in cands if any(k in n.lower() for k in ("seq", "mlm", "lm_", "sequence"))] + cands = pref if len(pref) == 1 else cands + if len(cands) != 1: + fail("LM projection not unique: %s" % [n for n, _ in cands]) + return cands[0] + + +def _gather_h(B, L, bi, pos): + H = CAP["h"] + if H.dim() == 3 and H.shape[0] == B and H.shape[1] == L: + return H[bi, pos] + if H.dim() == 2 and H.shape[0] == B * L: + return H.reshape(B, L, -1)[bi, pos] + fail("unexpected LM-projection input shape %s for batch %d x %d" % (tuple(H.shape), B, L)) + + +def _forward(model, dev, tok, am, rid, bd, lt, neutral_pos): + HOOK["mask"] = None + if neutral_pos is not None: + m = torch.zeros(tok.shape, dtype=torch.bool) + for bi, p in neutral_pos: + m[bi, p] = True + HOOK["mask"] = m.to(dev) + with torch.inference_mode(): + o = model(seq_token_ids=tok.to(dev), seq_attention_mask=am.bool().to(dev), seq_residue_ids=rid.to(dev), + seq_branch_depths=bd.to(dev), seq_linkage_types=lt.to(dev), + seq_labels=None, topology_labels=None, topology_available=None, + **all_absent(tok.shape[0], torch.device(dev))) + HOOK["mask"] = None + return o.sequence_logits.float() diff --git a/releases/2026-10-02/iar_inference/preparation_validation.json b/releases/2026-10-02/iar_inference/preparation_validation.json new file mode 100644 index 0000000000000000000000000000000000000000..4bfef3bc9090f539cc4928da7d5d8dcad211e09b --- /dev/null +++ b/releases/2026-10-02/iar_inference/preparation_validation.json @@ -0,0 +1,17 @@ +{ + "schema": "iar_portable_preparation_validation_v1", + "status": "PASS_PREPARATION_ONLY_FULL_FORWARD_PENDING", + "checked_at_utc": "2026-09-30T21:33:17.598488+00:00", + "python": "3.12.4", + "syntax": "PASS_2_PYTHON_FILES", + "small_file_preflight": "PASS", + "verified_files": 24, + "recorded_cases": 2, + "helper_ast_equivalence": "PASS_8_FUNCTIONS", + "negative_integrity_check": "PASS_CHANGED_FIXTURE_PIN_REJECTED", + "checkpoint_loaded": false, + "model_constructed": false, + "model_forward_executed": false, + "remote_contact": false, + "limit": "This receipt validates source/fixture preparation only. Require the independent full-model portable smoke receipt before calling portable inference verified." +} diff --git a/releases/2026-10-02/iar_inference/requirements.txt b/releases/2026-10-02/iar_inference/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..358a6f2fcb0bc21336cdbcf8814f01b4dcdf72d0 --- /dev/null +++ b/releases/2026-10-02/iar_inference/requirements.txt @@ -0,0 +1,3 @@ +# Executed CPU reference versions (Python 3.10.16). +numpy==2.2.6 +torch==2.9.1 diff --git a/releases/2026-10-02/notebooks/BERTose_workbench.ipynb b/releases/2026-10-02/notebooks/BERTose_workbench.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..17b49420aef000039fba048e9f6f0e3091e64be6 --- /dev/null +++ b/releases/2026-10-02/notebooks/BERTose_workbench.ipynb @@ -0,0 +1,583 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f77c7ed4", + "metadata": {}, + "source": [ + "# BERTose workbench\n", + "\n", + "Turn WURCS 2.0 glycans into 768-dimensional sequence embeddings, inspect similarity, make a small PCA plot, and export data for your own analysis or application.\n", + "\n", + "This notebook uses the released **variant 3** encoder. You can choose variants 1–5. The weights were learned with multimodal supervision; this interface takes WURCS sequence inputs. It does not generate MS, static 3D, or MD inputs.\n", + "\n", + "A normal **Run All** embeds six shipped examples and checks the small IAR files. Binding and full IAR are separate opt-in sections. Similarity and PCA are exploratory views, with no fitted downstream head or model-quality claim.\n", + "\n", + "The notebook works in Colab, a local Jupyter kernel, or a backend Python environment. Start with a CPU kernel and allow memory for the encoder and activations. Downloads use public Hugging Face repositories; no token is needed for public access." + ] + }, + { + "cell_type": "markdown", + "id": "86a15c72", + "metadata": {}, + "source": [ + "## 1. Get the versioned code\n", + "\n", + "The bootstrap downloads only `releases/2026-10-02/**` from the Hugging Face code repository. It does not fetch its older code tree or model weights.\n", + "\n", + "For an existing checkout, set `BERTose_CODE_DIR` to the directory containing `bertose_workbench.py`. For offline use, also set `BERTose_OFFLINE=1`, `BERTose_INSTALL=0`, and `BERTose_CHECKPOINT` to your downloaded variant checkpoint before starting the kernel. The offline path never installs packages or downloads files. Dependencies must already be available.\n", + "\n", + "You can pin code and encoder commits with `BERTose_CODE_REVISION` and `BERTose_ENCODER_REVISION`. A code snapshot and the selected encoder's hash checks provide separate provenance." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "07f338df", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import sys\n", + "import subprocess\n", + "import importlib.util\n", + "from pathlib import Path\n", + "\n", + "OFFLINE = os.environ.get(\"BERTose_OFFLINE\", \"0\") == \"1\"\n", + "INSTALL_DEPENDENCIES = os.environ.get(\"BERTose_INSTALL\", \"1\") == \"1\" and not OFFLINE\n", + "CODE_REVISION = os.environ.get(\"BERTose_CODE_REVISION\", \"main\")\n", + "ENCODER_REVISION = os.environ.get(\"BERTose_ENCODER_REVISION\", \"main\")\n", + "CODE_REPO = \"supanthadey1/bertose-affinose-training-code\"\n", + "RELEASE_PATH = \"releases/2026-10-02\"\n", + "\n", + "local_code = os.environ.get(\"BERTose_CODE_DIR\")\n", + "if local_code:\n", + " CODE_DIR = Path(local_code).expanduser().resolve()\n", + "else:\n", + " # A notebook opened from its downloaded code/notebooks folder can reuse it.\n", + " candidates = (Path.cwd(), Path.cwd().parent)\n", + " CODE_DIR = next((p.resolve() for p in candidates if (p / \"bertose_workbench.py\").is_file()), None)\n", + " if CODE_DIR is None:\n", + " if OFFLINE:\n", + " raise RuntimeError(\"Offline: set BERTose_CODE_DIR to the downloaded code directory.\")\n", + " if importlib.util.find_spec(\"huggingface_hub\") is None:\n", + " if not INSTALL_DEPENDENCIES:\n", + " raise ImportError(\"Install huggingface_hub or set BERTose_CODE_DIR to local code.\")\n", + " subprocess.run([sys.executable, \"-m\", \"pip\", \"install\", \"huggingface_hub>=1.1,<2\"], check=True)\n", + " from huggingface_hub import snapshot_download\n", + " snapshot = Path(snapshot_download(\n", + " repo_id=CODE_REPO, repo_type=\"model\", revision=CODE_REVISION,\n", + " allow_patterns=[f\"{RELEASE_PATH}/**\"],\n", + " ))\n", + " CODE_DIR = snapshot / RELEASE_PATH\n", + "\n", + "if not (CODE_DIR / \"bertose_workbench.py\").is_file():\n", + " raise FileNotFoundError(f\"The workbench module is absent from {CODE_DIR}. Check the release revision.\")\n", + "sys.path.insert(0, str(CODE_DIR))\n", + "sys.dont_write_bytecode = True\n", + "print(\"Code directory:\", CODE_DIR)\n", + "print(\"Offline:\", OFFLINE, \"| package installation:\", INSTALL_DEPENDENCIES)" + ] + }, + { + "cell_type": "markdown", + "id": "4b53e279", + "metadata": {}, + "source": [ + "## 2. Prepare the environment\n", + "\n", + "The following cell installs `requirements-workbench.txt` in the current kernel's Python when installation is enabled. That file adds Hugging Face access, plotting and notebook support to the encoder dependencies. Restart the kernel if Jupyter requests it after an installation. Installation errors stop the run." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ffe5b4ab", + "metadata": {}, + "outputs": [], + "source": [ + "if INSTALL_DEPENDENCIES:\n", + " subprocess.run([\n", + " sys.executable, \"-m\", \"pip\", \"install\", \"-r\",\n", + " str(CODE_DIR / \"requirements-workbench.txt\"),\n", + " ], check=True)\n", + "else:\n", + " print(\"Using the current environment; no packages installed.\")\n", + "\n", + "import csv\n", + "import json\n", + "import time\n", + "import shlex\n", + "import numpy as np\n", + "import torch\n", + "import matplotlib.pyplot as plt\n", + "from bertose_workbench import Encoder, cosine_similarity, nearest_neighbors, pca\n", + "\n", + "torch.set_num_threads(4)\n", + "VARIANT = \"3\"\n", + "DEVICE = \"cpu\" # Change to \"cuda\" only in a suitable local runtime.\n", + "BATCH_SIZE = 8\n", + "checkpoint_env = os.environ.get(\"BERTose_CHECKPOINT\")\n", + "LOCAL_CHECKPOINT = Path(checkpoint_env).expanduser().resolve() if checkpoint_env else None\n", + "if OFFLINE and LOCAL_CHECKPOINT is None:\n", + " raise RuntimeError(\"Offline: set BERTose_CHECKPOINT to the downloaded variant-3 sequence_encoder.pt.\")\n", + "\n", + "run_name = time.strftime(\"run_%Y%m%d_%H%M%S\") + f\"_{time.time_ns() % 1_000_000:06d}\"\n", + "OUTPUT_DIR = Path(os.environ.get(\"BERTose_OUTPUT_DIR\", str(Path.cwd() / \"bertose_outputs\" / run_name))).expanduser().resolve()\n", + "OUTPUT_DIR.mkdir(parents=True, exist_ok=True)\n", + "ASSETS_DIR = Path(os.environ.get(\"BERTose_ASSETS_DIR\", str(Path.cwd() / \"bertose_assets\"))).expanduser().resolve()\n", + "print({\"python\": sys.version.split()[0], \"torch\": torch.__version__, \"numpy\": np.__version__,\n", + " \"variant\": VARIANT, \"device\": DEVICE, \"batch_size\": BATCH_SIZE, \"threads\": torch.get_num_threads()})\n", + "print(\"Results:\", OUTPUT_DIR)" + ] + }, + { + "cell_type": "markdown", + "id": "c8d734d5", + "metadata": {}, + "source": [ + "## 3. Load once, then embed batches\n", + "\n", + "`Encoder.from_pretrained` retrieves the selected sequence export from Hugging Face and verifies it against the release manifest. Supply `local_checkpoint=...` to use an existing file. The same API is usable in a Python script or backend service; load the encoder once per worker.\n", + "\n", + "`pooling=\"first\"` returns the START-envelope token state. `pooling=\"mean\"` averages all attended states, including START and END. These are representation choices, not trained binding scores." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d2339c0d", + "metadata": {}, + "outputs": [], + "source": [ + "encoder = Encoder.from_pretrained(\n", + " variant=VARIANT,\n", + " revision=ENCODER_REVISION,\n", + " device=DEVICE,\n", + " local_checkpoint=LOCAL_CHECKPOINT,\n", + ")\n", + "print(\"Encoder loaded.\")" + ] + }, + { + "cell_type": "markdown", + "id": "7f45afc6", + "metadata": {}, + "source": [ + "## 4. Six real release inputs\n", + "\n", + "The first two WURCS strings come from `examples/glycans.csv`. Four distinct glycans come from the released held-out binding example CSVs. We keep their file and row provenance; these six examples are a demonstration, not a representative evaluation set.\n", + "\n", + "To try your own glycans, set `CUSTOM_SAMPLES` below to a list of dictionaries containing unique `sample_id` and `wurcs` strings. A single glycan is also supported; the notebook skips nearest-neighbor and PCA views until there are two or more inputs. Use WURCS 2.0, not IUPAC names or protein sequences. Inspect unknown-token and tree-channel diagnostics. The loader rejects overlength inputs rather than truncating them." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1f36c033", + "metadata": {}, + "outputs": [], + "source": [ + "CUSTOM_SAMPLES = None # Replace None with your list of sample_id/wurcs dictionaries.\n", + "samples = []\n", + "if CUSTOM_SAMPLES is None:\n", + " seen_wurcs = set()\n", + " example_sources = [\n", + " (\"examples/glycans.csv\", \"wurcs\"),\n", + " (\"bertosebind_inference/examples/glycan_cold.csv\", \"glycan_wurcs\"),\n", + " (\"bertosebind_inference/examples/protein_cold.csv\", \"glycan_wurcs\"),\n", + " ]\n", + " for relative_path, wurcs_column in example_sources:\n", + " with (CODE_DIR / relative_path).open(newline=\"\") as handle:\n", + " for source_row, row in enumerate(csv.DictReader(handle), start=2):\n", + " if row[wurcs_column] not in seen_wurcs:\n", + " seen_wurcs.add(row[wurcs_column])\n", + " samples.append({\n", + " \"sample_id\": row[\"sample_id\"], \"wurcs\": row[wurcs_column],\n", + " \"source_file\": relative_path, \"source_csv_row\": source_row,\n", + " })\n", + " assert len(samples) == 6\n", + "else:\n", + " samples = list(CUSTOM_SAMPLES)\n", + "if not samples:\n", + " raise ValueError(\"Provide at least one glycan input.\")\n", + "if any(not row.get(\"sample_id\") for row in samples) or len({row[\"sample_id\"] for row in samples}) != len(samples):\n", + " raise ValueError(\"Samples require unique, nonempty sample_id values.\")\n", + "for row in samples:\n", + " print(row[\"sample_id\"], \"\\n \", row[\"wurcs\"], \"\\n source:\", row.get(\"source_file\", \"custom input\"),\n", + " \"row\", row.get(\"source_csv_row\", \"\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1114f6ab", + "metadata": {}, + "outputs": [], + "source": [ + "wurcs = [row[\"wurcs\"] for row in samples]\n", + "vectors, diagnostics = encoder.encode_with_diagnostics(\n", + " wurcs, batch_size=BATCH_SIZE, pooling=\"first\",\n", + ")\n", + "assert vectors.shape == (len(samples), 768) and np.isfinite(vectors).all()\n", + "print(\"Embedding shape:\", vectors.shape, \"| dtype:\", vectors.dtype)\n", + "for row, diagnostic in zip(samples, diagnostics):\n", + " print(row[\"sample_id\"], diagnostic)" + ] + }, + { + "cell_type": "markdown", + "id": "1006eff2", + "metadata": {}, + "source": [ + "## 5. Compare representations\n", + "\n", + "A cosine value describes direction in this representation space. It is not a binding probability, chemical-equivalence test, or validated biological distance. Here the query is the second shipped example and its reference pool excludes the query itself." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "712c2527", + "metadata": {}, + "outputs": [], + "source": [ + "similarity = cosine_similarity(vectors, vectors)\n", + "assert similarity.shape == (len(samples), len(samples))\n", + "print(\"Cosine matrix (rows/columns follow samples):\")\n", + "print(np.array2string(similarity, precision=4))\n", + "\n", + "neighbor_rows = []\n", + "query_index = min(1, len(samples) - 1)\n", + "reference_indices = np.asarray([i for i in range(len(samples)) if i != query_index])\n", + "if len(reference_indices):\n", + " neighbor_indices, neighbor_scores = nearest_neighbors(\n", + " vectors[query_index:query_index + 1], vectors[reference_indices], k=min(3, len(reference_indices)),\n", + " )\n", + " neighbor_rows = [{\n", + " \"query_id\": samples[query_index][\"sample_id\"], \"rank\": rank + 1,\n", + " \"neighbor_id\": samples[int(reference_indices[neighbor])][\"sample_id\"],\n", + " \"cosine\": float(score),\n", + " } for rank, (neighbor, score) in enumerate(zip(neighbor_indices[0], neighbor_scores[0]))]\n", + " for row in neighbor_rows:\n", + " print(row)\n", + "else:\n", + " print(\"Nearest neighbors need at least two inputs; the single embedding is ready.\")" + ] + }, + { + "cell_type": "markdown", + "id": "3bf46f04", + "metadata": {}, + "source": [ + "## 6. A small exploratory PCA view\n", + "\n", + "PCA is fit only on these six embeddings. The plotted axes and neighborhoods change when the input set or pooling changes. This plot does not measure downstream performance or establish glycan classes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b97028b5", + "metadata": {}, + "outputs": [], + "source": [ + "coordinates = None\n", + "if len(samples) >= 2:\n", + " coordinates = pca(vectors, n_components=2)\n", + " assert coordinates.shape == (len(samples), 2) and np.isfinite(coordinates).all()\n", + " fig, (ax, key_ax) = plt.subplots(1, 2, figsize=(10, 5), gridspec_kw={\"width_ratios\": [3, 2]})\n", + " ax.scatter(coordinates[:, 0], coordinates[:, 1], s=60, color=\"#4C78A8\")\n", + " for i, row in enumerate(samples):\n", + " ax.annotate(str(i + 1), coordinates[i], xytext=(5, 5), textcoords=\"offset points\", fontsize=10)\n", + " ax.set(xlabel=\"PC 1\", ylabel=\"PC 2\")\n", + " ax.grid(alpha=0.2)\n", + " key_ax.axis(\"off\")\n", + " key_ax.text(0.0, 0.95, \"Sample key\", va=\"top\", fontsize=11, fontweight=\"bold\")\n", + " key_ax.text(0.0, 0.85, \"\\n\".join(f\"{i + 1}. {row['sample_id']}\" for i, row in enumerate(samples)),\n", + " va=\"top\", fontsize=9, linespacing=1.8)\n", + " key_ax.text(0.0, 0.25, \"Exploratory representation view\", fontsize=9, color=\"0.35\")\n", + " fig.suptitle(f\"{len(samples)} glycan inputs · variant {VARIANT} · first-token pooling\", fontsize=13)\n", + " fig.tight_layout(rect=[0, 0, 1, 0.95])\n", + " fig.savefig(OUTPUT_DIR / \"pca.png\", dpi=180, bbox_inches=\"tight\")\n", + " plt.show()\n", + "else:\n", + " print(\"A two-axis PCA view needs at least two inputs; the single embedding is ready.\")" + ] + }, + { + "cell_type": "markdown", + "id": "f1ee2c41", + "metadata": {}, + "source": [ + "## 7. Save inputs, vectors and provenance\n", + "\n", + "The NPZ stores all 768 columns plus sample IDs and WURCS. CSV files store the same vectors, PCA coordinates and nearest neighbors. A JSON sidecar records the selected settings, input provenance and diagnostics. These files can be read by another notebook or a backend collaborator." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d24de9e3", + "metadata": {}, + "outputs": [], + "source": [ + "input_csv = OUTPUT_DIR / \"glycans.csv\"\n", + "with input_csv.open(\"w\", newline=\"\") as handle:\n", + " writer = csv.DictWriter(handle, fieldnames=[\"sample_id\", \"wurcs\"])\n", + " writer.writeheader()\n", + " writer.writerows({k: row[k] for k in writer.fieldnames} for row in samples)\n", + "\n", + "np.savez_compressed(\n", + " OUTPUT_DIR / \"embeddings.npz\",\n", + " sample_id=np.asarray([row[\"sample_id\"] for row in samples]),\n", + " wurcs=np.asarray(wurcs), embeddings=vectors,\n", + ")\n", + "with (OUTPUT_DIR / \"embeddings.csv\").open(\"w\", newline=\"\") as handle:\n", + " writer = csv.writer(handle)\n", + " writer.writerow([\"sample_id\"] + [f\"embedding_{i}\" for i in range(vectors.shape[1])])\n", + " writer.writerows([row[\"sample_id\"], *vector.tolist()] for row, vector in zip(samples, vectors))\n", + "if coordinates is not None:\n", + " with (OUTPUT_DIR / \"pca.csv\").open(\"w\", newline=\"\") as handle:\n", + " writer = csv.writer(handle)\n", + " writer.writerow([\"sample_id\", \"pc1\", \"pc2\"])\n", + " writer.writerows([row[\"sample_id\"], *point.tolist()] for row, point in zip(samples, coordinates))\n", + "with (OUTPUT_DIR / \"neighbors.csv\").open(\"w\", newline=\"\") as handle:\n", + " writer = csv.DictWriter(handle, fieldnames=[\"query_id\", \"rank\", \"neighbor_id\", \"cosine\"])\n", + " writer.writeheader()\n", + " writer.writerows(neighbor_rows)\n", + "\n", + "run_metadata = {\n", + " \"code_repo\": CODE_REPO, \"code_revision_requested\": CODE_REVISION, \"code_dir\": str(CODE_DIR),\n", + " \"encoder_revision_requested\": ENCODER_REVISION, \"variant\": VARIANT, \"device\": DEVICE,\n", + " \"checkpoint\": str(encoder.checkpoint), \"encoder_metadata\": encoder.metadata,\n", + " \"pooling\": \"first\", \"batch_size\": BATCH_SIZE, \"shape\": list(vectors.shape),\n", + " \"samples\": samples, \"diagnostics\": diagnostics,\n", + " \"scope\": \"Sequence embeddings and exploratory views; no fitted task head or benchmark evaluation.\",\n", + "}\n", + "(OUTPUT_DIR / \"run.json\").write_text(json.dumps(run_metadata, indent=2, allow_nan=False) + \"\\n\")\n", + "reloaded = np.load(OUTPUT_DIR / \"embeddings.npz\", allow_pickle=False)\n", + "assert np.array_equal(reloaded[\"embeddings\"], vectors)\n", + "print(\"Wrote:\", \", \".join(sorted(p.name for p in OUTPUT_DIR.iterdir())))" + ] + }, + { + "cell_type": "markdown", + "id": "d1fee9ab", + "metadata": {}, + "source": [ + "## 8. Reuse the API in an application\n", + "\n", + "This is an ordinary Python function: adapt its dictionary response to your web framework. The shared `encoder` is already loaded. Preserve diagnostics and model settings in application outputs. Do not call `from_pretrained` for every request." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "25b08f63", + "metadata": {}, + "outputs": [], + "source": [ + "def embed_records(records, pooling=\"first\"):\n", + " matrix, info = encoder.encode_with_diagnostics(\n", + " [row[\"wurcs\"] for row in records], batch_size=BATCH_SIZE, pooling=pooling,\n", + " )\n", + " return {\n", + " \"variant\": VARIANT, \"pooling\": pooling, \"dimensions\": int(matrix.shape[1]),\n", + " \"results\": [{\"sample_id\": row[\"sample_id\"], \"embedding\": vector.tolist(), \"diagnostics\": diagnostic}\n", + " for row, vector, diagnostic in zip(records, matrix, info)],\n", + " }\n", + "\n", + "# One real request, using mean pooling to demonstrate the alternative.\n", + "api_response = embed_records(samples[:1], pooling=\"mean\")\n", + "assert len(api_response[\"results\"][0][\"embedding\"]) == 768\n", + "print({\"variant\": api_response[\"variant\"], \"pooling\": api_response[\"pooling\"],\n", + " \"dimensions\": api_response[\"dimensions\"], \"sample_id\": api_response[\"results\"][0][\"sample_id\"],\n", + " \"diagnostics\": api_response[\"results\"][0][\"diagnostics\"]})" + ] + }, + { + "cell_type": "markdown", + "id": "5cf5688a", + "metadata": {}, + "source": [ + "## 9. Embed an input CSV from the terminal\n", + "\n", + "`embed.py` is the released CSV interface. Input columns are `sample_id,wurcs`; sample IDs must be unique. The optional cell below runs it on our saved input and compares its vectors with the API output. The CLI requires a new output path and writes a JSON sidecar. It reuses the already verified checkpoint loaded by the API." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ea4276f0", + "metadata": {}, + "outputs": [], + "source": [ + "RUN_EMBED_CLI = False # Set True to execute the CLI demonstration.\n", + "if RUN_EMBED_CLI:\n", + " cli_checkpoint = encoder.checkpoint\n", + " cli_output = OUTPUT_DIR / f\"cli_embeddings_{time.time_ns()}.npz\"\n", + " cli_command = [\n", + " sys.executable, str(CODE_DIR / \"embed.py\"), \"--checkpoint\", str(cli_checkpoint),\n", + " \"--variant\", VARIANT, \"--input\", str(input_csv), \"--output\", str(cli_output),\n", + " \"--pooling\", \"first\", \"--batch-size\", str(BATCH_SIZE), \"--device\", DEVICE, \"--threads\", \"4\",\n", + " ]\n", + " print(shlex.join(cli_command))\n", + " subprocess.run(cli_command, check=True, cwd=CODE_DIR)\n", + " cli_vectors = np.load(cli_output, allow_pickle=False)[\"embeddings\"]\n", + " assert np.allclose(cli_vectors, vectors, atol=1e-6, rtol=1e-6)\n", + " print(\"CLI/API embeddings agree.\")\n", + "else:\n", + " print(\"CLI example is ready; set RUN_EMBED_CLI=True to run it.\")" + ] + }, + { + "cell_type": "markdown", + "id": "d932e5ba", + "metadata": {}, + "source": [ + "## 10. Optional: fitted BERToseBind predictions\n", + "\n", + "Set `RUN_BINDING=True` only when you want to download the fitted checkpoint, eight pinned glycan feature/index files and the **2.33 GB protein HDF5 cache**. The downloader fetches the selected fit, not all nine. The default `mo_A_glycan_s42` uses the glycan-cold example CSV. All supported cell IDs and their regimes are in `bertosebind_inference/config.json`; the cell chooses the matching CSV from that configuration.\n", + "\n", + "The runnable interface supports pairs already represented in the pinned released glycan features and protein cache. It does not build inputs for arbitrary new proteins/glycans. Its regression score is not a calibrated binding probability or affinity constant. Two example predictions check loading; they do not evaluate model quality.\n", + "\n", + "To reuse downloaded assets offline, set `BERTose_BINDING_PATHS` to the downloader's `paths_binding.json`. Paths can point outside the notebook folder. This optional section may require `requirements-analysis.txt` (`h5py` and `pandas`); installation stays off in offline mode." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5b5397f3", + "metadata": {}, + "outputs": [], + "source": [ + "RUN_BINDING = False # Explicit opt-in to the large binding assets and computation.\n", + "BINDING_CELL_ID = \"mo_A_glycan_s42\"\n", + "binding_config = json.loads((CODE_DIR / \"bertosebind_inference/config.json\").read_text())\n", + "if BINDING_CELL_ID not in binding_config[\"checkpoints\"]:\n", + " raise ValueError(\"Choose a cell ID from bertosebind_inference/config.json.\")\n", + "regime = binding_config[\"checkpoints\"][BINDING_CELL_ID][\"regime\"]\n", + "example_name = {\"test_glycan_cold\": \"glycan_cold.csv\", \"test_protein_cold\": \"protein_cold.csv\",\n", + " \"test_doubly_cold\": \"doubly_cold.csv\"}[regime]\n", + "binding_pairs = CODE_DIR / \"bertosebind_inference/examples\" / example_name\n", + "\n", + "if RUN_BINDING:\n", + " if INSTALL_DEPENDENCIES:\n", + " subprocess.run([sys.executable, \"-m\", \"pip\", \"install\", \"-r\", str(CODE_DIR / \"requirements-analysis.txt\")], check=True)\n", + " binding_paths_file = Path(os.environ.get(\"BERTose_BINDING_PATHS\", str(ASSETS_DIR / \"paths_binding.json\"))).expanduser()\n", + " if not binding_paths_file.is_file():\n", + " if OFFLINE:\n", + " raise FileNotFoundError(\"Offline binding: provide BERTose_BINDING_PATHS with existing assets.\")\n", + " subprocess.run([\n", + " sys.executable, str(CODE_DIR / \"download_assets.py\"), \"--task\", \"binding\",\n", + " \"--cell-id\", BINDING_CELL_ID, \"--output-dir\", str(ASSETS_DIR),\n", + " ], check=True)\n", + " binding_paths = json.loads(binding_paths_file.read_text())\n", + " if binding_paths[\"cell_id\"] != BINDING_CELL_ID:\n", + " raise ValueError(\"The downloaded checkpoint cell ID does not match BINDING_CELL_ID.\")\n", + " binding_output = OUTPUT_DIR / f\"binding_{BINDING_CELL_ID}_{time.time_ns()}.json\"\n", + " binding_command = [\n", + " sys.executable, \"-m\", \"bertosebind_inference.predict\",\n", + " \"--checkpoint\", binding_paths[\"checkpoint\"], \"--cell-id\", BINDING_CELL_ID,\n", + " \"--pairs\", str(binding_pairs), \"--features-dir\", binding_paths[\"features_dir\"],\n", + " \"--protein-h5\", binding_paths[\"protein_h5\"], \"--batch-size\", \"8\", \"--threads\", \"4\",\n", + " \"--output\", str(binding_output),\n", + " ]\n", + " print(shlex.join(binding_command))\n", + " subprocess.run(binding_command, check=True, cwd=CODE_DIR)\n", + " binding_result = json.loads(binding_output.read_text())\n", + " print(\"Status:\", binding_result[\"status\"])\n", + " for prediction in binding_result[\"predictions\"]:\n", + " print({key: prediction[key] for key in (\"sample_id\", \"protein_id\", \"prediction\")})\n", + "else:\n", + " print(\"Binding remains off. Selected fit:\", BINDING_CELL_ID, \"| regime:\", regime)\n", + " print(\"Pairs:\", binding_pairs)" + ] + }, + { + "cell_type": "markdown", + "id": "df1613ea", + "metadata": {}, + "source": [ + "## 11. Optional: IAR on the two released cases\n", + "\n", + "The released IAR runner accepts exactly two byte-pinned single-linkage fixtures: one benchmark case and one grey-seal case. Raw WURCS is retained as provenance; the runner does not convert arbitrary user WURCS into new masking cases. It uses the full frozen WA3 checkpoint and saved linkage readout with physical modality carriers absent.\n", + "\n", + "The small-file preflight below is safe to run with the notebook. It verifies source, metadata and fixture bytes; it does not load the full checkpoint or execute a model forward. Setting `RUN_IAR=True` separately downloads the full checkpoint and runs both recorded cases. Allow several GB of memory. It writes a new result directory and compares hidden features and predictions against the released CPU reference. The report states acceptance or abstention for each case; passing these checks is not completion-accuracy evaluation.\n", + "\n", + "For offline inference, set `BERTose_IAR_PATHS` to an existing `paths_iar.json` produced by the downloader." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f20a25f6", + "metadata": {}, + "outputs": [], + "source": [ + "RUN_IAR = False # Explicit opt-in to the full checkpoint and two model cases.\n", + "preflight_command = [sys.executable, str(CODE_DIR / \"iar_inference/infer.py\"), \"--preflight-only\"]\n", + "preflight = subprocess.run(preflight_command, check=True, text=True, capture_output=True, cwd=CODE_DIR)\n", + "print(preflight.stdout)\n", + "\n", + "if RUN_IAR:\n", + " iar_paths_file = Path(os.environ.get(\"BERTose_IAR_PATHS\", str(ASSETS_DIR / \"paths_iar.json\"))).expanduser()\n", + " if not iar_paths_file.is_file():\n", + " if OFFLINE:\n", + " raise FileNotFoundError(\"Offline IAR: provide BERTose_IAR_PATHS with the existing full checkpoint.\")\n", + " subprocess.run([\n", + " sys.executable, str(CODE_DIR / \"download_assets.py\"), \"--task\", \"iar\",\n", + " \"--output-dir\", str(ASSETS_DIR),\n", + " ], check=True)\n", + " iar_paths = json.loads(iar_paths_file.read_text())\n", + " iar_output = OUTPUT_DIR / f\"iar_two_cases_{time.time_ns()}\"\n", + " iar_command = [\n", + " sys.executable, str(CODE_DIR / \"iar_inference/infer.py\"),\n", + " \"--checkpoint\", iar_paths[\"checkpoint\"], \"--output-dir\", str(iar_output), \"--threads\", \"4\",\n", + " ]\n", + " print(shlex.join(iar_command))\n", + " subprocess.run(iar_command, check=True, cwd=CODE_DIR)\n", + " iar_result = json.loads((iar_output / \"inference_report.json\").read_text())\n", + " print(\"Status:\", iar_result[\"status\"])\n", + " for case in iar_result[\"cases\"]:\n", + " print({key: case[key] for key in (\"dataset\", \"case_id\", \"final_token\", \"abstained\")})\n", + "else:\n", + " print(\"Full IAR remains off; only the small-file preflight ran.\")" + ] + }, + { + "cell_type": "markdown", + "id": "aa091d22", + "metadata": {}, + "source": [ + "## Continue with your inputs\n", + "\n", + "- Start with a small WURCS list, inspect diagnostics, then increase the batch size according to memory.\n", + "- Keep pooling and encoder variant fixed when comparing vectors. Build a reference matrix once and reuse `nearest_neighbors(query_vectors, reference_vectors, k=...)`.\n", + "- Use `embeddings.npz` for analysis and `embed_records` for an application response. For a CSV pipeline, use the executed `embed.py` interface above.\n", + "- Use the separate binding and IAR package READMEs for their fixed-input contracts. The embedding API supports new WURCS inputs; the shipped binding/IAR examples have narrower input support." + ] + } + ], + "metadata": { + "bertose_workbench": { + "default_batch_size": 8, + "default_device": "cpu", + "default_threads": 4, + "distributed_outputs": "stripped", + "release": "2026-10-02" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/releases/2026-10-02/provenance/WA3_checkpoint_index.json b/releases/2026-10-02/provenance/WA3_checkpoint_index.json new file mode 100644 index 0000000000000000000000000000000000000000..c7f36fe57dc76f4d2b7a0b0f2d1f44e16e0a5364 --- /dev/null +++ b/releases/2026-10-02/provenance/WA3_checkpoint_index.json @@ -0,0 +1 @@ +{"cell_id":"A1111","generation":73,"index_sha256":"249bcca15c06644843070cd47c1d62520d2b5cf00e9533ed65311227040ead33","roles":{"best":{"development_loss":0.38572948901364407,"epoch":58,"filename":"review_md20x6_checkpoint_best.pt","sha256":"8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82"},"latest":{"development_loss":0.385906232017773,"epoch":73,"filename":"review_md20x6_checkpoint_latest.pt","sha256":"1a2d27f26d585ffedf67518f3fc769e9be1c71d5943a8d0c9ae3f75d7dd62f30"},"milestones":{"25":{"development_loss":0.39812925026342416,"epoch":25,"filename":"review_md20x6_checkpoint_milestone_025.pt","sha256":"08f5e9e744edbc555191949ddc56fc6d793d61572e0bee434eb50135f539e790"},"50":{"development_loss":0.38745878758199537,"epoch":50,"filename":"review_md20x6_checkpoint_milestone_050.pt","sha256":"1026b01bb50beaaaaa30354eb7b2bcd5307d82689f1f38a4b6d382b1e3b77ffa"}}},"run_identity_sha256":"55dd7ff33d2196cb1da5e215adb79b0880249f8f1e8c541a7fe36f5759c369d5","schema":"bertose_review_md_temporal_20x6_checkpoint_index_20260802_r3"} diff --git a/releases/2026-10-02/provenance/WA3_final_receipt.json b/releases/2026-10-02/provenance/WA3_final_receipt.json new file mode 100644 index 0000000000000000000000000000000000000000..04dd1d6b167979bbf2bc7c8ff18164a20a6d711b --- /dev/null +++ b/releases/2026-10-02/provenance/WA3_final_receipt.json @@ -0,0 +1 @@ +{"development_history":[{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.22662700572537933,"ms":0.8557433197062682,"sequence":0.3059137519524717,"static":0.7551767198470175,"topology":0.030460597622770504},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.25215765373639587,"ms":2.5724487456782112,"sequence":1.5196248877762957,"static":2.5891844269759083,"topology":0.06376307786672697},"total_normalized_loss":0.5028213712413956,"weighted_normalized_losses":{"md":0.45325401145075866,"ms":1.7114866394125363,"sequence":0.15295687597623586,"static":0.18879417996175438,"topology":0.007615149405692626}},"epoch":1,"improved":true,"step_identity_chain_sha256":"8349369e088705ef87b62fa7c6ce3541d2dc06f3988bad23622cfab4bf777499"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.2136726617028679,"ms":0.8150696210605691,"sequence":0.23423114401117145,"static":0.6901099233497171,"topology":0.019501219778012342},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.2377439390780074,"ms":2.450179599482438,"sequence":1.1635419253299568,"static":2.366097655659455,"topology":0.04082184501436121},"total_normalized_loss":0.47040058466287843,"weighted_normalized_losses":{"md":0.4273453234057358,"ms":1.6301392421211383,"sequence":0.11711557200558573,"static":0.17252748083742928,"topology":0.0048753049445030856}},"epoch":2,"improved":true,"step_identity_chain_sha256":"962391a900077917fa24893d4e57fa974e048d4e7b2f1840019ebb021dea6002"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.20491723994564162,"ms":0.7871846769190306,"sequence":0.19421473235822365,"static":0.6489628202681939,"topology":0.04007295908558098},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.22800217595181557,"ms":2.3663547095553628,"sequence":0.9647606195560059,"static":2.225021486712623,"topology":0.08388460535698647},"total_normalized_loss":0.45071402894938,"weighted_normalized_losses":{"md":0.40983447989128324,"ms":1.5743693538380612,"sequence":0.09710736617911182,"static":0.16224070506704846,"topology":0.010018239771395245}},"epoch":3,"improved":true,"step_identity_chain_sha256":"3aa01b318689b035ac47537fb3364c6b32599626130c2aae40ec5ca10d2f10b1"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.20059318098000678,"ms":0.7833350264236384,"sequence":0.1740526846396435,"static":0.6144367794664927,"topology":0.010871273858649505},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.22319099045385438,"ms":2.3547822808140313,"sequence":0.8646057579123623,"static":2.1066461649905643,"topology":0.022756805041848484},"total_normalized_loss":0.44224195409167955,"weighted_normalized_losses":{"md":0.40118636196001356,"ms":1.5666700528472768,"sequence":0.08702634231982175,"static":0.15360919486662317,"topology":0.002717818464662376}},"epoch":4,"improved":true,"step_identity_chain_sha256":"be59cdbbc21e7f36a63f3d33c56c24586746adb6784ae7c3896a5d797cd60d85"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.19842932505038918,"ms":0.7702185946671242,"sequence":0.16123126231503135,"static":0.5864062674323184,"topology":0.02171640669463639},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.22078336549984892,"ms":2.3153529944347926,"sequence":0.800915412719256,"static":2.010541288699162,"topology":0.04545888915917031},"total_normalized_loss":0.43398842782485625,"weighted_normalized_losses":{"md":0.39685865010077837,"ms":1.5404371893342483,"sequence":0.08061563115751567,"static":0.1466015668580796,"topology":0.005429101673659098}},"epoch":5,"improved":true,"step_identity_chain_sha256":"e90df1029db9d0ff865d415bd64e8e26a458506a2824dd0ed00c2583be939787"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1962911658604727,"ms":0.767122882303372,"sequence":0.15398089224489517,"static":0.5765596184077477,"topology":0.010398237550739037},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.21840433214979185,"ms":2.3060469780117274,"sequence":0.7648992390956554,"static":1.9767812565871012,"topology":0.021766599553807216},"total_normalized_loss":0.43011160128795173,"weighted_normalized_losses":{"md":0.3925823317209454,"ms":1.534245764606744,"sequence":0.07699044612244758,"static":0.14413990460193693,"topology":0.0025995593876847593}},"epoch":6,"improved":true,"step_identity_chain_sha256":"842cfd5af25d82c036c7e15af1643caedbf3bb83562d3a55144a041c438a9506"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.194018423453635,"ms":0.7636756649092812,"sequence":0.14634798267436108,"static":0.5698844597821273,"topology":0.0223091175846953},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.21587555412079626,"ms":2.295684302829463,"sequence":0.7269828025984444,"static":1.9538949356680038,"topology":0.046699609091960845},"total_normalized_loss":0.4273221124809437,"weighted_normalized_losses":{"md":0.38803684690727,"ms":1.5273513298185624,"sequence":0.07317399133718054,"static":0.14247111494553183,"topology":0.005577279396173825}},"epoch":7,"improved":true,"step_identity_chain_sha256":"7c71e534e6ef7cb575a5ad296663a160fb3f0bcf8d5bbbce2a9596e3ed7174bc"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1930169839550213,"ms":0.7558749452810657,"sequence":0.1399491315920143,"static":0.5620648833879897,"topology":0.00981988587483681},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.21476129753199683,"ms":2.272234570928689,"sequence":0.6951965448841485,"static":1.9270848859231555,"topology":0.02055593772104861},"total_normalized_loss":0.4221459233167775,"weighted_normalized_losses":{"md":0.3860339679100426,"ms":1.5117498905621314,"sequence":0.06997456579600715,"static":0.14051622084699741,"topology":0.0024549714687092023}},"epoch":8,"improved":true,"step_identity_chain_sha256":"81ebd06b29d8386df109dbee8ba895db64884466fb61a76a710ee5a3a8ae6fd0"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.19406822581608854,"ms":0.7518932710631684,"sequence":0.1362528402339793,"static":0.5518898818467565,"topology":0.009015226965808379},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.21593096696458605,"ms":2.260265265867628,"sequence":0.6768352378023567,"static":1.8921990706660943,"topology":0.018871547634290067},"total_normalized_loss":0.420055138215729,"weighted_normalized_losses":{"md":0.3881364516321771,"ms":1.5037865421263368,"sequence":0.06812642011698965,"static":0.13797247046168912,"topology":0.0022538067414520947}},"epoch":9,"improved":true,"step_identity_chain_sha256":"6812ea9698a1e8fa8242d95e3c4df63df9f536847337f3fdba02ed782dd4e07f"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.19102172991507627,"ms":0.7505529410653496,"sequence":0.13160407793951492,"static":0.548196846882865,"topology":0.007217244018334658},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.21254126830066034,"ms":2.256236101815413,"sequence":0.6537425365591589,"static":1.8795372017743697,"topology":0.015107835309843994},"total_normalized_loss":0.4175609807311818,"weighted_normalized_losses":{"md":0.38204345983015253,"ms":1.5011058821306993,"sequence":0.06580203896975746,"static":0.13704921172071624,"topology":0.0018043110045836645}},"epoch":10,"improved":true,"step_identity_chain_sha256":"244f9ebf8f844fdc582f8b77d68d58f852ae14f87ac5110b30ede39a22e546c5"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.19106956913570272,"ms":0.7422393981299115,"sequence":0.12959927503388055,"static":0.5440629670213283,"topology":0.006221932800593297},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.21259449684503057,"ms":2.231244772518503,"sequence":0.643783689102829,"static":1.8653638605163814,"topology":0.013024353315681565},"total_normalized_loss":0.41379775940072977,"weighted_normalized_losses":{"md":0.38213913827140544,"ms":1.484478796259823,"sequence":0.06479963751694028,"static":0.13601574175533207,"topology":0.0015554832001483242}},"epoch":11,"improved":true,"step_identity_chain_sha256":"19faa5da708b534a9be44e7b7c20d35f2f66ac5d15d9d680284a7f8b692c7e9f"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.19037402365003858,"ms":0.7366234966393759,"sequence":0.12822089536794967,"static":0.5452088458164462,"topology":0.008232884439421842},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.21182059473583295,"ms":2.2143628192359004,"sequence":0.6369365956597113,"static":1.869292598589931,"topology":0.017233872364545984},"total_normalized_loss":0.4112931841653541,"weighted_normalized_losses":{"md":0.38074804730007716,"ms":1.4732469932787517,"sequence":0.06411044768397484,"static":0.13630221145411156,"topology":0.0020582211098554605}},"epoch":12,"improved":true,"step_identity_chain_sha256":"9db8b63da1b78fa49d70078c2a3b87a934a5cf570a6742755f3d6ce00885e1f7"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.19041639201178032,"ms":0.736960530254102,"sequence":0.12604434886221993,"static":0.5334526507395191,"topology":0.005343901317552914},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.2118677361021289,"ms":2.215375975493727,"sequence":0.6261246128102991,"static":1.8289855334835847,"topology":0.011186372639271922},"total_normalized_loss":0.41049503139542853,"weighted_normalized_losses":{"md":0.38083278402356063,"ms":1.473921060508204,"sequence":0.06302217443110997,"static":0.13336316268487977,"topology":0.0013359753293882286}},"epoch":13,"improved":true,"step_identity_chain_sha256":"41ffade6ef912d2969b95a2eedcc3a039106187cdbc564b05bb150a4b1926dea"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18864850129010685,"ms":0.7347006251585065,"sequence":0.125190681186743,"static":0.535602107175571,"topology":0.022280826714292268},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.2099006837863086,"ms":2.208582478080844,"sequence":0.6218840233066719,"static":1.8363551186209766,"topology":0.04664038789759145},"total_normalized_loss":0.4097528653926128,"weighted_normalized_losses":{"md":0.3772970025802137,"ms":1.469401250317013,"sequence":0.0625953405933715,"static":0.13390052679389275,"topology":0.005570206678573067}},"epoch":14,"improved":true,"step_identity_chain_sha256":"e1fc779a32a5752f26e197664962d6285d2e86d09a0b301734ec06433cfced47"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18932230534558994,"ms":0.7300639699996679,"sequence":0.12059135975771769,"static":0.5375086685680924,"topology":0.005507952683596159},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.2106503951861696,"ms":2.194644235768195,"sequence":0.5990369192918266,"static":1.8428919184677595,"topology":0.011529780872974427},"total_normalized_loss":0.4069644771764594,"weighted_normalized_losses":{"md":0.3786446106911799,"ms":1.4601279399993359,"sequence":0.060295679878858845,"static":0.1343771671420231,"topology":0.0013769881708990397}},"epoch":15,"improved":true,"step_identity_chain_sha256":"528261498391f3cb63bf1f013018798661c55d67e76113418f6d2a8c1e4ce07d"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18979667588370328,"ms":0.729257050377908,"sequence":0.1224965826079112,"static":0.5377193858019084,"topology":0.004572563830447886},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.21117820590100242,"ms":2.192218555869727,"sequence":0.6085011033680101,"static":1.8436143795367423,"topology":0.009571734185329138},"total_normalized_loss":0.40698574624705347,"weighted_normalized_losses":{"md":0.37959335176740655,"ms":1.458514100755816,"sequence":0.0612482913039556,"static":0.1344298464504771,"topology":0.0011431409576119714}},"epoch":16,"improved":false,"step_identity_chain_sha256":"94ee181ed0af332478fbc91d6850ea1c5b9fb37055d602f6eb92ecb6f393c058"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.19044398384067177,"ms":0.7253422453133344,"sequence":0.12148093259013977,"static":0.5359335464438555,"topology":0.0063599683910022155},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.21189843628639551,"ms":2.180450266072976,"sequence":0.6034558674659781,"static":1.837491484943424,"topology":0.013313302804087004},"total_normalized_loss":0.40557726066235933,"weighted_normalized_losses":{"md":0.38088796768134353,"ms":1.4506844906266687,"sequence":0.060740466295069885,"static":0.13398338661096387,"topology":0.0015899920977505539}},"epoch":17,"improved":true,"step_identity_chain_sha256":"accedf095414e081aba3585d10801cc7152637684e6b1e66d3ba0ae439dd611e"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1888921825736983,"ms":0.7306011329012926,"sequence":0.11935736189567756,"static":0.5428638884042807,"topology":0.00425405742116268},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.21017181696628076,"ms":2.1962590003835745,"sequence":0.5929070416689655,"static":1.86125272255306,"topology":0.0089050056717322},"total_normalized_loss":0.4070889596708363,"weighted_normalized_losses":{"md":0.3777843651473966,"ms":1.4612022658025852,"sequence":0.05967868094783878,"static":0.13571597210107017,"topology":0.00106351435529067}},"epoch":18,"improved":false,"step_identity_chain_sha256":"4748dc16e2e0fb741438ffffe8ea67358decacfada7422972ed9de47e448a950"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18853731601049878,"ms":0.7212504073037117,"sequence":0.11723436805777301,"static":0.5373463378322132,"topology":0.00529378593435542},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20977697293752312,"ms":2.1681497977982307,"sequence":0.5823610814037444,"static":1.8423353544181642,"topology":0.011081466257568041},"total_normalized_loss":0.40277053231979,"weighted_normalized_losses":{"md":0.37707463202099756,"ms":1.4425008146074234,"sequence":0.05861718402888651,"static":0.1343365844580533,"topology":0.001323446483588855}},"epoch":19,"improved":true,"step_identity_chain_sha256":"cf9daba2764d8263ffb79ca7f35556d573366151727cab1c57de3eb41a0b6b31"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18732470522153952,"ms":0.7195666013047894,"sequence":0.11674263354679772,"static":0.5369274246652657,"topology":0.00497569131779692},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20842775557280213,"ms":2.1630881110398934,"sequence":0.5799183929129941,"static":1.8408990767633984,"topology":0.010415599748453847},"total_normalized_loss":0.40152594176436446,"weighted_normalized_losses":{"md":0.37464941044307903,"ms":1.4391332026095789,"sequence":0.05837131677339886,"static":0.13423185616631642,"topology":0.00124392282944923}},"epoch":20,"improved":true,"step_identity_chain_sha256":"3528d61e9a4953b6aa0220d8c4b3496d374e71547d7f57b7064f92d2af5b2893"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1876363582716866,"ms":0.7190431341736717,"sequence":0.11718534196001842,"static":0.5390776018521963,"topology":0.004164038808132024},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.2087745178734968,"ms":2.1615145172602657,"sequence":0.5821175445315936,"static":1.8482711330534378,"topology":0.008716569978407598},"total_normalized_loss":0.4015524132071616,"weighted_normalized_losses":{"md":0.3752727165433732,"ms":1.4380862683473434,"sequence":0.05859267098000921,"static":0.13476940046304908,"topology":0.001041009702033006}},"epoch":21,"improved":false,"step_identity_chain_sha256":"0478c6e9854ecd9b251c9e213bc36891fa8d4a8b44144d0effcccacf80043cb8"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18783271945591928,"ms":0.715846598873989,"sequence":0.11771536798749985,"static":0.5461228993038463,"topology":0.004379447172740652},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.2089930001119332,"ms":2.151905417156502,"sequence":0.5847504459209208,"static":1.872426504856902,"topology":0.009167483663548718},"total_normalized_loss":0.4007683814545427,"weighted_normalized_losses":{"md":0.37566543891183857,"ms":1.431693197747978,"sequence":0.058857683993749924,"static":0.13653072482596157,"topology":0.001094861793185163}},"epoch":22,"improved":true,"step_identity_chain_sha256":"7ee0957a690bf9f5456ca77b9742b292ae6a5c51b43eff3cb19b9bd8cb8f8929"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1871767668245945,"ms":0.7103727853823291,"sequence":0.11628192666514102,"static":0.5459911714081273,"topology":0.0037820487306240874},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20826315118705482,"ms":2.135450594400152,"sequence":0.5776298340009903,"static":1.8719748651185064,"topology":0.007916951292060883},"total_normalized_loss":0.3981366745562211,"weighted_normalized_losses":{"md":0.374353533649189,"ms":1.4207455707646581,"sequence":0.05814096333257051,"static":0.1364977928520318,"topology":0.0009455121826560218}},"epoch":23,"improved":true,"step_identity_chain_sha256":"2c8d3171c46864ec94861d9996b8811b38ba0d322556d6934fce6395b6ff16c0"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18777199994128557,"ms":0.7049079101886564,"sequence":0.11539469749322528,"static":0.5454564029586294,"topology":0.0036034899744572567},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20892544024501863,"ms":2.1190226410483493,"sequence":0.5732225279475711,"static":1.8701413682626205,"topology":0.0075431747820182676},"total_normalized_loss":0.39606442844795364,"weighted_normalized_losses":{"md":0.37554399988257114,"ms":1.4098158203773128,"sequence":0.05769734874661264,"static":0.13636410073965735,"topology":0.0009008724936143142}},"epoch":24,"improved":true,"step_identity_chain_sha256":"f84a0cf966e10855452bfead8481542f5a9b20cde80b2192359d4f8e68cbf4f6"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1869681200818719,"ms":0.7099487995044106,"sequence":0.11643272414371737,"static":0.5502300342311925,"topology":0.00415416605959564},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20803099936147573,"ms":2.134176051070721,"sequence":0.5783789196501185,"static":1.886508148946153,"topology":0.008695903383435295},"total_normalized_loss":0.39812925026342416,"weighted_normalized_losses":{"md":0.3739362401637438,"ms":1.4198975990088212,"sequence":0.058216362071858686,"static":0.13755750855779814,"topology":0.00103854151489891}},"epoch":25,"improved":false,"step_identity_chain_sha256":"51dd88d5d4db95b3b32fbb7ac9b952ca723bf7e2c5eed0fa35fb5b19c05f868c"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18841552983824386,"ms":0.7033956170602036,"sequence":0.11585168737709899,"static":0.5479196650977544,"topology":0.003713389834364146},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.2096414669533398,"ms":2.114476538879861,"sequence":0.5754926226934405,"static":1.8785868616187633,"topology":0.0077732278299449085},"total_normalized_loss":0.3958912802436948,"weighted_normalized_losses":{"md":0.3768310596764877,"ms":1.4067912341204072,"sequence":0.05792584368854949,"static":0.1369799162744386,"topology":0.0009283474585910365}},"epoch":26,"improved":true,"step_identity_chain_sha256":"ea75ef4544cd28fed4e054f41bad2fce6f86774be1051c0350b1e433d612ec03"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18669901981477316,"ms":0.7046144276012817,"sequence":0.11363491391429,"static":0.550115956922508,"topology":0.003343397025061905},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20773158362435176,"ms":2.1181404034703455,"sequence":0.564480812655002,"static":1.8861170256721502,"topology":0.006998722989237778},"total_normalized_loss":0.39556183805522943,"weighted_normalized_losses":{"md":0.3733980396295463,"ms":1.4092288552025634,"sequence":0.056817456957145,"static":0.137528989230627,"topology":0.0008358492562654762}},"epoch":27,"improved":true,"step_identity_chain_sha256":"ee247d44c437c3533ebc85d2582f2877b2d1a5562bc2d3391fed073f0ddedfee"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18680978057918643,"ms":0.7027360981756547,"sequence":0.11532498453928958,"static":0.5581590564718851,"topology":0.003439281182740489},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.2078548221342156,"ms":2.11249396012261,"sequence":0.5728762292306127,"static":1.9136934426227188,"topology":0.0071994370096243885},"total_normalized_loss":0.3954307668385967,"weighted_normalized_losses":{"md":0.37361956115837286,"ms":1.4054721963513095,"sequence":0.05766249226964479,"static":0.13953976411797128,"topology":0.0008598202956851223}},"epoch":28,"improved":true,"step_identity_chain_sha256":"2e05d67d34765b01db30476b094440885b15faa753286e940942a504e246f993"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18611718220913312,"ms":0.701507074633941,"sequence":0.11576753504756795,"static":0.5507436567855164,"topology":0.0035271283558496297},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20708419914771276,"ms":2.108799394245805,"sequence":0.5750745964572758,"static":1.8882691453911553,"topology":0.007383327234258153},"total_normalized_loss":0.39433999549905474,"weighted_normalized_losses":{"md":0.37223436441826624,"ms":1.403014149267882,"sequence":0.05788376752378398,"static":0.1376859141963791,"topology":0.0008817820889624074}},"epoch":29,"improved":true,"step_identity_chain_sha256":"e34003c15ef687cafdece48f6eb4640a91a8cdb00f0fee6879a58624bb3874f0"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1870041062465378,"ms":0.6952488676497738,"sequence":0.11350901360033186,"static":0.5610069497587966,"topology":0.00359732086848505},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20807103954477196,"ms":2.0899866073552906,"sequence":0.5638554035347891,"static":1.9234576749598256,"topology":0.007530261010944391},"total_normalized_loss":0.3924823044499219,"weighted_normalized_losses":{"md":0.3740082124930756,"ms":1.3904977352995476,"sequence":0.05675450680016593,"static":0.14025173743969915,"topology":0.0008993302171212625}},"epoch":30,"improved":true,"step_identity_chain_sha256":"c94b9d5bf751a42a5761422aa4c67519abfe51e1c3e2ff7b2186a2c1943fcf9b"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18552926299512953,"ms":0.6984604122216393,"sequence":0.11633959795669416,"static":0.5623446920579128,"topology":0.0035183603877805185},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20643004793958472,"ms":2.0996408268102797,"sequence":0.5779163158259982,"static":1.9280442325656804,"topology":0.007364973272932529},"total_normalized_loss":0.39352298250466167,"weighted_normalized_losses":{"md":0.37105852599025907,"ms":1.3969208244432787,"sequence":0.05816979897834708,"static":0.1405861730144782,"topology":0.0008795900969451296}},"epoch":31,"improved":false,"step_identity_chain_sha256":"22a99ec6e93cdfc3b940b0c535e82b51bcbae5e7499d24baf55db94e31432b4d"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18568012430750563,"ms":0.7001969914321841,"sequence":0.11344239058137431,"static":0.5685290688956781,"topology":0.0029350338868824578},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20659790452157764,"ms":2.1048611550431313,"sequence":0.5635244540529155,"static":1.949247868453895,"topology":0.006143897653894644},"total_normalized_loss":0.3942682904931413,"weighted_normalized_losses":{"md":0.37136024861501127,"ms":1.4003939828643681,"sequence":0.05672119529068716,"static":0.14213226722391953,"topology":0.0007337584717206144}},"epoch":32,"improved":false,"step_identity_chain_sha256":"895e2cc888a7f56cd52ea5a37a973da1ff3b308ce4dcf07bfc24318f2c824749"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18579079378983765,"ms":0.6941709269924471,"sequence":0.11519749822068524,"static":0.5661192489833935,"topology":0.004340516875965144},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20672104146598436,"ms":2.0867462115169597,"sequence":0.572242941641004,"static":1.9409856060923543,"topology":0.009085990989786602},"total_normalized_loss":0.39202742642795035,"weighted_normalized_losses":{"md":0.3715815875796753,"ms":1.3883418539848942,"sequence":0.05759874911034262,"static":0.14152981224584837,"topology":0.001085129218991286}},"epoch":33,"improved":true,"step_identity_chain_sha256":"b231fba6226a93658e7564b44fa90e2c690117d8039abd8dc94a481b032eed83"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18593081767416006,"ms":0.693387096507827,"sequence":0.11454659821670357,"static":0.5614319089508184,"topology":0.0031280227162407697},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.2068768397302944,"ms":2.084389939839984,"sequence":0.5690095994352639,"static":1.9249146819002751,"topology":0.006547880592974724},"total_normalized_loss":0.39140982207781816,"weighted_normalized_losses":{"md":0.3718616353483201,"ms":1.386774193015654,"sequence":0.057273299108351786,"static":0.1403579772377046,"topology":0.0007820056790601924}},"epoch":34,"improved":true,"step_identity_chain_sha256":"0b9516f1d44359fc25b265efd05b7ea82c1b915b26529bbebba2297c941d81e6"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18653092448192274,"ms":0.6913025012821786,"sequence":0.11700309612352572,"static":0.5737887574360878,"topology":0.003213575276954297},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20754455152462503,"ms":2.0781234411715435,"sequence":0.5812122393367132,"static":1.9672811357695654,"topology":0.006726967512346149},"total_normalized_loss":0.3916837965536452,"weighted_normalized_losses":{"md":0.3730618489638455,"ms":1.3826050025643573,"sequence":0.05850154806176286,"static":0.14344718935902195,"topology":0.0008033938192385742}},"epoch":35,"improved":false,"step_identity_chain_sha256":"6b030e9056e01db69523e77e658de8319eccfcb688835a2ef86bd664004b6e27"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18587856384316986,"ms":0.6880689560718966,"sequence":0.1145185470539755,"static":0.5619452845015106,"topology":0.002963250731657305},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20681869924796725,"ms":2.068403085629488,"sequence":0.5688702554380078,"static":1.9266748314733604,"topology":0.006202963890638041},"total_normalized_loss":0.3892762894330825,"weighted_normalized_losses":{"md":0.37175712768633973,"ms":1.376137912143793,"sequence":0.05725927352698775,"static":0.14048632112537765,"topology":0.0007408126829143262}},"epoch":36,"improved":true,"step_identity_chain_sha256":"665bd47cce5e02ea2ada4e5fdeec90728c96bf663423dd8b62fc65ad4e3336ad"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1855978427576254,"ms":0.6912036318598846,"sequence":0.11474447700890597,"static":0.570678268483088,"topology":0.00325730043461577},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20650635354998365,"ms":2.077826229945339,"sequence":0.569992561252033,"static":1.9566165729649554,"topology":0.006818497254054803},"total_normalized_loss":0.3908918159937798,"weighted_normalized_losses":{"md":0.3711956855152508,"ms":1.3824072637197693,"sequence":0.057372238504452985,"static":0.142669567120772,"topology":0.0008143251086539425}},"epoch":37,"improved":false,"step_identity_chain_sha256":"59e4358eb8cb3989c99ed96be6b743c92a78cef713baf3b8ec4fc200ac5aae21"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18628226273452947,"ms":0.6894950283626093,"sequence":0.11541384521930931,"static":0.5732782976481989,"topology":0.0028644966366610483},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20726787680708206,"ms":2.072689999463358,"sequence":0.5733176441720491,"static":1.9655309831249406,"topology":0.005996242239051097},"total_normalized_loss":0.39065944067502945,"weighted_normalized_losses":{"md":0.37256452546905894,"ms":1.3789900567252187,"sequence":0.057706922609654654,"static":0.14331957441204973,"topology":0.0007161241591652621}},"epoch":38,"improved":false,"step_identity_chain_sha256":"61ac63140ee97daeb11ff0af98b55e2cc266f7784b21723cd60e04ccb26d536e"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18609527192481407,"ms":0.6879375812347679,"sequence":0.11606297331560542,"static":0.5749748418130596,"topology":0.004197018666955648},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20705982056198813,"ms":2.0680081599231426,"sequence":0.5765421844360633,"static":1.9713477219304267,"topology":0.008785606618208533},"total_normalized_loss":0.3901780316193941,"weighted_normalized_losses":{"md":0.37219054384962813,"ms":1.3758751624695358,"sequence":0.05803148665780271,"static":0.1437437104532649,"topology":0.001049254666738912}},"epoch":39,"improved":false,"step_identity_chain_sha256":"14815a131129fdd53c6afacd0ea26e9c7cd5fc479630dad23a4465d2c7273792"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1860477765532129,"ms":0.6861794792469316,"sequence":0.11415070244626119,"static":0.5796372890932975,"topology":0.003095314515184333},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20700697460292886,"ms":2.0627231321008557,"sequence":0.5670429893633404,"static":1.987333299308969,"topology":0.006479412613565053},"total_normalized_loss":0.389442602745108,"weighted_normalized_losses":{"md":0.3720955531064258,"ms":1.3723589584938631,"sequence":0.057075351223130594,"static":0.14490932227332437,"topology":0.0007738286287960833}},"epoch":40,"improved":false,"step_identity_chain_sha256":"f74344ec081ae3f0e76daae3fa24451a0156b680057b368a8667f24b8d407827"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18539234416764283,"ms":0.691727826314129,"sequence":0.11626568618353424,"static":0.5780178487884755,"topology":0.002925738766876558},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20627770453205094,"ms":2.0794020101299573,"sequence":0.5775491594975343,"static":1.9817809173201393,"topology":0.006124440206996961},"total_normalized_loss":0.39152181618882975,"weighted_normalized_losses":{"md":0.37078468833528566,"ms":1.383455652628258,"sequence":0.05813284309176712,"static":0.14450446219711888,"topology":0.0007314346917191395}},"epoch":41,"improved":false,"step_identity_chain_sha256":"eb5126073313a51f4be295e16d8024995dbe9b86e0f5e81a784022c988690245"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18587224769755226,"ms":0.6882215320340647,"sequence":0.11647381389194182,"static":0.58260749159163,"topology":0.003232723529785487},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20681167155744778,"ms":2.068861744006903,"sequence":0.5785830327494342,"static":1.9975168786640176,"topology":0.006767050492706792},"total_normalized_loss":0.39057690403791173,"weighted_normalized_losses":{"md":0.3717444953951045,"ms":1.3764430640681293,"sequence":0.05823690694597091,"static":0.1456518728979075,"topology":0.0008081808824463718}},"epoch":42,"improved":false,"step_identity_chain_sha256":"676e09381467a3e25fd85135dc74b5227bec02e5d64206f5f2a6bf387f1296fd"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18614700269163967,"ms":0.685320170987359,"sequence":0.1171421065871618,"static":0.5920840246162111,"topology":0.002909834056541092},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20711737905439717,"ms":2.060139966794643,"sequence":0.581902773053666,"static":2.030007938152635,"topology":0.006091146924438054},"total_normalized_loss":0.39005077306395325,"weighted_normalized_losses":{"md":0.37229400538327934,"ms":1.370640341974718,"sequence":0.0585710532935809,"static":0.14802100615405278,"topology":0.000727458514135273}},"epoch":43,"improved":false,"step_identity_chain_sha256":"7ff1a9c0e0fa0e04008787607011e553c3d962cca1f1f4cedde45e1761d375b6"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1852961985002174,"ms":0.6863376928436224,"sequence":0.11782033374489713,"static":0.590915873170764,"topology":0.0026635949468924143},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20617072758180918,"ms":2.0631987377631895,"sequence":0.585271862746046,"static":2.026002836497073,"topology":0.005575695332949085},"total_normalized_loss":0.3901145633179085,"weighted_normalized_losses":{"md":0.3705923970004348,"ms":1.372675385687245,"sequence":0.058910166872448565,"static":0.147728968292691,"topology":0.0006658987367231036}},"epoch":44,"improved":false,"step_identity_chain_sha256":"90f8e0e5218cea022036b7b15872317dd62b7769a369c702fa95d2cdf261f6f2"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1852771771014432,"ms":0.6854490128941951,"sequence":0.11695329923316397,"static":0.5881065115506812,"topology":0.0027799599137752775},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20614956332880974,"ms":2.060527278262929,"sequence":0.5809648735565068,"static":2.0163707130943074,"topology":0.0058192817699651645},"total_normalized_loss":0.38953012949479454,"weighted_normalized_losses":{"md":0.3705543542028864,"ms":1.3708980257883903,"sequence":0.058476649616581985,"static":0.1470266278876703,"topology":0.0006949899784438194}},"epoch":45,"improved":false,"step_identity_chain_sha256":"6fc0204c9d72382b80dbc82c884f4ed3bbdd571aa60e6f3d4132bc84032f5c25"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18515215322101983,"ms":0.683250564808573,"sequence":0.11521552646327139,"static":0.5882545155033189,"topology":0.0027547604911359077},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20601045489269165,"ms":2.0539185266781215,"sequence":0.572332496837336,"static":2.0168781566094864,"topology":0.005766531893949943},"total_normalized_loss":0.388433103657887,"weighted_normalized_losses":{"md":0.37030430644203965,"ms":1.366501129617146,"sequence":0.057607763231635696,"static":0.14706362887582972,"topology":0.0006886901227839769}},"epoch":46,"improved":true,"step_identity_chain_sha256":"c05eda781550a7ce7718d4df2fe6c3a7de66cbabd7e25f3d23cb3984b19b4ffa"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18562786327526232,"ms":0.6840400894463337,"sequence":0.11642953551058739,"static":0.5928588482855713,"topology":0.0033916578212694337},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20653975602674077,"ms":2.0562919155405512,"sequence":0.5783630801325048,"static":2.032664483734133,"topology":0.007099747169544423},"total_normalized_loss":0.3893226599450392,"weighted_normalized_losses":{"md":0.37125572655052463,"ms":1.3680801788926673,"sequence":0.058214767755293696,"static":0.14821471207139283,"topology":0.0008479144553173584}},"epoch":47,"improved":false,"step_identity_chain_sha256":"dfa4f9e50c25e779fe20c46465945d19eacc644643045d20d3ce69bbde8abd11"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1847732815355456,"ms":0.6809981609338026,"sequence":0.11489368631824985,"static":0.5954631925978346,"topology":0.0028269217085146654},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20558890144644393,"ms":2.047147578674224,"sequence":0.570733757679195,"static":2.041593688724935,"topology":0.005917586754385115},"total_normalized_loss":0.38771245133488175,"weighted_normalized_losses":{"md":0.3695465630710912,"ms":1.3619963218676052,"sequence":0.057446843159124926,"static":0.14886579814945866,"topology":0.0007067304271286663}},"epoch":48,"improved":true,"step_identity_chain_sha256":"eb398cc6689a6cfc4580944d4217239ae6ef50ca051c458b18128689efdb8d5f"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18503533879837353,"ms":0.6819155163233396,"sequence":0.11916113116360362,"static":0.5977301799585286,"topology":0.00319209553651353},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20588048075018917,"ms":2.0499052393731887,"sequence":0.5919322665818604,"static":2.049366238137805,"topology":0.006682004035948107},"total_normalized_loss":0.38874256893979775,"weighted_normalized_losses":{"md":0.37007067759674706,"ms":1.3638310326466792,"sequence":0.05958056558180181,"static":0.14943254498963215,"topology":0.0007980238841283825}},"epoch":49,"improved":false,"step_identity_chain_sha256":"cf660140247c0497c5db143523d149b00c9d2a00d5a4a95f18df54b57cf0e4cc"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18459828916343385,"ms":0.6798209047768676,"sequence":0.11901937290670442,"static":0.5930596659260227,"topology":0.00272378837806317},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20539419532202496,"ms":2.0436086306573245,"sequence":0.5912280832169188,"static":2.0333530032470546,"topology":0.005701698062322236},"total_normalized_loss":0.38745878758199537,"weighted_normalized_losses":{"md":0.3691965783268677,"ms":1.3596418095537353,"sequence":0.05950968645335221,"static":0.14826491648150567,"topology":0.0006809470945157925}},"epoch":50,"improved":true,"step_identity_chain_sha256":"a1e41959edfb7e58c20e7c6671743081f886539cda2acb274458f70e0d75133b"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18416298638185008,"ms":0.6839928277328658,"sequence":0.11752657470392035,"static":0.5983071006205644,"topology":0.0031425546130316993},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.204909853538848,"ms":2.056149842172604,"sequence":0.5838126163184877,"static":2.051344257261655,"topology":0.006578300169048262},"total_normalized_loss":0.3890874658779582,"weighted_normalized_losses":{"md":0.36832597276370016,"ms":1.3679856554657317,"sequence":0.058763287351960174,"static":0.1495767751551411,"topology":0.0007856386532579248}},"epoch":51,"improved":false,"step_identity_chain_sha256":"b06726e9afd1de13fd3dd5397fbb33c4e12079a6970199b902832d816ac333e4"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1850617024274701,"ms":0.6803602939273509,"sequence":0.11883763390680872,"static":0.5924614841583618,"topology":0.00247797867838134},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.2059098143719069,"ms":2.045230087596152,"sequence":0.5903252957300588,"static":2.031302088703976,"topology":0.005187145353432089},"total_normalized_loss":0.3877995350744464,"weighted_normalized_losses":{"md":0.3701234048549402,"ms":1.3607205878547017,"sequence":0.05941881695340436,"static":0.14811537103959044,"topology":0.000619494669595335}},"epoch":52,"improved":false,"step_identity_chain_sha256":"11ed01719e06709d88c69773df2523b945afc2b94b4b270694cb70b2c15ac0ea"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18370845765909932,"ms":0.6804429154197278,"sequence":0.11740630981809595,"static":0.6040176960551386,"topology":0.003298208957414267},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.2044041199175711,"ms":2.0454784559439227,"sequence":0.583215201156672,"static":2.070923495311994,"topology":0.006904130942432061},"total_normalized_loss":0.3877669754639681,"weighted_normalized_losses":{"md":0.36741691531819864,"ms":1.3608858308394556,"sequence":0.058703154909047976,"static":0.15100442401378464,"topology":0.0008245522393535668}},"epoch":53,"improved":false,"step_identity_chain_sha256":"913413f22ca2cd32737d80a3497310d56ee9a3c56c63f4e07cc369a0df62f64b"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18539548567909112,"ms":0.6766529714521453,"sequence":0.11625312833833575,"static":0.6043026706381643,"topology":0.0029920733819102396},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20628119995023134,"ms":2.0340855109087865,"sequence":0.577486778470272,"static":2.071900553705166,"topology":0.006263298258176171},"total_normalized_loss":0.3868094328873319,"weighted_normalized_losses":{"md":0.37079097135818223,"ms":1.3533059429042906,"sequence":0.05812656416916787,"static":0.15107566765954109,"topology":0.0007480183454775599}},"epoch":54,"improved":true,"step_identity_chain_sha256":"5a56dd1131a7e16092e6a90761dcddda7d953a9b02013be21bcdbbf0a802bc40"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18360077804570496,"ms":0.6775535407567341,"sequence":0.1180505303007513,"static":0.6068469521069519,"topology":0.0033234063843095},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20428430966555874,"ms":2.036792710982263,"sequence":0.5864153628767977,"static":2.080623828382069,"topology":0.006956876640762052},"total_normalized_loss":0.3867752984756138,"weighted_normalized_losses":{"md":0.3672015560914099,"ms":1.3551070815134683,"sequence":0.05902526515037565,"static":0.15171173802673799,"topology":0.000830851596077375}},"epoch":55,"improved":true,"step_identity_chain_sha256":"ddb2a2911f734055a9a27af2aac9ecee0676628234a6cc6d2a40783cdd07dada"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18322473303664413,"ms":0.6806532835732804,"sequence":0.11936803171721157,"static":0.6086277957821803,"topology":0.003679147716284187},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20386590133473975,"ms":2.046110843343596,"sequence":0.5929600439490125,"static":2.0867295948730087,"topology":0.007701548906619323},"total_normalized_loss":0.38810335699061416,"weighted_normalized_losses":{"md":0.36644946607328827,"ms":1.3613065671465607,"sequence":0.059684015858605784,"static":0.15215694894554507,"topology":0.0009197869290710468}},"epoch":56,"improved":false,"step_identity_chain_sha256":"35bcd33f3111f1bd29fab1d6ce26847179e59086d510cfd3201a811beb361e21"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18489347082031377,"ms":0.6799477774086968,"sequence":0.12097173139885309,"static":0.6050795141984117,"topology":0.0026783415226312546},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20572263064590274,"ms":2.0439900222908833,"sequence":0.6009264133364207,"static":2.0745640246458437,"topology":0.0056065642958219725},"total_normalized_loss":0.3884215652175417,"weighted_normalized_losses":{"md":0.36978694164062753,"ms":1.3598955548173937,"sequence":0.060485865699426544,"static":0.15126987854960292,"topology":0.0006695853806578136}},"epoch":57,"improved":false,"step_identity_chain_sha256":"0ce3e2612758e7a54a43bd3bb38b91b6b28f56240369c17e10387d65a57fb47f"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18345770502032352,"ms":0.6742300866444119,"sequence":0.11983664951638005,"static":0.6109896249676888,"topology":0.002424522954548807},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20412511875943667,"ms":2.0268020804208735,"sequence":0.5952879003004393,"static":2.094827317148577,"topology":0.005075246646671062},"total_normalized_loss":0.38572948901364407,"weighted_normalized_losses":{"md":0.36691541004064704,"ms":1.3484601732888237,"sequence":0.05991832475819003,"static":0.1527474062419222,"topology":0.0006061307386372017}},"epoch":58,"improved":true,"step_identity_chain_sha256":"bbc4d6ab68e210958fb43e54319fbc9ff2c3adf5fd559e6c903a7bebb9174ffb"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18430541764756114,"ms":0.6772358458843342,"sequence":0.11843834313645311,"static":0.6130100008762871,"topology":0.0025234864641710594},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20506833038791303,"ms":2.035837688889547,"sequence":0.5883418210146559,"static":2.1017543392636653,"topology":0.005282406665268042},"total_normalized_loss":0.38723701409342637,"weighted_normalized_losses":{"md":0.3686108352951223,"ms":1.3544716917686683,"sequence":0.05921917156822656,"static":0.15325250021907177,"topology":0.0006308716160427648}},"epoch":59,"improved":false,"step_identity_chain_sha256":"687971b0d82869252fa7c1b48eef634e327372223f0fb19ca240703d9752ed95"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1838877833078002,"ms":0.6749785765260923,"sequence":0.1211451243655598,"static":0.6121063319860106,"topology":0.0031933095673136393},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20460364748352222,"ms":2.0290521147628797,"sequence":0.6017877419491136,"static":2.0986560374273475,"topology":0.006684545362989639},"total_normalized_loss":0.3864260384477792,"weighted_normalized_losses":{"md":0.3677755666156004,"ms":1.3499571530521846,"sequence":0.0605725621827799,"static":0.15302658299650265,"topology":0.0007983273918284098}},"epoch":60,"improved":false,"step_identity_chain_sha256":"59e42a6d27800dbabab6785e733bdbebd6ef23959a5e0b1308c3cd3ded043300"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18457687056416733,"ms":0.6799754532590466,"sequence":0.12034037085904453,"static":0.6192550061116541,"topology":0.002440056515538208},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.2053703638120949,"ms":2.044073218624268,"sequence":0.5977901333119712,"static":2.123165844513815,"topology":0.005107763003414316},"total_normalized_loss":0.3889397197465497,"weighted_normalized_losses":{"md":0.36915374112833466,"ms":1.3599509065180932,"sequence":0.060170185429522266,"static":0.15481375152791352,"topology":0.000610014128884552}},"epoch":61,"improved":false,"step_identity_chain_sha256":"dc2034f12c0777e9868357640285ed0f944cd341aed61e684219241eca93718e"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18451724904843766,"ms":0.6783744721375862,"sequence":0.11993402709049762,"static":0.610575358743474,"topology":0.002646263407398155},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20530402563906702,"ms":2.0392605116093083,"sequence":0.5957716228666721,"static":2.0934069719125956,"topology":0.005539415273181098},"total_normalized_loss":0.3878111722910029,"weighted_normalized_losses":{"md":0.36903449809687533,"ms":1.3567489442751723,"sequence":0.05996701354524881,"static":0.1526438396858685,"topology":0.0006615658518495387}},"epoch":62,"improved":false,"step_identity_chain_sha256":"914a329af955c22b510a20e9a742b47286eed9943d40890667c9b2cd01fd1b44"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.183479316404788,"ms":0.6776447250870751,"sequence":0.11841026921407123,"static":0.6209331289968829,"topology":0.002429041752571319},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20414916477276648,"ms":2.0370668200647524,"sequence":0.5882023639589442,"static":2.128919424473042,"topology":0.005084705833051504},"total_normalized_loss":0.3874587520556251,"weighted_normalized_losses":{"md":0.366958632809576,"ms":1.3552894501741501,"sequence":0.059205134607035616,"static":0.15523328224922073,"topology":0.0006072604381428297}},"epoch":63,"improved":false,"step_identity_chain_sha256":"c73bf6800b9b71249ca8b0567c1bb5a08f63b9a73e146bc7580374ac7f30834d"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1839770862407608,"ms":0.6767613667208217,"sequence":0.11981215230251706,"static":0.6118474175612922,"topology":0.0023987463457327595},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20470301083157091,"ms":2.034411357767912,"sequence":0.5951662105247107,"static":2.097768328393446,"topology":0.005021288548559121},"total_normalized_loss":0.38698890461023594,"weighted_normalized_losses":{"md":0.3679541724815216,"ms":1.3535227334416433,"sequence":0.05990607615125853,"static":0.15296185439032306,"topology":0.0005996865864331899}},"epoch":64,"improved":false,"step_identity_chain_sha256":"44177bb1bdc9d989f02c516b19401fd98bc6e0d74c6ee38ef91634c4447710b3"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1840057954520985,"ms":0.6791053649388362,"sequence":0.12021965637908434,"static":0.6151097989587911,"topology":0.0026189933671735247},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20473495427691787,"ms":2.04145764739349,"sequence":0.5971904847937477,"static":2.1089536667218987,"topology":0.005482330979569865},"total_normalized_loss":0.3881528694105806,"weighted_normalized_losses":{"md":0.368011590904197,"ms":1.3582107298776724,"sequence":0.06010982818954217,"static":0.15377744973969779,"topology":0.0006547483417933812}},"epoch":65,"improved":false,"step_identity_chain_sha256":"d1e4eae03c524e388b26674ded529f15d0ba620a9572a09d488b7fd91d1b337a"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18458304129881448,"ms":0.6778930106022428,"sequence":0.11855682889465703,"static":0.6244757621811947,"topology":0.0024463066961293023},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20537722971038216,"ms":2.037813190789893,"sequence":0.5889303983697586,"static":2.1410656287060936,"topology":0.005120846487745337},"total_normalized_loss":0.3881922070937548,"weighted_normalized_losses":{"md":0.36916608259762895,"ms":1.3557860212044857,"sequence":0.059278414447328516,"static":0.15611894054529868,"topology":0.0006115766740323256}},"epoch":66,"improved":false,"step_identity_chain_sha256":"35f9a9a13062d8eb7dc8563c986c972e4adc7fa99339ff87265f2a48c0de3dbf"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18442390757562716,"ms":0.6800514643494341,"sequence":0.1214192548395407,"static":0.6306108756564948,"topology":0.0031009598053264383},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20520016878977027,"ms":2.044301715452256,"sequence":0.6031494835775972,"static":2.162100361174005,"topology":0.006491229882529015},"total_normalized_loss":0.38961766602706965,"weighted_normalized_losses":{"md":0.3688478151512543,"ms":1.3601029286988682,"sequence":0.06070962741977035,"static":0.1576527189141237,"topology":0.0007752399513316096}},"epoch":67,"improved":false,"step_identity_chain_sha256":"b0f4cd477a45ba36039ed25cd16fc13b90ed5365e1c8ee898084bad7d13ffeca"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18361496530402258,"ms":0.6741262142646623,"sequence":0.12185378527980724,"static":0.6222918734381624,"topology":0.0024981878603235986},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20430009518837794,"ms":2.0264898298115566,"sequence":0.6053080111603258,"static":2.1335779896209632,"topology":0.00522944917352667},"total_normalized_loss":0.38652135342037897,"weighted_normalized_losses":{"md":0.36722993060804515,"ms":1.3482524285293247,"sequence":0.06092689263990362,"static":0.1555729683595406,"topology":0.0006245469650808997}},"epoch":68,"improved":false,"step_identity_chain_sha256":"076ecb1a4f813b50f84d86e9de78407809f775bab6232fff8c4bfbc37eaae592"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18410910225290328,"ms":0.673996083267659,"sequence":0.11852014571671958,"static":0.621748625770358,"topology":0.002154287613960629},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20484989909747253,"ms":2.0260986432111983,"sequence":0.588748174884215,"static":2.131715421079715,"topology":0.0045095638167523015},"total_normalized_loss":0.3862892344491128,"weighted_normalized_losses":{"md":0.36821820450580656,"ms":1.347992166535318,"sequence":0.05926007285835979,"static":0.1554371564425895,"topology":0.0005385719034901572}},"epoch":69,"improved":false,"step_identity_chain_sha256":"bd1b69f073ada6c240df716653e793aa4cdd588fbac71c752c182c77a9fb5607"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18340061655024986,"ms":0.6747456800720724,"sequence":0.12225088358616547,"static":0.6182707426786871,"topology":0.0027239572689114313},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.2040615989921296,"ms":2.0283520050720183,"sequence":0.6072805948228267,"static":2.1197912177732077,"topology":0.005702051601029585},"total_normalized_loss":0.3865333420049254,"weighted_normalized_losses":{"md":0.3668012331004997,"ms":1.3494913601441447,"sequence":0.061125441793082734,"static":0.15456768566967177,"topology":0.0006809893172278578}},"epoch":70,"improved":false,"step_identity_chain_sha256":"58b877487b7272d4cb96cca3210d8253569729e85bfecd05b4bf15a815cd074f"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.18375603488669295,"ms":0.675921536063296,"sequence":0.12494299095684128,"static":0.6285623639921295,"topology":0.0021978501680299835},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.2044570569541034,"ms":2.031886744052814,"sequence":0.6206536234458765,"static":2.1550768733459806,"topology":0.004600753180848078},"total_normalized_loss":0.38790333818368766,"weighted_normalized_losses":{"md":0.3675120697733859,"ms":1.351843072126592,"sequence":0.06247149547842064,"static":0.15714059099803238,"topology":0.0005494625420074959}},"epoch":71,"improved":false,"step_identity_chain_sha256":"21fe679e356c863708cd463cb4f97cc5727ed675d96196e10849f99070f5a87d"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1837435376703293,"ms":0.675566786829554,"sequence":0.12207702804374553,"static":0.6313521664754512,"topology":0.002319502583325566},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20444315186478537,"ms":2.0308203328984935,"sequence":0.6064169683678112,"static":2.164641936667343,"topology":0.004855407817806645},"total_normalized_loss":0.3876154160572667,"weighted_normalized_losses":{"md":0.3674870753406586,"ms":1.351133573659108,"sequence":0.06103851402187276,"static":0.1578380416188628,"topology":0.0005798756458313915}},"epoch":72,"improved":false,"step_identity_chain_sha256":"fa7add9defcff3fd01d8bbfc74a36de8ad26fc8ce4d61890a7025e31dd55a327"},{"development":{"native_contract_sha256":"1f18091e8b5cd24c2d4937233064ccfb1522d61f71b0e6a2b4cca0cf7224b025","native_surface_sha256":"c102fca3c4dd0df8ac57172da75b90f1dff0954f526330f545474d47a0059f4a","normalized_losses":{"md":0.1842874184263841,"ms":0.6726172266165018,"sequence":0.1200924884666931,"static":0.6200451426897949,"topology":0.0026573603891926574},"parent_counts":{"md":5066,"ms":580,"sequence":55440,"static":5390,"topology":17650},"r4_provenance_chain_sha256":"377a4ff4acb5c062f86cf190f5598d63d99d10ee85b3640c812817976f4b483b","raw_parent_means":{"md":0.20504830346584982,"ms":2.021953664242555,"sequence":0.5965587788852591,"static":2.1258748916408514,"topology":0.0055626445519697575},"total_normalized_loss":0.385906232017773,"weighted_normalized_losses":{"md":0.3685748368527682,"ms":1.3452344532330036,"sequence":0.06004624423334655,"static":0.15501128567244873,"topology":0.0006643400972981643}},"epoch":73,"improved":false,"step_identity_chain_sha256":"e33e5b3a8e3b44c0f5af6f0ff0ac49320eaadbe28d8254685dc22687a8f0e0df"}],"receipt_sha256":"b595e1691e185649a671284778eeb81e0a37414ce5be7f20ac27d7e9c71cdecc","run_identity":{"attribution_claim":"fixed_sequence_heavy_loss_sensitivity_on_final_md_inclusive_a1111","base_control_cell_id":"A111","base_launch_config_sha256":"2a89d6b54668d4db8f1b9fe857f744d31116eb6d28b2695b31461161c1aea2b9","coefficients":{"md":2.0,"ms":2.0,"sequence":0.5,"static":0.25,"topology":0.25},"completed_epoch_resume":true,"core_source_sha256":"3e96d8092239c2c21f217ad5bae4ee7e07dbe0f7630b213bad468d6b08d3b1c1","evaluation_populations":["all_parent_primary","md_present_secondary"],"heldout_access":false,"hpo":false,"initial_model_state_sha256":"128cefb8648ca4519365ec48c3c8c1525735ef2325faf881b64366bae4c5c7bc","loss_denominator":5,"loss_policy":"WA3_FINAL_MS_MD_HEAVY","manifest_sha256":"eeebc9c7e2cfc701f3ad47e62696ae2247c8caec93d8b034d5f573b701eab2a1","maximum_epochs":100,"md_cell_id":"A1111","md_native_intersection_rosters":{"pretraining_development":{"count":5066,"sha256":"b94e6907dc441597ee7ea098894de9ffd7cfe71a61b9ae3a0489f5e1b73e79d8"},"pretraining_train":{"count":22872,"sha256":"6efa5bd7ff81f9b49aab026d44d613765041dc5ea10e116059c9477650f7403a"}},"md_null_receipt_sha256":"ee6147fb6f3448b27823d0edc4ac2922b5322af7967027b778d0b2da03e92aa6","md_package_summary_sha256":"39c6691d762b1ac2d0bed3464b1ed31e4fbe72b18e218ba4a553f3f94702a9e2","md_training_window_policy":{"fixed_development_seed":0,"pretraining_seed":42,"schema":"bertose_review_md_temporal_20x6_a1111_seeded_md_window_20260811_r1","seed43_legacy_exact":true},"native_adapter_contract":{"affinose_supported":false,"authority_set_sha256":"7804332dfc2be432b45f6a82459f21f0b577fc5c358f16b1fea90ba4cb6bb52f","cells":["A000","A100","A010","A001","A110","A101","A011","A111"],"common_seed":42,"development_manifest_sha256":"4eea50c1bd4eee0ea10062c287f31c619cef5835e2e660facd098698859f7e70","development_parent_count":55440,"development_roster_sha256":"dbadd12a88e29cc1a7ca1da85895d89f0162fa8bc9f3dcf8aebf5b8781a1e698","disabled_branch_contract":"static-disabled cell opens no static package/loader/mask stream/payload","downstream_supported":false,"execution_certified":false,"gpu_launch_authorized":false,"loss_policy":{"adaptive_or_weight_ablation":false,"coefficients":[1,"topology_bit","ms_bit","static_bit"],"denominator":4},"matched_weight_policies":["WA1_FINAL_MD_EQUAL_NORMALIZED","WA2_FINAL_MD_SEQUENCE_HEAVY"],"md_supported":false,"nova_submission_authorized":false,"postfit_static":{"binding_sha256":"4ac795da03db66b1f08ad03839dd4b2432fa6f794e6afe77575ae59127f2289b","compatibility_view_persisted":false,"direct_postfit_producer_source_sha256":"8e57c17fd43f3894f94f980cf70a0d6d7f183cf04c26780c3fe30c1932bb7abb","direct_publication_validated_before_compatibility_view":true,"direct_static_bridge_evidence":{"bridge_evidence_sha256":"908452818740e3a406fca7b20605343679c791ed58162b07453635f4ed85e1dd","compatibility_view_persisted":false,"direct_export_receipt_sha256":"b68da847cd4ccd5b6cbfd65e42a4d4b504fcfae00136851fdc980acb1690ad72","direct_join_receipt_sha256":"7b55cf83bd3175e9a9e0be15fc2a9fc998d0803bc67cb2761f69f612e9b6c921","direct_null_file_sha256":"661d04d76fcf36d116feb117154eac01e6569e377d4245c07653b28696e1227b","direct_null_receipt_sha256":"84d8fdb5e960ed0f695c1618d881fe9dd13062e2ad143e099fc7db6415e54c89","direct_publication_file_sha256":"77ba176a9fab70e75b3c2c423c857d1e266f2021875aea01e15bac3f11f327d1","direct_publication_receipt_sha256":"654faac335def8eccb7c50eb8a7d871036bf2a8c223e61f0cb11027830869a84","direct_token_file_sha256":"f9a032f0bd3ad47b99c8a3df2fc46596500e13baf0e77f4b39d26a8351dc7323","direct_token_package_semantic_sha256":"b4c0adb42cc2444e91611c4492c8d385c10fe706a862dbe9b51c144aad80f9e7","native_ablation_data_binding_authorized_by_source_publication":false,"nova_submission_authorized_by_source_publication":false,"official_submitted_artifacts_modified":false,"owner_amendment_file_sha256":"876a3746653254a812d5607d1115abfa112fcefb0772b3828efcb26865dfaf7d","owner_amendment_receipt_sha256":"672d247a416280617634b8f51c7c69716fd7a6fe010db4109fe634b25c531b93","schema":"bertose_review_a5_native_eight_direct_static_bridge_20260724_r1","writer_source_sha256":"ceffd07edb6b8b322baecd95e023053ad8c783cc97cdb2edfc03c0b4fdeeaab6"},"direct_static_bridge_source_sha256":"c71ba654568a24993bc1733b26b6863b11e5c198c53871a6183b485ab96540f0","masker_binding_sha256":"c3373ddbe58ebe15cf6e941f48ea71bcb569fe14b94f394090ffbdaf12faad36","max_static_tokens":192,"nova_submission_authorized":false,"null_receipt_sha256":"661d04d76fcf36d116feb117154eac01e6569e377d4245c07653b28696e1227b","null_scale":3.4285808327094895,"null_scale_hex":"0x1.b6dbbc9a17009p+1","parent_counts":{"pretraining_development":5390,"pretraining_train":22980},"predecessor_compatibility_binding_sha256":"3105b52ff97f720a02be38fb24433087eddd19b4da362fc601a8e7540bb29d25","publication_receipt_semantic_sha256":"a79630e44bba95c7bec3bc59235dc4d8f5012968049e591bd127a26c52063803","publication_receipt_sha256":"77ba176a9fab70e75b3c2c423c857d1e266f2021875aea01e15bac3f11f327d1","release_receipt_sha256":"261099ec7bf32cd72e261ea95d0631702b46cb53cc19085827ed368ba3e3bb63","residue_counts":{"pretraining_development":51237,"pretraining_train":205801},"schema":"bertose_review_a5_native_eight_direct_static_runtime_binding_20260724_r8","state_counts":{"pretraining_development":7964,"pretraining_train":34408},"support_binding_sha256":"38c47a7c323b29bfe9c6a76668de45370789687e50663b0acf52b25bc5f96779","support_sha256_by_slot":["427c4b27091096e0260bb3ad896db841b4b41e9c615bec24cc4330e3e4ddf158","fc55a9e195344141ed497f5a59fa8ab8fcd58f04ccb21c6b7f5a9166cb8d19b6","da96778691370fa5a1c59e471af23113f72c1a93bc277f40d8ea05bdf4aa4720","db2889304eef19132309f70744dc696d2b1bb344473296b5fd7fae48afca8f5c"],"token_count":1028152,"token_export_receipt_sha256":"0e851404deed73e8557ea385a18f9d340c333f259d6c5d171fedc49b09959699","token_null_receipt_sha256":"6333289557fb1fc23324351f30b546a493ef1f2e6ea71efde49a812d3d38bb54","token_package_semantic_sha256":"f434b2cb0ecea84053563faeed700ffd351658e3bb79c8daa4b833404d6691be","token_package_sha256":"f9a032f0bd3ad47b99c8a3df2fc46596500e13baf0e77f4b39d26a8351dc7323","training_authorized":false},"predecessor_adapter_r2_receipt_sha256":"3b2118e128a5550ba4918b4f4f2c6d8045e319b7cff37b76d74dce6b3220c9f0","predecessor_adapter_r2_source_sha256":"9f8f167148aa234df413e4c3d4e1846881781c8e5a19bd91b0b178b260a3a537","predecessor_common_seed":43,"processing_contract":{"ms":"frozen MS-V3 train selection and mask streams parameterized by the declared upstream seed; fixed development seed 0","sequence":"frozen R4 train stream parameterized by the declared upstream seed; fixed development seed 0","static":"frozen final static token stream parameterized by the declared upstream seed; fixed development seed 0","topology":"R4-bound original-residue BFS matrix with receipt-bound inverse-multiplicity equal-parent loss"},"receipt_sha256":"77ba176a9fab70e75b3c2c423c857d1e266f2021875aea01e15bac3f11f327d1","schema":"bertose_review_md_temporal_20x6_a1111_wa2_seed_adapter_20260811_r1","scientific_launch_authorized":false,"seed_parameterization":{"fixed_development_seed":0,"model_rng_seed":42,"ms_train_selection_and_mask_seed":42,"r5_epoch_plan_seed":42,"sequence_train_mask_seed":42,"static_train_mask_seed":42},"sequence_topology_r4":{"bfs_replay_receipt_sha256":"f20a1dd444f2760ccd8605d53ad716ceb55112fd32d3409826bcaf78ff2c6c3d","predecessor_receipt_sha256":"53b058a2032c424718a96757b3aa63df5160c20910001fcb128b0ace03a13a4c","predecessor_relative_path":"review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r3","provenance_fields":["sequence_rows","roles","seq_token_categories","topology_rows","topology_residue_counts","topology_target_counts"],"r4_masker_only_checkpoint_restore":true,"r4_store_collation_required":true,"rows_only_through_r4_store_sample":true,"runtime_receipt_sha256":"654f5b9728c3dfd2588c4b570b0e3a1bcab8feb366af28eeead36f9beb37d921","runtime_sha256":"efc56a84cb82f30c0566da83a38bf0f02fdd507e02d116d827c1bbd827151ecf","store_manifest_identity_sha256":"7bd44c2f15715924bce78c7bbdbe57d40fc69aaf90ed834e17d9632bded0fc17","topology_loss_source_sha256":"64eaf9174f523ae909c84987049d071bf3869ca8e83919f14f0572ef77b0530e"},"source_sha256":"4430560565a18da0e68700d60526d3dec15fabd79854111d1e85deb59e2381c8","static_final_token_package_bound":true,"status":"WA2_SEED_PARAMETERIZED_SUCCESSOR","successor_source_sha256":"dd74253863f39150af4ddc7e8d48c0a366e1f327c30aa50e0748078330b97b85","train_manifest_sha256":"13b7ebc78b22baa1a38d2ae40da202dcc1e20e56f44220b4d4d5003ca5f3b8f2","train_parent_count":221827,"train_roster_sha256":"2a7c8121c9ec88418e930cdec47302b7ef2b4d92e01fafa523218461a249de6e","training_authorized":false,"weight_ablation_supported":false,"world_size":1},"native_adapter_contract_sha256":"ad9d49ba49f69d17e8f462930179af4832f741edf6447b880944eef0988423bd","native_launch_sha256":"30082379d47318f5d9e17fafad4aa018e7e9f0f0bf1aac559178d46784fe4b9f","optimizer_contract_sha256":"4c4498fd71ea6a14e654ee7a1e6737bcd578ee328ec73de731cf8da12396c6c0","owner_decision_sha256":"2c7fdb2f522b52fd0692fac9fce8ef5b0a202d1b418b1b9f3570ad7ea9944b83","parameter_summary":{"four_slot_fusion_parameters":2952192,"md_branch_parameters":179206,"total_parameters":138487995,"trainable_parameters":138487995},"patience":15,"precision":"fp32_no_amp","pretraining_seed":42,"runner_source_sha256":"dd74253863f39150af4ddc7e8d48c0a366e1f327c30aa50e0748078330b97b85","schema":"bertose_review_md_temporal_20x6_a1111_wa2_training_20260811_r1","selection_rule":"strict_lower_earliest_tie","semantic_array_id":"md20x6-a1111-wa345-20260817-r1","static_binding_sha256":"4ac795da03db66b1f08ad03839dd4b2432fa6f794e6afe77575ae59127f2289b"},"run_identity_sha256":"55dd7ff33d2196cb1da5e215adb79b0880249f8f1e8c541a7fe36f5759c369d5","schema":"bertose_review_md_temporal_20x6_a1111_wa2_final_20260811_r1","selection":{"best_epoch":58,"best_loss":0.38572948901364407,"completed_epochs":73,"epochs_without_improvement":15,"stop_reason":"patience_exhausted"},"status":"PASS_TRAINING_COMPLETE","terminal_attempt_identity":{"actual_slurm_route":{"account":"ratul-scavenger","partition":"scavenger","qos":"scavenger"},"attempt_sha256":"f299e47d3aaf076a1fc97d2c6ff03e62c0f913bb5ccd97098476e2f02aa302f4","device":{"compute_capability":[9,0],"cuda_visible_devices":"0","name":"NVIDIA H200 NVL","total_memory_bytes":150109880320},"slurm_array_job_id":"12042738","slurm_array_task_id":"0","slurm_job_id":"12042740","slurm_restart_count":1}} diff --git a/releases/2026-10-02/provenance/affinose_arms_on_test_20260909.json b/releases/2026-10-02/provenance/affinose_arms_on_test_20260909.json new file mode 100644 index 0000000000000000000000000000000000000000..ea448508b1a2b67373932b2c20123a63dce52089 --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_arms_on_test_20260909.json @@ -0,0 +1,263 @@ +{ + "bob_B_protein_s43": { + "stratum": "test_protein_cold", + "seed": 43, + "test_macro": 0.24463542038572242, + "test_pooled": 0.26184445034413995, + "assays": 246, + "rows": 38539, + "dir": "affinose_bob_20260909_bob_B_protein_s43" + }, + "bob_B_protein_s44": { + "stratum": "test_protein_cold", + "seed": 44, + "test_macro": 0.24516174432219207, + "test_pooled": 0.2730962401378244, + "assays": 246, + "rows": 38539, + "dir": "affinose_bob_20260909_bob_B_protein_s44" + }, + "mo_A_glycan_s42": { + "stratum": "test_glycan_cold", + "seed": 42, + "test_macro": 0.33405850648525903, + "test_pooled": 0.3519114017717813, + "assays": 1767, + "rows": 37295, + "dir": "affinose_mo_20260908_mo_A_glycan_s42" + }, + "mo_C_doubly_s42": { + "stratum": "test_doubly_cold", + "seed": 42, + "test_macro": 0.17732109020146009, + "test_pooled": 0.19643520103251555, + "assays": 212, + "rows": 3691, + "dir": "affinose_mo_20260908_mo_C_doubly_s42" + }, + "mof_B_protein_s43": { + "stratum": "test_protein_cold", + "seed": 43, + "test_macro": 0.24512556467979302, + "test_pooled": 0.2699137753848991, + "assays": 246, + "rows": 38539, + "dir": "affinose_mof_20260909_mof_B_protein_s43" + }, + "mof_B_protein_s44": { + "stratum": "test_protein_cold", + "seed": 44, + "test_macro": 0.24489399647831056, + "test_pooled": 0.2547891998912819, + "assays": 246, + "rows": 38539, + "dir": "affinose_mof_20260909_mof_B_protein_s44" + }, + "mof_C_doubly_s43": { + "stratum": "test_doubly_cold", + "seed": 43, + "test_macro": 0.1839765095395252, + "test_pooled": 0.2208411762069753, + "assays": 212, + "rows": 3691, + "dir": "affinose_mof_20260909_mof_C_doubly_s43" + }, + "mof_C_doubly_s44": { + "stratum": "test_doubly_cold", + "seed": 44, + "test_macro": 0.17430173158048537, + "test_pooled": 0.19176702047106786, + "assays": 212, + "rows": 3691, + "dir": "affinose_mof_20260909_mof_C_doubly_s44" + }, + "bo_A_glycan_s42": { + "stratum": "test_glycan_cold", + "seed": 42, + "test_macro": 0.2882683038203673, + "test_pooled": 0.3136364354792883, + "assays": 1767, + "rows": 37295, + "dir": "affinose_sa_20260908_bo_A_glycan_s42" + }, + "bo_B_protein_s42": { + "stratum": "test_protein_cold", + "seed": 42, + "test_macro": 0.2522396003161021, + "test_pooled": 0.2653369332383739, + "assays": 246, + "rows": 38539, + "dir": "affinose_sa_20260908_bo_B_protein_s42" + }, + "bo_C_doubly_s42": { + "stratum": "test_doubly_cold", + "seed": 42, + "test_macro": 0.16472937852334543, + "test_pooled": 0.1926274802936194, + "assays": 212, + "rows": 3691, + "dir": "affinose_sa_20260908_bo_C_doubly_s42" + }, + "boa_A_glycan_s43": { + "stratum": "test_glycan_cold", + "seed": 43, + "test_macro": 0.3374435261201508, + "test_pooled": 0.36037024272127394, + "assays": 1767, + "rows": 37295, + "dir": "affinose_sa_20260908_boa_A_glycan_s43" + }, + "boa_A_glycan_s44": { + "stratum": "test_glycan_cold", + "seed": 44, + "test_macro": 0.30969468493798785, + "test_pooled": 0.32123919236737947, + "assays": 1767, + "rows": 37295, + "dir": "affinose_sa_20260908_boa_A_glycan_s44" + }, + "boc_C_doubly_s43": { + "stratum": "test_doubly_cold", + "seed": 43, + "test_macro": 0.16514492967071465, + "test_pooled": 0.1791689218089693, + "assays": 212, + "rows": 3691, + "dir": "affinose_sa_20260908_boc_C_doubly_s43" + }, + "boc_C_doubly_s44": { + "stratum": "test_doubly_cold", + "seed": 44, + "test_macro": 0.20300180090714, + "test_pooled": 0.23511093681840797, + "assays": 212, + "rows": 3691, + "dir": "affinose_sa_20260908_boc_C_doubly_s44" + }, + "mc_A_glycan_s42": { + "stratum": "test_glycan_cold", + "seed": 42, + "test_macro": 0.27841973422388244, + "test_pooled": 0.3022162276393939, + "assays": 1767, + "rows": 37295, + "dir": "affinose_sa_20260908_mc_A_glycan_s42" + }, + "mc_B_protein_s42": { + "stratum": "test_protein_cold", + "seed": 42, + "test_macro": 0.25218496294299203, + "test_pooled": 0.26171877856861664, + "assays": 246, + "rows": 38539, + "dir": "affinose_sa_20260908_mc_B_protein_s42" + }, + "mc_C_doubly_s42": { + "stratum": "test_doubly_cold", + "seed": 42, + "test_macro": 0.15450571314627123, + "test_pooled": 0.1575716723657401, + "assays": 212, + "rows": 3691, + "dir": "affinose_sa_20260908_mc_C_doubly_s42" + }, + "mo_B_protein_s42": { + "stratum": "test_protein_cold", + "seed": 42, + "test_macro": 0.23260289913763402, + "test_pooled": 0.26884245311406896, + "assays": 246, + "rows": 38539, + "dir": "affinose_sa_20260908_mo_B_protein_s42" + }, + "moc_A_glycan_s43": { + "stratum": "test_glycan_cold", + "seed": 43, + "test_macro": 0.318371586837939, + "test_pooled": 0.3491029922366602, + "assays": 1767, + "rows": 37295, + "dir": "affinose_sa_20260908_moc_A_glycan_s43" + }, + "moc_A_glycan_s44": { + "stratum": "test_glycan_cold", + "seed": 44, + "test_macro": 0.3354799039624282, + "test_pooled": 0.3562564894744605, + "assays": 1767, + "rows": 37295, + "dir": "affinose_sa_20260908_moc_A_glycan_s44" + }, + "sa_A_glycan_s42": { + "stratum": "test_glycan_cold", + "seed": 42, + "test_macro": 0.28116041536475034, + "test_pooled": 0.2995676811524887, + "assays": 1767, + "rows": 37295, + "dir": "affinose_sa_20260908_sa_A_glycan_s42" + }, + "sa_C_doubly_s42": { + "stratum": "test_doubly_cold", + "seed": 42, + "test_macro": 0.14451918425842353, + "test_pooled": 0.16719428719500484, + "assays": 212, + "rows": 3691, + "dir": "affinose_sa_20260908_sa_C_doubly_s42" + }, + "swe_A_glycan_s42": { + "stratum": "test_glycan_cold", + "seed": 42, + "test_macro": 0.2919377626107431, + "test_pooled": 0.3060559058312503, + "assays": 1767, + "rows": 37295, + "dir": "affinose_swe_20260908_swe_A_glycan_s42" + }, + "swe_C_doubly_s42": { + "stratum": "test_doubly_cold", + "seed": 42, + "test_macro": 0.12325096614703701, + "test_pooled": 0.13077810558700573, + "assays": 212, + "rows": 3691, + "dir": "affinose_swe_20260908_swe_C_doubly_s42" + }, + "sz2_A_glycan_s42": { + "stratum": "test_glycan_cold", + "seed": 42, + "test_macro": 0.28711041488202854, + "test_pooled": 0.3024540500744863, + "assays": 1767, + "rows": 37295, + "dir": "affinose_sz2_20260908_sz2_A_glycan_s42" + }, + "sz2_C_doubly_s42": { + "stratum": "test_doubly_cold", + "seed": 42, + "test_macro": 0.1490739924202869, + "test_pooled": 0.166626209128426, + "assays": 212, + "rows": 3691, + "dir": "affinose_sz2_20260908_sz2_C_doubly_s42" + }, + "szc_C_doubly_s43": { + "stratum": "test_doubly_cold", + "seed": 43, + "test_macro": 0.13519544496948036, + "test_pooled": 0.1757217730192651, + "assays": 212, + "rows": 3691, + "dir": "affinose_szc_20260908_szc_C_doubly_s43" + }, + "szc_C_doubly_s44": { + "stratum": "test_doubly_cold", + "seed": 44, + "test_macro": 0.12914485639778248, + "test_pooled": 0.1359993175882641, + "assays": 212, + "rows": 3691, + "dir": "affinose_szc_20260908_szc_C_doubly_s44" + } +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/receipt.json b/releases/2026-10-02/provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/receipt.json new file mode 100644 index 0000000000000000000000000000000000000000..29730e0fa148cb789d15e6335dbbbcba92ebe6f5 --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/receipt.json @@ -0,0 +1,101 @@ +{ + "cell_id": "mo_A_glycan_s42", + "fingerprint": "cbcc86152b41f424bf9d201d53843e0fdeb2cd9f934e5a1d3f37fe369c35f874", + "manifest_sha256": "mo_20260908_moA_glycan", + "args": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mo_20260908_mo_A_glycan_s42", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 42, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_glycan_cold", + "test_stratum": "val_glycan_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 484491, + "expected_val_rows": 36745, + "expected_test_rows": 36745, + "manifest_sha256": "mo_20260908_moA_glycan", + "cell_id": "mo_A_glycan_s42", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moA_glycan_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "input_hashes": { + "csv": "aa2c0104eb4ac96541081eaa2f0858a6b8575d2c83ce869822ee5107d12ddcb9", + "roles_tsv": "fd43b4aac814f670519120a012a8ef774a2d4c651bcdc3c34488ac7bed2a9a72", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "9256821b6057a857ec009868cda30c10d1133790ca283edf7b36bd04e0c784ad", + "val": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846", + "test": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846" + } + }, + "roster_digests": { + "train": "9256821b6057a857ec009868cda30c10d1133790ca283edf7b36bd04e0c784ad", + "val": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846", + "test": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846" + }, + "slurm_job_id": "12247963", + "slurm_array_task_id": "0", + "slurm_restart_count": null, + "node": "nova20-amp-1", + "gpu": "NVIDIA A100-PCIE-40GB" +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/results.json b/releases/2026-10-02/provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/results.json new file mode 100644 index 0000000000000000000000000000000000000000..8e65a50fdd2b8dba26b83295a30c737be9d81f8c --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/results.json @@ -0,0 +1,339 @@ +{ + "task_type": "regression", + "architecture": "cross-attention=True pooling=mean interaction=concat + live Bertose", + "best_metric": 0.3518440936915808, + "best_metric_is": "validation", + "best_epoch": 8, + "early_stopped": true, + "epochs_ran": 19, + "test_metrics": { + "spearman": 0.40237059401182945, + "pearson": 0.4124835133552551, + "mse": 0.07252673804759979, + "macro_spearman": 0.3518440936915808, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "test_loss": 0.07250597555225989, + "history": [ + { + "epoch": 1, + "train_loss": 0.08178654776577449, + "val_loss": 0.07449441553264519, + "val_metrics": { + "spearman": 0.33265511442497175, + "pearson": 0.32712677121162415, + "mse": 0.07448939234018326, + "macro_spearman": 0.2746683991825071, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 7.600383347137149e-06, + "lr_head": 3.8001916735685747e-05 + }, + { + "epoch": 2, + "train_loss": 0.07405700735830484, + "val_loss": 0.07659707693066983, + "val_metrics": { + "spearman": 0.3720591600427688, + "pearson": 0.37388962507247925, + "mse": 0.07660496979951859, + "macro_spearman": 0.3207894429302261, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.992405607129421e-06, + "lr_head": 4.996202803564711e-05 + }, + { + "epoch": 3, + "train_loss": 0.06950348176932596, + "val_loss": 0.0758063778154766, + "val_metrics": { + "spearman": 0.3790002388657775, + "pearson": 0.38117125630378723, + "mse": 0.07581878453493118, + "macro_spearman": 0.32246448806993605, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.931800798174588e-06, + "lr_head": 4.965900399087294e-05 + }, + { + "epoch": 4, + "train_loss": 0.06677828642780369, + "val_loss": 0.07234074125103684, + "val_metrics": { + "spearman": 0.3830188559921474, + "pearson": 0.39124181866645813, + "mse": 0.07236022502183914, + "macro_spearman": 0.3261992361563057, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.811330851097227e-06, + "lr_head": 4.905665425548613e-05 + }, + { + "epoch": 5, + "train_loss": 0.06486930890547266, + "val_loss": 0.07428531616511191, + "val_metrics": { + "spearman": 0.4039017349602038, + "pearson": 0.40416157245635986, + "mse": 0.0743052139878273, + "macro_spearman": 0.34451370150779037, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.632458107861948e-06, + "lr_head": 4.816229053930974e-05 + }, + { + "epoch": 6, + "train_loss": 0.06333981823825936, + "val_loss": 0.07813900106264728, + "val_metrics": { + "spearman": 0.36745023533302545, + "pearson": 0.3778190016746521, + "mse": 0.07817018032073975, + "macro_spearman": 0.32126358975578523, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.397353841264184e-06, + "lr_head": 4.698676920632092e-05 + }, + { + "epoch": 7, + "train_loss": 0.06192197361992377, + "val_loss": 0.07327253127987744, + "val_metrics": { + "spearman": 0.40534431983142905, + "pearson": 0.4101991355419159, + "mse": 0.07328689843416214, + "macro_spearman": 0.3481927746525873, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.108871898619753e-06, + "lr_head": 4.554435949309877e-05 + }, + { + "epoch": 8, + "train_loss": 0.0606018938901666, + "val_loss": 0.07376345989818776, + "val_metrics": { + "spearman": 0.3837663608799417, + "pearson": 0.3917231857776642, + "mse": 0.07378335297107697, + "macro_spearman": 0.34328721248155164, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 8.770514059924366e-06, + "lr_head": 4.385257029962183e-05 + }, + { + "epoch": 9, + "train_loss": 0.05928352163667491, + "val_loss": 0.07250597555225989, + "val_metrics": { + "spearman": 0.40237059401182945, + "pearson": 0.4124835133552551, + "mse": 0.07252673804759979, + "macro_spearman": 0.3518440936915808, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 8.386387530988106e-06, + "lr_head": 4.193193765494053e-05 + }, + { + "epoch": 10, + "train_loss": 0.057978798184743385, + "val_loss": 0.07709632041475843, + "val_metrics": { + "spearman": 0.3843505992519891, + "pearson": 0.3893249034881592, + "mse": 0.07710817456245422, + "macro_spearman": 0.3388635804374225, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 7.961155087520675e-06, + "lr_head": 3.980577543760337e-05 + }, + { + "epoch": 11, + "train_loss": 0.05657076605068323, + "val_loss": 0.07423298842751067, + "val_metrics": { + "spearman": 0.3998620770684936, + "pearson": 0.4072037935256958, + "mse": 0.07424739003181458, + "macro_spearman": 0.34683370121850293, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 7.499978475350636e-06, + "lr_head": 3.7499892376753175e-05 + }, + { + "epoch": 12, + "train_loss": 0.05521496029820552, + "val_loss": 0.07893912996399703, + "val_metrics": { + "spearman": 0.39539492684739164, + "pearson": 0.40234139561653137, + "mse": 0.07895530760288239, + "macro_spearman": 0.34484224357882526, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 7.0084557538233345e-06, + "lr_head": 3.504227876911667e-05 + }, + { + "epoch": 13, + "train_loss": 0.05384385342549856, + "val_loss": 0.07758754271336282, + "val_metrics": { + "spearman": 0.379476937601036, + "pearson": 0.38807427883148193, + "mse": 0.07760068774223328, + "macro_spearman": 0.33086376694394215, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 6.492553342943792e-06, + "lr_head": 3.246276671471896e-05 + }, + { + "epoch": 14, + "train_loss": 0.05236243655586875, + "val_loss": 0.08031580967745955, + "val_metrics": { + "spearman": 0.3715908296671469, + "pearson": 0.383950412273407, + "mse": 0.08032692223787308, + "macro_spearman": 0.3383192853501629, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 5.958533599120159e-06, + "lr_head": 2.979266799560079e-05 + }, + { + "epoch": 15, + "train_loss": 0.050935477340176526, + "val_loss": 0.08091087176993787, + "val_metrics": { + "spearman": 0.3878922278405009, + "pearson": 0.39411112666130066, + "mse": 0.08091336488723755, + "macro_spearman": 0.33990795245997407, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 5.412878798640137e-06, + "lr_head": 2.7064393993200682e-05 + }, + { + "epoch": 16, + "train_loss": 0.049360674873292626, + "val_loss": 0.07987832513397107, + "val_metrics": { + "spearman": 0.38379380252351775, + "pearson": 0.38983529806137085, + "mse": 0.07989616692066193, + "macro_spearman": 0.3426433799929684, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 4.862212451617974e-06, + "lr_head": 2.4311062258089866e-05 + }, + { + "epoch": 17, + "train_loss": 0.04789994738429645, + "val_loss": 0.08231175134041135, + "val_metrics": { + "spearman": 0.3703845261663136, + "pearson": 0.37726807594299316, + "mse": 0.08232666552066803, + "macro_spearman": 0.32730402321783136, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 4.3132189015541166e-06, + "lr_head": 2.156609450777058e-05 + }, + { + "epoch": 18, + "train_loss": 0.046404292282118356, + "val_loss": 0.08147809532405346, + "val_metrics": { + "spearman": 0.3681362465685154, + "pearson": 0.37861087918281555, + "mse": 0.08149037510156631, + "macro_spearman": 0.32856892560631556, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 3.772562186459968e-06, + "lr_head": 1.886281093229984e-05 + }, + { + "epoch": 19, + "train_loss": 0.0449393058915869, + "val_loss": 0.08430918386843124, + "val_metrics": { + "spearman": 0.3660089664694847, + "pearson": 0.37466129660606384, + "mse": 0.08431710302829742, + "macro_spearman": 0.32766400341899166, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 3.246805146463778e-06, + "lr_head": 1.6234025732318888e-05 + } + ], + "fingerprint": "cbcc86152b41f424bf9d201d53843e0fdeb2cd9f934e5a1d3f37fe369c35f874", + "input_hashes": { + "csv": "aa2c0104eb4ac96541081eaa2f0858a6b8575d2c83ce869822ee5107d12ddcb9", + "roles_tsv": "fd43b4aac814f670519120a012a8ef774a2d4c651bcdc3c34488ac7bed2a9a72", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "9256821b6057a857ec009868cda30c10d1133790ca283edf7b36bd04e0c784ad", + "val": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846", + "test": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846" + } + } +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/receipt.json b/releases/2026-10-02/provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/receipt.json new file mode 100644 index 0000000000000000000000000000000000000000..e4cc8ce5858955c1086c6503e059d962c14ef7e4 --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/receipt.json @@ -0,0 +1,101 @@ +{ + "cell_id": "mo_C_doubly_s42", + "fingerprint": "20f398ef9542391b9fa12a01e6db7ad58ced7587299a05dfd707be73ddbb9ec6", + "manifest_sha256": "mo_20260908_moC_doubly", + "args": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mo_20260908_mo_C_doubly_s42", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 42, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_doubly_cold", + "test_stratum": "val_doubly_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 406483, + "expected_val_rows": 3822, + "expected_test_rows": 3822, + "manifest_sha256": "mo_20260908_moC_doubly", + "cell_id": "mo_C_doubly_s42", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moC_doubly_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "input_hashes": { + "csv": "e43e150423cb998a77037ad6d82c158a65431b59c46b168febf263ad36267df4", + "roles_tsv": "e82fb6d73d3ce3ff33e32bd0a8d2e81a0aa4b19b8819bf18339c4aa0382dc5fd", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "f6ec937bb55813139ed1b26e07953c95d78fd1fe99ccec1f03bb74c09b7960f5", + "val": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391", + "test": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391" + } + }, + "roster_digests": { + "train": "f6ec937bb55813139ed1b26e07953c95d78fd1fe99ccec1f03bb74c09b7960f5", + "val": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391", + "test": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391" + }, + "slurm_job_id": "12247962", + "slurm_array_task_id": "2", + "slurm_restart_count": null, + "node": "nova22-gpu-2", + "gpu": "NVIDIA A100 80GB PCIe" +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/results.json b/releases/2026-10-02/provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/results.json new file mode 100644 index 0000000000000000000000000000000000000000..8ed25c8de800fb3ab8676a1ab28636017c48cabb --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/results.json @@ -0,0 +1,294 @@ +{ + "task_type": "regression", + "architecture": "cross-attention=True pooling=mean interaction=concat + live Bertose", + "best_metric": 0.18989928027597247, + "best_metric_is": "validation", + "best_epoch": 5, + "early_stopped": true, + "epochs_ran": 16, + "test_metrics": { + "spearman": 0.23230760714549056, + "pearson": 0.22095870971679688, + "mse": 0.0810273140668869, + "macro_spearman": 0.18989928027597247, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "test_loss": 0.08108399153376619, + "history": [ + { + "epoch": 1, + "train_loss": 0.0820725598469075, + "val_loss": 0.07980532947306831, + "val_metrics": { + "spearman": 0.21861695636332937, + "pearson": 0.21602514386177063, + "mse": 0.07971526682376862, + "macro_spearman": 0.1879467160935374, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 7.600456921860401e-06, + "lr_head": 3.800228460930201e-05 + }, + { + "epoch": 2, + "train_loss": 0.07351148931354597, + "val_loss": 0.08033600815882286, + "val_metrics": { + "spearman": 0.2209620955843994, + "pearson": 0.22815755009651184, + "mse": 0.08022104948759079, + "macro_spearman": 0.18053212057010906, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.992405222215124e-06, + "lr_head": 4.996202611107562e-05 + }, + { + "epoch": 3, + "train_loss": 0.0686865865012365, + "val_loss": 0.08297244912634293, + "val_metrics": { + "spearman": 0.2323234331604067, + "pearson": 0.229558527469635, + "mse": 0.08294177800416946, + "macro_spearman": 0.18236981617035328, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.93179964821535e-06, + "lr_head": 4.9658998241076745e-05 + }, + { + "epoch": 4, + "train_loss": 0.06548485753726821, + "val_loss": 0.08214062657207251, + "val_metrics": { + "spearman": 0.21538099756417373, + "pearson": 0.21252787113189697, + "mse": 0.08202281594276428, + "macro_spearman": 0.17564361108553003, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.811328950051998e-06, + "lr_head": 4.905664475025999e-05 + }, + { + "epoch": 5, + "train_loss": 0.06347042579143139, + "val_loss": 0.07959065570806463, + "val_metrics": { + "spearman": 0.22659004415366746, + "pearson": 0.22342076897621155, + "mse": 0.07952506840229034, + "macro_spearman": 0.18600536931930212, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.632455478806839e-06, + "lr_head": 4.816227739403419e-05 + }, + { + "epoch": 6, + "train_loss": 0.06186302897038609, + "val_loss": 0.08108399153376619, + "val_metrics": { + "spearman": 0.23230760714549056, + "pearson": 0.22095870971679688, + "mse": 0.0810273140668869, + "macro_spearman": 0.18989928027597247, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.397350516112365e-06, + "lr_head": 4.698675258056182e-05 + }, + { + "epoch": 7, + "train_loss": 0.06046433661505199, + "val_loss": 0.08360768208901087, + "val_metrics": { + "spearman": 0.20523514826535216, + "pearson": 0.20831626653671265, + "mse": 0.0835791826248169, + "macro_spearman": 0.17609303468973836, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.108867917734062e-06, + "lr_head": 4.554433958867031e-05 + }, + { + "epoch": 8, + "train_loss": 0.05909844870552025, + "val_loss": 0.0824368055909872, + "val_metrics": { + "spearman": 0.20461729443087306, + "pearson": 0.20222266018390656, + "mse": 0.08249732106924057, + "macro_spearman": 0.17707328238386544, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 8.770509471627362e-06, + "lr_head": 4.385254735813681e-05 + }, + { + "epoch": 9, + "train_loss": 0.057828584789735946, + "val_loss": 0.08604417247697711, + "val_metrics": { + "spearman": 0.20312934852690515, + "pearson": 0.2025664895772934, + "mse": 0.08613406866788864, + "macro_spearman": 0.16849112239141736, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 8.3863823909755e-06, + "lr_head": 4.1931911954877495e-05 + }, + { + "epoch": 10, + "train_loss": 0.056629490814496, + "val_loss": 0.08503294388453166, + "val_metrics": { + "spearman": 0.20220513112798374, + "pearson": 0.20082733035087585, + "mse": 0.08514758199453354, + "macro_spearman": 0.16524417323252355, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 7.961149458185257e-06, + "lr_head": 3.9805747290926286e-05 + }, + { + "epoch": 11, + "train_loss": 0.05531735030949904, + "val_loss": 0.08600124850248297, + "val_metrics": { + "spearman": 0.198682925808775, + "pearson": 0.1959197223186493, + "mse": 0.08607515692710876, + "macro_spearman": 0.17737299060322365, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 7.499972425024911e-06, + "lr_head": 3.7499862125124546e-05 + }, + { + "epoch": 12, + "train_loss": 0.05402435923889215, + "val_loss": 0.09162988619258007, + "val_metrics": { + "spearman": 0.16928709292866903, + "pearson": 0.17052659392356873, + "mse": 0.09164858609437943, + "macro_spearman": 0.12841904491089645, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 7.008449355950063e-06, + "lr_head": 3.504224677975031e-05 + }, + { + "epoch": 13, + "train_loss": 0.052670215866714304, + "val_loss": 0.09579282198101283, + "val_metrics": { + "spearman": 0.15138558513405728, + "pearson": 0.15384550392627716, + "mse": 0.09586914628744125, + "macro_spearman": 0.12292897648647666, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 6.492546675184488e-06, + "lr_head": 3.246273337592243e-05 + }, + { + "epoch": 14, + "train_loss": 0.05133482151828506, + "val_loss": 0.0983895618778964, + "val_metrics": { + "spearman": 0.16096614573204776, + "pearson": 0.16646699607372284, + "mse": 0.09847484529018402, + "macro_spearman": 0.1471614747891466, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 5.958526742412386e-06, + "lr_head": 2.9792633712061927e-05 + }, + { + "epoch": 15, + "train_loss": 0.04995875641009164, + "val_loss": 0.10370649403582016, + "val_metrics": { + "spearman": 0.1388411585409256, + "pearson": 0.15041641891002655, + "mse": 0.10373455286026001, + "macro_spearman": 0.11630659583110417, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 5.412871836215041e-06, + "lr_head": 2.70643591810752e-05 + }, + { + "epoch": 16, + "train_loss": 0.04850863079172903, + "val_loss": 0.09986912375316023, + "val_metrics": { + "spearman": 0.1322993495504737, + "pearson": 0.13906846940517426, + "mse": 0.09997473657131195, + "macro_spearman": 0.10992753432795928, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 4.862205467989965e-06, + "lr_head": 2.431102733994982e-05 + } + ], + "fingerprint": "20f398ef9542391b9fa12a01e6db7ad58ced7587299a05dfd707be73ddbb9ec6", + "input_hashes": { + "csv": "e43e150423cb998a77037ad6d82c158a65431b59c46b168febf263ad36267df4", + "roles_tsv": "e82fb6d73d3ce3ff33e32bd0a8d2e81a0aa4b19b8819bf18339c4aa0382dc5fd", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "f6ec937bb55813139ed1b26e07953c95d78fd1fe99ccec1f03bb74c09b7960f5", + "val": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391", + "test": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391" + } + } +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/receipt.json b/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/receipt.json new file mode 100644 index 0000000000000000000000000000000000000000..08daa3962413802fda0a2f18af48282595083262 --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/receipt.json @@ -0,0 +1,101 @@ +{ + "cell_id": "mof_B_protein_s43", + "fingerprint": "10fbf6df61355097aaa03b5b9db42822af419b2c1696866a589fca9efe80bbb9", + "manifest_sha256": "mof_20260909_moB_protein", + "args": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_B_protein_s43", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 43, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_protein_cold", + "test_stratum": "val_protein_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 480431, + "expected_val_rows": 39477, + "expected_test_rows": 39477, + "manifest_sha256": "mof_20260909_moB_protein", + "cell_id": "mof_B_protein_s43", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moB_protein_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "input_hashes": { + "csv": "db08ac7409ae5f119a706f8acb7c486154f10f70f59571fa7306178032ec6990", + "roles_tsv": "6ae90f6fed8e1874479b007d1537531b1a9f9f4db5a89855a9d48947ee0a88bc", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "fb872366d7c824122b62d484a9a90f41ac7b7998b4213bfbdc03702086090c27", + "val": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713", + "test": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713" + } + }, + "roster_digests": { + "train": "fb872366d7c824122b62d484a9a90f41ac7b7998b4213bfbdc03702086090c27", + "val": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713", + "test": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713" + }, + "slurm_job_id": "12252895", + "slurm_array_task_id": "0", + "slurm_restart_count": null, + "node": "nova20-amp-1", + "gpu": "NVIDIA A100-PCIE-40GB" +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/results.json b/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/results.json new file mode 100644 index 0000000000000000000000000000000000000000..a5f198f118876ce664da123b85aa243e28641863 --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/results.json @@ -0,0 +1,294 @@ +{ + "task_type": "regression", + "architecture": "cross-attention=True pooling=mean interaction=concat + live Bertose", + "best_metric": 0.2616803241549893, + "best_metric_is": "validation", + "best_epoch": 5, + "early_stopped": true, + "epochs_ran": 16, + "test_metrics": { + "spearman": 0.26465318005549066, + "pearson": 0.28739896416664124, + "mse": 0.07721278071403503, + "macro_spearman": 0.2616803241549893, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "test_loss": 0.07721429514265475, + "history": [ + { + "epoch": 1, + "train_loss": 0.07954162840542994, + "val_loss": 0.07782782489325205, + "val_metrics": { + "spearman": 0.22831785172608393, + "pearson": 0.2535228133201599, + "mse": 0.0778268352150917, + "macro_spearman": 0.19343641142546214, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 7.600386589840024e-06, + "lr_head": 3.8001932949200124e-05 + }, + { + "epoch": 2, + "train_loss": 0.0705886414306581, + "val_loss": 0.07796654568281706, + "val_metrics": { + "spearman": 0.24540228051404406, + "pearson": 0.26456552743911743, + "mse": 0.0779670774936676, + "macro_spearman": 0.2274026008849437, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.992405590165015e-06, + "lr_head": 4.996202795082508e-05 + }, + { + "epoch": 3, + "train_loss": 0.06549934623372175, + "val_loss": 0.07865211885042091, + "val_metrics": { + "spearman": 0.25215879998564106, + "pearson": 0.2773054242134094, + "mse": 0.07865151017904282, + "macro_spearman": 0.2467353133105788, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.931800747491785e-06, + "lr_head": 4.965900373745893e-05 + }, + { + "epoch": 4, + "train_loss": 0.06254243126504527, + "val_loss": 0.07637372648575898, + "val_metrics": { + "spearman": 0.2581918487150839, + "pearson": 0.27826398611068726, + "mse": 0.0763733983039856, + "macro_spearman": 0.2570732451916451, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.811330767311252e-06, + "lr_head": 4.905665383655626e-05 + }, + { + "epoch": 5, + "train_loss": 0.06060447233149826, + "val_loss": 0.07684949162601822, + "val_metrics": { + "spearman": 0.2612953255933512, + "pearson": 0.2877562940120697, + "mse": 0.07684440910816193, + "macro_spearman": 0.25594701858636026, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.632457991989846e-06, + "lr_head": 4.816228995994923e-05 + }, + { + "epoch": 6, + "train_loss": 0.059014895508832266, + "val_loss": 0.07721429514265475, + "val_metrics": { + "spearman": 0.26465318005549066, + "pearson": 0.28739896416664124, + "mse": 0.07721278071403503, + "macro_spearman": 0.2616803241549893, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.397353694712487e-06, + "lr_head": 4.6986768473562434e-05 + }, + { + "epoch": 7, + "train_loss": 0.05770590116580162, + "val_loss": 0.07777405114817272, + "val_metrics": { + "spearman": 0.25557701527812, + "pearson": 0.2826829254627228, + "mse": 0.07777171581983566, + "macro_spearman": 0.25234290869807796, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.108871723167402e-06, + "lr_head": 4.554435861583701e-05 + }, + { + "epoch": 8, + "train_loss": 0.05641176031927989, + "val_loss": 0.07836433754391618, + "val_metrics": { + "spearman": 0.252197774483041, + "pearson": 0.2744917571544647, + "mse": 0.07836487889289856, + "macro_spearman": 0.25088632948434425, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 8.770513857701111e-06, + "lr_head": 4.385256928850556e-05 + }, + { + "epoch": 9, + "train_loss": 0.05523392668176769, + "val_loss": 0.07975887371350919, + "val_metrics": { + "spearman": 0.2480565658809454, + "pearson": 0.2695157825946808, + "mse": 0.07976102828979492, + "macro_spearman": 0.24774700422451598, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 8.386387304448665e-06, + "lr_head": 4.193193652224333e-05 + }, + { + "epoch": 10, + "train_loss": 0.05410393620964645, + "val_loss": 0.07961486578983899, + "val_metrics": { + "spearman": 0.24158881897101642, + "pearson": 0.265257865190506, + "mse": 0.07961051166057587, + "macro_spearman": 0.24260551808764666, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 7.961154839414931e-06, + "lr_head": 3.9805774197074656e-05 + }, + { + "epoch": 11, + "train_loss": 0.052832345262743496, + "val_loss": 0.07933218951217794, + "val_metrics": { + "spearman": 0.24484638376952045, + "pearson": 0.2682126760482788, + "mse": 0.07932918518781662, + "macro_spearman": 0.24749593452745058, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 7.4999782086902555e-06, + "lr_head": 3.749989104345127e-05 + }, + { + "epoch": 12, + "train_loss": 0.05168314740412603, + "val_loss": 0.08014735692396542, + "val_metrics": { + "spearman": 0.23723716672899273, + "pearson": 0.25973254442214966, + "mse": 0.08014728873968124, + "macro_spearman": 0.2429886585492663, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 7.008455471845214e-06, + "lr_head": 3.504227735922606e-05 + }, + { + "epoch": 13, + "train_loss": 0.05040372731105789, + "val_loss": 0.08099161927260737, + "val_metrics": { + "spearman": 0.2331638007735348, + "pearson": 0.2553894519805908, + "mse": 0.08098489046096802, + "macro_spearman": 0.23570626741202766, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 6.4925530490707626e-06, + "lr_head": 3.246276524535381e-05 + }, + { + "epoch": 14, + "train_loss": 0.04912812885086062, + "val_loss": 0.08161971862224117, + "val_metrics": { + "spearman": 0.23137538105705088, + "pearson": 0.24989166855812073, + "mse": 0.08161360770463943, + "macro_spearman": 0.23251248469650745, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 5.958533296919441e-06, + "lr_head": 2.97926664845972e-05 + }, + { + "epoch": 15, + "train_loss": 0.047906441031257345, + "val_loss": 0.08224580197095437, + "val_metrics": { + "spearman": 0.23034203959773117, + "pearson": 0.2500419318675995, + "mse": 0.08224118500947952, + "macro_spearman": 0.23809430388858327, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 5.41287849178004e-06, + "lr_head": 2.7064392458900194e-05 + }, + { + "epoch": 16, + "train_loss": 0.046632020503746034, + "val_loss": 0.08478603510841172, + "val_metrics": { + "spearman": 0.22068337270420055, + "pearson": 0.23975464701652527, + "mse": 0.08478289842605591, + "macro_spearman": 0.22897272805292576, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 4.862212143823363e-06, + "lr_head": 2.4311060719116812e-05 + } + ], + "fingerprint": "10fbf6df61355097aaa03b5b9db42822af419b2c1696866a589fca9efe80bbb9", + "input_hashes": { + "csv": "db08ac7409ae5f119a706f8acb7c486154f10f70f59571fa7306178032ec6990", + "roles_tsv": "6ae90f6fed8e1874479b007d1537531b1a9f9f4db5a89855a9d48947ee0a88bc", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "fb872366d7c824122b62d484a9a90f41ac7b7998b4213bfbdc03702086090c27", + "val": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713", + "test": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713" + } + } +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/receipt.json b/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/receipt.json new file mode 100644 index 0000000000000000000000000000000000000000..f8eba0d2f47af4842247eb25fd8b411f080161c4 --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/receipt.json @@ -0,0 +1,101 @@ +{ + "cell_id": "mof_B_protein_s44", + "fingerprint": "b50035032c9c5017afd6328b7c1e4ab3f6ff7eeb8a1d126c918c5567e207115e", + "manifest_sha256": "mof_20260909_moB_protein", + "args": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_B_protein_s44", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 44, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_protein_cold", + "test_stratum": "val_protein_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 480431, + "expected_val_rows": 39477, + "expected_test_rows": 39477, + "manifest_sha256": "mof_20260909_moB_protein", + "cell_id": "mof_B_protein_s44", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moB_protein_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "input_hashes": { + "csv": "db08ac7409ae5f119a706f8acb7c486154f10f70f59571fa7306178032ec6990", + "roles_tsv": "6ae90f6fed8e1874479b007d1537531b1a9f9f4db5a89855a9d48947ee0a88bc", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "fb872366d7c824122b62d484a9a90f41ac7b7998b4213bfbdc03702086090c27", + "val": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713", + "test": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713" + } + }, + "roster_digests": { + "train": "fb872366d7c824122b62d484a9a90f41ac7b7998b4213bfbdc03702086090c27", + "val": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713", + "test": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713" + }, + "slurm_job_id": "12252896", + "slurm_array_task_id": "1", + "slurm_restart_count": null, + "node": "nova20-amp-1", + "gpu": "NVIDIA A100-PCIE-40GB" +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/results.json b/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/results.json new file mode 100644 index 0000000000000000000000000000000000000000..b049877cfbc8981a0accdc2f7e7e0c3a6ab75eed --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/results.json @@ -0,0 +1,324 @@ +{ + "task_type": "regression", + "architecture": "cross-attention=True pooling=mean interaction=concat + live Bertose", + "best_metric": 0.2619743701834269, + "best_metric_is": "validation", + "best_epoch": 7, + "early_stopped": true, + "epochs_ran": 18, + "test_metrics": { + "spearman": 0.2522903089693993, + "pearson": 0.27707183361053467, + "mse": 0.07991175353527069, + "macro_spearman": 0.2619743701834269, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "test_loss": 0.07990999335522735, + "history": [ + { + "epoch": 1, + "train_loss": 0.07981738362739721, + "val_loss": 0.07805284763032773, + "val_metrics": { + "spearman": 0.22559178242900987, + "pearson": 0.2486092448234558, + "mse": 0.07805142551660538, + "macro_spearman": 0.20130664561426273, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 7.600386589840024e-06, + "lr_head": 3.8001932949200124e-05 + }, + { + "epoch": 2, + "train_loss": 0.07078751392609924, + "val_loss": 0.07947275961931898, + "val_metrics": { + "spearman": 0.24995568370609297, + "pearson": 0.28168702125549316, + "mse": 0.07947273552417755, + "macro_spearman": 0.23893393270644228, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.992405590165015e-06, + "lr_head": 4.996202795082508e-05 + }, + { + "epoch": 3, + "train_loss": 0.0660612302130991, + "val_loss": 0.07649334600554535, + "val_metrics": { + "spearman": 0.2534524155438286, + "pearson": 0.283633828163147, + "mse": 0.07649430632591248, + "macro_spearman": 0.25244388911037446, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.931800747491785e-06, + "lr_head": 4.965900373745893e-05 + }, + { + "epoch": 4, + "train_loss": 0.06302868131366045, + "val_loss": 0.07701158229068429, + "val_metrics": { + "spearman": 0.25958664299609535, + "pearson": 0.2883581519126892, + "mse": 0.07701101154088974, + "macro_spearman": 0.2571741323432227, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.811330767311252e-06, + "lr_head": 4.905665383655626e-05 + }, + { + "epoch": 5, + "train_loss": 0.06085977359548701, + "val_loss": 0.07774806868985319, + "val_metrics": { + "spearman": 0.25843513345166563, + "pearson": 0.28806793689727783, + "mse": 0.07775115966796875, + "macro_spearman": 0.25360786179010825, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.632457991989846e-06, + "lr_head": 4.816228995994923e-05 + }, + { + "epoch": 6, + "train_loss": 0.0592839516819901, + "val_loss": 0.07740682547208604, + "val_metrics": { + "spearman": 0.2630817552232598, + "pearson": 0.287427693605423, + "mse": 0.07740595936775208, + "macro_spearman": 0.26120600347796635, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.397353694712487e-06, + "lr_head": 4.6986768473562434e-05 + }, + { + "epoch": 7, + "train_loss": 0.057865291745236296, + "val_loss": 0.07692075606037047, + "val_metrics": { + "spearman": 0.25688249514777667, + "pearson": 0.28290003538131714, + "mse": 0.07692264020442963, + "macro_spearman": 0.2534613235639173, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.108871723167402e-06, + "lr_head": 4.554435861583701e-05 + }, + { + "epoch": 8, + "train_loss": 0.0565786789235537, + "val_loss": 0.07990999335522735, + "val_metrics": { + "spearman": 0.2522903089693993, + "pearson": 0.27707183361053467, + "mse": 0.07991175353527069, + "macro_spearman": 0.2619743701834269, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 8.770513857701111e-06, + "lr_head": 4.385256928850556e-05 + }, + { + "epoch": 9, + "train_loss": 0.05532620246784516, + "val_loss": 0.07763330655163411, + "val_metrics": { + "spearman": 0.25102246262105943, + "pearson": 0.2788107693195343, + "mse": 0.07763587683439255, + "macro_spearman": 0.2544694050064656, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 8.386387304448665e-06, + "lr_head": 4.193193652224333e-05 + }, + { + "epoch": 10, + "train_loss": 0.05405828924989818, + "val_loss": 0.07833248711337533, + "val_metrics": { + "spearman": 0.2438800982818175, + "pearson": 0.2745583653450012, + "mse": 0.07832974940538406, + "macro_spearman": 0.2523447986921982, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 7.961154839414931e-06, + "lr_head": 3.9805774197074656e-05 + }, + { + "epoch": 11, + "train_loss": 0.0528427298379628, + "val_loss": 0.08058726410056967, + "val_metrics": { + "spearman": 0.23660560596604926, + "pearson": 0.26180699467658997, + "mse": 0.08058898150920868, + "macro_spearman": 0.23424278398802012, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 7.4999782086902555e-06, + "lr_head": 3.749989104345127e-05 + }, + { + "epoch": 12, + "train_loss": 0.05164120228723162, + "val_loss": 0.07976167026538902, + "val_metrics": { + "spearman": 0.23261825638111633, + "pearson": 0.2558090090751648, + "mse": 0.07976232469081879, + "macro_spearman": 0.23266531292423337, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 7.008455471845214e-06, + "lr_head": 3.504227735922606e-05 + }, + { + "epoch": 13, + "train_loss": 0.0503626140305333, + "val_loss": 0.08149432827457423, + "val_metrics": { + "spearman": 0.2278419512374733, + "pearson": 0.2485179454088211, + "mse": 0.08149101585149765, + "macro_spearman": 0.23217940116093283, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 6.4925530490707626e-06, + "lr_head": 3.246276524535381e-05 + }, + { + "epoch": 14, + "train_loss": 0.04906632403745221, + "val_loss": 0.08259034495818847, + "val_metrics": { + "spearman": 0.21830880884551201, + "pearson": 0.24247127771377563, + "mse": 0.08259105682373047, + "macro_spearman": 0.22567405660753373, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 5.958533296919441e-06, + "lr_head": 2.97926664845972e-05 + }, + { + "epoch": 15, + "train_loss": 0.047798247342370724, + "val_loss": 0.0822906217340084, + "val_metrics": { + "spearman": 0.22129417925423603, + "pearson": 0.24620899558067322, + "mse": 0.08228731155395508, + "macro_spearman": 0.224604572584952, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 5.41287849178004e-06, + "lr_head": 2.7064392458900194e-05 + }, + { + "epoch": 16, + "train_loss": 0.046463664239008225, + "val_loss": 0.08506318003035829, + "val_metrics": { + "spearman": 0.2028253755057865, + "pearson": 0.2229027897119522, + "mse": 0.08505822718143463, + "macro_spearman": 0.21227674417314193, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 4.862212143823363e-06, + "lr_head": 2.4311060719116812e-05 + }, + { + "epoch": 17, + "train_loss": 0.0452233674025144, + "val_loss": 0.08821694987767181, + "val_metrics": { + "spearman": 0.20229581542185188, + "pearson": 0.22442831099033356, + "mse": 0.08821789920330048, + "macro_spearman": 0.20634215615444548, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 4.3132185965612014e-06, + "lr_head": 2.1566092982806e-05 + }, + { + "epoch": 18, + "train_loss": 0.04388836729720501, + "val_loss": 0.09027578428121981, + "val_metrics": { + "spearman": 0.193795332135738, + "pearson": 0.2129238247871399, + "mse": 0.09027887880802155, + "macro_spearman": 0.20139275176325294, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 3.7725618879709492e-06, + "lr_head": 1.8862809439854746e-05 + } + ], + "fingerprint": "b50035032c9c5017afd6328b7c1e4ab3f6ff7eeb8a1d126c918c5567e207115e", + "input_hashes": { + "csv": "db08ac7409ae5f119a706f8acb7c486154f10f70f59571fa7306178032ec6990", + "roles_tsv": "6ae90f6fed8e1874479b007d1537531b1a9f9f4db5a89855a9d48947ee0a88bc", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "fb872366d7c824122b62d484a9a90f41ac7b7998b4213bfbdc03702086090c27", + "val": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713", + "test": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713" + } + } +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/receipt.json b/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/receipt.json new file mode 100644 index 0000000000000000000000000000000000000000..c6afe9aa6e9f374b0a31fd38df272c54a5243c80 --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/receipt.json @@ -0,0 +1,101 @@ +{ + "cell_id": "mof_C_doubly_s43", + "fingerprint": "788c8377637edb8cc4ba7bde154a1663f648db547dd0bc721c369dab7d8a8d5a", + "manifest_sha256": "mof_20260909_moC_doubly", + "args": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_C_doubly_s43", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 43, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_doubly_cold", + "test_stratum": "val_doubly_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 406483, + "expected_val_rows": 3822, + "expected_test_rows": 3822, + "manifest_sha256": "mof_20260909_moC_doubly", + "cell_id": "mof_C_doubly_s43", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moC_doubly_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "input_hashes": { + "csv": "e43e150423cb998a77037ad6d82c158a65431b59c46b168febf263ad36267df4", + "roles_tsv": "e82fb6d73d3ce3ff33e32bd0a8d2e81a0aa4b19b8819bf18339c4aa0382dc5fd", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "f6ec937bb55813139ed1b26e07953c95d78fd1fe99ccec1f03bb74c09b7960f5", + "val": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391", + "test": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391" + } + }, + "roster_digests": { + "train": "f6ec937bb55813139ed1b26e07953c95d78fd1fe99ccec1f03bb74c09b7960f5", + "val": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391", + "test": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391" + }, + "slurm_job_id": "12252897", + "slurm_array_task_id": "2", + "slurm_restart_count": null, + "node": "nova21-amp-3", + "gpu": "NVIDIA A100-PCIE-40GB" +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/results.json b/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/results.json new file mode 100644 index 0000000000000000000000000000000000000000..1e97dd2a83d3848295c67f627095ae3ccc447de2 --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/results.json @@ -0,0 +1,234 @@ +{ + "task_type": "regression", + "architecture": "cross-attention=True pooling=mean interaction=concat + live Bertose", + "best_metric": 0.2278161550103475, + "best_metric_is": "validation", + "best_epoch": 1, + "early_stopped": true, + "epochs_ran": 12, + "test_metrics": { + "spearman": 0.24371231429579024, + "pearson": 0.24978864192962646, + "mse": 0.07957296073436737, + "macro_spearman": 0.2278161550103475, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "test_loss": 0.07959918103491266, + "history": [ + { + "epoch": 1, + "train_loss": 0.08217019368176276, + "val_loss": 0.080513754611214, + "val_metrics": { + "spearman": 0.18197313252266425, + "pearson": 0.19518351554870605, + "mse": 0.08036746084690094, + "macro_spearman": 0.13920416257310053, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 7.600456921860401e-06, + "lr_head": 3.800228460930201e-05 + }, + { + "epoch": 2, + "train_loss": 0.07321907142764479, + "val_loss": 0.07959918103491266, + "val_metrics": { + "spearman": 0.24371231429579024, + "pearson": 0.24978864192962646, + "mse": 0.07957296073436737, + "macro_spearman": 0.2278161550103475, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.992405222215124e-06, + "lr_head": 4.996202611107562e-05 + }, + { + "epoch": 3, + "train_loss": 0.06850780602590001, + "val_loss": 0.08010787678261598, + "val_metrics": { + "spearman": 0.22582728258155255, + "pearson": 0.22293958067893982, + "mse": 0.07997935265302658, + "macro_spearman": 0.18212787907544617, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.93179964821535e-06, + "lr_head": 4.9658998241076745e-05 + }, + { + "epoch": 4, + "train_loss": 0.06562513827228887, + "val_loss": 0.08135794155920545, + "val_metrics": { + "spearman": 0.20973701944665502, + "pearson": 0.2167285680770874, + "mse": 0.08122111111879349, + "macro_spearman": 0.1680262191228166, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.811328950051998e-06, + "lr_head": 4.905664475025999e-05 + }, + { + "epoch": 5, + "train_loss": 0.06357526822885308, + "val_loss": 0.08136990948890646, + "val_metrics": { + "spearman": 0.2147511192432372, + "pearson": 0.20993298292160034, + "mse": 0.0812588557600975, + "macro_spearman": 0.17879476431653582, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.632455478806839e-06, + "lr_head": 4.816227739403419e-05 + }, + { + "epoch": 6, + "train_loss": 0.06198898692786375, + "val_loss": 0.08343257292484244, + "val_metrics": { + "spearman": 0.1942465614715496, + "pearson": 0.19803641736507416, + "mse": 0.08329526335000992, + "macro_spearman": 0.1478931661753686, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.397350516112365e-06, + "lr_head": 4.698675258056182e-05 + }, + { + "epoch": 7, + "train_loss": 0.06052576813641251, + "val_loss": 0.08325061357269685, + "val_metrics": { + "spearman": 0.19448283762838364, + "pearson": 0.20482441782951355, + "mse": 0.08314784616231918, + "macro_spearman": 0.14600984283451282, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.108867917734062e-06, + "lr_head": 4.554433958867031e-05 + }, + { + "epoch": 8, + "train_loss": 0.059245914784017056, + "val_loss": 0.08221773185456792, + "val_metrics": { + "spearman": 0.21589636690321976, + "pearson": 0.22401371598243713, + "mse": 0.08215607702732086, + "macro_spearman": 0.19273642448412445, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 8.770509471627362e-06, + "lr_head": 4.385254735813681e-05 + }, + { + "epoch": 9, + "train_loss": 0.05797236338407353, + "val_loss": 0.08278422035897771, + "val_metrics": { + "spearman": 0.20207701461652208, + "pearson": 0.2028491199016571, + "mse": 0.08269399404525757, + "macro_spearman": 0.18161633571304941, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 8.3863823909755e-06, + "lr_head": 4.1931911954877495e-05 + }, + { + "epoch": 10, + "train_loss": 0.05678273152126263, + "val_loss": 0.08959366163859765, + "val_metrics": { + "spearman": 0.16949282307127173, + "pearson": 0.17482900619506836, + "mse": 0.08958856016397476, + "macro_spearman": 0.15269489273804726, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 7.961149458185257e-06, + "lr_head": 3.9805747290926286e-05 + }, + { + "epoch": 11, + "train_loss": 0.055409021762098595, + "val_loss": 0.08639660604918996, + "val_metrics": { + "spearman": 0.17912118331172416, + "pearson": 0.1813514530658722, + "mse": 0.08641572296619415, + "macro_spearman": 0.14887737256820655, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 7.499972425024911e-06, + "lr_head": 3.7499862125124546e-05 + }, + { + "epoch": 12, + "train_loss": 0.05418257805815219, + "val_loss": 0.09123583193868398, + "val_metrics": { + "spearman": 0.17283292579872125, + "pearson": 0.17656531929969788, + "mse": 0.0911729484796524, + "macro_spearman": 0.1595232903648669, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 7.008449355950063e-06, + "lr_head": 3.504224677975031e-05 + } + ], + "fingerprint": "788c8377637edb8cc4ba7bde154a1663f648db547dd0bc721c369dab7d8a8d5a", + "input_hashes": { + "csv": "e43e150423cb998a77037ad6d82c158a65431b59c46b168febf263ad36267df4", + "roles_tsv": "e82fb6d73d3ce3ff33e32bd0a8d2e81a0aa4b19b8819bf18339c4aa0382dc5fd", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "f6ec937bb55813139ed1b26e07953c95d78fd1fe99ccec1f03bb74c09b7960f5", + "val": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391", + "test": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391" + } + } +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/receipt.json b/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/receipt.json new file mode 100644 index 0000000000000000000000000000000000000000..31de1e419ca7aebd32a8288d65ab504e93430a3d --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/receipt.json @@ -0,0 +1,101 @@ +{ + "cell_id": "mof_C_doubly_s44", + "fingerprint": "feb493f3bf5da120bfada3ab639b04a9e0cd89d0f00633e01c99a89664971d49", + "manifest_sha256": "mof_20260909_moC_doubly", + "args": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_C_doubly_s44", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 44, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_doubly_cold", + "test_stratum": "val_doubly_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 406483, + "expected_val_rows": 3822, + "expected_test_rows": 3822, + "manifest_sha256": "mof_20260909_moC_doubly", + "cell_id": "mof_C_doubly_s44", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moC_doubly_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "input_hashes": { + "csv": "e43e150423cb998a77037ad6d82c158a65431b59c46b168febf263ad36267df4", + "roles_tsv": "e82fb6d73d3ce3ff33e32bd0a8d2e81a0aa4b19b8819bf18339c4aa0382dc5fd", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "f6ec937bb55813139ed1b26e07953c95d78fd1fe99ccec1f03bb74c09b7960f5", + "val": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391", + "test": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391" + } + }, + "roster_digests": { + "train": "f6ec937bb55813139ed1b26e07953c95d78fd1fe99ccec1f03bb74c09b7960f5", + "val": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391", + "test": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391" + }, + "slurm_job_id": "12252894", + "slurm_array_task_id": "3", + "slurm_restart_count": null, + "node": "nova21-amp-3", + "gpu": "NVIDIA A100-PCIE-40GB" +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/results.json b/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/results.json new file mode 100644 index 0000000000000000000000000000000000000000..fce21e9b6c0ba0ee65e44a17794fb19ca6912578 --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/results.json @@ -0,0 +1,264 @@ +{ + "task_type": "regression", + "architecture": "cross-attention=True pooling=mean interaction=concat + live Bertose", + "best_metric": 0.21062218506431446, + "best_metric_is": "validation", + "best_epoch": 3, + "early_stopped": true, + "epochs_ran": 14, + "test_metrics": { + "spearman": 0.23531327082857056, + "pearson": 0.23060324788093567, + "mse": 0.08090551197528839, + "macro_spearman": 0.21062218506431446, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "test_loss": 0.08097927542403341, + "history": [ + { + "epoch": 1, + "train_loss": 0.0823811714034573, + "val_loss": 0.08316954768573244, + "val_metrics": { + "spearman": 0.19923863389392296, + "pearson": 0.20312944054603577, + "mse": 0.08306817710399628, + "macro_spearman": 0.14979364049573743, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 7.600456921860401e-06, + "lr_head": 3.800228460930201e-05 + }, + { + "epoch": 2, + "train_loss": 0.07352196992131037, + "val_loss": 0.08194014184797803, + "val_metrics": { + "spearman": 0.23002782642760716, + "pearson": 0.23304009437561035, + "mse": 0.08179230988025665, + "macro_spearman": 0.19135672277353788, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.992405222215124e-06, + "lr_head": 4.996202611107562e-05 + }, + { + "epoch": 3, + "train_loss": 0.06890469362752077, + "val_loss": 0.08131420062854885, + "val_metrics": { + "spearman": 0.2344376640032703, + "pearson": 0.23378324508666992, + "mse": 0.08125484734773636, + "macro_spearman": 0.19768865575292732, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.93179964821535e-06, + "lr_head": 4.9658998241076745e-05 + }, + { + "epoch": 4, + "train_loss": 0.06594055111535461, + "val_loss": 0.08097927542403341, + "val_metrics": { + "spearman": 0.23531327082857056, + "pearson": 0.23060324788093567, + "mse": 0.08090551197528839, + "macro_spearman": 0.21062218506431446, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.811328950051998e-06, + "lr_head": 4.905664475025999e-05 + }, + { + "epoch": 5, + "train_loss": 0.06386762665527351, + "val_loss": 0.08328413100292285, + "val_metrics": { + "spearman": 0.21344337077969475, + "pearson": 0.21080267429351807, + "mse": 0.08322741836309433, + "macro_spearman": 0.1906273111501897, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.632455478806839e-06, + "lr_head": 4.816227739403419e-05 + }, + { + "epoch": 6, + "train_loss": 0.062316317219027036, + "val_loss": 0.08544459746529659, + "val_metrics": { + "spearman": 0.21378404878560708, + "pearson": 0.21021392941474915, + "mse": 0.08542674779891968, + "macro_spearman": 0.1841262975097498, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.397350516112365e-06, + "lr_head": 4.698675258056182e-05 + }, + { + "epoch": 7, + "train_loss": 0.06089970052883347, + "val_loss": 0.08304940707360704, + "val_metrics": { + "spearman": 0.2142924318507679, + "pearson": 0.20584237575531006, + "mse": 0.08305490761995316, + "macro_spearman": 0.20147768236632793, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 9.108867917734062e-06, + "lr_head": 4.554433958867031e-05 + }, + { + "epoch": 8, + "train_loss": 0.05954349656158016, + "val_loss": 0.0856317674741149, + "val_metrics": { + "spearman": 0.20605229263914857, + "pearson": 0.20229709148406982, + "mse": 0.0855521708726883, + "macro_spearman": 0.15801575910924295, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 8.770509471627362e-06, + "lr_head": 4.385254735813681e-05 + }, + { + "epoch": 9, + "train_loss": 0.05828532947726342, + "val_loss": 0.09087766061226527, + "val_metrics": { + "spearman": 0.17898921602789444, + "pearson": 0.17833471298217773, + "mse": 0.0906767025589943, + "macro_spearman": 0.14823934961313195, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 8.3863823909755e-06, + "lr_head": 4.1931911954877495e-05 + }, + { + "epoch": 10, + "train_loss": 0.0570728823543768, + "val_loss": 0.08991672083114584, + "val_metrics": { + "spearman": 0.18307338675239052, + "pearson": 0.18055406212806702, + "mse": 0.08965384215116501, + "macro_spearman": 0.1408365513344764, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 7.961149458185257e-06, + "lr_head": 3.9805747290926286e-05 + }, + { + "epoch": 11, + "train_loss": 0.0557709243132436, + "val_loss": 0.09227961363891761, + "val_metrics": { + "spearman": 0.16599375190389218, + "pearson": 0.1591390073299408, + "mse": 0.09232576191425323, + "macro_spearman": 0.1580101290572493, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 7.499972425024911e-06, + "lr_head": 3.7499862125124546e-05 + }, + { + "epoch": 12, + "train_loss": 0.05454512665595613, + "val_loss": 0.09188498885681232, + "val_metrics": { + "spearman": 0.17033978684464768, + "pearson": 0.1680733561515808, + "mse": 0.09179382771253586, + "macro_spearman": 0.14625690534575364, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 7.008449355950063e-06, + "lr_head": 3.504224677975031e-05 + }, + { + "epoch": 13, + "train_loss": 0.0532016348550355, + "val_loss": 0.0945957535567383, + "val_metrics": { + "spearman": 0.15632833853849673, + "pearson": 0.15771374106407166, + "mse": 0.09457787126302719, + "macro_spearman": 0.14414718978591468, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 6.492546675184488e-06, + "lr_head": 3.246273337592243e-05 + }, + { + "epoch": 14, + "train_loss": 0.05184374296895343, + "val_loss": 0.09580712212870518, + "val_metrics": { + "spearman": 0.1508608569678843, + "pearson": 0.14708638191223145, + "mse": 0.09580221027135849, + "macro_spearman": 0.13152231787081284, + "macro_assays_eligible": 218, + "macro_assays_total": 218 + }, + "lr_encoder": 5.958526742412386e-06, + "lr_head": 2.9792633712061927e-05 + } + ], + "fingerprint": "feb493f3bf5da120bfada3ab639b04a9e0cd89d0f00633e01c99a89664971d49", + "input_hashes": { + "csv": "e43e150423cb998a77037ad6d82c158a65431b59c46b168febf263ad36267df4", + "roles_tsv": "e82fb6d73d3ce3ff33e32bd0a8d2e81a0aa4b19b8819bf18339c4aa0382dc5fd", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "f6ec937bb55813139ed1b26e07953c95d78fd1fe99ccec1f03bb74c09b7960f5", + "val": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391", + "test": "c537ff22ab74b5b6c6ec94e76ef3de2b6ffc1e17086c11657e5f29b0d88da391" + } + } +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/receipt.json b/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/receipt.json new file mode 100644 index 0000000000000000000000000000000000000000..c0d233c77d5f100c153998a49c73f9fa0a9f97bf --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/receipt.json @@ -0,0 +1,101 @@ +{ + "cell_id": "mo_B_protein_s42", + "fingerprint": "b01428c0a518f3d479eae47e01fb9f753829678e902ef19b2318139159d22b05", + "manifest_sha256": "mo_20260908_moB_protein", + "args": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_mo_B_protein_s42", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 42, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_protein_cold", + "test_stratum": "val_protein_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 480431, + "expected_val_rows": 39477, + "expected_test_rows": 39477, + "manifest_sha256": "mo_20260908_moB_protein", + "cell_id": "mo_B_protein_s42", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moB_protein_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "input_hashes": { + "csv": "db08ac7409ae5f119a706f8acb7c486154f10f70f59571fa7306178032ec6990", + "roles_tsv": "6ae90f6fed8e1874479b007d1537531b1a9f9f4db5a89855a9d48947ee0a88bc", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "b7cb8a39e167f2cc9e35476dcdcad56320b02c1898d13db3236a41bbb2ed4852", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "b7cb8a39e167f2cc9e35476dcdcad56320b02c1898d13db3236a41bbb2ed4852", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "fb872366d7c824122b62d484a9a90f41ac7b7998b4213bfbdc03702086090c27", + "val": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713", + "test": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713" + } + }, + "roster_digests": { + "train": "fb872366d7c824122b62d484a9a90f41ac7b7998b4213bfbdc03702086090c27", + "val": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713", + "test": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713" + }, + "slurm_job_id": "12246887", + "slurm_array_task_id": "1", + "slurm_restart_count": null, + "node": "nova22-amp-4", + "gpu": "NVIDIA A100-PCIE-40GB" +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/results.json b/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/results.json new file mode 100644 index 0000000000000000000000000000000000000000..20608e0772528e7bbd61d41403c3d4733cbb8a5d --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/results.json @@ -0,0 +1,249 @@ +{ + "task_type": "regression", + "architecture": "cross-attention=True pooling=mean interaction=concat + live Bertose", + "best_metric": 0.26252924095802427, + "best_metric_is": "validation", + "best_epoch": 2, + "early_stopped": true, + "epochs_ran": 13, + "test_metrics": { + "spearman": 0.25942881487797426, + "pearson": 0.2887952923774719, + "mse": 0.07908895611763, + "macro_spearman": 0.26252924095802427, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "test_loss": 0.07908810899144633, + "history": [ + { + "epoch": 1, + "train_loss": 0.07936764019637589, + "val_loss": 0.07727341543855916, + "val_metrics": { + "spearman": 0.22974231956222838, + "pearson": 0.2575651705265045, + "mse": 0.07726958394050598, + "macro_spearman": 0.20423417020916165, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 7.600386589840024e-06, + "lr_head": 3.8001932949200124e-05 + }, + { + "epoch": 2, + "train_loss": 0.07069923054968805, + "val_loss": 0.07845064017897535, + "val_metrics": { + "spearman": 0.2504587353578122, + "pearson": 0.28131741285324097, + "mse": 0.07845363020896912, + "macro_spearman": 0.24614359912069556, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.992405590165015e-06, + "lr_head": 4.996202795082508e-05 + }, + { + "epoch": 3, + "train_loss": 0.06549092154305781, + "val_loss": 0.07908810899144633, + "val_metrics": { + "spearman": 0.25942881487797426, + "pearson": 0.2887952923774719, + "mse": 0.07908895611763, + "macro_spearman": 0.26252924095802427, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.931800747491785e-06, + "lr_head": 4.965900373745893e-05 + }, + { + "epoch": 4, + "train_loss": 0.06254777507698932, + "val_loss": 0.07726660133241352, + "val_metrics": { + "spearman": 0.25723891925339354, + "pearson": 0.28939107060432434, + "mse": 0.07726714015007019, + "macro_spearman": 0.24403274860392707, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.811330767311252e-06, + "lr_head": 4.905665383655626e-05 + }, + { + "epoch": 5, + "train_loss": 0.0606485245008961, + "val_loss": 0.07617780897385974, + "val_metrics": { + "spearman": 0.2600574628621439, + "pearson": 0.288064181804657, + "mse": 0.07617820799350739, + "macro_spearman": 0.2528433678985772, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.632457991989846e-06, + "lr_head": 4.816228995994923e-05 + }, + { + "epoch": 6, + "train_loss": 0.059075981834601894, + "val_loss": 0.07788420551436888, + "val_metrics": { + "spearman": 0.24969749448139644, + "pearson": 0.277330219745636, + "mse": 0.07788384705781937, + "macro_spearman": 0.2386821536280992, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.397353694712487e-06, + "lr_head": 4.6986768473562434e-05 + }, + { + "epoch": 7, + "train_loss": 0.05771241062936729, + "val_loss": 0.0770768788960163, + "val_metrics": { + "spearman": 0.24658600093505878, + "pearson": 0.2704870104789734, + "mse": 0.07707829028367996, + "macro_spearman": 0.2404798828419362, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 9.108871723167402e-06, + "lr_head": 4.554435861583701e-05 + }, + { + "epoch": 8, + "train_loss": 0.056401529284503024, + "val_loss": 0.07767372783062138, + "val_metrics": { + "spearman": 0.25025455176244654, + "pearson": 0.27863067388534546, + "mse": 0.07767416536808014, + "macro_spearman": 0.2501253184466479, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 8.770513857701111e-06, + "lr_head": 4.385256928850556e-05 + }, + { + "epoch": 9, + "train_loss": 0.05521539913184481, + "val_loss": 0.07825231342010405, + "val_metrics": { + "spearman": 0.2442557593436665, + "pearson": 0.26702696084976196, + "mse": 0.078248031437397, + "macro_spearman": 0.24499366317878346, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 8.386387304448665e-06, + "lr_head": 4.193193652224333e-05 + }, + { + "epoch": 10, + "train_loss": 0.05390348174911083, + "val_loss": 0.0780031232999538, + "val_metrics": { + "spearman": 0.24204312113748305, + "pearson": 0.2684169113636017, + "mse": 0.07800140976905823, + "macro_spearman": 0.23421254455559626, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 7.961154839414931e-06, + "lr_head": 3.9805774197074656e-05 + }, + { + "epoch": 11, + "train_loss": 0.05267046143483076, + "val_loss": 0.07837459790660747, + "val_metrics": { + "spearman": 0.23934161920007588, + "pearson": 0.2649720013141632, + "mse": 0.07837101817131042, + "macro_spearman": 0.23365970237941552, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 7.4999782086902555e-06, + "lr_head": 3.749989104345127e-05 + }, + { + "epoch": 12, + "train_loss": 0.05146051529014342, + "val_loss": 0.0788979618757287, + "val_metrics": { + "spearman": 0.23358875026367887, + "pearson": 0.25619131326675415, + "mse": 0.07889556884765625, + "macro_spearman": 0.23283100198067447, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 7.008455471845214e-06, + "lr_head": 3.504227735922606e-05 + }, + { + "epoch": 13, + "train_loss": 0.05015993111872202, + "val_loss": 0.0815544757038065, + "val_metrics": { + "spearman": 0.22750249252010704, + "pearson": 0.24586999416351318, + "mse": 0.08155617117881775, + "macro_spearman": 0.23248374111534237, + "macro_assays_eligible": 246, + "macro_assays_total": 246 + }, + "lr_encoder": 6.4925530490707626e-06, + "lr_head": 3.246276524535381e-05 + } + ], + "fingerprint": "b01428c0a518f3d479eae47e01fb9f753829678e902ef19b2318139159d22b05", + "input_hashes": { + "csv": "db08ac7409ae5f119a706f8acb7c486154f10f70f59571fa7306178032ec6990", + "roles_tsv": "6ae90f6fed8e1874479b007d1537531b1a9f9f4db5a89855a9d48947ee0a88bc", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "b7cb8a39e167f2cc9e35476dcdcad56320b02c1898d13db3236a41bbb2ed4852", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "b7cb8a39e167f2cc9e35476dcdcad56320b02c1898d13db3236a41bbb2ed4852", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "fb872366d7c824122b62d484a9a90f41ac7b7998b4213bfbdc03702086090c27", + "val": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713", + "test": "9f258e1549c5fc1d1f21a2204f0dbcc46b0f3af489f8845309bcc0d6a3e78713" + } + } +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/receipt.json b/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/receipt.json new file mode 100644 index 0000000000000000000000000000000000000000..75958535820c65c1c0c3c409512cf7e2a10af59b --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/receipt.json @@ -0,0 +1,101 @@ +{ + "cell_id": "moc_A_glycan_s43", + "fingerprint": "c4badf1381c774e40e40826fb3804b5207f157655608b7bcf4423cc04961aa0e", + "manifest_sha256": "moc_20260909_moA_glycan", + "args": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_moc_A_glycan_s43", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 43, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_glycan_cold", + "test_stratum": "val_glycan_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 484491, + "expected_val_rows": 36745, + "expected_test_rows": 36745, + "manifest_sha256": "moc_20260909_moA_glycan", + "cell_id": "moc_A_glycan_s43", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moA_glycan_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "input_hashes": { + "csv": "aa2c0104eb4ac96541081eaa2f0858a6b8575d2c83ce869822ee5107d12ddcb9", + "roles_tsv": "fd43b4aac814f670519120a012a8ef774a2d4c651bcdc3c34488ac7bed2a9a72", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "9256821b6057a857ec009868cda30c10d1133790ca283edf7b36bd04e0c784ad", + "val": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846", + "test": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846" + } + }, + "roster_digests": { + "train": "9256821b6057a857ec009868cda30c10d1133790ca283edf7b36bd04e0c784ad", + "val": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846", + "test": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846" + }, + "slurm_job_id": "12249235", + "slurm_array_task_id": "0", + "slurm_restart_count": null, + "node": "nova22-gpu-1", + "gpu": "NVIDIA A100 80GB PCIe" +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/results.json b/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/results.json new file mode 100644 index 0000000000000000000000000000000000000000..0d101e576d2caa0ab2dfb16a39f1f92430f4a79e --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/results.json @@ -0,0 +1,444 @@ +{ + "task_type": "regression", + "architecture": "cross-attention=True pooling=mean interaction=concat + live Bertose", + "best_metric": 0.35007457331622954, + "best_metric_is": "validation", + "best_epoch": 15, + "early_stopped": true, + "epochs_ran": 26, + "test_metrics": { + "spearman": 0.3777522496882978, + "pearson": 0.3863942623138428, + "mse": 0.08044597506523132, + "macro_spearman": 0.35007457331622954, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "test_loss": 0.08042265739116827, + "history": [ + { + "epoch": 1, + "train_loss": 0.08189488483901525, + "val_loss": 0.07516411668884433, + "val_metrics": { + "spearman": 0.3428069433203718, + "pearson": 0.34107911586761475, + "mse": 0.0751577764749527, + "macro_spearman": 0.2890352820397156, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 7.600383347137149e-06, + "lr_head": 3.8001916735685747e-05 + }, + { + "epoch": 2, + "train_loss": 0.07392516934288461, + "val_loss": 0.0768768384507991, + "val_metrics": { + "spearman": 0.36933731263304664, + "pearson": 0.37387189269065857, + "mse": 0.07689066231250763, + "macro_spearman": 0.3135130001896948, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.992405607129421e-06, + "lr_head": 4.996202803564711e-05 + }, + { + "epoch": 3, + "train_loss": 0.0697155349671577, + "val_loss": 0.07183396116586432, + "val_metrics": { + "spearman": 0.38541910179520295, + "pearson": 0.3918968439102173, + "mse": 0.07184778153896332, + "macro_spearman": 0.3406494439057049, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.931800798174588e-06, + "lr_head": 4.965900399087294e-05 + }, + { + "epoch": 4, + "train_loss": 0.06701345296207437, + "val_loss": 0.07421589327783197, + "val_metrics": { + "spearman": 0.3794090239885093, + "pearson": 0.3856719732284546, + "mse": 0.07422227412462234, + "macro_spearman": 0.3374364275522881, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.811330851097227e-06, + "lr_head": 4.905665425548613e-05 + }, + { + "epoch": 5, + "train_loss": 0.0650514325191099, + "val_loss": 0.07537254910702104, + "val_metrics": { + "spearman": 0.375205521773803, + "pearson": 0.3836655020713806, + "mse": 0.07539970427751541, + "macro_spearman": 0.32654992126375315, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.632458107861948e-06, + "lr_head": 4.816229053930974e-05 + }, + { + "epoch": 6, + "train_loss": 0.0635505139117411, + "val_loss": 0.07693637430252875, + "val_metrics": { + "spearman": 0.3696838587056007, + "pearson": 0.38324683904647827, + "mse": 0.07695440202951431, + "macro_spearman": 0.3264463004818126, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.397353841264184e-06, + "lr_head": 4.698676920632092e-05 + }, + { + "epoch": 7, + "train_loss": 0.062140711194392545, + "val_loss": 0.07362452750657568, + "val_metrics": { + "spearman": 0.38736835161468064, + "pearson": 0.39746931195259094, + "mse": 0.07364296168088913, + "macro_spearman": 0.34140382717224954, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.108871898619753e-06, + "lr_head": 4.554435949309877e-05 + }, + { + "epoch": 8, + "train_loss": 0.06086791562849331, + "val_loss": 0.07728917339899366, + "val_metrics": { + "spearman": 0.3730328467226983, + "pearson": 0.3826748728752136, + "mse": 0.07732180505990982, + "macro_spearman": 0.3304497741778448, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 8.770514059924366e-06, + "lr_head": 4.385257029962183e-05 + }, + { + "epoch": 9, + "train_loss": 0.059566504719285346, + "val_loss": 0.07767987060964471, + "val_metrics": { + "spearman": 0.3586673938330915, + "pearson": 0.36764535307884216, + "mse": 0.07771140336990356, + "macro_spearman": 0.33088951726760596, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 8.386387530988106e-06, + "lr_head": 4.193193765494053e-05 + }, + { + "epoch": 10, + "train_loss": 0.05829187643321016, + "val_loss": 0.07440062735336724, + "val_metrics": { + "spearman": 0.3801845150057329, + "pearson": 0.392275333404541, + "mse": 0.07441569864749908, + "macro_spearman": 0.3471664886006225, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 7.961155087520675e-06, + "lr_head": 3.980577543760337e-05 + }, + { + "epoch": 11, + "train_loss": 0.057018396361149665, + "val_loss": 0.07575436040525647, + "val_metrics": { + "spearman": 0.361510924512872, + "pearson": 0.37735506892204285, + "mse": 0.07578157633543015, + "macro_spearman": 0.3237775283819195, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 7.499978475350636e-06, + "lr_head": 3.7499892376753175e-05 + }, + { + "epoch": 12, + "train_loss": 0.05574394646754243, + "val_loss": 0.07515559342403688, + "val_metrics": { + "spearman": 0.37785579121467905, + "pearson": 0.38874152302742004, + "mse": 0.07518158853054047, + "macro_spearman": 0.33501139981813755, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 7.0084557538233345e-06, + "lr_head": 3.504227876911667e-05 + }, + { + "epoch": 13, + "train_loss": 0.05442438323571604, + "val_loss": 0.08130282581377746, + "val_metrics": { + "spearman": 0.3742470519399466, + "pearson": 0.38060757517814636, + "mse": 0.08132623136043549, + "macro_spearman": 0.3383013281551597, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 6.492553342943792e-06, + "lr_head": 3.246276671471896e-05 + }, + { + "epoch": 14, + "train_loss": 0.05302210328018529, + "val_loss": 0.07773499330546256, + "val_metrics": { + "spearman": 0.3784435339622844, + "pearson": 0.3867904245853424, + "mse": 0.0777549147605896, + "macro_spearman": 0.3454727329405734, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 5.958533599120159e-06, + "lr_head": 2.979266799560079e-05 + }, + { + "epoch": 15, + "train_loss": 0.051586774589781614, + "val_loss": 0.08378822377617848, + "val_metrics": { + "spearman": 0.35934220559289926, + "pearson": 0.36799436807632446, + "mse": 0.0838097631931305, + "macro_spearman": 0.329385892796391, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 5.412878798640137e-06, + "lr_head": 2.7064393993200682e-05 + }, + { + "epoch": 16, + "train_loss": 0.05010301200362359, + "val_loss": 0.08042265739116827, + "val_metrics": { + "spearman": 0.3777522496882978, + "pearson": 0.3863942623138428, + "mse": 0.08044597506523132, + "macro_spearman": 0.35007457331622954, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 4.862212451617974e-06, + "lr_head": 2.4311062258089866e-05 + }, + { + "epoch": 17, + "train_loss": 0.04867487027533793, + "val_loss": 0.08030224247414901, + "val_metrics": { + "spearman": 0.3616134868499751, + "pearson": 0.37310633063316345, + "mse": 0.08031704276800156, + "macro_spearman": 0.33085787117256094, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 4.3132189015541166e-06, + "lr_head": 2.156609450777058e-05 + }, + { + "epoch": 18, + "train_loss": 0.04721441138596018, + "val_loss": 0.08323675625065133, + "val_metrics": { + "spearman": 0.3567515487056686, + "pearson": 0.367239773273468, + "mse": 0.08325038850307465, + "macro_spearman": 0.32437904465229866, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 3.772562186459968e-06, + "lr_head": 1.886281093229984e-05 + }, + { + "epoch": 19, + "train_loss": 0.04577987854215886, + "val_loss": 0.08514317718729233, + "val_metrics": { + "spearman": 0.3450845658641177, + "pearson": 0.35399121046066284, + "mse": 0.0851677879691124, + "macro_spearman": 0.3235210976478206, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 3.246805146463778e-06, + "lr_head": 1.6234025732318888e-05 + }, + { + "epoch": 20, + "train_loss": 0.044441366692088834, + "val_loss": 0.08689031368518675, + "val_metrics": { + "spearman": 0.35443897385126294, + "pearson": 0.3608032464981079, + "mse": 0.08691606670618057, + "macro_spearman": 0.33176325908138443, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 2.742329759821738e-06, + "lr_head": 1.371164879910869e-05 + }, + { + "epoch": 21, + "train_loss": 0.043111966405272754, + "val_loss": 0.0843457660343566, + "val_metrics": { + "spearman": 0.3516963919346694, + "pearson": 0.360311359167099, + "mse": 0.08436727523803711, + "macro_spearman": 0.33099250840348843, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 2.2652596743472142e-06, + "lr_head": 1.1326298371736072e-05 + }, + { + "epoch": 22, + "train_loss": 0.041938385013625006, + "val_loss": 0.08525766780659932, + "val_metrics": { + "spearman": 0.3569226342733468, + "pearson": 0.36342084407806396, + "mse": 0.08528344333171844, + "macro_spearman": 0.33285261461600374, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 1.8213858746216032e-06, + "lr_head": 9.106929373108015e-06 + }, + { + "epoch": 23, + "train_loss": 0.040800501486967684, + "val_loss": 0.08669010242098721, + "val_metrics": { + "spearman": 0.3508026242318251, + "pearson": 0.3567174971103668, + "mse": 0.086715467274189, + "macro_spearman": 0.3264885655248665, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 1.41609638728619e-06, + "lr_head": 7.080481936430948e-06 + }, + { + "epoch": 24, + "train_loss": 0.0399435961473979, + "val_loss": 0.08597228957017522, + "val_metrics": { + "spearman": 0.3553205710905598, + "pearson": 0.360666424036026, + "mse": 0.08600199967622757, + "macro_spearman": 0.3361367976203985, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 1.0543108776975373e-06, + "lr_head": 5.271554388487685e-06 + }, + { + "epoch": 25, + "train_loss": 0.039136259980142, + "val_loss": 0.08806403456588119, + "val_metrics": { + "spearman": 0.3481777091088373, + "pearson": 0.35552480816841125, + "mse": 0.08808925747871399, + "macro_spearman": 0.3289507523991494, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 7.404209318544141e-07, + "lr_head": 3.70210465927207e-06 + }, + { + "epoch": 26, + "train_loss": 0.03843009073480882, + "val_loss": 0.08853096874014153, + "val_metrics": { + "spearman": 0.35018045548149107, + "pearson": 0.35456255078315735, + "mse": 0.08855951577425003, + "macro_spearman": 0.32946006369820796, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 4.782367484927639e-07, + "lr_head": 2.3911837424638193e-06 + } + ], + "fingerprint": "c4badf1381c774e40e40826fb3804b5207f157655608b7bcf4423cc04961aa0e", + "input_hashes": { + "csv": "aa2c0104eb4ac96541081eaa2f0858a6b8575d2c83ce869822ee5107d12ddcb9", + "roles_tsv": "fd43b4aac814f670519120a012a8ef774a2d4c651bcdc3c34488ac7bed2a9a72", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "9256821b6057a857ec009868cda30c10d1133790ca283edf7b36bd04e0c784ad", + "val": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846", + "test": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846" + } + } +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/receipt.json b/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/receipt.json new file mode 100644 index 0000000000000000000000000000000000000000..d0a820e20b7ebeed7d59bbe49fe6f1451bda94fb --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/receipt.json @@ -0,0 +1,101 @@ +{ + "cell_id": "moc_A_glycan_s44", + "fingerprint": "8b21b1bf519297492a567ebebc95441a5ca29cbbd44fae7abb4c1c73bb4f7348", + "manifest_sha256": "moc_20260909_moA_glycan", + "args": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_moc_A_glycan_s44", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 44, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_glycan_cold", + "test_stratum": "val_glycan_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 484491, + "expected_val_rows": 36745, + "expected_test_rows": 36745, + "manifest_sha256": "moc_20260909_moA_glycan", + "cell_id": "moc_A_glycan_s44", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moA_glycan_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "input_hashes": { + "csv": "aa2c0104eb4ac96541081eaa2f0858a6b8575d2c83ce869822ee5107d12ddcb9", + "roles_tsv": "fd43b4aac814f670519120a012a8ef774a2d4c651bcdc3c34488ac7bed2a9a72", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "9256821b6057a857ec009868cda30c10d1133790ca283edf7b36bd04e0c784ad", + "val": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846", + "test": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846" + } + }, + "roster_digests": { + "train": "9256821b6057a857ec009868cda30c10d1133790ca283edf7b36bd04e0c784ad", + "val": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846", + "test": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846" + }, + "slurm_job_id": "12249234", + "slurm_array_task_id": "1", + "slurm_restart_count": null, + "node": "nova22-gpu-2", + "gpu": "NVIDIA A100 80GB PCIe" +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/results.json b/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/results.json new file mode 100644 index 0000000000000000000000000000000000000000..c2136a41cd88791a3ec22e087968a94789fc73b1 --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/results.json @@ -0,0 +1,294 @@ +{ + "task_type": "regression", + "architecture": "cross-attention=True pooling=mean interaction=concat + live Bertose", + "best_metric": 0.3527616358132668, + "best_metric_is": "validation", + "best_epoch": 5, + "early_stopped": true, + "epochs_ran": 16, + "test_metrics": { + "spearman": 0.4053277928273325, + "pearson": 0.4098917841911316, + "mse": 0.07156705856323242, + "macro_spearman": 0.3527616358132668, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "test_loss": 0.071548224780206, + "history": [ + { + "epoch": 1, + "train_loss": 0.08192849987853937, + "val_loss": 0.08482956009600036, + "val_metrics": { + "spearman": 0.30637087398305834, + "pearson": 0.30433857440948486, + "mse": 0.08483283966779709, + "macro_spearman": 0.2702714670544509, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 7.600383347137149e-06, + "lr_head": 3.8001916735685747e-05 + }, + { + "epoch": 2, + "train_loss": 0.07438332545456929, + "val_loss": 0.0727265697925816, + "val_metrics": { + "spearman": 0.37296110251135406, + "pearson": 0.3723938465118408, + "mse": 0.07273003458976746, + "macro_spearman": 0.310280874258643, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.992405607129421e-06, + "lr_head": 4.996202803564711e-05 + }, + { + "epoch": 3, + "train_loss": 0.06972138677708882, + "val_loss": 0.07394424693300684, + "val_metrics": { + "spearman": 0.3648956174407813, + "pearson": 0.366632342338562, + "mse": 0.07396607100963593, + "macro_spearman": 0.30524979517831224, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.931800798174588e-06, + "lr_head": 4.965900399087294e-05 + }, + { + "epoch": 4, + "train_loss": 0.06706507029387672, + "val_loss": 0.07517592586719596, + "val_metrics": { + "spearman": 0.37165814217540066, + "pearson": 0.3770533800125122, + "mse": 0.07519137114286423, + "macro_spearman": 0.31613647787003335, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.811330851097227e-06, + "lr_head": 4.905665425548613e-05 + }, + { + "epoch": 5, + "train_loss": 0.06504097675241431, + "val_loss": 0.07415119766316873, + "val_metrics": { + "spearman": 0.3968449257072682, + "pearson": 0.4013189375400543, + "mse": 0.07416954636573792, + "macro_spearman": 0.32910673583557315, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.632458107861948e-06, + "lr_head": 4.816229053930974e-05 + }, + { + "epoch": 6, + "train_loss": 0.06354468163713291, + "val_loss": 0.071548224780206, + "val_metrics": { + "spearman": 0.4053277928273325, + "pearson": 0.4098917841911316, + "mse": 0.07156705856323242, + "macro_spearman": 0.3527616358132668, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.397353841264184e-06, + "lr_head": 4.698676920632092e-05 + }, + { + "epoch": 7, + "train_loss": 0.06220716618079702, + "val_loss": 0.07336864346967406, + "val_metrics": { + "spearman": 0.3805865927431864, + "pearson": 0.39007002115249634, + "mse": 0.07339045405387878, + "macro_spearman": 0.3259860321828913, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 9.108871898619753e-06, + "lr_head": 4.554435949309877e-05 + }, + { + "epoch": 8, + "train_loss": 0.060897668696889264, + "val_loss": 0.07410377620989286, + "val_metrics": { + "spearman": 0.38085987461631676, + "pearson": 0.3918691873550415, + "mse": 0.07412637025117874, + "macro_spearman": 0.3390720449161558, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 8.770514059924366e-06, + "lr_head": 4.385257029962183e-05 + }, + { + "epoch": 9, + "train_loss": 0.059608371494196816, + "val_loss": 0.07681981226132682, + "val_metrics": { + "spearman": 0.3774236281067582, + "pearson": 0.3850797116756439, + "mse": 0.07684581726789474, + "macro_spearman": 0.3294414648723843, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 8.386387530988106e-06, + "lr_head": 4.193193765494053e-05 + }, + { + "epoch": 10, + "train_loss": 0.058335172663838974, + "val_loss": 0.07487683546760997, + "val_metrics": { + "spearman": 0.376029019553751, + "pearson": 0.38907939195632935, + "mse": 0.07490505278110504, + "macro_spearman": 0.3272838276713846, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 7.961155087520675e-06, + "lr_head": 3.980577543760337e-05 + }, + { + "epoch": 11, + "train_loss": 0.056903795367031135, + "val_loss": 0.07475434896415399, + "val_metrics": { + "spearman": 0.3897092479475888, + "pearson": 0.39895790815353394, + "mse": 0.07477595657110214, + "macro_spearman": 0.3398179081620789, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 7.499978475350636e-06, + "lr_head": 3.7499892376753175e-05 + }, + { + "epoch": 12, + "train_loss": 0.05562474992027564, + "val_loss": 0.0783213542537639, + "val_metrics": { + "spearman": 0.38347559937301284, + "pearson": 0.3909331262111664, + "mse": 0.07834282517433167, + "macro_spearman": 0.3385778400697334, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 7.0084557538233345e-06, + "lr_head": 3.504227876911667e-05 + }, + { + "epoch": 13, + "train_loss": 0.05429115956730993, + "val_loss": 0.07843835977715861, + "val_metrics": { + "spearman": 0.3567244638325121, + "pearson": 0.3695153594017029, + "mse": 0.07846179604530334, + "macro_spearman": 0.3142795321850942, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 6.492553342943792e-06, + "lr_head": 3.246276671471896e-05 + }, + { + "epoch": 14, + "train_loss": 0.05287086389851585, + "val_loss": 0.08298196768739931, + "val_metrics": { + "spearman": 0.35745910283628385, + "pearson": 0.3671335279941559, + "mse": 0.0830068588256836, + "macro_spearman": 0.3216525260602269, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 5.958533599120159e-06, + "lr_head": 2.979266799560079e-05 + }, + { + "epoch": 15, + "train_loss": 0.0514377532454884, + "val_loss": 0.08052704749941773, + "val_metrics": { + "spearman": 0.36092841121812463, + "pearson": 0.3724384605884552, + "mse": 0.08054658025503159, + "macro_spearman": 0.32480866335191466, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 5.412878798640137e-06, + "lr_head": 2.7064393993200682e-05 + }, + { + "epoch": 16, + "train_loss": 0.0500312208324537, + "val_loss": 0.08281005969557999, + "val_metrics": { + "spearman": 0.3545857983303141, + "pearson": 0.36683568358421326, + "mse": 0.08282782137393951, + "macro_spearman": 0.31838430967786957, + "macro_assays_eligible": 1692, + "macro_assays_total": 1693 + }, + "lr_encoder": 4.862212451617974e-06, + "lr_head": 2.4311062258089866e-05 + } + ], + "fingerprint": "8b21b1bf519297492a567ebebc95441a5ca29cbbd44fae7abb4c1c73bb4f7348", + "input_hashes": { + "csv": "aa2c0104eb4ac96541081eaa2f0858a6b8575d2c83ce869822ee5107d12ddcb9", + "roles_tsv": "fd43b4aac814f670519120a012a8ef774a2d4c651bcdc3c34488ac7bed2a9a72", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_imported_modules": { + "/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py": "771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e", + "/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + "_roster_digests": { + "train": "9256821b6057a857ec009868cda30c10d1133790ca283edf7b36bd04e0c784ad", + "val": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846", + "test": "dba86d01797d9f2a30176028da2d07c3f784d8f013faf2ade70391081a20c846" + } + } +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_input_hashes_moA_glycan_20260908.json b/releases/2026-10-02/provenance/affinose_input_hashes_moA_glycan_20260908.json new file mode 100644 index 0000000000000000000000000000000000000000..50d7db5161037cb18e35e8f4af89552d7d6da1f9 --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_input_hashes_moA_glycan_20260908.json @@ -0,0 +1,19 @@ +{ + "csv": "aa2c0104eb4ac96541081eaa2f0858a6b8575d2c83ce869822ee5107d12ddcb9", + "roles_tsv": "fd43b4aac814f670519120a012a8ef774a2d4c651bcdc3c34488ac7bed2a9a72", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_note": "additive motif term, tree model_motif_20260908, from affinose_input_hashes_prA_glycan_20260905.json; data hashes inherited, ALL code hashes recomputed, motif array newly sealed | torch.load weights_only=False applied 2026-09-08 to unbreak --resume", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2" +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_input_hashes_moB_protein_20260908.json b/releases/2026-10-02/provenance/affinose_input_hashes_moB_protein_20260908.json new file mode 100644 index 0000000000000000000000000000000000000000..9041638685eb1d949aa579517bf07c17c6d8dee9 --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_input_hashes_moB_protein_20260908.json @@ -0,0 +1,19 @@ +{ + "csv": "db08ac7409ae5f119a706f8acb7c486154f10f70f59571fa7306178032ec6990", + "roles_tsv": "6ae90f6fed8e1874479b007d1537531b1a9f9f4db5a89855a9d48947ee0a88bc", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_note": "additive motif term, tree model_motif_20260908, from affinose_input_hashes_prB_protein_20260905.json; data hashes inherited, ALL code hashes recomputed, motif array newly sealed | torch.load weights_only=False applied 2026-09-08 to unbreak --resume", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2" +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_input_hashes_moC_doubly_20260908.json b/releases/2026-10-02/provenance/affinose_input_hashes_moC_doubly_20260908.json new file mode 100644 index 0000000000000000000000000000000000000000..adc3ac42b9969346b3baee285a074231e9c29b92 --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_input_hashes_moC_doubly_20260908.json @@ -0,0 +1,19 @@ +{ + "csv": "e43e150423cb998a77037ad6d82c158a65431b59c46b168febf263ad36267df4", + "roles_tsv": "e82fb6d73d3ce3ff33e32bd0a8d2e81a0aa4b19b8819bf18339c4aa0382dc5fd", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_note": "additive motif term, tree model_motif_20260908, from affinose_input_hashes_prC_doubly_20260905.json; data hashes inherited, ALL code hashes recomputed, motif array newly sealed | torch.load weights_only=False applied 2026-09-08 to unbreak --resume", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2" +} \ No newline at end of file diff --git a/releases/2026-10-02/provenance/affinose_recipe.json b/releases/2026-10-02/provenance/affinose_recipe.json new file mode 100644 index 0000000000000000000000000000000000000000..0ebbe6db3d2f6c2de05b66b042de8e001ebf3b6f --- /dev/null +++ b/releases/2026-10-02/provenance/affinose_recipe.json @@ -0,0 +1,586 @@ +{ + "status": "Configuration and arguments verified against nine recovered run receipts; not rerun locally", + "model": "Affinose motif-only", + "motif_additive_dim": 165, + "pooling_mode": "mean", + "interaction_mode": "concat", + "freeze_layers": 4, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "protein_dim": 960, + "training_target": "target_rank", + "loss": "MSE", + "upstream_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "upstream_checkpoint_sha256": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "validation_selection": "strict greater equal-assay macro; constant-prediction assays excluded in trainer", + "final_reporting": "equal-assay macro with data-only eligibility; constant predictions assigned zero", + "selected_cells": { + "mo_A_glycan_s42": { + "stratum": "test_glycan_cold", + "seed": 42, + "test_macro": 0.33405850648525903, + "test_pooled": 0.3519114017717813, + "assays": 1767, + "rows": 37295, + "dir": "affinose_mo_20260908_mo_A_glycan_s42" + }, + "mo_C_doubly_s42": { + "stratum": "test_doubly_cold", + "seed": 42, + "test_macro": 0.17732109020146009, + "test_pooled": 0.19643520103251555, + "assays": 212, + "rows": 3691, + "dir": "affinose_mo_20260908_mo_C_doubly_s42" + }, + "mof_B_protein_s43": { + "stratum": "test_protein_cold", + "seed": 43, + "test_macro": 0.24512556467979302, + "test_pooled": 0.2699137753848991, + "assays": 246, + "rows": 38539, + "dir": "affinose_mof_20260909_mof_B_protein_s43" + }, + "mof_B_protein_s44": { + "stratum": "test_protein_cold", + "seed": 44, + "test_macro": 0.24489399647831056, + "test_pooled": 0.2547891998912819, + "assays": 246, + "rows": 38539, + "dir": "affinose_mof_20260909_mof_B_protein_s44" + }, + "mof_C_doubly_s43": { + "stratum": "test_doubly_cold", + "seed": 43, + "test_macro": 0.1839765095395252, + "test_pooled": 0.2208411762069753, + "assays": 212, + "rows": 3691, + "dir": "affinose_mof_20260909_mof_C_doubly_s43" + }, + "mof_C_doubly_s44": { + "stratum": "test_doubly_cold", + "seed": 44, + "test_macro": 0.17430173158048537, + "test_pooled": 0.19176702047106786, + "assays": 212, + "rows": 3691, + "dir": "affinose_mof_20260909_mof_C_doubly_s44" + }, + "mo_B_protein_s42": { + "stratum": "test_protein_cold", + "seed": 42, + "test_macro": 0.23260289913763402, + "test_pooled": 0.26884245311406896, + "assays": 246, + "rows": 38539, + "dir": "affinose_sa_20260908_mo_B_protein_s42" + }, + "moc_A_glycan_s43": { + "stratum": "test_glycan_cold", + "seed": 43, + "test_macro": 0.318371586837939, + "test_pooled": 0.3491029922366602, + "assays": 1767, + "rows": 37295, + "dir": "affinose_sa_20260908_moc_A_glycan_s43" + }, + "moc_A_glycan_s44": { + "stratum": "test_glycan_cold", + "seed": 44, + "test_macro": 0.3354799039624282, + "test_pooled": 0.3562564894744605, + "assays": 1767, + "rows": 37295, + "dir": "affinose_sa_20260908_moc_A_glycan_s44" + } + }, + "recorded_training_args": { + "mo_B_protein_s42": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_mo_B_protein_s42", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 42, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_protein_cold", + "test_stratum": "val_protein_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 480431, + "expected_val_rows": 39477, + "expected_test_rows": 39477, + "manifest_sha256": "mo_20260908_moB_protein", + "cell_id": "mo_B_protein_s42", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moB_protein_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "moc_A_glycan_s43": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_moc_A_glycan_s43", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 43, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_glycan_cold", + "test_stratum": "val_glycan_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 484491, + "expected_val_rows": 36745, + "expected_test_rows": 36745, + "manifest_sha256": "moc_20260909_moA_glycan", + "cell_id": "moc_A_glycan_s43", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moA_glycan_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "moc_A_glycan_s44": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_moc_A_glycan_s44", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 44, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_glycan_cold", + "test_stratum": "val_glycan_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 484491, + "expected_val_rows": 36745, + "expected_test_rows": 36745, + "manifest_sha256": "moc_20260909_moA_glycan", + "cell_id": "moc_A_glycan_s44", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moA_glycan_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "mo_A_glycan_s42": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mo_20260908_mo_A_glycan_s42", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 42, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_glycan_cold", + "test_stratum": "val_glycan_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 484491, + "expected_val_rows": 36745, + "expected_test_rows": 36745, + "manifest_sha256": "mo_20260908_moA_glycan", + "cell_id": "mo_A_glycan_s42", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moA_glycan_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "mo_C_doubly_s42": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mo_20260908_mo_C_doubly_s42", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 42, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_doubly_cold", + "test_stratum": "val_doubly_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 406483, + "expected_val_rows": 3822, + "expected_test_rows": 3822, + "manifest_sha256": "mo_20260908_moC_doubly", + "cell_id": "mo_C_doubly_s42", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moC_doubly_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "mof_C_doubly_s44": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_C_doubly_s44", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 44, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_doubly_cold", + "test_stratum": "val_doubly_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 406483, + "expected_val_rows": 3822, + "expected_test_rows": 3822, + "manifest_sha256": "mof_20260909_moC_doubly", + "cell_id": "mof_C_doubly_s44", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moC_doubly_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "mof_C_doubly_s43": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_C_doubly_s43", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 43, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_doubly_cold", + "test_stratum": "val_doubly_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 406483, + "expected_val_rows": 3822, + "expected_test_rows": 3822, + "manifest_sha256": "mof_20260909_moC_doubly", + "cell_id": "mof_C_doubly_s43", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moC_doubly_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "mof_B_protein_s44": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_B_protein_s44", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 44, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_protein_cold", + "test_stratum": "val_protein_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 480431, + "expected_val_rows": 39477, + "expected_test_rows": 39477, + "manifest_sha256": "mof_20260909_moB_protein", + "cell_id": "mof_B_protein_s44", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moB_protein_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + }, + "mof_B_protein_s43": { + "csv_path": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_binding.csv", + "split_path": "/work/ratul1/supantha/Bertint/v2_artifacts/affinose_v2_splits_direct_edit_guarded.json", + "protein_emb_path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "vocab_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bertose_checkpoint": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "output_dir": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_B_protein_s43", + "freeze_layers": 4, + "shared_dim": 512, + "num_cross_layers": 2, + "num_heads": 8, + "swe_slices": 512, + "dropout": 0.1, + "protein_dim": 960, + "separate_swe": false, + "lr_encoder": 1e-05, + "lr_head": 5e-05, + "weight_decay": 0.01, + "max_grad_norm": 1.0, + "batch_size": 32, + "epochs": 30, + "patience": 10, + "max_glycan_length": 256, + "max_protein_length": 1024, + "protein_mode": "real", + "ranking_loss": false, + "assays_per_batch": 4, + "rows_per_assay": 8, + "protein_binding_channel": false, + "glycan_only": false, + "protein_attentive_pool": false, + "motif_additive_dim": 165, + "glycan_size_channel": false, + "seed": 43, + "roles_tsv": "/work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_roles.tsv.gz", + "train_stratum": "fit_train", + "val_stratum": "val_protein_cold", + "test_stratum": "val_protein_cold", + "features_dir": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "expected_train_rows": 480431, + "expected_val_rows": 39477, + "expected_test_rows": 39477, + "manifest_sha256": "mof_20260909_moB_protein", + "cell_id": "mof_B_protein_s43", + "input_hashes": "/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moB_protein_20260908.json", + "warmup_pct": 0.05, + "target_col": "target_rank", + "checkpoint_interval": 1, + "resume": false, + "pooling_mode": "mean", + "interaction_mode": "concat", + "no_cross_attention": false + } + } +} diff --git a/releases/2026-10-02/provenance/artifact_locations.tsv b/releases/2026-10-02/provenance/artifact_locations.tsv new file mode 100644 index 0000000000000000000000000000000000000000..140c45e810e594a5c34b9d6371d30e159f9500c7 --- /dev/null +++ b/releases/2026-10-02/provenance/artifact_locations.tsv @@ -0,0 +1,27 @@ +id artifact path sha256 verification +mo_A_glycan_s42 final Affinose checkpoint /work/ratul1/supantha/Bertint/checkpoints/affinose_mo_20260908_mo_A_glycan_s42/best_model.pt path in scoring receipt; checkpoint bytes not read +mo_C_doubly_s42 final Affinose checkpoint /work/ratul1/supantha/Bertint/checkpoints/affinose_mo_20260908_mo_C_doubly_s42/best_model.pt path in scoring receipt; checkpoint bytes not read +mof_B_protein_s43 final Affinose checkpoint /work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_B_protein_s43/best_model.pt path in scoring receipt; checkpoint bytes not read +mof_B_protein_s44 final Affinose checkpoint /work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_B_protein_s44/best_model.pt path in scoring receipt; checkpoint bytes not read +mof_C_doubly_s43 final Affinose checkpoint /work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_C_doubly_s43/best_model.pt path in scoring receipt; checkpoint bytes not read +mof_C_doubly_s44 final Affinose checkpoint /work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_C_doubly_s44/best_model.pt path in scoring receipt; checkpoint bytes not read +mo_B_protein_s42 final Affinose checkpoint /work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_mo_B_protein_s42/best_model.pt path in scoring receipt; checkpoint bytes not read +moc_A_glycan_s43 final Affinose checkpoint /work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_moc_A_glycan_s43/best_model.pt path in scoring receipt; checkpoint bytes not read +moc_A_glycan_s44 final Affinose checkpoint /work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_moc_A_glycan_s44/best_model.pt path in scoring receipt; checkpoint bytes not read +A_glycan csv /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_binding.csv aa2c0104eb4ac96541081eaa2f0858a6b8575d2c83ce869822ee5107d12ddcb9 digest from recorded seal; payload not read +A_glycan roles_tsv /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_roles.tsv.gz fd43b4aac814f670519120a012a8ef774a2d4c651bcdc3c34488ac7bed2a9a72 digest from recorded seal; payload not read +A_glycan protein_emb_h5 /work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5 529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4 digest from recorded seal; payload not read +B_protein csv /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_binding.csv db08ac7409ae5f119a706f8acb7c486154f10f70f59571fa7306178032ec6990 digest from recorded seal; payload not read +B_protein roles_tsv /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_roles.tsv.gz 6ae90f6fed8e1874479b007d1537531b1a9f9f4db5a89855a9d48947ee0a88bc digest from recorded seal; payload not read +B_protein protein_emb_h5 /work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5 529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4 digest from recorded seal; payload not read +C_doubly csv /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_binding.csv e43e150423cb998a77037ad6d82c158a65431b59c46b168febf263ad36267df4 digest from recorded seal; payload not read +C_doubly roles_tsv /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_roles.tsv.gz e82fb6d73d3ce3ff33e32bd0a8d2e81a0aa4b19b8819bf18339c4aa0382dc5fd digest from recorded seal; payload not read +C_doubly protein_emb_h5 /work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5 529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4 digest from recorded seal; payload not read +WA3 upstream checkpoint /work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt 8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82 digest from copied index and Affinose seals; payload not read +shared feature_token_ids /work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1/review_token_ids.npy 9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd digest from recorded seal; payload not read +shared feature_branch_depths /work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1/review_branch_depths.npy afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086 digest from recorded seal; payload not read +shared feature_linkage_types /work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1/review_linkage_types.npy 3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f digest from recorded seal; payload not read +shared feature_attention_mask /work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1/review_attention_mask.npy 43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282 digest from recorded seal; payload not read +shared feature_tree_channels_valid /work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1/review_tree_channels_valid.npy 0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c digest from recorded seal; payload not read +shared feature_index /work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1/review_affinose_glycan_index.tsv.gz 986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d digest from recorded seal; payload not read +shared feature_motif_features /work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1/review_motif_features.npy d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2 digest from recorded seal; payload not read diff --git a/releases/2026-10-02/provenance/candidate_affinose_input_hashes_moA_glycan_20260908.json b/releases/2026-10-02/provenance/candidate_affinose_input_hashes_moA_glycan_20260908.json new file mode 100644 index 0000000000000000000000000000000000000000..8cdcd15d8ee5179311f9fd33f6734bfadb147b37 --- /dev/null +++ b/releases/2026-10-02/provenance/candidate_affinose_input_hashes_moA_glycan_20260908.json @@ -0,0 +1,20 @@ +{ + "csv": "aa2c0104eb4ac96541081eaa2f0858a6b8575d2c83ce869822ee5107d12ddcb9", + "roles_tsv": "fd43b4aac814f670519120a012a8ef774a2d4c651bcdc3c34488ac7bed2a9a72", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "b6c2483e2975c4c7d7dfde6b2979c8e1e862564279c7ebba4e65b504776b43df", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "7fa8d6fe95db3ccecefdd396931d6354442800cd5284cabf519e3425cc388883", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_note": "additive motif term, tree model_motif_20260908, from affinose_input_hashes_prA_glycan_20260905.json; data hashes inherited, ALL code hashes recomputed, motif array newly sealed | torch.load weights_only=False applied 2026-09-08 to unbreak --resume", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "_candidate_note": "Submission candidate: three absolute source roots made relative to this bundle. Not the executed tree. All data hashes preserved; replacement code hashes apply only to this candidate." +} diff --git a/releases/2026-10-02/provenance/candidate_affinose_input_hashes_moB_protein_20260908.json b/releases/2026-10-02/provenance/candidate_affinose_input_hashes_moB_protein_20260908.json new file mode 100644 index 0000000000000000000000000000000000000000..f92bccb8f0ff197eb7dcd2f341582d2d6553d2ba --- /dev/null +++ b/releases/2026-10-02/provenance/candidate_affinose_input_hashes_moB_protein_20260908.json @@ -0,0 +1,20 @@ +{ + "csv": "db08ac7409ae5f119a706f8acb7c486154f10f70f59571fa7306178032ec6990", + "roles_tsv": "6ae90f6fed8e1874479b007d1537531b1a9f9f4db5a89855a9d48947ee0a88bc", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "b6c2483e2975c4c7d7dfde6b2979c8e1e862564279c7ebba4e65b504776b43df", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "7fa8d6fe95db3ccecefdd396931d6354442800cd5284cabf519e3425cc388883", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_note": "additive motif term, tree model_motif_20260908, from affinose_input_hashes_prB_protein_20260905.json; data hashes inherited, ALL code hashes recomputed, motif array newly sealed | torch.load weights_only=False applied 2026-09-08 to unbreak --resume", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "_candidate_note": "Submission candidate: three absolute source roots made relative to this bundle. Not the executed tree. All data hashes preserved; replacement code hashes apply only to this candidate." +} diff --git a/releases/2026-10-02/provenance/candidate_affinose_input_hashes_moC_doubly_20260908.json b/releases/2026-10-02/provenance/candidate_affinose_input_hashes_moC_doubly_20260908.json new file mode 100644 index 0000000000000000000000000000000000000000..25a1b09feedb634df5e7cbb82d10ea2d4fe1187d --- /dev/null +++ b/releases/2026-10-02/provenance/candidate_affinose_input_hashes_moC_doubly_20260908.json @@ -0,0 +1,20 @@ +{ + "csv": "e43e150423cb998a77037ad6d82c158a65431b59c46b168febf263ad36267df4", + "roles_tsv": "e82fb6d73d3ce3ff33e32bd0a8d2e81a0aa4b19b8819bf18339c4aa0382dc5fd", + "protein_emb_h5": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "upstream_checkpoint": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "dataset_v8.py": "b6c2483e2975c4c7d7dfde6b2979c8e1e862564279c7ebba4e65b504776b43df", + "training_v8.py": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bertint_v8.py": "7fa8d6fe95db3ccecefdd396931d6354442800cd5284cabf519e3425cc388883", + "a1111_encoder_adapter.py": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "feature_token_ids": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "feature_branch_depths": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "feature_linkage_types": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "feature_attention_mask": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "feature_tree_channels_valid": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "feature_index": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "_note": "additive motif term, tree model_motif_20260908, from affinose_input_hashes_prC_doubly_20260905.json; data hashes inherited, ALL code hashes recomputed, motif array newly sealed | torch.load weights_only=False applied 2026-09-08 to unbreak --resume", + "feature_motif_features": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "_candidate_note": "Submission candidate: three absolute source roots made relative to this bundle. Not the executed tree. All data hashes preserved; replacement code hashes apply only to this candidate." +} diff --git a/releases/2026-10-02/provenance/candidate_portability.patch b/releases/2026-10-02/provenance/candidate_portability.patch new file mode 100644 index 0000000000000000000000000000000000000000..3aeb9924da9cdeaf4f9394ec6497c0a60de845c1 --- /dev/null +++ b/releases/2026-10-02/provenance/candidate_portability.patch @@ -0,0 +1,54 @@ +--- executed/bertint_v8.py ++++ candidate/bertint_v8.py +@@ -41,9 +41,7 @@ + # ============================================================================ + # Bertose model imports (same as V7) + # ============================================================================ +-BERTOSE_ROOT = Path( +- "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training" +-) ++BERTOSE_ROOT = Path(__file__).resolve().parents[1] / "bertose_source" + + + def _ensure_bertose_imports(): +--- executed/a5_tokenizer_shim.py ++++ candidate/a5_tokenizer_shim.py +@@ -20,10 +20,8 @@ + import types + from pathlib import Path + +-A5_PKG = Path( +- "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/data/" +- "review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1" +-) ++V31_ROOT = Path(__file__).resolve().parents[1] / "bertose_source" ++A5_PKG = V31_ROOT / "data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1" + + _FILES = { + "a5_topology": "review_frozen_training_a5_topology.py", +@@ -45,9 +43,7 @@ + # except ImportError: from ..bert_training_v4... (needs a 2-level parent package) + # Putting the v3.1 root on sys.path lets the ABSOLUTE first branch resolve, so the + # awkward relative fallback never executes. +-V31_ROOT = Path( +- "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training" +-) ++ + + + def install(pkg_dir: Path = A5_PKG): +--- executed/dataset_v8.py ++++ candidate/dataset_v8.py +@@ -47,10 +47,8 @@ + """ + import sys + +- utils_dir = ( +- "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/" +- "v3.1_cluster_training/bert_training_v4/downstream_tasks/utils" +- ) ++ utils_dir = str(Path(__file__).resolve().parents[1] / "bertose_source" / ++ "bert_training_v4/downstream_tasks/utils") + if utils_dir not in sys.path: + sys.path.insert(0, utils_dir) + diff --git a/releases/2026-10-02/provenance/copied_sources.json b/releases/2026-10-02/provenance/copied_sources.json new file mode 100644 index 0000000000000000000000000000000000000000..80955790ce22f308390a535d063402feb0612be6 --- /dev/null +++ b/releases/2026-10-02/provenance/copied_sources.json @@ -0,0 +1,3783 @@ +[ + { + "output": "bertose_source/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py", + "source": "submit_comm/06_code/bertose_source/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py", + "sha256": "0bc54399362945601bcfd403441fc80968d173200dd0561f57568b2053a94839", + "bytes": 27983, + "status": "unchanged_copy", + "original_package_path": "bertose_source/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py" + }, + { + "output": "bertose_source/bert_training_v4/model/__init__.py", + "source": "submit_comm/06_code/bertose_source/bert_training_v4/model/__init__.py", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0, + "status": "unchanged_copy", + "original_package_path": "bertose_source/bert_training_v4/model/__init__.py" + }, + { + "output": "bertose_source/bert_training_v4/model/glycan_bert.py", + "source": "submit_comm/06_code/bertose_source/bert_training_v4/model/glycan_bert.py", + "sha256": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "bytes": 11024, + "status": "unchanged_copy", + "original_package_path": "bertose_source/bert_training_v4/model/glycan_bert.py" + }, + { + "output": "bertose_source/bert_training_v4/model/multimodal_glycan_bert_v3.py", + "source": "submit_comm/06_code/bertose_source/bert_training_v4/model/multimodal_glycan_bert_v3.py", + "sha256": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "bytes": 45625, + "status": "unchanged_copy", + "original_package_path": "bertose_source/bert_training_v4/model/multimodal_glycan_bert_v3.py" + }, + { + "output": "bertose_source/data/bpe_vocabulary.json", + "source": "submit_comm/06_code/bertose_source/data/bpe_vocabulary.json", + "sha256": "8a7f8569ff3a21513723d3a15e969120f0fdcf352943dbbadfdc54afd382149e", + "bytes": 43547, + "status": "unchanged_copy", + "original_package_path": "bertose_source/data/bpe_vocabulary.json" + }, + { + "output": "bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_authority.json", + "source": "submit_comm/06_code/bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_authority.json", + "sha256": "48914855c4e458ff02452ad4db3743a4fbef12221e0313584db4c2b1bd684cd4", + "bytes": 20541, + "status": "unchanged_copy", + "original_package_path": "bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_authority.json" + }, + { + "output": "bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_independent_certificate.json", + "source": "submit_comm/06_code/bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_independent_certificate.json", + "sha256": "53098620a5c22dafdc951ba743515b4b10b1673c02f0aa4d881db669584902fa", + "bytes": 19121, + "status": "unchanged_copy", + "original_package_path": "bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_independent_certificate.json" + }, + { + "output": "bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_receipt.json", + "source": "submit_comm/06_code/bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_receipt.json", + "sha256": "f654177eb6fde7289b6755812c2be298084697cf0d85159b3ec9da310fe3d4b4", + "bytes": 6260, + "status": "unchanged_copy", + "original_package_path": "bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_receipt.json" + }, + { + "output": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "source": "submit_comm/06_code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "bytes": 138150, + "status": "unchanged_copy", + "original_package_path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json" + }, + { + "output": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py", + "source": "submit_comm/06_code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py", + "sha256": "10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04", + "bytes": 11405, + "status": "unchanged_copy", + "original_package_path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py" + }, + { + "output": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py", + "source": "submit_comm/06_code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py", + "sha256": "f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7", + "bytes": 6186, + "status": "unchanged_copy", + "original_package_path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py" + }, + { + "output": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py", + "source": "submit_comm/06_code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py", + "sha256": "6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4", + "bytes": 14161, + "status": "unchanged_copy", + "original_package_path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py" + }, + { + "output": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_receipt.json", + "source": "submit_comm/06_code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_receipt.json", + "sha256": "399df3de2b6c4d5e88aa442c8326214ab9cff2e8f0411e6921762bbade1475ba", + "bytes": 5797, + "status": "unchanged_copy", + "original_package_path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_receipt.json" + }, + { + "output": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_summary.json", + "source": "submit_comm/06_code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_summary.json", + "sha256": "93ed219d807d4a7735be96bf7cf6a59a0bd407619925ee194aed6d473048cdf0", + "bytes": 7777, + "status": "unchanged_copy", + "original_package_path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_summary.json" + }, + { + "output": "bertose_source/model/glycan_bert.py", + "source": "submit_comm/06_code/bertose_source/model/glycan_bert.py", + "sha256": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "bytes": 11024, + "status": "unchanged_copy", + "original_package_path": "bertose_source/model/glycan_bert.py" + }, + { + "output": "bertose_source/model/multimodal_glycan_bert_v3.py", + "source": "submit_comm/06_code/bertose_source/model/multimodal_glycan_bert_v3.py", + "sha256": "8e06c32f4e844c3c66f146fd15a075472808a0720c892d0b9683dfd32f15ef0c", + "bytes": 45141, + "status": "unchanged_copy", + "original_package_path": "bertose_source/model/multimodal_glycan_bert_v3.py" + }, + { + "output": "bertose_source/training/a5_wurcs_bpe.py", + "source": "submit_comm/06_code/bertose_source/training/a5_wurcs_bpe.py", + "sha256": "6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4", + "bytes": 14161, + "status": "unchanged_copy", + "original_package_path": "bertose_source/training/a5_wurcs_bpe.py" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_submission_readback_11767377/review_a5_native_eight_cuda_resume_diagnostic_r5_11767377_terminal_certification_receipt.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_submission_readback_11767377/review_a5_native_eight_cuda_resume_diagnostic_r5_11767377_terminal_certification_receipt.json", + "sha256": "2a3b28bd980b144eb42f9688f411adfbced054b9e7bad9fac4de37c6180064f8", + "bytes": 4862, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_submission_readback_11767377/review_a5_native_eight_cuda_resume_diagnostic_r5_11767377_terminal_certification_receipt.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_a5_native_eight_cuda_resume_diagnostic_receipt_r5.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_a5_native_eight_cuda_resume_diagnostic_receipt_r5.json", + "sha256": "6a1bc65c568a17dc45f1102cd122ac43c62a8ee3b28e06ec855577857cc41ce0", + "bytes": 127461, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_a5_native_eight_cuda_resume_diagnostic_receipt_r5.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_checkpoints_r1/review_checkpoint_index.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_checkpoints_r1/review_checkpoint_index.json", + "sha256": "9292c31195a7eddfe9f987a8cfe8cda843b283bb10a1bc8fb1b05d88f82a92d9", + "bytes": 796, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_checkpoints_r1/review_checkpoint_index.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r1/review_a5_native_eight_data_adapter_receipt_r1.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r1/review_a5_native_eight_data_adapter_receipt_r1.json", + "sha256": "cacec838740d64a493c2e56fd1efa8a85ba7d11fce3ec26e40905c33db05e58d", + "bytes": 4132, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r1/review_a5_native_eight_data_adapter_receipt_r1.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_receipt_r2.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_receipt_r2.json", + "sha256": "3b2118e128a5550ba4918b4f4f2c6d8045e319b7cff37b76d74dce6b3220c9f0", + "bytes": 3677, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_receipt_r2.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_receipt_r3.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_receipt_r3.json", + "sha256": "e29df7a91d0c30238abe9155e600fb1b77b0d3d3481f6599d2ca0d2185371b9f", + "bytes": 3016, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_receipt_r3.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_verification_receipt_r1.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_verification_receipt_r1.json", + "sha256": "a92f4b951476e84af006015c97698f07d5e03e7a182c54c82b7d7c5c0e68ffb3", + "bytes": 2659, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_verification_receipt_r1.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4_integrity_receipt.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4_integrity_receipt.json", + "sha256": "9aa5860bfc032afd82561a6db6f8df1439245b73aa3f7575b2b88836e384a1f9", + "bytes": 5728, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4_integrity_receipt.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5_integrity_receipt.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5_integrity_receipt.json", + "sha256": "59a2fd53e9e75f6f8ec258d76e103adb61c908ab0ace6718a348739f5b70d8bd", + "bytes": 3995, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5_integrity_receipt.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6_integrity_receipt.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6_integrity_receipt.json", + "sha256": "0c078ce52e2eb6d6feaeb1a1c2af1794ef33aef56aca7959f76a93f39d152692", + "bytes": 3933, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6_integrity_receipt.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7_integrity_receipt.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7_integrity_receipt.json", + "sha256": "912bc1391ff66c3fd704e61266de508adcf9ed587d7e136932508029b77cb956", + "bytes": 2968, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7_integrity_receipt.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_final_binding_r22.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_final_binding_r22.json", + "sha256": "d8feaf25a7266a919c42d3a4fd1ad2d105ab088ae79c024edc665dfa29cf758a", + "bytes": 3104, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_final_binding_r22.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_launch_config_r22.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_launch_config_r22.json", + "sha256": "30082379d47318f5d9e17fafad4aa018e7e9f0f0bf1aac559178d46784fe4b9f", + "bytes": 2514, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_launch_config_r22.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/run_review_a5_native_eight_r22.sbatch", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/run_review_a5_native_eight_r22.sbatch", + "sha256": "826f3e8167fdd459cff7677b5b69d0f3caf9dababaaa71d9eded6070aa5d93a7", + "bytes": 3603, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/run_review_a5_native_eight_r22.sbatch" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_authority_r1.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_authority_r1.json", + "sha256": "1238f76e5da5184d16d33077bf3e5342033918fadb4eba84242c47cb1b1322cc", + "bytes": 14887, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_authority_r1.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_receipt_r1.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_receipt_r1.json", + "sha256": "fb65dddf0bc61b4c73b5dc5ec796967e65263e9d7bdc4882e07684e882280fdb", + "bytes": 743, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_receipt_r1.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r3/review_a5_topology_loss_v2.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r3/review_a5_topology_loss_v2.py", + "sha256": "64eaf9174f523ae909c84987049d071bf3869ca8e83919f14f0572ef77b0530e", + "bytes": 8067, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r3/review_a5_topology_loss_v2.py" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_receipt_r4.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_receipt_r4.json", + "sha256": "654f5b9728c3dfd2588c4b570b0e3a1bcab8feb366af28eeead36f9beb37d921", + "bytes": 2678, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_receipt_r4.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_summary_r4.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_summary_r4.json", + "sha256": "ccd4b81d3afac8ae789c538e0af332f74f2468d403da1d243fefefd4df013538", + "bytes": 3228, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_summary_r4.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null.json", + "sha256": "b10556643abf560b9e8622e8ae67936d2d3ca8867433db485e785f31d049a8fb", + "bytes": 3278, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null_receipt.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null_receipt.json", + "sha256": "f4eb239f56e472d57dd3a3848c1a6c142e193cb326320ac8bf134b96ac35102a", + "bytes": 1340, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null_receipt.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_frozen_sequence_masking_runtime.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_frozen_sequence_masking_runtime.py", + "sha256": "831bebd2dcf6a8308d01ec62eb6e1132fe7edbbc666c1c83787335acc576b19c", + "bytes": 12583, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_frozen_sequence_masking_runtime.py" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_receipt_r1.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_receipt_r1.json", + "sha256": "eae6b3772cd08c65cdc26bdf7ec525742452aad4a35b4d5aa9a7a5936dc3bf73", + "bytes": 1348, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_receipt_r1.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_summary_r1.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_summary_r1.json", + "sha256": "da7814d20c81c0d072544cfc5761e8fae0292def176d63b863083389c9caa0ff", + "bytes": 8477, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_summary_r1.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_receipt.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_receipt.json", + "sha256": "ba9591529f3747706fbc169fe8262e23ca31a810473d10c284fb01d9190ebe42", + "bytes": 1166, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_receipt.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_summary.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_summary.json", + "sha256": "d6b3dad73d8c9cc78a7c721e7969280d0ff6500773402545bc2ff143b125f56c", + "bytes": 6916, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_summary.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762446_r1.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762446_r1.json", + "sha256": "8ff3181d22567728c0a10580c1e775da0714f17561ace81034fc673813f54af6", + "bytes": 2833, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762446_r1.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762534_r1.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762534_r1.json", + "sha256": "163374c5c6b049908d935f0d92d8f1a1adda761550761db9b2cb423bfb450ee1", + "bytes": 2833, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762534_r1.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762446_r2.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762446_r2.json", + "sha256": "85711141c9d0e84dee228df84d02df7d4693fb4b85b1ae8163466e208f5e9fd6", + "bytes": 1575, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762446_r2.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762534_r3.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762534_r3.json", + "sha256": "0d96b7867eeec85dbf14eb8f55b745b7c354edb5d16ac702d17b97bf850c79af", + "bytes": 1575, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762534_r3.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762446_r2.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762446_r2.json", + "sha256": "f7adbf64e17c3a2afc677b7af9f05e50e37b4d681f38f0fc192634ca0447e4f4", + "bytes": 1391, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762446_r2.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762534_r3.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762534_r3.json", + "sha256": "6796f0b163dcf21af5dfe3048b53e8d2660fe10290e22222232a6c7f6668396c", + "bytes": 1391, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762534_r3.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_cpu_finalization_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_cpu_finalization_execution_r21.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_cpu_finalization_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_cpu_finalization_execution_r21.json", + "sha256": "be55a87986dd6d80942dcd0b17dd75994145ff4a383596314d5b4ee51972a443", + "bytes": 5306, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_cpu_finalization_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_cpu_finalization_execution_r21.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_publication_receipt_r4.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_publication_receipt_r4.json", + "sha256": "77ba176a9fab70e75b3c2c423c857d1e266f2021875aea01e15bac3f11f327d1", + "bytes": 9514, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_publication_receipt_r4.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_train_only_null_r4.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_train_only_null_r4.json", + "sha256": "661d04d76fcf36d116feb117154eac01e6569e377d4245c07653b28696e1227b", + "bytes": 52862, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_train_only_null_r4.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_later_role_20260721_r1/review_a5_official_ragged_topology_receipt.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_later_role_20260721_r1/review_a5_official_ragged_topology_receipt.json", + "sha256": "333ee6f34e69f89e26b810cc565415b89d6874615ea4ac57850371fb159c1b71", + "bytes": 1625, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_later_role_20260721_r1/review_a5_official_ragged_topology_receipt.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null.json", + "sha256": "a752ffd350fbe38aa0e6f6b42b76137f4f72d76fa9a7f5d3609bc47c65c552de", + "bytes": 2970, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null.json" + }, + { + "output": "bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null_receipt.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null_receipt.json", + "sha256": "dace4cb5df71912f5aa7531bb0ce87db3b63d726b2a12aa41facabf9d54b5c35", + "bytes": 902, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null_receipt.json" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_ms_acquisition_top30_v3_20260721_r3/review_a5_ms_acquisition_top30_runtime_v3.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_ms_acquisition_top30_v3_20260721_r3/review_a5_ms_acquisition_top30_runtime_v3.py", + "sha256": "68c0d543c5411276ef56c7072bded4ebda886f46b9fa4ebf3c95c1e54c1a08c6", + "bytes": 43711, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_ms_acquisition_top30_v3_20260721_r3/review_a5_ms_acquisition_top30_runtime_v3.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_r2.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_r2.py", + "sha256": "9f8f167148aa234df413e4c3d4e1846881781c8e5a19bd91b0b178b260a3a537", + "bytes": 102990, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_r2.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_r3.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_r3.py", + "sha256": "a76c24cb0a3b904ae95bfda21bdeb2ba96e36293368fe44a218429be2b10d43e", + "bytes": 41304, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_r3.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_direct_static_bridge_20260724_r1/review_a5_native_eight_direct_static_bridge_r1.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_direct_static_bridge_20260724_r1/review_a5_native_eight_direct_static_bridge_r1.py", + "sha256": "c71ba654568a24993bc1733b26b6863b11e5c198c53871a6183b485ab96540f0", + "bytes": 37921, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_direct_static_bridge_20260724_r1/review_a5_native_eight_direct_static_bridge_r1.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/review_a5_native_eight_finalization_runtime_r19.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/review_a5_native_eight_finalization_runtime_r19.py", + "sha256": "b6266553c075e9b85d221a6278d1ef3ab1d26fbce5de70dbcd4569db42653990", + "bytes": 21049, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/review_a5_native_eight_finalization_runtime_r19.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/run_review_a5_native_eight_training_r19.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/run_review_a5_native_eight_training_r19.py", + "sha256": "28d482fbae230c999d84e64a5abd6a1260ae26fb555c92b7d3176afb37cb260a", + "bytes": 6981, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/run_review_a5_native_eight_training_r19.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/review_a5_native_eight_finalization_runtime_r22.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/review_a5_native_eight_finalization_runtime_r22.py", + "sha256": "62f5355ef06cdc56f85214ac251bfa0ed4b19b41a19ab6acac51d644678f0a62", + "bytes": 12841, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/review_a5_native_eight_finalization_runtime_r22.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/run_review_a5_native_eight_training_r22.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/run_review_a5_native_eight_training_r22.py", + "sha256": "cb9a583091912c59f515f46074b04c90dfbe0ebf0fc28d241db980851b180335", + "bytes": 24070, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/run_review_a5_native_eight_training_r22.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r1/review_a5_native_eight_hotpath_r1.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r1/review_a5_native_eight_hotpath_r1.py", + "sha256": "3b9ada847b1ea3ecf1f12a6566b55fe1a0218b10aed9d5dabf40190cf0e70c4f", + "bytes": 33246, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r1/review_a5_native_eight_hotpath_r1.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/load_review_a5_native_eight_hotpath_r2.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/load_review_a5_native_eight_hotpath_r2.py", + "sha256": "101559df116319422762f0d7293fe55478b56defcbc1724661696163bb4fc9ae", + "bytes": 4127, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/load_review_a5_native_eight_hotpath_r2.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/review_a5_native_eight_hotpath_r2.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/review_a5_native_eight_hotpath_r2.py", + "sha256": "941f08e0db8bbf2fa61852d4fc218f592fdd63c12f2dafdb70ed3b18e6aedf98", + "bytes": 32821, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/review_a5_native_eight_hotpath_r2.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/load_review_a5_native_eight_hotpath_r3.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/load_review_a5_native_eight_hotpath_r3.py", + "sha256": "e99f4556a8e3b3721d1f9155738d2bf4e9765e43a0e9f7734259e33533ff4b30", + "bytes": 4013, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/load_review_a5_native_eight_hotpath_r3.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/review_a5_native_eight_hotpath_r3.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/review_a5_native_eight_hotpath_r3.py", + "sha256": "a81dd58c727a28b1a383477338e41922a2d746dac5cb33f351b4501ee8c5d0dd", + "bytes": 36449, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/review_a5_native_eight_hotpath_r3.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/load_review_a5_native_eight_hotpath_r4.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/load_review_a5_native_eight_hotpath_r4.py", + "sha256": "662d0766a8d68638480e9c44ca4070387481d43e1c666a20363025cf5b9bc958", + "bytes": 4013, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/load_review_a5_native_eight_hotpath_r4.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4.py", + "sha256": "600af4b6b0fab63b7780bb1e6be8233eb28bd0808ff390c3096369afec9c6649", + "bytes": 23798, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/load_review_a5_native_eight_hotpath_r5.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/load_review_a5_native_eight_hotpath_r5.py", + "sha256": "864a05e86c5ea91318b11373d2cdffcdd2ddd0777f141cb7ef0305f779a42ea6", + "bytes": 4013, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/load_review_a5_native_eight_hotpath_r5.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5.py", + "sha256": "ce4bad9195229341cab0890ed775b78126c17a23d82f2244757f120c12b346c8", + "bytes": 17677, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/load_review_a5_native_eight_hotpath_r6.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/load_review_a5_native_eight_hotpath_r6.py", + "sha256": "e2496170942db844e4ebe71d4c098b0d0cf99540d3465ed7e8e9a113469cf7d2", + "bytes": 4013, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/load_review_a5_native_eight_hotpath_r6.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6.py", + "sha256": "73b42e5131c64284c6f748ddf81b4d187dcb57f756c88c22240d189f2afc4cef", + "bytes": 17373, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/load_review_a5_native_eight_hotpath_r7.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/load_review_a5_native_eight_hotpath_r7.py", + "sha256": "fa9538829ff3ccfaf3d3f4346c7e735c70758661eb6bf3da5eece2e7e96e0fb6", + "bytes": 4013, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/load_review_a5_native_eight_hotpath_r7.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7.py", + "sha256": "c0cb618f7856daf24666dbec07ff51b86e3fbd52c073c58bd1b7151122714f47", + "bytes": 20454, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_submission_20260727_r15_preparation/review_a5_native_eight_submission_contract_r15.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_submission_20260727_r15_preparation/review_a5_native_eight_submission_contract_r15.py", + "sha256": "35c7a13da662f49bec07b63f590c8fb3d9cc4578633a179da42ff2650a2d7865", + "bytes": 29305, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_submission_20260727_r15_preparation/review_a5_native_eight_submission_contract_r15.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r1/review_a5_native_eight_training_runner_r1.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r1/review_a5_native_eight_training_runner_r1.py", + "sha256": "34785bf46f38579e48c3be6326f667a04521cb7d95c1f94c5200d84012b577bf", + "bytes": 97336, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r1/review_a5_native_eight_training_runner_r1.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/review_a5_native_eight_training_runner_r2.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/review_a5_native_eight_training_runner_r2.py", + "sha256": "7e93b13b3212b3c97e30144f3e393a86a13411d5e82fe19bd55d43bc58587e30", + "bytes": 74326, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/review_a5_native_eight_training_runner_r2.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/run_review_a5_native_eight_training_r2.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/run_review_a5_native_eight_training_r2.py", + "sha256": "195dbedfde65c061eb0fca5684270ff95a2bec16732683b1df7f40d91909cc7f", + "bytes": 3684, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/run_review_a5_native_eight_training_r2.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/review_a5_native_eight_training_runner_r3.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/review_a5_native_eight_training_runner_r3.py", + "sha256": "550588ca033718273de2e35825b8b9faffe4a5fb747ff8775fe17bb31050d9be", + "bytes": 25611, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/review_a5_native_eight_training_runner_r3.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/run_review_a5_native_eight_training_r3.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/run_review_a5_native_eight_training_r3.py", + "sha256": "bba69e736a44fbfa6b380089d50b945e93b45d5202fa265b5869ffd378149040", + "bytes": 3515, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/run_review_a5_native_eight_training_r3.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/review_a5_native_eight_training_runner_r8.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/review_a5_native_eight_training_runner_r8.py", + "sha256": "cbc9fc0179ecb1e7c449fa37a574f38ff3e912e13db5c984d87e05e3e347a0e1", + "bytes": 11844, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/review_a5_native_eight_training_runner_r8.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/run_review_a5_native_eight_training_r8.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/run_review_a5_native_eight_training_r8.py", + "sha256": "213afce295408dda11cf3ede98ebff191735a77e1db09b6252cae964caca39e2", + "bytes": 2705, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/run_review_a5_native_eight_training_r8.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/review_a5_native_eight_training_runner_r9.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/review_a5_native_eight_training_runner_r9.py", + "sha256": "4430560565a18da0e68700d60526d3dec15fabd79854111d1e85deb59e2381c8", + "bytes": 7443, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/review_a5_native_eight_training_runner_r9.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/run_review_a5_native_eight_training_r9.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/run_review_a5_native_eight_training_r9.py", + "sha256": "b2bae85c879d2d266ac1e39869c661625958e21c1c3b7299713c8a0b46827ec5", + "bytes": 2739, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/run_review_a5_native_eight_training_r9.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r11_certification_gate_candidate/review_a5_native_eight_certification_gate_r11.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r11_certification_gate_candidate/review_a5_native_eight_certification_gate_r11.py", + "sha256": "ce7626823c2980bc21b46a7eec6c1961a87dc5512525e553c49f2c7d57bf0430", + "bytes": 49854, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r11_certification_gate_candidate/review_a5_native_eight_certification_gate_r11.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_final_bindings_r12.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_final_bindings_r12.py", + "sha256": "a8cfaca102f7c3d0c7936d244ce1e9ed75099e70c0ca3a27943be7ce5587b6e0", + "bytes": 1139, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_final_bindings_r12.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_training_runner_r12.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_training_runner_r12.py", + "sha256": "47e973c7c4ed5bc6686e5d7795b00d3eea5c2da8c2a15fc534a7cc24c1744ee1", + "bytes": 23200, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_training_runner_r12.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/run_review_a5_native_eight_training_r12.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/run_review_a5_native_eight_training_r12.py", + "sha256": "66270933d1ff23ffe50b800267a4705c905fc423e8e2c929bf642cb5c6c37def", + "bytes": 2332, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/run_review_a5_native_eight_training_r12.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_direct_submit_controller_r13.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_direct_submit_controller_r13.py", + "sha256": "2feb9a90db66ca277fb9e23d079ce8b089a31060e5670961a13b0e5146ed39a8", + "bytes": 31174, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_direct_submit_controller_r13.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_final_bindings_r13.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_final_bindings_r13.py", + "sha256": "c30b6b03dae852a4b10c6d01596e977d8a071e738dc3074f1ca0592a50778dd3", + "bytes": 2946, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_final_bindings_r13.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_training_runner_r13.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_training_runner_r13.py", + "sha256": "17cf8ab216b354ec1de7574ebebd7bfe02b5935da605b4131e45c7aa13982d5b", + "bytes": 60696, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_training_runner_r13.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/run_review_a5_native_eight_training_r13.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/run_review_a5_native_eight_training_r13.py", + "sha256": "a2a0a0d9056c7cd360913a792ff5e3390a190b692d7663c3a6d48a3ee0f180d5", + "bytes": 2544, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/run_review_a5_native_eight_training_r13.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/__init__.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/__init__.py", + "sha256": "737b1caa9086f8ac1556c05625d1b5391b8cae58e9d98a7755fa72f44e94c7ba", + "bytes": 74, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/__init__.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_final_bindings_r14.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_final_bindings_r14.py", + "sha256": "bd6c704239e2bb4898dddda5c86274f41cd5b304b35d584ddfae3884e8bc8503", + "bytes": 5726, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_final_bindings_r14.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_strict_successor_r14.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_strict_successor_r14.py", + "sha256": "eda983e1b0c29357eb1b6e2f555f402a83b7176fb857488e9be5f5faed490b2d", + "bytes": 46942, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_strict_successor_r14.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/__init__.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/__init__.py", + "sha256": "7ef11d9a891d32b0c1bb3ee24016700acd14251ac49448f004a701cdea79ca53", + "bytes": 72, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/__init__.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_bindings_r15.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_bindings_r15.py", + "sha256": "1f21427486260e8b56795f7137f0f7322ae768d80645db6636414e5961aa3224", + "bytes": 2041, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_bindings_r15.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_gate_r15.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_gate_r15.py", + "sha256": "1556d6e2643edfc80b6b6782164ab47560e259ff55791c50dcffdd9b9afc001f", + "bytes": 41461, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_gate_r15.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_final_bindings_r16.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_final_bindings_r16.py", + "sha256": "1287db8472580db69e38d60be8c13beeddb4fdde7958a5b302d072e1226f4de3", + "bytes": 2770, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_final_bindings_r16.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_release_successor_r16.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_release_successor_r16.py", + "sha256": "689db8aaf51d15288f01b196c5ad2fe8ee3ca8aab3ff525695abaa9f25060ff6", + "bytes": 30917, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_release_successor_r16.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_balanced_planner_r4.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_balanced_planner_r4.py", + "sha256": "2c985edfe747bae712c41689da8be2abb5096bd97a8771691b3676d3a8af49fd", + "bytes": 25544, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_balanced_planner_r4.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_composite_r4.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_composite_r4.py", + "sha256": "52a311636e7631b97711aab63aec28e2ada47a446d1aecc1a47921d584f69f9d", + "bytes": 70358, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_composite_r4.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_balanced_planner_r5.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_balanced_planner_r5.py", + "sha256": "1b9b05c812603db7b216aa989214a3c3715f80032b3a8b82577ae2b9e48f048d", + "bytes": 16021, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_balanced_planner_r5.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_composite_r5.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_composite_r5.py", + "sha256": "24c35257fc61e1c9c77630d2b0075775a7f46b6500ecb5f175ef8f42bd214e0e", + "bytes": 58459, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_composite_r5.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_executor_r5.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_executor_r5.py", + "sha256": "a482a70a2edcb7c9936b091a86a0f7d98714b5bab09a0bdc80cd927f015a46f2", + "bytes": 74648, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_executor_r5.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_r4_lineage_receipt_r1.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_r4_lineage_receipt_r1.json", + "sha256": "b5fbdff168de23676208484ccccc3cc32f613ea411d193e6d8930456e8edeeef", + "bytes": 1716, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_r4_lineage_receipt_r1.json" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r6/review_a5_native_eight_executor_r6.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r6/review_a5_native_eight_executor_r6.py", + "sha256": "e47e6e9810db0e8ec9d37ce5533f762e287b162f811bfadc347666f5ad78db82", + "bytes": 89792, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r6/review_a5_native_eight_executor_r6.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r7/review_a5_native_eight_executor_r7.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r7/review_a5_native_eight_executor_r7.py", + "sha256": "e068a3c233fc3fd94fe3b8618edb9bd8c87fd81b97dff2666206fb870f0f898a", + "bytes": 130802, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r7/review_a5_native_eight_executor_r7.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r8/review_a5_native_eight_executor_r8.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r8/review_a5_native_eight_executor_r8.py", + "sha256": "60ab4de6bc1ee151e9da2c312c41079638e11469502e8136ede51be032eac630", + "bytes": 52743, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r8/review_a5_native_eight_executor_r8.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_static_failure_release_chain_20260727_r1_preparation/review_a5_native_static_failure_release_gate_r1.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_failure_release_chain_20260727_r1_preparation/review_a5_native_static_failure_release_gate_r1.py", + "sha256": "ee97bf4e68ddfbf280b7e0f01ce3409c4d4692feafbc9382613bbc5698913fa7", + "bytes": 28699, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_static_failure_release_chain_20260727_r1_preparation/review_a5_native_static_failure_release_gate_r1.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_epoch_boundary_resume_20260725_r1/run_review_a5_static_v2_epoch_boundary_resume_r1_scavenger_v100.sbatch", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_epoch_boundary_resume_20260725_r1/run_review_a5_static_v2_epoch_boundary_resume_r1_scavenger_v100.sbatch", + "sha256": "f420c84258cdf4247fdd766a9e8470bad55bd1f845ebd6640ec70b97b3953e6e", + "bytes": 3389, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_epoch_boundary_resume_20260725_r1/run_review_a5_static_v2_epoch_boundary_resume_r1_scavenger_v100.sbatch" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_ops_20260721_r2/review_a5_static_v2_checkpoint_store_r2.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_ops_20260721_r2/review_a5_static_v2_checkpoint_store_r2.py", + "sha256": "f2e558c52bf166d6e7f42ecdd92995f2b70c8a174eab8d6814875399fb69732e", + "bytes": 52873, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_ops_20260721_r2/review_a5_static_v2_checkpoint_store_r2.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/review_a5_static_v2_postfit_direct_publication_r2.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/review_a5_static_v2_postfit_direct_publication_r2.py", + "sha256": "8e57c17fd43f3894f94f980cf70a0d6d7f183cf04c26780c3fe30c1932bb7abb", + "bytes": 40020, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/review_a5_static_v2_postfit_direct_publication_r2.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/run_review_a5_static_v2_postfit_direct_publication_r2.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/run_review_a5_static_v2_postfit_direct_publication_r2.py", + "sha256": "c46a7d4644899a5e7551e2dd5eb30666e01e0f36e2f65a2cd821b8c5565258dc", + "bytes": 2601, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/run_review_a5_static_v2_postfit_direct_publication_r2.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r4_terminal_certification/review_a5_static_v2_terminal_certification_r4.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r4_terminal_certification/review_a5_static_v2_terminal_certification_r4.py", + "sha256": "3b9632e840265e1a5c1d226f3fe7fb8cd4c448f810f3826c59e19c25132dd04f", + "bytes": 64464, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r4_terminal_certification/review_a5_static_v2_terminal_certification_r4.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/__init__.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/__init__.py", + "sha256": "9429deca8cfb6cb25ef6f79a5b0ee0b91d47657e7f21f61627afd655d08fe7d3", + "bytes": 590, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/__init__.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/review_a5_static_v2_terminal_certification_r5.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/review_a5_static_v2_terminal_certification_r5.py", + "sha256": "04d724ee84f67565e2f0229db99006c8f64d2492564643f6e60af25930cf12a1", + "bytes": 101721, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/review_a5_static_v2_terminal_certification_r5.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/__init__.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/__init__.py", + "sha256": "bbdce8deb776917ade3704eb5d08b064917f52c76f3f39ee345b3b2938992add", + "bytes": 590, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/__init__.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_production_module_roster_r6.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_production_module_roster_r6.json", + "sha256": "195d41bba2282fdfde77a88f8b0a70eb64b0207d1a9efd42ddaeb873f8ccaeed", + "bytes": 17548, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_production_module_roster_r6.json" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_terminal_certification_r6.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_terminal_certification_r6.py", + "sha256": "bdb0fa37804531f6446cee9411c9730fde792eb9674054e56b883156f36da4cb", + "bytes": 133704, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_terminal_certification_r6.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/a5_wa345_continuation_manifest_20260819_r1.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/a5_wa345_continuation_manifest_20260819_r1.json", + "sha256": "30b64143eb15688fa1e1c8aeaf3b84eb08a2a65730fa1c996c9ef6f12679d80f", + "bytes": 12190, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/a5_wa345_continuation_manifest_20260819_r1.json" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/submit_a5_wa345_continuation_20260819_r1.sbatch", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/submit_a5_wa345_continuation_20260819_r1.sbatch", + "sha256": "f517b5c99d93103d1212b2153c26be1cc58267c7b2d9bfa747f6d512f0fdadf2", + "bytes": 23262, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/submit_a5_wa345_continuation_20260819_r1.sbatch" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/a5_wa345_manifest_20260817_r1.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/a5_wa345_manifest_20260817_r1.json", + "sha256": "eeebc9c7e2cfc701f3ad47e62696ae2247c8caec93d8b034d5f573b701eab2a1", + "bytes": 9199, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/a5_wa345_manifest_20260817_r1.json" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/run_a5_wa345_shim_20260817_r1.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/run_a5_wa345_shim_20260817_r1.py", + "sha256": "5159414381025cf3e2d5e742422c84c292481168af42801c773df4ba12797fb4", + "bytes": 53542, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/run_a5_wa345_shim_20260817_r1.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/submit_a5_wa345_20260817_r1.sbatch", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/submit_a5_wa345_20260817_r1.sbatch", + "sha256": "a090f111df7cc0db09e61ea0a8067882b7cd9bf21d91c53da4115549560b08e7", + "bytes": 19132, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/submit_a5_wa345_20260817_r1.sbatch" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/review_md_temporal_20x6_a1111_wa2_manifest_20260811_r1.json", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/review_md_temporal_20x6_a1111_wa2_manifest_20260811_r1.json", + "sha256": "600144a7f5b893958d629083a3a9266eec980765218408d2d51db72b73c1e506", + "bytes": 6147, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/review_md_temporal_20x6_a1111_wa2_manifest_20260811_r1.json" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/run_review_md_temporal_20x6_a1111_wa2_s424344_20260811_r1.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/run_review_md_temporal_20x6_a1111_wa2_s424344_20260811_r1.py", + "sha256": "dd74253863f39150af4ddc7e8d48c0a366e1f327c30aa50e0748078330b97b85", + "bytes": 39694, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/run_review_md_temporal_20x6_a1111_wa2_s424344_20260811_r1.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/submit_review_md_temporal_20x6_a1111_wa2_20260811_r1.sbatch", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/submit_review_md_temporal_20x6_a1111_wa2_20260811_r1.sbatch", + "sha256": "6ffd2f97706bdf0001b90ca2f8af7ec565b298cc8585444ba6027194d0e378d2", + "bytes": 4774, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/submit_review_md_temporal_20x6_a1111_wa2_20260811_r1.sbatch" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/__init__.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/__init__.py", + "sha256": "aa37d1e86bd3a58262f9824ba80993c0f0f280db4d0f4d704ca469dc12ba3df7", + "bytes": 55, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/__init__.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/review_md_temporal_20x6_core_r3.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/review_md_temporal_20x6_core_r3.py", + "sha256": "3e96d8092239c2c21f217ad5bae4ee7e07dbe0f7630b213bad468d6b08d3b1c1", + "bytes": 48643, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/review_md_temporal_20x6_core_r3.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/run_review_md_temporal_20x6_training_r3.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/run_review_md_temporal_20x6_training_r3.py", + "sha256": "1e446e7e89a39ef01132b9f2a4deb817161f7b376a0fa04c2b11529004f53e8a", + "bytes": 50267, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/run_review_md_temporal_20x6_training_r3.py" + }, + { + "output": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260805_r4_dev_memory/run_review_md_temporal_20x6_training_r4.py", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260805_r4_dev_memory/run_review_md_temporal_20x6_training_r4.py", + "sha256": "a6a180ae103eaaf68458b298cd4180920a0e88c1724a6ba9a94ef94559e75c5f", + "bytes": 5454, + "status": "unchanged_copy", + "original_package_path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260805_r4_dev_memory/run_review_md_temporal_20x6_training_r4.py" + }, + { + "output": "affinose/a1111_encoder_adapter.py", + "source": "submit_comm/06_code/affinose/a1111_encoder_adapter.py", + "sha256": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "bytes": 6455, + "status": "unchanged_copy", + "original_package_path": "affinose/a1111_encoder_adapter.py" + }, + { + "output": "affinose/a5_tokenizer_shim.py", + "source": "submit_comm/06_code/affinose/a5_tokenizer_shim.py", + "sha256": "c4bbe5c1a0286b319f0b71c87669b4f9cfe781051019fb02a98b5d7e208b8b2b", + "bytes": 2798, + "status": "unchanged_copy", + "original_package_path": "affinose/a5_tokenizer_shim.py" + }, + { + "output": "affinose/bertint_v8.py", + "source": "submit_comm/06_code/affinose/bertint_v8.py", + "sha256": "7fa8d6fe95db3ccecefdd396931d6354442800cd5284cabf519e3425cc388883", + "bytes": 38450, + "status": "unchanged_copy", + "original_package_path": "affinose/bertint_v8.py" + }, + { + "output": "affinose/dataset_v8.py", + "source": "submit_comm/06_code/affinose/dataset_v8.py", + "sha256": "b6c2483e2975c4c7d7dfde6b2979c8e1e862564279c7ebba4e65b504776b43df", + "bytes": 15481, + "status": "unchanged_copy", + "original_package_path": "affinose/dataset_v8.py" + }, + { + "output": "affinose/training_v8.py", + "source": "submit_comm/06_code/affinose/training_v8.py", + "sha256": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "bytes": 42211, + "status": "unchanged_copy", + "original_package_path": "affinose/training_v8.py" + }, + { + "output": "examples/smoke_affinose.py", + "source": "submit_comm/06_code/examples/smoke_affinose.py", + "sha256": "903d14d8bafc9ae2aa968a74ad4b9d31396c598624fe05e2acb1814cb60bd60e", + "bytes": 5963, + "status": "unchanged_copy", + "original_package_path": "examples/smoke_affinose.py" + }, + { + "output": "examples/smoke_models.py", + "source": "submit_comm/06_code/examples/smoke_models.py", + "sha256": "ff95ff2a7707940b849a44259cdf356f66dd5b0351faf4e400feac6666afd9af", + "bytes": 3242, + "status": "unchanged_copy", + "original_package_path": "examples/smoke_models.py" + }, + { + "output": "score_predictions.py", + "source": "submit_comm/06_code/score_predictions.py", + "sha256": "428d6c855cd9a6a1988581f9d71bd85a130ceb7b803e6190b3590f5e40ef426c", + "bytes": 1744, + "status": "unchanged_copy", + "original_package_path": "score_predictions.py" + }, + { + "output": "provenance/WA3_final_receipt.json", + "source": "submit_comm/06_code/provenance/WA3_final_receipt.json", + "sha256": "b8b05510e97f6b94ca5e0d1465eba034724d7ddcc405aa405db09c4c29fc768b", + "bytes": 86511, + "status": "unchanged_copy", + "original_package_path": "provenance/WA3_final_receipt.json" + }, + { + "output": "provenance/WA3_checkpoint_index.json", + "source": "submit_comm/06_code/provenance/WA3_checkpoint_index.json", + "sha256": "a4b66d2ed429ad6516646256a84173082b2fca6b779baa6e4ff93586a81a5c2b", + "bytes": 1044, + "status": "unchanged_copy", + "original_package_path": "provenance/WA3_checkpoint_index.json" + }, + { + "output": "provenance/wa3_config.json", + "source": "submit_comm/06_code/provenance/wa3_config.json", + "sha256": "be8f4ae30ae2fbd8f91de0e5db98de3044213e24587717775c31df37e2272dbb", + "bytes": 1321, + "status": "unchanged_copy", + "original_package_path": "provenance/wa3_config.json" + }, + { + "output": "provenance/affinose_recipe.json", + "source": "submit_comm/06_code/provenance/affinose_recipe.json", + "sha256": "ebf5e35b60640944bf3d03955f10da2c40cd5075a85bf0e3a4c6210f97ed85a6", + "bytes": 26612, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_recipe.json" + }, + { + "output": "provenance/artifact_locations.tsv", + "source": "submit_comm/06_code/provenance/artifact_locations.tsv", + "sha256": "9c14d2981a11bef92ef230e9848f9876d941b290f2c70848e739a2795bb6feea", + "bytes": 5715, + "status": "unchanged_copy", + "original_package_path": "provenance/artifact_locations.tsv" + }, + { + "output": "provenance/candidate_portability.patch", + "source": "submit_comm/06_code/provenance/candidate_portability.patch", + "sha256": "2ce6f4a60fdb0bc87d69e270bd724fbccbfae6239579f3c17c0c4d8de05b3d94", + "bytes": 1899, + "status": "unchanged_copy", + "original_package_path": "provenance/candidate_portability.patch" + }, + { + "output": "iar_completion/readout.py", + "source": "submit_comm/06_code/iar_completion/readout.py", + "sha256": "42464d76c743a302bae79ced6b09af9657444c6f977535b5de49dcf59a5a8a90", + "bytes": 5515, + "status": "unchanged_copy", + "original_package_path": "iar_completion/readout.py" + }, + { + "output": "iar_completion/model_metadata.json", + "source": "submit_comm/06_code/iar_completion/model_metadata.json", + "sha256": "bbf016ce2f1a7dc82940be28397cbe8083da7ad0f5f525b1cf7345fd42a5758d", + "bytes": 3132, + "status": "unchanged_copy", + "original_package_path": "iar_completion/model_metadata.json" + }, + { + "output": "iar_completion/assets/linkage_readout.pt", + "source": "submit_comm/06_code/iar_completion/assets/linkage_readout.pt", + "sha256": "a03990a02a1737de05a7fa1739164e84fa6a0a4170ebaa65317a9f3c2f16c0b0", + "bytes": 663845, + "status": "unchanged_copy", + "original_package_path": "iar_completion/assets/linkage_readout.pt" + }, + { + "output": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "bytes": 138150, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json" + }, + { + "output": "iar_completion/originals/wa3_final_iar_readout_all.py", + "source": "submit_comm/06_code/iar_completion/originals/wa3_final_iar_readout_all.py", + "sha256": "72f8583bf32799ba29c09829d138900c0cbb589f73bd278f389da6fa8a786730", + "bytes": 82622, + "status": "unchanged_copy", + "original_package_path": "iar_completion/originals/wa3_final_iar_readout_all.py" + }, + { + "output": "executed/downstream/review_a5_native_checkpoint.py", + "source": "multimodal/runtime/a5_downstream_native_taxonomy_multilabel_s42_20260802_r3_cuda_device_retry/review_a5_native_checkpoint.py", + "sha256": "89b65f9186f2080eab214f1b7389854cd8477124cdc729a428624312fb7a1453", + "bytes": 18793, + "status": "unchanged_copy" + }, + { + "output": "executed/downstream/run_review_native_md_on_terminal4_s42.py", + "source": "multimodal/runtime/a5_wa_downstream_20260820_r1_preparation/evidence/frozen/run_review_native_md_on_terminal4_s42.py", + "sha256": "1c958427bca7991b8ec091b6f0c8d209fc1ddfaf1aa9e1f96ad22ed5c60b839d", + "bytes": 43666, + "status": "unchanged_copy" + }, + { + "output": "LICENSE", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/huggingface_release/bertose-glycan-encoder/LICENSE", + "sha256": "a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9", + "bytes": 10173, + "status": "unchanged_copy" + }, + { + "output": "provenance/submission_README.md", + "source": "submit_comm/06_code/README.md", + "sha256": "6fc928f84838ac82af228d744fadb8be670d631afd5ca84ff84d0847b140d8fd", + "bytes": 13654, + "status": "unchanged_copy", + "original_package_path": "README.md" + }, + { + "output": "provenance/submission_SHA256SUMS", + "source": "submit_comm/06_code/SHA256SUMS", + "sha256": "cf0e33d454260a8fa949a9c5fea60bac6291b84c3db573e48fb1735f3a2a2772", + "bytes": 76063, + "status": "unchanged_copy", + "original_package_path": "SHA256SUMS" + }, + { + "output": "benchmark_exclusion/MANIFEST_SHA256.tsv", + "source": "submit_comm/06_code/benchmark_exclusion/MANIFEST_SHA256.tsv", + "sha256": "8452e3ac521af1d3ea24bb5a99e02a930d913fc96394e5610fe8b86e19ea89ec", + "bytes": 1248, + "status": "unchanged_copy", + "original_package_path": "benchmark_exclusion/MANIFEST_SHA256.tsv" + }, + { + "output": "benchmark_exclusion/README.md", + "source": "submit_comm/06_code/benchmark_exclusion/README.md", + "sha256": "96567c3b9c3e254bceb6bd82e43c1f252b987ced58dad41d3b4406b9f58a76ec", + "bytes": 7784, + "status": "unchanged_copy", + "original_package_path": "benchmark_exclusion/README.md" + }, + { + "output": "benchmark_exclusion/SHA256SUMS", + "source": "submit_comm/06_code/benchmark_exclusion/SHA256SUMS", + "sha256": "3d37d993b1cd4135ca9fe90feca856b73907d725516ea652425ca24060769698", + "bytes": 1332, + "status": "unchanged_copy", + "original_package_path": "benchmark_exclusion/SHA256SUMS" + }, + { + "output": "benchmark_exclusion/code_inventory.tsv", + "source": "submit_comm/06_code/benchmark_exclusion/code_inventory.tsv", + "sha256": "e2e0dfa7d133362146de10ba3dd774e9a3e186088f976189b0aae9d26b442bc4", + "bytes": 1965, + "status": "unchanged_copy", + "original_package_path": "benchmark_exclusion/code_inventory.tsv" + }, + { + "output": "benchmark_exclusion/required_successor_inputs.json", + "source": "submit_comm/06_code/benchmark_exclusion/required_successor_inputs.json", + "sha256": "050c0af96f133ded3139baf6dfea594f91c6659f411dc25fc06d5847951b2f0c", + "bytes": 14147, + "status": "unchanged_copy", + "original_package_path": "benchmark_exclusion/required_successor_inputs.json" + }, + { + "output": "benchmark_exclusion/source_verification.json", + "source": "submit_comm/06_code/benchmark_exclusion/source_verification.json", + "sha256": "0507537ca8ee05b249f9ab3f3fa09de94b7acc633b91235f2778ae07659096bd", + "bytes": 8601, + "status": "unchanged_copy", + "original_package_path": "benchmark_exclusion/source_verification.json" + }, + { + "output": "benchmark_exclusion/writing/review/glytoucan/scripts/build_connection_level_support_audit.py", + "source": "submit_comm/06_code/benchmark_exclusion/writing/review/glytoucan/scripts/build_connection_level_support_audit.py", + "sha256": "3d598a249db90c928f8a317923ba5d37eebbc1f63383a2c39e0541f20c31ccac", + "bytes": 21842, + "status": "unchanged_copy", + "original_package_path": "benchmark_exclusion/writing/review/glytoucan/scripts/build_connection_level_support_audit.py" + }, + { + "output": "benchmark_exclusion/writing/review/multimodal/scripts/build_p1_direct_local_neighbor_audit_20260710.py", + "source": "submit_comm/06_code/benchmark_exclusion/writing/review/multimodal/scripts/build_p1_direct_local_neighbor_audit_20260710.py", + "sha256": "a9160769759c1df56238caad6a9f4ed6ec68477d44435ebbc81d64bbf541b64c", + "bytes": 36975, + "status": "unchanged_copy", + "original_package_path": "benchmark_exclusion/writing/review/multimodal/scripts/build_p1_direct_local_neighbor_audit_20260710.py" + }, + { + "output": "benchmark_exclusion/writing/review/multimodal/scripts/build_p1_non_iar_exact_graph_authority_20260711.py", + "source": "submit_comm/06_code/benchmark_exclusion/writing/review/multimodal/scripts/build_p1_non_iar_exact_graph_authority_20260711.py", + "sha256": "0f88f53e22d0c068a87a09508a9d286e4982eddcb4e2154e63b2ca25339ece69", + "bytes": 15043, + "status": "unchanged_copy", + "original_package_path": "benchmark_exclusion/writing/review/multimodal/scripts/build_p1_non_iar_exact_graph_authority_20260711.py" + }, + { + "output": "benchmark_exclusion/writing/review/multimodal/scripts/build_review_a5_non_iar_later_role_successor_20260720.py", + "source": "submit_comm/06_code/benchmark_exclusion/writing/review/multimodal/scripts/build_review_a5_non_iar_later_role_successor_20260720.py", + "sha256": "2c8821586df1caa53556b4cc14e6cd7507af4830aa8a149657571e0455eb6853", + "bytes": 38441, + "status": "unchanged_copy", + "original_package_path": "benchmark_exclusion/writing/review/multimodal/scripts/build_review_a5_non_iar_later_role_successor_20260720.py" + }, + { + "output": "benchmark_exclusion/writing/review/multimodal/scripts/repartition_a5_non_iar_80_20_20260712.py", + "source": "submit_comm/06_code/benchmark_exclusion/writing/review/multimodal/scripts/repartition_a5_non_iar_80_20_20260712.py", + "sha256": "cd86a0a0b228c32e51ec73490711e37da3e6c9fdf9e64e980b7222b5312484aa", + "bytes": 14084, + "status": "unchanged_copy", + "original_package_path": "benchmark_exclusion/writing/review/multimodal/scripts/repartition_a5_non_iar_80_20_20260712.py" + }, + { + "output": "benchmark_exclusion/writing/review/multimodal/tests/test_build_review_a5_non_iar_later_role_successor_20260720.py", + "source": "submit_comm/06_code/benchmark_exclusion/writing/review/multimodal/tests/test_build_review_a5_non_iar_later_role_successor_20260720.py", + "sha256": "966889118fa567729e1959750b1601018ba117aed0bfad3508005ba6b1896a08", + "bytes": 7856, + "status": "unchanged_copy", + "original_package_path": "benchmark_exclusion/writing/review/multimodal/tests/test_build_review_a5_non_iar_later_role_successor_20260720.py" + }, + { + "output": "bertosebind_new_runs/README.md", + "source": "submit_comm/06_code/bertosebind_new_runs/README.md", + "sha256": "b18eed4c3ad4f0cbdd700e41d6ff7af1f520d26386f76f4573e82332f3e1ea28", + "bytes": 5655, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/README.md" + }, + { + "output": "bertosebind_new_runs/audit_pretraining_exposure.py", + "source": "submit_comm/06_code/bertosebind_new_runs/audit_pretraining_exposure.py", + "sha256": "fc4ffac8de965da6250297ee24fa801be2619f1afcc29471204c7e5aead03012", + "bytes": 6235, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/audit_pretraining_exposure.py" + }, + { + "output": "bertosebind_new_runs/check_package.py", + "source": "submit_comm/06_code/bertosebind_new_runs/check_package.py", + "sha256": "2b8be4fcd7ebc98f49e9532415644f457930a1e7700d5c17fdc58a0abd0dd271", + "bytes": 655, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/check_package.py" + }, + { + "output": "bertosebind_new_runs/executed/local/audit_current_pretraining_exposure.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/local/audit_current_pretraining_exposure.py", + "sha256": "45a366b40a523671427950b83ac2c8a243c96f1bce8527b0af2337a375ff2b15", + "bytes": 6154, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/local/audit_current_pretraining_exposure.py" + }, + { + "output": "bertosebind_new_runs/executed/local/collect_current_glycan_sets.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/local/collect_current_glycan_sets.py", + "sha256": "bdb19bf323c94eacc1943b4345b5b2485dfa50b7ac00a755e8a1dde2f8a4ed74", + "bytes": 1923, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/local/collect_current_glycan_sets.py" + }, + { + "output": "bertosebind_new_runs/executed/local/dc_anatomy.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/local/dc_anatomy.py", + "sha256": "9c9b90f077709c105dd16b706ebcd434dd793177c274eca17b10bc3241f0138b", + "bytes": 17876, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/local/dc_anatomy.py" + }, + { + "output": "bertosebind_new_runs/executed/remote/aff_attribution_motif.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/aff_attribution_motif.py", + "sha256": "33d41f680cf7a5ae3b98fef4d1ef604f6e12a6a856ec6e90df8bb5a88f336bbe", + "bytes": 14866, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/aff_attribution_motif.py" + }, + { + "output": "bertosebind_new_runs/executed/remote/aff_attribution_motif.sbatch", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/aff_attribution_motif.sbatch", + "sha256": "2b89020895eebac8c99366036eebb07dd43c687fe47274dcd1de47d1017548ff", + "bytes": 1616, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/aff_attribution_motif.sbatch" + }, + { + "output": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_A_glycan_gifflarESM.json", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/affinose_gifflar_macro_A_glycan_gifflarESM.json", + "sha256": "d7f21b8037172e6d42fb65c8169d37b19c385d68dc9cbebadbafe9e930843074", + "bytes": 903, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_A_glycan_gifflarESM.json" + }, + { + "output": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_A_glycan_sweetnetESM.json", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/affinose_gifflar_macro_A_glycan_sweetnetESM.json", + "sha256": "eca94bfbe82bfba95c2086c9c4ffe14091d442017356394ec2e75173cb66810f", + "bytes": 906, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_A_glycan_sweetnetESM.json" + }, + { + "output": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_B_protein_gifflarESM.json", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/affinose_gifflar_macro_B_protein_gifflarESM.json", + "sha256": "529296c1388651b4451f35829d0caa63e692a96fc88b74ee9b8dc8c1d09136da", + "bytes": 905, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_B_protein_gifflarESM.json" + }, + { + "output": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_B_protein_sweetnetESM.json", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/affinose_gifflar_macro_B_protein_sweetnetESM.json", + "sha256": "6f0098947aa4c962f991d1e17acc17707d7cb2eb5e9d6338182d6cfa65d28a2d", + "bytes": 908, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_B_protein_sweetnetESM.json" + }, + { + "output": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_C_doubly_gifflarESM.json", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/affinose_gifflar_macro_C_doubly_gifflarESM.json", + "sha256": "bf720edacbad09cd04c42df7cf347dd1fe9846a22f307f7be1c38f06e89faa44", + "bytes": 900, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_C_doubly_gifflarESM.json" + }, + { + "output": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_C_doubly_sweetnetESM.json", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/affinose_gifflar_macro_C_doubly_sweetnetESM.json", + "sha256": "1884d744232b56c5edc76e655cf9bd117e43d8d749c98300b528ea6a5e55b75d", + "bytes": 900, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_C_doubly_sweetnetESM.json" + }, + { + "output": "bertosebind_new_runs/executed/remote/affinose_glycan_cold_contamination.json", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/affinose_glycan_cold_contamination.json", + "sha256": "0d4458462cd10dae219a9f15eb6dc8129d200a09891bd0b6bf0297cd85c4dae2", + "bytes": 1818, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/affinose_glycan_cold_contamination.json" + }, + { + "output": "bertosebind_new_runs/executed/remote/b4_baselines_perrow.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/b4_baselines_perrow.py", + "sha256": "61a5ef32482365e37e58bd4aee49ff5dabc2fafa04f4e063f3a0be7c294c84c7", + "bytes": 7176, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/b4_baselines_perrow.py" + }, + { + "output": "bertosebind_new_runs/executed/remote/b4_gif_repeat.sbatch", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/b4_gif_repeat.sbatch", + "sha256": "a381978d36492bb21cdb7c2a3007c51414b7630dd88016c7a74eb19c48080925", + "bytes": 1648, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/b4_gif_repeat.sbatch" + }, + { + "output": "bertosebind_new_runs/executed/remote/b4_gif_repeat_compare.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/b4_gif_repeat_compare.py", + "sha256": "7fe6a80de1e7662a916e84b0a679c5579ab7fdcaaace70e1855f7d8face51ca3", + "bytes": 1977, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/b4_gif_repeat_compare.py" + }, + { + "output": "bertosebind_new_runs/executed/remote/b4_lo_perrow_ckpt.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/b4_lo_perrow_ckpt.py", + "sha256": "1d0433763d7ad49088e396b435a42f2a12141436db05592778a79938c88a953b", + "bytes": 7705, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/b4_lo_perrow_ckpt.py" + }, + { + "output": "bertosebind_new_runs/executed/remote/b4_step1_structure.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/b4_step1_structure.py", + "sha256": "c82d7fe71d178d78d52ee47d809cd12d0286c48b1375c0c7b8b80fa222858e61", + "bytes": 9872, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/b4_step1_structure.py" + }, + { + "output": "bertosebind_new_runs/executed/remote/b4_step3_bootstrap.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/b4_step3_bootstrap.py", + "sha256": "ab7560abe237da435464a984a4e23925e7ec48d802949f57ef9600b829e6b37d", + "bytes": 19304, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/b4_step3_bootstrap.py" + }, + { + "output": "bertosebind_new_runs/executed/remote/b4_step3_bootstrap_r2.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/b4_step3_bootstrap_r2.py", + "sha256": "6dbbbeb14bb860f6344a93bb65754f540dee8da4ceb3fdc526133c7133dd426c", + "bytes": 19828, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/b4_step3_bootstrap_r2.py" + }, + { + "output": "bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_gif_repeat_20260927.json", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_gif_repeat_20260927.json", + "sha256": "50049bf5658f27700205e91d07f40512b8d297a7af11f51fcfbd514df9b59478", + "bytes": 796, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_gif_repeat_20260927.json" + }, + { + "output": "bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step1_structure_20260926.json", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step1_structure_20260926.json", + "sha256": "7f9edc64528d5b43d2c464f8f5d4db91c2a133f54364993c7798a2a606bd3427", + "bytes": 16214, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step1_structure_20260926.json" + }, + { + "output": "bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step3_bootstrap_20260926.json", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step3_bootstrap_20260926.json", + "sha256": "17ab513ec2d9dec6f1e8c9445dfd7500190f99f0e8758b21fbb435b026324f3b", + "bytes": 10624, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step3_bootstrap_20260926.json" + }, + { + "output": "bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step3_bootstrap_r2_20260927.json", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step3_bootstrap_r2_20260927.json", + "sha256": "6a87e6a8abc926f41ca13b1bb6c81cbf9ea1d04b06e8f39bfdaf847ce55ba235", + "bytes": 48191, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step3_bootstrap_r2_20260927.json" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan.yaml", + "sha256": "1ab7793ddb0daa247dc1f75b53356663d2c99e2e279a33207c9dd82f24288d17", + "bytes": 1122, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_gifflar.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_gifflar.yaml", + "sha256": "cda3d3e0df11dcbffff287c985039a4abe486a39bb97fe1554851992cbca127e", + "bytes": 1159, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_gifflar.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_sweetnet.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_sweetnet.yaml", + "sha256": "d11d6ca73935a664a9afe9330d07e51b7e95e89e044a1012065ef1780d820381", + "bytes": 1136, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_sweetnet.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_gifflar.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_gifflar.yaml", + "sha256": "dab891f502cb328f8313a9d2971e5d8134472b059fa776409f97f5f59e5d470b", + "bytes": 1159, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_gifflar.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_sweetnet.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_sweetnet.yaml", + "sha256": "875883d0ec38fca1a4995ea76c00db81ba84357fb2ed9a7c0921dbb6c7cf6492", + "bytes": 1136, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_sweetnet.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein.yaml", + "sha256": "529c3940cfce81ab3d135f25b722d7c302cd83e8540646f041a5d6ba36baebf3", + "bytes": 1126, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_gifflar.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_gifflar.yaml", + "sha256": "908379483dc5b2d0655aa7b0a13b33c8b70ba0379852ffc2d848e354ebd9945e", + "bytes": 1164, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_gifflar.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_sweetnet.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_sweetnet.yaml", + "sha256": "57cbf88ddf620ffbec7c4a8167a271ec38da0f94b1d3a4e9fe9769a9a19b8eea", + "bytes": 1141, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_sweetnet.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_gifflar.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_gifflar.yaml", + "sha256": "5e518f2db88c03663eb263a5e4a44e93a3bc43e51c4af6c626cd0da416a18d81", + "bytes": 1164, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_gifflar.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_sweetnet.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_sweetnet.yaml", + "sha256": "50c68416d3d4d72445e61811474179cb552e60d9f8a87f6cc0ed1da32d8b55e8", + "bytes": 1141, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_sweetnet.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly.yaml", + "sha256": "034ba8bdefc3410b987d7bc380bd24a469a01c912349fef1e35436df2a24c36e", + "bytes": 1122, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_gifflar.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_gifflar.yaml", + "sha256": "ed244565f2f81e6c554613718398af97683ad375eb4debb5a61d25855c444368", + "bytes": 1159, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_gifflar.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_sweetnet.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_sweetnet.yaml", + "sha256": "d8ba3e8d83871cdd92548bc8bab1493225cdcbd536c0004ff6b40b48e4e62e40", + "bytes": 1136, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_sweetnet.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_gifflar.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_gifflar.yaml", + "sha256": "2faa1986c043cf5d8b869d316afa0a043d071400c4f2018ba83551332a143f25", + "bytes": 1159, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_gifflar.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_sweetnet.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_sweetnet.yaml", + "sha256": "5fd2cdec3ee4d49f7d7441a037e0a2fbe428b1c0586de88beaf17a2ab67580f1", + "bytes": 1136, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_sweetnet.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_sweetonly.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_sweetonly.yaml", + "sha256": "e8fafb98627685ededa4392c5310e149a7dbbe907e37b43da7d20d228961b181", + "bytes": 1592, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_sweetonly.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/data/utils.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/data/utils.py", + "sha256": "ab257b93c23a522dcd99f37b2b802e67c8e3b4ba46b938db6229a6311a77cd39", + "bytes": 6186, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/data/utils.py" + }, + { + "output": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/train.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/train.py", + "sha256": "ab79451e7b51e27d985904a4445fc09b756d759413bb2ebaf8755d177bb3e8ad", + "bytes": 10058, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/train.py" + }, + { + "output": "bertosebind_new_runs/executed/remote/gif_seeds.sbatch", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gif_seeds.sbatch", + "sha256": "56bf1e5b11a386d0920b9f50da6288eff222ee1b7f25d772a8a666a2387b2a9d", + "bytes": 2790, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gif_seeds.sbatch" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_launch.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_launch.py", + "sha256": "241d3ca6045610a70ccad8307448b4d57e47810c945f127fef768357e56cdef2", + "bytes": 10473, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_launch.py" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "sha256": "e391584ec821c1e86916c6f8c14a6571a550034fd246e1dc0e7d7b3b6d4dbd7e", + "bytes": 572, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "sha256": "35d0ef06a1b9725233ed1e58c74101b7e6a555da48165ed57c9bd71bb5e77315", + "bytes": 175381, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "sha256": "0dae829566b87d0dd00613343bc5a0c49fb1107c0f4834327d8cca71b8932389", + "bytes": 550, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "sha256": "fd6f39dd3bef9326bc1f583bf07a1f9b8f02f846630a0c58c66c7bae70456d59", + "bytes": 175252, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "sha256": "fb07ac7cfcb63c4dd77c7493f4a518e11d268fd5e8d4cf6a849c31552e48369a", + "bytes": 572, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "sha256": "1d9e1b8c6fff12f8603ce8f7e58189da0ae8580e72d3c5bf5ff3893a4f9bce2f", + "bytes": 175505, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "sha256": "4902e83edaa137f55f5fe4f32f32068e94a3f4832630b284048c22b8a099dca6", + "bytes": 550, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "sha256": "b911e06e11968f9d8655ab69619f33a8878759e497eb44498432c341dc6fbdd1", + "bytes": 175410, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "sha256": "75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "sha256": "346d480fa44e31a5a486bfa99c136cc5ddfee27a197194b7fac289de9ba55665", + "bytes": 15294, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "sha256": "75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "sha256": "6a42d5cf20bf64a7b027660beca902ec84a80a1beb73e8aec1e4eb26fbb7c913", + "bytes": 1062, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/hparams.yaml", + "sha256": "75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/metrics.csv", + "sha256": "a71483c34b9d9cd904a6fe241f88af3e30bb3e100a15d666def5b06e4a5c0431", + "bytes": 158739, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "sha256": "2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16", + "bytes": 553, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "sha256": "faee86ceadc7e1dbe6835d44aef8c5d4f810a2cbe224e13202154b52dab92be3", + "bytes": 4108, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml", + "sha256": "2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16", + "bytes": 553, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/metrics.csv", + "sha256": "ed66bf0654eeaabf3b4f5f92e1295abc53a0155095160092ffb47826ff385d1a", + "bytes": 9534, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml", + "sha256": "2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16", + "bytes": 553, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/metrics.csv", + "sha256": "127b095cc67faf26378a247dc7345de56d331537dad375990ed319f684fbde27", + "bytes": 57261, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml", + "sha256": "2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16", + "bytes": 553, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/metrics.csv", + "sha256": "eee99377078178660db1f12c2700b0c46c9d8120db5f445a8d71d3f584cc9fcd", + "bytes": 99720, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "sha256": "0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "sha256": "47b51d96993782f3c9e6117722176941bd2c6d571200d160e28aa654c97c6356", + "bytes": 1418, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "sha256": "0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "sha256": "89d056126636c1fd1fa44d27ecfd57040a9bfc9eec2a76104da0ae07d01680b3", + "bytes": 1474, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/hparams.yaml", + "sha256": "0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/metrics.csv", + "sha256": "c066cdbf7827bdec2f87c15bf95a42e0a23b511bf03338482e4d2b20c149336b", + "bytes": 175499, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "sha256": "1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef", + "bytes": 553, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "sha256": "fe5d987579ac234e8f21bb70e642177e9eccb69493564b7c5895e6abd51f4dc2", + "bytes": 4381, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml", + "sha256": "1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef", + "bytes": 553, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv", + "sha256": "0ecfee6421a63cee0f0537fdb311e44b87227421f637816a0a3ccfd132763d16", + "bytes": 87583, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml", + "sha256": "1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef", + "bytes": 553, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/metrics.csv", + "sha256": "0d313e8557cb13577b34c8e94e0f2c887c11cfa6da6ca36ab2aa5f9d1cc10f22", + "bytes": 41685, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml", + "sha256": "1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef", + "bytes": 553, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/metrics.csv", + "sha256": "5ef2b9552f452e4218b9728c0ed57f7a14ec5068d065c7223e2c6e566e5dafd2", + "bytes": 29032, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "sha256": "781862ff668231f3501e892c7be567e4e3a16709f6b433e97edeadd60ec1e8bf", + "bytes": 572, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "sha256": "e92266239d6445a0de886e5081e433632c6719719f6d536ad31e98045160fcea", + "bytes": 12411, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "sha256": "781862ff668231f3501e892c7be567e4e3a16709f6b433e97edeadd60ec1e8bf", + "bytes": 572, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "sha256": "929a3396f429527836db8368e7908024bf69766e0567636b1f24df8c1c06ea42", + "bytes": 275117, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "sha256": "f7852d23330d3b55e46eec193b3fe411306ea59349de6fa53273294d893dce1c", + "bytes": 550, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "sha256": "1e68c5af1f9c7fe0f1c85d9f3d49fa1104bf3d4c768014154316ee27b94a3cc3", + "bytes": 284563, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "sha256": "987afb2ba2360ff7f2a5a94943d064a7a3e5c902b53e445bc59bc291241e9d9a", + "bytes": 572, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "sha256": "e937607ecc6a7058664faab71728c58ef7a9bba8f6985082bca5d565aef6ec7e", + "bytes": 11292, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "sha256": "987afb2ba2360ff7f2a5a94943d064a7a3e5c902b53e445bc59bc291241e9d9a", + "bytes": 572, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "sha256": "eb420f0ea03bce2075ad4eac9237862ccbecb2c37c02d162d860516f4739b280", + "bytes": 274338, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "sha256": "22796804655424d5977b04b0b171d4da9fba18896eb4928842c4fad6bb7911dd", + "bytes": 550, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "sha256": "30f0105da3f2c579a8261a30ed6c3fcc8308cf9ebc2068f0e71168567e919922", + "bytes": 32118, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml", + "sha256": "22796804655424d5977b04b0b171d4da9fba18896eb4928842c4fad6bb7911dd", + "bytes": 550, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv", + "sha256": "168da3dcbf6ca795bb75ec67b9fc567788637c25875b766cc76b441825e6020c", + "bytes": 251993, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_score_macro.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_score_macro.py", + "sha256": "ef833104d5eecd273df7d9f7c39bae4a216b015bde15978ea716f1f864874de4", + "bytes": 14847, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_score_macro.py" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_score_macro_seeds.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_score_macro_seeds.py", + "sha256": "578635213e1a3eddd61438a6249f14e1a5d2487267286fc459eb77972808e225", + "bytes": 15417, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_score_macro_seeds.py" + }, + { + "output": "bertosebind_new_runs/executed/remote/gifflar_score_perrow.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_score_perrow.py", + "sha256": "f88bcf303685ea6a075747a12eafa7df041909b9b455d80ea98c2b536aed0de8", + "bytes": 16705, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/gifflar_score_perrow.py" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_attr_motif_16596807.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_attr_motif_16596807.out", + "sha256": "e65e21b8c9c9bd0291a034852f7ab47f826e1f51448d9ea8439b5eb23ed8eb98", + "bytes": 7511, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_attr_motif_16596807.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_b4_grep_16604967.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_b4_grep_16604967.out", + "sha256": "dadfe2c408938645b4138bb011719affdaebe7098060f66354df56da71d0a146", + "bytes": 4542, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_b4_grep_16604967.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_b4_s3_16604914.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_b4_s3_16604914.out", + "sha256": "79eb29df46c44942a2a6ac4313789ebc29e1672bec4512c4f965be5ebb739cc9", + "bytes": 609, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_b4_s3_16604914.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_b4_s3r2_16605803.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_b4_s3r2_16605803.out", + "sha256": "5d93f96fb6e537c9b802fd1b2d9fe25df41a19800f85ea860246274d2e897d71", + "bytes": 5103, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_b4_s3r2_16605803.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_0.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_0.err", + "sha256": "6c486b37a642549a8dcf924eabd52e2660d88a6ada53ba05aecb91937fd98626", + "bytes": 3771, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_0.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_0.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_0.out", + "sha256": "7832596dfd62832aadeed39c1acca59643f00ec8dbe812730b49bd1b2ca5150b", + "bytes": 3954, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_0.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_1.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_1.err", + "sha256": "bf5e3ff79c6b942dca7f35dcb85d0f32081b03875cb4640022fab29dff833b11", + "bytes": 3771, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_1.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_1.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_1.out", + "sha256": "134b045efbf1f560d0d41fa702ff53b6369fd38235fcef55ca8aaa4615698fed", + "bytes": 3956, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_1.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_10.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_10.err", + "sha256": "d911a9619dee68a9fc982bb3db253b8e72f12dc1c06d2bc434556211909b2719", + "bytes": 3777, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_10.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_10.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_10.out", + "sha256": "c079926adcc0d2bce5b591f870208dcd2bef2ea3029aee8950bf0ce44c1105ea", + "bytes": 3998, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_10.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_11.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_11.err", + "sha256": "5024c4160aeeccd212930b0d959ed0bab4dd7bf593b61b26decd78c7513aa638", + "bytes": 4168, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_11.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_11.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_11.out", + "sha256": "4d110e939761ff4d8c7938c754e182d2c09ede84c8360d10ce18a04280dafea6", + "bytes": 4229, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_11.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_2.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_2.err", + "sha256": "d9383fa7e0469a436e08d24f4f9af31c1a6fb9ebb5e115843b53e2b2ded612f1", + "bytes": 3777, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_2.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_2.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_2.out", + "sha256": "0bbeab27824eeffbbfe5cf04317d1795b1f8f02d4c5ad9b7dbc23e159a823940", + "bytes": 3992, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_2.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_3.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_3.err", + "sha256": "735f42f273046b3af0374283927429fa75a1b7a8b66d6b205a20e4e1cfd59eed", + "bytes": 3777, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_3.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_3.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_3.out", + "sha256": "dcdbc088e7945d0f63803ac95aed81f3f8c8d25c97dd760df269921a08bacae7", + "bytes": 3997, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_3.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_4.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_4.err", + "sha256": "98912251710582e65eaed2ba01ee184d957d177ec31e30969939b4ef0962a2bf", + "bytes": 4166, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_4.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_4.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_4.out", + "sha256": "b1febe3591a887bd63d7bb607536ce17bdab51eb9db9a8b8c3d9d5ff77aca1c2", + "bytes": 4182, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_4.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_5.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_5.err", + "sha256": "cbb38c7fc50100cfa44cdf9b64de3df9a002613c62d8489b9d3db301406712c7", + "bytes": 3775, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_5.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_5.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_5.out", + "sha256": "a1b8f17ba63285c54d42ad49ce61bf8356ac4dfe279de8b65f687304783bdf55", + "bytes": 3956, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_5.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_6.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_6.err", + "sha256": "8ec18cd103ee2f80b2bacc8660a53588ed6313dbdc2455fe87fb5cdac6d30ef1", + "bytes": 4178, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_6.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_6.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_6.out", + "sha256": "18050c22347d3a2900b0d15cd7f2b97c1f6028ff27e5e060fc33c8308851b358", + "bytes": 4226, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_6.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_7.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_7.err", + "sha256": "1a1baefb3f9d8bae9c38975310f96004470e75bed27b32b5273b31a9baca05f5", + "bytes": 4178, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_7.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_7.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_7.out", + "sha256": "8869a90d89089a6f26c7d88b1a389630930c35adff10016a015bc5bb331308b7", + "bytes": 4229, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_7.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_8.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_8.err", + "sha256": "01b633582a3ed13728f688fde16693926778896ba0952506cce66072f600f354", + "bytes": 4156, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_8.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_8.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_8.out", + "sha256": "8f468cb20588f01bc0794c43ea69d5fa78627f4e35ef7ecdb7ffbcd3266c78c3", + "bytes": 4184, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_8.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_9.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_9.err", + "sha256": "a3ea46d3bd9191b9bbd49627cbfdac0dee312230e5e1ed93016f98f8786b94ba", + "bytes": 4600, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_9.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_9.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_9.out", + "sha256": "313f8c5e3999dfa75ae508fd57d0d033a00b40cdf2b794cb4c32fb0a901b53bb", + "bytes": 4184, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_9.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_0.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_0.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_0.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_0.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_0.out", + "sha256": "19bb18892da4f9174e308bd42908a6e6d383001edd75c9ad482eef111b5bbb31", + "bytes": 2138, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_0.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_1.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_1.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_1.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_1.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_1.out", + "sha256": "152af1228aa39534d68470023321d4350bb2ea4b997bfd0bf38efbbeb92bad8b", + "bytes": 2137, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_1.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_10.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_10.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_10.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_10.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_10.out", + "sha256": "d842f047adc16782a9724406ecab07aa67fe3ad853f5d0c8bee73cb63d129782", + "bytes": 2141, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_10.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_11.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_11.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_11.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_11.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_11.out", + "sha256": "922dfe72fd457b50a6c468db266827346ab1173381458ad61e21ceb5a0c8736c", + "bytes": 2150, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_11.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_2.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_2.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_2.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_2.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_2.out", + "sha256": "2b008f6ae0f5554b9841582ded12a01558218558d8b7748899e94a0499d8caaf", + "bytes": 2152, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_2.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_3.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_3.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_3.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_3.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_3.out", + "sha256": "c1d325125ee0463b230e5ac347c45a117ebc1a1686393d9d7bd63dd7c9a8a8d4", + "bytes": 2152, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_3.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_4.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_4.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_4.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_4.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_4.out", + "sha256": "939f30920d3d4a772d8736c945f6e39dc949cde64cc7b9b9e0116e7b45f4f895", + "bytes": 2170, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_4.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_5.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_5.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_5.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_5.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_5.out", + "sha256": "7817d9b5c087d542f2c0659726a66532091a24c9b05edb04196a756291dd5784", + "bytes": 2171, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_5.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_6.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_6.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_6.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_6.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_6.out", + "sha256": "4283aa1d699582d4766ca394cf2d9c4b046ce8247b5cef0f8250c424329138a2", + "bytes": 2197, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_6.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_7.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_7.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_7.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_7.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_7.out", + "sha256": "eb0257132cbd79d1a3a84bec543183b7bbdaceaaaefc85c988368d70d4146322", + "bytes": 2196, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_7.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_8.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_8.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_8.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_8.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_8.out", + "sha256": "523b5ac11259832265dab5c4e08d837f3fe7e4780048a5a4af1f513f6b8c3d4a", + "bytes": 2137, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_8.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_9.err", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_9.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_9.err" + }, + { + "output": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_9.out", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_9.out", + "sha256": "40ef3d8f12ba723cfe0e845ec72a960dbd32c8bc5baa3013f570e1c27a6431b6", + "bytes": 2137, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_9.out" + }, + { + "output": "bertosebind_new_runs/executed/remote/manifest.json", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/manifest.json", + "sha256": "06fbfcd2f820fc4621d35c16dcd6bbece93ea68b96d417d8b7bd2ce3ea104cdb", + "bytes": 74005, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/manifest.json" + }, + { + "output": "bertosebind_new_runs/executed/remote/train_lgi.py", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/train_lgi.py", + "sha256": "bf602abb05eeb3b0203766d9d1bc462579c181bc3418d762f6d02d5f36e8a230", + "bytes": 6375, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/executed/remote/train_lgi.py" + }, + { + "output": "bertosebind_new_runs/inputs/current_glycan_sets/doubly_cold_exposure_join.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/inputs/current_glycan_sets/doubly_cold_exposure_join.csv", + "sha256": "9d13452309d64f138705657334b74738eaf167c9faff835d024582e0e98c0af8", + "bytes": 32408, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/inputs/current_glycan_sets/doubly_cold_exposure_join.csv" + }, + { + "output": "bertosebind_new_runs/inputs/current_glycan_sets/doubly_cold_scored_glycans.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/inputs/current_glycan_sets/doubly_cold_scored_glycans.csv", + "sha256": "e5eebf2072779d7001dabd3981237025be37eee6f19a5b109b00ce4b3e776e09", + "bytes": 30484, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/inputs/current_glycan_sets/doubly_cold_scored_glycans.csv" + }, + { + "output": "bertosebind_new_runs/inputs/current_glycan_sets/glycan_cold_exposure_join.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/inputs/current_glycan_sets/glycan_cold_exposure_join.csv", + "sha256": "4d101cc92685c63ecca99cfad2c1bc46c73c77b1e565bd686bde14ee0d020886", + "bytes": 62994, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/inputs/current_glycan_sets/glycan_cold_exposure_join.csv" + }, + { + "output": "bertosebind_new_runs/inputs/current_glycan_sets/glycan_cold_scored_glycans.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/inputs/current_glycan_sets/glycan_cold_scored_glycans.csv", + "sha256": "0faab973a6ee5e5bf712983d51fad9f746e34edcbe5342574d45933bba62f48a", + "bytes": 59313, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/inputs/current_glycan_sets/glycan_cold_scored_glycans.csv" + }, + { + "output": "bertosebind_new_runs/inputs/current_glycan_sets/manifest.json", + "source": "submit_comm/06_code/bertosebind_new_runs/inputs/current_glycan_sets/manifest.json", + "sha256": "7655d9d080df7cb5dc748b7d9721037fbec67c04cf837e4724f0afba7e7a4d71", + "bytes": 2391, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/inputs/current_glycan_sets/manifest.json" + }, + { + "output": "bertosebind_new_runs/inputs/current_glycan_sets/protein_cold_exposure_join.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/inputs/current_glycan_sets/protein_cold_exposure_join.csv", + "sha256": "08ceef347f61012e0baab4daf1472122dc80335c6ea02fe084098c055a3e3e30", + "bytes": 112384, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/inputs/current_glycan_sets/protein_cold_exposure_join.csv" + }, + { + "output": "bertosebind_new_runs/inputs/current_glycan_sets/protein_cold_scored_glycans.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/inputs/current_glycan_sets/protein_cold_scored_glycans.csv", + "sha256": "f35d6088903e993f46adee07806e577456599d9814f4f43e40efdf3d8ddf6c46", + "bytes": 103485, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/inputs/current_glycan_sets/protein_cold_scored_glycans.csv" + }, + { + "output": "bertosebind_new_runs/package_manifest.json", + "source": "submit_comm/06_code/bertosebind_new_runs/package_manifest.json", + "sha256": "56d04a5a985d2bd96067e5c1a1e7acd67c5f76ae05c17831bc5949cb6bee26ab", + "bytes": 143946, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/package_manifest.json" + }, + { + "output": "bertosebind_new_runs/protocol/amendment_excerpts_20260925_26.md", + "source": "submit_comm/06_code/bertosebind_new_runs/protocol/amendment_excerpts_20260925_26.md", + "sha256": "924765b90a840277c5ed9dd6594a8ded2d5f7add5b138a9af1adf89bbb46cbcc", + "bytes": 13421, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/protocol/amendment_excerpts_20260925_26.md" + }, + { + "output": "bertosebind_new_runs/protocol/original_20260910.md", + "source": "submit_comm/06_code/bertosebind_new_runs/protocol/original_20260910.md", + "sha256": "04dea299feb3ac0840ff5db7471381ad3f1cf531653bf6aeb9825005236d2f0b", + "bytes": 10993, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/protocol/original_20260910.md" + }, + { + "output": "bertosebind_new_runs/provenance/bootstrap_anatomy_audit.json", + "source": "submit_comm/06_code/bertosebind_new_runs/provenance/bootstrap_anatomy_audit.json", + "sha256": "11014b5f0972c23b7225c4202f2254b444109b8105563d968e9c8f4534061ff1", + "bytes": 41282, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/provenance/bootstrap_anatomy_audit.json" + }, + { + "output": "bertosebind_new_runs/provenance/bootstrap_code_audit.json", + "source": "submit_comm/06_code/bertosebind_new_runs/provenance/bootstrap_code_audit.json", + "sha256": "d2812e72a7befc1bdb08465189d2fed035ae725142c1cf978a578e0add72e94d", + "bytes": 12403, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/provenance/bootstrap_code_audit.json" + }, + { + "output": "bertosebind_new_runs/provenance/bootstrap_exact_input_manifest.json", + "source": "submit_comm/06_code/bertosebind_new_runs/provenance/bootstrap_exact_input_manifest.json", + "sha256": "d6e36605873c587028c6dab2dde8093c6e4e33df53ebc27f1d6e3c6b4de14991", + "bytes": 24651, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/provenance/bootstrap_exact_input_manifest.json" + }, + { + "output": "bertosebind_new_runs/provenance/current_pretraining_exposure_audit.json", + "source": "submit_comm/06_code/bertosebind_new_runs/provenance/current_pretraining_exposure_audit.json", + "sha256": "30a70a1703183b50fa1c10986c065471513981fac1e3e69f9c7ad649aeecb16a", + "bytes": 9596, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/provenance/current_pretraining_exposure_audit.json" + }, + { + "output": "bertosebind_new_runs/provenance/exposure_portability.patch", + "source": "submit_comm/06_code/bertosebind_new_runs/provenance/exposure_portability.patch", + "sha256": "ff65b38435040ba2f5987e0c78ecc0fafc4604341b9bc094513d47cb343db023", + "bytes": 8422, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/provenance/exposure_portability.patch" + }, + { + "output": "bertosebind_new_runs/provenance/gifflar_scorer_diff.txt", + "source": "submit_comm/06_code/bertosebind_new_runs/provenance/gifflar_scorer_diff.txt", + "sha256": "6649cef7a00096ba2981c611a4c6432be93300e3bb439cd543a692cbb40a15af", + "bytes": 1510, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/provenance/gifflar_scorer_diff.txt" + }, + { + "output": "bertosebind_new_runs/provenance/protein_gifflar_audit.json", + "source": "submit_comm/06_code/bertosebind_new_runs/provenance/protein_gifflar_audit.json", + "sha256": "7d24cac24a37583fddac7d91c73e22ea6d4a022194ac213ab354f9e9831b1084", + "bytes": 109442, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/provenance/protein_gifflar_audit.json" + }, + { + "output": "bertosebind_new_runs/provenance/protein_gifflar_verified_numbers.json", + "source": "submit_comm/06_code/bertosebind_new_runs/provenance/protein_gifflar_verified_numbers.json", + "sha256": "9d2e628a789a46a69333c24550d2a150166aebed382880c2d0a67fbd43124eaa", + "bytes": 30957, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/provenance/protein_gifflar_verified_numbers.json" + }, + { + "output": "bertosebind_new_runs/reproduce_summary.py", + "source": "submit_comm/06_code/bertosebind_new_runs/reproduce_summary.py", + "sha256": "4b49c6f8f6c9953cee46ff2f6c47e1bb68692c9b58984973b3d8666648999f62", + "bytes": 2008, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/reproduce_summary.py" + }, + { + "output": "bertosebind_new_runs/requirements.txt", + "source": "submit_comm/06_code/bertosebind_new_runs/requirements.txt", + "sha256": "99acda4c8365d691c16de3e032e225de05cee38cff063a772bf9eaec2067328f", + "bytes": 104, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/requirements.txt" + }, + { + "output": "bertosebind_new_runs/results/doubly_cold_anatomy.json", + "source": "submit_comm/06_code/bertosebind_new_runs/results/doubly_cold_anatomy.json", + "sha256": "0dff08537f0cd5a1ad40562537c48546d3d4f3858a75b2ab2d3729b22a5dfe91", + "bytes": 9441, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/results/doubly_cold_anatomy.json" + }, + { + "output": "bertosebind_new_runs/results/doubly_cold_per_assay.csv", + "source": "submit_comm/06_code/bertosebind_new_runs/results/doubly_cold_per_assay.csv", + "sha256": "4186c66c13fd05d62d83a10df2a5761b2e29ded502660c12cb450836f9881496", + "bytes": 18263, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/results/doubly_cold_per_assay.csv" + }, + { + "output": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_gifflarESM_s43.json", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_gifflarESM_s43.json", + "sha256": "2c494ac1351d4ff63828139eac004c0047dc3259d62fd10334d5a740cab9182f", + "bytes": 927, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_gifflarESM_s43.json" + }, + { + "output": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_gifflarESM_s44.json", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_gifflarESM_s44.json", + "sha256": "82173016b893cb2913e90e99feea5f6f4ff22cff9e1aff0fe7dc136161c7f627", + "bytes": 927, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_gifflarESM_s44.json" + }, + { + "output": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_sweetnetESM_s43.json", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_sweetnetESM_s43.json", + "sha256": "ac58a83969a0ffb860cf1a33a472f4cb5b3e14f25097c3ba909f7555f65aa589", + "bytes": 933, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_sweetnetESM_s43.json" + }, + { + "output": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_sweetnetESM_s44.json", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_sweetnetESM_s44.json", + "sha256": "d2d2d73c834a2fcca7b8c22fd6ce91907f18866443628c2c54f8b8ec04477803", + "bytes": 933, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_sweetnetESM_s44.json" + }, + { + "output": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_gifflarESM_s43.json", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_gifflarESM_s43.json", + "sha256": "7b0a01a1acc7e2ca80a3de9aaab02941942ead519e6661abec6c44c7fa5fd079", + "bytes": 929, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_gifflarESM_s43.json" + }, + { + "output": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_gifflarESM_s44.json", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_gifflarESM_s44.json", + "sha256": "f2e40d306b767e6949c02304077a08398dc16ac19d08d94937f7dc49abd7cc24", + "bytes": 930, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_gifflarESM_s44.json" + }, + { + "output": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_sweetnetESM_s43.json", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_sweetnetESM_s43.json", + "sha256": "e13c8021d6e94b3bd6cb4ef00d7456c182449f57c4b1356256e011805a6efdbf", + "bytes": 935, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_sweetnetESM_s43.json" + }, + { + "output": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_sweetnetESM_s44.json", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_sweetnetESM_s44.json", + "sha256": "d274d35c9a0ba25e4597cdb8c01001f4f7ff7760aabfe7c8a00b84a70b74252f", + "bytes": 935, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_sweetnetESM_s44.json" + }, + { + "output": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_gifflarESM_s43.json", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_gifflarESM_s43.json", + "sha256": "2208056d5303fda27c5b541eed1c6f64cb03de1c10abd2868d4ce55d1bdb475c", + "bytes": 922, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_gifflarESM_s43.json" + }, + { + "output": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_gifflarESM_s44.json", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_gifflarESM_s44.json", + "sha256": "c831378d73c3c2c9456be5ff9ff05acc34b64815b056c5df21bef2078a415393", + "bytes": 922, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_gifflarESM_s44.json" + }, + { + "output": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_sweetnetESM_s43.json", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_sweetnetESM_s43.json", + "sha256": "121a30d0de568217e722036cf25ba4ef61128398fde3466fc8b2f60f096722c7", + "bytes": 929, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_sweetnetESM_s43.json" + }, + { + "output": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_sweetnetESM_s44.json", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_sweetnetESM_s44.json", + "sha256": "3d29ac377491db5d952f6066228fe4099f99db0e2fbaa80063ee429fc28e0a28", + "bytes": 927, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_sweetnetESM_s44.json" + }, + { + "output": "bertosebind_new_runs/results/protein_probe.json", + "source": "submit_comm/06_code/bertosebind_new_runs/results/protein_probe.json", + "sha256": "4fd80f7396aa9803602fd62bd82ec3e98e1f937b46e1057cb26ffa56ea6c93f0", + "bytes": 10946, + "status": "unchanged_copy", + "original_package_path": "bertosebind_new_runs/results/protein_probe.json" + }, + { + "output": "provenance/submission_code_inventory.tsv", + "source": "submit_comm/06_code/code_inventory.tsv", + "sha256": "80aae521be2bdc5ac2337ea733f7a8ade028f788499d7d44ff1b6e7389639c8d", + "bytes": 193630, + "status": "unchanged_copy", + "original_package_path": "code_inventory.tsv" + }, + { + "output": "figures/Figure_style.md", + "source": "submit_comm/06_code/figures/Figure_style.md", + "sha256": "75d530c95c218fafb25e844865dd3884737d11b23c4cfdc121226549923fecdb", + "bytes": 1277, + "status": "unchanged_copy", + "original_package_path": "figures/Figure_style.md" + }, + { + "output": "figures/README.md", + "source": "submit_comm/06_code/figures/README.md", + "sha256": "784b9b6472c10498b5aaef3f5bcc43f23bde0805135c6b0265d851aa6e342c1e", + "bytes": 8542, + "status": "unchanged_copy", + "original_package_path": "figures/README.md" + }, + { + "output": "figures/ablation_figure9/README.md", + "source": "submit_comm/06_code/figures/ablation_figure9/README.md", + "sha256": "3a6fcbfe8388f494ad542a24a6d4d66c8315af62e82627a2429518fbe1b2f9bd", + "bytes": 1613, + "status": "unchanged_copy", + "original_package_path": "figures/ablation_figure9/README.md" + }, + { + "output": "figures/ablation_figure9/nature-bpg-palette.json", + "source": "submit_comm/06_code/figures/ablation_figure9/nature-bpg-palette.json", + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "bytes": 478, + "status": "unchanged_copy", + "original_package_path": "figures/ablation_figure9/nature-bpg-palette.json" + }, + { + "output": "figures/ablation_figure9/plot_data.json", + "source": "submit_comm/06_code/figures/ablation_figure9/plot_data.json", + "sha256": "179bf3ddb15842c726a90a9cf373c7861409c8f823bae344a0b621fa77ed51f9", + "bytes": 146397, + "status": "unchanged_copy", + "original_package_path": "figures/ablation_figure9/plot_data.json" + }, + { + "output": "figures/bootstrap_figure13/README.md", + "source": "submit_comm/06_code/figures/bootstrap_figure13/README.md", + "sha256": "9494d4ea185f98082bf6197cf6c244035c3cb8c811527c922357fc28ca381149", + "bytes": 1063, + "status": "unchanged_copy", + "original_package_path": "figures/bootstrap_figure13/README.md" + }, + { + "output": "figures/bootstrap_figure13/build_figure13.py", + "source": "submit_comm/06_code/figures/bootstrap_figure13/build_figure13.py", + "sha256": "832849e584499907aa66540616d52ffa192538bf9353f19c4f463f48694a4806", + "bytes": 8456, + "status": "unchanged_copy", + "original_package_path": "figures/bootstrap_figure13/build_figure13.py" + }, + { + "output": "figures/bootstrap_figure13/inputs/affinose_b4_step3_bootstrap_r2_20260927.json", + "source": "submit_comm/06_code/figures/bootstrap_figure13/inputs/affinose_b4_step3_bootstrap_r2_20260927.json", + "sha256": "6a87e6a8abc926f41ca13b1bb6c81cbf9ea1d04b06e8f39bfdaf847ce55ba235", + "bytes": 48191, + "status": "unchanged_copy", + "original_package_path": "figures/bootstrap_figure13/inputs/affinose_b4_step3_bootstrap_r2_20260927.json" + }, + { + "output": "figures/bootstrap_figure13/inputs/nature-bpg-palette.json", + "source": "submit_comm/06_code/figures/bootstrap_figure13/inputs/nature-bpg-palette.json", + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "bytes": 478, + "status": "unchanged_copy", + "original_package_path": "figures/bootstrap_figure13/inputs/nature-bpg-palette.json" + }, + { + "output": "figures/build_bpe_figure3.py", + "source": "submit_comm/06_code/figures/build_bpe_figure3.py", + "sha256": "b262b420db6a5d18712c985b7d27b0d33dbdcbb2e1b3961bdf6c06110ba107ae", + "bytes": 6899, + "status": "unchanged_copy", + "original_package_path": "figures/build_bpe_figure3.py" + }, + { + "output": "figures/build_corpus_composition_figure.py", + "source": "submit_comm/06_code/figures/build_corpus_composition_figure.py", + "sha256": "0ceff115647c4921165805fb25fb5ec5451e8ac1264a9140b3db8591f30f66d2", + "bytes": 3995, + "status": "unchanged_copy", + "original_package_path": "figures/build_corpus_composition_figure.py" + }, + { + "output": "figures/build_grey_seal_figure5.py", + "source": "submit_comm/06_code/figures/build_grey_seal_figure5.py", + "sha256": "6053ddca0892325752308544a39da61d427de959f6559ab771902b0c30c7c103", + "bytes": 1433, + "status": "unchanged_copy", + "original_package_path": "figures/build_grey_seal_figure5.py" + }, + { + "output": "figures/build_submission_figures.py", + "source": "submit_comm/06_code/figures/build_submission_figures.py", + "sha256": "69fd3be7f723c7dd229762aa9fba7f2413ed446a8ac7e703ef45e90b3f29223e", + "bytes": 25654, + "status": "unchanged_copy", + "original_package_path": "figures/build_submission_figures.py" + }, + { + "output": "figures/build_supplement_figure1.py", + "source": "submit_comm/06_code/figures/build_supplement_figure1.py", + "sha256": "bb8cfaa1ec26c36f22b27bb3b19d61dbf98da1fd42e6889e408f4dd9d17eda31", + "bytes": 13633, + "status": "unchanged_copy", + "original_package_path": "figures/build_supplement_figure1.py" + }, + { + "output": "figures/build_supplement_presentation.py", + "source": "submit_comm/06_code/figures/build_supplement_presentation.py", + "sha256": "9086813c19cb26d23e1f7d2a75b1ef80ed29d4d087822fa9e95ac40821a32896", + "bytes": 13515, + "status": "unchanged_copy", + "original_package_path": "figures/build_supplement_presentation.py" + }, + { + "output": "figures/build_supplementary_figure9.py", + "source": "submit_comm/06_code/figures/build_supplementary_figure9.py", + "sha256": "9b604ffc6435ed8d0f20c0d1ba66cb5cfa43ecf503226bf261ce1b4d8a4deae2", + "bytes": 12604, + "status": "unchanged_copy", + "original_package_path": "figures/build_supplementary_figure9.py" + }, + { + "output": "figures/build_taxonomy_figure11.py", + "source": "submit_comm/06_code/figures/build_taxonomy_figure11.py", + "sha256": "47a79341f902cb286e2517056ae698c6cc35b0641ffa5a09ad7fde28bc429004", + "bytes": 6578, + "status": "unchanged_copy", + "original_package_path": "figures/build_taxonomy_figure11.py" + }, + { + "output": "figures/build_token_length_figure2.py", + "source": "submit_comm/06_code/figures/build_token_length_figure2.py", + "sha256": "e964dc2d021382d5950008eceef05d001d640de608b0d86ce37701db5de8379e", + "bytes": 3840, + "status": "unchanged_copy", + "original_package_path": "figures/build_token_length_figure2.py" + }, + { + "output": "figures/build_training_coverage_figure6.py", + "source": "submit_comm/06_code/figures/build_training_coverage_figure6.py", + "sha256": "bc7e195afef8b5fa7c3effabc7253434d6a5b77b428644a909a1da734def4c5c", + "bytes": 4730, + "status": "unchanged_copy", + "original_package_path": "figures/build_training_coverage_figure6.py" + }, + { + "output": "figures/contrastive_figure12/README.md", + "source": "submit_comm/06_code/figures/contrastive_figure12/README.md", + "sha256": "bb948ed57ebbab93875926c3be782996050e8728d3e73b9e6685916b725ee8be", + "bytes": 1259, + "status": "unchanged_copy", + "original_package_path": "figures/contrastive_figure12/README.md" + }, + { + "output": "figures/contrastive_figure12/build_figure12.py", + "source": "submit_comm/06_code/figures/contrastive_figure12/build_figure12.py", + "sha256": "715df862316031c39bbccc5339d442520863d4f99b9f3a19d8e1e8594db6281f", + "bytes": 14168, + "status": "unchanged_copy", + "original_package_path": "figures/contrastive_figure12/build_figure12.py" + }, + { + "output": "figures/contrastive_figure12/inputs/nature-bpg-palette.json", + "source": "submit_comm/06_code/figures/contrastive_figure12/inputs/nature-bpg-palette.json", + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "bytes": 478, + "status": "unchanged_copy", + "original_package_path": "figures/contrastive_figure12/inputs/nature-bpg-palette.json" + }, + { + "output": "figures/contrastive_figure12/inputs/review_contrastive_fit_values.csv", + "source": "submit_comm/06_code/figures/contrastive_figure12/inputs/review_contrastive_fit_values.csv", + "sha256": "d732e76c28cd3d741fad99636a8937b464f1efa190d26e7005146e6c88b1feb3", + "bytes": 59300, + "status": "unchanged_copy", + "original_package_path": "figures/contrastive_figure12/inputs/review_contrastive_fit_values.csv" + }, + { + "output": "figures/contrastive_figure12/inputs/review_contrastive_paired_summary.csv", + "source": "submit_comm/06_code/figures/contrastive_figure12/inputs/review_contrastive_paired_summary.csv", + "sha256": "5bfd6352e60158fe3a09c2a3228a7fffc4926780aa320b5e205ef276db3e4113", + "bytes": 6888, + "status": "unchanged_copy", + "original_package_path": "figures/contrastive_figure12/inputs/review_contrastive_paired_summary.csv" + }, + { + "output": "figures/contrastive_figure12/inputs/review_contrastive_taxonomy_summary.csv", + "source": "submit_comm/06_code/figures/contrastive_figure12/inputs/review_contrastive_taxonomy_summary.csv", + "sha256": "dc90a817bc54ac310a73298f60d03fc30eaccd724f4676eb826301dd85470acc", + "bytes": 1330, + "status": "unchanged_copy", + "original_package_path": "figures/contrastive_figure12/inputs/review_contrastive_taxonomy_summary.csv" + }, + { + "output": "figures/figure3_inputs/nature-bpg-palette.json", + "source": "submit_comm/06_code/figures/figure3_inputs/nature-bpg-palette.json", + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "bytes": 478, + "status": "unchanged_copy", + "original_package_path": "figures/figure3_inputs/nature-bpg-palette.json" + }, + { + "output": "figures/figure3_inputs/partition_count_flow.csv", + "source": "submit_comm/06_code/figures/figure3_inputs/partition_count_flow.csv", + "sha256": "bd530abacb61f3d6cffda8d1e7e6112f9261fd0a761e594fddceb5c615b9497b", + "bytes": 12640, + "status": "unchanged_copy", + "original_package_path": "figures/figure3_inputs/partition_count_flow.csv" + }, + { + "output": "figures/figure3_inputs/review_bpe_vocabulary.json", + "source": "submit_comm/06_code/figures/figure3_inputs/review_bpe_vocabulary.json", + "sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "bytes": 138150, + "status": "unchanged_copy", + "original_package_path": "figures/figure3_inputs/review_bpe_vocabulary.json" + }, + { + "output": "figures/figure3_inputs/source_example.json", + "source": "submit_comm/06_code/figures/figure3_inputs/source_example.json", + "sha256": "c885944b4ebce9b08c99318ce51c81b7648309c49ba5244ad0345b794429f151", + "bytes": 3975, + "status": "unchanged_copy", + "original_package_path": "figures/figure3_inputs/source_example.json" + }, + { + "output": "figures/final_iar/README.md", + "source": "submit_comm/06_code/figures/final_iar/README.md", + "sha256": "6ee3cb8ac319ed266a0a18e39d861baff7e59b80b1cd34f5f6bb54f27e282921", + "bytes": 2033, + "status": "unchanged_copy", + "original_package_path": "figures/final_iar/README.md" + }, + { + "output": "figures/final_iar/build_final_iar_figures.py", + "source": "submit_comm/06_code/figures/final_iar/build_final_iar_figures.py", + "sha256": "3edb3a802895beecbf2d09086b575a9ecb6b6cbfe5548dd6d22358ca30b02644", + "bytes": 15260, + "status": "unchanged_copy", + "original_package_path": "figures/final_iar/build_final_iar_figures.py" + }, + { + "output": "figures/final_iar/inputs/baselines_same_cases.csv", + "source": "submit_comm/06_code/figures/final_iar/inputs/baselines_same_cases.csv", + "sha256": "259fdc68a39b415c4ec114fbd6872ceaccaf09327d1fde958390071a5a94af2a", + "bytes": 4968, + "status": "unchanged_copy", + "original_package_path": "figures/final_iar/inputs/baselines_same_cases.csv" + }, + { + "output": "figures/final_iar/inputs/final_iar_summary.json", + "source": "submit_comm/06_code/figures/final_iar/inputs/final_iar_summary.json", + "sha256": "d5b7fd634677ea22ea27670649ea30636ef6c98daedc8592cd3f5d7b56beb9c0", + "bytes": 6162, + "status": "unchanged_copy", + "original_package_path": "figures/final_iar/inputs/final_iar_summary.json" + }, + { + "output": "figures/final_iar/inputs/nature-bpg-palette.json", + "source": "submit_comm/06_code/figures/final_iar/inputs/nature-bpg-palette.json", + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "bytes": 478, + "status": "unchanged_copy", + "original_package_path": "figures/final_iar/inputs/nature-bpg-palette.json" + }, + { + "output": "figures/final_iar/inputs/run_manifest.json", + "source": "submit_comm/06_code/figures/final_iar/inputs/run_manifest.json", + "sha256": "0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419", + "bytes": 3838, + "status": "unchanged_copy", + "original_package_path": "figures/final_iar/inputs/run_manifest.json" + }, + { + "output": "figures/model_variants_figure10/README.md", + "source": "submit_comm/06_code/figures/model_variants_figure10/README.md", + "sha256": "61136a3d00e0184db8fbf4db47fa480766e7dadbb4f81d278df27b1fd0a0613c", + "bytes": 1350, + "status": "unchanged_copy", + "original_package_path": "figures/model_variants_figure10/README.md" + }, + { + "output": "figures/model_variants_figure10/build_model_variants_figure10.py", + "source": "submit_comm/06_code/figures/model_variants_figure10/build_model_variants_figure10.py", + "sha256": "c24f16be487bdef403afd9b6803334a4f5a6739f4716b16ec5290ee037a782bb", + "bytes": 14431, + "status": "unchanged_copy", + "original_package_path": "figures/model_variants_figure10/build_model_variants_figure10.py" + }, + { + "output": "figures/model_variants_figure10/inputs/review_weight_policy_ranks.csv", + "source": "submit_comm/06_code/figures/model_variants_figure10/inputs/review_weight_policy_ranks.csv", + "sha256": "53fdfc11a75e3aaf39b78a9c59d90e206b0726579440d03df2d5cb5708249ebf", + "bytes": 3652, + "status": "unchanged_copy", + "original_package_path": "figures/model_variants_figure10/inputs/review_weight_policy_ranks.csv" + }, + { + "output": "figures/model_variants_figure10/inputs/review_weight_policy_sensitivity.csv", + "source": "submit_comm/06_code/figures/model_variants_figure10/inputs/review_weight_policy_sensitivity.csv", + "sha256": "9b35cb9ab5056c0548eea944f8472906a8cb36e2a7adf5cf3135268c675619b7", + "bytes": 137065, + "status": "unchanged_copy", + "original_package_path": "figures/model_variants_figure10/inputs/review_weight_policy_sensitivity.csv" + }, + { + "output": "figures/taxonomy_figure11/README.md", + "source": "submit_comm/06_code/figures/taxonomy_figure11/README.md", + "sha256": "dd96f6ec2247a918a89873dd031be5f738bcd870056e9b98cb7a1e2c85e158e8", + "bytes": 1677, + "status": "unchanged_copy", + "original_package_path": "figures/taxonomy_figure11/README.md" + }, + { + "output": "figures/taxonomy_figure11/nature-bpg-palette.json", + "source": "submit_comm/06_code/figures/taxonomy_figure11/nature-bpg-palette.json", + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "bytes": 478, + "status": "unchanged_copy", + "original_package_path": "figures/taxonomy_figure11/nature-bpg-palette.json" + }, + { + "output": "iar_completion/README.md", + "source": "submit_comm/06_code/iar_completion/README.md", + "sha256": "04670f06e3459608d7a43da767531544421d4da1a6125376edc3939dba951d1f", + "bytes": 9411, + "status": "unchanged_copy", + "original_package_path": "iar_completion/README.md" + }, + { + "output": "iar_completion/SHA256SUMS", + "source": "submit_comm/06_code/iar_completion/SHA256SUMS", + "sha256": "8f7e1027e67222d49eb9e3c12fcdff083005d182583990c08c54b7ac3c11040e", + "bytes": 5566, + "status": "unchanged_copy", + "original_package_path": "iar_completion/SHA256SUMS" + }, + { + "output": "iar_completion/check_package.py", + "source": "submit_comm/06_code/iar_completion/check_package.py", + "sha256": "37514cb79322719772b5c14a5795f00a78f3275f3315d5b3b674ee97127ca953", + "bytes": 3156, + "status": "unchanged_copy", + "original_package_path": "iar_completion/check_package.py" + }, + { + "output": "iar_completion/originals/run_all_training.sbatch", + "source": "submit_comm/06_code/iar_completion/originals/run_all_training.sbatch", + "sha256": "d406620e3b0c070dff4d6fb6e0c57effce848a9ca5b3dc3de705d65c49ac0961", + "bytes": 1703, + "status": "unchanged_copy", + "original_package_path": "iar_completion/originals/run_all_training.sbatch" + }, + { + "output": "iar_completion/originals/wa3_final_iar_readout.py", + "source": "submit_comm/06_code/iar_completion/originals/wa3_final_iar_readout.py", + "sha256": "5acafc45244a0bf9a8489794f8a39f956622cf50594d87eb2eaa04502589fcb5", + "bytes": 81913, + "status": "unchanged_copy", + "original_package_path": "iar_completion/originals/wa3_final_iar_readout.py" + }, + { + "output": "iar_completion/originals/wa3_linkage_diagnosis.py", + "source": "submit_comm/06_code/iar_completion/originals/wa3_linkage_diagnosis.py", + "sha256": "679499406106611dc2c70240a3c14c9b94311bc03a7811d3dae807c58aef4ef8", + "bytes": 67711, + "status": "unchanged_copy", + "original_package_path": "iar_completion/originals/wa3_linkage_diagnosis.py" + }, + { + "output": "iar_completion/originals/wa3_linkage_probe.py", + "source": "submit_comm/06_code/iar_completion/originals/wa3_linkage_probe.py", + "sha256": "0ebc629778c854621f485ceb4f5f11090e84ac9171d52270fcc90b6b07d6fe7f", + "bytes": 83203, + "status": "unchanged_copy", + "original_package_path": "iar_completion/originals/wa3_linkage_probe.py" + }, + { + "output": "iar_completion/originals/wa3_same_test.py", + "source": "submit_comm/06_code/iar_completion/originals/wa3_same_test.py", + "sha256": "0da5f24799afc8978b88c85ea7856deb8c641ebae319760e88539c93a4eb3a86", + "bytes": 59535, + "status": "unchanged_copy", + "original_package_path": "iar_completion/originals/wa3_same_test.py" + }, + { + "output": "iar_completion/originals/wa3_typed_strict_test.py", + "source": "submit_comm/06_code/iar_completion/originals/wa3_typed_strict_test.py", + "sha256": "c6e9506dbf97752aa248e325e75acf3abf63495054bcac68d48602967379531d", + "bytes": 64136, + "status": "unchanged_copy", + "original_package_path": "iar_completion/originals/wa3_typed_strict_test.py" + }, + { + "output": "iar_completion/originals/wa3_typed_test.py", + "source": "submit_comm/06_code/iar_completion/originals/wa3_typed_test.py", + "sha256": "1341b0051fefaf54b4113d7dda5e408540844d12a9275f9a73607c416f35928d", + "bytes": 63012, + "status": "unchanged_copy", + "original_package_path": "iar_completion/originals/wa3_typed_test.py" + }, + { + "output": "iar_completion/provenance/final_run/baselines_same_cases.csv", + "source": "submit_comm/06_code/iar_completion/provenance/final_run/baselines_same_cases.csv", + "sha256": "259fdc68a39b415c4ec114fbd6872ceaccaf09327d1fde958390071a5a94af2a", + "bytes": 4968, + "status": "unchanged_copy", + "original_package_path": "iar_completion/provenance/final_run/baselines_same_cases.csv" + }, + { + "output": "iar_completion/provenance/final_run/final_iar_summary.json", + "source": "submit_comm/06_code/iar_completion/provenance/final_run/final_iar_summary.json", + "sha256": "d5b7fd634677ea22ea27670649ea30636ef6c98daedc8592cd3f5d7b56beb9c0", + "bytes": 6162, + "status": "unchanged_copy", + "original_package_path": "iar_completion/provenance/final_run/final_iar_summary.json" + }, + { + "output": "iar_completion/provenance/final_run/run_manifest.json", + "source": "submit_comm/06_code/iar_completion/provenance/final_run/run_manifest.json", + "sha256": "0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419", + "bytes": 3838, + "status": "unchanged_copy", + "original_package_path": "iar_completion/provenance/final_run/run_manifest.json" + }, + { + "output": "iar_completion/provenance/heldout_masking_wa3_final_iar_readout_20260926_run_manifest.json", + "source": "submit_comm/06_code/iar_completion/provenance/heldout_masking_wa3_final_iar_readout_20260926_run_manifest.json", + "sha256": "a615d9a889c7a62c19d05a4d07d66d9e743fbfb9e37e4d646c889490d297e492", + "bytes": 3825, + "status": "unchanged_copy", + "original_package_path": "iar_completion/provenance/heldout_masking_wa3_final_iar_readout_20260926_run_manifest.json" + }, + { + "output": "iar_completion/provenance/heldout_masking_wa3_final_iar_readout_all_20260927_run_manifest.json", + "source": "submit_comm/06_code/iar_completion/provenance/heldout_masking_wa3_final_iar_readout_all_20260927_run_manifest.json", + "sha256": "0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419", + "bytes": 3838, + "status": "unchanged_copy", + "original_package_path": "iar_completion/provenance/heldout_masking_wa3_final_iar_readout_all_20260927_run_manifest.json" + }, + { + "output": "iar_completion/provenance/heldout_masking_wa3_linkage_diagnosis_20260925_run_manifest.json", + "source": "submit_comm/06_code/iar_completion/provenance/heldout_masking_wa3_linkage_diagnosis_20260925_run_manifest.json", + "sha256": "933ef4d07c380bd4322814acff135e207e00db36197c3dc543214b24cb5d554e", + "bytes": 6034, + "status": "unchanged_copy", + "original_package_path": "iar_completion/provenance/heldout_masking_wa3_linkage_diagnosis_20260925_run_manifest.json" + }, + { + "output": "iar_completion/provenance/heldout_masking_wa3_same_test_run_manifest.json", + "source": "submit_comm/06_code/iar_completion/provenance/heldout_masking_wa3_same_test_run_manifest.json", + "sha256": "3f713f4e074cbb068264173a8fb0ec99813665ad1b23fdea507f7389071cb04b", + "bytes": 6861, + "status": "unchanged_copy", + "original_package_path": "iar_completion/provenance/heldout_masking_wa3_same_test_run_manifest.json" + }, + { + "output": "iar_completion/provenance/heldout_masking_wa3_typed_20260924_run_manifest.json", + "source": "submit_comm/06_code/iar_completion/provenance/heldout_masking_wa3_typed_20260924_run_manifest.json", + "sha256": "b3cf90dc772f206dc386a3a92d96e43d7a6c1de4147bc7cc501599730d31807f", + "bytes": 3136, + "status": "unchanged_copy", + "original_package_path": "iar_completion/provenance/heldout_masking_wa3_typed_20260924_run_manifest.json" + }, + { + "output": "iar_completion/provenance/heldout_masking_wa3_typed_strict_20260925_run_manifest.json", + "source": "submit_comm/06_code/iar_completion/provenance/heldout_masking_wa3_typed_strict_20260925_run_manifest.json", + "sha256": "4a13b9faecc329257c2aa08fd6734a8b6c02837d0b230b0f659fd00602832c75", + "bytes": 3148, + "status": "unchanged_copy", + "original_package_path": "iar_completion/provenance/heldout_masking_wa3_typed_strict_20260925_run_manifest.json" + }, + { + "output": "iar_completion/provenance/local_checks.json", + "source": "submit_comm/06_code/iar_completion/provenance/local_checks.json", + "sha256": "9c957fe6b76da503c909ac4e3a0d70cf4ea1fd6da34a3aa6573bac4722d4c62d", + "bytes": 2253, + "status": "unchanged_copy", + "original_package_path": "iar_completion/provenance/local_checks.json" + }, + { + "output": "iar_completion/provenance/required_input_hashes.json", + "source": "submit_comm/06_code/iar_completion/provenance/required_input_hashes.json", + "sha256": "8af8ed8b6124f26072d6041deb0e6966c13c149926f5bd720b714884cba6801e", + "bytes": 7186, + "status": "unchanged_copy", + "original_package_path": "iar_completion/provenance/required_input_hashes.json" + }, + { + "output": "iar_completion/provenance/source_inventory.json", + "source": "submit_comm/06_code/iar_completion/provenance/source_inventory.json", + "sha256": "2cb3a3f4e8b1d37dd3ad0234996d546f34ab48231bf69247ffb6ace0651a4a69", + "bytes": 20381, + "status": "unchanged_copy", + "original_package_path": "iar_completion/provenance/source_inventory.json" + }, + { + "output": "iar_completion/requirements.txt", + "source": "submit_comm/06_code/iar_completion/requirements.txt", + "sha256": "9ef74c17ef3ffacde3f0fc862f9844757bacfffa55b3ac9e7e6a6cca43f5843c", + "bytes": 188, + "status": "unchanged_copy", + "original_package_path": "iar_completion/requirements.txt" + }, + { + "output": "iar_completion/runtime_dependencies.json", + "source": "submit_comm/06_code/iar_completion/runtime_dependencies.json", + "sha256": "3392850a98f1739e3eec8434f42c26f3fad2d3da9fc815a17dd2790aa3b0ff98", + "bytes": 7866, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_dependencies.json" + }, + { + "output": "iar_completion/runtime_snapshot/java/review_A5WurcsArrayTreeAudit.java", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/java/review_A5WurcsArrayTreeAudit.java", + "sha256": "a791b8f4bbda75317f41afb34d62fe518448f4d5d90db0b852e2b0d0af5e83a6", + "bytes": 19697, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/java/review_A5WurcsArrayTreeAudit.java" + }, + { + "output": "iar_completion/runtime_snapshot/java/review_MolWURCS.jar", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/java/review_MolWURCS.jar", + "sha256": "bc38e44e66daed7ec04f7c7907a13509aac125a8a09c97d9972725ab4278edaf", + "bytes": 4019920, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/java/review_MolWURCS.jar" + }, + { + "output": "iar_completion/runtime_snapshot/java/review_wurcsframework-1.3.1.jar", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/java/review_wurcsframework-1.3.1.jar", + "sha256": "5449f9276a7b952adf087468c874bb13c7295062cce7d1afb13fdea78ace7f37", + "bytes": 340319, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/java/review_wurcsframework-1.3.1.jar" + }, + { + "output": "iar_completion/runtime_snapshot/project/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py", + "sha256": "0bc54399362945601bcfd403441fc80968d173200dd0561f57568b2053a94839", + "bytes": 27983, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/project/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py" + }, + { + "output": "iar_completion/runtime_snapshot/project/data/bpe_ambiguity_tokens.json", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/data/bpe_ambiguity_tokens.json", + "sha256": "c68cd003370b2dcdb162f848f766e4e62f2653c6c38d205f8cbe53a9aabe2d74", + "bytes": 11127, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/project/data/bpe_ambiguity_tokens.json" + }, + { + "output": "iar_completion/runtime_snapshot/project/data/bpe_vocabulary_clean.json", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/data/bpe_vocabulary_clean.json", + "sha256": "6a572afdf53f1494ab96c896876b824ca7ea749777352606aa9f96bf270ceecc", + "bytes": 118583, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/project/data/bpe_vocabulary_clean.json" + }, + { + "output": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_ambiguity_tokens.json", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_ambiguity_tokens.json", + "sha256": "22d2aad45b978988c9e26bc9400016014ee825cc6207377385a8cd74f3c88f2b", + "bytes": 19693, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_ambiguity_tokens.json" + }, + { + "output": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py", + "sha256": "10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04", + "bytes": 11405, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py" + }, + { + "output": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py", + "sha256": "f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7", + "bytes": 6186, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py" + }, + { + "output": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py", + "sha256": "6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4", + "bytes": 14161, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py" + }, + { + "output": "iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/__init__.py", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/__init__.py", + "sha256": "de8c3237b858b640ee9fbf4dac34864c54b6dac80bc89f346a44c774254289a4", + "bytes": 104, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/__init__.py" + }, + { + "output": "iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/glycan_bert.py", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/glycan_bert.py", + "sha256": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "bytes": 11024, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/glycan_bert.py" + }, + { + "output": "iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/multimodal_glycan_bert_v3.py", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/multimodal_glycan_bert_v3.py", + "sha256": "8e06c32f4e844c3c66f146fd15a075472808a0720c892d0b9683dfd32f15ef0c", + "bytes": 45141, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/multimodal_glycan_bert_v3.py" + }, + { + "output": "iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/training/ipa_bpe_distillation.py", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/training/ipa_bpe_distillation.py", + "sha256": "f0c8efda7a12942b4c6359792d6ee9417e6a9ec0eb04623ad17b4772430270b5", + "bytes": 15975, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/training/ipa_bpe_distillation.py" + }, + { + "output": "iar_completion/runtime_snapshot/project/writing/glycangt_heldout_ipa_validation/cluster/heldout_ipa_eval.py", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/writing/glycangt_heldout_ipa_validation/cluster/heldout_ipa_eval.py", + "sha256": "8d05a4048e200625694ff9a36f50af89b845fd0d38ba8034a97a710e7ad3dce2", + "bytes": 40107, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/project/writing/glycangt_heldout_ipa_validation/cluster/heldout_ipa_eval.py" + }, + { + "output": "iar_completion/runtime_snapshot/schema/classify.py", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/schema/classify.py", + "sha256": "cfce20d28291c8b5868d35386990037415090202dd823bdfd73038456cc65557", + "bytes": 3063, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/schema/classify.py" + }, + { + "output": "iar_completion/runtime_snapshot/schema/pipelib.py", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/schema/pipelib.py", + "sha256": "704ed130bdcce94a7af7ce3e37654705f709b8526f632907ef794451c6ef7f30", + "bytes": 4397, + "status": "unchanged_copy", + "original_package_path": "iar_completion/runtime_snapshot/schema/pipelib.py" + }, + { + "output": "provenance/affinose_arms_on_test_20260909.json", + "source": "submit_comm/06_code/provenance/affinose_arms_on_test_20260909.json", + "sha256": "670cfcbcfe89e0729bb75f122cff8c7100c24d39ef775c69421d4bb820654056", + "bytes": 6707, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_arms_on_test_20260909.json" + }, + { + "output": "provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/receipt.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/receipt.json", + "sha256": "a291a8e8f2b77c7955b5346aa52289afc520a0b5181d62eb0dfa2c096bd6bbb8", + "bytes": 6137, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/receipt.json" + }, + { + "output": "provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/results.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/results.json", + "sha256": "fdd520b70e38d0e6bc112118adad89cf209278614645b47e219341736bf99599", + "bytes": 12535, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/results.json" + }, + { + "output": "provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/receipt.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/receipt.json", + "sha256": "29b68fb30127700fa55942d5cc4c237f8bf15c2d0c883192b62698d811e71c51", + "bytes": 6135, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/receipt.json" + }, + { + "output": "provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/results.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/results.json", + "sha256": "54918a535b86b01590bab11c78ff4c354c106ca78a384446eb79038b0df666af", + "bytes": 11117, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/results.json" + }, + { + "output": "provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/receipt.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/receipt.json", + "sha256": "a380534df6f877c212a2c7dbce577511e282537bbff9ad5d7ac3e186f1cc5633", + "bytes": 6153, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/receipt.json" + }, + { + "output": "provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/results.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/results.json", + "sha256": "a732a56ddc81fc41b02dde8f56d852929ec8eefa12524ed9410a09361f267544", + "bytes": 11113, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/results.json" + }, + { + "output": "provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/receipt.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/receipt.json", + "sha256": "9344a727416db1368c45a0ddad962a12130e10f03944a5142874f72ba5311297", + "bytes": 6153, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/receipt.json" + }, + { + "output": "provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/results.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/results.json", + "sha256": "a530b2fac81a72d99674906253897a1e3eecca4ee17e83c3a27ed409a3411877", + "bytes": 12031, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/results.json" + }, + { + "output": "provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/receipt.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/receipt.json", + "sha256": "068bb72cc2fc0231f3a9f729ac78f1a6340a7088ea86a60449ebe63dcfbd794d", + "bytes": 6141, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/receipt.json" + }, + { + "output": "provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/results.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/results.json", + "sha256": "a21307bb48db62270792f990541bac1c2728feb34063f4b2009e2f6c7d8a7e4c", + "bytes": 9275, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/results.json" + }, + { + "output": "provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/receipt.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/receipt.json", + "sha256": "3044b56619b1bb83063070624b02bfaa64c952c1da76a80051bb62bb26098395", + "bytes": 6141, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/receipt.json" + }, + { + "output": "provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/results.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/results.json", + "sha256": "42ffeb2f81acbae80df3284300d0213b52918b90d3b186dbbd1f074800af75f0", + "bytes": 10197, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/results.json" + }, + { + "output": "provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/receipt.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/receipt.json", + "sha256": "07a919272c928f9630f4d70a73cf1aa91a327e2c9597cf582814c5386b6f24cc", + "bytes": 6147, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/receipt.json" + }, + { + "output": "provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/results.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/results.json", + "sha256": "ef5a0b42f15f23a473d46198bd39dc17176add75a1bf76cd708d5b595d552b6e", + "bytes": 9726, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/results.json" + }, + { + "output": "provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/receipt.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/receipt.json", + "sha256": "c3e3028a05cf7f5b58883d9485bcd7a7e0ba5d05265f4503b8bad09e307c1480", + "bytes": 6142, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/receipt.json" + }, + { + "output": "provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/results.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/results.json", + "sha256": "f62ddffaffae54f91e4f921fa235741df4023e94b47c2c90f3e158b7c4cd9858", + "bytes": 15759, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/results.json" + }, + { + "output": "provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/receipt.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/receipt.json", + "sha256": "6f5cbc9e19a45b4e9c8d33e7f4a82e41ef610b5040175852d3c05ea172995d4f", + "bytes": 6142, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/receipt.json" + }, + { + "output": "provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/results.json", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/results.json", + "sha256": "9f0a6dc5b89f58603fb368e754da90001a987016ed4d9ab425420703aeb44d9e", + "bytes": 11131, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/results.json" + }, + { + "output": "provenance/affinose_input_hashes_moA_glycan_20260908.json", + "source": "submit_comm/06_code/provenance/affinose_input_hashes_moA_glycan_20260908.json", + "sha256": "f4fb099a7dbe229450d2ca337d213555203dc69dd67f1e4b2cca227baca3d701", + "bytes": 1693, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_input_hashes_moA_glycan_20260908.json" + }, + { + "output": "provenance/affinose_input_hashes_moB_protein_20260908.json", + "source": "submit_comm/06_code/provenance/affinose_input_hashes_moB_protein_20260908.json", + "sha256": "00c53175abc949336bf495c796dc9c779af2109227bc6f351433356129d85663", + "bytes": 1694, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_input_hashes_moB_protein_20260908.json" + }, + { + "output": "provenance/affinose_input_hashes_moC_doubly_20260908.json", + "source": "submit_comm/06_code/provenance/affinose_input_hashes_moC_doubly_20260908.json", + "sha256": "3d3c6fd5c39fe2f1ce37ce5ba47b842fa193b716c08227678d68cdcc7e996c4e", + "bytes": 1693, + "status": "unchanged_copy", + "original_package_path": "provenance/affinose_input_hashes_moC_doubly_20260908.json" + }, + { + "output": "provenance/candidate_affinose_input_hashes_moA_glycan_20260908.json", + "source": "submit_comm/06_code/provenance/candidate_affinose_input_hashes_moA_glycan_20260908.json", + "sha256": "4dfa51299e99a23add6cdfe5380403d4504a207e2b6522ea86cc50ba1cd2cb74", + "bytes": 1919, + "status": "unchanged_copy", + "original_package_path": "provenance/candidate_affinose_input_hashes_moA_glycan_20260908.json" + }, + { + "output": "provenance/candidate_affinose_input_hashes_moB_protein_20260908.json", + "source": "submit_comm/06_code/provenance/candidate_affinose_input_hashes_moB_protein_20260908.json", + "sha256": "48768c773a262864e7a5104732d1e37971be2581058dec7e6f8778d05483965c", + "bytes": 1920, + "status": "unchanged_copy", + "original_package_path": "provenance/candidate_affinose_input_hashes_moB_protein_20260908.json" + }, + { + "output": "provenance/candidate_affinose_input_hashes_moC_doubly_20260908.json", + "source": "submit_comm/06_code/provenance/candidate_affinose_input_hashes_moC_doubly_20260908.json", + "sha256": "efbfbea3df98ff7b20dadae530aaf5e3cdadc7216a60a97495b4344e39ef1934", + "bytes": 1919, + "status": "unchanged_copy", + "original_package_path": "provenance/candidate_affinose_input_hashes_moC_doubly_20260908.json" + }, + { + "output": "provenance/local_test_environment.json", + "source": "submit_comm/06_code/provenance/local_test_environment.json", + "sha256": "fc689486dc297277e32480d52d9abb69549520c085101bd406ef3ed6c2fad86b", + "bytes": 737, + "status": "unchanged_copy", + "original_package_path": "provenance/local_test_environment.json" + }, + { + "output": "provenance/moconf_cells.tsv", + "source": "submit_comm/06_code/provenance/moconf_cells.tsv", + "sha256": "7202cdde019556a7babb3459ae04da8ab5ecb5edbdfde2b74c4a675ed1c9ff43", + "bytes": 799, + "status": "unchanged_copy", + "original_package_path": "provenance/moconf_cells.tsv" + }, + { + "output": "provenance/mofull_cells.tsv", + "source": "submit_comm/06_code/provenance/mofull_cells.tsv", + "sha256": "e6f1be53ab77ad80ea274f80bd11369bb4efe3836b6119c58283ec12af224752", + "bytes": 1449, + "status": "unchanged_copy", + "original_package_path": "provenance/mofull_cells.tsv" + }, + { + "output": "provenance/motif_cells.tsv", + "source": "submit_comm/06_code/provenance/motif_cells.tsv", + "sha256": "67b5ade1b857e789173128939c6baa4687354bb1d640d8fd3b40332b5956ec72", + "bytes": 1121, + "status": "unchanged_copy", + "original_package_path": "provenance/motif_cells.tsv" + }, + { + "output": "provenance/score_arms_on_test_historical.py", + "source": "submit_comm/06_code/provenance/score_arms_on_test_historical.py", + "sha256": "dc42f4cdd76cc2c49fedfe6b8b8ef40b5915ee70803c9cec5ec0b0573256f815", + "bytes": 6328, + "status": "unchanged_copy", + "original_package_path": "provenance/score_arms_on_test_historical.py" + }, + { + "output": "provenance/training_v8_before_resume_load_fix.py", + "source": "submit_comm/06_code/provenance/training_v8_before_resume_load_fix.py", + "sha256": "b7cb8a39e167f2cc9e35476dcdcad56320b02c1898d13db3236a41bbb2ed4852", + "bytes": 42151, + "status": "unchanged_copy", + "original_package_path": "provenance/training_v8_before_resume_load_fix.py" + }, + { + "output": "provenance/submission_requirements.txt", + "source": "submit_comm/06_code/requirements.txt", + "sha256": "48da67d3a47fb1155389fccdd9022b825b2eeefb60e28260633ec4c2fe00a33f", + "bytes": 277, + "status": "unchanged_copy", + "original_package_path": "requirements.txt" + } +] diff --git a/releases/2026-10-02/provenance/execution_summary.json b/releases/2026-10-02/provenance/execution_summary.json new file mode 100644 index 0000000000000000000000000000000000000000..61a12af90a55d8d93a169c08174e90f23dceb4e8 --- /dev/null +++ b/releases/2026-10-02/provenance/execution_summary.json @@ -0,0 +1,42 @@ +{ + "schema": "bertose_code_execution_summary_v1", + "source_policy": "Copied implementation files are unchanged. Portable adapters and public documentation are new.", + "selected_model": { + "public_name": "BERTose", + "variant": 3, + "internal_identifier": "WA3", + "pretraining_seed": 42, + "selected_epoch": 58, + "full_checkpoint_sha256": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "sequence_export_sha256": "7e01e446d8450665b94dc3eaf6d95324c2f1f41d8a78825fe1edbc58f1a19cb7" + }, + "sequence_implementation": { + "encoder_class": "executed/downstream/review_a5_native_checkpoint.py:ExactNativeSequenceEncoder", + "native_modules": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_composite_r4.py:ExactSequenceEmbeddings,EncoderLayer", + "inheritance": "NativeEightCompositeR5 inherits NativeEightCompositeR4; its sequence modules are not replaced", + "source_module_sha256": "89b65f9186f2080eab214f1b7389854cd8477124cdc729a428624312fb7a1453", + "source_binding": "Frozen run_review_native_scalar_common_fixed_s42.py EXPECTED_LOCAL_SOURCES checkpoint binding, line95", + "state_entries": 209, + "trainable_shape_parameters": 90581760, + "stored_elements_including_position_buffer": 90582016, + "ordered_state_schema_sha256": "21ec95377ac8e66c5e832bfe8f3357123951b7ea235b2d78989fe9fbaa42e129" + }, + "preserved_pretraining_sources": "bertose_source/", + "preserved_submission_files": 470, + "preserved_analysis_directories": [ + "benchmark_exclusion/", + "bertosebind_new_runs/", + "figures/", + "iar_completion/" + ], + "preserved_binding_model_sources": "affinose/", + "readout_scope": "Saved 211-class linkage readout, source and direct hash-bound artifacts; full upstream IAR inference is not supplied by the sequence-export adapter.", + "license": "Apache-2.0 for original revised code; separate dependency/data/model asset terms apply.", + "weights_in_code_folder": false, + "convenience_adapters": [ + "bertose.py", + "embed.py", + "check_release.py" + ], + "training_semantics_changed": false +} diff --git a/releases/2026-10-02/provenance/local_checks.json b/releases/2026-10-02/provenance/local_checks.json new file mode 100644 index 0000000000000000000000000000000000000000..e778453f6074a556064eb99be5623a0c6d5efa5d --- /dev/null +++ b/releases/2026-10-02/provenance/local_checks.json @@ -0,0 +1,121 @@ +{ + "schema": "bertose_local_code_checks_v1", + "status": "PASS_WITH_REAL_CHECKPOINT_INFERENCE_PENDING", + "environment": { + "python": "3.12.4", + "pytorch": "2.9.1", + "numpy": "1.26.4", + "pandas": "2.3.3", + "scipy": "1.16.3", + "tqdm": "4.67.1", + "device": "cpu", + "threads_for_model_checks": 2, + "h5py": "3.16.0 from pre-existing isolated dependency directory for trainer CLI import" + }, + "checks": { + "copied_source_hashes": { + "status": "PASS", + "count": 473 + }, + "python_compile": { + "status": "PASS", + "count": 157 + }, + "native_encoder_meta_schema": { + "status": "PASS", + "state_entries": 209, + "schema_sha256": "21ec95377ac8e66c5e832bfe8f3357123951b7ea235b2d78989fe9fbaa42e129" + }, + "tokenizer": { + "status": "PASS", + "vocabulary_size": 2114, + "two_examples_tokens": [ + 4, + 7 + ], + "unknown_tokens": [ + 0, + 0 + ], + "tree_channels_valid": [ + true, + true + ], + "non_WURCS_rejected": true, + "over_256_tokens_rejected_without_truncation": true + }, + "synthetic_sequence_and_md": { + "status": "PASS", + "source_authorities": 12, + "full_parameters_meta": 138487995, + "state_elements_meta": 138488535, + "sequence_forward": true, + "three_MD_masked_windows_per_child": true + }, + "synthetic_binding_model": { + "status": "PASS", + "encoder_entries_preserved": 209, + "positions_preserved": true, + "full_parameters_meta": 100209318, + "trainable_parameters_meta": 66330534, + "native_adapter_max_abs_delta": 1.1920928955078125e-06, + "atol_rtol": 1e-05, + "zero_motif_initial_output_bit_equal": true, + "motif_gradient_nonzero": true, + "frozen_first_four_layers_preserved": true + }, + "saved_iar_readout": { + "status": "PASS", + "readout_sha256": "a03990a02a1737de05a7fa1739164e84fa6a0a4170ebaa65317a9f3c2f16c0b0", + "weight_shape": [ + 211, + 768 + ], + "classes_verified": 211, + "upstream_encoder_loaded": false + }, + "scorer_fixture": { + "status": "PASS", + "rows": 10, + "eligible_assays": 2, + "macro_spearman": 0.49999999999999994 + }, + "embed_cli_help": { + "status": "PASS" + }, + "binding_trainer_cli_help": { + "status": "PASS" + }, + "benchmark_exclusion_cli_help": { + "status": "PASS", + "entrypoints": 4, + "networkx": "3.5" + }, + "binding_analysis_package": { + "status": "PASS", + "file_hashes": 187, + "check_scope": "copied-file identity and Python syntax", + "saved_summary_reproduction": "PASS" + }, + "original_submission_iar_check_package": { + "status": "PASS", + "file_hashes": 36, + "compiled_sources": 20, + "upstream_encoder_loaded": false, + "full_pipeline_rerun": false + }, + "real_sequence_export_inference": { + "status": "PENDING_WEIGHTS", + "reason": "No authenticated remote weight retrieval at preparation time; no inference claim from synthetic checks" + } + }, + "not_performed": [ + "Training", + "Full multimodal inference", + "Complete IAR case replay", + "Benchmark metric reproduction", + "Fresh environment installation", + "GPU equivalence", + "Publishing or upload" + ] +} diff --git a/releases/2026-10-02/provenance/local_test_environment.json b/releases/2026-10-02/provenance/local_test_environment.json new file mode 100644 index 0000000000000000000000000000000000000000..2b53362766552e874a65eaff5e2669d14615f0ce --- /dev/null +++ b/releases/2026-10-02/provenance/local_test_environment.json @@ -0,0 +1,17 @@ +{ + "python": "3.12.4", + "executable": "/opt/homebrew/opt/python@3.12/bin/python3.12", + "platform": "macOS-26.3.1-arm64-arm-64bit", + "scope": "local source/synthetic verification environment; not the historical Nova training environment", + "packages": { + "torch": "2.9.1", + "numpy": "1.26.4", + "pandas": "2.3.3", + "scipy": "1.16.3", + "scikit-learn": "1.7.2", + "h5py": "3.16.0" + }, + "missing_for_full_dataset_import": [], + "isolated_dependency_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/code_work/test_dependencies", + "affinose_training_cli_help": "PASS; imports training and dataset modules without loading inputs or training" +} diff --git a/releases/2026-10-02/provenance/moconf_cells.tsv b/releases/2026-10-02/provenance/moconf_cells.tsv new file mode 100644 index 0000000000000000000000000000000000000000..c7651b2f4e3f86ed1245854e9d31a1e0891d0384 --- /dev/null +++ b/releases/2026-10-02/provenance/moconf_cells.tsv @@ -0,0 +1,3 @@ +cell_id csv_path roles_tsv protein_emb protein_dim train_stratum val_stratum test_stratum expected_train_rows expected_val_rows expected_test_rows seal seed +moc_A_glycan_s43 /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_binding.csv /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_roles.tsv.gz /work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5 960 fit_train val_glycan_cold val_glycan_cold 484491 36745 36745 moA_glycan 43 +moc_A_glycan_s44 /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_binding.csv /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_roles.tsv.gz /work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5 960 fit_train val_glycan_cold val_glycan_cold 484491 36745 36745 moA_glycan 44 diff --git a/releases/2026-10-02/provenance/mofull_cells.tsv b/releases/2026-10-02/provenance/mofull_cells.tsv new file mode 100644 index 0000000000000000000000000000000000000000..da180f4fca8aba5ccd4c5154be5b9823b1bb5f6c --- /dev/null +++ b/releases/2026-10-02/provenance/mofull_cells.tsv @@ -0,0 +1,5 @@ +cell_id csv_path roles_tsv protein_emb protein_dim train_stratum val_stratum test_stratum expected_train_rows expected_val_rows expected_test_rows seal seed +mof_B_protein_s43 /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_binding.csv /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_roles.tsv.gz /work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5 960 fit_train val_protein_cold val_protein_cold 480431 39477 39477 moB_protein 43 +mof_B_protein_s44 /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_binding.csv /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_roles.tsv.gz /work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5 960 fit_train val_protein_cold val_protein_cold 480431 39477 39477 moB_protein 44 +mof_C_doubly_s43 /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_binding.csv /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_roles.tsv.gz /work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5 960 fit_train val_doubly_cold val_doubly_cold 406483 3822 3822 moC_doubly 43 +mof_C_doubly_s44 /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_binding.csv /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_roles.tsv.gz /work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5 960 fit_train val_doubly_cold val_doubly_cold 406483 3822 3822 moC_doubly 44 diff --git a/releases/2026-10-02/provenance/motif_cells.tsv b/releases/2026-10-02/provenance/motif_cells.tsv new file mode 100644 index 0000000000000000000000000000000000000000..99601d74716fe5b9df8896e31ba80b1e3ccea4f9 --- /dev/null +++ b/releases/2026-10-02/provenance/motif_cells.tsv @@ -0,0 +1,4 @@ +cell_id csv_path roles_tsv protein_emb protein_dim train_stratum val_stratum test_stratum expected_train_rows expected_val_rows expected_test_rows seal seed +mo_A_glycan_s42 /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_binding.csv /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_A_glycan_roles.tsv.gz /work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5 960 fit_train val_glycan_cold val_glycan_cold 484491 36745 36745 moA_glycan 42 +mo_B_protein_s42 /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_binding.csv /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_B_protein_roles.tsv.gz /work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5 960 fit_train val_protein_cold val_protein_cold 480431 39477 39477 moB_protein 42 +mo_C_doubly_s42 /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_binding.csv /work/ratul1/supantha/Bertint/v2_artifacts/review_affinose_C_doubly_roles.tsv.gz /work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5 960 fit_train val_doubly_cold val_doubly_cold 406483 3822 3822 moC_doubly 42 diff --git a/releases/2026-10-02/provenance/portable_execution_20260930/binding_portable_report.json b/releases/2026-10-02/provenance/portable_execution_20260930/binding_portable_report.json new file mode 100644 index 0000000000000000000000000000000000000000..d3c98bf7928a147b9e88529b9954734baca26944 --- /dev/null +++ b/releases/2026-10-02/provenance/portable_execution_20260930/binding_portable_report.json @@ -0,0 +1,670 @@ +{ + "schema": "bertosebind_portable_real_smoke_v1", + "status": "PASS_STRICT_LOAD_AND_TINY_REAL_CPU_REFERENCE_CHECK", + "scope": "Nine strict fitted-state loads and 18 CPU float32 predictions on six fixed real rows; no metrics.", + "reference_receipt_sha256": "0054f7c7c02b3da1d533446e500f3b5b745892689eee698561f1830a6b1ffa58", + "config_sha256": "07282f0fec34ef2cf9f832c3662227ca89064b52e3fdbe9fd3ad11b5f4e01154", + "reference_json_sha256": "3de9b7e6b9c6035c0e07504b1dadb2c1c430151b7c889c33825a437a5c70e659", + "reference_prediction_atol": 2e-06, + "reference_prediction_rtol": 0.0, + "models": [ + { + "cell_id": "mo_A_glycan_s42", + "regime": "test_glycan_cold", + "seed": 42, + "checkpoint": { + "path": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mo_20260908_mo_A_glycan_s42/best_model.pt", + "bytes": 400940515, + "sha256": "3303250c5aa34f7f20e605dafb138554302baa336598ec84645f196e7f906b52" + }, + "strict_load": true, + "state_entries": 272, + "parameter_count": 100209318, + "device": "cpu", + "precision": "float32", + "upstream_checkpoint_loaded": false, + "prediction": [ + 0.5873219966888428, + 0.45968011021614075 + ], + "prediction_tensor": { + "shape": [ + 2 + ], + "dtype": "float32", + "sha256_c_order_bytes": "0017409eaf9e47aad3b5b80fd7f19dd5a795249e4e207dc9d9c912c63bf87a8c" + }, + "reference_max_abs_difference": 0.0, + "reference_within_tolerance": true + }, + { + "cell_id": "mo_C_doubly_s42", + "regime": "test_doubly_cold", + "seed": 42, + "checkpoint": { + "path": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mo_20260908_mo_C_doubly_s42/best_model.pt", + "bytes": 400940515, + "sha256": "e3872d4768fdcf5aa1d7be070cad8789a427332ba6741fdfa420d1c69f54b321" + }, + "strict_load": true, + "state_entries": 272, + "parameter_count": 100209318, + "device": "cpu", + "precision": "float32", + "upstream_checkpoint_loaded": false, + "prediction": [ + 0.741499662399292, + 0.47093114256858826 + ], + "prediction_tensor": { + "shape": [ + 2 + ], + "dtype": "float32", + "sha256_c_order_bytes": "f8511fd8befcb061cef02d12d6ae175369b363092e26a0acc062ef357bf66fe9" + }, + "reference_max_abs_difference": 0.0, + "reference_within_tolerance": true + }, + { + "cell_id": "mof_B_protein_s43", + "regime": "test_protein_cold", + "seed": 43, + "checkpoint": { + "path": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_B_protein_s43/best_model.pt", + "bytes": 400940515, + "sha256": "f143720e8ebd41ba247ddeac5a5b58971c9cc3c407361b8071cf7dd1c513b57d" + }, + "strict_load": true, + "state_entries": 272, + "parameter_count": 100209318, + "device": "cpu", + "precision": "float32", + "upstream_checkpoint_loaded": false, + "prediction": [ + 0.5591476559638977, + 0.44217923283576965 + ], + "prediction_tensor": { + "shape": [ + 2 + ], + "dtype": "float32", + "sha256_c_order_bytes": "1f19f386e0f73440f96e125d5c904649c222b93300932b8610d10f9425441af5" + }, + "reference_max_abs_difference": 0.0, + "reference_within_tolerance": true + }, + { + "cell_id": "mof_B_protein_s44", + "regime": "test_protein_cold", + "seed": 44, + "checkpoint": { + "path": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_B_protein_s44/best_model.pt", + "bytes": 400940515, + "sha256": "d43e1b62ce0b51b874d255544d63088f10735c85e57234eb9c420e8af3af88f1" + }, + "strict_load": true, + "state_entries": 272, + "parameter_count": 100209318, + "device": "cpu", + "precision": "float32", + "upstream_checkpoint_loaded": false, + "prediction": [ + 0.4905407726764679, + 0.32159534096717834 + ], + "prediction_tensor": { + "shape": [ + 2 + ], + "dtype": "float32", + "sha256_c_order_bytes": "8060efc719945dccf964e0ea905da8f4c4e3ca0b7018a7b4371e8ffc1d14b7c7" + }, + "reference_max_abs_difference": 0.0, + "reference_within_tolerance": true + }, + { + "cell_id": "mof_C_doubly_s43", + "regime": "test_doubly_cold", + "seed": 43, + "checkpoint": { + "path": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_C_doubly_s43/best_model.pt", + "bytes": 400940515, + "sha256": "7b56d428df6c91ec02e3fa5aab4df73afba7127f020738548ae37b7048bb66a1" + }, + "strict_load": true, + "state_entries": 272, + "parameter_count": 100209318, + "device": "cpu", + "precision": "float32", + "upstream_checkpoint_loaded": false, + "prediction": [ + 0.7000229358673096, + 0.4825187921524048 + ], + "prediction_tensor": { + "shape": [ + 2 + ], + "dtype": "float32", + "sha256_c_order_bytes": "addcc1b92f836a35ac5ad1504491367b01841797369858c80c97b7278be3cd7e" + }, + "reference_max_abs_difference": 0.0, + "reference_within_tolerance": true + }, + { + "cell_id": "mof_C_doubly_s44", + "regime": "test_doubly_cold", + "seed": 44, + "checkpoint": { + "path": "/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_C_doubly_s44/best_model.pt", + "bytes": 400940515, + "sha256": "509a088a821250e6464c2f696aa1b53cc4f00443c73153c95a18afdfe53a621d" + }, + "strict_load": true, + "state_entries": 272, + "parameter_count": 100209318, + "device": "cpu", + "precision": "float32", + "upstream_checkpoint_loaded": false, + "prediction": [ + 0.7071646451950073, + 0.5201219916343689 + ], + "prediction_tensor": { + "shape": [ + 2 + ], + "dtype": "float32", + "sha256_c_order_bytes": "74def51377b965d38589adf1345b0f28e48a8570fa7f3cfe0b82e47abeea252b" + }, + "reference_max_abs_difference": 0.0, + "reference_within_tolerance": true + }, + { + "cell_id": "mo_B_protein_s42", + "regime": "test_protein_cold", + "seed": 42, + "checkpoint": { + "path": "/work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_mo_B_protein_s42/best_model.pt", + "bytes": 400940515, + "sha256": "ebdc31defe4c7a6d105670626d2da50f7d29026e41c31f24bd5722079bb7a80d" + }, + "strict_load": true, + "state_entries": 272, + "parameter_count": 100209318, + "device": "cpu", + "precision": "float32", + "upstream_checkpoint_loaded": false, + "prediction": [ + 0.4467400312423706, + 0.41338619589805603 + ], + "prediction_tensor": { + "shape": [ + 2 + ], + "dtype": "float32", + "sha256_c_order_bytes": "77387b5c5f2578320fc5d2e353f818447153d3f84adf8d88d7fd4ddda475dc99" + }, + "reference_max_abs_difference": 0.0, + "reference_within_tolerance": true + }, + { + "cell_id": "moc_A_glycan_s43", + "regime": "test_glycan_cold", + "seed": 43, + "checkpoint": { + "path": "/work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_moc_A_glycan_s43/best_model.pt", + "bytes": 400940515, + "sha256": "e2c0bebaaf53894bb928bc6b302c3eacfa5254d9c7301ff47854e98338b97ee3" + }, + "strict_load": true, + "state_entries": 272, + "parameter_count": 100209318, + "device": "cpu", + "precision": "float32", + "upstream_checkpoint_loaded": false, + "prediction": [ + 0.7180902361869812, + 0.49870437383651733 + ], + "prediction_tensor": { + "shape": [ + 2 + ], + "dtype": "float32", + "sha256_c_order_bytes": "5584c77cd95944f729e9098cb0b222caf37c8088d517d9ba76e1e83346c12652" + }, + "reference_max_abs_difference": 0.0, + "reference_within_tolerance": true + }, + { + "cell_id": "moc_A_glycan_s44", + "regime": "test_glycan_cold", + "seed": 44, + "checkpoint": { + "path": "/work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_moc_A_glycan_s44/best_model.pt", + "bytes": 400940515, + "sha256": "c4adf409efbb985b1fceee6a398ac8be0c84946ea354791c95ae835ae59e67a4" + }, + "strict_load": true, + "state_entries": 272, + "parameter_count": 100209318, + "device": "cpu", + "precision": "float32", + "upstream_checkpoint_loaded": false, + "prediction": [ + 0.6938773989677429, + 0.5553831458091736 + ], + "prediction_tensor": { + "shape": [ + 2 + ], + "dtype": "float32", + "sha256_c_order_bytes": "b54b95796d478093173470505a0e256e189fbe18576a29689f8eb8db11029129" + }, + "reference_max_abs_difference": 0.0, + "reference_within_tolerance": true + } + ], + "runtime": { + "python": "3.10.16", + "torch": "2.9.1+cu128", + "numpy": "2.2.6", + "h5py": "3.16.0", + "device": "cpu", + "precision": "float32", + "threads": 4 + }, + "input_assets": { + "token_ids": { + "path": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1/review_token_ids.npy", + "bytes": 2009728, + "sha256": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd" + }, + "residue_ids": { + "path": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1/review_residue_ids.npy", + "bytes": 2009728, + "sha256": "ed6b472942d223ab1f17d1f6bfe7e9962e8b10e13e3d9c109a10a45c57d76fbf" + }, + "branch_depths": { + "path": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1/review_branch_depths.npy", + "bytes": 1004928, + "sha256": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086" + }, + "linkage_types": { + "path": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1/review_linkage_types.npy", + "bytes": 1004928, + "sha256": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f" + }, + "attention_mask": { + "path": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1/review_attention_mask.npy", + "bytes": 1004928, + "sha256": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282" + }, + "tree_channels_valid": { + "path": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1/review_tree_channels_valid.npy", + "bytes": 4053, + "sha256": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c" + }, + "motif_features": { + "path": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1/review_motif_features.npy", + "bytes": 2590628, + "sha256": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2" + }, + "feature_index": { + "path": "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1/review_affinose_glycan_index.tsv.gz", + "bytes": 58028, + "sha256": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d" + }, + "protein_h5": { + "path": "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "bytes": 2329355814, + "sha256": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4" + } + }, + "batches": { + "test_glycan_cold": { + "rows": [ + { + "sample_id": "test_glycan_cold_1", + "feature_row": 3482, + "protein_h5_key": "20ff6eff52d545b50f9ceebcc7713912e1c6874aae13b5f064d3b0818f441a07", + "protein_before_bos_eos_shape": [ + 368, + 960 + ], + "protein_after_bos_eos_and_truncation": { + "shape": [ + 366, + 960 + ], + "dtype": "float32", + "sha256_c_order_bytes": "d63a11d35969a76e88d94329f5050b93830811ab68a8f9d186dfa518f8256cc8" + }, + "motif_nonzero": 5 + }, + { + "sample_id": "test_glycan_cold_2", + "feature_row": 2438, + "protein_h5_key": "20ff6eff52d545b50f9ceebcc7713912e1c6874aae13b5f064d3b0818f441a07", + "protein_before_bos_eos_shape": [ + 368, + 960 + ], + "protein_after_bos_eos_and_truncation": { + "shape": [ + 366, + 960 + ], + "dtype": "float32", + "sha256_c_order_bytes": "d63a11d35969a76e88d94329f5050b93830811ab68a8f9d186dfa518f8256cc8" + }, + "motif_nonzero": 3 + } + ], + "tensors": { + "token_ids": { + "shape": [ + 2, + 256 + ], + "dtype": "int64", + "sha256_c_order_bytes": "69673bdffe2e4133d4e6e05df90681c63ad2a51c6111690f09964d1a1c56adf7" + }, + "attention_mask": { + "shape": [ + 2, + 256 + ], + "dtype": "float32", + "sha256_c_order_bytes": "72839edbc9598b0738bf6e4da21564b1df69bf570f57de1769b31e244e032570" + }, + "branch_depths": { + "shape": [ + 2, + 256 + ], + "dtype": "int64", + "sha256_c_order_bytes": "569494ae56bce317204e3bcd507ad7b77bcf7a7aa191cff6cad00884dc4f1c67" + }, + "linkage_types": { + "shape": [ + 2, + 256 + ], + "dtype": "int64", + "sha256_c_order_bytes": "a696cb98e14473679ee57175d6bf407443192b0651414541a54b2648239eaf7e" + }, + "motif_features": { + "shape": [ + 2, + 165 + ], + "dtype": "float32", + "sha256_c_order_bytes": "129ec4be27a71c13c9e29cd5fff3486d9c0bb14238de95de300b4f8de0963a29" + }, + "protein_emb": { + "shape": [ + 2, + 366, + 960 + ], + "dtype": "float32", + "sha256_c_order_bytes": "d7c8ebc6150aa22a384e96653f37aeb8fd69565ae09cf348632b88b338abfd87" + }, + "protein_mask": { + "shape": [ + 2, + 366 + ], + "dtype": "float32", + "sha256_c_order_bytes": "d7e656b925e52badfd4a920eccf167ef26bdfff1c2f97ed858fffc59f7a68aa8" + }, + "has_conc": { + "shape": [ + 2 + ], + "dtype": "float32", + "sha256_c_order_bytes": "af5570f5a1810b7af78caf4bc70a660f0df51e42baf91d4de5b2328de0e83dfc" + }, + "log_conc": { + "shape": [ + 2 + ], + "dtype": "float32", + "sha256_c_order_bytes": "af5570f5a1810b7af78caf4bc70a660f0df51e42baf91d4de5b2328de0e83dfc" + } + } + }, + "test_protein_cold": { + "rows": [ + { + "sample_id": "test_protein_cold_1", + "feature_row": 383, + "protein_h5_key": "5e12f5352b18bad814861826ba83fc7bee43e1fe3f5339dfe3334db6c0b4c97d", + "protein_before_bos_eos_shape": [ + 497, + 960 + ], + "protein_after_bos_eos_and_truncation": { + "shape": [ + 495, + 960 + ], + "dtype": "float32", + "sha256_c_order_bytes": "48140ea93469139590bf3c3827c1db2024fcfd90aa2747866bf54f3239a2e705" + }, + "motif_nonzero": 0 + }, + { + "sample_id": "test_protein_cold_2", + "feature_row": 2313, + "protein_h5_key": "5e12f5352b18bad814861826ba83fc7bee43e1fe3f5339dfe3334db6c0b4c97d", + "protein_before_bos_eos_shape": [ + 497, + 960 + ], + "protein_after_bos_eos_and_truncation": { + "shape": [ + 495, + 960 + ], + "dtype": "float32", + "sha256_c_order_bytes": "48140ea93469139590bf3c3827c1db2024fcfd90aa2747866bf54f3239a2e705" + }, + "motif_nonzero": 1 + } + ], + "tensors": { + "token_ids": { + "shape": [ + 2, + 256 + ], + "dtype": "int64", + "sha256_c_order_bytes": "a5e82e33b3270bd0c8e0aa3543f13217416bae2af7eeb5b087e5f73f0e1c0727" + }, + "attention_mask": { + "shape": [ + 2, + 256 + ], + "dtype": "float32", + "sha256_c_order_bytes": "8e4bc244acd401dfe2a08fa44ba71ee2cac6b3b6dff493608646cca347c05584" + }, + "branch_depths": { + "shape": [ + 2, + 256 + ], + "dtype": "int64", + "sha256_c_order_bytes": "7bd8f38cb3eb3b928985bb32aaf5d22b976a02a623ec1ce91132f07b3f2971b5" + }, + "linkage_types": { + "shape": [ + 2, + 256 + ], + "dtype": "int64", + "sha256_c_order_bytes": "63def9b8455797cb5f170eb4db45542fe3b03cd3d4fd5a61a4919b9a846ea6d4" + }, + "motif_features": { + "shape": [ + 2, + 165 + ], + "dtype": "float32", + "sha256_c_order_bytes": "ef654686e780bdb241f739a0ab223e331332cd646fd926ff6fd0ab54006304bc" + }, + "protein_emb": { + "shape": [ + 2, + 495, + 960 + ], + "dtype": "float32", + "sha256_c_order_bytes": "4f7717a19ea6ff7e123620b9c4f529e81dbb992ccb60b48e599208a783ade8df" + }, + "protein_mask": { + "shape": [ + 2, + 495 + ], + "dtype": "float32", + "sha256_c_order_bytes": "a234b2f972caa4b2be9a6d06b2ad74a52726a5a9107364536630b40537ddb34f" + }, + "has_conc": { + "shape": [ + 2 + ], + "dtype": "float32", + "sha256_c_order_bytes": "af5570f5a1810b7af78caf4bc70a660f0df51e42baf91d4de5b2328de0e83dfc" + }, + "log_conc": { + "shape": [ + 2 + ], + "dtype": "float32", + "sha256_c_order_bytes": "af5570f5a1810b7af78caf4bc70a660f0df51e42baf91d4de5b2328de0e83dfc" + } + } + }, + "test_doubly_cold": { + "rows": [ + { + "sample_id": "test_doubly_cold_1", + "feature_row": 3482, + "protein_h5_key": "5e12f5352b18bad814861826ba83fc7bee43e1fe3f5339dfe3334db6c0b4c97d", + "protein_before_bos_eos_shape": [ + 497, + 960 + ], + "protein_after_bos_eos_and_truncation": { + "shape": [ + 495, + 960 + ], + "dtype": "float32", + "sha256_c_order_bytes": "48140ea93469139590bf3c3827c1db2024fcfd90aa2747866bf54f3239a2e705" + }, + "motif_nonzero": 5 + }, + { + "sample_id": "test_doubly_cold_2", + "feature_row": 2438, + "protein_h5_key": "5e12f5352b18bad814861826ba83fc7bee43e1fe3f5339dfe3334db6c0b4c97d", + "protein_before_bos_eos_shape": [ + 497, + 960 + ], + "protein_after_bos_eos_and_truncation": { + "shape": [ + 495, + 960 + ], + "dtype": "float32", + "sha256_c_order_bytes": "48140ea93469139590bf3c3827c1db2024fcfd90aa2747866bf54f3239a2e705" + }, + "motif_nonzero": 3 + } + ], + "tensors": { + "token_ids": { + "shape": [ + 2, + 256 + ], + "dtype": "int64", + "sha256_c_order_bytes": "69673bdffe2e4133d4e6e05df90681c63ad2a51c6111690f09964d1a1c56adf7" + }, + "attention_mask": { + "shape": [ + 2, + 256 + ], + "dtype": "float32", + "sha256_c_order_bytes": "72839edbc9598b0738bf6e4da21564b1df69bf570f57de1769b31e244e032570" + }, + "branch_depths": { + "shape": [ + 2, + 256 + ], + "dtype": "int64", + "sha256_c_order_bytes": "569494ae56bce317204e3bcd507ad7b77bcf7a7aa191cff6cad00884dc4f1c67" + }, + "linkage_types": { + "shape": [ + 2, + 256 + ], + "dtype": "int64", + "sha256_c_order_bytes": "a696cb98e14473679ee57175d6bf407443192b0651414541a54b2648239eaf7e" + }, + "motif_features": { + "shape": [ + 2, + 165 + ], + "dtype": "float32", + "sha256_c_order_bytes": "129ec4be27a71c13c9e29cd5fff3486d9c0bb14238de95de300b4f8de0963a29" + }, + "protein_emb": { + "shape": [ + 2, + 495, + 960 + ], + "dtype": "float32", + "sha256_c_order_bytes": "4f7717a19ea6ff7e123620b9c4f529e81dbb992ccb60b48e599208a783ade8df" + }, + "protein_mask": { + "shape": [ + 2, + 495 + ], + "dtype": "float32", + "sha256_c_order_bytes": "a234b2f972caa4b2be9a6d06b2ad74a52726a5a9107364536630b40537ddb34f" + }, + "has_conc": { + "shape": [ + 2 + ], + "dtype": "float32", + "sha256_c_order_bytes": "af5570f5a1810b7af78caf4bc70a660f0df51e42baf91d4de5b2328de0e83dfc" + }, + "log_conc": { + "shape": [ + 2 + ], + "dtype": "float32", + "sha256_c_order_bytes": "af5570f5a1810b7af78caf4bc70a660f0df51e42baf91d4de5b2328de0e83dfc" + } + } + } + } +} diff --git a/releases/2026-10-02/provenance/portable_execution_20260930/code_snapshot_manifest.json b/releases/2026-10-02/provenance/portable_execution_20260930/code_snapshot_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..dd0f85b159c5788e4107faf878d18bb093ea2a3f --- /dev/null +++ b/releases/2026-10-02/provenance/portable_execution_20260930/code_snapshot_manifest.json @@ -0,0 +1,2587 @@ +{ + "schema": "portable_public_code_execution_snapshot_v1", + "archive_sha256": "1eed149a11ec9c7f1438f5fadd68580365acf62fda14e6e89bacfd93265579b4", + "files": [ + { + "path": ".gitattributes", + "sha256": "87c07b5f72ac341f0eb42c040e0617c9512c4ec9f89a20790580d01d473f1b99", + "bytes": 83 + }, + { + "path": ".gitignore", + "sha256": "6f8f72cd77c10018fd9f9666bad581556097a04a67d11e3e831ef21bb250f25b", + "bytes": 44 + }, + { + "path": "LICENSE", + "sha256": "a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9", + "bytes": 10173 + }, + { + "path": "NOTICE", + "sha256": "b6c446fc86540a7a2c432368a5987ed15d622820a0b1bdf45c7cd7273b9bcad0", + "bytes": 1024 + }, + { + "path": "README.md", + "sha256": "5359d4ecad32584733cd0f5c496824e0140e010c4baa333e0cdfe6b504c56552", + "bytes": 6758 + }, + { + "path": "SHA256SUMS", + "sha256": "482c677d00369ed554dfd508a7f193712bfe8d1b4c9197613dac78e647efef9b", + "bytes": 78335 + }, + { + "path": "affinose/a1111_encoder_adapter.py", + "sha256": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "bytes": 6455 + }, + { + "path": "affinose/a5_tokenizer_shim.py", + "sha256": "c4bbe5c1a0286b319f0b71c87669b4f9cfe781051019fb02a98b5d7e208b8b2b", + "bytes": 2798 + }, + { + "path": "affinose/bertint_v8.py", + "sha256": "7fa8d6fe95db3ccecefdd396931d6354442800cd5284cabf519e3425cc388883", + "bytes": 38450 + }, + { + "path": "affinose/dataset_v8.py", + "sha256": "27e7fe6820357551e9e09a135db4a9d2cff5c4382f5396912dced12c54aaa288", + "bytes": 15495 + }, + { + "path": "affinose/training_v8.py", + "sha256": "82d1d55ed231740fff88065cff7eb9bc45907d69f7c96beebf7eb5fa6e1ae52d", + "bytes": 42227 + }, + { + "path": "benchmark_exclusion/MANIFEST_SHA256.tsv", + "sha256": "8452e3ac521af1d3ea24bb5a99e02a930d913fc96394e5610fe8b86e19ea89ec", + "bytes": 1248 + }, + { + "path": "benchmark_exclusion/README.md", + "sha256": "96567c3b9c3e254bceb6bd82e43c1f252b987ced58dad41d3b4406b9f58a76ec", + "bytes": 7784 + }, + { + "path": "benchmark_exclusion/SHA256SUMS", + "sha256": "3d37d993b1cd4135ca9fe90feca856b73907d725516ea652425ca24060769698", + "bytes": 1332 + }, + { + "path": "benchmark_exclusion/code_inventory.tsv", + "sha256": "e2e0dfa7d133362146de10ba3dd774e9a3e186088f976189b0aae9d26b442bc4", + "bytes": 1965 + }, + { + "path": "benchmark_exclusion/required_successor_inputs.json", + "sha256": "050c0af96f133ded3139baf6dfea594f91c6659f411dc25fc06d5847951b2f0c", + "bytes": 14147 + }, + { + "path": "benchmark_exclusion/source_verification.json", + "sha256": "0507537ca8ee05b249f9ab3f3fa09de94b7acc633b91235f2778ae07659096bd", + "bytes": 8601 + }, + { + "path": "benchmark_exclusion/writing/review/glytoucan/scripts/build_connection_level_support_audit.py", + "sha256": "3d598a249db90c928f8a317923ba5d37eebbc1f63383a2c39e0541f20c31ccac", + "bytes": 21842 + }, + { + "path": "benchmark_exclusion/writing/review/multimodal/scripts/build_p1_direct_local_neighbor_audit_20260710.py", + "sha256": "a9160769759c1df56238caad6a9f4ed6ec68477d44435ebbc81d64bbf541b64c", + "bytes": 36975 + }, + { + "path": "benchmark_exclusion/writing/review/multimodal/scripts/build_p1_non_iar_exact_graph_authority_20260711.py", + "sha256": "0f88f53e22d0c068a87a09508a9d286e4982eddcb4e2154e63b2ca25339ece69", + "bytes": 15043 + }, + { + "path": "benchmark_exclusion/writing/review/multimodal/scripts/build_review_a5_non_iar_later_role_successor_20260720.py", + "sha256": "2c8821586df1caa53556b4cc14e6cd7507af4830aa8a149657571e0455eb6853", + "bytes": 38441 + }, + { + "path": "benchmark_exclusion/writing/review/multimodal/scripts/repartition_a5_non_iar_80_20_20260712.py", + "sha256": "cd86a0a0b228c32e51ec73490711e37da3e6c9fdf9e64e980b7222b5312484aa", + "bytes": 14084 + }, + { + "path": "benchmark_exclusion/writing/review/multimodal/tests/test_build_review_a5_non_iar_later_role_successor_20260720.py", + "sha256": "966889118fa567729e1959750b1601018ba117aed0bfad3508005ba6b1896a08", + "bytes": 7856 + }, + { + "path": "bertose.py", + "sha256": "92a9fb830e7adfad3d6999bd3b0cd73f2d5414934c65521a3ee7c6f59003a66d", + "bytes": 6617 + }, + { + "path": "bertose_source/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py", + "sha256": "0bc54399362945601bcfd403441fc80968d173200dd0561f57568b2053a94839", + "bytes": 27983 + }, + { + "path": "bertose_source/bert_training_v4/model/__init__.py", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "bertose_source/bert_training_v4/model/glycan_bert.py", + "sha256": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "bytes": 11024 + }, + { + "path": "bertose_source/bert_training_v4/model/multimodal_glycan_bert_v3.py", + "sha256": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "bytes": 45625 + }, + { + "path": "bertose_source/data/bpe_vocabulary.json", + "sha256": "8a7f8569ff3a21513723d3a15e969120f0fdcf352943dbbadfdc54afd382149e", + "bytes": 43547 + }, + { + "path": "bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_authority.json", + "sha256": "48914855c4e458ff02452ad4db3743a4fbef12221e0313584db4c2b1bd684cd4", + "bytes": 20541 + }, + { + "path": "bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_independent_certificate.json", + "sha256": "53098620a5c22dafdc951ba743515b4b10b1673c02f0aa4d881db669584902fa", + "bytes": 19121 + }, + { + "path": "bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_receipt.json", + "sha256": "f654177eb6fde7289b6755812c2be298084697cf0d85159b3ec9da310fe3d4b4", + "bytes": 6260 + }, + { + "path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "bytes": 138150 + }, + { + "path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py", + "sha256": "10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04", + "bytes": 11405 + }, + { + "path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py", + "sha256": "f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7", + "bytes": 6186 + }, + { + "path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py", + "sha256": "6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4", + "bytes": 14161 + }, + { + "path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_receipt.json", + "sha256": "399df3de2b6c4d5e88aa442c8326214ab9cff2e8f0411e6921762bbade1475ba", + "bytes": 5797 + }, + { + "path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_summary.json", + "sha256": "93ed219d807d4a7735be96bf7cf6a59a0bd407619925ee194aed6d473048cdf0", + "bytes": 7777 + }, + { + "path": "bertose_source/model/glycan_bert.py", + "sha256": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "bytes": 11024 + }, + { + "path": "bertose_source/model/multimodal_glycan_bert_v3.py", + "sha256": "8e06c32f4e844c3c66f146fd15a075472808a0720c892d0b9683dfd32f15ef0c", + "bytes": 45141 + }, + { + "path": "bertose_source/training/a5_wurcs_bpe.py", + "sha256": "6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4", + "bytes": 14161 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_submission_readback_11767377/review_a5_native_eight_cuda_resume_diagnostic_r5_11767377_terminal_certification_receipt.json", + "sha256": "2a3b28bd980b144eb42f9688f411adfbced054b9e7bad9fac4de37c6180064f8", + "bytes": 4862 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_a5_native_eight_cuda_resume_diagnostic_receipt_r5.json", + "sha256": "6a1bc65c568a17dc45f1102cd122ac43c62a8ee3b28e06ec855577857cc41ce0", + "bytes": 127461 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_checkpoints_r1/review_checkpoint_index.json", + "sha256": "9292c31195a7eddfe9f987a8cfe8cda843b283bb10a1bc8fb1b05d88f82a92d9", + "bytes": 796 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r1/review_a5_native_eight_data_adapter_receipt_r1.json", + "sha256": "cacec838740d64a493c2e56fd1efa8a85ba7d11fce3ec26e40905c33db05e58d", + "bytes": 4132 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_receipt_r2.json", + "sha256": "3b2118e128a5550ba4918b4f4f2c6d8045e319b7cff37b76d74dce6b3220c9f0", + "bytes": 3677 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_receipt_r3.json", + "sha256": "e29df7a91d0c30238abe9155e600fb1b77b0d3d3481f6599d2ca0d2185371b9f", + "bytes": 3016 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_verification_receipt_r1.json", + "sha256": "a92f4b951476e84af006015c97698f07d5e03e7a182c54c82b7d7c5c0e68ffb3", + "bytes": 2659 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4_integrity_receipt.json", + "sha256": "9aa5860bfc032afd82561a6db6f8df1439245b73aa3f7575b2b88836e384a1f9", + "bytes": 5728 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5_integrity_receipt.json", + "sha256": "59a2fd53e9e75f6f8ec258d76e103adb61c908ab0ace6718a348739f5b70d8bd", + "bytes": 3995 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6_integrity_receipt.json", + "sha256": "0c078ce52e2eb6d6feaeb1a1c2af1794ef33aef56aca7959f76a93f39d152692", + "bytes": 3933 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7_integrity_receipt.json", + "sha256": "912bc1391ff66c3fd704e61266de508adcf9ed587d7e136932508029b77cb956", + "bytes": 2968 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_final_binding_r22.json", + "sha256": "d8feaf25a7266a919c42d3a4fd1ad2d105ab088ae79c024edc665dfa29cf758a", + "bytes": 3104 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_launch_config_r22.json", + "sha256": "30082379d47318f5d9e17fafad4aa018e7e9f0f0bf1aac559178d46784fe4b9f", + "bytes": 2514 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/run_review_a5_native_eight_r22.sbatch", + "sha256": "826f3e8167fdd459cff7677b5b69d0f3caf9dababaaa71d9eded6070aa5d93a7", + "bytes": 3603 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_authority_r1.json", + "sha256": "1238f76e5da5184d16d33077bf3e5342033918fadb4eba84242c47cb1b1322cc", + "bytes": 14887 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_receipt_r1.json", + "sha256": "fb65dddf0bc61b4c73b5dc5ec796967e65263e9d7bdc4882e07684e882280fdb", + "bytes": 743 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r3/review_a5_topology_loss_v2.py", + "sha256": "64eaf9174f523ae909c84987049d071bf3869ca8e83919f14f0572ef77b0530e", + "bytes": 8067 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_receipt_r4.json", + "sha256": "654f5b9728c3dfd2588c4b570b0e3a1bcab8feb366af28eeead36f9beb37d921", + "bytes": 2678 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_summary_r4.json", + "sha256": "ccd4b81d3afac8ae789c538e0af332f74f2468d403da1d243fefefd4df013538", + "bytes": 3228 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null.json", + "sha256": "b10556643abf560b9e8622e8ae67936d2d3ca8867433db485e785f31d049a8fb", + "bytes": 3278 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null_receipt.json", + "sha256": "f4eb239f56e472d57dd3a3848c1a6c142e193cb326320ac8bf134b96ac35102a", + "bytes": 1340 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_frozen_sequence_masking_runtime.py", + "sha256": "831bebd2dcf6a8308d01ec62eb6e1132fe7edbbc666c1c83787335acc576b19c", + "bytes": 12583 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_receipt_r1.json", + "sha256": "eae6b3772cd08c65cdc26bdf7ec525742452aad4a35b4d5aa9a7a5936dc3bf73", + "bytes": 1348 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_summary_r1.json", + "sha256": "da7814d20c81c0d072544cfc5761e8fae0292def176d63b863083389c9caa0ff", + "bytes": 8477 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_receipt.json", + "sha256": "ba9591529f3747706fbc169fe8262e23ca31a810473d10c284fb01d9190ebe42", + "bytes": 1166 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_summary.json", + "sha256": "d6b3dad73d8c9cc78a7c721e7969280d0ff6500773402545bc2ff143b125f56c", + "bytes": 6916 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762446_r1.json", + "sha256": "8ff3181d22567728c0a10580c1e775da0714f17561ace81034fc673813f54af6", + "bytes": 2833 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762534_r1.json", + "sha256": "163374c5c6b049908d935f0d92d8f1a1adda761550761db9b2cb423bfb450ee1", + "bytes": 2833 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762446_r2.json", + "sha256": "85711141c9d0e84dee228df84d02df7d4693fb4b85b1ae8163466e208f5e9fd6", + "bytes": 1575 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762534_r3.json", + "sha256": "0d96b7867eeec85dbf14eb8f55b745b7c354edb5d16ac702d17b97bf850c79af", + "bytes": 1575 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762446_r2.json", + "sha256": "f7adbf64e17c3a2afc677b7af9f05e50e37b4d681f38f0fc192634ca0447e4f4", + "bytes": 1391 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762534_r3.json", + "sha256": "6796f0b163dcf21af5dfe3048b53e8d2660fe10290e22222232a6c7f6668396c", + "bytes": 1391 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_cpu_finalization_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_cpu_finalization_execution_r21.json", + "sha256": "be55a87986dd6d80942dcd0b17dd75994145ff4a383596314d5b4ee51972a443", + "bytes": 5306 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_publication_receipt_r4.json", + "sha256": "77ba176a9fab70e75b3c2c423c857d1e266f2021875aea01e15bac3f11f327d1", + "bytes": 9514 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_train_only_null_r4.json", + "sha256": "661d04d76fcf36d116feb117154eac01e6569e377d4245c07653b28696e1227b", + "bytes": 52862 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_later_role_20260721_r1/review_a5_official_ragged_topology_receipt.json", + "sha256": "333ee6f34e69f89e26b810cc565415b89d6874615ea4ac57850371fb159c1b71", + "bytes": 1625 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null.json", + "sha256": "a752ffd350fbe38aa0e6f6b42b76137f4f72d76fa9a7f5d3609bc47c65c552de", + "bytes": 2970 + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null_receipt.json", + "sha256": "dace4cb5df71912f5aa7531bb0ce87db3b63d726b2a12aa41facabf9d54b5c35", + "bytes": 902 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_ms_acquisition_top30_v3_20260721_r3/review_a5_ms_acquisition_top30_runtime_v3.py", + "sha256": "68c0d543c5411276ef56c7072bded4ebda886f46b9fa4ebf3c95c1e54c1a08c6", + "bytes": 43711 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_r2.py", + "sha256": "9f8f167148aa234df413e4c3d4e1846881781c8e5a19bd91b0b178b260a3a537", + "bytes": 102990 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_r3.py", + "sha256": "a76c24cb0a3b904ae95bfda21bdeb2ba96e36293368fe44a218429be2b10d43e", + "bytes": 41304 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_direct_static_bridge_20260724_r1/review_a5_native_eight_direct_static_bridge_r1.py", + "sha256": "c71ba654568a24993bc1733b26b6863b11e5c198c53871a6183b485ab96540f0", + "bytes": 37921 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/review_a5_native_eight_finalization_runtime_r19.py", + "sha256": "b6266553c075e9b85d221a6278d1ef3ab1d26fbce5de70dbcd4569db42653990", + "bytes": 21049 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/run_review_a5_native_eight_training_r19.py", + "sha256": "28d482fbae230c999d84e64a5abd6a1260ae26fb555c92b7d3176afb37cb260a", + "bytes": 6981 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/review_a5_native_eight_finalization_runtime_r22.py", + "sha256": "62f5355ef06cdc56f85214ac251bfa0ed4b19b41a19ab6acac51d644678f0a62", + "bytes": 12841 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/run_review_a5_native_eight_training_r22.py", + "sha256": "cb9a583091912c59f515f46074b04c90dfbe0ebf0fc28d241db980851b180335", + "bytes": 24070 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r1/review_a5_native_eight_hotpath_r1.py", + "sha256": "3b9ada847b1ea3ecf1f12a6566b55fe1a0218b10aed9d5dabf40190cf0e70c4f", + "bytes": 33246 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/load_review_a5_native_eight_hotpath_r2.py", + "sha256": "101559df116319422762f0d7293fe55478b56defcbc1724661696163bb4fc9ae", + "bytes": 4127 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/review_a5_native_eight_hotpath_r2.py", + "sha256": "941f08e0db8bbf2fa61852d4fc218f592fdd63c12f2dafdb70ed3b18e6aedf98", + "bytes": 32821 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/load_review_a5_native_eight_hotpath_r3.py", + "sha256": "e99f4556a8e3b3721d1f9155738d2bf4e9765e43a0e9f7734259e33533ff4b30", + "bytes": 4013 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/review_a5_native_eight_hotpath_r3.py", + "sha256": "a81dd58c727a28b1a383477338e41922a2d746dac5cb33f351b4501ee8c5d0dd", + "bytes": 36449 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/load_review_a5_native_eight_hotpath_r4.py", + "sha256": "662d0766a8d68638480e9c44ca4070387481d43e1c666a20363025cf5b9bc958", + "bytes": 4013 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4.py", + "sha256": "600af4b6b0fab63b7780bb1e6be8233eb28bd0808ff390c3096369afec9c6649", + "bytes": 23798 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/load_review_a5_native_eight_hotpath_r5.py", + "sha256": "864a05e86c5ea91318b11373d2cdffcdd2ddd0777f141cb7ef0305f779a42ea6", + "bytes": 4013 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5.py", + "sha256": "ce4bad9195229341cab0890ed775b78126c17a23d82f2244757f120c12b346c8", + "bytes": 17677 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/load_review_a5_native_eight_hotpath_r6.py", + "sha256": "e2496170942db844e4ebe71d4c098b0d0cf99540d3465ed7e8e9a113469cf7d2", + "bytes": 4013 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6.py", + "sha256": "73b42e5131c64284c6f748ddf81b4d187dcb57f756c88c22240d189f2afc4cef", + "bytes": 17373 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/load_review_a5_native_eight_hotpath_r7.py", + "sha256": "fa9538829ff3ccfaf3d3f4346c7e735c70758661eb6bf3da5eece2e7e96e0fb6", + "bytes": 4013 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7.py", + "sha256": "c0cb618f7856daf24666dbec07ff51b86e3fbd52c073c58bd1b7151122714f47", + "bytes": 20454 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_submission_20260727_r15_preparation/review_a5_native_eight_submission_contract_r15.py", + "sha256": "35c7a13da662f49bec07b63f590c8fb3d9cc4578633a179da42ff2650a2d7865", + "bytes": 29305 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r1/review_a5_native_eight_training_runner_r1.py", + "sha256": "34785bf46f38579e48c3be6326f667a04521cb7d95c1f94c5200d84012b577bf", + "bytes": 97336 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/review_a5_native_eight_training_runner_r2.py", + "sha256": "7e93b13b3212b3c97e30144f3e393a86a13411d5e82fe19bd55d43bc58587e30", + "bytes": 74326 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/run_review_a5_native_eight_training_r2.py", + "sha256": "195dbedfde65c061eb0fca5684270ff95a2bec16732683b1df7f40d91909cc7f", + "bytes": 3684 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/review_a5_native_eight_training_runner_r3.py", + "sha256": "550588ca033718273de2e35825b8b9faffe4a5fb747ff8775fe17bb31050d9be", + "bytes": 25611 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/run_review_a5_native_eight_training_r3.py", + "sha256": "bba69e736a44fbfa6b380089d50b945e93b45d5202fa265b5869ffd378149040", + "bytes": 3515 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/review_a5_native_eight_training_runner_r8.py", + "sha256": "cbc9fc0179ecb1e7c449fa37a574f38ff3e912e13db5c984d87e05e3e347a0e1", + "bytes": 11844 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/run_review_a5_native_eight_training_r8.py", + "sha256": "213afce295408dda11cf3ede98ebff191735a77e1db09b6252cae964caca39e2", + "bytes": 2705 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/review_a5_native_eight_training_runner_r9.py", + "sha256": "4430560565a18da0e68700d60526d3dec15fabd79854111d1e85deb59e2381c8", + "bytes": 7443 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/run_review_a5_native_eight_training_r9.py", + "sha256": "b2bae85c879d2d266ac1e39869c661625958e21c1c3b7299713c8a0b46827ec5", + "bytes": 2739 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r11_certification_gate_candidate/review_a5_native_eight_certification_gate_r11.py", + "sha256": "ce7626823c2980bc21b46a7eec6c1961a87dc5512525e553c49f2c7d57bf0430", + "bytes": 49854 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_final_bindings_r12.py", + "sha256": "a8cfaca102f7c3d0c7936d244ce1e9ed75099e70c0ca3a27943be7ce5587b6e0", + "bytes": 1139 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_training_runner_r12.py", + "sha256": "47e973c7c4ed5bc6686e5d7795b00d3eea5c2da8c2a15fc534a7cc24c1744ee1", + "bytes": 23200 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/run_review_a5_native_eight_training_r12.py", + "sha256": "66270933d1ff23ffe50b800267a4705c905fc423e8e2c929bf642cb5c6c37def", + "bytes": 2332 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_direct_submit_controller_r13.py", + "sha256": "2feb9a90db66ca277fb9e23d079ce8b089a31060e5670961a13b0e5146ed39a8", + "bytes": 31174 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_final_bindings_r13.py", + "sha256": "c30b6b03dae852a4b10c6d01596e977d8a071e738dc3074f1ca0592a50778dd3", + "bytes": 2946 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_training_runner_r13.py", + "sha256": "17cf8ab216b354ec1de7574ebebd7bfe02b5935da605b4131e45c7aa13982d5b", + "bytes": 60696 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/run_review_a5_native_eight_training_r13.py", + "sha256": "a2a0a0d9056c7cd360913a792ff5e3390a190b692d7663c3a6d48a3ee0f180d5", + "bytes": 2544 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/__init__.py", + "sha256": "737b1caa9086f8ac1556c05625d1b5391b8cae58e9d98a7755fa72f44e94c7ba", + "bytes": 74 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_final_bindings_r14.py", + "sha256": "bd6c704239e2bb4898dddda5c86274f41cd5b304b35d584ddfae3884e8bc8503", + "bytes": 5726 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_strict_successor_r14.py", + "sha256": "eda983e1b0c29357eb1b6e2f555f402a83b7176fb857488e9be5f5faed490b2d", + "bytes": 46942 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/__init__.py", + "sha256": "7ef11d9a891d32b0c1bb3ee24016700acd14251ac49448f004a701cdea79ca53", + "bytes": 72 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_bindings_r15.py", + "sha256": "1f21427486260e8b56795f7137f0f7322ae768d80645db6636414e5961aa3224", + "bytes": 2041 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_gate_r15.py", + "sha256": "1556d6e2643edfc80b6b6782164ab47560e259ff55791c50dcffdd9b9afc001f", + "bytes": 41461 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_final_bindings_r16.py", + "sha256": "1287db8472580db69e38d60be8c13beeddb4fdde7958a5b302d072e1226f4de3", + "bytes": 2770 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_release_successor_r16.py", + "sha256": "689db8aaf51d15288f01b196c5ad2fe8ee3ca8aab3ff525695abaa9f25060ff6", + "bytes": 30917 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_balanced_planner_r4.py", + "sha256": "2c985edfe747bae712c41689da8be2abb5096bd97a8771691b3676d3a8af49fd", + "bytes": 25544 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_composite_r4.py", + "sha256": "52a311636e7631b97711aab63aec28e2ada47a446d1aecc1a47921d584f69f9d", + "bytes": 70358 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_balanced_planner_r5.py", + "sha256": "1b9b05c812603db7b216aa989214a3c3715f80032b3a8b82577ae2b9e48f048d", + "bytes": 16021 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_composite_r5.py", + "sha256": "24c35257fc61e1c9c77630d2b0075775a7f46b6500ecb5f175ef8f42bd214e0e", + "bytes": 58459 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_executor_r5.py", + "sha256": "a482a70a2edcb7c9936b091a86a0f7d98714b5bab09a0bdc80cd927f015a46f2", + "bytes": 74648 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_r4_lineage_receipt_r1.json", + "sha256": "b5fbdff168de23676208484ccccc3cc32f613ea411d193e6d8930456e8edeeef", + "bytes": 1716 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r6/review_a5_native_eight_executor_r6.py", + "sha256": "e47e6e9810db0e8ec9d37ce5533f762e287b162f811bfadc347666f5ad78db82", + "bytes": 89792 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r7/review_a5_native_eight_executor_r7.py", + "sha256": "e068a3c233fc3fd94fe3b8618edb9bd8c87fd81b97dff2666206fb870f0f898a", + "bytes": 130802 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r8/review_a5_native_eight_executor_r8.py", + "sha256": "60ab4de6bc1ee151e9da2c312c41079638e11469502e8136ede51be032eac630", + "bytes": 52743 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_failure_release_chain_20260727_r1_preparation/review_a5_native_static_failure_release_gate_r1.py", + "sha256": "ee97bf4e68ddfbf280b7e0f01ce3409c4d4692feafbc9382613bbc5698913fa7", + "bytes": 28699 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_epoch_boundary_resume_20260725_r1/run_review_a5_static_v2_epoch_boundary_resume_r1_scavenger_v100.sbatch", + "sha256": "f420c84258cdf4247fdd766a9e8470bad55bd1f845ebd6640ec70b97b3953e6e", + "bytes": 3389 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_ops_20260721_r2/review_a5_static_v2_checkpoint_store_r2.py", + "sha256": "f2e558c52bf166d6e7f42ecdd92995f2b70c8a174eab8d6814875399fb69732e", + "bytes": 52873 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/review_a5_static_v2_postfit_direct_publication_r2.py", + "sha256": "8e57c17fd43f3894f94f980cf70a0d6d7f183cf04c26780c3fe30c1932bb7abb", + "bytes": 40020 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/run_review_a5_static_v2_postfit_direct_publication_r2.py", + "sha256": "c46a7d4644899a5e7551e2dd5eb30666e01e0f36e2f65a2cd821b8c5565258dc", + "bytes": 2601 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r4_terminal_certification/review_a5_static_v2_terminal_certification_r4.py", + "sha256": "3b9632e840265e1a5c1d226f3fe7fb8cd4c448f810f3826c59e19c25132dd04f", + "bytes": 64464 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/__init__.py", + "sha256": "9429deca8cfb6cb25ef6f79a5b0ee0b91d47657e7f21f61627afd655d08fe7d3", + "bytes": 590 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/review_a5_static_v2_terminal_certification_r5.py", + "sha256": "04d724ee84f67565e2f0229db99006c8f64d2492564643f6e60af25930cf12a1", + "bytes": 101721 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/__init__.py", + "sha256": "bbdce8deb776917ade3704eb5d08b064917f52c76f3f39ee345b3b2938992add", + "bytes": 590 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_production_module_roster_r6.json", + "sha256": "195d41bba2282fdfde77a88f8b0a70eb64b0207d1a9efd42ddaeb873f8ccaeed", + "bytes": 17548 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_terminal_certification_r6.py", + "sha256": "bdb0fa37804531f6446cee9411c9730fde792eb9674054e56b883156f36da4cb", + "bytes": 133704 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/a5_wa345_continuation_manifest_20260819_r1.json", + "sha256": "30b64143eb15688fa1e1c8aeaf3b84eb08a2a65730fa1c996c9ef6f12679d80f", + "bytes": 12190 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/submit_a5_wa345_continuation_20260819_r1.sbatch", + "sha256": "f517b5c99d93103d1212b2153c26be1cc58267c7b2d9bfa747f6d512f0fdadf2", + "bytes": 23262 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/a5_wa345_manifest_20260817_r1.json", + "sha256": "eeebc9c7e2cfc701f3ad47e62696ae2247c8caec93d8b034d5f573b701eab2a1", + "bytes": 9199 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/run_a5_wa345_shim_20260817_r1.py", + "sha256": "5159414381025cf3e2d5e742422c84c292481168af42801c773df4ba12797fb4", + "bytes": 53542 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/submit_a5_wa345_20260817_r1.sbatch", + "sha256": "a090f111df7cc0db09e61ea0a8067882b7cd9bf21d91c53da4115549560b08e7", + "bytes": 19132 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/review_md_temporal_20x6_a1111_wa2_manifest_20260811_r1.json", + "sha256": "600144a7f5b893958d629083a3a9266eec980765218408d2d51db72b73c1e506", + "bytes": 6147 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/run_review_md_temporal_20x6_a1111_wa2_s424344_20260811_r1.py", + "sha256": "dd74253863f39150af4ddc7e8d48c0a366e1f327c30aa50e0748078330b97b85", + "bytes": 39694 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/submit_review_md_temporal_20x6_a1111_wa2_20260811_r1.sbatch", + "sha256": "6ffd2f97706bdf0001b90ca2f8af7ec565b298cc8585444ba6027194d0e378d2", + "bytes": 4774 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/__init__.py", + "sha256": "aa37d1e86bd3a58262f9824ba80993c0f0f280db4d0f4d704ca469dc12ba3df7", + "bytes": 55 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/review_md_temporal_20x6_core_r3.py", + "sha256": "3e96d8092239c2c21f217ad5bae4ee7e07dbe0f7630b213bad468d6b08d3b1c1", + "bytes": 48643 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/run_review_md_temporal_20x6_training_r3.py", + "sha256": "1e446e7e89a39ef01132b9f2a4deb817161f7b376a0fa04c2b11529004f53e8a", + "bytes": 50267 + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260805_r4_dev_memory/run_review_md_temporal_20x6_training_r4.py", + "sha256": "a6a180ae103eaaf68458b298cd4180920a0e88c1724a6ba9a94ef94559e75c5f", + "bytes": 5454 + }, + { + "path": "bertosebind_inference/README.md", + "sha256": "7370cdf9152e66dedd0314d631f1d2c0571b9c7c3895d44f2729b16a704d24b1", + "bytes": 6450 + }, + { + "path": "bertosebind_inference/__init__.py", + "sha256": "81f3da9b814892c3f12b2f7a535284b89f0be07b22bce50a374c8303d6db6c72", + "bytes": 189 + }, + { + "path": "bertosebind_inference/check_real_examples.py", + "sha256": "b7cfcdaf1c902664252f3d2022e290a803892a31618c1290c09c174131036541", + "bytes": 5450 + }, + { + "path": "bertosebind_inference/config.json", + "sha256": "07282f0fec34ef2cf9f832c3662227ca89064b52e3fdbe9fd3ad11b5f4e01154", + "bytes": 5682 + }, + { + "path": "bertosebind_inference/examples/doubly_cold.csv", + "sha256": "d748e004c483597c86cc214ecd43f5c902e3d3ced41d1e9223b555dfa3b9ed58", + "bytes": 587 + }, + { + "path": "bertosebind_inference/examples/glycan_cold.csv", + "sha256": "c50e124eba39a8bb5f08e4d75e54b0f168ff74ee886d7f28e3156b3beba6ad96", + "bytes": 587 + }, + { + "path": "bertosebind_inference/examples/protein_cold.csv", + "sha256": "6d70ea272cb716c7bf001675493496bfe7491add0185c010f83417a8ed607784", + "bytes": 409 + }, + { + "path": "bertosebind_inference/examples/reference.json", + "sha256": "3de9b7e6b9c6035c0e07504b1dadb2c1c430151b7c889c33825a437a5c70e659", + "bytes": 15156 + }, + { + "path": "bertosebind_inference/loader.py", + "sha256": "0c074c3901ac55b737e10a2b316db3c00678e569d151fc3e2192b46bd1662ce6", + "bytes": 10822 + }, + { + "path": "bertosebind_inference/local_checks.json", + "sha256": "e06c540874abbfd72b72b6ee41aa2d35a6d35bf11d26e10714f382d031765b3a", + "bytes": 3501 + }, + { + "path": "bertosebind_inference/predict.py", + "sha256": "fe3f559157a6bc3dd4b59803fb010054c8987f402b6790f488e6cce51bc95d4b", + "bytes": 3495 + }, + { + "path": "bertosebind_new_runs/README.md", + "sha256": "b18eed4c3ad4f0cbdd700e41d6ff7af1f520d26386f76f4573e82332f3e1ea28", + "bytes": 5655 + }, + { + "path": "bertosebind_new_runs/audit_pretraining_exposure.py", + "sha256": "fc4ffac8de965da6250297ee24fa801be2619f1afcc29471204c7e5aead03012", + "bytes": 6235 + }, + { + "path": "bertosebind_new_runs/check_package.py", + "sha256": "2b8be4fcd7ebc98f49e9532415644f457930a1e7700d5c17fdc58a0abd0dd271", + "bytes": 655 + }, + { + "path": "bertosebind_new_runs/executed/local/audit_current_pretraining_exposure.py", + "sha256": "45a366b40a523671427950b83ac2c8a243c96f1bce8527b0af2337a375ff2b15", + "bytes": 6154 + }, + { + "path": "bertosebind_new_runs/executed/local/collect_current_glycan_sets.py", + "sha256": "bdb19bf323c94eacc1943b4345b5b2485dfa50b7ac00a755e8a1dde2f8a4ed74", + "bytes": 1923 + }, + { + "path": "bertosebind_new_runs/executed/local/dc_anatomy.py", + "sha256": "9c9b90f077709c105dd16b706ebcd434dd793177c274eca17b10bc3241f0138b", + "bytes": 17876 + }, + { + "path": "bertosebind_new_runs/executed/remote/aff_attribution_motif.py", + "sha256": "33d41f680cf7a5ae3b98fef4d1ef604f6e12a6a856ec6e90df8bb5a88f336bbe", + "bytes": 14866 + }, + { + "path": "bertosebind_new_runs/executed/remote/aff_attribution_motif.sbatch", + "sha256": "2b89020895eebac8c99366036eebb07dd43c687fe47274dcd1de47d1017548ff", + "bytes": 1616 + }, + { + "path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_A_glycan_gifflarESM.json", + "sha256": "d7f21b8037172e6d42fb65c8169d37b19c385d68dc9cbebadbafe9e930843074", + "bytes": 903 + }, + { + "path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_A_glycan_sweetnetESM.json", + "sha256": "eca94bfbe82bfba95c2086c9c4ffe14091d442017356394ec2e75173cb66810f", + "bytes": 906 + }, + { + "path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_B_protein_gifflarESM.json", + "sha256": "529296c1388651b4451f35829d0caa63e692a96fc88b74ee9b8dc8c1d09136da", + "bytes": 905 + }, + { + "path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_B_protein_sweetnetESM.json", + "sha256": "6f0098947aa4c962f991d1e17acc17707d7cb2eb5e9d6338182d6cfa65d28a2d", + "bytes": 908 + }, + { + "path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_C_doubly_gifflarESM.json", + "sha256": "bf720edacbad09cd04c42df7cf347dd1fe9846a22f307f7be1c38f06e89faa44", + "bytes": 900 + }, + { + "path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_C_doubly_sweetnetESM.json", + "sha256": "1884d744232b56c5edc76e655cf9bd117e43d8d749c98300b528ea6a5e55b75d", + "bytes": 900 + }, + { + "path": "bertosebind_new_runs/executed/remote/affinose_glycan_cold_contamination.json", + "sha256": "0d4458462cd10dae219a9f15eb6dc8129d200a09891bd0b6bf0297cd85c4dae2", + "bytes": 1818 + }, + { + "path": "bertosebind_new_runs/executed/remote/b4_baselines_perrow.py", + "sha256": "61a5ef32482365e37e58bd4aee49ff5dabc2fafa04f4e063f3a0be7c294c84c7", + "bytes": 7176 + }, + { + "path": "bertosebind_new_runs/executed/remote/b4_gif_repeat.sbatch", + "sha256": "a381978d36492bb21cdb7c2a3007c51414b7630dd88016c7a74eb19c48080925", + "bytes": 1648 + }, + { + "path": "bertosebind_new_runs/executed/remote/b4_gif_repeat_compare.py", + "sha256": "7fe6a80de1e7662a916e84b0a679c5579ab7fdcaaace70e1855f7d8face51ca3", + "bytes": 1977 + }, + { + "path": "bertosebind_new_runs/executed/remote/b4_lo_perrow_ckpt.py", + "sha256": "1d0433763d7ad49088e396b435a42f2a12141436db05592778a79938c88a953b", + "bytes": 7705 + }, + { + "path": "bertosebind_new_runs/executed/remote/b4_step1_structure.py", + "sha256": "c82d7fe71d178d78d52ee47d809cd12d0286c48b1375c0c7b8b80fa222858e61", + "bytes": 9872 + }, + { + "path": "bertosebind_new_runs/executed/remote/b4_step3_bootstrap.py", + "sha256": "ab7560abe237da435464a984a4e23925e7ec48d802949f57ef9600b829e6b37d", + "bytes": 19304 + }, + { + "path": "bertosebind_new_runs/executed/remote/b4_step3_bootstrap_r2.py", + "sha256": "6dbbbeb14bb860f6344a93bb65754f540dee8da4ceb3fdc526133c7133dd426c", + "bytes": 19828 + }, + { + "path": "bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_gif_repeat_20260927.json", + "sha256": "50049bf5658f27700205e91d07f40512b8d297a7af11f51fcfbd514df9b59478", + "bytes": 796 + }, + { + "path": "bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step1_structure_20260926.json", + "sha256": "7f9edc64528d5b43d2c464f8f5d4db91c2a133f54364993c7798a2a606bd3427", + "bytes": 16214 + }, + { + "path": "bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step3_bootstrap_20260926.json", + "sha256": "17ab513ec2d9dec6f1e8c9445dfd7500190f99f0e8758b21fbb435b026324f3b", + "bytes": 10624 + }, + { + "path": "bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step3_bootstrap_r2_20260927.json", + "sha256": "6a87e6a8abc926f41ca13b1bb6c81cbf9ea1d04b06e8f39bfdaf847ce55ba235", + "bytes": 48191 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan.yaml", + "sha256": "1ab7793ddb0daa247dc1f75b53356663d2c99e2e279a33207c9dd82f24288d17", + "bytes": 1122 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_gifflar.yaml", + "sha256": "cda3d3e0df11dcbffff287c985039a4abe486a39bb97fe1554851992cbca127e", + "bytes": 1159 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_sweetnet.yaml", + "sha256": "d11d6ca73935a664a9afe9330d07e51b7e95e89e044a1012065ef1780d820381", + "bytes": 1136 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_gifflar.yaml", + "sha256": "dab891f502cb328f8313a9d2971e5d8134472b059fa776409f97f5f59e5d470b", + "bytes": 1159 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_sweetnet.yaml", + "sha256": "875883d0ec38fca1a4995ea76c00db81ba84357fb2ed9a7c0921dbb6c7cf6492", + "bytes": 1136 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein.yaml", + "sha256": "529c3940cfce81ab3d135f25b722d7c302cd83e8540646f041a5d6ba36baebf3", + "bytes": 1126 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_gifflar.yaml", + "sha256": "908379483dc5b2d0655aa7b0a13b33c8b70ba0379852ffc2d848e354ebd9945e", + "bytes": 1164 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_sweetnet.yaml", + "sha256": "57cbf88ddf620ffbec7c4a8167a271ec38da0f94b1d3a4e9fe9769a9a19b8eea", + "bytes": 1141 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_gifflar.yaml", + "sha256": "5e518f2db88c03663eb263a5e4a44e93a3bc43e51c4af6c626cd0da416a18d81", + "bytes": 1164 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_sweetnet.yaml", + "sha256": "50c68416d3d4d72445e61811474179cb552e60d9f8a87f6cc0ed1da32d8b55e8", + "bytes": 1141 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly.yaml", + "sha256": "034ba8bdefc3410b987d7bc380bd24a469a01c912349fef1e35436df2a24c36e", + "bytes": 1122 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_gifflar.yaml", + "sha256": "ed244565f2f81e6c554613718398af97683ad375eb4debb5a61d25855c444368", + "bytes": 1159 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_sweetnet.yaml", + "sha256": "d8ba3e8d83871cdd92548bc8bab1493225cdcbd536c0004ff6b40b48e4e62e40", + "bytes": 1136 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_gifflar.yaml", + "sha256": "2faa1986c043cf5d8b869d316afa0a043d071400c4f2018ba83551332a143f25", + "bytes": 1159 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_sweetnet.yaml", + "sha256": "5fd2cdec3ee4d49f7d7441a037e0a2fbe428b1c0586de88beaf17a2ab67580f1", + "bytes": 1136 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_sweetonly.yaml", + "sha256": "e8fafb98627685ededa4392c5310e149a7dbbe907e37b43da7d20d228961b181", + "bytes": 1592 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/data/utils.py", + "sha256": "ab257b93c23a522dcd99f37b2b802e67c8e3b4ba46b938db6229a6311a77cd39", + "bytes": 6186 + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/train.py", + "sha256": "ab79451e7b51e27d985904a4445fc09b756d759413bb2ebaf8755d177bb3e8ad", + "bytes": 10058 + }, + { + "path": "bertosebind_new_runs/executed/remote/gif_seeds.sbatch", + "sha256": "56bf1e5b11a386d0920b9f50da6288eff222ee1b7f25d772a8a666a2387b2a9d", + "bytes": 2790 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_launch.py", + "sha256": "241d3ca6045610a70ccad8307448b4d57e47810c945f127fef768357e56cdef2", + "bytes": 10473 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "sha256": "e391584ec821c1e86916c6f8c14a6571a550034fd246e1dc0e7d7b3b6d4dbd7e", + "bytes": 572 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "sha256": "35d0ef06a1b9725233ed1e58c74101b7e6a555da48165ed57c9bd71bb5e77315", + "bytes": 175381 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "sha256": "0dae829566b87d0dd00613343bc5a0c49fb1107c0f4834327d8cca71b8932389", + "bytes": 550 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "sha256": "fd6f39dd3bef9326bc1f583bf07a1f9b8f02f846630a0c58c66c7bae70456d59", + "bytes": 175252 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "sha256": "fb07ac7cfcb63c4dd77c7493f4a518e11d268fd5e8d4cf6a849c31552e48369a", + "bytes": 572 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "sha256": "1d9e1b8c6fff12f8603ce8f7e58189da0ae8580e72d3c5bf5ff3893a4f9bce2f", + "bytes": 175505 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "sha256": "4902e83edaa137f55f5fe4f32f32068e94a3f4832630b284048c22b8a099dca6", + "bytes": 550 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "sha256": "b911e06e11968f9d8655ab69619f33a8878759e497eb44498432c341dc6fbdd1", + "bytes": 175410 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "sha256": "75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "sha256": "346d480fa44e31a5a486bfa99c136cc5ddfee27a197194b7fac289de9ba55665", + "bytes": 15294 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "sha256": "75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "sha256": "6a42d5cf20bf64a7b027660beca902ec84a80a1beb73e8aec1e4eb26fbb7c913", + "bytes": 1062 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/hparams.yaml", + "sha256": "75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/metrics.csv", + "sha256": "a71483c34b9d9cd904a6fe241f88af3e30bb3e100a15d666def5b06e4a5c0431", + "bytes": 158739 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "sha256": "2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16", + "bytes": 553 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "sha256": "faee86ceadc7e1dbe6835d44aef8c5d4f810a2cbe224e13202154b52dab92be3", + "bytes": 4108 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml", + "sha256": "2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16", + "bytes": 553 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/metrics.csv", + "sha256": "ed66bf0654eeaabf3b4f5f92e1295abc53a0155095160092ffb47826ff385d1a", + "bytes": 9534 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml", + "sha256": "2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16", + "bytes": 553 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/metrics.csv", + "sha256": "127b095cc67faf26378a247dc7345de56d331537dad375990ed319f684fbde27", + "bytes": 57261 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml", + "sha256": "2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16", + "bytes": 553 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/metrics.csv", + "sha256": "eee99377078178660db1f12c2700b0c46c9d8120db5f445a8d71d3f584cc9fcd", + "bytes": 99720 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "sha256": "0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "sha256": "47b51d96993782f3c9e6117722176941bd2c6d571200d160e28aa654c97c6356", + "bytes": 1418 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "sha256": "0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "sha256": "89d056126636c1fd1fa44d27ecfd57040a9bfc9eec2a76104da0ae07d01680b3", + "bytes": 1474 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/hparams.yaml", + "sha256": "0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/metrics.csv", + "sha256": "c066cdbf7827bdec2f87c15bf95a42e0a23b511bf03338482e4d2b20c149336b", + "bytes": 175499 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "sha256": "1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef", + "bytes": 553 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "sha256": "fe5d987579ac234e8f21bb70e642177e9eccb69493564b7c5895e6abd51f4dc2", + "bytes": 4381 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml", + "sha256": "1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef", + "bytes": 553 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv", + "sha256": "0ecfee6421a63cee0f0537fdb311e44b87227421f637816a0a3ccfd132763d16", + "bytes": 87583 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml", + "sha256": "1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef", + "bytes": 553 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/metrics.csv", + "sha256": "0d313e8557cb13577b34c8e94e0f2c887c11cfa6da6ca36ab2aa5f9d1cc10f22", + "bytes": 41685 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml", + "sha256": "1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef", + "bytes": 553 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/metrics.csv", + "sha256": "5ef2b9552f452e4218b9728c0ed57f7a14ec5068d065c7223e2c6e566e5dafd2", + "bytes": 29032 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "sha256": "781862ff668231f3501e892c7be567e4e3a16709f6b433e97edeadd60ec1e8bf", + "bytes": 572 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "sha256": "e92266239d6445a0de886e5081e433632c6719719f6d536ad31e98045160fcea", + "bytes": 12411 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "sha256": "781862ff668231f3501e892c7be567e4e3a16709f6b433e97edeadd60ec1e8bf", + "bytes": 572 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "sha256": "929a3396f429527836db8368e7908024bf69766e0567636b1f24df8c1c06ea42", + "bytes": 275117 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "sha256": "f7852d23330d3b55e46eec193b3fe411306ea59349de6fa53273294d893dce1c", + "bytes": 550 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "sha256": "1e68c5af1f9c7fe0f1c85d9f3d49fa1104bf3d4c768014154316ee27b94a3cc3", + "bytes": 284563 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "sha256": "987afb2ba2360ff7f2a5a94943d064a7a3e5c902b53e445bc59bc291241e9d9a", + "bytes": 572 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "sha256": "e937607ecc6a7058664faab71728c58ef7a9bba8f6985082bca5d565aef6ec7e", + "bytes": 11292 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "sha256": "987afb2ba2360ff7f2a5a94943d064a7a3e5c902b53e445bc59bc291241e9d9a", + "bytes": 572 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "sha256": "eb420f0ea03bce2075ad4eac9237862ccbecb2c37c02d162d860516f4739b280", + "bytes": 274338 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "sha256": "22796804655424d5977b04b0b171d4da9fba18896eb4928842c4fad6bb7911dd", + "bytes": 550 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "sha256": "30f0105da3f2c579a8261a30ed6c3fcc8308cf9ebc2068f0e71168567e919922", + "bytes": 32118 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml", + "sha256": "22796804655424d5977b04b0b171d4da9fba18896eb4928842c4fad6bb7911dd", + "bytes": 550 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv", + "sha256": "168da3dcbf6ca795bb75ec67b9fc567788637c25875b766cc76b441825e6020c", + "bytes": 251993 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_score_macro.py", + "sha256": "ef833104d5eecd273df7d9f7c39bae4a216b015bde15978ea716f1f864874de4", + "bytes": 14847 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_score_macro_seeds.py", + "sha256": "578635213e1a3eddd61438a6249f14e1a5d2487267286fc459eb77972808e225", + "bytes": 15417 + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_score_perrow.py", + "sha256": "f88bcf303685ea6a075747a12eafa7df041909b9b455d80ea98c2b536aed0de8", + "bytes": 16705 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_attr_motif_16596807.out", + "sha256": "e65e21b8c9c9bd0291a034852f7ab47f826e1f51448d9ea8439b5eb23ed8eb98", + "bytes": 7511 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_b4_grep_16604967.out", + "sha256": "dadfe2c408938645b4138bb011719affdaebe7098060f66354df56da71d0a146", + "bytes": 4542 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_b4_s3_16604914.out", + "sha256": "79eb29df46c44942a2a6ac4313789ebc29e1672bec4512c4f965be5ebb739cc9", + "bytes": 609 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_b4_s3r2_16605803.out", + "sha256": "5d93f96fb6e537c9b802fd1b2d9fe25df41a19800f85ea860246274d2e897d71", + "bytes": 5103 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_0.err", + "sha256": "6c486b37a642549a8dcf924eabd52e2660d88a6ada53ba05aecb91937fd98626", + "bytes": 3771 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_0.out", + "sha256": "7832596dfd62832aadeed39c1acca59643f00ec8dbe812730b49bd1b2ca5150b", + "bytes": 3954 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_1.err", + "sha256": "bf5e3ff79c6b942dca7f35dcb85d0f32081b03875cb4640022fab29dff833b11", + "bytes": 3771 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_1.out", + "sha256": "134b045efbf1f560d0d41fa702ff53b6369fd38235fcef55ca8aaa4615698fed", + "bytes": 3956 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_10.err", + "sha256": "d911a9619dee68a9fc982bb3db253b8e72f12dc1c06d2bc434556211909b2719", + "bytes": 3777 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_10.out", + "sha256": "c079926adcc0d2bce5b591f870208dcd2bef2ea3029aee8950bf0ce44c1105ea", + "bytes": 3998 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_11.err", + "sha256": "5024c4160aeeccd212930b0d959ed0bab4dd7bf593b61b26decd78c7513aa638", + "bytes": 4168 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_11.out", + "sha256": "4d110e939761ff4d8c7938c754e182d2c09ede84c8360d10ce18a04280dafea6", + "bytes": 4229 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_2.err", + "sha256": "d9383fa7e0469a436e08d24f4f9af31c1a6fb9ebb5e115843b53e2b2ded612f1", + "bytes": 3777 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_2.out", + "sha256": "0bbeab27824eeffbbfe5cf04317d1795b1f8f02d4c5ad9b7dbc23e159a823940", + "bytes": 3992 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_3.err", + "sha256": "735f42f273046b3af0374283927429fa75a1b7a8b66d6b205a20e4e1cfd59eed", + "bytes": 3777 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_3.out", + "sha256": "dcdbc088e7945d0f63803ac95aed81f3f8c8d25c97dd760df269921a08bacae7", + "bytes": 3997 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_4.err", + "sha256": "98912251710582e65eaed2ba01ee184d957d177ec31e30969939b4ef0962a2bf", + "bytes": 4166 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_4.out", + "sha256": "b1febe3591a887bd63d7bb607536ce17bdab51eb9db9a8b8c3d9d5ff77aca1c2", + "bytes": 4182 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_5.err", + "sha256": "cbb38c7fc50100cfa44cdf9b64de3df9a002613c62d8489b9d3db301406712c7", + "bytes": 3775 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_5.out", + "sha256": "a1b8f17ba63285c54d42ad49ce61bf8356ac4dfe279de8b65f687304783bdf55", + "bytes": 3956 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_6.err", + "sha256": "8ec18cd103ee2f80b2bacc8660a53588ed6313dbdc2455fe87fb5cdac6d30ef1", + "bytes": 4178 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_6.out", + "sha256": "18050c22347d3a2900b0d15cd7f2b97c1f6028ff27e5e060fc33c8308851b358", + "bytes": 4226 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_7.err", + "sha256": "1a1baefb3f9d8bae9c38975310f96004470e75bed27b32b5273b31a9baca05f5", + "bytes": 4178 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_7.out", + "sha256": "8869a90d89089a6f26c7d88b1a389630930c35adff10016a015bc5bb331308b7", + "bytes": 4229 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_8.err", + "sha256": "01b633582a3ed13728f688fde16693926778896ba0952506cce66072f600f354", + "bytes": 4156 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_8.out", + "sha256": "8f468cb20588f01bc0794c43ea69d5fa78627f4e35ef7ecdb7ffbcd3266c78c3", + "bytes": 4184 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_9.err", + "sha256": "a3ea46d3bd9191b9bbd49627cbfdac0dee312230e5e1ed93016f98f8786b94ba", + "bytes": 4600 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_9.out", + "sha256": "313f8c5e3999dfa75ae508fd57d0d033a00b40cdf2b794cb4c32fb0a901b53bb", + "bytes": 4184 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_0.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_0.out", + "sha256": "19bb18892da4f9174e308bd42908a6e6d383001edd75c9ad482eef111b5bbb31", + "bytes": 2138 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_1.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_1.out", + "sha256": "152af1228aa39534d68470023321d4350bb2ea4b997bfd0bf38efbbeb92bad8b", + "bytes": 2137 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_10.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_10.out", + "sha256": "d842f047adc16782a9724406ecab07aa67fe3ad853f5d0c8bee73cb63d129782", + "bytes": 2141 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_11.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_11.out", + "sha256": "922dfe72fd457b50a6c468db266827346ab1173381458ad61e21ceb5a0c8736c", + "bytes": 2150 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_2.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_2.out", + "sha256": "2b008f6ae0f5554b9841582ded12a01558218558d8b7748899e94a0499d8caaf", + "bytes": 2152 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_3.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_3.out", + "sha256": "c1d325125ee0463b230e5ac347c45a117ebc1a1686393d9d7bd63dd7c9a8a8d4", + "bytes": 2152 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_4.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_4.out", + "sha256": "939f30920d3d4a772d8736c945f6e39dc949cde64cc7b9b9e0116e7b45f4f895", + "bytes": 2170 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_5.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_5.out", + "sha256": "7817d9b5c087d542f2c0659726a66532091a24c9b05edb04196a756291dd5784", + "bytes": 2171 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_6.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_6.out", + "sha256": "4283aa1d699582d4766ca394cf2d9c4b046ce8247b5cef0f8250c424329138a2", + "bytes": 2197 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_7.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_7.out", + "sha256": "eb0257132cbd79d1a3a84bec543183b7bbdaceaaaefc85c988368d70d4146322", + "bytes": 2196 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_8.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_8.out", + "sha256": "523b5ac11259832265dab5c4e08d837f3fe7e4780048a5a4af1f513f6b8c3d4a", + "bytes": 2137 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_9.err", + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "bytes": 575 + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_9.out", + "sha256": "40ef3d8f12ba723cfe0e845ec72a960dbd32c8bc5baa3013f570e1c27a6431b6", + "bytes": 2137 + }, + { + "path": "bertosebind_new_runs/executed/remote/manifest.json", + "sha256": "06fbfcd2f820fc4621d35c16dcd6bbece93ea68b96d417d8b7bd2ce3ea104cdb", + "bytes": 74005 + }, + { + "path": "bertosebind_new_runs/executed/remote/train_lgi.py", + "sha256": "bf602abb05eeb3b0203766d9d1bc462579c181bc3418d762f6d02d5f36e8a230", + "bytes": 6375 + }, + { + "path": "bertosebind_new_runs/inputs/current_glycan_sets/doubly_cold_exposure_join.csv", + "sha256": "9d13452309d64f138705657334b74738eaf167c9faff835d024582e0e98c0af8", + "bytes": 32408 + }, + { + "path": "bertosebind_new_runs/inputs/current_glycan_sets/doubly_cold_scored_glycans.csv", + "sha256": "e5eebf2072779d7001dabd3981237025be37eee6f19a5b109b00ce4b3e776e09", + "bytes": 30484 + }, + { + "path": "bertosebind_new_runs/inputs/current_glycan_sets/glycan_cold_exposure_join.csv", + "sha256": "4d101cc92685c63ecca99cfad2c1bc46c73c77b1e565bd686bde14ee0d020886", + "bytes": 62994 + }, + { + "path": "bertosebind_new_runs/inputs/current_glycan_sets/glycan_cold_scored_glycans.csv", + "sha256": "0faab973a6ee5e5bf712983d51fad9f746e34edcbe5342574d45933bba62f48a", + "bytes": 59313 + }, + { + "path": "bertosebind_new_runs/inputs/current_glycan_sets/manifest.json", + "sha256": "7655d9d080df7cb5dc748b7d9721037fbec67c04cf837e4724f0afba7e7a4d71", + "bytes": 2391 + }, + { + "path": "bertosebind_new_runs/inputs/current_glycan_sets/protein_cold_exposure_join.csv", + "sha256": "08ceef347f61012e0baab4daf1472122dc80335c6ea02fe084098c055a3e3e30", + "bytes": 112384 + }, + { + "path": "bertosebind_new_runs/inputs/current_glycan_sets/protein_cold_scored_glycans.csv", + "sha256": "f35d6088903e993f46adee07806e577456599d9814f4f43e40efdf3d8ddf6c46", + "bytes": 103485 + }, + { + "path": "bertosebind_new_runs/package_manifest.json", + "sha256": "56d04a5a985d2bd96067e5c1a1e7acd67c5f76ae05c17831bc5949cb6bee26ab", + "bytes": 143946 + }, + { + "path": "bertosebind_new_runs/protocol/amendment_excerpts_20260925_26.md", + "sha256": "924765b90a840277c5ed9dd6594a8ded2d5f7add5b138a9af1adf89bbb46cbcc", + "bytes": 13421 + }, + { + "path": "bertosebind_new_runs/protocol/original_20260910.md", + "sha256": "04dea299feb3ac0840ff5db7471381ad3f1cf531653bf6aeb9825005236d2f0b", + "bytes": 10993 + }, + { + "path": "bertosebind_new_runs/provenance/bootstrap_anatomy_audit.json", + "sha256": "11014b5f0972c23b7225c4202f2254b444109b8105563d968e9c8f4534061ff1", + "bytes": 41282 + }, + { + "path": "bertosebind_new_runs/provenance/bootstrap_code_audit.json", + "sha256": "d2812e72a7befc1bdb08465189d2fed035ae725142c1cf978a578e0add72e94d", + "bytes": 12403 + }, + { + "path": "bertosebind_new_runs/provenance/bootstrap_exact_input_manifest.json", + "sha256": "d6e36605873c587028c6dab2dde8093c6e4e33df53ebc27f1d6e3c6b4de14991", + "bytes": 24651 + }, + { + "path": "bertosebind_new_runs/provenance/current_pretraining_exposure_audit.json", + "sha256": "30a70a1703183b50fa1c10986c065471513981fac1e3e69f9c7ad649aeecb16a", + "bytes": 9596 + }, + { + "path": "bertosebind_new_runs/provenance/exposure_portability.patch", + "sha256": "ff65b38435040ba2f5987e0c78ecc0fafc4604341b9bc094513d47cb343db023", + "bytes": 8422 + }, + { + "path": "bertosebind_new_runs/provenance/gifflar_scorer_diff.txt", + "sha256": "6649cef7a00096ba2981c611a4c6432be93300e3bb439cd543a692cbb40a15af", + "bytes": 1510 + }, + { + "path": "bertosebind_new_runs/provenance/protein_gifflar_audit.json", + "sha256": "7d24cac24a37583fddac7d91c73e22ea6d4a022194ac213ab354f9e9831b1084", + "bytes": 109442 + }, + { + "path": "bertosebind_new_runs/provenance/protein_gifflar_verified_numbers.json", + "sha256": "9d2e628a789a46a69333c24550d2a150166aebed382880c2d0a67fbd43124eaa", + "bytes": 30957 + }, + { + "path": "bertosebind_new_runs/reproduce_summary.py", + "sha256": "4b49c6f8f6c9953cee46ff2f6c47e1bb68692c9b58984973b3d8666648999f62", + "bytes": 2008 + }, + { + "path": "bertosebind_new_runs/requirements.txt", + "sha256": "99acda4c8365d691c16de3e032e225de05cee38cff063a772bf9eaec2067328f", + "bytes": 104 + }, + { + "path": "bertosebind_new_runs/results/doubly_cold_anatomy.json", + "sha256": "0dff08537f0cd5a1ad40562537c48546d3d4f3858a75b2ab2d3729b22a5dfe91", + "bytes": 9441 + }, + { + "path": "bertosebind_new_runs/results/doubly_cold_per_assay.csv", + "sha256": "4186c66c13fd05d62d83a10df2a5761b2e29ded502660c12cb450836f9881496", + "bytes": 18263 + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_gifflarESM_s43.json", + "sha256": "2c494ac1351d4ff63828139eac004c0047dc3259d62fd10334d5a740cab9182f", + "bytes": 927 + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_gifflarESM_s44.json", + "sha256": "82173016b893cb2913e90e99feea5f6f4ff22cff9e1aff0fe7dc136161c7f627", + "bytes": 927 + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_sweetnetESM_s43.json", + "sha256": "ac58a83969a0ffb860cf1a33a472f4cb5b3e14f25097c3ba909f7555f65aa589", + "bytes": 933 + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_sweetnetESM_s44.json", + "sha256": "d2d2d73c834a2fcca7b8c22fd6ce91907f18866443628c2c54f8b8ec04477803", + "bytes": 933 + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_gifflarESM_s43.json", + "sha256": "7b0a01a1acc7e2ca80a3de9aaab02941942ead519e6661abec6c44c7fa5fd079", + "bytes": 929 + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_gifflarESM_s44.json", + "sha256": "f2e40d306b767e6949c02304077a08398dc16ac19d08d94937f7dc49abd7cc24", + "bytes": 930 + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_sweetnetESM_s43.json", + "sha256": "e13c8021d6e94b3bd6cb4ef00d7456c182449f57c4b1356256e011805a6efdbf", + "bytes": 935 + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_sweetnetESM_s44.json", + "sha256": "d274d35c9a0ba25e4597cdb8c01001f4f7ff7760aabfe7c8a00b84a70b74252f", + "bytes": 935 + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_gifflarESM_s43.json", + "sha256": "2208056d5303fda27c5b541eed1c6f64cb03de1c10abd2868d4ce55d1bdb475c", + "bytes": 922 + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_gifflarESM_s44.json", + "sha256": "c831378d73c3c2c9456be5ff9ff05acc34b64815b056c5df21bef2078a415393", + "bytes": 922 + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_sweetnetESM_s43.json", + "sha256": "121a30d0de568217e722036cf25ba4ef61128398fde3466fc8b2f60f096722c7", + "bytes": 929 + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_sweetnetESM_s44.json", + "sha256": "3d29ac377491db5d952f6066228fe4099f99db0e2fbaa80063ee429fc28e0a28", + "bytes": 927 + }, + { + "path": "bertosebind_new_runs/results/protein_probe.json", + "sha256": "4fd80f7396aa9803602fd62bd82ec3e98e1f937b46e1057cb26ffa56ea6c93f0", + "bytes": 10946 + }, + { + "path": "check_release.py", + "sha256": "f224aac78366d64d60b86841b11a9694d234e955904112d266de9bbbc4d8af3e", + "bytes": 2258 + }, + { + "path": "code_inventory.tsv", + "sha256": "e7f96e87f19d2db6e07ee3b766ec6067a39b83ff2331e9695a82d455cd2dd0a8", + "bytes": 199420 + }, + { + "path": "docs/reproduction.md", + "sha256": "372a062698953b2880f35536df3e202acf2eeb6ac50dddb5e7110debfac05507", + "bytes": 6310 + }, + { + "path": "embed.py", + "sha256": "b8fe7b4e50ffa4caf7ca9c50742dd279bb4a717b6fad629a24971ceab635b2ab", + "bytes": 2858 + }, + { + "path": "examples/glycans.csv", + "sha256": "a46c2c31f02fb0829fbe70a29c4c032b16a1cd5208386c2ecbc9f6c3fc2018bc", + "bytes": 141 + }, + { + "path": "examples/predictions.csv", + "sha256": "b4a8c26479a118943646d4baae370c1d0a267fe30c487fbf816a3999b5a4ed03", + "bytes": 224 + }, + { + "path": "examples/smoke_affinose.py", + "sha256": "903d14d8bafc9ae2aa968a74ad4b9d31396c598624fe05e2acb1814cb60bd60e", + "bytes": 5963 + }, + { + "path": "examples/smoke_models.py", + "sha256": "ff95ff2a7707940b849a44259cdf356f66dd5b0351faf4e400feac6666afd9af", + "bytes": 3242 + }, + { + "path": "executed/downstream/review_a5_native_checkpoint.py", + "sha256": "89b65f9186f2080eab214f1b7389854cd8477124cdc729a428624312fb7a1453", + "bytes": 18793 + }, + { + "path": "executed/downstream/run_review_native_md_on_terminal4_s42.py", + "sha256": "1c958427bca7991b8ec091b6f0c8d209fc1ddfaf1aa9e1f96ad22ed5c60b839d", + "bytes": 43666 + }, + { + "path": "figures/Figure_style.md", + "sha256": "75d530c95c218fafb25e844865dd3884737d11b23c4cfdc121226549923fecdb", + "bytes": 1277 + }, + { + "path": "figures/README.md", + "sha256": "784b9b6472c10498b5aaef3f5bcc43f23bde0805135c6b0265d851aa6e342c1e", + "bytes": 8542 + }, + { + "path": "figures/ablation_figure9/README.md", + "sha256": "3a6fcbfe8388f494ad542a24a6d4d66c8315af62e82627a2429518fbe1b2f9bd", + "bytes": 1613 + }, + { + "path": "figures/ablation_figure9/nature-bpg-palette.json", + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "bytes": 478 + }, + { + "path": "figures/ablation_figure9/plot_data.json", + "sha256": "179bf3ddb15842c726a90a9cf373c7861409c8f823bae344a0b621fa77ed51f9", + "bytes": 146397 + }, + { + "path": "figures/bootstrap_figure13/README.md", + "sha256": "9494d4ea185f98082bf6197cf6c244035c3cb8c811527c922357fc28ca381149", + "bytes": 1063 + }, + { + "path": "figures/bootstrap_figure13/build_figure13.py", + "sha256": "832849e584499907aa66540616d52ffa192538bf9353f19c4f463f48694a4806", + "bytes": 8456 + }, + { + "path": "figures/bootstrap_figure13/inputs/affinose_b4_step3_bootstrap_r2_20260927.json", + "sha256": "6a87e6a8abc926f41ca13b1bb6c81cbf9ea1d04b06e8f39bfdaf847ce55ba235", + "bytes": 48191 + }, + { + "path": "figures/bootstrap_figure13/inputs/nature-bpg-palette.json", + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "bytes": 478 + }, + { + "path": "figures/build_bpe_figure3.py", + "sha256": "b262b420db6a5d18712c985b7d27b0d33dbdcbb2e1b3961bdf6c06110ba107ae", + "bytes": 6899 + }, + { + "path": "figures/build_corpus_composition_figure.py", + "sha256": "0ceff115647c4921165805fb25fb5ec5451e8ac1264a9140b3db8591f30f66d2", + "bytes": 3995 + }, + { + "path": "figures/build_grey_seal_figure5.py", + "sha256": "6053ddca0892325752308544a39da61d427de959f6559ab771902b0c30c7c103", + "bytes": 1433 + }, + { + "path": "figures/build_submission_figures.py", + "sha256": "90fd5e292872323cf90b2312903f8320731808e382a4798cc033379ebd57e568", + "bytes": 25653 + }, + { + "path": "figures/build_supplement_figure1.py", + "sha256": "bb8cfaa1ec26c36f22b27bb3b19d61dbf98da1fd42e6889e408f4dd9d17eda31", + "bytes": 13633 + }, + { + "path": "figures/build_supplement_presentation.py", + "sha256": "9086813c19cb26d23e1f7d2a75b1ef80ed29d4d087822fa9e95ac40821a32896", + "bytes": 13515 + }, + { + "path": "figures/build_supplementary_figure9.py", + "sha256": "9b604ffc6435ed8d0f20c0d1ba66cb5cfa43ecf503226bf261ce1b4d8a4deae2", + "bytes": 12604 + }, + { + "path": "figures/build_taxonomy_figure11.py", + "sha256": "47a79341f902cb286e2517056ae698c6cc35b0641ffa5a09ad7fde28bc429004", + "bytes": 6578 + }, + { + "path": "figures/build_token_length_figure2.py", + "sha256": "e964dc2d021382d5950008eceef05d001d640de608b0d86ce37701db5de8379e", + "bytes": 3840 + }, + { + "path": "figures/build_training_coverage_figure6.py", + "sha256": "bc7e195afef8b5fa7c3effabc7253434d6a5b77b428644a909a1da734def4c5c", + "bytes": 4730 + }, + { + "path": "figures/contrastive_figure12/README.md", + "sha256": "bb948ed57ebbab93875926c3be782996050e8728d3e73b9e6685916b725ee8be", + "bytes": 1259 + }, + { + "path": "figures/contrastive_figure12/build_figure12.py", + "sha256": "715df862316031c39bbccc5339d442520863d4f99b9f3a19d8e1e8594db6281f", + "bytes": 14168 + }, + { + "path": "figures/contrastive_figure12/inputs/nature-bpg-palette.json", + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "bytes": 478 + }, + { + "path": "figures/contrastive_figure12/inputs/review_contrastive_fit_values.csv", + "sha256": "d732e76c28cd3d741fad99636a8937b464f1efa190d26e7005146e6c88b1feb3", + "bytes": 59300 + }, + { + "path": "figures/contrastive_figure12/inputs/review_contrastive_paired_summary.csv", + "sha256": "5bfd6352e60158fe3a09c2a3228a7fffc4926780aa320b5e205ef276db3e4113", + "bytes": 6888 + }, + { + "path": "figures/contrastive_figure12/inputs/review_contrastive_taxonomy_summary.csv", + "sha256": "dc90a817bc54ac310a73298f60d03fc30eaccd724f4676eb826301dd85470acc", + "bytes": 1330 + }, + { + "path": "figures/figure3_inputs/nature-bpg-palette.json", + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "bytes": 478 + }, + { + "path": "figures/figure3_inputs/partition_count_flow.csv", + "sha256": "bd530abacb61f3d6cffda8d1e7e6112f9261fd0a761e594fddceb5c615b9497b", + "bytes": 12640 + }, + { + "path": "figures/figure3_inputs/review_bpe_vocabulary.json", + "sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "bytes": 138150 + }, + { + "path": "figures/figure3_inputs/source_example.json", + "sha256": "c885944b4ebce9b08c99318ce51c81b7648309c49ba5244ad0345b794429f151", + "bytes": 3975 + }, + { + "path": "figures/final_iar/README.md", + "sha256": "6c1c754acaabc99db19f2953c68d27a9cdc04cb7275ceafff4b1cbe739b2e0ca", + "bytes": 2759 + }, + { + "path": "figures/final_iar/build_final_iar_figures.py", + "sha256": "b82b8086fdd223da8ce745ca4ef35a23d32b83a4aaf22bfc8a9ff1446354fe14", + "bytes": 18903 + }, + { + "path": "figures/final_iar/inputs/baselines_same_cases.csv", + "sha256": "259fdc68a39b415c4ec114fbd6872ceaccaf09327d1fde958390071a5a94af2a", + "bytes": 4968 + }, + { + "path": "figures/final_iar/inputs/final_iar_summary.json", + "sha256": "d5b7fd634677ea22ea27670649ea30636ef6c98daedc8592cd3f5d7b56beb9c0", + "bytes": 6162 + }, + { + "path": "figures/final_iar/inputs/iar_recount_and_wilson_intervals.csv", + "sha256": "50906ea3964a4a7c9744d224c8ffe2d356738d83bc0f5ead05b04ae6c558a64a", + "bytes": 5504 + }, + { + "path": "figures/final_iar/inputs/nature-bpg-palette.json", + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "bytes": 478 + }, + { + "path": "figures/final_iar/inputs/run_manifest.json", + "sha256": "0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419", + "bytes": 3838 + }, + { + "path": "figures/model_variants_figure10/README.md", + "sha256": "61136a3d00e0184db8fbf4db47fa480766e7dadbb4f81d278df27b1fd0a0613c", + "bytes": 1350 + }, + { + "path": "figures/model_variants_figure10/build_model_variants_figure10.py", + "sha256": "c24f16be487bdef403afd9b6803334a4f5a6739f4716b16ec5290ee037a782bb", + "bytes": 14431 + }, + { + "path": "figures/model_variants_figure10/inputs/review_weight_policy_ranks.csv", + "sha256": "53fdfc11a75e3aaf39b78a9c59d90e206b0726579440d03df2d5cb5708249ebf", + "bytes": 3652 + }, + { + "path": "figures/model_variants_figure10/inputs/review_weight_policy_sensitivity.csv", + "sha256": "9b35cb9ab5056c0548eea944f8472906a8cb36e2a7adf5cf3135268c675619b7", + "bytes": 137065 + }, + { + "path": "figures/taxonomy_figure11/README.md", + "sha256": "dd96f6ec2247a918a89873dd031be5f738bcd870056e9b98cb7a1e2c85e158e8", + "bytes": 1677 + }, + { + "path": "figures/taxonomy_figure11/nature-bpg-palette.json", + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "bytes": 478 + }, + { + "path": "iar_completion/README.md", + "sha256": "04670f06e3459608d7a43da767531544421d4da1a6125376edc3939dba951d1f", + "bytes": 9411 + }, + { + "path": "iar_completion/SHA256SUMS", + "sha256": "8f7e1027e67222d49eb9e3c12fcdff083005d182583990c08c54b7ac3c11040e", + "bytes": 5566 + }, + { + "path": "iar_completion/assets/linkage_readout.pt", + "sha256": "a03990a02a1737de05a7fa1739164e84fa6a0a4170ebaa65317a9f3c2f16c0b0", + "bytes": 663845 + }, + { + "path": "iar_completion/check_package.py", + "sha256": "37514cb79322719772b5c14a5795f00a78f3275f3315d5b3b674ee97127ca953", + "bytes": 3156 + }, + { + "path": "iar_completion/model_metadata.json", + "sha256": "bbf016ce2f1a7dc82940be28397cbe8083da7ad0f5f525b1cf7345fd42a5758d", + "bytes": 3132 + }, + { + "path": "iar_completion/originals/run_all_training.sbatch", + "sha256": "d406620e3b0c070dff4d6fb6e0c57effce848a9ca5b3dc3de705d65c49ac0961", + "bytes": 1703 + }, + { + "path": "iar_completion/originals/wa3_final_iar_readout.py", + "sha256": "5acafc45244a0bf9a8489794f8a39f956622cf50594d87eb2eaa04502589fcb5", + "bytes": 81913 + }, + { + "path": "iar_completion/originals/wa3_final_iar_readout_all.py", + "sha256": "72f8583bf32799ba29c09829d138900c0cbb589f73bd278f389da6fa8a786730", + "bytes": 82622 + }, + { + "path": "iar_completion/originals/wa3_linkage_diagnosis.py", + "sha256": "679499406106611dc2c70240a3c14c9b94311bc03a7811d3dae807c58aef4ef8", + "bytes": 67711 + }, + { + "path": "iar_completion/originals/wa3_linkage_probe.py", + "sha256": "0ebc629778c854621f485ceb4f5f11090e84ac9171d52270fcc90b6b07d6fe7f", + "bytes": 83203 + }, + { + "path": "iar_completion/originals/wa3_same_test.py", + "sha256": "0da5f24799afc8978b88c85ea7856deb8c641ebae319760e88539c93a4eb3a86", + "bytes": 59535 + }, + { + "path": "iar_completion/originals/wa3_typed_strict_test.py", + "sha256": "c6e9506dbf97752aa248e325e75acf3abf63495054bcac68d48602967379531d", + "bytes": 64136 + }, + { + "path": "iar_completion/originals/wa3_typed_test.py", + "sha256": "1341b0051fefaf54b4113d7dda5e408540844d12a9275f9a73607c416f35928d", + "bytes": 63012 + }, + { + "path": "iar_completion/provenance/final_run/baselines_same_cases.csv", + "sha256": "259fdc68a39b415c4ec114fbd6872ceaccaf09327d1fde958390071a5a94af2a", + "bytes": 4968 + }, + { + "path": "iar_completion/provenance/final_run/final_iar_summary.json", + "sha256": "d5b7fd634677ea22ea27670649ea30636ef6c98daedc8592cd3f5d7b56beb9c0", + "bytes": 6162 + }, + { + "path": "iar_completion/provenance/final_run/run_manifest.json", + "sha256": "0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419", + "bytes": 3838 + }, + { + "path": "iar_completion/provenance/heldout_masking_wa3_final_iar_readout_20260926_run_manifest.json", + "sha256": "a615d9a889c7a62c19d05a4d07d66d9e743fbfb9e37e4d646c889490d297e492", + "bytes": 3825 + }, + { + "path": "iar_completion/provenance/heldout_masking_wa3_final_iar_readout_all_20260927_run_manifest.json", + "sha256": "0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419", + "bytes": 3838 + }, + { + "path": "iar_completion/provenance/heldout_masking_wa3_linkage_diagnosis_20260925_run_manifest.json", + "sha256": "933ef4d07c380bd4322814acff135e207e00db36197c3dc543214b24cb5d554e", + "bytes": 6034 + }, + { + "path": "iar_completion/provenance/heldout_masking_wa3_same_test_run_manifest.json", + "sha256": "3f713f4e074cbb068264173a8fb0ec99813665ad1b23fdea507f7389071cb04b", + "bytes": 6861 + }, + { + "path": "iar_completion/provenance/heldout_masking_wa3_typed_20260924_run_manifest.json", + "sha256": "b3cf90dc772f206dc386a3a92d96e43d7a6c1de4147bc7cc501599730d31807f", + "bytes": 3136 + }, + { + "path": "iar_completion/provenance/heldout_masking_wa3_typed_strict_20260925_run_manifest.json", + "sha256": "4a13b9faecc329257c2aa08fd6734a8b6c02837d0b230b0f659fd00602832c75", + "bytes": 3148 + }, + { + "path": "iar_completion/provenance/local_checks.json", + "sha256": "9c957fe6b76da503c909ac4e3a0d70cf4ea1fd6da34a3aa6573bac4722d4c62d", + "bytes": 2253 + }, + { + "path": "iar_completion/provenance/required_input_hashes.json", + "sha256": "8af8ed8b6124f26072d6041deb0e6966c13c149926f5bd720b714884cba6801e", + "bytes": 7186 + }, + { + "path": "iar_completion/provenance/source_inventory.json", + "sha256": "2cb3a3f4e8b1d37dd3ad0234996d546f34ab48231bf69247ffb6ace0651a4a69", + "bytes": 20381 + }, + { + "path": "iar_completion/readout.py", + "sha256": "42464d76c743a302bae79ced6b09af9657444c6f977535b5de49dcf59a5a8a90", + "bytes": 5515 + }, + { + "path": "iar_completion/requirements.txt", + "sha256": "9ef74c17ef3ffacde3f0fc862f9844757bacfffa55b3ac9e7e6a6cca43f5843c", + "bytes": 188 + }, + { + "path": "iar_completion/runtime_dependencies.json", + "sha256": "3392850a98f1739e3eec8434f42c26f3fad2d3da9fc815a17dd2790aa3b0ff98", + "bytes": 7866 + }, + { + "path": "iar_completion/runtime_snapshot/java/review_A5WurcsArrayTreeAudit.java", + "sha256": "a791b8f4bbda75317f41afb34d62fe518448f4d5d90db0b852e2b0d0af5e83a6", + "bytes": 19697 + }, + { + "path": "iar_completion/runtime_snapshot/java/review_MolWURCS.jar", + "sha256": "bc38e44e66daed7ec04f7c7907a13509aac125a8a09c97d9972725ab4278edaf", + "bytes": 4019920 + }, + { + "path": "iar_completion/runtime_snapshot/java/review_wurcsframework-1.3.1.jar", + "sha256": "5449f9276a7b952adf087468c874bb13c7295062cce7d1afb13fdea78ace7f37", + "bytes": 340319 + }, + { + "path": "iar_completion/runtime_snapshot/project/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py", + "sha256": "0bc54399362945601bcfd403441fc80968d173200dd0561f57568b2053a94839", + "bytes": 27983 + }, + { + "path": "iar_completion/runtime_snapshot/project/data/bpe_ambiguity_tokens.json", + "sha256": "c68cd003370b2dcdb162f848f766e4e62f2653c6c38d205f8cbe53a9aabe2d74", + "bytes": 11127 + }, + { + "path": "iar_completion/runtime_snapshot/project/data/bpe_vocabulary_clean.json", + "sha256": "6a572afdf53f1494ab96c896876b824ca7ea749777352606aa9f96bf270ceecc", + "bytes": 118583 + }, + { + "path": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_ambiguity_tokens.json", + "sha256": "22d2aad45b978988c9e26bc9400016014ee825cc6207377385a8cd74f3c88f2b", + "bytes": 19693 + }, + { + "path": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "bytes": 138150 + }, + { + "path": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py", + "sha256": "10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04", + "bytes": 11405 + }, + { + "path": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py", + "sha256": "f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7", + "bytes": 6186 + }, + { + "path": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py", + "sha256": "6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4", + "bytes": 14161 + }, + { + "path": "iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/__init__.py", + "sha256": "de8c3237b858b640ee9fbf4dac34864c54b6dac80bc89f346a44c774254289a4", + "bytes": 104 + }, + { + "path": "iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/glycan_bert.py", + "sha256": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "bytes": 11024 + }, + { + "path": "iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/multimodal_glycan_bert_v3.py", + "sha256": "8e06c32f4e844c3c66f146fd15a075472808a0720c892d0b9683dfd32f15ef0c", + "bytes": 45141 + }, + { + "path": "iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/training/ipa_bpe_distillation.py", + "sha256": "f0c8efda7a12942b4c6359792d6ee9417e6a9ec0eb04623ad17b4772430270b5", + "bytes": 15975 + }, + { + "path": "iar_completion/runtime_snapshot/project/writing/glycangt_heldout_ipa_validation/cluster/heldout_ipa_eval.py", + "sha256": "8d05a4048e200625694ff9a36f50af89b845fd0d38ba8034a97a710e7ad3dce2", + "bytes": 40107 + }, + { + "path": "iar_completion/runtime_snapshot/schema/classify.py", + "sha256": "cfce20d28291c8b5868d35386990037415090202dd823bdfd73038456cc65557", + "bytes": 3063 + }, + { + "path": "iar_completion/runtime_snapshot/schema/pipelib.py", + "sha256": "704ed130bdcce94a7af7ce3e37654705f709b8526f632907ef794451c6ef7f30", + "bytes": 4397 + }, + { + "path": "iar_inference/README.md", + "sha256": "8fc1d034d7b8a3d7c12cdfa958f1b5825be73cedabce8e96a83441e883bea0e7", + "bytes": 6197 + }, + { + "path": "iar_inference/SHA256SUMS", + "sha256": "1d21cb72f1cc7d5a094a5fb5f0ec11a6072df996f0975cc39569ed9964daee1c", + "bytes": 915 + }, + { + "path": "iar_inference/config.json", + "sha256": "043a38744f9fd832181d822ae8481488d954604bf615b2eb05c4c8ad29794325", + "bytes": 6987 + }, + { + "path": "iar_inference/fixtures/case0_pre_sequence_head.npy", + "sha256": "a212cfbd49ec2f951e942c92caaac63260687a626eca588cb692d86bb1e52198", + "bytes": 3200 + }, + { + "path": "iar_inference/fixtures/case1_pre_sequence_head.npy", + "sha256": "6ffca438526432a33168a85a0fee1158fd2a9c9f23ecb97f587235f204ae50b3", + "bytes": 3200 + }, + { + "path": "iar_inference/fixtures/rebuilt_two_case_inputs.json", + "sha256": "60ac0c0fd1b6e0ada2d847d1fccff4f6fe7c085aab3146247dc5d7bfebbabc27", + "bytes": 42915 + }, + { + "path": "iar_inference/fixtures/reference_smoke_report.json", + "sha256": "60dcdb6262457962da84c7b239c194fac343bd8d27db0e05f15906acb9bf5f4b", + "bytes": 7532 + }, + { + "path": "iar_inference/infer.py", + "sha256": "9237b349668ea3fb5266f4696169fd958e9f997e5064ede0ab06e41859b17361", + "bytes": 18264 + }, + { + "path": "iar_inference/original_inference_helpers.py", + "sha256": "87fa484e1f6105fa476dff4cf8c7e6aea71a2aac537796131a4858632f54b906", + "bytes": 4608 + }, + { + "path": "iar_inference/preparation_validation.json", + "sha256": "4e36f9237dc494eb47898ff3ab9a5b1a483f5004aa933a5294af794edd0757ce", + "bytes": 718 + }, + { + "path": "iar_inference/requirements.txt", + "sha256": "16e89b25a13eabc8586ba2a8ec32890ecf321f652b03f7548c63112d13cb2e62", + "bytes": 78 + }, + { + "path": "provenance/WA3_checkpoint_index.json", + "sha256": "a4b66d2ed429ad6516646256a84173082b2fca6b779baa6e4ff93586a81a5c2b", + "bytes": 1044 + }, + { + "path": "provenance/WA3_final_receipt.json", + "sha256": "b8b05510e97f6b94ca5e0d1465eba034724d7ddcc405aa405db09c4c29fc768b", + "bytes": 86511 + }, + { + "path": "provenance/affinose_arms_on_test_20260909.json", + "sha256": "670cfcbcfe89e0729bb75f122cff8c7100c24d39ef775c69421d4bb820654056", + "bytes": 6707 + }, + { + "path": "provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/receipt.json", + "sha256": "a291a8e8f2b77c7955b5346aa52289afc520a0b5181d62eb0dfa2c096bd6bbb8", + "bytes": 6137 + }, + { + "path": "provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/results.json", + "sha256": "fdd520b70e38d0e6bc112118adad89cf209278614645b47e219341736bf99599", + "bytes": 12535 + }, + { + "path": "provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/receipt.json", + "sha256": "29b68fb30127700fa55942d5cc4c237f8bf15c2d0c883192b62698d811e71c51", + "bytes": 6135 + }, + { + "path": "provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/results.json", + "sha256": "54918a535b86b01590bab11c78ff4c354c106ca78a384446eb79038b0df666af", + "bytes": 11117 + }, + { + "path": "provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/receipt.json", + "sha256": "a380534df6f877c212a2c7dbce577511e282537bbff9ad5d7ac3e186f1cc5633", + "bytes": 6153 + }, + { + "path": "provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/results.json", + "sha256": "a732a56ddc81fc41b02dde8f56d852929ec8eefa12524ed9410a09361f267544", + "bytes": 11113 + }, + { + "path": "provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/receipt.json", + "sha256": "9344a727416db1368c45a0ddad962a12130e10f03944a5142874f72ba5311297", + "bytes": 6153 + }, + { + "path": "provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/results.json", + "sha256": "a530b2fac81a72d99674906253897a1e3eecca4ee17e83c3a27ed409a3411877", + "bytes": 12031 + }, + { + "path": "provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/receipt.json", + "sha256": "068bb72cc2fc0231f3a9f729ac78f1a6340a7088ea86a60449ebe63dcfbd794d", + "bytes": 6141 + }, + { + "path": "provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/results.json", + "sha256": "a21307bb48db62270792f990541bac1c2728feb34063f4b2009e2f6c7d8a7e4c", + "bytes": 9275 + }, + { + "path": "provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/receipt.json", + "sha256": "3044b56619b1bb83063070624b02bfaa64c952c1da76a80051bb62bb26098395", + "bytes": 6141 + }, + { + "path": "provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/results.json", + "sha256": "42ffeb2f81acbae80df3284300d0213b52918b90d3b186dbbd1f074800af75f0", + "bytes": 10197 + }, + { + "path": "provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/receipt.json", + "sha256": "07a919272c928f9630f4d70a73cf1aa91a327e2c9597cf582814c5386b6f24cc", + "bytes": 6147 + }, + { + "path": "provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/results.json", + "sha256": "ef5a0b42f15f23a473d46198bd39dc17176add75a1bf76cd708d5b595d552b6e", + "bytes": 9726 + }, + { + "path": "provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/receipt.json", + "sha256": "c3e3028a05cf7f5b58883d9485bcd7a7e0ba5d05265f4503b8bad09e307c1480", + "bytes": 6142 + }, + { + "path": "provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/results.json", + "sha256": "f62ddffaffae54f91e4f921fa235741df4023e94b47c2c90f3e158b7c4cd9858", + "bytes": 15759 + }, + { + "path": "provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/receipt.json", + "sha256": "6f5cbc9e19a45b4e9c8d33e7f4a82e41ef610b5040175852d3c05ea172995d4f", + "bytes": 6142 + }, + { + "path": "provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/results.json", + "sha256": "9f0a6dc5b89f58603fb368e754da90001a987016ed4d9ab425420703aeb44d9e", + "bytes": 11131 + }, + { + "path": "provenance/affinose_input_hashes_moA_glycan_20260908.json", + "sha256": "f4fb099a7dbe229450d2ca337d213555203dc69dd67f1e4b2cca227baca3d701", + "bytes": 1693 + }, + { + "path": "provenance/affinose_input_hashes_moB_protein_20260908.json", + "sha256": "00c53175abc949336bf495c796dc9c779af2109227bc6f351433356129d85663", + "bytes": 1694 + }, + { + "path": "provenance/affinose_input_hashes_moC_doubly_20260908.json", + "sha256": "3d3c6fd5c39fe2f1ce37ce5ba47b842fa193b716c08227678d68cdcc7e996c4e", + "bytes": 1693 + }, + { + "path": "provenance/affinose_recipe.json", + "sha256": "ebf5e35b60640944bf3d03955f10da2c40cd5075a85bf0e3a4c6210f97ed85a6", + "bytes": 26612 + }, + { + "path": "provenance/artifact_locations.tsv", + "sha256": "9c14d2981a11bef92ef230e9848f9876d941b290f2c70848e739a2795bb6feea", + "bytes": 5715 + }, + { + "path": "provenance/candidate_affinose_input_hashes_moA_glycan_20260908.json", + "sha256": "4dfa51299e99a23add6cdfe5380403d4504a207e2b6522ea86cc50ba1cd2cb74", + "bytes": 1919 + }, + { + "path": "provenance/candidate_affinose_input_hashes_moB_protein_20260908.json", + "sha256": "48768c773a262864e7a5104732d1e37971be2581058dec7e6f8778d05483965c", + "bytes": 1920 + }, + { + "path": "provenance/candidate_affinose_input_hashes_moC_doubly_20260908.json", + "sha256": "efbfbea3df98ff7b20dadae530aaf5e3cdadc7216a60a97495b4344e39ef1934", + "bytes": 1919 + }, + { + "path": "provenance/candidate_portability.patch", + "sha256": "2ce6f4a60fdb0bc87d69e270bd724fbccbfae6239579f3c17c0c4d8de05b3d94", + "bytes": 1899 + }, + { + "path": "provenance/copied_sources.json", + "sha256": "16bed602b94a1a3010f07c2feca3e219035160ab5cc05f4ab202faf57ae1c63c", + "bytes": 243282 + }, + { + "path": "provenance/execution_summary.json", + "sha256": "967d38d95702e0863eec468dac9de27fee7da60312fc53ba0f95c5b88f381595", + "bytes": 2153 + }, + { + "path": "provenance/local_checks.json", + "sha256": "f4cd53bb88fb383677e0f85417662c01a351a954db6df93b6162d0aadda495b0", + "bytes": 3339 + }, + { + "path": "provenance/local_test_environment.json", + "sha256": "fc689486dc297277e32480d52d9abb69549520c085101bd406ef3ed6c2fad86b", + "bytes": 737 + }, + { + "path": "provenance/moconf_cells.tsv", + "sha256": "7202cdde019556a7babb3459ae04da8ab5ecb5edbdfde2b74c4a675ed1c9ff43", + "bytes": 799 + }, + { + "path": "provenance/mofull_cells.tsv", + "sha256": "e6f1be53ab77ad80ea274f80bd11369bb4efe3836b6119c58283ec12af224752", + "bytes": 1449 + }, + { + "path": "provenance/motif_cells.tsv", + "sha256": "67b5ade1b857e789173128939c6baa4687354bb1d640d8fd3b40332b5956ec72", + "bytes": 1121 + }, + { + "path": "provenance/release_manifest.json", + "sha256": "df975ecf8b6d68fb201955cd39f52ed814c19b6a97d262fd266a608aad5ddba6", + "bytes": 245136 + }, + { + "path": "provenance/score_arms_on_test_historical.py", + "sha256": "dc42f4cdd76cc2c49fedfe6b8b8ef40b5915ee70803c9cec5ec0b0573256f815", + "bytes": 6328 + }, + { + "path": "provenance/sequence_variants.json", + "sha256": "e2bad73cbdcc16a2a44f2d6e8230bc55b5a8a484d7553af29e379a12f541bba9", + "bytes": 1737 + }, + { + "path": "provenance/submission_README.md", + "sha256": "6fc928f84838ac82af228d744fadb8be670d631afd5ca84ff84d0847b140d8fd", + "bytes": 13654 + }, + { + "path": "provenance/submission_SHA256SUMS", + "sha256": "cf0e33d454260a8fa949a9c5fea60bac6291b84c3db573e48fb1735f3a2a2772", + "bytes": 76063 + }, + { + "path": "provenance/submission_code_inventory.tsv", + "sha256": "80aae521be2bdc5ac2337ea733f7a8ade028f788499d7d44ff1b6e7389639c8d", + "bytes": 193630 + }, + { + "path": "provenance/submission_requirements.txt", + "sha256": "48da67d3a47fb1155389fccdd9022b825b2eeefb60e28260633ec4c2fe00a33f", + "bytes": 277 + }, + { + "path": "provenance/third_party_archives.json", + "sha256": "05832b5f811b977c09418c79545d8e38c689973b4a91e36a96e20389ac3c0e2c", + "bytes": 10773 + }, + { + "path": "provenance/training_v8_before_resume_load_fix.py", + "sha256": "b7cb8a39e167f2cc9e35476dcdcad56320b02c1898d13db3236a41bbb2ed4852", + "bytes": 42151 + }, + { + "path": "provenance/wa3_config.json", + "sha256": "be8f4ae30ae2fbd8f91de0e5db98de3044213e24587717775c31df37e2272dbb", + "bytes": 1321 + }, + { + "path": "requirements-analysis.txt", + "sha256": "fcbf7a31abd2f468c589feca4111a1d5b851e587046aed53ca0196deb3f39e74", + "bytes": 88 + }, + { + "path": "requirements.txt", + "sha256": "1c89cbdda9d2c1fb7a3df6692f93eb2765f59f64dd3392b8799697f3238a8867", + "bytes": 103 + }, + { + "path": "score_predictions.py", + "sha256": "428d6c855cd9a6a1988581f9d71bd85a130ceb7b803e6190b3590f5e40ef426c", + "bytes": 1744 + } + ], + "limits": "Snapshot for public portable runtime checks; global publication manifests not yet frozen." +} diff --git a/releases/2026-10-02/provenance/portable_execution_20260930/execution_receipt.json b/releases/2026-10-02/provenance/portable_execution_20260930/execution_receipt.json new file mode 100644 index 0000000000000000000000000000000000000000..3c26ed590282eb2291152c886cbf04d022d36848 --- /dev/null +++ b/releases/2026-10-02/provenance/portable_execution_20260930/execution_receipt.json @@ -0,0 +1,47 @@ +{ + "status": "PASS_PORTABLE_RUNTIME_CHECKS", + "job_id": "16683971", + "host": "nova18-wide-4", + "code_archive_sha256": "1eed149a11ec9c7f1438f5fadd68580365acf62fda14e6e89bacfd93265579b4", + "fresh_code_extraction": true, + "code_files_verified": 516, + "results": { + "binding": { + "returncode": 0, + "command": [ + "/work/ratul1/supantha/miniconda3/bin/python3.10", + "-m", + "bertosebind_inference.check_real_examples", + "--checkpoint-map", + "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/binding_checkpoint_map.json", + "--features-dir", + "/work/ratul1/supantha/Bertint/data/review_affinose_glycan_features_20260824_r1", + "--protein-h5", + "/work/ratul1/supantha/Bertint/affinose_v2_esmc_by_seqhash_r2.h5", + "--threads", + "4", + "--report", + "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/binding_portable_report.json" + ] + }, + "iar": { + "returncode": 0, + "command": [ + "/work/ratul1/supantha/miniconda3/bin/python3.10", + "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/iar_inference/infer.py", + "--source-root", + "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/bertose_source", + "--readout-root", + "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/iar_completion", + "--checkpoint", + "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "--output-dir", + "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/iar_output", + "--threads", + "4" + ] + } + }, + "work_directory": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971", + "scope": "Nine BERToseBind fits and two recorded single-linkage IAR cases; no training or benchmark metrics." +} diff --git a/releases/2026-10-02/provenance/portable_execution_20260930/iar_portable_report.json b/releases/2026-10-02/provenance/portable_execution_20260930/iar_portable_report.json new file mode 100644 index 0000000000000000000000000000000000000000..5769223a0d5c1ba5e31a0e8b04a40bf22dfacd2d --- /dev/null +++ b/releases/2026-10-02/provenance/portable_execution_20260930/iar_portable_report.json @@ -0,0 +1,373 @@ +{ + "schema": "bertose_portable_two_case_iar_result_v1", + "status": "PASS_PORTABLE_FULL_WA3_TWO_CASE_REFERENCE_CHECK", + "started_unix": 1790804309.1247673, + "scope": "The two byte-pinned, official-helper-rebuilt single-linkage cases only; physical modalities explicitly absent. No refit, raw-WURCS conversion, fallback, corpus metrics or training authorization.", + "config_sha256": "043a38744f9fd832181d822ae8481488d954604bf615b2eb05c4c8ad29794325", + "inference_script_sha256": "9237b349668ea3fb5266f4696169fd958e9f997e5064ede0ab06e41859b17361", + "checkpoint_path": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_checkpoints/review_md20x6_checkpoint_best.pt", + "verified_files": [ + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_composite_r4.py", + "sha256": "52a311636e7631b97711aab63aec28e2ada47a446d1aecc1a47921d584f69f9d" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_composite_r5.py", + "sha256": "24c35257fc61e1c9c77630d2b0075775a7f46b6500ecb5f175ef8f42bd214e0e" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/review_md_temporal_20x6_core_r3.py", + "sha256": "3e96d8092239c2c21f217ad5bae4ee7e07dbe0f7630b213bad468d6b08d3b1c1" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_r4_lineage_receipt_r1.json", + "sha256": "b5fbdff168de23676208484ccccc3cc32f613ea411d193e6d8930456e8edeeef" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r3/review_a5_topology_loss_v2.py", + "sha256": "64eaf9174f523ae909c84987049d071bf3869ca8e83919f14f0572ef77b0530e" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/bertose_source/writing/review/multimodal/runtime/a5_ms_acquisition_top30_v3_20260721_r3/review_a5_ms_acquisition_top30_runtime_v3.py", + "sha256": "68c0d543c5411276ef56c7072bded4ebda886f46b9fa4ebf3c95c1e54c1a08c6" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_receipt.json", + "sha256": "399df3de2b6c4d5e88aa442c8326214ab9cff2e8f0411e6921762bbade1475ba" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_summary.json", + "sha256": "93ed219d807d4a7735be96bf7cf6a59a0bd407619925ee194aed6d473048cdf0" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py", + "sha256": "6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py", + "sha256": "10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_authority.json", + "sha256": "48914855c4e458ff02452ad4db3743a4fbef12221e0313584db4c2b1bd684cd4" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_receipt.json", + "sha256": "f654177eb6fde7289b6755812c2be298084697cf0d85159b3ec9da310fe3d4b4" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_independent_certificate.json", + "sha256": "53098620a5c22dafdc951ba743515b4b10b1673c02f0aa4d881db669584902fa" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/iar_completion/readout.py", + "sha256": "42464d76c743a302bae79ced6b09af9657444c6f977535b5de49dcf59a5a8a90" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/iar_completion/model_metadata.json", + "sha256": "bbf016ce2f1a7dc82940be28397cbe8083da7ad0f5f525b1cf7345fd42a5758d" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/iar_completion/assets/linkage_readout.pt", + "sha256": "a03990a02a1737de05a7fa1739164e84fa6a0a4170ebaa65317a9f3c2f16c0b0" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/iar_completion/originals/wa3_final_iar_readout_all.py", + "sha256": "72f8583bf32799ba29c09829d138900c0cbb589f73bd278f389da6fa8a786730" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/iar_inference/original_inference_helpers.py", + "sha256": "87fa484e1f6105fa476dff4cf8c7e6aea71a2aac537796131a4858632f54b906" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/iar_inference/fixtures/case0_pre_sequence_head.npy", + "sha256": "a212cfbd49ec2f951e942c92caaac63260687a626eca588cb692d86bb1e52198" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/iar_inference/fixtures/case1_pre_sequence_head.npy", + "sha256": "6ffca438526432a33168a85a0fee1158fd2a9c9f23ecb97f587235f204ae50b3" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/iar_inference/fixtures/rebuilt_two_case_inputs.json", + "sha256": "60ac0c0fd1b6e0ada2d847d1fccff4f6fe7c085aab3146247dc5d7bfebbabc27" + }, + { + "path": "/work/ratul1/supantha/glycan-SD-VS/review/release_assembly_20260930_r1/portable_checks/execution_16683971/code/iar_inference/fixtures/reference_smoke_report.json", + "sha256": "60dcdb6262457962da84c7b239c194fac343bd8d27db0e05f15906acb9bf5f4b" + } + ], + "limits": [ + "Two recorded single-linkage inputs only; no general raw-WURCS conversion or corpus parity.", + "Physical modalities are explicitly absent; their active paths and residue/multitoken fallback are untested.", + "This is CPU inference, not a historical CUDA numerical replay or a model-quality estimate.", + "Original component/model guards are retained. Training/static-release launch bootstrap is outside this inference scope." + ], + "runtime": { + "python": "3.10.16", + "torch": "2.9.1+cu128", + "numpy": "2.2.6", + "device": "cpu", + "precision": "float32", + "threads": 4, + "host": "nova18-wide-4" + }, + "phase": "two_recorded_case_inference_and_reference_comparison", + "full_model": { + "state_entries": 505, + "parameters": 138487995, + "strict_load": true, + "checkpoint_sha256": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "component_authorities": { + "r4_source": "52a311636e7631b97711aab63aec28e2ada47a446d1aecc1a47921d584f69f9d", + "r4_lineage_receipt": "b5fbdff168de23676208484ccccc3cc32f613ea411d193e6d8930456e8edeeef", + "topology_loss_source": "64eaf9174f523ae909c84987049d071bf3869ca8e83919f14f0572ef77b0530e", + "sequence_receipt": "399df3de2b6c4d5e88aa442c8326214ab9cff2e8f0411e6921762bbade1475ba", + "sequence_summary": "93ed219d807d4a7735be96bf7cf6a59a0bd407619925ee194aed6d473048cdf0", + "sequence_vocabulary": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "sequence_bpe_source": "6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4", + "sequence_tree_source": "10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04", + "ms_authority": "48914855c4e458ff02452ad4db3743a4fbef12221e0313584db4c2b1bd684cd4", + "ms_receipt": "f654177eb6fde7289b6755812c2be298084697cf0d85159b3ec9da310fe3d4b4", + "ms_certificate": "53098620a5c22dafdc951ba743515b4b10b1673c02f0aa4d881db669584902fa", + "ms_runtime": "68c0d543c5411276ef56c7072bded4ebda886f46b9fa4ebf3c95c1e54c1a08c6" + } + }, + "cases": [ + { + "dataset": "bench1392", + "case_id": "g0000_s00_linkage_38_38", + "used_saved_readout": true, + "wa3_position": 43, + "truth_token_id": 1720, + "truth_token": "g8-h2", + "final_token_id": 1720, + "final_token": "g8-h2", + "abstained": false, + "rounds": [ + { + "iteration": 1, + "hidden_sha256_c_order_bytes": "ff29f35c4eb22549a5185b89c2bf9dabe5ff7f4a3fdc44291cbfa724eb5349ee", + "top10": [ + { + "token_id": 1720, + "token": "g8-h2", + "probability": 0.9999593496322632 + }, + { + "token_id": 1261, + "token": "g3-h2", + "probability": 4.006435483461246e-05 + }, + { + "token_id": 1380, + "token": "h8-i2", + "probability": 2.607788189834537e-07 + }, + { + "token_id": 1122, + "token": "d3-e2", + "probability": 1.445049662152087e-07 + }, + { + "token_id": 531, + "token": "g2-h1", + "probability": 1.0591251964342518e-07 + }, + { + "token_id": 544, + "token": "g3-h1", + "probability": 6.952672038096352e-08 + }, + { + "token_id": 1548, + "token": "m6-n2", + "probability": 1.4976388129639417e-08 + }, + { + "token_id": 1572, + "token": "h3-i2", + "probability": 8.80937189862152e-09 + }, + { + "token_id": 710, + "token": "f3-g2", + "probability": 6.006392716528808e-09 + }, + { + "token_id": 486, + "token": "g4-h1", + "probability": 4.912561468728427e-09 + } + ], + "accepted": true + } + ] + }, + { + "dataset": "seal162", + "case_id": "g0000_s00_linkage_9_9", + "used_saved_readout": true, + "wa3_position": 9, + "truth_token_id": 228, + "truth_token": "a4-b1", + "final_token_id": 4, + "final_token": "[MASK]", + "abstained": true, + "rounds": [ + { + "iteration": 1, + "hidden_sha256_c_order_bytes": "1cd693d3ea8df175d65f0eca3673ce2a73dff666d1cf06aa84bf4943127c3be8", + "top10": [ + { + "token_id": 228, + "token": "a4-b1", + "probability": 0.7713369131088257 + }, + { + "token_id": 262, + "token": "a3-b1", + "probability": 0.2158111184835434 + }, + { + "token_id": 404, + "token": "a6-b1", + "probability": 0.01060701534152031 + }, + { + "token_id": 399, + "token": "a2-b1", + "probability": 0.002030769130215049 + }, + { + "token_id": 518, + "token": "a5-b1", + "probability": 9.787840826902539e-05 + }, + { + "token_id": 1282, + "token": "a7-b1", + "probability": 7.618743984494358e-05 + }, + { + "token_id": 710, + "token": "f3-g2", + "probability": 1.4471691429207567e-05 + }, + { + "token_id": 1252, + "token": "d6-g1", + "probability": 8.236345820478164e-06 + }, + { + "token_id": 1331, + "token": "c3-d2", + "probability": 2.9395614546956494e-06 + }, + { + "token_id": 466, + "token": "h4-i1", + "probability": 1.904394366647466e-06 + } + ], + "accepted": false + }, + { + "iteration": 2, + "hidden_sha256_c_order_bytes": "1cd693d3ea8df175d65f0eca3673ce2a73dff666d1cf06aa84bf4943127c3be8", + "top10": [ + { + "token_id": 228, + "token": "a4-b1", + "probability": 0.7713369131088257 + }, + { + "token_id": 262, + "token": "a3-b1", + "probability": 0.2158111184835434 + }, + { + "token_id": 404, + "token": "a6-b1", + "probability": 0.01060701534152031 + }, + { + "token_id": 399, + "token": "a2-b1", + "probability": 0.002030769130215049 + }, + { + "token_id": 518, + "token": "a5-b1", + "probability": 9.787840826902539e-05 + }, + { + "token_id": 1282, + "token": "a7-b1", + "probability": 7.618743984494358e-05 + }, + { + "token_id": 710, + "token": "f3-g2", + "probability": 1.4471691429207567e-05 + }, + { + "token_id": 1252, + "token": "d6-g1", + "probability": 8.236345820478164e-06 + }, + { + "token_id": 1331, + "token": "c3-d2", + "probability": 2.9395614546956494e-06 + }, + { + "token_id": 466, + "token": "h4-i1", + "probability": 1.904394366647466e-06 + } + ], + "accepted": false + } + ] + } + ], + "forward_calls": 2, + "reference_comparisons": [ + { + "case_id": "g0000_s00_linkage_38_38", + "hidden_allclose": true, + "hidden_max_abs_difference": 0.0, + "hidden_bitwise_equal": true + }, + { + "case_id": "g0000_s00_linkage_9_9", + "hidden_allclose": true, + "hidden_max_abs_difference": 0.0, + "hidden_bitwise_equal": true + } + ], + "neutral_vector_sha256_c_order_bytes": "297bc451bcb34097045af18278e9cbeabbf38fdb22777d77aee87001784d4b29", + "neutral_vector_bitwise_reference_match": true, + "readout": { + "sha256": "a03990a02a1737de05a7fa1739164e84fa6a0a4170ebaa65317a9f3c2f16c0b0", + "classes": 211, + "fit": { + "dev_accuracy_for_selection": 0.7359, + "best_epoch": 46, + "tokens": 211, + "train_samples": 111989, + "development_samples": 27690, + "feature_dim": 768 + }, + "refit": false + }, + "finished_unix": 1790804319.4647648 +} diff --git a/releases/2026-10-02/provenance/release_manifest.json b/releases/2026-10-02/provenance/release_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..7aff10e81c93149c284017dddd08151e5b94a7a9 --- /dev/null +++ b/releases/2026-10-02/provenance/release_manifest.json @@ -0,0 +1,4457 @@ +{ + "schema": "bertose_code_release_manifest_v1", + "self_hash_policy": "release_manifest.json and SHA256SUMS excluded from files; SHA256SUMS includes manifest.", + "copied_source_count": 474, + "revision_assembly_date": "2026-10-02", + "payload_files": 576, + "public_uploads_performed": false, + "prior_code_manifest_sha256": "dc86a9a4c577d1416319f65610b5e860d84e0f3d555eba5bd733faa909b5d033", + "files": [ + { + "path": ".gitattributes", + "bytes": 83, + "sha256": "87c07b5f72ac341f0eb42c040e0617c9512c4ec9f89a20790580d01d473f1b99", + "role": "portable_release_file" + }, + { + "path": ".gitignore", + "bytes": 44, + "sha256": "6f8f72cd77c10018fd9f9666bad581556097a04a67d11e3e831ef21bb250f25b", + "role": "portable_release_file" + }, + { + "path": "LICENSE", + "bytes": 10173, + "sha256": "a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9", + "role": "unchanged_preserved_source_or_asset", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/huggingface_release/bertose-glycan-encoder/LICENSE", + "source_sha256": "a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9" + }, + { + "path": "NOTICE", + "bytes": 1024, + "sha256": "b6c446fc86540a7a2c432368a5987ed15d622820a0b1bdf45c7cd7273b9bcad0", + "role": "portable_release_file" + }, + { + "path": "README.md", + "bytes": 3540, + "sha256": "5b60c2b1da93ffe81348a456f7f43ba0909855355347f1ea18436c8acb613843", + "role": "documented_revised_release_file", + "prior_release_sha256": "66394ada302d12a8af27b9c45510175a9138d4b9255cc10623293bbc94a9e4bb" + }, + { + "path": "affinose/a1111_encoder_adapter.py", + "bytes": 6455, + "sha256": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/affinose/a1111_encoder_adapter.py", + "source_sha256": "52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98" + }, + { + "path": "affinose/a5_tokenizer_shim.py", + "bytes": 2798, + "sha256": "c4bbe5c1a0286b319f0b71c87669b4f9cfe781051019fb02a98b5d7e208b8b2b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/affinose/a5_tokenizer_shim.py", + "source_sha256": "c4bbe5c1a0286b319f0b71c87669b4f9cfe781051019fb02a98b5d7e208b8b2b" + }, + { + "path": "affinose/bertint_v8.py", + "bytes": 38450, + "sha256": "7fa8d6fe95db3ccecefdd396931d6354442800cd5284cabf519e3425cc388883", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/affinose/bertint_v8.py", + "source_sha256": "7fa8d6fe95db3ccecefdd396931d6354442800cd5284cabf519e3425cc388883" + }, + { + "path": "affinose/dataset_v8.py", + "bytes": 15495, + "sha256": "27e7fe6820357551e9e09a135db4a9d2cff5c4382f5396912dced12c54aaa288", + "role": "documented_revised_release_file", + "source": "submit_comm/06_code/affinose/dataset_v8.py", + "source_sha256": "b6c2483e2975c4c7d7dfde6b2979c8e1e862564279c7ebba4e65b504776b43df", + "prior_release_sha256": "b6c2483e2975c4c7d7dfde6b2979c8e1e862564279c7ebba4e65b504776b43df" + }, + { + "path": "affinose/training_v8.py", + "bytes": 42227, + "sha256": "82d1d55ed231740fff88065cff7eb9bc45907d69f7c96beebf7eb5fa6e1ae52d", + "role": "documented_revised_release_file", + "source": "submit_comm/06_code/affinose/training_v8.py", + "source_sha256": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949", + "prior_release_sha256": "6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949" + }, + { + "path": "benchmark_exclusion/MANIFEST_SHA256.tsv", + "bytes": 1248, + "sha256": "8452e3ac521af1d3ea24bb5a99e02a930d913fc96394e5610fe8b86e19ea89ec", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/benchmark_exclusion/MANIFEST_SHA256.tsv", + "source_sha256": "8452e3ac521af1d3ea24bb5a99e02a930d913fc96394e5610fe8b86e19ea89ec" + }, + { + "path": "benchmark_exclusion/README.md", + "bytes": 7784, + "sha256": "96567c3b9c3e254bceb6bd82e43c1f252b987ced58dad41d3b4406b9f58a76ec", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/benchmark_exclusion/README.md", + "source_sha256": "96567c3b9c3e254bceb6bd82e43c1f252b987ced58dad41d3b4406b9f58a76ec" + }, + { + "path": "benchmark_exclusion/SHA256SUMS", + "bytes": 1332, + "sha256": "3d37d993b1cd4135ca9fe90feca856b73907d725516ea652425ca24060769698", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/benchmark_exclusion/SHA256SUMS", + "source_sha256": "3d37d993b1cd4135ca9fe90feca856b73907d725516ea652425ca24060769698" + }, + { + "path": "benchmark_exclusion/code_inventory.tsv", + "bytes": 1965, + "sha256": "e2e0dfa7d133362146de10ba3dd774e9a3e186088f976189b0aae9d26b442bc4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/benchmark_exclusion/code_inventory.tsv", + "source_sha256": "e2e0dfa7d133362146de10ba3dd774e9a3e186088f976189b0aae9d26b442bc4" + }, + { + "path": "benchmark_exclusion/required_successor_inputs.json", + "bytes": 14147, + "sha256": "050c0af96f133ded3139baf6dfea594f91c6659f411dc25fc06d5847951b2f0c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/benchmark_exclusion/required_successor_inputs.json", + "source_sha256": "050c0af96f133ded3139baf6dfea594f91c6659f411dc25fc06d5847951b2f0c" + }, + { + "path": "benchmark_exclusion/source_verification.json", + "bytes": 8601, + "sha256": "0507537ca8ee05b249f9ab3f3fa09de94b7acc633b91235f2778ae07659096bd", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/benchmark_exclusion/source_verification.json", + "source_sha256": "0507537ca8ee05b249f9ab3f3fa09de94b7acc633b91235f2778ae07659096bd" + }, + { + "path": "benchmark_exclusion/writing/review/glytoucan/scripts/build_connection_level_support_audit.py", + "bytes": 21842, + "sha256": "3d598a249db90c928f8a317923ba5d37eebbc1f63383a2c39e0541f20c31ccac", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/benchmark_exclusion/writing/review/glytoucan/scripts/build_connection_level_support_audit.py", + "source_sha256": "3d598a249db90c928f8a317923ba5d37eebbc1f63383a2c39e0541f20c31ccac" + }, + { + "path": "benchmark_exclusion/writing/review/multimodal/scripts/build_p1_direct_local_neighbor_audit_20260710.py", + "bytes": 36975, + "sha256": "a9160769759c1df56238caad6a9f4ed6ec68477d44435ebbc81d64bbf541b64c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/benchmark_exclusion/writing/review/multimodal/scripts/build_p1_direct_local_neighbor_audit_20260710.py", + "source_sha256": "a9160769759c1df56238caad6a9f4ed6ec68477d44435ebbc81d64bbf541b64c" + }, + { + "path": "benchmark_exclusion/writing/review/multimodal/scripts/build_p1_non_iar_exact_graph_authority_20260711.py", + "bytes": 15043, + "sha256": "0f88f53e22d0c068a87a09508a9d286e4982eddcb4e2154e63b2ca25339ece69", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/benchmark_exclusion/writing/review/multimodal/scripts/build_p1_non_iar_exact_graph_authority_20260711.py", + "source_sha256": "0f88f53e22d0c068a87a09508a9d286e4982eddcb4e2154e63b2ca25339ece69" + }, + { + "path": "benchmark_exclusion/writing/review/multimodal/scripts/build_review_a5_non_iar_later_role_successor_20260720.py", + "bytes": 38441, + "sha256": "2c8821586df1caa53556b4cc14e6cd7507af4830aa8a149657571e0455eb6853", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/benchmark_exclusion/writing/review/multimodal/scripts/build_review_a5_non_iar_later_role_successor_20260720.py", + "source_sha256": "2c8821586df1caa53556b4cc14e6cd7507af4830aa8a149657571e0455eb6853" + }, + { + "path": "benchmark_exclusion/writing/review/multimodal/scripts/repartition_a5_non_iar_80_20_20260712.py", + "bytes": 14084, + "sha256": "cd86a0a0b228c32e51ec73490711e37da3e6c9fdf9e64e980b7222b5312484aa", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/benchmark_exclusion/writing/review/multimodal/scripts/repartition_a5_non_iar_80_20_20260712.py", + "source_sha256": "cd86a0a0b228c32e51ec73490711e37da3e6c9fdf9e64e980b7222b5312484aa" + }, + { + "path": "benchmark_exclusion/writing/review/multimodal/tests/test_build_review_a5_non_iar_later_role_successor_20260720.py", + "bytes": 7856, + "sha256": "966889118fa567729e1959750b1601018ba117aed0bfad3508005ba6b1896a08", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/benchmark_exclusion/writing/review/multimodal/tests/test_build_review_a5_non_iar_later_role_successor_20260720.py", + "source_sha256": "966889118fa567729e1959750b1601018ba117aed0bfad3508005ba6b1896a08" + }, + { + "path": "bertose.py", + "bytes": 6617, + "sha256": "92a9fb830e7adfad3d6999bd3b0cd73f2d5414934c65521a3ee7c6f59003a66d", + "role": "portable_release_file" + }, + { + "path": "bertose_source/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py", + "bytes": 27983, + "sha256": "0bc54399362945601bcfd403441fc80968d173200dd0561f57568b2053a94839", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py", + "source_sha256": "0bc54399362945601bcfd403441fc80968d173200dd0561f57568b2053a94839" + }, + { + "path": "bertose_source/bert_training_v4/model/__init__.py", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/bert_training_v4/model/__init__.py", + "source_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "path": "bertose_source/bert_training_v4/model/glycan_bert.py", + "bytes": 11024, + "sha256": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/bert_training_v4/model/glycan_bert.py", + "source_sha256": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb" + }, + { + "path": "bertose_source/bert_training_v4/model/multimodal_glycan_bert_v3.py", + "bytes": 45625, + "sha256": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/bert_training_v4/model/multimodal_glycan_bert_v3.py", + "source_sha256": "83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190" + }, + { + "path": "bertose_source/data/bpe_vocabulary.json", + "bytes": 43547, + "sha256": "8a7f8569ff3a21513723d3a15e969120f0fdcf352943dbbadfdc54afd382149e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/data/bpe_vocabulary.json", + "source_sha256": "8a7f8569ff3a21513723d3a15e969120f0fdcf352943dbbadfdc54afd382149e" + }, + { + "path": "bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_authority.json", + "bytes": 20541, + "sha256": "48914855c4e458ff02452ad4db3743a4fbef12221e0313584db4c2b1bd684cd4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_authority.json", + "source_sha256": "48914855c4e458ff02452ad4db3743a4fbef12221e0313584db4c2b1bd684cd4" + }, + { + "path": "bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_independent_certificate.json", + "bytes": 19121, + "sha256": "53098620a5c22dafdc951ba743515b4b10b1673c02f0aa4d881db669584902fa", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_independent_certificate.json", + "source_sha256": "53098620a5c22dafdc951ba743515b4b10b1673c02f0aa4d881db669584902fa" + }, + { + "path": "bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_receipt.json", + "bytes": 6260, + "sha256": "f654177eb6fde7289b6755812c2be298084697cf0d85159b3ec9da310fe3d4b4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_receipt.json", + "source_sha256": "f654177eb6fde7289b6755812c2be298084697cf0d85159b3ec9da310fe3d4b4" + }, + { + "path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bytes": 138150, + "sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "source_sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b" + }, + { + "path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py", + "bytes": 11405, + "sha256": "10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py", + "source_sha256": "10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04" + }, + { + "path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py", + "bytes": 6186, + "sha256": "f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py", + "source_sha256": "f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7" + }, + { + "path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py", + "bytes": 14161, + "sha256": "6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py", + "source_sha256": "6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4" + }, + { + "path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_receipt.json", + "bytes": 5797, + "sha256": "399df3de2b6c4d5e88aa442c8326214ab9cff2e8f0411e6921762bbade1475ba", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_receipt.json", + "source_sha256": "399df3de2b6c4d5e88aa442c8326214ab9cff2e8f0411e6921762bbade1475ba" + }, + { + "path": "bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_summary.json", + "bytes": 7777, + "sha256": "93ed219d807d4a7735be96bf7cf6a59a0bd407619925ee194aed6d473048cdf0", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_summary.json", + "source_sha256": "93ed219d807d4a7735be96bf7cf6a59a0bd407619925ee194aed6d473048cdf0" + }, + { + "path": "bertose_source/model/glycan_bert.py", + "bytes": 11024, + "sha256": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/model/glycan_bert.py", + "source_sha256": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb" + }, + { + "path": "bertose_source/model/multimodal_glycan_bert_v3.py", + "bytes": 45141, + "sha256": "8e06c32f4e844c3c66f146fd15a075472808a0720c892d0b9683dfd32f15ef0c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/model/multimodal_glycan_bert_v3.py", + "source_sha256": "8e06c32f4e844c3c66f146fd15a075472808a0720c892d0b9683dfd32f15ef0c" + }, + { + "path": "bertose_source/training/a5_wurcs_bpe.py", + "bytes": 14161, + "sha256": "6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/training/a5_wurcs_bpe.py", + "source_sha256": "6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_submission_readback_11767377/review_a5_native_eight_cuda_resume_diagnostic_r5_11767377_terminal_certification_receipt.json", + "bytes": 4862, + "sha256": "2a3b28bd980b144eb42f9688f411adfbced054b9e7bad9fac4de37c6180064f8", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_submission_readback_11767377/review_a5_native_eight_cuda_resume_diagnostic_r5_11767377_terminal_certification_receipt.json", + "source_sha256": "2a3b28bd980b144eb42f9688f411adfbced054b9e7bad9fac4de37c6180064f8" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_a5_native_eight_cuda_resume_diagnostic_receipt_r5.json", + "bytes": 127461, + "sha256": "6a1bc65c568a17dc45f1102cd122ac43c62a8ee3b28e06ec855577857cc41ce0", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_a5_native_eight_cuda_resume_diagnostic_receipt_r5.json", + "source_sha256": "6a1bc65c568a17dc45f1102cd122ac43c62a8ee3b28e06ec855577857cc41ce0" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_checkpoints_r1/review_checkpoint_index.json", + "bytes": 796, + "sha256": "9292c31195a7eddfe9f987a8cfe8cda843b283bb10a1bc8fb1b05d88f82a92d9", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_checkpoints_r1/review_checkpoint_index.json", + "source_sha256": "9292c31195a7eddfe9f987a8cfe8cda843b283bb10a1bc8fb1b05d88f82a92d9" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r1/review_a5_native_eight_data_adapter_receipt_r1.json", + "bytes": 4132, + "sha256": "cacec838740d64a493c2e56fd1efa8a85ba7d11fce3ec26e40905c33db05e58d", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r1/review_a5_native_eight_data_adapter_receipt_r1.json", + "source_sha256": "cacec838740d64a493c2e56fd1efa8a85ba7d11fce3ec26e40905c33db05e58d" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_receipt_r2.json", + "bytes": 3677, + "sha256": "3b2118e128a5550ba4918b4f4f2c6d8045e319b7cff37b76d74dce6b3220c9f0", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_receipt_r2.json", + "source_sha256": "3b2118e128a5550ba4918b4f4f2c6d8045e319b7cff37b76d74dce6b3220c9f0" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_receipt_r3.json", + "bytes": 3016, + "sha256": "e29df7a91d0c30238abe9155e600fb1b77b0d3d3481f6599d2ca0d2185371b9f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_receipt_r3.json", + "source_sha256": "e29df7a91d0c30238abe9155e600fb1b77b0d3d3481f6599d2ca0d2185371b9f" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_verification_receipt_r1.json", + "bytes": 2659, + "sha256": "a92f4b951476e84af006015c97698f07d5e03e7a182c54c82b7d7c5c0e68ffb3", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_verification_receipt_r1.json", + "source_sha256": "a92f4b951476e84af006015c97698f07d5e03e7a182c54c82b7d7c5c0e68ffb3" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4_integrity_receipt.json", + "bytes": 5728, + "sha256": "9aa5860bfc032afd82561a6db6f8df1439245b73aa3f7575b2b88836e384a1f9", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4_integrity_receipt.json", + "source_sha256": "9aa5860bfc032afd82561a6db6f8df1439245b73aa3f7575b2b88836e384a1f9" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5_integrity_receipt.json", + "bytes": 3995, + "sha256": "59a2fd53e9e75f6f8ec258d76e103adb61c908ab0ace6718a348739f5b70d8bd", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5_integrity_receipt.json", + "source_sha256": "59a2fd53e9e75f6f8ec258d76e103adb61c908ab0ace6718a348739f5b70d8bd" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6_integrity_receipt.json", + "bytes": 3933, + "sha256": "0c078ce52e2eb6d6feaeb1a1c2af1794ef33aef56aca7959f76a93f39d152692", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6_integrity_receipt.json", + "source_sha256": "0c078ce52e2eb6d6feaeb1a1c2af1794ef33aef56aca7959f76a93f39d152692" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7_integrity_receipt.json", + "bytes": 2968, + "sha256": "912bc1391ff66c3fd704e61266de508adcf9ed587d7e136932508029b77cb956", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7_integrity_receipt.json", + "source_sha256": "912bc1391ff66c3fd704e61266de508adcf9ed587d7e136932508029b77cb956" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_final_binding_r22.json", + "bytes": 3104, + "sha256": "d8feaf25a7266a919c42d3a4fd1ad2d105ab088ae79c024edc665dfa29cf758a", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_final_binding_r22.json", + "source_sha256": "d8feaf25a7266a919c42d3a4fd1ad2d105ab088ae79c024edc665dfa29cf758a" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_launch_config_r22.json", + "bytes": 2514, + "sha256": "30082379d47318f5d9e17fafad4aa018e7e9f0f0bf1aac559178d46784fe4b9f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_launch_config_r22.json", + "source_sha256": "30082379d47318f5d9e17fafad4aa018e7e9f0f0bf1aac559178d46784fe4b9f" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/run_review_a5_native_eight_r22.sbatch", + "bytes": 3603, + "sha256": "826f3e8167fdd459cff7677b5b69d0f3caf9dababaaa71d9eded6070aa5d93a7", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/run_review_a5_native_eight_r22.sbatch", + "source_sha256": "826f3e8167fdd459cff7677b5b69d0f3caf9dababaaa71d9eded6070aa5d93a7" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_authority_r1.json", + "bytes": 14887, + "sha256": "1238f76e5da5184d16d33077bf3e5342033918fadb4eba84242c47cb1b1322cc", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_authority_r1.json", + "source_sha256": "1238f76e5da5184d16d33077bf3e5342033918fadb4eba84242c47cb1b1322cc" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_receipt_r1.json", + "bytes": 743, + "sha256": "fb65dddf0bc61b4c73b5dc5ec796967e65263e9d7bdc4882e07684e882280fdb", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_receipt_r1.json", + "source_sha256": "fb65dddf0bc61b4c73b5dc5ec796967e65263e9d7bdc4882e07684e882280fdb" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r3/review_a5_topology_loss_v2.py", + "bytes": 8067, + "sha256": "64eaf9174f523ae909c84987049d071bf3869ca8e83919f14f0572ef77b0530e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r3/review_a5_topology_loss_v2.py", + "source_sha256": "64eaf9174f523ae909c84987049d071bf3869ca8e83919f14f0572ef77b0530e" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_receipt_r4.json", + "bytes": 2678, + "sha256": "654f5b9728c3dfd2588c4b570b0e3a1bcab8feb366af28eeead36f9beb37d921", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_receipt_r4.json", + "source_sha256": "654f5b9728c3dfd2588c4b570b0e3a1bcab8feb366af28eeead36f9beb37d921" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_summary_r4.json", + "bytes": 3228, + "sha256": "ccd4b81d3afac8ae789c538e0af332f74f2468d403da1d243fefefd4df013538", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_summary_r4.json", + "source_sha256": "ccd4b81d3afac8ae789c538e0af332f74f2468d403da1d243fefefd4df013538" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null.json", + "bytes": 3278, + "sha256": "b10556643abf560b9e8622e8ae67936d2d3ca8867433db485e785f31d049a8fb", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null.json", + "source_sha256": "b10556643abf560b9e8622e8ae67936d2d3ca8867433db485e785f31d049a8fb" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null_receipt.json", + "bytes": 1340, + "sha256": "f4eb239f56e472d57dd3a3848c1a6c142e193cb326320ac8bf134b96ac35102a", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null_receipt.json", + "source_sha256": "f4eb239f56e472d57dd3a3848c1a6c142e193cb326320ac8bf134b96ac35102a" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_frozen_sequence_masking_runtime.py", + "bytes": 12583, + "sha256": "831bebd2dcf6a8308d01ec62eb6e1132fe7edbbc666c1c83787335acc576b19c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_frozen_sequence_masking_runtime.py", + "source_sha256": "831bebd2dcf6a8308d01ec62eb6e1132fe7edbbc666c1c83787335acc576b19c" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_receipt_r1.json", + "bytes": 1348, + "sha256": "eae6b3772cd08c65cdc26bdf7ec525742452aad4a35b4d5aa9a7a5936dc3bf73", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_receipt_r1.json", + "source_sha256": "eae6b3772cd08c65cdc26bdf7ec525742452aad4a35b4d5aa9a7a5936dc3bf73" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_summary_r1.json", + "bytes": 8477, + "sha256": "da7814d20c81c0d072544cfc5761e8fae0292def176d63b863083389c9caa0ff", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_summary_r1.json", + "source_sha256": "da7814d20c81c0d072544cfc5761e8fae0292def176d63b863083389c9caa0ff" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_receipt.json", + "bytes": 1166, + "sha256": "ba9591529f3747706fbc169fe8262e23ca31a810473d10c284fb01d9190ebe42", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_receipt.json", + "source_sha256": "ba9591529f3747706fbc169fe8262e23ca31a810473d10c284fb01d9190ebe42" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_summary.json", + "bytes": 6916, + "sha256": "d6b3dad73d8c9cc78a7c721e7969280d0ff6500773402545bc2ff143b125f56c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_summary.json", + "source_sha256": "d6b3dad73d8c9cc78a7c721e7969280d0ff6500773402545bc2ff143b125f56c" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762446_r1.json", + "bytes": 2833, + "sha256": "8ff3181d22567728c0a10580c1e775da0714f17561ace81034fc673813f54af6", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762446_r1.json", + "source_sha256": "8ff3181d22567728c0a10580c1e775da0714f17561ace81034fc673813f54af6" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762534_r1.json", + "bytes": 2833, + "sha256": "163374c5c6b049908d935f0d92d8f1a1adda761550761db9b2cb423bfb450ee1", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762534_r1.json", + "source_sha256": "163374c5c6b049908d935f0d92d8f1a1adda761550761db9b2cb423bfb450ee1" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762446_r2.json", + "bytes": 1575, + "sha256": "85711141c9d0e84dee228df84d02df7d4693fb4b85b1ae8163466e208f5e9fd6", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762446_r2.json", + "source_sha256": "85711141c9d0e84dee228df84d02df7d4693fb4b85b1ae8163466e208f5e9fd6" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762534_r3.json", + "bytes": 1575, + "sha256": "0d96b7867eeec85dbf14eb8f55b745b7c354edb5d16ac702d17b97bf850c79af", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762534_r3.json", + "source_sha256": "0d96b7867eeec85dbf14eb8f55b745b7c354edb5d16ac702d17b97bf850c79af" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762446_r2.json", + "bytes": 1391, + "sha256": "f7adbf64e17c3a2afc677b7af9f05e50e37b4d681f38f0fc192634ca0447e4f4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762446_r2.json", + "source_sha256": "f7adbf64e17c3a2afc677b7af9f05e50e37b4d681f38f0fc192634ca0447e4f4" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762534_r3.json", + "bytes": 1391, + "sha256": "6796f0b163dcf21af5dfe3048b53e8d2660fe10290e22222232a6c7f6668396c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762534_r3.json", + "source_sha256": "6796f0b163dcf21af5dfe3048b53e8d2660fe10290e22222232a6c7f6668396c" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_cpu_finalization_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_cpu_finalization_execution_r21.json", + "bytes": 5306, + "sha256": "be55a87986dd6d80942dcd0b17dd75994145ff4a383596314d5b4ee51972a443", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_cpu_finalization_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_cpu_finalization_execution_r21.json", + "source_sha256": "be55a87986dd6d80942dcd0b17dd75994145ff4a383596314d5b4ee51972a443" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_publication_receipt_r4.json", + "bytes": 9514, + "sha256": "77ba176a9fab70e75b3c2c423c857d1e266f2021875aea01e15bac3f11f327d1", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_publication_receipt_r4.json", + "source_sha256": "77ba176a9fab70e75b3c2c423c857d1e266f2021875aea01e15bac3f11f327d1" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_train_only_null_r4.json", + "bytes": 52862, + "sha256": "661d04d76fcf36d116feb117154eac01e6569e377d4245c07653b28696e1227b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_train_only_null_r4.json", + "source_sha256": "661d04d76fcf36d116feb117154eac01e6569e377d4245c07653b28696e1227b" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_later_role_20260721_r1/review_a5_official_ragged_topology_receipt.json", + "bytes": 1625, + "sha256": "333ee6f34e69f89e26b810cc565415b89d6874615ea4ac57850371fb159c1b71", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_later_role_20260721_r1/review_a5_official_ragged_topology_receipt.json", + "source_sha256": "333ee6f34e69f89e26b810cc565415b89d6874615ea4ac57850371fb159c1b71" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null.json", + "bytes": 2970, + "sha256": "a752ffd350fbe38aa0e6f6b42b76137f4f72d76fa9a7f5d3609bc47c65c552de", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null.json", + "source_sha256": "a752ffd350fbe38aa0e6f6b42b76137f4f72d76fa9a7f5d3609bc47c65c552de" + }, + { + "path": "bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null_receipt.json", + "bytes": 902, + "sha256": "dace4cb5df71912f5aa7531bb0ce87db3b63d726b2a12aa41facabf9d54b5c35", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null_receipt.json", + "source_sha256": "dace4cb5df71912f5aa7531bb0ce87db3b63d726b2a12aa41facabf9d54b5c35" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_ms_acquisition_top30_v3_20260721_r3/review_a5_ms_acquisition_top30_runtime_v3.py", + "bytes": 43711, + "sha256": "68c0d543c5411276ef56c7072bded4ebda886f46b9fa4ebf3c95c1e54c1a08c6", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_ms_acquisition_top30_v3_20260721_r3/review_a5_ms_acquisition_top30_runtime_v3.py", + "source_sha256": "68c0d543c5411276ef56c7072bded4ebda886f46b9fa4ebf3c95c1e54c1a08c6" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_r2.py", + "bytes": 102990, + "sha256": "9f8f167148aa234df413e4c3d4e1846881781c8e5a19bd91b0b178b260a3a537", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_r2.py", + "source_sha256": "9f8f167148aa234df413e4c3d4e1846881781c8e5a19bd91b0b178b260a3a537" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_r3.py", + "bytes": 41304, + "sha256": "a76c24cb0a3b904ae95bfda21bdeb2ba96e36293368fe44a218429be2b10d43e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_r3.py", + "source_sha256": "a76c24cb0a3b904ae95bfda21bdeb2ba96e36293368fe44a218429be2b10d43e" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_direct_static_bridge_20260724_r1/review_a5_native_eight_direct_static_bridge_r1.py", + "bytes": 37921, + "sha256": "c71ba654568a24993bc1733b26b6863b11e5c198c53871a6183b485ab96540f0", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_direct_static_bridge_20260724_r1/review_a5_native_eight_direct_static_bridge_r1.py", + "source_sha256": "c71ba654568a24993bc1733b26b6863b11e5c198c53871a6183b485ab96540f0" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/review_a5_native_eight_finalization_runtime_r19.py", + "bytes": 21049, + "sha256": "b6266553c075e9b85d221a6278d1ef3ab1d26fbce5de70dbcd4569db42653990", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/review_a5_native_eight_finalization_runtime_r19.py", + "source_sha256": "b6266553c075e9b85d221a6278d1ef3ab1d26fbce5de70dbcd4569db42653990" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/run_review_a5_native_eight_training_r19.py", + "bytes": 6981, + "sha256": "28d482fbae230c999d84e64a5abd6a1260ae26fb555c92b7d3176afb37cb260a", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/run_review_a5_native_eight_training_r19.py", + "source_sha256": "28d482fbae230c999d84e64a5abd6a1260ae26fb555c92b7d3176afb37cb260a" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/review_a5_native_eight_finalization_runtime_r22.py", + "bytes": 12841, + "sha256": "62f5355ef06cdc56f85214ac251bfa0ed4b19b41a19ab6acac51d644678f0a62", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/review_a5_native_eight_finalization_runtime_r22.py", + "source_sha256": "62f5355ef06cdc56f85214ac251bfa0ed4b19b41a19ab6acac51d644678f0a62" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/run_review_a5_native_eight_training_r22.py", + "bytes": 24070, + "sha256": "cb9a583091912c59f515f46074b04c90dfbe0ebf0fc28d241db980851b180335", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/run_review_a5_native_eight_training_r22.py", + "source_sha256": "cb9a583091912c59f515f46074b04c90dfbe0ebf0fc28d241db980851b180335" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r1/review_a5_native_eight_hotpath_r1.py", + "bytes": 33246, + "sha256": "3b9ada847b1ea3ecf1f12a6566b55fe1a0218b10aed9d5dabf40190cf0e70c4f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r1/review_a5_native_eight_hotpath_r1.py", + "source_sha256": "3b9ada847b1ea3ecf1f12a6566b55fe1a0218b10aed9d5dabf40190cf0e70c4f" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/load_review_a5_native_eight_hotpath_r2.py", + "bytes": 4127, + "sha256": "101559df116319422762f0d7293fe55478b56defcbc1724661696163bb4fc9ae", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/load_review_a5_native_eight_hotpath_r2.py", + "source_sha256": "101559df116319422762f0d7293fe55478b56defcbc1724661696163bb4fc9ae" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/review_a5_native_eight_hotpath_r2.py", + "bytes": 32821, + "sha256": "941f08e0db8bbf2fa61852d4fc218f592fdd63c12f2dafdb70ed3b18e6aedf98", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/review_a5_native_eight_hotpath_r2.py", + "source_sha256": "941f08e0db8bbf2fa61852d4fc218f592fdd63c12f2dafdb70ed3b18e6aedf98" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/load_review_a5_native_eight_hotpath_r3.py", + "bytes": 4013, + "sha256": "e99f4556a8e3b3721d1f9155738d2bf4e9765e43a0e9f7734259e33533ff4b30", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/load_review_a5_native_eight_hotpath_r3.py", + "source_sha256": "e99f4556a8e3b3721d1f9155738d2bf4e9765e43a0e9f7734259e33533ff4b30" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/review_a5_native_eight_hotpath_r3.py", + "bytes": 36449, + "sha256": "a81dd58c727a28b1a383477338e41922a2d746dac5cb33f351b4501ee8c5d0dd", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/review_a5_native_eight_hotpath_r3.py", + "source_sha256": "a81dd58c727a28b1a383477338e41922a2d746dac5cb33f351b4501ee8c5d0dd" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/load_review_a5_native_eight_hotpath_r4.py", + "bytes": 4013, + "sha256": "662d0766a8d68638480e9c44ca4070387481d43e1c666a20363025cf5b9bc958", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/load_review_a5_native_eight_hotpath_r4.py", + "source_sha256": "662d0766a8d68638480e9c44ca4070387481d43e1c666a20363025cf5b9bc958" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4.py", + "bytes": 23798, + "sha256": "600af4b6b0fab63b7780bb1e6be8233eb28bd0808ff390c3096369afec9c6649", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4.py", + "source_sha256": "600af4b6b0fab63b7780bb1e6be8233eb28bd0808ff390c3096369afec9c6649" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/load_review_a5_native_eight_hotpath_r5.py", + "bytes": 4013, + "sha256": "864a05e86c5ea91318b11373d2cdffcdd2ddd0777f141cb7ef0305f779a42ea6", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/load_review_a5_native_eight_hotpath_r5.py", + "source_sha256": "864a05e86c5ea91318b11373d2cdffcdd2ddd0777f141cb7ef0305f779a42ea6" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5.py", + "bytes": 17677, + "sha256": "ce4bad9195229341cab0890ed775b78126c17a23d82f2244757f120c12b346c8", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5.py", + "source_sha256": "ce4bad9195229341cab0890ed775b78126c17a23d82f2244757f120c12b346c8" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/load_review_a5_native_eight_hotpath_r6.py", + "bytes": 4013, + "sha256": "e2496170942db844e4ebe71d4c098b0d0cf99540d3465ed7e8e9a113469cf7d2", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/load_review_a5_native_eight_hotpath_r6.py", + "source_sha256": "e2496170942db844e4ebe71d4c098b0d0cf99540d3465ed7e8e9a113469cf7d2" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6.py", + "bytes": 17373, + "sha256": "73b42e5131c64284c6f748ddf81b4d187dcb57f756c88c22240d189f2afc4cef", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6.py", + "source_sha256": "73b42e5131c64284c6f748ddf81b4d187dcb57f756c88c22240d189f2afc4cef" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/load_review_a5_native_eight_hotpath_r7.py", + "bytes": 4013, + "sha256": "fa9538829ff3ccfaf3d3f4346c7e735c70758661eb6bf3da5eece2e7e96e0fb6", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/load_review_a5_native_eight_hotpath_r7.py", + "source_sha256": "fa9538829ff3ccfaf3d3f4346c7e735c70758661eb6bf3da5eece2e7e96e0fb6" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7.py", + "bytes": 20454, + "sha256": "c0cb618f7856daf24666dbec07ff51b86e3fbd52c073c58bd1b7151122714f47", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7.py", + "source_sha256": "c0cb618f7856daf24666dbec07ff51b86e3fbd52c073c58bd1b7151122714f47" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_submission_20260727_r15_preparation/review_a5_native_eight_submission_contract_r15.py", + "bytes": 29305, + "sha256": "35c7a13da662f49bec07b63f590c8fb3d9cc4578633a179da42ff2650a2d7865", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_submission_20260727_r15_preparation/review_a5_native_eight_submission_contract_r15.py", + "source_sha256": "35c7a13da662f49bec07b63f590c8fb3d9cc4578633a179da42ff2650a2d7865" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r1/review_a5_native_eight_training_runner_r1.py", + "bytes": 97336, + "sha256": "34785bf46f38579e48c3be6326f667a04521cb7d95c1f94c5200d84012b577bf", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r1/review_a5_native_eight_training_runner_r1.py", + "source_sha256": "34785bf46f38579e48c3be6326f667a04521cb7d95c1f94c5200d84012b577bf" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/review_a5_native_eight_training_runner_r2.py", + "bytes": 74326, + "sha256": "7e93b13b3212b3c97e30144f3e393a86a13411d5e82fe19bd55d43bc58587e30", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/review_a5_native_eight_training_runner_r2.py", + "source_sha256": "7e93b13b3212b3c97e30144f3e393a86a13411d5e82fe19bd55d43bc58587e30" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/run_review_a5_native_eight_training_r2.py", + "bytes": 3684, + "sha256": "195dbedfde65c061eb0fca5684270ff95a2bec16732683b1df7f40d91909cc7f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/run_review_a5_native_eight_training_r2.py", + "source_sha256": "195dbedfde65c061eb0fca5684270ff95a2bec16732683b1df7f40d91909cc7f" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/review_a5_native_eight_training_runner_r3.py", + "bytes": 25611, + "sha256": "550588ca033718273de2e35825b8b9faffe4a5fb747ff8775fe17bb31050d9be", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/review_a5_native_eight_training_runner_r3.py", + "source_sha256": "550588ca033718273de2e35825b8b9faffe4a5fb747ff8775fe17bb31050d9be" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/run_review_a5_native_eight_training_r3.py", + "bytes": 3515, + "sha256": "bba69e736a44fbfa6b380089d50b945e93b45d5202fa265b5869ffd378149040", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/run_review_a5_native_eight_training_r3.py", + "source_sha256": "bba69e736a44fbfa6b380089d50b945e93b45d5202fa265b5869ffd378149040" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/review_a5_native_eight_training_runner_r8.py", + "bytes": 11844, + "sha256": "cbc9fc0179ecb1e7c449fa37a574f38ff3e912e13db5c984d87e05e3e347a0e1", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/review_a5_native_eight_training_runner_r8.py", + "source_sha256": "cbc9fc0179ecb1e7c449fa37a574f38ff3e912e13db5c984d87e05e3e347a0e1" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/run_review_a5_native_eight_training_r8.py", + "bytes": 2705, + "sha256": "213afce295408dda11cf3ede98ebff191735a77e1db09b6252cae964caca39e2", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/run_review_a5_native_eight_training_r8.py", + "source_sha256": "213afce295408dda11cf3ede98ebff191735a77e1db09b6252cae964caca39e2" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/review_a5_native_eight_training_runner_r9.py", + "bytes": 7443, + "sha256": "4430560565a18da0e68700d60526d3dec15fabd79854111d1e85deb59e2381c8", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/review_a5_native_eight_training_runner_r9.py", + "source_sha256": "4430560565a18da0e68700d60526d3dec15fabd79854111d1e85deb59e2381c8" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/run_review_a5_native_eight_training_r9.py", + "bytes": 2739, + "sha256": "b2bae85c879d2d266ac1e39869c661625958e21c1c3b7299713c8a0b46827ec5", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/run_review_a5_native_eight_training_r9.py", + "source_sha256": "b2bae85c879d2d266ac1e39869c661625958e21c1c3b7299713c8a0b46827ec5" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r11_certification_gate_candidate/review_a5_native_eight_certification_gate_r11.py", + "bytes": 49854, + "sha256": "ce7626823c2980bc21b46a7eec6c1961a87dc5512525e553c49f2c7d57bf0430", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r11_certification_gate_candidate/review_a5_native_eight_certification_gate_r11.py", + "source_sha256": "ce7626823c2980bc21b46a7eec6c1961a87dc5512525e553c49f2c7d57bf0430" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_final_bindings_r12.py", + "bytes": 1139, + "sha256": "a8cfaca102f7c3d0c7936d244ce1e9ed75099e70c0ca3a27943be7ce5587b6e0", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_final_bindings_r12.py", + "source_sha256": "a8cfaca102f7c3d0c7936d244ce1e9ed75099e70c0ca3a27943be7ce5587b6e0" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_training_runner_r12.py", + "bytes": 23200, + "sha256": "47e973c7c4ed5bc6686e5d7795b00d3eea5c2da8c2a15fc534a7cc24c1744ee1", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_training_runner_r12.py", + "source_sha256": "47e973c7c4ed5bc6686e5d7795b00d3eea5c2da8c2a15fc534a7cc24c1744ee1" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/run_review_a5_native_eight_training_r12.py", + "bytes": 2332, + "sha256": "66270933d1ff23ffe50b800267a4705c905fc423e8e2c929bf642cb5c6c37def", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/run_review_a5_native_eight_training_r12.py", + "source_sha256": "66270933d1ff23ffe50b800267a4705c905fc423e8e2c929bf642cb5c6c37def" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_direct_submit_controller_r13.py", + "bytes": 31174, + "sha256": "2feb9a90db66ca277fb9e23d079ce8b089a31060e5670961a13b0e5146ed39a8", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_direct_submit_controller_r13.py", + "source_sha256": "2feb9a90db66ca277fb9e23d079ce8b089a31060e5670961a13b0e5146ed39a8" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_final_bindings_r13.py", + "bytes": 2946, + "sha256": "c30b6b03dae852a4b10c6d01596e977d8a071e738dc3074f1ca0592a50778dd3", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_final_bindings_r13.py", + "source_sha256": "c30b6b03dae852a4b10c6d01596e977d8a071e738dc3074f1ca0592a50778dd3" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_training_runner_r13.py", + "bytes": 60696, + "sha256": "17cf8ab216b354ec1de7574ebebd7bfe02b5935da605b4131e45c7aa13982d5b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_training_runner_r13.py", + "source_sha256": "17cf8ab216b354ec1de7574ebebd7bfe02b5935da605b4131e45c7aa13982d5b" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/run_review_a5_native_eight_training_r13.py", + "bytes": 2544, + "sha256": "a2a0a0d9056c7cd360913a792ff5e3390a190b692d7663c3a6d48a3ee0f180d5", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/run_review_a5_native_eight_training_r13.py", + "source_sha256": "a2a0a0d9056c7cd360913a792ff5e3390a190b692d7663c3a6d48a3ee0f180d5" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/__init__.py", + "bytes": 74, + "sha256": "737b1caa9086f8ac1556c05625d1b5391b8cae58e9d98a7755fa72f44e94c7ba", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/__init__.py", + "source_sha256": "737b1caa9086f8ac1556c05625d1b5391b8cae58e9d98a7755fa72f44e94c7ba" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_final_bindings_r14.py", + "bytes": 5726, + "sha256": "bd6c704239e2bb4898dddda5c86274f41cd5b304b35d584ddfae3884e8bc8503", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_final_bindings_r14.py", + "source_sha256": "bd6c704239e2bb4898dddda5c86274f41cd5b304b35d584ddfae3884e8bc8503" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_strict_successor_r14.py", + "bytes": 46942, + "sha256": "eda983e1b0c29357eb1b6e2f555f402a83b7176fb857488e9be5f5faed490b2d", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_strict_successor_r14.py", + "source_sha256": "eda983e1b0c29357eb1b6e2f555f402a83b7176fb857488e9be5f5faed490b2d" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/__init__.py", + "bytes": 72, + "sha256": "7ef11d9a891d32b0c1bb3ee24016700acd14251ac49448f004a701cdea79ca53", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/__init__.py", + "source_sha256": "7ef11d9a891d32b0c1bb3ee24016700acd14251ac49448f004a701cdea79ca53" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_bindings_r15.py", + "bytes": 2041, + "sha256": "1f21427486260e8b56795f7137f0f7322ae768d80645db6636414e5961aa3224", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_bindings_r15.py", + "source_sha256": "1f21427486260e8b56795f7137f0f7322ae768d80645db6636414e5961aa3224" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_gate_r15.py", + "bytes": 41461, + "sha256": "1556d6e2643edfc80b6b6782164ab47560e259ff55791c50dcffdd9b9afc001f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_gate_r15.py", + "source_sha256": "1556d6e2643edfc80b6b6782164ab47560e259ff55791c50dcffdd9b9afc001f" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_final_bindings_r16.py", + "bytes": 2770, + "sha256": "1287db8472580db69e38d60be8c13beeddb4fdde7958a5b302d072e1226f4de3", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_final_bindings_r16.py", + "source_sha256": "1287db8472580db69e38d60be8c13beeddb4fdde7958a5b302d072e1226f4de3" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_release_successor_r16.py", + "bytes": 30917, + "sha256": "689db8aaf51d15288f01b196c5ad2fe8ee3ca8aab3ff525695abaa9f25060ff6", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_release_successor_r16.py", + "source_sha256": "689db8aaf51d15288f01b196c5ad2fe8ee3ca8aab3ff525695abaa9f25060ff6" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_balanced_planner_r4.py", + "bytes": 25544, + "sha256": "2c985edfe747bae712c41689da8be2abb5096bd97a8771691b3676d3a8af49fd", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_balanced_planner_r4.py", + "source_sha256": "2c985edfe747bae712c41689da8be2abb5096bd97a8771691b3676d3a8af49fd" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_composite_r4.py", + "bytes": 70358, + "sha256": "52a311636e7631b97711aab63aec28e2ada47a446d1aecc1a47921d584f69f9d", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_composite_r4.py", + "source_sha256": "52a311636e7631b97711aab63aec28e2ada47a446d1aecc1a47921d584f69f9d" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_balanced_planner_r5.py", + "bytes": 16021, + "sha256": "1b9b05c812603db7b216aa989214a3c3715f80032b3a8b82577ae2b9e48f048d", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_balanced_planner_r5.py", + "source_sha256": "1b9b05c812603db7b216aa989214a3c3715f80032b3a8b82577ae2b9e48f048d" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_composite_r5.py", + "bytes": 58459, + "sha256": "24c35257fc61e1c9c77630d2b0075775a7f46b6500ecb5f175ef8f42bd214e0e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_composite_r5.py", + "source_sha256": "24c35257fc61e1c9c77630d2b0075775a7f46b6500ecb5f175ef8f42bd214e0e" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_executor_r5.py", + "bytes": 74648, + "sha256": "a482a70a2edcb7c9936b091a86a0f7d98714b5bab09a0bdc80cd927f015a46f2", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_executor_r5.py", + "source_sha256": "a482a70a2edcb7c9936b091a86a0f7d98714b5bab09a0bdc80cd927f015a46f2" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_r4_lineage_receipt_r1.json", + "bytes": 1716, + "sha256": "b5fbdff168de23676208484ccccc3cc32f613ea411d193e6d8930456e8edeeef", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_r4_lineage_receipt_r1.json", + "source_sha256": "b5fbdff168de23676208484ccccc3cc32f613ea411d193e6d8930456e8edeeef" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r6/review_a5_native_eight_executor_r6.py", + "bytes": 89792, + "sha256": "e47e6e9810db0e8ec9d37ce5533f762e287b162f811bfadc347666f5ad78db82", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r6/review_a5_native_eight_executor_r6.py", + "source_sha256": "e47e6e9810db0e8ec9d37ce5533f762e287b162f811bfadc347666f5ad78db82" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r7/review_a5_native_eight_executor_r7.py", + "bytes": 130802, + "sha256": "e068a3c233fc3fd94fe3b8618edb9bd8c87fd81b97dff2666206fb870f0f898a", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r7/review_a5_native_eight_executor_r7.py", + "source_sha256": "e068a3c233fc3fd94fe3b8618edb9bd8c87fd81b97dff2666206fb870f0f898a" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r8/review_a5_native_eight_executor_r8.py", + "bytes": 52743, + "sha256": "60ab4de6bc1ee151e9da2c312c41079638e11469502e8136ede51be032eac630", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r8/review_a5_native_eight_executor_r8.py", + "source_sha256": "60ab4de6bc1ee151e9da2c312c41079638e11469502e8136ede51be032eac630" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_failure_release_chain_20260727_r1_preparation/review_a5_native_static_failure_release_gate_r1.py", + "bytes": 28699, + "sha256": "ee97bf4e68ddfbf280b7e0f01ce3409c4d4692feafbc9382613bbc5698913fa7", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_failure_release_chain_20260727_r1_preparation/review_a5_native_static_failure_release_gate_r1.py", + "source_sha256": "ee97bf4e68ddfbf280b7e0f01ce3409c4d4692feafbc9382613bbc5698913fa7" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_epoch_boundary_resume_20260725_r1/run_review_a5_static_v2_epoch_boundary_resume_r1_scavenger_v100.sbatch", + "bytes": 3389, + "sha256": "f420c84258cdf4247fdd766a9e8470bad55bd1f845ebd6640ec70b97b3953e6e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_epoch_boundary_resume_20260725_r1/run_review_a5_static_v2_epoch_boundary_resume_r1_scavenger_v100.sbatch", + "source_sha256": "f420c84258cdf4247fdd766a9e8470bad55bd1f845ebd6640ec70b97b3953e6e" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_ops_20260721_r2/review_a5_static_v2_checkpoint_store_r2.py", + "bytes": 52873, + "sha256": "f2e558c52bf166d6e7f42ecdd92995f2b70c8a174eab8d6814875399fb69732e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_ops_20260721_r2/review_a5_static_v2_checkpoint_store_r2.py", + "source_sha256": "f2e558c52bf166d6e7f42ecdd92995f2b70c8a174eab8d6814875399fb69732e" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/review_a5_static_v2_postfit_direct_publication_r2.py", + "bytes": 40020, + "sha256": "8e57c17fd43f3894f94f980cf70a0d6d7f183cf04c26780c3fe30c1932bb7abb", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/review_a5_static_v2_postfit_direct_publication_r2.py", + "source_sha256": "8e57c17fd43f3894f94f980cf70a0d6d7f183cf04c26780c3fe30c1932bb7abb" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/run_review_a5_static_v2_postfit_direct_publication_r2.py", + "bytes": 2601, + "sha256": "c46a7d4644899a5e7551e2dd5eb30666e01e0f36e2f65a2cd821b8c5565258dc", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/run_review_a5_static_v2_postfit_direct_publication_r2.py", + "source_sha256": "c46a7d4644899a5e7551e2dd5eb30666e01e0f36e2f65a2cd821b8c5565258dc" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r4_terminal_certification/review_a5_static_v2_terminal_certification_r4.py", + "bytes": 64464, + "sha256": "3b9632e840265e1a5c1d226f3fe7fb8cd4c448f810f3826c59e19c25132dd04f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r4_terminal_certification/review_a5_static_v2_terminal_certification_r4.py", + "source_sha256": "3b9632e840265e1a5c1d226f3fe7fb8cd4c448f810f3826c59e19c25132dd04f" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/__init__.py", + "bytes": 590, + "sha256": "9429deca8cfb6cb25ef6f79a5b0ee0b91d47657e7f21f61627afd655d08fe7d3", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/__init__.py", + "source_sha256": "9429deca8cfb6cb25ef6f79a5b0ee0b91d47657e7f21f61627afd655d08fe7d3" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/review_a5_static_v2_terminal_certification_r5.py", + "bytes": 101721, + "sha256": "04d724ee84f67565e2f0229db99006c8f64d2492564643f6e60af25930cf12a1", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/review_a5_static_v2_terminal_certification_r5.py", + "source_sha256": "04d724ee84f67565e2f0229db99006c8f64d2492564643f6e60af25930cf12a1" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/__init__.py", + "bytes": 590, + "sha256": "bbdce8deb776917ade3704eb5d08b064917f52c76f3f39ee345b3b2938992add", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/__init__.py", + "source_sha256": "bbdce8deb776917ade3704eb5d08b064917f52c76f3f39ee345b3b2938992add" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_production_module_roster_r6.json", + "bytes": 17548, + "sha256": "195d41bba2282fdfde77a88f8b0a70eb64b0207d1a9efd42ddaeb873f8ccaeed", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_production_module_roster_r6.json", + "source_sha256": "195d41bba2282fdfde77a88f8b0a70eb64b0207d1a9efd42ddaeb873f8ccaeed" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_terminal_certification_r6.py", + "bytes": 133704, + "sha256": "bdb0fa37804531f6446cee9411c9730fde792eb9674054e56b883156f36da4cb", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_terminal_certification_r6.py", + "source_sha256": "bdb0fa37804531f6446cee9411c9730fde792eb9674054e56b883156f36da4cb" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/a5_wa345_continuation_manifest_20260819_r1.json", + "bytes": 12190, + "sha256": "30b64143eb15688fa1e1c8aeaf3b84eb08a2a65730fa1c996c9ef6f12679d80f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/a5_wa345_continuation_manifest_20260819_r1.json", + "source_sha256": "30b64143eb15688fa1e1c8aeaf3b84eb08a2a65730fa1c996c9ef6f12679d80f" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/submit_a5_wa345_continuation_20260819_r1.sbatch", + "bytes": 23262, + "sha256": "f517b5c99d93103d1212b2153c26be1cc58267c7b2d9bfa747f6d512f0fdadf2", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/submit_a5_wa345_continuation_20260819_r1.sbatch", + "source_sha256": "f517b5c99d93103d1212b2153c26be1cc58267c7b2d9bfa747f6d512f0fdadf2" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/a5_wa345_manifest_20260817_r1.json", + "bytes": 9199, + "sha256": "eeebc9c7e2cfc701f3ad47e62696ae2247c8caec93d8b034d5f573b701eab2a1", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/a5_wa345_manifest_20260817_r1.json", + "source_sha256": "eeebc9c7e2cfc701f3ad47e62696ae2247c8caec93d8b034d5f573b701eab2a1" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/run_a5_wa345_shim_20260817_r1.py", + "bytes": 53542, + "sha256": "5159414381025cf3e2d5e742422c84c292481168af42801c773df4ba12797fb4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/run_a5_wa345_shim_20260817_r1.py", + "source_sha256": "5159414381025cf3e2d5e742422c84c292481168af42801c773df4ba12797fb4" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/submit_a5_wa345_20260817_r1.sbatch", + "bytes": 19132, + "sha256": "a090f111df7cc0db09e61ea0a8067882b7cd9bf21d91c53da4115549560b08e7", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/submit_a5_wa345_20260817_r1.sbatch", + "source_sha256": "a090f111df7cc0db09e61ea0a8067882b7cd9bf21d91c53da4115549560b08e7" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/review_md_temporal_20x6_a1111_wa2_manifest_20260811_r1.json", + "bytes": 6147, + "sha256": "600144a7f5b893958d629083a3a9266eec980765218408d2d51db72b73c1e506", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/review_md_temporal_20x6_a1111_wa2_manifest_20260811_r1.json", + "source_sha256": "600144a7f5b893958d629083a3a9266eec980765218408d2d51db72b73c1e506" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/run_review_md_temporal_20x6_a1111_wa2_s424344_20260811_r1.py", + "bytes": 39694, + "sha256": "dd74253863f39150af4ddc7e8d48c0a366e1f327c30aa50e0748078330b97b85", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/run_review_md_temporal_20x6_a1111_wa2_s424344_20260811_r1.py", + "source_sha256": "dd74253863f39150af4ddc7e8d48c0a366e1f327c30aa50e0748078330b97b85" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/submit_review_md_temporal_20x6_a1111_wa2_20260811_r1.sbatch", + "bytes": 4774, + "sha256": "6ffd2f97706bdf0001b90ca2f8af7ec565b298cc8585444ba6027194d0e378d2", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/submit_review_md_temporal_20x6_a1111_wa2_20260811_r1.sbatch", + "source_sha256": "6ffd2f97706bdf0001b90ca2f8af7ec565b298cc8585444ba6027194d0e378d2" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/__init__.py", + "bytes": 55, + "sha256": "aa37d1e86bd3a58262f9824ba80993c0f0f280db4d0f4d704ca469dc12ba3df7", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/__init__.py", + "source_sha256": "aa37d1e86bd3a58262f9824ba80993c0f0f280db4d0f4d704ca469dc12ba3df7" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/review_md_temporal_20x6_core_r3.py", + "bytes": 48643, + "sha256": "3e96d8092239c2c21f217ad5bae4ee7e07dbe0f7630b213bad468d6b08d3b1c1", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/review_md_temporal_20x6_core_r3.py", + "source_sha256": "3e96d8092239c2c21f217ad5bae4ee7e07dbe0f7630b213bad468d6b08d3b1c1" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/run_review_md_temporal_20x6_training_r3.py", + "bytes": 50267, + "sha256": "1e446e7e89a39ef01132b9f2a4deb817161f7b376a0fa04c2b11529004f53e8a", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/run_review_md_temporal_20x6_training_r3.py", + "source_sha256": "1e446e7e89a39ef01132b9f2a4deb817161f7b376a0fa04c2b11529004f53e8a" + }, + { + "path": "bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260805_r4_dev_memory/run_review_md_temporal_20x6_training_r4.py", + "bytes": 5454, + "sha256": "a6a180ae103eaaf68458b298cd4180920a0e88c1724a6ba9a94ef94559e75c5f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260805_r4_dev_memory/run_review_md_temporal_20x6_training_r4.py", + "source_sha256": "a6a180ae103eaaf68458b298cd4180920a0e88c1724a6ba9a94ef94559e75c5f" + }, + { + "path": "bertose_workbench.py", + "bytes": 8488, + "sha256": "32285cc5fedd421032bd98b97214f899ccacda9b211c1b2a97a3fb1513f1ad70", + "role": "workbench_interface_examples_or_documentation" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "bertosebind_inference/README.md", + "bytes": 6489, + "sha256": "3d3077181b519b0106d9201ee8514a41905e32057237d8fdb48343e10cfa97b3" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "bertosebind_inference/__init__.py", + "bytes": 189, + "sha256": "81f3da9b814892c3f12b2f7a535284b89f0be07b22bce50a374c8303d6db6c72" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "bertosebind_inference/check_real_examples.py", + "bytes": 5450, + "sha256": "b7cfcdaf1c902664252f3d2022e290a803892a31618c1290c09c174131036541" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "bertosebind_inference/config.json", + "bytes": 5682, + "sha256": "07282f0fec34ef2cf9f832c3662227ca89064b52e3fdbe9fd3ad11b5f4e01154" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "bertosebind_inference/examples/doubly_cold.csv", + "bytes": 587, + "sha256": "d748e004c483597c86cc214ecd43f5c902e3d3ced41d1e9223b555dfa3b9ed58" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "bertosebind_inference/examples/glycan_cold.csv", + "bytes": 587, + "sha256": "c50e124eba39a8bb5f08e4d75e54b0f168ff74ee886d7f28e3156b3beba6ad96" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "bertosebind_inference/examples/protein_cold.csv", + "bytes": 409, + "sha256": "6d70ea272cb716c7bf001675493496bfe7491add0185c010f83417a8ed607784" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "bertosebind_inference/examples/reference.json", + "bytes": 15156, + "sha256": "3de9b7e6b9c6035c0e07504b1dadb2c1c430151b7c889c33825a437a5c70e659" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "bertosebind_inference/loader.py", + "bytes": 10822, + "sha256": "0c074c3901ac55b737e10a2b316db3c00678e569d151fc3e2192b46bd1662ce6" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "bertosebind_inference/local_checks.json", + "bytes": 3501, + "sha256": "e06c540874abbfd72b72b6ee41aa2d35a6d35bf11d26e10714f382d031765b3a" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "bertosebind_inference/predict.py", + "bytes": 3495, + "sha256": "fe3f559157a6bc3dd4b59803fb010054c8987f402b6790f488e6cce51bc95d4b" + }, + { + "path": "bertosebind_new_runs/README.md", + "bytes": 5655, + "sha256": "b18eed4c3ad4f0cbdd700e41d6ff7af1f520d26386f76f4573e82332f3e1ea28", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/README.md", + "source_sha256": "b18eed4c3ad4f0cbdd700e41d6ff7af1f520d26386f76f4573e82332f3e1ea28" + }, + { + "path": "bertosebind_new_runs/audit_pretraining_exposure.py", + "bytes": 6235, + "sha256": "fc4ffac8de965da6250297ee24fa801be2619f1afcc29471204c7e5aead03012", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/audit_pretraining_exposure.py", + "source_sha256": "fc4ffac8de965da6250297ee24fa801be2619f1afcc29471204c7e5aead03012" + }, + { + "path": "bertosebind_new_runs/check_package.py", + "bytes": 655, + "sha256": "2b8be4fcd7ebc98f49e9532415644f457930a1e7700d5c17fdc58a0abd0dd271", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/check_package.py", + "source_sha256": "2b8be4fcd7ebc98f49e9532415644f457930a1e7700d5c17fdc58a0abd0dd271" + }, + { + "path": "bertosebind_new_runs/executed/local/audit_current_pretraining_exposure.py", + "bytes": 6154, + "sha256": "45a366b40a523671427950b83ac2c8a243c96f1bce8527b0af2337a375ff2b15", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/local/audit_current_pretraining_exposure.py", + "source_sha256": "45a366b40a523671427950b83ac2c8a243c96f1bce8527b0af2337a375ff2b15" + }, + { + "path": "bertosebind_new_runs/executed/local/collect_current_glycan_sets.py", + "bytes": 1923, + "sha256": "bdb19bf323c94eacc1943b4345b5b2485dfa50b7ac00a755e8a1dde2f8a4ed74", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/local/collect_current_glycan_sets.py", + "source_sha256": "bdb19bf323c94eacc1943b4345b5b2485dfa50b7ac00a755e8a1dde2f8a4ed74" + }, + { + "path": "bertosebind_new_runs/executed/local/dc_anatomy.py", + "bytes": 17876, + "sha256": "9c9b90f077709c105dd16b706ebcd434dd793177c274eca17b10bc3241f0138b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/local/dc_anatomy.py", + "source_sha256": "9c9b90f077709c105dd16b706ebcd434dd793177c274eca17b10bc3241f0138b" + }, + { + "path": "bertosebind_new_runs/executed/remote/aff_attribution_motif.py", + "bytes": 14866, + "sha256": "33d41f680cf7a5ae3b98fef4d1ef604f6e12a6a856ec6e90df8bb5a88f336bbe", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/aff_attribution_motif.py", + "source_sha256": "33d41f680cf7a5ae3b98fef4d1ef604f6e12a6a856ec6e90df8bb5a88f336bbe" + }, + { + "path": "bertosebind_new_runs/executed/remote/aff_attribution_motif.sbatch", + "bytes": 1616, + "sha256": "2b89020895eebac8c99366036eebb07dd43c687fe47274dcd1de47d1017548ff", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/aff_attribution_motif.sbatch", + "source_sha256": "2b89020895eebac8c99366036eebb07dd43c687fe47274dcd1de47d1017548ff" + }, + { + "path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_A_glycan_gifflarESM.json", + "bytes": 903, + "sha256": "d7f21b8037172e6d42fb65c8169d37b19c385d68dc9cbebadbafe9e930843074", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/affinose_gifflar_macro_A_glycan_gifflarESM.json", + "source_sha256": "d7f21b8037172e6d42fb65c8169d37b19c385d68dc9cbebadbafe9e930843074" + }, + { + "path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_A_glycan_sweetnetESM.json", + "bytes": 906, + "sha256": "eca94bfbe82bfba95c2086c9c4ffe14091d442017356394ec2e75173cb66810f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/affinose_gifflar_macro_A_glycan_sweetnetESM.json", + "source_sha256": "eca94bfbe82bfba95c2086c9c4ffe14091d442017356394ec2e75173cb66810f" + }, + { + "path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_B_protein_gifflarESM.json", + "bytes": 905, + "sha256": "529296c1388651b4451f35829d0caa63e692a96fc88b74ee9b8dc8c1d09136da", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/affinose_gifflar_macro_B_protein_gifflarESM.json", + "source_sha256": "529296c1388651b4451f35829d0caa63e692a96fc88b74ee9b8dc8c1d09136da" + }, + { + "path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_B_protein_sweetnetESM.json", + "bytes": 908, + "sha256": "6f0098947aa4c962f991d1e17acc17707d7cb2eb5e9d6338182d6cfa65d28a2d", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/affinose_gifflar_macro_B_protein_sweetnetESM.json", + "source_sha256": "6f0098947aa4c962f991d1e17acc17707d7cb2eb5e9d6338182d6cfa65d28a2d" + }, + { + "path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_C_doubly_gifflarESM.json", + "bytes": 900, + "sha256": "bf720edacbad09cd04c42df7cf347dd1fe9846a22f307f7be1c38f06e89faa44", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/affinose_gifflar_macro_C_doubly_gifflarESM.json", + "source_sha256": "bf720edacbad09cd04c42df7cf347dd1fe9846a22f307f7be1c38f06e89faa44" + }, + { + "path": "bertosebind_new_runs/executed/remote/affinose_gifflar_macro_C_doubly_sweetnetESM.json", + "bytes": 900, + "sha256": "1884d744232b56c5edc76e655cf9bd117e43d8d749c98300b528ea6a5e55b75d", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/affinose_gifflar_macro_C_doubly_sweetnetESM.json", + "source_sha256": "1884d744232b56c5edc76e655cf9bd117e43d8d749c98300b528ea6a5e55b75d" + }, + { + "path": "bertosebind_new_runs/executed/remote/affinose_glycan_cold_contamination.json", + "bytes": 1818, + "sha256": "0d4458462cd10dae219a9f15eb6dc8129d200a09891bd0b6bf0297cd85c4dae2", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/affinose_glycan_cold_contamination.json", + "source_sha256": "0d4458462cd10dae219a9f15eb6dc8129d200a09891bd0b6bf0297cd85c4dae2" + }, + { + "path": "bertosebind_new_runs/executed/remote/b4_baselines_perrow.py", + "bytes": 7176, + "sha256": "61a5ef32482365e37e58bd4aee49ff5dabc2fafa04f4e063f3a0be7c294c84c7", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/b4_baselines_perrow.py", + "source_sha256": "61a5ef32482365e37e58bd4aee49ff5dabc2fafa04f4e063f3a0be7c294c84c7" + }, + { + "path": "bertosebind_new_runs/executed/remote/b4_gif_repeat.sbatch", + "bytes": 1648, + "sha256": "a381978d36492bb21cdb7c2a3007c51414b7630dd88016c7a74eb19c48080925", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/b4_gif_repeat.sbatch", + "source_sha256": "a381978d36492bb21cdb7c2a3007c51414b7630dd88016c7a74eb19c48080925" + }, + { + "path": "bertosebind_new_runs/executed/remote/b4_gif_repeat_compare.py", + "bytes": 1977, + "sha256": "7fe6a80de1e7662a916e84b0a679c5579ab7fdcaaace70e1855f7d8face51ca3", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/b4_gif_repeat_compare.py", + "source_sha256": "7fe6a80de1e7662a916e84b0a679c5579ab7fdcaaace70e1855f7d8face51ca3" + }, + { + "path": "bertosebind_new_runs/executed/remote/b4_lo_perrow_ckpt.py", + "bytes": 7705, + "sha256": "1d0433763d7ad49088e396b435a42f2a12141436db05592778a79938c88a953b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/b4_lo_perrow_ckpt.py", + "source_sha256": "1d0433763d7ad49088e396b435a42f2a12141436db05592778a79938c88a953b" + }, + { + "path": "bertosebind_new_runs/executed/remote/b4_step1_structure.py", + "bytes": 9872, + "sha256": "c82d7fe71d178d78d52ee47d809cd12d0286c48b1375c0c7b8b80fa222858e61", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/b4_step1_structure.py", + "source_sha256": "c82d7fe71d178d78d52ee47d809cd12d0286c48b1375c0c7b8b80fa222858e61" + }, + { + "path": "bertosebind_new_runs/executed/remote/b4_step3_bootstrap.py", + "bytes": 19304, + "sha256": "ab7560abe237da435464a984a4e23925e7ec48d802949f57ef9600b829e6b37d", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/b4_step3_bootstrap.py", + "source_sha256": "ab7560abe237da435464a984a4e23925e7ec48d802949f57ef9600b829e6b37d" + }, + { + "path": "bertosebind_new_runs/executed/remote/b4_step3_bootstrap_r2.py", + "bytes": 19828, + "sha256": "6dbbbeb14bb860f6344a93bb65754f540dee8da4ceb3fdc526133c7133dd426c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/b4_step3_bootstrap_r2.py", + "source_sha256": "6dbbbeb14bb860f6344a93bb65754f540dee8da4ceb3fdc526133c7133dd426c" + }, + { + "path": "bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_gif_repeat_20260927.json", + "bytes": 796, + "sha256": "50049bf5658f27700205e91d07f40512b8d297a7af11f51fcfbd514df9b59478", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_gif_repeat_20260927.json", + "source_sha256": "50049bf5658f27700205e91d07f40512b8d297a7af11f51fcfbd514df9b59478" + }, + { + "path": "bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step1_structure_20260926.json", + "bytes": 16214, + "sha256": "7f9edc64528d5b43d2c464f8f5d4db91c2a133f54364993c7798a2a606bd3427", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step1_structure_20260926.json", + "source_sha256": "7f9edc64528d5b43d2c464f8f5d4db91c2a133f54364993c7798a2a606bd3427" + }, + { + "path": "bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step3_bootstrap_20260926.json", + "bytes": 10624, + "sha256": "17ab513ec2d9dec6f1e8c9445dfd7500190f99f0e8758b21fbb435b026324f3b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step3_bootstrap_20260926.json", + "source_sha256": "17ab513ec2d9dec6f1e8c9445dfd7500190f99f0e8758b21fbb435b026324f3b" + }, + { + "path": "bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step3_bootstrap_r2_20260927.json", + "bytes": 48191, + "sha256": "6a87e6a8abc926f41ca13b1bb6c81cbf9ea1d04b06e8f39bfdaf847ce55ba235", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step3_bootstrap_r2_20260927.json", + "source_sha256": "6a87e6a8abc926f41ca13b1bb6c81cbf9ea1d04b06e8f39bfdaf847ce55ba235" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan.yaml", + "bytes": 1122, + "sha256": "1ab7793ddb0daa247dc1f75b53356663d2c99e2e279a33207c9dd82f24288d17", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan.yaml", + "source_sha256": "1ab7793ddb0daa247dc1f75b53356663d2c99e2e279a33207c9dd82f24288d17" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_gifflar.yaml", + "bytes": 1159, + "sha256": "cda3d3e0df11dcbffff287c985039a4abe486a39bb97fe1554851992cbca127e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_gifflar.yaml", + "source_sha256": "cda3d3e0df11dcbffff287c985039a4abe486a39bb97fe1554851992cbca127e" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_sweetnet.yaml", + "bytes": 1136, + "sha256": "d11d6ca73935a664a9afe9330d07e51b7e95e89e044a1012065ef1780d820381", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_sweetnet.yaml", + "source_sha256": "d11d6ca73935a664a9afe9330d07e51b7e95e89e044a1012065ef1780d820381" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_gifflar.yaml", + "bytes": 1159, + "sha256": "dab891f502cb328f8313a9d2971e5d8134472b059fa776409f97f5f59e5d470b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_gifflar.yaml", + "source_sha256": "dab891f502cb328f8313a9d2971e5d8134472b059fa776409f97f5f59e5d470b" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_sweetnet.yaml", + "bytes": 1136, + "sha256": "875883d0ec38fca1a4995ea76c00db81ba84357fb2ed9a7c0921dbb6c7cf6492", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_sweetnet.yaml", + "source_sha256": "875883d0ec38fca1a4995ea76c00db81ba84357fb2ed9a7c0921dbb6c7cf6492" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein.yaml", + "bytes": 1126, + "sha256": "529c3940cfce81ab3d135f25b722d7c302cd83e8540646f041a5d6ba36baebf3", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein.yaml", + "source_sha256": "529c3940cfce81ab3d135f25b722d7c302cd83e8540646f041a5d6ba36baebf3" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_gifflar.yaml", + "bytes": 1164, + "sha256": "908379483dc5b2d0655aa7b0a13b33c8b70ba0379852ffc2d848e354ebd9945e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_gifflar.yaml", + "source_sha256": "908379483dc5b2d0655aa7b0a13b33c8b70ba0379852ffc2d848e354ebd9945e" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_sweetnet.yaml", + "bytes": 1141, + "sha256": "57cbf88ddf620ffbec7c4a8167a271ec38da0f94b1d3a4e9fe9769a9a19b8eea", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_sweetnet.yaml", + "source_sha256": "57cbf88ddf620ffbec7c4a8167a271ec38da0f94b1d3a4e9fe9769a9a19b8eea" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_gifflar.yaml", + "bytes": 1164, + "sha256": "5e518f2db88c03663eb263a5e4a44e93a3bc43e51c4af6c626cd0da416a18d81", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_gifflar.yaml", + "source_sha256": "5e518f2db88c03663eb263a5e4a44e93a3bc43e51c4af6c626cd0da416a18d81" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_sweetnet.yaml", + "bytes": 1141, + "sha256": "50c68416d3d4d72445e61811474179cb552e60d9f8a87f6cc0ed1da32d8b55e8", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_sweetnet.yaml", + "source_sha256": "50c68416d3d4d72445e61811474179cb552e60d9f8a87f6cc0ed1da32d8b55e8" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly.yaml", + "bytes": 1122, + "sha256": "034ba8bdefc3410b987d7bc380bd24a469a01c912349fef1e35436df2a24c36e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly.yaml", + "source_sha256": "034ba8bdefc3410b987d7bc380bd24a469a01c912349fef1e35436df2a24c36e" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_gifflar.yaml", + "bytes": 1159, + "sha256": "ed244565f2f81e6c554613718398af97683ad375eb4debb5a61d25855c444368", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_gifflar.yaml", + "source_sha256": "ed244565f2f81e6c554613718398af97683ad375eb4debb5a61d25855c444368" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_sweetnet.yaml", + "bytes": 1136, + "sha256": "d8ba3e8d83871cdd92548bc8bab1493225cdcbd536c0004ff6b40b48e4e62e40", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_sweetnet.yaml", + "source_sha256": "d8ba3e8d83871cdd92548bc8bab1493225cdcbd536c0004ff6b40b48e4e62e40" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_gifflar.yaml", + "bytes": 1159, + "sha256": "2faa1986c043cf5d8b869d316afa0a043d071400c4f2018ba83551332a143f25", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_gifflar.yaml", + "source_sha256": "2faa1986c043cf5d8b869d316afa0a043d071400c4f2018ba83551332a143f25" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_sweetnet.yaml", + "bytes": 1136, + "sha256": "5fd2cdec3ee4d49f7d7441a037e0a2fbe428b1c0586de88beaf17a2ab67580f1", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_sweetnet.yaml", + "source_sha256": "5fd2cdec3ee4d49f7d7441a037e0a2fbe428b1c0586de88beaf17a2ab67580f1" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_sweetonly.yaml", + "bytes": 1592, + "sha256": "e8fafb98627685ededa4392c5310e149a7dbbe907e37b43da7d20d228961b181", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_sweetonly.yaml", + "source_sha256": "e8fafb98627685ededa4392c5310e149a7dbbe907e37b43da7d20d228961b181" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/data/utils.py", + "bytes": 6186, + "sha256": "ab257b93c23a522dcd99f37b2b802e67c8e3b4ba46b938db6229a6311a77cd39", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/data/utils.py", + "source_sha256": "ab257b93c23a522dcd99f37b2b802e67c8e3b4ba46b938db6229a6311a77cd39" + }, + { + "path": "bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/train.py", + "bytes": 10058, + "sha256": "ab79451e7b51e27d985904a4445fc09b756d759413bb2ebaf8755d177bb3e8ad", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/train.py", + "source_sha256": "ab79451e7b51e27d985904a4445fc09b756d759413bb2ebaf8755d177bb3e8ad" + }, + { + "path": "bertosebind_new_runs/executed/remote/gif_seeds.sbatch", + "bytes": 2790, + "sha256": "56bf1e5b11a386d0920b9f50da6288eff222ee1b7f25d772a8a666a2387b2a9d", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gif_seeds.sbatch", + "source_sha256": "56bf1e5b11a386d0920b9f50da6288eff222ee1b7f25d772a8a666a2387b2a9d" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_launch.py", + "bytes": 10473, + "sha256": "241d3ca6045610a70ccad8307448b4d57e47810c945f127fef768357e56cdef2", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_launch.py", + "source_sha256": "241d3ca6045610a70ccad8307448b4d57e47810c945f127fef768357e56cdef2" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "bytes": 572, + "sha256": "e391584ec821c1e86916c6f8c14a6571a550034fd246e1dc0e7d7b3b6d4dbd7e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "source_sha256": "e391584ec821c1e86916c6f8c14a6571a550034fd246e1dc0e7d7b3b6d4dbd7e" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "bytes": 175381, + "sha256": "35d0ef06a1b9725233ed1e58c74101b7e6a555da48165ed57c9bd71bb5e77315", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "source_sha256": "35d0ef06a1b9725233ed1e58c74101b7e6a555da48165ed57c9bd71bb5e77315" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "bytes": 550, + "sha256": "0dae829566b87d0dd00613343bc5a0c49fb1107c0f4834327d8cca71b8932389", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "source_sha256": "0dae829566b87d0dd00613343bc5a0c49fb1107c0f4834327d8cca71b8932389" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "bytes": 175252, + "sha256": "fd6f39dd3bef9326bc1f583bf07a1f9b8f02f846630a0c58c66c7bae70456d59", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "source_sha256": "fd6f39dd3bef9326bc1f583bf07a1f9b8f02f846630a0c58c66c7bae70456d59" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "bytes": 572, + "sha256": "fb07ac7cfcb63c4dd77c7493f4a518e11d268fd5e8d4cf6a849c31552e48369a", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "source_sha256": "fb07ac7cfcb63c4dd77c7493f4a518e11d268fd5e8d4cf6a849c31552e48369a" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "bytes": 175505, + "sha256": "1d9e1b8c6fff12f8603ce8f7e58189da0ae8580e72d3c5bf5ff3893a4f9bce2f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "source_sha256": "1d9e1b8c6fff12f8603ce8f7e58189da0ae8580e72d3c5bf5ff3893a4f9bce2f" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "bytes": 550, + "sha256": "4902e83edaa137f55f5fe4f32f32068e94a3f4832630b284048c22b8a099dca6", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "source_sha256": "4902e83edaa137f55f5fe4f32f32068e94a3f4832630b284048c22b8a099dca6" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "bytes": 175410, + "sha256": "b911e06e11968f9d8655ab69619f33a8878759e497eb44498432c341dc6fbdd1", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "source_sha256": "b911e06e11968f9d8655ab69619f33a8878759e497eb44498432c341dc6fbdd1" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "bytes": 575, + "sha256": "75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "source_sha256": "75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "bytes": 15294, + "sha256": "346d480fa44e31a5a486bfa99c136cc5ddfee27a197194b7fac289de9ba55665", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "source_sha256": "346d480fa44e31a5a486bfa99c136cc5ddfee27a197194b7fac289de9ba55665" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "bytes": 575, + "sha256": "75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "source_sha256": "75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "bytes": 1062, + "sha256": "6a42d5cf20bf64a7b027660beca902ec84a80a1beb73e8aec1e4eb26fbb7c913", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "source_sha256": "6a42d5cf20bf64a7b027660beca902ec84a80a1beb73e8aec1e4eb26fbb7c913" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/hparams.yaml", + "bytes": 575, + "sha256": "75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/hparams.yaml", + "source_sha256": "75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/metrics.csv", + "bytes": 158739, + "sha256": "a71483c34b9d9cd904a6fe241f88af3e30bb3e100a15d666def5b06e4a5c0431", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/metrics.csv", + "source_sha256": "a71483c34b9d9cd904a6fe241f88af3e30bb3e100a15d666def5b06e4a5c0431" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "bytes": 553, + "sha256": "2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "source_sha256": "2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "bytes": 4108, + "sha256": "faee86ceadc7e1dbe6835d44aef8c5d4f810a2cbe224e13202154b52dab92be3", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "source_sha256": "faee86ceadc7e1dbe6835d44aef8c5d4f810a2cbe224e13202154b52dab92be3" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml", + "bytes": 553, + "sha256": "2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml", + "source_sha256": "2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/metrics.csv", + "bytes": 9534, + "sha256": "ed66bf0654eeaabf3b4f5f92e1295abc53a0155095160092ffb47826ff385d1a", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/metrics.csv", + "source_sha256": "ed66bf0654eeaabf3b4f5f92e1295abc53a0155095160092ffb47826ff385d1a" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml", + "bytes": 553, + "sha256": "2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml", + "source_sha256": "2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/metrics.csv", + "bytes": 57261, + "sha256": "127b095cc67faf26378a247dc7345de56d331537dad375990ed319f684fbde27", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/metrics.csv", + "source_sha256": "127b095cc67faf26378a247dc7345de56d331537dad375990ed319f684fbde27" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml", + "bytes": 553, + "sha256": "2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml", + "source_sha256": "2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/metrics.csv", + "bytes": 99720, + "sha256": "eee99377078178660db1f12c2700b0c46c9d8120db5f445a8d71d3f584cc9fcd", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/metrics.csv", + "source_sha256": "eee99377078178660db1f12c2700b0c46c9d8120db5f445a8d71d3f584cc9fcd" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "bytes": 575, + "sha256": "0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "source_sha256": "0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "bytes": 1418, + "sha256": "47b51d96993782f3c9e6117722176941bd2c6d571200d160e28aa654c97c6356", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "source_sha256": "47b51d96993782f3c9e6117722176941bd2c6d571200d160e28aa654c97c6356" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "bytes": 575, + "sha256": "0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "source_sha256": "0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "bytes": 1474, + "sha256": "89d056126636c1fd1fa44d27ecfd57040a9bfc9eec2a76104da0ae07d01680b3", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "source_sha256": "89d056126636c1fd1fa44d27ecfd57040a9bfc9eec2a76104da0ae07d01680b3" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/hparams.yaml", + "bytes": 575, + "sha256": "0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/hparams.yaml", + "source_sha256": "0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/metrics.csv", + "bytes": 175499, + "sha256": "c066cdbf7827bdec2f87c15bf95a42e0a23b511bf03338482e4d2b20c149336b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/metrics.csv", + "source_sha256": "c066cdbf7827bdec2f87c15bf95a42e0a23b511bf03338482e4d2b20c149336b" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "bytes": 553, + "sha256": "1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "source_sha256": "1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "bytes": 4381, + "sha256": "fe5d987579ac234e8f21bb70e642177e9eccb69493564b7c5895e6abd51f4dc2", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "source_sha256": "fe5d987579ac234e8f21bb70e642177e9eccb69493564b7c5895e6abd51f4dc2" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml", + "bytes": 553, + "sha256": "1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml", + "source_sha256": "1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv", + "bytes": 87583, + "sha256": "0ecfee6421a63cee0f0537fdb311e44b87227421f637816a0a3ccfd132763d16", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv", + "source_sha256": "0ecfee6421a63cee0f0537fdb311e44b87227421f637816a0a3ccfd132763d16" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml", + "bytes": 553, + "sha256": "1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml", + "source_sha256": "1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/metrics.csv", + "bytes": 41685, + "sha256": "0d313e8557cb13577b34c8e94e0f2c887c11cfa6da6ca36ab2aa5f9d1cc10f22", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/metrics.csv", + "source_sha256": "0d313e8557cb13577b34c8e94e0f2c887c11cfa6da6ca36ab2aa5f9d1cc10f22" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml", + "bytes": 553, + "sha256": "1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml", + "source_sha256": "1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/metrics.csv", + "bytes": 29032, + "sha256": "5ef2b9552f452e4218b9728c0ed57f7a14ec5068d065c7223e2c6e566e5dafd2", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/metrics.csv", + "source_sha256": "5ef2b9552f452e4218b9728c0ed57f7a14ec5068d065c7223e2c6e566e5dafd2" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "bytes": 572, + "sha256": "781862ff668231f3501e892c7be567e4e3a16709f6b433e97edeadd60ec1e8bf", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "source_sha256": "781862ff668231f3501e892c7be567e4e3a16709f6b433e97edeadd60ec1e8bf" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "bytes": 12411, + "sha256": "e92266239d6445a0de886e5081e433632c6719719f6d536ad31e98045160fcea", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "source_sha256": "e92266239d6445a0de886e5081e433632c6719719f6d536ad31e98045160fcea" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "bytes": 572, + "sha256": "781862ff668231f3501e892c7be567e4e3a16709f6b433e97edeadd60ec1e8bf", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "source_sha256": "781862ff668231f3501e892c7be567e4e3a16709f6b433e97edeadd60ec1e8bf" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "bytes": 275117, + "sha256": "929a3396f429527836db8368e7908024bf69766e0567636b1f24df8c1c06ea42", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "source_sha256": "929a3396f429527836db8368e7908024bf69766e0567636b1f24df8c1c06ea42" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "bytes": 550, + "sha256": "f7852d23330d3b55e46eec193b3fe411306ea59349de6fa53273294d893dce1c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "source_sha256": "f7852d23330d3b55e46eec193b3fe411306ea59349de6fa53273294d893dce1c" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "bytes": 284563, + "sha256": "1e68c5af1f9c7fe0f1c85d9f3d49fa1104bf3d4c768014154316ee27b94a3cc3", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "source_sha256": "1e68c5af1f9c7fe0f1c85d9f3d49fa1104bf3d4c768014154316ee27b94a3cc3" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "bytes": 572, + "sha256": "987afb2ba2360ff7f2a5a94943d064a7a3e5c902b53e445bc59bc291241e9d9a", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml", + "source_sha256": "987afb2ba2360ff7f2a5a94943d064a7a3e5c902b53e445bc59bc291241e9d9a" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "bytes": 11292, + "sha256": "e937607ecc6a7058664faab71728c58ef7a9bba8f6985082bca5d565aef6ec7e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv", + "source_sha256": "e937607ecc6a7058664faab71728c58ef7a9bba8f6985082bca5d565aef6ec7e" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "bytes": 572, + "sha256": "987afb2ba2360ff7f2a5a94943d064a7a3e5c902b53e445bc59bc291241e9d9a", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml", + "source_sha256": "987afb2ba2360ff7f2a5a94943d064a7a3e5c902b53e445bc59bc291241e9d9a" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "bytes": 274338, + "sha256": "eb420f0ea03bce2075ad4eac9237862ccbecb2c37c02d162d860516f4739b280", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv", + "source_sha256": "eb420f0ea03bce2075ad4eac9237862ccbecb2c37c02d162d860516f4739b280" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "bytes": 550, + "sha256": "22796804655424d5977b04b0b171d4da9fba18896eb4928842c4fad6bb7911dd", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml", + "source_sha256": "22796804655424d5977b04b0b171d4da9fba18896eb4928842c4fad6bb7911dd" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "bytes": 32118, + "sha256": "30f0105da3f2c579a8261a30ed6c3fcc8308cf9ebc2068f0e71168567e919922", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv", + "source_sha256": "30f0105da3f2c579a8261a30ed6c3fcc8308cf9ebc2068f0e71168567e919922" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml", + "bytes": 550, + "sha256": "22796804655424d5977b04b0b171d4da9fba18896eb4928842c4fad6bb7911dd", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml", + "source_sha256": "22796804655424d5977b04b0b171d4da9fba18896eb4928842c4fad6bb7911dd" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv", + "bytes": 251993, + "sha256": "168da3dcbf6ca795bb75ec67b9fc567788637c25875b766cc76b441825e6020c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv", + "source_sha256": "168da3dcbf6ca795bb75ec67b9fc567788637c25875b766cc76b441825e6020c" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_score_macro.py", + "bytes": 14847, + "sha256": "ef833104d5eecd273df7d9f7c39bae4a216b015bde15978ea716f1f864874de4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_score_macro.py", + "source_sha256": "ef833104d5eecd273df7d9f7c39bae4a216b015bde15978ea716f1f864874de4" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_score_macro_seeds.py", + "bytes": 15417, + "sha256": "578635213e1a3eddd61438a6249f14e1a5d2487267286fc459eb77972808e225", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_score_macro_seeds.py", + "source_sha256": "578635213e1a3eddd61438a6249f14e1a5d2487267286fc459eb77972808e225" + }, + { + "path": "bertosebind_new_runs/executed/remote/gifflar_score_perrow.py", + "bytes": 16705, + "sha256": "f88bcf303685ea6a075747a12eafa7df041909b9b455d80ea98c2b536aed0de8", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/gifflar_score_perrow.py", + "source_sha256": "f88bcf303685ea6a075747a12eafa7df041909b9b455d80ea98c2b536aed0de8" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_attr_motif_16596807.out", + "bytes": 7511, + "sha256": "e65e21b8c9c9bd0291a034852f7ab47f826e1f51448d9ea8439b5eb23ed8eb98", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_attr_motif_16596807.out", + "source_sha256": "e65e21b8c9c9bd0291a034852f7ab47f826e1f51448d9ea8439b5eb23ed8eb98" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_b4_grep_16604967.out", + "bytes": 4542, + "sha256": "dadfe2c408938645b4138bb011719affdaebe7098060f66354df56da71d0a146", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_b4_grep_16604967.out", + "source_sha256": "dadfe2c408938645b4138bb011719affdaebe7098060f66354df56da71d0a146" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_b4_s3_16604914.out", + "bytes": 609, + "sha256": "79eb29df46c44942a2a6ac4313789ebc29e1672bec4512c4f965be5ebb739cc9", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_b4_s3_16604914.out", + "source_sha256": "79eb29df46c44942a2a6ac4313789ebc29e1672bec4512c4f965be5ebb739cc9" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_b4_s3r2_16605803.out", + "bytes": 5103, + "sha256": "5d93f96fb6e537c9b802fd1b2d9fe25df41a19800f85ea860246274d2e897d71", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_b4_s3r2_16605803.out", + "source_sha256": "5d93f96fb6e537c9b802fd1b2d9fe25df41a19800f85ea860246274d2e897d71" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_0.err", + "bytes": 3771, + "sha256": "6c486b37a642549a8dcf924eabd52e2660d88a6ada53ba05aecb91937fd98626", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_0.err", + "source_sha256": "6c486b37a642549a8dcf924eabd52e2660d88a6ada53ba05aecb91937fd98626" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_0.out", + "bytes": 3954, + "sha256": "7832596dfd62832aadeed39c1acca59643f00ec8dbe812730b49bd1b2ca5150b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_0.out", + "source_sha256": "7832596dfd62832aadeed39c1acca59643f00ec8dbe812730b49bd1b2ca5150b" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_1.err", + "bytes": 3771, + "sha256": "bf5e3ff79c6b942dca7f35dcb85d0f32081b03875cb4640022fab29dff833b11", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_1.err", + "source_sha256": "bf5e3ff79c6b942dca7f35dcb85d0f32081b03875cb4640022fab29dff833b11" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_1.out", + "bytes": 3956, + "sha256": "134b045efbf1f560d0d41fa702ff53b6369fd38235fcef55ca8aaa4615698fed", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_1.out", + "source_sha256": "134b045efbf1f560d0d41fa702ff53b6369fd38235fcef55ca8aaa4615698fed" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_10.err", + "bytes": 3777, + "sha256": "d911a9619dee68a9fc982bb3db253b8e72f12dc1c06d2bc434556211909b2719", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_10.err", + "source_sha256": "d911a9619dee68a9fc982bb3db253b8e72f12dc1c06d2bc434556211909b2719" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_10.out", + "bytes": 3998, + "sha256": "c079926adcc0d2bce5b591f870208dcd2bef2ea3029aee8950bf0ce44c1105ea", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_10.out", + "source_sha256": "c079926adcc0d2bce5b591f870208dcd2bef2ea3029aee8950bf0ce44c1105ea" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_11.err", + "bytes": 4168, + "sha256": "5024c4160aeeccd212930b0d959ed0bab4dd7bf593b61b26decd78c7513aa638", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_11.err", + "source_sha256": "5024c4160aeeccd212930b0d959ed0bab4dd7bf593b61b26decd78c7513aa638" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_11.out", + "bytes": 4229, + "sha256": "4d110e939761ff4d8c7938c754e182d2c09ede84c8360d10ce18a04280dafea6", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_11.out", + "source_sha256": "4d110e939761ff4d8c7938c754e182d2c09ede84c8360d10ce18a04280dafea6" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_2.err", + "bytes": 3777, + "sha256": "d9383fa7e0469a436e08d24f4f9af31c1a6fb9ebb5e115843b53e2b2ded612f1", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_2.err", + "source_sha256": "d9383fa7e0469a436e08d24f4f9af31c1a6fb9ebb5e115843b53e2b2ded612f1" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_2.out", + "bytes": 3992, + "sha256": "0bbeab27824eeffbbfe5cf04317d1795b1f8f02d4c5ad9b7dbc23e159a823940", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_2.out", + "source_sha256": "0bbeab27824eeffbbfe5cf04317d1795b1f8f02d4c5ad9b7dbc23e159a823940" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_3.err", + "bytes": 3777, + "sha256": "735f42f273046b3af0374283927429fa75a1b7a8b66d6b205a20e4e1cfd59eed", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_3.err", + "source_sha256": "735f42f273046b3af0374283927429fa75a1b7a8b66d6b205a20e4e1cfd59eed" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_3.out", + "bytes": 3997, + "sha256": "dcdbc088e7945d0f63803ac95aed81f3f8c8d25c97dd760df269921a08bacae7", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_3.out", + "source_sha256": "dcdbc088e7945d0f63803ac95aed81f3f8c8d25c97dd760df269921a08bacae7" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_4.err", + "bytes": 4166, + "sha256": "98912251710582e65eaed2ba01ee184d957d177ec31e30969939b4ef0962a2bf", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_4.err", + "source_sha256": "98912251710582e65eaed2ba01ee184d957d177ec31e30969939b4ef0962a2bf" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_4.out", + "bytes": 4182, + "sha256": "b1febe3591a887bd63d7bb607536ce17bdab51eb9db9a8b8c3d9d5ff77aca1c2", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_4.out", + "source_sha256": "b1febe3591a887bd63d7bb607536ce17bdab51eb9db9a8b8c3d9d5ff77aca1c2" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_5.err", + "bytes": 3775, + "sha256": "cbb38c7fc50100cfa44cdf9b64de3df9a002613c62d8489b9d3db301406712c7", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_5.err", + "source_sha256": "cbb38c7fc50100cfa44cdf9b64de3df9a002613c62d8489b9d3db301406712c7" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_5.out", + "bytes": 3956, + "sha256": "a1b8f17ba63285c54d42ad49ce61bf8356ac4dfe279de8b65f687304783bdf55", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_5.out", + "source_sha256": "a1b8f17ba63285c54d42ad49ce61bf8356ac4dfe279de8b65f687304783bdf55" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_6.err", + "bytes": 4178, + "sha256": "8ec18cd103ee2f80b2bacc8660a53588ed6313dbdc2455fe87fb5cdac6d30ef1", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_6.err", + "source_sha256": "8ec18cd103ee2f80b2bacc8660a53588ed6313dbdc2455fe87fb5cdac6d30ef1" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_6.out", + "bytes": 4226, + "sha256": "18050c22347d3a2900b0d15cd7f2b97c1f6028ff27e5e060fc33c8308851b358", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_6.out", + "source_sha256": "18050c22347d3a2900b0d15cd7f2b97c1f6028ff27e5e060fc33c8308851b358" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_7.err", + "bytes": 4178, + "sha256": "1a1baefb3f9d8bae9c38975310f96004470e75bed27b32b5273b31a9baca05f5", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_7.err", + "source_sha256": "1a1baefb3f9d8bae9c38975310f96004470e75bed27b32b5273b31a9baca05f5" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_7.out", + "bytes": 4229, + "sha256": "8869a90d89089a6f26c7d88b1a389630930c35adff10016a015bc5bb331308b7", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_7.out", + "source_sha256": "8869a90d89089a6f26c7d88b1a389630930c35adff10016a015bc5bb331308b7" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_8.err", + "bytes": 4156, + "sha256": "01b633582a3ed13728f688fde16693926778896ba0952506cce66072f600f354", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_8.err", + "source_sha256": "01b633582a3ed13728f688fde16693926778896ba0952506cce66072f600f354" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_8.out", + "bytes": 4184, + "sha256": "8f468cb20588f01bc0794c43ea69d5fa78627f4e35ef7ecdb7ffbcd3266c78c3", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_8.out", + "source_sha256": "8f468cb20588f01bc0794c43ea69d5fa78627f4e35ef7ecdb7ffbcd3266c78c3" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_9.err", + "bytes": 4600, + "sha256": "a3ea46d3bd9191b9bbd49627cbfdac0dee312230e5e1ed93016f98f8786b94ba", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_9.err", + "source_sha256": "a3ea46d3bd9191b9bbd49627cbfdac0dee312230e5e1ed93016f98f8786b94ba" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_9.out", + "bytes": 4184, + "sha256": "313f8c5e3999dfa75ae508fd57d0d033a00b40cdf2b794cb4c32fb0a901b53bb", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_9.out", + "source_sha256": "313f8c5e3999dfa75ae508fd57d0d033a00b40cdf2b794cb4c32fb0a901b53bb" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_0.err", + "bytes": 575, + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_0.err", + "source_sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_0.out", + "bytes": 2138, + "sha256": "19bb18892da4f9174e308bd42908a6e6d383001edd75c9ad482eef111b5bbb31", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_0.out", + "source_sha256": "19bb18892da4f9174e308bd42908a6e6d383001edd75c9ad482eef111b5bbb31" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_1.err", + "bytes": 575, + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_1.err", + "source_sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_1.out", + "bytes": 2137, + "sha256": "152af1228aa39534d68470023321d4350bb2ea4b997bfd0bf38efbbeb92bad8b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_1.out", + "source_sha256": "152af1228aa39534d68470023321d4350bb2ea4b997bfd0bf38efbbeb92bad8b" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_10.err", + "bytes": 575, + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_10.err", + "source_sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_10.out", + "bytes": 2141, + "sha256": "d842f047adc16782a9724406ecab07aa67fe3ad853f5d0c8bee73cb63d129782", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_10.out", + "source_sha256": "d842f047adc16782a9724406ecab07aa67fe3ad853f5d0c8bee73cb63d129782" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_11.err", + "bytes": 575, + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_11.err", + "source_sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_11.out", + "bytes": 2150, + "sha256": "922dfe72fd457b50a6c468db266827346ab1173381458ad61e21ceb5a0c8736c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_11.out", + "source_sha256": "922dfe72fd457b50a6c468db266827346ab1173381458ad61e21ceb5a0c8736c" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_2.err", + "bytes": 575, + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_2.err", + "source_sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_2.out", + "bytes": 2152, + "sha256": "2b008f6ae0f5554b9841582ded12a01558218558d8b7748899e94a0499d8caaf", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_2.out", + "source_sha256": "2b008f6ae0f5554b9841582ded12a01558218558d8b7748899e94a0499d8caaf" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_3.err", + "bytes": 575, + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_3.err", + "source_sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_3.out", + "bytes": 2152, + "sha256": "c1d325125ee0463b230e5ac347c45a117ebc1a1686393d9d7bd63dd7c9a8a8d4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_3.out", + "source_sha256": "c1d325125ee0463b230e5ac347c45a117ebc1a1686393d9d7bd63dd7c9a8a8d4" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_4.err", + "bytes": 575, + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_4.err", + "source_sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_4.out", + "bytes": 2170, + "sha256": "939f30920d3d4a772d8736c945f6e39dc949cde64cc7b9b9e0116e7b45f4f895", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_4.out", + "source_sha256": "939f30920d3d4a772d8736c945f6e39dc949cde64cc7b9b9e0116e7b45f4f895" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_5.err", + "bytes": 575, + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_5.err", + "source_sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_5.out", + "bytes": 2171, + "sha256": "7817d9b5c087d542f2c0659726a66532091a24c9b05edb04196a756291dd5784", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_5.out", + "source_sha256": "7817d9b5c087d542f2c0659726a66532091a24c9b05edb04196a756291dd5784" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_6.err", + "bytes": 575, + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_6.err", + "source_sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_6.out", + "bytes": 2197, + "sha256": "4283aa1d699582d4766ca394cf2d9c4b046ce8247b5cef0f8250c424329138a2", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_6.out", + "source_sha256": "4283aa1d699582d4766ca394cf2d9c4b046ce8247b5cef0f8250c424329138a2" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_7.err", + "bytes": 575, + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_7.err", + "source_sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_7.out", + "bytes": 2196, + "sha256": "eb0257132cbd79d1a3a84bec543183b7bbdaceaaaefc85c988368d70d4146322", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_7.out", + "source_sha256": "eb0257132cbd79d1a3a84bec543183b7bbdaceaaaefc85c988368d70d4146322" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_8.err", + "bytes": 575, + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_8.err", + "source_sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_8.out", + "bytes": 2137, + "sha256": "523b5ac11259832265dab5c4e08d837f3fe7e4780048a5a4af1f513f6b8c3d4a", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_8.out", + "source_sha256": "523b5ac11259832265dab5c4e08d837f3fe7e4780048a5a4af1f513f6b8c3d4a" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_9.err", + "bytes": 575, + "sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_9.err", + "source_sha256": "53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4" + }, + { + "path": "bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_9.out", + "bytes": 2137, + "sha256": "40ef3d8f12ba723cfe0e845ec72a960dbd32c8bc5baa3013f570e1c27a6431b6", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_9.out", + "source_sha256": "40ef3d8f12ba723cfe0e845ec72a960dbd32c8bc5baa3013f570e1c27a6431b6" + }, + { + "path": "bertosebind_new_runs/executed/remote/manifest.json", + "bytes": 74005, + "sha256": "06fbfcd2f820fc4621d35c16dcd6bbece93ea68b96d417d8b7bd2ce3ea104cdb", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/manifest.json", + "source_sha256": "06fbfcd2f820fc4621d35c16dcd6bbece93ea68b96d417d8b7bd2ce3ea104cdb" + }, + { + "path": "bertosebind_new_runs/executed/remote/train_lgi.py", + "bytes": 6375, + "sha256": "bf602abb05eeb3b0203766d9d1bc462579c181bc3418d762f6d02d5f36e8a230", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/executed/remote/train_lgi.py", + "source_sha256": "bf602abb05eeb3b0203766d9d1bc462579c181bc3418d762f6d02d5f36e8a230" + }, + { + "path": "bertosebind_new_runs/inputs/current_glycan_sets/doubly_cold_exposure_join.csv", + "bytes": 32408, + "sha256": "9d13452309d64f138705657334b74738eaf167c9faff835d024582e0e98c0af8", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/inputs/current_glycan_sets/doubly_cold_exposure_join.csv", + "source_sha256": "9d13452309d64f138705657334b74738eaf167c9faff835d024582e0e98c0af8" + }, + { + "path": "bertosebind_new_runs/inputs/current_glycan_sets/doubly_cold_scored_glycans.csv", + "bytes": 30484, + "sha256": "e5eebf2072779d7001dabd3981237025be37eee6f19a5b109b00ce4b3e776e09", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/inputs/current_glycan_sets/doubly_cold_scored_glycans.csv", + "source_sha256": "e5eebf2072779d7001dabd3981237025be37eee6f19a5b109b00ce4b3e776e09" + }, + { + "path": "bertosebind_new_runs/inputs/current_glycan_sets/glycan_cold_exposure_join.csv", + "bytes": 62994, + "sha256": "4d101cc92685c63ecca99cfad2c1bc46c73c77b1e565bd686bde14ee0d020886", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/inputs/current_glycan_sets/glycan_cold_exposure_join.csv", + "source_sha256": "4d101cc92685c63ecca99cfad2c1bc46c73c77b1e565bd686bde14ee0d020886" + }, + { + "path": "bertosebind_new_runs/inputs/current_glycan_sets/glycan_cold_scored_glycans.csv", + "bytes": 59313, + "sha256": "0faab973a6ee5e5bf712983d51fad9f746e34edcbe5342574d45933bba62f48a", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/inputs/current_glycan_sets/glycan_cold_scored_glycans.csv", + "source_sha256": "0faab973a6ee5e5bf712983d51fad9f746e34edcbe5342574d45933bba62f48a" + }, + { + "path": "bertosebind_new_runs/inputs/current_glycan_sets/manifest.json", + "bytes": 2391, + "sha256": "7655d9d080df7cb5dc748b7d9721037fbec67c04cf837e4724f0afba7e7a4d71", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/inputs/current_glycan_sets/manifest.json", + "source_sha256": "7655d9d080df7cb5dc748b7d9721037fbec67c04cf837e4724f0afba7e7a4d71" + }, + { + "path": "bertosebind_new_runs/inputs/current_glycan_sets/protein_cold_exposure_join.csv", + "bytes": 112384, + "sha256": "08ceef347f61012e0baab4daf1472122dc80335c6ea02fe084098c055a3e3e30", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/inputs/current_glycan_sets/protein_cold_exposure_join.csv", + "source_sha256": "08ceef347f61012e0baab4daf1472122dc80335c6ea02fe084098c055a3e3e30" + }, + { + "path": "bertosebind_new_runs/inputs/current_glycan_sets/protein_cold_scored_glycans.csv", + "bytes": 103485, + "sha256": "f35d6088903e993f46adee07806e577456599d9814f4f43e40efdf3d8ddf6c46", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/inputs/current_glycan_sets/protein_cold_scored_glycans.csv", + "source_sha256": "f35d6088903e993f46adee07806e577456599d9814f4f43e40efdf3d8ddf6c46" + }, + { + "path": "bertosebind_new_runs/package_manifest.json", + "bytes": 143946, + "sha256": "56d04a5a985d2bd96067e5c1a1e7acd67c5f76ae05c17831bc5949cb6bee26ab", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/package_manifest.json", + "source_sha256": "56d04a5a985d2bd96067e5c1a1e7acd67c5f76ae05c17831bc5949cb6bee26ab" + }, + { + "path": "bertosebind_new_runs/protocol/amendment_excerpts_20260925_26.md", + "bytes": 13421, + "sha256": "924765b90a840277c5ed9dd6594a8ded2d5f7add5b138a9af1adf89bbb46cbcc", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/protocol/amendment_excerpts_20260925_26.md", + "source_sha256": "924765b90a840277c5ed9dd6594a8ded2d5f7add5b138a9af1adf89bbb46cbcc" + }, + { + "path": "bertosebind_new_runs/protocol/original_20260910.md", + "bytes": 10993, + "sha256": "04dea299feb3ac0840ff5db7471381ad3f1cf531653bf6aeb9825005236d2f0b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/protocol/original_20260910.md", + "source_sha256": "04dea299feb3ac0840ff5db7471381ad3f1cf531653bf6aeb9825005236d2f0b" + }, + { + "path": "bertosebind_new_runs/provenance/bootstrap_anatomy_audit.json", + "bytes": 41282, + "sha256": "11014b5f0972c23b7225c4202f2254b444109b8105563d968e9c8f4534061ff1", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/provenance/bootstrap_anatomy_audit.json", + "source_sha256": "11014b5f0972c23b7225c4202f2254b444109b8105563d968e9c8f4534061ff1" + }, + { + "path": "bertosebind_new_runs/provenance/bootstrap_code_audit.json", + "bytes": 12403, + "sha256": "d2812e72a7befc1bdb08465189d2fed035ae725142c1cf978a578e0add72e94d", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/provenance/bootstrap_code_audit.json", + "source_sha256": "d2812e72a7befc1bdb08465189d2fed035ae725142c1cf978a578e0add72e94d" + }, + { + "path": "bertosebind_new_runs/provenance/bootstrap_exact_input_manifest.json", + "bytes": 24651, + "sha256": "d6e36605873c587028c6dab2dde8093c6e4e33df53ebc27f1d6e3c6b4de14991", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/provenance/bootstrap_exact_input_manifest.json", + "source_sha256": "d6e36605873c587028c6dab2dde8093c6e4e33df53ebc27f1d6e3c6b4de14991" + }, + { + "path": "bertosebind_new_runs/provenance/current_pretraining_exposure_audit.json", + "bytes": 9596, + "sha256": "30a70a1703183b50fa1c10986c065471513981fac1e3e69f9c7ad649aeecb16a", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/provenance/current_pretraining_exposure_audit.json", + "source_sha256": "30a70a1703183b50fa1c10986c065471513981fac1e3e69f9c7ad649aeecb16a" + }, + { + "path": "bertosebind_new_runs/provenance/exposure_portability.patch", + "bytes": 8422, + "sha256": "ff65b38435040ba2f5987e0c78ecc0fafc4604341b9bc094513d47cb343db023", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/provenance/exposure_portability.patch", + "source_sha256": "ff65b38435040ba2f5987e0c78ecc0fafc4604341b9bc094513d47cb343db023" + }, + { + "path": "bertosebind_new_runs/provenance/gifflar_scorer_diff.txt", + "bytes": 1510, + "sha256": "6649cef7a00096ba2981c611a4c6432be93300e3bb439cd543a692cbb40a15af", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/provenance/gifflar_scorer_diff.txt", + "source_sha256": "6649cef7a00096ba2981c611a4c6432be93300e3bb439cd543a692cbb40a15af" + }, + { + "path": "bertosebind_new_runs/provenance/protein_gifflar_audit.json", + "bytes": 109442, + "sha256": "7d24cac24a37583fddac7d91c73e22ea6d4a022194ac213ab354f9e9831b1084", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/provenance/protein_gifflar_audit.json", + "source_sha256": "7d24cac24a37583fddac7d91c73e22ea6d4a022194ac213ab354f9e9831b1084" + }, + { + "path": "bertosebind_new_runs/provenance/protein_gifflar_verified_numbers.json", + "bytes": 30957, + "sha256": "9d2e628a789a46a69333c24550d2a150166aebed382880c2d0a67fbd43124eaa", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/provenance/protein_gifflar_verified_numbers.json", + "source_sha256": "9d2e628a789a46a69333c24550d2a150166aebed382880c2d0a67fbd43124eaa" + }, + { + "path": "bertosebind_new_runs/reproduce_summary.py", + "bytes": 2008, + "sha256": "4b49c6f8f6c9953cee46ff2f6c47e1bb68692c9b58984973b3d8666648999f62", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/reproduce_summary.py", + "source_sha256": "4b49c6f8f6c9953cee46ff2f6c47e1bb68692c9b58984973b3d8666648999f62" + }, + { + "path": "bertosebind_new_runs/requirements.txt", + "bytes": 104, + "sha256": "99acda4c8365d691c16de3e032e225de05cee38cff063a772bf9eaec2067328f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/requirements.txt", + "source_sha256": "99acda4c8365d691c16de3e032e225de05cee38cff063a772bf9eaec2067328f" + }, + { + "path": "bertosebind_new_runs/results/doubly_cold_anatomy.json", + "bytes": 9441, + "sha256": "0dff08537f0cd5a1ad40562537c48546d3d4f3858a75b2ab2d3729b22a5dfe91", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/results/doubly_cold_anatomy.json", + "source_sha256": "0dff08537f0cd5a1ad40562537c48546d3d4f3858a75b2ab2d3729b22a5dfe91" + }, + { + "path": "bertosebind_new_runs/results/doubly_cold_per_assay.csv", + "bytes": 18263, + "sha256": "4186c66c13fd05d62d83a10df2a5761b2e29ded502660c12cb450836f9881496", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/results/doubly_cold_per_assay.csv", + "source_sha256": "4186c66c13fd05d62d83a10df2a5761b2e29ded502660c12cb450836f9881496" + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_gifflarESM_s43.json", + "bytes": 927, + "sha256": "2c494ac1351d4ff63828139eac004c0047dc3259d62fd10334d5a740cab9182f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_gifflarESM_s43.json", + "source_sha256": "2c494ac1351d4ff63828139eac004c0047dc3259d62fd10334d5a740cab9182f" + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_gifflarESM_s44.json", + "bytes": 927, + "sha256": "82173016b893cb2913e90e99feea5f6f4ff22cff9e1aff0fe7dc136161c7f627", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_gifflarESM_s44.json", + "source_sha256": "82173016b893cb2913e90e99feea5f6f4ff22cff9e1aff0fe7dc136161c7f627" + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_sweetnetESM_s43.json", + "bytes": 933, + "sha256": "ac58a83969a0ffb860cf1a33a472f4cb5b3e14f25097c3ba909f7555f65aa589", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_sweetnetESM_s43.json", + "source_sha256": "ac58a83969a0ffb860cf1a33a472f4cb5b3e14f25097c3ba909f7555f65aa589" + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_sweetnetESM_s44.json", + "bytes": 933, + "sha256": "d2d2d73c834a2fcca7b8c22fd6ce91907f18866443628c2c54f8b8ec04477803", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_sweetnetESM_s44.json", + "source_sha256": "d2d2d73c834a2fcca7b8c22fd6ce91907f18866443628c2c54f8b8ec04477803" + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_gifflarESM_s43.json", + "bytes": 929, + "sha256": "7b0a01a1acc7e2ca80a3de9aaab02941942ead519e6661abec6c44c7fa5fd079", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_gifflarESM_s43.json", + "source_sha256": "7b0a01a1acc7e2ca80a3de9aaab02941942ead519e6661abec6c44c7fa5fd079" + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_gifflarESM_s44.json", + "bytes": 930, + "sha256": "f2e40d306b767e6949c02304077a08398dc16ac19d08d94937f7dc49abd7cc24", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_gifflarESM_s44.json", + "source_sha256": "f2e40d306b767e6949c02304077a08398dc16ac19d08d94937f7dc49abd7cc24" + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_sweetnetESM_s43.json", + "bytes": 935, + "sha256": "e13c8021d6e94b3bd6cb4ef00d7456c182449f57c4b1356256e011805a6efdbf", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_sweetnetESM_s43.json", + "source_sha256": "e13c8021d6e94b3bd6cb4ef00d7456c182449f57c4b1356256e011805a6efdbf" + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_sweetnetESM_s44.json", + "bytes": 935, + "sha256": "d274d35c9a0ba25e4597cdb8c01001f4f7ff7760aabfe7c8a00b84a70b74252f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_sweetnetESM_s44.json", + "source_sha256": "d274d35c9a0ba25e4597cdb8c01001f4f7ff7760aabfe7c8a00b84a70b74252f" + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_gifflarESM_s43.json", + "bytes": 922, + "sha256": "2208056d5303fda27c5b541eed1c6f64cb03de1c10abd2868d4ce55d1bdb475c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_gifflarESM_s43.json", + "source_sha256": "2208056d5303fda27c5b541eed1c6f64cb03de1c10abd2868d4ce55d1bdb475c" + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_gifflarESM_s44.json", + "bytes": 922, + "sha256": "c831378d73c3c2c9456be5ff9ff05acc34b64815b056c5df21bef2078a415393", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_gifflarESM_s44.json", + "source_sha256": "c831378d73c3c2c9456be5ff9ff05acc34b64815b056c5df21bef2078a415393" + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_sweetnetESM_s43.json", + "bytes": 929, + "sha256": "121a30d0de568217e722036cf25ba4ef61128398fde3466fc8b2f60f096722c7", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_sweetnetESM_s43.json", + "source_sha256": "121a30d0de568217e722036cf25ba4ef61128398fde3466fc8b2f60f096722c7" + }, + { + "path": "bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_sweetnetESM_s44.json", + "bytes": 927, + "sha256": "3d29ac377491db5d952f6066228fe4099f99db0e2fbaa80063ee429fc28e0a28", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_sweetnetESM_s44.json", + "source_sha256": "3d29ac377491db5d952f6066228fe4099f99db0e2fbaa80063ee429fc28e0a28" + }, + { + "path": "bertosebind_new_runs/results/protein_probe.json", + "bytes": 10946, + "sha256": "4fd80f7396aa9803602fd62bd82ec3e98e1f937b46e1057cb26ffa56ea6c93f0", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/bertosebind_new_runs/results/protein_probe.json", + "source_sha256": "4fd80f7396aa9803602fd62bd82ec3e98e1f937b46e1057cb26ffa56ea6c93f0" + }, + { + "path": "check_release.py", + "bytes": 2258, + "sha256": "f224aac78366d64d60b86841b11a9694d234e955904112d266de9bbbc4d8af3e", + "role": "portable_release_file" + }, + { + "path": "code_inventory.tsv", + "bytes": 212839, + "sha256": "9acda1420a4df8efc4b73432e517c32a55aa26b4d9c7bb3487e2a565565089e0", + "role": "documented_revised_release_file", + "source": "submit_comm/06_code/code_inventory.tsv", + "source_sha256": "e7f96e87f19d2db6e07ee3b766ec6067a39b83ff2331e9695a82d455cd2dd0a8", + "prior_release_sha256": "7f051341cf6463c335102ae788ed045352699f3be8333a626034e4f82e45fad6" + }, + { + "path": "docs/DATA_ACCESS.md", + "bytes": 2861, + "sha256": "6d805fd046c5aca89ef531f37950bb73ef15125865c6a841dcc4934ba7932780", + "role": "workbench_interface_examples_or_documentation" + }, + { + "path": "docs/QUICKSTART.md", + "bytes": 8491, + "sha256": "1fa5b83d57f611207e04c88d2190d6cd364833b4c6ec9c0ca35649937ec5f645", + "role": "workbench_interface_examples_or_documentation" + }, + { + "path": "docs/TRAINING.md", + "bytes": 5566, + "sha256": "b5072e437307aedfd1f789b3dc8024498e6c96ffb6f80d06d0f6a08a805d4b00", + "role": "workbench_interface_examples_or_documentation" + }, + { + "path": "docs/WEBSITE_INTEGRATION.md", + "bytes": 4656, + "sha256": "5f19be94138c38e9f35afa27aeedb514f9421a4e4724ee27c76ec0302487eed3", + "role": "workbench_interface_examples_or_documentation" + }, + { + "path": "docs/reproduction.md", + "bytes": 8329, + "sha256": "52263f18a04e465305b49d53a73f9682849fd138fe817d4afb774c48252d869b", + "role": "documented_revised_release_file", + "prior_release_sha256": "372a062698953b2880f35536df3e202acf2eeb6ac50dddb5e7110debfac05507" + }, + { + "path": "download_assets.py", + "bytes": 4334, + "sha256": "4008db9ad60a8d97e5bf705cee0da416dd6755eed15ab4882ffa61e04e4299a5", + "role": "workbench_interface_examples_or_documentation" + }, + { + "path": "embed.py", + "bytes": 2858, + "sha256": "b8fe7b4e50ffa4caf7ca9c50742dd279bb4a717b6fad629a24971ceab635b2ab", + "role": "portable_release_file" + }, + { + "path": "examples/glycans.csv", + "bytes": 141, + "sha256": "a46c2c31f02fb0829fbe70a29c4c032b16a1cd5208386c2ecbc9f6c3fc2018bc", + "role": "portable_release_file" + }, + { + "path": "examples/predictions.csv", + "bytes": 224, + "sha256": "b4a8c26479a118943646d4baae370c1d0a267fe30c487fbf816a3999b5a4ed03", + "role": "portable_release_file" + }, + { + "path": "examples/smoke_affinose.py", + "bytes": 5963, + "sha256": "903d14d8bafc9ae2aa968a74ad4b9d31396c598624fe05e2acb1814cb60bd60e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/examples/smoke_affinose.py", + "source_sha256": "903d14d8bafc9ae2aa968a74ad4b9d31396c598624fe05e2acb1814cb60bd60e" + }, + { + "path": "examples/smoke_models.py", + "bytes": 3242, + "sha256": "ff95ff2a7707940b849a44259cdf356f66dd5b0351faf4e400feac6666afd9af", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/examples/smoke_models.py", + "source_sha256": "ff95ff2a7707940b849a44259cdf356f66dd5b0351faf4e400feac6666afd9af" + }, + { + "path": "executed/downstream/review_a5_native_checkpoint.py", + "bytes": 18793, + "sha256": "89b65f9186f2080eab214f1b7389854cd8477124cdc729a428624312fb7a1453", + "role": "unchanged_preserved_source_or_asset", + "source": "multimodal/runtime/a5_downstream_native_taxonomy_multilabel_s42_20260802_r3_cuda_device_retry/review_a5_native_checkpoint.py", + "source_sha256": "89b65f9186f2080eab214f1b7389854cd8477124cdc729a428624312fb7a1453" + }, + { + "path": "executed/downstream/run_review_native_md_on_terminal4_s42.py", + "bytes": 43666, + "sha256": "1c958427bca7991b8ec091b6f0c8d209fc1ddfaf1aa9e1f96ad22ed5c60b839d", + "role": "unchanged_preserved_source_or_asset", + "source": "multimodal/runtime/a5_wa_downstream_20260820_r1_preparation/evidence/frozen/run_review_native_md_on_terminal4_s42.py", + "source_sha256": "1c958427bca7991b8ec091b6f0c8d209fc1ddfaf1aa9e1f96ad22ed5c60b839d" + }, + { + "path": "figures/Figure_style.md", + "bytes": 1277, + "sha256": "75d530c95c218fafb25e844865dd3884737d11b23c4cfdc121226549923fecdb", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/Figure_style.md", + "source_sha256": "75d530c95c218fafb25e844865dd3884737d11b23c4cfdc121226549923fecdb" + }, + { + "path": "figures/README.md", + "bytes": 9237, + "sha256": "83791502b5e689451ea735a3da108185ad5aed4d861a187b68c622e0b4b3fe69", + "role": "documented_revised_release_file", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/README.md", + "source_sha256": "83791502b5e689451ea735a3da108185ad5aed4d861a187b68c622e0b4b3fe69", + "prior_release_sha256": "784b9b6472c10498b5aaef3f5bcc43f23bde0805135c6b0265d851aa6e342c1e" + }, + { + "path": "figures/ablation_figure9/README.md", + "bytes": 1979, + "sha256": "14addd0706d771da818f53b0d17a0248ba496c7e6ceb3850b89cc6573d35ae71", + "role": "documented_revised_release_file", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/ablation_figure9/README.md", + "source_sha256": "14addd0706d771da818f53b0d17a0248ba496c7e6ceb3850b89cc6573d35ae71", + "prior_release_sha256": "3a6fcbfe8388f494ad542a24a6d4d66c8315af62e82627a2429518fbe1b2f9bd" + }, + { + "path": "figures/ablation_figure9/nature-bpg-palette.json", + "bytes": 478, + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/ablation_figure9/nature-bpg-palette.json", + "source_sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b" + }, + { + "path": "figures/ablation_figure9/plot_data.json", + "bytes": 146397, + "sha256": "179bf3ddb15842c726a90a9cf373c7861409c8f823bae344a0b621fa77ed51f9", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/ablation_figure9/plot_data.json", + "source_sha256": "179bf3ddb15842c726a90a9cf373c7861409c8f823bae344a0b621fa77ed51f9" + }, + { + "path": "figures/bootstrap_figure13/README.md", + "bytes": 2596, + "sha256": "457cfdc37e557c623d23292cfb221b214b9f158ab9ec611576b5553969ce4469", + "role": "documented_revised_release_file", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/bootstrap_figure13/README.md", + "source_sha256": "457cfdc37e557c623d23292cfb221b214b9f158ab9ec611576b5553969ce4469", + "prior_release_sha256": "9494d4ea185f98082bf6197cf6c244035c3cb8c811527c922357fc28ca381149" + }, + { + "path": "figures/bootstrap_figure13/build_figure13.py", + "bytes": 17900, + "sha256": "fbddc62114cd214265d12bb11584004988c169731fe66c8faba20d1c871bb876", + "role": "documented_revised_release_file", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/bootstrap_figure13/build_figure13.py", + "source_sha256": "fbddc62114cd214265d12bb11584004988c169731fe66c8faba20d1c871bb876", + "prior_release_sha256": "832849e584499907aa66540616d52ffa192538bf9353f19c4f463f48694a4806" + }, + { + "path": "figures/bootstrap_figure13/inputs/affinose_b4_step3_bootstrap_r2_20260927.json", + "bytes": 48191, + "sha256": "6a87e6a8abc926f41ca13b1bb6c81cbf9ea1d04b06e8f39bfdaf847ce55ba235", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/bootstrap_figure13/inputs/affinose_b4_step3_bootstrap_r2_20260927.json", + "source_sha256": "6a87e6a8abc926f41ca13b1bb6c81cbf9ea1d04b06e8f39bfdaf847ce55ba235" + }, + { + "path": "figures/bootstrap_figure13/inputs/nature-bpg-palette.json", + "bytes": 478, + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/bootstrap_figure13/inputs/nature-bpg-palette.json", + "source_sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b" + }, + { + "role": "current_canonical_submission_figure_source_or_input", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/bootstrap_figure13/inputs/review_affinose_gifflar_seed_welch.csv", + "source_sha256": "7b14add6ccb6e16d72ab066ae902b77fd15cca4baab69c52015a828c5bc32b35", + "path": "figures/bootstrap_figure13/inputs/review_affinose_gifflar_seed_welch.csv", + "bytes": 1344, + "sha256": "7b14add6ccb6e16d72ab066ae902b77fd15cca4baab69c52015a828c5bc32b35" + }, + { + "role": "current_canonical_submission_figure_source_or_input", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/bootstrap_figure13/inputs/review_affinose_individual_values.csv", + "source_sha256": "8a5ce609298e83a231895587c64a24bbc535a3887feb157ef2b4934db4355243", + "path": "figures/bootstrap_figure13/inputs/review_affinose_individual_values.csv", + "bytes": 15361, + "sha256": "8a5ce609298e83a231895587c64a24bbc535a3887feb157ef2b4934db4355243" + }, + { + "role": "current_canonical_submission_figure_source_or_input", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/bootstrap_figure13/inputs/review_affinose_results.csv", + "source_sha256": "cd5a299c7b3a21ce8bbd0c445e66b938e497658e9ffe602d562517eb1ce103fd", + "path": "figures/bootstrap_figure13/inputs/review_affinose_results.csv", + "bytes": 20846, + "sha256": "cd5a299c7b3a21ce8bbd0c445e66b938e497658e9ffe602d562517eb1ce103fd" + }, + { + "role": "current_canonical_submission_figure_source_or_input", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/bootstrap_figure13/inputs/source_manifest.json", + "source_sha256": "c0957bc56e0694a72289183e7424b49383346e6e55c245b92132c2e77ffc6f9d", + "path": "figures/bootstrap_figure13/inputs/source_manifest.json", + "bytes": 1296, + "sha256": "c0957bc56e0694a72289183e7424b49383346e6e55c245b92132c2e77ffc6f9d" + }, + { + "path": "figures/build_bpe_figure3.py", + "bytes": 6719, + "sha256": "d734b8076500af5edbd2bedd26f29004fb066725a45c273e35b49a1a711d26b1", + "role": "documented_revised_release_file", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/build_bpe_figure3.py", + "source_sha256": "d734b8076500af5edbd2bedd26f29004fb066725a45c273e35b49a1a711d26b1", + "prior_release_sha256": "b262b420db6a5d18712c985b7d27b0d33dbdcbb2e1b3961bdf6c06110ba107ae" + }, + { + "path": "figures/build_corpus_composition_figure.py", + "bytes": 3995, + "sha256": "0ceff115647c4921165805fb25fb5ec5451e8ac1264a9140b3db8591f30f66d2", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/build_corpus_composition_figure.py", + "source_sha256": "0ceff115647c4921165805fb25fb5ec5451e8ac1264a9140b3db8591f30f66d2" + }, + { + "path": "figures/build_grey_seal_figure5.py", + "bytes": 1433, + "sha256": "6053ddca0892325752308544a39da61d427de959f6559ab771902b0c30c7c103", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/build_grey_seal_figure5.py", + "source_sha256": "6053ddca0892325752308544a39da61d427de959f6559ab771902b0c30c7c103" + }, + { + "path": "figures/build_submission_figures.py", + "bytes": 25653, + "sha256": "90fd5e292872323cf90b2312903f8320731808e382a4798cc033379ebd57e568", + "role": "documented_revised_release_file", + "source": "submit_comm/06_code/figures/build_submission_figures.py", + "source_sha256": "69fd3be7f723c7dd229762aa9fba7f2413ed446a8ac7e703ef45e90b3f29223e", + "prior_release_sha256": "69fd3be7f723c7dd229762aa9fba7f2413ed446a8ac7e703ef45e90b3f29223e" + }, + { + "path": "figures/build_supplement_figure1.py", + "bytes": 13463, + "sha256": "f112a826a7b210c2700d810c2a62f91d80c0f2e964b141290f0343f648ce8a81", + "role": "documented_revised_release_file", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/build_supplement_figure1.py", + "source_sha256": "f112a826a7b210c2700d810c2a62f91d80c0f2e964b141290f0343f648ce8a81", + "prior_release_sha256": "bb8cfaa1ec26c36f22b27bb3b19d61dbf98da1fd42e6889e408f4dd9d17eda31" + }, + { + "path": "figures/build_supplement_presentation.py", + "bytes": 6119, + "sha256": "2b33f563431fc64271f84bebfbf99210e057d4f6d8b4b838316c574aa6bf33b8", + "role": "documented_revised_release_file", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/build_supplement_presentation.py", + "source_sha256": "2b33f563431fc64271f84bebfbf99210e057d4f6d8b4b838316c574aa6bf33b8", + "prior_release_sha256": "9086813c19cb26d23e1f7d2a75b1ef80ed29d4d087822fa9e95ac40821a32896" + }, + { + "path": "figures/build_supplementary_figure9.py", + "bytes": 14213, + "sha256": "ba1cbfccd6a8f0e029849e9188ae212cfbf9afbc5174d1099970911821c740a1", + "role": "documented_revised_release_file", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/build_supplementary_figure9.py", + "source_sha256": "ba1cbfccd6a8f0e029849e9188ae212cfbf9afbc5174d1099970911821c740a1", + "prior_release_sha256": "9b604ffc6435ed8d0f20c0d1ba66cb5cfa43ecf503226bf261ce1b4d8a4deae2" + }, + { + "path": "figures/build_taxonomy_figure11.py", + "bytes": 6450, + "sha256": "25e648b564e4db77532947bcd432cf82ef15cd08f5676441a21feffadb9eacfa", + "role": "documented_revised_release_file", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/build_taxonomy_figure11.py", + "source_sha256": "25e648b564e4db77532947bcd432cf82ef15cd08f5676441a21feffadb9eacfa", + "prior_release_sha256": "47a79341f902cb286e2517056ae698c6cc35b0641ffa5a09ad7fde28bc429004" + }, + { + "path": "figures/build_token_length_figure2.py", + "bytes": 3840, + "sha256": "e964dc2d021382d5950008eceef05d001d640de608b0d86ce37701db5de8379e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/build_token_length_figure2.py", + "source_sha256": "e964dc2d021382d5950008eceef05d001d640de608b0d86ce37701db5de8379e" + }, + { + "path": "figures/build_training_coverage_figure6.py", + "bytes": 1065, + "sha256": "de51e3d170a28a319aed0eaf8f0ee5c1a3b95c59146d0360a3e228c947178a78", + "role": "documented_revised_release_file", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/build_training_coverage_figure6.py", + "source_sha256": "de51e3d170a28a319aed0eaf8f0ee5c1a3b95c59146d0360a3e228c947178a78", + "prior_release_sha256": "bc7e195afef8b5fa7c3effabc7253434d6a5b77b428644a909a1da734def4c5c" + }, + { + "role": "current_canonical_submission_figure_source_or_input", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/compact_modalities/README.md", + "source_sha256": "dd7f57d15e39df52dfa3a92a1ba3aab7e85c284fabc926cffbcad7876366b852", + "path": "figures/compact_modalities/README.md", + "bytes": 1551, + "sha256": "dd7f57d15e39df52dfa3a92a1ba3aab7e85c284fabc926cffbcad7876366b852" + }, + { + "role": "current_canonical_submission_figure_source_or_input", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/compact_modalities/builders/build_figures6_7.py", + "source_sha256": "5d2748b98cf4f4ce9b74b71b8617d98c6d52a7cf3b68b567210727659804b363", + "path": "figures/compact_modalities/builders/build_figures6_7.py", + "bytes": 12282, + "sha256": "5d2748b98cf4f4ce9b74b71b8617d98c6d52a7cf3b68b567210727659804b363" + }, + { + "role": "current_canonical_submission_figure_source_or_input", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/compact_modalities/inputs/figure7_original_provenance.json", + "source_sha256": "000b70258a2b599a326903d9792e11b6bb67adf5ed6730b5fddc416df6cbe7d7", + "path": "figures/compact_modalities/inputs/figure7_original_provenance.json", + "bytes": 11920, + "sha256": "000b70258a2b599a326903d9792e11b6bb67adf5ed6730b5fddc416df6cbe7d7" + }, + { + "role": "current_canonical_submission_figure_source_or_input", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/compact_modalities/inputs/review_md_temporal_20x6_core_r3.py", + "source_sha256": "3e96d8092239c2c21f217ad5bae4ee7e07dbe0f7630b213bad468d6b08d3b1c1", + "path": "figures/compact_modalities/inputs/review_md_temporal_20x6_core_r3.py", + "bytes": 48643, + "sha256": "3e96d8092239c2c21f217ad5bae4ee7e07dbe0f7630b213bad468d6b08d3b1c1" + }, + { + "role": "current_canonical_submission_figure_source_or_input", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/compact_modalities/inputs/review_training_modality_coverage.csv", + "source_sha256": "a0096e0a0cd5ac6ade78c6b0ee4b0b0fffc7d2c8969899f26f03134aa63edd8e", + "path": "figures/compact_modalities/inputs/review_training_modality_coverage.csv", + "bytes": 2311, + "sha256": "a0096e0a0cd5ac6ade78c6b0ee4b0b0fffc7d2c8969899f26f03134aa63edd8e" + }, + { + "path": "figures/contrastive_figure12/README.md", + "bytes": 1460, + "sha256": "2373a8e7e2998023e764a4a69dead5f3f3a5cba87743fd8762e31bfb55e03393", + "role": "documented_revised_release_file", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/contrastive_figure12/README.md", + "source_sha256": "2373a8e7e2998023e764a4a69dead5f3f3a5cba87743fd8762e31bfb55e03393", + "prior_release_sha256": "bb948ed57ebbab93875926c3be782996050e8728d3e73b9e6685916b725ee8be" + }, + { + "path": "figures/contrastive_figure12/build_figure12.py", + "bytes": 14603, + "sha256": "ed7446d8ab3b4a0258cc031361b93e1613fab438786a81fc1a775b88f6ae3c67", + "role": "documented_revised_release_file", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/contrastive_figure12/build_figure12.py", + "source_sha256": "ed7446d8ab3b4a0258cc031361b93e1613fab438786a81fc1a775b88f6ae3c67", + "prior_release_sha256": "715df862316031c39bbccc5339d442520863d4f99b9f3a19d8e1e8594db6281f" + }, + { + "path": "figures/contrastive_figure12/inputs/nature-bpg-palette.json", + "bytes": 478, + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/contrastive_figure12/inputs/nature-bpg-palette.json", + "source_sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b" + }, + { + "path": "figures/contrastive_figure12/inputs/review_contrastive_fit_values.csv", + "bytes": 59300, + "sha256": "d732e76c28cd3d741fad99636a8937b464f1efa190d26e7005146e6c88b1feb3", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/contrastive_figure12/inputs/review_contrastive_fit_values.csv", + "source_sha256": "d732e76c28cd3d741fad99636a8937b464f1efa190d26e7005146e6c88b1feb3" + }, + { + "path": "figures/contrastive_figure12/inputs/review_contrastive_paired_summary.csv", + "bytes": 6888, + "sha256": "5bfd6352e60158fe3a09c2a3228a7fffc4926780aa320b5e205ef276db3e4113", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/contrastive_figure12/inputs/review_contrastive_paired_summary.csv", + "source_sha256": "5bfd6352e60158fe3a09c2a3228a7fffc4926780aa320b5e205ef276db3e4113" + }, + { + "path": "figures/contrastive_figure12/inputs/review_contrastive_taxonomy_summary.csv", + "bytes": 1330, + "sha256": "dc90a817bc54ac310a73298f60d03fc30eaccd724f4676eb826301dd85470acc", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/contrastive_figure12/inputs/review_contrastive_taxonomy_summary.csv", + "source_sha256": "dc90a817bc54ac310a73298f60d03fc30eaccd724f4676eb826301dd85470acc" + }, + { + "path": "figures/figure3_inputs/nature-bpg-palette.json", + "bytes": 478, + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/figure3_inputs/nature-bpg-palette.json", + "source_sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b" + }, + { + "path": "figures/figure3_inputs/partition_count_flow.csv", + "bytes": 12640, + "sha256": "bd530abacb61f3d6cffda8d1e7e6112f9261fd0a761e594fddceb5c615b9497b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/figure3_inputs/partition_count_flow.csv", + "source_sha256": "bd530abacb61f3d6cffda8d1e7e6112f9261fd0a761e594fddceb5c615b9497b" + }, + { + "path": "figures/figure3_inputs/review_bpe_vocabulary.json", + "bytes": 138150, + "sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/figure3_inputs/review_bpe_vocabulary.json", + "source_sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b" + }, + { + "path": "figures/figure3_inputs/source_example.json", + "bytes": 3975, + "sha256": "c885944b4ebce9b08c99318ce51c81b7648309c49ba5244ad0345b794429f151", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/figure3_inputs/source_example.json", + "source_sha256": "c885944b4ebce9b08c99318ce51c81b7648309c49ba5244ad0345b794429f151" + }, + { + "path": "figures/final_iar/README.md", + "bytes": 2429, + "sha256": "8bed92feb2c7ff8f8759e4fa287470336e364764ac7b6fead456840b92b5a5db", + "role": "documented_revised_release_file", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/final_iar/README.md", + "source_sha256": "8bed92feb2c7ff8f8759e4fa287470336e364764ac7b6fead456840b92b5a5db", + "prior_release_sha256": "6c1c754acaabc99db19f2953c68d27a9cdc04cb7275ceafff4b1cbe739b2e0ca" + }, + { + "path": "figures/final_iar/build_final_iar_figures.py", + "bytes": 15254, + "sha256": "014b0949823ae8691f09efccab38919400282c33e0fd9b6994b39a6fb4ad78dd", + "role": "documented_revised_release_file", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/final_iar/build_final_iar_figures.py", + "source_sha256": "014b0949823ae8691f09efccab38919400282c33e0fd9b6994b39a6fb4ad78dd", + "prior_release_sha256": "b82b8086fdd223da8ce745ca4ef35a23d32b83a4aaf22bfc8a9ff1446354fe14" + }, + { + "path": "figures/final_iar/inputs/baselines_same_cases.csv", + "bytes": 4968, + "sha256": "259fdc68a39b415c4ec114fbd6872ceaccaf09327d1fde958390071a5a94af2a", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/final_iar/inputs/baselines_same_cases.csv", + "source_sha256": "259fdc68a39b415c4ec114fbd6872ceaccaf09327d1fde958390071a5a94af2a" + }, + { + "path": "figures/final_iar/inputs/final_iar_summary.json", + "bytes": 6162, + "sha256": "d5b7fd634677ea22ea27670649ea30636ef6c98daedc8592cd3f5d7b56beb9c0", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/final_iar/inputs/final_iar_summary.json", + "source_sha256": "d5b7fd634677ea22ea27670649ea30636ef6c98daedc8592cd3f5d7b56beb9c0" + }, + { + "path": "figures/final_iar/inputs/iar_recount_and_wilson_intervals.csv", + "role": "unchanged_preserved_source_or_asset", + "bytes": 5504, + "sha256": "50906ea3964a4a7c9744d224c8ffe2d356738d83bc0f5ead05b04ae6c558a64a", + "source": "submit_comm/06_code/figures/final_iar/inputs/iar_recount_and_wilson_intervals.csv", + "source_sha256": "50906ea3964a4a7c9744d224c8ffe2d356738d83bc0f5ead05b04ae6c558a64a" + }, + { + "path": "figures/final_iar/inputs/nature-bpg-palette.json", + "bytes": 478, + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/final_iar/inputs/nature-bpg-palette.json", + "source_sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b" + }, + { + "path": "figures/final_iar/inputs/run_manifest.json", + "bytes": 3838, + "sha256": "0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/final_iar/inputs/run_manifest.json", + "source_sha256": "0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419" + }, + { + "path": "figures/model_variants_figure10/README.md", + "bytes": 1350, + "sha256": "61136a3d00e0184db8fbf4db47fa480766e7dadbb4f81d278df27b1fd0a0613c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/model_variants_figure10/README.md", + "source_sha256": "61136a3d00e0184db8fbf4db47fa480766e7dadbb4f81d278df27b1fd0a0613c" + }, + { + "path": "figures/model_variants_figure10/build_model_variants_figure10.py", + "bytes": 14237, + "sha256": "d88d4db86071e94d9012f0062696920c2c44a9a15a66e3f152826943234aac0c", + "role": "documented_revised_release_file", + "source": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/figures/model_variants_figure10/build_model_variants_figure10.py", + "source_sha256": "d88d4db86071e94d9012f0062696920c2c44a9a15a66e3f152826943234aac0c", + "prior_release_sha256": "c24f16be487bdef403afd9b6803334a4f5a6739f4716b16ec5290ee037a782bb" + }, + { + "path": "figures/model_variants_figure10/inputs/review_weight_policy_ranks.csv", + "bytes": 3652, + "sha256": "53fdfc11a75e3aaf39b78a9c59d90e206b0726579440d03df2d5cb5708249ebf", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/model_variants_figure10/inputs/review_weight_policy_ranks.csv", + "source_sha256": "53fdfc11a75e3aaf39b78a9c59d90e206b0726579440d03df2d5cb5708249ebf" + }, + { + "path": "figures/model_variants_figure10/inputs/review_weight_policy_sensitivity.csv", + "bytes": 137065, + "sha256": "9b35cb9ab5056c0548eea944f8472906a8cb36e2a7adf5cf3135268c675619b7", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/model_variants_figure10/inputs/review_weight_policy_sensitivity.csv", + "source_sha256": "9b35cb9ab5056c0548eea944f8472906a8cb36e2a7adf5cf3135268c675619b7" + }, + { + "path": "figures/taxonomy_figure11/README.md", + "bytes": 1677, + "sha256": "dd96f6ec2247a918a89873dd031be5f738bcd870056e9b98cb7a1e2c85e158e8", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/taxonomy_figure11/README.md", + "source_sha256": "dd96f6ec2247a918a89873dd031be5f738bcd870056e9b98cb7a1e2c85e158e8" + }, + { + "path": "figures/taxonomy_figure11/nature-bpg-palette.json", + "bytes": 478, + "sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/figures/taxonomy_figure11/nature-bpg-palette.json", + "source_sha256": "a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b" + }, + { + "path": "iar_completion/README.md", + "bytes": 9411, + "sha256": "04670f06e3459608d7a43da767531544421d4da1a6125376edc3939dba951d1f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/README.md", + "source_sha256": "04670f06e3459608d7a43da767531544421d4da1a6125376edc3939dba951d1f" + }, + { + "path": "iar_completion/SHA256SUMS", + "bytes": 5566, + "sha256": "8f7e1027e67222d49eb9e3c12fcdff083005d182583990c08c54b7ac3c11040e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/SHA256SUMS", + "source_sha256": "8f7e1027e67222d49eb9e3c12fcdff083005d182583990c08c54b7ac3c11040e" + }, + { + "path": "iar_completion/assets/linkage_readout.pt", + "bytes": 663845, + "sha256": "a03990a02a1737de05a7fa1739164e84fa6a0a4170ebaa65317a9f3c2f16c0b0", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/assets/linkage_readout.pt", + "source_sha256": "a03990a02a1737de05a7fa1739164e84fa6a0a4170ebaa65317a9f3c2f16c0b0" + }, + { + "path": "iar_completion/check_package.py", + "bytes": 3156, + "sha256": "37514cb79322719772b5c14a5795f00a78f3275f3315d5b3b674ee97127ca953", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/check_package.py", + "source_sha256": "37514cb79322719772b5c14a5795f00a78f3275f3315d5b3b674ee97127ca953" + }, + { + "path": "iar_completion/model_metadata.json", + "bytes": 3132, + "sha256": "bbf016ce2f1a7dc82940be28397cbe8083da7ad0f5f525b1cf7345fd42a5758d", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/model_metadata.json", + "source_sha256": "bbf016ce2f1a7dc82940be28397cbe8083da7ad0f5f525b1cf7345fd42a5758d" + }, + { + "path": "iar_completion/originals/run_all_training.sbatch", + "bytes": 1703, + "sha256": "d406620e3b0c070dff4d6fb6e0c57effce848a9ca5b3dc3de705d65c49ac0961", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/originals/run_all_training.sbatch", + "source_sha256": "d406620e3b0c070dff4d6fb6e0c57effce848a9ca5b3dc3de705d65c49ac0961" + }, + { + "path": "iar_completion/originals/wa3_final_iar_readout.py", + "bytes": 81913, + "sha256": "5acafc45244a0bf9a8489794f8a39f956622cf50594d87eb2eaa04502589fcb5", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/originals/wa3_final_iar_readout.py", + "source_sha256": "5acafc45244a0bf9a8489794f8a39f956622cf50594d87eb2eaa04502589fcb5" + }, + { + "path": "iar_completion/originals/wa3_final_iar_readout_all.py", + "bytes": 82622, + "sha256": "72f8583bf32799ba29c09829d138900c0cbb589f73bd278f389da6fa8a786730", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/originals/wa3_final_iar_readout_all.py", + "source_sha256": "72f8583bf32799ba29c09829d138900c0cbb589f73bd278f389da6fa8a786730" + }, + { + "path": "iar_completion/originals/wa3_linkage_diagnosis.py", + "bytes": 67711, + "sha256": "679499406106611dc2c70240a3c14c9b94311bc03a7811d3dae807c58aef4ef8", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/originals/wa3_linkage_diagnosis.py", + "source_sha256": "679499406106611dc2c70240a3c14c9b94311bc03a7811d3dae807c58aef4ef8" + }, + { + "path": "iar_completion/originals/wa3_linkage_probe.py", + "bytes": 83203, + "sha256": "0ebc629778c854621f485ceb4f5f11090e84ac9171d52270fcc90b6b07d6fe7f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/originals/wa3_linkage_probe.py", + "source_sha256": "0ebc629778c854621f485ceb4f5f11090e84ac9171d52270fcc90b6b07d6fe7f" + }, + { + "path": "iar_completion/originals/wa3_same_test.py", + "bytes": 59535, + "sha256": "0da5f24799afc8978b88c85ea7856deb8c641ebae319760e88539c93a4eb3a86", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/originals/wa3_same_test.py", + "source_sha256": "0da5f24799afc8978b88c85ea7856deb8c641ebae319760e88539c93a4eb3a86" + }, + { + "path": "iar_completion/originals/wa3_typed_strict_test.py", + "bytes": 64136, + "sha256": "c6e9506dbf97752aa248e325e75acf3abf63495054bcac68d48602967379531d", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/originals/wa3_typed_strict_test.py", + "source_sha256": "c6e9506dbf97752aa248e325e75acf3abf63495054bcac68d48602967379531d" + }, + { + "path": "iar_completion/originals/wa3_typed_test.py", + "bytes": 63012, + "sha256": "1341b0051fefaf54b4113d7dda5e408540844d12a9275f9a73607c416f35928d", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/originals/wa3_typed_test.py", + "source_sha256": "1341b0051fefaf54b4113d7dda5e408540844d12a9275f9a73607c416f35928d" + }, + { + "path": "iar_completion/provenance/final_run/baselines_same_cases.csv", + "bytes": 4968, + "sha256": "259fdc68a39b415c4ec114fbd6872ceaccaf09327d1fde958390071a5a94af2a", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/provenance/final_run/baselines_same_cases.csv", + "source_sha256": "259fdc68a39b415c4ec114fbd6872ceaccaf09327d1fde958390071a5a94af2a" + }, + { + "path": "iar_completion/provenance/final_run/final_iar_summary.json", + "bytes": 6162, + "sha256": "d5b7fd634677ea22ea27670649ea30636ef6c98daedc8592cd3f5d7b56beb9c0", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/provenance/final_run/final_iar_summary.json", + "source_sha256": "d5b7fd634677ea22ea27670649ea30636ef6c98daedc8592cd3f5d7b56beb9c0" + }, + { + "path": "iar_completion/provenance/final_run/run_manifest.json", + "bytes": 3838, + "sha256": "0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/provenance/final_run/run_manifest.json", + "source_sha256": "0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419" + }, + { + "path": "iar_completion/provenance/heldout_masking_wa3_final_iar_readout_20260926_run_manifest.json", + "bytes": 3825, + "sha256": "a615d9a889c7a62c19d05a4d07d66d9e743fbfb9e37e4d646c889490d297e492", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/provenance/heldout_masking_wa3_final_iar_readout_20260926_run_manifest.json", + "source_sha256": "a615d9a889c7a62c19d05a4d07d66d9e743fbfb9e37e4d646c889490d297e492" + }, + { + "path": "iar_completion/provenance/heldout_masking_wa3_final_iar_readout_all_20260927_run_manifest.json", + "bytes": 3838, + "sha256": "0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/provenance/heldout_masking_wa3_final_iar_readout_all_20260927_run_manifest.json", + "source_sha256": "0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419" + }, + { + "path": "iar_completion/provenance/heldout_masking_wa3_linkage_diagnosis_20260925_run_manifest.json", + "bytes": 6034, + "sha256": "933ef4d07c380bd4322814acff135e207e00db36197c3dc543214b24cb5d554e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/provenance/heldout_masking_wa3_linkage_diagnosis_20260925_run_manifest.json", + "source_sha256": "933ef4d07c380bd4322814acff135e207e00db36197c3dc543214b24cb5d554e" + }, + { + "path": "iar_completion/provenance/heldout_masking_wa3_same_test_run_manifest.json", + "bytes": 6861, + "sha256": "3f713f4e074cbb068264173a8fb0ec99813665ad1b23fdea507f7389071cb04b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/provenance/heldout_masking_wa3_same_test_run_manifest.json", + "source_sha256": "3f713f4e074cbb068264173a8fb0ec99813665ad1b23fdea507f7389071cb04b" + }, + { + "path": "iar_completion/provenance/heldout_masking_wa3_typed_20260924_run_manifest.json", + "bytes": 3136, + "sha256": "b3cf90dc772f206dc386a3a92d96e43d7a6c1de4147bc7cc501599730d31807f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/provenance/heldout_masking_wa3_typed_20260924_run_manifest.json", + "source_sha256": "b3cf90dc772f206dc386a3a92d96e43d7a6c1de4147bc7cc501599730d31807f" + }, + { + "path": "iar_completion/provenance/heldout_masking_wa3_typed_strict_20260925_run_manifest.json", + "bytes": 3148, + "sha256": "4a13b9faecc329257c2aa08fd6734a8b6c02837d0b230b0f659fd00602832c75", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/provenance/heldout_masking_wa3_typed_strict_20260925_run_manifest.json", + "source_sha256": "4a13b9faecc329257c2aa08fd6734a8b6c02837d0b230b0f659fd00602832c75" + }, + { + "path": "iar_completion/provenance/local_checks.json", + "bytes": 2253, + "sha256": "9c957fe6b76da503c909ac4e3a0d70cf4ea1fd6da34a3aa6573bac4722d4c62d", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/provenance/local_checks.json", + "source_sha256": "9c957fe6b76da503c909ac4e3a0d70cf4ea1fd6da34a3aa6573bac4722d4c62d" + }, + { + "path": "iar_completion/provenance/required_input_hashes.json", + "bytes": 7186, + "sha256": "8af8ed8b6124f26072d6041deb0e6966c13c149926f5bd720b714884cba6801e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/provenance/required_input_hashes.json", + "source_sha256": "8af8ed8b6124f26072d6041deb0e6966c13c149926f5bd720b714884cba6801e" + }, + { + "path": "iar_completion/provenance/source_inventory.json", + "bytes": 20381, + "sha256": "2cb3a3f4e8b1d37dd3ad0234996d546f34ab48231bf69247ffb6ace0651a4a69", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/provenance/source_inventory.json", + "source_sha256": "2cb3a3f4e8b1d37dd3ad0234996d546f34ab48231bf69247ffb6ace0651a4a69" + }, + { + "path": "iar_completion/readout.py", + "bytes": 5515, + "sha256": "42464d76c743a302bae79ced6b09af9657444c6f977535b5de49dcf59a5a8a90", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/readout.py", + "source_sha256": "42464d76c743a302bae79ced6b09af9657444c6f977535b5de49dcf59a5a8a90" + }, + { + "path": "iar_completion/requirements.txt", + "bytes": 188, + "sha256": "9ef74c17ef3ffacde3f0fc862f9844757bacfffa55b3ac9e7e6a6cca43f5843c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/requirements.txt", + "source_sha256": "9ef74c17ef3ffacde3f0fc862f9844757bacfffa55b3ac9e7e6a6cca43f5843c" + }, + { + "path": "iar_completion/runtime_dependencies.json", + "bytes": 7866, + "sha256": "3392850a98f1739e3eec8434f42c26f3fad2d3da9fc815a17dd2790aa3b0ff98", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_dependencies.json", + "source_sha256": "3392850a98f1739e3eec8434f42c26f3fad2d3da9fc815a17dd2790aa3b0ff98" + }, + { + "path": "iar_completion/runtime_snapshot/java/review_A5WurcsArrayTreeAudit.java", + "bytes": 19697, + "sha256": "a791b8f4bbda75317f41afb34d62fe518448f4d5d90db0b852e2b0d0af5e83a6", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/java/review_A5WurcsArrayTreeAudit.java", + "source_sha256": "a791b8f4bbda75317f41afb34d62fe518448f4d5d90db0b852e2b0d0af5e83a6" + }, + { + "path": "iar_completion/runtime_snapshot/java/review_MolWURCS.jar", + "bytes": 4019920, + "sha256": "bc38e44e66daed7ec04f7c7907a13509aac125a8a09c97d9972725ab4278edaf", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/java/review_MolWURCS.jar", + "source_sha256": "bc38e44e66daed7ec04f7c7907a13509aac125a8a09c97d9972725ab4278edaf" + }, + { + "path": "iar_completion/runtime_snapshot/java/review_wurcsframework-1.3.1.jar", + "bytes": 340319, + "sha256": "5449f9276a7b952adf087468c874bb13c7295062cce7d1afb13fdea78ace7f37", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/java/review_wurcsframework-1.3.1.jar", + "source_sha256": "5449f9276a7b952adf087468c874bb13c7295062cce7d1afb13fdea78ace7f37" + }, + { + "path": "iar_completion/runtime_snapshot/project/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py", + "bytes": 27983, + "sha256": "0bc54399362945601bcfd403441fc80968d173200dd0561f57568b2053a94839", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py", + "source_sha256": "0bc54399362945601bcfd403441fc80968d173200dd0561f57568b2053a94839" + }, + { + "path": "iar_completion/runtime_snapshot/project/data/bpe_ambiguity_tokens.json", + "bytes": 11127, + "sha256": "c68cd003370b2dcdb162f848f766e4e62f2653c6c38d205f8cbe53a9aabe2d74", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/data/bpe_ambiguity_tokens.json", + "source_sha256": "c68cd003370b2dcdb162f848f766e4e62f2653c6c38d205f8cbe53a9aabe2d74" + }, + { + "path": "iar_completion/runtime_snapshot/project/data/bpe_vocabulary_clean.json", + "bytes": 118583, + "sha256": "6a572afdf53f1494ab96c896876b824ca7ea749777352606aa9f96bf270ceecc", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/data/bpe_vocabulary_clean.json", + "source_sha256": "6a572afdf53f1494ab96c896876b824ca7ea749777352606aa9f96bf270ceecc" + }, + { + "path": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_ambiguity_tokens.json", + "bytes": 19693, + "sha256": "22d2aad45b978988c9e26bc9400016014ee825cc6207377385a8cd74f3c88f2b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_ambiguity_tokens.json", + "source_sha256": "22d2aad45b978988c9e26bc9400016014ee825cc6207377385a8cd74f3c88f2b" + }, + { + "path": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "bytes": 138150, + "sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json", + "source_sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b" + }, + { + "path": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py", + "bytes": 11405, + "sha256": "10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py", + "source_sha256": "10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04" + }, + { + "path": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py", + "bytes": 6186, + "sha256": "f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py", + "source_sha256": "f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7" + }, + { + "path": "iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py", + "bytes": 14161, + "sha256": "6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py", + "source_sha256": "6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4" + }, + { + "path": "iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/__init__.py", + "bytes": 104, + "sha256": "de8c3237b858b640ee9fbf4dac34864c54b6dac80bc89f346a44c774254289a4", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/__init__.py", + "source_sha256": "de8c3237b858b640ee9fbf4dac34864c54b6dac80bc89f346a44c774254289a4" + }, + { + "path": "iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/glycan_bert.py", + "bytes": 11024, + "sha256": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/glycan_bert.py", + "source_sha256": "b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb" + }, + { + "path": "iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/multimodal_glycan_bert_v3.py", + "bytes": 45141, + "sha256": "8e06c32f4e844c3c66f146fd15a075472808a0720c892d0b9683dfd32f15ef0c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/multimodal_glycan_bert_v3.py", + "source_sha256": "8e06c32f4e844c3c66f146fd15a075472808a0720c892d0b9683dfd32f15ef0c" + }, + { + "path": "iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/training/ipa_bpe_distillation.py", + "bytes": 15975, + "sha256": "f0c8efda7a12942b4c6359792d6ee9417e6a9ec0eb04623ad17b4772430270b5", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/training/ipa_bpe_distillation.py", + "source_sha256": "f0c8efda7a12942b4c6359792d6ee9417e6a9ec0eb04623ad17b4772430270b5" + }, + { + "path": "iar_completion/runtime_snapshot/project/writing/glycangt_heldout_ipa_validation/cluster/heldout_ipa_eval.py", + "bytes": 40107, + "sha256": "8d05a4048e200625694ff9a36f50af89b845fd0d38ba8034a97a710e7ad3dce2", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/project/writing/glycangt_heldout_ipa_validation/cluster/heldout_ipa_eval.py", + "source_sha256": "8d05a4048e200625694ff9a36f50af89b845fd0d38ba8034a97a710e7ad3dce2" + }, + { + "path": "iar_completion/runtime_snapshot/schema/classify.py", + "bytes": 3063, + "sha256": "cfce20d28291c8b5868d35386990037415090202dd823bdfd73038456cc65557", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/schema/classify.py", + "source_sha256": "cfce20d28291c8b5868d35386990037415090202dd823bdfd73038456cc65557" + }, + { + "path": "iar_completion/runtime_snapshot/schema/pipelib.py", + "bytes": 4397, + "sha256": "704ed130bdcce94a7af7ce3e37654705f709b8526f632907ef794451c6ef7f30", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/iar_completion/runtime_snapshot/schema/pipelib.py", + "source_sha256": "704ed130bdcce94a7af7ce3e37654705f709b8526f632907ef794451c6ef7f30" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "iar_inference/README.md", + "bytes": 6489, + "sha256": "be4b51d806c364f6aa88119d17d71674b8313dde8a35c82099ca755a5c46e0b6" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "iar_inference/SHA256SUMS", + "bytes": 915, + "sha256": "1d21cb72f1cc7d5a094a5fb5f0ec11a6072df996f0975cc39569ed9964daee1c" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "iar_inference/config.json", + "bytes": 6987, + "sha256": "043a38744f9fd832181d822ae8481488d954604bf615b2eb05c4c8ad29794325" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "iar_inference/fixtures/case0_pre_sequence_head.npy", + "bytes": 3200, + "sha256": "a212cfbd49ec2f951e942c92caaac63260687a626eca588cb692d86bb1e52198" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "iar_inference/fixtures/case1_pre_sequence_head.npy", + "bytes": 3200, + "sha256": "6ffca438526432a33168a85a0fee1158fd2a9c9f23ecb97f587235f204ae50b3" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "iar_inference/fixtures/rebuilt_two_case_inputs.json", + "bytes": 42915, + "sha256": "60ac0c0fd1b6e0ada2d847d1fccff4f6fe7c085aab3146247dc5d7bfebbabc27" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "iar_inference/fixtures/reference_smoke_report.json", + "bytes": 7532, + "sha256": "60dcdb6262457962da84c7b239c194fac343bd8d27db0e05f15906acb9bf5f4b" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "iar_inference/infer.py", + "bytes": 18264, + "sha256": "9237b349668ea3fb5266f4696169fd958e9f997e5064ede0ab06e41859b17361" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "iar_inference/original_inference_helpers.py", + "bytes": 4608, + "sha256": "87fa484e1f6105fa476dff4cf8c7e6aea71a2aac537796131a4858632f54b906" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "iar_inference/preparation_validation.json", + "bytes": 718, + "sha256": "4e36f9237dc494eb47898ff3ab9a5b1a483f5004aa933a5294af794edd0757ce" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "iar_inference/requirements.txt", + "bytes": 78, + "sha256": "16e89b25a13eabc8586ba2a8ec32890ecf321f652b03f7548c63112d13cb2e62" + }, + { + "path": "notebooks/BERTose_workbench.ipynb", + "bytes": 29886, + "sha256": "144e09f44c6cc2c09df0fafefb2c3975c590ae684756500fae9b6a589767574c", + "role": "workbench_interface_examples_or_documentation" + }, + { + "path": "provenance/WA3_checkpoint_index.json", + "bytes": 1044, + "sha256": "a4b66d2ed429ad6516646256a84173082b2fca6b779baa6e4ff93586a81a5c2b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/WA3_checkpoint_index.json", + "source_sha256": "a4b66d2ed429ad6516646256a84173082b2fca6b779baa6e4ff93586a81a5c2b" + }, + { + "path": "provenance/WA3_final_receipt.json", + "bytes": 86511, + "sha256": "b8b05510e97f6b94ca5e0d1465eba034724d7ddcc405aa405db09c4c29fc768b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/WA3_final_receipt.json", + "source_sha256": "b8b05510e97f6b94ca5e0d1465eba034724d7ddcc405aa405db09c4c29fc768b" + }, + { + "path": "provenance/affinose_arms_on_test_20260909.json", + "bytes": 6707, + "sha256": "670cfcbcfe89e0729bb75f122cff8c7100c24d39ef775c69421d4bb820654056", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_arms_on_test_20260909.json", + "source_sha256": "670cfcbcfe89e0729bb75f122cff8c7100c24d39ef775c69421d4bb820654056" + }, + { + "path": "provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/receipt.json", + "bytes": 6137, + "sha256": "a291a8e8f2b77c7955b5346aa52289afc520a0b5181d62eb0dfa2c096bd6bbb8", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/receipt.json", + "source_sha256": "a291a8e8f2b77c7955b5346aa52289afc520a0b5181d62eb0dfa2c096bd6bbb8" + }, + { + "path": "provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/results.json", + "bytes": 12535, + "sha256": "fdd520b70e38d0e6bc112118adad89cf209278614645b47e219341736bf99599", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/results.json", + "source_sha256": "fdd520b70e38d0e6bc112118adad89cf209278614645b47e219341736bf99599" + }, + { + "path": "provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/receipt.json", + "bytes": 6135, + "sha256": "29b68fb30127700fa55942d5cc4c237f8bf15c2d0c883192b62698d811e71c51", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/receipt.json", + "source_sha256": "29b68fb30127700fa55942d5cc4c237f8bf15c2d0c883192b62698d811e71c51" + }, + { + "path": "provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/results.json", + "bytes": 11117, + "sha256": "54918a535b86b01590bab11c78ff4c354c106ca78a384446eb79038b0df666af", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/results.json", + "source_sha256": "54918a535b86b01590bab11c78ff4c354c106ca78a384446eb79038b0df666af" + }, + { + "path": "provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/receipt.json", + "bytes": 6153, + "sha256": "a380534df6f877c212a2c7dbce577511e282537bbff9ad5d7ac3e186f1cc5633", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/receipt.json", + "source_sha256": "a380534df6f877c212a2c7dbce577511e282537bbff9ad5d7ac3e186f1cc5633" + }, + { + "path": "provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/results.json", + "bytes": 11113, + "sha256": "a732a56ddc81fc41b02dde8f56d852929ec8eefa12524ed9410a09361f267544", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/results.json", + "source_sha256": "a732a56ddc81fc41b02dde8f56d852929ec8eefa12524ed9410a09361f267544" + }, + { + "path": "provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/receipt.json", + "bytes": 6153, + "sha256": "9344a727416db1368c45a0ddad962a12130e10f03944a5142874f72ba5311297", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/receipt.json", + "source_sha256": "9344a727416db1368c45a0ddad962a12130e10f03944a5142874f72ba5311297" + }, + { + "path": "provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/results.json", + "bytes": 12031, + "sha256": "a530b2fac81a72d99674906253897a1e3eecca4ee17e83c3a27ed409a3411877", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/results.json", + "source_sha256": "a530b2fac81a72d99674906253897a1e3eecca4ee17e83c3a27ed409a3411877" + }, + { + "path": "provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/receipt.json", + "bytes": 6141, + "sha256": "068bb72cc2fc0231f3a9f729ac78f1a6340a7088ea86a60449ebe63dcfbd794d", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/receipt.json", + "source_sha256": "068bb72cc2fc0231f3a9f729ac78f1a6340a7088ea86a60449ebe63dcfbd794d" + }, + { + "path": "provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/results.json", + "bytes": 9275, + "sha256": "a21307bb48db62270792f990541bac1c2728feb34063f4b2009e2f6c7d8a7e4c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/results.json", + "source_sha256": "a21307bb48db62270792f990541bac1c2728feb34063f4b2009e2f6c7d8a7e4c" + }, + { + "path": "provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/receipt.json", + "bytes": 6141, + "sha256": "3044b56619b1bb83063070624b02bfaa64c952c1da76a80051bb62bb26098395", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/receipt.json", + "source_sha256": "3044b56619b1bb83063070624b02bfaa64c952c1da76a80051bb62bb26098395" + }, + { + "path": "provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/results.json", + "bytes": 10197, + "sha256": "42ffeb2f81acbae80df3284300d0213b52918b90d3b186dbbd1f074800af75f0", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/results.json", + "source_sha256": "42ffeb2f81acbae80df3284300d0213b52918b90d3b186dbbd1f074800af75f0" + }, + { + "path": "provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/receipt.json", + "bytes": 6147, + "sha256": "07a919272c928f9630f4d70a73cf1aa91a327e2c9597cf582814c5386b6f24cc", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/receipt.json", + "source_sha256": "07a919272c928f9630f4d70a73cf1aa91a327e2c9597cf582814c5386b6f24cc" + }, + { + "path": "provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/results.json", + "bytes": 9726, + "sha256": "ef5a0b42f15f23a473d46198bd39dc17176add75a1bf76cd708d5b595d552b6e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/results.json", + "source_sha256": "ef5a0b42f15f23a473d46198bd39dc17176add75a1bf76cd708d5b595d552b6e" + }, + { + "path": "provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/receipt.json", + "bytes": 6142, + "sha256": "c3e3028a05cf7f5b58883d9485bcd7a7e0ba5d05265f4503b8bad09e307c1480", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/receipt.json", + "source_sha256": "c3e3028a05cf7f5b58883d9485bcd7a7e0ba5d05265f4503b8bad09e307c1480" + }, + { + "path": "provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/results.json", + "bytes": 15759, + "sha256": "f62ddffaffae54f91e4f921fa235741df4023e94b47c2c90f3e158b7c4cd9858", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/results.json", + "source_sha256": "f62ddffaffae54f91e4f921fa235741df4023e94b47c2c90f3e158b7c4cd9858" + }, + { + "path": "provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/receipt.json", + "bytes": 6142, + "sha256": "6f5cbc9e19a45b4e9c8d33e7f4a82e41ef610b5040175852d3c05ea172995d4f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/receipt.json", + "source_sha256": "6f5cbc9e19a45b4e9c8d33e7f4a82e41ef610b5040175852d3c05ea172995d4f" + }, + { + "path": "provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/results.json", + "bytes": 11131, + "sha256": "9f0a6dc5b89f58603fb368e754da90001a987016ed4d9ab425420703aeb44d9e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/results.json", + "source_sha256": "9f0a6dc5b89f58603fb368e754da90001a987016ed4d9ab425420703aeb44d9e" + }, + { + "path": "provenance/affinose_input_hashes_moA_glycan_20260908.json", + "bytes": 1693, + "sha256": "f4fb099a7dbe229450d2ca337d213555203dc69dd67f1e4b2cca227baca3d701", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_input_hashes_moA_glycan_20260908.json", + "source_sha256": "f4fb099a7dbe229450d2ca337d213555203dc69dd67f1e4b2cca227baca3d701" + }, + { + "path": "provenance/affinose_input_hashes_moB_protein_20260908.json", + "bytes": 1694, + "sha256": "00c53175abc949336bf495c796dc9c779af2109227bc6f351433356129d85663", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_input_hashes_moB_protein_20260908.json", + "source_sha256": "00c53175abc949336bf495c796dc9c779af2109227bc6f351433356129d85663" + }, + { + "path": "provenance/affinose_input_hashes_moC_doubly_20260908.json", + "bytes": 1693, + "sha256": "3d3c6fd5c39fe2f1ce37ce5ba47b842fa193b716c08227678d68cdcc7e996c4e", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_input_hashes_moC_doubly_20260908.json", + "source_sha256": "3d3c6fd5c39fe2f1ce37ce5ba47b842fa193b716c08227678d68cdcc7e996c4e" + }, + { + "path": "provenance/affinose_recipe.json", + "bytes": 26612, + "sha256": "ebf5e35b60640944bf3d03955f10da2c40cd5075a85bf0e3a4c6210f97ed85a6", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/affinose_recipe.json", + "source_sha256": "ebf5e35b60640944bf3d03955f10da2c40cd5075a85bf0e3a4c6210f97ed85a6" + }, + { + "path": "provenance/artifact_locations.tsv", + "bytes": 5715, + "sha256": "9c14d2981a11bef92ef230e9848f9876d941b290f2c70848e739a2795bb6feea", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/artifact_locations.tsv", + "source_sha256": "9c14d2981a11bef92ef230e9848f9876d941b290f2c70848e739a2795bb6feea" + }, + { + "path": "provenance/candidate_affinose_input_hashes_moA_glycan_20260908.json", + "bytes": 1919, + "sha256": "4dfa51299e99a23add6cdfe5380403d4504a207e2b6522ea86cc50ba1cd2cb74", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/candidate_affinose_input_hashes_moA_glycan_20260908.json", + "source_sha256": "4dfa51299e99a23add6cdfe5380403d4504a207e2b6522ea86cc50ba1cd2cb74" + }, + { + "path": "provenance/candidate_affinose_input_hashes_moB_protein_20260908.json", + "bytes": 1920, + "sha256": "48768c773a262864e7a5104732d1e37971be2581058dec7e6f8778d05483965c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/candidate_affinose_input_hashes_moB_protein_20260908.json", + "source_sha256": "48768c773a262864e7a5104732d1e37971be2581058dec7e6f8778d05483965c" + }, + { + "path": "provenance/candidate_affinose_input_hashes_moC_doubly_20260908.json", + "bytes": 1919, + "sha256": "efbfbea3df98ff7b20dadae530aaf5e3cdadc7216a60a97495b4344e39ef1934", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/candidate_affinose_input_hashes_moC_doubly_20260908.json", + "source_sha256": "efbfbea3df98ff7b20dadae530aaf5e3cdadc7216a60a97495b4344e39ef1934" + }, + { + "path": "provenance/candidate_portability.patch", + "bytes": 1899, + "sha256": "2ce6f4a60fdb0bc87d69e270bd724fbccbfae6239579f3c17c0c4d8de05b3d94", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/candidate_portability.patch", + "source_sha256": "2ce6f4a60fdb0bc87d69e270bd724fbccbfae6239579f3c17c0c4d8de05b3d94" + }, + { + "path": "provenance/copied_sources.json", + "bytes": 243282, + "sha256": "16bed602b94a1a3010f07c2feca3e219035160ab5cc05f4ab202faf57ae1c63c", + "role": "portable_release_file" + }, + { + "path": "provenance/execution_summary.json", + "bytes": 2153, + "sha256": "967d38d95702e0863eec468dac9de27fee7da60312fc53ba0f95c5b88f381595", + "role": "portable_release_file" + }, + { + "path": "provenance/local_checks.json", + "bytes": 3339, + "sha256": "f4cd53bb88fb383677e0f85417662c01a351a954db6df93b6162d0aadda495b0", + "role": "portable_release_file" + }, + { + "path": "provenance/local_test_environment.json", + "bytes": 737, + "sha256": "fc689486dc297277e32480d52d9abb69549520c085101bd406ef3ed6c2fad86b", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/local_test_environment.json", + "source_sha256": "fc689486dc297277e32480d52d9abb69549520c085101bd406ef3ed6c2fad86b" + }, + { + "path": "provenance/moconf_cells.tsv", + "bytes": 799, + "sha256": "7202cdde019556a7babb3459ae04da8ab5ecb5edbdfde2b74c4a675ed1c9ff43", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/moconf_cells.tsv", + "source_sha256": "7202cdde019556a7babb3459ae04da8ab5ecb5edbdfde2b74c4a675ed1c9ff43" + }, + { + "path": "provenance/mofull_cells.tsv", + "bytes": 1449, + "sha256": "e6f1be53ab77ad80ea274f80bd11369bb4efe3836b6119c58283ec12af224752", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/mofull_cells.tsv", + "source_sha256": "e6f1be53ab77ad80ea274f80bd11369bb4efe3836b6119c58283ec12af224752" + }, + { + "path": "provenance/motif_cells.tsv", + "bytes": 1121, + "sha256": "67b5ade1b857e789173128939c6baa4687354bb1d640d8fd3b40332b5956ec72", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/motif_cells.tsv", + "source_sha256": "67b5ade1b857e789173128939c6baa4687354bb1d640d8fd3b40332b5956ec72" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "provenance/portable_execution_20260930/binding_portable_report.json", + "bytes": 21435, + "sha256": "fb75dee7521e1ca381d9b1fd5c7054bb7ba6389dfde61259362ae4d082ba9a7e" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "provenance/portable_execution_20260930/code_snapshot_manifest.json", + "bytes": 116195, + "sha256": "24f61f4291610df9d7ad89a0cc8afb6a472e41b2dab3ef1ca73d852076c073da" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "provenance/portable_execution_20260930/execution_receipt.json", + "bytes": 2390, + "sha256": "07fee191f75e12c5becd19b3dbe627ff3a9dbcfcdeb0aea770126483bfd0cebb" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "provenance/portable_execution_20260930/iar_portable_report.json", + "bytes": 17222, + "sha256": "b51a0f8f5c7b5682e4c432587236bce9daa74e6f2389ccba89b34bcc8c0042cd" + }, + { + "path": "provenance/score_arms_on_test_historical.py", + "bytes": 6328, + "sha256": "dc42f4cdd76cc2c49fedfe6b8b8ef40b5915ee70803c9cec5ec0b0573256f815", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/score_arms_on_test_historical.py", + "source_sha256": "dc42f4cdd76cc2c49fedfe6b8b8ef40b5915ee70803c9cec5ec0b0573256f815" + }, + { + "path": "provenance/sequence_variants.json", + "bytes": 1737, + "sha256": "e2bad73cbdcc16a2a44f2d6e8230bc55b5a8a484d7553af29e379a12f541bba9", + "role": "portable_release_file" + }, + { + "path": "provenance/submission_README.md", + "bytes": 13654, + "sha256": "6fc928f84838ac82af228d744fadb8be670d631afd5ca84ff84d0847b140d8fd", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/README.md", + "source_sha256": "6fc928f84838ac82af228d744fadb8be670d631afd5ca84ff84d0847b140d8fd" + }, + { + "path": "provenance/submission_SHA256SUMS", + "bytes": 76063, + "sha256": "cf0e33d454260a8fa949a9c5fea60bac6291b84c3db573e48fb1735f3a2a2772", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/SHA256SUMS", + "source_sha256": "cf0e33d454260a8fa949a9c5fea60bac6291b84c3db573e48fb1735f3a2a2772" + }, + { + "path": "provenance/submission_code_inventory.tsv", + "bytes": 193630, + "sha256": "80aae521be2bdc5ac2337ea733f7a8ade028f788499d7d44ff1b6e7389639c8d", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/code_inventory.tsv", + "source_sha256": "80aae521be2bdc5ac2337ea733f7a8ade028f788499d7d44ff1b6e7389639c8d" + }, + { + "path": "provenance/submission_requirements.txt", + "bytes": 277, + "sha256": "48da67d3a47fb1155389fccdd9022b825b2eeefb60e28260633ec4c2fe00a33f", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/requirements.txt", + "source_sha256": "48da67d3a47fb1155389fccdd9022b825b2eeefb60e28260633ec4c2fe00a33f" + }, + { + "path": "provenance/third_party_archives.json", + "bytes": 10773, + "sha256": "05832b5f811b977c09418c79545d8e38c689973b4a91e36a96e20389ac3c0e2c", + "role": "portable_release_file" + }, + { + "path": "provenance/training_v8_before_resume_load_fix.py", + "bytes": 42151, + "sha256": "b7cb8a39e167f2cc9e35476dcdcad56320b02c1898d13db3236a41bbb2ed4852", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/training_v8_before_resume_load_fix.py", + "source_sha256": "b7cb8a39e167f2cc9e35476dcdcad56320b02c1898d13db3236a41bbb2ed4852" + }, + { + "path": "provenance/wa3_config.json", + "bytes": 1321, + "sha256": "be8f4ae30ae2fbd8f91de0e5db98de3044213e24587717775c31df37e2272dbb", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/provenance/wa3_config.json", + "source_sha256": "be8f4ae30ae2fbd8f91de0e5db98de3044213e24587717775c31df37e2272dbb" + }, + { + "path": "provenance/workbench_assets.json", + "bytes": 9213, + "sha256": "881354fe1ef1eb6ae73565a42da2b175a0426f41feb6b3a1d8897c4e048fa012", + "role": "workbench_interface_examples_or_documentation" + }, + { + "path": "requirements-analysis.txt", + "bytes": 88, + "sha256": "fcbf7a31abd2f468c589feca4111a1d5b851e587046aed53ca0196deb3f39e74", + "role": "portable_release_file" + }, + { + "path": "requirements-workbench.txt", + "bytes": 88, + "sha256": "2c69dc6c9b8643afe0e9fbd5f2f355662dc55f2b555f2b096b582065baa2db74", + "role": "workbench_interface_examples_or_documentation" + }, + { + "path": "requirements.txt", + "bytes": 103, + "sha256": "1c89cbdda9d2c1fb7a3df6692f93eb2765f59f64dd3392b8799697f3238a8867", + "role": "portable_release_file" + }, + { + "path": "score_predictions.py", + "bytes": 1744, + "sha256": "428d6c855cd9a6a1988581f9d71bd85a130ceb7b803e6190b3590f5e40ef426c", + "role": "unchanged_preserved_source_or_asset", + "source": "submit_comm/06_code/score_predictions.py", + "source_sha256": "428d6c855cd9a6a1988581f9d71bd85a130ceb7b803e6190b3590f5e40ef426c" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/README.md", + "bytes": 4911, + "sha256": "1a8459fea8d7d35948bd4315d840a0ec6f60e4fcb4823e18d903294f2c1c20d5" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/SHA256SUMS", + "bytes": 5343, + "sha256": "d1c48e285928b5b4e2b84f7748bfeb3360f0c98c8d66ac1651927f849e5384f6" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/evidence/review_md_parent_temporal_20x6_v2_summary.json", + "bytes": 9435, + "sha256": "39c6691d762b1ac2d0bed3464b1ed31e4fbe72b18e218ba4a553f3f94702a9e2" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/extension_checks.json", + "bytes": 712, + "sha256": "823f089df162283c6ed2077d7c8af1cfc49d1f814e58a029b64c2c18a0a075d8" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/independent_qa_20260930.json", + "bytes": 1534, + "sha256": "2e644b90c80388a169da946a22557e0d6d0f37876334fa5d450f27fce41aebe1" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/input_closure_20260930.json", + "bytes": 8323, + "sha256": "1e15e8a160c1af8e31c490fde35e9177fce583d98157751a852846d1390cb43a" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/prior_snapshot_20260929.json", + "bytes": 19038, + "sha256": "0f43a293b4b5edaa76da4c4073a7a221582b064c41375a7de982b09dbfe05642" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/training/__init__.py", + "bytes": 207, + "sha256": "0d967082a8225a1eab98315c2fe7916eff0e863ec04287a43351b757e08f5070" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/training/a5_glycam_chemistry.py", + "bytes": 3690, + "sha256": "daae9ee3f3c286e36c7fd7ede37f889eca2a6f9956755717a5bf714645ffa4bb" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/training/a5_static_alignment.py", + "bytes": 26312, + "sha256": "ee6e3d06fce7316b3622f4ad92d900608eb91af09f3872d0200c1b246158605f" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/training/a5_topology.py", + "bytes": 6186, + "sha256": "f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/training/masking.py", + "bytes": 18878, + "sha256": "d08683664ffe28661becd6bdfd5b6b8169bd430800c3e844218969548d3498a2" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/training/multimodal_dataset.py", + "bytes": 27321, + "sha256": "ca2be55ece9c15271713f553f619bdd42cf4292c6c9d86e19037db9a73168e28" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/training/multimodal_masking.py", + "bytes": 15430, + "sha256": "21ae467f964ea98486ed7efa3f7887194e05c326e4fa92f124e8d5f5570f030c" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/configs/review_md_temporal_20x6_v1_20260801.yaml", + "bytes": 2191, + "sha256": "2e3b0a72767fa5e7ca950ada7923faac63e58db53f6969a030e01938a81254ad" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/configs/review_md_temporal_20x9_v1_20260731.yaml", + "bytes": 3467, + "sha256": "4d668c45f1f17f12b1d4af022d2e1849cec815e24664e8ad9183569fae7f764f" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/audit_review_md_charge_corrected_exact_roster_20260802_r1.py", + "bytes": 8986, + "sha256": "ddabd88756774a9c75ae93709fafb6b7c2d3cdf0c9b7d5b66fd801d8e2388c76" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/audit_review_md_parent_feature_package.py", + "bytes": 13331, + "sha256": "131499356bc91f07ebd1f2f40166c9f756d7e64b49a66ee69d1efa0fcecf9843" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/audit_review_md_temporal_20x6_r2.py", + "bytes": 12371, + "sha256": "dacc54f37dc4c816fdf2fb801b13eb239cf42444883ace1dfed2a92b6fc798da" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/build_review_md_parent_feature_package.py", + "bytes": 38195, + "sha256": "2df5009bdcefb49ed7742391d7d6f5f73cf1574fc7d17cd46bd2ad3098331a06" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/build_review_md_temporal_20x6_r2.py", + "bytes": 21090, + "sha256": "4bad11cfd69c150f2c50b92856a6ab21641772baa2236b45ca505f5637ea5a0b" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/build_review_md_temporal_20x9.py", + "bytes": 29546, + "sha256": "2743e322eccd5c0217b44e3eb6c4dc242d35db7eacf91f235d23f7a846b70dbb" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/freeze_review_md_temporal_feature_layer.py", + "bytes": 9384, + "sha256": "35108afde036b0f1fbf888014a5afebc45568b45dbdea85a5913c2dba8938127" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/merge_review_md_charge_corrected_temporal_20x9_r1.py", + "bytes": 9654, + "sha256": "102466ed3bf04ef2cf2ab53b04fdbb9c6e6ea1d16061194f97eed5bedc4e2e2d" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/prepare_review_md_charge_corrected_feature_overlay_r1.py", + "bytes": 7950, + "sha256": "47c9d9a448325e59742e30a444b636e888df18cf88f010fdad09e0393f5bf9c9" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_all20_charge_corrected_run_state_r6.py", + "bytes": 90312, + "sha256": "80c1e2cbf2f2bbf7a19564a7e88d65e2d9dd4a190c33e6b5405dd107d6e553fe" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_wiley_pca_corpus.py", + "bytes": 34251, + "sha256": "dfc5670ad8a146af48abfb381198bacd017ad7dbac4a081bc204d5dbf61cb1cb" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_wiley_pca_pilot.py", + "bytes": 66350, + "sha256": "b9f20eef44858866d95338a6f5dedebf253d8e827890d10806ce7d0045b14594" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_wiley_structural_extension.py", + "bytes": 49477, + "sha256": "39f9ddfd0e91c3afc1c3b6085689f8bed7bf585446128be634ab97369a79869b" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_wiley_torsion_pca_corpus.py", + "bytes": 31670, + "sha256": "163c93827dc18dd281d8e5a6ceb8b106a02b00e3366442ee09fd0e1b477262e8" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/run_review_md_charge_corrected_feature_stage_20260802_r1.sh", + "bytes": 3177, + "sha256": "3cb1b2ea38fef04ba9ba2b01ef1944f69a48fb5dcfd4d8011684de9ddaa10ca7" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/slurm_freeze_review_md_temporal_feature_layer_20260801.sh", + "bytes": 2164, + "sha256": "21ffbc09d34291adc6d2a3535ef142014d1d31ea8a28002fee23af29b88f415a" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/glycam_structure/scripts/slurm_review_md_parent_feature_package_20260731.sh", + "bytes": 2057, + "sha256": "bf3ef76494d936044615b59e0941f3b6fb35a935d6743abb5c035995b61a63d5" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/multimodal/outputs/p1_a5_static_role_successor_cascade_20260720_r1/review_a5_static_role_successor_cascade_receipt.json", + "bytes": 1861, + "sha256": "b8e953947b4ac55e1cd9d509c33e1bddf211f046b9124ddc175166a1a763b31a" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_r2.json", + "bytes": 868036, + "sha256": "ffbbe2126eb6131ab8b64ab5809b79b29e5534785cbe6fcfe1bba04b93e06050" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_receipt_r2.json", + "bytes": 1753, + "sha256": "6bba07e7da9284af46b97f80c25c7e1dc332facf452e0fd2140a975b7c1e496b" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/multimodal/runtime/a5_static_v2_20260721_r7/review_a5_static_graph_materializer_r7.py", + "bytes": 93845, + "sha256": "da8d6dab478ace650fa5af3e99c72dedaf65a6cbc2bf62373fa2082bef748cea" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/project/writing/review/multimodal/scripts/build_review_a5_static_graph_v2_20260721_r7.py", + "bytes": 55927, + "sha256": "12fd869f52759168e0f3ff3243ac7dcdb36c0b067d83e24931c185c67fc80c26" + }, + { + "role": "revised_release_adapter_documentation_or_evidence", + "path": "structure_md_processing/source_manifest.json", + "bytes": 34441, + "sha256": "8da3a60c3d205f9a56f3a97842f3c05e647d3f89ad56c91d431eb75ede49c9ff" + }, + { + "path": "test_bertose_workbench.py", + "bytes": 15254, + "sha256": "28c3941d1ae7ebc86296a4ac7117c27a1d4bcaa0ec6c56ea8cfd18fade1bb7a2", + "role": "workbench_interface_examples_or_documentation" + } + ], + "scope": "Usability release; inherited model and inference implementations unchanged" +} diff --git a/releases/2026-10-02/provenance/score_arms_on_test_historical.py b/releases/2026-10-02/provenance/score_arms_on_test_historical.py new file mode 100644 index 0000000000000000000000000000000000000000..85c80de68c8a0128d5815811b4666f11a0129e59 --- /dev/null +++ b/releases/2026-10-02/provenance/score_arms_on_test_historical.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python3 +"""Score every improvement arm on the REAL held-out TEST strata. Inference only. + +⛔ THIS OPENS THE TEST SET. Owner-authorised 2026-09-09. Recorded here because it is irreversible: +until now every arm pointed --test_stratum at the VALIDATION stratum, so no held-out row had ever +been loaded by any of them. + +⚠THE CAVEAT THAT MUST TRAVEL WITH EVERY NUMBER THIS PRODUCES. These arms were SELECTED on +validation -- we chose motif-only for glycan-cold and size+motif for doubly-cold because they won +there. A test score for a validation-selected configuration is an honest estimate of that +configuration, but it is NOT a pre-registered result, and it must never be reported as one. It is +reported as: "the configuration chosen on validation scores X on test." + +No training happens here. Each arm's own best_model.pt is loaded and run once over its regime's +test stratum. Equal-assay macro Spearman with a FIXED, DATA-ONLY eligibility rule (>=5 rows, +>=2 distinct targets), identical for every model, so nobody is excused from an assay they failed. +""" +import glob, json, os, sys +import numpy as np, pandas as pd, torch +from scipy.stats import spearmanr +from torch.utils.data import DataLoader + +B = "/work/ratul1/supantha/Bertint" +TEST = {"val_glycan_cold": ("test_glycan_cold", 37295), + "val_protein_cold": ("test_protein_cold", 38539), + "val_doubly_cold": ("test_doubly_cold", 3691)} +MIN_ROWS = 5 +if not torch.cuda.is_available(): + raise SystemExit("refusing CPU: the trainer evaluates under CUDA AMP") + + +def tree_for(a): + m, s, c = int(a.get("motif_additive_dim", 0)), int(a.get("size_additive_k", 0)), int(a.get("motif_concat_dim", 0)) + if c > 0: return "model_moconcat_20260908" + if m > 0 and s > 0: return "model_both_20260908" + if m > 0: return "model_motif_20260908" + if s > 0: return "model_sizeadd_20260908" + return "model_protected_20260831" + + +def macro(pred, y, assay, keep): + v = [] + for k in keep: + s = assay == k + r = 0.0 if len(np.unique(pred[s])) < 2 else spearmanr(pred[s], y[s])[0] + v.append(0.0 if not np.isfinite(r) else float(r)) + return float(np.mean(v)), len(v) + + +cells = [] +for d in sorted(glob.glob(os.path.join(B, "checkpoints", "affinose_*_2026090*_*"))): + rp, bm = os.path.join(d, "receipt.json"), os.path.join(d, "best_model.pt") + if not (os.path.exists(rp) and os.path.exists(bm)): + continue + a = json.load(open(rp)).get("args", {}) + vs = a.get("val_stratum") + if vs in TEST and a.get("test_stratum") == vs: # only arms that never opened test + cells.append((d, a)) +print("arms to score on TEST: %d" % len(cells), flush=True) + +out = {} +for d, a in cells: + tree = tree_for(a) + if tree not in sys.modules.get("_loaded", {}): + pass + sys.path.insert(0, os.path.join(B, tree)) + for mod in ("bertint_v8", "dataset_v8"): + sys.modules.pop(mod, None) + os.chdir(os.path.join(B, tree)) + import importlib + bv = importlib.import_module("bertint_v8") + dv = importlib.import_module("dataset_v8") + + ts, nrows = TEST[a["val_stratum"]] + cfg, emb, lay = bv.load_bertose_encoder(a["bertose_checkpoint"], freeze_layers=int(a.get("freeze_layers", 4))) + kw = dict(seq_embeddings=emb, seq_layers=lay, glycan_dim=cfg.seq_hidden_size, + protein_dim=int(a.get("protein_dim", 960)), shared_dim=int(a.get("shared_dim", 512)), + num_cross_layers=int(a.get("num_cross_layers", 2)), num_heads=int(a.get("num_heads", 8)), + swe_slices=int(a.get("swe_slices", 512)), dropout=float(a.get("dropout", 0.1)), + pooling_mode=a["pooling_mode"], interaction_mode=a["interaction_mode"], + glycan_size_channel=bool(a.get("glycan_size_channel", False))) + for k in ("motif_additive_dim", "size_additive_k", "motif_concat_dim"): + if int(a.get(k, 0)) > 0: + kw[k] = int(a[k]) + model = bv.BertintV8(**kw).cuda() + sd = torch.load(os.path.join(d, "best_model.pt"), map_location="cpu", weights_only=False) + sd = sd.get("model_state_dict", sd) + miss, unexp = model.load_state_dict(sd, strict=False) + if unexp or [k for k in miss if "position_ids" not in k]: + raise SystemExit("FATAL %s: unexpected=%d missing=%s" % (d, len(unexp), [k for k in miss][:4])) + model.eval() + + ds = dv.BertintV8Dataset(a["csv_path"], None, "test", a["protein_emb_path"], a["vocab_path"], + roles_path=a["roles_tsv"], stratum=ts, features_dir=a["features_dir"], + expected_rows=nrows, max_protein_length=int(a.get("max_protein_length", 1024))) + rec = ds.records.reset_index(drop=True) + assay = rec["exp_id"].astype(str).to_numpy() + y = rec[ds.target_col].to_numpy(dtype=np.float64) + g = pd.DataFrame({"a": assay, "y": y}).groupby("a")["y"] + keep = sorted(g.size()[(g.size() >= MIN_ROWS) & (g.nunique() >= 2)].index) + + dl = DataLoader(ds, batch_size=64, shuffle=False, collate_fn=dv.collate_fn, num_workers=4) + preds = [] + from torch.cuda.amp import autocast + with torch.no_grad(): + for b in dl: + fk = dict(token_ids=b["token_ids"].cuda(), attention_mask=b["attention_mask"].cuda(), + branch_depths=b["branch_depths"].cuda(), linkage_types=b["linkage_types"].cuda(), + protein_emb=b["protein_emb"].cuda(), protein_mask=b["protein_mask"].cuda()) + if "motif_features" in b: + fk["motif_features"] = b["motif_features"].cuda() + with autocast(enabled=True): + preds.append(model(**fk).float().cpu().numpy().ravel()) + p = np.concatenate(preds).astype(np.float64) + mac, n = macro(p, y, assay, keep) + pool = float(spearmanr(p, y)[0]) + cid = a.get("cell_id", os.path.basename(d)) + out[cid] = {"stratum": ts, "seed": int(a.get("seed", -1)), "test_macro": mac, + "test_pooled": pool, "assays": n, "rows": int(len(y)), "dir": os.path.basename(d)} + print(" %-24s %-18s seed=%s TEST macro=%.4f pooled=%.4f (%d assays, %d rows)" + % (cid, ts, a.get("seed"), mac, pool, n, len(y)), flush=True) + del model + torch.cuda.empty_cache() + +json.dump(out, open(os.path.join(B, "affinose_arms_on_test_20260909.json"), "w"), indent=1) +print("\nwrote affinose_arms_on_test_20260909.json") diff --git a/releases/2026-10-02/provenance/sequence_variants.json b/releases/2026-10-02/provenance/sequence_variants.json new file mode 100644 index 0000000000000000000000000000000000000000..75a5390b91d50f46f9275ac73e549e5cd0b1f5a7 --- /dev/null +++ b/releases/2026-10-02/provenance/sequence_variants.json @@ -0,0 +1,51 @@ +{ + "schema": "bertose_sequence_release_v1", + "vocabulary_sha256": "918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b", + "variants": [ + { + "variant": "WA1", + "label": "Variant 1", + "relative_weight_path": "weights/sequence/WA1/review_md_on_sequence_state.pt", + "sha256": "c8ae3029e9b0fdd70778b63043e730489eb9919a262644c422ce19ac6ef5390a", + "bytes": 362396829, + "upstream_seed": 42, + "selected_epoch": 29 + }, + { + "variant": "WA2", + "label": "Variant 2", + "relative_weight_path": "weights/sequence/WA2/review_md_on_sequence_state.pt", + "sha256": "ba433d65796ebe77cc03a9ec5d9f6997fd53cac8daf6747b8a131283d3ad7e2c", + "bytes": 362396829, + "upstream_seed": 42, + "selected_epoch": 27 + }, + { + "variant": "WA3", + "label": "Variant 3 (BERTose)", + "relative_weight_path": "weights/sequence/WA3/review_md_on_sequence_state.pt", + "sha256": "7e01e446d8450665b94dc3eaf6d95324c2f1f41d8a78825fe1edbc58f1a19cb7", + "bytes": 362396765, + "upstream_seed": 42, + "selected_epoch": 58 + }, + { + "variant": "WA4", + "label": "Variant 4", + "relative_weight_path": "weights/sequence/WA4/review_md_on_sequence_state.pt", + "sha256": "d7845562cf53643afe8e474c4b43b6caf3ea12da33aae95925b6b44c97c32117", + "bytes": 362396765, + "upstream_seed": 42, + "selected_epoch": 29 + }, + { + "variant": "WA5", + "label": "Variant 5", + "relative_weight_path": "weights/sequence/WA5/review_md_on_sequence_state.pt", + "sha256": "deb871c85bb80aa72bc1c62016307bfd7816e8ecf8a2c39deeefd4912257a458", + "bytes": 362396765, + "upstream_seed": 42, + "selected_epoch": 58 + } + ] +} diff --git a/releases/2026-10-02/provenance/submission_README.md b/releases/2026-10-02/provenance/submission_README.md new file mode 100644 index 0000000000000000000000000000000000000000..925f9d4e56190dc6d48c3ac5fd1b40c8787b6380 --- /dev/null +++ b/releases/2026-10-02/provenance/submission_README.md @@ -0,0 +1,84 @@ +# BERTose and BERToseBind submission code candidate + +The reported BERTose model is Variant 3 (internal identifier WA3, configuration A1111); internal identifiers, source paths and command-line names are retained for provenance. + +The manuscript name is BERToseBind. Existing runtime identifiers, source-data keys, filenames and release URLs retain the former AFFINose name for traceability. + +This folder contains the current model code, recorded configuration and input digests, small runnable checks, and the fitted final IAR linkage readout. Full encoder checkpoints and training arrays remain external. It is a local submission candidate; no upload or public release was performed. + +## What is included + +- **BERTose:** the A1111 model and weighting source. The selected upstream model is seed 42, epoch 58, checkpoint SHA-256 `8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82` according to the recorded index and BERToseBind seals. The payload was not loaded in these local checks. +- **BERToseBind:** the five files read from Nova's `Bertint/model_motif_20260908` on 2026-09-11. The four code files named by each of the three seals match all 12 recorded digests. `a5_tokenizer_shim.py` is also preserved and is bound by the recovered run receipts. All nine run receipts and training-result records are included. Eight runs record the current trainer; protein-cold seed 42 records the earlier trainer before the checkpoint-load compatibility fix. Its exact receipt-matching bytes are preserved in `provenance/training_v8_before_resume_load_fix.py`. The three v4 dependencies were read back from Nova; both model modules match the imported-module hashes in every run receipt. +- **Configuration and locations:** `provenance/wa3_config.json`, `provenance/affinose_recipe.json`, and `provenance/artifact_locations.tsv`. The locations table distinguishes recorded digests from payload verification. +- **A portable scorer:** `score_predictions.py` implements the final equal-assay metric for a complete, row-aligned CSV. The historical scorer remains in `provenance/score_arms_on_test_historical.py` for comparison. + +`code_inventory.tsv` records the original path, original digest, output path, output digest, and status of copied files. The original five Affinose files remain in the accompanying `_verification/nova_sources_12261009` harvest. The only edits to the BERToseBind candidate are three source-root paths made relative to this folder; `provenance/candidate_portability.patch` lists every change. Model logic, weight initialization, optimizer, and selection logic are unchanged. The `candidate_affinose_input_hashes_*.json` files preserve the data hashes and bind the candidate's changed code hashes; they are not historical execution seals. + +## Run the local checks + +From this folder, in an environment with the dependencies listed in `requirements.txt`: + +```bash +python examples/smoke_models.py +python examples/smoke_affinose.py +python score_predictions.py predictions.csv +``` + +The first two commands were run successfully with Python 3.12.4 and PyTorch 2.9.1 on CPU. The scorer's unequal-assay and constant-prediction cases were checked with synthetic rows. `predictions.csv` must have columns `assay,target,prediction` and contain the entire chosen evaluation roster. This folder does not supply a measured prediction CSV. + +The two CPU examples are self-contained within `06_code` once these Python dependencies are available. The separate figure rebuild, `python figures/build_submission_figures.py`, requires the consolidated submission package: it reads adjacent `04_source_data` and `_original_submission/Source Data.xlsx`, writes figures to adjacent `05_figures`, and writes its length summary under `_verification/figure_work`. Keep those folders alongside `06_code` in their original package layout. The code-only reviewer ZIP does not contain those figure inputs. Figure-specific dependencies and output details are in `figures/README.md`. + +The checks establish: + +- The BERTose production architecture has **138,487,995 parameters** and **138,488,535 state-dictionary elements**, including 540 buffer elements. The production count uses meta tensors, without allocating production weights. +- The copied source resolves all 12 component bindings required by the R5 model. Reduced-width sequence and MD masked-window forwards produce finite tensors. +- The BERToseBind constructor preserves **209/209 supplied encoder state entries**, including positional embeddings. Frozen embeddings and the first four layers remain frozen. This is a synthetic initialization check, not a check of a trained checkpoint. +- Adding the zero-initialized 165-weight motif head leaves initial outputs bit-identical, produces a nonzero motif gradient, and raises if motif inputs are missing. +- The remapped native encoder and BERToseBind encoder agree to a maximum absolute difference of `1.1921e-6` in the CPU fixture. This local result is numerical agreement, not a claim of bitwise equivalence across architectures. + +Detailed results and the exact local environment are in the accompanying `_verification/code_work` directory. `h5py` 3.16.0 was installed only under `_verification/code_work/test_dependencies`, and the BERToseBind training CLI help command then imported the training and dataset modules successfully. No real dataset load, full training run, CUDA inference, or historical prediction reproduction was performed here. `requirements.txt` records the local tested versions where known, not the historical Nova environment. + +## Model and metric conventions + +BERTose uses five objective slots with a fixed denominator of five. Coefficients for sequence, topology, MS, static structure, and MD are respectively `0.5, 0.25, 2.0, 0.25, 2.0`; each raw parent-level objective is divided by its recorded training-only null scale before weighting. These are objective weights. The implementation's fusion input has four 768-wide slots and must not be described as a five-slot fusion layer. The MD branch receives 20 ordered windows with six features and masks three windows per present child during reconstruction. MD information masking and removal of an entire branch are different interventions. + +BERToseBind uses the BERTose sequence tower, cached ESM-C per-residue features, two bidirectional cross-attention blocks, masked mean pooling, a concatenation head, and the additive 165-dimensional motif term. Training minimizes MSE on `target_rank`. Embeddings and the first four sequence layers are frozen. The model contains 100,209,318 parameters (66,330,534 trainable under the stated freezing), plus a 256-element positional-index buffer; its state dictionary has 272 entries. These counts were checked with meta tensors. The final recipe, all nine reported seed/regime cells, and checkpoint locations are recorded in `provenance/affinose_recipe.json`. The motif term is a glycan-level main effect, independent of the protein partner. + +The trainer selects the checkpoint with the largest validation equal-assay macro Spearman, saving `best_model.pt` immediately on strict improvement. In that historical selector, assays with constant predictions are excluded. The **final reporting metric** instead fixes eligibility from the data: at least five rows and two distinct targets in an assay; a constant prediction receives Spearman zero. Each eligible assay receives equal weight. It is not pooled Spearman and is not weighted by assay row count. The final reporting scorer deliberately refuses missing or non-finite input rows rather than silently changing the supplied roster. + +## Training entrypoints and required external artifacts + +BERToseBind's actual training entrypoint is `affinose/training_v8.py`; the dataset loader is `affinose/dataset_v8.py`. Its CLI requires the binding CSV, role table, cached protein HDF5, frozen vocabulary and feature directory, upstream checkpoint, expected row counts, cell/seed identifiers, output directory, and an input-hash seal. The three archived cell TSVs identify the original training/validation strata and counts. Their test stratum deliberately equals validation for the exploratory training runs; the separate historical scorer subsequently evaluated the real test strata. Do not label the trainer's validation-as-test output as held-out test performance. + +BERTose's recorded training entrypoint is `bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/run_a5_wa345_shim_20260817_r1.py`. Its pinned predecessor runners, model sources, manifests, and continuation configuration are included. This source snapshot retains the original cluster and input bindings. The referenced native training source chain is included unchanged. Full pretraining still requires the immutable external multimodal artifact workspace and its runtime receipts; this is not a standalone training distribution. Do not submit the archived launchers as if the old queue, permission, or output-absence assumptions were current. + +The recovered BERTose final receipt confirms a strict validation-loss minimum at epoch 58 and completion at epoch 73. All nine BERToseBind recorded best metrics and epochs agree with their validation histories. These are scalar-record checks; the original input seals and checkpoint index do not prove that checkpoint payload tensors match the records or that all remote data remain available unchanged. The generic legacy checkpoint fallback in `bertint_v8.py` remains warning-only; the supported submission recipe uses the strict A1111 adapter. Supply only the recorded, trusted BERTose checkpoint for that recipe. The legacy released Affinose checkpoint affected by recursive reinitialization is not included and is not a substitute for the nine final motif checkpoints. + +No public repository availability, DOI deposit, licensing clearance, or complete historical rerun is claimed by this candidate. + +## Benchmark-identity exclusion + +`benchmark_exclusion/` contains the unchanged identity-matching, exclusion and grouped-partition sources, their parser dependency, input requirements and source hashes. The final partition excludes 3,833 parents (3,673 exact WURCS 2.0 matches and 160 additional graph-identical variants). Source Data in the full submission package supplies the 4,625-string exclusion list, all 3,833 excluded parents, and the source/count tables. See Supplementary Table 14 and the folder README for graph-matching scope and replay requirements. This addition supplies the source and frozen-count provenance; it does not claim a new full pipeline execution. + + +## Final IAR linkage readout + +`iar_completion/` contains the unchanged final job 16604931 source, its parent scripts, the saved linear linkage readout and final-run records. The readout acts on the input of `sequence_head` and predicts 211 ordinary linkage tokens. It was trained for 60 epochs on 111,989 training parents with the encoder frozen; the highest accuracy on 27,690 validation parents selected the retained state at zero-based index 46, the 47th epoch. The original `best_epoch=46` and `development_samples` field names are preserved in source and metadata. Residues and multi-token linkage cases use the pretrained head. + +From this folder, run `python iar_completion/readout.py` and `python iar_completion/check_package.py` with the dependencies in `iar_completion/requirements.txt`. The CPU checks verify copied hashes, source imports, the saved tensor shapes, all 211 class-to-vocabulary bindings and a synthetic linear projection. They do not load the upstream encoder checkpoint, refit the readout, or reproduce historical glycan inference. Full replay still requires the exact external encoder, parent arrays, evaluation case records and native runtime authority inputs; the unchanged historical entrypoint retains Nova paths. `iar_completion/README.md` gives the requirements and provenance limits. + +The final Supplementary Figures 4 and 5 can be rebuilt from the three small final-run artifacts and saved palette included in `figures/final_iar/inputs/`: + +```bash +python figures/final_iar/build_final_iar_figures.py --outdir ../05_figures +``` + +This figure-only command is self-contained once matplotlib and Pillow are installed; it does not need the encoder or training data. It writes both figures, their ten-row source CSVs, a separate token-denominator table and a build receipt. `figures/build_grey_seal_figure5.py` and the consolidated package's `05_figures/build_current_iar_figure4.py` are compatibility entrypoints for this same two-figure build, with `05_figures` as their default output directory. See `figures/final_iar/README.md`. + + +## BERToseBind updated comparisons and uncertainty + +`bertosebind_new_runs/` adds the unchanged reported-model protein-replacement producer, all 18 original GIFFLAR score receipts and seed configurations, the executed component-bootstrap revision and diagnostic records, test-set structure sources, and the current exact-WURCS exposure audit. Original producer scores and later bootstrap re-scores remain separate. The protocol note documents the amended resampling and eligibility rules and the limit on confirming decision chronology. No checkpoint or large prediction dump is added. + +Run `python bertosebind_new_runs/check_package.py` to verify file hashes and syntax, or `python bertosebind_new_runs/reproduce_summary.py` to reproduce scalar summaries and seed-only Welch intervals. The folder README describes the portable exposure join and the external inputs needed for full scientific replay. These checks do not train a model, reproduce model inference, or replace scientific validation. diff --git a/releases/2026-10-02/provenance/submission_SHA256SUMS b/releases/2026-10-02/provenance/submission_SHA256SUMS new file mode 100644 index 0000000000000000000000000000000000000000..1c2f2aff3e5848b1626644a6a03d9a18f62344c9 --- /dev/null +++ b/releases/2026-10-02/provenance/submission_SHA256SUMS @@ -0,0 +1,469 @@ +6fc928f84838ac82af228d744fadb8be670d631afd5ca84ff84d0847b140d8fd README.md +52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98 affinose/a1111_encoder_adapter.py +c4bbe5c1a0286b319f0b71c87669b4f9cfe781051019fb02a98b5d7e208b8b2b affinose/a5_tokenizer_shim.py +7fa8d6fe95db3ccecefdd396931d6354442800cd5284cabf519e3425cc388883 affinose/bertint_v8.py +b6c2483e2975c4c7d7dfde6b2979c8e1e862564279c7ebba4e65b504776b43df affinose/dataset_v8.py +6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949 affinose/training_v8.py +8452e3ac521af1d3ea24bb5a99e02a930d913fc96394e5610fe8b86e19ea89ec benchmark_exclusion/MANIFEST_SHA256.tsv +96567c3b9c3e254bceb6bd82e43c1f252b987ced58dad41d3b4406b9f58a76ec benchmark_exclusion/README.md +3d37d993b1cd4135ca9fe90feca856b73907d725516ea652425ca24060769698 benchmark_exclusion/SHA256SUMS +e2e0dfa7d133362146de10ba3dd774e9a3e186088f976189b0aae9d26b442bc4 benchmark_exclusion/code_inventory.tsv +050c0af96f133ded3139baf6dfea594f91c6659f411dc25fc06d5847951b2f0c benchmark_exclusion/required_successor_inputs.json +0507537ca8ee05b249f9ab3f3fa09de94b7acc633b91235f2778ae07659096bd benchmark_exclusion/source_verification.json +3d598a249db90c928f8a317923ba5d37eebbc1f63383a2c39e0541f20c31ccac benchmark_exclusion/writing/review/glytoucan/scripts/build_connection_level_support_audit.py +a9160769759c1df56238caad6a9f4ed6ec68477d44435ebbc81d64bbf541b64c benchmark_exclusion/writing/review/multimodal/scripts/build_p1_direct_local_neighbor_audit_20260710.py +0f88f53e22d0c068a87a09508a9d286e4982eddcb4e2154e63b2ca25339ece69 benchmark_exclusion/writing/review/multimodal/scripts/build_p1_non_iar_exact_graph_authority_20260711.py +2c8821586df1caa53556b4cc14e6cd7507af4830aa8a149657571e0455eb6853 benchmark_exclusion/writing/review/multimodal/scripts/build_review_a5_non_iar_later_role_successor_20260720.py +cd86a0a0b228c32e51ec73490711e37da3e6c9fdf9e64e980b7222b5312484aa benchmark_exclusion/writing/review/multimodal/scripts/repartition_a5_non_iar_80_20_20260712.py +966889118fa567729e1959750b1601018ba117aed0bfad3508005ba6b1896a08 benchmark_exclusion/writing/review/multimodal/tests/test_build_review_a5_non_iar_later_role_successor_20260720.py +0bc54399362945601bcfd403441fc80968d173200dd0561f57568b2053a94839 bertose_source/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py +e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 bertose_source/bert_training_v4/model/__init__.py +b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb bertose_source/bert_training_v4/model/glycan_bert.py +83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190 bertose_source/bert_training_v4/model/multimodal_glycan_bert_v3.py +8a7f8569ff3a21513723d3a15e969120f0fdcf352943dbbadfdc54afd382149e bertose_source/data/bpe_vocabulary.json +48914855c4e458ff02452ad4db3743a4fbef12221e0313584db4c2b1bd684cd4 bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_authority.json +53098620a5c22dafdc951ba743515b4b10b1673c02f0aa4d881db669584902fa bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_independent_certificate.json +f654177eb6fde7289b6755812c2be298084697cf0d85159b3ec9da310fe3d4b4 bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_receipt.json +918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json +10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04 bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py +f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7 bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py +6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4 bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py +399df3de2b6c4d5e88aa442c8326214ab9cff2e8f0411e6921762bbade1475ba bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_receipt.json +93ed219d807d4a7735be96bf7cf6a59a0bd407619925ee194aed6d473048cdf0 bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_summary.json +b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb bertose_source/model/glycan_bert.py +8e06c32f4e844c3c66f146fd15a075472808a0720c892d0b9683dfd32f15ef0c bertose_source/model/multimodal_glycan_bert_v3.py +6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4 bertose_source/training/a5_wurcs_bpe.py +2a3b28bd980b144eb42f9688f411adfbced054b9e7bad9fac4de37c6180064f8 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_submission_readback_11767377/review_a5_native_eight_cuda_resume_diagnostic_r5_11767377_terminal_certification_receipt.json +6a1bc65c568a17dc45f1102cd122ac43c62a8ee3b28e06ec855577857cc41ce0 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_a5_native_eight_cuda_resume_diagnostic_receipt_r5.json +9292c31195a7eddfe9f987a8cfe8cda843b283bb10a1bc8fb1b05d88f82a92d9 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_checkpoints_r1/review_checkpoint_index.json +cacec838740d64a493c2e56fd1efa8a85ba7d11fce3ec26e40905c33db05e58d bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r1/review_a5_native_eight_data_adapter_receipt_r1.json +3b2118e128a5550ba4918b4f4f2c6d8045e319b7cff37b76d74dce6b3220c9f0 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_receipt_r2.json +e29df7a91d0c30238abe9155e600fb1b77b0d3d3481f6599d2ca0d2185371b9f bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_receipt_r3.json +a92f4b951476e84af006015c97698f07d5e03e7a182c54c82b7d7c5c0e68ffb3 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_verification_receipt_r1.json +9aa5860bfc032afd82561a6db6f8df1439245b73aa3f7575b2b88836e384a1f9 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4_integrity_receipt.json +59a2fd53e9e75f6f8ec258d76e103adb61c908ab0ace6718a348739f5b70d8bd bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5_integrity_receipt.json +0c078ce52e2eb6d6feaeb1a1c2af1794ef33aef56aca7959f76a93f39d152692 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6_integrity_receipt.json +912bc1391ff66c3fd704e61266de508adcf9ed587d7e136932508029b77cb956 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7_integrity_receipt.json +d8feaf25a7266a919c42d3a4fd1ad2d105ab088ae79c024edc665dfa29cf758a bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_final_binding_r22.json +30082379d47318f5d9e17fafad4aa018e7e9f0f0bf1aac559178d46784fe4b9f bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_launch_config_r22.json +826f3e8167fdd459cff7677b5b69d0f3caf9dababaaa71d9eded6070aa5d93a7 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/run_review_a5_native_eight_r22.sbatch +1238f76e5da5184d16d33077bf3e5342033918fadb4eba84242c47cb1b1322cc bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_authority_r1.json +fb65dddf0bc61b4c73b5dc5ec796967e65263e9d7bdc4882e07684e882280fdb bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_receipt_r1.json +64eaf9174f523ae909c84987049d071bf3869ca8e83919f14f0572ef77b0530e bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r3/review_a5_topology_loss_v2.py +654f5b9728c3dfd2588c4b570b0e3a1bcab8feb366af28eeead36f9beb37d921 bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_receipt_r4.json +ccd4b81d3afac8ae789c538e0af332f74f2468d403da1d243fefefd4df013538 bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_summary_r4.json +b10556643abf560b9e8622e8ae67936d2d3ca8867433db485e785f31d049a8fb bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null.json +f4eb239f56e472d57dd3a3848c1a6c142e193cb326320ac8bf134b96ac35102a bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null_receipt.json +831bebd2dcf6a8308d01ec62eb6e1132fe7edbbc666c1c83787335acc576b19c bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_frozen_sequence_masking_runtime.py +eae6b3772cd08c65cdc26bdf7ec525742452aad4a35b4d5aa9a7a5936dc3bf73 bertose_source/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_receipt_r1.json +da7814d20c81c0d072544cfc5761e8fae0292def176d63b863083389c9caa0ff bertose_source/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_summary_r1.json +ba9591529f3747706fbc169fe8262e23ca31a810473d10c284fb01d9190ebe42 bertose_source/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_receipt.json +d6b3dad73d8c9cc78a7c721e7969280d0ff6500773402545bc2ff143b125f56c bertose_source/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_summary.json +8ff3181d22567728c0a10580c1e775da0714f17561ace81034fc673813f54af6 bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762446_r1.json +163374c5c6b049908d935f0d92d8f1a1adda761550761db9b2cb423bfb450ee1 bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762534_r1.json +85711141c9d0e84dee228df84d02df7d4693fb4b85b1ae8163466e208f5e9fd6 bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762446_r2.json +0d96b7867eeec85dbf14eb8f55b745b7c354edb5d16ac702d17b97bf850c79af bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762534_r3.json +f7adbf64e17c3a2afc677b7af9f05e50e37b4d681f38f0fc192634ca0447e4f4 bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762446_r2.json +6796f0b163dcf21af5dfe3048b53e8d2660fe10290e22222232a6c7f6668396c bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762534_r3.json +be55a87986dd6d80942dcd0b17dd75994145ff4a383596314d5b4ee51972a443 bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_cpu_finalization_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_cpu_finalization_execution_r21.json +77ba176a9fab70e75b3c2c423c857d1e266f2021875aea01e15bac3f11f327d1 bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_publication_receipt_r4.json +661d04d76fcf36d116feb117154eac01e6569e377d4245c07653b28696e1227b bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_train_only_null_r4.json +333ee6f34e69f89e26b810cc565415b89d6874615ea4ac57850371fb159c1b71 bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_later_role_20260721_r1/review_a5_official_ragged_topology_receipt.json +a752ffd350fbe38aa0e6f6b42b76137f4f72d76fa9a7f5d3609bc47c65c552de bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null.json +dace4cb5df71912f5aa7531bb0ce87db3b63d726b2a12aa41facabf9d54b5c35 bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null_receipt.json +68c0d543c5411276ef56c7072bded4ebda886f46b9fa4ebf3c95c1e54c1a08c6 bertose_source/writing/review/multimodal/runtime/a5_ms_acquisition_top30_v3_20260721_r3/review_a5_ms_acquisition_top30_runtime_v3.py +9f8f167148aa234df413e4c3d4e1846881781c8e5a19bd91b0b178b260a3a537 bertose_source/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_r2.py +a76c24cb0a3b904ae95bfda21bdeb2ba96e36293368fe44a218429be2b10d43e bertose_source/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_r3.py +c71ba654568a24993bc1733b26b6863b11e5c198c53871a6183b485ab96540f0 bertose_source/writing/review/multimodal/runtime/a5_native_eight_direct_static_bridge_20260724_r1/review_a5_native_eight_direct_static_bridge_r1.py +b6266553c075e9b85d221a6278d1ef3ab1d26fbce5de70dbcd4569db42653990 bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/review_a5_native_eight_finalization_runtime_r19.py +28d482fbae230c999d84e64a5abd6a1260ae26fb555c92b7d3176afb37cb260a bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/run_review_a5_native_eight_training_r19.py +62f5355ef06cdc56f85214ac251bfa0ed4b19b41a19ab6acac51d644678f0a62 bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/review_a5_native_eight_finalization_runtime_r22.py +cb9a583091912c59f515f46074b04c90dfbe0ebf0fc28d241db980851b180335 bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/run_review_a5_native_eight_training_r22.py +3b9ada847b1ea3ecf1f12a6566b55fe1a0218b10aed9d5dabf40190cf0e70c4f bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r1/review_a5_native_eight_hotpath_r1.py +101559df116319422762f0d7293fe55478b56defcbc1724661696163bb4fc9ae bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/load_review_a5_native_eight_hotpath_r2.py +941f08e0db8bbf2fa61852d4fc218f592fdd63c12f2dafdb70ed3b18e6aedf98 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/review_a5_native_eight_hotpath_r2.py +e99f4556a8e3b3721d1f9155738d2bf4e9765e43a0e9f7734259e33533ff4b30 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/load_review_a5_native_eight_hotpath_r3.py +a81dd58c727a28b1a383477338e41922a2d746dac5cb33f351b4501ee8c5d0dd bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/review_a5_native_eight_hotpath_r3.py +662d0766a8d68638480e9c44ca4070387481d43e1c666a20363025cf5b9bc958 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/load_review_a5_native_eight_hotpath_r4.py +600af4b6b0fab63b7780bb1e6be8233eb28bd0808ff390c3096369afec9c6649 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4.py +864a05e86c5ea91318b11373d2cdffcdd2ddd0777f141cb7ef0305f779a42ea6 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/load_review_a5_native_eight_hotpath_r5.py +ce4bad9195229341cab0890ed775b78126c17a23d82f2244757f120c12b346c8 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5.py +e2496170942db844e4ebe71d4c098b0d0cf99540d3465ed7e8e9a113469cf7d2 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/load_review_a5_native_eight_hotpath_r6.py +73b42e5131c64284c6f748ddf81b4d187dcb57f756c88c22240d189f2afc4cef bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6.py +fa9538829ff3ccfaf3d3f4346c7e735c70758661eb6bf3da5eece2e7e96e0fb6 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/load_review_a5_native_eight_hotpath_r7.py +c0cb618f7856daf24666dbec07ff51b86e3fbd52c073c58bd1b7151122714f47 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7.py +35c7a13da662f49bec07b63f590c8fb3d9cc4578633a179da42ff2650a2d7865 bertose_source/writing/review/multimodal/runtime/a5_native_eight_submission_20260727_r15_preparation/review_a5_native_eight_submission_contract_r15.py +34785bf46f38579e48c3be6326f667a04521cb7d95c1f94c5200d84012b577bf bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r1/review_a5_native_eight_training_runner_r1.py +7e93b13b3212b3c97e30144f3e393a86a13411d5e82fe19bd55d43bc58587e30 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/review_a5_native_eight_training_runner_r2.py +195dbedfde65c061eb0fca5684270ff95a2bec16732683b1df7f40d91909cc7f bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/run_review_a5_native_eight_training_r2.py +550588ca033718273de2e35825b8b9faffe4a5fb747ff8775fe17bb31050d9be bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/review_a5_native_eight_training_runner_r3.py +bba69e736a44fbfa6b380089d50b945e93b45d5202fa265b5869ffd378149040 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/run_review_a5_native_eight_training_r3.py +cbc9fc0179ecb1e7c449fa37a574f38ff3e912e13db5c984d87e05e3e347a0e1 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/review_a5_native_eight_training_runner_r8.py +213afce295408dda11cf3ede98ebff191735a77e1db09b6252cae964caca39e2 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/run_review_a5_native_eight_training_r8.py +4430560565a18da0e68700d60526d3dec15fabd79854111d1e85deb59e2381c8 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/review_a5_native_eight_training_runner_r9.py +b2bae85c879d2d266ac1e39869c661625958e21c1c3b7299713c8a0b46827ec5 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/run_review_a5_native_eight_training_r9.py +ce7626823c2980bc21b46a7eec6c1961a87dc5512525e553c49f2c7d57bf0430 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r11_certification_gate_candidate/review_a5_native_eight_certification_gate_r11.py +a8cfaca102f7c3d0c7936d244ce1e9ed75099e70c0ca3a27943be7ce5587b6e0 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_final_bindings_r12.py +47e973c7c4ed5bc6686e5d7795b00d3eea5c2da8c2a15fc534a7cc24c1744ee1 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_training_runner_r12.py +66270933d1ff23ffe50b800267a4705c905fc423e8e2c929bf642cb5c6c37def bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/run_review_a5_native_eight_training_r12.py +2feb9a90db66ca277fb9e23d079ce8b089a31060e5670961a13b0e5146ed39a8 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_direct_submit_controller_r13.py +c30b6b03dae852a4b10c6d01596e977d8a071e738dc3074f1ca0592a50778dd3 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_final_bindings_r13.py +17cf8ab216b354ec1de7574ebebd7bfe02b5935da605b4131e45c7aa13982d5b bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_training_runner_r13.py +a2a0a0d9056c7cd360913a792ff5e3390a190b692d7663c3a6d48a3ee0f180d5 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/run_review_a5_native_eight_training_r13.py +737b1caa9086f8ac1556c05625d1b5391b8cae58e9d98a7755fa72f44e94c7ba bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/__init__.py +bd6c704239e2bb4898dddda5c86274f41cd5b304b35d584ddfae3884e8bc8503 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_final_bindings_r14.py +eda983e1b0c29357eb1b6e2f555f402a83b7176fb857488e9be5f5faed490b2d bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_strict_successor_r14.py +7ef11d9a891d32b0c1bb3ee24016700acd14251ac49448f004a701cdea79ca53 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/__init__.py +1f21427486260e8b56795f7137f0f7322ae768d80645db6636414e5961aa3224 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_bindings_r15.py +1556d6e2643edfc80b6b6782164ab47560e259ff55791c50dcffdd9b9afc001f bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_gate_r15.py +1287db8472580db69e38d60be8c13beeddb4fdde7958a5b302d072e1226f4de3 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_final_bindings_r16.py +689db8aaf51d15288f01b196c5ad2fe8ee3ca8aab3ff525695abaa9f25060ff6 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_release_successor_r16.py +2c985edfe747bae712c41689da8be2abb5096bd97a8771691b3676d3a8af49fd bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_balanced_planner_r4.py +52a311636e7631b97711aab63aec28e2ada47a446d1aecc1a47921d584f69f9d bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_composite_r4.py +1b9b05c812603db7b216aa989214a3c3715f80032b3a8b82577ae2b9e48f048d bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_balanced_planner_r5.py +24c35257fc61e1c9c77630d2b0075775a7f46b6500ecb5f175ef8f42bd214e0e bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_composite_r5.py +a482a70a2edcb7c9936b091a86a0f7d98714b5bab09a0bdc80cd927f015a46f2 bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_executor_r5.py +b5fbdff168de23676208484ccccc3cc32f613ea411d193e6d8930456e8edeeef bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_r4_lineage_receipt_r1.json +e47e6e9810db0e8ec9d37ce5533f762e287b162f811bfadc347666f5ad78db82 bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r6/review_a5_native_eight_executor_r6.py +e068a3c233fc3fd94fe3b8618edb9bd8c87fd81b97dff2666206fb870f0f898a bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r7/review_a5_native_eight_executor_r7.py +60ab4de6bc1ee151e9da2c312c41079638e11469502e8136ede51be032eac630 bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r8/review_a5_native_eight_executor_r8.py +ee97bf4e68ddfbf280b7e0f01ce3409c4d4692feafbc9382613bbc5698913fa7 bertose_source/writing/review/multimodal/runtime/a5_static_failure_release_chain_20260727_r1_preparation/review_a5_native_static_failure_release_gate_r1.py +f420c84258cdf4247fdd766a9e8470bad55bd1f845ebd6640ec70b97b3953e6e bertose_source/writing/review/multimodal/runtime/a5_static_v2_epoch_boundary_resume_20260725_r1/run_review_a5_static_v2_epoch_boundary_resume_r1_scavenger_v100.sbatch +f2e558c52bf166d6e7f42ecdd92995f2b70c8a174eab8d6814875399fb69732e bertose_source/writing/review/multimodal/runtime/a5_static_v2_ops_20260721_r2/review_a5_static_v2_checkpoint_store_r2.py +8e57c17fd43f3894f94f980cf70a0d6d7f183cf04c26780c3fe30c1932bb7abb bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/review_a5_static_v2_postfit_direct_publication_r2.py +c46a7d4644899a5e7551e2dd5eb30666e01e0f36e2f65a2cd821b8c5565258dc bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/run_review_a5_static_v2_postfit_direct_publication_r2.py +3b9632e840265e1a5c1d226f3fe7fb8cd4c448f810f3826c59e19c25132dd04f bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r4_terminal_certification/review_a5_static_v2_terminal_certification_r4.py +9429deca8cfb6cb25ef6f79a5b0ee0b91d47657e7f21f61627afd655d08fe7d3 bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/__init__.py +04d724ee84f67565e2f0229db99006c8f64d2492564643f6e60af25930cf12a1 bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/review_a5_static_v2_terminal_certification_r5.py +bbdce8deb776917ade3704eb5d08b064917f52c76f3f39ee345b3b2938992add bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/__init__.py +195d41bba2282fdfde77a88f8b0a70eb64b0207d1a9efd42ddaeb873f8ccaeed bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_production_module_roster_r6.json +bdb0fa37804531f6446cee9411c9730fde792eb9674054e56b883156f36da4cb bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_terminal_certification_r6.py +30b64143eb15688fa1e1c8aeaf3b84eb08a2a65730fa1c996c9ef6f12679d80f bertose_source/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/a5_wa345_continuation_manifest_20260819_r1.json +f517b5c99d93103d1212b2153c26be1cc58267c7b2d9bfa747f6d512f0fdadf2 bertose_source/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/submit_a5_wa345_continuation_20260819_r1.sbatch +eeebc9c7e2cfc701f3ad47e62696ae2247c8caec93d8b034d5f573b701eab2a1 bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/a5_wa345_manifest_20260817_r1.json +5159414381025cf3e2d5e742422c84c292481168af42801c773df4ba12797fb4 bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/run_a5_wa345_shim_20260817_r1.py +a090f111df7cc0db09e61ea0a8067882b7cd9bf21d91c53da4115549560b08e7 bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/submit_a5_wa345_20260817_r1.sbatch +600144a7f5b893958d629083a3a9266eec980765218408d2d51db72b73c1e506 bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/review_md_temporal_20x6_a1111_wa2_manifest_20260811_r1.json +dd74253863f39150af4ddc7e8d48c0a366e1f327c30aa50e0748078330b97b85 bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/run_review_md_temporal_20x6_a1111_wa2_s424344_20260811_r1.py +6ffd2f97706bdf0001b90ca2f8af7ec565b298cc8585444ba6027194d0e378d2 bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/submit_review_md_temporal_20x6_a1111_wa2_20260811_r1.sbatch +aa37d1e86bd3a58262f9824ba80993c0f0f280db4d0f4d704ca469dc12ba3df7 bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/__init__.py +3e96d8092239c2c21f217ad5bae4ee7e07dbe0f7630b213bad468d6b08d3b1c1 bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/review_md_temporal_20x6_core_r3.py +1e446e7e89a39ef01132b9f2a4deb817161f7b376a0fa04c2b11529004f53e8a bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/run_review_md_temporal_20x6_training_r3.py +a6a180ae103eaaf68458b298cd4180920a0e88c1724a6ba9a94ef94559e75c5f bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260805_r4_dev_memory/run_review_md_temporal_20x6_training_r4.py +b18eed4c3ad4f0cbdd700e41d6ff7af1f520d26386f76f4573e82332f3e1ea28 bertosebind_new_runs/README.md +fc4ffac8de965da6250297ee24fa801be2619f1afcc29471204c7e5aead03012 bertosebind_new_runs/audit_pretraining_exposure.py +2b8be4fcd7ebc98f49e9532415644f457930a1e7700d5c17fdc58a0abd0dd271 bertosebind_new_runs/check_package.py +45a366b40a523671427950b83ac2c8a243c96f1bce8527b0af2337a375ff2b15 bertosebind_new_runs/executed/local/audit_current_pretraining_exposure.py +bdb19bf323c94eacc1943b4345b5b2485dfa50b7ac00a755e8a1dde2f8a4ed74 bertosebind_new_runs/executed/local/collect_current_glycan_sets.py +9c9b90f077709c105dd16b706ebcd434dd793177c274eca17b10bc3241f0138b bertosebind_new_runs/executed/local/dc_anatomy.py +33d41f680cf7a5ae3b98fef4d1ef604f6e12a6a856ec6e90df8bb5a88f336bbe bertosebind_new_runs/executed/remote/aff_attribution_motif.py +2b89020895eebac8c99366036eebb07dd43c687fe47274dcd1de47d1017548ff bertosebind_new_runs/executed/remote/aff_attribution_motif.sbatch +d7f21b8037172e6d42fb65c8169d37b19c385d68dc9cbebadbafe9e930843074 bertosebind_new_runs/executed/remote/affinose_gifflar_macro_A_glycan_gifflarESM.json +eca94bfbe82bfba95c2086c9c4ffe14091d442017356394ec2e75173cb66810f bertosebind_new_runs/executed/remote/affinose_gifflar_macro_A_glycan_sweetnetESM.json +529296c1388651b4451f35829d0caa63e692a96fc88b74ee9b8dc8c1d09136da bertosebind_new_runs/executed/remote/affinose_gifflar_macro_B_protein_gifflarESM.json +6f0098947aa4c962f991d1e17acc17707d7cb2eb5e9d6338182d6cfa65d28a2d bertosebind_new_runs/executed/remote/affinose_gifflar_macro_B_protein_sweetnetESM.json +bf720edacbad09cd04c42df7cf347dd1fe9846a22f307f7be1c38f06e89faa44 bertosebind_new_runs/executed/remote/affinose_gifflar_macro_C_doubly_gifflarESM.json +1884d744232b56c5edc76e655cf9bd117e43d8d749c98300b528ea6a5e55b75d bertosebind_new_runs/executed/remote/affinose_gifflar_macro_C_doubly_sweetnetESM.json +0d4458462cd10dae219a9f15eb6dc8129d200a09891bd0b6bf0297cd85c4dae2 bertosebind_new_runs/executed/remote/affinose_glycan_cold_contamination.json +61a5ef32482365e37e58bd4aee49ff5dabc2fafa04f4e063f3a0be7c294c84c7 bertosebind_new_runs/executed/remote/b4_baselines_perrow.py +a381978d36492bb21cdb7c2a3007c51414b7630dd88016c7a74eb19c48080925 bertosebind_new_runs/executed/remote/b4_gif_repeat.sbatch +7fe6a80de1e7662a916e84b0a679c5579ab7fdcaaace70e1855f7d8face51ca3 bertosebind_new_runs/executed/remote/b4_gif_repeat_compare.py +1d0433763d7ad49088e396b435a42f2a12141436db05592778a79938c88a953b bertosebind_new_runs/executed/remote/b4_lo_perrow_ckpt.py +c82d7fe71d178d78d52ee47d809cd12d0286c48b1375c0c7b8b80fa222858e61 bertosebind_new_runs/executed/remote/b4_step1_structure.py +ab7560abe237da435464a984a4e23925e7ec48d802949f57ef9600b829e6b37d bertosebind_new_runs/executed/remote/b4_step3_bootstrap.py +6dbbbeb14bb860f6344a93bb65754f540dee8da4ceb3fdc526133c7133dd426c bertosebind_new_runs/executed/remote/b4_step3_bootstrap_r2.py +50049bf5658f27700205e91d07f40512b8d297a7af11f51fcfbd514df9b59478 bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_gif_repeat_20260927.json +7f9edc64528d5b43d2c464f8f5d4db91c2a133f54364993c7798a2a606bd3427 bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step1_structure_20260926.json +17ab513ec2d9dec6f1e8c9445dfd7500190f99f0e8758b21fbb435b026324f3b bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step3_bootstrap_20260926.json +6a87e6a8abc926f41ca13b1bb6c81cbf9ea1d04b06e8f39bfdaf847ce55ba235 bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step3_bootstrap_r2_20260927.json +1ab7793ddb0daa247dc1f75b53356663d2c99e2e279a33207c9dd82f24288d17 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan.yaml +cda3d3e0df11dcbffff287c985039a4abe486a39bb97fe1554851992cbca127e bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_gifflar.yaml +d11d6ca73935a664a9afe9330d07e51b7e95e89e044a1012065ef1780d820381 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_sweetnet.yaml +dab891f502cb328f8313a9d2971e5d8134472b059fa776409f97f5f59e5d470b bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_gifflar.yaml +875883d0ec38fca1a4995ea76c00db81ba84357fb2ed9a7c0921dbb6c7cf6492 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_sweetnet.yaml +529c3940cfce81ab3d135f25b722d7c302cd83e8540646f041a5d6ba36baebf3 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein.yaml +908379483dc5b2d0655aa7b0a13b33c8b70ba0379852ffc2d848e354ebd9945e bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_gifflar.yaml +57cbf88ddf620ffbec7c4a8167a271ec38da0f94b1d3a4e9fe9769a9a19b8eea bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_sweetnet.yaml +5e518f2db88c03663eb263a5e4a44e93a3bc43e51c4af6c626cd0da416a18d81 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_gifflar.yaml +50c68416d3d4d72445e61811474179cb552e60d9f8a87f6cc0ed1da32d8b55e8 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_sweetnet.yaml +034ba8bdefc3410b987d7bc380bd24a469a01c912349fef1e35436df2a24c36e bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly.yaml +ed244565f2f81e6c554613718398af97683ad375eb4debb5a61d25855c444368 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_gifflar.yaml +d8ba3e8d83871cdd92548bc8bab1493225cdcbd536c0004ff6b40b48e4e62e40 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_sweetnet.yaml +2faa1986c043cf5d8b869d316afa0a043d071400c4f2018ba83551332a143f25 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_gifflar.yaml +5fd2cdec3ee4d49f7d7441a037e0a2fbe428b1c0586de88beaf17a2ab67580f1 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_sweetnet.yaml +e8fafb98627685ededa4392c5310e149a7dbbe907e37b43da7d20d228961b181 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_sweetonly.yaml +ab257b93c23a522dcd99f37b2b802e67c8e3b4ba46b938db6229a6311a77cd39 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/data/utils.py +ab79451e7b51e27d985904a4445fc09b756d759413bb2ebaf8755d177bb3e8ad bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/train.py +56bf1e5b11a386d0920b9f50da6288eff222ee1b7f25d772a8a666a2387b2a9d bertosebind_new_runs/executed/remote/gif_seeds.sbatch +241d3ca6045610a70ccad8307448b4d57e47810c945f127fef768357e56cdef2 bertosebind_new_runs/executed/remote/gifflar_launch.py +e391584ec821c1e86916c6f8c14a6571a550034fd246e1dc0e7d7b3b6d4dbd7e bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml +35d0ef06a1b9725233ed1e58c74101b7e6a555da48165ed57c9bd71bb5e77315 bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv +0dae829566b87d0dd00613343bc5a0c49fb1107c0f4834327d8cca71b8932389 bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml +fd6f39dd3bef9326bc1f583bf07a1f9b8f02f846630a0c58c66c7bae70456d59 bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv +fb07ac7cfcb63c4dd77c7493f4a518e11d268fd5e8d4cf6a849c31552e48369a bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml +1d9e1b8c6fff12f8603ce8f7e58189da0ae8580e72d3c5bf5ff3893a4f9bce2f bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv +4902e83edaa137f55f5fe4f32f32068e94a3f4832630b284048c22b8a099dca6 bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml +b911e06e11968f9d8655ab69619f33a8878759e497eb44498432c341dc6fbdd1 bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv +75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml +346d480fa44e31a5a486bfa99c136cc5ddfee27a197194b7fac289de9ba55665 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv +75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml +6a42d5cf20bf64a7b027660beca902ec84a80a1beb73e8aec1e4eb26fbb7c913 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv +75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/hparams.yaml +a71483c34b9d9cd904a6fe241f88af3e30bb3e100a15d666def5b06e4a5c0431 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/metrics.csv +2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml +faee86ceadc7e1dbe6835d44aef8c5d4f810a2cbe224e13202154b52dab92be3 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv +2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml +ed66bf0654eeaabf3b4f5f92e1295abc53a0155095160092ffb47826ff385d1a bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/metrics.csv +2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml +127b095cc67faf26378a247dc7345de56d331537dad375990ed319f684fbde27 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/metrics.csv +2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml +eee99377078178660db1f12c2700b0c46c9d8120db5f445a8d71d3f584cc9fcd bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/metrics.csv +0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml +47b51d96993782f3c9e6117722176941bd2c6d571200d160e28aa654c97c6356 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv +0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml +89d056126636c1fd1fa44d27ecfd57040a9bfc9eec2a76104da0ae07d01680b3 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv +0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/hparams.yaml +c066cdbf7827bdec2f87c15bf95a42e0a23b511bf03338482e4d2b20c149336b bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/metrics.csv +1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml +fe5d987579ac234e8f21bb70e642177e9eccb69493564b7c5895e6abd51f4dc2 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv +1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml +0ecfee6421a63cee0f0537fdb311e44b87227421f637816a0a3ccfd132763d16 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv +1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml +0d313e8557cb13577b34c8e94e0f2c887c11cfa6da6ca36ab2aa5f9d1cc10f22 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/metrics.csv +1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml +5ef2b9552f452e4218b9728c0ed57f7a14ec5068d065c7223e2c6e566e5dafd2 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/metrics.csv +781862ff668231f3501e892c7be567e4e3a16709f6b433e97edeadd60ec1e8bf bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml +e92266239d6445a0de886e5081e433632c6719719f6d536ad31e98045160fcea bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv +781862ff668231f3501e892c7be567e4e3a16709f6b433e97edeadd60ec1e8bf bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml +929a3396f429527836db8368e7908024bf69766e0567636b1f24df8c1c06ea42 bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv +f7852d23330d3b55e46eec193b3fe411306ea59349de6fa53273294d893dce1c bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml +1e68c5af1f9c7fe0f1c85d9f3d49fa1104bf3d4c768014154316ee27b94a3cc3 bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv +987afb2ba2360ff7f2a5a94943d064a7a3e5c902b53e445bc59bc291241e9d9a bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml +e937607ecc6a7058664faab71728c58ef7a9bba8f6985082bca5d565aef6ec7e bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv +987afb2ba2360ff7f2a5a94943d064a7a3e5c902b53e445bc59bc291241e9d9a bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml +eb420f0ea03bce2075ad4eac9237862ccbecb2c37c02d162d860516f4739b280 bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv +22796804655424d5977b04b0b171d4da9fba18896eb4928842c4fad6bb7911dd bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml +30f0105da3f2c579a8261a30ed6c3fcc8308cf9ebc2068f0e71168567e919922 bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv +22796804655424d5977b04b0b171d4da9fba18896eb4928842c4fad6bb7911dd bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml +168da3dcbf6ca795bb75ec67b9fc567788637c25875b766cc76b441825e6020c bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv +ef833104d5eecd273df7d9f7c39bae4a216b015bde15978ea716f1f864874de4 bertosebind_new_runs/executed/remote/gifflar_score_macro.py +578635213e1a3eddd61438a6249f14e1a5d2487267286fc459eb77972808e225 bertosebind_new_runs/executed/remote/gifflar_score_macro_seeds.py +f88bcf303685ea6a075747a12eafa7df041909b9b455d80ea98c2b536aed0de8 bertosebind_new_runs/executed/remote/gifflar_score_perrow.py +e65e21b8c9c9bd0291a034852f7ab47f826e1f51448d9ea8439b5eb23ed8eb98 bertosebind_new_runs/executed/remote/logs/aff_attr_motif_16596807.out +dadfe2c408938645b4138bb011719affdaebe7098060f66354df56da71d0a146 bertosebind_new_runs/executed/remote/logs/aff_b4_grep_16604967.out +79eb29df46c44942a2a6ac4313789ebc29e1672bec4512c4f965be5ebb739cc9 bertosebind_new_runs/executed/remote/logs/aff_b4_s3_16604914.out +5d93f96fb6e537c9b802fd1b2d9fe25df41a19800f85ea860246274d2e897d71 bertosebind_new_runs/executed/remote/logs/aff_b4_s3r2_16605803.out +6c486b37a642549a8dcf924eabd52e2660d88a6ada53ba05aecb91937fd98626 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_0.err +7832596dfd62832aadeed39c1acca59643f00ec8dbe812730b49bd1b2ca5150b bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_0.out +bf5e3ff79c6b942dca7f35dcb85d0f32081b03875cb4640022fab29dff833b11 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_1.err +134b045efbf1f560d0d41fa702ff53b6369fd38235fcef55ca8aaa4615698fed bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_1.out +d911a9619dee68a9fc982bb3db253b8e72f12dc1c06d2bc434556211909b2719 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_10.err +c079926adcc0d2bce5b591f870208dcd2bef2ea3029aee8950bf0ce44c1105ea bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_10.out +5024c4160aeeccd212930b0d959ed0bab4dd7bf593b61b26decd78c7513aa638 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_11.err +4d110e939761ff4d8c7938c754e182d2c09ede84c8360d10ce18a04280dafea6 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_11.out +d9383fa7e0469a436e08d24f4f9af31c1a6fb9ebb5e115843b53e2b2ded612f1 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_2.err +0bbeab27824eeffbbfe5cf04317d1795b1f8f02d4c5ad9b7dbc23e159a823940 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_2.out +735f42f273046b3af0374283927429fa75a1b7a8b66d6b205a20e4e1cfd59eed bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_3.err +dcdbc088e7945d0f63803ac95aed81f3f8c8d25c97dd760df269921a08bacae7 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_3.out +98912251710582e65eaed2ba01ee184d957d177ec31e30969939b4ef0962a2bf bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_4.err +b1febe3591a887bd63d7bb607536ce17bdab51eb9db9a8b8c3d9d5ff77aca1c2 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_4.out +cbb38c7fc50100cfa44cdf9b64de3df9a002613c62d8489b9d3db301406712c7 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_5.err +a1b8f17ba63285c54d42ad49ce61bf8356ac4dfe279de8b65f687304783bdf55 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_5.out +8ec18cd103ee2f80b2bacc8660a53588ed6313dbdc2455fe87fb5cdac6d30ef1 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_6.err +18050c22347d3a2900b0d15cd7f2b97c1f6028ff27e5e060fc33c8308851b358 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_6.out +1a1baefb3f9d8bae9c38975310f96004470e75bed27b32b5273b31a9baca05f5 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_7.err +8869a90d89089a6f26c7d88b1a389630930c35adff10016a015bc5bb331308b7 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_7.out +01b633582a3ed13728f688fde16693926778896ba0952506cce66072f600f354 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_8.err +8f468cb20588f01bc0794c43ea69d5fa78627f4e35ef7ecdb7ffbcd3266c78c3 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_8.out +a3ea46d3bd9191b9bbd49627cbfdac0dee312230e5e1ed93016f98f8786b94ba bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_9.err +313f8c5e3999dfa75ae508fd57d0d033a00b40cdf2b794cb4c32fb0a901b53bb bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_9.out +53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_0.err +19bb18892da4f9174e308bd42908a6e6d383001edd75c9ad482eef111b5bbb31 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_0.out +53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_1.err +152af1228aa39534d68470023321d4350bb2ea4b997bfd0bf38efbbeb92bad8b bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_1.out +53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_10.err +d842f047adc16782a9724406ecab07aa67fe3ad853f5d0c8bee73cb63d129782 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_10.out +53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_11.err +922dfe72fd457b50a6c468db266827346ab1173381458ad61e21ceb5a0c8736c bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_11.out +53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_2.err +2b008f6ae0f5554b9841582ded12a01558218558d8b7748899e94a0499d8caaf bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_2.out +53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_3.err +c1d325125ee0463b230e5ac347c45a117ebc1a1686393d9d7bd63dd7c9a8a8d4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_3.out +53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_4.err +939f30920d3d4a772d8736c945f6e39dc949cde64cc7b9b9e0116e7b45f4f895 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_4.out +53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_5.err +7817d9b5c087d542f2c0659726a66532091a24c9b05edb04196a756291dd5784 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_5.out +53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_6.err +4283aa1d699582d4766ca394cf2d9c4b046ce8247b5cef0f8250c424329138a2 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_6.out +53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_7.err +eb0257132cbd79d1a3a84bec543183b7bbdaceaaaefc85c988368d70d4146322 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_7.out +53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_8.err +523b5ac11259832265dab5c4e08d837f3fe7e4780048a5a4af1f513f6b8c3d4a bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_8.out +53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_9.err +40ef3d8f12ba723cfe0e845ec72a960dbd32c8bc5baa3013f570e1c27a6431b6 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_9.out +06fbfcd2f820fc4621d35c16dcd6bbece93ea68b96d417d8b7bd2ce3ea104cdb bertosebind_new_runs/executed/remote/manifest.json +bf602abb05eeb3b0203766d9d1bc462579c181bc3418d762f6d02d5f36e8a230 bertosebind_new_runs/executed/remote/train_lgi.py +9d13452309d64f138705657334b74738eaf167c9faff835d024582e0e98c0af8 bertosebind_new_runs/inputs/current_glycan_sets/doubly_cold_exposure_join.csv +e5eebf2072779d7001dabd3981237025be37eee6f19a5b109b00ce4b3e776e09 bertosebind_new_runs/inputs/current_glycan_sets/doubly_cold_scored_glycans.csv +4d101cc92685c63ecca99cfad2c1bc46c73c77b1e565bd686bde14ee0d020886 bertosebind_new_runs/inputs/current_glycan_sets/glycan_cold_exposure_join.csv +0faab973a6ee5e5bf712983d51fad9f746e34edcbe5342574d45933bba62f48a bertosebind_new_runs/inputs/current_glycan_sets/glycan_cold_scored_glycans.csv +7655d9d080df7cb5dc748b7d9721037fbec67c04cf837e4724f0afba7e7a4d71 bertosebind_new_runs/inputs/current_glycan_sets/manifest.json +08ceef347f61012e0baab4daf1472122dc80335c6ea02fe084098c055a3e3e30 bertosebind_new_runs/inputs/current_glycan_sets/protein_cold_exposure_join.csv +f35d6088903e993f46adee07806e577456599d9814f4f43e40efdf3d8ddf6c46 bertosebind_new_runs/inputs/current_glycan_sets/protein_cold_scored_glycans.csv +56d04a5a985d2bd96067e5c1a1e7acd67c5f76ae05c17831bc5949cb6bee26ab bertosebind_new_runs/package_manifest.json +924765b90a840277c5ed9dd6594a8ded2d5f7add5b138a9af1adf89bbb46cbcc bertosebind_new_runs/protocol/amendment_excerpts_20260925_26.md +04dea299feb3ac0840ff5db7471381ad3f1cf531653bf6aeb9825005236d2f0b bertosebind_new_runs/protocol/original_20260910.md +11014b5f0972c23b7225c4202f2254b444109b8105563d968e9c8f4534061ff1 bertosebind_new_runs/provenance/bootstrap_anatomy_audit.json +d2812e72a7befc1bdb08465189d2fed035ae725142c1cf978a578e0add72e94d bertosebind_new_runs/provenance/bootstrap_code_audit.json +d6e36605873c587028c6dab2dde8093c6e4e33df53ebc27f1d6e3c6b4de14991 bertosebind_new_runs/provenance/bootstrap_exact_input_manifest.json +30a70a1703183b50fa1c10986c065471513981fac1e3e69f9c7ad649aeecb16a bertosebind_new_runs/provenance/current_pretraining_exposure_audit.json +ff65b38435040ba2f5987e0c78ecc0fafc4604341b9bc094513d47cb343db023 bertosebind_new_runs/provenance/exposure_portability.patch +6649cef7a00096ba2981c611a4c6432be93300e3bb439cd543a692cbb40a15af bertosebind_new_runs/provenance/gifflar_scorer_diff.txt +7d24cac24a37583fddac7d91c73e22ea6d4a022194ac213ab354f9e9831b1084 bertosebind_new_runs/provenance/protein_gifflar_audit.json +9d2e628a789a46a69333c24550d2a150166aebed382880c2d0a67fbd43124eaa bertosebind_new_runs/provenance/protein_gifflar_verified_numbers.json +4b49c6f8f6c9953cee46ff2f6c47e1bb68692c9b58984973b3d8666648999f62 bertosebind_new_runs/reproduce_summary.py +99acda4c8365d691c16de3e032e225de05cee38cff063a772bf9eaec2067328f bertosebind_new_runs/requirements.txt +0dff08537f0cd5a1ad40562537c48546d3d4f3858a75b2ab2d3729b22a5dfe91 bertosebind_new_runs/results/doubly_cold_anatomy.json +4186c66c13fd05d62d83a10df2a5761b2e29ded502660c12cb450836f9881496 bertosebind_new_runs/results/doubly_cold_per_assay.csv +2c494ac1351d4ff63828139eac004c0047dc3259d62fd10334d5a740cab9182f bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_gifflarESM_s43.json +82173016b893cb2913e90e99feea5f6f4ff22cff9e1aff0fe7dc136161c7f627 bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_gifflarESM_s44.json +ac58a83969a0ffb860cf1a33a472f4cb5b3e14f25097c3ba909f7555f65aa589 bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_sweetnetESM_s43.json +d2d2d73c834a2fcca7b8c22fd6ce91907f18866443628c2c54f8b8ec04477803 bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_sweetnetESM_s44.json +7b0a01a1acc7e2ca80a3de9aaab02941942ead519e6661abec6c44c7fa5fd079 bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_gifflarESM_s43.json +f2e40d306b767e6949c02304077a08398dc16ac19d08d94937f7dc49abd7cc24 bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_gifflarESM_s44.json +e13c8021d6e94b3bd6cb4ef00d7456c182449f57c4b1356256e011805a6efdbf bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_sweetnetESM_s43.json +d274d35c9a0ba25e4597cdb8c01001f4f7ff7760aabfe7c8a00b84a70b74252f bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_sweetnetESM_s44.json +2208056d5303fda27c5b541eed1c6f64cb03de1c10abd2868d4ce55d1bdb475c bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_gifflarESM_s43.json +c831378d73c3c2c9456be5ff9ff05acc34b64815b056c5df21bef2078a415393 bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_gifflarESM_s44.json +121a30d0de568217e722036cf25ba4ef61128398fde3466fc8b2f60f096722c7 bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_sweetnetESM_s43.json +3d29ac377491db5d952f6066228fe4099f99db0e2fbaa80063ee429fc28e0a28 bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_sweetnetESM_s44.json +4fd80f7396aa9803602fd62bd82ec3e98e1f937b46e1057cb26ffa56ea6c93f0 bertosebind_new_runs/results/protein_probe.json +80aae521be2bdc5ac2337ea733f7a8ade028f788499d7d44ff1b6e7389639c8d code_inventory.tsv +903d14d8bafc9ae2aa968a74ad4b9d31396c598624fe05e2acb1814cb60bd60e examples/smoke_affinose.py +ff95ff2a7707940b849a44259cdf356f66dd5b0351faf4e400feac6666afd9af examples/smoke_models.py +75d530c95c218fafb25e844865dd3884737d11b23c4cfdc121226549923fecdb figures/Figure_style.md +784b9b6472c10498b5aaef3f5bcc43f23bde0805135c6b0265d851aa6e342c1e figures/README.md +3a6fcbfe8388f494ad542a24a6d4d66c8315af62e82627a2429518fbe1b2f9bd figures/ablation_figure9/README.md +a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b figures/ablation_figure9/nature-bpg-palette.json +179bf3ddb15842c726a90a9cf373c7861409c8f823bae344a0b621fa77ed51f9 figures/ablation_figure9/plot_data.json +9494d4ea185f98082bf6197cf6c244035c3cb8c811527c922357fc28ca381149 figures/bootstrap_figure13/README.md +832849e584499907aa66540616d52ffa192538bf9353f19c4f463f48694a4806 figures/bootstrap_figure13/build_figure13.py +6a87e6a8abc926f41ca13b1bb6c81cbf9ea1d04b06e8f39bfdaf847ce55ba235 figures/bootstrap_figure13/inputs/affinose_b4_step3_bootstrap_r2_20260927.json +a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b figures/bootstrap_figure13/inputs/nature-bpg-palette.json +b262b420db6a5d18712c985b7d27b0d33dbdcbb2e1b3961bdf6c06110ba107ae figures/build_bpe_figure3.py +0ceff115647c4921165805fb25fb5ec5451e8ac1264a9140b3db8591f30f66d2 figures/build_corpus_composition_figure.py +6053ddca0892325752308544a39da61d427de959f6559ab771902b0c30c7c103 figures/build_grey_seal_figure5.py +69fd3be7f723c7dd229762aa9fba7f2413ed446a8ac7e703ef45e90b3f29223e figures/build_submission_figures.py +bb8cfaa1ec26c36f22b27bb3b19d61dbf98da1fd42e6889e408f4dd9d17eda31 figures/build_supplement_figure1.py +9086813c19cb26d23e1f7d2a75b1ef80ed29d4d087822fa9e95ac40821a32896 figures/build_supplement_presentation.py +9b604ffc6435ed8d0f20c0d1ba66cb5cfa43ecf503226bf261ce1b4d8a4deae2 figures/build_supplementary_figure9.py +47a79341f902cb286e2517056ae698c6cc35b0641ffa5a09ad7fde28bc429004 figures/build_taxonomy_figure11.py +e964dc2d021382d5950008eceef05d001d640de608b0d86ce37701db5de8379e figures/build_token_length_figure2.py +bc7e195afef8b5fa7c3effabc7253434d6a5b77b428644a909a1da734def4c5c figures/build_training_coverage_figure6.py +bb948ed57ebbab93875926c3be782996050e8728d3e73b9e6685916b725ee8be figures/contrastive_figure12/README.md +715df862316031c39bbccc5339d442520863d4f99b9f3a19d8e1e8594db6281f figures/contrastive_figure12/build_figure12.py +a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b figures/contrastive_figure12/inputs/nature-bpg-palette.json +d732e76c28cd3d741fad99636a8937b464f1efa190d26e7005146e6c88b1feb3 figures/contrastive_figure12/inputs/review_contrastive_fit_values.csv +5bfd6352e60158fe3a09c2a3228a7fffc4926780aa320b5e205ef276db3e4113 figures/contrastive_figure12/inputs/review_contrastive_paired_summary.csv +dc90a817bc54ac310a73298f60d03fc30eaccd724f4676eb826301dd85470acc figures/contrastive_figure12/inputs/review_contrastive_taxonomy_summary.csv +a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b figures/figure3_inputs/nature-bpg-palette.json +bd530abacb61f3d6cffda8d1e7e6112f9261fd0a761e594fddceb5c615b9497b figures/figure3_inputs/partition_count_flow.csv +918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b figures/figure3_inputs/review_bpe_vocabulary.json +c885944b4ebce9b08c99318ce51c81b7648309c49ba5244ad0345b794429f151 figures/figure3_inputs/source_example.json +6ee3cb8ac319ed266a0a18e39d861baff7e59b80b1cd34f5f6bb54f27e282921 figures/final_iar/README.md +3edb3a802895beecbf2d09086b575a9ecb6b6cbfe5548dd6d22358ca30b02644 figures/final_iar/build_final_iar_figures.py +259fdc68a39b415c4ec114fbd6872ceaccaf09327d1fde958390071a5a94af2a figures/final_iar/inputs/baselines_same_cases.csv +d5b7fd634677ea22ea27670649ea30636ef6c98daedc8592cd3f5d7b56beb9c0 figures/final_iar/inputs/final_iar_summary.json +a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b figures/final_iar/inputs/nature-bpg-palette.json +0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419 figures/final_iar/inputs/run_manifest.json +61136a3d00e0184db8fbf4db47fa480766e7dadbb4f81d278df27b1fd0a0613c figures/model_variants_figure10/README.md +c24f16be487bdef403afd9b6803334a4f5a6739f4716b16ec5290ee037a782bb figures/model_variants_figure10/build_model_variants_figure10.py +53fdfc11a75e3aaf39b78a9c59d90e206b0726579440d03df2d5cb5708249ebf figures/model_variants_figure10/inputs/review_weight_policy_ranks.csv +9b35cb9ab5056c0548eea944f8472906a8cb36e2a7adf5cf3135268c675619b7 figures/model_variants_figure10/inputs/review_weight_policy_sensitivity.csv +dd96f6ec2247a918a89873dd031be5f738bcd870056e9b98cb7a1e2c85e158e8 figures/taxonomy_figure11/README.md +a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b figures/taxonomy_figure11/nature-bpg-palette.json +04670f06e3459608d7a43da767531544421d4da1a6125376edc3939dba951d1f iar_completion/README.md +8f7e1027e67222d49eb9e3c12fcdff083005d182583990c08c54b7ac3c11040e iar_completion/SHA256SUMS +a03990a02a1737de05a7fa1739164e84fa6a0a4170ebaa65317a9f3c2f16c0b0 iar_completion/assets/linkage_readout.pt +37514cb79322719772b5c14a5795f00a78f3275f3315d5b3b674ee97127ca953 iar_completion/check_package.py +bbf016ce2f1a7dc82940be28397cbe8083da7ad0f5f525b1cf7345fd42a5758d iar_completion/model_metadata.json +d406620e3b0c070dff4d6fb6e0c57effce848a9ca5b3dc3de705d65c49ac0961 iar_completion/originals/run_all_training.sbatch +5acafc45244a0bf9a8489794f8a39f956622cf50594d87eb2eaa04502589fcb5 iar_completion/originals/wa3_final_iar_readout.py +72f8583bf32799ba29c09829d138900c0cbb589f73bd278f389da6fa8a786730 iar_completion/originals/wa3_final_iar_readout_all.py +679499406106611dc2c70240a3c14c9b94311bc03a7811d3dae807c58aef4ef8 iar_completion/originals/wa3_linkage_diagnosis.py +0ebc629778c854621f485ceb4f5f11090e84ac9171d52270fcc90b6b07d6fe7f iar_completion/originals/wa3_linkage_probe.py +0da5f24799afc8978b88c85ea7856deb8c641ebae319760e88539c93a4eb3a86 iar_completion/originals/wa3_same_test.py +c6e9506dbf97752aa248e325e75acf3abf63495054bcac68d48602967379531d iar_completion/originals/wa3_typed_strict_test.py +1341b0051fefaf54b4113d7dda5e408540844d12a9275f9a73607c416f35928d iar_completion/originals/wa3_typed_test.py +259fdc68a39b415c4ec114fbd6872ceaccaf09327d1fde958390071a5a94af2a iar_completion/provenance/final_run/baselines_same_cases.csv +d5b7fd634677ea22ea27670649ea30636ef6c98daedc8592cd3f5d7b56beb9c0 iar_completion/provenance/final_run/final_iar_summary.json +0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419 iar_completion/provenance/final_run/run_manifest.json +a615d9a889c7a62c19d05a4d07d66d9e743fbfb9e37e4d646c889490d297e492 iar_completion/provenance/heldout_masking_wa3_final_iar_readout_20260926_run_manifest.json +0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419 iar_completion/provenance/heldout_masking_wa3_final_iar_readout_all_20260927_run_manifest.json +933ef4d07c380bd4322814acff135e207e00db36197c3dc543214b24cb5d554e iar_completion/provenance/heldout_masking_wa3_linkage_diagnosis_20260925_run_manifest.json +3f713f4e074cbb068264173a8fb0ec99813665ad1b23fdea507f7389071cb04b iar_completion/provenance/heldout_masking_wa3_same_test_run_manifest.json +b3cf90dc772f206dc386a3a92d96e43d7a6c1de4147bc7cc501599730d31807f iar_completion/provenance/heldout_masking_wa3_typed_20260924_run_manifest.json +4a13b9faecc329257c2aa08fd6734a8b6c02837d0b230b0f659fd00602832c75 iar_completion/provenance/heldout_masking_wa3_typed_strict_20260925_run_manifest.json +9c957fe6b76da503c909ac4e3a0d70cf4ea1fd6da34a3aa6573bac4722d4c62d iar_completion/provenance/local_checks.json +8af8ed8b6124f26072d6041deb0e6966c13c149926f5bd720b714884cba6801e iar_completion/provenance/required_input_hashes.json +2cb3a3f4e8b1d37dd3ad0234996d546f34ab48231bf69247ffb6ace0651a4a69 iar_completion/provenance/source_inventory.json +42464d76c743a302bae79ced6b09af9657444c6f977535b5de49dcf59a5a8a90 iar_completion/readout.py +9ef74c17ef3ffacde3f0fc862f9844757bacfffa55b3ac9e7e6a6cca43f5843c iar_completion/requirements.txt +3392850a98f1739e3eec8434f42c26f3fad2d3da9fc815a17dd2790aa3b0ff98 iar_completion/runtime_dependencies.json +a791b8f4bbda75317f41afb34d62fe518448f4d5d90db0b852e2b0d0af5e83a6 iar_completion/runtime_snapshot/java/review_A5WurcsArrayTreeAudit.java +bc38e44e66daed7ec04f7c7907a13509aac125a8a09c97d9972725ab4278edaf iar_completion/runtime_snapshot/java/review_MolWURCS.jar +5449f9276a7b952adf087468c874bb13c7295062cce7d1afb13fdea78ace7f37 iar_completion/runtime_snapshot/java/review_wurcsframework-1.3.1.jar +0bc54399362945601bcfd403441fc80968d173200dd0561f57568b2053a94839 iar_completion/runtime_snapshot/project/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py +c68cd003370b2dcdb162f848f766e4e62f2653c6c38d205f8cbe53a9aabe2d74 iar_completion/runtime_snapshot/project/data/bpe_ambiguity_tokens.json +6a572afdf53f1494ab96c896876b824ca7ea749777352606aa9f96bf270ceecc iar_completion/runtime_snapshot/project/data/bpe_vocabulary_clean.json +22d2aad45b978988c9e26bc9400016014ee825cc6207377385a8cd74f3c88f2b iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_ambiguity_tokens.json +918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json +10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04 iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py +f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7 iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py +6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4 iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py +de8c3237b858b640ee9fbf4dac34864c54b6dac80bc89f346a44c774254289a4 iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/__init__.py +b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/glycan_bert.py +8e06c32f4e844c3c66f146fd15a075472808a0720c892d0b9683dfd32f15ef0c iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/multimodal_glycan_bert_v3.py +f0c8efda7a12942b4c6359792d6ee9417e6a9ec0eb04623ad17b4772430270b5 iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/training/ipa_bpe_distillation.py +8d05a4048e200625694ff9a36f50af89b845fd0d38ba8034a97a710e7ad3dce2 iar_completion/runtime_snapshot/project/writing/glycangt_heldout_ipa_validation/cluster/heldout_ipa_eval.py +cfce20d28291c8b5868d35386990037415090202dd823bdfd73038456cc65557 iar_completion/runtime_snapshot/schema/classify.py +704ed130bdcce94a7af7ce3e37654705f709b8526f632907ef794451c6ef7f30 iar_completion/runtime_snapshot/schema/pipelib.py +a4b66d2ed429ad6516646256a84173082b2fca6b779baa6e4ff93586a81a5c2b provenance/WA3_checkpoint_index.json +b8b05510e97f6b94ca5e0d1465eba034724d7ddcc405aa405db09c4c29fc768b provenance/WA3_final_receipt.json +670cfcbcfe89e0729bb75f122cff8c7100c24d39ef775c69421d4bb820654056 provenance/affinose_arms_on_test_20260909.json +a291a8e8f2b77c7955b5346aa52289afc520a0b5181d62eb0dfa2c096bd6bbb8 provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/receipt.json +fdd520b70e38d0e6bc112118adad89cf209278614645b47e219341736bf99599 provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/results.json +29b68fb30127700fa55942d5cc4c237f8bf15c2d0c883192b62698d811e71c51 provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/receipt.json +54918a535b86b01590bab11c78ff4c354c106ca78a384446eb79038b0df666af provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/results.json +a380534df6f877c212a2c7dbce577511e282537bbff9ad5d7ac3e186f1cc5633 provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/receipt.json +a732a56ddc81fc41b02dde8f56d852929ec8eefa12524ed9410a09361f267544 provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/results.json +9344a727416db1368c45a0ddad962a12130e10f03944a5142874f72ba5311297 provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/receipt.json +a530b2fac81a72d99674906253897a1e3eecca4ee17e83c3a27ed409a3411877 provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/results.json +068bb72cc2fc0231f3a9f729ac78f1a6340a7088ea86a60449ebe63dcfbd794d provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/receipt.json +a21307bb48db62270792f990541bac1c2728feb34063f4b2009e2f6c7d8a7e4c provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/results.json +3044b56619b1bb83063070624b02bfaa64c952c1da76a80051bb62bb26098395 provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/receipt.json +42ffeb2f81acbae80df3284300d0213b52918b90d3b186dbbd1f074800af75f0 provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/results.json +07a919272c928f9630f4d70a73cf1aa91a327e2c9597cf582814c5386b6f24cc provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/receipt.json +ef5a0b42f15f23a473d46198bd39dc17176add75a1bf76cd708d5b595d552b6e provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/results.json +c3e3028a05cf7f5b58883d9485bcd7a7e0ba5d05265f4503b8bad09e307c1480 provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/receipt.json +f62ddffaffae54f91e4f921fa235741df4023e94b47c2c90f3e158b7c4cd9858 provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/results.json +6f5cbc9e19a45b4e9c8d33e7f4a82e41ef610b5040175852d3c05ea172995d4f provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/receipt.json +9f0a6dc5b89f58603fb368e754da90001a987016ed4d9ab425420703aeb44d9e provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/results.json +f4fb099a7dbe229450d2ca337d213555203dc69dd67f1e4b2cca227baca3d701 provenance/affinose_input_hashes_moA_glycan_20260908.json +00c53175abc949336bf495c796dc9c779af2109227bc6f351433356129d85663 provenance/affinose_input_hashes_moB_protein_20260908.json +3d3c6fd5c39fe2f1ce37ce5ba47b842fa193b716c08227678d68cdcc7e996c4e provenance/affinose_input_hashes_moC_doubly_20260908.json +ebf5e35b60640944bf3d03955f10da2c40cd5075a85bf0e3a4c6210f97ed85a6 provenance/affinose_recipe.json +9c14d2981a11bef92ef230e9848f9876d941b290f2c70848e739a2795bb6feea provenance/artifact_locations.tsv +4dfa51299e99a23add6cdfe5380403d4504a207e2b6522ea86cc50ba1cd2cb74 provenance/candidate_affinose_input_hashes_moA_glycan_20260908.json +48768c773a262864e7a5104732d1e37971be2581058dec7e6f8778d05483965c provenance/candidate_affinose_input_hashes_moB_protein_20260908.json +efbfbea3df98ff7b20dadae530aaf5e3cdadc7216a60a97495b4344e39ef1934 provenance/candidate_affinose_input_hashes_moC_doubly_20260908.json +2ce6f4a60fdb0bc87d69e270bd724fbccbfae6239579f3c17c0c4d8de05b3d94 provenance/candidate_portability.patch +fc689486dc297277e32480d52d9abb69549520c085101bd406ef3ed6c2fad86b provenance/local_test_environment.json +7202cdde019556a7babb3459ae04da8ab5ecb5edbdfde2b74c4a675ed1c9ff43 provenance/moconf_cells.tsv +e6f1be53ab77ad80ea274f80bd11369bb4efe3836b6119c58283ec12af224752 provenance/mofull_cells.tsv +67b5ade1b857e789173128939c6baa4687354bb1d640d8fd3b40332b5956ec72 provenance/motif_cells.tsv +dc42f4cdd76cc2c49fedfe6b8b8ef40b5915ee70803c9cec5ec0b0573256f815 provenance/score_arms_on_test_historical.py +b7cb8a39e167f2cc9e35476dcdcad56320b02c1898d13db3236a41bbb2ed4852 provenance/training_v8_before_resume_load_fix.py +be8f4ae30ae2fbd8f91de0e5db98de3044213e24587717775c31df37e2272dbb provenance/wa3_config.json +48da67d3a47fb1155389fccdd9022b825b2eeefb60e28260633ec4c2fe00a33f requirements.txt +428d6c855cd9a6a1988581f9d71bd85a130ceb7b803e6190b3590f5e40ef426c score_predictions.py diff --git a/releases/2026-10-02/provenance/submission_code_inventory.tsv b/releases/2026-10-02/provenance/submission_code_inventory.tsv new file mode 100644 index 0000000000000000000000000000000000000000..d7721b40d189c750150a8da0356c82e1c97d1704 --- /dev/null +++ b/releases/2026-10-02/provenance/submission_code_inventory.tsv @@ -0,0 +1,469 @@ +original_path original_sha256 output_path output_sha256 status +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/06_code/README.md 6d38f8385f207868f8b7a331f14abdeb65a1c55a18c88bcc2eaa13f40c1f2ebd README.md 6fc928f84838ac82af228d744fadb8be670d631afd5ca84ff84d0847b140d8fd staged documentation/manifest; no scientific source changes +/work/ratul1/supantha/Bertint/model_motif_20260908/a1111_encoder_adapter.py 52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98 affinose/a1111_encoder_adapter.py 52c790c24e10061b5890260aad39cefdb6c2c615b8b9c167cc23d86393e41d98 verified remote source; candidate changes tracked below +/work/ratul1/supantha/Bertint/model_motif_20260908/a5_tokenizer_shim.py 771759e04c6c8aabdb928c7a2396fc07af3aefb917b857e07c5c2a0dd77ae96e affinose/a5_tokenizer_shim.py c4bbe5c1a0286b319f0b71c87669b4f9cfe781051019fb02a98b5d7e208b8b2b candidate portability edit only; original preserved in harvest +/work/ratul1/supantha/Bertint/model_motif_20260908/bertint_v8.py 4df5fcf330bbb4d7d766a141179a5fea76a4e75fc9eef0e403cb567d97dd4564 affinose/bertint_v8.py 7fa8d6fe95db3ccecefdd396931d6354442800cd5284cabf519e3425cc388883 candidate portability edit only; original preserved in harvest +/work/ratul1/supantha/Bertint/model_motif_20260908/dataset_v8.py 0cafa57d2b468e1c5ac9d0e9285565de05500fc78ebac467cd09aeceb0e1b6c4 affinose/dataset_v8.py b6c2483e2975c4c7d7dfde6b2979c8e1e862564279c7ebba4e65b504776b43df candidate portability edit only; original preserved in harvest +/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py 6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949 affinose/training_v8.py 6f2ac53d3af2002a8eb42f3b4dc046659a261cdf6fe5eef158724c3527610949 verified remote source; candidate changes tracked below +generated during IAR reporting integration benchmark_exclusion/MANIFEST_SHA256.tsv 8452e3ac521af1d3ea24bb5a99e02a930d913fc96394e5610fe8b86e19ea89ec generated reporting support; recorded inputs preserved +generated during IAR reporting integration benchmark_exclusion/README.md 96567c3b9c3e254bceb6bd82e43c1f252b987ced58dad41d3b4406b9f58a76ec generated reporting support; recorded inputs preserved +generated during IAR reporting integration benchmark_exclusion/SHA256SUMS 3d37d993b1cd4135ca9fe90feca856b73907d725516ea652425ca24060769698 generated reporting support; recorded inputs preserved +generated during IAR reporting integration benchmark_exclusion/code_inventory.tsv e2e0dfa7d133362146de10ba3dd774e9a3e186088f976189b0aae9d26b442bc4 generated reporting support; recorded inputs preserved +generated during IAR reporting integration benchmark_exclusion/required_successor_inputs.json 050c0af96f133ded3139baf6dfea594f91c6659f411dc25fc06d5847951b2f0c generated reporting support; recorded inputs preserved +generated during IAR reporting integration benchmark_exclusion/source_verification.json 0507537ca8ee05b249f9ab3f3fa09de94b7acc633b91235f2778ae07659096bd generated reporting support; recorded inputs preserved +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glytoucan/scripts/build_connection_level_support_audit.py 3d598a249db90c928f8a317923ba5d37eebbc1f63383a2c39e0541f20c31ccac benchmark_exclusion/writing/review/glytoucan/scripts/build_connection_level_support_audit.py 3d598a249db90c928f8a317923ba5d37eebbc1f63383a2c39e0541f20c31ccac byte-identical local exclusion source; frozen inputs required for replay +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/scripts/build_p1_direct_local_neighbor_audit_20260710.py a9160769759c1df56238caad6a9f4ed6ec68477d44435ebbc81d64bbf541b64c benchmark_exclusion/writing/review/multimodal/scripts/build_p1_direct_local_neighbor_audit_20260710.py a9160769759c1df56238caad6a9f4ed6ec68477d44435ebbc81d64bbf541b64c byte-identical local exclusion source; frozen inputs required for replay +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/scripts/build_p1_non_iar_exact_graph_authority_20260711.py 0f88f53e22d0c068a87a09508a9d286e4982eddcb4e2154e63b2ca25339ece69 benchmark_exclusion/writing/review/multimodal/scripts/build_p1_non_iar_exact_graph_authority_20260711.py 0f88f53e22d0c068a87a09508a9d286e4982eddcb4e2154e63b2ca25339ece69 byte-identical local exclusion source; frozen inputs required for replay +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/scripts/build_review_a5_non_iar_later_role_successor_20260720.py 2c8821586df1caa53556b4cc14e6cd7507af4830aa8a149657571e0455eb6853 benchmark_exclusion/writing/review/multimodal/scripts/build_review_a5_non_iar_later_role_successor_20260720.py 2c8821586df1caa53556b4cc14e6cd7507af4830aa8a149657571e0455eb6853 byte-identical local exclusion source; frozen inputs required for replay +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/scripts/repartition_a5_non_iar_80_20_20260712.py cd86a0a0b228c32e51ec73490711e37da3e6c9fdf9e64e980b7222b5312484aa benchmark_exclusion/writing/review/multimodal/scripts/repartition_a5_non_iar_80_20_20260712.py cd86a0a0b228c32e51ec73490711e37da3e6c9fdf9e64e980b7222b5312484aa byte-identical local exclusion source; frozen inputs required for replay +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/tests/test_build_review_a5_non_iar_later_role_successor_20260720.py 966889118fa567729e1959750b1601018ba117aed0bfad3508005ba6b1896a08 benchmark_exclusion/writing/review/multimodal/tests/test_build_review_a5_non_iar_later_role_successor_20260720.py 966889118fa567729e1959750b1601018ba117aed0bfad3508005ba6b1896a08 byte-identical local exclusion source; frozen inputs required for replay +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py 0bc54399362945601bcfd403441fc80968d173200dd0561f57568b2053a94839 bertose_source/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py 0bc54399362945601bcfd403441fc80968d173200dd0561f57568b2053a94839 unchanged verified Nova readback +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/__init__.py e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 bertose_source/bert_training_v4/model/__init__.py e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 unchanged local file matching run import receipt +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/glycan_bert.py b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb bertose_source/bert_training_v4/model/glycan_bert.py b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb unchanged verified Nova readback +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bert_training_v4/model/multimodal_glycan_bert_v3.py 83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190 bertose_source/bert_training_v4/model/multimodal_glycan_bert_v3.py 83fde1c18cd6547a6ea026017296b5c94d209ac8f0e125057f03d507b3b65190 unchanged verified Nova readback +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/data/bpe_vocabulary.json 8a7f8569ff3a21513723d3a15e969120f0fdcf352943dbbadfdc54afd382149e bertose_source/data/bpe_vocabulary.json 8a7f8569ff3a21513723d3a15e969120f0fdcf352943dbbadfdc54afd382149e unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_authority.json 48914855c4e458ff02452ad4db3743a4fbef12221e0313584db4c2b1bd684cd4 bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_authority.json 48914855c4e458ff02452ad4db3743a4fbef12221e0313584db4c2b1bd684cd4 unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_independent_certificate.json 53098620a5c22dafdc951ba743515b4b10b1673c02f0aa4d881db669584902fa bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_independent_certificate.json 53098620a5c22dafdc951ba743515b4b10b1673c02f0aa4d881db669584902fa unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_receipt.json f654177eb6fde7289b6755812c2be298084697cf0d85159b3ec9da310fe3d4b4 bertose_source/data/review_ms_acquisition_top30_runtime_20260721_r3/review_a5_ms_acquisition_top30_runtime_receipt.json f654177eb6fde7289b6755812c2be298084697cf0d85159b3ec9da310fe3d4b4 unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json 918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json 918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py 10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04 bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py 10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04 unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7 bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7 unchanged local dependency; remote launch hash unverified +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py 6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4 bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py 6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4 unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_receipt.json 399df3de2b6c4d5e88aa442c8326214ab9cff2e8f0411e6921762bbade1475ba bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_receipt.json 399df3de2b6c4d5e88aa442c8326214ab9cff2e8f0411e6921762bbade1475ba unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_summary.json 93ed219d807d4a7735be96bf7cf6a59a0bd407619925ee194aed6d473048cdf0 bertose_source/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_sequence_package_summary.json 93ed219d807d4a7735be96bf7cf6a59a0bd407619925ee194aed6d473048cdf0 unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/model/glycan_bert.py b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb bertose_source/model/glycan_bert.py b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb unchanged local dependency; remote launch hash unverified +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/model/multimodal_glycan_bert_v3.py 8e06c32f4e844c3c66f146fd15a075472808a0720c892d0b9683dfd32f15ef0c bertose_source/model/multimodal_glycan_bert_v3.py 8e06c32f4e844c3c66f146fd15a075472808a0720c892d0b9683dfd32f15ef0c unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/training/a5_wurcs_bpe.py 6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4 bertose_source/training/a5_wurcs_bpe.py 6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_submission_readback_11767377/review_a5_native_eight_cuda_resume_diagnostic_r5_11767377_terminal_certification_receipt.json 2a3b28bd980b144eb42f9688f411adfbced054b9e7bad9fac4de37c6180064f8 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_submission_readback_11767377/review_a5_native_eight_cuda_resume_diagnostic_r5_11767377_terminal_certification_receipt.json 2a3b28bd980b144eb42f9688f411adfbced054b9e7bad9fac4de37c6180064f8 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_a5_native_eight_cuda_resume_diagnostic_receipt_r5.json 6a1bc65c568a17dc45f1102cd122ac43c62a8ee3b28e06ec855577857cc41ce0 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_a5_native_eight_cuda_resume_diagnostic_receipt_r5.json 6a1bc65c568a17dc45f1102cd122ac43c62a8ee3b28e06ec855577857cc41ce0 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_checkpoints_r1/review_checkpoint_index.json 9292c31195a7eddfe9f987a8cfe8cda843b283bb10a1bc8fb1b05d88f82a92d9 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_cuda_resume_diagnostic_20260727_r5_synthetic_device_receipt_fix/review_checkpoints_r1/review_checkpoint_index.json 9292c31195a7eddfe9f987a8cfe8cda843b283bb10a1bc8fb1b05d88f82a92d9 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r1/review_a5_native_eight_data_adapter_receipt_r1.json cacec838740d64a493c2e56fd1efa8a85ba7d11fce3ec26e40905c33db05e58d bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r1/review_a5_native_eight_data_adapter_receipt_r1.json cacec838740d64a493c2e56fd1efa8a85ba7d11fce3ec26e40905c33db05e58d unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_receipt_r2.json 3b2118e128a5550ba4918b4f4f2c6d8045e319b7cff37b76d74dce6b3220c9f0 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_receipt_r2.json 3b2118e128a5550ba4918b4f4f2c6d8045e319b7cff37b76d74dce6b3220c9f0 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_receipt_r3.json e29df7a91d0c30238abe9155e600fb1b77b0d3d3481f6599d2ca0d2185371b9f bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_receipt_r3.json e29df7a91d0c30238abe9155e600fb1b77b0d3d3481f6599d2ca0d2185371b9f unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_verification_receipt_r1.json a92f4b951476e84af006015c97698f07d5e03e7a182c54c82b7d7c5c0e68ffb3 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_verification_receipt_r1.json a92f4b951476e84af006015c97698f07d5e03e7a182c54c82b7d7c5c0e68ffb3 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4_integrity_receipt.json 9aa5860bfc032afd82561a6db6f8df1439245b73aa3f7575b2b88836e384a1f9 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4_integrity_receipt.json 9aa5860bfc032afd82561a6db6f8df1439245b73aa3f7575b2b88836e384a1f9 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5_integrity_receipt.json 59a2fd53e9e75f6f8ec258d76e103adb61c908ab0ace6718a348739f5b70d8bd bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5_integrity_receipt.json 59a2fd53e9e75f6f8ec258d76e103adb61c908ab0ace6718a348739f5b70d8bd unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6_integrity_receipt.json 0c078ce52e2eb6d6feaeb1a1c2af1794ef33aef56aca7959f76a93f39d152692 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6_integrity_receipt.json 0c078ce52e2eb6d6feaeb1a1c2af1794ef33aef56aca7959f76a93f39d152692 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7_integrity_receipt.json 912bc1391ff66c3fd704e61266de508adcf9ed587d7e136932508029b77cb956 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7_integrity_receipt.json 912bc1391ff66c3fd704e61266de508adcf9ed587d7e136932508029b77cb956 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_final_binding_r22.json d8feaf25a7266a919c42d3a4fd1ad2d105ab088ae79c024edc665dfa29cf758a bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_final_binding_r22.json d8feaf25a7266a919c42d3a4fd1ad2d105ab088ae79c024edc665dfa29cf758a unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_launch_config_r22.json 30082379d47318f5d9e17fafad4aa018e7e9f0f0bf1aac559178d46784fe4b9f bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/review_a5_native_eight_launch_config_r22.json 30082379d47318f5d9e17fafad4aa018e7e9f0f0bf1aac559178d46784fe4b9f unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/run_review_a5_native_eight_r22.sbatch 826f3e8167fdd459cff7677b5b69d0f3caf9dababaaa71d9eded6070aa5d93a7 bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_production_bundle_20260728_r24_stable_null_jobside/run_review_a5_native_eight_r22.sbatch 826f3e8167fdd459cff7677b5b69d0f3caf9dababaaa71d9eded6070aa5d93a7 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_authority_r1.json 1238f76e5da5184d16d33077bf3e5342033918fadb4eba84242c47cb1b1322cc bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_authority_r1.json 1238f76e5da5184d16d33077bf3e5342033918fadb4eba84242c47cb1b1322cc unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_receipt_r1.json fb65dddf0bc61b4c73b5dc5ec796967e65263e9d7bdc4882e07684e882280fdb bertose_source/writing/review/multimodal/outputs/review_a5_native_eight_scientific_boundary_20260721_r1/review_a5_native_eight_scientific_boundary_child_receipt_r1.json fb65dddf0bc61b4c73b5dc5ec796967e65263e9d7bdc4882e07684e882280fdb unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r3/review_a5_topology_loss_v2.py 64eaf9174f523ae909c84987049d071bf3869ca8e83919f14f0572ef77b0530e bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r3/review_a5_topology_loss_v2.py 64eaf9174f523ae909c84987049d071bf3869ca8e83919f14f0572ef77b0530e unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_receipt_r4.json 654f5b9728c3dfd2588c4b570b0e3a1bcab8feb366af28eeead36f9beb37d921 bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_receipt_r4.json 654f5b9728c3dfd2588c4b570b0e3a1bcab8feb366af28eeead36f9beb37d921 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_summary_r4.json ccd4b81d3afac8ae789c538e0af332f74f2468d403da1d243fefefd4df013538 bertose_source/writing/review/multimodal/outputs/review_a5_official_ragged_sequence_topology_runtime_20260721_r4/review_a5_official_ragged_sequence_topology_runtime_summary_r4.json ccd4b81d3afac8ae789c538e0af332f74f2468d403da1d243fefefd4df013538 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null.json b10556643abf560b9e8622e8ae67936d2d3ca8867433db485e785f31d049a8fb bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null.json b10556643abf560b9e8622e8ae67936d2d3ca8867433db485e785f31d049a8fb unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null_receipt.json f4eb239f56e472d57dd3a3848c1a6c142e193cb326320ac8bf134b96ac35102a bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_a5_official_sequence_train_only_null_receipt.json f4eb239f56e472d57dd3a3848c1a6c142e193cb326320ac8bf134b96ac35102a unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_frozen_sequence_masking_runtime.py 831bebd2dcf6a8308d01ec62eb6e1132fe7edbbc666c1c83787335acc576b19c bertose_source/writing/review/multimodal/outputs/review_a5_sequence_official_array_train_only_null_20260721_r1/review_frozen_sequence_masking_runtime.py 831bebd2dcf6a8308d01ec62eb6e1132fe7edbbc666c1c83787335acc576b19c unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_receipt_r1.json eae6b3772cd08c65cdc26bdf7ec525742452aad4a35b4d5aa9a7a5936dc3bf73 bertose_source/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_receipt_r1.json eae6b3772cd08c65cdc26bdf7ec525742452aad4a35b4d5aa9a7a5936dc3bf73 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_summary_r1.json da7814d20c81c0d072544cfc5761e8fae0292def176d63b863083389c9caa0ff bertose_source/writing/review/multimodal/outputs/review_a5_sequence_topology_bfs_replay_all_20260722_r1/review_a5_sequence_topology_bfs_replay_all_summary_r1.json da7814d20c81c0d072544cfc5761e8fae0292def176d63b863083389c9caa0ff unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_receipt.json ba9591529f3747706fbc169fe8262e23ca31a810473d10c284fb01d9190ebe42 bertose_source/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_receipt.json ba9591529f3747706fbc169fe8262e23ca31a810473d10c284fb01d9190ebe42 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_summary.json d6b3dad73d8c9cc78a7c721e7969280d0ff6500773402545bc2ff143b125f56c bertose_source/writing/review/multimodal/outputs/review_a5_sequence_v4_two_run_reproduction_20260722_r1/review_a5_sequence_v4_two_run_reproduction_summary.json d6b3dad73d8c9cc78a7c721e7969280d0ff6500773402545bc2ff143b125f56c unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762446_r1.json 8ff3181d22567728c0a10580c1e775da0714f17561ace81034fc673813f54af6 bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762446_r1.json 8ff3181d22567728c0a10580c1e775da0714f17561ace81034fc673813f54af6 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762534_r1.json 163374c5c6b049908d935f0d92d8f1a1adda761550761db9b2cb423bfb450ee1 bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_epoch_boundary_continuation_11762534_r1.json 163374c5c6b049908d935f0d92d8f1a1adda761550761db9b2cb423bfb450ee1 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762446_r2.json 85711141c9d0e84dee228df84d02df7d4693fb4b85b1ae8163466e208f5e9fd6 bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762446_r2.json 85711141c9d0e84dee228df84d02df7d4693fb4b85b1ae8163466e208f5e9fd6 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762534_r3.json 0d96b7867eeec85dbf14eb8f55b745b7c354edb5d16ac702d17b97bf850c79af bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_amendment_11762534_r3.json 0d96b7867eeec85dbf14eb8f55b745b7c354edb5d16ac702d17b97bf850c79af unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762446_r2.json f7adbf64e17c3a2afc677b7af9f05e50e37b4d681f38f0fc192634ca0447e4f4 bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762446_r2.json f7adbf64e17c3a2afc677b7af9f05e50e37b4d681f38f0fc192634ca0447e4f4 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762534_r3.json 6796f0b163dcf21af5dfe3048b53e8d2660fe10290e22222232a6c7f6668396c bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_epoch_boundary_resume_20260725_r1/review_a5_static_v2_scheduler_memory_rightsizing_applied_11762534_r3.json 6796f0b163dcf21af5dfe3048b53e8d2660fe10290e22222232a6c7f6668396c unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_static_v2_postfit_cpu_finalization_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_cpu_finalization_execution_r21.json be55a87986dd6d80942dcd0b17dd75994145ff4a383596314d5b4ee51972a443 bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_cpu_finalization_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_cpu_finalization_execution_r21.json be55a87986dd6d80942dcd0b17dd75994145ff4a383596314d5b4ee51972a443 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_publication_receipt_r4.json 77ba176a9fab70e75b3c2c423c857d1e266f2021875aea01e15bac3f11f327d1 bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_postfit_publication_receipt_r4.json 77ba176a9fab70e75b3c2c423c857d1e266f2021875aea01e15bac3f11f327d1 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_train_only_null_r4.json 661d04d76fcf36d116feb117154eac01e6569e377d4245c07653b28696e1227b bertose_source/writing/review/multimodal/outputs/review_a5_static_v2_postfit_direct_publication_20260728_r21_stable_null_mass_adapter/review_a5_static_v2_train_only_null_r4.json 661d04d76fcf36d116feb117154eac01e6569e377d4245c07653b28696e1227b unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_topology_official_ragged_later_role_20260721_r1/review_a5_official_ragged_topology_receipt.json 333ee6f34e69f89e26b810cc565415b89d6874615ea4ac57850371fb159c1b71 bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_later_role_20260721_r1/review_a5_official_ragged_topology_receipt.json 333ee6f34e69f89e26b810cc565415b89d6874615ea4ac57850371fb159c1b71 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null.json a752ffd350fbe38aa0e6f6b42b76137f4f72d76fa9a7f5d3609bc47c65c552de bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null.json a752ffd350fbe38aa0e6f6b42b76137f4f72d76fa9a7f5d3609bc47c65c552de unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null_receipt.json dace4cb5df71912f5aa7531bb0ce87db3b63d726b2a12aa41facabf9d54b5c35 bertose_source/writing/review/multimodal/outputs/review_a5_topology_official_ragged_train_only_null_20260721_r1/review_a5_official_topology_train_only_null_receipt.json dace4cb5df71912f5aa7531bb0ce87db3b63d726b2a12aa41facabf9d54b5c35 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_ms_acquisition_top30_v3_20260721_r3/review_a5_ms_acquisition_top30_runtime_v3.py 68c0d543c5411276ef56c7072bded4ebda886f46b9fa4ebf3c95c1e54c1a08c6 bertose_source/writing/review/multimodal/runtime/a5_ms_acquisition_top30_v3_20260721_r3/review_a5_ms_acquisition_top30_runtime_v3.py 68c0d543c5411276ef56c7072bded4ebda886f46b9fa4ebf3c95c1e54c1a08c6 unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_r2.py 9f8f167148aa234df413e4c3d4e1846881781c8e5a19bd91b0b178b260a3a537 bertose_source/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r2/review_a5_native_eight_data_adapter_r2.py 9f8f167148aa234df413e4c3d4e1846881781c8e5a19bd91b0b178b260a3a537 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_r3.py a76c24cb0a3b904ae95bfda21bdeb2ba96e36293368fe44a218429be2b10d43e bertose_source/writing/review/multimodal/runtime/a5_native_eight_data_adapter_20260721_r3/review_a5_native_eight_data_adapter_r3.py a76c24cb0a3b904ae95bfda21bdeb2ba96e36293368fe44a218429be2b10d43e unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_direct_static_bridge_20260724_r1/review_a5_native_eight_direct_static_bridge_r1.py c71ba654568a24993bc1733b26b6863b11e5c198c53871a6183b485ab96540f0 bertose_source/writing/review/multimodal/runtime/a5_native_eight_direct_static_bridge_20260724_r1/review_a5_native_eight_direct_static_bridge_r1.py c71ba654568a24993bc1733b26b6863b11e5c198c53871a6183b485ab96540f0 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/review_a5_native_eight_finalization_runtime_r19.py b6266553c075e9b85d221a6278d1ef3ab1d26fbce5de70dbcd4569db42653990 bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/review_a5_native_eight_finalization_runtime_r19.py b6266553c075e9b85d221a6278d1ef3ab1d26fbce5de70dbcd4569db42653990 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/run_review_a5_native_eight_training_r19.py 28d482fbae230c999d84e64a5abd6a1260ae26fb555c92b7d3176afb37cb260a bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260727_r19_external_release_runtime_binding/run_review_a5_native_eight_training_r19.py 28d482fbae230c999d84e64a5abd6a1260ae26fb555c92b7d3176afb37cb260a unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/review_a5_native_eight_finalization_runtime_r22.py 62f5355ef06cdc56f85214ac251bfa0ed4b19b41a19ab6acac51d644678f0a62 bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/review_a5_native_eight_finalization_runtime_r22.py 62f5355ef06cdc56f85214ac251bfa0ed4b19b41a19ab6acac51d644678f0a62 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/run_review_a5_native_eight_training_r22.py cb9a583091912c59f515f46074b04c90dfbe0ebf0fc28d241db980851b180335 bertose_source/writing/review/multimodal/runtime/a5_native_eight_finalization_controller_20260728_r24_stable_null_jobside/run_review_a5_native_eight_training_r22.py cb9a583091912c59f515f46074b04c90dfbe0ebf0fc28d241db980851b180335 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r1/review_a5_native_eight_hotpath_r1.py 3b9ada847b1ea3ecf1f12a6566b55fe1a0218b10aed9d5dabf40190cf0e70c4f bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r1/review_a5_native_eight_hotpath_r1.py 3b9ada847b1ea3ecf1f12a6566b55fe1a0218b10aed9d5dabf40190cf0e70c4f unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/load_review_a5_native_eight_hotpath_r2.py 101559df116319422762f0d7293fe55478b56defcbc1724661696163bb4fc9ae bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/load_review_a5_native_eight_hotpath_r2.py 101559df116319422762f0d7293fe55478b56defcbc1724661696163bb4fc9ae unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/review_a5_native_eight_hotpath_r2.py 941f08e0db8bbf2fa61852d4fc218f592fdd63c12f2dafdb70ed3b18e6aedf98 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260725_r2/review_a5_native_eight_hotpath_r2.py 941f08e0db8bbf2fa61852d4fc218f592fdd63c12f2dafdb70ed3b18e6aedf98 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/load_review_a5_native_eight_hotpath_r3.py e99f4556a8e3b3721d1f9155738d2bf4e9765e43a0e9f7734259e33533ff4b30 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/load_review_a5_native_eight_hotpath_r3.py e99f4556a8e3b3721d1f9155738d2bf4e9765e43a0e9f7734259e33533ff4b30 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/review_a5_native_eight_hotpath_r3.py a81dd58c727a28b1a383477338e41922a2d746dac5cb33f351b4501ee8c5d0dd bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r3/review_a5_native_eight_hotpath_r3.py a81dd58c727a28b1a383477338e41922a2d746dac5cb33f351b4501ee8c5d0dd unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/load_review_a5_native_eight_hotpath_r4.py 662d0766a8d68638480e9c44ca4070387481d43e1c666a20363025cf5b9bc958 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/load_review_a5_native_eight_hotpath_r4.py 662d0766a8d68638480e9c44ca4070387481d43e1c666a20363025cf5b9bc958 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4.py 600af4b6b0fab63b7780bb1e6be8233eb28bd0808ff390c3096369afec9c6649 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r4/review_a5_native_eight_hotpath_r4.py 600af4b6b0fab63b7780bb1e6be8233eb28bd0808ff390c3096369afec9c6649 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/load_review_a5_native_eight_hotpath_r5.py 864a05e86c5ea91318b11373d2cdffcdd2ddd0777f141cb7ef0305f779a42ea6 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/load_review_a5_native_eight_hotpath_r5.py 864a05e86c5ea91318b11373d2cdffcdd2ddd0777f141cb7ef0305f779a42ea6 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5.py ce4bad9195229341cab0890ed775b78126c17a23d82f2244757f120c12b346c8 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r5/review_a5_native_eight_hotpath_r5.py ce4bad9195229341cab0890ed775b78126c17a23d82f2244757f120c12b346c8 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/load_review_a5_native_eight_hotpath_r6.py e2496170942db844e4ebe71d4c098b0d0cf99540d3465ed7e8e9a113469cf7d2 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/load_review_a5_native_eight_hotpath_r6.py e2496170942db844e4ebe71d4c098b0d0cf99540d3465ed7e8e9a113469cf7d2 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6.py 73b42e5131c64284c6f748ddf81b4d187dcb57f756c88c22240d189f2afc4cef bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260726_r6/review_a5_native_eight_hotpath_r6.py 73b42e5131c64284c6f748ddf81b4d187dcb57f756c88c22240d189f2afc4cef unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/load_review_a5_native_eight_hotpath_r7.py fa9538829ff3ccfaf3d3f4346c7e735c70758661eb6bf3da5eece2e7e96e0fb6 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/load_review_a5_native_eight_hotpath_r7.py fa9538829ff3ccfaf3d3f4346c7e735c70758661eb6bf3da5eece2e7e96e0fb6 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7.py c0cb618f7856daf24666dbec07ff51b86e3fbd52c073c58bd1b7151122714f47 bertose_source/writing/review/multimodal/runtime/a5_native_eight_hotpath_20260727_r7_cuda_rng_cpu_normalization/review_a5_native_eight_hotpath_r7.py c0cb618f7856daf24666dbec07ff51b86e3fbd52c073c58bd1b7151122714f47 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_submission_20260727_r15_preparation/review_a5_native_eight_submission_contract_r15.py 35c7a13da662f49bec07b63f590c8fb3d9cc4578633a179da42ff2650a2d7865 bertose_source/writing/review/multimodal/runtime/a5_native_eight_submission_20260727_r15_preparation/review_a5_native_eight_submission_contract_r15.py 35c7a13da662f49bec07b63f590c8fb3d9cc4578633a179da42ff2650a2d7865 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r1/review_a5_native_eight_training_runner_r1.py 34785bf46f38579e48c3be6326f667a04521cb7d95c1f94c5200d84012b577bf bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r1/review_a5_native_eight_training_runner_r1.py 34785bf46f38579e48c3be6326f667a04521cb7d95c1f94c5200d84012b577bf unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/review_a5_native_eight_training_runner_r2.py 7e93b13b3212b3c97e30144f3e393a86a13411d5e82fe19bd55d43bc58587e30 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/review_a5_native_eight_training_runner_r2.py 7e93b13b3212b3c97e30144f3e393a86a13411d5e82fe19bd55d43bc58587e30 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/run_review_a5_native_eight_training_r2.py 195dbedfde65c061eb0fca5684270ff95a2bec16732683b1df7f40d91909cc7f bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r2/run_review_a5_native_eight_training_r2.py 195dbedfde65c061eb0fca5684270ff95a2bec16732683b1df7f40d91909cc7f unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/review_a5_native_eight_training_runner_r3.py 550588ca033718273de2e35825b8b9faffe4a5fb747ff8775fe17bb31050d9be bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/review_a5_native_eight_training_runner_r3.py 550588ca033718273de2e35825b8b9faffe4a5fb747ff8775fe17bb31050d9be unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/run_review_a5_native_eight_training_r3.py bba69e736a44fbfa6b380089d50b945e93b45d5202fa265b5869ffd378149040 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260722_r3/run_review_a5_native_eight_training_r3.py bba69e736a44fbfa6b380089d50b945e93b45d5202fa265b5869ffd378149040 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/review_a5_native_eight_training_runner_r8.py cbc9fc0179ecb1e7c449fa37a574f38ff3e912e13db5c984d87e05e3e347a0e1 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/review_a5_native_eight_training_runner_r8.py cbc9fc0179ecb1e7c449fa37a574f38ff3e912e13db5c984d87e05e3e347a0e1 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/run_review_a5_native_eight_training_r8.py 213afce295408dda11cf3ede98ebff191735a77e1db09b6252cae964caca39e2 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r8/run_review_a5_native_eight_training_r8.py 213afce295408dda11cf3ede98ebff191735a77e1db09b6252cae964caca39e2 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/review_a5_native_eight_training_runner_r9.py 4430560565a18da0e68700d60526d3dec15fabd79854111d1e85deb59e2381c8 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/review_a5_native_eight_training_runner_r9.py 4430560565a18da0e68700d60526d3dec15fabd79854111d1e85deb59e2381c8 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/run_review_a5_native_eight_training_r9.py b2bae85c879d2d266ac1e39869c661625958e21c1c3b7299713c8a0b46827ec5 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260724_r9_isolated_path/run_review_a5_native_eight_training_r9.py b2bae85c879d2d266ac1e39869c661625958e21c1c3b7299713c8a0b46827ec5 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r11_certification_gate_candidate/review_a5_native_eight_certification_gate_r11.py ce7626823c2980bc21b46a7eec6c1961a87dc5512525e553c49f2c7d57bf0430 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r11_certification_gate_candidate/review_a5_native_eight_certification_gate_r11.py ce7626823c2980bc21b46a7eec6c1961a87dc5512525e553c49f2c7d57bf0430 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_final_bindings_r12.py a8cfaca102f7c3d0c7936d244ce1e9ed75099e70c0ca3a27943be7ce5587b6e0 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_final_bindings_r12.py a8cfaca102f7c3d0c7936d244ce1e9ed75099e70c0ca3a27943be7ce5587b6e0 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_training_runner_r12.py 47e973c7c4ed5bc6686e5d7795b00d3eea5c2da8c2a15fc534a7cc24c1744ee1 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/review_a5_native_eight_training_runner_r12.py 47e973c7c4ed5bc6686e5d7795b00d3eea5c2da8c2a15fc534a7cc24c1744ee1 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/run_review_a5_native_eight_training_r12.py 66270933d1ff23ffe50b800267a4705c905fc423e8e2c929bf642cb5c6c37def bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260725_r12_r11_integrated/run_review_a5_native_eight_training_r12.py 66270933d1ff23ffe50b800267a4705c905fc423e8e2c929bf642cb5c6c37def unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_direct_submit_controller_r13.py 2feb9a90db66ca277fb9e23d079ce8b089a31060e5670961a13b0e5146ed39a8 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_direct_submit_controller_r13.py 2feb9a90db66ca277fb9e23d079ce8b089a31060e5670961a13b0e5146ed39a8 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_final_bindings_r13.py c30b6b03dae852a4b10c6d01596e977d8a071e738dc3074f1ca0592a50778dd3 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_final_bindings_r13.py c30b6b03dae852a4b10c6d01596e977d8a071e738dc3074f1ca0592a50778dd3 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_training_runner_r13.py 17cf8ab216b354ec1de7574ebebd7bfe02b5935da605b4131e45c7aa13982d5b bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/review_a5_native_eight_training_runner_r13.py 17cf8ab216b354ec1de7574ebebd7bfe02b5935da605b4131e45c7aa13982d5b unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/run_review_a5_native_eight_training_r13.py a2a0a0d9056c7cd360913a792ff5e3390a190b692d7663c3a6d48a3ee0f180d5 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r13_final_candidate/run_review_a5_native_eight_training_r13.py a2a0a0d9056c7cd360913a792ff5e3390a190b692d7663c3a6d48a3ee0f180d5 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/__init__.py 737b1caa9086f8ac1556c05625d1b5391b8cae58e9d98a7755fa72f44e94c7ba bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/__init__.py 737b1caa9086f8ac1556c05625d1b5391b8cae58e9d98a7755fa72f44e94c7ba unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_final_bindings_r14.py bd6c704239e2bb4898dddda5c86274f41cd5b304b35d584ddfae3884e8bc8503 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_final_bindings_r14.py bd6c704239e2bb4898dddda5c86274f41cd5b304b35d584ddfae3884e8bc8503 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_strict_successor_r14.py eda983e1b0c29357eb1b6e2f555f402a83b7176fb857488e9be5f5faed490b2d bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260726_r14_r6_strict_candidate/review_a5_native_eight_strict_successor_r14.py eda983e1b0c29357eb1b6e2f555f402a83b7176fb857488e9be5f5faed490b2d unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/__init__.py 7ef11d9a891d32b0c1bb3ee24016700acd14251ac49448f004a701cdea79ca53 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/__init__.py 7ef11d9a891d32b0c1bb3ee24016700acd14251ac49448f004a701cdea79ca53 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_bindings_r15.py 1f21427486260e8b56795f7137f0f7322ae768d80645db6636414e5961aa3224 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_bindings_r15.py 1f21427486260e8b56795f7137f0f7322ae768d80645db6636414e5961aa3224 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_gate_r15.py 1556d6e2643edfc80b6b6782164ab47560e259ff55791c50dcffdd9b9afc001f bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r15_current_static_terminal_gate_preparation/review_a5_native_eight_current_terminal_gate_r15.py 1556d6e2643edfc80b6b6782164ab47560e259ff55791c50dcffdd9b9afc001f unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_final_bindings_r16.py 1287db8472580db69e38d60be8c13beeddb4fdde7958a5b302d072e1226f4de3 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_final_bindings_r16.py 1287db8472580db69e38d60be8c13beeddb4fdde7958a5b302d072e1226f4de3 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_release_successor_r16.py 689db8aaf51d15288f01b196c5ad2fe8ee3ca8aab3ff525695abaa9f25060ff6 bertose_source/writing/review/multimodal/runtime/a5_native_eight_training_20260727_r16_r7_cuda_terminal_preparation/review_a5_native_eight_release_successor_r16.py 689db8aaf51d15288f01b196c5ad2fe8ee3ca8aab3ff525695abaa9f25060ff6 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_balanced_planner_r4.py 2c985edfe747bae712c41689da8be2abb5096bd97a8771691b3676d3a8af49fd bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_balanced_planner_r4.py 2c985edfe747bae712c41689da8be2abb5096bd97a8771691b3676d3a8af49fd unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_composite_r4.py 52a311636e7631b97711aab63aec28e2ada47a446d1aecc1a47921d584f69f9d bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r4/review_a5_native_eight_composite_r4.py 52a311636e7631b97711aab63aec28e2ada47a446d1aecc1a47921d584f69f9d unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_balanced_planner_r5.py 1b9b05c812603db7b216aa989214a3c3715f80032b3a8b82577ae2b9e48f048d bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_balanced_planner_r5.py 1b9b05c812603db7b216aa989214a3c3715f80032b3a8b82577ae2b9e48f048d unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_composite_r5.py 24c35257fc61e1c9c77630d2b0075775a7f46b6500ecb5f175ef8f42bd214e0e bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_composite_r5.py 24c35257fc61e1c9c77630d2b0075775a7f46b6500ecb5f175ef8f42bd214e0e unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_executor_r5.py a482a70a2edcb7c9936b091a86a0f7d98714b5bab09a0bdc80cd927f015a46f2 bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_executor_r5.py a482a70a2edcb7c9936b091a86a0f7d98714b5bab09a0bdc80cd927f015a46f2 unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_r4_lineage_receipt_r1.json b5fbdff168de23676208484ccccc3cc32f613ea411d193e6d8930456e8edeeef bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r5/review_a5_native_eight_r4_lineage_receipt_r1.json b5fbdff168de23676208484ccccc3cc32f613ea411d193e6d8930456e8edeeef unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r6/review_a5_native_eight_executor_r6.py e47e6e9810db0e8ec9d37ce5533f762e287b162f811bfadc347666f5ad78db82 bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r6/review_a5_native_eight_executor_r6.py e47e6e9810db0e8ec9d37ce5533f762e287b162f811bfadc347666f5ad78db82 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r7/review_a5_native_eight_executor_r7.py e068a3c233fc3fd94fe3b8618edb9bd8c87fd81b97dff2666206fb870f0f898a bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r7/review_a5_native_eight_executor_r7.py e068a3c233fc3fd94fe3b8618edb9bd8c87fd81b97dff2666206fb870f0f898a unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r8/review_a5_native_eight_executor_r8.py 60ab4de6bc1ee151e9da2c312c41079638e11469502e8136ede51be032eac630 bertose_source/writing/review/multimodal/runtime/a5_pretraining_failclosed_integration_20260721_r8/review_a5_native_eight_executor_r8.py 60ab4de6bc1ee151e9da2c312c41079638e11469502e8136ede51be032eac630 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_static_failure_release_chain_20260727_r1_preparation/review_a5_native_static_failure_release_gate_r1.py ee97bf4e68ddfbf280b7e0f01ce3409c4d4692feafbc9382613bbc5698913fa7 bertose_source/writing/review/multimodal/runtime/a5_static_failure_release_chain_20260727_r1_preparation/review_a5_native_static_failure_release_gate_r1.py ee97bf4e68ddfbf280b7e0f01ce3409c4d4692feafbc9382613bbc5698913fa7 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_static_v2_epoch_boundary_resume_20260725_r1/run_review_a5_static_v2_epoch_boundary_resume_r1_scavenger_v100.sbatch f420c84258cdf4247fdd766a9e8470bad55bd1f845ebd6640ec70b97b3953e6e bertose_source/writing/review/multimodal/runtime/a5_static_v2_epoch_boundary_resume_20260725_r1/run_review_a5_static_v2_epoch_boundary_resume_r1_scavenger_v100.sbatch f420c84258cdf4247fdd766a9e8470bad55bd1f845ebd6640ec70b97b3953e6e unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_static_v2_ops_20260721_r2/review_a5_static_v2_checkpoint_store_r2.py f2e558c52bf166d6e7f42ecdd92995f2b70c8a174eab8d6814875399fb69732e bertose_source/writing/review/multimodal/runtime/a5_static_v2_ops_20260721_r2/review_a5_static_v2_checkpoint_store_r2.py f2e558c52bf166d6e7f42ecdd92995f2b70c8a174eab8d6814875399fb69732e unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/review_a5_static_v2_postfit_direct_publication_r2.py 8e57c17fd43f3894f94f980cf70a0d6d7f183cf04c26780c3fe30c1932bb7abb bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/review_a5_static_v2_postfit_direct_publication_r2.py 8e57c17fd43f3894f94f980cf70a0d6d7f183cf04c26780c3fe30c1932bb7abb unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/run_review_a5_static_v2_postfit_direct_publication_r2.py c46a7d4644899a5e7551e2dd5eb30666e01e0f36e2f65a2cd821b8c5565258dc bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260724_r2/run_review_a5_static_v2_postfit_direct_publication_r2.py c46a7d4644899a5e7551e2dd5eb30666e01e0f36e2f65a2cd821b8c5565258dc unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r4_terminal_certification/review_a5_static_v2_terminal_certification_r4.py 3b9632e840265e1a5c1d226f3fe7fb8cd4c448f810f3826c59e19c25132dd04f bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r4_terminal_certification/review_a5_static_v2_terminal_certification_r4.py 3b9632e840265e1a5c1d226f3fe7fb8cd4c448f810f3826c59e19c25132dd04f unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/__init__.py 9429deca8cfb6cb25ef6f79a5b0ee0b91d47657e7f21f61627afd655d08fe7d3 bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/__init__.py 9429deca8cfb6cb25ef6f79a5b0ee0b91d47657e7f21f61627afd655d08fe7d3 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/review_a5_static_v2_terminal_certification_r5.py 04d724ee84f67565e2f0229db99006c8f64d2492564643f6e60af25930cf12a1 bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r5_terminal_certification/review_a5_static_v2_terminal_certification_r5.py 04d724ee84f67565e2f0229db99006c8f64d2492564643f6e60af25930cf12a1 unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/__init__.py bbdce8deb776917ade3704eb5d08b064917f52c76f3f39ee345b3b2938992add bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/__init__.py bbdce8deb776917ade3704eb5d08b064917f52c76f3f39ee345b3b2938992add unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_production_module_roster_r6.json 195d41bba2282fdfde77a88f8b0a70eb64b0207d1a9efd42ddaeb873f8ccaeed bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_production_module_roster_r6.json 195d41bba2282fdfde77a88f8b0a70eb64b0207d1a9efd42ddaeb873f8ccaeed unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_terminal_certification_r6.py bdb0fa37804531f6446cee9411c9730fde792eb9674054e56b883156f36da4cb bertose_source/writing/review/multimodal/runtime/a5_static_v2_postfit_direct_publication_20260725_r6_terminal_certification/review_a5_static_v2_terminal_certification_r6.py bdb0fa37804531f6446cee9411c9730fde792eb9674054e56b883156f36da4cb unchanged referenced training dependency snapshot; not a new run +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/a5_wa345_continuation_manifest_20260819_r1.json 30b64143eb15688fa1e1c8aeaf3b84eb08a2a65730fa1c996c9ef6f12679d80f bertose_source/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/a5_wa345_continuation_manifest_20260819_r1.json 30b64143eb15688fa1e1c8aeaf3b84eb08a2a65730fa1c996c9ef6f12679d80f unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/submit_a5_wa345_continuation_20260819_r1.sbatch f517b5c99d93103d1212b2153c26be1cc58267c7b2d9bfa747f6d512f0fdadf2 bertose_source/writing/review/multimodal/runtime/a5_wa345_continuation_20260819_r1_preparation/submit_a5_wa345_continuation_20260819_r1.sbatch f517b5c99d93103d1212b2153c26be1cc58267c7b2d9bfa747f6d512f0fdadf2 unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/a5_wa345_manifest_20260817_r1.json eeebc9c7e2cfc701f3ad47e62696ae2247c8caec93d8b034d5f573b701eab2a1 bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/a5_wa345_manifest_20260817_r1.json eeebc9c7e2cfc701f3ad47e62696ae2247c8caec93d8b034d5f573b701eab2a1 unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/run_a5_wa345_shim_20260817_r1.py 5159414381025cf3e2d5e742422c84c292481168af42801c773df4ba12797fb4 bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/run_a5_wa345_shim_20260817_r1.py 5159414381025cf3e2d5e742422c84c292481168af42801c773df4ba12797fb4 unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/submit_a5_wa345_20260817_r1.sbatch a090f111df7cc0db09e61ea0a8067882b7cd9bf21d91c53da4115549560b08e7 bertose_source/writing/review/multimodal/runtime/a5_wa345_pretraining_20260817_r1_preparation/submit_a5_wa345_20260817_r1.sbatch a090f111df7cc0db09e61ea0a8067882b7cd9bf21d91c53da4115549560b08e7 unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/review_md_temporal_20x6_a1111_wa2_manifest_20260811_r1.json 600144a7f5b893958d629083a3a9266eec980765218408d2d51db72b73c1e506 bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/review_md_temporal_20x6_a1111_wa2_manifest_20260811_r1.json 600144a7f5b893958d629083a3a9266eec980765218408d2d51db72b73c1e506 unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/run_review_md_temporal_20x6_a1111_wa2_s424344_20260811_r1.py dd74253863f39150af4ddc7e8d48c0a366e1f327c30aa50e0748078330b97b85 bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/run_review_md_temporal_20x6_a1111_wa2_s424344_20260811_r1.py dd74253863f39150af4ddc7e8d48c0a366e1f327c30aa50e0748078330b97b85 unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/submit_review_md_temporal_20x6_a1111_wa2_20260811_r1.sbatch 6ffd2f97706bdf0001b90ca2f8af7ec565b298cc8585444ba6027194d0e378d2 bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_a1111_wa2_s424344_20260811_r2_log_route_preparation/submit_review_md_temporal_20x6_a1111_wa2_20260811_r1.sbatch 6ffd2f97706bdf0001b90ca2f8af7ec565b298cc8585444ba6027194d0e378d2 unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/__init__.py aa37d1e86bd3a58262f9824ba80993c0f0f280db4d0f4d704ca469dc12ba3df7 bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/__init__.py aa37d1e86bd3a58262f9824ba80993c0f0f280db4d0f4d704ca469dc12ba3df7 unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/review_md_temporal_20x6_core_r3.py 3e96d8092239c2c21f217ad5bae4ee7e07dbe0f7630b213bad468d6b08d3b1c1 bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/review_md_temporal_20x6_core_r3.py 3e96d8092239c2c21f217ad5bae4ee7e07dbe0f7630b213bad468d6b08d3b1c1 unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/run_review_md_temporal_20x6_training_r3.py 1e446e7e89a39ef01132b9f2a4deb817161f7b376a0fa04c2b11529004f53e8a bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260802_r3_native_intersection/run_review_md_temporal_20x6_training_r3.py 1e446e7e89a39ef01132b9f2a4deb817161f7b376a0fa04c2b11529004f53e8a unchanged local source snapshot +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260805_r4_dev_memory/run_review_md_temporal_20x6_training_r4.py a6a180ae103eaaf68458b298cd4180920a0e88c1724a6ba9a94ef94559e75c5f bertose_source/writing/review/multimodal/runtime/md_temporal_20x6_end_to_end_20260805_r4_dev_memory/run_review_md_temporal_20x6_training_r4.py a6a180ae103eaaf68458b298cd4180920a0e88c1724a6ba9a94ef94559e75c5f unchanged local source snapshot +generated portable reporting check or documentation bertosebind_new_runs/README.md b18eed4c3ad4f0cbdd700e41d6ff7af1f520d26386f76f4573e82332f3e1ea28 portable reporting check or documentation; new documentation/check, or path-only port recorded in exposure_portability.patch +generated portable reporting check or documentation bertosebind_new_runs/audit_pretraining_exposure.py fc4ffac8de965da6250297ee24fa801be2619f1afcc29471204c7e5aead03012 portable reporting check or documentation; new documentation/check, or path-only port recorded in exposure_portability.patch +generated portable reporting check or documentation bertosebind_new_runs/check_package.py 2b8be4fcd7ebc98f49e9532415644f457930a1e7700d5c17fdc58a0abd0dd271 portable reporting check or documentation; new documentation/check, or path-only port recorded in exposure_portability.patch +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/audit_current_pretraining_exposure.py 45a366b40a523671427950b83ac2c8a243c96f1bce8527b0af2337a375ff2b15 bertosebind_new_runs/executed/local/audit_current_pretraining_exposure.py 45a366b40a523671427950b83ac2c8a243c96f1bce8527b0af2337a375ff2b15 unchanged executed local verification source; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/collect_current_glycan_sets.py bdb19bf323c94eacc1943b4345b5b2485dfa50b7ac00a755e8a1dde2f8a4ed74 bertosebind_new_runs/executed/local/collect_current_glycan_sets.py bdb19bf323c94eacc1943b4345b5b2485dfa50b7ac00a755e8a1dde2f8a4ed74 unchanged executed local verification source; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/bertosebind_doubly_cold_anatomy_20260927/analysis/dc_anatomy.py 9c9b90f077709c105dd16b706ebcd434dd793177c274eca17b10bc3241f0138b bertosebind_new_runs/executed/local/dc_anatomy.py 9c9b90f077709c105dd16b706ebcd434dd793177c274eca17b10bc3241f0138b unchanged anatomy source; panel-bootstrap outputs descriptive only; none +/work/ratul1/supantha/Bertint/aff_attribution_motif.py 33d41f680cf7a5ae3b98fef4d1ef604f6e12a6a856ec6e90df8bb5a88f336bbe bertosebind_new_runs/executed/remote/aff_attribution_motif.py 33d41f680cf7a5ae3b98fef4d1ef604f6e12a6a856ec6e90df8bb5a88f336bbe unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/aff_attribution_motif.sbatch 2b89020895eebac8c99366036eebb07dd43c687fe47274dcd1de47d1017548ff bertosebind_new_runs/executed/remote/aff_attribution_motif.sbatch 2b89020895eebac8c99366036eebb07dd43c687fe47274dcd1de47d1017548ff unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/affinose_gifflar_macro_A_glycan_gifflarESM.json d7f21b8037172e6d42fb65c8169d37b19c385d68dc9cbebadbafe9e930843074 bertosebind_new_runs/executed/remote/affinose_gifflar_macro_A_glycan_gifflarESM.json d7f21b8037172e6d42fb65c8169d37b19c385d68dc9cbebadbafe9e930843074 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/affinose_gifflar_macro_A_glycan_sweetnetESM.json eca94bfbe82bfba95c2086c9c4ffe14091d442017356394ec2e75173cb66810f bertosebind_new_runs/executed/remote/affinose_gifflar_macro_A_glycan_sweetnetESM.json eca94bfbe82bfba95c2086c9c4ffe14091d442017356394ec2e75173cb66810f unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/affinose_gifflar_macro_B_protein_gifflarESM.json 529296c1388651b4451f35829d0caa63e692a96fc88b74ee9b8dc8c1d09136da bertosebind_new_runs/executed/remote/affinose_gifflar_macro_B_protein_gifflarESM.json 529296c1388651b4451f35829d0caa63e692a96fc88b74ee9b8dc8c1d09136da unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/affinose_gifflar_macro_B_protein_sweetnetESM.json 6f0098947aa4c962f991d1e17acc17707d7cb2eb5e9d6338182d6cfa65d28a2d bertosebind_new_runs/executed/remote/affinose_gifflar_macro_B_protein_sweetnetESM.json 6f0098947aa4c962f991d1e17acc17707d7cb2eb5e9d6338182d6cfa65d28a2d unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/affinose_gifflar_macro_C_doubly_gifflarESM.json bf720edacbad09cd04c42df7cf347dd1fe9846a22f307f7be1c38f06e89faa44 bertosebind_new_runs/executed/remote/affinose_gifflar_macro_C_doubly_gifflarESM.json bf720edacbad09cd04c42df7cf347dd1fe9846a22f307f7be1c38f06e89faa44 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/affinose_gifflar_macro_C_doubly_sweetnetESM.json 1884d744232b56c5edc76e655cf9bd117e43d8d749c98300b528ea6a5e55b75d bertosebind_new_runs/executed/remote/affinose_gifflar_macro_C_doubly_sweetnetESM.json 1884d744232b56c5edc76e655cf9bd117e43d8d749c98300b528ea6a5e55b75d unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/affinose_glycan_cold_contamination.json 0d4458462cd10dae219a9f15eb6dc8129d200a09891bd0b6bf0297cd85c4dae2 bertosebind_new_runs/executed/remote/affinose_glycan_cold_contamination.json 0d4458462cd10dae219a9f15eb6dc8129d200a09891bd0b6bf0297cd85c4dae2 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/b4_baselines_perrow.py 61a5ef32482365e37e58bd4aee49ff5dabc2fafa04f4e063f3a0be7c294c84c7 bertosebind_new_runs/executed/remote/b4_baselines_perrow.py 61a5ef32482365e37e58bd4aee49ff5dabc2fafa04f4e063f3a0be7c294c84c7 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/b4_gif_repeat.sbatch a381978d36492bb21cdb7c2a3007c51414b7630dd88016c7a74eb19c48080925 bertosebind_new_runs/executed/remote/b4_gif_repeat.sbatch a381978d36492bb21cdb7c2a3007c51414b7630dd88016c7a74eb19c48080925 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/b4_gif_repeat_compare.py 7fe6a80de1e7662a916e84b0a679c5579ab7fdcaaace70e1855f7d8face51ca3 bertosebind_new_runs/executed/remote/b4_gif_repeat_compare.py 7fe6a80de1e7662a916e84b0a679c5579ab7fdcaaace70e1855f7d8face51ca3 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/b4_lo_perrow_ckpt.py 1d0433763d7ad49088e396b435a42f2a12141436db05592778a79938c88a953b bertosebind_new_runs/executed/remote/b4_lo_perrow_ckpt.py 1d0433763d7ad49088e396b435a42f2a12141436db05592778a79938c88a953b unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/b4_step1_structure.py c82d7fe71d178d78d52ee47d809cd12d0286c48b1375c0c7b8b80fa222858e61 bertosebind_new_runs/executed/remote/b4_step1_structure.py c82d7fe71d178d78d52ee47d809cd12d0286c48b1375c0c7b8b80fa222858e61 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/b4_step3_bootstrap.py ab7560abe237da435464a984a4e23925e7ec48d802949f57ef9600b829e6b37d bertosebind_new_runs/executed/remote/b4_step3_bootstrap.py ab7560abe237da435464a984a4e23925e7ec48d802949f57ef9600b829e6b37d unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/b4_step3_bootstrap_r2.py 6dbbbeb14bb860f6344a93bb65754f540dee8da4ceb3fdc526133c7133dd426c bertosebind_new_runs/executed/remote/b4_step3_bootstrap_r2.py 6dbbbeb14bb860f6344a93bb65754f540dee8da4ceb3fdc526133c7133dd426c unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/diagnostics/affinose_b4_gif_repeat_20260927.json 50049bf5658f27700205e91d07f40512b8d297a7af11f51fcfbd514df9b59478 bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_gif_repeat_20260927.json 50049bf5658f27700205e91d07f40512b8d297a7af11f51fcfbd514df9b59478 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/diagnostics/affinose_b4_step1_structure_20260926.json 7f9edc64528d5b43d2c464f8f5d4db91c2a133f54364993c7798a2a606bd3427 bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step1_structure_20260926.json 7f9edc64528d5b43d2c464f8f5d4db91c2a133f54364993c7798a2a606bd3427 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/diagnostics/affinose_b4_step3_bootstrap_20260926.json 17ab513ec2d9dec6f1e8c9445dfd7500190f99f0e8758b21fbb435b026324f3b bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step3_bootstrap_20260926.json 17ab513ec2d9dec6f1e8c9445dfd7500190f99f0e8758b21fbb435b026324f3b unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/diagnostics/affinose_b4_step3_bootstrap_r2_20260927.json 6a87e6a8abc926f41ca13b1bb6c81cbf9ea1d04b06e8f39bfdaf847ce55ba235 bertosebind_new_runs/executed/remote/diagnostics/affinose_b4_step3_bootstrap_r2_20260927.json 6a87e6a8abc926f41ca13b1bb6c81cbf9ea1d04b06e8f39bfdaf847ce55ba235 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan.yaml 1ab7793ddb0daa247dc1f75b53356663d2c99e2e279a33207c9dd82f24288d17 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan.yaml 1ab7793ddb0daa247dc1f75b53356663d2c99e2e279a33207c9dd82f24288d17 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_gifflar.yaml cda3d3e0df11dcbffff287c985039a4abe486a39bb97fe1554851992cbca127e bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_gifflar.yaml cda3d3e0df11dcbffff287c985039a4abe486a39bb97fe1554851992cbca127e unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_sweetnet.yaml d11d6ca73935a664a9afe9330d07e51b7e95e89e044a1012065ef1780d820381 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s43_sweetnet.yaml d11d6ca73935a664a9afe9330d07e51b7e95e89e044a1012065ef1780d820381 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_gifflar.yaml dab891f502cb328f8313a9d2971e5d8134472b059fa776409f97f5f59e5d470b bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_gifflar.yaml dab891f502cb328f8313a9d2971e5d8134472b059fa776409f97f5f59e5d470b unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_sweetnet.yaml 875883d0ec38fca1a4995ea76c00db81ba84357fb2ed9a7c0921dbb6c7cf6492 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_A_glycan_s44_sweetnet.yaml 875883d0ec38fca1a4995ea76c00db81ba84357fb2ed9a7c0921dbb6c7cf6492 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein.yaml 529c3940cfce81ab3d135f25b722d7c302cd83e8540646f041a5d6ba36baebf3 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein.yaml 529c3940cfce81ab3d135f25b722d7c302cd83e8540646f041a5d6ba36baebf3 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_gifflar.yaml 908379483dc5b2d0655aa7b0a13b33c8b70ba0379852ffc2d848e354ebd9945e bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_gifflar.yaml 908379483dc5b2d0655aa7b0a13b33c8b70ba0379852ffc2d848e354ebd9945e unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_sweetnet.yaml 57cbf88ddf620ffbec7c4a8167a271ec38da0f94b1d3a4e9fe9769a9a19b8eea bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s43_sweetnet.yaml 57cbf88ddf620ffbec7c4a8167a271ec38da0f94b1d3a4e9fe9769a9a19b8eea unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_gifflar.yaml 5e518f2db88c03663eb263a5e4a44e93a3bc43e51c4af6c626cd0da416a18d81 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_gifflar.yaml 5e518f2db88c03663eb263a5e4a44e93a3bc43e51c4af6c626cd0da416a18d81 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_sweetnet.yaml 50c68416d3d4d72445e61811474179cb552e60d9f8a87f6cc0ed1da32d8b55e8 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_B_protein_s44_sweetnet.yaml 50c68416d3d4d72445e61811474179cb552e60d9f8a87f6cc0ed1da32d8b55e8 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly.yaml 034ba8bdefc3410b987d7bc380bd24a469a01c912349fef1e35436df2a24c36e bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly.yaml 034ba8bdefc3410b987d7bc380bd24a469a01c912349fef1e35436df2a24c36e unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_gifflar.yaml ed244565f2f81e6c554613718398af97683ad375eb4debb5a61d25855c444368 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_gifflar.yaml ed244565f2f81e6c554613718398af97683ad375eb4debb5a61d25855c444368 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_sweetnet.yaml d8ba3e8d83871cdd92548bc8bab1493225cdcbd536c0004ff6b40b48e4e62e40 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s43_sweetnet.yaml d8ba3e8d83871cdd92548bc8bab1493225cdcbd536c0004ff6b40b48e4e62e40 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_gifflar.yaml 2faa1986c043cf5d8b869d316afa0a043d071400c4f2018ba83551332a143f25 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_gifflar.yaml 2faa1986c043cf5d8b869d316afa0a043d071400c4f2018ba83551332a143f25 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_sweetnet.yaml 5fd2cdec3ee4d49f7d7441a037e0a2fbe428b1c0586de88beaf17a2ab67580f1 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_s44_sweetnet.yaml 5fd2cdec3ee4d49f7d7441a037e0a2fbe428b1c0586de88beaf17a2ab67580f1 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_sweetonly.yaml e8fafb98627685ededa4392c5310e149a7dbbe907e37b43da7d20d228961b181 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/configs/lgi/ours_C_doubly_sweetonly.yaml e8fafb98627685ededa4392c5310e149a7dbbe907e37b43da7d20d228961b181 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/data/utils.py ab257b93c23a522dcd99f37b2b802e67c8e3b4ba46b938db6229a6311a77cd39 bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/data/utils.py ab257b93c23a522dcd99f37b2b802e67c8e3b4ba46b938db6229a6311a77cd39 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/train.py ab79451e7b51e27d985904a4445fc09b756d759413bb2ebaf8755d177bb3e8ad bertosebind_new_runs/executed/remote/external/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/bench/models/GIFFLAR/gifflar/train.py ab79451e7b51e27d985904a4445fc09b756d759413bb2ebaf8755d177bb3e8ad unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gif_seeds.sbatch 56bf1e5b11a386d0920b9f50da6288eff222ee1b7f25d772a8a666a2387b2a9d bertosebind_new_runs/executed/remote/gif_seeds.sbatch 56bf1e5b11a386d0920b9f50da6288eff222ee1b7f25d772a8a666a2387b2a9d unchanged remote executed source/configuration/runtime evidence; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/remote_evidence/gifflar_launch.py 241d3ca6045610a70ccad8307448b4d57e47810c945f127fef768357e56cdef2 bertosebind_new_runs/executed/remote/gifflar_launch.py 241d3ca6045610a70ccad8307448b4d57e47810c945f127fef768357e56cdef2 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml e391584ec821c1e86916c6f8c14a6571a550034fd246e1dc0e7d7b3b6d4dbd7e bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml e391584ec821c1e86916c6f8c14a6571a550034fd246e1dc0e7d7b3b6d4dbd7e unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv 35d0ef06a1b9725233ed1e58c74101b7e6a555da48165ed57c9bd71bb5e77315 bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv 35d0ef06a1b9725233ed1e58c74101b7e6a555da48165ed57c9bd71bb5e77315 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml 0dae829566b87d0dd00613343bc5a0c49fb1107c0f4834327d8cca71b8932389 bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml 0dae829566b87d0dd00613343bc5a0c49fb1107c0f4834327d8cca71b8932389 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv fd6f39dd3bef9326bc1f583bf07a1f9b8f02f846630a0c58c66c7bae70456d59 bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv fd6f39dd3bef9326bc1f583bf07a1f9b8f02f846630a0c58c66c7bae70456d59 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml fb07ac7cfcb63c4dd77c7493f4a518e11d268fd5e8d4cf6a849c31552e48369a bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml fb07ac7cfcb63c4dd77c7493f4a518e11d268fd5e8d4cf6a849c31552e48369a unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv 1d9e1b8c6fff12f8603ce8f7e58189da0ae8580e72d3c5bf5ff3893a4f9bce2f bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv 1d9e1b8c6fff12f8603ce8f7e58189da0ae8580e72d3c5bf5ff3893a4f9bce2f unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml 4902e83edaa137f55f5fe4f32f32068e94a3f4832630b284048c22b8a099dca6 bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml 4902e83edaa137f55f5fe4f32f32068e94a3f4832630b284048c22b8a099dca6 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv b911e06e11968f9d8655ab69619f33a8878759e497eb44498432c341dc6fbdd1 bertosebind_new_runs/executed/remote/gifflar_lgi_A_glycan/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv b911e06e11968f9d8655ab69619f33a8878759e497eb44498432c341dc6fbdd1 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml 75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml 75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv 346d480fa44e31a5a486bfa99c136cc5ddfee27a197194b7fac289de9ba55665 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv 346d480fa44e31a5a486bfa99c136cc5ddfee27a197194b7fac289de9ba55665 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml 75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml 75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv 6a42d5cf20bf64a7b027660beca902ec84a80a1beb73e8aec1e4eb26fbb7c913 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv 6a42d5cf20bf64a7b027660beca902ec84a80a1beb73e8aec1e4eb26fbb7c913 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/hparams.yaml 75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/hparams.yaml 75ffe300584ac7f56ecc28e85be309a3f7c9f506a615d1edc8e77aac4f3d4b7b unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/metrics.csv a71483c34b9d9cd904a6fe241f88af3e30bb3e100a15d666def5b06e4a5c0431 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_gifflar/LGI_gifflarESM/version_2/metrics.csv a71483c34b9d9cd904a6fe241f88af3e30bb3e100a15d666def5b06e4a5c0431 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml 2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml 2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv faee86ceadc7e1dbe6835d44aef8c5d4f810a2cbe224e13202154b52dab92be3 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv faee86ceadc7e1dbe6835d44aef8c5d4f810a2cbe224e13202154b52dab92be3 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml 2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml 2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/metrics.csv ed66bf0654eeaabf3b4f5f92e1295abc53a0155095160092ffb47826ff385d1a bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_1/metrics.csv ed66bf0654eeaabf3b4f5f92e1295abc53a0155095160092ffb47826ff385d1a unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml 2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml 2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/metrics.csv 127b095cc67faf26378a247dc7345de56d331537dad375990ed319f684fbde27 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_2/metrics.csv 127b095cc67faf26378a247dc7345de56d331537dad375990ed319f684fbde27 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml 2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml 2213baffb7e7ada5a1f384d75380098d53bc92f2c3134e94d35750ab9e419c16 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/metrics.csv eee99377078178660db1f12c2700b0c46c9d8120db5f445a8d71d3f584cc9fcd bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s43_sweetnet/LGI_sweetnetESM/version_3/metrics.csv eee99377078178660db1f12c2700b0c46c9d8120db5f445a8d71d3f584cc9fcd unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml 0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml 0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv 47b51d96993782f3c9e6117722176941bd2c6d571200d160e28aa654c97c6356 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv 47b51d96993782f3c9e6117722176941bd2c6d571200d160e28aa654c97c6356 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml 0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml 0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv 89d056126636c1fd1fa44d27ecfd57040a9bfc9eec2a76104da0ae07d01680b3 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv 89d056126636c1fd1fa44d27ecfd57040a9bfc9eec2a76104da0ae07d01680b3 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/hparams.yaml 0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/hparams.yaml 0c1b007e6c5b0146ed2927ff60720f7c9fba81286f4dc4b866f896e18c878d35 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/metrics.csv c066cdbf7827bdec2f87c15bf95a42e0a23b511bf03338482e4d2b20c149336b bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_gifflar/LGI_gifflarESM/version_2/metrics.csv c066cdbf7827bdec2f87c15bf95a42e0a23b511bf03338482e4d2b20c149336b unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml 1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml 1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv fe5d987579ac234e8f21bb70e642177e9eccb69493564b7c5895e6abd51f4dc2 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv fe5d987579ac234e8f21bb70e642177e9eccb69493564b7c5895e6abd51f4dc2 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml 1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml 1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv 0ecfee6421a63cee0f0537fdb311e44b87227421f637816a0a3ccfd132763d16 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv 0ecfee6421a63cee0f0537fdb311e44b87227421f637816a0a3ccfd132763d16 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml 1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/hparams.yaml 1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/metrics.csv 0d313e8557cb13577b34c8e94e0f2c887c11cfa6da6ca36ab2aa5f9d1cc10f22 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_2/metrics.csv 0d313e8557cb13577b34c8e94e0f2c887c11cfa6da6ca36ab2aa5f9d1cc10f22 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml 1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/hparams.yaml 1192dfb103f69ed8970d6bb263fa292648b6c673b3067a33b46d26940d0231ef unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/metrics.csv 5ef2b9552f452e4218b9728c0ed57f7a14ec5068d065c7223e2c6e566e5dafd2 bertosebind_new_runs/executed/remote/gifflar_lgi_B_protein/logs_s44_sweetnet/LGI_sweetnetESM/version_3/metrics.csv 5ef2b9552f452e4218b9728c0ed57f7a14ec5068d065c7223e2c6e566e5dafd2 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml 781862ff668231f3501e892c7be567e4e3a16709f6b433e97edeadd60ec1e8bf bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/hparams.yaml 781862ff668231f3501e892c7be567e4e3a16709f6b433e97edeadd60ec1e8bf unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv e92266239d6445a0de886e5081e433632c6719719f6d536ad31e98045160fcea bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_0/metrics.csv e92266239d6445a0de886e5081e433632c6719719f6d536ad31e98045160fcea unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml 781862ff668231f3501e892c7be567e4e3a16709f6b433e97edeadd60ec1e8bf bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/hparams.yaml 781862ff668231f3501e892c7be567e4e3a16709f6b433e97edeadd60ec1e8bf unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv 929a3396f429527836db8368e7908024bf69766e0567636b1f24df8c1c06ea42 bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_gifflar/LGI_gifflarESM/version_1/metrics.csv 929a3396f429527836db8368e7908024bf69766e0567636b1f24df8c1c06ea42 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml f7852d23330d3b55e46eec193b3fe411306ea59349de6fa53273294d893dce1c bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml f7852d23330d3b55e46eec193b3fe411306ea59349de6fa53273294d893dce1c unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv 1e68c5af1f9c7fe0f1c85d9f3d49fa1104bf3d4c768014154316ee27b94a3cc3 bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s43_sweetnet/LGI_sweetnetESM/version_0/metrics.csv 1e68c5af1f9c7fe0f1c85d9f3d49fa1104bf3d4c768014154316ee27b94a3cc3 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml 987afb2ba2360ff7f2a5a94943d064a7a3e5c902b53e445bc59bc291241e9d9a bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/hparams.yaml 987afb2ba2360ff7f2a5a94943d064a7a3e5c902b53e445bc59bc291241e9d9a unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv e937607ecc6a7058664faab71728c58ef7a9bba8f6985082bca5d565aef6ec7e bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_0/metrics.csv e937607ecc6a7058664faab71728c58ef7a9bba8f6985082bca5d565aef6ec7e unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml 987afb2ba2360ff7f2a5a94943d064a7a3e5c902b53e445bc59bc291241e9d9a bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/hparams.yaml 987afb2ba2360ff7f2a5a94943d064a7a3e5c902b53e445bc59bc291241e9d9a unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv eb420f0ea03bce2075ad4eac9237862ccbecb2c37c02d162d860516f4739b280 bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_gifflar/LGI_gifflarESM/version_1/metrics.csv eb420f0ea03bce2075ad4eac9237862ccbecb2c37c02d162d860516f4739b280 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml 22796804655424d5977b04b0b171d4da9fba18896eb4928842c4fad6bb7911dd bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/hparams.yaml 22796804655424d5977b04b0b171d4da9fba18896eb4928842c4fad6bb7911dd unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv 30f0105da3f2c579a8261a30ed6c3fcc8308cf9ebc2068f0e71168567e919922 bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_0/metrics.csv 30f0105da3f2c579a8261a30ed6c3fcc8308cf9ebc2068f0e71168567e919922 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml 22796804655424d5977b04b0b171d4da9fba18896eb4928842c4fad6bb7911dd bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/hparams.yaml 22796804655424d5977b04b0b171d4da9fba18896eb4928842c4fad6bb7911dd unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv 168da3dcbf6ca795bb75ec67b9fc567788637c25875b766cc76b441825e6020c bertosebind_new_runs/executed/remote/gifflar_lgi_C_doubly/logs_s44_sweetnet/LGI_sweetnetESM/version_1/metrics.csv 168da3dcbf6ca795bb75ec67b9fc567788637c25875b766cc76b441825e6020c unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_score_macro.py ef833104d5eecd273df7d9f7c39bae4a216b015bde15978ea716f1f864874de4 bertosebind_new_runs/executed/remote/gifflar_score_macro.py ef833104d5eecd273df7d9f7c39bae4a216b015bde15978ea716f1f864874de4 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_score_macro_seeds.py 578635213e1a3eddd61438a6249f14e1a5d2487267286fc459eb77972808e225 bertosebind_new_runs/executed/remote/gifflar_score_macro_seeds.py 578635213e1a3eddd61438a6249f14e1a5d2487267286fc459eb77972808e225 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/gifflar_score_perrow.py f88bcf303685ea6a075747a12eafa7df041909b9b455d80ea98c2b536aed0de8 bertosebind_new_runs/executed/remote/gifflar_score_perrow.py f88bcf303685ea6a075747a12eafa7df041909b9b455d80ea98c2b536aed0de8 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_attr_motif_16596807.out e65e21b8c9c9bd0291a034852f7ab47f826e1f51448d9ea8439b5eb23ed8eb98 bertosebind_new_runs/executed/remote/logs/aff_attr_motif_16596807.out e65e21b8c9c9bd0291a034852f7ab47f826e1f51448d9ea8439b5eb23ed8eb98 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_b4_grep_16604967.out dadfe2c408938645b4138bb011719affdaebe7098060f66354df56da71d0a146 bertosebind_new_runs/executed/remote/logs/aff_b4_grep_16604967.out dadfe2c408938645b4138bb011719affdaebe7098060f66354df56da71d0a146 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_b4_s3_16604914.out 79eb29df46c44942a2a6ac4313789ebc29e1672bec4512c4f965be5ebb739cc9 bertosebind_new_runs/executed/remote/logs/aff_b4_s3_16604914.out 79eb29df46c44942a2a6ac4313789ebc29e1672bec4512c4f965be5ebb739cc9 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_b4_s3r2_16605803.out 5d93f96fb6e537c9b802fd1b2d9fe25df41a19800f85ea860246274d2e897d71 bertosebind_new_runs/executed/remote/logs/aff_b4_s3r2_16605803.out 5d93f96fb6e537c9b802fd1b2d9fe25df41a19800f85ea860246274d2e897d71 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_0.err 6c486b37a642549a8dcf924eabd52e2660d88a6ada53ba05aecb91937fd98626 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_0.err 6c486b37a642549a8dcf924eabd52e2660d88a6ada53ba05aecb91937fd98626 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_0.out 7832596dfd62832aadeed39c1acca59643f00ec8dbe812730b49bd1b2ca5150b bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_0.out 7832596dfd62832aadeed39c1acca59643f00ec8dbe812730b49bd1b2ca5150b unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_1.err bf5e3ff79c6b942dca7f35dcb85d0f32081b03875cb4640022fab29dff833b11 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_1.err bf5e3ff79c6b942dca7f35dcb85d0f32081b03875cb4640022fab29dff833b11 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_1.out 134b045efbf1f560d0d41fa702ff53b6369fd38235fcef55ca8aaa4615698fed bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_1.out 134b045efbf1f560d0d41fa702ff53b6369fd38235fcef55ca8aaa4615698fed unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_10.err d911a9619dee68a9fc982bb3db253b8e72f12dc1c06d2bc434556211909b2719 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_10.err d911a9619dee68a9fc982bb3db253b8e72f12dc1c06d2bc434556211909b2719 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_10.out c079926adcc0d2bce5b591f870208dcd2bef2ea3029aee8950bf0ce44c1105ea bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_10.out c079926adcc0d2bce5b591f870208dcd2bef2ea3029aee8950bf0ce44c1105ea unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_11.err 5024c4160aeeccd212930b0d959ed0bab4dd7bf593b61b26decd78c7513aa638 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_11.err 5024c4160aeeccd212930b0d959ed0bab4dd7bf593b61b26decd78c7513aa638 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_11.out 4d110e939761ff4d8c7938c754e182d2c09ede84c8360d10ce18a04280dafea6 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_11.out 4d110e939761ff4d8c7938c754e182d2c09ede84c8360d10ce18a04280dafea6 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_2.err d9383fa7e0469a436e08d24f4f9af31c1a6fb9ebb5e115843b53e2b2ded612f1 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_2.err d9383fa7e0469a436e08d24f4f9af31c1a6fb9ebb5e115843b53e2b2ded612f1 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_2.out 0bbeab27824eeffbbfe5cf04317d1795b1f8f02d4c5ad9b7dbc23e159a823940 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_2.out 0bbeab27824eeffbbfe5cf04317d1795b1f8f02d4c5ad9b7dbc23e159a823940 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_3.err 735f42f273046b3af0374283927429fa75a1b7a8b66d6b205a20e4e1cfd59eed bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_3.err 735f42f273046b3af0374283927429fa75a1b7a8b66d6b205a20e4e1cfd59eed unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_3.out dcdbc088e7945d0f63803ac95aed81f3f8c8d25c97dd760df269921a08bacae7 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_3.out dcdbc088e7945d0f63803ac95aed81f3f8c8d25c97dd760df269921a08bacae7 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_4.err 98912251710582e65eaed2ba01ee184d957d177ec31e30969939b4ef0962a2bf bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_4.err 98912251710582e65eaed2ba01ee184d957d177ec31e30969939b4ef0962a2bf unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_4.out b1febe3591a887bd63d7bb607536ce17bdab51eb9db9a8b8c3d9d5ff77aca1c2 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_4.out b1febe3591a887bd63d7bb607536ce17bdab51eb9db9a8b8c3d9d5ff77aca1c2 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_5.err cbb38c7fc50100cfa44cdf9b64de3df9a002613c62d8489b9d3db301406712c7 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_5.err cbb38c7fc50100cfa44cdf9b64de3df9a002613c62d8489b9d3db301406712c7 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_5.out a1b8f17ba63285c54d42ad49ce61bf8356ac4dfe279de8b65f687304783bdf55 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_5.out a1b8f17ba63285c54d42ad49ce61bf8356ac4dfe279de8b65f687304783bdf55 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_6.err 8ec18cd103ee2f80b2bacc8660a53588ed6313dbdc2455fe87fb5cdac6d30ef1 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_6.err 8ec18cd103ee2f80b2bacc8660a53588ed6313dbdc2455fe87fb5cdac6d30ef1 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_6.out 18050c22347d3a2900b0d15cd7f2b97c1f6028ff27e5e060fc33c8308851b358 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_6.out 18050c22347d3a2900b0d15cd7f2b97c1f6028ff27e5e060fc33c8308851b358 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_7.err 1a1baefb3f9d8bae9c38975310f96004470e75bed27b32b5273b31a9baca05f5 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_7.err 1a1baefb3f9d8bae9c38975310f96004470e75bed27b32b5273b31a9baca05f5 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_7.out 8869a90d89089a6f26c7d88b1a389630930c35adff10016a015bc5bb331308b7 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_7.out 8869a90d89089a6f26c7d88b1a389630930c35adff10016a015bc5bb331308b7 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_8.err 01b633582a3ed13728f688fde16693926778896ba0952506cce66072f600f354 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_8.err 01b633582a3ed13728f688fde16693926778896ba0952506cce66072f600f354 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_8.out 8f468cb20588f01bc0794c43ea69d5fa78627f4e35ef7ecdb7ffbcd3266c78c3 bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_8.out 8f468cb20588f01bc0794c43ea69d5fa78627f4e35ef7ecdb7ffbcd3266c78c3 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_9.err a3ea46d3bd9191b9bbd49627cbfdac0dee312230e5e1ed93016f98f8786b94ba bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_9.err a3ea46d3bd9191b9bbd49627cbfdac0dee312230e5e1ed93016f98f8786b94ba unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gseed_16597159_9.out 313f8c5e3999dfa75ae508fd57d0d033a00b40cdf2b794cb4c32fb0a901b53bb bertosebind_new_runs/executed/remote/logs/aff_gseed_16597159_9.out 313f8c5e3999dfa75ae508fd57d0d033a00b40cdf2b794cb4c32fb0a901b53bb unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_0.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_0.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_0.out 19bb18892da4f9174e308bd42908a6e6d383001edd75c9ad482eef111b5bbb31 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_0.out 19bb18892da4f9174e308bd42908a6e6d383001edd75c9ad482eef111b5bbb31 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_1.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_1.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_1.out 152af1228aa39534d68470023321d4350bb2ea4b997bfd0bf38efbbeb92bad8b bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_1.out 152af1228aa39534d68470023321d4350bb2ea4b997bfd0bf38efbbeb92bad8b unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_10.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_10.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_10.out d842f047adc16782a9724406ecab07aa67fe3ad853f5d0c8bee73cb63d129782 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_10.out d842f047adc16782a9724406ecab07aa67fe3ad853f5d0c8bee73cb63d129782 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_11.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_11.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_11.out 922dfe72fd457b50a6c468db266827346ab1173381458ad61e21ceb5a0c8736c bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_11.out 922dfe72fd457b50a6c468db266827346ab1173381458ad61e21ceb5a0c8736c unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_2.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_2.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_2.out 2b008f6ae0f5554b9841582ded12a01558218558d8b7748899e94a0499d8caaf bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_2.out 2b008f6ae0f5554b9841582ded12a01558218558d8b7748899e94a0499d8caaf unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_3.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_3.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_3.out c1d325125ee0463b230e5ac347c45a117ebc1a1686393d9d7bd63dd7c9a8a8d4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_3.out c1d325125ee0463b230e5ac347c45a117ebc1a1686393d9d7bd63dd7c9a8a8d4 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_4.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_4.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_4.out 939f30920d3d4a772d8736c945f6e39dc949cde64cc7b9b9e0116e7b45f4f895 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_4.out 939f30920d3d4a772d8736c945f6e39dc949cde64cc7b9b9e0116e7b45f4f895 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_5.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_5.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_5.out 7817d9b5c087d542f2c0659726a66532091a24c9b05edb04196a756291dd5784 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_5.out 7817d9b5c087d542f2c0659726a66532091a24c9b05edb04196a756291dd5784 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_6.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_6.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_6.out 4283aa1d699582d4766ca394cf2d9c4b046ce8247b5cef0f8250c424329138a2 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_6.out 4283aa1d699582d4766ca394cf2d9c4b046ce8247b5cef0f8250c424329138a2 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_7.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_7.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_7.out eb0257132cbd79d1a3a84bec543183b7bbdaceaaaefc85c988368d70d4146322 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_7.out eb0257132cbd79d1a3a84bec543183b7bbdaceaaaefc85c988368d70d4146322 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_8.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_8.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_8.out 523b5ac11259832265dab5c4e08d837f3fe7e4780048a5a4af1f513f6b8c3d4a bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_8.out 523b5ac11259832265dab5c4e08d837f3fe7e4780048a5a4af1f513f6b8c3d4a unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_9.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_9.err 53e0d436715c2b2e61c45d8474df7edff033d7693326a363aa202198e7001ff4 unchanged remote executed source/configuration/runtime evidence; none +/work/ratul1/supantha/Bertint/logs/aff_gsmac_16602170_9.out 40ef3d8f12ba723cfe0e845ec72a960dbd32c8bc5baa3013f570e1c27a6431b6 bertosebind_new_runs/executed/remote/logs/aff_gsmac_16602170_9.out 40ef3d8f12ba723cfe0e845ec72a960dbd32c8bc5baa3013f570e1c27a6431b6 unchanged remote executed source/configuration/runtime evidence; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/remote_evidence/manifest.json 06fbfcd2f820fc4621d35c16dcd6bbece93ea68b96d417d8b7bd2ce3ea104cdb bertosebind_new_runs/executed/remote/manifest.json 06fbfcd2f820fc4621d35c16dcd6bbece93ea68b96d417d8b7bd2ce3ea104cdb unchanged remote executed source/configuration/runtime evidence; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/remote_evidence/train_lgi.py bf602abb05eeb3b0203766d9d1bc462579c181bc3418d762f6d02d5f36e8a230 bertosebind_new_runs/executed/remote/train_lgi.py bf602abb05eeb3b0203766d9d1bc462579c181bc3418d762f6d02d5f36e8a230 unchanged remote executed source/configuration/runtime evidence; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/current_glycan_sets/doubly_cold_exposure_join.csv 9d13452309d64f138705657334b74738eaf167c9faff835d024582e0e98c0af8 bertosebind_new_runs/inputs/current_glycan_sets/doubly_cold_exposure_join.csv 9d13452309d64f138705657334b74738eaf167c9faff835d024582e0e98c0af8 current scored-set source export or exact-WURCS exposure join; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/current_glycan_sets/doubly_cold_scored_glycans.csv e5eebf2072779d7001dabd3981237025be37eee6f19a5b109b00ce4b3e776e09 bertosebind_new_runs/inputs/current_glycan_sets/doubly_cold_scored_glycans.csv e5eebf2072779d7001dabd3981237025be37eee6f19a5b109b00ce4b3e776e09 current scored-set source export or exact-WURCS exposure join; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/current_glycan_sets/glycan_cold_exposure_join.csv 4d101cc92685c63ecca99cfad2c1bc46c73c77b1e565bd686bde14ee0d020886 bertosebind_new_runs/inputs/current_glycan_sets/glycan_cold_exposure_join.csv 4d101cc92685c63ecca99cfad2c1bc46c73c77b1e565bd686bde14ee0d020886 current scored-set source export or exact-WURCS exposure join; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/current_glycan_sets/glycan_cold_scored_glycans.csv 0faab973a6ee5e5bf712983d51fad9f746e34edcbe5342574d45933bba62f48a bertosebind_new_runs/inputs/current_glycan_sets/glycan_cold_scored_glycans.csv 0faab973a6ee5e5bf712983d51fad9f746e34edcbe5342574d45933bba62f48a current scored-set source export or exact-WURCS exposure join; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/current_glycan_sets/manifest.json 7655d9d080df7cb5dc748b7d9721037fbec67c04cf837e4724f0afba7e7a4d71 bertosebind_new_runs/inputs/current_glycan_sets/manifest.json 7655d9d080df7cb5dc748b7d9721037fbec67c04cf837e4724f0afba7e7a4d71 current scored-set source export or exact-WURCS exposure join; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/current_glycan_sets/protein_cold_exposure_join.csv 08ceef347f61012e0baab4daf1472122dc80335c6ea02fe084098c055a3e3e30 bertosebind_new_runs/inputs/current_glycan_sets/protein_cold_exposure_join.csv 08ceef347f61012e0baab4daf1472122dc80335c6ea02fe084098c055a3e3e30 current scored-set source export or exact-WURCS exposure join; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/current_glycan_sets/protein_cold_scored_glycans.csv f35d6088903e993f46adee07806e577456599d9814f4f43e40efdf3d8ddf6c46 bertosebind_new_runs/inputs/current_glycan_sets/protein_cold_scored_glycans.csv f35d6088903e993f46adee07806e577456599d9814f4f43e40efdf3d8ddf6c46 current scored-set source export or exact-WURCS exposure join; none +generated staged BERToseBind integration bertosebind_new_runs/package_manifest.json 56d04a5a985d2bd96067e5c1a1e7acd67c5f76ae05c17831bc5949cb6bee26ab staged documentation/manifest; no scientific source changes +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/AFFINOSE_UPDATE_TRACKER.md cac6e840402f83fae2dc7115ce9247423c82122b3ebf0dd6488f30f5946aa495 bertosebind_new_runs/protocol/amendment_excerpts_20260925_26.md 924765b90a840277c5ed9dd6594a8ded2d5f7add5b138a9af1adf89bbb46cbcc verbatim selected protocol sections; exact source line excerpts:68–177 and199–261; explanatory header +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/AFFINOSE_BOOTSTRAP_PREDECLARATION_20260910.md 04dea299feb3ac0840ff5db7471381ad3f1cf531653bf6aeb9825005236d2f0b bertosebind_new_runs/protocol/original_20260910.md 04dea299feb3ac0840ff5db7471381ad3f1cf531653bf6aeb9825005236d2f0b unchanged original protocol; superseded in specified respects; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/bootstrap_anatomy_audit.json 11014b5f0972c23b7225c4202f2254b444109b8105563d968e9c8f4534061ff1 bertosebind_new_runs/provenance/bootstrap_anatomy_audit.json 11014b5f0972c23b7225c4202f2254b444109b8105563d968e9c8f4534061ff1 verification record or required external input manifest; not a scientific rerun; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/bootstrap_code_audit.json d2812e72a7befc1bdb08465189d2fed035ae725142c1cf978a578e0add72e94d bertosebind_new_runs/provenance/bootstrap_code_audit.json d2812e72a7befc1bdb08465189d2fed035ae725142c1cf978a578e0add72e94d verification record or required external input manifest; not a scientific rerun; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/bootstrap_exact_input_manifest.json d6e36605873c587028c6dab2dde8093c6e4e33df53ebc27f1d6e3c6b4de14991 bertosebind_new_runs/provenance/bootstrap_exact_input_manifest.json d6e36605873c587028c6dab2dde8093c6e4e33df53ebc27f1d6e3c6b4de14991 verification record or required external input manifest; not a scientific rerun; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/current_pretraining_exposure_audit.json 30a70a1703183b50fa1c10986c065471513981fac1e3e69f9c7ad649aeecb16a bertosebind_new_runs/provenance/current_pretraining_exposure_audit.json 30a70a1703183b50fa1c10986c065471513981fac1e3e69f9c7ad649aeecb16a verification record or required external input manifest; not a scientific rerun; none +generated portable reporting check or documentation bertosebind_new_runs/provenance/exposure_portability.patch ff65b38435040ba2f5987e0c78ecc0fafc4604341b9bc094513d47cb343db023 portable reporting check or documentation; new documentation/check, or path-only port recorded in exposure_portability.patch +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/gifflar_scorer_diff.txt 6649cef7a00096ba2981c611a4c6432be93300e3bb439cd543a692cbb40a15af bertosebind_new_runs/provenance/gifflar_scorer_diff.txt 6649cef7a00096ba2981c611a4c6432be93300e3bb439cd543a692cbb40a15af verification record or required external input manifest; not a scientific rerun; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/protein_gifflar_audit.json 7d24cac24a37583fddac7d91c73e22ea6d4a022194ac213ab354f9e9831b1084 bertosebind_new_runs/provenance/protein_gifflar_audit.json 7d24cac24a37583fddac7d91c73e22ea6d4a022194ac213ab354f9e9831b1084 verification record or required external input manifest; not a scientific rerun; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/protein_gifflar_verified_numbers.json 9d2e628a789a46a69333c24550d2a150166aebed382880c2d0a67fbd43124eaa bertosebind_new_runs/provenance/protein_gifflar_verified_numbers.json 9d2e628a789a46a69333c24550d2a150166aebed382880c2d0a67fbd43124eaa verification record or required external input manifest; not a scientific rerun; none +generated portable reporting check or documentation bertosebind_new_runs/reproduce_summary.py 4b49c6f8f6c9953cee46ff2f6c47e1bb68692c9b58984973b3d8666648999f62 portable reporting check or documentation; new documentation/check, or path-only port recorded in exposure_portability.patch +generated portable reporting check or documentation bertosebind_new_runs/requirements.txt 99acda4c8365d691c16de3e032e225de05cee38cff063a772bf9eaec2067328f portable reporting check or documentation; new documentation/check, or path-only port recorded in exposure_portability.patch +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/bertosebind_doubly_cold_anatomy_20260927/outputs/doubly_cold_anatomy.json 0dff08537f0cd5a1ad40562537c48546d3d4f3858a75b2ab2d3729b22a5dfe91 bertosebind_new_runs/results/doubly_cold_anatomy.json 0dff08537f0cd5a1ad40562537c48546d3d4f3858a75b2ab2d3729b22a5dfe91 saved anatomy result; no model refit; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/bertosebind_doubly_cold_anatomy_20260927/outputs/doubly_cold_per_assay.csv 4186c66c13fd05d62d83a10df2a5761b2e29ded502660c12cb450836f9881496 bertosebind_new_runs/results/doubly_cold_per_assay.csv 4186c66c13fd05d62d83a10df2a5761b2e29ded502660c12cb450836f9881496 saved anatomy result; no model refit; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/affinose_eval/gifflar_seed_macro_20260926/affinose_gifflar_macro_A_glycan_gifflarESM_s43.json 2c494ac1351d4ff63828139eac004c0047dc3259d62fd10334d5a740cab9182f bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_gifflarESM_s43.json 2c494ac1351d4ff63828139eac004c0047dc3259d62fd10334d5a740cab9182f original producer seed43/44 score receipt; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/affinose_eval/gifflar_seed_macro_20260926/affinose_gifflar_macro_A_glycan_gifflarESM_s44.json 82173016b893cb2913e90e99feea5f6f4ff22cff9e1aff0fe7dc136161c7f627 bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_gifflarESM_s44.json 82173016b893cb2913e90e99feea5f6f4ff22cff9e1aff0fe7dc136161c7f627 original producer seed43/44 score receipt; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/affinose_eval/gifflar_seed_macro_20260926/affinose_gifflar_macro_A_glycan_sweetnetESM_s43.json ac58a83969a0ffb860cf1a33a472f4cb5b3e14f25097c3ba909f7555f65aa589 bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_sweetnetESM_s43.json ac58a83969a0ffb860cf1a33a472f4cb5b3e14f25097c3ba909f7555f65aa589 original producer seed43/44 score receipt; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/affinose_eval/gifflar_seed_macro_20260926/affinose_gifflar_macro_A_glycan_sweetnetESM_s44.json d2d2d73c834a2fcca7b8c22fd6ce91907f18866443628c2c54f8b8ec04477803 bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_A_glycan_sweetnetESM_s44.json d2d2d73c834a2fcca7b8c22fd6ce91907f18866443628c2c54f8b8ec04477803 original producer seed43/44 score receipt; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/affinose_eval/gifflar_seed_macro_20260926/affinose_gifflar_macro_B_protein_gifflarESM_s43.json 7b0a01a1acc7e2ca80a3de9aaab02941942ead519e6661abec6c44c7fa5fd079 bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_gifflarESM_s43.json 7b0a01a1acc7e2ca80a3de9aaab02941942ead519e6661abec6c44c7fa5fd079 original producer seed43/44 score receipt; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/affinose_eval/gifflar_seed_macro_20260926/affinose_gifflar_macro_B_protein_gifflarESM_s44.json f2e40d306b767e6949c02304077a08398dc16ac19d08d94937f7dc49abd7cc24 bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_gifflarESM_s44.json f2e40d306b767e6949c02304077a08398dc16ac19d08d94937f7dc49abd7cc24 original producer seed43/44 score receipt; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/affinose_eval/gifflar_seed_macro_20260926/affinose_gifflar_macro_B_protein_sweetnetESM_s43.json e13c8021d6e94b3bd6cb4ef00d7456c182449f57c4b1356256e011805a6efdbf bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_sweetnetESM_s43.json e13c8021d6e94b3bd6cb4ef00d7456c182449f57c4b1356256e011805a6efdbf original producer seed43/44 score receipt; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/affinose_eval/gifflar_seed_macro_20260926/affinose_gifflar_macro_B_protein_sweetnetESM_s44.json d274d35c9a0ba25e4597cdb8c01001f4f7ff7760aabfe7c8a00b84a70b74252f bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_B_protein_sweetnetESM_s44.json d274d35c9a0ba25e4597cdb8c01001f4f7ff7760aabfe7c8a00b84a70b74252f original producer seed43/44 score receipt; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/affinose_eval/gifflar_seed_macro_20260926/affinose_gifflar_macro_C_doubly_gifflarESM_s43.json 2208056d5303fda27c5b541eed1c6f64cb03de1c10abd2868d4ce55d1bdb475c bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_gifflarESM_s43.json 2208056d5303fda27c5b541eed1c6f64cb03de1c10abd2868d4ce55d1bdb475c original producer seed43/44 score receipt; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/affinose_eval/gifflar_seed_macro_20260926/affinose_gifflar_macro_C_doubly_gifflarESM_s44.json c831378d73c3c2c9456be5ff9ff05acc34b64815b056c5df21bef2078a415393 bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_gifflarESM_s44.json c831378d73c3c2c9456be5ff9ff05acc34b64815b056c5df21bef2078a415393 original producer seed43/44 score receipt; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/affinose_eval/gifflar_seed_macro_20260926/affinose_gifflar_macro_C_doubly_sweetnetESM_s43.json 121a30d0de568217e722036cf25ba4ef61128398fde3466fc8b2f60f096722c7 bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_sweetnetESM_s43.json 121a30d0de568217e722036cf25ba4ef61128398fde3466fc8b2f60f096722c7 original producer seed43/44 score receipt; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/affinose_eval/gifflar_seed_macro_20260926/affinose_gifflar_macro_C_doubly_sweetnetESM_s44.json 3d29ac377491db5d952f6066228fe4099f99db0e2fbaa80063ee429fc28e0a28 bertosebind_new_runs/results/gifflar/affinose_gifflar_macro_C_doubly_sweetnetESM_s44.json 3d29ac377491db5d952f6066228fe4099f99db0e2fbaa80063ee429fc28e0a28 original producer seed43/44 score receipt; none +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/affinose_eval/affinose_attribution_motif_20260925.json 4fd80f7396aa9803602fd62bd82ec3e98e1f937b46e1057cb26ffa56ea6c93f0 bertosebind_new_runs/results/protein_probe.json 4fd80f7396aa9803602fd62bd82ec3e98e1f937b46e1057cb26ffa56ea6c93f0 reported-model protein replacement result; none +generated during submission preparation examples/smoke_affinose.py 903d14d8bafc9ae2aa968a74ad4b9d31396c598624fe05e2acb1814cb60bd60e generated candidate documentation, configuration or convenience entrypoint +generated during submission preparation examples/smoke_models.py ff95ff2a7707940b849a44259cdf356f66dd5b0351faf4e400feac6666afd9af generated candidate documentation, configuration or convenience entrypoint +Supplementary figure presentation conventions figures/Figure_style.md 75d530c95c218fafb25e844865dd3884737d11b23c4cfdc121226549923fecdb verified figure presentation; scientific inputs unchanged +generated during IAR code-package integration figures/README.md 784b9b6472c10498b5aaef3f5bcc43f23bde0805135c6b0265d851aa6e342c1e generated candidate documentation or compatibility entrypoint +generated supplementary figure source or documentation figures/ablation_figure9/README.md 3a6fcbfe8388f494ad542a24a6d4d66c8315af62e82627a2429518fbe1b2f9bd source-bound reporting support; scientific input values preserved +generated supplementary figure source or documentation figures/ablation_figure9/nature-bpg-palette.json a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b source-bound reporting support; scientific input values preserved +generated supplementary figure source or documentation figures/ablation_figure9/plot_data.json 179bf3ddb15842c726a90a9cf373c7861409c8f823bae344a0b621fa77ed51f9 source-bound reporting support; scientific input values preserved +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/figure13/README.md 2eb844feaad81568e45e5ec385367742e71c7084b0e1f323fea17f815c4378f0 figures/bootstrap_figure13/README.md 9494d4ea185f98082bf6197cf6c244035c3cb8c811527c922357fc28ca381149 verified figure source or source-bound input; no scientific rerun +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/figure13/build_figure13.py 8355834f0c2a8c2978ebf808a1944b6288214b9773eae441bbeeec140ed55518 figures/bootstrap_figure13/build_figure13.py 832849e584499907aa66540616d52ffa192538bf9353f19c4f463f48694a4806 verified figure source or source-bound input; no scientific rerun +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/figure13/inputs/affinose_b4_step3_bootstrap_r2_20260927.json 6a87e6a8abc926f41ca13b1bb6c81cbf9ea1d04b06e8f39bfdaf847ce55ba235 figures/bootstrap_figure13/inputs/affinose_b4_step3_bootstrap_r2_20260927.json 6a87e6a8abc926f41ca13b1bb6c81cbf9ea1d04b06e8f39bfdaf847ce55ba235 verified figure source or source-bound input; no scientific rerun +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/bertosebind_new_runs_20260927/figure13/inputs/nature-bpg-palette.json a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b figures/bootstrap_figure13/inputs/nature-bpg-palette.json a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b verified figure source or source-bound input; no scientific rerun +generated supplementary figure source or documentation figures/build_bpe_figure3.py b262b420db6a5d18712c985b7d27b0d33dbdcbb2e1b3961bdf6c06110ba107ae source-bound reporting support; scientific input values preserved +generated during IAR reporting integration figures/build_corpus_composition_figure.py 0ceff115647c4921165805fb25fb5ec5451e8ac1264a9140b3db8591f30f66d2 generated reporting support; recorded inputs preserved +generated during IAR code-package integration figures/build_grey_seal_figure5.py 6053ddca0892325752308544a39da61d427de959f6559ab771902b0c30c7c103 generated candidate documentation or compatibility entrypoint +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/public_model_naming_figures_20260912/build_submission_figures.py 5ecc0ebd7445822a601eb495866715899d701624a4c8d5dd9344e80b81778d82 figures/build_submission_figures.py 69fd3be7f723c7dd229762aa9fba7f2413ed446a8ac7e703ef45e90b3f29223e Current grey-seal Figure5 invoked after existing routines; historical Figure5 skipped. Other figure routines preserved. Original source identity retained. +generated supplementary figure source or documentation figures/build_supplement_figure1.py bb8cfaa1ec26c36f22b27bb3b19d61dbf98da1fd42e6889e408f4dd9d17eda31 source-bound reporting support; scientific input values preserved +generated during submission preparation figures/build_supplement_presentation.py 9086813c19cb26d23e1f7d2a75b1ef80ed29d4d087822fa9e95ac40821a32896 Current Supplementary Figures 1 and 7 drawing functions; no fitting or inference. +generated supplementary figure source or documentation figures/build_supplementary_figure9.py 9b604ffc6435ed8d0f20c0d1ba66cb5cfa43ecf503226bf261ce1b4d8a4deae2 source-bound reporting support; scientific input values preserved +supplementary figure source, exact input copy or documentation figures/build_taxonomy_figure11.py 47a79341f902cb286e2517056ae698c6cc35b0641ffa5a09ad7fde28bc429004 plotting existing reported results; scientific values preserved +generated supplementary figure source or documentation figures/build_token_length_figure2.py e964dc2d021382d5950008eceef05d001d640de608b0d86ce37701db5de8379e source-bound reporting support; scientific input values preserved +generated supplementary figure source or documentation figures/build_training_coverage_figure6.py bc7e195afef8b5fa7c3effabc7253434d6a5b77b428644a909a1da734def4c5c source-bound reporting support; scientific input values preserved +supplementary figure source, exact input copy or documentation figures/contrastive_figure12/README.md bb948ed57ebbab93875926c3be782996050e8728d3e73b9e6685916b725ee8be plotting existing reported results; scientific values preserved +supplementary figure source, exact input copy or documentation figures/contrastive_figure12/build_figure12.py 715df862316031c39bbccc5339d442520863d4f99b9f3a19d8e1e8594db6281f plotting existing reported results; scientific values preserved +supplementary figure source, exact input copy or documentation figures/contrastive_figure12/inputs/nature-bpg-palette.json a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b plotting existing reported results; scientific values preserved +supplementary figure source, exact input copy or documentation figures/contrastive_figure12/inputs/review_contrastive_fit_values.csv d732e76c28cd3d741fad99636a8937b464f1efa190d26e7005146e6c88b1feb3 plotting existing reported results; scientific values preserved +supplementary figure source, exact input copy or documentation figures/contrastive_figure12/inputs/review_contrastive_paired_summary.csv 5bfd6352e60158fe3a09c2a3228a7fffc4926780aa320b5e205ef276db3e4113 plotting existing reported results; scientific values preserved +supplementary figure source, exact input copy or documentation figures/contrastive_figure12/inputs/review_contrastive_taxonomy_summary.csv dc90a817bc54ac310a73298f60d03fc30eaccd724f4676eb826301dd85470acc plotting existing reported results; scientific values preserved +Figure 3 source or verified plotting input figures/figure3_inputs/nature-bpg-palette.json a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b verified illustrative tokenization; no training or model prediction +Figure 3 source or verified plotting input figures/figure3_inputs/partition_count_flow.csv bd530abacb61f3d6cffda8d1e7e6112f9261fd0a761e594fddceb5c615b9497b verified illustrative tokenization; no training or model prediction +Figure 3 source or verified plotting input figures/figure3_inputs/review_bpe_vocabulary.json 918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b verified illustrative tokenization; no training or model prediction +Figure 3 source or verified plotting input figures/figure3_inputs/source_example.json c885944b4ebce9b08c99318ce51c81b7648309c49ba5244ad0345b794429f151 verified illustrative tokenization; no training or model prediction +generated during IAR code-package integration figures/final_iar/README.md 6ee3cb8ac319ed266a0a18e39d861baff7e59b80b1cd34f5f6bb54f27e282921 generated candidate documentation or compatibility entrypoint +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/iar_closeout_20260927/figures/build_final_iar_figures.py a16bdb40a74e923ec62cd4a4268d4c02300b97a65139963e339c1c1dc6a81b6d figures/final_iar/build_final_iar_figures.py 3edb3a802895beecbf2d09086b575a9ecb6b6cbfe5548dd6d22358ca30b02644 unchanged final IAR figure builder/input copy +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/iar_closeout_20260927/figures/inputs/baselines_same_cases.csv 259fdc68a39b415c4ec114fbd6872ceaccaf09327d1fde958390071a5a94af2a figures/final_iar/inputs/baselines_same_cases.csv 259fdc68a39b415c4ec114fbd6872ceaccaf09327d1fde958390071a5a94af2a unchanged final IAR figure builder/input copy +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/iar_closeout_20260927/figures/inputs/final_iar_summary.json d5b7fd634677ea22ea27670649ea30636ef6c98daedc8592cd3f5d7b56beb9c0 figures/final_iar/inputs/final_iar_summary.json d5b7fd634677ea22ea27670649ea30636ef6c98daedc8592cd3f5d7b56beb9c0 unchanged final IAR figure builder/input copy +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/iar_closeout_20260927/figures/inputs/nature-bpg-palette.json a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b figures/final_iar/inputs/nature-bpg-palette.json a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b unchanged final IAR figure builder/input copy +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/submit_comm/_verification/iar_closeout_20260927/figures/inputs/run_manifest.json 0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419 figures/final_iar/inputs/run_manifest.json 0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419 unchanged final IAR figure builder/input copy +supplementary figure source, exact input copy or documentation figures/model_variants_figure10/README.md 61136a3d00e0184db8fbf4db47fa480766e7dadbb4f81d278df27b1fd0a0613c plotting existing reported results; scientific values preserved +supplementary figure source, exact input copy or documentation figures/model_variants_figure10/build_model_variants_figure10.py c24f16be487bdef403afd9b6803334a4f5a6739f4716b16ec5290ee037a782bb plotting existing reported results; scientific values preserved +supplementary figure source, exact input copy or documentation figures/model_variants_figure10/inputs/review_weight_policy_ranks.csv 53fdfc11a75e3aaf39b78a9c59d90e206b0726579440d03df2d5cb5708249ebf plotting existing reported results; scientific values preserved +supplementary figure source, exact input copy or documentation figures/model_variants_figure10/inputs/review_weight_policy_sensitivity.csv 9b35cb9ab5056c0548eea944f8472906a8cb36e2a7adf5cf3135268c675619b7 plotting existing reported results; scientific values preserved +supplementary figure source, exact input copy or documentation figures/taxonomy_figure11/README.md dd96f6ec2247a918a89873dd031be5f738bcd870056e9b98cb7a1e2c85e158e8 plotting existing reported results; scientific values preserved +supplementary figure source, exact input copy or documentation figures/taxonomy_figure11/nature-bpg-palette.json a2ad6df46618b2e94ecd46fd8a2ca41c8d43556d46f26fd8066a102f42b1404b plotting existing reported results; scientific values preserved +generated during IAR code-package integration iar_completion/README.md 04670f06e3459608d7a43da767531544421d4da1a6125376edc3939dba951d1f generated candidate documentation or compatibility entrypoint +generated during IAR code-package integration iar_completion/SHA256SUMS 8f7e1027e67222d49eb9e3c12fcdff083005d182583990c08c54b7ac3c11040e generated candidate documentation or compatibility entrypoint +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_final_iar_readout_all_20260927/outputs/linkage_readout.pt a03990a02a1737de05a7fa1739164e84fa6a0a4170ebaa65317a9f3c2f16c0b0 iar_completion/assets/linkage_readout.pt a03990a02a1737de05a7fa1739164e84fa6a0a4170ebaa65317a9f3c2f16c0b0 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +generated during IAR code-package integration iar_completion/check_package.py 37514cb79322719772b5c14a5795f00a78f3275f3315d5b3b674ee97127ca953 generated candidate documentation or compatibility entrypoint +generated during IAR code-package integration iar_completion/model_metadata.json bbf016ce2f1a7dc82940be28397cbe8083da7ad0f5f525b1cf7345fd42a5758d generated candidate documentation or compatibility entrypoint +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_final_iar_readout_all_20260927/run.sbatch d406620e3b0c070dff4d6fb6e0c57effce848a9ca5b3dc3de705d65c49ac0961 iar_completion/originals/run_all_training.sbatch d406620e3b0c070dff4d6fb6e0c57effce848a9ca5b3dc3de705d65c49ac0961 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_final_iar_readout_20260926/wa3_final_iar_readout.py 5acafc45244a0bf9a8489794f8a39f956622cf50594d87eb2eaa04502589fcb5 iar_completion/originals/wa3_final_iar_readout.py 5acafc45244a0bf9a8489794f8a39f956622cf50594d87eb2eaa04502589fcb5 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_final_iar_readout_all_20260927/wa3_final_iar_readout_all.py 72f8583bf32799ba29c09829d138900c0cbb589f73bd278f389da6fa8a786730 iar_completion/originals/wa3_final_iar_readout_all.py 72f8583bf32799ba29c09829d138900c0cbb589f73bd278f389da6fa8a786730 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_linkage_diagnosis_20260925/wa3_linkage_diagnosis.py 679499406106611dc2c70240a3c14c9b94311bc03a7811d3dae807c58aef4ef8 iar_completion/originals/wa3_linkage_diagnosis.py 679499406106611dc2c70240a3c14c9b94311bc03a7811d3dae807c58aef4ef8 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_linkage_probe_20260925/wa3_linkage_probe.py 0ebc629778c854621f485ceb4f5f11090e84ac9171d52270fcc90b6b07d6fe7f iar_completion/originals/wa3_linkage_probe.py 0ebc629778c854621f485ceb4f5f11090e84ac9171d52270fcc90b6b07d6fe7f unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_same_test/wa3_same_test.py 0da5f24799afc8978b88c85ea7856deb8c641ebae319760e88539c93a4eb3a86 iar_completion/originals/wa3_same_test.py 0da5f24799afc8978b88c85ea7856deb8c641ebae319760e88539c93a4eb3a86 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_typed_strict_20260925/wa3_typed_strict_test.py c6e9506dbf97752aa248e325e75acf3abf63495054bcac68d48602967379531d iar_completion/originals/wa3_typed_strict_test.py c6e9506dbf97752aa248e325e75acf3abf63495054bcac68d48602967379531d unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_typed_20260924/wa3_typed_test.py 1341b0051fefaf54b4113d7dda5e408540844d12a9275f9a73607c416f35928d iar_completion/originals/wa3_typed_test.py 1341b0051fefaf54b4113d7dda5e408540844d12a9275f9a73607c416f35928d unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_final_iar_readout_all_20260927/outputs/baselines_same_cases.csv 259fdc68a39b415c4ec114fbd6872ceaccaf09327d1fde958390071a5a94af2a iar_completion/provenance/final_run/baselines_same_cases.csv 259fdc68a39b415c4ec114fbd6872ceaccaf09327d1fde958390071a5a94af2a unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_final_iar_readout_all_20260927/outputs/final_iar_summary.json d5b7fd634677ea22ea27670649ea30636ef6c98daedc8592cd3f5d7b56beb9c0 iar_completion/provenance/final_run/final_iar_summary.json d5b7fd634677ea22ea27670649ea30636ef6c98daedc8592cd3f5d7b56beb9c0 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_final_iar_readout_all_20260927/outputs/run_manifest.json 0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419 iar_completion/provenance/final_run/run_manifest.json 0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_final_iar_readout_20260926/outputs/run_manifest.json a615d9a889c7a62c19d05a4d07d66d9e743fbfb9e37e4d646c889490d297e492 iar_completion/provenance/heldout_masking_wa3_final_iar_readout_20260926_run_manifest.json a615d9a889c7a62c19d05a4d07d66d9e743fbfb9e37e4d646c889490d297e492 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_final_iar_readout_all_20260927/outputs/run_manifest.json 0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419 iar_completion/provenance/heldout_masking_wa3_final_iar_readout_all_20260927_run_manifest.json 0aa0dc0fb74388a72750578acdf9beafba917a1976059c813157a90eceae3419 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_linkage_diagnosis_20260925/outputs/run_manifest.json 933ef4d07c380bd4322814acff135e207e00db36197c3dc543214b24cb5d554e iar_completion/provenance/heldout_masking_wa3_linkage_diagnosis_20260925_run_manifest.json 933ef4d07c380bd4322814acff135e207e00db36197c3dc543214b24cb5d554e unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_same_test/outputs/run_manifest.json 3f713f4e074cbb068264173a8fb0ec99813665ad1b23fdea507f7389071cb04b iar_completion/provenance/heldout_masking_wa3_same_test_run_manifest.json 3f713f4e074cbb068264173a8fb0ec99813665ad1b23fdea507f7389071cb04b unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_typed_20260924/outputs/run_manifest.json b3cf90dc772f206dc386a3a92d96e43d7a6c1de4147bc7cc501599730d31807f iar_completion/provenance/heldout_masking_wa3_typed_20260924_run_manifest.json b3cf90dc772f206dc386a3a92d96e43d7a6c1de4147bc7cc501599730d31807f unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_typed_strict_20260925/outputs/run_manifest.json 4a13b9faecc329257c2aa08fd6734a8b6c02837d0b230b0f659fd00602832c75 iar_completion/provenance/heldout_masking_wa3_typed_strict_20260925_run_manifest.json 4a13b9faecc329257c2aa08fd6734a8b6c02837d0b230b0f659fd00602832c75 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +generated during IAR code-package integration iar_completion/provenance/local_checks.json 9c957fe6b76da503c909ac4e3a0d70cf4ea1fd6da34a3aa6573bac4722d4c62d generated candidate documentation or compatibility entrypoint +generated during IAR code-package integration iar_completion/provenance/required_input_hashes.json 8af8ed8b6124f26072d6041deb0e6966c13c149926f5bd720b714884cba6801e generated candidate documentation or compatibility entrypoint +generated during IAR code-package integration iar_completion/provenance/source_inventory.json 2cb3a3f4e8b1d37dd3ad0234996d546f34ab48231bf69247ffb6ace0651a4a69 generated candidate documentation or compatibility entrypoint +generated during IAR code-package integration iar_completion/readout.py 42464d76c743a302bae79ced6b09af9657444c6f977535b5de49dcf59a5a8a90 generated candidate documentation or compatibility entrypoint +generated during IAR code-package integration iar_completion/requirements.txt 9ef74c17ef3ffacde3f0fc862f9844757bacfffa55b3ac9e7e6a6cca43f5843c generated candidate documentation or compatibility entrypoint +generated during IAR code-package integration iar_completion/runtime_dependencies.json 3392850a98f1739e3eec8434f42c26f3fad2d3da9fc815a17dd2790aa3b0ff98 generated candidate documentation or compatibility entrypoint +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_same_test/inputs/java/review_A5WurcsArrayTreeAudit.java a791b8f4bbda75317f41afb34d62fe518448f4d5d90db0b852e2b0d0af5e83a6 iar_completion/runtime_snapshot/java/review_A5WurcsArrayTreeAudit.java a791b8f4bbda75317f41afb34d62fe518448f4d5d90db0b852e2b0d0af5e83a6 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_same_test/inputs/java/review_MolWURCS.jar bc38e44e66daed7ec04f7c7907a13509aac125a8a09c97d9972725ab4278edaf iar_completion/runtime_snapshot/java/review_MolWURCS.jar bc38e44e66daed7ec04f7c7907a13509aac125a8a09c97d9972725ab4278edaf unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/heldout_masking_wa3_same_test/inputs/java/review_wurcsframework-1.3.1.jar 5449f9276a7b952adf087468c874bb13c7295062cce7d1afb13fdea78ace7f37 iar_completion/runtime_snapshot/java/review_wurcsframework-1.3.1.jar 5449f9276a7b952adf087468c874bb13c7295062cce7d1afb13fdea78ace7f37 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py 0bc54399362945601bcfd403441fc80968d173200dd0561f57568b2053a94839 iar_completion/runtime_snapshot/project/bert_training_v4/downstream_tasks/utils/wurcs_bpe_tokenizer.py 0bc54399362945601bcfd403441fc80968d173200dd0561f57568b2053a94839 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/cluster/nature_submission/data/vocab/bpe_ambiguity_tokens.json c68cd003370b2dcdb162f848f766e4e62f2653c6c38d205f8cbe53a9aabe2d74 iar_completion/runtime_snapshot/project/data/bpe_ambiguity_tokens.json c68cd003370b2dcdb162f848f766e4e62f2653c6c38d205f8cbe53a9aabe2d74 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/data/bpe_vocabulary_clean.json 6a572afdf53f1494ab96c896876b824ca7ea749777352606aa9f96bf270ceecc iar_completion/runtime_snapshot/project/data/bpe_vocabulary_clean.json 6a572afdf53f1494ab96c896876b824ca7ea749777352606aa9f96bf270ceecc unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_ambiguity_tokens.json 22d2aad45b978988c9e26bc9400016014ee825cc6207377385a8cd74f3c88f2b iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_ambiguity_tokens.json 22d2aad45b978988c9e26bc9400016014ee825cc6207377385a8cd74f3c88f2b unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json 918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_bpe_vocabulary.json 918c73a55adeb603614112d75bb02033e5823fd9c8a70d43f6c0a4a9c78e360b unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py 10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04 iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_sequence_tree_runtime.py 10ca4b121d2f22d7a64208e4f05172e7a756b653d0828c9dcc49dd8ea1a5ad04 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7 iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_topology.py f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py 6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4 iar_completion/runtime_snapshot/project/data/review_sequences_a5_non_iar_later_role_official_array_v4_20260721_r1/review_frozen_training_a5_wurcs_bpe.py 6591b854962c278dc797981c942e114c18a26e97af43029c1d539bae3badb2f4 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/cluster/nature_submission/code/model/__init__.py de8c3237b858b640ee9fbf4dac34864c54b6dac80bc89f346a44c774254289a4 iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/__init__.py de8c3237b858b640ee9fbf4dac34864c54b6dac80bc89f346a44c774254289a4 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/cluster/nature_submission/code/model/glycan_bert.py b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/glycan_bert.py b69f14c9976951325e3a0a4e8107a16126e67d410e966650f513f1f538a732bb unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/cluster/nature_submission/code/model/multimodal_glycan_bert_v3.py 8e06c32f4e844c3c66f146fd15a075472808a0720c892d0b9683dfd32f15ef0c iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/model/multimodal_glycan_bert_v3.py 8e06c32f4e844c3c66f146fd15a075472808a0720c892d0b9683dfd32f15ef0c unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/cluster/nature_submission/code/training/ipa_bpe_distillation.py f0c8efda7a12942b4c6359792d6ee9417e6a9ec0eb04623ad17b4772430270b5 iar_completion/runtime_snapshot/project/writing/cluster/nature_submission/code/training/ipa_bpe_distillation.py f0c8efda7a12942b4c6359792d6ee9417e6a9ec0eb04623ad17b4772430270b5 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/glycangt_heldout_ipa_validation/cluster/heldout_ipa_eval.py 8d05a4048e200625694ff9a36f50af89b845fd0d38ba8034a97a710e7ad3dce2 iar_completion/runtime_snapshot/project/writing/glycangt_heldout_ipa_validation/cluster/heldout_ipa_eval.py 8d05a4048e200625694ff9a36f50af89b845fd0d38ba8034a97a710e7ad3dce2 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/iar_external_validation_20260825_r1/inputs/w2_phase0/remote_snapshot/iar_pipe_schema_20260823_r1/classify.py cfce20d28291c8b5868d35386990037415090202dd823bdfd73038456cc65557 iar_completion/runtime_snapshot/schema/classify.py cfce20d28291c8b5868d35386990037415090202dd823bdfd73038456cc65557 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/iar_external_validation_20260825_r1/inputs/w2_phase0/remote_snapshot/iar_pipe_schema_20260823_r1/pipelib.py 704ed130bdcce94a7af7ce3e37654705f709b8526f632907ef794451c6ef7f30 iar_completion/runtime_snapshot/schema/pipelib.py 704ed130bdcce94a7af7ce3e37654705f709b8526f632907ef794451c6ef7f30 unchanged source/artifact copy; see iar_completion/provenance/source_inventory.json +/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_wa_downstream_20260820_r1_preparation/evidence/WA3_checkpoint_index.json a4b66d2ed429ad6516646256a84173082b2fca6b779baa6e4ff93586a81a5c2b provenance/WA3_checkpoint_index.json a4b66d2ed429ad6516646256a84173082b2fca6b779baa6e4ff93586a81a5c2b historical checkpoint index; payload not copied +/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production/review_md20x6_md20x6-a1111-wa345-20260817-r1_A1111_wa3_seed42/review_md20x6_wa2_final_receipt.json b8b05510e97f6b94ca5e0d1465eba034724d7ddcc405aa405db09c4c29fc768b provenance/WA3_final_receipt.json b8b05510e97f6b94ca5e0d1465eba034724d7ddcc405aa405db09c4c29fc768b unchanged verified Nova readback +/work/ratul1/supantha/Bertint/affinose_arms_on_test_20260909.json 670cfcbcfe89e0729bb75f122cff8c7100c24d39ef775c69421d4bb820654056 provenance/affinose_arms_on_test_20260909.json 670cfcbcfe89e0729bb75f122cff8c7100c24d39ef775c69421d4bb820654056 unchanged remote provenance +/work/ratul1/supantha/Bertint/checkpoints/affinose_mo_20260908_mo_A_glycan_s42/receipt.json a291a8e8f2b77c7955b5346aa52289afc520a0b5181d62eb0dfa2c096bd6bbb8 provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/receipt.json a291a8e8f2b77c7955b5346aa52289afc520a0b5181d62eb0dfa2c096bd6bbb8 unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_mo_20260908_mo_A_glycan_s42/results.json fdd520b70e38d0e6bc112118adad89cf209278614645b47e219341736bf99599 provenance/affinose_cells/affinose_mo_20260908_mo_A_glycan_s42/results.json fdd520b70e38d0e6bc112118adad89cf209278614645b47e219341736bf99599 unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_mo_20260908_mo_C_doubly_s42/receipt.json 29b68fb30127700fa55942d5cc4c237f8bf15c2d0c883192b62698d811e71c51 provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/receipt.json 29b68fb30127700fa55942d5cc4c237f8bf15c2d0c883192b62698d811e71c51 unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_mo_20260908_mo_C_doubly_s42/results.json 54918a535b86b01590bab11c78ff4c354c106ca78a384446eb79038b0df666af provenance/affinose_cells/affinose_mo_20260908_mo_C_doubly_s42/results.json 54918a535b86b01590bab11c78ff4c354c106ca78a384446eb79038b0df666af unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_B_protein_s43/receipt.json a380534df6f877c212a2c7dbce577511e282537bbff9ad5d7ac3e186f1cc5633 provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/receipt.json a380534df6f877c212a2c7dbce577511e282537bbff9ad5d7ac3e186f1cc5633 unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_B_protein_s43/results.json a732a56ddc81fc41b02dde8f56d852929ec8eefa12524ed9410a09361f267544 provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s43/results.json a732a56ddc81fc41b02dde8f56d852929ec8eefa12524ed9410a09361f267544 unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_B_protein_s44/receipt.json 9344a727416db1368c45a0ddad962a12130e10f03944a5142874f72ba5311297 provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/receipt.json 9344a727416db1368c45a0ddad962a12130e10f03944a5142874f72ba5311297 unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_B_protein_s44/results.json a530b2fac81a72d99674906253897a1e3eecca4ee17e83c3a27ed409a3411877 provenance/affinose_cells/affinose_mof_20260909_mof_B_protein_s44/results.json a530b2fac81a72d99674906253897a1e3eecca4ee17e83c3a27ed409a3411877 unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_C_doubly_s43/receipt.json 068bb72cc2fc0231f3a9f729ac78f1a6340a7088ea86a60449ebe63dcfbd794d provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/receipt.json 068bb72cc2fc0231f3a9f729ac78f1a6340a7088ea86a60449ebe63dcfbd794d unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_C_doubly_s43/results.json a21307bb48db62270792f990541bac1c2728feb34063f4b2009e2f6c7d8a7e4c provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s43/results.json a21307bb48db62270792f990541bac1c2728feb34063f4b2009e2f6c7d8a7e4c unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_C_doubly_s44/receipt.json 3044b56619b1bb83063070624b02bfaa64c952c1da76a80051bb62bb26098395 provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/receipt.json 3044b56619b1bb83063070624b02bfaa64c952c1da76a80051bb62bb26098395 unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_mof_20260909_mof_C_doubly_s44/results.json 42ffeb2f81acbae80df3284300d0213b52918b90d3b186dbbd1f074800af75f0 provenance/affinose_cells/affinose_mof_20260909_mof_C_doubly_s44/results.json 42ffeb2f81acbae80df3284300d0213b52918b90d3b186dbbd1f074800af75f0 unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_mo_B_protein_s42/receipt.json 07a919272c928f9630f4d70a73cf1aa91a327e2c9597cf582814c5386b6f24cc provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/receipt.json 07a919272c928f9630f4d70a73cf1aa91a327e2c9597cf582814c5386b6f24cc unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_mo_B_protein_s42/results.json ef5a0b42f15f23a473d46198bd39dc17176add75a1bf76cd708d5b595d552b6e provenance/affinose_cells/affinose_sa_20260908_mo_B_protein_s42/results.json ef5a0b42f15f23a473d46198bd39dc17176add75a1bf76cd708d5b595d552b6e unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_moc_A_glycan_s43/receipt.json c3e3028a05cf7f5b58883d9485bcd7a7e0ba5d05265f4503b8bad09e307c1480 provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/receipt.json c3e3028a05cf7f5b58883d9485bcd7a7e0ba5d05265f4503b8bad09e307c1480 unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_moc_A_glycan_s43/results.json f62ddffaffae54f91e4f921fa235741df4023e94b47c2c90f3e158b7c4cd9858 provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s43/results.json f62ddffaffae54f91e4f921fa235741df4023e94b47c2c90f3e158b7c4cd9858 unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_moc_A_glycan_s44/receipt.json 6f5cbc9e19a45b4e9c8d33e7f4a82e41ef610b5040175852d3c05ea172995d4f provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/receipt.json 6f5cbc9e19a45b4e9c8d33e7f4a82e41ef610b5040175852d3c05ea172995d4f unchanged verified Nova readback +/work/ratul1/supantha/Bertint/checkpoints/affinose_sa_20260908_moc_A_glycan_s44/results.json 9f0a6dc5b89f58603fb368e754da90001a987016ed4d9ab425420703aeb44d9e provenance/affinose_cells/affinose_sa_20260908_moc_A_glycan_s44/results.json 9f0a6dc5b89f58603fb368e754da90001a987016ed4d9ab425420703aeb44d9e unchanged verified Nova readback +/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moA_glycan_20260908.json f4fb099a7dbe229450d2ca337d213555203dc69dd67f1e4b2cca227baca3d701 provenance/affinose_input_hashes_moA_glycan_20260908.json f4fb099a7dbe229450d2ca337d213555203dc69dd67f1e4b2cca227baca3d701 unchanged remote provenance +/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moB_protein_20260908.json 00c53175abc949336bf495c796dc9c779af2109227bc6f351433356129d85663 provenance/affinose_input_hashes_moB_protein_20260908.json 00c53175abc949336bf495c796dc9c779af2109227bc6f351433356129d85663 unchanged remote provenance +/work/ratul1/supantha/Bertint/manifests/affinose_input_hashes_moC_doubly_20260908.json 3d3c6fd5c39fe2f1ce37ce5ba47b842fa193b716c08227678d68cdcc7e996c4e provenance/affinose_input_hashes_moC_doubly_20260908.json 3d3c6fd5c39fe2f1ce37ce5ba47b842fa193b716c08227678d68cdcc7e996c4e unchanged remote provenance +generated during submission preparation provenance/affinose_recipe.json ebf5e35b60640944bf3d03955f10da2c40cd5075a85bf0e3a4c6210f97ed85a6 generated candidate documentation, configuration or convenience entrypoint +generated during submission preparation provenance/artifact_locations.tsv 9c14d2981a11bef92ef230e9848f9876d941b290f2c70848e739a2795bb6feea generated candidate documentation, configuration or convenience entrypoint +generated during submission preparation provenance/candidate_affinose_input_hashes_moA_glycan_20260908.json 4dfa51299e99a23add6cdfe5380403d4504a207e2b6522ea86cc50ba1cd2cb74 generated candidate documentation, configuration or convenience entrypoint +generated during submission preparation provenance/candidate_affinose_input_hashes_moB_protein_20260908.json 48768c773a262864e7a5104732d1e37971be2581058dec7e6f8778d05483965c generated candidate documentation, configuration or convenience entrypoint +generated during submission preparation provenance/candidate_affinose_input_hashes_moC_doubly_20260908.json efbfbea3df98ff7b20dadae530aaf5e3cdadc7216a60a97495b4344e39ef1934 generated candidate documentation, configuration or convenience entrypoint +generated during submission preparation provenance/candidate_portability.patch 2ce6f4a60fdb0bc87d69e270bd724fbccbfae6239579f3c17c0c4d8de05b3d94 generated candidate documentation, configuration or convenience entrypoint +generated during submission preparation provenance/local_test_environment.json fc689486dc297277e32480d52d9abb69549520c085101bd406ef3ed6c2fad86b generated candidate documentation, configuration or convenience entrypoint +/work/ratul1/supantha/Bertint/v2_artifacts/moconf_cells.tsv 7202cdde019556a7babb3459ae04da8ab5ecb5edbdfde2b74c4a675ed1c9ff43 provenance/moconf_cells.tsv 7202cdde019556a7babb3459ae04da8ab5ecb5edbdfde2b74c4a675ed1c9ff43 unchanged remote provenance +/work/ratul1/supantha/Bertint/v2_artifacts/mofull_cells.tsv e6f1be53ab77ad80ea274f80bd11369bb4efe3836b6119c58283ec12af224752 provenance/mofull_cells.tsv e6f1be53ab77ad80ea274f80bd11369bb4efe3836b6119c58283ec12af224752 unchanged remote provenance +/work/ratul1/supantha/Bertint/v2_artifacts/motif_cells.tsv 67b5ade1b857e789173128939c6baa4687354bb1d640d8fd3b40332b5956ec72 provenance/motif_cells.tsv 67b5ade1b857e789173128939c6baa4687354bb1d640d8fd3b40332b5956ec72 unchanged remote provenance +/tmp/claude-501/-Users-supantha-Documents-esm-g-plan-bert-training-v3-v3-1-cluster-training-writing/da7f307e-b297-4431-bcd5-1b6fe2c83e4e/scratchpad/swe/score_arms_on_test.py dc42f4cdd76cc2c49fedfe6b8b8ef40b5915ee70803c9cec5ec0b0573256f815 provenance/score_arms_on_test_historical.py dc42f4cdd76cc2c49fedfe6b8b8ef40b5915ee70803c9cec5ec0b0573256f815 unchanged historical scorer; requires Nova inputs +/work/ratul1/supantha/Bertint/model_motif_20260908/training_v8.py b7cb8a39e167f2cc9e35476dcdcad56320b02c1898d13db3236a41bbb2ed4852 provenance/training_v8_before_resume_load_fix.py b7cb8a39e167f2cc9e35476dcdcad56320b02c1898d13db3236a41bbb2ed4852 reconstructed historical bytes; exact SHA matches mo_B_protein_s42 run receipt +generated during submission preparation provenance/wa3_config.json be8f4ae30ae2fbd8f91de0e5db98de3044213e24587717775c31df37e2272dbb generated candidate documentation, configuration or convenience entrypoint +generated during submission preparation requirements.txt 48da67d3a47fb1155389fccdd9022b825b2eeefb60e28260633ec4c2fe00a33f generated candidate documentation, configuration or convenience entrypoint +generated during submission preparation score_predictions.py 428d6c855cd9a6a1988581f9d71bd85a130ceb7b803e6190b3590f5e40ef426c generated candidate documentation, configuration or convenience entrypoint diff --git a/releases/2026-10-02/provenance/submission_requirements.txt b/releases/2026-10-02/provenance/submission_requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..809f1140f0d96ac5ddffcc1555d5d0628cb4b32a --- /dev/null +++ b/releases/2026-10-02/provenance/submission_requirements.txt @@ -0,0 +1,8 @@ +# Versions observed in the local CPU source/synthetic checks, 2026-09-11. +# This is not a recovered historical Nova environment lock. +torch==2.9.1 +numpy==1.26.4 +pandas==2.3.3 +scipy==1.16.3 +# h5py was installed only under _verification/code_work/test_dependencies. +h5py==3.16.0 diff --git a/releases/2026-10-02/provenance/third_party_archives.json b/releases/2026-10-02/provenance/third_party_archives.json new file mode 100644 index 0000000000000000000000000000000000000000..c22a61be91f56ebf0fc1c3b0a6912e8affe0b1e5 --- /dev/null +++ b/releases/2026-10-02/provenance/third_party_archives.json @@ -0,0 +1,261 @@ +{ + "scope": "Third-party Java archives retain their own embedded licenses and notices; original-code Apache grant does not replace them.", + "archives": [ + { + "path": "iar_completion/runtime_snapshot/java/review_MolWURCS.jar", + "bytes": 4019920, + "sha256": "bc38e44e66daed7ec04f7c7907a13509aac125a8a09c97d9972725ab4278edaf", + "embedded_notices_and_dependency_metadata": [ + { + "path": "META-INF/maven/org.slf4j/slf4j-api/pom.xml", + "bytes": 3833, + "sha256": "7cd9d7a0b5d93dfd461a148891b43509cf403a9c7f9fb49060d3554df1c81e1e" + }, + { + "path": "META-INF/maven/org.slf4j/slf4j-api/pom.properties", + "bytes": 109, + "sha256": "20346c797d00a170b2e645e244bf67363d760bc563a14af2fa7222d17e7afa84" + }, + { + "path": "META-INF/maven/ch.qos.logback/logback-classic/pom.xml", + "bytes": 13081, + "sha256": "a051eb1a2548b93c99abca8eb71d5c75d2ff06976682960348124bc4901a5315" + }, + { + "path": "META-INF/maven/ch.qos.logback/logback-classic/pom.properties", + "bytes": 126, + "sha256": "c22598bad172e4ce272936a7d9cea49ef6e61140ea0cdb0e1c80d20e7e9d1539" + }, + { + "path": "META-INF/maven/ch.qos.logback/logback-core/pom.xml", + "bytes": 4196, + "sha256": "df4d7181ec51655baaaab067971180d7681643ddd274139f0c3078dba14e97e0" + }, + { + "path": "META-INF/maven/ch.qos.logback/logback-core/pom.properties", + "bytes": 123, + "sha256": "61192268c9d6c19be9104e686e23b26e1cbb213594ae59b8c136ea465641515d" + }, + { + "path": "META-INF/LICENSE.txt", + "bytes": 11358, + "sha256": "c95bae1d1ce0235ecccd3560b772ec1efb97f348a79f0fbe0a634f0c2ccefe2c" + }, + { + "path": "META-INF/NOTICE.txt", + "bytes": 172, + "sha256": "50cd32044ea2b50bbca3b71113d7c699ed6ea98e117eac3ad5eb353d85bafe37" + }, + { + "path": "META-INF/maven/commons-cli/commons-cli/pom.xml", + "bytes": 10703, + "sha256": "f589bf30a98dc7497410b8eb8d86a167637577ac55cd5dd30cc4b57dbbc6f893" + }, + { + "path": "META-INF/maven/commons-cli/commons-cli/pom.properties", + "bytes": 116, + "sha256": "9108afb12c04eb364342d2680aef061f3be432f1ffe716a5ce2b69341b9d41f8" + }, + { + "path": "META-INF/maven/org.glycoinfo/wurcsframework/pom.xml", + "bytes": 2304, + "sha256": "8769ac15da48151b2656c8553fb410b855eab23ac013819f5e476e0cc89b6016" + }, + { + "path": "META-INF/maven/org.glycoinfo/wurcsframework/pom.properties", + "bytes": 62, + "sha256": "15458e43a11849cb5d4efcc83f7cefb64240eb94c6cc2c106b52d2ed8a5057bb" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-valencycheck/pom.xml", + "bytes": 1516, + "sha256": "f879742c0fa7a81b49962321c5c93bf4703b265de8afcddd6b831c238c646a46" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-valencycheck/pom.properties", + "bytes": 69, + "sha256": "8d2dbeb81c6e567e12929cf617848808f0e7af0f0cd2457fac2181d12ff0bae5" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-interfaces/pom.xml", + "bytes": 1408, + "sha256": "b4dc0076326eb4db583d00a433f6026f687f49ee0a937ce663412922d8dbb772" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-interfaces/pom.properties", + "bytes": 67, + "sha256": "d5e54366c6c4886a92fe10e68ca147679fa077a46ff32221798e2116ecbf6dcc" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-core/pom.xml", + "bytes": 1798, + "sha256": "9d729378be41aa79f8f01e4eb52acea1675dad2e20acc96b64ed63d2d31f6305" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-core/pom.properties", + "bytes": 61, + "sha256": "7a75367b16dde07c18f9cd25500c4fa84aa4b34bd7ef282d16dee95915185fd2" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-standard/pom.xml", + "bytes": 1441, + "sha256": "3bde6310f053a9daca05a63cf84c36bcddb156de5ecde6d8842a7a869c06fdd1" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-standard/pom.properties", + "bytes": 65, + "sha256": "6eb55d870bf0ea35c04687dc7a12d6c82bffeb28f247666935371f68308aaf20" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-data/pom.xml", + "bytes": 3277, + "sha256": "5aab809db8b24079de479ffd03b1189ecaa16dae02562c3dc0645f0c47221a90" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-data/pom.properties", + "bytes": 61, + "sha256": "05851ab5b2079d9cace0adbeaaa9e18197e0866f64574f6b233eca407f191ff6" + }, + { + "path": "META-INF/maven/javax.vecmath/vecmath/pom.xml", + "bytes": 5505, + "sha256": "b8b8eb4a4f97dda6fa49df133d14743314945d7c2b46d05525483d74da04b463" + }, + { + "path": "META-INF/maven/javax.vecmath/vecmath/pom.properties", + "bytes": 113, + "sha256": "30c22df3b951c321e56c30822df8e0ece97de33b5cd68ad43514596a1c9bdd3d" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-ioformats/pom.xml", + "bytes": 1992, + "sha256": "645e32466a0a9ebcc44fd798bd9be091af328fe4f4e103752a4cd85dc476f94a" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-ioformats/pom.properties", + "bytes": 66, + "sha256": "ca2ffa91f14fd573acac0c3a6b88557a22ec184f80929fff6963bd192cbf4e06" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-silent/pom.xml", + "bytes": 3291, + "sha256": "b65d00ba219155c00f32658aeb11500cc819ed7ffe8429cf8ded96f84d1464c6" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-silent/pom.properties", + "bytes": 63, + "sha256": "d0511cd82ceff5d76cfde2c19c10af1a8201b3a2885eb9d1e2b75ed050a76a32" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-io/pom.xml", + "bytes": 3964, + "sha256": "00849c60284ea32d6d0dc8e0dd82ce6cd0044c5be663302b460f50cca6afa7d8" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-io/pom.properties", + "bytes": 59, + "sha256": "4cfaf1f3f61137eaabd865f03506681e4306e4a3458081ff53a68ed36758c09d" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-atomtype/pom.xml", + "bytes": 1508, + "sha256": "290c8a06112ea56c95addbe56c439fc275309d94a571a16751c2f7e46ffff634" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-atomtype/pom.properties", + "bytes": 65, + "sha256": "f4f1cdbcb1f948618bd57b684c5619a68d27745a1a4f75ca86404677b41375f7" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-isomorphism/pom.xml", + "bytes": 2734, + "sha256": "e48216922952709b46d412d4fe4d0f8c4c40363adbaa52542c3d3417136aec65" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-isomorphism/pom.properties", + "bytes": 68, + "sha256": "90005bf2d1b20954040bd015f03ee108878922307970887f3a86c56e2dd0d408" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-smiles/pom.xml", + "bytes": 4502, + "sha256": "c9ae9d0ff5d67b810119fca1033a06a6244f4c7d3ab22eaa1e5119af84d5cd92" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-smiles/pom.properties", + "bytes": 63, + "sha256": "ec1ac18520868630fbb0534618dbc575628357044c5e690600452afd7eb56789" + }, + { + "path": "META-INF/maven/uk.ac.ebi.beam/beam-core/pom.xml", + "bytes": 1052, + "sha256": "c2bf5f59348a90a8dd479d8902ad67777b2ffd991dfa43ce1db36cbaceced76c" + }, + { + "path": "META-INF/maven/uk.ac.ebi.beam/beam-core/pom.properties", + "bytes": 58, + "sha256": "598fec7af5eba62fdf9424fec623e163b08abe00d88e68cb9f72049c73cc2a8a" + }, + { + "path": "META-INF/maven/uk.ac.ebi.beam/beam-func/pom.xml", + "bytes": 1068, + "sha256": "1c488a539d95aabd79715d9e02cc8705e3910b2731383c9ab973b3253b887a56" + }, + { + "path": "META-INF/maven/uk.ac.ebi.beam/beam-func/pom.properties", + "bytes": 58, + "sha256": "83a710d539b9ecdbd68e0c66a5155b07fd3fe2e3beddcf122b7e56b8d6196f51" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-cip/pom.xml", + "bytes": 3240, + "sha256": "e2a6364a8ec67c628137fa80b3730882ceac122606a63114e6c784ed1a042254" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-cip/pom.properties", + "bytes": 60, + "sha256": "17fd103cf901c40d2fe5f227b92d1e1b57058d46a4bb1cdc0d581970c1f1f19a" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-sdg/pom.xml", + "bytes": 3341, + "sha256": "ffb0762eeabcdd82bdf07e1f60656701cd72005392a17faaeaf24f9347aa389b" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-sdg/pom.properties", + "bytes": 60, + "sha256": "281cf92a8cd3e7420ace6a4434efb71de31ea3948d900c3bf53d81511d52063a" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-ctab/pom.xml", + "bytes": 3537, + "sha256": "dc048d818de300cbcf71314a8b866b689eae1f6ecf333af12aceb105bd2589e6" + }, + { + "path": "META-INF/maven/org.openscience.cdk/cdk-ctab/pom.properties", + "bytes": 61, + "sha256": "43650e3cc03084efdb7f5c69f77647e1f3c3453bc166038c25f3f6a243dfce66" + } + ], + "status": "archive bytes unchanged from submission package" + }, + { + "path": "iar_completion/runtime_snapshot/java/review_wurcsframework-1.3.1.jar", + "bytes": 340319, + "sha256": "5449f9276a7b952adf087468c874bb13c7295062cce7d1afb13fdea78ace7f37", + "embedded_notices_and_dependency_metadata": [ + { + "path": "META-INF/maven/org.glycoinfo/wurcsframework/pom.xml", + "bytes": 2304, + "sha256": "8769ac15da48151b2656c8553fb410b855eab23ac013819f5e476e0cc89b6016" + }, + { + "path": "META-INF/maven/org.glycoinfo/wurcsframework/pom.properties", + "bytes": 62, + "sha256": "15458e43a11849cb5d4efcc83f7cefb64240eb94c6cc2c106b52d2ed8a5057bb" + } + ], + "status": "archive bytes unchanged from submission package" + } + ] +} diff --git a/releases/2026-10-02/provenance/training_v8_before_resume_load_fix.py b/releases/2026-10-02/provenance/training_v8_before_resume_load_fix.py new file mode 100644 index 0000000000000000000000000000000000000000..8aa8fb28c3f56ff33e9a196269f081d2487d8361 --- /dev/null +++ b/releases/2026-10-02/provenance/training_v8_before_resume_load_fix.py @@ -0,0 +1,1038 @@ +""" +Bertint V8 Training — Cross-Attention + Live Bertose Finetuning + +Based on V7 trainer with changes for V8 architecture: + - Per-residue protein embeddings (variable-length, padded in collate) + - protein_mask passed to model for cross-attention + - AMP (GradScaler + autocast) built in from the start + - Regression only (no classification mode — V7 showed regression wins) +""" + +import argparse +import json +import logging +import os +import hashlib +import random +import sys +import time +from pathlib import Path +from typing import Dict, List, Optional, Tuple + +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F +from scipy.stats import spearmanr, pearsonr +from torch.cuda.amp import GradScaler, autocast +from torch.utils.data import DataLoader + +from bertint_v8 import BertintV8, BertintV8Loss, load_bertose_encoder +from dataset_v8 import BertintV8Dataset, collate_fn + +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s - %(levelname)s - %(message)s", +) +logger = logging.getLogger(__name__) + + +# ============================================================================ +# Reproducibility +# ============================================================================ + + +def set_seed(seed: int = 42) -> None: + """Set random seeds for reproducibility.""" + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + if torch.cuda.is_available(): + torch.cuda.manual_seed_all(seed) + + +# ============================================================================ +# Metrics +# ============================================================================ + + +def _atomic_torch_save(obj, path): + """Write via a temp file + os.replace so a preemption cannot truncate.""" + tmp = str(path) + ".tmp" + torch.save(obj, tmp) + os.replace(tmp, path) + +class AssayGroupedBatchSampler(torch.utils.data.Sampler): + """Batches of K assays x M rows, emitted as contiguous blocks. + + The block structure is what lets the loss recover the grouping from the batch shape without + threading assay ids through collate_fn. Sampling is uniform over ASSAYS, not rows, so the + gradient weighting matches the equal-assay macro we actually report. + """ + + def __init__(self, exp_ids, assays_per_batch, rows_per_assay, seed=42): + import collections + self.K, self.M = assays_per_batch, rows_per_assay + idx = collections.defaultdict(list) + for i, e in enumerate(exp_ids): + idx[e].append(i) + # an assay smaller than M cannot fill a block; excluded and COUNTED, never padded + self.groups = [np.asarray(v) for v in idx.values() if len(v) >= self.M] + self.excluded_assays = len(idx) - len(self.groups) + self.rng = np.random.default_rng(seed) + self.n_batches = max(len(self.groups) // self.K, 1) + logger.info(" assay-grouped sampler: %d usable assays (%d too small for M=%d), " + "%d batches/epoch of %dx%d", + len(self.groups), self.excluded_assays, self.M, + self.n_batches, self.K, self.M) + + def __iter__(self): + order = self.rng.permutation(len(self.groups)) + for b in range(self.n_batches): + batch = [] + for gi in order[b * self.K:(b + 1) * self.K]: + g = self.groups[gi] + pick = self.rng.choice(len(g), self.M, replace=False) + batch.extend(int(x) for x in g[pick]) + if len(batch) == self.K * self.M: + yield batch + + def __len__(self): + return self.n_batches + + +class WithinAssayPairwiseLoss(nn.Module): + """RankNet pairwise logistic loss, computed INSIDE each assay block. + + The batch arrives as K contiguous blocks of M rows (see AssayGroupedBatchSampler), so it + reshapes to (K, M) and every pair compared is guaranteed to come from the same assay — which + is the only comparison the estimand defines. + """ + + def __init__(self, assays_per_batch, rows_per_assay): + super().__init__() + self.K, self.M = assays_per_batch, rows_per_assay + + def forward(self, pred, target): + if pred.numel() != self.K * self.M: + # eval batches are not grouped; fall back so the same object can score them + return F.mse_loss(pred, target) + p = pred.view(self.K, self.M) + y = target.view(self.K, self.M) + d = p.unsqueeze(2) - p.unsqueeze(1) # (K, M, M) predicted differences + s = torch.sign(y.unsqueeze(2) - y.unsqueeze(1)) # (K, M, M) true order, 0 where tied + m = s != 0 + if not m.any(): + return pred.sum() * 0.0 + return F.softplus(-s[m] * d[m]).mean() + + +def equal_assay_macro(preds, targets, groups, min_rows=5, min_distinct=2): + """Mean per-assay Spearman, equal weight per eligible assay. + + Eligibility mirrors the split's own rule: an assay needs >= min_rows rows and >= min_distinct + distinct target values, plus >= min_distinct distinct PREDICTIONS (a constant prediction makes + Spearman undefined, and treating that as 0.0 would silently reward degenerate assays). + Returns (macro, n_eligible, n_total). + """ + import collections + idx = collections.defaultdict(list) + for i, g in enumerate(groups): + idx[g].append(i) + vals = [] + for g, ii in idx.items(): + if len(ii) < min_rows: + continue + t_ = targets[ii] + p_ = preds[ii] + if len(np.unique(t_)) < min_distinct or len(np.unique(p_)) < min_distinct: + continue + r, _ = spearmanr(p_, t_) + if not np.isnan(r): + vals.append(float(r)) + if not vals: + return 0.0, 0, len(idx) + return float(np.mean(vals)), len(vals), len(idx) + + +def compute_metrics( + preds: np.ndarray, targets: np.ndarray +) -> Dict[str, float]: + """Compute Spearman, Pearson, MSE.""" + rho, _ = spearmanr(preds, targets) + r, _ = pearsonr(preds, targets) + mse = np.mean((preds - targets) ** 2) + # CONTRACT r2: a NaN correlation means a collapsed model. Coercing it to + # 0.0 disguises collapse as merely-bad performance, so fail closed. + if np.isnan(rho) or np.isnan(r) or not np.isfinite(mse): + raise RuntimeError( + "non-finite metric: spearman=%r pearson=%r mse=%r " + "(pred std=%r, target std=%r)" % (rho, r, mse, + float(np.std(preds)), float(np.std(targets)))) + return {"spearman": float(rho), "pearson": float(r), "mse": float(mse)} + + +# ============================================================================ +# Trainer +# ============================================================================ + + +class BertintV8Trainer: + """ + Trainer for BertintV8 with cross-attention and AMP. + + Args: + model: BertintV8 model. + criterion: Loss function. + train_loader: Training data loader. + val_loader: Validation data loader. + test_loader: Test data loader. + output_dir: Directory for checkpoints and results. + lr_encoder: Learning rate for Bertose encoder layers. + lr_head: Learning rate for cross-attention, SWE, and head. + weight_decay: Weight decay for AdamW. + max_grad_norm: Maximum gradient norm for clipping. + epochs: Number of training epochs. + patience: Early stopping patience. + checkpoint_interval: Save checkpoint every N epochs. + resume: Whether to resume from last checkpoint. + """ + + def __init__( + self, + model: BertintV8, + criterion: nn.Module, + train_loader: DataLoader, + val_loader: DataLoader, + test_loader: DataLoader, + output_dir: str, + lr_encoder: float = 1e-5, + lr_head: float = 1e-4, + weight_decay: float = 0.01, + max_grad_norm: float = 1.0, + epochs: int = 50, + patience: int = 15, + checkpoint_interval: int = 5, + resume: bool = False, + fingerprint: str = None, + input_hashes: dict = None, + warmup_pct: float = 0.0, + ): + self.model = model + self.criterion = criterion + self.train_loader = train_loader + self.val_loader = val_loader + self.test_loader = test_loader + self.output_dir = output_dir + self.epochs = epochs + self.patience = patience + self.checkpoint_interval = checkpoint_interval + self.resume = resume + self.max_grad_norm = max_grad_norm + + os.makedirs(output_dir, exist_ok=True) + + self.device = torch.device( + "cuda" if torch.cuda.is_available() else "cpu" + ) + self.model.to(self.device) + self.criterion.to(self.device) + + # AMP scaler + self.scaler = GradScaler() + + # Separate param groups: encoder (small lr) vs rest (larger lr) + encoder_params = [] + head_params = [] + for name, param in model.named_parameters(): + if not param.requires_grad: + continue + if name.startswith("seq_embeddings") or name.startswith( + "seq_layers" + ): + encoder_params.append(param) + else: + head_params.append(param) + + logger.info( + f" Param groups: encoder={len(encoder_params)} tensors " + f"(lr={lr_encoder}), head={len(head_params)} tensors " + f"(lr={lr_head})" + ) + + self.optimizer = torch.optim.AdamW( + [ + { + "params": encoder_params, + "lr": lr_encoder, + "weight_decay": weight_decay, + }, + { + "params": head_params, + "lr": lr_head, + "weight_decay": weight_decay, + }, + ] + ) + + # OneCycleLR with per-batch stepping (matches Twin Peaks pattern) + # Built-in warmup (pct_start) + cosine annealing + total_steps = len(train_loader) * epochs + if warmup_pct > 0: + pct_start = warmup_pct + else: + pct_start = 0.3 # Default: 30% warmup + + self.scheduler = torch.optim.lr_scheduler.OneCycleLR( + self.optimizer, + max_lr=[lr_encoder, lr_head], + total_steps=total_steps, + pct_start=pct_start, + anneal_strategy='cos', + ) + warmup_steps_actual = int(total_steps * pct_start) + logger.info( + f" Scheduler: OneCycleLR per-batch stepping" + ) + logger.info( + f" total_steps={total_steps:,}, " + f"warmup={warmup_steps_actual:,} steps " + f"({pct_start*100:.0f}%), cosine decay" + ) + + # State + self.start_epoch = 0 + self.best_metric = -float("inf") + self.patience_counter = 0 + self.history: List[Dict] = [] + + # CONTRACT r2 FIX: the fingerprint must exist BEFORE resume, which is + # the last statement of __init__. Assigning it after construction left + # the guard reading None and a foreign checkpoint loaded unchecked. + self.fingerprint = fingerprint + self.input_hashes = input_hashes or {} + self.early_stopped = False + self.best_epoch = -1 + if resume: + self._resume_from_checkpoint() + + def train(self) -> Dict: + """Full training loop with early stopping.""" + logger.info(f"\nStarting V8 training for {self.epochs} epochs") + logger.info(f" Device: {self.device}") + logger.info(f" Train batches: {len(self.train_loader)}") + logger.info(f" Val batches: {len(self.val_loader)}") + logger.info(f" AMP: enabled") + + for epoch in range(self.start_epoch, self.epochs): + t0 = time.time() + + train_loss = self._train_epoch(epoch) + val_loss, val_metrics = self._eval_epoch(self.val_loader) + + elapsed = time.time() - t0 + rho_pooled = val_metrics["spearman"] + rho = val_metrics["macro_spearman"] # the DECLARED selector + r = val_metrics["pearson"] + + logger.info( + f" Epoch {epoch + 1:3d} | Train loss={train_loss:.4f} | " + f"Val loss={val_loss:.4f} MACRO={rho:.4f} " + f"(pooled={rho_pooled:.4f}, {val_metrics['macro_assays_eligible']}" + f"/{val_metrics['macro_assays_total']} assays) r={r:.4f} | " + f"{elapsed:.1f}s" + ) + + # Track best + if rho > self.best_metric: + self.best_metric = rho + self.patience_counter = 0 + _atomic_torch_save( + self.model.state_dict(), + os.path.join(self.output_dir, "best_model.pt"), + ) + self.best_epoch = epoch + logger.info(f" * New best: {rho:.4f}") + else: + self.patience_counter += 1 + + # History + self.history.append( + { + "epoch": epoch + 1, + "train_loss": train_loss, + "val_loss": val_loss, + "val_metrics": val_metrics, + "lr_encoder": self.optimizer.param_groups[0]["lr"], + "lr_head": self.optimizer.param_groups[1]["lr"], + } + ) + + # (scheduler.step() is now called per-batch in _train_epoch) + + # Periodic checkpoint + if (epoch + 1) % self.checkpoint_interval == 0: + self._save_checkpoint(epoch + 1) + + # Early stopping + if self.patience_counter >= self.patience: + logger.info( + f" Early stopping at epoch {epoch + 1} " + f"(no improvement for {self.patience} epochs)" + ) + self.early_stopped = True + self._save_checkpoint(epoch + 1) + break + + # Load best and test + logger.info(f"\n{'=' * 60}") + logger.info("Loading best model for test evaluation...") + best_path = os.path.join(self.output_dir, "best_model.pt") + self.model.load_state_dict( + torch.load(best_path, map_location=self.device) + ) + + test_loss, test_metrics = self._eval_epoch(self.test_loader) + + logger.info(f"\n{'=' * 60}") + logger.info("TEST RESULTS:") + logger.info(f" Spearman rho: {test_metrics['spearman']:.4f}") + logger.info(f" Pearson r: {test_metrics['pearson']:.4f}") + logger.info(f" MSE: {test_metrics['mse']:.6f}") + logger.info(f"{'=' * 60}") + + # Save results + # CONTRACT r2: the old label hard-coded "SWE" regardless of what was + # actually requested. Describe the configuration that ran. + results = { + "task_type": "regression", + "architecture": getattr(self, "architecture_label", + "cross-attention + live Bertose"), + "best_metric": self.best_metric, + "best_metric_is": "validation", + "best_epoch": self.best_epoch, + "early_stopped": self.early_stopped, + "epochs_ran": len(self.history), + "test_metrics": test_metrics, + "test_loss": test_loss, + "history": self.history, + "fingerprint": self.fingerprint, + "input_hashes": self.input_hashes, + } + # CONTRACT r2: dump per-record predictions. Without them no + # cohort-averaged statistic can be recovered after the fact. + try: + import numpy as _np + _p = getattr(self, "_last_preds", None) + _t = getattr(self, "_last_targets", None) + if _p is not None and _t is not None: + _np.savez_compressed( + os.path.join(self.output_dir, "test_predictions.npz"), + predictions=_np.asarray(_p, dtype=_np.float32), + targets=_np.asarray(_t, dtype=_np.float32)) + logger.info(f" [PRED] wrote {len(_p)} test predictions") + else: + raise RuntimeError("no test predictions captured") + except Exception as _e: + raise RuntimeError("failed to write test predictions: %s" % _e) + + results_path = os.path.join(self.output_dir, "results.json") + with open(results_path, "w") as f: + json.dump(results, f, indent=2) + logger.info(f"Results saved to {results_path}") + + return results + + def _train_epoch(self, epoch: int) -> float: + """Run one training epoch with AMP.""" + self.model.train() + total_loss = 0.0 + n_batches = len(self.train_loader) + + for batch_idx, batch in enumerate(self.train_loader): + # Move to device + token_ids = batch["token_ids"].to(self.device) + attention_mask = batch["attention_mask"].to(self.device) + branch_depths = batch["branch_depths"].to(self.device) + linkage_types = batch["linkage_types"].to(self.device) + protein_emb = batch["protein_emb"].to(self.device) + protein_mask = batch["protein_mask"].to(self.device) + target = batch["target"].to(self.device) + + self.optimizer.zero_grad() + + # AMP forward + with autocast(): + pred = self.model( + token_ids=token_ids, + attention_mask=attention_mask, + branch_depths=branch_depths, + linkage_types=linkage_types, + protein_emb=protein_emb, + protein_mask=protein_mask, + motif_features=batch["motif_features"].to(self.device), + ) + loss = self.criterion(pred, target) + + # AMP backward + self.scaler.scale(loss).backward() + self.scaler.unscale_(self.optimizer) + torch.nn.utils.clip_grad_norm_( + self.model.parameters(), self.max_grad_norm + ) + self.scaler.step(self.optimizer) + self.scaler.update() + + # Per-batch LR scheduling (OneCycleLR) + self.scheduler.step() + + total_loss += loss.item() + + # Progress logging + if (batch_idx + 1) % 200 == 0: + avg = total_loss / (batch_idx + 1) + lr_enc = self.optimizer.param_groups[0]["lr"] + logger.info( + f" [E{epoch + 1}][{batch_idx + 1}/{n_batches}] " + f"loss={avg:.4f} lr_enc={lr_enc:.2e}" + ) + + return total_loss / n_batches + + @torch.no_grad() + def _eval_epoch( + self, loader: DataLoader + ) -> Tuple[float, Dict[str, float]]: + """Run evaluation with AMP.""" + self.model.eval() + total_loss = 0.0 + all_preds = [] + all_targets = [] + + for batch in loader: + token_ids = batch["token_ids"].to(self.device) + attention_mask = batch["attention_mask"].to(self.device) + branch_depths = batch["branch_depths"].to(self.device) + linkage_types = batch["linkage_types"].to(self.device) + protein_emb = batch["protein_emb"].to(self.device) + protein_mask = batch["protein_mask"].to(self.device) + target = batch["target"].to(self.device) + + with autocast(): + pred = self.model( + token_ids=token_ids, + attention_mask=attention_mask, + branch_depths=branch_depths, + linkage_types=linkage_types, + protein_emb=protein_emb, + protein_mask=protein_mask, + motif_features=batch["motif_features"].to(self.device), + ) + loss = self.criterion(pred, target) + + total_loss += loss.item() + all_preds.extend(pred.float().cpu().numpy()) + all_targets.extend(target.cpu().numpy()) + + avg_loss = total_loss / len(loader) + metrics = compute_metrics( + np.array(all_preds), np.array(all_targets) + ) + # ⛔ DECLARED SELECTOR: equal-assay macro, not pooled. Cohort ids come from the dataset's + # own row order, which equals evaluation order because val/test loaders use shuffle=False. + # Asserted, not assumed — a silent misalignment here would select on scrambled assays. + try: + recs = loader.dataset.records + assert len(recs) == len(all_preds), ( + "eval row count %d != dataset rows %d; loader order is not dataset order" + % (len(all_preds), len(recs))) + groups = recs["exp_id"].values + macro, n_elig, n_tot = equal_assay_macro( + np.array(all_preds), np.array(all_targets), groups) + metrics["macro_spearman"] = macro + metrics["macro_assays_eligible"] = int(n_elig) + metrics["macro_assays_total"] = int(n_tot) + except Exception as e: + logger.error("FAIL-CLOSED: equal-assay macro unavailable: %s", e) + raise + self._last_preds = all_preds + self._last_targets = all_targets + return avg_loss, metrics + + def _save_checkpoint(self, epoch: int) -> None: + """Save full training state for resume.""" + ckpt = { + "epoch": epoch, + "model_state_dict": self.model.state_dict(), + "optimizer_state_dict": self.optimizer.state_dict(), + "scheduler_state_dict": self.scheduler.state_dict(), + "scaler_state_dict": self.scaler.state_dict(), + "best_metric": self.best_metric, + "patience_counter": self.patience_counter, + "history": self.history, + # CONTRACT r2: without RNG state a resumed fit replays the data + # order and dropout stream from epoch 0 and is a DIFFERENT + # experiment from an uninterrupted fit at the same seed. + "py_rng": random.getstate(), + "np_rng": np.random.get_state(), + "torch_rng": torch.get_rng_state(), + "cuda_rng": (torch.cuda.get_rng_state_all() + if torch.cuda.is_available() else None), + "best_epoch": getattr(self, "best_epoch", -1), + "early_stopped": getattr(self, "early_stopped", False), + "fingerprint": getattr(self, "fingerprint", None), + } + path = os.path.join(self.output_dir, "last_checkpoint.pt") + _atomic_torch_save(ckpt, path) + logger.info(f" [CKPT] Saved epoch {epoch}") + + def _resume_from_checkpoint(self) -> None: + """Resume training from last checkpoint.""" + ckpt_path = os.path.join(self.output_dir, "last_checkpoint.pt") + if not os.path.exists(ckpt_path): + logger.info(" No checkpoint found, starting fresh") + return + + ckpt = torch.load(ckpt_path, map_location=self.device) + # CONTRACT r2: every arm/seed/port produces an identically shaped state + # dict, so shape is no check at all. Refuse anything whose trajectory + # fingerprint differs from this cell's. + mine = getattr(self, "fingerprint", None) + theirs = ckpt.get("fingerprint") + if mine is not None and theirs is not None and mine != theirs: + raise RuntimeError( + "refusing foreign checkpoint: fingerprint %s != %s" + % (theirs, mine)) + if mine is not None and theirs is None: + raise RuntimeError( + "refusing unfingerprinted checkpoint (pre-contract-r2 run) " + "at %s" % ckpt_path) + self.model.load_state_dict(ckpt["model_state_dict"]) + self.optimizer.load_state_dict(ckpt["optimizer_state_dict"]) + self.scheduler.load_state_dict(ckpt["scheduler_state_dict"]) + if "scaler_state_dict" in ckpt: + self.scaler.load_state_dict(ckpt["scaler_state_dict"]) + self.start_epoch = ckpt["epoch"] + self.best_metric = ckpt["best_metric"] + self.patience_counter = ckpt["patience_counter"] + self.history = ckpt["history"] + self.best_epoch = ckpt.get("best_epoch", -1) + self.early_stopped = ckpt.get("early_stopped", False) + if ckpt.get("py_rng") is not None: + random.setstate(ckpt["py_rng"]) + np.random.set_state(ckpt["np_rng"]) + torch.set_rng_state(ckpt["torch_rng"].cpu() + if hasattr(ckpt["torch_rng"], "cpu") + else ckpt["torch_rng"]) + if ckpt.get("cuda_rng") is not None and torch.cuda.is_available(): + # torch.load(map_location=device) moves these onto the GPU; + # set_rng_state_all requires CPU ByteTensors. + torch.cuda.set_rng_state_all( + [t.cpu() if hasattr(t, "cpu") else t + for t in ckpt["cuda_rng"]]) + logger.info(" [RNG] restored python/numpy/torch/cuda state") + else: + raise RuntimeError("checkpoint carries no RNG state; refusing resume") + logger.info( + f" Resumed from epoch {self.start_epoch}, " + f"best={self.best_metric:.4f}" + ) + + +# ============================================================================ +# Main +# ============================================================================ + + +def main(): + """Entry point for V8 training.""" + parser = argparse.ArgumentParser(description="Bertint V8 Training") + parser.add_argument( + "--csv_path", required=True, help="Path to binding data CSV" + ) + parser.add_argument( + "--split_path", required=True, help="Path to glycan-cold splits JSON" + ) + parser.add_argument( + "--protein_emb_path", required=True, help="Path to ESM-C HDF5" + ) + parser.add_argument( + "--vocab_path", required=True, help="Path to BPE vocab JSON" + ) + parser.add_argument( + "--bertose_checkpoint", required=True, help="Bertose checkpoint" + ) + parser.add_argument("--output_dir", required=True, help="Output dir") + + # Model architecture + parser.add_argument( + "--freeze_layers", type=int, default=4, help="Layers to freeze" + ) + parser.add_argument( + "--shared_dim", type=int, default=512, help="Shared dim" + ) + parser.add_argument( + "--num_cross_layers", type=int, default=2, help="Cross-attn layers" + ) + parser.add_argument( + "--num_heads", type=int, default=8, help="Attention heads" + ) + parser.add_argument( + "--swe_slices", type=int, default=512, help="SWE slices" + ) + parser.add_argument( + "--dropout", type=float, default=0.1, help="Dropout rate" + ) + parser.add_argument( + "--protein_dim", type=int, default=960, help="ESM-C dim" + ) + parser.add_argument( + "--separate_swe", action="store_true", + help="Use separate SWE modules for glycan and protein" + ) + + # Training + parser.add_argument( + "--lr_encoder", type=float, default=1e-5, help="Encoder LR" + ) + parser.add_argument( + "--lr_head", type=float, default=1e-4, help="Head LR" + ) + parser.add_argument( + "--weight_decay", type=float, default=0.01, help="Weight decay" + ) + parser.add_argument( + "--max_grad_norm", type=float, default=1.0, help="Grad clip" + ) + parser.add_argument( + "--batch_size", type=int, default=32, help="Batch size" + ) + parser.add_argument( + "--epochs", type=int, default=50, help="Max epochs" + ) + parser.add_argument( + "--patience", type=int, default=15, help="Early stopping" + ) + parser.add_argument( + "--max_glycan_length", type=int, default=256, help="Max glycan len" + ) + parser.add_argument( + "--max_protein_length", type=int, default=1024, help="Max protein len" + ) + parser.add_argument("--protein_mode", default="real", + choices=["real","constant"], + help="real | constant (protein input zeroed; NOT the G arm — the " + "protein pathway still exists. Use --glycan_only for G.)") + # G arm: do not construct the protein pathway at all. 'constant' only zeroes the + # input; projection, cross-attention and the 2x-width head all remain. + parser.add_argument("--ranking_loss", action="store_true", + help="within-assay pairwise ranking loss + assay-grouped batches; " + "aligns the objective with the equal-assay macro estimand") + parser.add_argument("--assays_per_batch", type=int, default=4) + parser.add_argument("--rows_per_assay", type=int, default=8) + parser.add_argument("--protein_binding_channel", action="store_true", + help="R2: last protein channel is a per-residue binding " + "probability; pool globally AND binding-weighted, then " + "concatenate (KinForm Eqs 2-5). Use --protein_dim 961.") + parser.add_argument("--glycan_only", action="store_true", + help="protected arm G: no protein tensor, mask, projection or " + "cross-attention; head narrows to the glycan width") + parser.add_argument("--protein_attentive_pool", action="store_true", + help="arm A: zero-init attentive protein pooling " + "(identical to mean pooling at init)") + parser.add_argument( + "--motif_additive_dim", type=int, default=0, + help="d>0 adds score += w . motif_features over d binary motif indicators, zero-initialised") + parser.add_argument("--glycan_size_channel", action="store_true", + help="Append log1p(glycan token count) to the head input") + parser.add_argument("--seed", type=int, default=42, help="Random seed") + # ---- contract r2 ----------------------------------------------------- + parser.add_argument("--roles_tsv", required=True) + parser.add_argument("--train_stratum", required=True) + parser.add_argument("--val_stratum", required=True) + parser.add_argument("--test_stratum", required=True) + parser.add_argument("--features_dir", required=True) + parser.add_argument("--expected_train_rows", type=int, required=True) + parser.add_argument("--expected_val_rows", type=int, required=True) + parser.add_argument("--expected_test_rows", type=int, required=True) + parser.add_argument("--manifest_sha256", required=True) + parser.add_argument("--cell_id", required=True) + parser.add_argument("--input_hashes", required=True) + parser.add_argument( + "--warmup_pct", type=float, default=0.05, + help="Fraction of total steps for warmup (0.05=5%%, 0.10=10%%)" + ) + parser.add_argument( + "--target_col", default="target_rank", help="Target column" + ) + parser.add_argument( + "--checkpoint_interval", type=int, default=5, help="Ckpt every N" + ) + parser.add_argument( + "--resume", action="store_true", help="Resume from checkpoint" + ) + # Ablation controls + parser.add_argument( + "--pooling_mode", default="swe", + choices=["swe", "mean", "joint_swe"], + help="Pooling strategy: swe (default), mean, or joint_swe" + ) + parser.add_argument( + "--interaction_mode", default="product_sum", + choices=["product_sum", "concat"], + help="Interaction: product_sum (default) or concat" + ) + parser.add_argument( + "--no_cross_attention", action="store_true", + help="Disable cross-attention blocks (ablation)" + ) + + args = parser.parse_args() + + set_seed(args.seed) + logger.info("Bertint V8 Training — Cross-Attention + Live Bertose") + logger.info(f" freeze_layers={args.freeze_layers}") + logger.info(f" lr_encoder={args.lr_encoder}") + logger.info(f" lr_head={args.lr_head}") + logger.info(f" batch_size={args.batch_size}") + logger.info(f" shared_dim={args.shared_dim}") + logger.info(f" cross_layers={args.num_cross_layers}") + logger.info(f" separate_swe={args.separate_swe}") + logger.info(f" pooling_mode={args.pooling_mode}") + logger.info(f" interaction_mode={args.interaction_mode}") + logger.info(f" cross_attention={not args.no_cross_attention}") + + # Load datasets + logger.info("\nLoading datasets...") + train_ds = BertintV8Dataset( + args.csv_path, args.split_path, "train", + args.protein_emb_path, args.vocab_path, + max_glycan_length=args.max_glycan_length, + max_protein_length=args.max_protein_length, + target_col=args.target_col, + roles_path=args.roles_tsv, + stratum=args.train_stratum, + features_dir=args.features_dir, + expected_rows=args.expected_train_rows, + ) + val_ds = BertintV8Dataset( + args.csv_path, args.split_path, "val", + args.protein_emb_path, args.vocab_path, + max_glycan_length=args.max_glycan_length, + max_protein_length=args.max_protein_length, + target_col=args.target_col, + roles_path=args.roles_tsv, + stratum=args.val_stratum, + features_dir=args.features_dir, + expected_rows=args.expected_val_rows, + ) + test_ds = BertintV8Dataset( + args.csv_path, args.split_path, "test", + args.protein_emb_path, args.vocab_path, + max_glycan_length=args.max_glycan_length, + max_protein_length=args.max_protein_length, + target_col=args.target_col, + roles_path=args.roles_tsv, + stratum=args.test_stratum, + features_dir=args.features_dir, + expected_rows=args.expected_test_rows, + ) + + if args.ranking_loss: + # ⛔ TRAIN ONLY. val/test keep plain batching + shuffle=False so the macro is computed + # exactly as it was for every previously reported arm. + _sampler = AssayGroupedBatchSampler( + train_ds.records["exp_id"].values, + args.assays_per_batch, args.rows_per_assay, seed=args.seed) + train_loader = DataLoader( + train_ds, batch_sampler=_sampler, + num_workers=4, pin_memory=True, collate_fn=collate_fn, + ) + else: + train_loader = DataLoader( + train_ds, batch_size=args.batch_size, shuffle=True, + num_workers=4, pin_memory=True, collate_fn=collate_fn, + ) + val_loader = DataLoader( + val_ds, batch_size=args.batch_size, shuffle=False, + num_workers=2, pin_memory=True, collate_fn=collate_fn, + ) + test_loader = DataLoader( + test_ds, batch_size=args.batch_size, shuffle=False, + num_workers=2, pin_memory=True, collate_fn=collate_fn, + ) + + # Build model + logger.info("\nBuilding model...") + config, seq_emb, seq_layers = load_bertose_encoder( + args.bertose_checkpoint, freeze_layers=args.freeze_layers + ) + + model = BertintV8( + seq_embeddings=seq_emb, + seq_layers=seq_layers, + glycan_dim=config.seq_hidden_size, + protein_dim=args.protein_dim, + shared_dim=args.shared_dim, + num_cross_layers=args.num_cross_layers, + num_heads=args.num_heads, + swe_slices=args.swe_slices, + dropout=args.dropout, + separate_swe=args.separate_swe, + pooling_mode=args.pooling_mode, + interaction_mode=args.interaction_mode, + use_cross_attention=not args.no_cross_attention, + glycan_size_channel=args.glycan_size_channel, + motif_additive_dim=args.motif_additive_dim, + protein_mode=args.protein_mode, + protein_attentive_pool=args.protein_attentive_pool, + protein_tower=not args.glycan_only, + protein_binding_channel=args.protein_binding_channel, + ) + + total_params = sum(p.numel() for p in model.parameters()) + trainable_params = sum( + p.numel() for p in model.parameters() if p.requires_grad + ) + logger.info(f" Total params: {total_params:,}") + logger.info(f" Trainable: {trainable_params:,}") + + # Loss + criterion = (WithinAssayPairwiseLoss(args.assays_per_batch, args.rows_per_assay) + if args.ranking_loss else BertintV8Loss()) + logger.info(" objective: %s", type(criterion).__name__) + + # ---------------- CONTRACT r2: seal inputs, then fingerprint ----------- + def _sha_file(p): + h = hashlib.sha256() + with open(p, "rb") as fh: + for c in iter(lambda: fh.read(1 << 22), b""): + h.update(c) + return h.hexdigest() + + _here = os.path.dirname(os.path.abspath(__file__)) + _feat = args.features_dir + _sealed = { + "csv": args.csv_path, + "roles_tsv": args.roles_tsv, + "protein_emb_h5": args.protein_emb_path, + "vocabulary": args.vocab_path, + "upstream_checkpoint": args.bertose_checkpoint, + "dataset_v8.py": os.path.join(_here, "dataset_v8.py"), + "training_v8.py": os.path.abspath(__file__), + "bertint_v8.py": os.path.join(_here, "bertint_v8.py"), + "a1111_encoder_adapter.py": os.path.join(_here, "a1111_encoder_adapter.py"), + } + for _n in ("token_ids", "branch_depths", "linkage_types", "attention_mask", + "tree_channels_valid", "motif_features"): + _sealed["feature_" + _n] = os.path.join(_feat, "review_%s.npy" % _n) + _sealed["feature_index"] = os.path.join(_feat, "review_affinose_glycan_index.tsv.gz") + + _hashes = {} + for _k, _p in _sealed.items(): + if not os.path.isfile(_p): + raise RuntimeError("sealed input missing: %s -> %s" % (_k, _p)) + _hashes[_k] = _sha_file(_p) + + # every dynamically resolved module under the port tree or bertose root + _imports = {} + for _m in list(sys.modules.values()): + _f = getattr(_m, "__file__", None) + if not _f or not os.path.isfile(_f): + continue + _fa = os.path.abspath(_f) + if _fa.startswith(_here) or "/bertose" in _fa or "/glycan-SD-VS/" in _fa: + _imports[_fa] = _sha_file(_fa) + _hashes["_imported_modules"] = _imports + logger.info(" [SEAL] hashed %d artifacts + %d imported modules" + % (len(_sealed), len(_imports))) + + # ENFORCE against the pinned expectation file, if supplied + if getattr(args, "input_hashes", None): + with open(args.input_hashes) as _fh: + _exp = json.load(_fh) + _bad = [] + for _k, _v in _exp.items(): + if _k.startswith("_"): + continue + if _hashes.get(_k) != _v: + _bad.append("%s: got %s expected %s" + % (_k, str(_hashes.get(_k))[:16], str(_v)[:16])) + if _bad: + raise RuntimeError("SEALED INPUT HASH DRIFT:\n " + "\n ".join(_bad)) + logger.info(" [SEAL] all %d pinned hashes match" % len( + [k for k in _exp if not k.startswith("_")])) + else: + raise RuntimeError("--input_hashes is required under contract r2") + + # roster identity, not just a count + _roster = {} + for _split, _ds in (("train", train_ds), ("val", val_ds), ("test", test_ds)): + _h = hashlib.sha256() + _r = _ds.records + for _i, _row in enumerate(zip(_r["protein_id"], _r["glycan_wurcs"], + _r.get("exp_id", _r["protein_id"]))): + _h.update(("%d|%s|%s|%s\n" % (_i, _row[0], _row[1], _row[2])).encode()) + _roster[_split] = _h.hexdigest() + _hashes["_roster_digests"] = _roster + logger.info(" [SEAL] roster digests train=%s val=%s test=%s" + % (_roster["train"][:16], _roster["val"][:16], _roster["test"][:16])) + + _fp = hashlib.sha256("|".join([ + args.manifest_sha256, args.cell_id, str(args.seed), + args.train_stratum, args.val_stratum, args.test_stratum, + str(args.expected_train_rows), str(args.expected_val_rows), + str(args.expected_test_rows), + _hashes["upstream_checkpoint"], _hashes["dataset_v8.py"], + _hashes["training_v8.py"], _hashes["bertint_v8.py"], + _roster["train"], _roster["val"], _roster["test"], + str(args.epochs), str(args.batch_size), str(args.lr_encoder), + str(args.lr_head), str(args.freeze_layers), str(args.warmup_pct), + ]).encode()).hexdigest() + logger.info(" [FINGERPRINT] %s cell=%s" % (_fp[:16], args.cell_id)) + + os.makedirs(args.output_dir, exist_ok=True) + with open(os.path.join(args.output_dir, "receipt.json"), "w") as _fh: + json.dump({"cell_id": args.cell_id, "fingerprint": _fp, + "manifest_sha256": args.manifest_sha256, + "args": vars(args), "input_hashes": _hashes, + "roster_digests": _roster, + "slurm_job_id": os.environ.get("SLURM_JOB_ID"), + "slurm_array_task_id": os.environ.get("SLURM_ARRAY_TASK_ID"), + "slurm_restart_count": os.environ.get("SLURM_RESTART_COUNT"), + "node": os.environ.get("SLURMD_NODENAME"), + "gpu": (torch.cuda.get_device_name(0) + if torch.cuda.is_available() else None)}, + _fh, indent=2, default=str) + + # Train + trainer = BertintV8Trainer( + model=model, + criterion=criterion, + train_loader=train_loader, + val_loader=val_loader, + test_loader=test_loader, + output_dir=args.output_dir, + lr_encoder=args.lr_encoder, + lr_head=args.lr_head, + weight_decay=args.weight_decay, + max_grad_norm=args.max_grad_norm, + epochs=args.epochs, + patience=args.patience, + checkpoint_interval=args.checkpoint_interval, + resume=args.resume, + warmup_pct=args.warmup_pct, + fingerprint=_fp, + input_hashes=_hashes, + ) + trainer.architecture_label = ( + "cross-attention=%s pooling=%s interaction=%s + live Bertose" + % (not args.no_cross_attention if hasattr(args, "no_cross_attention") else True, + args.pooling_mode, args.interaction_mode)) + + results = trainer.train() + logger.info("\nTraining complete!") + + +if __name__ == "__main__": + main() diff --git a/releases/2026-10-02/provenance/wa3_config.json b/releases/2026-10-02/provenance/wa3_config.json new file mode 100644 index 0000000000000000000000000000000000000000..946dee2179683ceb978f6c1fce845d7b556c2d7b --- /dev/null +++ b/releases/2026-10-02/provenance/wa3_config.json @@ -0,0 +1,52 @@ +{ + "cell_id": "A1111", + "upstream_seed": 42, + "loss_denominator": 5, + "coefficients_by_policy": { + "WA3_FINAL_MS_MD_HEAVY": { + "md": 2.0, + "ms": 2.0, + "sequence": 0.5, + "static": 0.25, + "topology": 0.25 + }, + "WA4_FINAL_AUXILIARY_HEAVY": { + "md": 1.5, + "ms": 1.5, + "sequence": 0.25, + "static": 1.5, + "topology": 0.25 + }, + "WA5_FINAL_STRUCTURE_MINIMAL": { + "md": 1.5, + "ms": 1.75, + "sequence": 0.75, + "static": 0.25, + "topology": 0.75 + } + }, + "null_scales": { + "md": 1.11266, + "ms": 3.00609, + "sequence": 4.96749, + "static": 3.42858, + "topology": 2.0933 + }, + "maximum_epochs": 100, + "patience": 15, + "selection_rule": "strict_lower_earliest_tie", + "project_root": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc", + "output_root": "/work/ratul1/supantha/bertose_a5_static_precache_20260723_r2c4_closure31_py310_3c8d5299a4af15bc/writing/review/multimodal/outputs/a5_wa345_pretraining_20260817_r1/production", + "architecture_disclosure": { + "constraint_requested": null, + "measured_hours_per_epoch": { + "a100_80gb": 1.0572, + "h200_nvl": 0.4798 + }, + "pinned": false, + "route_architectures": [ + "a100", + "h200" + ] + } +} diff --git a/releases/2026-10-02/provenance/workbench_assets.json b/releases/2026-10-02/provenance/workbench_assets.json new file mode 100644 index 0000000000000000000000000000000000000000..d8b07da8087e959e80bb96174afc4a1b148544ca --- /dev/null +++ b/releases/2026-10-02/provenance/workbench_assets.json @@ -0,0 +1,237 @@ +{ + "schema": "bertose_workbench_assets_v1", + "asset_version": "2026-09-28", + "code_version": "2026-10-02", + "files": [ + { + "repo": "glycorpus", + "repo_id": "supanthadey1/glycorpus", + "repo_type": "dataset", + "path_in_repo": "releases/2026-09-28/bertosebind/features/review_affinose_glycan_index.tsv.gz", + "bytes": 58028, + "sha256": "986c4282f79ba621afdd4ad8cfe58d29d79d819946e75d0eb2d9c2316d637a3d", + "role": "binding_targets_roles_features_and_provenance" + }, + { + "repo": "glycorpus", + "repo_id": "supanthadey1/glycorpus", + "repo_type": "dataset", + "path_in_repo": "releases/2026-09-28/bertosebind/features/review_attention_mask.npy", + "bytes": 1004928, + "sha256": "43cdb6ccd9c5e5ecc46aed5ed0c29801144526486e89ba3f611537cea13e8282", + "role": "binding_targets_roles_features_and_provenance" + }, + { + "repo": "glycorpus", + "repo_id": "supanthadey1/glycorpus", + "repo_type": "dataset", + "path_in_repo": "releases/2026-09-28/bertosebind/features/review_branch_depths.npy", + "bytes": 1004928, + "sha256": "afa8b69797891b529b212da41726c1d1269e06f26396370e2fcc0b77f25a5086", + "role": "binding_targets_roles_features_and_provenance" + }, + { + "repo": "glycorpus", + "repo_id": "supanthadey1/glycorpus", + "repo_type": "dataset", + "path_in_repo": "releases/2026-09-28/bertosebind/features/review_linkage_types.npy", + "bytes": 1004928, + "sha256": "3440fc0db96dc3ecdfa315e390fe354c398ded75db8b9017569db7bf6c61610f", + "role": "binding_targets_roles_features_and_provenance" + }, + { + "repo": "glycorpus", + "repo_id": "supanthadey1/glycorpus", + "repo_type": "dataset", + "path_in_repo": "releases/2026-09-28/bertosebind/features/review_motif_features.npy", + "bytes": 2590628, + "sha256": "d88c2d1342d27f572a27ec030579341a59d72bad89d552695d4db419ff3ceae2", + "role": "binding_targets_roles_features_and_provenance" + }, + { + "repo": "glycorpus", + "repo_id": "supanthadey1/glycorpus", + "repo_type": "dataset", + "path_in_repo": "releases/2026-09-28/bertosebind/features/review_residue_ids.npy", + "bytes": 2009728, + "sha256": "ed6b472942d223ab1f17d1f6bfe7e9962e8b10e13e3d9c109a10a45c57d76fbf", + "role": "binding_targets_roles_features_and_provenance" + }, + { + "repo": "glycorpus", + "repo_id": "supanthadey1/glycorpus", + "repo_type": "dataset", + "path_in_repo": "releases/2026-09-28/bertosebind/features/review_token_ids.npy", + "bytes": 2009728, + "sha256": "9dbdf73149ce8a3a1d4e1a5322f8a3de68e0f2e1a2e6a73733641e02a9b32ccd", + "role": "binding_targets_roles_features_and_provenance" + }, + { + "repo": "glycorpus", + "repo_id": "supanthadey1/glycorpus", + "repo_type": "dataset", + "path_in_repo": "releases/2026-09-28/bertosebind/features/review_tree_channels_valid.npy", + "bytes": 4053, + "sha256": "0c867a6e6fdf3a0b72d5fdb76023556d998ad286ef14f0f8f661d760b8f18a2c", + "role": "binding_targets_roles_features_and_provenance" + }, + { + "repo": "glycorpus", + "repo_id": "supanthadey1/glycorpus", + "repo_type": "dataset", + "path_in_repo": "releases/2026-09-28/bertosebind/protein_features/affinose_v2_esmc_by_seqhash_r2.h5", + "bytes": 2329355814, + "sha256": "529ae25ecac7c03d0fc33f8f52f6cacec2db5103f27088d25e9adc06133fdef4", + "role": "binding_targets_roles_features_and_provenance" + }, + { + "repo": "iar", + "repo_id": "supanthadey1/bertose-iar-resolver", + "repo_type": "model", + "path_in_repo": "releases/2026-09-28/encoder_full.pt", + "bytes": 1662550980, + "sha256": "8e7d95ee492df6d843f495dd4708c97ee16a947e75b5cd8f83b23e4f4a0d6d82", + "role": "full_primary_checkpoint" + }, + { + "repo": "encoder", + "repo_id": "supanthadey1/bertose-glycan-encoder", + "repo_type": "model", + "path_in_repo": "releases/2026-09-28/variants/variant-1/sequence_encoder.pt", + "bytes": 362396829, + "sha256": "c8ae3029e9b0fdd70778b63043e730489eb9919a262644c422ce19ac6ef5390a", + "role": "sequence_export", + "variant": "1" + }, + { + "repo": "encoder", + "repo_id": "supanthadey1/bertose-glycan-encoder", + "repo_type": "model", + "path_in_repo": "releases/2026-09-28/variants/variant-2/sequence_encoder.pt", + "bytes": 362396829, + "sha256": "ba433d65796ebe77cc03a9ec5d9f6997fd53cac8daf6747b8a131283d3ad7e2c", + "role": "sequence_export", + "variant": "2" + }, + { + "repo": "encoder", + "repo_id": "supanthadey1/bertose-glycan-encoder", + "repo_type": "model", + "path_in_repo": "releases/2026-09-28/variants/variant-3/sequence_encoder.pt", + "bytes": 362396765, + "sha256": "7e01e446d8450665b94dc3eaf6d95324c2f1f41d8a78825fe1edbc58f1a19cb7", + "role": "sequence_export", + "variant": "3" + }, + { + "repo": "encoder", + "repo_id": "supanthadey1/bertose-glycan-encoder", + "repo_type": "model", + "path_in_repo": "releases/2026-09-28/variants/variant-4/sequence_encoder.pt", + "bytes": 362396765, + "sha256": "d7845562cf53643afe8e474c4b43b6caf3ea12da33aae95925b6b44c97c32117", + "role": "sequence_export", + "variant": "4" + }, + { + "repo": "encoder", + "repo_id": "supanthadey1/bertose-glycan-encoder", + "repo_type": "model", + "path_in_repo": "releases/2026-09-28/variants/variant-5/sequence_encoder.pt", + "bytes": 362396765, + "sha256": "deb871c85bb80aa72bc1c62016307bfd7816e8ecf8a2c39deeefd4912257a458", + "role": "sequence_export", + "variant": "5" + }, + { + "repo": "bertosebind", + "repo_id": "supanthadey1/affinose-interaction-model", + "repo_type": "model", + "path_in_repo": "releases/2026-09-28/glycan-cold/seed-42/model.pt", + "bytes": 400940515, + "sha256": "3303250c5aa34f7f20e605dafb138554302baa336598ec84645f196e7f906b52", + "role": "bertosebind_checkpoint", + "cell_id": "mo_A_glycan_s42" + }, + { + "repo": "bertosebind", + "repo_id": "supanthadey1/affinose-interaction-model", + "repo_type": "model", + "path_in_repo": "releases/2026-09-28/doubly-cold/seed-42/model.pt", + "bytes": 400940515, + "sha256": "e3872d4768fdcf5aa1d7be070cad8789a427332ba6741fdfa420d1c69f54b321", + "role": "bertosebind_checkpoint", + "cell_id": "mo_C_doubly_s42" + }, + { + "repo": "bertosebind", + "repo_id": "supanthadey1/affinose-interaction-model", + "repo_type": "model", + "path_in_repo": "releases/2026-09-28/protein-cold/seed-43/model.pt", + "bytes": 400940515, + "sha256": "f143720e8ebd41ba247ddeac5a5b58971c9cc3c407361b8071cf7dd1c513b57d", + "role": "bertosebind_checkpoint", + "cell_id": "mof_B_protein_s43" + }, + { + "repo": "bertosebind", + "repo_id": "supanthadey1/affinose-interaction-model", + "repo_type": "model", + "path_in_repo": "releases/2026-09-28/protein-cold/seed-44/model.pt", + "bytes": 400940515, + "sha256": "d43e1b62ce0b51b874d255544d63088f10735c85e57234eb9c420e8af3af88f1", + "role": "bertosebind_checkpoint", + "cell_id": "mof_B_protein_s44" + }, + { + "repo": "bertosebind", + "repo_id": "supanthadey1/affinose-interaction-model", + "repo_type": "model", + "path_in_repo": "releases/2026-09-28/doubly-cold/seed-43/model.pt", + "bytes": 400940515, + "sha256": "7b56d428df6c91ec02e3fa5aab4df73afba7127f020738548ae37b7048bb66a1", + "role": "bertosebind_checkpoint", + "cell_id": "mof_C_doubly_s43" + }, + { + "repo": "bertosebind", + "repo_id": "supanthadey1/affinose-interaction-model", + "repo_type": "model", + "path_in_repo": "releases/2026-09-28/doubly-cold/seed-44/model.pt", + "bytes": 400940515, + "sha256": "509a088a821250e6464c2f696aa1b53cc4f00443c73153c95a18afdfe53a621d", + "role": "bertosebind_checkpoint", + "cell_id": "mof_C_doubly_s44" + }, + { + "repo": "bertosebind", + "repo_id": "supanthadey1/affinose-interaction-model", + "repo_type": "model", + "path_in_repo": "releases/2026-09-28/protein-cold/seed-42/model.pt", + "bytes": 400940515, + "sha256": "ebdc31defe4c7a6d105670626d2da50f7d29026e41c31f24bd5722079bb7a80d", + "role": "bertosebind_checkpoint", + "cell_id": "mo_B_protein_s42" + }, + { + "repo": "bertosebind", + "repo_id": "supanthadey1/affinose-interaction-model", + "repo_type": "model", + "path_in_repo": "releases/2026-09-28/glycan-cold/seed-43/model.pt", + "bytes": 400940515, + "sha256": "e2c0bebaaf53894bb928bc6b302c3eacfa5254d9c7301ff47854e98338b97ee3", + "role": "bertosebind_checkpoint", + "cell_id": "moc_A_glycan_s43" + }, + { + "repo": "bertosebind", + "repo_id": "supanthadey1/affinose-interaction-model", + "repo_type": "model", + "path_in_repo": "releases/2026-09-28/glycan-cold/seed-44/model.pt", + "bytes": 400940515, + "sha256": "c4adf409efbb985b1fceee6a398ac8be0c84946ea354791c95ae835ae59e67a4", + "role": "bertosebind_checkpoint", + "cell_id": "moc_A_glycan_s44" + } + ] +} diff --git a/releases/2026-10-02/requirements-analysis.txt b/releases/2026-10-02/requirements-analysis.txt new file mode 100644 index 0000000000000000000000000000000000000000..3ae0a97c8c8007592983699068d8a1bd52d8efce --- /dev/null +++ b/releases/2026-10-02/requirements-analysis.txt @@ -0,0 +1,6 @@ +-r requirements.txt +pandas==2.3.3 +scipy==1.16.3 +h5py==3.16.0 +tqdm==4.67.1 +networkx==3.5 diff --git a/releases/2026-10-02/requirements-workbench.txt b/releases/2026-10-02/requirements-workbench.txt new file mode 100644 index 0000000000000000000000000000000000000000..f7e99d8d2f98e249dcf9a9c5bc2d51a4772dee62 --- /dev/null +++ b/releases/2026-10-02/requirements-workbench.txt @@ -0,0 +1,4 @@ +-r requirements-analysis.txt +huggingface-hub>=1.1,<2 +matplotlib>=3.8,<4 +ipykernel>=6,<8 diff --git a/releases/2026-10-02/requirements.txt b/releases/2026-10-02/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..c106b24fc7b6f3708f4f0f12e2ca599ca48a7637 --- /dev/null +++ b/releases/2026-10-02/requirements.txt @@ -0,0 +1,3 @@ +# Versions exercised by the local sequence-inference checks; Python 3.12.4. +torch==2.9.1 +numpy==1.26.4 diff --git a/releases/2026-10-02/score_predictions.py b/releases/2026-10-02/score_predictions.py new file mode 100644 index 0000000000000000000000000000000000000000..c8a9193942d13106601dfc1d467b92144e1ea4b9 --- /dev/null +++ b/releases/2026-10-02/score_predictions.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +"""Score a row-aligned CSV with the final Affinose reporting convention. + +Derived from score_arms_on_test.py (2026-09-09), macro() and its data-only +eligibility construction. This convenience entrypoint was not used for the +historical published results; the original scorer is retained in provenance. +""" +import argparse +import json +import numpy as np +import pandas as pd +from scipy.stats import spearmanr + + +def equal_assay_macro(frame): + """Equal mean of eligible assay Spearman; constant predictions receive 0.""" + required = ['assay', 'target', 'prediction'] + if any(k not in frame for k in required): + raise ValueError('CSV requires assay,target,prediction columns') + if frame['assay'].isna().any() or not np.isfinite(frame[['target','prediction']].to_numpy(dtype=float)).all(): + raise ValueError('Rows require an assay ID and finite target/prediction values') + vals=[] + for _, group in frame.groupby('assay',sort=False): + if len(group)<5 or group['target'].nunique()<2: + continue + rho=0.0 if group['prediction'].nunique()<2 else float(spearmanr(group['prediction'],group['target']).statistic) + vals.append(rho if np.isfinite(rho) else 0.0) + if not vals: + raise ValueError('No assays have at least 5 rows and 2 distinct targets') + return {'equal_assay_macro_spearman':float(np.mean(vals)), 'eligible_assays':len(vals), 'rows':len(frame)} + +if __name__=='__main__': + parser=argparse.ArgumentParser(description=__doc__) + parser.add_argument('csv',help='Row-aligned assay,target,prediction CSV; include the complete evaluation roster') + args=parser.parse_args() + print(json.dumps(equal_assay_macro(pd.read_csv(args.csv)),indent=2)) diff --git a/releases/2026-10-02/structure_md_processing/README.md b/releases/2026-10-02/structure_md_processing/README.md new file mode 100644 index 0000000000000000000000000000000000000000..67c3222f878cc104db6da53a5b4a45b022789295 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/README.md @@ -0,0 +1,29 @@ +# Structure and MD processing sources + +This snapshot now contains 32 unchanged payload files: the original 17 sources/configuration records, 14 additional MD processing sources/configurations, and the collected final corrected-package summary. `project/` preserves each source path relative to `v3.1_cluster_training`, including `writing/review/` and `training/`. The original 17 hashes remain unchanged; `prior_snapshot_20260929.json` preserves the earlier metadata. + +## Included processing chain + +The sources cover coordinate/static graph materialization, MD preparation and simulation, PCA/torsion/structural extraction, temporal 20×9 extraction, the corrected affected-state overlay, parent aggregation, parent audit/freeze, and the final corrected 20×6 reduction/audit. The final reduction selects source channels `[0, 2, 3, 4, 6, 7]`; no transformation was run here. + +`run_review_md_charge_corrected_feature_stage_20260802_r1.sh` calls the PCA corpus, torsion corpus, structural extension and temporal builder. Their explicit local Python import companions are included. The original training package initializer's three companion modules remain included because Python executes that initializer when the PCA pilot imports the alignment parser. + +The generic freeze helper and original parent/freeze Slurm launchers are preserved as source context. The two dated launchers point to **pre-correction** packages; they are not ready-to-run commands for the final corrected release. The freeze helper queries `sacct` and requires historical successful job IDs. Its exact use for the corrected package is not established by these current local copies. + +## Identities and replay inputs + +`source_manifest.json` records original and staged paths, current byte hashes, inclusion reasons and any separately established historical input pin. Fresh hashes establish the copied script identities; they do not establish that these exact script bytes produced historical results. The final corrected summary's `source_sha256` map identifies ten **input files**, not the historical processing scripts. + +All ten historically pinned inputs to the final 20×6 reducer are now verified and integrated under `data/md/replay_inputs/`: eight recovered Nova inputs and two verified local reuses. The local 20×6 YAML matches its historical pin, and the 20×6 parent index is byte-identical to the pinned 20×9 index. The [data replay manifest](../../data/md/replay_inputs/replay_manifest.json) records each digest and its historical-to-packaged path mapping. `input_closure_20260930.json` records the current closure. The earlier `independent_qa_20260930.json`, `extension_checks.json` and retrieval plan remain dated evidence of the eight candidates before recovery; their historical findings have not been rewritten. + +`evidence/review_md_parent_temporal_20x6_v2_summary.json` preserves the verified output summary. `SHA256SUMS` covers the staged payload and local documentation. Source validation checks byte equality, Python syntax and shell syntax only. The current input-closure readback reconciles the verified recovery and integration records; it imports or executes none of the scientific scripts. + +## Remaining dependencies and limits + +- The extraction stages require exact state manifests and retained per-state trajectories, coordinates, topology, feature arrays and audit records. The completed coordinate/trajectory metadata inventory is separate; it does not certify simulation or frame validity. +- Parent aggregation also needs the exact parent/objective/static-state partitions and review index. The pinned upstream summaries are now recovered; their further dependencies still require explicit identity and path reconciliation before upstream replay. +- Python requirements include NumPy, PyYAML, PyTorch, pandas, NetworkX and ParmEd; some pilot branches use scikit-learn and matplotlib. Historical version/environment closure remains unverified. GROMACS, tleap, acpype and the original GLYCAM/water force-field resources are external dependencies. A requested module name in a launcher is not proof of the installed binary/version. +- The final unchanged audit opens the absolute `corrected_overlay.summary_path` embedded in its summary and checks that same resolved path in `source_sha256`. Relocating CLI inputs alone is insufficient. Preserve historical metadata; an explicit mapping/adapter is still needed for a portable replay. +- The recovered corrected freeze receipt provides further source, audit, configuration and scheduler references. Their presence and historical execution linkage are separate from the ten final-reducer input identities; this is not a certified end-to-end replay bundle. + +No MD, descriptor generation, training, remote access or public upload was performed. Raw coordinate/trajectory packaging, immutable deposit identities and source-specific terms remain separate release work. diff --git a/releases/2026-10-02/structure_md_processing/SHA256SUMS b/releases/2026-10-02/structure_md_processing/SHA256SUMS new file mode 100644 index 0000000000000000000000000000000000000000..49716296993c621dd065837c169594aea79fcda8 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/SHA256SUMS @@ -0,0 +1,38 @@ +1a8459fea8d7d35948bd4315d840a0ec6f60e4fcb4823e18d903294f2c1c20d5 README.md +39c6691d762b1ac2d0bed3464b1ed31e4fbe72b18e218ba4a553f3f94702a9e2 evidence/review_md_parent_temporal_20x6_v2_summary.json +823f089df162283c6ed2077d7c8af1cfc49d1f814e58a029b64c2c18a0a075d8 extension_checks.json +0f43a293b4b5edaa76da4c4073a7a221582b064c41375a7de982b09dbfe05642 prior_snapshot_20260929.json +0d967082a8225a1eab98315c2fe7916eff0e863ec04287a43351b757e08f5070 project/training/__init__.py +daae9ee3f3c286e36c7fd7ede37f889eca2a6f9956755717a5bf714645ffa4bb project/training/a5_glycam_chemistry.py +ee6e3d06fce7316b3622f4ad92d900608eb91af09f3872d0200c1b246158605f project/training/a5_static_alignment.py +f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7 project/training/a5_topology.py +d08683664ffe28661becd6bdfd5b6b8169bd430800c3e844218969548d3498a2 project/training/masking.py +ca2be55ece9c15271713f553f619bdd42cf4292c6c9d86e19037db9a73168e28 project/training/multimodal_dataset.py +21ae467f964ea98486ed7efa3f7887194e05c326e4fa92f124e8d5f5570f030c project/training/multimodal_masking.py +2e3b0a72767fa5e7ca950ada7923faac63e58db53f6969a030e01938a81254ad project/writing/review/glycam_structure/configs/review_md_temporal_20x6_v1_20260801.yaml +4d668c45f1f17f12b1d4af022d2e1849cec815e24664e8ad9183569fae7f764f project/writing/review/glycam_structure/configs/review_md_temporal_20x9_v1_20260731.yaml +ddabd88756774a9c75ae93709fafb6b7c2d3cdf0c9b7d5b66fd801d8e2388c76 project/writing/review/glycam_structure/scripts/audit_review_md_charge_corrected_exact_roster_20260802_r1.py +131499356bc91f07ebd1f2f40166c9f756d7e64b49a66ee69d1efa0fcecf9843 project/writing/review/glycam_structure/scripts/audit_review_md_parent_feature_package.py +dacc54f37dc4c816fdf2fb801b13eb239cf42444883ace1dfed2a92b6fc798da project/writing/review/glycam_structure/scripts/audit_review_md_temporal_20x6_r2.py +2df5009bdcefb49ed7742391d7d6f5f73cf1574fc7d17cd46bd2ad3098331a06 project/writing/review/glycam_structure/scripts/build_review_md_parent_feature_package.py +4bad11cfd69c150f2c50b92856a6ab21641772baa2236b45ca505f5637ea5a0b project/writing/review/glycam_structure/scripts/build_review_md_temporal_20x6_r2.py +2743e322eccd5c0217b44e3eb6c4dc242d35db7eacf91f235d23f7a846b70dbb project/writing/review/glycam_structure/scripts/build_review_md_temporal_20x9.py +35108afde036b0f1fbf888014a5afebc45568b45dbdea85a5913c2dba8938127 project/writing/review/glycam_structure/scripts/freeze_review_md_temporal_feature_layer.py +102466ed3bf04ef2cf2ab53b04fdbb9c6e6ea1d16061194f97eed5bedc4e2e2d project/writing/review/glycam_structure/scripts/merge_review_md_charge_corrected_temporal_20x9_r1.py +47c9d9a448325e59742e30a444b636e888df18cf88f010fdad09e0393f5bf9c9 project/writing/review/glycam_structure/scripts/prepare_review_md_charge_corrected_feature_overlay_r1.py +80c1e2cbf2f2bbf7a19564a7e88d65e2d9dd4a190c33e6b5405dd107d6e553fe project/writing/review/glycam_structure/scripts/review_md_all20_charge_corrected_run_state_r6.py +dfc5670ad8a146af48abfb381198bacd017ad7dbac4a081bc204d5dbf61cb1cb project/writing/review/glycam_structure/scripts/review_md_wiley_pca_corpus.py +b9f20eef44858866d95338a6f5dedebf253d8e827890d10806ce7d0045b14594 project/writing/review/glycam_structure/scripts/review_md_wiley_pca_pilot.py +39f9ddfd0e91c3afc1c3b6085689f8bed7bf585446128be634ab97369a79869b project/writing/review/glycam_structure/scripts/review_md_wiley_structural_extension.py +163c93827dc18dd281d8e5a6ceb8b106a02b00e3366442ee09fd0e1b477262e8 project/writing/review/glycam_structure/scripts/review_md_wiley_torsion_pca_corpus.py +3cb1b2ea38fef04ba9ba2b01ef1944f69a48fb5dcfd4d8011684de9ddaa10ca7 project/writing/review/glycam_structure/scripts/run_review_md_charge_corrected_feature_stage_20260802_r1.sh +21ffbc09d34291adc6d2a3535ef142014d1d31ea8a28002fee23af29b88f415a project/writing/review/glycam_structure/scripts/slurm_freeze_review_md_temporal_feature_layer_20260801.sh +bf3ef76494d936044615b59e0941f3b6fb35a935d6743abb5c035995b61a63d5 project/writing/review/glycam_structure/scripts/slurm_review_md_parent_feature_package_20260731.sh +b8e953947b4ac55e1cd9d509c33e1bddf211f046b9124ddc175166a1a763b31a project/writing/review/multimodal/outputs/p1_a5_static_role_successor_cascade_20260720_r1/review_a5_static_role_successor_cascade_receipt.json +ffbbe2126eb6131ab8b64ab5809b79b29e5534785cbe6fcfe1bba04b93e06050 project/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_r2.json +6bba07e7da9284af46b97f80c25c7e1dc332facf452e0fd2140a975b7c1e496b project/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_receipt_r2.json +da8d6dab478ace650fa5af3e99c72dedaf65a6cbc2bf62373fa2082bef748cea project/writing/review/multimodal/runtime/a5_static_v2_20260721_r7/review_a5_static_graph_materializer_r7.py +12fd869f52759168e0f3ff3243ac7dcdb36c0b067d83e24931c185c67fc80c26 project/writing/review/multimodal/scripts/build_review_a5_static_graph_v2_20260721_r7.py +8da3a60c3d205f9a56f3a97842f3c05e647d3f89ad56c91d431eb75ede49c9ff source_manifest.json +2e644b90c80388a169da946a22557e0d6d0f37876334fa5d450f27fce41aebe1 independent_qa_20260930.json +1e15e8a160c1af8e31c490fde35e9177fce583d98157751a852846d1390cb43a input_closure_20260930.json diff --git a/releases/2026-10-02/structure_md_processing/evidence/review_md_parent_temporal_20x6_v2_summary.json b/releases/2026-10-02/structure_md_processing/evidence/review_md_parent_temporal_20x6_v2_summary.json new file mode 100644 index 0000000000000000000000000000000000000000..2a40657e9cf27ff9435394d2fdb28134d2e6483d --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/evidence/review_md_parent_temporal_20x6_v2_summary.json @@ -0,0 +1,248 @@ +{ + "claim_boundary": "ordered_short_timescale_dynamic_fingerprint_not_equilibrium_population", + "corrected_overlay": { + "affected_state_count": 9943, + "schema": "review_md_temporal_20x9_v2_charge_corrected_overlay", + "state_count": 47063, + "status": "PASS", + "summary_path": "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_raw20x9/package/review_md_state_temporal_20x9_v2_summary.json", + "summary_sha256": "51bf6920b754f6b1b8e1721b45684e2a3c738bb2f339d6147675ab671d6baef7", + "tensor_shape": [ + 47063, + 20, + 9 + ], + "unaffected_state_count": 37120, + "unaffected_state_tensor_values_verified_unchanged": true + }, + "created_at_utc": "2026-08-05T00:25:25+00:00", + "feature_masked_window_count": { + "glycosidic_torsion_circular_variance_mean": 37900, + "heavy_atom_rmsd_mean_A": 0, + "heavy_atom_rmsd_sd_A": 0, + "radius_of_gyration_mean_A": 0, + "sasa_per_residue_mean_nm2": 0, + "terminal_span_per_graph_diameter_residue_mean_A": 37900 + }, + "feature_mean": [ + 6.538244247436523, + 2.458801746368408, + 0.4368153214454651, + 2.327598810195923, + 2.77803111076355, + 0.05833854526281357 + ], + "feature_names": [ + "radius_of_gyration_mean_A", + "heavy_atom_rmsd_mean_A", + "heavy_atom_rmsd_sd_A", + "sasa_per_residue_mean_nm2", + "terminal_span_per_graph_diameter_residue_mean_A", + "glycosidic_torsion_circular_variance_mean" + ], + "feature_sd": [ + 2.8061394691467285, + 1.9638280868530273, + 0.2333844006061554, + 0.39167919754981995, + 0.7365507483482361, + 0.03551682457327843 + ], + "feature_valid_window_count": { + "glycosidic_torsion_circular_variance_mean": 903360, + "heavy_atom_rmsd_mean_A": 941260, + "heavy_atom_rmsd_sd_A": 941260, + "radius_of_gyration_mean_A": 941260, + "sasa_per_residue_mean_nm2": 941260, + "terminal_span_per_graph_diameter_residue_mean_A": 903360 + }, + "feature_variation": { + "glycosidic_torsion_circular_variance_mean": { + "count": 903360, + "max": 0.7984700202941895, + "mean": 0.05757892119862875, + "median": 0.04855697229504585, + "min": 0.0021531886886805296, + "p01": 0.014911737367510796, + "p05": 0.02171348696574569, + "p95": 0.1247011553496122, + "p99": 0.20659121051430734, + "sd": 0.03743299919821925 + }, + "heavy_atom_rmsd_mean_A": { + "count": 941260, + "max": 46.93130874633789, + "mean": 2.5431166433889856, + "median": 1.8856324553489685, + "min": 0.08972097933292389, + "p01": 0.17804580971598624, + "p05": 0.553002268075943, + "p95": 6.823750948905944, + "p99": 9.635042448043837, + "sd": 2.079642694882331 + }, + "heavy_atom_rmsd_sd_A": { + "count": 941260, + "max": 4.035900115966797, + "mean": 0.4448973040068698, + "median": 0.391495019197464, + "min": 0.01613658107817173, + "p01": 0.04669781781733036, + "p05": 0.14702408835291864, + "p95": 0.9286469131708135, + "p99": 1.330615718364716, + "sd": 0.2565288493740602 + }, + "radius_of_gyration_mean_A": { + "count": 941260, + "max": 61.314762115478516, + "mean": 6.683249741541661, + "median": 6.110421419143677, + "min": 1.9730699062347412, + "p01": 2.4099147629737856, + "p05": 3.4440500497817994, + "p95": 11.961954689025877, + "p99": 15.675693082809453, + "sd": 2.871631028553577 + }, + "sasa_per_residue_mean_nm2": { + "count": 941260, + "max": 5.2363200187683105, + "mean": 2.3116708169197393, + "median": 2.2638673782348633, + "min": 1.0152912139892578, + "p01": 1.5423873019218446, + "p05": 1.7784522235393525, + "p95": 3.0137899041175844, + "p99": 3.3653764438629166, + "sd": 0.385772656899625 + }, + "terminal_span_per_graph_diameter_residue_mean_A": { + "count": 903360, + "max": 4.9654541015625, + "mean": 2.779363977961609, + "median": 2.844188690185547, + "min": 0.18828549981117249, + "p01": 0.7382960867881775, + "p05": 1.244422620534897, + "p95": 3.9192586541175842, + "p99": 4.258080506324768, + "sd": 0.7762239167025634 + } + }, + "ledger_row_count": 281600, + "master_ledger_parent_count": 281600, + "md_parent_count": 30088, + "objective_row_count": 1406040, + "official_submitted_artifacts_modified": false, + "output_sha256": { + "review_master_modality_ledger_with_md20x6_v2.tsv.gz": "a71fae6ae7552dfe8d9483a3f7079a74ae82a924b2f9d16da0a34d89c85a917c", + "review_md_model_ready_temporal_20x6_v2.npz": "d5b9419c9259256fbaa9d5e9ab509eff5b23eb7223ad0b1d8e25cad4802bcb4e", + "review_md_parent_temporal_20x6_v2_index.tsv.gz": "e756dc482804e8413f63e3a1f9ee01842c2ad04c53b037341c5fa284d4a69fa6", + "review_md_temporal_20x6_v2_README.md": "24a60515afc59fa1b0f399f8e8bc3001c818da27bdd1f50e057079d7e15b7937", + "review_objective_availability_with_md20x6_v2.tsv.gz": "7e235aa2f8106e55a7b1e801662817f40d8bc88b83fb862c612f13fb5c3d8024" + }, + "parent_aggregation_policy_counts": { + "available_child_embedding_flagged_incomplete": 409, + "equal_mean_of_child_embeddings": 16975, + "single_child_embedding": 12704 + }, + "parent_state_composition": { + "alpha_beta_pair": 16975, + "alpha_only": 250, + "beta_only": 159, + "single": 12704 + }, + "pca_scores_are_model_inputs": false, + "raw_frames_are_independent_training_examples": false, + "retained_maximum_absolute_pairwise_correlation": 0.6808927976493181, + "retained_pairwise_masked_pearson_correlation": [ + [ + 1.0, + 0.6808927976493181, + 0.5914348579977325, + -0.46122456708807985, + 0.09834380221955039, + -0.15911073098747794 + ], + [ + 0.6808927976493182, + 1.0, + 0.40675211940972344, + -0.5436120141423507, + -0.39094466778085724, + -0.13188091080992465 + ], + [ + 0.5914348579977325, + 0.40675211940972344, + 1.0, + -0.293792008494212, + 0.06538965490682203, + 0.15882402351535668 + ], + [ + -0.4612245670880799, + -0.5436120141423507, + -0.29379200849421194, + 1.0, + 0.5047966147790799, + 0.22575432392153436 + ], + [ + 0.09834380221955039, + -0.39094466778085724, + 0.06538965490682203, + 0.5047966147790799, + 0.9999999999999999, + 0.20909787697822727 + ], + [ + -0.15911073098747794, + -0.13188091080992467, + 0.15882402351535668, + 0.22575432392153433, + 0.20909787697822727, + 1.0 + ] + ], + "retained_post_reference_frame_count": 47063000, + "scaler_fit_parent_count": 22914, + "schema": "review_md_parent_temporal_20x6_v2", + "selected_source_indices": [ + 0, + 2, + 3, + 4, + 6, + 7 + ], + "source_sha256": { + "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/configs/review_md_temporal_20x6_v1_20260801.yaml": "2e3b0a72767fa5e7ca950ada7923faac63e58db53f6969a030e01938a81254ad", + "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_freeze20x9/package/review_md_temporal_20x9_feature_layer_freeze_v1.json": "401806ab987f7ff06df0ba617b567a99d5b78560277a8101b0ed69ab886e6e1b", + "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_parent20x9/package/review_a5_objective_availability_with_md20x9_v2.tsv.gz": "bf84a272f4942c65d33cb9cebe363f662a374dfe8ed9c03c8654d2ea223dc624", + "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_parent20x9/package/review_master_modality_ledger_with_md20x9_v2.tsv.gz": "8e93a3746ad94901f5e29b47744037aafa80f86cd5a1a302acd7c5a123763674", + "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_parent20x9/package/review_md_model_ready_temporal_20x9_v1.npz": "ad72f439f7504c64c6524e50547814892aaa08dfa17e21d60af3cbd5b0cdd8b3", + "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_parent20x9/package/review_md_parent_temporal_20x9_v2_index.tsv.gz": "e756dc482804e8413f63e3a1f9ee01842c2ad04c53b037341c5fa284d4a69fa6", + "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_parent20x9/package/review_md_parent_temporal_20x9_v2_summary.json": "e0dd377e59f8ba3047729c797265944d106e6d13b1cefe65271eb3418d2155af", + "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_parent20x9/package/review_md_temporal_20x9_v2_README.md": "00d01e6f91690969822335046673c78ca05c5d9b9d7831907920c6c41d64ff76", + "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_raw20x9/package/review_md_state_temporal_20x9_v2.npz": "3e209da55edb26626fb47e58f894a1c6e935241d249a4b07bf09d1953c14d3c9", + "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_raw20x9/package/review_md_state_temporal_20x9_v2_summary.json": "51bf6920b754f6b1b8e1721b45684e2a3c738bb2f339d6147675ab671d6baef7" + }, + "state_count": 47063, + "state_tensor_shape": [ + 47063, + 20, + 6 + ], + "state_window_count": 941260, + "status": "PASS", + "training_submitted": false, + "updated_objective_counts": { + "md_development": 5074, + "md_train": 22914, + "md_true": 29696 + }, + "valid_scalar_measurement_count": 5571760, + "values_per_child_state": 120 +} diff --git a/releases/2026-10-02/structure_md_processing/extension_checks.json b/releases/2026-10-02/structure_md_processing/extension_checks.json new file mode 100644 index 0000000000000000000000000000000000000000..d67279d2850a1d4e9f588235764db469bfece427 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/extension_checks.json @@ -0,0 +1,18 @@ +{ + "schema": "structure_md_source_extension_checks_v1", + "checked_utc": "2026-09-30T21:39:52.523600+00:00", + "status": "PASS_SOURCE_IDENTITY_AND_SYNTAX_ONLY", + "original_payload_count": 17, + "new_payload_count": 15, + "total_payload_count": 32, + "original_pins_preserved": true, + "python_ast_count": 23, + "bash_syntax_count": 3, + "all_source_destination_hashes_equal": true, + "two_recorded_input_pins_resolved_locally": true, + "remote_input_candidates": 8, + "exact_retrieval_plan_sha256": "8352ee0a9ce493a33ce1b7fb58f48a2d020562161ae86b6b81e804ff05bd422f", + "scientific_code_imported_or_executed": false, + "remote_access_performed": false, + "historical_execution_source_identity_claimed": false +} diff --git a/releases/2026-10-02/structure_md_processing/independent_qa_20260930.json b/releases/2026-10-02/structure_md_processing/independent_qa_20260930.json new file mode 100644 index 0000000000000000000000000000000000000000..c02af1eae76629909be8625049f8a317ce96044f --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/independent_qa_20260930.json @@ -0,0 +1,28 @@ +{ + "schema": "structure_md_processing_independent_qa_v1", + "checked_utc": "2026-09-30T21:42:40.836235+00:00", + "status": "PASS_SOURCE_IDENTITY_AND_PLAN_RECONCILIATION", + "reviewer": "/root/binding_selection/iar_loading_check", + "material_issues": [], + "reviewed_manifest_sha256": "d1a329c932f783db57b727fc1df5f97a0758dfaf3e9399ef43facd44a84e9e19", + "reviewed_prior_checksums_sha256": "deed756f55469a1fedb3c645339597e9eb05a02ee0e6937c72af02ae3bdfb827", + "reviewed_checksum_entries": 36, + "payload_source_byte_identity_checks": 32, + "original_payloads_preserved": 17, + "historical_input_pins_reconciled": 10, + "verified_local_reuses": 2, + "unresolved_exact_remote_candidates": 8, + "exact_retrieval_plan": { + "path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/release_20260928/assembly_20260930/processing_exact_retrieval_plan.json", + "sha256": "8352ee0a9ce493a33ce1b7fb58f48a2d020562161ae86b6b81e804ff05bd422f" + }, + "claim_boundaries_confirmed": [ + "Current local script hashes are not presented as historical execution seals.", + "Pre-correction launchers are identified as historical context.", + "Freeze helper sacct dependency and missing corrected execution context are disclosed.", + "Absolute overlay-summary path binding requires a separate explicit relocation approach." + ], + "scientific_imports_or_execution": false, + "remote_access": false, + "scope": "Independent source/checksum/readiness audit only; no scientific replay certification." +} diff --git a/releases/2026-10-02/structure_md_processing/input_closure_20260930.json b/releases/2026-10-02/structure_md_processing/input_closure_20260930.json new file mode 100644 index 0000000000000000000000000000000000000000..0a96b0926ec1d666f2f0c52a46b1fc30fc4c3d81 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/input_closure_20260930.json @@ -0,0 +1,133 @@ +{ + "schema": "structure_md_final_reducer_input_closure_v1", + "checked_utc": "2026-09-30T21:57:20.899161+00:00", + "status": "PASS_TEN_FINAL_REDUCER_INPUT_IDENTITIES_INTEGRATED", + "scope": "Documentation closure based on verified recovery and data integration records, exact historical-pin/path reconciliation and current file presence/size readback. No descriptor or simulation replay, scientific imports or Nova access.", + "evidence": { + "replay_manifest": { + "path": "../../data/md/replay_inputs/replay_manifest.json", + "sha256": "1ba19dbf997008cb510cd20dbdfafbdda88eefeef8ef86014160e71578ecc536", + "status": "PASS_ALL_TEN_CORRECTED_20X6_SOURCE_INPUT_PINS" + }, + "recovery_receipt": { + "path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/release_20260928/assembly_20260930/dependencies/processing_input_retrieved/recovery_receipt.json", + "sha256": "e99b019f19e59c24e04a569d9802d035f80155826708e98e3c1bbefbd64190c8", + "status": "PASS_REQUIRED_ASSETS", + "job_id": "16684076", + "verified_remote_inputs": 8, + "required_failures": 0 + }, + "final_source_summary": { + "path": "evidence/review_md_parent_temporal_20x6_v2_summary.json", + "sha256": "39c6691d762b1ac2d0bed3464b1ed31e4fbe72b18e218ba4a553f3f94702a9e2" + }, + "earlier_independent_qa": { + "path": "independent_qa_20260930.json", + "sha256": "2e644b90c80388a169da946a22557e0d6d0f37876334fa5d450f27fce41aebe1", + "preserved_unchanged": true, + "interpretation": "Dated audit correctly reported eight unresolved candidates before their later recovery; this closure receipt supplies the current input-availability state." + }, + "earlier_extension_checks": { + "path": "extension_checks.json", + "sha256": "823f089df162283c6ed2077d7c8af1cfc49d1f814e58a029b64c2c18a0a075d8", + "preserved_unchanged": true + } + }, + "counts": { + "historically_pinned_final_reducer_inputs": 10, + "recovered_remote_inputs": 8, + "verified_local_reuses": 2, + "unresolved_final_reducer_input_identities": 0, + "integrated_logical_bytes": 72080894, + "source_payloads_unchanged": 32 + }, + "inputs": [ + { + "remote_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/configs/review_md_temporal_20x6_v1_20260801.yaml", + "packaged_data_path": "md/replay_inputs/configs/review_md_temporal_20x6_v1_20260801.yaml", + "sha256": "2e3b0a72767fa5e7ca950ada7923faac63e58db53f6969a030e01938a81254ad", + "bytes": 2191, + "presence_and_size_readback": true, + "identity_basis": "LOCAL_CONFIGURATION_MATCHES_HISTORICAL_INPUT_PIN" + }, + { + "remote_path": "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_freeze20x9/package/review_md_temporal_20x9_feature_layer_freeze_v1.json", + "packaged_data_path": "md/replay_inputs/corrected_freeze20x9/package/review_md_temporal_20x9_feature_layer_freeze_v1.json", + "sha256": "401806ab987f7ff06df0ba617b567a99d5b78560277a8101b0ed69ab886e6e1b", + "bytes": 8305, + "presence_and_size_readback": true, + "identity_basis": "VERIFIED_RECORDED_PIN" + }, + { + "remote_path": "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_parent20x9/package/review_a5_objective_availability_with_md20x9_v2.tsv.gz", + "packaged_data_path": "md/replay_inputs/corrected_parent20x9/package/review_a5_objective_availability_with_md20x9_v2.tsv.gz", + "sha256": "bf84a272f4942c65d33cb9cebe363f662a374dfe8ed9c03c8654d2ea223dc624", + "bytes": 4686962, + "presence_and_size_readback": true, + "identity_basis": "VERIFIED_RECORDED_PIN" + }, + { + "remote_path": "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_parent20x9/package/review_master_modality_ledger_with_md20x9_v2.tsv.gz", + "packaged_data_path": "md/replay_inputs/corrected_parent20x9/package/review_master_modality_ledger_with_md20x9_v2.tsv.gz", + "sha256": "8e93a3746ad94901f5e29b47744037aafa80f86cd5a1a302acd7c5a123763674", + "bytes": 6097050, + "presence_and_size_readback": true, + "identity_basis": "VERIFIED_RECORDED_PIN" + }, + { + "remote_path": "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_parent20x9/package/review_md_model_ready_temporal_20x9_v1.npz", + "packaged_data_path": "md/replay_inputs/corrected_parent20x9/package/review_md_model_ready_temporal_20x9_v1.npz", + "sha256": "ad72f439f7504c64c6524e50547814892aaa08dfa17e21d60af3cbd5b0cdd8b3", + "bytes": 30646096, + "presence_and_size_readback": true, + "identity_basis": "VERIFIED_RECORDED_PIN" + }, + { + "remote_path": "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_parent20x9/package/review_md_parent_temporal_20x9_v2_index.tsv.gz", + "packaged_data_path": "md/replay_inputs/corrected_parent20x9/package/review_md_parent_temporal_20x9_v2_index.tsv.gz", + "sha256": "e756dc482804e8413f63e3a1f9ee01842c2ad04c53b037341c5fa284d4a69fa6", + "bytes": 619056, + "presence_and_size_readback": true, + "identity_basis": "BYTE_IDENTICAL_LOCAL_REUSE_MATCHES_HISTORICAL_INPUT_PIN" + }, + { + "remote_path": "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_parent20x9/package/review_md_parent_temporal_20x9_v2_summary.json", + "packaged_data_path": "md/replay_inputs/corrected_parent20x9/package/review_md_parent_temporal_20x9_v2_summary.json", + "sha256": "e0dd377e59f8ba3047729c797265944d106e6d13b1cefe65271eb3418d2155af", + "bytes": 4462, + "presence_and_size_readback": true, + "identity_basis": "VERIFIED_RECORDED_PIN" + }, + { + "remote_path": "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_parent20x9/package/review_md_temporal_20x9_v2_README.md", + "packaged_data_path": "md/replay_inputs/corrected_parent20x9/package/review_md_temporal_20x9_v2_README.md", + "sha256": "00d01e6f91690969822335046673c78ca05c5d9b9d7831907920c6c41d64ff76", + "bytes": 2074, + "presence_and_size_readback": true, + "identity_basis": "VERIFIED_RECORDED_PIN" + }, + { + "remote_path": "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_raw20x9/package/review_md_state_temporal_20x9_v2.npz", + "packaged_data_path": "md/replay_inputs/corrected_raw20x9/package/review_md_state_temporal_20x9_v2.npz", + "sha256": "3e209da55edb26626fb47e58f894a1c6e935241d249a4b07bf09d1953c14d3c9", + "bytes": 30006153, + "presence_and_size_readback": true, + "identity_basis": "VERIFIED_RECORDED_PIN" + }, + { + "remote_path": "/work/ratul1/supantha/glycan-SD-VS/review/md_charge_corrected20_features_20260803_r1/corrected_raw20x9/package/review_md_state_temporal_20x9_v2_summary.json", + "packaged_data_path": "md/replay_inputs/corrected_raw20x9/package/review_md_state_temporal_20x9_v2_summary.json", + "sha256": "51bf6920b754f6b1b8e1721b45684e2a3c738bb2f339d6147675ab671d6baef7", + "bytes": 8545, + "presence_and_size_readback": true, + "identity_basis": "VERIFIED_RECORDED_PIN" + } + ], + "validation_boundary": "Historical input digests were reconciled across receipts and manifests. This documentation update did not rehash the large NPZ/table payloads; the prior recovery/integration evidence verifies their bytes. All32 small source/config/evidence payloads were rechecked against their unchanged pins.", + "remaining_limits": [ + "No full simulation, extraction, descriptor reduction, normalization fit or numerical replay was run.", + "Historical execution-byte and environment/force-field closure remains separate from present source/input identity.", + "The original audit still dereferences absolute paths embedded in historical summaries; the new historical-to-packaged mapping is evidence, not an implemented path adapter.", + "Upstream raw trajectories/features, partitions, original launchers and scheduler evidence are not all certified by this ten-file final-reducer input closure." + ] +} diff --git a/releases/2026-10-02/structure_md_processing/prior_snapshot_20260929.json b/releases/2026-10-02/structure_md_processing/prior_snapshot_20260929.json new file mode 100644 index 0000000000000000000000000000000000000000..1b48b6f8185f4d842fd6a3b4c8e5abdd5e881b70 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/prior_snapshot_20260929.json @@ -0,0 +1,247 @@ +{ + "original_manifest_sha256": "70c9fb0a005c1c8e1b7db71d7c5374472e53eabfdb5275156887c59d922944cf", + "original_manifest": { + "schema": "structure_md_processing_sources_snapshot_v1", + "created_utc": "2026-09-30T03:18:02.878140+00:00", + "status": "LOCAL_SOURCE_SNAPSHOT_VERIFIED_NOT_RUNTIME_REPLAY_CERTIFICATION", + "project_root_at_collection": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training", + "source_plan": { + "path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/release_20260928/nova/collection_20260929/structure_md_inventory_plan.json", + "sha256": "d72ace09fb6a94242a1fb09f8511fa67e0051e7b679875b19a4f979f769c2cd2" + }, + "scope": { + "identified_processing_scripts": 6, + "explicit_local_python_companions_including_package_initializer_imports": 8, + "static_configuration_or_receipt_jsons": 3, + "copied_file_count": 17, + "copied_bytes": 1327295, + "payload_layout": "project/ ", + "original_bytes_preserved": true, + "remote_access_performed": false, + "processing_or_training_executed": false, + "canonical_submit_comm_modified": false, + "release_archives_modified": false, + "public_upload_authorized": false + }, + "files": [ + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/prepare_review_md_charge_corrected_feature_overlay_r1.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/prepare_review_md_charge_corrected_feature_overlay_r1.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/prepare_review_md_charge_corrected_feature_overlay_r1.py", + "bytes": 7950, + "sha256": "47c9d9a448325e59742e30a444b636e888df18cf88f010fdad09e0393f5bf9c9", + "mode_octal": "0o644", + "role": "identified_processing_source", + "reason": "Pinned in structure_md_inventory_plan.json associated_source_scripts." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/review_md_all20_charge_corrected_run_state_r6.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/review_md_all20_charge_corrected_run_state_r6.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/review_md_all20_charge_corrected_run_state_r6.py", + "bytes": 90312, + "sha256": "80c1e2cbf2f2bbf7a19564a7e88d65e2d9dd4a190c33e6b5405dd107d6e553fe", + "mode_octal": "0o644", + "role": "identified_processing_source", + "reason": "Pinned in structure_md_inventory_plan.json associated_source_scripts." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/review_md_wiley_pca_corpus.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/review_md_wiley_pca_corpus.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/review_md_wiley_pca_corpus.py", + "bytes": 34251, + "sha256": "dfc5670ad8a146af48abfb381198bacd017ad7dbac4a081bc204d5dbf61cb1cb", + "mode_octal": "0o644", + "role": "identified_processing_source", + "reason": "Pinned in structure_md_inventory_plan.json associated_source_scripts." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/audit_review_md_charge_corrected_exact_roster_20260802_r1.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/audit_review_md_charge_corrected_exact_roster_20260802_r1.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/audit_review_md_charge_corrected_exact_roster_20260802_r1.py", + "bytes": 8986, + "sha256": "ddabd88756774a9c75ae93709fafb6b7c2d3cdf0c9b7d5b66fd801d8e2388c76", + "mode_octal": "0o644", + "role": "identified_processing_source", + "reason": "Pinned in structure_md_inventory_plan.json associated_source_scripts." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/scripts/build_review_a5_static_graph_v2_20260721_r7.py", + "source_project_relative_path": "writing/review/multimodal/scripts/build_review_a5_static_graph_v2_20260721_r7.py", + "staged_relative_path": "project/writing/review/multimodal/scripts/build_review_a5_static_graph_v2_20260721_r7.py", + "bytes": 55927, + "sha256": "12fd869f52759168e0f3ff3243ac7dcdb36c0b067d83e24931c185c67fc80c26", + "mode_octal": "0o644", + "role": "identified_processing_source", + "reason": "Pinned in structure_md_inventory_plan.json associated_source_scripts." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_static_v2_20260721_r7/review_a5_static_graph_materializer_r7.py", + "source_project_relative_path": "writing/review/multimodal/runtime/a5_static_v2_20260721_r7/review_a5_static_graph_materializer_r7.py", + "staged_relative_path": "project/writing/review/multimodal/runtime/a5_static_v2_20260721_r7/review_a5_static_graph_materializer_r7.py", + "bytes": 93845, + "sha256": "da8d6dab478ace650fa5af3e99c72dedaf65a6cbc2bf62373fa2082bef748cea", + "mode_octal": "0o444", + "role": "identified_processing_source", + "reason": "Pinned in structure_md_inventory_plan.json associated_source_scripts." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/review_md_wiley_pca_pilot.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/review_md_wiley_pca_pilot.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/review_md_wiley_pca_pilot.py", + "bytes": 66350, + "sha256": "b9f20eef44858866d95338a6f5dedebf253d8e827890d10806ce7d0045b14594", + "mode_octal": "0o644", + "role": "explicit_local_import_companion", + "reason": "review_md_wiley_pca_corpus.py:25 imports review_md_wiley_pca_pilot after inserting its own directory." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/training/a5_static_alignment.py", + "source_project_relative_path": "training/a5_static_alignment.py", + "staged_relative_path": "project/training/a5_static_alignment.py", + "bytes": 26312, + "sha256": "ee6e3d06fce7316b3622f4ad92d900608eb91af09f3872d0200c1b246158605f", + "mode_octal": "0o644", + "role": "explicit_local_import_companion", + "reason": "review_md_wiley_pca_pilot.py:29 imports training.a5_static_alignment." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/training/a5_glycam_chemistry.py", + "source_project_relative_path": "training/a5_glycam_chemistry.py", + "staged_relative_path": "project/training/a5_glycam_chemistry.py", + "bytes": 3690, + "sha256": "daae9ee3f3c286e36c7fd7ede37f889eca2a6f9956755717a5bf714645ffa4bb", + "mode_octal": "0o644", + "role": "explicit_local_import_companion", + "reason": "training/a5_static_alignment.py:14 imports training.a5_glycam_chemistry." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/training/a5_topology.py", + "source_project_relative_path": "training/a5_topology.py", + "staged_relative_path": "project/training/a5_topology.py", + "bytes": 6186, + "sha256": "f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7", + "mode_octal": "0o644", + "role": "explicit_local_import_companion", + "reason": "training/a5_static_alignment.py:18 imports training.a5_topology." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/training/__init__.py", + "source_project_relative_path": "training/__init__.py", + "staged_relative_path": "project/training/__init__.py", + "bytes": 207, + "sha256": "0d967082a8225a1eab98315c2fe7916eff0e863ec04287a43351b757e08f5070", + "mode_octal": "0o644", + "role": "explicit_local_import_companion", + "reason": "Package initializer executes when training.a5_static_alignment is imported; preserved unchanged." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/training/multimodal_dataset.py", + "source_project_relative_path": "training/multimodal_dataset.py", + "staged_relative_path": "project/training/multimodal_dataset.py", + "bytes": 27321, + "sha256": "ca2be55ece9c15271713f553f619bdd42cf4292c6c9d86e19037db9a73168e28", + "mode_octal": "0o644", + "role": "explicit_local_import_companion", + "reason": "training/__init__.py:2 explicitly imports .multimodal_dataset." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/training/multimodal_masking.py", + "source_project_relative_path": "training/multimodal_masking.py", + "staged_relative_path": "project/training/multimodal_masking.py", + "bytes": 15430, + "sha256": "21ae467f964ea98486ed7efa3f7887194e05c326e4fa92f124e8d5f5570f030c", + "mode_octal": "0o644", + "role": "explicit_local_import_companion", + "reason": "training/__init__.py:3 explicitly imports .multimodal_masking." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/training/masking.py", + "source_project_relative_path": "training/masking.py", + "staged_relative_path": "project/training/masking.py", + "bytes": 18878, + "sha256": "d08683664ffe28661becd6bdfd5b6b8169bd430800c3e844218969548d3498a2", + "mode_octal": "0o644", + "role": "explicit_local_import_companion", + "reason": "training/__init__.py:4 and training/multimodal_masking.py:17 explicitly import .masking." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_r2.json", + "source_project_relative_path": "writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_r2.json", + "staged_relative_path": "project/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_r2.json", + "bytes": 868036, + "sha256": "ffbbe2126eb6131ab8b64ab5809b79b29e5534785cbe6fcfe1bba04b93e06050", + "mode_octal": "0o644", + "role": "explicit_static_runtime_configuration_or_receipt", + "reason": "build_review_a5_static_graph_v2_20260721_r7.py:88-94,214-233,745-747 loads this fixed registry path; payload pin in materializer:56-58." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_receipt_r2.json", + "source_project_relative_path": "writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_receipt_r2.json", + "staged_relative_path": "project/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_receipt_r2.json", + "bytes": 1753, + "sha256": "6bba07e7da9284af46b97f80c25c7e1dc332facf452e0fd2140a975b7c1e496b", + "mode_octal": "0o644", + "role": "explicit_static_runtime_configuration_or_receipt", + "reason": "Builder:99-100,214-233 requires this fixed receipt path and validates its hash." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/p1_a5_static_role_successor_cascade_20260720_r1/review_a5_static_role_successor_cascade_receipt.json", + "source_project_relative_path": "writing/review/multimodal/outputs/p1_a5_static_role_successor_cascade_20260720_r1/review_a5_static_role_successor_cascade_receipt.json", + "staged_relative_path": "project/writing/review/multimodal/outputs/p1_a5_static_role_successor_cascade_20260720_r1/review_a5_static_role_successor_cascade_receipt.json", + "bytes": 1861, + "sha256": "b8e953947b4ac55e1cd9d509c33e1bddf211f046b9124ddc175166a1a763b31a", + "mode_octal": "0o644", + "role": "explicit_static_runtime_configuration_or_receipt", + "reason": "Builder:95-98 requires this bound receipt; pin in materializer:44-46." + } + ], + "unresolved_or_unstaged_dependencies": [ + { + "dependency": "Python and Python packages", + "status": "version_and_environment_lock_not_verified", + "details": "Source imports require numpy, torch, pandas, networkx, parmed; pilot summary/plot branches also import sklearn and matplotlib. Standard-library imports are not separately packaged. No processing code was imported or executed." + }, + { + "dependency": "MD executables and force-field resources", + "status": "remote_runtime_unresolved_not_staged", + "details": "Runner resolves tleap, acpype and gmx; runner lines 759-760 and 773-774 source leaprc.GLYCAM_06j-1 and leaprc.water.tip3p. Their actual remote binaries, force-field files, versions and hashes were not collected here. Embedded .mdp and tleap input generators remain unchanged in the runner." + }, + { + "dependency": "Historical launcher and exact runtime environment", + "status": "not_established_by_this_source_snapshot", + "details": "Exact Slurm launchers, commands, module/Conda environment, worker counts and source-to-completed-output execution linkage are not certified by these local copies." + }, + { + "dependency": "Static child authority and PDB cache", + "status": "data_inputs_not_copied_into_processing_sources", + "details": "Builder defaults to writing/review/multimodal/outputs/p1_a5_static_role_successor_cascade_20260720_r1/review_a5_static_role_successor_child_authority.tsv.gz (expected sha256 efa36988f4420ad36787cdf729e51973a3ba279f8495d293454239c8387937cd). PDB cache default is writing/review/multimodal/inputs/review_a5_static_v2_pdb_cache_20260720_r1; exact member is cache/resolved_remote_pdb_path.lstrip(\"/\"). This staging makes no new whole-cache presence claim." + }, + { + "dependency": "MD manifests and per-state retained inputs", + "status": "referenced_by_inventory_plan_not_copied_here", + "details": "Manifest arguments, input.pdb, corrected/base state directories, trajectories, topology and per-state audit records remain data dependencies. Exact roster roots and final-versus-historical classification are in the linked inventory plan; any remote presence is determined by the separate compute inventory, not this staging." + }, + { + "dependency": "Complete corrected parent20x6 descriptor aggregation and replay chain", + "status": "not_closed_by_identified_source_subset", + "details": "Overlay preparation, simulation runner, corpus extraction and roster audit are included. This bounded source selection does not establish a complete replay chain from all retained MD states to the six corrected package members, nor recover every historical aggregation/packaging launcher." + }, + { + "dependency": "Static registry upstream generation and coordinate generation", + "status": "upstream_provenance_recorded_not_staged", + "details": "Materializer records https://github.com/GLYCAM-Web/gmml2 commit af5958391ea75b2cbc2b7ba21a814d6110fc7147, dat/parameters/GLYCAM_06k.lib, git blob a0ef3ad5c637a25129817d914710be2e07307e58, sha256 b12926723233cdad357480e2ef5b6e481c25c0a27d472406e297722d823610bc. It consumes the staged derived JSON registry; original .lib, registry-generation script and coordinate-generation launcher are not part of this bounded copy." + } + ], + "validation": { + "all_six_plan_source_pins_match": true, + "all_three_static_config_receipt_pins_match": true, + "source_and_destination_bytes_equal_for_all_files": true, + "all_14_python_files_ast_parse": true, + "source_bytes_rechecked_after_copy": true, + "runtime_import_or_execution_test": "NOT_RUN" + } + }, + "original_readme": "# Structure and MD processing source snapshot\n\nThis is a local provenance snapshot of six processing scripts named in the collection inventory plan, their explicit local Python import companions, and three fixed static registry/receipt JSONs. It contains 17 copied files. All source bytes are preserved.\n\n`project/` preserves paths relative to `v3.1_cluster_training`, including `writing/review/` and `training/`. This keeps source-level path calculations intact. The existing `training/__init__.py` imports three additional training modules; these are included only because Python loads that initializer when the PCA pilot imports the alignment parser. No training or processing was run.\n\n`source_manifest.json` maps every original absolute path to its staged path, byte size, SHA-256, source pin where applicable, and inclusion reason. `SHA256SUMS` covers all copied payloads plus this README and the manifest.\n\nValidation establishes byte identity and Python syntax only. This is not a complete replay bundle: it does not establish historical launcher/environment versions or a complete transformation chain to the corrected parent20x6 descriptor package. The manifest lists unstaged data inputs and unresolved remote tools/force-field resources. Coordinate/trajectory retention is assessed separately by the compute inventory. No source tree, canonical submit_comm code, or release archive was edited. Public upload remains on hold.\n", + "original_readme_sha256": "307056057e66fb2e174fc49483e0d165aac708f327eb5b8410f3213424fa14ae", + "original_checksums_sha256": "10081468854c5050c0feca359ada95002516f0f761018c20739529d176157008" +} diff --git a/releases/2026-10-02/structure_md_processing/project/training/__init__.py b/releases/2026-10-02/structure_md_processing/project/training/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..91efb7914161807b867679aa611224f89697a171 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/training/__init__.py @@ -0,0 +1,5 @@ +# Training module +from .multimodal_dataset import MultimodalGlycanDataset, create_multimodal_dataloaders +from .multimodal_masking import MultimodalMaskingStrategy +from .masking import GlycanMaskingStrategy + diff --git a/releases/2026-10-02/structure_md_processing/project/training/a5_glycam_chemistry.py b/releases/2026-10-02/structure_md_processing/project/training/a5_glycam_chemistry.py new file mode 100644 index 0000000000000000000000000000000000000000..d0a6af1c0232de054d4092532ae735ec76a3bd49 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/training/a5_glycam_chemistry.py @@ -0,0 +1,106 @@ +"""Fail-closed GLYCAM residue and derivative chemistry checks for static A5.""" + +from __future__ import annotations + +import re +from dataclasses import dataclass + + +class A5GlycamChemistryError(ValueError): + pass + + +@dataclass(frozen=True) +class GlycamTokenChemistry: + token: str + pre_isomer_modifier: str + isomer: str + residue_name: str + ring: str + residue_modifier: str + configuration: str + expected_pdb_suffix: str + expected_dot_image_stem: str + derivatives: tuple[tuple[str, str], ...] + + +def _split_derivatives(token: str) -> tuple[str, tuple[tuple[str, str], ...]]: + matches = re.findall(r"\[([^\]]+)\]", token) + stripped = re.sub(r"\[[^\]]+\]", "", token) + derivatives: list[tuple[str, str]] = [] + for group in matches: + for item in group.split(","): + match = re.fullmatch(r"([0-9]+)(Ac|Me|S|A)", item) + if not match: + raise A5GlycamChemistryError( + f"unsupported_glycam_derivative:{item}" + ) + position, modifier = match.groups() + code = {"Ac": "ACX", "A": "ACX", "Me": "MEX", "S": "SO3"}[ + modifier + ] + derivatives.append((position, code)) + if len(derivatives) != len(set(derivatives)): + raise A5GlycamChemistryError("duplicate_glycam_derivative") + return stripped, tuple(sorted(derivatives, key=lambda value: (int(value[0]), value[1]))) + + +def parse_glycam_token( + token: str, *, name_to_code: dict[str, str] +) -> GlycamTokenChemistry: + stripped, derivatives = _split_derivatives(token) + pre_isomer_modifier = "" + if stripped.startswith(("LDmanpHep", "DDmanpHep")): + pre_isomer_modifier, stripped = stripped[0], stripped[1:] + match = re.fullmatch(r"([DL]?)(.+?)([pf])(.*)([ab])", stripped) + if not match: + raise A5GlycamChemistryError(f"unsupported_glycam_token:{token}") + isomer, residue_name, ring, residue_modifier, configuration = match.groups() + effective_isomer = isomer or "D" + candidates = ( + residue_name + residue_modifier, + residue_name + ring + residue_modifier + configuration, + effective_isomer + residue_name + ring + residue_modifier + configuration, + effective_isomer + residue_name + ring + residue_modifier, + pre_isomer_modifier + + effective_isomer + + residue_name + + ring + + residue_modifier + + configuration, + ) + residue_code = next( + (name_to_code[candidate] for candidate in candidates if candidate in name_to_code), + "", + ) + if not residue_code: + raise A5GlycamChemistryError(f"no_gmml_residue_code:{token}") + if len(residue_code) == 1: + if effective_isomer == "L": + residue_code = residue_code.lower() + configuration_code = { + ("p", "a"): "A", + ("p", "b"): "B", + ("f", "a"): "D", + ("f", "b"): "U", + }[(ring, configuration)] + expected_suffix = residue_code + configuration_code + else: + if effective_isomer == "L": + residue_code = residue_code[0].lower() + residue_code[1:] + expected_suffix = residue_code + image_stem = ( + pre_isomer_modifier + effective_isomer + residue_name + residue_modifier + ) + return GlycamTokenChemistry( + token=token, + pre_isomer_modifier=pre_isomer_modifier, + isomer=effective_isomer, + residue_name=residue_name, + ring=ring, + residue_modifier=residue_modifier, + configuration=configuration, + expected_pdb_suffix=expected_suffix, + expected_dot_image_stem=image_stem, + derivatives=derivatives, + ) diff --git a/releases/2026-10-02/structure_md_processing/project/training/a5_static_alignment.py b/releases/2026-10-02/structure_md_processing/project/training/a5_static_alignment.py new file mode 100644 index 0000000000000000000000000000000000000000..55686f4f508c9254a907f134b7d7161b502af3bf --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/training/a5_static_alignment.py @@ -0,0 +1,666 @@ +"""Fail-closed WURCS-to-builder residue alignment for A5 static states.""" + +from __future__ import annotations + +import json +import re +from collections import defaultdict +from dataclasses import dataclass +from pathlib import Path +from typing import Hashable + +import networkx as nx + +from training.a5_glycam_chemistry import ( + A5GlycamChemistryError, + parse_glycam_token, +) +from training.a5_topology import node_label + + +ANOMER_RE = re.compile(r"-([0-9]+)([abuxo])(?:_|$)") +LINK_RE = re.compile(r"([A-Za-z]+)([0-9]+)-([A-Za-z]+)([0-9]+)") +DOT_NODE_RE = re.compile(r"\s*(\d+)\s+\[(.*)\]\s*;?$") +DOT_EDGE_RE = re.compile( + r'\s*(\d+)--(\d+)\s+\[label="([^"]*)"' +) +DOT_ATTRIBUTE_RE = re.compile(r'(\w+)=("[^"]*"|[^\s\]]+)') + + +class A5StaticAlignmentError(ValueError): + pass + + +@dataclass +class RootedEdgeTree: + nodes: tuple[Hashable, ...] + root: Hashable + children: dict[Hashable, tuple[tuple[Hashable, str], ...]] + + +@dataclass(frozen=True) +class PDBResidue: + chain: str + resseq: str + insertion_code: str + residue_name: str + + +@dataclass +class PDBConnectivity: + residues: tuple[PDBResidue, ...] + cross_edges: frozenset[tuple[int, int]] + cross_atom_names: dict[tuple[int, int], frozenset[tuple[str, str]]] + + +@dataclass +class BuilderDot: + sugar_tree: RootedEdgeTree + integer_nodes: tuple[int, ...] + integer_edges: frozenset[tuple[int, int]] + node_attributes: dict[int, dict[str, str]] + edge_labels: dict[tuple[int, int], str] + aglycon_nodes: frozenset[int] + + +def split_top_level_sections(text: str) -> list[str]: + sections: list[str] = [] + current: list[str] = [] + depth = 0 + for character in text: + if character == "[": + depth += 1 + elif character == "]" and depth: + depth -= 1 + if character == "/" and depth == 0: + sections.append("".join(current)) + current = [] + else: + current.append(character) + sections.append("".join(current)) + return sections + + +def top_level_bracket_contents(text: str) -> list[str]: + contents: list[str] = [] + depth = 0 + start = -1 + for index, character in enumerate(text): + if character == "[": + if depth == 0: + start = index + 1 + depth += 1 + elif character == "]" and depth: + depth -= 1 + if depth == 0: + contents.append(text[start:index]) + start = -1 + if depth: + raise A5StaticAlignmentError("unclosed_wurcs_residue_definition") + return contents + + +def parse_wurcs_residue_instances(wurcs: str) -> tuple[str, ...]: + prefix = "WURCS=2.0/" + if not wurcs.startswith(prefix): + raise A5StaticAlignmentError("not_wurcs_2_0") + sections = split_top_level_sections(wurcs[len(prefix) :]) + if len(sections) < 4: + raise A5StaticAlignmentError("missing_wurcs_sections") + definitions = top_level_bracket_contents(sections[1]) + try: + definition_indices = [int(value) for value in sections[2].split("-")] + return tuple(definitions[index - 1] for index in definition_indices) + except (ValueError, IndexError) as error: + raise A5StaticAlignmentError("invalid_wurcs_residue_instance_map") from error + + +def parse_wurcs_edge_tree(wurcs: str) -> RootedEdgeTree: + prefix = "WURCS=2.0/" + if not wurcs.startswith(prefix): + raise A5StaticAlignmentError("not_wurcs_2_0") + sections = split_top_level_sections(wurcs[len(prefix) :]) + if len(sections) < 4: + raise A5StaticAlignmentError("missing_wurcs_sections") + + instances = list(parse_wurcs_residue_instances(wurcs)) + nodes = tuple(node_label(index + 1) for index in range(len(instances))) + if not nodes: + raise A5StaticAlignmentError("empty_wurcs_residue_graph") + + anomers: list[tuple[str, str] | None] = [] + for definition in instances: + match = ANOMER_RE.search(definition) + anomers.append((match.group(1), match.group(2)) if match else None) + + children: dict[str, list[tuple[str, str]]] = {node: [] for node in nodes} + child_nodes: set[str] = set() + linkage_section = "/".join(sections[3:]) + for token in linkage_section.split("_") if linkage_section else []: + if not token: + continue + if "*OC" in token: + continue + match = LINK_RE.fullmatch(token) + if not match: + raise A5StaticAlignmentError("unsupported_wurcs_link") + left, left_position, right, right_position = match.groups() + try: + left_index = nodes.index(left) + right_index = nodes.index(right) + except ValueError as error: + raise A5StaticAlignmentError("wurcs_link_node_out_of_range") from error + left_anomer = anomers[left_index] + right_anomer = anomers[right_index] + left_is_donor = left_anomer is not None and left_position == left_anomer[0] + right_is_donor = right_anomer is not None and right_position == right_anomer[0] + if left_is_donor == right_is_donor: + raise A5StaticAlignmentError("cannot_orient_wurcs_link") + if left_is_donor: + child, parent = left, right + donor_position, acceptor_position = left_position, right_position + anomer_symbol = left_anomer[1] + else: + child, parent = right, left + donor_position, acceptor_position = right_position, left_position + anomer_symbol = right_anomer[1] + children[parent].append( + (child, f"{anomer_symbol}{donor_position}-{acceptor_position}") + ) + child_nodes.add(child) + + roots = [node for node in nodes if node not in child_nodes] + if len(roots) != 1: + raise A5StaticAlignmentError("wurcs_graph_does_not_have_one_root") + if sum(len(values) for values in children.values()) != len(nodes) - 1: + raise A5StaticAlignmentError("wurcs_graph_is_not_a_tree") + frozen_children = { + node: tuple(sorted(values, key=lambda item: (item[1], str(item[0])))) + for node, values in children.items() + } + tree = RootedEdgeTree(nodes=nodes, root=roots[0], children=frozen_children) + _assert_connected(tree, "wurcs_graph_is_disconnected") + return tree + + +def parse_builder_dot(dot_text: str) -> BuilderDot: + integer_nodes: dict[int, str] = {} + node_attributes: dict[int, dict[str, str]] = {} + aglycon_nodes: set[int] = set() + integer_edges: set[tuple[int, int]] = set() + edge_labels: dict[tuple[int, int], str] = {} + for line in dot_text.splitlines(): + node_match = DOT_NODE_RE.match(line) + if node_match: + node = int(node_match.group(1)) + attributes = node_match.group(2) + integer_nodes[node] = attributes + node_attributes[node] = { + key: value.strip('"') + for key, value in DOT_ATTRIBUTE_RE.findall(attributes) + } + if node_attributes[node].get("shape") == "box": + aglycon_nodes.add(node) + continue + edge_match = DOT_EDGE_RE.match(line) + if edge_match: + left, right = int(edge_match.group(1)), int(edge_match.group(2)) + edge = tuple(sorted((left, right))) + integer_edges.add(edge) + edge_labels[edge] = edge_match.group(3) + + sugar_nodes = set(integer_nodes) - aglycon_nodes + if not sugar_nodes: + raise A5StaticAlignmentError("builder_dot_has_no_sugar_nodes") + adjacency: dict[int, list[tuple[int, str]]] = { + node: [] for node in integer_nodes + } + for left, right in integer_edges: + label = edge_labels[(left, right)] + adjacency[left].append((right, label)) + adjacency[right].append((left, label)) + sugar_roots = { + neighbor + for aglycon in aglycon_nodes + for neighbor, _ in adjacency[aglycon] + if neighbor in sugar_nodes + } + if len(sugar_roots) != 1: + raise A5StaticAlignmentError("builder_dot_does_not_have_one_sugar_root") + root = next(iter(sugar_roots)) + children: dict[int, list[tuple[int, str]]] = {node: [] for node in sugar_nodes} + seen = {root} + queue = [root] + while queue: + parent = queue.pop(0) + for neighbor, label in adjacency[parent]: + if neighbor in aglycon_nodes or neighbor in seen: + continue + seen.add(neighbor) + children[parent].append((neighbor, label)) + queue.append(neighbor) + if seen != sugar_nodes: + raise A5StaticAlignmentError("builder_dot_sugar_graph_is_disconnected") + if sum(len(values) for values in children.values()) != len(sugar_nodes) - 1: + raise A5StaticAlignmentError("builder_dot_sugar_graph_is_not_a_tree") + frozen_children = { + node: tuple(sorted(values, key=lambda item: (item[1], item[0]))) + for node, values in children.items() + } + return BuilderDot( + sugar_tree=RootedEdgeTree( + nodes=tuple(sorted(sugar_nodes)), + root=root, + children=frozen_children, + ), + integer_nodes=tuple(sorted(integer_nodes)), + integer_edges=frozenset(integer_edges), + node_attributes=node_attributes, + edge_labels=edge_labels, + aglycon_nodes=frozenset(aglycon_nodes), + ) + + +def tree_signature(tree: RootedEdgeTree, node: Hashable | None = None) -> tuple: + current = tree.root if node is None else node + return tuple( + sorted( + (edge_label, tree_signature(tree, child)) + for child, edge_label in tree.children[current] + ) + ) + + +def unique_edge_labeled_mapping( + source: RootedEdgeTree, target: RootedEdgeTree +) -> dict[Hashable, Hashable] | None: + if len(source.nodes) != len(target.nodes): + return None + if tree_signature(source) != tree_signature(target): + return None + mapping: dict[Hashable, Hashable] = {} + + def recurse(source_node: Hashable, target_node: Hashable) -> bool: + mapping[source_node] = target_node + source_groups: dict[tuple, list[Hashable]] = defaultdict(list) + target_groups: dict[tuple, list[Hashable]] = defaultdict(list) + for child, edge_label in source.children[source_node]: + source_groups[(edge_label, tree_signature(source, child))].append(child) + for child, edge_label in target.children[target_node]: + target_groups[(edge_label, tree_signature(target, child))].append(child) + if set(source_groups) != set(target_groups): + return False + for key, source_children in source_groups.items(): + target_children = target_groups[key] + if len(source_children) != len(target_children) or len(source_children) != 1: + return False + if not recurse(source_children[0], target_children[0]): + return False + return True + + return mapping if recurse(source.root, target.root) else None + + +def parse_pdb_connectivity(pdb_text: str) -> PDBConnectivity: + residues: list[PDBResidue] = [] + residue_to_index: dict[PDBResidue, int] = {} + atom_to_residue: dict[int, int] = {} + atom_names: dict[int, str] = {} + conect: list[tuple[int, int]] = [] + for line in pdb_text.splitlines(): + if line.startswith(("ATOM ", "HETATM")): + try: + serial = int(line[6:11]) + except ValueError: + continue + residue = PDBResidue( + chain=line[21:22].strip(), + resseq=line[22:26].strip(), + insertion_code=line[26:27].strip(), + residue_name=line[17:20].strip(), + ) + if residue not in residue_to_index: + residue_to_index[residue] = len(residues) + residues.append(residue) + atom_to_residue[serial] = residue_to_index[residue] + atom_names[serial] = line[12:16].strip() + elif line.startswith("CONECT"): + serials = [] + for start in range(6, len(line), 5): + field = line[start : start + 5].strip() + if field: + try: + serials.append(int(field)) + except ValueError: + pass + if serials: + conect.extend((serials[0], target) for target in serials[1:]) + + cross_edges: set[tuple[int, int]] = set() + cross_atoms: dict[tuple[int, int], set[tuple[str, str]]] = defaultdict(set) + for source, target in conect: + if source not in atom_to_residue or target not in atom_to_residue: + continue + source_residue = atom_to_residue[source] + target_residue = atom_to_residue[target] + if source_residue == target_residue: + continue + edge = tuple(sorted((source_residue, target_residue))) + cross_edges.add(edge) + if source_residue <= target_residue: + names = (atom_names[source], atom_names[target]) + else: + names = (atom_names[target], atom_names[source]) + cross_atoms[edge].add(names) + return PDBConnectivity( + residues=tuple(residues), + cross_edges=frozenset(cross_edges), + cross_atom_names={ + edge: frozenset(names) for edge, names in cross_atoms.items() + }, + ) + + +def bind_builder_nodes_to_pdb( + builder: BuilderDot, pdb: PDBConnectivity +) -> dict[int, PDBResidue]: + if not pdb.cross_edges: + raise A5StaticAlignmentError("pdb_has_no_conect_provenance") + if not pdb.residues: + raise A5StaticAlignmentError("pdb_has_no_residues") + + glycosidic_edges: list[tuple[int, int, str]] = [] + for edge, atom_pairs in pdb.cross_atom_names.items(): + lower, upper = edge + candidates: set[tuple[int, int, str]] = set() + for lower_atom, upper_atom in atom_pairs: + lower_carbon = re.fullmatch(r"C([0-9]+)", lower_atom) + upper_carbon = re.fullmatch(r"C([0-9]+)", upper_atom) + lower_oxygen = re.fullmatch(r"O([0-9]+)", lower_atom) + upper_oxygen = re.fullmatch(r"O([0-9]+)", upper_atom) + if lower_carbon and upper_oxygen: + candidates.add( + (lower, upper, f"{lower_carbon.group(1)}-{upper_oxygen.group(1)}") + ) + if upper_carbon and lower_oxygen: + candidates.add( + (upper, lower, f"{upper_carbon.group(1)}-{lower_oxygen.group(1)}") + ) + if len(candidates) > 1: + raise A5StaticAlignmentError("pdb_cross_residue_bond_is_ambiguous") + glycosidic_edges.extend(candidates) + + root_candidates = [ + child for child, parent, _ in glycosidic_edges if parent == 0 + ] + if len(root_candidates) != 1: + raise A5StaticAlignmentError("pdb_does_not_have_one_sugar_root") + root = root_candidates[0] + children: dict[int, list[tuple[int, str]]] = defaultdict(list) + for child, parent, label in glycosidic_edges: + if parent != 0: + children[parent].append((child, label)) + seen = {root} + queue = [root] + while queue: + parent = queue.pop(0) + for child, _ in children[parent]: + if child in seen: + raise A5StaticAlignmentError("pdb_glycosidic_graph_has_a_cycle") + seen.add(child) + queue.append(child) + if len(seen) != len(builder.sugar_tree.nodes): + raise A5StaticAlignmentError("pdb_and_builder_sugar_residue_counts_differ") + pdb_tree = RootedEdgeTree( + nodes=tuple(sorted(seen)), + root=root, + children={ + node: tuple(sorted(children[node], key=lambda item: (item[1], item[0]))) + for node in seen + }, + ) + builder_without_anomer = RootedEdgeTree( + nodes=builder.sugar_tree.nodes, + root=builder.sugar_tree.root, + children={ + node: tuple( + (child, re.sub(r"^[abuxo]", "", label)) + for child, label in values + ) + for node, values in builder.sugar_tree.children.items() + }, + ) + mapping = unique_edge_labeled_mapping(builder_without_anomer, pdb_tree) + if mapping is None: + raise A5StaticAlignmentError( + "pdb_glycosidic_graph_differs_or_maps_ambiguously_to_builder_dot" + ) + return { + int(builder_node): pdb.residues[int(pdb_node)] + for builder_node, pdb_node in mapping.items() + } + + +def certify_static_state_mapping( + *, wurcs: str, dot_path: Path, pdb_path: Path +) -> tuple[str, str, dict[str, dict[str, str | int]]]: + if not dot_path.is_file(): + return "missing_builder_dot", "builder DOT provenance is absent", {} + if not pdb_path.is_file(): + return "missing_builder_pdb", "builder PDB is absent", {} + try: + wurcs_tree = parse_wurcs_edge_tree(wurcs) + except A5StaticAlignmentError as error: + return "wurcs_parse_failure", str(error), {} + try: + builder = parse_builder_dot(dot_path.read_text(encoding="utf-8")) + except A5StaticAlignmentError as error: + return "builder_dot_parse_failure", str(error), {} + if len(wurcs_tree.nodes) != len(builder.sugar_tree.nodes): + return "residue_count_mismatch", "WURCS and builder residue counts differ", {} + if tree_signature(wurcs_tree) != tree_signature(builder.sugar_tree): + return ( + "topology_or_linkage_mismatch", + "WURCS and builder rooted edge-labelled trees differ", + {}, + ) + mapping = unique_edge_labeled_mapping(wurcs_tree, builder.sugar_tree) + if mapping is None: + return ( + "ambiguous_edge_labeled_mapping", + "more than one residue mapping satisfies the rooted edge-labelled trees", + {}, + ) + try: + pdb = parse_pdb_connectivity(pdb_path.read_text(encoding="utf-8")) + builder_to_pdb = bind_builder_nodes_to_pdb(builder, pdb) + except A5StaticAlignmentError as error: + return "pdb_provenance_failure", str(error), {} + result = {} + for wurcs_node, builder_node in mapping.items(): + residue = builder_to_pdb[int(builder_node)] + pdb_order_index = pdb.residues.index(residue) + result[str(wurcs_node)] = { + "builder_dot_node": int(builder_node), + "pdb_residue_order_index": pdb_order_index, + "pdb_chain": residue.chain, + "pdb_resseq": residue.resseq, + "pdb_insertion_code": residue.insertion_code, + "pdb_residue_name": residue.residue_name, + } + return "certified_unique_residue_mapping", "", result + + +def certify_static_state_chemistry_mapping( + *, + wurcs: str, + glycam_instance_tokens: tuple[str, ...] | list[str], + gmml_name_to_code: dict[str, str], + derivative_connection_atom: dict[str, str], + dot_path: Path, + pdb_path: Path, +) -> tuple[str, str, dict[str, dict[str, object]]]: + """Certify residue chemistry on top of the submitted-style topology map.""" + + status, reason, mapping = certify_static_state_mapping( + wurcs=wurcs, dot_path=dot_path, pdb_path=pdb_path + ) + if status != "certified_unique_residue_mapping": + return status, reason, {} + try: + instances = parse_wurcs_residue_instances(wurcs) + if len(instances) != len(glycam_instance_tokens): + raise A5StaticAlignmentError("glycam_token_count_mismatch") + builder = parse_builder_dot(dot_path.read_text(encoding="utf-8")) + pdb = parse_pdb_connectivity(pdb_path.read_text(encoding="utf-8")) + sugar_pdb_indices = { + int(value["pdb_residue_order_index"]) for value in mapping.values() + } + if len(sugar_pdb_indices) != len(mapping): + raise A5StaticAlignmentError("certified_mapping_reuses_a_pdb_residue") + + root_node = str(builder.sugar_tree.root) + wurcs_root = next( + node for node, value in mapping.items() if str(value["builder_dot_node"]) == root_node + ) + root_index = next( + index + for index in range(len(instances)) + if node_label(index + 1) == wurcs_root + ) + root_definition = instances[root_index] + root_anomer = ANOMER_RE.search(root_definition) + if root_anomer is None or root_anomer.group(2) not in {"a", "b"}: + raise A5StaticAlignmentError("unsupported_root_anomericity") + root_edges = [ + edge + for edge in builder.integer_edges + if builder.sugar_tree.root in edge + and any(node in builder.aglycon_nodes for node in edge) + ] + if len(root_edges) != 1: + raise A5StaticAlignmentError("builder_dot_does_not_have_one_root_edge") + expected_root_label = f"{root_anomer.group(2)}{root_anomer.group(1)}-" + if builder.edge_labels[root_edges[0]] != expected_root_label: + raise A5StaticAlignmentError("root_anomer_or_position_mismatch") + + result: dict[str, dict[str, object]] = {} + for index, (definition, token) in enumerate( + zip(instances, glycam_instance_tokens), start=1 + ): + node = node_label(index) + if node not in mapping: + raise A5StaticAlignmentError("wurcs_node_missing_from_mapping") + anomer = ANOMER_RE.search(definition) + if anomer is None or anomer.group(2) not in {"a", "b"}: + raise A5StaticAlignmentError("unsupported_residue_anomericity") + try: + chemistry = parse_glycam_token( + token, name_to_code=gmml_name_to_code + ) + except A5GlycamChemistryError as error: + raise A5StaticAlignmentError(str(error)) from error + if chemistry.configuration != anomer.group(2): + raise A5StaticAlignmentError("glycam_token_anomer_mismatch") + + mapped = mapping[node] + pdb_index = int(mapped["pdb_residue_order_index"]) + observed_residue = pdb.residues[pdb_index] + if not observed_residue.residue_name.endswith( + chemistry.expected_pdb_suffix + ): + raise A5StaticAlignmentError("pdb_residue_chemistry_mismatch") + + builder_node = int(mapped["builder_dot_node"]) + image = builder.node_attributes[builder_node].get("image", "") + image_status = "not_available" + if image: + image_status = "matched" + if Path(image).stem != chemistry.expected_dot_image_stem: + raise A5StaticAlignmentError("builder_dot_residue_image_mismatch") + + actual_derivatives: set[tuple[str, str]] = set() + for edge, atom_pairs in pdb.cross_atom_names.items(): + if pdb_index not in edge: + continue + other = edge[1] if edge[0] == pdb_index else edge[0] + if other in sugar_pdb_indices or other == 0: + continue + derivative_code = pdb.residues[other].residue_name + connection_atom = derivative_connection_atom.get(derivative_code) + if not connection_atom: + raise A5StaticAlignmentError( + "unknown_cross_residue_derivative" + ) + matched_positions: set[str] = set() + for lower_atom, upper_atom in atom_pairs: + sugar_atom, derivative_atom = ( + (lower_atom, upper_atom) + if edge[0] == pdb_index + else (upper_atom, lower_atom) + ) + oxygen = re.fullmatch(r"O([0-9]+)", sugar_atom) + if oxygen and derivative_atom == connection_atom: + matched_positions.add(oxygen.group(1)) + if len(matched_positions) != 1: + raise A5StaticAlignmentError( + "derivative_connection_is_missing_or_ambiguous" + ) + actual_derivatives.add( + (next(iter(matched_positions)), derivative_code) + ) + if actual_derivatives != set(chemistry.derivatives): + raise A5StaticAlignmentError("positioned_derivative_mismatch") + + result[node] = { + **mapped, + "glycam_token": token, + "expected_pdb_suffix": chemistry.expected_pdb_suffix, + "builder_dot_image_status": image_status, + "positioned_derivatives": [ + list(value) for value in chemistry.derivatives + ], + } + return "certified_residue_chemistry_mapping", "", result + except (A5StaticAlignmentError, StopIteration) as error: + return "chemistry_certification_failure", str(error), {} + + +def validate_graphml_residue_mapping( + path: Path, mapping: dict[str, dict[str, str | int]] | str +) -> tuple[int, int, int]: + """Verify that every certified PDB residue survives GraphML conversion.""" + graph = nx.read_graphml(path) + if not graph.nodes: + raise A5StaticAlignmentError("materialized_graphml_contains_no_atoms") + observed = { + (str(attributes.get("resseq", "")), str(attributes.get("resname", ""))) + for _, attributes in graph.nodes(data=True) + } + if isinstance(mapping, str): + mapping = json.loads(mapping) + expected = { + (str(value["pdb_resseq"]), str(value["pdb_residue_name"])) + for value in mapping.values() + } + if len(expected) != len(mapping): + raise A5StaticAlignmentError("certified_mapping_reuses_a_pdb_residue") + missing = expected - observed + if missing: + raise A5StaticAlignmentError( + f"certified_pdb_residues_absent_from_graphml:{sorted(missing)}" + ) + return graph.number_of_nodes(), graph.number_of_edges(), len(expected) + + +def _assert_connected(tree: RootedEdgeTree, reason: str) -> None: + seen = {tree.root} + queue = [tree.root] + while queue: + node = queue.pop(0) + for child, _ in tree.children[node]: + if child not in seen: + seen.add(child) + queue.append(child) + if seen != set(tree.nodes): + raise A5StaticAlignmentError(reason) diff --git a/releases/2026-10-02/structure_md_processing/project/training/a5_topology.py b/releases/2026-10-02/structure_md_processing/project/training/a5_topology.py new file mode 100644 index 0000000000000000000000000000000000000000..03a3fe5a3680355dd47dfbda69e58efb565ece06 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/training/a5_topology.py @@ -0,0 +1,180 @@ +"""Residue-level shortest-path targets used by the A5 topology objective.""" + +from __future__ import annotations + +import hashlib +import json +import re +from collections import deque + + +EDGE_RE = re.compile( + r"(?P [A-Za-z]+)(?P [0-9?]+)-(?P [A-Za-z]+)(?P [0-9?]+)" +) +RESDEF_RE = re.compile(r"\[([^\]]*)\]") +WURCS_RES_INDEX_ALPHABET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + + +def node_label(index: int) -> str: + if index < 1: + raise ValueError("WURCS residue indices are one-based") + letters = WURCS_RES_INDEX_ALPHABET + base = len(letters) + index -= 1 + label = "" + while True: + label = letters[index % base] + label + index = index // base - 1 + if index < 0: + return label + + +def node_index(label: str) -> int: + if not label: + raise ValueError("WURCS residue label cannot be empty") + base = len(WURCS_RES_INDEX_ALPHABET) + value = 0 + for character in label: + try: + digit = WURCS_RES_INDEX_ALPHABET.index(character) + 1 + except ValueError as error: + raise ValueError(f"Invalid WURCS residue label: {label}") from error + value = value * base + digit + return value + + +def split_wurcs_sections(body: str) -> list[str]: + sections: list[str] = [] + current: list[str] = [] + bracket_depth = 0 + for character in body: + if character == "[": + bracket_depth += 1 + elif character == "]" and bracket_depth: + bracket_depth -= 1 + if character == "/" and bracket_depth == 0: + sections.append("".join(current)) + current = [] + else: + current.append(character) + sections.append("".join(current)) + return sections + + +def split_wurcs(wurcs: str) -> tuple[list[str], dict[str, str], str]: + if not wurcs.startswith("WURCS=2.0/"): + return [], {}, "" + parts = split_wurcs_sections(wurcs[len("WURCS=2.0/") :]) + if len(parts) < 4: + return [], {}, "" + residue_definitions = RESDEF_RE.findall(parts[1]) + sequence = parts[2].split("-") if parts[2] else [] + node_to_residue: dict[str, str] = {} + for index, value in enumerate(sequence, start=1): + try: + residue = residue_definitions[int(value) - 1] + except (ValueError, IndexError): + residue = "" + node_to_residue[node_label(index)] = residue + return residue_definitions, node_to_residue, "/".join(parts[3:]) + + +def _hash_fields(*values: object) -> str: + payload = "\x1f".join(str(value) for value in values).encode("utf-8") + return hashlib.sha256(payload).hexdigest() + + +def build_residue_shortest_path(wurcs: str) -> dict[str, object]: + """Build the same immutable residue target frozen by the P0/P1 audit.""" + _, node_to_residue, linkage_section = split_wurcs(wurcs) + node_ids = list(node_to_residue) + if not node_ids or any(not node_to_residue[node] for node in node_ids): + return _failure("missing_or_unmapped_residue_sequence", len(node_ids), 0) + if len(node_ids) < 2: + return _failure( + "fewer_than_two_residues_no_off_diagonal_target", len(node_ids), 0 + ) + + adjacency: dict[str, set[str]] = {node: set() for node in node_ids} + parsed_edges: list[tuple[str, str]] = [] + unparsed_tokens: list[str] = [] + for token in linkage_section.split("_") if linkage_section else []: + match = EDGE_RE.fullmatch(token) + if not match: + if token: + unparsed_tokens.append(token) + continue + left, right = match.group("n1"), match.group("n2") + if left not in adjacency or right not in adjacency or left == right: + unparsed_tokens.append(token) + continue + parsed_edges.append(tuple(sorted((left, right)))) + adjacency[left].add(right) + adjacency[right].add(left) + + reason = "" + if unparsed_tokens: + reason = "one_or_more_edge_tokens_not_unambiguous_residue_pairs" + elif len(set(parsed_edges)) != len(parsed_edges): + reason = "duplicate_residue_edge" + elif len(parsed_edges) != len(node_ids) - 1: + reason = "edge_count_not_residue_count_minus_one" + + seen = {node_ids[0]} + queue = deque([node_ids[0]]) + while queue: + node = queue.popleft() + for neighbor in sorted(adjacency[node]): + if neighbor not in seen: + seen.add(neighbor) + queue.append(neighbor) + if not reason and len(seen) != len(node_ids): + reason = "residue_graph_disconnected" + if reason: + return _failure(reason, len(node_ids), len(parsed_edges)) + + matrix: list[list[int]] = [] + for source in node_ids: + distance = {source: 0} + queue = deque([source]) + while queue: + node = queue.popleft() + for neighbor in sorted(adjacency[node]): + if neighbor not in distance: + distance[neighbor] = distance[node] + 1 + queue.append(neighbor) + matrix.append([distance[target] for target in node_ids]) + + matrix_payload = json.dumps(matrix, separators=(",", ":")) + matrix_sha256 = hashlib.sha256(matrix_payload.encode("utf-8")).hexdigest() + return { + "target_valid": True, + "failure_reason": "", + "residue_count": len(node_ids), + "parsed_edge_count": len(parsed_edges), + "valid_unordered_pair_count": len(node_ids) * (len(node_ids) - 1) // 2, + "matrix": matrix, + "matrix_sha256": matrix_sha256, + "target_identity_sha256": _hash_fields( + "residue_shortest_path_v2", + wurcs, + matrix_sha256, + len(node_ids), + len(parsed_edges), + ), + "schema": "residue_shortest_path_v2", + } + + +def _failure(reason: str, residues: int, edges: int) -> dict[str, object]: + return { + "target_valid": False, + "failure_reason": reason, + "residue_count": residues, + "parsed_edge_count": edges, + "valid_unordered_pair_count": 0, + "matrix": [], + "matrix_sha256": "", + "target_identity_sha256": "", + "schema": "residue_shortest_path_v2", + } diff --git a/releases/2026-10-02/structure_md_processing/project/training/masking.py b/releases/2026-10-02/structure_md_processing/project/training/masking.py new file mode 100644 index 0000000000000000000000000000000000000000..be0efccad8829e55b2073a0ccf5a7dcfd1191847 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/training/masking.py @@ -0,0 +1,452 @@ +""" +ESM2-Style Masking Strategy for Glycan BERT + +Implements masked language modeling following the ESM2 approach: +- Mask 15% of tokens randomly +- 80% replaced with [MASK] +- 10% replaced with random token +- 10% unchanged (for robustness) +""" + +import torch +import random +from typing import List, Tuple, Optional + + +class GlycanMaskingStrategy: + """ + Masking strategy for glycan sequences following ESM2. + """ + + def __init__( + self, + vocab_size: int, + mask_token_id: int, + pad_token_id: int, + special_token_ids: List[int], + ambiguous_token_ids: List[int] = None, + mask_prob: float = 0.15, + mask_token_prob: float = 0.8, + random_token_prob: float = 0.1, + unchanged_prob: float = 0.1, + valid_token_ids: Optional[List[int]] = None, + seed: int = None + ): + """ + Initialize masking strategy. + + Args: + vocab_size: Size of vocabulary + mask_token_id: ID of [MASK] token + pad_token_id: ID of [PAD] token + special_token_ids: List of special token IDs to never mask + ambiguous_token_ids: List of ambiguous token IDs to never mask (x, X, ?, u, d, o) + mask_prob: Probability of masking a token (default: 0.15) + mask_token_prob: Probability of replacing with [MASK] (default: 0.8) + random_token_prob: Probability of replacing with random token (default: 0.1) + unchanged_prob: Probability of leaving unchanged (default: 0.1) + valid_token_ids: Optional explicit pool for random replacement + seed: Random seed for reproducibility + """ + assert abs(mask_token_prob + random_token_prob + unchanged_prob - 1.0) < 1e-6, \ + "Masking probabilities must sum to 1.0" + + self.vocab_size = vocab_size + self.mask_token_id = mask_token_id + self.pad_token_id = pad_token_id + self.special_token_ids = set(special_token_ids) + self.ambiguous_token_ids = set(ambiguous_token_ids) if ambiguous_token_ids else set() + excluded = self.special_token_ids | self.ambiguous_token_ids | {pad_token_id, mask_token_id} + if valid_token_ids is None: + self.valid_token_ids = [idx for idx in range(vocab_size) if idx not in excluded] + else: + self.valid_token_ids = sorted({int(idx) for idx in valid_token_ids if int(idx) not in excluded}) + if not self.valid_token_ids: + raise ValueError("valid_token_ids cannot be empty after excluding special/ambiguous tokens") + + self.mask_prob = mask_prob + self.mask_token_prob = mask_token_prob + self.random_token_prob = random_token_prob + self.unchanged_prob = unchanged_prob + + if seed is not None: + random.seed(seed) + torch.manual_seed(seed) + + def mask_sequence( + self, + input_ids: torch.Tensor + ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]: + """ + Apply masking to a batch of sequences. + + Args: + input_ids: Tensor of shape (batch_size, seq_len) with token IDs + + Returns: + Tuple of: + - masked_input_ids: Input with masks applied + - labels: Original token IDs for masked positions (-100 for unmasked) + - mask_positions: Boolean tensor indicating masked positions + """ + batch_size, seq_len = input_ids.shape + + # Create labels (-100 for positions we don't predict) + labels = torch.full_like(input_ids, -100) + + # Create mask for maskable positions + maskable = torch.ones_like(input_ids, dtype=torch.bool) + + # Don't mask padding or special tokens + maskable &= (input_ids != self.pad_token_id) + for special_id in self.special_token_ids: + maskable &= (input_ids != special_id) + + # Don't mask ambiguous tokens (we don't know ground truth) + for ambig_id in self.ambiguous_token_ids: + maskable &= (input_ids != ambig_id) + + # Randomly select mask_prob of maskable tokens + mask_positions = torch.zeros_like(input_ids, dtype=torch.bool) + for i in range(batch_size): + maskable_indices = maskable[i].nonzero(as_tuple=True)[0] + if len(maskable_indices) == 0: + continue + + n_to_mask = max(1, int(len(maskable_indices) * self.mask_prob)) + mask_indices = maskable_indices[torch.randperm(len(maskable_indices))[:n_to_mask]] + mask_positions[i, mask_indices] = True + + # Store original tokens for masked positions + labels[mask_positions] = input_ids[mask_positions] + + # Create masked input + masked_input_ids = input_ids.clone() + + # For each masked position, decide what to do + masked_indices = mask_positions.nonzero(as_tuple=True) + for batch_idx, pos_idx in zip(*masked_indices): + rand_val = random.random() + + if rand_val < self.mask_token_prob: + # Replace with [MASK] + masked_input_ids[batch_idx, pos_idx] = self.mask_token_id + elif rand_val < self.mask_token_prob + self.random_token_prob: + # Replace with a valid non-special token from the configured pool. + masked_input_ids[batch_idx, pos_idx] = random.choice(self.valid_token_ids) + # else: leave unchanged (unchanged_prob) + + return masked_input_ids, labels, mask_positions + + def get_mask_statistics( + self, + input_ids: torch.Tensor, + masked_input_ids: torch.Tensor, + mask_positions: torch.Tensor + ) -> dict: + """ + Calculate statistics about masking for logging. + + Args: + input_ids: Original input IDs + masked_input_ids: Masked input IDs + mask_positions: Boolean mask indicating masked positions + + Returns: + Dictionary with masking statistics + """ + total_tokens = (input_ids != self.pad_token_id).sum().item() + masked_tokens = mask_positions.sum().item() + + # Count each masking type + mask_token_count = (masked_input_ids[mask_positions] == self.mask_token_id).sum().item() + random_token_count = ((masked_input_ids[mask_positions] != self.mask_token_id) & + (masked_input_ids[mask_positions] != input_ids[mask_positions])).sum().item() + unchanged_count = masked_tokens - mask_token_count - random_token_count + + # Count ambiguous tokens in batch + ambiguous_tokens = 0 + for ambig_id in self.ambiguous_token_ids: + ambiguous_tokens += (input_ids == ambig_id).sum().item() + + stats = { + 'total_tokens': total_tokens, + 'masked_tokens': masked_tokens, + 'mask_percentage': masked_tokens / total_tokens * 100 if total_tokens > 0 else 0, + 'mask_token_count': mask_token_count, + 'random_token_count': random_token_count, + 'unchanged_count': unchanged_count, + 'ambiguous_tokens': ambiguous_tokens, + 'ambiguous_percentage': ambiguous_tokens / total_tokens * 100 if total_tokens > 0 else 0 + } + + return stats + + +class MonosaccharideMaskingStrategy: + """ + Monosaccharide-level masking strategy for Glycan BERT. + + Instead of masking individual tokens, this masks entire monosaccharides + and optionally predicts the monosaccharide type (Glc, Gal, etc.). + + This forces the model to learn holistic monosaccharide semantics rather + than just local token patterns. + """ + + # Common monosaccharide types + MONO_TYPES = [ + ' ', 'Glc', 'Gal', 'Man', 'Fuc', 'Xyl', 'Rha', 'Ara', + 'GlcNAc', 'GalNAc', 'ManNAc', 'GlcA', 'GalA', 'IdoA', + 'Neu5Ac', 'Neu5Gc', 'Kdn', 'GlcN', 'GalN', 'Hex', 'HexNAc', + 'dHex', 'Pent', 'Sia', 'GlcS', 'GalS', 'Ido', 'All', 'Alt', 'Gul', 'Tal' + ] + + def __init__( + self, + vocab_size: int, + mask_token_id: int, + pad_token_id: int, + special_token_ids: List[int], + mask_prob: float = 0.15, # Probability to mask a residue + predict_mono_type: bool = True, # If True, predict mono type; if False, predict tokens + seed: int = None + ): + """ + Initialize monosaccharide masking strategy. + + Args: + vocab_size: Size of vocabulary + mask_token_id: ID of [MASK] token + pad_token_id: ID of [PAD] token + special_token_ids: List of special token IDs to never mask + mask_prob: Probability of masking a residue (default: 0.15) + predict_mono_type: If True, labels are mono type IDs; if False, labels are token IDs + seed: Random seed + """ + self.vocab_size = vocab_size + self.mask_token_id = mask_token_id + self.pad_token_id = pad_token_id + self.special_token_ids = set(special_token_ids) + self.mask_prob = mask_prob + self.predict_mono_type = predict_mono_type + + # Build mono type vocabulary + self.mono_to_id = {m: i for i, m in enumerate(self.MONO_TYPES)} + self.id_to_mono = {i: m for i, m in enumerate(self.MONO_TYPES)} + self.num_mono_types = len(self.MONO_TYPES) + + if seed is not None: + random.seed(seed) + torch.manual_seed(seed) + + def mask_sequence( + self, + input_ids: torch.Tensor, + residue_ids: torch.Tensor, + monosaccharide_names: List[List[str]] = None + ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]: + """ + Apply monosaccharide-level masking. + + Args: + input_ids: (batch, seq_len) token IDs + residue_ids: (batch, seq_len) residue ID for each token (-1=special, -2=linkage, >=0=residue) + monosaccharide_names: List of lists of monosaccharide names per batch item + + Returns: + Tuple of: + - masked_input_ids: Input with entire residue tokens masked + - token_labels: Original token IDs for masked positions (-100 for unmasked) + - mono_labels: Monosaccharide type IDs for masked residues (-100 for unmasked) + - mask_positions: Boolean tensor indicating masked token positions + """ + batch_size, seq_len = input_ids.shape + + # Initialize outputs + masked_input_ids = input_ids.clone() + token_labels = torch.full_like(input_ids, -100) + mono_labels = torch.full((batch_size,), -100, dtype=torch.long, device=input_ids.device) + mask_positions = torch.zeros_like(input_ids, dtype=torch.bool) + + for b in range(batch_size): + # Find unique residues (>=0 are real residues) + unique_residues = torch.unique(residue_ids[b]) + real_residues = unique_residues[unique_residues >= 0].tolist() + + if len(real_residues) == 0: + continue + + # Select residues to mask + n_to_mask = max(1, int(len(real_residues) * self.mask_prob)) + random.shuffle(real_residues) + residues_to_mask = real_residues[:n_to_mask] + + for rid in residues_to_mask: + # Find all tokens belonging to this residue + token_mask = residue_ids[b] == rid + + # Store original tokens as labels + token_labels[b, token_mask] = input_ids[b, token_mask] + + # Mask all tokens in this residue + masked_input_ids[b, token_mask] = self.mask_token_id + mask_positions[b, token_mask] = True + + # Get monosaccharide type label + if self.predict_mono_type and monosaccharide_names is not None: + if rid < len(monosaccharide_names[b]): + mono_name = monosaccharide_names[b][rid] + mono_labels[b] = self.mono_to_id.get(mono_name, 0) # 0 = + + return masked_input_ids, token_labels, mono_labels, mask_positions + + def get_mono_type_id(self, mono_name: str) -> int: + """Convert monosaccharide name to ID.""" + return self.mono_to_id.get(mono_name, 0) + + +class HierarchicalMaskingStrategy: + """ + Hierarchical masking combining token-level and monosaccharide-level. + + Novel approach: + 1. Token-level MLM: Predict individual masked tokens (like BERT) + 2. Residue-level MLM: Predict monosaccharide types from masked residues + 3. Global contrastive: Align sequence with MS/3D representations + + This provides multi-scale supervision for better glycan understanding. + """ + + def __init__( + self, + vocab_size: int, + mask_token_id: int, + pad_token_id: int, + special_token_ids: List[int], + ambiguous_token_ids: List[int] = None, + token_mask_prob: float = 0.10, # Lower since we also mask residues + residue_mask_prob: float = 0.10, # Mask some whole residues + valid_token_ids: Optional[List[int]] = None, + seed: int = None + ): + """ + Initialize hierarchical masking. + + Args: + vocab_size: Size of vocabulary + mask_token_id: ID of [MASK] token + pad_token_id: ID of [PAD] token + special_token_ids: Special tokens to never mask + ambiguous_token_ids: Ambiguous tokens to never mask + token_mask_prob: Probability to mask individual tokens + residue_mask_prob: Probability to mask entire residues + """ + self.vocab_size = vocab_size + self.mask_token_id = mask_token_id + self.pad_token_id = pad_token_id + self.special_token_ids = set(special_token_ids) + self.ambiguous_token_ids = set(ambiguous_token_ids) if ambiguous_token_ids else set() + excluded = self.special_token_ids | self.ambiguous_token_ids | {pad_token_id, mask_token_id} + if valid_token_ids is None: + self.valid_token_ids = [idx for idx in range(vocab_size) if idx not in excluded] + else: + self.valid_token_ids = sorted({int(idx) for idx in valid_token_ids if int(idx) not in excluded}) + if not self.valid_token_ids: + raise ValueError("valid_token_ids cannot be empty after excluding special/ambiguous tokens") + self.token_mask_prob = token_mask_prob + self.residue_mask_prob = residue_mask_prob + + # Mono type vocabulary (same as MonosaccharideMaskingStrategy) + self.MONO_TYPES = MonosaccharideMaskingStrategy.MONO_TYPES + self.mono_to_id = {m: i for i, m in enumerate(self.MONO_TYPES)} + self.num_mono_types = len(self.MONO_TYPES) + + if seed is not None: + random.seed(seed) + torch.manual_seed(seed) + + def mask_sequence( + self, + input_ids: torch.Tensor, + residue_ids: torch.Tensor, + monosaccharide_names: List[List[str]] = None + ) -> dict: + """ + Apply hierarchical masking at both token and residue levels. + + Returns: + Dictionary with: + - masked_input_ids: Input with masks applied + - token_labels: Token-level labels for MLM (-100 for unmasked) + - residue_mask: Which residues were completely masked + - mono_labels: Monosaccharide type labels for masked residues + """ + batch_size, seq_len = input_ids.shape + + masked_input_ids = input_ids.clone() + token_labels = torch.full_like(input_ids, -100) + residue_mask = [] + mono_labels = [] + + for b in range(batch_size): + # Step 1: Select residues to mask entirely + unique_residues = torch.unique(residue_ids[b]) + real_residues = [r.item() for r in unique_residues if r >= 0] + + batch_residue_mask = set() + batch_mono_labels = {} + + if len(real_residues) > 0: + n_residue_mask = max(0, int(len(real_residues) * self.residue_mask_prob)) + random.shuffle(real_residues) + residues_to_mask = real_residues[:n_residue_mask] + + for rid in residues_to_mask: + token_mask = residue_ids[b] == rid + # Store labels + token_labels[b, token_mask] = input_ids[b, token_mask] + # Mask tokens + masked_input_ids[b, token_mask] = self.mask_token_id + batch_residue_mask.add(rid) + + # Get mono label + if monosaccharide_names is not None and rid < len(monosaccharide_names[b]): + mono_name = monosaccharide_names[b][rid] + batch_mono_labels[rid] = self.mono_to_id.get(mono_name, 0) + + # Step 2: Mask additional individual tokens (not in already-masked residues) + maskable = torch.ones(seq_len, dtype=torch.bool, device=input_ids.device) + maskable &= (input_ids[b] != self.pad_token_id) + for special_id in self.special_token_ids: + maskable &= (input_ids[b] != special_id) + for ambig_id in self.ambiguous_token_ids: + maskable &= (input_ids[b] != ambig_id) + + # Don't mask tokens in already-masked residues + for rid in batch_residue_mask: + maskable &= (residue_ids[b] != rid) + + maskable_indices = maskable.nonzero(as_tuple=True)[0] + if len(maskable_indices) > 0: + n_to_mask = max(0, int(len(maskable_indices) * self.token_mask_prob)) + perm = torch.randperm(len(maskable_indices))[:n_to_mask] + for idx in maskable_indices[perm]: + token_labels[b, idx] = input_ids[b, idx] + # 80% mask, 10% random, 10% unchanged + rand_val = random.random() + if rand_val < 0.8: + masked_input_ids[b, idx] = self.mask_token_id + elif rand_val < 0.9: + masked_input_ids[b, idx] = random.choice(self.valid_token_ids) + + residue_mask.append(batch_residue_mask) + mono_labels.append(batch_mono_labels) + + return { + 'masked_input_ids': masked_input_ids, + 'token_labels': token_labels, + 'residue_mask': residue_mask, + 'mono_labels': mono_labels, + } + diff --git a/releases/2026-10-02/structure_md_processing/project/training/multimodal_dataset.py b/releases/2026-10-02/structure_md_processing/project/training/multimodal_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..da0a6daeace9cbc5d834aa0bf00440e65d5400a3 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/training/multimodal_dataset.py @@ -0,0 +1,636 @@ +""" +Multimodal Glycan Dataset + +Combines sequence (WURCS), MS, and 3D structure data for multimodal BERT training. +Handles optional modalities (MS and 3D structure). +""" + +import torch +from torch.utils.data import Dataset +import pickle +from pathlib import Path +from typing import Dict, List, Optional, Tuple +import numpy as np +import pandas as pd + + +class MultimodalGlycanDataset(Dataset): + """ + Dataset for multimodal glycan BERT training. + + Combines: + - Sequence tokens (WURCS atomic tokenization) + - MS tokens (mass spectrometry peaks, RT, intensity) + - 3D structure tokens (VQ-VAE discrete tokens, 4 per residue) + + Each modality can be enabled/disabled via flags. + """ + + def __init__( + self, + sequences_path: str, + ms_tokens_path: str, + structure_data_path: Optional[str] = None, + max_seq_length: int = 512, + max_ms_length: int = 150, + max_mono_length: int = 50, + max_struct_tokens: int = 200, + max_atoms: int = 300, + include_ms: bool = True, + include_3d: bool = True, + index_path: Optional[str] = None, + sequence_filter_column: Optional[str] = None, + sequence_filter_values: Optional[List] = None, + ): + """ + Initialize multimodal dataset. + + Args: + sequences_path: Path to sequences.pkl (contains token_ids, residue_ids, has_ms, has_3d, monosaccharide_indices) + ms_tokens_path: Path to ms_tokens.pkl (contains MS token IDs per WURCS) + structure_data_path: Path to training_dataset.pkl (contains VQ-VAE tokens and attention masks) + max_seq_length: Maximum sequence length (truncate/pad) + max_ms_length: Maximum MS token length (truncate/pad) + max_mono_length: Maximum number of monosaccharides (truncate/pad) + max_struct_tokens: Maximum structural tokens (truncate/pad) + max_atoms: Maximum number of atoms (for cross-attention mask padding) + include_ms: Whether to include MS modality + include_3d: Whether to include 3D structure modality + index_path: Optional multimodal index CSV used for row filtering + sequence_filter_column: Optional column in the index to filter sequences + sequence_filter_values: Values in sequence_filter_column to retain + """ + self.max_seq_length = max_seq_length + self.max_ms_length = max_ms_length + self.max_mono_length = max_mono_length + self.max_struct_tokens = max_struct_tokens + self.max_atoms = max_atoms + self.include_ms = include_ms + self.include_3d = include_3d + self.index_path = index_path + self.sequence_filter_column = sequence_filter_column + self.sequence_filter_values = sequence_filter_values + + # Load sequences + print(f"Loading sequences from {sequences_path}...") + with open(sequences_path, 'rb') as f: + sequences_raw = pickle.load(f) + + # Convert to list if it's a dict, but keep WURCS key + if isinstance(sequences_raw, dict): + self.sequences = [] + for wurcs, seq_data in sequences_raw.items(): + # Validate that seq_data is a dict with required fields + if not isinstance(seq_data, dict): + print(f"Warning: Skipping invalid entry for WURCS: {wurcs[:50]}...") + continue + + if 'token_ids' not in seq_data: + print(f"Warning: Skipping entry without token_ids for WURCS: {wurcs[:50]}...") + continue + + # Add WURCS key to the data if not present + if 'wurcs' not in seq_data: + seq_data['wurcs'] = wurcs + + self.sequences.append(seq_data) + else: + self.sequences = sequences_raw + + print(f" Loaded {len(self.sequences)} sequences") + + if self.index_path and self.sequence_filter_column: + self._filter_sequences_from_index() + + # Load MS tokens + self.ms_tokens = {} + if self.include_ms: + print(f"Loading MS tokens from {ms_tokens_path}...") + with open(ms_tokens_path, 'rb') as f: + self.ms_tokens = pickle.load(f) + print(f" Loaded {len(self.ms_tokens)} MS token sets") + + # Load 3D structure data + self.structure_data = {} + if self.include_3d and structure_data_path: + struct_path = Path(structure_data_path) + if struct_path.exists(): + print(f"Loading 3D structure data from {structure_data_path}...") + with open(structure_data_path, 'rb') as f: + struct_pkl = pickle.load(f) + + # Index by WURCS + if isinstance(struct_pkl, dict) and 'full_multimodal' in struct_pkl: + samples = struct_pkl['full_multimodal'] + self.structure_data = {s['wurcs']: s for s in samples} + else: + self.structure_data = {s['wurcs']: s for s in struct_pkl} + + print(f" Loaded {len(self.structure_data)} structure samples") + else: + print(f" Warning: Structure data file not found at {structure_data_path}") + print(f" Continuing without 3D structure modality...") + + # Statistics + self._compute_stats() + + def _filter_sequences_from_index(self): + """Filter loaded sequences using a boolean/category column in the index.""" + index_file = Path(self.index_path) + if not index_file.exists(): + raise FileNotFoundError(f"Sequence filter index not found: {index_file}") + + print(f"Filtering sequences with index: {index_file}") + index = pd.read_csv(index_file, low_memory=False) + if "wurcs" not in index.columns: + raise ValueError(f"Index {index_file} does not contain a 'wurcs' column") + if self.sequence_filter_column not in index.columns: + raise ValueError( + f"Index {index_file} does not contain filter column " + f"'{self.sequence_filter_column}'" + ) + + raw_values = self.sequence_filter_values + if raw_values is None: + raw_values = [True] + if not isinstance(raw_values, list): + raw_values = [raw_values] + + allowed_value_strings = {str(value).strip().lower() for value in raw_values} + filter_values = index[self.sequence_filter_column].astype(str).str.strip().str.lower() + allowed_wurcs = set(index.loc[filter_values.isin(allowed_value_strings), "wurcs"].astype(str)) + + before = len(self.sequences) + self.sequences = [ + seq_data for seq_data in self.sequences if str(seq_data.get("wurcs", "")) in allowed_wurcs + ] + after = len(self.sequences) + print( + f" Retained {after:,} / {before:,} sequences where " + f"{self.sequence_filter_column} in {sorted(allowed_value_strings)}" + ) + + def _compute_stats(self): + """Compute dataset statistics.""" + # Count actual data availability based on loaded dictionaries, not stored flags + ms_available = 0 + struct_available = 0 + + for s in self.sequences: + wurcs = s.get('wurcs', '') + if wurcs in self.ms_tokens: + ms_available += 1 + if wurcs in self.structure_data: + struct_available += 1 + + self.stats = { + 'total': len(self.sequences), + 'with_ms_available': ms_available, + 'with_3d_available': struct_available, + 'with_ms_tokens': len(self.ms_tokens), + 'with_structure_tokens': len(self.structure_data), + } + + print(f"\nDataset Statistics:") + print(f" Total sequences: {self.stats['total']:,}") + print(f" With MS data: {self.stats['with_ms_available']:,} ({100*self.stats['with_ms_available']/self.stats['total']:.2f}%)") + print(f" With 3D data: {self.stats['with_3d_available']:,} ({100*self.stats['with_3d_available']/self.stats['total']:.2f}%)") + print(f" Include MS: {self.include_ms}") + print(f" Include 3D: {self.include_3d}") + print() + + def __len__(self) -> int: + return len(self.sequences) + + def __getitem__(self, idx: int) -> Dict[str, torch.Tensor]: + """ + Get a single multimodal sample. + + Returns: + Dictionary containing: + - seq_token_ids: Sequence token IDs (padded/truncated) + - seq_attention_mask: Sequence attention mask + - seq_residue_ids: Residue position IDs for sequence tokens + - ms_token_ids: MS token IDs (padded/truncated, or empty if no MS) + - ms_attention_mask: MS attention mask + - ms_residue_ids: Residue IDs for MS tokens (all -2 for global) + - mono_indices: Monosaccharide indices (padded/truncated) + - mono_residue_ids: Residue IDs for each monosaccharide + - has_ms: Whether this sample has MS data + - has_3d: Whether this sample has 3D data (future) + - has_residue_error: Whether this sample has [RESIDUE_ERROR] tokens + """ + seq_data = self.sequences[idx] + wurcs = seq_data['wurcs'] + + # ===== Sequence Modality ===== + seq_token_ids = seq_data['token_ids'] + seq_residue_ids = seq_data.get('residue_ids', [-1] * len(seq_token_ids)) + # NEW: Extract branch depths and linkage types for tree-aware encoding + seq_branch_depths = seq_data.get('branch_depths', [0] * len(seq_token_ids)) + seq_linkage_types = seq_data.get('linkage_types', [0] * len(seq_token_ids)) + + # Truncate/pad sequence + if len(seq_token_ids) > self.max_seq_length: + seq_token_ids = seq_token_ids[:self.max_seq_length] + seq_residue_ids = seq_residue_ids[:self.max_seq_length] + seq_branch_depths = seq_branch_depths[:self.max_seq_length] + seq_linkage_types = seq_linkage_types[:self.max_seq_length] + + seq_len = len(seq_token_ids) + seq_attention_mask = [1] * seq_len + + # Pad to max length + padding_len = self.max_seq_length - seq_len + seq_token_ids = seq_token_ids + [0] * padding_len # 0 = [PAD] + seq_residue_ids = seq_residue_ids + [-1] * padding_len + seq_branch_depths = seq_branch_depths + [0] * padding_len + seq_linkage_types = seq_linkage_types + [0] * padding_len + # Pad attention mask + seq_attention_mask = seq_attention_mask + [0] * padding_len + + # ===== Topology (Distance Matrix) ===== + dist_labels = seq_data.get('distance_matrix', None) + if dist_labels is not None: + # Convert to tensor and pad + # dist_labels is list of lists + # 1. Pad rows (already done in tokenizer? assume yes, but re-checking) + # Tokenizer guarantees square matrix of size `length`. We need to pad to `max_seq_length`. + + # Create full -1 matrix + padded_dist = [[-1] * self.max_seq_length for _ in range(self.max_seq_length)] + + # Fill in valid part + current_len = len(dist_labels) # This is the valid length + # Truncate if too long (unlikely due to tokenizer limit) + trunc_len = min(current_len, self.max_seq_length) + + for i in range(trunc_len): + row = dist_labels[i] + valid_row_len = min(len(row), self.max_seq_length) + for j in range(valid_row_len): + padded_dist[i][j] = row[j] + + dist_labels = torch.tensor(padded_dist, dtype=torch.float) + else: + # Should not happen if data is regenerated, but fail safe + dist_labels = torch.full((self.max_seq_length, self.max_seq_length), -1.0) + + # ===== MS Modality ===== + has_ms = False + ms_token_ids = [] + ms_residue_ids = [] + ms_attention_mask = [] + + if self.include_ms and wurcs in self.ms_tokens: + has_ms = True + ms_data = self.ms_tokens[wurcs] + + # Handle different data formats + if isinstance(ms_data, dict) and 'ms_token_ids' in ms_data: + ms_token_ids = ms_data['ms_token_ids'] + elif isinstance(ms_data, str): + # If ms_data is a string (token sequence), skip it + has_ms = False + ms_token_ids = [] + elif isinstance(ms_data, list): + # If ms_data is directly a list of token IDs + ms_token_ids = ms_data + else: + # Unknown format, skip + has_ms = False + ms_token_ids = [] + + # Ensure ms_token_ids is a list of integers + if not isinstance(ms_token_ids, list): + has_ms = False + ms_token_ids = [] + elif len(ms_token_ids) > 0 and isinstance(ms_token_ids[0], str): + # If list contains strings, skip this entry + has_ms = False + ms_token_ids = [] + + # Truncate/pad MS tokens + if has_ms and len(ms_token_ids) > 0: + if len(ms_token_ids) > self.max_ms_length: + ms_token_ids = ms_token_ids[:self.max_ms_length] + + ms_len = len(ms_token_ids) + ms_attention_mask = [1] * ms_len + + # MS tokens are global (apply to whole glycan), so residue_id = -2 + ms_residue_ids = [-2] * ms_len + + # Pad to max length + padding_len = self.max_ms_length - ms_len + ms_token_ids = ms_token_ids + [0] * padding_len + ms_residue_ids = ms_residue_ids + [-1] * padding_len + ms_attention_mask = ms_attention_mask + [0] * padding_len + + # Ensure MS tensors are always properly sized (handles invalid/missing MS data) + if len(ms_token_ids) != self.max_ms_length: + has_ms = False + ms_token_ids = [0] * self.max_ms_length + ms_residue_ids = [-1] * self.max_ms_length + ms_attention_mask = [0] * self.max_ms_length + + # ===== Monosaccharide Indices ===== + mono_indices = seq_data.get('monosaccharide_indices', []) + mono_residue_ids = seq_data.get('monosaccharide_residue_ids', []) + + # Validate mono_indices format + if not isinstance(mono_indices, list): + mono_indices = [] + mono_residue_ids = [] + elif len(mono_indices) > 0: + # Check if elements are valid integers or can be converted + validated_indices = [] + validated_residue_ids = [] + for i, idx in enumerate(mono_indices): + if isinstance(idx, (int, np.integer)): + validated_indices.append(int(idx)) + if i < len(mono_residue_ids) and isinstance(mono_residue_ids[i], (int, np.integer)): + validated_residue_ids.append(int(mono_residue_ids[i])) + else: + validated_residue_ids.append(-1) + elif isinstance(idx, str): + # Try to convert string to int + try: + validated_indices.append(int(idx)) + if i < len(mono_residue_ids): + try: + validated_residue_ids.append(int(mono_residue_ids[i])) + except (ValueError, TypeError): + validated_residue_ids.append(-1) + else: + validated_residue_ids.append(-1) + except (ValueError, TypeError): + # Skip invalid entries + continue + # Skip non-convertible types + mono_indices = validated_indices + mono_residue_ids = validated_residue_ids + + # Truncate/pad monosaccharide indices + if len(mono_indices) > self.max_mono_length: + mono_indices = mono_indices[:self.max_mono_length] + mono_residue_ids = mono_residue_ids[:self.max_mono_length] + + mono_len = len(mono_indices) + padding_len = self.max_mono_length - mono_len + mono_indices = mono_indices + [0] * padding_len # 0 = + mono_residue_ids = mono_residue_ids + [-1] * padding_len + + # ===== 3D Structure Modality ===== + has_3d = False + struct_token_ids = [] + struct_attention_mask = [] + struct_residue_ids = [] + + if self.include_3d and wurcs in self.structure_data: + has_3d = True + struct_sample = self.structure_data[wurcs] + + # Get WURCS-to-GraphML residue mapping for cross-attention alignment + # This maps WURCS residue IDs to GraphML residue indices + wurcs_to_graphml = struct_sample.get('wurcs_to_graphml_mapping', {}) + + # Create reverse mapping: graphml_idx -> wurcs_residue_id + graphml_to_wurcs = {v: k for k, v in wurcs_to_graphml.items()} + + # Flatten VQ-VAE tokens (4 tokens per residue) + struct_tokens_per_residue = struct_sample['structural_tokens_per_residue'] + for graphml_idx, residue_tokens in enumerate(struct_tokens_per_residue): + struct_token_ids.extend(residue_tokens) + # Map GraphML index to WURCS residue ID for cross-attention + # Use -1 for unmapped residues (e.g., ROH reducing end) + wurcs_res_id = graphml_to_wurcs.get(graphml_idx, -1) + struct_residue_ids.extend([wurcs_res_id] * len(residue_tokens)) + + # Truncate/pad structural tokens + if len(struct_token_ids) > self.max_struct_tokens: + struct_token_ids = struct_token_ids[:self.max_struct_tokens] + struct_residue_ids = struct_residue_ids[:self.max_struct_tokens] + + struct_len = len(struct_token_ids) + struct_attention_mask = [1] * struct_len + + # Pad to max length + padding_len = self.max_struct_tokens - struct_len + struct_token_ids = struct_token_ids + [0] * padding_len + struct_residue_ids = struct_residue_ids + [-1] * padding_len + struct_attention_mask = struct_attention_mask + [0] * padding_len + + # Ensure structure tensors are always properly sized + if len(struct_token_ids) != self.max_struct_tokens: + has_3d = False + struct_token_ids = [0] * self.max_struct_tokens + struct_residue_ids = [-1] * self.max_struct_tokens + struct_attention_mask = [0] * self.max_struct_tokens + + has_residue_error = seq_data.get('has_residue_error', False) + + # Convert to tensors + result = { + 'seq_token_ids': torch.tensor(seq_token_ids, dtype=torch.long), + 'seq_attention_mask': torch.tensor(seq_attention_mask, dtype=torch.long), + 'seq_residue_ids': torch.tensor(seq_residue_ids, dtype=torch.long), + 'seq_branch_depths': torch.tensor(seq_branch_depths, dtype=torch.long), # NEW + 'seq_linkage_types': torch.tensor(seq_linkage_types, dtype=torch.long), # NEW + 'dist_labels': dist_labels, # NEW: Topology Target + + # MS Modality + 'ms_token_ids': torch.tensor(ms_token_ids, dtype=torch.long), + 'ms_attention_mask': torch.tensor(ms_attention_mask, dtype=torch.long), + 'ms_residue_ids': torch.tensor(ms_residue_ids, dtype=torch.long), + 'struct_token_ids': torch.tensor(struct_token_ids, dtype=torch.long), + 'struct_attention_mask': torch.tensor(struct_attention_mask, dtype=torch.long), + 'struct_residue_ids': torch.tensor(struct_residue_ids, dtype=torch.long), + 'mono_indices': torch.tensor(mono_indices, dtype=torch.long), + 'mono_residue_ids': torch.tensor(mono_residue_ids, dtype=torch.long), + 'has_ms': torch.tensor(has_ms, dtype=torch.bool), + 'has_3d': torch.tensor(has_3d, dtype=torch.bool), + 'has_residue_error': torch.tensor(has_residue_error, dtype=torch.bool), + } + + # Note: atom_coords, atom_types, and atom-level attention_mask are available + # in self.structure_data but not used (residue-level VQ-VAE tokens are used instead) + + return result + + +def collate_fn(batch: List[Dict[str, torch.Tensor]]) -> Dict[str, torch.Tensor]: + """ + Collate function for batching multimodal samples. + + Args: + batch: List of samples from __getitem__ + + Returns: + Batched tensors + """ + result = { + 'seq_token_ids': torch.stack([item['seq_token_ids'] for item in batch]), + 'seq_attention_mask': torch.stack([item['seq_attention_mask'] for item in batch]), + 'seq_residue_ids': torch.stack([item['seq_residue_ids'] for item in batch]), + 'seq_branch_depths': torch.stack([item['seq_branch_depths'] for item in batch]), # NEW + 'seq_linkage_types': torch.stack([item['seq_linkage_types'] for item in batch]), # NEW + 'ms_token_ids': torch.stack([item['ms_token_ids'] for item in batch]), + 'ms_attention_mask': torch.stack([item['ms_attention_mask'] for item in batch]), + 'ms_residue_ids': torch.stack([item['ms_residue_ids'] for item in batch]), + 'struct_token_ids': torch.stack([item['struct_token_ids'] for item in batch]), + 'struct_attention_mask': torch.stack([item['struct_attention_mask'] for item in batch]), + 'struct_residue_ids': torch.stack([item['struct_residue_ids'] for item in batch]), + 'mono_indices': torch.stack([item['mono_indices'] for item in batch]), + 'mono_residue_ids': torch.stack([item['mono_residue_ids'] for item in batch]), + 'has_ms': torch.stack([item['has_ms'] for item in batch]), + 'has_3d': torch.stack([item['has_3d'] for item in batch]), + 'has_residue_error': torch.stack([item['has_residue_error'] for item in batch]), + 'dist_labels': torch.stack([item['dist_labels'] for item in batch]), # NEW: Topology + } + + return result + + +def create_multimodal_dataloaders( + sequences_path: str, + ms_tokens_path: str, + structure_data_path: str, + batch_size: int = 64, + num_workers: int = 4, + max_seq_length: int = 512, + max_ms_length: int = 150, + max_struct_length: int = 200, + train_split: float = 0.8, + index_path: Optional[str] = None, + sequence_filter_column: Optional[str] = None, + sequence_filter_values: Optional[List] = None, +): + """ + Create train and validation dataloaders for multimodal training. + + Args: + sequences_path: Path to sequences.pkl + ms_tokens_path: Path to ms_tokens.pkl + structure_data_path: Path to training_dataset.pkl (VQ-VAE tokens) + batch_size: Batch size + num_workers: Number of data loading workers + max_seq_length: Maximum sequence length + max_ms_length: Maximum MS token length + max_struct_length: Maximum structural token length + train_split: Fraction of data for training (default 0.8 = 80/20 split) + index_path: Optional multimodal index CSV used for row filtering + sequence_filter_column: Optional column in the index to filter sequences + sequence_filter_values: Values in sequence_filter_column to retain + + Returns: + train_loader, val_loader + """ + from torch.utils.data import DataLoader, random_split + + # Create full dataset + full_dataset = MultimodalGlycanDataset( + sequences_path=sequences_path, + ms_tokens_path=ms_tokens_path, + structure_data_path=structure_data_path, + max_seq_length=max_seq_length, + max_ms_length=max_ms_length, + max_struct_tokens=max_struct_length, + include_ms=True, + include_3d=True, + index_path=index_path, + sequence_filter_column=sequence_filter_column, + sequence_filter_values=sequence_filter_values, + ) + + # Split into train and val + total_size = len(full_dataset) + train_size = int(train_split * total_size) + val_size = total_size - train_size + + train_dataset, val_dataset = random_split( + full_dataset, + [train_size, val_size], + generator=torch.Generator().manual_seed(42) + ) + + # Create dataloaders + train_loader = DataLoader( + train_dataset, + batch_size=batch_size, + shuffle=True, + num_workers=num_workers, + collate_fn=collate_fn, + pin_memory=True, + ) + + val_loader = DataLoader( + val_dataset, + batch_size=batch_size, + shuffle=False, + num_workers=num_workers, + collate_fn=collate_fn, + pin_memory=True, + ) + + print(f"Created dataloaders: {train_size} train, {val_size} val") + + return train_loader, val_loader + + +if __name__ == "__main__": + # Test the dataset + import sys + from pathlib import Path + + base_path = Path(__file__).parent.parent / "data" + + dataset = MultimodalGlycanDataset( + sequences_path=str(base_path / "sequences.pkl"), + ms_tokens_path=str(base_path / "ms_tokens.pkl"), + structure_data_path=str(Path(__file__).parent.parent.parent / "structure/cluster_upload/files/multimodal_training_package/training_dataset.pkl"), + max_seq_length=512, + max_ms_length=150, + max_struct_tokens=200, + max_atoms=300, + include_ms=True, + include_3d=True, + ) + + print("="*80) + print("Testing Dataset") + print("="*80) + + # Test single sample + sample = dataset[0] + print(f"\nSample 0:") + for key, value in sample.items(): + if isinstance(value, torch.Tensor): + print(f" {key}: shape={value.shape}, dtype={value.dtype}") + if key in ['seq_token_ids', 'ms_token_ids', 'struct_token_ids']: + non_zero = (value != 0).sum().item() + print(f" Non-padding tokens: {non_zero}") + else: + print(f" {key}: {value}") + + # Test batch + print(f"\n{'='*80}") + print("Testing Batch") + print("="*80) + + from torch.utils.data import DataLoader + + dataloader = DataLoader( + dataset, + batch_size=4, + shuffle=False, + collate_fn=collate_fn, + ) + + batch = next(iter(dataloader)) + print(f"\nBatch shapes:") + for key, value in batch.items(): + print(f" {key}: {value.shape}") + + print(f"\nBatch MS availability:") + print(f" Samples with MS: {batch['has_ms'].sum().item()}/{len(batch['has_ms'])}") diff --git a/releases/2026-10-02/structure_md_processing/project/training/multimodal_masking.py b/releases/2026-10-02/structure_md_processing/project/training/multimodal_masking.py new file mode 100644 index 0000000000000000000000000000000000000000..42802e572815ffbf7bb10fa9b615113f8cab4173 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/training/multimodal_masking.py @@ -0,0 +1,380 @@ +""" +Multimodal Masking Strategy for Glycan BERT v3 + +Implements masked language modeling across three modalities: +- Sequence (WURCS atomic tokenization) +- MS (mass spectrometry peaks) +- Structure (VQ-VAE discrete tokens) + +Each modality can be masked independently with different probabilities. +""" + +import torch +import random +from typing import List, Tuple, Dict, Optional + +try: + from .masking import GlycanMaskingStrategy, HierarchicalMaskingStrategy +except ImportError: + from masking import GlycanMaskingStrategy, HierarchicalMaskingStrategy + + +class MultimodalMaskingStrategy: + """ + Masking strategy for multimodal glycan BERT. + + Handles masking across sequence, MS, and structure modalities. + + NEW: Supports hierarchical masking (residue-level + token-level) when enabled. + """ + + def __init__( + self, + # Sequence masking + seq_vocab_size: int, + seq_mask_token_id: int, + seq_pad_token_id: int, + seq_special_token_ids: List[int], + + # MS masking + ms_vocab_size: int, + ms_vocab_offset: int, + ms_mask_token_id: int, + ms_pad_token_id: int, + ms_special_token_ids: List[int], + + # Structure masking + struct_vocab_size: int, + struct_mask_token_id: int, + struct_pad_token_id: int, + struct_special_token_ids: List[int], + + # Optional parameters + seq_ambiguous_token_ids: List[int] = None, + seq_valid_token_ids: Optional[List[int]] = None, + ms_valid_token_ids: Optional[List[int]] = None, + struct_valid_token_ids: Optional[List[int]] = None, + seq_mask_prob: float = 0.15, + ms_mask_prob: float = 0.15, + struct_mask_prob: float = 0.15, + + # Common masking parameters + mask_token_prob: float = 0.8, + random_token_prob: float = 0.1, + unchanged_prob: float = 0.1, + + # NEW: Hierarchical masking option + use_hierarchical_masking: bool = False, + token_mask_prob: float = 0.10, # For hierarchical: token-level prob + residue_mask_prob: float = 0.10, # For hierarchical: residue-level prob + mask_sequence: bool = True, + mask_ms: bool = True, + mask_structure: bool = True, + + seed: int = None + ): + """ + Initialize multimodal masking strategy. + + Args: + seq_vocab_size: Sequence vocabulary size + seq_mask_token_id: Sequence [MASK] token ID + seq_pad_token_id: Sequence [PAD] token ID + seq_special_token_ids: Sequence special token IDs to never mask + seq_ambiguous_token_ids: Sequence ambiguous token IDs to never mask + seq_valid_token_ids: Optional explicit sequence random replacement pool + seq_mask_prob: Probability of masking sequence tokens + + ms_vocab_size: MS vocabulary size + ms_vocab_offset: MS vocabulary offset (where MS tokens start in combined vocab) + ms_mask_token_id: MS [MASK] token ID + ms_pad_token_id: MS [PAD] token ID + ms_special_token_ids: MS special token IDs to never mask + ms_valid_token_ids: Optional explicit MS random replacement pool + ms_mask_prob: Probability of masking MS tokens + + struct_vocab_size: Structure vocabulary size + struct_mask_token_id: Structure [MASK] token ID + struct_pad_token_id: Structure [PAD] token ID + struct_special_token_ids: Structure special token IDs to never mask + struct_valid_token_ids: Optional explicit structure random replacement pool + struct_mask_prob: Probability of masking structure tokens + + mask_token_prob: Probability of replacing with [MASK] + random_token_prob: Probability of replacing with random token + unchanged_prob: Probability of leaving unchanged + + use_hierarchical_masking: If True, use hierarchical (token+residue level) masking + token_mask_prob: Token-level mask probability for hierarchical + residue_mask_prob: Residue-level mask probability for hierarchical + mask_sequence: Enable sequence masking + mask_ms: Enable MS masking + mask_structure: Enable structure masking + + seed: Random seed for reproducibility + """ + self.use_hierarchical_masking = use_hierarchical_masking + self.mask_sequence_enabled = mask_sequence + self.mask_ms_enabled = mask_ms + self.mask_structure_enabled = mask_structure + + if use_hierarchical_masking: + # Use hierarchical masking for sequences + self.seq_masker = HierarchicalMaskingStrategy( + vocab_size=seq_vocab_size, + mask_token_id=seq_mask_token_id, + pad_token_id=seq_pad_token_id, + special_token_ids=seq_special_token_ids, + ambiguous_token_ids=seq_ambiguous_token_ids, + valid_token_ids=seq_valid_token_ids, + token_mask_prob=token_mask_prob, + residue_mask_prob=residue_mask_prob, + seed=seed, + ) + else: + # Standard token-level masking + self.seq_masker = GlycanMaskingStrategy( + vocab_size=seq_vocab_size, + mask_token_id=seq_mask_token_id, + pad_token_id=seq_pad_token_id, + special_token_ids=seq_special_token_ids, + ambiguous_token_ids=seq_ambiguous_token_ids, + valid_token_ids=seq_valid_token_ids, + mask_prob=seq_mask_prob, + mask_token_prob=mask_token_prob, + random_token_prob=random_token_prob, + unchanged_prob=unchanged_prob, + seed=seed, + ) + + # MS masker (always token-level) + self.ms_masker = GlycanMaskingStrategy( + vocab_size=ms_vocab_size + ms_vocab_offset, # Total vocab including sequence + mask_token_id=ms_mask_token_id, + pad_token_id=ms_pad_token_id, + special_token_ids=ms_special_token_ids, + ambiguous_token_ids=[], # No ambiguous tokens in MS + valid_token_ids=ms_valid_token_ids, + mask_prob=ms_mask_prob, + mask_token_prob=mask_token_prob, + random_token_prob=random_token_prob, + unchanged_prob=unchanged_prob, + seed=seed, + ) + + # Structure masker (always token-level) + self.struct_masker = GlycanMaskingStrategy( + vocab_size=struct_vocab_size, + mask_token_id=struct_mask_token_id, + pad_token_id=struct_pad_token_id, + special_token_ids=struct_special_token_ids, + ambiguous_token_ids=[], # No ambiguous tokens in structure + valid_token_ids=struct_valid_token_ids, + mask_prob=struct_mask_prob, + mask_token_prob=mask_token_prob, + random_token_prob=random_token_prob, + unchanged_prob=unchanged_prob, + seed=seed, + ) + + self.ms_vocab_offset = ms_vocab_offset + + def mask_multimodal_batch( + self, + seq_token_ids: torch.Tensor, + ms_token_ids: torch.Tensor, + has_ms: torch.Tensor, + struct_token_ids: Optional[torch.Tensor] = None, + has_3d: Optional[torch.Tensor] = None, + # NEW: For hierarchical masking + seq_residue_ids: Optional[torch.Tensor] = None, + monosaccharide_names: Optional[List[List[str]]] = None, + ) -> Dict[str, torch.Tensor]: + """ + Apply masking to a multimodal batch. + + Args: + seq_token_ids: (batch_size, seq_len) - Sequence token IDs + ms_token_ids: (batch_size, ms_len) - MS token IDs + has_ms: (batch_size,) - Boolean mask for samples with MS data + struct_token_ids: (batch_size, struct_len) - Structure token IDs (optional) + has_3d: (batch_size,) - Boolean mask for samples with 3D data (optional) + seq_residue_ids: (batch_size, seq_len) - Residue IDs for hierarchical masking (optional) + monosaccharide_names: List of lists of mono names per batch item (optional) + + Returns: + Dictionary containing: + - seq_masked_ids: Masked sequence input + - seq_labels: Sequence labels (-100 for unmasked) + - ms_masked_ids: Masked MS input + - ms_labels: MS labels (-100 for unmasked) + - struct_masked_ids: Masked structure input (if provided) + - struct_labels: Structure labels (-100 for unmasked, if provided) + - mono_labels: Monosaccharide type labels (if hierarchical) + - statistics: Masking statistics + """ + # Mask sequence (different for hierarchical vs standard) + if not self.mask_sequence_enabled: + seq_masked_ids = seq_token_ids.clone() + seq_labels = torch.full_like(seq_token_ids, -100) + seq_mask_positions = torch.zeros_like(seq_token_ids, dtype=torch.bool) + mono_labels = None + elif self.use_hierarchical_masking and seq_residue_ids is not None: + # Hierarchical masking returns dict + hier_result = self.seq_masker.mask_sequence( + seq_token_ids, seq_residue_ids, monosaccharide_names + ) + seq_masked_ids = hier_result['masked_input_ids'] + seq_labels = hier_result['token_labels'] + seq_mask_positions = (seq_labels != -100) + mono_labels = hier_result.get('mono_labels', None) + else: + # Standard masking + seq_masked_ids, seq_labels, seq_mask_positions = self.seq_masker.mask_sequence(seq_token_ids) + mono_labels = None + + # Mask MS + if self.mask_ms_enabled: + ms_masked_ids, ms_labels, ms_mask_positions = self.ms_masker.mask_sequence(ms_token_ids) + else: + ms_masked_ids = ms_token_ids.clone() + ms_labels = torch.full_like(ms_token_ids, -100) + ms_mask_positions = torch.zeros_like(ms_token_ids, dtype=torch.bool) + + # Zero out MS labels for samples without MS data + if has_ms is not None: + ms_labels[~has_ms] = -100 + + result = { + 'seq_masked_ids': seq_masked_ids, + 'seq_labels': seq_labels, + 'ms_masked_ids': ms_masked_ids, + 'ms_labels': ms_labels, + } + + if mono_labels is not None: + result['mono_labels'] = mono_labels + + # Mask structure if provided + if struct_token_ids is not None: + if not self.mask_structure_enabled: + struct_masked_ids = struct_token_ids.clone() + struct_labels = torch.full_like(struct_token_ids, -100) + struct_mask_positions = torch.zeros_like(struct_token_ids, dtype=torch.bool) + else: + struct_masked_ids, struct_labels, struct_mask_positions = self.struct_masker.mask_sequence(struct_token_ids) + + # Zero out structure labels for samples without 3D data + if has_3d is not None: + struct_labels[~has_3d] = -100 + + result['struct_masked_ids'] = struct_masked_ids + result['struct_labels'] = struct_labels + else: + struct_mask_positions = None + + # Compute statistics (only for non-hierarchical, hierarchical doesn't have get_mask_statistics) + if not self.use_hierarchical_masking: + seq_stats = self.seq_masker.get_mask_statistics(seq_token_ids, seq_masked_ids, seq_mask_positions) + else: + seq_stats = {'masked_tokens': seq_mask_positions.sum().item()} + + ms_stats = self.ms_masker.get_mask_statistics(ms_token_ids, ms_masked_ids, ms_mask_positions) + + stats = { + 'seq': seq_stats, + 'ms': ms_stats, + } + + if struct_token_ids is not None and struct_mask_positions is not None: + struct_stats = self.struct_masker.get_mask_statistics(struct_token_ids, struct_masked_ids, struct_mask_positions) + stats['struct'] = struct_stats + + result['statistics'] = stats + + return result + + +if __name__ == "__main__": + # Test multimodal masking + print("="*80) + print("Testing Multimodal Masking Strategy") + print("="*80) + + # Create masking strategy + masker = MultimodalMaskingStrategy( + seq_vocab_size=166, + seq_mask_token_id=1, + seq_pad_token_id=0, + seq_special_token_ids=[0, 1, 2, 3], # [PAD], [MASK], [START], [END] + seq_ambiguous_token_ids=[10, 11, 12], # x, X, ? + seq_mask_prob=0.15, + + ms_vocab_size=242, + ms_vocab_offset=166, + ms_mask_token_id=1, + ms_pad_token_id=0, + ms_special_token_ids=[0, 1, 2, 3], + ms_mask_prob=0.15, + + struct_vocab_size=1024, + struct_mask_token_id=1, + struct_pad_token_id=0, + struct_special_token_ids=[0, 1], + struct_mask_prob=0.15, + + seed=42, + ) + + # Create dummy batch + batch_size = 4 + seq_len = 50 + ms_len = 30 + struct_len = 40 + + seq_token_ids = torch.randint(4, 166, (batch_size, seq_len)) + ms_token_ids = torch.randint(166, 408, (batch_size, ms_len)) + struct_token_ids = torch.randint(2, 1024, (batch_size, struct_len)) + has_ms = torch.tensor([True, True, False, True]) + has_3d = torch.tensor([True, False, True, True]) + + # Apply masking + result = masker.mask_multimodal_batch( + seq_token_ids=seq_token_ids, + ms_token_ids=ms_token_ids, + has_ms=has_ms, + struct_token_ids=struct_token_ids, + has_3d=has_3d, + ) + + print("\nMasked batch shapes:") + print(f" seq_masked_ids: {result['seq_masked_ids'].shape}") + print(f" seq_labels: {result['seq_labels'].shape}") + print(f" ms_masked_ids: {result['ms_masked_ids'].shape}") + print(f" ms_labels: {result['ms_labels'].shape}") + print(f" struct_masked_ids: {result['struct_masked_ids'].shape}") + print(f" struct_labels: {result['struct_labels'].shape}") + + print("\nSequence masking statistics:") + for key, value in result['statistics']['seq'].items(): + print(f" {key}: {value}") + + print("\nMS masking statistics:") + for key, value in result['statistics']['ms'].items(): + print(f" {key}: {value}") + + print("\nStructure masking statistics:") + for key, value in result['statistics']['struct'].items(): + print(f" {key}: {value}") + + # Check that MS labels are zeroed for samples without MS + print(f"\nMS labels for sample 2 (no MS): {result['ms_labels'][2].unique()}") + print(f"MS labels for sample 0 (has MS): {result['ms_labels'][0].unique()[:10]}") + + # Check that structure labels are zeroed for samples without 3D + print(f"\nStructure labels for sample 1 (no 3D): {result['struct_labels'][1].unique()}") + print(f"Structure labels for sample 0 (has 3D): {result['struct_labels'][0].unique()[:10]}") + + print(f"\n{'='*80}") + print("Multimodal Masking Test Complete!") + print("="*80) diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/configs/review_md_temporal_20x6_v1_20260801.yaml b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/configs/review_md_temporal_20x6_v1_20260801.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6187a0171e3a34080ea64da2d83fdd1a2a2b3b31 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/configs/review_md_temporal_20x6_v1_20260801.yaml @@ -0,0 +1,67 @@ +schema: review_md_temporal_20x6_v1 +status: owner_frozen_for_representation_build +date: 2026-08-01 + +source: + schema: review_md_temporal_20x9_feature_layer_freeze_v1 + expected_states: 47063 + expected_parents: 30088 + production_length_ns: 20 + retained_post_reference_frames_per_state: 1000 + +representation: + ordered_windows: 20 + window_ns: 1 + selected_source_indices: [0, 2, 3, 4, 6, 7] + tensor_shape_per_state: [20, 6] + values_per_state: 120 + features: + - name: radius_of_gyration_mean_A + role: overall_size + - name: heavy_atom_rmsd_mean_A + role: conformational_displacement + - name: heavy_atom_rmsd_sd_A + role: within_window_atomic_flexibility + - name: sasa_per_residue_mean_nm2 + role: solvent_exposure + - name: terminal_span_per_graph_diameter_residue_mean_A + role: global_extension + - name: glycosidic_torsion_circular_variance_mean + role: linkage_flexibility + +excluded_source_features: + - name: radius_of_gyration_sd_A + reason: overlaps_with_heavy_atom_rmsd_sd + masked_pearson_r: 0.7374587827351403 + - name: normalized_asphericity_mean + reason: overlaps_with_normalized_terminal_span + masked_pearson_r: 0.7251926445593051 + - name: glycosidic_torsion_mode_occupancy_mean + reason: overlaps_with_torsion_circular_variance_and_depends_on_custom_bins + masked_pearson_r: -0.6422647524515069 + +missing_value_policy: + numeric_fill_after_standardization: 0.0 + emit_feature_mask: true + monomer_terminal_span_mask: false + monomer_torsion_variance_mask: false + normalization_ignores_masked_values: true + +normalization: + fit_unit: parent_glycan + fit_partition: pretraining_train_only + expected_fit_parents: 22914 + alpha_beta_weighting: equal_parent_weight_after_child_mean + +parent_policy: + single: encode_one_child + complete_alpha_beta: encode_children_separately_then_equal_mean_child_embeddings + incomplete_sibling: encode_available_child_and_retain_flag + split_unit: parent_glycorpus_id + +model_boundary: + pca_scores_are_inputs: false + raw_frames_are_independent_training_examples: false + claim: short_timescale_dynamic_fingerprint_not_equilibrium_population + +official_submitted_artifacts_modified: false diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/configs/review_md_temporal_20x9_v1_20260731.yaml b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/configs/review_md_temporal_20x9_v1_20260731.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4a00dc5b4823051504fef8459fa5f0c5be7df65d --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/configs/review_md_temporal_20x9_v1_20260731.yaml @@ -0,0 +1,108 @@ +schema: review_md_temporal_20x9_v1 +status: owner_frozen_for_feature_extraction +date: 2026-07-31 + +scope: + unit: completed_reviewed_glycam_structure_state + expected_states: 47063 + expected_parents: 30088 + production_length_ns: 20 + retained_frames_per_state: 1001 + retained_stride_ps: 20 + +windowing: + ordered_windows: 20 + window_length_ps: 1000 + interval_definition: "(window_start_ps, window_end_ps]" + exclude_reference_frame_at_0_ps: true + frames_per_window: 50 + rationale: > + The 0 ps frame remains the RMSD reference. Excluding it from aggregation + gives twenty non-overlapping windows with exactly fifty retained frames. + +primary_features: + - index: 0 + name: radius_of_gyration_mean_A + source_array: radius_of_gyration_A + aggregation: arithmetic_mean + applicability: all_states + - index: 1 + name: radius_of_gyration_sd_A + source_array: radius_of_gyration_A + aggregation: population_standard_deviation + applicability: all_states + - index: 2 + name: heavy_atom_rmsd_mean_A + source_array: heavy_atom_rmsd_A + aggregation: arithmetic_mean + applicability: all_states + - index: 3 + name: heavy_atom_rmsd_sd_A + source_array: heavy_atom_rmsd_A + aggregation: population_standard_deviation + applicability: all_states + - index: 4 + name: sasa_per_residue_mean_nm2 + source_array: sasa_total_nm2 + aggregation: arithmetic_mean_divided_by_analysis_residue_count + applicability: all_states + - index: 5 + name: normalized_asphericity_mean + source_array: asphericity + aggregation: arithmetic_mean + applicability: all_states + - index: 6 + name: terminal_span_per_graph_diameter_residue_mean_A + source_array: terminal_span_A + aggregation: arithmetic_mean_divided_by_graph_diameter_residues + applicability: multiresidue_states_with_two_or_more_graph_leaves + - index: 7 + name: glycosidic_torsion_circular_variance_mean + source_arrays: [phi_deg, psi_deg, omega_deg] + aggregation: > + mean across applicable torsion coordinates of one minus circular + resultant length within the window + applicability: multiresidue_states + - index: 8 + name: glycosidic_torsion_mode_occupancy_mean + source_arrays: [phi_deg, psi_deg, omega_deg] + aggregation: > + mean across applicable torsion coordinates of occupancy within 15 + degrees of the most occupied 10 degree periodic-bin center + applicability: multiresidue_states + +missing_value_policy: + numeric_fill: 0.0 + emit_feature_mask: true + monomer_terminal_span_mask: false + monomer_torsion_masks: false + normalization_must_ignore_masked_values: true + +state_output: + tensor_shape: [20, 9] + tensor_dtype: float32 + mask_shape: [20, 9] + mask_dtype: uint8 + preserve_child_state_identity: true + +parent_policy: + source_resolved_state: encode_selected_child + unresolved_alpha_beta: encode_children_separately_then_equal_masked_mean + one_usable_child: encode_available_child_and_flag_incomplete_sibling + never_average_raw_coordinates: true + never_average_integer_structure_codes: true + +sidecars_not_primary_model_inputs: + - full_phi_psi_omega_arrays + - per_linkage_torsion_histograms + - ring_puckering + - residue_fluctuation + - residue_contacts + - conformer_cluster_assignments + - rmsd_drift_qc + +claim_boundary: > + Ordered short-timescale sampled descriptors from one 20 ns trajectory per + state; not converged equilibrium conformer populations. + +official_submitted_artifacts_modified: false diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/audit_review_md_charge_corrected_exact_roster_20260802_r1.py b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/audit_review_md_charge_corrected_exact_roster_20260802_r1.py new file mode 100644 index 0000000000000000000000000000000000000000..e866332213eebd0281610c66ccb2f3ebe53de28f --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/audit_review_md_charge_corrected_exact_roster_20260802_r1.py @@ -0,0 +1,231 @@ +#!/usr/bin/env python3 +"""Audit the exact 9,943-row affected roster without sparse-range expansion.""" + +from __future__ import annotations + +import argparse +import csv +import hashlib +import json +import math +from collections import Counter +from pathlib import Path + + +EXPECTED_MANIFEST_SHA256 = ( + "86a2ac4377e6223a44019839821ed3f403aba0aedca091f312a415b30a8d1782" +) +EXPECTED_STATES = 9_943 +EXPECTED_PARENTS = 6_583 +EXPECTED_FRAMES = 1_001 +EXPECTED_LAST_TIME_PS = 20_000.0 + +LEDGER_FIELDS = [ + "campaign_index", + "structure_state_id", + "parent_glycorpus_id", + "size_class", + "modifier_pattern", + "classification", + "failure_reasons", + "state_summary_path", + "state_summary_sha256", + "solute_xtc_path", + "solute_xtc_bytes", + "solute_xtc_sha256", + "solute_gro_path", + "solute_gro_bytes", + "solute_gro_sha256", + "acpype_log_path", + "acpype_log_bytes", + "acpype_log_sha256", + "compact_frames", + "compact_last_time_ps", +] + + +def sha256_file(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as handle: + for block in iter(lambda: handle.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def safe_name(value: str) -> str: + return "".join(ch if ch.isalnum() or ch in "._-" else "_" for ch in value) + + +def retained_identity(path: Path) -> tuple[str, str, str]: + if not path.is_file() or path.is_symlink(): + return "", "", "" + return str(path), str(path.stat().st_size), sha256_file(path) + + +def classify_state( + campaign: Path, row: dict[str, str] +) -> dict[str, str]: + index = int(row["campaign_index"]) + state_id = row["structure_state_id"] + state_dir = campaign / "states" / f"{index:06d}_{safe_name(state_id)}" + summary_path = state_dir / "state_summary.json" + result = { + "campaign_index": str(index), + "structure_state_id": state_id, + "parent_glycorpus_id": row["parent_glycorpus_id"], + "size_class": row["size_class"], + "modifier_pattern": row["modifier_pattern"], + "classification": "missing", + "failure_reasons": "missing_state_summary", + "state_summary_path": str(summary_path), + "state_summary_sha256": "", + "solute_xtc_path": "", + "solute_xtc_bytes": "", + "solute_xtc_sha256": "", + "solute_gro_path": "", + "solute_gro_bytes": "", + "solute_gro_sha256": "", + "acpype_log_path": "", + "acpype_log_bytes": "", + "acpype_log_sha256": "", + "compact_frames": "", + "compact_last_time_ps": "", + } + if not summary_path.is_file() or summary_path.is_symlink(): + return result + try: + summary = json.loads(summary_path.read_text()) + except (OSError, json.JSONDecodeError) as exc: + result["classification"] = "invalid_summary" + result["failure_reasons"] = f"summary_parse_error:{type(exc).__name__}" + return result + + reasons = [] + expected_values = { + "final_status": "production_passed", + "charge_correction_status": "passed", + "conversion_status": "passed", + "compact_retention_status": "passed", + "compact_trajectory_validation_status": "complete", + } + for field, expected in expected_values.items(): + if summary.get(field) != expected: + reasons.append(f"{field}!={expected}") + if summary.get("gromacs_status") not in { + "passed", + "passed_after_resume", + "passed_existing_production", + "passed_existing_compact", + "passed_existing_compact_after_checkpoint_resume", + }: + reasons.append("gromacs_status_not_passed") + conversion_method = summary.get("conversion_method") + if conversion_method == "acpype_charge_preserving": + if summary.get("acpype_status") != "acpype_passed_charge_preserving": + reasons.append("acpype_status_not_charge_preserving") + elif conversion_method != "existing_charge_preserving_gromacs_run": + reasons.append("conversion_method_not_charge_preserving") + if summary.get("acpype_charge_parity", {}).get("pass") is not True: + reasons.append("acpype_charge_parity_not_passed") + if int(summary.get("compact_trajectory_frames") or 0) != EXPECTED_FRAMES: + reasons.append("compact_frame_count_mismatch") + observed_last = float(summary.get("compact_trajectory_last_time_ps") or math.nan) + if not math.isfinite(observed_last) or abs(observed_last - EXPECTED_LAST_TIME_PS) > 1.0e-6: + reasons.append("compact_last_time_mismatch") + if summary.get("structure_state_id") != state_id: + reasons.append("summary_state_identity_mismatch") + if int(summary.get("campaign_index") or -1) != index: + reasons.append("summary_campaign_index_mismatch") + + xtc = state_dir / "gromacs_run/md_solute.xtc" + gro = state_dir / "gromacs_run/md_solute.gro" + acpype = state_dir / "acpype_charge_conversion.log" + xtc_identity = retained_identity(xtc) + gro_identity = retained_identity(gro) + acpype_identity = retained_identity(acpype) + if not xtc_identity[0]: + reasons.append("missing_or_symlink_solute_xtc") + if not gro_identity[0]: + reasons.append("missing_or_symlink_solute_gro") + if not acpype_identity[0]: + reasons.append("missing_or_symlink_acpype_log") + + result.update( + { + "classification": "production_passed" if not reasons else "failed_qc", + "failure_reasons": ";".join(reasons), + "state_summary_sha256": sha256_file(summary_path), + "solute_xtc_path": xtc_identity[0], + "solute_xtc_bytes": xtc_identity[1], + "solute_xtc_sha256": xtc_identity[2], + "solute_gro_path": gro_identity[0], + "solute_gro_bytes": gro_identity[1], + "solute_gro_sha256": gro_identity[2], + "acpype_log_path": acpype_identity[0], + "acpype_log_bytes": acpype_identity[1], + "acpype_log_sha256": acpype_identity[2], + "compact_frames": str(summary.get("compact_trajectory_frames") or ""), + "compact_last_time_ps": str( + summary.get("compact_trajectory_last_time_ps") or "" + ), + } + ) + return result + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--campaign-dir", required=True, type=Path) + parser.add_argument("--affected-manifest", required=True, type=Path) + parser.add_argument("--output-dir", required=True, type=Path) + args = parser.parse_args() + + campaign = args.campaign_dir.resolve() + manifest = args.affected_manifest.resolve() + output = args.output_dir.resolve() + if output.exists(): + raise FileExistsError(output) + if sha256_file(manifest) != EXPECTED_MANIFEST_SHA256: + raise ValueError("affected manifest hash does not match the frozen roster") + with manifest.open(newline="") as handle: + rows = list(csv.DictReader(handle, delimiter="\t")) + if len(rows) != EXPECTED_STATES: + raise ValueError(f"expected {EXPECTED_STATES} exact affected rows") + if len({row["campaign_index"] for row in rows}) != EXPECTED_STATES: + raise ValueError("affected campaign indices are not unique") + if len({row["parent_glycorpus_id"] for row in rows}) != EXPECTED_PARENTS: + raise ValueError(f"expected {EXPECTED_PARENTS} affected parents") + + output.mkdir(parents=True, exist_ok=False) + ledger_rows = [classify_state(campaign, row) for row in rows] + ledger = output / "review_md_charge_corrected_exact_roster_qc_20260802_r1.tsv" + with ledger.open("x", newline="") as handle: + writer = csv.DictWriter(handle, fieldnames=LEDGER_FIELDS, delimiter="\t") + writer.writeheader() + writer.writerows(ledger_rows) + counts = Counter(row["classification"] for row in ledger_rows) + complete = counts.get("production_passed", 0) == EXPECTED_STATES + receipt = { + "schema": "review_md_charge_corrected_exact_roster_qc_20260802_r1", + "status": "PASS_COMPLETE" if complete else "INCOMPLETE", + "campaign_dir": str(campaign), + "affected_manifest": str(manifest), + "affected_manifest_sha256": EXPECTED_MANIFEST_SHA256, + "affected_state_count": EXPECTED_STATES, + "affected_parent_count": EXPECTED_PARENTS, + "classification_counts": dict(sorted(counts.items())), + "ledger": str(ledger), + "ledger_sha256": sha256_file(ledger), + "final_qc_iterated_exact_manifest_rows": True, + "sparse_chunk_expansion_used": False, + "feature_rebuild_authorized": False, + "md_enabled_training_authorized": False, + } + receipt_path = output / "review_md_charge_corrected_exact_roster_qc_receipt_20260802_r1.json" + receipt_path.write_text(json.dumps(receipt, indent=2, sort_keys=True) + "\n") + print(json.dumps(receipt, sort_keys=True)) + return 0 if complete else 2 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/audit_review_md_parent_feature_package.py b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/audit_review_md_parent_feature_package.py new file mode 100644 index 0000000000000000000000000000000000000000..7908c09d3aa68586629124179a017db9f8d6428a --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/audit_review_md_parent_feature_package.py @@ -0,0 +1,301 @@ +#!/usr/bin/env python3 +"""Independently audit the temporal MD parent feature package.""" + +from __future__ import annotations + +import argparse +import csv +import gzip +import hashlib +import json +import os +from collections import Counter +from datetime import datetime, timezone +from pathlib import Path + +import numpy as np + + +def sha256_file(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as handle: + for block in iter(lambda: handle.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def read_tsv(path: Path): + opener = gzip.open if path.suffix == ".gz" else Path.open + if path.suffix == ".gz": + handle = opener(path, "rt", encoding="utf-8", newline="") + else: + handle = opener(path, "r", encoding="utf-8", newline="") + with handle: + yield from csv.DictReader(handle, delimiter="\t") + + +def parse_bool(value: str) -> bool: + return value.strip().lower() in {"true", "1", "yes"} + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--package-dir", type=Path, required=True) + parser.add_argument("--raw-state-package", type=Path, required=True) + parser.add_argument("--raw-state-index", type=Path, required=True) + parser.add_argument("--parent-partition", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--expected-states", type=int, default=47063) + parser.add_argument("--expected-md-parents", type=int, default=30088) + parser.add_argument("--expected-master-parents", type=int, default=281600) + parser.add_argument("--expected-a5-md-parents", type=int, default=29696) + parser.add_argument("--expected-scaler-parents", type=int, default=22914) + args = parser.parse_args() + + summary_path = ( + args.package_dir / "review_md_parent_temporal_20x9_v2_summary.json" + ) + model_path = args.package_dir / "review_md_model_ready_temporal_20x9_v1.npz" + parent_path = ( + args.package_dir / "review_md_parent_temporal_20x9_v2_index.tsv.gz" + ) + ledger_path = ( + args.package_dir / "review_master_modality_ledger_with_md20x9_v2.tsv.gz" + ) + objective_path = ( + args.package_dir + / "review_a5_objective_availability_with_md20x9_v2.tsv.gz" + ) + summary = json.loads(summary_path.read_text(encoding="utf-8")) + if summary.get("status") != "PASS": + raise ValueError("parent package summary is not PASS") + output_paths = { + model_path.name: model_path, + parent_path.name: parent_path, + ledger_path.name: ledger_path, + objective_path.name: objective_path, + "review_md_temporal_20x9_v2_README.md": ( + args.package_dir / "review_md_temporal_20x9_v2_README.md" + ), + } + for name, path in output_paths.items(): + if summary["output_sha256"].get(name) != sha256_file(path): + raise ValueError(f"output hash mismatch: {name}") + + with np.load(model_path, allow_pickle=False) as values: + model = {key: np.asarray(values[key]) for key in values.files} + with np.load(args.raw_state_package, allow_pickle=False) as values: + raw = {key: np.asarray(values[key]) for key in values.files} + state_count = args.expected_states + parent_count = args.expected_md_parents + if model["state_features_z"].shape != (state_count, 20, 9): + raise ValueError("model-ready tensor shape mismatch") + if model["state_feature_mask"].shape != (state_count, 20, 9): + raise ValueError("model-ready mask shape mismatch") + if model["parent_child_state_row_index"].shape != (parent_count, 2): + raise ValueError("parent child-row tensor shape mismatch") + if model["parent_child_present_mask"].shape != (parent_count, 2): + raise ValueError("parent child-mask tensor shape mismatch") + if model["state_parent_row_index"].shape != (state_count,): + raise ValueError("state-to-parent tensor shape mismatch") + if not np.all(np.isfinite(model["state_features_z"])): + raise ValueError("model-ready tensor contains non-finite values") + masks = model["state_feature_mask"] + if not np.all(np.isin(masks, (0, 1))): + raise ValueError("feature mask contains values other than zero or one") + if not np.all(model["state_features_z"][masks == 0] == 0): + raise ValueError("masked model-ready values are not zero") + + child_rows = model["parent_child_state_row_index"].astype(np.int64) + child_present = model["parent_child_present_mask"].astype(bool) + if np.any((child_rows >= 0) != child_present): + raise ValueError("child row and presence mask disagree") + accepted_rows = child_rows[child_present] + if not np.array_equal(np.sort(accepted_rows), np.arange(state_count)): + raise ValueError("state rows are missing or duplicated across parent slots") + for parent_row in range(parent_count): + rows = child_rows[parent_row][child_present[parent_row]] + if not np.all(model["state_parent_row_index"][rows] == parent_row): + raise ValueError(f"state-to-parent mapping mismatch at parent {parent_row}") + + raw_features = np.asarray(raw["features"], dtype=np.float64) + raw_masks = np.asarray(raw["feature_mask"], dtype=np.uint8) + expected_z = ( + raw_features - model["feature_mean"][None, None, :] + ) / model["feature_sd"][None, None, :] + expected_z = np.where(raw_masks == 1, expected_z, 0.0) + if not np.allclose( + expected_z, + model["state_features_z"], + rtol=1e-5, + atol=1e-6, + ): + raise ValueError("model-ready tensor is not the declared standardization") + + state_rows = list(read_tsv(args.raw_state_index)) + if len(state_rows) != state_count: + raise ValueError("raw state index count mismatch") + parent_rows = list(read_tsv(parent_path)) + if len(parent_rows) != parent_count: + raise ValueError("parent index count mismatch") + for parent_row, row in enumerate(parent_rows): + if int(row["md_parent_row_index"]) != parent_row: + raise ValueError("parent index order mismatch") + + partitions = { + row["parent_glycorpus_id"]: row for row in read_tsv(args.parent_partition) + } + scaler_values = [] + for parent_row, row in enumerate(parent_rows): + parent = row["parent_glycorpus_id"] + partition = partitions.get(parent) + if ( + partition is None + or partition["pretraining_partition"] != "pretraining_train" + or not parse_bool(partition["model_pretraining_contributor"]) + ): + continue + state_indexes = child_rows[parent_row][child_present[parent_row]] + child_features = raw_features[state_indexes] + child_masks = raw_masks[state_indexes].astype(np.float64) + denominator = np.sum(child_masks, axis=0) + valid = denominator > 0 + parent_value = np.zeros((20, 9), dtype=np.float64) + parent_value[valid] = ( + np.sum(child_features * child_masks, axis=0)[valid] / denominator[valid] + ) + scaler_values.append((parent_value, valid)) + if len(scaler_values) != args.expected_scaler_parents: + raise ValueError("scaler parent population mismatch") + recalculated_means = np.zeros(9) + recalculated_sds = np.zeros(9) + for feature_index in range(9): + values = np.concatenate( + [ + parent_value[:, feature_index][valid[:, feature_index]] + for parent_value, valid in scaler_values + ] + ) + recalculated_means[feature_index] = np.mean(values) + recalculated_sds[feature_index] = np.std(values) + if not np.allclose(recalculated_means, model["feature_mean"], rtol=1e-6): + raise ValueError("training-parent scaler means do not recalculate") + if not np.allclose(recalculated_sds, model["feature_sd"], rtol=1e-6): + raise ValueError("training-parent scaler SDs do not recalculate") + + ledger_parent_ids = set() + ledger_counts = Counter() + for row in read_tsv(ledger_path): + parent = row["parent_glycorpus_id"] + if parent in ledger_parent_ids: + raise ValueError(f"duplicate master-ledger parent: {parent}") + ledger_parent_ids.add(parent) + ledger_counts["md_completed"] += int(row["has_md_completed"]) + if row["has_md"] != row["has_md_completed"]: + raise ValueError(f"has_md alias differs from completed MD for {parent}") + if row["has_md"] == "1" and not row["md_feature_package_path"]: + raise ValueError(f"MD parent lacks a model feature path: {parent}") + if row["has_sequence"] == "1" and not row["sequence_key"]: + raise ValueError(f"sequence parent lacks sequence_key: {parent}") + if row["has_topology"] == "1" and not row["topology_key"]: + raise ValueError(f"topology parent lacks topology_key: {parent}") + if row["has_ms"] == "1" and not row["ms_parent_key"]: + raise ValueError(f"MS parent lacks ms_parent_key: {parent}") + ledger_counts["md_a5"] += int(row["has_md_a5_objective"]) + ledger_counts["outside_md"] += int( + row["has_md_completed"] == "1" + and row["in_a5_parent_partition"] == "0" + ) + ledger_counts["md_qc_pass"] += int(row["md_qc_status"] == "PASS") + if len(ledger_parent_ids) != args.expected_master_parents: + raise ValueError("master-ledger parent count mismatch") + if ledger_counts["md_completed"] != parent_count: + raise ValueError("master-ledger completed-MD count mismatch") + if ledger_counts["md_a5"] != args.expected_a5_md_parents: + raise ValueError("master-ledger A5-MD count mismatch") + if ledger_counts["outside_md"] != parent_count - args.expected_a5_md_parents: + raise ValueError("master-ledger outside-A5 MD count mismatch") + if ledger_counts["md_qc_pass"] != parent_count: + raise ValueError("master-ledger MD QC count mismatch") + + objective_counts = Counter() + objective_parents = set() + objective_rows = 0 + for row in read_tsv(objective_path): + objective_rows += 1 + objective_parents.add(row["parent_glycorpus_id"]) + if row["objective"] != "md": + continue + eligible = parse_bool(row["eligible_before_partition"]) + objective_counts["md_true"] += int(eligible) + objective_counts["md_train"] += int( + eligible and row["pretraining_partition"] == "pretraining_train" + ) + objective_counts["md_development"] += int( + eligible and row["pretraining_partition"] == "pretraining_development" + ) + if objective_counts["md_true"] != args.expected_a5_md_parents: + raise ValueError("objective partition completed-MD count mismatch") + if objective_counts["md_train"] != args.expected_scaler_parents: + raise ValueError("objective partition training-MD count mismatch") + if objective_counts["md_development"] != 5074: + raise ValueError("objective partition development-MD count mismatch") + + composition = Counter() + for row in parent_rows: + labels = { + label + for label, field in [ + ("single", "single_structure_state_id"), + ("alpha", "alpha_structure_state_id"), + ("beta", "beta_structure_state_id"), + ] + if row[field] + } + if labels == {"single"}: + composition["single"] += 1 + elif labels == {"alpha", "beta"}: + composition["alpha_beta_pair"] += 1 + elif labels == {"alpha"}: + composition["alpha_only"] += 1 + elif labels == {"beta"}: + composition["beta_only"] += 1 + else: + raise ValueError(f"invalid parent-index labels: {labels}") + + audit = { + "schema": "review_md_parent_temporal_20x9_v2_independent_audit", + "status": "PASS", + "created_at_utc": datetime.now(timezone.utc) + .replace(microsecond=0) + .isoformat(), + "state_count": state_count, + "md_parent_count": parent_count, + "master_ledger_parent_count": len(ledger_parent_ids), + "objective_parent_count": len(objective_parents), + "objective_row_count": objective_rows, + "state_rows_unique_across_parent_slots": True, + "state_to_parent_mapping_exact": True, + "standardized_tensor_recalculated": True, + "scaler_parent_count": len(scaler_values), + "scaler_means_recalculated": True, + "scaler_sds_recalculated": True, + "master_ledger_counts": dict(ledger_counts), + "objective_counts": dict(objective_counts), + "parent_state_composition": dict(composition), + "output_hashes_recalculated": { + name: sha256_file(path) for name, path in output_paths.items() + }, + "failure_count": 0, + } + args.output.parent.mkdir(parents=True, exist_ok=True) + temporary = args.output.with_name(f".{args.output.name}.tmp.{os.getpid()}") + with temporary.open("w", encoding="utf-8") as handle: + json.dump(audit, handle, indent=2, sort_keys=True) + handle.write("\n") + os.replace(temporary, args.output) + print(json.dumps(audit, indent=2, sort_keys=True)) + + +if __name__ == "__main__": + main() diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/audit_review_md_temporal_20x6_r2.py b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/audit_review_md_temporal_20x6_r2.py new file mode 100644 index 0000000000000000000000000000000000000000..885053362da08ad1af9f9abeee497eec084493d3 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/audit_review_md_temporal_20x6_r2.py @@ -0,0 +1,302 @@ +#!/usr/bin/env python3 +"""Independently audit the reduced temporal MD 20 x 6 representation.""" + +from __future__ import annotations + +import argparse +import csv +import gzip +import hashlib +import json +import os +from collections import Counter +from datetime import datetime, timezone +from pathlib import Path + +import numpy as np + + +SELECTED = [0, 2, 3, 4, 6, 7] +FEATURES = [ + "radius_of_gyration_mean_A", + "heavy_atom_rmsd_mean_A", + "heavy_atom_rmsd_sd_A", + "sasa_per_residue_mean_nm2", + "terminal_span_per_graph_diameter_residue_mean_A", + "glycosidic_torsion_circular_variance_mean", +] + + +def sha256_file(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as handle: + for block in iter(lambda: handle.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def load_npz(path: Path) -> dict[str, np.ndarray]: + with np.load(path, allow_pickle=False) as values: + return {key: np.asarray(values[key]) for key in values.files} + + +def text_values(values: np.ndarray) -> list[str]: + return [ + value.decode("utf-8") if isinstance(value, bytes) else str(value) + for value in values + ] + + +def read_tsv(path: Path): + opener = gzip.open if path.suffix == ".gz" else Path.open + if path.suffix == ".gz": + handle = opener(path, "rt", encoding="utf-8", newline="") + else: + handle = opener(path, "r", encoding="utf-8", newline="") + with handle: + yield from csv.DictReader(handle, delimiter="\t") + + +def variation(values: np.ndarray) -> dict[str, float | int]: + return { + "count": int(values.size), + "mean": float(np.mean(values)), + "sd": float(np.std(values)), + "p01": float(np.percentile(values, 1)), + "p05": float(np.percentile(values, 5)), + "median": float(np.median(values)), + "p95": float(np.percentile(values, 95)), + "p99": float(np.percentile(values, 99)), + "min": float(np.min(values)), + "max": float(np.max(values)), + } + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--package-dir", type=Path, required=True) + parser.add_argument("--source-package-dir", type=Path, required=True) + parser.add_argument("--raw-state-package", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + + names = { + "model": "review_md_model_ready_temporal_20x6_v2.npz", + "parent_index": "review_md_parent_temporal_20x6_v2_index.tsv.gz", + "ledger": "review_master_modality_ledger_with_md20x6_v2.tsv.gz", + "objective": "review_objective_availability_with_md20x6_v2.tsv.gz", + "readme": "review_md_temporal_20x6_v2_README.md", + "summary": "review_md_parent_temporal_20x6_v2_summary.json", + } + paths = {key: args.package_dir / name for key, name in names.items()} + for path in paths.values(): + if not path.is_file(): + raise FileNotFoundError(path) + summary = json.loads(paths["summary"].read_text(encoding="utf-8")) + if ( + summary.get("schema") != "review_md_parent_temporal_20x6_v2" + or summary.get("status") != "PASS" + ): + raise ValueError("reduced package summary is not PASS") + overlay = summary.get("corrected_overlay") + if not isinstance(overlay, dict): + raise ValueError("reduced package lacks corrected-overlay provenance") + expected_overlay = { + "schema": "review_md_temporal_20x9_v2_charge_corrected_overlay", + "status": "PASS", + "state_count": 47063, + "affected_state_count": 9943, + "unaffected_state_count": 37120, + "unaffected_state_tensor_values_verified_unchanged": True, + "tensor_shape": [47063, 20, 9], + } + for field, value in expected_overlay.items(): + if overlay.get(field) != value: + raise ValueError(f"corrected-overlay provenance mismatch: {field}") + overlay_summary = Path(overlay["summary_path"]) + if sha256_file(overlay_summary) != overlay["summary_sha256"]: + raise ValueError("corrected-overlay summary hash mismatch") + overlay_source = json.loads(overlay_summary.read_text(encoding="utf-8")) + for field, value in expected_overlay.items(): + if overlay_source.get(field) != value: + raise ValueError(f"corrected-overlay source mismatch: {field}") + if summary.get("source_sha256", {}).get( + str(overlay_summary.resolve()) + ) != overlay["summary_sha256"]: + raise ValueError("reduced package source chain omits corrected overlay") + for key in ("model", "parent_index", "ledger", "objective", "readme"): + if summary["output_sha256"].get(names[key]) != sha256_file(paths[key]): + raise ValueError(f"reduced package output hash mismatch: {names[key]}") + + reduced = load_npz(paths["model"]) + source = load_npz( + args.source_package_dir / "review_md_model_ready_temporal_20x9_v1.npz" + ) + raw = load_npz(args.raw_state_package) + if reduced["state_features_z"].shape != (47063, 20, 6): + raise ValueError("reduced state tensor shape mismatch") + if reduced["state_feature_mask"].shape != (47063, 20, 6): + raise ValueError("reduced state mask shape mismatch") + if text_values(reduced["feature_names"]) != FEATURES: + raise ValueError("reduced feature names mismatch") + if reduced["source_feature_indices"].tolist() != SELECTED: + raise ValueError("source feature index provenance mismatch") + if not np.array_equal( + reduced["state_features_z"], source["state_features_z"][:, :, SELECTED] + ): + raise ValueError("reduced tensor is not an exact source-channel selection") + if not np.array_equal( + reduced["state_feature_mask"], + source["state_feature_mask"][:, :, SELECTED], + ): + raise ValueError("reduced mask is not an exact source-channel selection") + + mapping_keys = [ + "state_parent_row_index", + "parent_child_state_row_index", + "parent_child_present_mask", + "campaign_index", + "child_slot_names", + "window_start_ps", + "window_end_ps", + ] + for key in mapping_keys: + if not np.array_equal(reduced[key], source[key]): + raise ValueError(f"mapping or timing array changed during reduction: {key}") + if reduced["parent_child_state_row_index"].shape != (30088, 2): + raise ValueError("parent child-row shape mismatch") + + raw_features = np.asarray(raw["features"], dtype=np.float64)[:, :, SELECTED] + raw_mask = np.asarray(raw["feature_mask"], dtype=np.uint8)[:, :, SELECTED] + recalculated = ( + raw_features - reduced["feature_mean"][None, None, :] + ) / reduced["feature_sd"][None, None, :] + recalculated = np.where(raw_mask == 1, recalculated, 0.0) + if not np.allclose( + recalculated, + reduced["state_features_z"], + rtol=1e-5, + atol=1e-6, + ): + raise ValueError("reduced standardization does not reproduce from raw values") + if int(np.sum(raw_mask)) != 5571760: + raise ValueError("valid scalar measurement count mismatch") + + recalculated_variation = {} + for index, name in enumerate(FEATURES): + valid = raw_mask[:, :, index] == 1 + recalculated_variation[name] = variation(raw_features[:, :, index][valid]) + for statistic, value in recalculated_variation[name].items(): + expected = summary["feature_variation"][name][statistic] + if statistic == "count": + if value != expected: + raise ValueError(f"variation count mismatch: {name}") + elif not np.isclose(value, expected, rtol=1e-7, atol=1e-9): + raise ValueError(f"variation statistic mismatch: {name} {statistic}") + + parent_rows = list(read_tsv(paths["parent_index"])) + if len(parent_rows) != 30088: + raise ValueError("parent index row count mismatch") + composition = Counter() + for parent_row, row in enumerate(parent_rows): + if int(row["md_parent_row_index"]) != parent_row: + raise ValueError("parent index ordering mismatch") + labels = { + label + for label, field in [ + ("single", "single_structure_state_id"), + ("alpha", "alpha_structure_state_id"), + ("beta", "beta_structure_state_id"), + ] + if row[field] + } + if labels == {"single"}: + composition["single"] += 1 + elif labels == {"alpha", "beta"}: + composition["alpha_beta_pair"] += 1 + elif labels == {"alpha"}: + composition["alpha_only"] += 1 + elif labels == {"beta"}: + composition["beta_only"] += 1 + else: + raise ValueError(f"invalid parent state labels: {labels}") + if dict(composition) != summary["parent_state_composition"]: + raise ValueError("parent-state composition mismatch") + + ledger_counts = Counter() + ledger_rows = 0 + for row in read_tsv(paths["ledger"]): + ledger_rows += 1 + if row["has_md_completed"] == "1": + ledger_counts["md"] += 1 + if row["md_representation_schema"] != "review_md_temporal_20x6_v2": + raise ValueError("MD ledger row lacks reduced representation schema") + if row["md_features_per_window"] != "6": + raise ValueError("MD ledger row has wrong feature count") + if row["md_temporal_values_per_child_state"] != "120": + raise ValueError("MD ledger row has wrong temporal value count") + if Path(row["md_feature_package_path"]).name != names["model"]: + raise ValueError("MD ledger row points to wrong model package") + if ledger_rows != summary["master_ledger_parent_count"]: + raise ValueError("master ledger row count mismatch") + if ledger_counts["md"] != 30088: + raise ValueError("master ledger MD count mismatch") + + objective_counts = Counter() + objective_rows = 0 + for row in read_tsv(paths["objective"]): + objective_rows += 1 + if row["objective"] == "md": + objective_counts["eligible"] += int( + row["eligible_before_partition"].lower() == "true" + ) + objective_counts["train"] += int( + row["objective_train_contributor"].lower() == "true" + ) + objective_counts["development"] += int( + row["objective_development_contributor"].lower() == "true" + ) + expected_objectives = {"eligible": 29696, "train": 22914, "development": 5074} + if dict(objective_counts) != expected_objectives: + raise ValueError(f"objective counts mismatch: {dict(objective_counts)}") + if objective_rows != summary["objective_row_count"]: + raise ValueError("objective row count mismatch") + + audit = { + "schema": "review_md_temporal_20x6_v2_independent_audit", + "status": "PASS", + "created_at_utc": datetime.now(timezone.utc) + .replace(microsecond=0) + .isoformat(), + "state_tensor_shape": [47063, 20, 6], + "state_count": 47063, + "md_parent_count": 30088, + "training_parent_count": 22914, + "valid_scalar_measurement_count": 5571760, + "source_channels_selected_exactly": True, + "feature_masks_selected_exactly": True, + "standardization_recalculated": True, + "mapping_and_timing_arrays_unchanged": True, + "variation_statistics_recalculated": True, + "parent_state_composition": dict(composition), + "ledger_md_count": ledger_counts["md"], + "objective_counts": dict(objective_counts), + "recalculated_variation": recalculated_variation, + "output_sha256_recalculated": { + names[key]: sha256_file(paths[key]) + for key in ("model", "parent_index", "ledger", "objective", "readme") + }, + "failure_count": 0, + } + args.output.parent.mkdir(parents=True, exist_ok=True) + temporary = args.output.with_name(f".{args.output.name}.tmp.{os.getpid()}") + temporary.write_text( + json.dumps(audit, indent=2, sort_keys=True) + "\n", + encoding="utf-8", + ) + os.replace(temporary, args.output) + print(json.dumps(audit, indent=2, sort_keys=True)) + + +if __name__ == "__main__": + main() diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/build_review_md_parent_feature_package.py b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/build_review_md_parent_feature_package.py new file mode 100644 index 0000000000000000000000000000000000000000..b433bb5c6cb9238fa21a5f2a01a7022462463e14 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/build_review_md_parent_feature_package.py @@ -0,0 +1,911 @@ +#!/usr/bin/env python3 +"""Build the parent map, scaler, and master ledger for temporal MD features.""" + +from __future__ import annotations + +import argparse +import csv +import gzip +import hashlib +import json +import os +import shutil +from collections import defaultdict +from datetime import datetime, timezone +from pathlib import Path +from typing import Iterable, Iterator + +import numpy as np + + +SCHEMA = "review_md_parent_temporal_20x9_v2" +OBJECTIVES = ("sequence", "topology", "ms", "static", "md") +CHILD_SLOT_NAMES = ("alpha_or_single", "beta") + + +def utc_now() -> str: + return datetime.now(timezone.utc).replace(microsecond=0).isoformat() + + +def sha256_file(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as handle: + for block in iter(lambda: handle.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def open_text(path: Path, mode: str = "rt"): + if path.suffix == ".gz": + return gzip.open(path, mode, encoding="utf-8", newline="") + return path.open(mode, encoding="utf-8", newline="") + + +def read_delimited(path: Path, delimiter: str = "\t") -> Iterator[dict[str, str]]: + with open_text(path) as handle: + yield from csv.DictReader(handle, delimiter=delimiter) + + +def parse_bool(value: str | bool) -> bool: + if isinstance(value, bool): + return value + normalized = value.strip().lower() + if normalized in {"true", "1", "yes"}: + return True + if normalized in {"false", "0", "no", ""}: + return False + raise ValueError(f"invalid Boolean value: {value!r}") + + +def bool_text(value: bool) -> str: + return "True" if value else "False" + + +def atomic_write_json(path: Path, value: object) -> None: + temporary = path.with_name(f".{path.name}.tmp.{os.getpid()}") + with temporary.open("w", encoding="utf-8") as handle: + json.dump(value, handle, indent=2, sort_keys=True) + handle.write("\n") + os.replace(temporary, path) + + +def atomic_write_npz(path: Path, **arrays: np.ndarray) -> None: + temporary = path.with_name(f".{path.name}.tmp.{os.getpid()}") + with temporary.open("wb") as handle: + np.savez_compressed(handle, **arrays) + os.replace(temporary, path) + + +def write_tsv_gz( + path: Path, + rows: Iterable[dict[str, object]], + fieldnames: list[str], +) -> None: + temporary = path.with_name(f".{path.name}.tmp.{os.getpid()}") + with gzip.open(temporary, "wt", encoding="utf-8", newline="") as handle: + writer = csv.DictWriter( + handle, + delimiter="\t", + fieldnames=fieldnames, + lineterminator="\n", + extrasaction="raise", + ) + writer.writeheader() + for row in rows: + writer.writerow(row) + os.replace(temporary, path) + + +def load_state_inputs( + package_path: Path, + index_path: Path, + summary_path: Path, +) -> tuple[dict[str, np.ndarray], list[dict[str, str]], dict[str, object]]: + summary = json.loads(summary_path.read_text(encoding="utf-8")) + if summary.get("status") != "PASS": + raise ValueError("state feature summary is not PASS") + if summary.get("package_sha256") != sha256_file(package_path): + raise ValueError("state feature package hash does not match its summary") + if summary.get("index_sha256") != sha256_file(index_path): + raise ValueError("state feature index hash does not match its summary") + + with np.load(package_path, allow_pickle=False) as values: + arrays = {key: np.asarray(values[key]) for key in values.files} + required = { + "campaign_index", + "features", + "feature_mask", + "qc_dominant_conformer_occupancy", + "feature_names", + "window_start_ps", + "window_end_ps", + } + missing = required - set(arrays) + if missing: + raise ValueError(f"state feature package is missing arrays: {sorted(missing)}") + + rows = list(read_delimited(index_path)) + features = np.asarray(arrays["features"], dtype=np.float32) + masks = np.asarray(arrays["feature_mask"], dtype=np.uint8) + campaigns = np.asarray(arrays["campaign_index"], dtype=np.int32) + if features.ndim != 3 or features.shape[1:] != (20, 9): + raise ValueError(f"unexpected state feature shape: {features.shape}") + if masks.shape != features.shape or len(rows) != len(features): + raise ValueError("state package, mask, and index row counts do not agree") + if not np.all(np.isfinite(features)) or not np.all(np.isin(masks, (0, 1))): + raise ValueError("state features or masks contain invalid values") + for expected_row, row in enumerate(rows): + if int(row["state_row_index"]) != expected_row: + raise ValueError("state index is not ordered by state_row_index") + if int(row["campaign_index"]) != int(campaigns[expected_row]): + raise ValueError("campaign index differs between package and index") + return arrays, rows, summary + + +def load_manifest( + path: Path, +) -> tuple[dict[int, dict[str, str]], dict[str, str]]: + by_campaign: dict[int, dict[str, str]] = {} + parent_wurcs: dict[str, set[str]] = defaultdict(set) + for row in read_delimited(path): + campaign = int(row["campaign_index"]) + if campaign in by_campaign: + raise ValueError(f"duplicate campaign index in MD manifest: {campaign}") + by_campaign[campaign] = row + parent = row["parent_glycorpus_id"] + parent_wurcs[parent] + canonical_wurcs = row["canonical_wurcs"].strip() + if canonical_wurcs: + parent_wurcs[parent].add(canonical_wurcs) + conflicts = { + parent: values for parent, values in parent_wurcs.items() if len(values) > 1 + } + if conflicts: + raise ValueError(f"conflicting canonical WURCS for {len(conflicts)} MD parents") + canonical = { + parent: next(iter(values)) if values else "" + for parent, values in parent_wurcs.items() + } + return by_campaign, canonical + + +def load_parent_partition(path: Path) -> dict[str, dict[str, str]]: + parents: dict[str, dict[str, str]] = {} + for row in read_delimited(path): + parent = row["parent_glycorpus_id"] + if parent in parents: + raise ValueError(f"duplicate parent partition row: {parent}") + parents[parent] = row + return parents + + +def load_objective_availability( + path: Path, +) -> dict[str, dict[str, bool]]: + availability: dict[str, dict[str, bool]] = defaultdict(dict) + for row in read_delimited(path): + parent = row["parent_glycorpus_id"] + objective = row["objective"] + if objective not in OBJECTIVES: + raise ValueError(f"unexpected objective: {objective}") + if objective in availability[parent]: + raise ValueError(f"duplicate objective row: {parent} {objective}") + availability[parent][objective] = parse_bool(row["eligible_before_partition"]) + incomplete = { + parent: sorted(set(OBJECTIVES) - set(values)) + for parent, values in availability.items() + if set(values) != set(OBJECTIVES) + } + if incomplete: + raise ValueError(f"incomplete objective rows for {len(incomplete)} parents") + return dict(availability) + + +def load_static_states(path: Path) -> dict[str, list[str]]: + states: dict[str, list[str]] = defaultdict(list) + for row in read_delimited(path): + states[row["parent_glycorpus_id"]].append( + row["canonical_structure_state_id"] + ) + for parent in states: + states[parent].sort() + return dict(states) + + +def load_outside_review_context( + path: Path, + outside_parents: set[str], +) -> dict[str, dict[str, object]]: + context: dict[str, dict[str, object]] = defaultdict( + lambda: { + "roles": set(), + "keeps": set(), + "holdouts": set(), + "reasons": set(), + "has_sequence": False, + "has_ms": False, + "has_structure": False, + "wurcs": set(), + } + ) + if not outside_parents: + return {} + with open_text(path) as handle: + for row in csv.DictReader(handle): + parent = row["glycorpus_id"] + if parent not in outside_parents: + continue + values = context[parent] + values["roles"].add(row["review_v2_final_role"]) + values["keeps"].add(parse_bool(row["review_v2_main_training_keep"])) + values["holdouts"].add(parse_bool(row["review_v2_holdout"])) + values["reasons"].add(row["review_v2_rule_reason"]) + values["has_sequence"] = values["has_sequence"] or parse_bool( + row["has_sequence"] + ) + values["has_ms"] = values["has_ms"] or parse_bool(row["has_ms"]) + values["has_structure"] = values["has_structure"] or parse_bool( + row["has_structure"] + ) + wurcs = row.get("wurcs", "").strip() + if wurcs: + values["wurcs"].add(wurcs) + missing = outside_parents - set(context) + if missing: + raise ValueError(f"{len(missing)} outside MD parents are absent from review index") + for parent, values in context.items(): + if values["roles"] != {"held_out_or_excluded_record"}: + raise ValueError(f"outside parent has unexpected review role: {parent}") + if values["keeps"] != {False} or values["holdouts"] != {True}: + raise ValueError(f"outside parent is not consistently held out: {parent}") + if len(values["wurcs"]) != 1: + raise ValueError(f"outside parent lacks one canonical WURCS: {parent}") + return dict(context) + + +def build_parent_state_map( + state_rows: list[dict[str, str]], +) -> tuple[ + list[str], + np.ndarray, + np.ndarray, + np.ndarray, + dict[str, dict[str, object]], +]: + grouped: dict[str, list[tuple[int, str, str]]] = defaultdict(list) + for row_index, row in enumerate(state_rows): + grouped[row["parent_glycorpus_id"]].append( + (row_index, row["state_label"].lower(), row["structure_state_id"]) + ) + parent_ids = sorted(grouped) + child_rows = np.full((len(parent_ids), 2), -1, dtype=np.int32) + child_mask = np.zeros((len(parent_ids), 2), dtype=np.uint8) + state_parent_rows = np.full(len(state_rows), -1, dtype=np.int32) + details: dict[str, dict[str, object]] = {} + for parent_row, parent in enumerate(parent_ids): + children = grouped[parent] + labels = [label for _, label, _ in children] + if len(children) > 2 or len(labels) != len(set(labels)): + raise ValueError(f"invalid child-state multiplicity for {parent}: {labels}") + if any(label not in {"single", "alpha", "beta"} for label in labels): + raise ValueError(f"unexpected state label for {parent}: {labels}") + if "single" in labels and len(labels) != 1: + raise ValueError(f"single state co-occurs with anomeric child for {parent}") + + ordered_children = sorted( + children, + key=lambda child: 0 if child[1] in {"single", "alpha"} else 1, + ) + for state_row, label, _ in ordered_children: + slot = 0 if label in {"single", "alpha"} else 1 + child_rows[parent_row, slot] = state_row + child_mask[parent_row, slot] = 1 + state_parent_rows[state_row] = parent_row + + label_set = set(labels) + if label_set == {"single"}: + reason = "single_reviewed_state" + policy = "single_child_embedding" + elif label_set == {"alpha", "beta"}: + reason = "unresolved_alpha_beta_children_preserved" + policy = "equal_mean_of_child_embeddings" + elif label_set == {"alpha"}: + reason = "alpha_only_incomplete_sibling" + policy = "available_child_embedding_flagged_incomplete" + elif label_set == {"beta"}: + reason = "beta_only_incomplete_sibling" + policy = "available_child_embedding_flagged_incomplete" + else: + raise ValueError(f"unsupported child-state set for {parent}: {label_set}") + details[parent] = { + "parent_row_index": parent_row, + "children": ordered_children, + "labels": label_set, + "selection_reason": reason, + "aggregation_policy": policy, + } + if np.any(state_parent_rows < 0): + raise ValueError("one or more states were not assigned to a parent") + return parent_ids, child_rows, child_mask, state_parent_rows, details + + +def fit_parent_balanced_scaler( + features: np.ndarray, + masks: np.ndarray, + parent_ids: list[str], + child_rows: np.ndarray, + parent_partition: dict[str, dict[str, str]], +) -> tuple[np.ndarray, np.ndarray, int, np.ndarray, np.ndarray]: + fit_parent_rows = [ + parent_row + for parent_row, parent in enumerate(parent_ids) + if parent in parent_partition + and parent_partition[parent]["pretraining_partition"] == "pretraining_train" + and parse_bool(parent_partition[parent]["model_pretraining_contributor"]) + ] + if not fit_parent_rows: + raise ValueError("no pretraining-train MD parents are available for scaling") + parent_values = np.zeros( + (len(fit_parent_rows), features.shape[1], features.shape[2]), + dtype=np.float64, + ) + parent_masks = np.zeros(parent_values.shape, dtype=np.uint8) + for output_row, parent_row in enumerate(fit_parent_rows): + state_indexes = child_rows[parent_row] + state_indexes = state_indexes[state_indexes >= 0] + child_features = features[state_indexes].astype(np.float64) + child_masks = masks[state_indexes].astype(np.float64) + denominator = np.sum(child_masks, axis=0) + valid = denominator > 0 + parent_values[output_row][valid] = ( + np.sum(child_features * child_masks, axis=0)[valid] / denominator[valid] + ) + parent_masks[output_row][valid] = 1 + + means = np.zeros(features.shape[2], dtype=np.float64) + standard_deviations = np.ones(features.shape[2], dtype=np.float64) + check_means = np.zeros(features.shape[2], dtype=np.float64) + check_sds = np.ones(features.shape[2], dtype=np.float64) + for feature_index in range(features.shape[2]): + valid = parent_masks[:, :, feature_index] == 1 + values = parent_values[:, :, feature_index][valid] + if len(values) < 2: + raise ValueError(f"too few scaler values for feature {feature_index}") + means[feature_index] = np.mean(values) + standard_deviations[feature_index] = np.std(values) + if not np.isfinite(standard_deviations[feature_index]) or ( + standard_deviations[feature_index] <= 1e-12 + ): + raise ValueError(f"degenerate scaler feature: {feature_index}") + scaled = (values - means[feature_index]) / standard_deviations[feature_index] + check_means[feature_index] = np.mean(scaled) + check_sds[feature_index] = np.std(scaled) + return ( + means.astype(np.float32), + standard_deviations.astype(np.float32), + len(fit_parent_rows), + check_means.astype(np.float32), + check_sds.astype(np.float32), + ) + + +def update_objective_partition( + source_path: Path, + output_path: Path, + actual_md_parents: set[str], + parent_row_by_id: dict[str, int], +) -> dict[str, int]: + with open_text(source_path) as source: + reader = csv.DictReader(source, delimiter="\t") + if reader.fieldnames is None: + raise ValueError("objective partition has no header") + fieldnames = list(reader.fieldnames) + [ + "review_md20x9_actual_completed", + "review_md20x9_parent_row_index", + "review_availability_source", + ] + temporary = output_path.with_name(f".{output_path.name}.tmp.{os.getpid()}") + counts = {"md_true": 0, "md_train": 0, "md_development": 0} + with gzip.open( + temporary, "wt", encoding="utf-8", newline="" + ) as destination: + writer = csv.DictWriter( + destination, + delimiter="\t", + fieldnames=fieldnames, + lineterminator="\n", + ) + writer.writeheader() + for row in reader: + parent = row["parent_glycorpus_id"] + actual = parent in actual_md_parents + if row["objective"] == "md": + row["eligible_before_partition"] = bool_text(actual) + train = actual and row["pretraining_partition"] == "pretraining_train" + development = ( + actual + and row["pretraining_partition"] == "pretraining_development" + ) + row["objective_train_contributor"] = bool_text(train) + row["objective_development_contributor"] = bool_text(development) + counts["md_true"] += int(actual) + counts["md_train"] += int(train) + counts["md_development"] += int(development) + source_label = "completed_20ns_temporal_20x9_v1" + else: + source_label = "preserved_from_certified_objective_partition" + row["review_md20x9_actual_completed"] = bool_text(actual) + row["review_md20x9_parent_row_index"] = ( + parent_row_by_id.get(parent, "") + ) + row["review_availability_source"] = source_label + writer.writerow(row) + os.replace(temporary, output_path) + return counts + + +def build_package(args: argparse.Namespace) -> dict[str, object]: + source_paths = [ + args.state_package, + args.state_index, + args.state_summary, + args.md_manifest, + args.parent_partition, + args.objective_partition, + args.static_state_partition, + args.review_index, + args.feature_config, + ] + for path in source_paths: + if not path.is_file(): + raise FileNotFoundError(path) + + arrays, state_rows, state_summary = load_state_inputs( + args.state_package, args.state_index, args.state_summary + ) + by_campaign, manifest_wurcs = load_manifest(args.md_manifest) + if len(by_campaign) != len(state_rows): + raise ValueError("MD manifest and state feature row counts differ") + for row in state_rows: + campaign = int(row["campaign_index"]) + manifest_row = by_campaign.get(campaign) + if manifest_row is None: + raise ValueError(f"state campaign is absent from manifest: {campaign}") + identity = ( + row["structure_state_id"], + row["parent_glycorpus_id"], + row["state_label"], + ) + manifest_identity = ( + manifest_row["structure_state_id"], + manifest_row["parent_glycorpus_id"], + manifest_row["state_label"], + ) + if identity != manifest_identity: + raise ValueError(f"state identity mismatch for campaign {campaign}") + + features = np.asarray(arrays["features"], dtype=np.float32) + masks = np.asarray(arrays["feature_mask"], dtype=np.uint8) + ( + parent_ids, + child_rows, + child_mask, + state_parent_rows, + parent_details, + ) = build_parent_state_map(state_rows) + if args.expected_state_count and len(state_rows) != args.expected_state_count: + raise ValueError( + f"state count {len(state_rows)} != expected {args.expected_state_count}" + ) + if args.expected_parent_count and len(parent_ids) != args.expected_parent_count: + raise ValueError( + f"parent count {len(parent_ids)} != expected {args.expected_parent_count}" + ) + + parent_partition = load_parent_partition(args.parent_partition) + objective_availability = load_objective_availability(args.objective_partition) + if set(parent_partition) != set(objective_availability): + raise ValueError("parent and objective partition parent sets differ") + md_parent_set = set(parent_ids) + outside_parents = md_parent_set - set(parent_partition) + outside_context = load_outside_review_context(args.review_index, outside_parents) + static_states = load_static_states(args.static_state_partition) + resolved_wurcs: dict[str, str] = {} + blank_manifest_wurcs_count = 0 + for parent in parent_ids: + manifest_value = manifest_wurcs[parent] + if not manifest_value: + blank_manifest_wurcs_count += 1 + if parent in parent_partition: + partition_value = parent_partition[parent]["canonical_wurcs"] + if manifest_value and partition_value != manifest_value: + raise ValueError(f"nonblank MD and partition WURCS differ for {parent}") + resolved_wurcs[parent] = partition_value + else: + context_value = next(iter(outside_context[parent]["wurcs"])) + if manifest_value and context_value != manifest_value: + raise ValueError(f"nonblank MD and review-index WURCS differ for {parent}") + resolved_wurcs[parent] = manifest_value or context_value + + means, standard_deviations, scaler_parent_count, check_means, check_sds = ( + fit_parent_balanced_scaler( + features, + masks, + parent_ids, + child_rows, + parent_partition, + ) + ) + if ( + args.expected_scaler_parent_count + and scaler_parent_count != args.expected_scaler_parent_count + ): + raise ValueError( + f"scaler parent count {scaler_parent_count} != expected " + f"{args.expected_scaler_parent_count}" + ) + features_z = (features - means[None, None, :]) / standard_deviations[ + None, None, : + ] + features_z = np.where(masks == 1, features_z, 0.0).astype(np.float32) + if not np.all(np.isfinite(features_z)): + raise ValueError("standardized features contain non-finite values") + if not np.all(features_z[masks == 0] == 0): + raise ValueError("masked standardized features are not zero") + + package_dir = args.output_dir / "package" + model_name = "review_md_model_ready_temporal_20x9_v1.npz" + parent_index_name = "review_md_parent_temporal_20x9_v2_index.tsv.gz" + ledger_name = "review_master_modality_ledger_with_md20x9_v2.tsv.gz" + objective_name = "review_a5_objective_availability_with_md20x9_v2.tsv.gz" + readme_name = "review_md_temporal_20x9_v2_README.md" + summary_name = "review_md_parent_temporal_20x9_v2_summary.json" + expected_outputs = [ + model_name, + parent_index_name, + ledger_name, + objective_name, + readme_name, + summary_name, + ] + if package_dir.exists(): + summary_path = package_dir / summary_name + if summary_path.is_file(): + existing = json.loads(summary_path.read_text(encoding="utf-8")) + hashes = existing.get("output_sha256", {}) + if existing.get("status") == "PASS" and all( + (package_dir / name).is_file() + and hashes.get(name) == sha256_file(package_dir / name) + for name in expected_outputs + if name != summary_name + ): + return existing + raise FileExistsError("existing parent feature package is incomplete or invalid") + + staging = args.output_dir / f"package.tmp.{os.getpid()}" + if staging.exists(): + raise FileExistsError(staging) + staging.mkdir(parents=True) + model_path = staging / model_name + parent_index_path = staging / parent_index_name + ledger_path = staging / ledger_name + objective_path = staging / objective_name + readme_path = staging / readme_name + summary_path = staging / summary_name + + atomic_write_npz( + model_path, + state_features_z=features_z, + state_feature_mask=masks.astype(np.uint8), + state_parent_row_index=state_parent_rows.astype(np.int32), + parent_child_state_row_index=child_rows.astype(np.int32), + parent_child_present_mask=child_mask.astype(np.uint8), + campaign_index=np.asarray(arrays["campaign_index"], dtype=np.int32), + qc_dominant_conformer_occupancy=np.asarray( + arrays["qc_dominant_conformer_occupancy"], dtype=np.float32 + ), + feature_mean=means, + feature_sd=standard_deviations, + feature_names=np.asarray(arrays["feature_names"]), + child_slot_names=np.asarray(CHILD_SLOT_NAMES), + window_start_ps=np.asarray(arrays["window_start_ps"], dtype=np.float32), + window_end_ps=np.asarray(arrays["window_end_ps"], dtype=np.float32), + ) + + parent_index_rows = [] + for parent in parent_ids: + detail = parent_details[parent] + child_values = detail["children"] + row_by_label = {label: row for row, label, _ in child_values} + id_by_label = {label: state_id for _, label, state_id in child_values} + parent_index_rows.append( + { + "md_parent_row_index": detail["parent_row_index"], + "parent_glycorpus_id": parent, + "canonical_wurcs": resolved_wurcs[parent], + "md_child_state_count": len(child_values), + "single_state_row_index": row_by_label.get("single", ""), + "single_structure_state_id": id_by_label.get("single", ""), + "alpha_state_row_index": row_by_label.get("alpha", ""), + "alpha_structure_state_id": id_by_label.get("alpha", ""), + "beta_state_row_index": row_by_label.get("beta", ""), + "beta_structure_state_id": id_by_label.get("beta", ""), + "alpha_available": int("alpha" in detail["labels"]), + "beta_available": int("beta" in detail["labels"]), + "single_available": int("single" in detail["labels"]), + "state_selection_reason": detail["selection_reason"], + "parent_aggregation_policy": detail["aggregation_policy"], + "md_qc_status": "PASS", + } + ) + write_tsv_gz( + parent_index_path, + parent_index_rows, + list(parent_index_rows[0]), + ) + + parent_row_by_id = { + parent: int(parent_details[parent]["parent_row_index"]) for parent in parent_ids + } + updated_objective_counts = update_objective_partition( + args.objective_partition, + objective_path, + md_parent_set & set(parent_partition), + parent_row_by_id, + ) + + master_parent_ids = sorted(set(parent_partition) | outside_parents) + published_model_path = str((package_dir / model_name).resolve()) + master_rows = [] + for parent in master_parent_ids: + is_partition_parent = parent in parent_partition + partition_row = parent_partition.get(parent, {}) + availability = objective_availability.get( + parent, {objective: False for objective in OBJECTIVES} + ) + detail = parent_details.get(parent) + outside = outside_context.get(parent) + if is_partition_parent: + canonical_wurcs = partition_row["canonical_wurcs"] + source_has_sequence = availability["sequence"] + source_has_ms = availability["ms"] + source_has_structure = availability["static"] + outside_roles = "" + outside_reasons = "" + else: + canonical_wurcs = resolved_wurcs[parent] + source_has_sequence = bool(outside["has_sequence"]) + source_has_ms = bool(outside["has_ms"]) + source_has_structure = bool(outside["has_structure"]) + outside_roles = ";".join(sorted(outside["roles"])) + outside_reasons = ";".join(sorted(outside["reasons"])) + state_children = detail["children"] if detail else [] + labels = detail["labels"] if detail else set() + state_ids = [state_id for _, _, state_id in state_children] + state_indexes = [str(row) for row, _, _ in state_children] + master_rows.append( + { + "parent_glycorpus_id": parent, + "canonical_wurcs": canonical_wurcs, + "parent_join_key": parent, + "sequence_key": parent if availability["sequence"] else "", + "topology_key": parent if availability["topology"] else "", + "ms_parent_key": parent if availability["ms"] else "", + "in_a5_parent_partition": int(is_partition_parent), + "data_role": partition_row.get( + "pretraining_partition", "outside_a5_parent_partition" + ), + "a5_excluded": partition_row.get("a5_excluded", "True"), + "a5_exclusion_reason": partition_row.get( + "a5_exclusion_reason", "review_v2_held_out_or_excluded_record" + ), + "model_pretraining_contributor": partition_row.get( + "model_pretraining_contributor", "False" + ), + "has_sequence": int(availability["sequence"]), + "has_topology": int(availability["topology"]), + "has_ms": int(availability["ms"]), + "has_static_3d": int(availability["static"]), + "has_md": int(parent in md_parent_set), + "has_md_completed": int(parent in md_parent_set), + "has_md_a5_objective": int( + parent in md_parent_set and is_partition_parent + ), + "md_pretraining_train_contributor": int( + parent in md_parent_set + and partition_row.get("pretraining_partition") + == "pretraining_train" + and parse_bool( + partition_row.get("model_pretraining_contributor", "False") + ) + ), + "md_pretraining_development_contributor": int( + parent in md_parent_set + and partition_row.get("pretraining_partition") + == "pretraining_development" + ), + "md_parent_row_index": ( + detail["parent_row_index"] if detail else "" + ), + "md_state_ids": ";".join(state_ids), + "md_state_row_indices": ";".join(state_indexes), + "md_child_state_count": len(state_children), + "md_single_available": int("single" in labels), + "md_alpha_available": int("alpha" in labels), + "md_beta_available": int("beta" in labels), + "md_qc_status": "PASS" if detail else "", + "md_state_selection_reason": ( + detail["selection_reason"] if detail else "" + ), + "md_parent_aggregation_policy": ( + detail["aggregation_policy"] if detail else "" + ), + "md_feature_package_path": ( + published_model_path if detail else "" + ), + "static_state_ids": ";".join(static_states.get(parent, [])), + "outside_review_roles": outside_roles, + "outside_review_reasons": outside_reasons, + "source_has_sequence": int(source_has_sequence), + "source_has_ms": int(source_has_ms), + "source_has_structure": int(source_has_structure), + } + ) + write_tsv_gz(ledger_path, master_rows, list(master_rows[0])) + + label_counts = defaultdict(int) + policy_counts = defaultdict(int) + for detail in parent_details.values(): + labels = detail["labels"] + if labels == {"single"}: + label_counts["single"] += 1 + elif labels == {"alpha", "beta"}: + label_counts["alpha_beta_pair"] += 1 + elif labels == {"alpha"}: + label_counts["alpha_only"] += 1 + elif labels == {"beta"}: + label_counts["beta_only"] += 1 + policy_counts[str(detail["aggregation_policy"])] += 1 + + readme_text = f"""# Reviewed MD temporal feature package + +## Scope + +- Completed structure states: {len(state_rows):,} +- Parent glycans with MD: {len(parent_ids):,} +- Ordered representation per state: 20 one-nanosecond windows by 9 descriptors +- Scaler fit: {scaler_parent_count:,} eligible pretraining-train parents + +## Nine descriptors + +1. Radius of gyration mean (A) +2. Radius of gyration population SD (A) +3. Aligned heavy-atom RMSD mean (A) +4. RMSD population SD (A) +5. SASA per residue mean (nm2) +6. Normalized asphericity mean +7. Terminal span per graph-diameter residue mean (A) +8. Mean glycosidic torsion circular variance +9. Mean glycosidic torsion mode occupancy + +The first 0 ps frame is the RMSD reference and is excluded from aggregation. +Each window contains the next 50 retained frames, or 1 ns at 20 ps spacing. +Masked monomer-only fields are zero after standardization and remain identified +by the feature mask. + +## Parent handling + +Single states are encoded once. Alpha and beta children are encoded separately +and their child embeddings are averaged equally at the parent level. Raw +coordinates, torsion angles, and discrete structure codes are never averaged. +Incomplete alpha-only or beta-only parents remain flagged in the parent index. + +## Files + +- `{model_name}`: standardized state tensors, masks, state-to-parent rows, and + fixed parent child slots +- `{parent_index_name}`: child-state identities and parent pooling policy +- `{ledger_name}`: one-row-per-parent modality and partition map +- `{objective_name}`: review sibling of the objective partition with MD + availability updated from completed 20 ns production + +The 392 MD parents outside the A5 parent partition remain in the scientific +package and master ledger, but are not made A5 training contributors. Submitted +artifacts were not modified. + +## Claim boundary + +These are ordered short-timescale descriptors from one 20 ns trajectory per +state. They are not claimed to be converged equilibrium conformer populations. +""" + readme_path.write_text(readme_text, encoding="utf-8") + + output_hashes = { + path.name: sha256_file(path) + for path in [ + model_path, + parent_index_path, + ledger_path, + objective_path, + readme_path, + ] + } + summary = { + "schema": SCHEMA, + "status": "PASS", + "created_at_utc": utc_now(), + "state_count": len(state_rows), + "md_parent_count": len(parent_ids), + "master_ledger_parent_count": len(master_parent_ids), + "a5_parent_partition_count": len(parent_partition), + "outside_a5_md_parent_count": len(outside_parents), + "outside_a5_context_certified_held_out_count": len(outside_context), + "md_manifest_blank_canonical_wurcs_parent_count": ( + blank_manifest_wurcs_count + ), + "canonical_wurcs_blank_fallback_count": blank_manifest_wurcs_count, + "canonical_wurcs_nonblank_conflict_count": 0, + "state_tensor_shape": list(features.shape), + "model_ready_tensor_shape": list(features_z.shape), + "feature_names": [str(value) for value in arrays["feature_names"]], + "feature_mean": [float(value) for value in means], + "feature_sd": [float(value) for value in standard_deviations], + "scaler_fit_parent_count": scaler_parent_count, + "scaler_fit_policy": ( + "pretraining_train_parents_equal_parent_weight_then_all_20_windows" + ), + "scaler_standardized_check_mean": [float(value) for value in check_means], + "scaler_standardized_check_sd": [float(value) for value in check_sds], + "parent_state_composition": dict(sorted(label_counts.items())), + "parent_aggregation_policy_counts": dict(sorted(policy_counts.items())), + "updated_objective_counts": updated_objective_counts, + "source_state_summary_status": state_summary["status"], + "source_sha256": { + path.name: sha256_file(path) for path in source_paths + }, + "output_sha256": output_hashes, + "child_slot_names": list(CHILD_SLOT_NAMES), + "masked_standardized_fill": 0.0, + "official_submitted_artifacts_modified": False, + "claim_boundary": ( + "ordered_short_timescale_sampled_descriptors_not_equilibrium_populations" + ), + } + atomic_write_json(summary_path, summary) + args.output_dir.mkdir(parents=True, exist_ok=True) + os.replace(staging, package_dir) + published_summary = package_dir / summary_name + if not published_summary.is_file(): + raise ValueError("parent feature package publication failed") + for name, expected_hash in output_hashes.items(): + if sha256_file(package_dir / name) != expected_hash: + raise ValueError(f"post-publication hash mismatch: {name}") + return summary + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--state-package", type=Path, required=True) + parser.add_argument("--state-index", type=Path, required=True) + parser.add_argument("--state-summary", type=Path, required=True) + parser.add_argument("--md-manifest", type=Path, required=True) + parser.add_argument("--parent-partition", type=Path, required=True) + parser.add_argument("--objective-partition", type=Path, required=True) + parser.add_argument("--static-state-partition", type=Path, required=True) + parser.add_argument("--review-index", type=Path, required=True) + parser.add_argument("--feature-config", type=Path, required=True) + parser.add_argument("--output-dir", type=Path, required=True) + parser.add_argument("--expected-state-count", type=int) + parser.add_argument("--expected-parent-count", type=int) + parser.add_argument("--expected-scaler-parent-count", type=int) + return parser + + +def main() -> None: + args = build_parser().parse_args() + summary = build_package(args) + print(json.dumps(summary, indent=2, sort_keys=True)) + + +if __name__ == "__main__": + main() diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/build_review_md_temporal_20x6_r2.py b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/build_review_md_temporal_20x6_r2.py new file mode 100644 index 0000000000000000000000000000000000000000..04ed65224621cf2796b82157ca529708d9edb240 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/build_review_md_temporal_20x6_r2.py @@ -0,0 +1,523 @@ +#!/usr/bin/env python3 +"""Reduce the corrected temporal MD package from nine to six descriptors.""" + +from __future__ import annotations + +import argparse +import csv +import gzip +import hashlib +import json +import os +import shutil +from datetime import datetime, timezone +from pathlib import Path +from typing import Iterable, Iterator + +import numpy as np +import yaml + + +SOURCE_FILES = { + "model": "review_md_model_ready_temporal_20x9_v1.npz", + "parent_index": "review_md_parent_temporal_20x9_v2_index.tsv.gz", + "ledger": "review_master_modality_ledger_with_md20x9_v2.tsv.gz", + "objective": "review_a5_objective_availability_with_md20x9_v2.tsv.gz", + "readme": "review_md_temporal_20x9_v2_README.md", + "summary": "review_md_parent_temporal_20x9_v2_summary.json", +} + +OUTPUT_FILES = { + "model": "review_md_model_ready_temporal_20x6_v2.npz", + "parent_index": "review_md_parent_temporal_20x6_v2_index.tsv.gz", + "ledger": "review_master_modality_ledger_with_md20x6_v2.tsv.gz", + "objective": "review_objective_availability_with_md20x6_v2.tsv.gz", + "readme": "review_md_temporal_20x6_v2_README.md", + "summary": "review_md_parent_temporal_20x6_v2_summary.json", +} + +CORRECTED_OVERLAY_SCHEMA = "review_md_temporal_20x9_v2_charge_corrected_overlay" +CORRECTED_AFFECTED_STATE_COUNT = 9943 +CORRECTED_UNAFFECTED_STATE_COUNT = 37120 + + +def utc_now() -> str: + return datetime.now(timezone.utc).replace(microsecond=0).isoformat() + + +def sha256_file(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as handle: + for block in iter(lambda: handle.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def atomic_write_json(path: Path, value: object) -> None: + temporary = path.with_name(f".{path.name}.tmp.{os.getpid()}") + with temporary.open("w", encoding="utf-8") as handle: + json.dump(value, handle, indent=2, sort_keys=True) + handle.write("\n") + os.replace(temporary, path) + + +def atomic_write_npz(path: Path, **arrays: np.ndarray) -> None: + temporary = path.with_name(f".{path.name}.tmp.{os.getpid()}") + with temporary.open("wb") as handle: + np.savez_compressed(handle, **arrays) + os.replace(temporary, path) + + +def open_tsv(path: Path) -> Iterator[dict[str, str]]: + opener = gzip.open if path.suffix == ".gz" else Path.open + if path.suffix == ".gz": + handle = opener(path, "rt", encoding="utf-8", newline="") + else: + handle = opener(path, "r", encoding="utf-8", newline="") + with handle: + yield from csv.DictReader(handle, delimiter="\t") + + +def write_tsv_gz( + path: Path, + rows: Iterable[dict[str, object]], + fieldnames: list[str], +) -> int: + temporary = path.with_name(f".{path.name}.tmp.{os.getpid()}") + count = 0 + with gzip.open(temporary, "wt", encoding="utf-8", newline="") as handle: + writer = csv.DictWriter( + handle, + delimiter="\t", + fieldnames=fieldnames, + lineterminator="\n", + extrasaction="raise", + ) + writer.writeheader() + for row in rows: + writer.writerow(row) + count += 1 + os.replace(temporary, path) + return count + + +def text_values(values: np.ndarray) -> list[str]: + return [ + value.decode("utf-8") if isinstance(value, bytes) else str(value) + for value in values + ] + + +def load_npz(path: Path) -> dict[str, np.ndarray]: + with np.load(path, allow_pickle=False) as values: + return {key: np.asarray(values[key]) for key in values.files} + + +def corrected_overlay_binding(summary: dict, summary_path: Path) -> dict[str, object]: + expected = { + "schema": CORRECTED_OVERLAY_SCHEMA, + "status": "PASS", + "state_count": 47063, + "affected_state_count": CORRECTED_AFFECTED_STATE_COUNT, + "unaffected_state_count": CORRECTED_UNAFFECTED_STATE_COUNT, + "unaffected_state_tensor_values_verified_unchanged": True, + "tensor_shape": [47063, 20, 9], + } + for field, value in expected.items(): + if summary.get(field) != value: + raise ValueError( + f"corrected overlay {field}={summary.get(field)!r}, expected {value!r}" + ) + return { + **expected, + "summary_path": str(summary_path.resolve()), + "summary_sha256": sha256_file(summary_path), + } + + +def variation_summary(values: np.ndarray) -> dict[str, float | int]: + return { + "count": int(values.size), + "mean": float(np.mean(values)), + "sd": float(np.std(values)), + "p01": float(np.percentile(values, 1)), + "p05": float(np.percentile(values, 5)), + "median": float(np.median(values)), + "p95": float(np.percentile(values, 95)), + "p99": float(np.percentile(values, 99)), + "min": float(np.min(values)), + "max": float(np.max(values)), + } + + +def transformed_ledger_rows( + source: Path, + published_model_path: str, +) -> tuple[Iterator[dict[str, object]], list[str]]: + with gzip.open(source, "rt", encoding="utf-8", newline="") as handle: + reader = csv.DictReader(handle, delimiter="\t") + if reader.fieldnames is None: + raise ValueError("source ledger has no header") + fieldnames = list(reader.fieldnames) + [ + "md_representation_schema", + "md_ordered_windows", + "md_features_per_window", + "md_temporal_values_per_child_state", + ] + + def rows() -> Iterator[dict[str, object]]: + for row in open_tsv(source): + has_md = row["has_md_completed"] == "1" + if has_md: + row["md_feature_package_path"] = published_model_path + row["md_representation_schema"] = "review_md_temporal_20x6_v2" + row["md_ordered_windows"] = 20 + row["md_features_per_window"] = 6 + row["md_temporal_values_per_child_state"] = 120 + else: + row["md_representation_schema"] = "" + row["md_ordered_windows"] = "" + row["md_features_per_window"] = "" + row["md_temporal_values_per_child_state"] = "" + yield row + + return rows(), fieldnames + + +def transformed_objective_rows( + source: Path, +) -> tuple[Iterator[dict[str, object]], list[str]]: + with gzip.open(source, "rt", encoding="utf-8", newline="") as handle: + reader = csv.DictReader(handle, delimiter="\t") + if reader.fieldnames is None: + raise ValueError("source objective table has no header") + replacements = { + "review_md20x9_actual_completed": "review_md20x6_actual_completed", + "review_md20x9_parent_row_index": "review_md20x6_parent_row_index", + } + fieldnames = [replacements.get(name, name) for name in reader.fieldnames] + + def rows() -> Iterator[dict[str, object]]: + for source_row in open_tsv(source): + row = { + replacements.get(name, name): value + for name, value in source_row.items() + } + if row["objective"] == "md": + row["review_availability_source"] = ( + "completed_20ns_temporal_20x6_v2_corrected_overlay" + ) + yield row + + return rows(), fieldnames + + +def build(args: argparse.Namespace) -> dict[str, object]: + source_paths = { + key: args.source_package_dir / name + for key, name in SOURCE_FILES.items() + } + required = list(source_paths.values()) + [ + args.source_freeze_manifest, + args.raw_state_package, + args.raw_state_summary, + args.feature_config, + ] + for path in required: + if not path.is_file(): + raise FileNotFoundError(path) + + config = yaml.safe_load(args.feature_config.read_text(encoding="utf-8")) + selected_indices = [ + int(value) for value in config["representation"]["selected_source_indices"] + ] + if selected_indices != [0, 2, 3, 4, 6, 7]: + raise ValueError(f"unexpected selected source indices: {selected_indices}") + selected_names = [ + str(value["name"]) for value in config["representation"]["features"] + ] + + source_summary = json.loads( + source_paths["summary"].read_text(encoding="utf-8") + ) + source_freeze = json.loads( + args.source_freeze_manifest.read_text(encoding="utf-8") + ) + raw_summary = json.loads(args.raw_state_summary.read_text(encoding="utf-8")) + if source_summary.get("status") != "PASS": + raise ValueError("source parent package is not PASS") + if source_freeze.get("status") != "FROZEN_PASS": + raise ValueError("source feature layer is not FROZEN_PASS") + corrected_overlay = corrected_overlay_binding(raw_summary, args.raw_state_summary) + if source_freeze["representation"].get("state_tensor_shape") != [47063, 20, 9]: + raise ValueError("source freeze manifest has an unexpected tensor shape") + for key in ("model", "parent_index", "ledger", "objective", "readme"): + path = source_paths[key] + if source_summary["output_sha256"].get(path.name) != sha256_file(path): + raise ValueError(f"source output hash mismatch: {path.name}") + frozen_component_hashes = { + Path(path).name: value + for path, value in source_freeze["component_sha256"].items() + } + if frozen_component_hashes.get(source_paths["model"].name) != sha256_file( + source_paths["model"] + ): + raise ValueError("source model package is not the frozen model component") + frozen_summary_hashes = { + Path(path).name: value + for path, value in source_freeze["source_summaries"].items() + } + if frozen_summary_hashes.get(source_paths["summary"].name) != sha256_file( + source_paths["summary"] + ): + raise ValueError("source parent summary is not the frozen parent summary") + if frozen_summary_hashes.get(args.raw_state_summary.name) != sha256_file( + args.raw_state_summary + ): + raise ValueError("raw state summary is not the frozen raw summary") + if raw_summary.get("package_sha256") != sha256_file(args.raw_state_package): + raise ValueError("raw state package hash mismatch") + + model = load_npz(source_paths["model"]) + raw = load_npz(args.raw_state_package) + source_names = text_values(model["feature_names"]) + raw_names = text_values(raw["feature_names"]) + if source_names != raw_names or source_names != source_summary["feature_names"]: + raise ValueError("source feature-name contracts disagree") + if [source_names[index] for index in selected_indices] != selected_names: + raise ValueError("selected feature names do not match selected indices") + + source_z = np.asarray(model["state_features_z"], dtype=np.float32) + source_mask = np.asarray(model["state_feature_mask"], dtype=np.uint8) + raw_features = np.asarray(raw["features"], dtype=np.float32) + raw_mask = np.asarray(raw["feature_mask"], dtype=np.uint8) + expected_shape = (args.expected_states, 20, 9) + if source_z.shape != expected_shape or raw_features.shape != expected_shape: + raise ValueError("source or raw state tensor shape mismatch") + if source_mask.shape != expected_shape or raw_mask.shape != expected_shape: + raise ValueError("source or raw mask shape mismatch") + if not np.array_equal(source_mask, raw_mask): + raise ValueError("source and raw feature masks differ") + + means = np.asarray(model["feature_mean"], dtype=np.float32) + sds = np.asarray(model["feature_sd"], dtype=np.float32) + expected_z = (raw_features - means[None, None, :]) / sds[None, None, :] + expected_z = np.where(raw_mask == 1, expected_z, 0.0).astype(np.float32) + if not np.allclose(expected_z, source_z, rtol=1e-5, atol=1e-6): + raise ValueError("source standardization does not reproduce from raw features") + + reduced_z = source_z[:, :, selected_indices] + reduced_mask = source_mask[:, :, selected_indices] + reduced_raw = raw_features[:, :, selected_indices] + if not np.all(np.isfinite(reduced_z)): + raise ValueError("reduced tensor contains non-finite values") + if not np.all(reduced_z[reduced_mask == 0] == 0): + raise ValueError("masked reduced values are not zero") + + variation = {} + valid_counts = {} + masked_counts = {} + for output_index, name in enumerate(selected_names): + valid = reduced_mask[:, :, output_index] == 1 + values = reduced_raw[:, :, output_index][valid].astype(np.float64) + variation[name] = variation_summary(values) + valid_counts[name] = int(np.sum(valid)) + masked_counts[name] = int(valid.size - np.sum(valid)) + valid_scalar_count = int(np.sum(reduced_mask)) + + package_dir = args.output_dir / "package" + summary_path = package_dir / OUTPUT_FILES["summary"] + if package_dir.exists(): + if summary_path.is_file(): + existing = json.loads(summary_path.read_text(encoding="utf-8")) + if ( + existing.get("status") == "PASS" + and existing.get("corrected_overlay") == corrected_overlay + and all( + (package_dir / name).is_file() + and existing["output_sha256"].get(name) + == sha256_file(package_dir / name) + for key, name in OUTPUT_FILES.items() + if key != "summary" + ) + ): + return existing + raise FileExistsError("existing 20x6 package is incomplete or invalid") + + staging = args.output_dir / f"package.tmp.{os.getpid()}" + if staging.exists(): + raise FileExistsError(staging) + staging.mkdir(parents=True) + output_paths = {key: staging / name for key, name in OUTPUT_FILES.items()} + + output_arrays = { + key: np.asarray(value) for key, value in model.items() + if key not in { + "state_features_z", + "state_feature_mask", + "feature_mean", + "feature_sd", + "feature_names", + } + } + output_arrays.update( + { + "state_features_z": reduced_z.astype(np.float32), + "state_feature_mask": reduced_mask.astype(np.uint8), + "feature_mean": means[selected_indices].astype(np.float32), + "feature_sd": sds[selected_indices].astype(np.float32), + "feature_names": np.asarray(selected_names), + "source_feature_indices": np.asarray(selected_indices, dtype=np.int16), + } + ) + atomic_write_npz(output_paths["model"], **output_arrays) + shutil.copy2(source_paths["parent_index"], output_paths["parent_index"]) + + published_model_path = str((package_dir / OUTPUT_FILES["model"]).resolve()) + ledger_rows, ledger_fields = transformed_ledger_rows( + source_paths["ledger"], published_model_path + ) + ledger_row_count = write_tsv_gz( + output_paths["ledger"], ledger_rows, ledger_fields + ) + objective_rows, objective_fields = transformed_objective_rows( + source_paths["objective"] + ) + objective_row_count = write_tsv_gz( + output_paths["objective"], objective_rows, objective_fields + ) + + correlation = np.asarray( + raw_summary["pairwise_masked_pearson_correlation"], dtype=np.float64 + ) + retained_correlation = correlation[np.ix_(selected_indices, selected_indices)] + upper = np.abs(retained_correlation[np.triu_indices(len(selected_indices), 1)]) + max_abs_correlation = float(np.max(upper)) + + table_lines = [ + "| Descriptor | Valid windows | p01 | p05 | Median | p95 | p99 |", + "|---|---:|---:|---:|---:|---:|---:|", + ] + for name in selected_names: + values = variation[name] + table_lines.append( + f"| `{name}` | {values['count']:,} | {values['p01']:.4g} | " + f"{values['p05']:.4g} | {values['median']:.4g} | " + f"{values['p95']:.4g} | {values['p99']:.4g} |" + ) + readme = f"""# Reviewed MD temporal 20 x 6 representation + +Status: **PASS** + +## Corpus + +- {args.expected_states:,} completed 20 ns child-state trajectories +- {source_summary['md_parent_count']:,} parent glycans with MD +- {source_summary['scaler_fit_parent_count']:,} training parents used for scaling +- {args.expected_states * 20:,} ordered one-nanosecond state windows +- {args.expected_states * 1000:,} retained post-reference trajectory frames +- {valid_scalar_count:,} valid scalar measurements after applicability masks + +The independent learning unit remains the parent glycan. Frames and temporal +windows are correlated observations, not independent training examples. + +## Representation + +Each child state is represented by 20 ordered one-nanosecond windows and six +descriptors, or 120 measured values before temporal encoding. Alpha and beta +children remain separate through the temporal encoder and are pooled only at +the child-embedding level. + +## Corpus variation + +{chr(10).join(table_lines)} + +## Reduction decision + +Radius-of-gyration SD, asphericity, and torsion-mode occupancy were removed +because they overlapped retained descriptors (masked Pearson r = 0.737, 0.725, +and -0.642 respectively). The largest absolute correlation among the retained +six descriptors is {max_abs_correlation:.3f}. + +PCA scores are analysis outputs, not model inputs. The representation describes +short-timescale dynamics from one 20 ns trajectory per state and is not claimed +to estimate converged equilibrium populations. + +Official submitted artifacts were not modified. +""" + output_paths["readme"].write_text(readme, encoding="utf-8") + + output_hashes = { + output_paths[key].name: sha256_file(output_paths[key]) + for key in ("model", "parent_index", "ledger", "objective", "readme") + } + summary = { + "schema": "review_md_parent_temporal_20x6_v2", + "status": "PASS", + "created_at_utc": utc_now(), + "state_count": args.expected_states, + "md_parent_count": source_summary["md_parent_count"], + "master_ledger_parent_count": source_summary["master_ledger_parent_count"], + "scaler_fit_parent_count": source_summary["scaler_fit_parent_count"], + "state_window_count": args.expected_states * 20, + "retained_post_reference_frame_count": args.expected_states * 1000, + "valid_scalar_measurement_count": valid_scalar_count, + "state_tensor_shape": [args.expected_states, 20, 6], + "values_per_child_state": 120, + "selected_source_indices": selected_indices, + "feature_names": selected_names, + "feature_mean": [float(value) for value in means[selected_indices]], + "feature_sd": [float(value) for value in sds[selected_indices]], + "feature_valid_window_count": valid_counts, + "feature_masked_window_count": masked_counts, + "feature_variation": variation, + "retained_pairwise_masked_pearson_correlation": retained_correlation.tolist(), + "retained_maximum_absolute_pairwise_correlation": max_abs_correlation, + "parent_state_composition": source_summary["parent_state_composition"], + "parent_aggregation_policy_counts": source_summary[ + "parent_aggregation_policy_counts" + ], + "updated_objective_counts": source_summary["updated_objective_counts"], + "ledger_row_count": ledger_row_count, + "objective_row_count": objective_row_count, + "raw_frames_are_independent_training_examples": False, + "pca_scores_are_model_inputs": False, + "source_sha256": { + str(path.resolve()): sha256_file(path) for path in required + }, + "output_sha256": output_hashes, + "official_submitted_artifacts_modified": False, + "training_submitted": False, + "claim_boundary": ( + "ordered_short_timescale_dynamic_fingerprint_not_equilibrium_population" + ), + "corrected_overlay": corrected_overlay, + } + atomic_write_json(output_paths["summary"], summary) + args.output_dir.mkdir(parents=True, exist_ok=True) + os.replace(staging, package_dir) + for name, expected_hash in output_hashes.items(): + if sha256_file(package_dir / name) != expected_hash: + raise ValueError(f"post-publication hash mismatch: {name}") + return summary + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--source-package-dir", type=Path, required=True) + parser.add_argument("--source-freeze-manifest", type=Path, required=True) + parser.add_argument("--raw-state-package", type=Path, required=True) + parser.add_argument("--raw-state-summary", type=Path, required=True) + parser.add_argument("--feature-config", type=Path, required=True) + parser.add_argument("--output-dir", type=Path, required=True) + parser.add_argument("--expected-states", type=int, default=47063) + return parser.parse_args() + + +def main() -> None: + summary = build(parse_args()) + print(json.dumps(summary, indent=2, sort_keys=True)) + + +if __name__ == "__main__": + main() diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/build_review_md_temporal_20x9.py b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/build_review_md_temporal_20x9.py new file mode 100644 index 0000000000000000000000000000000000000000..625baa6d14905a9a3d3e008a52e0a0750caa6467 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/build_review_md_temporal_20x9.py @@ -0,0 +1,774 @@ +#!/usr/bin/env python3 +"""Build compact ordered 20 x 9 tensors from certified reviewed-glycan MD outputs.""" + +from __future__ import annotations + +import argparse +import csv +import gzip +import hashlib +import json +import os +import re +import traceback +from collections import Counter +from datetime import datetime, timezone +from pathlib import Path +from typing import Any, Iterable, Sequence + +import numpy as np + + +SCHEMA = "review_md_temporal_20x9_v1" +EXPECTED_FRAMES = 1001 +EXPECTED_FIRST_PS = 0.0 +EXPECTED_LAST_PS = 20000.0 +EXPECTED_STRIDE_PS = 20.0 +WINDOW_COUNT = 20 +WINDOW_PS = 1000.0 +FRAMES_PER_WINDOW = 50 +FEATURE_NAMES = ( + "radius_of_gyration_mean_A", + "radius_of_gyration_sd_A", + "heavy_atom_rmsd_mean_A", + "heavy_atom_rmsd_sd_A", + "sasa_per_residue_mean_nm2", + "normalized_asphericity_mean", + "terminal_span_per_graph_diameter_residue_mean_A", + "glycosidic_torsion_circular_variance_mean", + "glycosidic_torsion_mode_occupancy_mean", +) +TORSION_ARRAYS = ("phi_deg", "psi_deg", "omega_deg") + + +def utc_now() -> str: + return datetime.now(timezone.utc).isoformat() + + +def sha256_file(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as handle: + for block in iter(lambda: handle.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def atomic_write_json(path: Path, value: Any) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + temporary = path.with_name(f"{path.name}.tmp.{os.getpid()}") + temporary.write_text( + json.dumps(value, indent=2, sort_keys=True) + "\n", + encoding="utf-8", + ) + os.replace(temporary, path) + + +def atomic_write_npz(path: Path, **arrays: np.ndarray) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + temporary = path.with_name(f"{path.name}.tmp.{os.getpid()}") + with temporary.open("wb") as handle: + np.savez_compressed(handle, **arrays) + os.replace(temporary, path) + + +def read_tsv(path: Path) -> list[dict[str, str]]: + opener = gzip.open if path.suffix == ".gz" else open + with opener(path, "rt", encoding="utf-8", newline="") as handle: + return list(csv.DictReader(handle, delimiter="\t")) + + +def write_tsv( + path: Path, + rows: Sequence[dict[str, Any]], + fields: Sequence[str], +) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + temporary = path.with_name(f"{path.name}.tmp.{os.getpid()}") + with temporary.open("w", encoding="utf-8", newline="") as handle: + writer = csv.DictWriter(handle, fieldnames=fields, delimiter="\t") + writer.writeheader() + writer.writerows(rows) + os.replace(temporary, path) + + +def safe_state_id(value: str) -> str: + return re.sub(r"[^A-Za-z0-9_.-]+", "_", value) + + +def state_stem(row: dict[str, str]) -> str: + return f"{int(row['campaign_index']):06d}_{safe_state_id(row['structure_state_id'])}" + + +def source_paths( + row: dict[str, str], + pca_dir: Path, + structural_dir: Path, +) -> dict[str, Path]: + stem = state_stem(row) + return { + "pca_metadata": ( + pca_dir / "states" / stem / "review_md_wiley_corpus_state.json" + ), + "pca_features": ( + pca_dir / "states" / stem / "review_md_wiley_corpus_features.npz" + ), + "torsion_metadata": ( + pca_dir + / "torsion_states" + / stem + / "review_md_wiley_torsion_state.json" + ), + "torsion_features": ( + pca_dir + / "torsion_states" + / stem + / "review_md_wiley_torsion_features.npz" + ), + "structural_metadata": ( + structural_dir + / "states" + / stem + / "review_md_wiley_structural_state.json" + ), + "structural_features": ( + structural_dir + / "states" + / stem + / "review_md_wiley_structural_features.npz" + ), + } + + +def load_metadata( + path: Path, + row: dict[str, str], + allowed_statuses: Iterable[str], +) -> dict[str, Any]: + if not path.is_file(): + raise FileNotFoundError(path) + value = json.loads(path.read_text(encoding="utf-8")) + if value.get("status") not in set(allowed_statuses): + raise ValueError(f"unexpected status in {path}: {value.get('status')}") + if int(value.get("campaign_index", -1)) != int(row["campaign_index"]): + raise ValueError(f"campaign identity mismatch in {path}") + if value.get("structure_state_id") != row["structure_state_id"]: + raise ValueError(f"state identity mismatch in {path}") + if value.get("parent_glycorpus_id") != row["parent_glycorpus_id"]: + raise ValueError(f"parent identity mismatch in {path}") + return value + + +def validate_source_hash( + metadata: dict[str, Any], + features_path: Path, + enabled: bool, +) -> None: + if not features_path.is_file(): + raise FileNotFoundError(features_path) + expected = str(metadata.get("features_sha256", "")) + if not expected: + raise ValueError(f"source metadata has no feature hash: {features_path}") + if enabled and sha256_file(features_path) != expected: + raise ValueError(f"source feature hash mismatch: {features_path}") + + +def validate_times(times: np.ndarray, label: str) -> np.ndarray: + values = np.asarray(times, dtype=np.float64) + if ( + values.shape != (EXPECTED_FRAMES,) + or not np.all(np.isfinite(values)) + or not np.isclose(values[0], EXPECTED_FIRST_PS) + or not np.isclose(values[-1], EXPECTED_LAST_PS) + or not np.allclose(np.diff(values), EXPECTED_STRIDE_PS, atol=1e-5) + ): + raise ValueError(f"invalid trajectory times for {label}: {values.shape}") + return values + + +def window_indices(times_ps: np.ndarray) -> list[np.ndarray]: + times = validate_times(times_ps, "windowing") + result = [] + for index in range(WINDOW_COUNT): + start = index * WINDOW_PS + end = (index + 1) * WINDOW_PS + selected = np.flatnonzero((times > start) & (times <= end)) + if selected.shape != (FRAMES_PER_WINDOW,): + raise ValueError( + f"window {index} contains {len(selected)} frames, expected " + f"{FRAMES_PER_WINDOW}" + ) + result.append(selected) + joined = np.concatenate(result) + if len(np.unique(joined)) != WINDOW_COUNT * FRAMES_PER_WINDOW: + raise ValueError("temporal windows overlap") + if 0 in joined or joined[-1] != EXPECTED_FRAMES - 1: + raise ValueError("temporal windows do not implement the frozen boundary") + return result + + +def frame_vector( + values: np.ndarray, + label: str, + allow_empty: bool = False, +) -> np.ndarray: + array = np.asarray(values, dtype=np.float64) + if allow_empty and array.shape == (0,): + return array + if array.shape != (EXPECTED_FRAMES,) or not np.all(np.isfinite(array)): + raise ValueError(f"invalid frame vector for {label}: {array.shape}") + return array + + +def applicable_torsion_matrix(values: Any) -> np.ndarray: + columns = [] + for name in TORSION_ARRAYS: + array = np.asarray(values[name], dtype=np.float64) + if array.ndim != 2 or array.shape[0] != EXPECTED_FRAMES: + raise ValueError(f"invalid torsion array {name}: {array.shape}") + for column_index in range(array.shape[1]): + column = array[:, column_index] + finite = np.isfinite(column) + if np.all(finite): + columns.append(column) + elif np.any(finite): + raise ValueError(f"partially finite torsion coordinate {name}") + if not columns: + raise ValueError("multiresidue state has no applicable torsion coordinate") + return np.column_stack(columns) + + +def circular_variance_mean(angles_deg: np.ndarray) -> float: + radians = np.deg2rad(np.asarray(angles_deg, dtype=np.float64)) + resultant = np.hypot( + np.mean(np.cos(radians), axis=0), + np.mean(np.sin(radians), axis=0), + ) + return float(np.mean(1.0 - np.clip(resultant, 0.0, 1.0))) + + +def periodic_delta_deg(values: np.ndarray, center: float) -> np.ndarray: + return (np.asarray(values, dtype=np.float64) - center + 180.0) % 360.0 - 180.0 + + +def torsion_mode_occupancy_mean(angles_deg: np.ndarray) -> float: + matrix = np.asarray(angles_deg, dtype=np.float64) + occupancies = [] + for column_index in range(matrix.shape[1]): + wrapped = (matrix[:, column_index] + 180.0) % 360.0 + bins = np.minimum((wrapped // 10.0).astype(int), 35) + modal_bin = int(np.argmax(np.bincount(bins, minlength=36))) + center = -175.0 + modal_bin * 10.0 + occupancies.append( + float( + np.mean( + np.abs(periodic_delta_deg(matrix[:, column_index], center)) + <= 15.0 + ) + ) + ) + return float(np.mean(occupancies)) + + +def dominant_cluster_occupancy(labels: np.ndarray) -> float: + values = np.asarray(labels, dtype=np.int64) + if values.ndim != 1 or not len(values): + raise ValueError("invalid conformer labels") + counts = np.bincount(values - np.min(values)) + return float(np.max(counts) / len(values)) + + +def derive_state_features( + row: dict[str, str], + pca_dir: Path, + structural_dir: Path, + verify_hashes: bool = False, +) -> tuple[np.ndarray, np.ndarray, np.ndarray, dict[str, Any]]: + paths = source_paths(row, pca_dir, structural_dir) + pca_metadata = load_metadata(paths["pca_metadata"], row, {"PASS"}) + structural_metadata = load_metadata( + paths["structural_metadata"], row, {"PASS"} + ) + torsion_metadata = load_metadata( + paths["torsion_metadata"], + row, + {"PASS", "NOT_APPLICABLE_MONOMER"}, + ) + validate_source_hash(pca_metadata, paths["pca_features"], verify_hashes) + validate_source_hash( + structural_metadata, + paths["structural_features"], + verify_hashes, + ) + + with np.load(paths["pca_features"], allow_pickle=False) as pca_values: + times = validate_times(pca_values["times_ps"], "PCA source") + rg = frame_vector(pca_values["radius_of_gyration_A"], "Rg") + asphericity = frame_vector(pca_values["asphericity"], "asphericity") + pca_labels = np.asarray(pca_values["pca_labels"], dtype=np.int64) + if pca_labels.shape != (EXPECTED_FRAMES,): + raise ValueError(f"invalid PCA label shape: {pca_labels.shape}") + + with np.load(paths["structural_features"], allow_pickle=False) as values: + structural_times = validate_times(values["times_ps"], "structural source") + rmsd = frame_vector(values["heavy_atom_rmsd_A"], "RMSD") + sasa = frame_vector(values["sasa_total_nm2"], "SASA") + terminal_span = frame_vector( + values["terminal_span_A"], + "terminal span", + allow_empty=True, + ) + if not np.array_equal(times, structural_times): + raise ValueError("PCA and structural frame times differ") + + residue_count = int(pca_metadata["analysis_residue_count"]) + if residue_count < 1: + raise ValueError("analysis residue count is below one") + graph_diameter = int( + structural_metadata.get("graph", {}).get("graph_diameter_residues", 0) + ) + if len(terminal_span) and graph_diameter < 2: + raise ValueError("terminal span exists without a graph diameter") + if not len(terminal_span) and residue_count > 1: + raise ValueError("multiresidue state has no terminal span") + + torsions = None + if torsion_metadata["status"] == "PASS": + validate_source_hash( + torsion_metadata, + paths["torsion_features"], + verify_hashes, + ) + with np.load(paths["torsion_features"], allow_pickle=False) as values: + torsion_times = validate_times(values["times_ps"], "torsion source") + if not np.array_equal(times, torsion_times): + raise ValueError("PCA and torsion frame times differ") + torsions = applicable_torsion_matrix(values) + elif residue_count != 1: + raise ValueError("torsion N/A is permitted only for a monomer") + + windows = window_indices(times) + features = np.zeros((WINDOW_COUNT, len(FEATURE_NAMES)), dtype=np.float32) + masks = np.ones_like(features, dtype=np.uint8) + conformer_occupancy = np.zeros(WINDOW_COUNT, dtype=np.float32) + for window, selected in enumerate(windows): + features[window, 0] = np.mean(rg[selected]) + features[window, 1] = np.std(rg[selected]) + features[window, 2] = np.mean(rmsd[selected]) + features[window, 3] = np.std(rmsd[selected]) + features[window, 4] = np.mean(sasa[selected]) / residue_count + features[window, 5] = np.mean(asphericity[selected]) + conformer_occupancy[window] = dominant_cluster_occupancy( + pca_labels[selected] + ) + if len(terminal_span): + features[window, 6] = ( + np.mean(terminal_span[selected]) / graph_diameter + ) + else: + masks[window, 6] = 0 + if torsions is not None: + features[window, 7] = circular_variance_mean(torsions[selected]) + features[window, 8] = torsion_mode_occupancy_mean( + torsions[selected] + ) + else: + masks[window, 7:9] = 0 + + if not np.all(np.isfinite(features)): + raise ValueError("derived tensor contains non-finite values") + qc = { + "analysis_residue_count": residue_count, + "graph_diameter_residues": graph_diameter, + "terminal_span_applicable": bool(len(terminal_span)), + "torsion_applicable": torsions is not None, + "torsion_coordinate_count": ( + int(torsions.shape[1]) if torsions is not None else 0 + ), + "masked_value_count": int(np.sum(masks == 0)), + } + return features, masks, conformer_occupancy, qc + + +def masked_summary( + features: np.ndarray, + masks: np.ndarray, +) -> dict[str, dict[str, float | int]]: + result: dict[str, dict[str, float | int]] = {} + for index, name in enumerate(FEATURE_NAMES): + values = np.asarray(features[..., index], dtype=np.float64)[ + np.asarray(masks[..., index], dtype=bool) + ] + if not len(values): + result[name] = {"count": 0} + continue + result[name] = { + "count": int(len(values)), + "mean": float(np.mean(values)), + "sd": float(np.std(values)), + "min": float(np.min(values)), + "p01": float(np.quantile(values, 0.01)), + "median": float(np.median(values)), + "p99": float(np.quantile(values, 0.99)), + "max": float(np.max(values)), + } + return result + + +def extract_shard( + manifest: Path, + pca_dir: Path, + structural_dir: Path, + output_dir: Path, + shard_index: int, + shard_count: int, + verify_hashes: bool = False, +) -> dict[str, Any]: + if shard_index < 0 or shard_index >= shard_count: + raise ValueError("invalid shard index") + rows = [ + row + for offset, row in enumerate(read_tsv(manifest)) + if offset % shard_count == shard_index + ] + if not rows: + raise ValueError(f"empty shard {shard_index}/{shard_count}") + shard_dir = output_dir / "shards" + stem = f"review_md_temporal_shard_{shard_index:04d}_of_{shard_count:04d}" + features_path = shard_dir / f"{stem}.npz" + receipt_path = shard_dir / f"{stem}.json" + if receipt_path.is_file() and features_path.is_file(): + receipt = json.loads(receipt_path.read_text(encoding="utf-8")) + if ( + receipt.get("status") == "PASS" + and receipt.get("features_sha256") == sha256_file(features_path) + ): + return receipt + raise ValueError(f"inconsistent existing shard output: {stem}") + + feature_rows = [] + mask_rows = [] + conformer_rows = [] + campaign_indices = [] + qc_counts: Counter[str] = Counter() + failures = [] + for row in rows: + try: + features, masks, conformer, qc = derive_state_features( + row, + pca_dir, + structural_dir, + verify_hashes=verify_hashes, + ) + feature_rows.append(features) + mask_rows.append(masks) + conformer_rows.append(conformer) + campaign_indices.append(int(row["campaign_index"])) + qc_counts[f"terminal_span={int(qc['terminal_span_applicable'])}"] += 1 + qc_counts[f"torsion={int(qc['torsion_applicable'])}"] += 1 + except Exception as error: + failures.append( + { + "campaign_index": int(row["campaign_index"]), + "structure_state_id": row["structure_state_id"], + "error_type": type(error).__name__, + "error": str(error), + "traceback": traceback.format_exc()[-4000:], + } + ) + if failures: + failure_path = ( + output_dir / "failures" / f"{stem}_failures.json" + ) + atomic_write_json( + failure_path, + { + "schema": SCHEMA, + "status": "FAILED", + "created_at_utc": utc_now(), + "failures": failures, + }, + ) + raise RuntimeError( + f"shard {shard_index} failed for {len(failures)} states; " + f"see {failure_path}" + ) + + feature_array = np.stack(feature_rows).astype(np.float32) + mask_array = np.stack(mask_rows).astype(np.uint8) + conformer_array = np.stack(conformer_rows).astype(np.float32) + campaign_array = np.asarray(campaign_indices, dtype=np.int32) + atomic_write_npz( + features_path, + campaign_index=campaign_array, + features=feature_array, + feature_mask=mask_array, + qc_dominant_conformer_occupancy=conformer_array, + ) + receipt = { + "schema": SCHEMA, + "status": "PASS", + "created_at_utc": utc_now(), + "manifest": str(manifest.resolve()), + "manifest_sha256": sha256_file(manifest), + "pca_dir": str(pca_dir.resolve()), + "structural_dir": str(structural_dir.resolve()), + "shard_index": shard_index, + "shard_count": shard_count, + "assigned_state_count": len(rows), + "completed_state_count": len(campaign_indices), + "tensor_shape": list(feature_array.shape), + "mask_shape": list(mask_array.shape), + "qc_counts": dict(sorted(qc_counts.items())), + "verify_source_hashes": verify_hashes, + "features_path": str(features_path.resolve()), + "features_sha256": sha256_file(features_path), + "feature_summary": masked_summary(feature_array, mask_array), + "official_submitted_artifacts_modified": False, + } + atomic_write_json(receipt_path, receipt) + return receipt + + +def pairwise_masked_correlation( + features: np.ndarray, + masks: np.ndarray, +) -> list[list[float | None]]: + matrix: list[list[float | None]] = [] + flat_features = features.reshape(-1, len(FEATURE_NAMES)).astype(np.float64) + flat_masks = masks.reshape(-1, len(FEATURE_NAMES)).astype(bool) + for left in range(len(FEATURE_NAMES)): + row: list[float | None] = [] + for right in range(len(FEATURE_NAMES)): + valid = flat_masks[:, left] & flat_masks[:, right] + x = flat_features[valid, left] + y = flat_features[valid, right] + if len(x) < 2 or np.std(x) <= 1e-15 or np.std(y) <= 1e-15: + row.append(None) + else: + row.append(float(np.corrcoef(x, y)[0, 1])) + matrix.append(row) + return matrix + + +def merge_shards( + manifest: Path, + output_dir: Path, + shard_count: int, + expected_state_count: int | None = None, +) -> dict[str, Any]: + rows = read_tsv(manifest) + if expected_state_count is not None and len(rows) != expected_state_count: + raise ValueError( + f"manifest contains {len(rows)} states, expected {expected_state_count}" + ) + by_campaign: dict[int, tuple[np.ndarray, np.ndarray, np.ndarray]] = {} + shard_receipts = [] + for shard_index in range(shard_count): + stem = f"review_md_temporal_shard_{shard_index:04d}_of_{shard_count:04d}" + receipt_path = output_dir / "shards" / f"{stem}.json" + features_path = output_dir / "shards" / f"{stem}.npz" + if not receipt_path.is_file() or not features_path.is_file(): + raise FileNotFoundError(f"missing shard output: {stem}") + receipt = json.loads(receipt_path.read_text(encoding="utf-8")) + if ( + receipt.get("status") != "PASS" + or receipt.get("features_sha256") != sha256_file(features_path) + ): + raise ValueError(f"invalid shard output: {stem}") + shard_receipts.append(receipt) + with np.load(features_path, allow_pickle=False) as values: + campaigns = np.asarray(values["campaign_index"], dtype=np.int32) + features = np.asarray(values["features"], dtype=np.float32) + masks = np.asarray(values["feature_mask"], dtype=np.uint8) + conformer = np.asarray( + values["qc_dominant_conformer_occupancy"], dtype=np.float32 + ) + if ( + features.shape != (len(campaigns), WINDOW_COUNT, len(FEATURE_NAMES)) + or masks.shape != features.shape + or conformer.shape != (len(campaigns), WINDOW_COUNT) + ): + raise ValueError(f"invalid shard tensor shape: {stem}") + for offset, campaign in enumerate(campaigns): + key = int(campaign) + if key in by_campaign: + raise ValueError(f"duplicate campaign index across shards: {key}") + by_campaign[key] = ( + features[offset], + masks[offset], + conformer[offset], + ) + + manifest_campaigns = [int(row["campaign_index"]) for row in rows] + if len(manifest_campaigns) != len(set(manifest_campaigns)): + raise ValueError("manifest contains duplicate campaign indices") + missing = sorted(set(manifest_campaigns) - set(by_campaign)) + extra = sorted(set(by_campaign) - set(manifest_campaigns)) + if missing or extra: + raise ValueError( + f"campaign coverage mismatch missing={len(missing)} extra={len(extra)}" + ) + features = np.stack([by_campaign[key][0] for key in manifest_campaigns]) + masks = np.stack([by_campaign[key][1] for key in manifest_campaigns]) + conformer = np.stack([by_campaign[key][2] for key in manifest_campaigns]) + if not np.all(np.isfinite(features)) or not np.all(np.isin(masks, (0, 1))): + raise ValueError("merged features or masks are invalid") + + package_dir = output_dir / "package" + package_name = "review_md_state_temporal_20x9_v1.npz" + index_name = "review_md_state_temporal_20x9_v1_index.tsv" + summary_name = "review_md_state_temporal_20x9_v1_summary.json" + package_path = package_dir / package_name + index_path = package_dir / index_name + summary_path = package_dir / summary_name + if package_dir.exists(): + if package_path.is_file() and index_path.is_file() and summary_path.is_file(): + existing = json.loads(summary_path.read_text(encoding="utf-8")) + if ( + existing.get("status") == "PASS" + and existing.get("package_sha256") == sha256_file(package_path) + and existing.get("index_sha256") == sha256_file(index_path) + ): + return existing + raise FileExistsError("existing merged package is incomplete or invalid") + staging = output_dir / f"package.tmp.{os.getpid()}" + if staging.exists(): + raise FileExistsError(staging) + staging.mkdir(parents=True) + staging_package = staging / package_name + staging_index = staging / index_name + staging_summary = staging / summary_name + atomic_write_npz( + staging_package, + campaign_index=np.asarray(manifest_campaigns, dtype=np.int32), + features=features.astype(np.float32), + feature_mask=masks.astype(np.uint8), + qc_dominant_conformer_occupancy=conformer.astype(np.float32), + feature_names=np.asarray(FEATURE_NAMES), + window_start_ps=np.arange(WINDOW_COUNT, dtype=np.float32) * WINDOW_PS, + window_end_ps=( + np.arange(1, WINDOW_COUNT + 1, dtype=np.float32) * WINDOW_PS + ), + ) + index_rows = [] + for row_index, row in enumerate(rows): + state_mask = masks[row_index] + index_rows.append( + { + "state_row_index": row_index, + "campaign_index": int(row["campaign_index"]), + "structure_state_id": row["structure_state_id"], + "parent_glycorpus_id": row["parent_glycorpus_id"], + "state_label": row["state_label"], + "state_role": row.get("state_role", ""), + "analysis_residue_count": int( + row.get("analysis_residue_count") + or row.get("mapped_monosaccharides") + or 0 + ), + "has_terminal_span": int(np.all(state_mask[:, 6] == 1)), + "has_glycosidic_torsion": int(np.all(state_mask[:, 7:9] == 1)), + "masked_value_count": int(np.sum(state_mask == 0)), + } + ) + write_tsv(staging_index, index_rows, list(index_rows[0])) + + summary = { + "schema": SCHEMA, + "status": "PASS", + "created_at_utc": utc_now(), + "manifest": str(manifest.resolve()), + "manifest_sha256": sha256_file(manifest), + "state_count": len(rows), + "parent_count": len({row["parent_glycorpus_id"] for row in rows}), + "tensor_shape": list(features.shape), + "mask_shape": list(masks.shape), + "feature_names": list(FEATURE_NAMES), + "feature_summary": masked_summary(features, masks), + "feature_correlation_order": list(FEATURE_NAMES), + "pairwise_masked_pearson_correlation": pairwise_masked_correlation( + features, masks + ), + "terminal_span_state_count": int(np.sum(np.all(masks[:, :, 6] == 1, axis=1))), + "torsion_state_count": int( + np.sum(np.all(masks[:, :, 7:9] == 1, axis=(1, 2))) + ), + "qc_dominant_conformer_occupancy_summary": { + "mean": float(np.mean(conformer)), + "sd": float(np.std(conformer)), + "min": float(np.min(conformer)), + "median": float(np.median(conformer)), + "max": float(np.max(conformer)), + }, + "shard_count": shard_count, + "shard_assigned_state_count": int( + sum(int(value["assigned_state_count"]) for value in shard_receipts) + ), + "package_path": str(package_path.resolve()), + "package_sha256": sha256_file(staging_package), + "index_path": str(index_path.resolve()), + "index_sha256": sha256_file(staging_index), + "window_interval_definition": "(window_start_ps, window_end_ps]", + "frames_per_window": FRAMES_PER_WINDOW, + "masked_numeric_fill": 0.0, + "claim_boundary": ( + "ordered_short_timescale_sampled_descriptors_not_equilibrium_populations" + ), + "official_submitted_artifacts_modified": False, + } + atomic_write_json(staging_summary, summary) + os.replace(staging, package_dir) + if ( + sha256_file(package_path) != summary["package_sha256"] + or sha256_file(index_path) != summary["index_sha256"] + ): + raise ValueError("post-publication merged-package hash mismatch") + return summary + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser(description=__doc__) + subparsers = parser.add_subparsers(dest="command", required=True) + + extract = subparsers.add_parser("extract-shard") + extract.add_argument("--manifest", type=Path, required=True) + extract.add_argument("--pca-dir", type=Path, required=True) + extract.add_argument("--structural-dir", type=Path, required=True) + extract.add_argument("--output-dir", type=Path, required=True) + extract.add_argument("--shard-index", type=int, required=True) + extract.add_argument("--shard-count", type=int, required=True) + extract.add_argument("--verify-source-hashes", action="store_true") + + merge = subparsers.add_parser("merge") + merge.add_argument("--manifest", type=Path, required=True) + merge.add_argument("--output-dir", type=Path, required=True) + merge.add_argument("--shard-count", type=int, required=True) + merge.add_argument("--expected-state-count", type=int) + return parser + + +def main() -> int: + arguments = build_parser().parse_args() + if arguments.command == "extract-shard": + value = extract_shard( + arguments.manifest, + arguments.pca_dir, + arguments.structural_dir, + arguments.output_dir, + arguments.shard_index, + arguments.shard_count, + verify_hashes=arguments.verify_source_hashes, + ) + else: + value = merge_shards( + arguments.manifest, + arguments.output_dir, + arguments.shard_count, + expected_state_count=arguments.expected_state_count, + ) + print(json.dumps(value, indent=2, sort_keys=True)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/freeze_review_md_temporal_feature_layer.py b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/freeze_review_md_temporal_feature_layer.py new file mode 100644 index 0000000000000000000000000000000000000000..32a4dcebb23d7c892cda0e7fbc351d82138e3d78 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/freeze_review_md_temporal_feature_layer.py @@ -0,0 +1,268 @@ +#!/usr/bin/env python3 +"""Freeze the certified temporal MD feature layer and Nova receipts.""" + +from __future__ import annotations + +import argparse +import csv +import hashlib +import json +import os +import subprocess +from datetime import datetime, timezone +from pathlib import Path + + +def sha256_file(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as handle: + for block in iter(lambda: handle.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def atomic_write(path: Path, text: str) -> None: + temporary = path.with_name(f".{path.name}.tmp.{os.getpid()}") + temporary.write_text(text, encoding="utf-8") + os.replace(temporary, path) + + +def read_json(path: Path) -> dict[str, object]: + return json.loads(path.read_text(encoding="utf-8")) + + +def query_sacct(job_ids: list[str]) -> dict[str, dict[str, str]]: + fields = [ + "JobIDRaw", + "JobName", + "State", + "ExitCode", + "Elapsed", + "AllocCPUS", + "ReqMem", + "MaxRSS", + "NodeList", + "Partition", + "Account", + "QOS", + ] + command = [ + "sacct", + "-X", + "-j", + ",".join(job_ids), + f"--format={','.join(fields)}", + "-P", + ] + completed = subprocess.run( + command, + check=True, + capture_output=True, + text=True, + ) + rows = { + row["JobIDRaw"]: row + for row in csv.DictReader(completed.stdout.splitlines(), delimiter="|") + if row.get("JobIDRaw") in job_ids + } + missing = set(job_ids) - set(rows) + if missing: + raise ValueError(f"missing sacct receipts: {sorted(missing)}") + for job_id, row in rows.items(): + if row["State"] != "COMPLETED" or row["ExitCode"] != "0:0": + raise ValueError( + f"job {job_id} is not terminal success: " + f"{row['State']} {row['ExitCode']}" + ) + return rows + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--raw-state-summary", type=Path, required=True) + parser.add_argument("--parent-summary", type=Path, required=True) + parser.add_argument("--independent-audit", type=Path, required=True) + parser.add_argument("--parent-package-dir", type=Path, required=True) + parser.add_argument("--output-dir", type=Path, required=True) + parser.add_argument("--pilot-job-id", required=True) + parser.add_argument("--full-job-id", required=True) + parser.add_argument("--parent-job-id", required=True) + parser.add_argument("--audit-job-id", required=True) + parser.add_argument( + "--code-or-config", + type=Path, + action="append", + default=[], + ) + args = parser.parse_args() + + raw = read_json(args.raw_state_summary) + parent = read_json(args.parent_summary) + audit = read_json(args.independent_audit) + if raw.get("status") != "PASS": + raise ValueError("raw state feature summary is not PASS") + if parent.get("status") != "PASS": + raise ValueError("parent feature summary is not PASS") + if audit.get("status") != "PASS" or audit.get("failure_count") != 0: + raise ValueError("independent feature audit is not clean PASS") + + expected = { + "state_count": 47063, + "md_parent_count": 30088, + "scaler_fit_parent_count": 22914, + "outside_a5_md_parent_count": 392, + } + for key, value in expected.items(): + observed = parent.get(key, raw.get(key)) + if observed != value: + raise ValueError(f"{key}={observed!r}, expected {value}") + if parent.get("model_ready_tensor_shape") != [47063, 20, 9]: + raise ValueError("model-ready tensor shape is not 47063 x 20 x 9") + if parent.get("canonical_wurcs_nonblank_conflict_count") != 0: + raise ValueError("parent package reports nonblank canonical-WURCS conflicts") + + component_hashes = {} + for name, expected_hash in parent["output_sha256"].items(): + path = args.parent_package_dir / name + observed_hash = sha256_file(path) + if observed_hash != expected_hash: + raise ValueError(f"parent package hash mismatch: {name}") + component_hashes[str(path.resolve())] = observed_hash + for path in args.code_or_config: + if not path.is_file(): + raise FileNotFoundError(path) + component_hashes[str(path.resolve())] = sha256_file(path) + + job_ids = [ + args.pilot_job_id, + args.full_job_id, + args.parent_job_id, + args.audit_job_id, + ] + sacct = query_sacct(job_ids) + manifest = { + "schema": "review_md_temporal_20x9_feature_layer_freeze_v1", + "status": "FROZEN_PASS", + "created_at_utc": datetime.now(timezone.utc) + .replace(microsecond=0) + .isoformat(), + "representation": { + "production_ns_per_state": 20, + "ordered_windows": 20, + "window_ns": 1, + "features_per_window": 9, + "state_tensor_shape": [47063, 20, 9], + "feature_names": parent["feature_names"], + "masked_standardized_fill": 0.0, + }, + "corpus": { + "completed_states": 47063, + "md_parents": 30088, + "a5_md_parents": parent["updated_objective_counts"]["md_true"], + "a5_md_train_parents": parent["updated_objective_counts"]["md_train"], + "a5_md_development_parents": parent["updated_objective_counts"][ + "md_development" + ], + "outside_a5_held_out_md_parents": 392, + "parent_state_composition": parent["parent_state_composition"], + }, + "parent_policy": { + "single": "encode one child", + "complete_alpha_beta": ( + "encode children separately then take an equal mean of child embeddings" + ), + "incomplete_sibling": "encode available child and retain flag", + "raw_coordinates_or_integer_codes_averaged": False, + }, + "normalization": { + "fit_parent_count": parent["scaler_fit_parent_count"], + "fit_policy": parent["scaler_fit_policy"], + "feature_mean": parent["feature_mean"], + "feature_sd": parent["feature_sd"], + }, + "source_summaries": { + str(args.raw_state_summary.resolve()): sha256_file( + args.raw_state_summary + ), + str(args.parent_summary.resolve()): sha256_file(args.parent_summary), + str(args.independent_audit.resolve()): sha256_file( + args.independent_audit + ), + }, + "component_sha256": component_hashes, + "nova_sacct_receipts": sacct, + "official_submitted_artifacts_modified": False, + "training_submitted": False, + "claim_boundary": parent["claim_boundary"], + } + + args.output_dir.mkdir(parents=True, exist_ok=True) + manifest_path = ( + args.output_dir / "review_md_temporal_20x9_feature_layer_freeze_v1.json" + ) + report_path = ( + args.output_dir / "review_md_temporal_20x9_feature_layer_report_v1.md" + ) + atomic_write( + manifest_path, + json.dumps(manifest, indent=2, sort_keys=True) + "\n", + ) + report = f"""# Reviewed MD temporal feature layer + +Status: **FROZEN PASS** + +## Result + +- 47,063 completed 20 ns structure-state trajectories +- 30,088 parent glycans +- one ordered `20 x 9` state tensor per trajectory +- 22,914 pretraining-train parents used to fit the feature scaler +- 29,696 A5-partition parents with MD, including 5,074 development parents +- 392 reviewed held-out parents retained only in the scientific package + +## Parent states + +- 12,704 single-state parents +- 16,975 complete alpha/beta pairs +- 250 alpha-only parents +- 159 beta-only parents + +Alpha and beta children remain separate through temporal encoding. Complete +pairs are pooled by an equal mean of child embeddings. Incomplete pairs use the +available child and remain flagged. Coordinates and integer structure codes are +never averaged. + +## Frozen package + +- Model tensor: `{args.parent_package_dir / 'review_md_model_ready_temporal_20x9_v1.npz'}` +- Parent index: `{args.parent_package_dir / 'review_md_parent_temporal_20x9_v2_index.tsv.gz'}` +- Master ledger: `{args.parent_package_dir / 'review_master_modality_ledger_with_md20x9_v2.tsv.gz'}` +- Objective availability: `{args.parent_package_dir / 'review_a5_objective_availability_with_md20x9_v2.tsv.gz'}` +- Independent audit: `{args.independent_audit}` +- Freeze manifest: `{manifest_path}` + +## Scope + +The tensors summarize ordered one-nanosecond windows from one 20 ns trajectory +per state. They support a compact MD input modality but are not claimed to be +converged equilibrium conformer populations. No MD-enabled model training was +submitted during feature construction. +""" + atomic_write(report_path, report) + print( + json.dumps( + { + "status": "FROZEN_PASS", + "manifest": str(manifest_path.resolve()), + "manifest_sha256": sha256_file(manifest_path), + "report": str(report_path.resolve()), + "report_sha256": sha256_file(report_path), + }, + indent=2, + sort_keys=True, + ) + ) + + +if __name__ == "__main__": + main() diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/merge_review_md_charge_corrected_temporal_20x9_r1.py b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/merge_review_md_charge_corrected_temporal_20x9_r1.py new file mode 100644 index 0000000000000000000000000000000000000000..049469a9525a255b5f4cef330208ae0d86913944 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/merge_review_md_charge_corrected_temporal_20x9_r1.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python3 +"""Overlay corrected affected-state tensors onto the frozen full MD tensor.""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import os +import shutil +from datetime import datetime, timezone +from pathlib import Path + +import numpy as np + +import build_review_md_temporal_20x9 as temporal + + +SCHEMA = "review_md_temporal_20x9_v2_charge_corrected_overlay" +PACKAGE_NAME = "review_md_state_temporal_20x9_v2.npz" +INDEX_NAME = "review_md_state_temporal_20x9_v2_index.tsv" +SUMMARY_NAME = "review_md_state_temporal_20x9_v2_summary.json" + + +def sha256_file(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as handle: + for block in iter(lambda: handle.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def load_source(package: Path, index: Path, summary: Path) -> tuple[dict, list, dict]: + receipt = json.loads(summary.read_text(encoding="utf-8")) + if receipt.get("status") != "PASS": + raise ValueError(f"source summary is not PASS: {summary}") + if receipt.get("package_sha256") != sha256_file(package): + raise ValueError(f"source package hash mismatch: {package}") + if receipt.get("index_sha256") != sha256_file(index): + raise ValueError(f"source index hash mismatch: {index}") + with np.load(package, allow_pickle=False) as values: + arrays = {name: np.asarray(values[name]) for name in values.files} + rows = temporal.read_tsv(index) + required = { + "campaign_index", + "features", + "feature_mask", + "qc_dominant_conformer_occupancy", + "feature_names", + "window_start_ps", + "window_end_ps", + } + if required - set(arrays): + raise ValueError(f"source package is missing {sorted(required - set(arrays))}") + if len(rows) != len(arrays["campaign_index"]): + raise ValueError("source index and package row counts differ") + for offset, row in enumerate(rows): + if int(row["campaign_index"]) != int(arrays["campaign_index"][offset]): + raise ValueError("source index and package campaign order differ") + return arrays, rows, receipt + + +def build(args: argparse.Namespace) -> dict: + package_dir = args.output_dir / "package" + if package_dir.exists(): + raise FileExistsError(package_dir) + base, base_rows, base_summary = load_source( + args.base_package, args.base_index, args.base_summary + ) + affected, affected_rows, affected_summary = load_source( + args.affected_package, args.affected_index, args.affected_summary + ) + if len(base_rows) != args.expected_base_states: + raise ValueError(f"base package has {len(base_rows)} states") + if len(affected_rows) != args.expected_affected_states: + raise ValueError(f"affected package has {len(affected_rows)} states") + for name in ("feature_names", "window_start_ps", "window_end_ps"): + if not np.array_equal(base[name], affected[name]): + raise ValueError(f"source representation mismatch: {name}") + + base_by_key: dict[tuple[int, str], int] = {} + for offset, row in enumerate(base_rows): + key = (int(row["campaign_index"]), row["structure_state_id"]) + if key in base_by_key: + raise ValueError(f"duplicate base identity: {key}") + base_by_key[key] = offset + + affected_base_rows: list[int] = [] + seen: set[tuple[int, str]] = set() + for row in affected_rows: + key = (int(row["campaign_index"]), row["structure_state_id"]) + if key in seen: + raise ValueError(f"duplicate affected identity: {key}") + seen.add(key) + base_offset = base_by_key.get(key) + if base_offset is None: + raise ValueError(f"affected identity absent from base: {key}") + base_row = base_rows[base_offset] + for field in ("parent_glycorpus_id", "state_label", "state_role"): + if row.get(field, "") != base_row.get(field, ""): + raise ValueError(f"affected identity mismatch for {key}: {field}") + affected_base_rows.append(base_offset) + + if not np.array_equal( + base["feature_mask"][affected_base_rows], affected["feature_mask"] + ): + raise ValueError("affected applicability masks changed") + + features = np.asarray(base["features"], dtype=np.float32).copy() + masks = np.asarray(base["feature_mask"], dtype=np.uint8).copy() + conformer = np.asarray( + base["qc_dominant_conformer_occupancy"], dtype=np.float32 + ).copy() + unaffected = np.ones(len(base_rows), dtype=bool) + unaffected[affected_base_rows] = False + original_unaffected = features[unaffected].copy() + features[affected_base_rows] = affected["features"] + masks[affected_base_rows] = affected["feature_mask"] + conformer[affected_base_rows] = affected["qc_dominant_conformer_occupancy"] + if not np.array_equal(features[unaffected], original_unaffected): + raise AssertionError("unaffected state tensors changed") + + staging = args.output_dir / f"package.tmp.{os.getpid()}" + if staging.exists(): + raise FileExistsError(staging) + staging.mkdir(parents=True) + package_path = staging / PACKAGE_NAME + index_path = staging / INDEX_NAME + summary_path = staging / SUMMARY_NAME + output_arrays = dict(base) + output_arrays.update( + features=features, + feature_mask=masks, + qc_dominant_conformer_occupancy=conformer, + ) + temporal.atomic_write_npz(package_path, **output_arrays) + shutil.copy2(args.base_index, index_path) + + changed_count = int( + np.sum( + np.any( + features[affected_base_rows] + != np.asarray(base["features"])[affected_base_rows], + axis=(1, 2), + ) + ) + ) + feature_names = [str(value) for value in base["feature_names"]] + summary = { + "schema": SCHEMA, + "status": "PASS", + "created_at_utc": datetime.now(timezone.utc).isoformat(), + "state_count": len(base_rows), + "parent_count": len({row["parent_glycorpus_id"] for row in base_rows}), + "affected_state_count": len(affected_rows), + "unaffected_state_count": int(np.sum(unaffected)), + "affected_state_value_changed_count": changed_count, + "unaffected_state_tensor_values_verified_unchanged": True, + "tensor_shape": list(features.shape), + "mask_shape": list(masks.shape), + "feature_names": feature_names, + "feature_summary": temporal.masked_summary(features, masks), + "feature_correlation_order": feature_names, + "pairwise_masked_pearson_correlation": temporal.pairwise_masked_correlation( + features, masks + ), + "terminal_span_state_count": int(np.sum(np.all(masks[:, :, 6] == 1, axis=1))), + "torsion_state_count": int(np.sum(np.all(masks[:, :, 7:9] == 1, axis=(1, 2)))), + "qc_dominant_conformer_occupancy_summary": { + "mean": float(np.mean(conformer)), + "sd": float(np.std(conformer)), + "min": float(np.min(conformer)), + "median": float(np.median(conformer)), + "max": float(np.max(conformer)), + }, + "base_source_sha256": { + str(args.base_package.resolve()): sha256_file(args.base_package), + str(args.base_index.resolve()): sha256_file(args.base_index), + str(args.base_summary.resolve()): sha256_file(args.base_summary), + }, + "affected_source_sha256": { + str(args.affected_package.resolve()): sha256_file(args.affected_package), + str(args.affected_index.resolve()): sha256_file(args.affected_index), + str(args.affected_summary.resolve()): sha256_file(args.affected_summary), + }, + "base_source_schema": base_summary.get("schema"), + "affected_source_schema": affected_summary.get("schema"), + "package_path": str((package_dir / PACKAGE_NAME).resolve()), + "package_sha256": sha256_file(package_path), + "index_path": str((package_dir / INDEX_NAME).resolve()), + "index_sha256": sha256_file(index_path), + "official_submitted_artifacts_modified": False, + "claim_boundary": ( + "ordered_short_timescale_sampled_descriptors_not_equilibrium_populations" + ), + } + temporal.atomic_write_json(summary_path, summary) + args.output_dir.mkdir(parents=True, exist_ok=True) + os.replace(staging, package_dir) + if sha256_file(package_dir / PACKAGE_NAME) != summary["package_sha256"]: + raise ValueError("published package hash mismatch") + if sha256_file(package_dir / INDEX_NAME) != summary["index_sha256"]: + raise ValueError("published index hash mismatch") + return summary + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--base-package", type=Path, required=True) + parser.add_argument("--base-index", type=Path, required=True) + parser.add_argument("--base-summary", type=Path, required=True) + parser.add_argument("--affected-package", type=Path, required=True) + parser.add_argument("--affected-index", type=Path, required=True) + parser.add_argument("--affected-summary", type=Path, required=True) + parser.add_argument("--output-dir", type=Path, required=True) + parser.add_argument("--expected-base-states", type=int, default=47063) + parser.add_argument("--expected-affected-states", type=int, default=9943) + return parser.parse_args() + + +def main() -> None: + print(json.dumps(build(parse_args()), indent=2, sort_keys=True)) + + +if __name__ == "__main__": + main() diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/prepare_review_md_charge_corrected_feature_overlay_r1.py b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/prepare_review_md_charge_corrected_feature_overlay_r1.py new file mode 100644 index 0000000000000000000000000000000000000000..0bfe17e4c93eb796816c7b538d63b7c7680df4f5 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/prepare_review_md_charge_corrected_feature_overlay_r1.py @@ -0,0 +1,197 @@ +#!/usr/bin/env python3 +"""Create the affected-state analysis manifest from corrected MD outputs.""" + +from __future__ import annotations + +import argparse +import csv +import gzip +import hashlib +import json +import os +import re +from datetime import datetime, timezone +from pathlib import Path + + +SCHEMA = "review_md_charge_corrected_feature_overlay_manifest_20260802_r1" +SAFE_STATE = re.compile(r"^[A-Za-z0-9_.-]+$") + + +def sha256_file(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as handle: + for block in iter(lambda: handle.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def read_tsv(path: Path) -> list[dict[str, str]]: + opener = gzip.open if path.suffix == ".gz" else open + with opener(path, "rt", encoding="utf-8", newline="") as handle: + return list(csv.DictReader(handle, delimiter="\t")) + + +def atomic_write_json(path: Path, payload: object) -> None: + temporary = path.with_name(f".{path.name}.tmp.{os.getpid()}") + temporary.write_text( + json.dumps(payload, indent=2, sort_keys=True) + "\n", + encoding="utf-8", + ) + os.replace(temporary, path) + + +def atomic_write_tsv( + path: Path, rows: list[dict[str, object]], fields: list[str] +) -> None: + temporary = path.with_name(f".{path.name}.tmp.{os.getpid()}") + with temporary.open("w", encoding="utf-8", newline="") as handle: + writer = csv.DictWriter( + handle, + delimiter="\t", + fieldnames=fields, + lineterminator="\n", + extrasaction="raise", + ) + writer.writeheader() + writer.writerows(rows) + os.replace(temporary, path) + + +def require_complete_summary(path: Path, campaign_index: int, state_id: str) -> dict: + value = json.loads(path.read_text(encoding="utf-8")) + required = { + "final_status": "production_passed", + "charge_correction_status": "passed", + "conversion_status": "passed", + "compact_trajectory_frames": 1001, + } + for field, expected in required.items(): + if value.get(field) != expected: + raise ValueError(f"{path}: {field}={value.get(field)!r}, expected {expected!r}") + if abs(float(value.get("compact_trajectory_last_time_ps", -1)) - 20000.0) > 1e-6: + raise ValueError(f"{path}: compact trajectory does not end at 20000 ps") + if int(value.get("campaign_index", campaign_index)) != campaign_index: + raise ValueError(f"{path}: campaign identity mismatch") + if value.get("structure_state_id", state_id) != state_id: + raise ValueError(f"{path}: structure-state identity mismatch") + return value + + +def build(args: argparse.Namespace) -> dict: + if args.output_manifest.exists() or args.output_receipt.exists(): + raise FileExistsError("refusing to overwrite an existing overlay manifest") + base_rows = read_tsv(args.base_analysis_manifest) + affected_rows = read_tsv(args.affected_manifest) + if len(base_rows) != args.expected_base_states: + raise ValueError(f"base manifest has {len(base_rows)} rows") + if len(affected_rows) != args.expected_affected_states: + raise ValueError(f"affected manifest has {len(affected_rows)} rows") + + base_by_index: dict[int, dict[str, str]] = {} + for row in base_rows: + index = int(row["campaign_index"]) + if index in base_by_index: + raise ValueError(f"duplicate base campaign index: {index}") + base_by_index[index] = row + + output_rows: list[dict[str, object]] = [] + seen: set[int] = set() + for affected in affected_rows: + index = int(affected["campaign_index"]) + state_id = affected["structure_state_id"] + if index in seen: + raise ValueError(f"duplicate affected campaign index: {index}") + seen.add(index) + if not SAFE_STATE.fullmatch(state_id): + raise ValueError(f"unsafe structure-state identity: {state_id!r}") + base = base_by_index.get(index) + if base is None: + raise ValueError(f"affected campaign index absent from base: {index}") + for field in ( + "structure_state_id", + "parent_glycorpus_id", + "state_label", + "state_role", + ): + if affected[field] != base[field]: + raise ValueError(f"identity mismatch at {index}: {field}") + + state_dir = args.corrected_campaign / "states" / f"{index:06d}_{state_id}" + input_pdb = state_dir / "input.pdb" + gro = state_dir / "gromacs_run" / "md_solute.gro" + xtc = state_dir / "gromacs_run" / "md_solute.xtc" + summary = state_dir / "state_summary.json" + for path in (input_pdb, gro, xtc, summary): + if not path.is_file() or path.stat().st_size == 0: + raise FileNotFoundError(path) + require_complete_summary(summary, index, state_id) + input_hash = sha256_file(input_pdb) + if input_hash != base["input_pdb_sha256"]: + raise ValueError(f"input PDB changed for campaign index {index}") + + row: dict[str, object] = dict(base) + row.update( + { + "state_dir": str(state_dir.resolve()), + "input_pdb": str(input_pdb.resolve()), + "md_solute_gro": str(gro.resolve()), + "md_solute_xtc": str(xtc.resolve()), + "input_pdb_sha256": input_hash, + "corrected_state_summary": str(summary.resolve()), + "corrected_state_summary_sha256": sha256_file(summary), + "corrected_md_solute_gro_sha256": sha256_file(gro), + "corrected_md_solute_xtc_sha256": sha256_file(xtc), + } + ) + output_rows.append(row) + + output_rows.sort(key=lambda row: int(row["campaign_index"])) + fields = list(base_rows[0]) + [ + "corrected_state_summary", + "corrected_state_summary_sha256", + "corrected_md_solute_gro_sha256", + "corrected_md_solute_xtc_sha256", + ] + args.output_manifest.parent.mkdir(parents=True, exist_ok=True) + atomic_write_tsv(args.output_manifest, output_rows, fields) + receipt = { + "schema": SCHEMA, + "status": "PASS", + "created_at_utc": datetime.now(timezone.utc).isoformat(), + "base_analysis_manifest": str(args.base_analysis_manifest.resolve()), + "base_analysis_manifest_sha256": sha256_file(args.base_analysis_manifest), + "affected_manifest": str(args.affected_manifest.resolve()), + "affected_manifest_sha256": sha256_file(args.affected_manifest), + "corrected_campaign": str(args.corrected_campaign.resolve()), + "base_state_count": len(base_rows), + "affected_state_count": len(output_rows), + "unaffected_state_count": len(base_rows) - len(output_rows), + "output_manifest": str(args.output_manifest.resolve()), + "output_manifest_sha256": sha256_file(args.output_manifest), + "identity_match_count": len(output_rows), + "production_qc_pass_count": len(output_rows), + "official_submitted_artifacts_modified": False, + } + atomic_write_json(args.output_receipt, receipt) + return receipt + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--base-analysis-manifest", type=Path, required=True) + parser.add_argument("--affected-manifest", type=Path, required=True) + parser.add_argument("--corrected-campaign", type=Path, required=True) + parser.add_argument("--output-manifest", type=Path, required=True) + parser.add_argument("--output-receipt", type=Path, required=True) + parser.add_argument("--expected-base-states", type=int, default=47063) + parser.add_argument("--expected-affected-states", type=int, default=9943) + return parser.parse_args() + + +def main() -> None: + print(json.dumps(build(parse_args()), indent=2, sort_keys=True)) + + +if __name__ == "__main__": + main() diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_all20_charge_corrected_run_state_r6.py b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_all20_charge_corrected_run_state_r6.py new file mode 100644 index 0000000000000000000000000000000000000000..1e603ea05fd1d06659cb50bf298f08873a0a0a1a --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_all20_charge_corrected_run_state_r6.py @@ -0,0 +1,2239 @@ +#!/usr/bin/env python3 +"""Run one charge-corrected 20 ns reviewed MD campaign state. + +Pipeline: +1. Build a probe AMBER/GLYCAM topology with tleap. +2. Resolve ACX/MEX/SO3 linkage-aware charge targets and rebuild the topology. +3. Convert AMBER to GROMACS with ACPYPE and require per-atom charge parity. +4. If conversion passes, run GROMACS minimization/equilibration/production. +5. Generate a solute-only trajectory for downstream glycan-shape analysis. + +This runner is for the separately versioned affected-state correction lane. It +does not reuse the original campaign outputs and fails closed on missing or +ambiguous modifier linkage chemistry. +""" + +from __future__ import annotations + +import argparse +import csv +import json +import math +import os +import re +import shutil +import subprocess +import sys +import tempfile +import time +from collections import Counter +from pathlib import Path +from typing import Any + + +TLEAP_RE = re.compile(r"Exiting LEaP: Errors = (\d+); Warnings = (\d+); Notes = (\d+)\.") +GMX_CHECK_COORDS_RE = re.compile(r"^Coords\s+(\d+)\s+([0-9.eE+-]+)\s*$", re.MULTILINE) +GMX_CHECK_LAST_FRAME_RE = re.compile(r"Last frame\s+(\d+)\s+time\s+([0-9.eE+-]+)") +GMX_MDRUN_NB_RE = re.compile( + r"^\s*(?:\S*/)?gmx\s+mdrun\b[^\n]*\s-nb\s+(cpu|gpu)(?:\s|$)", + re.MULTILINE, +) +SUMMARY_VISIBILITY_SETTLE_SECONDS = 2.0 +CHARGE_TOLERANCE_E = 1.1e-6 +INTEGER_CHARGE_TOLERANCE_E = 1.1e-6 +MASS_SERIALIZATION_TOLERANCE_DA = 5.0e-4 +MODIFIER_RULES: dict[str, dict[str, Any]] = { + "ACX": {"link_atom": "C1A", "target": "linked_carbon", "delta_e": 0.008}, + "MEX": {"link_atom": "CH3", "target": "linked_carbon", "delta_e": -0.039}, + "SO3": {"link_atom": "S1", "target": "linked_oxygen", "delta_e": 0.031}, +} +MODIFIER_OXYGEN_DISTANCE_WINDOWS_ANGSTROM: dict[str, tuple[float, float]] = { + "ACX": (1.28, 1.38), + "MEX": (1.42, 1.51), + "SO3": (1.55, 1.65), +} + + +class ChargeCorrectionError(ValueError): + """A deterministic modifier-charge failure with a stable category.""" + + def __init__(self, category: str, detail: str): + super().__init__(f"{category}: {detail}") + self.category = category + self.detail = detail + + +def safe_name(value: str) -> str: + return "".join(ch if ch.isalnum() or ch in "._-" else "_" for ch in value) + + +def resolve_executable(name: str) -> str | None: + exe = shutil.which(name) + if not exe: + return None + return str(Path(exe).resolve()) + + +def production_pressure_coupling() -> str: + requested = os.environ.get("REVIEW_MD_PROD_PCOUPL", "Parrinello-Rahman").strip() + normalized = requested.lower().replace("_", "-") + aliases = { + "parrinello-rahman": "Parrinello-Rahman", + "pr": "Parrinello-Rahman", + "c-rescale": "C-rescale", + "crescale": "C-rescale", + } + return aliases.get(normalized, "Parrinello-Rahman") + + +def env_flag(name: str) -> bool: + return os.environ.get(name, "").strip().lower() in {"1", "true", "yes", "on"} + + +def env_float(name: str, default: float, minimum: float, maximum: float) -> float: + try: + value = float(os.environ.get(name, str(default))) + except ValueError: + return default + return value if minimum <= value <= maximum else default + + +def env_int(name: str, default: int, minimum: int, maximum: int) -> int: + try: + value = int(os.environ.get(name, str(default))) + except ValueError: + return default + return value if minimum <= value <= maximum else default + + +def equilibration_dt_ps() -> float: + return env_float("REVIEW_MD_EQUIL_DT_PS", 0.002, 0.0005, 0.002) + + +def production_dt_ps() -> float: + return env_float("REVIEW_MD_PROD_DT_PS", 0.002, 0.0005, 0.002) + + +def checkpoint_interval_minutes() -> float: + default = 1.0 if os.environ.get("SLURM_JOB_PARTITION", "").strip() == "scavenger" else 15.0 + try: + requested = float(os.environ.get("REVIEW_MD_CPT_MINUTES", str(default))) + except ValueError: + return default + return requested if 0.5 <= requested <= 60.0 else default + + +def minimization_emtol() -> float: + return env_float("REVIEW_MD_MINIM_EMTOL", 1000.0, 1.0, 1000.0) + + +def minimization_steps() -> int: + return env_int("REVIEW_MD_MINIM_STEPS", 50000, 1000, 500000) + + +def nvt_duration_ps() -> float: + return env_float("REVIEW_MD_NVT_PS", 200.0, 50.0, 5000.0) + + +def npt_duration_ps() -> float: + return env_float("REVIEW_MD_NPT_PS", 500.0, 100.0, 10000.0) + + +def row_index(row: dict[str, str]) -> int: + for key in ("campaign_index", "pilot_index", "state_index"): + value = row.get(key, "") + if value not in {"", None}: + return int(value) + raise KeyError("manifest row has no campaign_index/pilot_index/state_index") + + +def read_state(manifest: Path, requested_index: int) -> dict[str, str]: + with manifest.open() as handle: + rows = list(csv.DictReader(handle, delimiter="\t")) + for row in rows: + if row_index(row) == requested_index: + return row + raise SystemExit(f"campaign index {requested_index} not found in {manifest}") + + +def run_cmd(cmd: list[str], cwd: Path, label: str, summary: dict) -> int: + log_dir = cwd / "logs" + log_dir.mkdir(parents=True, exist_ok=True) + log_path = log_dir / f"{label}.log" + started = time.time() + with log_path.open("w") as log: + log.write("$ " + " ".join(cmd) + "\n\n") + proc = subprocess.run(cmd, cwd=cwd, stdout=log, stderr=subprocess.STDOUT, text=True, check=False) + elapsed = time.time() - started + summary.setdefault("commands", []).append( + { + "label": label, + "cmd": cmd, + "return_code": proc.returncode, + "elapsed_seconds": round(elapsed, 3), + "log": str(log_path), + } + ) + return proc.returncode + + +def run_shell(command: str, cwd: Path, label: str, summary: dict) -> int: + return run_cmd(["bash", "-lc", command], cwd, label, summary) + + +def write_text(path: Path, text: str) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(text) + + +def atomic_write_text(path: Path, text: str) -> None: + """Publish terminal metadata without exposing a partially written file.""" + path.parent.mkdir(parents=True, exist_ok=True) + temporary: Path | None = None + try: + with tempfile.NamedTemporaryFile( + "w", + dir=path.parent, + prefix=f".{path.name}.", + suffix=".tmp", + delete=False, + ) as handle: + handle.write(text) + handle.flush() + os.fsync(handle.fileno()) + temporary = Path(handle.name) + os.replace(temporary, path) + temporary = None + finally: + if temporary is not None: + temporary.unlink(missing_ok=True) + + +def parse_tleap_counts(log_text: str) -> tuple[int | None, int | None, int | None]: + match = TLEAP_RE.search(log_text) + if not match: + return None, None, None + return tuple(int(x) for x in match.groups()) + + +def load_parmed(topology: Path, coordinates: Path | None = None) -> Any: + try: + import parmed as pmd + except ImportError as exc: + raise ChargeCorrectionError("missing_parmed", repr(exc)) from exc + if coordinates is None: + return pmd.load_file(str(topology)) + return pmd.load_file(str(topology), xyz=str(coordinates)) + + +def atom_element(atom: Any) -> str: + atomic_number = int(getattr(atom, "atomic_number", 0) or 0) + by_number = {1: "H", 6: "C", 7: "N", 8: "O", 15: "P", 16: "S"} + if atomic_number in by_number: + return by_number[atomic_number] + letters = "".join(character for character in str(atom.name) if character.isalpha()).upper() + return letters[:1] + + +def residue_name(residue: Any) -> str: + return str(getattr(residue, "name", "")).strip().upper() + + +def topology_modifier_counts(structure: Any) -> Counter[str]: + return Counter( + residue_name(residue) + for residue in structure.residues + if residue_name(residue) in MODIFIER_RULES + ) + + +def atom_distance_angstrom(left: dict[str, Any], right: dict[str, Any]) -> float: + return math.sqrt( + sum( + (float(left_value) - float(right_value)) ** 2 + for left_value, right_value in zip( + left["coordinates_angstrom"], right["coordinates_angstrom"] + ) + ) + ) + + +def parse_explicit_pdb_modifier_links(path: Path) -> dict[str, Any]: + atoms: dict[int, dict[str, Any]] = {} + atom_serial_order: list[int] = [] + edges: set[tuple[int, int]] = set() + for line in path.read_text(encoding="utf-8", errors="strict").splitlines(): + if line.startswith(("ATOM ", "HETATM")): + if line[16:17] not in {" ", "A"}: + continue + serial = int(line[6:11]) + if serial in atoms: + raise ChargeCorrectionError("pdb_duplicate_atom_serial", str(serial)) + atom_serial_order.append(serial) + atoms[serial] = { + "serial": serial, + "atom_name": line[12:16].strip(), + "residue_name": line[17:20].strip().upper(), + "chain": line[21:22], + "residue_number": int(line[22:26]), + "insertion_code": line[26:27], + "element": line[76:78].strip().upper() + or line[12:16].strip()[:1].upper(), + "coordinates_angstrom": [ + float(line[30:38]), + float(line[38:46]), + float(line[46:54]), + ], + } + elif line.startswith("CONECT"): + values = [int(value) for value in line.split()[1:]] + if len(values) >= 2: + source = values[0] + for target in values[1:]: + if source != target: + edges.add(tuple(sorted((source, target)))) + + modifier_atoms = [atom for atom in atoms.values() if atom["residue_name"] in MODIFIER_RULES] + modifier_residues = { + (atom["chain"], atom["residue_number"], atom["insertion_code"], atom["residue_name"]) + for atom in modifier_atoms + } + links: list[dict[str, Any]] = [] + for chain, residue_number, insertion_code, modifier_name in sorted(modifier_residues): + rule = MODIFIER_RULES[modifier_name] + link_atoms = [ + atom + for atom in modifier_atoms + if atom["chain"] == chain + and atom["residue_number"] == residue_number + and atom["insertion_code"] == insertion_code + and atom["residue_name"] == modifier_name + and atom["atom_name"] == rule["link_atom"] + ] + if len(link_atoms) != 1: + raise ChargeCorrectionError( + "pdb_modifier_link_atom_count", + f"{modifier_name} residue {residue_number} has {len(link_atoms)} {rule['link_atom']} atoms", + ) + link_atom = link_atoms[0] + neighbors: list[dict[str, Any]] = [] + for left, right in edges: + if link_atom["serial"] == left and right in atoms: + neighbors.append(atoms[right]) + elif link_atom["serial"] == right and left in atoms: + neighbors.append(atoms[left]) + cross_residue = [ + atom + for atom in neighbors + if ( + atom["chain"], + atom["residue_number"], + atom["insertion_code"], + atom["residue_name"], + ) + != (chain, residue_number, insertion_code, modifier_name) + ] + if not cross_residue: + distance_min, distance_max = MODIFIER_OXYGEN_DISTANCE_WINDOWS_ANGSTROM[ + modifier_name + ] + cross_residue = [ + atom + for atom in atoms.values() + if atom["element"] == "O" + and ( + atom["chain"], + atom["residue_number"], + atom["insertion_code"], + atom["residue_name"], + ) + != (chain, residue_number, insertion_code, modifier_name) + and distance_min + <= atom_distance_angstrom(link_atom, atom) + <= distance_max + ] + link_source = "unique_covalent_distance_then_leap_graph" + else: + distance_min = None + distance_max = None + link_source = "conect" + if len(cross_residue) != 1: + if link_source == "conect": + category = "ambiguous_explicit_modifier_link" + elif not cross_residue: + category = "missing_geometric_modifier_link" + else: + category = "ambiguous_geometric_modifier_link" + raise ChargeCorrectionError( + category, + f"{modifier_name} residue {residue_number} resolves {len(cross_residue)} cross-residue oxygen candidates", + ) + linked = cross_residue[0] + if linked["element"] != "O": + raise ChargeCorrectionError( + "explicit_modifier_link_not_oxygen", + f"{modifier_name} residue {residue_number} links to {linked['atom_name']}", + ) + if rule["target"] == "linked_oxygen": + target = linked + target_distance = 0.0 + target_relation = "same_atom" + else: + if not re.fullmatch(r"O[0-9A-Za-z]+", linked["atom_name"]): + raise ChargeCorrectionError("pdb_linked_oxygen_name", linked["atom_name"]) + expected_carbon_name = "C" + linked["atom_name"][1:] + candidates: list[tuple[dict[str, Any], float]] = [] + for atom in atoms.values(): + if atom["element"] != "C" or atom["atom_name"] != expected_carbon_name: + continue + if ( + atom["chain"], + atom["residue_number"], + atom["insertion_code"], + atom["residue_name"], + ) != ( + linked["chain"], + linked["residue_number"], + linked["insertion_code"], + linked["residue_name"], + ): + continue + distance = atom_distance_angstrom(linked, atom) + if 1.15 <= distance <= 1.75: + candidates.append((atom, distance)) + if len(candidates) != 1: + raise ChargeCorrectionError( + "pdb_linked_oxygen_carbon_count", + f"{modifier_name} residue {residue_number} resolves {len(candidates)} source O-C neighbors", + ) + target, target_distance = candidates[0] + target_relation = "bond" + links.append( + { + "modifier": modifier_name, + "modifier_residue_index_1based": residue_number, + "modifier_link_atom": link_atom["atom_name"], + "modifier_link_serial": link_atom["serial"], + "linked_oxygen_residue_index_1based": linked["residue_number"], + "linked_oxygen_name": linked["atom_name"], + "linked_oxygen_serial": linked["serial"], + "target_residue_index_1based": target["residue_number"], + "target_atom_name": target["atom_name"], + "target_atom_serial": target["serial"], + "oxygen_target_relation": target_relation, + "oxygen_target_distance_angstrom": target_distance, + "modifier_oxygen_distance_angstrom": atom_distance_angstrom( + link_atom, linked + ), + "geometry_distance_window_angstrom": ( + [distance_min, distance_max] + if link_source == "unique_covalent_distance_then_leap_graph" + else None + ), + "link_source": link_source, + } + ) + link_sources = Counter(row["link_source"] for row in links) + return { + "modifier_counts": dict( + sorted(Counter(value[3] for value in modifier_residues).items()) + ), + "atom_count": len(atoms), + "atoms": [atoms[serial] for serial in atom_serial_order], + "link_count": len(links), + "conect_link_count": int(link_sources.get("conect", 0)), + "geometry_link_count": int( + link_sources.get("unique_covalent_distance_then_leap_graph", 0) + ), + "links": links, + } + + +def verify_pdb_topology_link_agreement( + pdb_contract: dict[str, Any], + topology_plan: dict[str, Any], + topology: Any, +) -> dict[str, Any]: + pdb_atoms = pdb_contract["atoms"] + if len(pdb_atoms) != len(topology.atoms): + raise ChargeCorrectionError( + "pdb_topology_atom_count", f"PDB {len(pdb_atoms)} LEaP {len(topology.atoms)}" + ) + topology_atoms_by_identity: dict[tuple[Any, ...], list[Any]] = {} + for topology_atom in topology.atoms: + identity = ( + int(topology_atom.residue.idx) + 1, + residue_name(topology_atom.residue), + str(topology_atom.name).strip(), + atom_element(topology_atom), + ) + topology_atoms_by_identity.setdefault(identity, []).append(topology_atom) + + duplicate_topology_identities = { + identity: len(matches) + for identity, matches in topology_atoms_by_identity.items() + if len(matches) != 1 + } + if duplicate_topology_identities: + raise ChargeCorrectionError( + "pdb_topology_duplicate_leap_identity", + str(duplicate_topology_identities), + ) + + pdb_identity_counts = Counter( + ( + int(pdb_atom["residue_number"]), + pdb_atom["residue_name"], + pdb_atom["atom_name"], + pdb_atom["element"], + ) + for pdb_atom in pdb_atoms + ) + duplicate_pdb_identities = { + identity: count for identity, count in pdb_identity_counts.items() if count != 1 + } + if duplicate_pdb_identities: + raise ChargeCorrectionError( + "pdb_topology_duplicate_pdb_identity", + str(duplicate_pdb_identities), + ) + + serial_map: dict[int, int] = {} + mapping_errors: list[dict[str, Any]] = [] + order_difference_count = 0 + for position, pdb_atom in enumerate(pdb_atoms, 1): + identity = ( + int(pdb_atom["residue_number"]), + pdb_atom["residue_name"], + pdb_atom["atom_name"], + pdb_atom["element"], + ) + matches = topology_atoms_by_identity.get(identity, []) + if len(matches) != 1: + mapping_errors.append( + { + "position_1based": position, + "pdb_serial": int(pdb_atom["serial"]), + "identity": identity, + "leap_match_count": len(matches), + } + ) + continue + topology_atom = matches[0] + topology_index = int(topology_atom.idx) + 1 + serial_map[int(pdb_atom["serial"])] = topology_index + if topology_index != position: + order_difference_count += 1 + if mapping_errors: + serial_map = {} + if len(serial_map) != len(pdb_atoms) or len(set(serial_map.values())) != len(pdb_atoms): + raise ChargeCorrectionError("pdb_topology_serial_bijection", "serial mapping is not bijective") + if set(serial_map.values()) != { + int(topology_atom.idx) + 1 for topology_atom in topology.atoms + }: + raise ChargeCorrectionError( + "pdb_topology_incomplete_leap_coverage", + "PDB identities do not cover every LEaP atom exactly once", + ) + + topology_bonds = { + tuple(sorted((int(bond.atom1.idx) + 1, int(bond.atom2.idx) + 1))) + for bond in topology.bonds + } + event_keys = { + ( + event["modifier"], + int(event["modifier_residue_index_1based"]), + event["modifier_link_atom"], + int(event["linked_oxygen_index_1based"]), + int(event["target_atom_index_1based"]), + ): event + for event in topology_plan["events"] + } + if len(event_keys) != len(topology_plan["events"]): + raise ChargeCorrectionError("duplicate_topology_charge_event", str(topology_plan["events"])) + + edge_rows: list[dict[str, Any]] = [] + for row in pdb_contract["links"]: + modifier_index = serial_map[int(row["modifier_link_serial"])] + oxygen_index = serial_map[int(row["linked_oxygen_serial"])] + target_index = serial_map[int(row["target_atom_serial"])] + key = ( + row["modifier"], + int(row["modifier_residue_index_1based"]), + row["modifier_link_atom"], + oxygen_index, + target_index, + ) + modifier_edge = tuple(sorted((modifier_index, oxygen_index))) + if row["oxygen_target_relation"] == "same_atom": + target_relation_pass = oxygen_index == target_index + elif row["oxygen_target_relation"] == "bond": + target_relation_pass = tuple(sorted((oxygen_index, target_index))) in topology_bonds + else: + raise ChargeCorrectionError( + "pdb_oxygen_target_relation", str(row["oxygen_target_relation"]) + ) + edge_rows.append( + { + "modifier": row["modifier"], + "modifier_residue_index_1based": row["modifier_residue_index_1based"], + "modifier_link_atom": row["modifier_link_atom"], + "linked_oxygen_residue_index_1based": row[ + "linked_oxygen_residue_index_1based" + ], + "linked_oxygen_name": row["linked_oxygen_name"], + "target_residue_index_1based": row["target_residue_index_1based"], + "target_atom_name": row["target_atom_name"], + "modifier_oxygen_edge_in_leap": modifier_edge in topology_bonds, + "oxygen_target_relation_in_leap": target_relation_pass, + "matching_charge_event": key in event_keys, + } + ) + passed = ( + not mapping_errors + and len(edge_rows) == len(event_keys) + and all( + row["modifier_oxygen_edge_in_leap"] + and row["oxygen_target_relation_in_leap"] + and row["matching_charge_event"] + for row in edge_rows + ) + ) + return { + "pdb_atom_count": len(pdb_atoms), + "leap_atom_count": len(topology.atoms), + "serial_mapping_error_count": len(mapping_errors), + "serial_mapping_error_examples": mapping_errors[:20], + "atom_order_difference_count": order_difference_count, + "pdb_serial_to_leap_atom_index_1based": { + str(serial): index for serial, index in sorted(serial_map.items()) + }, + "edge_count": len(edge_rows), + "edges": edge_rows, + "unmatched_topology_event_count": len(event_keys) - len(edge_rows), + "pass": passed, + } + + +def expected_modifier_counts(row: dict[str, str]) -> dict[str, int]: + counts: dict[str, int] = {} + for modifier in MODIFIER_RULES: + field = f"{modifier.lower()}_count" + if field not in row: + raise ChargeCorrectionError("missing_modifier_count_field", field) + try: + value = int(row[field]) + except ValueError as exc: + raise ChargeCorrectionError("invalid_modifier_count", f"{field}={row[field]!r}") from exc + if value < 0: + raise ChargeCorrectionError("negative_modifier_count", f"{field}={value}") + counts[modifier] = value + if sum(counts.values()) == 0: + raise ChargeCorrectionError("state_not_in_affected_chemistry", str(counts)) + return counts + + +def resolve_charge_adjustments(structure: Any) -> dict[str, Any]: + """Resolve each modifier's charge target from the LEaP bond graph.""" + + events: list[dict[str, Any]] = [] + modifier_residues = [ + residue for residue in structure.residues if residue_name(residue) in MODIFIER_RULES + ] + for modifier in modifier_residues: + name = residue_name(modifier) + rule = MODIFIER_RULES[name] + link_atoms = [ + atom for atom in modifier.atoms if str(atom.name).strip() == rule["link_atom"] + ] + if len(link_atoms) != 1: + raise ChargeCorrectionError( + "modifier_link_atom_count", + f"{name} residue {modifier.idx + 1} has {len(link_atoms)} {rule['link_atom']} atoms", + ) + link = link_atoms[0] + cross_residue = [atom for atom in link.bond_partners if atom.residue is not modifier] + if not cross_residue: + raise ChargeCorrectionError( + "missing_modifier_cross_residue_bond", + f"{name} residue {modifier.idx + 1} has no cross-residue bond at {link.name}", + ) + if len(cross_residue) != 1: + raise ChargeCorrectionError( + "ambiguous_modifier_cross_residue_bond", + f"{name} residue {modifier.idx + 1} has {len(cross_residue)} cross-residue bonds", + ) + linked_oxygen = cross_residue[0] + if atom_element(linked_oxygen) != "O": + raise ChargeCorrectionError( + "modifier_cross_residue_atom_not_oxygen", + f"{name} residue {modifier.idx + 1} links to {linked_oxygen.name}", + ) + if rule["target"] == "linked_oxygen": + target = linked_oxygen + else: + carbon_targets = [ + atom + for atom in linked_oxygen.bond_partners + if atom is not link + and atom.residue is linked_oxygen.residue + and atom_element(atom) == "C" + ] + if len(carbon_targets) != 1: + raise ChargeCorrectionError( + "linked_glycan_carbon_count", + f"{name} residue {modifier.idx + 1} resolves {len(carbon_targets)} glycan carbons", + ) + target = carbon_targets[0] + same_name = [ + atom + for atom in target.residue.atoms + if str(atom.name).strip() == str(target.name).strip() + ] + if len(same_name) != 1: + raise ChargeCorrectionError( + "tleap_target_selector_not_unique", + f"residue {target.residue.idx + 1} atom {target.name} is not unique", + ) + events.append( + { + "modifier": name, + "modifier_residue_index_1based": int(modifier.idx) + 1, + "modifier_link_atom": str(link.name).strip(), + "modifier_link_index_1based": int(link.idx) + 1, + "linked_oxygen_index_1based": int(linked_oxygen.idx) + 1, + "linked_oxygen_residue_index_1based": int(linked_oxygen.residue.idx) + 1, + "linked_oxygen_name": str(linked_oxygen.name).strip(), + "target_atom_index_1based": int(target.idx) + 1, + "target_residue_index_1based": int(target.residue.idx) + 1, + "target_residue_name": residue_name(target.residue), + "target_atom_name": str(target.name).strip(), + "target_old_charge_e": float(target.charge), + "delta_e": float(rule["delta_e"]), + } + ) + + grouped: dict[int, dict[str, Any]] = {} + for event in events: + index = int(event["target_atom_index_1based"]) + if index not in grouped: + grouped[index] = { + "target_atom_index_1based": index, + "target_residue_index_1based": event["target_residue_index_1based"], + "target_residue_name": event["target_residue_name"], + "target_atom_name": event["target_atom_name"], + "old_charge_e": event["target_old_charge_e"], + "delta_e": 0.0, + "modifiers": [], + } + target = grouped[index] + if ( + target["target_residue_index_1based"] != event["target_residue_index_1based"] + or target["target_atom_name"] != event["target_atom_name"] + or abs(float(target["old_charge_e"]) - float(event["target_old_charge_e"])) + > 1.0e-12 + ): + raise ChargeCorrectionError("inconsistent_aggregated_target", str(event)) + target["delta_e"] += float(event["delta_e"]) + target["modifiers"].append(event["modifier"]) + + targets: list[dict[str, Any]] = [] + for target in sorted(grouped.values(), key=lambda item: int(item["target_atom_index_1based"])): + target["new_charge_e"] = float(target["old_charge_e"]) + float(target["delta_e"]) + target["modifiers"] = sorted(target["modifiers"]) + targets.append(target) + return { + "modifier_counts": dict(sorted(topology_modifier_counts(structure).items())), + "event_count": len(events), + "events": events, + "target_count": len(targets), + "targets": targets, + "total_delta_e": sum(float(event["delta_e"]) for event in events), + } + + +def render_probe_tleap(pdb_name: str) -> str: + return "\n".join( + [ + "source leaprc.GLYCAM_06j-1", + "source leaprc.water.tip3p", + f"mol = loadpdb {pdb_name}", + "check mol", + "charge mol", + "saveamberparm mol probe/probe.prmtop probe/probe.inpcrd", + "quit", + "", + ] + ) + + +def render_corrected_tleap(pdb_name: str, targets: list[dict[str, Any]]) -> str: + lines = [ + "source leaprc.GLYCAM_06j-1", + "source leaprc.water.tip3p", + f"mol = loadpdb {pdb_name}", + ] + for target in targets: + lines.append( + "set mol.{residue}.{atom} charge {charge:.10f}".format( + residue=int(target["target_residue_index_1based"]), + atom=target["target_atom_name"], + charge=float(target["new_charge_e"]), + ) + ) + lines.extend( + [ + "check mol", + "charge mol", + "saveamberparm mol amber/corrected_solute.prmtop amber/corrected_solute.inpcrd", + "solvateBox mol TIP3PBOX 12.0", + "addions2 mol Na+ 0", + "addions2 mol Cl- 0", + "saveamberparm mol amber/solvated.prmtop amber/solvated.inpcrd", + "savepdb mol amber/solvated.pdb", + "quit", + "", + ] + ) + return "\n".join(lines) + + +def validate_tleap_script_order(script: str, targets: list[dict[str, Any]]) -> None: + save_position = script.index("saveamberparm") + set_lines = [line for line in script.splitlines() if line.startswith("set mol.")] + if len(set_lines) != len(targets): + raise ChargeCorrectionError( + "tleap_set_line_count", f"expected {len(targets)}, found {len(set_lines)}" + ) + if any(script.index(line) >= save_position for line in set_lines): + raise ChargeCorrectionError( + "tleap_charge_set_after_save", "charge adjustment occurs after saveamberparm" + ) + + +def atom_identity(atom: Any) -> tuple[Any, ...]: + return ( + str(atom.name).strip(), + int(atom.residue.idx), + residue_name(atom.residue), + ) + + +def verify_corrected_solute(probe: Any, corrected: Any, plan: dict[str, Any]) -> dict[str, Any]: + if len(probe.atoms) != len(corrected.atoms): + raise ChargeCorrectionError( + "corrected_solute_atom_count", "probe and corrected atom counts differ" + ) + identity_mismatches = [ + index + 1 + for index, (left, right) in enumerate(zip(probe.atoms, corrected.atoms)) + if atom_identity(left) != atom_identity(right) + ] + targets = {int(item["target_atom_index_1based"]): item for item in plan["targets"]} + target_errors: list[dict[str, Any]] = [] + unexpected: list[dict[str, Any]] = [] + for index, (left, right) in enumerate(zip(probe.atoms, corrected.atoms), 1): + observed_delta = float(right.charge) - float(left.charge) + expected_delta = float(targets[index]["delta_e"]) if index in targets else 0.0 + if abs(observed_delta - expected_delta) > CHARGE_TOLERANCE_E: + value = { + "atom_index_1based": index, + "atom_name": str(left.name).strip(), + "observed_delta_e": observed_delta, + "expected_delta_e": expected_delta, + } + (target_errors if index in targets else unexpected).append(value) + source_total = sum(float(atom.charge) for atom in probe.atoms) + corrected_total = sum(float(atom.charge) for atom in corrected.atoms) + nearest_integer_error = corrected_total - round(corrected_total) + passed = ( + not identity_mismatches + and not target_errors + and not unexpected + and abs((corrected_total - source_total) - float(plan["total_delta_e"])) + <= CHARGE_TOLERANCE_E + and abs(nearest_integer_error) <= INTEGER_CHARGE_TOLERANCE_E + ) + return { + "source_total_charge_e": source_total, + "corrected_total_charge_e": corrected_total, + "expected_total_delta_e": float(plan["total_delta_e"]), + "observed_total_delta_e": corrected_total - source_total, + "corrected_nearest_integer_error_e": nearest_integer_error, + "identity_mismatch_count": len(identity_mismatches), + "identity_mismatch_examples_1based": identity_mismatches[:20], + "target_charge_error_count": len(target_errors), + "target_charge_error_examples": target_errors[:20], + "unexpected_changed_atom_count": len(unexpected), + "unexpected_changed_atom_examples": unexpected[:20], + "pass": passed, + } + + +def run_tleap( + state_dir: Path, + input_pdb: Path, + row: dict[str, str], + summary: dict, +) -> bool: + amber_dir = state_dir / "amber" + probe_dir = state_dir / "probe" + amber_dir.mkdir(exist_ok=True) + probe_dir.mkdir(exist_ok=True) + tleap = resolve_executable("tleap") + if not tleap: + summary["tleap_status"] = "missing_tleap" + return False + try: + expected_counts = expected_modifier_counts(row) + pdb_contract = parse_explicit_pdb_modifier_links(input_pdb) + pdb_counts = { + modifier: int(pdb_contract["modifier_counts"].get(modifier, 0)) + for modifier in MODIFIER_RULES + } + if pdb_counts != expected_counts: + raise ChargeCorrectionError( + "pdb_manifest_modifier_count_mismatch", + f"expected={expected_counts}, observed={pdb_counts}", + ) + probe_input = state_dir / "tleap_probe.in" + write_text(probe_input, render_probe_tleap(input_pdb.name)) + probe_rc = run_cmd([tleap, "-f", probe_input.name], state_dir, "tleap_probe", summary) + probe_log = state_dir / "logs" / "tleap_probe.log" + probe_text = probe_log.read_text(errors="replace") if probe_log.exists() else "" + probe_errors, probe_warnings, probe_notes = parse_tleap_counts(probe_text) + probe_prmtop = probe_dir / "probe.prmtop" + probe_inpcrd = probe_dir / "probe.inpcrd" + if not ( + probe_rc == 0 + and probe_errors == 0 + and probe_prmtop.exists() + and probe_inpcrd.exists() + ): + summary.update( + { + "tleap_status": "failed_probe", + "tleap_probe_errors": probe_errors, + "tleap_probe_warnings": probe_warnings, + "tleap_probe_notes": probe_notes, + } + ) + return False + + probe = load_parmed(probe_prmtop, probe_inpcrd) + plan = resolve_charge_adjustments(probe) + observed_counts = {modifier: int(plan["modifier_counts"].get(modifier, 0)) for modifier in MODIFIER_RULES} + if observed_counts != expected_counts: + raise ChargeCorrectionError( + "manifest_modifier_count_mismatch", + f"expected={expected_counts}, observed={observed_counts}", + ) + if int(plan["event_count"]) != sum(expected_counts.values()): + raise ChargeCorrectionError( + "modifier_event_count_mismatch", + f"events={plan['event_count']}, expected={sum(expected_counts.values())}", + ) + agreement = verify_pdb_topology_link_agreement(pdb_contract, plan, probe) + if not agreement["pass"]: + raise ChargeCorrectionError("pdb_topology_link_disagreement", str(agreement)) + plan["pdb_explicit_link_contract"] = { + "modifier_counts": pdb_contract["modifier_counts"], + "atom_count": pdb_contract["atom_count"], + "link_count": pdb_contract["link_count"], + "conect_link_count": pdb_contract["conect_link_count"], + "geometry_link_count": pdb_contract["geometry_link_count"], + "links": pdb_contract["links"], + } + plan["pdb_topology_link_agreement"] = agreement + + corrected_script = render_corrected_tleap(input_pdb.name, plan["targets"]) + validate_tleap_script_order(corrected_script, plan["targets"]) + corrected_input = state_dir / "tleap_charge_corrected_solvate.in" + write_text(corrected_input, corrected_script) + atomic_write_text( + state_dir / "charge_correction_plan.json", + json.dumps(plan, indent=2, sort_keys=True) + "\n", + ) + corrected_rc = run_cmd( + [tleap, "-f", corrected_input.name], + state_dir, + "tleap_charge_corrected_solvate", + summary, + ) + corrected_log = state_dir / "logs" / "tleap_charge_corrected_solvate.log" + corrected_text = corrected_log.read_text(errors="replace") if corrected_log.exists() else "" + errors, warnings, notes = parse_tleap_counts(corrected_text) + corrected_solute = amber_dir / "corrected_solute.prmtop" + corrected_solute_coords = amber_dir / "corrected_solute.inpcrd" + prmtop = amber_dir / "solvated.prmtop" + inpcrd = amber_dir / "solvated.inpcrd" + outputs_present = all( + path.exists() + for path in (corrected_solute, corrected_solute_coords, prmtop, inpcrd) + ) + if not (corrected_rc == 0 and errors == 0 and outputs_present): + summary.update( + { + "tleap_status": "failed_corrected", + "tleap_errors": errors, + "tleap_warnings": warnings, + "tleap_notes": notes, + } + ) + return False + + corrected = load_parmed(corrected_solute, corrected_solute_coords) + verification = verify_corrected_solute(probe, corrected, plan) + if not verification["pass"]: + raise ChargeCorrectionError("corrected_solute_verification_failed", str(verification)) + summary.update( + { + "tleap_status": "passed_charge_corrected", + "tleap_probe_errors": probe_errors, + "tleap_probe_warnings": probe_warnings, + "tleap_probe_notes": probe_notes, + "tleap_errors": errors, + "tleap_warnings": warnings, + "tleap_notes": notes, + "has_prmtop": prmtop.exists(), + "has_inpcrd": inpcrd.exists(), + "charge_correction_status": "passed", + "charge_correction_expected_modifier_counts": expected_counts, + "charge_correction_plan": plan, + "charge_correction_verification": verification, + } + ) + return True + except ChargeCorrectionError as exc: + summary.update( + { + "tleap_status": "failed_charge_correction", + "charge_correction_status": "failed", + "charge_correction_failure_category": exc.category, + "charge_correction_failure_detail": exc.detail, + } + ) + return False + + +def prepare_state_dir(outdir: Path, state_name: str, production_ns: float) -> tuple[Path, str, bool]: + state_dir = outdir / "states" / state_name + summary_path = state_dir / "state_summary.json" + if summary_path.exists(): + try: + previous = json.loads(summary_path.read_text()) + except json.JSONDecodeError: + previous = {} + previous_ns = float(previous.get("production_ns") or 0) + if previous.get("final_status") == "production_incomplete_compact_trajectory": + archive = ( + outdir + / "rerun_archives" + / f"{state_name}_incomplete_compact_{int(time.time())}" + ) + archive.parent.mkdir(parents=True, exist_ok=True) + shutil.move(str(state_dir), str(archive)) + return state_dir, str(archive), False + if ( + previous.get("final_status") in {"production_passed", "production_passed_with_amber_fallback"} + and previous_ns >= production_ns + ): + if previous.get("final_status") == "production_passed_with_amber_fallback": + return state_dir, "", True + gmx_dir = state_dir / "gromacs_run" + if existing_gromacs_compact_outputs(gmx_dir, production_ns): + if not previous.get("compact_reused_existing_solute_outputs"): + return state_dir, "", True + gmx = resolve_executable("gmx") + if gmx and validate_compact_gromacs_trajectory( + gmx_dir, gmx, previous, production_ns + ): + finalize_summary(summary_path, previous) + return state_dir, "", True + if env_flag("REVIEW_MD_FORCE_FRESH_FAILED_SUMMARY"): + archive = outdir / "rerun_archives" / f"{state_name}_forced_fresh_{int(time.time())}" + archive.parent.mkdir(parents=True, exist_ok=True) + shutil.move(str(state_dir), str(archive)) + return state_dir, str(archive), False + gmx_dir = state_dir / "gromacs_run" + if existing_gromacs_compact_outputs(gmx_dir, production_ns): + return state_dir, "", False + if (gmx_dir / "md.tpr").exists() and ((gmx_dir / "md.cpt").exists() or (gmx_dir / "md.gro").exists()): + return state_dir, "", False + archive = outdir / "rerun_archives" / f"{state_name}_{int(time.time())}" + archive.parent.mkdir(parents=True, exist_ok=True) + shutil.move(str(state_dir), str(archive)) + return state_dir, str(archive), False + if state_dir.exists() and any(state_dir.iterdir()): + gmx_dir = state_dir / "gromacs_run" + if existing_gromacs_compact_outputs(gmx_dir, production_ns): + # NFS can expose compact files just before the atomic summary rename. + # Give a concurrent successful owner one visibility window before + # reconstructing metadata from those same completed outputs. + time.sleep(SUMMARY_VISIBILITY_SETTLE_SECONDS) + if summary_path.exists(): + try: + settled = json.loads(summary_path.read_text()) + except (json.JSONDecodeError, OSError): + settled = {} + settled_ns = float(settled.get("production_ns") or 0) + if ( + settled.get("final_status") + in { + "production_passed", + "production_passed_with_amber_fallback", + } + and settled_ns >= production_ns + and ( + settled.get("final_status") + == "production_passed_with_amber_fallback" + or existing_gromacs_compact_outputs(gmx_dir, production_ns) + ) + ): + return state_dir, "", True + return state_dir, "", False + if (gmx_dir / "md.tpr").exists() and (gmx_dir / "md.cpt").exists(): + return state_dir, "", False + archive = outdir / "rerun_archives" / f"{state_name}_partial_{int(time.time())}" + archive.parent.mkdir(parents=True, exist_ok=True) + shutil.move(str(state_dir), str(archive)) + return state_dir, str(archive), False + return state_dir, "", False + + +def find_gromacs_files(search_dir: Path) -> tuple[Path | None, Path | None]: + tops = sorted(search_dir.rglob("*.top")) + gros = sorted(search_dir.rglob("*.gro")) + top = next((p for p in tops if "posre" not in p.name.lower()), tops[0] if tops else None) + gro = gros[0] if gros else None + return top, gro + + +def find_existing_gromacs_run_inputs(state_dir: Path, summary: dict) -> tuple[Path | None, Path | None]: + gmx_dir = state_dir / "gromacs_run" + if not gmx_dir.exists(): + return None, None + production_ns = float(summary.get("production_ns") or 20.0) + has_reusable_production = existing_gromacs_compact_outputs(gmx_dir, production_ns) or ( + (gmx_dir / "md.tpr").exists() + and ( + (gmx_dir / "md.cpt").exists() + or ( + (gmx_dir / "md.gro").exists() + and gromacs_production_complete(gmx_dir, production_ns) + ) + ) + ) + if not has_reusable_production: + return None, None + + top_candidates = [gmx_dir / "solvated_GMX.top", gmx_dir / "solvated.top"] + gro_candidates = [gmx_dir / "solvated_GMX.gro", gmx_dir / "solvated.gro", gmx_dir / "npt.gro"] + top = next((p for p in top_candidates if p.exists()), None) + gro = next((p for p in gro_candidates if p.exists()), None) + if top is None or gro is None: + top, gro = find_gromacs_files(gmx_dir) + if top and gro: + summary["existing_gromacs_run_reused"] = True + summary["existing_gromacs_topology"] = str(top) + summary["existing_gromacs_coordinates"] = str(gro) + return top, gro + return None, None + + +def authoritative_acpype_charge_log(conv_dir: Path) -> Path: + """Return the one deterministic ACPYPE charge-evidence log.""" + expected_dir = conv_dir / "solvated.amb2gmx" + log_path = expected_dir / "acpype.log" + if expected_dir.is_symlink() or not expected_dir.is_dir(): + raise ChargeCorrectionError( + "acpype_charge_log_directory", + f"expected regular directory: {expected_dir}", + ) + if log_path.is_symlink() or not log_path.is_file(): + raise ChargeCorrectionError( + "acpype_charge_log_file", + f"expected regular nonsymlink file: {log_path}", + ) + if log_path.resolve().parent != expected_dir.resolve(): + raise ChargeCorrectionError( + "acpype_charge_log_containment", + f"charge log escapes expected directory: {log_path}", + ) + parse_acpype_charge_markers(log_path) + return log_path + + +def try_acpype(state_dir: Path, summary: dict) -> tuple[Path | None, Path | None, str]: + acpype = resolve_executable("acpype") + if not acpype: + return None, None, "acpype_not_found" + conv_dir = state_dir / "gromacs_acpype" + conv_dir.mkdir(exist_ok=True) + prmtop = state_dir / "amber" / "solvated.prmtop" + inpcrd = state_dir / "amber" / "solvated.inpcrd" + rc = run_cmd([acpype, "-p", str(prmtop), "-x", str(inpcrd), "-b", "solvated", "-o", "gmx"], conv_dir, "acpype", summary) + summary["acpype_driver_execution_log"] = str(conv_dir / "logs" / "acpype.log") + top, gro = find_gromacs_files(conv_dir) + if rc == 0 and top and gro: + try: + charge_log = authoritative_acpype_charge_log(conv_dir) + except ChargeCorrectionError as exc: + summary["acpype_charge_parity"] = { + "pass": False, + "failure_category": exc.category, + "failure_detail": exc.detail, + } + return top, gro, "acpype_charge_parity_failed" + summary["acpype_charge_authority_log"] = str(charge_log) + try: + parity = validate_conversion_charge_preservation( + prmtop, + top, + gro, + charge_log, + solute_atom_count=int(summary.get("input_pdb_atom_count") or 0), + ) + except Exception as exc: # noqa: BLE001 - conversion must fail closed. + summary["acpype_charge_parity"] = { + "pass": False, + "failure_category": "acpype_charge_parity_exception", + "exception": repr(exc), + } + return top, gro, "acpype_charge_parity_failed" + retained_log = state_dir / "acpype_charge_conversion.log" + shutil.copy2(charge_log, retained_log) + parity["retained_acpype_log"] = str(retained_log) + summary["acpype_charge_parity"] = parity + if parity["pass"]: + return top, gro, "acpype_passed_charge_preserving" + return top, gro, "acpype_charge_parity_failed" + return top, gro, "acpype_failed" + + +def parse_acpype_charge_markers(path: Path) -> tuple[float, float]: + text = path.read_text(encoding="utf-8", errors="strict") + source_values = [ + float(value.replace("D", "E").replace("d", "e")) + for value in re.findall(r"charge to be balanced:\s+total\s+([-+0-9.eEdD]+)", text) + ] + balanced_values = [ + float(value.replace("D", "E").replace("d", "e")) + for value in re.findall(r"Balanced TotalCharge\s+([-+0-9.eEdD]+)", text) + ] + if len(source_values) != 1 or len(balanced_values) != 1: + raise ChargeCorrectionError( + "acpype_charge_marker_count", + f"source={len(source_values)}, balanced={len(balanced_values)}", + ) + return source_values[0], balanced_values[0] + + +def validate_conversion_charge_preservation( + amber_prmtop: Path, + gromacs_topology: Path, + gromacs_coordinates: Path, + acpype_log: Path | None = None, + solute_atom_count: int | None = None, +) -> dict[str, Any]: + amber = load_parmed(amber_prmtop) + gromacs = load_parmed(gromacs_topology, gromacs_coordinates) + amber_atoms = list(amber.atoms) + gromacs_atoms = list(gromacs.atoms) + if solute_atom_count is None: + solute_atom_count = len(amber_atoms) + if not 0 <= solute_atom_count <= len(amber_atoms): + raise ChargeCorrectionError( + "invalid_solute_atom_count", f"{solute_atom_count} of {len(amber_atoms)}" + ) + solute_identity_mismatches = [ + index + 1 + for index, (left, right) in enumerate(zip(amber_atoms, gromacs_atoms)) + if index < solute_atom_count and atom_identity(left) != atom_identity(right) + ] + ordered_atomic_number_mismatches = [] + ordered_mass_serialization_mismatches = [] + ordered_element_mass_mismatches = [] + mass_differences: list[float] = [] + mass_pairs: list[tuple[float, float]] = [] + non_solute_identity_aliases = [] + for index, (left, right) in enumerate(zip(amber_atoms, gromacs_atoms), 1): + left_atomic_number = int(getattr(left, "atomic_number", 0) or 0) + right_atomic_number = int(getattr(right, "atomic_number", 0) or 0) + left_mass = float(getattr(left, "mass", 0.0) or 0.0) + right_mass = float(getattr(right, "mass", 0.0) or 0.0) + mass_difference = abs(left_mass - right_mass) + mass_differences.append(mass_difference) + mass_pairs.append((left_mass, right_mass)) + if left_atomic_number != right_atomic_number: + ordered_atomic_number_mismatches.append(index) + if mass_difference > MASS_SERIALIZATION_TOLERANCE_DA: + ordered_mass_serialization_mismatches.append(index) + if ( + left_atomic_number != right_atomic_number + or mass_difference > MASS_SERIALIZATION_TOLERANCE_DA + ): + ordered_element_mass_mismatches.append(index) + if index > solute_atom_count and atom_identity(left) != atom_identity(right): + non_solute_identity_aliases.append(index) + charge_differences = [ + abs(float(left.charge) - float(right.charge)) + for left, right in zip(amber_atoms, gromacs_atoms) + ] + amber_total = sum(float(atom.charge) for atom in amber_atoms) + gromacs_total = sum(float(atom.charge) for atom in gromacs_atoms) + marker_source: float | None = None + marker_balanced: float | None = None + marker_pass = True + if acpype_log is not None: + marker_source, marker_balanced = parse_acpype_charge_markers(acpype_log) + marker_pass = ( + abs(marker_source - round(marker_source)) <= INTEGER_CHARGE_TOLERANCE_E + and abs(marker_balanced - marker_source) <= CHARGE_TOLERANCE_E + ) + count_equal = len(amber_atoms) == len(gromacs_atoms) + if mass_differences: + worst_mass_offset = max(range(len(mass_differences)), key=mass_differences.__getitem__) + worst_mass_index = worst_mass_offset + 1 + worst_amber_mass, worst_gromacs_mass = mass_pairs[worst_mass_offset] + maximum_mass_difference = mass_differences[worst_mass_offset] + else: + worst_mass_index = None + worst_amber_mass = None + worst_gromacs_mass = None + maximum_mass_difference = 0.0 + passed = ( + count_equal + and not solute_identity_mismatches + and not ordered_element_mass_mismatches + and not any(value > CHARGE_TOLERANCE_E for value in charge_differences) + and marker_pass + ) + return { + "amber_atom_count": len(amber_atoms), + "gromacs_atom_count": len(gromacs_atoms), + "atom_count_equal": count_equal, + "solute_atom_count": solute_atom_count, + "solute_identity_mismatch_count": len(solute_identity_mismatches), + "solute_identity_mismatch_examples_1based": solute_identity_mismatches[:20], + "ordered_element_mass_mismatch_count": len(ordered_element_mass_mismatches), + "ordered_element_mass_mismatch_examples_1based": ordered_element_mass_mismatches[:20], + "ordered_atomic_number_mismatch_count": len(ordered_atomic_number_mismatches), + "ordered_atomic_number_mismatch_examples_1based": ordered_atomic_number_mismatches[:20], + "ordered_mass_serialization_mismatch_count": len( + ordered_mass_serialization_mismatches + ), + "ordered_mass_serialization_mismatch_examples_1based": ( + ordered_mass_serialization_mismatches[:20] + ), + "mass_serialization_tolerance_da": MASS_SERIALIZATION_TOLERANCE_DA, + "maximum_ordered_mass_difference_da": maximum_mass_difference, + "worst_mass_difference_atom_index_1based": worst_mass_index, + "worst_mass_difference_amber_mass_da": worst_amber_mass, + "worst_mass_difference_gromacs_mass_da": worst_gromacs_mass, + "non_solute_identity_alias_count": len(non_solute_identity_aliases), + "non_solute_identity_alias_examples_1based": non_solute_identity_aliases[:20], + "maximum_per_atom_charge_difference_e": max(charge_differences, default=0.0), + "per_atom_charge_difference_count_above_tolerance": sum( + value > CHARGE_TOLERANCE_E for value in charge_differences + ), + "charge_tolerance_e": CHARGE_TOLERANCE_E, + "amber_total_charge_e": amber_total, + "gromacs_total_charge_e": gromacs_total, + "total_charge_difference_e": gromacs_total - amber_total, + "acpype_source_total_charge_e": marker_source, + "acpype_balanced_total_charge_e": marker_balanced, + "acpype_charge_markers_pass": marker_pass, + "pass": passed, + } + + +def convert_to_gromacs(state_dir: Path, summary: dict) -> tuple[Path | None, Path | None]: + top, gro = find_existing_gromacs_run_inputs(state_dir, summary) + if top and gro: + try: + parity = validate_conversion_charge_preservation( + state_dir / "amber" / "solvated.prmtop", + top, + gro, + solute_atom_count=int(summary.get("input_pdb_atom_count") or 0), + ) + except Exception as exc: # noqa: BLE001 - resumed topology must also fail closed. + parity = { + "pass": False, + "failure_category": "existing_conversion_charge_parity_exception", + "exception": repr(exc), + } + summary["acpype_charge_parity"] = parity + if parity["pass"]: + summary["conversion_status"] = "passed" + summary["conversion_method"] = "existing_charge_preserving_gromacs_run" + return top, gro + summary["conversion_status"] = "failed" + summary["conversion_method"] = "" + return None, None + top, gro, status = try_acpype(state_dir, summary) + summary["acpype_status"] = status + if top and gro and status == "acpype_passed_charge_preserving": + summary["conversion_status"] = "passed" + summary["conversion_method"] = "acpype_charge_preserving" + return top, gro + summary["conversion_status"] = "failed" + summary["conversion_method"] = "" + return None, None + + +def write_mdp_files(gmx_dir: Path, production_ns: float) -> dict[str, Path]: + prod_pcoupl = production_pressure_coupling() + equil_dt = equilibration_dt_ps() + prod_dt = production_dt_ps() + minim_emtol = minimization_emtol() + minim_steps = minimization_steps() + nvt_steps = int(round(nvt_duration_ps() / equil_dt)) + npt_steps = int(round(npt_duration_ps() / equil_dt)) + common = """cutoff-scheme = Verlet +coulombtype = PME +rcoulomb = 1.1 +rvdw = 1.1 +pbc = xyz +constraints = h-bonds +constraint-algorithm = lincs +DispCorr = EnerPres +""" + files = {} + files["minim"] = gmx_dir / "minim.mdp" + write_text( + files["minim"], + f"""integrator = steep +emtol = {minim_emtol:g} +emstep = 0.01 +nsteps = {minim_steps} +""" + common, + ) + files["nvt"] = gmx_dir / "nvt.mdp" + write_text( + files["nvt"], + f"""integrator = md +dt = {equil_dt:g} +nsteps = {nvt_steps} +gen_vel = yes +gen_temp = 300 +gen_seed = -1 +tcoupl = V-rescale +tc-grps = System +tau_t = 1.0 +ref_t = 300 +pcoupl = no +nstlog = 5000 +nstenergy = 5000 +nstxout-compressed = 5000 +""" + common, + ) + files["npt"] = gmx_dir / "npt.mdp" + write_text( + files["npt"], + f"""integrator = md +dt = {equil_dt:g} +nsteps = {npt_steps} +gen_vel = no +tcoupl = V-rescale +tc-grps = System +tau_t = 1.0 +ref_t = 300 +pcoupl = C-rescale +pcoupltype = isotropic +tau_p = 2.0 +ref_p = 1.0 +compressibility = 4.5e-5 +continuation = yes +nstlog = 5000 +nstenergy = 5000 +nstxout-compressed = 5000 +""" + common, + ) + steps = int(round(production_ns * 1000.0 / prod_dt)) + prod_log_stride = max(1, int(round(10.0 / prod_dt))) + prod_trajectory_stride = max(1, int(round(20.0 / prod_dt))) + files["md"] = gmx_dir / f"md_{int(round(production_ns))}ns.mdp" + write_text( + files["md"], + f"""integrator = md +dt = {prod_dt:g} +nsteps = {steps} +gen_vel = no +tcoupl = V-rescale +tc-grps = System +tau_t = 1.0 +ref_t = 300 +pcoupl = {prod_pcoupl} +pcoupltype = isotropic +tau_p = 5.0 +ref_p = 1.0 +compressibility = 4.5e-5 +continuation = yes +nstlog = {prod_log_stride} +nstenergy = {prod_log_stride} +nstxout-compressed = {prod_trajectory_stride} +""" + common, + ) + return files + + +def stage_gromacs_inputs(gmx_dir: Path, top: Path, gro: Path) -> tuple[Path, Path]: + """Copy the complete converted topology directory so relative includes resolve.""" + for item in top.parent.iterdir(): + if item.is_file(): + destination = gmx_dir / item.name + if item.resolve() != destination.resolve(): + shutil.copy2(item, destination) + return gmx_dir / top.name, gmx_dir / gro.name + + +def write_solute_index(gmx_dir: Path, n_solute_atoms: int) -> Path: + ndx_path = gmx_dir / "solute.ndx" + indices = [str(i) for i in range(1, n_solute_atoms + 1)] + lines = ["[ Solute ]"] + for start in range(0, len(indices), 15): + lines.append(" ".join(indices[start : start + 15])) + write_text(ndx_path, "\n".join(lines) + "\n") + return ndx_path + + +def gromacs_log_last_time_ps(gmx_dir: Path) -> float | None: + log_path = gmx_dir / "md.log" + if not log_path.exists(): + return None + last_time_ps: float | None = None + lines = log_path.read_text(errors="replace").splitlines() + for index, line in enumerate(lines[:-1]): + if not line.strip().startswith("Step") or "Time" not in line: + continue + values = lines[index + 1].split() + if len(values) < 2: + continue + try: + float(values[0]) + last_time_ps = float(values[1]) + except ValueError: + continue + return last_time_ps + + +def gromacs_production_complete(gmx_dir: Path, production_ns: float) -> bool: + last_time_ps = gromacs_log_last_time_ps(gmx_dir) + if last_time_ps is None: + return False + expected_time_ps = production_ns * 1000.0 + return last_time_ps >= expected_time_ps - 0.01 + + +def existing_gromacs_compact_outputs(gmx_dir: Path, production_ns: float) -> bool: + solute_xtc = gmx_dir / "md_solute.xtc" + solute_gro = gmx_dir / "md_solute.gro" + return ( + (gmx_dir / "md.tpr").exists() + and solute_xtc.exists() + and solute_gro.exists() + and solute_xtc.stat().st_size > 0 + and solute_gro.stat().st_size > 0 + and gromacs_production_complete(gmx_dir, production_ns) + ) + + +def md_log_has_checkpoint_restart(gmx_dir: Path) -> bool: + try: + text = (gmx_dir / "md.log").read_text(errors="replace") + except FileNotFoundError: + return False + return "Restarting from checkpoint" in text + + +def validate_compact_gromacs_trajectory( + gmx_dir: Path, gmx: str, summary: dict, production_ns: float +) -> bool: + trajectory = gmx_dir / "md_solute.xtc" + if not trajectory.exists(): + summary["compact_trajectory_validation_status"] = "missing" + return False + proc = subprocess.run( + [gmx, "check", "-f", str(trajectory)], + cwd=gmx_dir, + text=True, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + check=False, + ) + log_path = gmx_dir / "logs" / "gmx_check_compact.log" + log_path.parent.mkdir(parents=True, exist_ok=True) + log_path.write_text(proc.stdout) + summary.setdefault("commands", []).append( + { + "label": "gmx_check_compact", + "cmd": [gmx, "check", "-f", str(trajectory)], + "return_code": proc.returncode, + "log": str(log_path), + } + ) + coords = GMX_CHECK_COORDS_RE.search(proc.stdout) + last = GMX_CHECK_LAST_FRAME_RE.search(proc.stdout) + if not coords or proc.returncode != 0: + summary["compact_trajectory_validation_status"] = "check_failed" + return False + frames = int(coords.group(1)) + timestep_ps = float(coords.group(2)) + stride_ps = float(summary.get("trajectory_stride_ps") or 20.0) + expected_frames = int(round(production_ns * 1000.0 / stride_ps)) + 1 + summary["compact_trajectory_frames"] = frames + summary["compact_trajectory_timestep_ps"] = timestep_ps + summary["compact_trajectory_expected_frames"] = expected_frames + if frames < expected_frames: + summary["compact_trajectory_validation_status"] = "incomplete" + return False + if not last: + summary["compact_trajectory_validation_status"] = "check_failed" + return False + last_time_ps = float(last.group(2)) + summary["compact_trajectory_last_time_ps"] = last_time_ps + summary["compact_trajectory_expected_last_time_ps"] = production_ns * 1000.0 + complete = last_time_ps >= production_ns * 1000.0 - stride_ps / 2.0 + summary["compact_trajectory_validation_status"] = "complete" if complete else "incomplete" + return complete + + +def gromacs_nonbonded_mode_from_log(gmx_dir: Path) -> str: + """Return the last explicit production nonbonded mode in md.log.""" + try: + text = (gmx_dir / "md.log").read_text(errors="replace") + except OSError: + return "" + modes = GMX_MDRUN_NB_RE.findall(text) + return modes[-1] if modes else "" + + +def reuse_existing_gromacs_compact_outputs( + gmx_dir: Path, gmx: str, summary: dict, remove_full_trajectory: bool +) -> bool: + production_ns = float(summary.get("production_ns") or 20.0) + if not existing_gromacs_compact_outputs(gmx_dir, production_ns): + return False + if not validate_compact_gromacs_trajectory(gmx_dir, gmx, summary, production_ns): + return False + solute_xtc = gmx_dir / "md_solute.xtc" + solute_gro = gmx_dir / "md_solute.gro" + md_xtc = gmx_dir / "md.xtc" + resumed_from_log = md_log_has_checkpoint_restart(gmx_dir) + nonbonded_mode = gromacs_nonbonded_mode_from_log(gmx_dir) + summary.update( + { + "compact_retention_status": "passed", + "compact_reused_existing_solute_outputs": True, + "solute_index": str(gmx_dir / "solute.ndx") if (gmx_dir / "solute.ndx").exists() else "", + "solute_xtc": str(solute_xtc), + "solute_gro": str(solute_gro), + "solute_xtc_bytes": solute_xtc.stat().st_size, + "compact_removed_full_trajectory": bool(remove_full_trajectory), + "full_md_xtc_exists_after_compact": md_xtc.exists(), + } + ) + if nonbonded_mode: + summary["gromacs_nonbonded_mode"] = nonbonded_mode + summary["gromacs_nonbonded_mode_source"] = "existing_md_log" + if resumed_from_log: + summary["gromacs_resume_attempted"] = True + summary["gromacs_resume_provenance_from_md_log"] = True + if md_xtc.exists(): + summary["full_md_xtc_bytes_before_compact"] = md_xtc.stat().st_size + if remove_full_trajectory: + for path in [md_xtc, gmx_dir / "nvt.xtc", gmx_dir / "npt.xtc", gmx_dir / "em.trr"]: + if path.exists(): + path.unlink() + summary["full_md_xtc_exists_after_compact"] = md_xtc.exists() + return True + + +def archive_incomplete_compact_outputs(gmx_dir: Path, summary: dict) -> None: + paths = [gmx_dir / "md_solute.xtc", gmx_dir / "md_solute.gro", gmx_dir / "solute.ndx"] + existing = [path for path in paths if path.exists()] + if not existing: + return + archive_dir = gmx_dir.parent / f"partial_compact_archive_{int(time.time())}" + archive_dir.mkdir(parents=True, exist_ok=True) + archived: list[str] = [] + for path in existing: + destination = archive_dir / path.name + path.replace(destination) + archived.append(str(destination)) + summary["incomplete_compact_outputs_archived"] = archived + + +def compact_gromacs_outputs(gmx_dir: Path, gmx: str, summary: dict, remove_full_trajectory: bool) -> bool: + if reuse_existing_gromacs_compact_outputs(gmx_dir, gmx, summary, remove_full_trajectory): + return True + archive_incomplete_compact_outputs(gmx_dir, summary) + n_solute_atoms = int(summary.get("input_pdb_atom_count") or 0) + if n_solute_atoms <= 0: + summary["compact_retention_status"] = "failed_missing_solute_atom_count" + return False + md_tpr = gmx_dir / "md.tpr" + md_xtc = gmx_dir / "md.xtc" + md_gro = gmx_dir / "md.gro" + if not md_tpr.exists() or not md_xtc.exists() or not md_gro.exists(): + summary["compact_retention_status"] = "failed_missing_md_outputs" + return False + ndx = write_solute_index(gmx_dir, n_solute_atoms) + solute_xtc = gmx_dir / "md_solute.xtc" + solute_gro = gmx_dir / "md_solute.gro" + rc1 = run_shell( + f"printf 'Solute\\n' | {gmx} trjconv -s md.tpr -f md.xtc -n {ndx.name} -o {solute_xtc.name} -pbc mol -ur compact", + gmx_dir, + "gmx_trjconv_solute_xtc", + summary, + ) + rc2 = run_shell( + f"printf 'Solute\\n' | {gmx} trjconv -s md.tpr -f md.gro -n {ndx.name} -o {solute_gro.name}", + gmx_dir, + "gmx_trjconv_solute_gro", + summary, + ) + if rc1 != 0 or rc2 != 0 or not solute_xtc.exists() or not solute_gro.exists() or solute_xtc.stat().st_size == 0: + summary["compact_retention_status"] = "failed_trjconv" + return False + production_ns = float(summary.get("production_ns") or 20.0) + if not validate_compact_gromacs_trajectory(gmx_dir, gmx, summary, production_ns): + summary["compact_retention_status"] = "failed_incomplete_compact_trajectory" + return False + summary.update( + { + "compact_retention_status": "passed", + "solute_index": str(ndx), + "solute_xtc": str(solute_xtc), + "solute_gro": str(solute_gro), + "solute_xtc_bytes": solute_xtc.stat().st_size, + "full_md_xtc_bytes_before_compact": md_xtc.stat().st_size, + "compact_removed_full_trajectory": bool(remove_full_trajectory), + } + ) + if remove_full_trajectory: + for path in [md_xtc, gmx_dir / "nvt.xtc", gmx_dir / "npt.xtc", gmx_dir / "em.trr"]: + if path.exists(): + path.unlink() + summary["full_md_xtc_exists_after_compact"] = md_xtc.exists() + return True + + +def remove_path_for_retention(path: Path, summary: dict) -> None: + if not path.exists(): + return + try: + if path.is_dir(): + size = sum(item.stat().st_size for item in path.rglob("*") if item.is_file()) + shutil.rmtree(path) + else: + size = path.stat().st_size + path.unlink() + summary["feature_retention_removed_files"] = int(summary.get("feature_retention_removed_files", 0)) + 1 + summary["feature_retention_removed_bytes"] = int(summary.get("feature_retention_removed_bytes", 0)) + size + except Exception as exc: # noqa: BLE001 - cleanup must not hide a successful MD run. + summary.setdefault("feature_retention_cleanup_errors", []).append(f"{path}: {exc!r}") + + +def apply_feature_retention_cleanup(state_dir: Path, summary: dict, keep_full_trajectory: bool) -> None: + """Drop bulky reproducibility intermediates while retaining feature/QC files.""" + + summary["retention_mode"] = "feature" + summary["feature_retention_removed_files"] = 0 + summary["feature_retention_removed_bytes"] = 0 + + remove_path_for_retention(state_dir / "amber", summary) + remove_path_for_retention(state_dir / "probe", summary) + remove_path_for_retention(state_dir / "gromacs_acpype", summary) + + gmx_dir = state_dir / "gromacs_run" + for pattern in ["em.*", "nvt.*", "npt.*"]: + for path in gmx_dir.glob(pattern): + remove_path_for_retention(path, summary) + for filename in ["md.cpt", "md.gro", "solvated_GMX.gro"]: + remove_path_for_retention(gmx_dir / filename, summary) + if not keep_full_trajectory: + remove_path_for_retention(gmx_dir / "md.xtc", summary) + + required = [ + state_dir / "input.pdb", + state_dir / "charge_correction_plan.json", + state_dir / "acpype_charge_conversion.log", + gmx_dir / "md.tpr", + gmx_dir / "md_solute.xtc", + gmx_dir / "md_solute.gro", + gmx_dir / "md.edr", + gmx_dir / "energy_terms.xvg", + ] + missing = [str(path) for path in required if not path.exists()] + if missing: + summary["feature_retention_status"] = "warning_missing_expected_files" + summary["feature_retention_missing_expected_files"] = missing + elif summary.get("feature_retention_cleanup_errors"): + summary["feature_retention_status"] = "completed_with_cleanup_errors" + else: + summary["feature_retention_status"] = "passed" + + +def resume_gromacs_production_if_possible( + gmx_dir: Path, gmx: str, summary: dict, production_ns: float +) -> bool: + if (gmx_dir / "md.gro").exists() and gromacs_production_complete(gmx_dir, production_ns): + summary["gromacs_status"] = "passed_existing_production" + summary["final_engine"] = "gromacs" + return True + if not (gmx_dir / "md.tpr").exists() or not (gmx_dir / "md.cpt").exists(): + return False + ntomp = os.environ.get("SLURM_CPUS_PER_TASK", "4") + nb_mode = os.environ.get("REVIEW_MD_GMX_NB", "gpu").strip().lower() + if nb_mode not in {"auto", "cpu", "gpu"}: + nb_mode = "gpu" + checkpoint_minutes = checkpoint_interval_minutes() + summary["gromacs_resume_attempted"] = True + summary["gromacs_nonbonded_mode"] = nb_mode + summary["gromacs_checkpoint_interval_minutes"] = checkpoint_minutes + cmd = [ + gmx, + "mdrun", + "-deffnm", + "md", + "-cpi", + "md.cpt", + "-append", + "-ntmpi", + "1", + "-ntomp", + ntomp, + "-cpt", + str(checkpoint_minutes), + ] + if nb_mode != "auto": + cmd.extend(["-nb", nb_mode]) + started = time.time() + rc = run_cmd( + cmd, + gmx_dir, + "mdrun_md_resume", + summary, + ) + if ( + rc == 0 + and (gmx_dir / "md.gro").exists() + and gromacs_production_complete(gmx_dir, production_ns) + ): + summary["production_wall_seconds"] = round(time.time() - started, 3) + summary["gromacs_status"] = "passed_after_resume" + summary["final_engine"] = "gromacs" + return True + summary["md_checkpoint_available"] = (gmx_dir / "md.cpt").exists() + if rc == 0: + summary["gromacs_status"] = "failed_mdrun_md_resume_incomplete" + else: + summary["gromacs_status"] = "failed_mdrun_md_resume" + return False + + +def run_gromacs(state_dir: Path, top: Path, gro: Path, production_ns: float, summary: dict, remove_full_trajectory: bool) -> bool: + gmx = resolve_executable("gmx") + if not gmx: + summary["gromacs_status"] = "missing_gmx" + return False + gmx_dir = state_dir / "gromacs_run" + gmx_dir.mkdir(exist_ok=True) + if reuse_existing_gromacs_compact_outputs(gmx_dir, gmx, summary, remove_full_trajectory): + run_qc_gromacs(gmx_dir, gmx, summary) + summary["gromacs_status"] = ( + "passed_existing_compact_after_checkpoint_resume" + if summary.get("gromacs_resume_attempted") + else "passed_existing_compact" + ) + summary["final_engine"] = "gromacs" + return True + archive_incomplete_compact_outputs(gmx_dir, summary) + if resume_gromacs_production_if_possible(gmx_dir, gmx, summary, production_ns): + run_qc_gromacs(gmx_dir, gmx, summary) + compact_gromacs_outputs(gmx_dir, gmx, summary, remove_full_trajectory) + return summary.get("compact_retention_status") == "passed" + local_top, local_gro = stage_gromacs_inputs(gmx_dir, top, gro) + summary["gromacs_topology"] = str(local_top) + summary["gromacs_coordinates"] = str(local_gro) + mdps = write_mdp_files(gmx_dir, production_ns) + summary["gromacs_production_pcoupl"] = production_pressure_coupling() + summary["gromacs_equilibration_dt_ps"] = equilibration_dt_ps() + summary["gromacs_production_dt_ps"] = production_dt_ps() + summary["gromacs_minimization_emtol"] = minimization_emtol() + summary["gromacs_minimization_steps"] = minimization_steps() + summary["gromacs_nvt_duration_ps"] = nvt_duration_ps() + summary["gromacs_npt_duration_ps"] = npt_duration_ps() + ntomp = os.environ.get("SLURM_CPUS_PER_TASK", "4") + nb_mode = os.environ.get("REVIEW_MD_GMX_NB", "gpu").strip().lower() + if nb_mode not in {"auto", "cpu", "gpu"}: + nb_mode = "gpu" + checkpoint_minutes = checkpoint_interval_minutes() + summary["gromacs_nonbonded_mode"] = nb_mode + summary["gromacs_checkpoint_interval_minutes"] = checkpoint_minutes + stages = [ + ("em", mdps["minim"], local_gro, None), + ("nvt", mdps["nvt"], gmx_dir / "em.gro", None), + ("npt", mdps["npt"], gmx_dir / "nvt.gro", gmx_dir / "nvt.cpt"), + ("md", mdps["md"], gmx_dir / "npt.gro", gmx_dir / "npt.cpt"), + ] + for name, mdp, coord, checkpoint in stages: + if not coord.exists(): + summary["gromacs_status"] = f"failed_missing_{coord.name}" + return False + grompp_cmd = [gmx, "grompp", "-f", str(mdp), "-c", str(coord), "-p", str(local_top), "-o", f"{name}.tpr"] + if checkpoint and checkpoint.exists(): + grompp_cmd.extend(["-t", str(checkpoint)]) + if run_cmd(grompp_cmd, gmx_dir, f"grompp_{name}", summary) != 0: + summary["gromacs_status"] = f"failed_grompp_{name}" + return False + mdrun_cmd = [ + gmx, + "mdrun", + "-deffnm", + name, + "-ntmpi", + "1", + "-ntomp", + ntomp, + "-cpt", + str(checkpoint_minutes), + ] + if name != "em" and nb_mode != "auto": + mdrun_cmd.extend(["-nb", nb_mode]) + stage_start = time.time() + if run_cmd(mdrun_cmd, gmx_dir, f"mdrun_{name}", summary) != 0: + summary["gromacs_status"] = f"failed_mdrun_{name}" + return False + if name == "md": + summary["production_wall_seconds"] = round(time.time() - stage_start, 3) + if not (gmx_dir / "md.gro").exists() or not gromacs_production_complete( + gmx_dir, production_ns + ): + summary["gromacs_status"] = "failed_mdrun_md_incomplete" + summary["md_checkpoint_available"] = (gmx_dir / "md.cpt").exists() + return False + summary["gromacs_status"] = "passed" + summary["final_engine"] = "gromacs" + run_qc_gromacs(gmx_dir, gmx, summary) + compact_gromacs_outputs(gmx_dir, gmx, summary, remove_full_trajectory) + return summary.get("compact_retention_status") == "passed" + + +def run_qc_gromacs(gmx_dir: Path, gmx: str, summary: dict) -> None: + if not (gmx_dir / "md.edr").exists(): + return + write_text(gmx_dir / "energy_terms.in", "Temperature\nPressure\nDensity\nVolume\n0\n") + run_shell(f"{gmx} energy -f md.edr -o energy_terms.xvg < energy_terms.in", gmx_dir, "gmx_energy_qc", summary) + summary["qc_energy_xvg"] = str(gmx_dir / "energy_terms.xvg") + + +def write_amber_inputs(amber_run: Path, production_ns: float) -> None: + write_text( + amber_run / "min.in", + """Minimize +&cntrl + imin=1, maxcyc=5000, ncyc=2500, + cut=11.0, ntb=1, +/ +""", + ) + write_text( + amber_run / "heat.in", + """Heat +&cntrl + imin=0, irest=0, ntx=1, + ntb=1, cut=11.0, + nstlim=100000, dt=0.002, + tempi=0.0, temp0=300.0, + ntt=3, gamma_ln=1.0, + ntc=2, ntf=2, + ntpr=5000, ntwx=5000, ntwr=5000, + ioutfm=1, ntxo=2, +/ +""", + ) + write_text( + amber_run / "npt.in", + """NPT equilibration +&cntrl + imin=0, irest=1, ntx=5, + ntb=2, ntp=1, pres0=1.0, taup=2.0, + cut=11.0, nstlim=250000, dt=0.002, + temp0=300.0, ntt=3, gamma_ln=1.0, + ntc=2, ntf=2, + ntpr=5000, ntwx=5000, ntwr=5000, + ioutfm=1, ntxo=2, +/ +""", + ) + steps = int(round(production_ns * 500000)) + write_text( + amber_run / "prod.in", + f"""Production +&cntrl + imin=0, irest=1, ntx=5, + ntb=2, ntp=1, pres0=1.0, taup=2.0, + cut=11.0, nstlim={steps}, dt=0.002, + temp0=300.0, ntt=3, gamma_ln=1.0, + ntc=2, ntf=2, + ntpr=5000, ntwx=5000, ntwr=5000, + ioutfm=1, ntxo=2, +/ +""", + ) + + +def run_amber_fallback(state_dir: Path, production_ns: float, summary: dict) -> bool: + pmemd_cuda = resolve_executable("pmemd.cuda") + pmemd_cpu = resolve_executable("pmemd") + if not pmemd_cuda: + summary["amber_fallback_status"] = "missing_pmemd_cuda" + return False + amber_run = state_dir / "amber_run" + amber_run.mkdir(exist_ok=True) + prmtop = state_dir / "amber" / "solvated.prmtop" + inpcrd = state_dir / "amber" / "solvated.inpcrd" + write_amber_inputs(amber_run, production_ns) + stages = [ + ("min", "min.in", inpcrd, "min.rst7", None), + ("heat", "heat.in", amber_run / "min.rst7", "heat.rst7", None), + ("npt", "npt.in", amber_run / "heat.rst7", "npt.rst7", amber_run / "heat.rst7"), + ("prod", "prod.in", amber_run / "npt.rst7", "prod.rst7", amber_run / "npt.rst7"), + ] + for name, mdin, coord, rst, _ref in stages: + if not Path(coord).exists(): + summary["amber_fallback_status"] = f"failed_missing_{coord}" + return False + engine = pmemd_cpu if name == "npt" and pmemd_cpu else pmemd_cuda + summary.setdefault("amber_stage_engines", {})[name] = engine + cmd = [engine, "-O", "-i", mdin, "-o", f"{name}.out", "-p", str(prmtop), "-c", str(coord), "-r", rst, "-inf", f"{name}.info"] + if name in {"heat", "npt", "prod"}: + cmd.extend(["-x", f"{name}.nc"]) + stage_start = time.time() + if run_cmd(cmd, amber_run, f"pmemd_{name}", summary) != 0: + summary["amber_fallback_status"] = f"failed_{name}" + return False + if name == "prod": + summary["production_wall_seconds"] = round(time.time() - stage_start, 3) + summary["amber_fallback_status"] = "passed" + summary["final_engine"] = "pmemd.cuda" + return True + + +def compact_amber_outputs(state_dir: Path, summary: dict, remove_full_trajectory: bool) -> bool: + n_solute_atoms = int(summary.get("input_pdb_atom_count") or 0) + if n_solute_atoms <= 0: + summary["compact_retention_status"] = "failed_missing_solute_atom_count" + return False + cpptraj = shutil.which("cpptraj") + if not cpptraj: + summary["compact_retention_status"] = "failed_missing_cpptraj" + return False + amber_run = state_dir / "amber_run" + prmtop = state_dir / "amber" / "solvated.prmtop" + prod_nc = amber_run / "prod.nc" + prod_rst = amber_run / "prod.rst7" + if not prmtop.exists() or not prod_nc.exists() or not prod_rst.exists(): + summary["compact_retention_status"] = "failed_missing_amber_outputs" + return False + solute_nc = amber_run / "prod_solute.nc" + solute_rst = amber_run / "prod_solute.rst7" + strip_mask = f"!@1-{n_solute_atoms}" + traj_in = amber_run / "compact_solute_traj.cpptraj" + rst_in = amber_run / "compact_solute_rst.cpptraj" + write_text( + traj_in, + "\n".join( + [ + f"parm {prmtop}", + "trajin prod.nc", + f"strip {strip_mask}", + "trajout prod_solute.nc netcdf", + "run", + "", + ] + ), + ) + write_text( + rst_in, + "\n".join( + [ + f"parm {prmtop}", + "trajin prod.rst7", + f"strip {strip_mask}", + "trajout prod_solute.rst7 restart", + "run", + "", + ] + ), + ) + rc1 = run_cmd([cpptraj, "-i", str(traj_in)], amber_run, "cpptraj_solute_nc", summary) + rc2 = run_cmd([cpptraj, "-i", str(rst_in)], amber_run, "cpptraj_solute_rst", summary) + if rc1 != 0 or rc2 != 0 or not solute_nc.exists() or not solute_rst.exists() or solute_nc.stat().st_size == 0: + summary["compact_retention_status"] = "failed_cpptraj" + return False + summary.update( + { + "compact_retention_status": "passed", + "solute_nc": str(solute_nc), + "solute_rst7": str(solute_rst), + "solute_nc_bytes": solute_nc.stat().st_size, + "full_amber_prod_nc_bytes_before_compact": prod_nc.stat().st_size, + "compact_removed_full_trajectory": bool(remove_full_trajectory), + } + ) + if remove_full_trajectory: + for path in [prod_nc, amber_run / "heat.nc", amber_run / "npt.nc"]: + if path.exists(): + path.unlink() + summary["full_amber_prod_nc_exists_after_compact"] = prod_nc.exists() + return True + + +def finalize_summary(summary_path: Path, summary: dict) -> None: + if summary.get("production_wall_seconds") and summary.get("production_ns"): + seconds = float(summary["production_wall_seconds"]) + ns = float(summary["production_ns"]) + if seconds > 0: + summary["production_ns_per_day"] = round(ns / seconds * 86400.0, 3) + summary["finished_at_epoch"] = time.time() + summary["summary_write_mode"] = "atomic_replace" + atomic_write_text( + summary_path, json.dumps(summary, indent=2, sort_keys=True) + "\n" + ) + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--manifest", required=True) + parser.add_argument("--campaign-index", "--pilot-index", dest="campaign_index", type=int, required=True) + parser.add_argument("--outdir", required=True) + parser.add_argument("--production-ns", type=float, default=20.0) + parser.add_argument("--allow-amber-fallback", action="store_true") + parser.add_argument("--keep-full-trajectory", action="store_true") + parser.add_argument("--keep-intermediate-files", action="store_true") + args = parser.parse_args() + if args.allow_amber_fallback: + parser.error( + "the charge-corrected lane requires the validated GROMACS path; " + "AMBER fallback would mix production engines" + ) + + outdir = Path(args.outdir).resolve() + manifest = Path(args.manifest) + if not manifest.is_absolute(): + manifest = outdir / manifest + row = read_state(manifest, args.campaign_index) + idx = row_index(row) + state_name = f"{idx:06d}_{safe_name(row['structure_state_id'])}" + state_dir, archived_previous, already_done = prepare_state_dir(outdir, state_name, args.production_ns) + if already_done: + print(f"state already completed, leaving existing output unchanged: {state_dir}") + return 0 + state_dir.mkdir(parents=True, exist_ok=True) + summary_path = state_dir / "state_summary.json" + summary: dict = { + "campaign_index": idx, + "pilot_index": idx, + "chunk_id": row.get("chunk_id", ""), + "chunk_index": row.get("chunk_index", ""), + "structure_state_id": row["structure_state_id"], + "parent_glycorpus_id": row["parent_glycorpus_id"], + "state_label": row["state_label"], + "state_role": row.get("state_role", ""), + "pilot_stratum": row.get("pilot_stratum", row.get("size_class", "")), + "size_class": row.get("size_class", ""), + "known_failure_hint": row.get("known_failure_hint", ""), + "input_pdb_atom_count": int(row.get("pdb_atom_count") or 0), + "input_pdb_residue_count": int(row.get("pdb_residue_count") or 0), + "production_ns": args.production_ns, + "trajectory_stride_steps": max(1, int(round(20.0 / production_dt_ps()))), + "trajectory_stride_ps": 20.0, + "keep_full_trajectory": bool(args.keep_full_trajectory), + "keep_intermediate_files": bool(args.keep_intermediate_files), + "charge_correction_lane": "ACX_MEX_SO3_linkage_aware_r1", + "unaffected_original_campaign_outputs_reused": False, + "forced_fresh_failed_summary": env_flag("REVIEW_MD_FORCE_FRESH_FAILED_SUMMARY"), + "started_at_epoch": time.time(), + "state_dir": str(state_dir), + } + if archived_previous: + summary["archived_previous_state_dir"] = archived_previous + try: + input_pdb = state_dir / "input.pdb" + source_pdb = Path(row["resolved_remote_pdb_path"]) + if not source_pdb.exists(): + summary["final_status"] = "missing_source_pdb" + summary["source_pdb"] = str(source_pdb) + finalize_summary(summary_path, summary) + return 2 + shutil.copy2(source_pdb, input_pdb) + if not summary["input_pdb_atom_count"]: + with input_pdb.open(errors="replace") as handle: + summary["input_pdb_atom_count"] = sum(1 for line in handle if line.startswith(("ATOM", "HETATM"))) + summary["source_pdb"] = str(source_pdb) + summary["input_pdb"] = str(input_pdb) + + if not run_tleap(state_dir, input_pdb, row, summary): + summary["final_status"] = ( + "charge_correction_failed" + if summary.get("charge_correction_status") == "failed" + else "tleap_failed" + ) + finalize_summary(summary_path, summary) + return 3 + + top, gro = convert_to_gromacs(state_dir, summary) + if top and gro and run_gromacs(state_dir, top, gro, args.production_ns, summary, not args.keep_full_trajectory): + if not args.keep_intermediate_files: + apply_feature_retention_cleanup(state_dir, summary, args.keep_full_trajectory) + summary["final_status"] = "production_passed" + finalize_summary(summary_path, summary) + return 0 + + gromacs_status = summary.get("gromacs_status", "") + fallback_eligible = summary.get("conversion_status") == "failed" or gromacs_status.startswith( + ( + "missing", + "failed_grompp", + "failed_missing", + "failed_mdrun_em", + "failed_mdrun_nvt", + "failed_mdrun_npt", + "failed_mdrun_md", + ) + ) + if args.allow_amber_fallback and fallback_eligible: + if run_amber_fallback(state_dir, args.production_ns, summary): + if compact_amber_outputs(state_dir, summary, not args.keep_full_trajectory): + summary["retention_mode"] = "amber_feature" + summary["final_status"] = "production_passed_with_amber_fallback" + finalize_summary(summary_path, summary) + return 0 + + if summary.get("compact_retention_status") in { + "failed_incomplete_compact_trajectory", + "failed_trjconv", + }: + summary["final_status"] = "production_incomplete_compact_trajectory" + summary["retry_required"] = True + summary["retry_reason"] = "incomplete_compact_trajectory" + summary["retry_force_fresh"] = True + else: + summary["final_status"] = "production_failed_or_conversion_failed" + finalize_summary(summary_path, summary) + return 4 + except Exception as exc: # noqa: BLE001 - summary should survive unexpected cluster errors. + summary["final_status"] = "exception" + summary["exception"] = repr(exc) + finalize_summary(summary_path, summary) + raise + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_wiley_pca_corpus.py b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_wiley_pca_corpus.py new file mode 100644 index 0000000000000000000000000000000000000000..ee07456bb075a1bced77114437455674bdc2d08f --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_wiley_pca_corpus.py @@ -0,0 +1,899 @@ +#!/usr/bin/env python3 +"""Corpus-scale conformational PCA for every completed reviewed-glycan MD state.""" + +from __future__ import annotations + +import argparse +import json +import math +import os +import re +import sys +import tempfile +import traceback +from collections import Counter +from datetime import datetime, timezone +from pathlib import Path +from typing import Any, Sequence + +import numpy as np + +SCRIPT_DIR = Path(__file__).resolve().parent +if str(SCRIPT_DIR) not in sys.path: + sys.path.insert(0, str(SCRIPT_DIR)) + +import review_md_wiley_pca_pilot as pilot + + +SCHEMA = "review_md_wiley_pca_corpus_v1" +SEED = 20260724 +WURCS_COUNT = re.compile(r"^WURCS=2\.[0-9]+/[0-9]+,([0-9]+),") +NON_GLYCAN_RESIDUES = { + "HOH", + "WAT", + "NA", + "CL", + "K", + "CA", + "MG", + "ROH", +} + + +def utc_now() -> str: + return datetime.now(timezone.utc).isoformat() + + +def wurcs_node_count(wurcs: str) -> int | None: + match = WURCS_COUNT.match(str(wurcs).strip()) + return int(match.group(1)) if match else None + + +def residue_order( + atoms: Sequence[dict[str, Any]], + residues: dict[tuple[str, str, str], list[int]], +) -> list[tuple[str, str, str]]: + return sorted(residues, key=lambda key: min(residues[key])) + + +def residue_name( + key: tuple[str, str, str], + atoms: Sequence[dict[str, Any]], + residues: dict[tuple[str, str, str], list[int]], +) -> str: + return str(atoms[residues[key][0]]["residue_name"]) + + +def known_glycam_suffixes(static_rows: Sequence[dict[str, str]]) -> set[str]: + suffixes: set[str] = set() + for row in static_rows: + try: + mapping = json.loads(row.get("wurcs_to_pdb_mapping_json", "")) + except (TypeError, json.JSONDecodeError): + continue + for value in mapping.values(): + suffix = str(value.get("expected_pdb_suffix", "")).strip() + if suffix: + suffixes.add(suffix) + pdb_name = str(value.get("pdb_residue_name", "")).strip() + if len(pdb_name) >= 2: + suffixes.add(pdb_name[-2:]) + if not suffixes: + raise ValueError("no GLYCAM residue suffixes could be learned") + return suffixes + + +def residue_is_carbohydrate_like( + key: tuple[str, str, str], + atoms: Sequence[dict[str, Any]], + residues: dict[tuple[str, str, str], list[int]], + glycam_suffixes: set[str], +) -> bool: + name = residue_name(key, atoms, residues) + if name.upper() in NON_GLYCAN_RESIDUES: + return False + if len(name) >= 2 and name[-2:] in glycam_suffixes: + return True + elements = Counter( + str(atoms[index]["element"]).upper() for index in residues[key] + ) + return elements["C"] >= 3 and elements["O"] >= 2 + + +def source_native_residue_keys( + atoms: Sequence[dict[str, Any]], + residues: dict[tuple[str, str, str], list[int]], + glycam_suffixes: set[str], + expected_count: int | None, +) -> tuple[list[tuple[str, str, str]], str]: + ordered = residue_order(atoms, residues) + suffix_only = [ + key + for key in ordered + if ( + len(residue_name(key, atoms, residues)) >= 2 + and residue_name(key, atoms, residues)[-2:] in glycam_suffixes + ) + ] + heuristic = [ + key + for key in ordered + if residue_is_carbohydrate_like(key, atoms, residues, glycam_suffixes) + ] + if expected_count is not None: + if len(suffix_only) == expected_count: + return suffix_only, "known_glycam_suffix_count_match" + if len(heuristic) == expected_count: + return heuristic, "carbohydrate_heuristic_count_match" + if heuristic: + return heuristic, "carbohydrate_heuristic_unmatched_count" + return [], "no_carbohydrate_residue_found" + + +def mapped_residue_keys( + mapping: dict[str, dict[str, Any]], canonical_wurcs: str +) -> list[tuple[str, str, str]]: + tree = pilot.parse_wurcs_edge_tree(canonical_wurcs) + ordered = [] + for node in tree.nodes: + value = mapping[str(node)] + ordered.append( + pilot.residue_key( + value.get("pdb_chain"), + value["pdb_resseq"], + value.get("pdb_insertion_code"), + ) + ) + return ordered + + +def residue_graph_qc( + selected_keys: Sequence[tuple[str, str, str]], + atoms: Sequence[dict[str, Any]], + serial_to_index: dict[int, int], + connections: set[tuple[int, int]], +) -> dict[str, Any]: + selected = set(selected_keys) + edges: set[tuple[tuple[str, str, str], tuple[str, str, str]]] = set() + for left_serial, right_serial in connections: + if left_serial not in serial_to_index or right_serial not in serial_to_index: + continue + left = atoms[serial_to_index[left_serial]]["residue_key"] + right = atoms[serial_to_index[right_serial]]["residue_key"] + if left == right or left not in selected or right not in selected: + continue + edges.add(tuple(sorted((left, right)))) + adjacency = {key: set() for key in selected_keys} + for left, right in edges: + adjacency[left].add(right) + adjacency[right].add(left) + visited: set[tuple[str, str, str]] = set() + if selected_keys: + stack = [selected_keys[0]] + while stack: + node = stack.pop() + if node in visited: + continue + visited.add(node) + stack.extend(adjacency[node] - visited) + return { + "selected_residue_count": len(selected_keys), + "cross_residue_edge_count": len(edges), + "connected": bool(selected_keys) and len(visited) == len(selected_keys), + "branched": any(len(neighbors) > 2 for neighbors in adjacency.values()), + } + + +def state_paths(campaign_dir: Path, campaign_index: int) -> dict[str, Path]: + state_dir = pilot.locate_state_dir(campaign_dir, campaign_index) + return { + "state_dir": state_dir, + "input_pdb": state_dir / "input.pdb", + "gro": state_dir / "gromacs_run" / "md_solute.gro", + "xtc": state_dir / "gromacs_run" / "md_solute.xtc", + "state_summary": state_dir / "state_summary.json", + } + + +def feature_basis_for_residue_count(count: int) -> str: + if count == 1: + return "monosaccharide_heavy_atom_internal_distances" + if count == 2: + return "disaccharide_cross_heavy_atom_distances" + if count >= 3: + return "monosaccharide_com_internal_distances" + return "unavailable" + + +def prepare_corpus( + campaign_dir: Path, + static_partition: Path, + output_dir: Path, + limit: int | None = None, +) -> dict[str, Any]: + inputs_dir = output_dir / "inputs" + manifest_path = inputs_dir / "review_md_wiley_pca_corpus_manifest.tsv" + receipt_path = inputs_dir / "review_md_wiley_pca_corpus_prepare.json" + if manifest_path.exists() or receipt_path.exists(): + raise FileExistsError("refusing to overwrite an existing corpus manifest") + + source_manifest = campaign_dir / "inputs" / "review_md_clean20_manifest.tsv" + md_rows = pilot.read_tsv(source_manifest) + if limit is not None: + md_rows = md_rows[:limit] + static_rows = pilot.read_tsv(static_partition) + static_by_key = { + (row["parent_glycorpus_id"], row["state_label"]): row + for row in static_rows + } + suffixes = known_glycam_suffixes(static_rows) + output_rows: list[dict[str, Any]] = [] + status_counts: Counter[str] = Counter() + mapping_counts: Counter[str] = Counter() + basis_counts: Counter[str] = Counter() + graph_counts: Counter[str] = Counter() + + for offset, md_row in enumerate(md_rows, start=1): + campaign_index = int(md_row["campaign_index"]) + paths = state_paths(campaign_dir, campaign_index) + if not paths["state_dir"].is_dir(): + raise FileNotFoundError(paths["state_dir"]) + for name, required in paths.items(): + if name == "state_dir": + continue + if not required.is_file() or required.stat().st_size == 0: + raise FileNotFoundError(required) + state_summary = json.loads(paths["state_summary"].read_text()) + if not pilot.state_summary_is_campaign_complete(state_summary): + raise ValueError(f"state is not complete: {paths['state_dir']}") + + atoms, serial_to_index, residues, connections = pilot.parse_pdb( + paths["input_pdb"] + ) + input_hash = pilot.sha256_file(paths["input_pdb"]) + expected_count = wurcs_node_count(md_row.get("canonical_wurcs", "")) + static_row = static_by_key.get( + (md_row["parent_glycorpus_id"], md_row["state_label"]) + ) + mapping_mode = "source_native" + mapping_json = "" + selected_keys: list[tuple[str, str, str]] = [] + selection_reason = "" + static_hash_match = False + if static_row is not None: + static_hash_match = ( + input_hash == static_row.get("certified_pdb_sha256", "") + ) + if static_row is not None and static_hash_match: + try: + mapping = json.loads(static_row["wurcs_to_pdb_mapping_json"]) + selected_keys = mapped_residue_keys( + mapping, static_row["canonical_wurcs"] + ) + if any(key not in residues for key in selected_keys): + raise ValueError("certified mapped residue missing from MD PDB") + mapping_mode = "exact_certified" + mapping_json = static_row["wurcs_to_pdb_mapping_json"] + selection_reason = "certified_input_pdb_hash_and_mapping_match" + except ( + KeyError, + TypeError, + ValueError, + json.JSONDecodeError, + ): + selected_keys = [] + + if not selected_keys: + selected_keys, selection_reason = source_native_residue_keys( + atoms, residues, suffixes, expected_count + ) + + graph_qc = residue_graph_qc( + selected_keys, atoms, serial_to_index, connections + ) + basis = feature_basis_for_residue_count(len(selected_keys)) + status = "READY" if basis != "unavailable" else "UNRESOLVED" + status_counts[status] += 1 + mapping_counts[mapping_mode] += 1 + basis_counts[basis] += 1 + graph_counts[ + f"connected={int(graph_qc['connected'])};" + f"count_match={int(expected_count == len(selected_keys))}" + ] += 1 + + output_rows.append( + { + "corpus_rank": offset, + "campaign_index": campaign_index, + "structure_state_id": md_row["structure_state_id"], + "parent_glycorpus_id": md_row["parent_glycorpus_id"], + "state_label": md_row["state_label"], + "state_role": md_row["state_role"], + "canonical_wurcs": md_row["canonical_wurcs"], + "iupac_name": md_row["iupac_name"], + "state_dir": str(paths["state_dir"]), + "input_pdb": str(paths["input_pdb"]), + "md_solute_gro": str(paths["gro"]), + "md_solute_xtc": str(paths["xtc"]), + "input_pdb_sha256": input_hash, + "pdb_atom_count": len(atoms), + "pdb_residue_count": len(residues), + "expected_wurcs_node_count": ( + expected_count if expected_count is not None else "" + ), + "analysis_residue_count": len(selected_keys), + "analysis_residue_keys_json": json.dumps(selected_keys), + "analysis_residue_selection_reason": selection_reason, + "mapping_mode": mapping_mode, + "static_mapping_available": int(static_row is not None), + "static_certified_pdb_hash_match": int(static_hash_match), + "wurcs_to_pdb_mapping_json": mapping_json, + "feature_basis": basis, + "source_native_graph_connected": int(graph_qc["connected"]), + "source_native_graph_edge_count": graph_qc[ + "cross_residue_edge_count" + ], + "source_native_graph_branched": int(graph_qc["branched"]), + "prepare_status": status, + } + ) + + fields = list(output_rows[0]) + pilot.write_tsv(manifest_path, output_rows, fields) + receipt = { + "schema": SCHEMA, + "status": ( + "PASS" if status_counts.get("UNRESOLVED", 0) == 0 else "PASS_WITH_UNRESOLVED" + ), + "created_at_utc": utc_now(), + "source_manifest": str(source_manifest.resolve()), + "source_manifest_sha256": pilot.sha256_file(source_manifest), + "static_partition": str(static_partition.resolve()), + "static_partition_sha256": pilot.sha256_file(static_partition), + "output_manifest": str(manifest_path.resolve()), + "output_manifest_sha256": pilot.sha256_file(manifest_path), + "input_state_count": len(md_rows), + "prepare_status_counts": dict(sorted(status_counts.items())), + "mapping_mode_counts": dict(sorted(mapping_counts.items())), + "feature_basis_counts": dict(sorted(basis_counts.items())), + "graph_qc_counts": dict(sorted(graph_counts.items())), + "known_glycam_suffix_count": len(suffixes), + "limit": limit, + "official_submitted_artifacts_modified": False, + } + pilot.atomic_write_json(receipt_path, receipt) + return receipt + + +def heavy_atom_indices( + group: Sequence[int], atoms: Sequence[dict[str, Any]] +) -> np.ndarray: + values = [ + index + for index in group + if str(atoms[index]["element"]).upper() != "H" + ] + if len(values) < 2: + raise ValueError("analysis residue has fewer than two heavy atoms") + return np.asarray(values, dtype=int) + + +def pca_input_features( + coordinates_nm: np.ndarray, + atom_groups: Sequence[Sequence[int]], + atoms: Sequence[dict[str, Any]], + masses: np.ndarray, + basis: str, +) -> tuple[np.ndarray, dict[str, Any]]: + if basis == "monosaccharide_com_internal_distances": + centers = pilot.residue_centers(coordinates_nm, atom_groups, masses) + values, pair_indices = pilot.lower_triangle_distances(centers) + return values, {"pair_indices": pair_indices} + if basis == "disaccharide_cross_heavy_atom_distances": + left = heavy_atom_indices(atom_groups[0], atoms) + right = heavy_atom_indices(atom_groups[1], atoms) + delta = ( + coordinates_nm[:, left, None, :] + - coordinates_nm[:, None, right, :] + ) + values = np.linalg.norm(delta, axis=3).reshape(len(coordinates_nm), -1) + return values * 10.0, { + "left_heavy_atom_indices": left.tolist(), + "right_heavy_atom_indices": right.tolist(), + } + if basis == "monosaccharide_heavy_atom_internal_distances": + indices = heavy_atom_indices(atom_groups[0], atoms) + points = coordinates_nm[:, indices, :] + values, pairs = pilot.lower_triangle_distances(points) + return values, { + "heavy_atom_indices": indices.tolist(), + "pair_indices": pairs, + } + raise ValueError(f"unsupported PCA feature basis: {basis}") + + +def fit_state_pca( + values: np.ndarray, rg_A: np.ndarray, asphericity: np.ndarray +) -> tuple[np.ndarray, dict[str, Any]]: + matrix = np.asarray(values, dtype=np.float64) + finite_variable = np.all(np.isfinite(matrix), axis=0) & ( + np.std(matrix, axis=0) > 1e-10 + ) + if int(np.sum(finite_variable)) < 2: + matrix = np.column_stack([matrix, rg_A, asphericity]) + result = pilot.fit_pca_and_clusters(matrix, seed=SEED) + labels = np.asarray(result["labels"], dtype=int) + occupancies = Counter(int(value) for value in labels) + summary = { + "pc1_variance_fraction": float(result["explained_variance_ratio"][0]), + "pc2_variance_fraction": float(result["explained_variance_ratio"][1]), + "pc1_pc2_variance_fraction": float( + np.sum(result["explained_variance_ratio"][:2]) + ), + "pca_components_90": int(result["retained_components_90"]), + "selected_cluster_count": int(result["cluster_count"]), + "cluster_silhouette": float(result["silhouette"]), + "cluster_occupancies": { + str(cluster): count / len(labels) + for cluster, count in sorted(occupancies.items()) + }, + "representative_frame_indices": [ + int(value) for value in result["representative_frame_indices"] + ], + } + return matrix.astype(np.float32), { + "scores": np.asarray(result["scores"], dtype=np.float32), + "labels": labels.astype(np.int16), + "explained_variance_ratio": np.asarray( + result["explained_variance_ratio"], dtype=np.float32 + ), + "summary": summary, + } + + +def output_state_dir(output_dir: Path, row: dict[str, str]) -> Path: + safe_state = re.sub(r"[^A-Za-z0-9_.-]+", "_", row["structure_state_id"]) + return output_dir / "states" / ( + f"{int(row['campaign_index']):06d}_{safe_state}" + ) + + +def edge_summaries( + edge_metadata: Sequence[dict[str, Any]], angles: dict[str, np.ndarray] +) -> list[dict[str, Any]]: + result = [] + for edge_index, edge in enumerate(edge_metadata): + row = { + key: value + for key, value in edge.items() + if not key.endswith("_atom_indices") + } + for array_name, prefix in ( + ("phi_deg", "phi"), + ("psi_deg", "psi"), + ("omega_deg", "omega"), + ("omega_star_deg", "omega_star"), + ): + values = angles[array_name][:, edge_index] + finite = values[np.isfinite(values)] + if len(finite): + row.update(pilot.circular_summary(finite, prefix)) + result.append(row) + return result + + +def extract_state( + row: dict[str, str], output_dir: Path, gmx: str +) -> dict[str, Any]: + target = output_state_dir(output_dir, row) + metadata_path = target / "review_md_wiley_corpus_state.json" + features_path = target / "review_md_wiley_corpus_features.npz" + input_pdb = Path(row["input_pdb"]) + gro = Path(row["md_solute_gro"]) + xtc = Path(row["md_solute_xtc"]) + if metadata_path.is_file() and features_path.is_file(): + metadata = json.loads(metadata_path.read_text()) + if ( + metadata.get("status") == "PASS" + and metadata.get("features_sha256") == pilot.sha256_file(features_path) + and pilot.metadata_matches_analysis_input_hashes(metadata, row) + ): + return metadata + raise ValueError(f"inconsistent existing output: {target}") + if row["prepare_status"] != "READY": + raise ValueError(f"state was not prepared as READY: {row['prepare_status']}") + + source_hashes = pilot.verify_analysis_input_hashes(row, input_pdb, gro, xtc) + atoms, serial_to_index, residues, connections = pilot.parse_pdb(input_pdb) + gro_atoms = pilot.parse_gro(gro) + pdb_to_gro = pilot.pdb_to_gro_atom_order(atoms, gro_atoms) + selected_keys = [ + tuple(value) for value in json.loads(row["analysis_residue_keys_json"]) + ] + atom_groups = [] + for key in selected_keys: + if key not in residues: + raise ValueError(f"prepared analysis residue missing from PDB: {key}") + atom_groups.append(residues[key]) + masses = np.asarray( + [ + pilot.MASS_BY_ELEMENT.get(str(atom["element"]).upper(), 12.0) + for atom in atoms + ], + dtype=np.float64, + ) + + target.parent.mkdir(parents=True, exist_ok=True) + with tempfile.TemporaryDirectory( + prefix=f"review_wiley_corpus_{row['campaign_index']}_", + dir=os.environ.get("SLURM_TMPDIR") or None, + ) as temporary: + times, coordinates_nm, gmx_output = pilot.extract_coordinates( + gmx, xtc, gro, len(atoms), Path(temporary) + ) + coordinates_nm = coordinates_nm[:, pdb_to_gro, :] + if ( + len(times) != 1001 + or not np.isclose(times[0], 0.0) + or not np.isclose(times[-1], 20000.0) + or not np.all(np.isfinite(coordinates_nm)) + ): + raise ValueError( + f"trajectory coverage failure frames={len(times)} " + f"first={times[0]} last={times[-1]}" + ) + + rg_nm, asphericity = pilot.gyration_descriptors(coordinates_nm, masses) + rg_A = rg_nm * 10.0 + raw_features, feature_details = pca_input_features( + coordinates_nm, + atom_groups, + atoms, + masses, + row["feature_basis"], + ) + pca_matrix, pca = fit_state_pca(raw_features, rg_A, asphericity) + + edge_metadata: list[dict[str, Any]] = [] + torsion_status = "UNAVAILABLE_SOURCE_NATIVE_MAPPING" + torsion_error = "" + angles = { + name: np.empty((len(times), 0), dtype=np.float32) + for name in ("phi_deg", "psi_deg", "omega_deg", "omega_star_deg") + } + if row["mapping_mode"] == "exact_certified": + try: + mapping = json.loads(row["wurcs_to_pdb_mapping_json"]) + _, _, edge_metadata = pilot.build_edge_definitions( + row["canonical_wurcs"], + mapping, + atoms, + serial_to_index, + residues, + connections, + ) + angles = pilot.angles_for_edges(coordinates_nm, edge_metadata) + torsion_status = "PASS_EXACT_CERTIFIED" + except Exception as error: + torsion_status = "FAILED_EXACT_MAPPING_TORSION" + torsion_error = f"{type(error).__name__}: {error}" + + representative_indices = pca["summary"]["representative_frame_indices"] + staging = target.with_name(f"{target.name}.tmp.{os.getpid()}") + if staging.exists(): + raise FileExistsError(staging) + staging.mkdir(parents=True) + staging_features = staging / features_path.name + with staging_features.open("wb") as handle: + np.savez_compressed( + handle, + times_ps=times.astype(np.float32), + pca_input_features=pca_matrix, + pca_scores=pca["scores"], + pca_labels=pca["labels"], + pca_explained_variance_ratio=pca["explained_variance_ratio"], + radius_of_gyration_A=rg_A.astype(np.float32), + asphericity=asphericity.astype(np.float32), + **angles, + ) + metadata = { + "schema": SCHEMA, + "status": "PASS", + "created_at_utc": utc_now(), + "campaign_index": int(row["campaign_index"]), + "structure_state_id": row["structure_state_id"], + "parent_glycorpus_id": row["parent_glycorpus_id"], + "state_label": row["state_label"], + "canonical_wurcs": row["canonical_wurcs"], + "input_pdb": str(input_pdb), + "md_solute_gro": str(gro), + "md_solute_xtc": str(xtc), + **source_hashes, + "frame_count": len(times), + "first_time_ps": float(times[0]), + "last_time_ps": float(times[-1]), + "atom_count": len(atoms), + "analysis_residue_count": len(selected_keys), + "analysis_residue_keys": selected_keys, + "mapping_mode": row["mapping_mode"], + "feature_basis": row["feature_basis"], + "feature_count": int(pca_matrix.shape[1]), + "feature_details": feature_details, + "pca": pca["summary"], + "representative_times_ps": [ + float(times[index]) for index in representative_indices + ], + "radius_of_gyration_A": pilot.describe_vector( + rg_A, "radius_of_gyration_A" + ), + "asphericity": pilot.describe_vector(asphericity, "asphericity"), + "torsion_status": torsion_status, + "torsion_error": torsion_error, + "glycosidic_edge_count": len(edge_metadata), + "edge_metadata": edge_metadata, + "edge_summaries": edge_summaries(edge_metadata, angles), + "trajectory_coordinates_reordered_to_pdb_atom_order": ( + pdb_to_gro != list(range(len(atoms))) + ), + "gmx_traj_tail": gmx_output[-1000:], + "features_path": str(features_path), + "features_sha256": pilot.sha256_file(staging_features), + "official_submitted_artifacts_modified": False, + "claim_boundary": ( + "short_timescale_sampled_descriptors_not_equilibrium_populations" + ), + } + pilot.atomic_write_json( + staging / metadata_path.name, + metadata, + ) + os.replace(staging, target) + if pilot.sha256_file(features_path) != metadata["features_sha256"]: + raise ValueError("post-publication feature hash mismatch") + return metadata + + +def failure_receipt( + output_dir: Path, row: dict[str, str], error: BaseException +) -> Path: + directory = output_dir / "failures" + directory.mkdir(parents=True, exist_ok=True) + timestamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%S%fZ") + path = directory / ( + f"{timestamp}_{int(row['campaign_index']):06d}_" + f"{re.sub(r'[^A-Za-z0-9_.-]+', '_', row['structure_state_id'])}.json" + ) + pilot.atomic_write_json( + path, + { + "schema": SCHEMA, + "status": "FAILED", + "created_at_utc": utc_now(), + "campaign_index": int(row["campaign_index"]), + "structure_state_id": row["structure_state_id"], + "parent_glycorpus_id": row["parent_glycorpus_id"], + "state_label": row["state_label"], + "error_type": type(error).__name__, + "error": str(error), + "traceback": traceback.format_exc()[-8000:], + "official_submitted_artifacts_modified": False, + }, + ) + return path + + +def extract_shard( + manifest: Path, + output_dir: Path, + shard_index: int, + shard_count: int, + gmx: str, +) -> dict[str, Any]: + rows = [ + row + for offset, row in enumerate(pilot.read_tsv(manifest)) + if offset % shard_count == shard_index + ] + if not rows: + raise ValueError(f"empty shard {shard_index}/{shard_count}") + sentinel = output_dir / "shards" / ( + f"review_md_wiley_corpus_shard_{shard_index:04d}_" + f"of_{shard_count:04d}.json" + ) + if sentinel.exists(): + payload = json.loads(sentinel.read_text()) + if payload.get("status") == "COMPLETE": + return payload + raise ValueError(f"existing shard sentinel is not COMPLETE: {sentinel}") + passed = [] + failed = [] + unresolved = [] + for row in rows: + if row["prepare_status"] != "READY": + unresolved.append(int(row["campaign_index"])) + continue + try: + result = extract_state(row, output_dir, gmx) + passed.append(int(result["campaign_index"])) + except Exception as error: + receipt = failure_receipt(output_dir, row, error) + failed.append( + { + "campaign_index": int(row["campaign_index"]), + "failure_receipt": str(receipt), + } + ) + payload = { + "schema": SCHEMA, + "status": "COMPLETE", + "created_at_utc": utc_now(), + "manifest": str(manifest.resolve()), + "manifest_sha256": pilot.sha256_file(manifest), + "shard_index": shard_index, + "shard_count": shard_count, + "assigned_state_count": len(rows), + "passed_state_count": len(passed), + "failed_state_count": len(failed), + "unresolved_state_count": len(unresolved), + "passed_campaign_indices": passed, + "failures": failed, + "unresolved_campaign_indices": unresolved, + "official_submitted_artifacts_modified": False, + } + pilot.atomic_write_json(sentinel, payload) + return payload + + +def summarize_corpus( + manifest: Path, output_dir: Path, expected_shards: int +) -> dict[str, Any]: + summary_dir = output_dir / "summary" + final = summary_dir / "review_md_wiley_pca_corpus_summary.json" + if final.exists(): + payload = json.loads(final.read_text()) + if payload.get("status") in {"PASS", "PASS_WITH_FAILURES"}: + return payload + raise ValueError(f"existing summary is not reusable: {final}") + rows = pilot.read_tsv(manifest) + shard_files = sorted((output_dir / "shards").glob("review_md_wiley_corpus_shard_*.json")) + if len(shard_files) != expected_shards: + raise ValueError( + f"expected {expected_shards} shard receipts, found {len(shard_files)}" + ) + shard_receipts = [json.loads(path.read_text()) for path in shard_files] + state_rows = [] + missing = [] + for row in rows: + target = output_state_dir(output_dir, row) + metadata_path = target / "review_md_wiley_corpus_state.json" + features_path = target / "review_md_wiley_corpus_features.npz" + if not metadata_path.is_file() or not features_path.is_file(): + missing.append(int(row["campaign_index"])) + continue + metadata = json.loads(metadata_path.read_text()) + if ( + metadata.get("status") != "PASS" + or metadata.get("features_sha256") != pilot.sha256_file(features_path) + ): + missing.append(int(row["campaign_index"])) + continue + pca = metadata["pca"] + rg = metadata["radius_of_gyration_A"] + asp = metadata["asphericity"] + state_rows.append( + { + "campaign_index": metadata["campaign_index"], + "structure_state_id": metadata["structure_state_id"], + "parent_glycorpus_id": metadata["parent_glycorpus_id"], + "state_label": metadata["state_label"], + "mapping_mode": metadata["mapping_mode"], + "feature_basis": metadata["feature_basis"], + "analysis_residue_count": metadata["analysis_residue_count"], + "feature_count": metadata["feature_count"], + "pc1_variance_fraction": pca["pc1_variance_fraction"], + "pc2_variance_fraction": pca["pc2_variance_fraction"], + "pc1_pc2_variance_fraction": pca[ + "pc1_pc2_variance_fraction" + ], + "pca_components_90": pca["pca_components_90"], + "selected_cluster_count": pca["selected_cluster_count"], + "cluster_silhouette": pca["cluster_silhouette"], + "radius_of_gyration_A_mean": rg[ + "radius_of_gyration_A_mean" + ], + "radius_of_gyration_A_sd": rg["radius_of_gyration_A_sd"], + "asphericity_mean": asp["asphericity_mean"], + "asphericity_sd": asp["asphericity_sd"], + "torsion_status": metadata["torsion_status"], + "glycosidic_edge_count": metadata["glycosidic_edge_count"], + } + ) + state_table = summary_dir / "review_md_wiley_pca_corpus_state_summary.tsv" + if state_rows: + pilot.write_tsv(state_table, state_rows, list(state_rows[0])) + failure_count = sum(int(row["failed_state_count"]) for row in shard_receipts) + unresolved_count = sum( + int(row["unresolved_state_count"]) for row in shard_receipts + ) + payload = { + "schema": SCHEMA, + "status": ( + "PASS" + if len(state_rows) == len(rows) + else "PASS_WITH_FAILURES" + ), + "created_at_utc": utc_now(), + "manifest": str(manifest.resolve()), + "manifest_sha256": pilot.sha256_file(manifest), + "input_state_count": len(rows), + "completed_state_count": len(state_rows), + "missing_state_count": len(missing), + "failed_state_count_from_shards": failure_count, + "unresolved_state_count_from_shards": unresolved_count, + "missing_campaign_indices": missing, + "state_table": str(state_table), + "state_table_sha256": ( + pilot.sha256_file(state_table) if state_table.is_file() else "" + ), + "official_submitted_artifacts_modified": False, + "claim_boundary": ( + "short_timescale_sampled_descriptors_not_equilibrium_populations" + ), + } + pilot.atomic_write_json(final, payload) + return payload + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser(description=__doc__) + subparsers = parser.add_subparsers(dest="command", required=True) + + prepare = subparsers.add_parser("prepare") + prepare.add_argument("--campaign-dir", type=Path, required=True) + prepare.add_argument("--static-partition", type=Path, required=True) + prepare.add_argument("--output-dir", type=Path, required=True) + prepare.add_argument("--limit", type=int) + + extract = subparsers.add_parser("extract-shard") + extract.add_argument("--manifest", type=Path, required=True) + extract.add_argument("--output-dir", type=Path, required=True) + extract.add_argument("--shard-index", type=int, required=True) + extract.add_argument("--shard-count", type=int, required=True) + extract.add_argument("--gmx", default="gmx") + + summary = subparsers.add_parser("summarize") + summary.add_argument("--manifest", type=Path, required=True) + summary.add_argument("--output-dir", type=Path, required=True) + summary.add_argument("--expected-shards", type=int, required=True) + return parser + + +def main() -> int: + arguments = build_parser().parse_args() + if arguments.command == "prepare": + result = prepare_corpus( + arguments.campaign_dir, + arguments.static_partition, + arguments.output_dir, + arguments.limit, + ) + elif arguments.command == "extract-shard": + result = extract_shard( + arguments.manifest, + arguments.output_dir, + arguments.shard_index, + arguments.shard_count, + arguments.gmx, + ) + else: + result = summarize_corpus( + arguments.manifest, + arguments.output_dir, + arguments.expected_shards, + ) + print(json.dumps(result, indent=2, sort_keys=True)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_wiley_pca_pilot.py b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_wiley_pca_pilot.py new file mode 100644 index 0000000000000000000000000000000000000000..210f5ee727ad4effb8f1171d2c872fc308c1a90b --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_wiley_pca_pilot.py @@ -0,0 +1,1680 @@ +#!/usr/bin/env python3 +"""Focused Wiley-style PCA analysis for the completed reviewed-glycan MD layer.""" + +from __future__ import annotations + +import argparse +import csv +import gzip +import hashlib +import json +import math +import os +import re +import shutil +import subprocess +import sys +import tempfile +from collections import Counter, defaultdict +from pathlib import Path +from typing import Any, Iterable, Sequence + +import numpy as np + + +BERTROOT = Path(__file__).resolve().parents[4] +if str(BERTROOT) not in sys.path: + sys.path.insert(0, str(BERTROOT)) + +from training.a5_static_alignment import ( # noqa: E402 + parse_wurcs_edge_tree, + parse_wurcs_residue_instances, +) + + +SCHEMA = "review_md_wiley_pca_pilot_v1" +SEED = 20260724 +WURCS_EDGE_LABEL = re.compile(r"([abuxo])([0-9]+)-([0-9]+)") +WURCS_RING_CLOSURE = re.compile(r"([0-9]+)-([0-9]+)") +CARBON_NAME = re.compile(r"C([0-9]+)") +OXYGEN_NAME = re.compile(r"O([0-9]+)") +MASS_BY_ELEMENT = { + "H": 1.008, + "C": 12.011, + "N": 14.007, + "O": 15.999, + "F": 18.998, + "P": 30.974, + "S": 32.06, + "CL": 35.45, + "BR": 79.904, + "I": 126.904, +} +PILOT_PAIR_QUOTAS = {"small": 8, "medium": 8, "large": 8} +PILOT_SINGLE_QUOTAS = {"small": 6, "medium": 6, "large": 4} + + +def sha256_file(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as handle: + for block in iter(lambda: handle.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +ANALYSIS_INPUT_HASH_FIELDS = ( + "input_pdb_sha256", + "md_solute_gro_sha256", + "md_solute_xtc_sha256", +) + + +def verify_analysis_input_hashes( + row: dict[str, str], input_pdb: Path, gro: Path, xtc: Path +) -> dict[str, str]: + observed = { + "input_pdb_sha256": sha256_file(input_pdb), + "md_solute_gro_sha256": sha256_file(gro), + "md_solute_xtc_sha256": sha256_file(xtc), + } + if not row.get("input_pdb_sha256", ""): + raise ValueError("analysis manifest has no input PDB hash") + for field, digest in observed.items(): + expected = row.get(field, "").strip() + if expected and digest != expected: + raise ValueError(f"analysis input hash mismatch: {field}") + return observed + + +def metadata_matches_analysis_input_hashes( + metadata: dict[str, Any], row: dict[str, str] +) -> bool: + return all( + not (expected := row.get(field, "").strip()) + or metadata.get(field) == expected + for field in ANALYSIS_INPUT_HASH_FIELDS + ) + + +def stable_hash(text: str) -> str: + return hashlib.sha256(text.encode("utf-8")).hexdigest() + + +def atomic_write_json(path: Path, payload: dict[str, Any]) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + temporary = path.with_name(f"{path.name}.tmp.{os.getpid()}") + temporary.write_text( + json.dumps(payload, indent=2, sort_keys=True, allow_nan=False) + "\n", + encoding="utf-8", + ) + os.replace(temporary, path) + + +def write_tsv(path: Path, rows: Sequence[dict[str, Any]], fields: Sequence[str]) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + temporary = path.with_name(f"{path.name}.tmp.{os.getpid()}") + with temporary.open("w", encoding="utf-8", newline="") as handle: + writer = csv.DictWriter( + handle, + delimiter="\t", + fieldnames=list(fields), + extrasaction="ignore", + lineterminator="\n", + ) + writer.writeheader() + writer.writerows(rows) + os.replace(temporary, path) + + +def read_tsv(path: Path) -> list[dict[str, str]]: + opener = gzip.open if path.suffix == ".gz" else open + with opener(path, "rt", encoding="utf-8", newline="") as handle: + return list(csv.DictReader(handle, delimiter="\t")) + + +def normalized_pdb_field(value: object) -> str: + text = "" if value is None else str(value).strip() + return "" if text == "-" else text + + +def residue_key(chain: object, resseq: object, insertion_code: object) -> tuple[str, str, str]: + return ( + normalized_pdb_field(chain), + str(resseq).strip(), + normalized_pdb_field(insertion_code), + ) + + +def parse_pdb( + path: Path, +) -> tuple[ + list[dict[str, Any]], + dict[int, int], + dict[tuple[str, str, str], list[int]], + set[tuple[int, int]], +]: + atoms: list[dict[str, Any]] = [] + serial_to_index: dict[int, int] = {} + residues: dict[tuple[str, str, str], list[int]] = defaultdict(list) + connections: set[tuple[int, int]] = set() + with path.open("r", encoding="utf-8") as handle: + for line in handle: + if line.startswith(("ATOM ", "HETATM")): + serial = int(line[6:11]) + key = residue_key(line[21:22], line[22:26], line[26:27]) + element = line[76:78].strip().upper() + if not element: + element = re.sub(r"[^A-Za-z]", "", line[12:16]).upper()[:1] + atom = { + "serial": serial, + "atom_name": line[12:16].strip(), + "residue_name": line[17:20].strip(), + "residue_key": key, + "element": element, + } + if serial in serial_to_index: + raise ValueError(f"duplicate PDB atom serial {serial}") + serial_to_index[serial] = len(atoms) + residues[key].append(len(atoms)) + atoms.append(atom) + elif line.startswith("CONECT"): + serials = [ + int(field) + for start in range(6, len(line), 5) + if (field := line[start : start + 5].strip()) + ] + if serials: + connections.update( + tuple(sorted((serials[0], target))) for target in serials[1:] + ) + return atoms, serial_to_index, dict(residues), connections + + +def parse_gro(path: Path) -> list[dict[str, str]]: + lines = path.read_text(encoding="utf-8").splitlines() + count = int(lines[1].strip()) + if len(lines) < count + 3: + raise ValueError(f"truncated GRO file: {path}") + return [ + { + "residue_number": line[0:5].strip(), + "residue_name": line[5:10].strip(), + "atom_name": line[10:15].strip(), + } + for line in lines[2 : 2 + count] + ] + + +def pdb_to_gro_atom_order( + pdb_atoms: Sequence[dict[str, Any]], gro_atoms: Sequence[dict[str, str]] +) -> list[int]: + if len(pdb_atoms) != len(gro_atoms): + raise ValueError( + f"PDB/GRO atom-count mismatch: {len(pdb_atoms)} != {len(gro_atoms)}" + ) + gro_index: dict[tuple[str, str, str], int] = {} + for index, atom in enumerate(gro_atoms): + key = (atom["residue_number"], atom["residue_name"], atom["atom_name"]) + if key in gro_index: + raise ValueError(f"duplicate GRO atom identity {key}") + gro_index[key] = index + order: list[int] = [] + seen: set[tuple[str, str, str]] = set() + for atom in pdb_atoms: + key = ( + str(atom["residue_key"][1]), + str(atom["residue_name"]), + str(atom["atom_name"]), + ) + if key in seen: + raise ValueError(f"duplicate PDB atom identity {key}") + seen.add(key) + if key not in gro_index: + raise ValueError(f"PDB atom identity missing from GRO {key}") + order.append(gro_index[key]) + if set(order) != set(range(len(gro_atoms))): + raise ValueError("PDB-to-GRO atom mapping is not bijective") + return order + + +def size_bin(node_count: int) -> str: + if node_count <= 5: + return "small" + if node_count <= 9: + return "medium" + return "large" + + +def charge_is_nonzero(text: str) -> bool: + values = [float(value) for value in re.findall(r"[-+]?[0-9]*\.?[0-9]+", text)] + return any(abs(value) > 0.25 for value in values) + + +def graph_is_branched( + nodes: Sequence[object], edges: Sequence[tuple[object, object]] +) -> bool: + degree: Counter[str] = Counter() + degree.update({str(node): 0 for node in nodes}) + for left, right in edges: + degree[str(left)] += 1 + degree[str(right)] += 1 + return any(value > 2 for value in degree.values()) + + +def profile_candidate(md_row: dict[str, str], static_row: dict[str, str]) -> dict[str, Any]: + tree = parse_wurcs_edge_tree(static_row["canonical_wurcs"]) + node_count = len(tree.nodes) + if node_count < 3: + raise ValueError("pilot PCA requires at least three mapped monosaccharides") + mapping = json.loads(static_row["wurcs_to_pdb_mapping_json"]) + if set(mapping) != {str(node) for node in tree.nodes}: + raise ValueError("incomplete WURCS-to-PDB mapping") + tokens = [str(mapping[str(node)].get("glycam_token", "")) for node in tree.nodes] + linkage_positions: list[str] = [] + linkage_labels: list[str] = [] + graph_edges: list[tuple[str, str]] = [] + for acceptor_node, children in tree.children.items(): + for donor_node, label in children: + match = WURCS_EDGE_LABEL.fullmatch(label) + if match is None: + raise ValueError(f"unsupported WURCS edge label: {label}") + graph_edges.append((str(donor_node), str(acceptor_node))) + linkage_positions.append(match.group(3)) + linkage_labels.append( + f"{donor_node}:{acceptor_node}:{match.group(1)}" + f"{match.group(2)}-{match.group(3)}" + ) + glucan_like = bool(tokens) and all( + "Glcp" in token and "GlcpNAc" not in token for token in tokens + ) + modified = any( + bool(mapping[str(node)].get("positioned_derivatives")) for node in tree.nodes + ) + charged = charge_is_nonzero(md_row.get("charge_values", "")) or any( + marker in md_row.get("pdb_residue_names", "") + for marker in ("SO3", "SA", "SIA", "ZBP", "0ZB") + ) + return { + "node_count": node_count, + "edge_count": len(linkage_labels), + "size_bin": size_bin(node_count), + "branched": graph_is_branched(tree.nodes, graph_edges), + "charged": charged, + "modified": modified, + "glucan_like": glucan_like, + "linkage_positions": sorted(set(linkage_positions)), + "linkage_signature": ",".join(sorted(linkage_labels)), + "tokens": tokens, + } + + +def candidate_features(candidate: dict[str, Any]) -> list[str]: + profile = candidate["profile"] + features = [ + f"size:{profile['size_bin']}", + f"branch:{int(profile['branched'])}", + f"charge:{int(profile['charged'])}", + f"modified:{int(profile['modified'])}", + f"glucan:{int(profile['glucan_like'])}", + ] + features.extend(f"acceptor_position:{value}" for value in profile["linkage_positions"]) + return features + + +def greedy_select( + candidates: Sequence[dict[str, Any]], + count: int, + *, + seed_label: str, + preselected: Sequence[dict[str, Any]] = (), +) -> list[dict[str, Any]]: + selected = list(preselected) + selected_ids = {row["selection_id"] for row in selected} + feature_counts = Counter( + feature for row in selected for feature in candidate_features(row) + ) + remaining = [row for row in candidates if row["selection_id"] not in selected_ids] + while len(selected) < count: + if not remaining: + raise ValueError(f"not enough candidates for {seed_label}: need {count}") + + def ranking(row: dict[str, Any]) -> tuple[float, str]: + novelty = sum( + 1.0 / (1.0 + feature_counts[feature]) + for feature in candidate_features(row) + ) + return ( + -novelty, + stable_hash(f"{SEED}|{seed_label}|{row['selection_id']}"), + ) + + choice = min(remaining, key=ranking) + selected.append(choice) + for feature in candidate_features(choice): + feature_counts[feature] += 1 + remaining = [ + row for row in remaining if row["selection_id"] != choice["selection_id"] + ] + return selected + + +def choose_glucan_controls( + candidates: Sequence[dict[str, Any]], count: int, label: str +) -> list[dict[str, Any]]: + glucans = [row for row in candidates if row["profile"]["glucan_like"]] + return greedy_select(glucans, count, seed_label=f"{label}:glucan") + + +def locate_state_dir(campaign_dir: Path, campaign_index: int) -> Path: + matches = list((campaign_dir / "states").glob(f"{campaign_index:06d}_*")) + if len(matches) != 1: + raise ValueError( + f"expected one state directory for {campaign_index}, found {len(matches)}" + ) + return matches[0] + + +def state_summary_is_campaign_complete(summary: dict[str, Any]) -> bool: + return ( + summary.get("final_status") == "production_passed" + and summary.get("compact_retention_status") == "passed" + and math.isclose(float(summary.get("production_ns") or 0.0), 20.0) + ) + + +def prepare_pilot( + campaign_dir: Path, static_partition: Path, output_dir: Path +) -> dict[str, Any]: + manifest_path = campaign_dir / "inputs" / "review_md_clean20_manifest.tsv" + output_manifest = output_dir / "inputs" / "review_md_wiley_pca_pilot64_manifest.tsv" + output_summary = output_dir / "inputs" / "review_md_wiley_pca_pilot64_selection.json" + if output_manifest.exists() or output_summary.exists(): + raise FileExistsError("refusing to overwrite an existing pilot selection") + + md_rows = read_tsv(manifest_path) + static_rows = read_tsv(static_partition) + static_by_key = { + (row["parent_glycorpus_id"], row["state_label"]): row for row in static_rows + } + candidates: list[dict[str, Any]] = [] + rejected = Counter() + for md_row in md_rows: + key = (md_row["parent_glycorpus_id"], md_row["state_label"]) + static_row = static_by_key.get(key) + if static_row is None: + rejected["no_certified_static_mapping"] += 1 + continue + if ( + md_row.get("resolved_remote_pdb_path", "") + != static_row.get("resolved_remote_pdb_path", "") + ): + rejected["certified_static_source_path_mismatch"] += 1 + continue + try: + profile = profile_candidate(md_row, static_row) + except (KeyError, TypeError, ValueError, json.JSONDecodeError) as error: + rejected[f"profile_error:{type(error).__name__}"] += 1 + continue + candidates.append( + { + "selection_id": md_row["structure_state_id"], + "md": md_row, + "static": static_row, + "profile": profile, + } + ) + + by_parent: dict[str, dict[str, dict[str, Any]]] = defaultdict(dict) + for candidate in candidates: + by_parent[candidate["md"]["parent_glycorpus_id"]][ + candidate["md"]["state_label"] + ] = candidate + + pair_candidates: list[dict[str, Any]] = [] + for parent, states in by_parent.items(): + if "alpha" not in states or "beta" not in states: + continue + alpha = states["alpha"] + beta = states["beta"] + if ( + alpha["profile"]["node_count"] != beta["profile"]["node_count"] + or alpha["profile"]["edge_count"] != beta["profile"]["edge_count"] + or alpha["profile"]["linkage_positions"] + != beta["profile"]["linkage_positions"] + ): + rejected["alpha_beta_topology_profile_mismatch"] += 1 + continue + pair_candidates.append( + { + "selection_id": parent, + "profile": alpha["profile"], + "alpha": alpha, + "beta": beta, + } + ) + + selected_pairs: list[dict[str, Any]] = [] + for bin_name, quota in PILOT_PAIR_QUOTAS.items(): + pool = [ + row for row in pair_candidates if row["profile"]["size_bin"] == bin_name + ] + glucan_controls = choose_glucan_controls( + pool, 2, f"pairs:{bin_name}" + ) + selected_pairs.extend( + greedy_select( + pool, + quota, + seed_label=f"pairs:{bin_name}", + preselected=glucan_controls, + ) + ) + + single_candidates = [ + row for row in candidates if row["md"]["state_label"] == "single" + ] + selected_singles: list[dict[str, Any]] = [] + for bin_name, quota in PILOT_SINGLE_QUOTAS.items(): + pool = [ + row for row in single_candidates if row["profile"]["size_bin"] == bin_name + ] + glucan_control = choose_glucan_controls( + pool, 1, f"singles:{bin_name}" + ) + selected_singles.extend( + greedy_select( + pool, + quota, + seed_label=f"singles:{bin_name}", + preselected=glucan_control, + ) + ) + + selected_states: list[tuple[str, dict[str, Any]]] = [] + for pair in selected_pairs: + selected_states.append(("alpha_beta_pair", pair["alpha"])) + selected_states.append(("alpha_beta_pair", pair["beta"])) + selected_states.extend(("single_state", row) for row in selected_singles) + if len(selected_states) != 64: + raise AssertionError(f"selection produced {len(selected_states)} states") + + selected_states.sort(key=lambda item: int(item[1]["md"]["campaign_index"])) + output_rows: list[dict[str, Any]] = [] + for rank, (cohort, candidate) in enumerate(selected_states, start=1): + md_row = candidate["md"] + static_row = candidate["static"] + profile = candidate["profile"] + campaign_index = int(md_row["campaign_index"]) + state_dir = locate_state_dir(campaign_dir, campaign_index) + input_pdb = state_dir / "input.pdb" + gro = state_dir / "gromacs_run" / "md_solute.gro" + xtc = state_dir / "gromacs_run" / "md_solute.xtc" + for required in (input_pdb, gro, xtc, state_dir / "state_summary.json"): + if not required.is_file() or required.stat().st_size == 0: + raise FileNotFoundError(required) + input_hash = sha256_file(input_pdb) + if input_hash != static_row["certified_pdb_sha256"]: + raise ValueError(f"certified PDB hash mismatch for {state_dir.name}") + state_summary = json.loads((state_dir / "state_summary.json").read_text()) + if not state_summary_is_campaign_complete(state_summary): + raise ValueError(f"state is not a certified complete trajectory: {state_dir}") + output_rows.append( + { + "pilot_rank": rank, + "selection_cohort": cohort, + "campaign_index": campaign_index, + "structure_state_id": md_row["structure_state_id"], + "parent_glycorpus_id": md_row["parent_glycorpus_id"], + "state_label": md_row["state_label"], + "size_bin": profile["size_bin"], + "mapped_monosaccharides": profile["node_count"], + "glycosidic_edges": profile["edge_count"], + "branched": int(profile["branched"]), + "charged": int(profile["charged"]), + "modified": int(profile["modified"]), + "glucan_like": int(profile["glucan_like"]), + "linkage_positions": ",".join(profile["linkage_positions"]), + "linkage_signature": profile["linkage_signature"], + "pdb_atom_count": md_row["pdb_atom_count"], + "pdb_residue_count": md_row["pdb_residue_count"], + "canonical_wurcs": static_row["canonical_wurcs"], + "iupac_name": md_row["iupac_name"], + "state_dir": str(state_dir), + "input_pdb": str(input_pdb), + "md_solute_gro": str(gro), + "md_solute_xtc": str(xtc), + "certified_pdb_sha256": input_hash, + "mapping_certification_status": static_row[ + "mapping_certification_status" + ], + "wurcs_to_pdb_mapping_json": static_row[ + "wurcs_to_pdb_mapping_json" + ], + } + ) + + fields = list(output_rows[0]) + write_tsv(output_manifest, output_rows, fields) + cohort_counts = Counter(row["selection_cohort"] for row in output_rows) + label_counts = Counter(row["state_label"] for row in output_rows) + bin_counts = Counter(row["size_bin"] for row in output_rows) + profile_counts = { + name: sum(int(row[name]) for row in output_rows) + for name in ("branched", "charged", "modified", "glucan_like") + } + summary = { + "schema": SCHEMA, + "status": "PASS", + "selection_seed": SEED, + "inputs": { + "md_manifest": str(manifest_path.resolve()), + "md_manifest_sha256": sha256_file(manifest_path), + "static_partition": str(static_partition.resolve()), + "static_partition_sha256": sha256_file(static_partition), + }, + "output_manifest": str(output_manifest.resolve()), + "output_manifest_sha256": sha256_file(output_manifest), + "eligible_profiled_states": len(candidates), + "eligible_complete_alpha_beta_pairs": len(pair_candidates), + "selected_states": len(output_rows), + "selected_parents": len({row["parent_glycorpus_id"] for row in output_rows}), + "cohort_counts": dict(sorted(cohort_counts.items())), + "state_label_counts": dict(sorted(label_counts.items())), + "size_bin_counts": dict(sorted(bin_counts.items())), + "profile_state_counts": profile_counts, + "acceptor_position_counts": dict( + sorted( + Counter( + position + for row in output_rows + for position in row["linkage_positions"].split(",") + if position + ).items() + ) + ), + "rejected_counts": dict(sorted(rejected.items())), + "official_submitted_artifacts_modified": False, + } + atomic_write_json(output_summary, summary) + return summary + + +def mapped_residues(mapping: dict[str, dict[str, Any]]) -> dict[tuple[str, str, str], str]: + result: dict[tuple[str, str, str], str] = {} + for node, row in mapping.items(): + key = residue_key( + row.get("pdb_chain"), row["pdb_resseq"], row.get("pdb_insertion_code") + ) + if key in result: + raise ValueError(f"duplicate mapped PDB residue {key}") + result[key] = str(node) + return result + + +def named_atoms_for_residue( + atom_indices: Sequence[int], atoms: Sequence[dict[str, Any]] +) -> dict[str, int]: + result: dict[str, int] = {} + for atom_index in atom_indices: + name = str(atoms[atom_index]["atom_name"]) + if name in result: + raise ValueError(f"duplicate atom name {name}") + result[name] = atom_index + return result + + +def wurcs_ring_oxygen_name(definition: str, donor_position: str) -> str | None: + candidates = [] + for token in definition.split("_"): + match = WURCS_RING_CLOSURE.fullmatch(token) + if match is not None and match.group(1) == donor_position: + candidates.append(f"O{match.group(2)}") + return candidates[0] if len(candidates) == 1 else None + + +def build_edge_definitions( + wurcs: str, + mapping: dict[str, dict[str, Any]], + atoms: Sequence[dict[str, Any]], + serial_to_index: dict[int, int], + residues: dict[tuple[str, str, str], list[int]], + connections: set[tuple[int, int]], +) -> tuple[list[str], list[list[int]], list[dict[str, Any]]]: + tree = parse_wurcs_edge_tree(wurcs) + residue_definitions = parse_wurcs_residue_instances(wurcs) + definition_by_node = dict( + zip((str(node) for node in tree.nodes), residue_definitions) + ) + node_order = [str(node) for node in tree.nodes] + mapped = mapped_residues(mapping) + if set(mapping) != set(node_order) or set(mapped.values()) != set(node_order): + raise ValueError("mapping does not cover the exact WURCS node set") + named_by_node: dict[str, dict[str, int]] = {} + indices_by_node: dict[str, list[int]] = {} + for key, node in mapped.items(): + indices = residues.get(key) + if not indices: + raise ValueError(f"mapped residue missing from PDB: {key}") + indices_by_node[node] = indices + named_by_node[node] = named_atoms_for_residue(indices, atoms) + + observed_links: dict[ + tuple[str, str, str], tuple[int, int] + ] = {} + for left_serial, right_serial in connections: + if left_serial not in serial_to_index or right_serial not in serial_to_index: + continue + left_index = serial_to_index[left_serial] + right_index = serial_to_index[right_serial] + left = atoms[left_index] + right = atoms[right_index] + if left["residue_key"] == right["residue_key"]: + continue + if left["residue_key"] not in mapped or right["residue_key"] not in mapped: + continue + left_carbon = CARBON_NAME.fullmatch(str(left["atom_name"])) + right_carbon = CARBON_NAME.fullmatch(str(right["atom_name"])) + left_oxygen = OXYGEN_NAME.fullmatch(str(left["atom_name"])) + right_oxygen = OXYGEN_NAME.fullmatch(str(right["atom_name"])) + if left_carbon and right_oxygen: + donor_index, oxygen_index = left_index, right_index + donor_match, oxygen_match = left_carbon, right_oxygen + elif right_carbon and left_oxygen: + donor_index, oxygen_index = right_index, left_index + donor_match, oxygen_match = right_carbon, left_oxygen + else: + continue + donor = atoms[donor_index] + oxygen = atoms[oxygen_index] + key = ( + mapped[donor["residue_key"]], + mapped[oxygen["residue_key"]], + f"{donor_match.group(1)}-{oxygen_match.group(1)}", + ) + if key in observed_links: + raise ValueError(f"duplicate observed glycosidic link {key}") + observed_links[key] = (donor_index, oxygen_index) + + edge_metadata: list[dict[str, Any]] = [] + expected_keys: set[tuple[str, str, str]] = set() + for acceptor_node, children in tree.children.items(): + for donor_node, label in children: + match = WURCS_EDGE_LABEL.fullmatch(label) + if match is None: + raise ValueError(f"unsupported WURCS edge label {label}") + donor_node = str(donor_node) + acceptor_node = str(acceptor_node) + donor_position = match.group(2) + acceptor_position = match.group(3) + key = ( + donor_node, + acceptor_node, + f"{donor_position}-{acceptor_position}", + ) + expected_keys.add(key) + if key not in observed_links: + raise ValueError(f"missing PDB CONECT glycosidic link {key}") + donor_index, oxygen_index = observed_links[key] + donor_named = named_by_node[donor_node] + acceptor_named = named_by_node[acceptor_node] + ring_oxygen_name = wurcs_ring_oxygen_name( + definition_by_node[donor_node], donor_position + ) + phi_names = ( + ring_oxygen_name, + f"C{donor_position}", + f"O{acceptor_position}", + f"C{acceptor_position}", + ) + if ring_oxygen_name is None or any( + name not in ( + donor_named if position < 2 else acceptor_named + ) + for position, name in enumerate(phi_names) + ): + raise ValueError(f"missing phi atoms for {key}: {phi_names}") + phi_indices = [ + donor_named[phi_names[0]], + donor_named[phi_names[1]], + acceptor_named[phi_names[2]], + acceptor_named[phi_names[3]], + ] + if phi_indices[1] != donor_index or phi_indices[2] != oxygen_index: + raise ValueError(f"phi central bond disagrees with PDB CONECT for {key}") + + acceptor_number = int(acceptor_position) + psi_fourth = f"C{acceptor_number - 1}" if acceptor_number > 1 else "" + psi_indices = ( + [ + donor_named[f"C{donor_position}"], + acceptor_named[f"O{acceptor_position}"], + acceptor_named[f"C{acceptor_position}"], + acceptor_named[psi_fourth], + ] + if psi_fourth in acceptor_named + else [] + ) + omega_indices = [] + omega_star_indices = [] + if acceptor_position == "6": + omega_names = ("O6", "C6", "C5", "O5") + omega_star_names = ("O6", "C6", "C5", "C4") + if all(name in acceptor_named for name in omega_names): + omega_indices = [acceptor_named[name] for name in omega_names] + if all(name in acceptor_named for name in omega_star_names): + omega_star_indices = [ + acceptor_named[name] for name in omega_star_names + ] + + donor_token = str(mapping[donor_node].get("glycam_token", "")) + acceptor_token = str(mapping[acceptor_node].get("glycam_token", "")) + edge_metadata.append( + { + "edge_index": len(edge_metadata), + "donor_node": donor_node, + "acceptor_node": acceptor_node, + "donor_token": donor_token, + "acceptor_token": acceptor_token, + "donor_anomer": match.group(1), + "donor_position": donor_position, + "acceptor_position": acceptor_position, + "linkage_label": f"{match.group(1)}{donor_position}-{acceptor_position}", + "class_key": ( + f"{donor_token}|{match.group(1)}{donor_position}-" + f"{acceptor_position}|{acceptor_token}" + ), + "phi_atom_indices": phi_indices, + "psi_atom_indices": psi_indices, + "omega_atom_indices": omega_indices, + "omega_star_atom_indices": omega_star_indices, + } + ) + if set(observed_links) != expected_keys: + raise ValueError( + "observed glycosidic link set differs from WURCS: " + f"expected={sorted(expected_keys)} observed={sorted(observed_links)}" + ) + node_atom_indices = [indices_by_node[node] for node in node_order] + return node_order, node_atom_indices, edge_metadata + + +def dihedral_degrees_batch(points: np.ndarray) -> np.ndarray: + """Return signed dihedrals for points shaped (frames, 4, 3).""" + first, second, third, fourth = np.moveaxis(points, 1, 0) + middle = third - second + middle_norm = np.linalg.norm(middle, axis=1) + if np.any(middle_norm <= 1e-12): + raise ValueError("degenerate central dihedral bond") + unit = middle / middle_norm[:, None] + left = second - first + right = fourth - third + left_plane = left - np.sum(left * unit, axis=1)[:, None] * unit + right_plane = right - np.sum(right * unit, axis=1)[:, None] * unit + left_norm = np.linalg.norm(left_plane, axis=1) + right_norm = np.linalg.norm(right_plane, axis=1) + if np.any(left_norm <= 1e-12) or np.any(right_norm <= 1e-12): + raise ValueError("degenerate dihedral plane") + numerator = np.sum(np.cross(unit, left_plane) * right_plane, axis=1) + denominator = np.sum(left_plane * right_plane, axis=1) + plane_angle = np.degrees(np.arctan2(numerator, denominator)) + # The plane-normal angle is offset by 180 degrees from the standard + # four-atom GROMACS/Wiley torsion convention. + return np.mod(plane_angle, 360.0) - 180.0 + + +def gyration_descriptors( + coordinates_nm: np.ndarray, masses: np.ndarray +) -> tuple[np.ndarray, np.ndarray]: + total_mass = float(np.sum(masses)) + centers = np.einsum("fai,a->fi", coordinates_nm, masses) / total_mass + centered = coordinates_nm - centers[:, None, :] + tensors = np.einsum("fai,a,faj->fij", centered, masses, centered) / total_mass + eigenvalues = np.linalg.eigvalsh(tensors) + sums = np.sum(eigenvalues, axis=1) + rg_nm = np.sqrt(np.maximum(sums, 0.0)) + means = sums / 3.0 + numerator = 1.5 * np.sum((eigenvalues - means[:, None]) ** 2, axis=1) + asphericity = np.divide( + numerator, + sums**2, + out=np.zeros_like(numerator), + where=sums > 1e-15, + ) + return rg_nm, asphericity + + +def residue_centers( + coordinates_nm: np.ndarray, + atom_indices_by_node: Sequence[Sequence[int]], + masses: np.ndarray, +) -> np.ndarray: + centers = [] + for atom_indices in atom_indices_by_node: + indices = np.asarray(atom_indices, dtype=int) + node_masses = masses[indices] + centers.append( + np.einsum("fai,a->fi", coordinates_nm[:, indices, :], node_masses) + / np.sum(node_masses) + ) + return np.stack(centers, axis=1) + + +def lower_triangle_distances(centers_nm: np.ndarray) -> tuple[np.ndarray, list[list[int]]]: + pair_indices: list[list[int]] = [] + columns = [] + for right in range(1, centers_nm.shape[1]): + for left in range(right): + pair_indices.append([left, right]) + columns.append( + np.linalg.norm( + centers_nm[:, left, :] - centers_nm[:, right, :], axis=1 + ) + * 10.0 + ) + return np.stack(columns, axis=1), pair_indices + + +def extract_coordinates( + gmx: str, xtc: Path, gro: Path, atom_count: int, work_dir: Path +) -> tuple[np.ndarray, np.ndarray, str]: + xvg = work_dir / "coordinates.xvg" + process = subprocess.run( + [ + gmx, + "traj", + "-f", + str(xtc), + "-s", + str(gro), + "-ox", + str(xvg), + "-xvg", + "none", + "-fp", + "-nojump", + ], + input="0\n", + text=True, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + check=False, + ) + if process.returncode != 0: + raise RuntimeError(f"gmx traj failed ({process.returncode}): {process.stdout}") + values = np.loadtxt(xvg, dtype=np.float64) + if values.ndim != 2 or values.shape[1] != 1 + 3 * atom_count: + raise ValueError( + f"unexpected coordinate matrix shape {values.shape}; atom_count={atom_count}" + ) + times = values[:, 0] + coordinates = values[:, 1:].reshape(values.shape[0], atom_count, 3) + return times, coordinates, process.stdout + + +def angles_for_edges( + coordinates_nm: np.ndarray, edge_metadata: Sequence[dict[str, Any]] +) -> dict[str, np.ndarray]: + frames = coordinates_nm.shape[0] + edges = len(edge_metadata) + result = { + name: np.full((frames, edges), np.nan, dtype=np.float32) + for name in ("phi_deg", "psi_deg", "omega_deg", "omega_star_deg") + } + field_by_name = { + "phi_deg": "phi_atom_indices", + "psi_deg": "psi_atom_indices", + "omega_deg": "omega_atom_indices", + "omega_star_deg": "omega_star_atom_indices", + } + for edge_index, metadata in enumerate(edge_metadata): + for name, field in field_by_name.items(): + indices = metadata[field] + if not indices: + continue + values = dihedral_degrees_batch(coordinates_nm[:, indices, :]) + result[name][:, edge_index] = values.astype(np.float32) + return result + + +def state_output_dir(output_dir: Path, row: dict[str, str]) -> Path: + safe_state = re.sub(r"[^A-Za-z0-9_.-]+", "_", row["structure_state_id"]) + return ( + output_dir + / "states" + / f"{int(row['campaign_index']):06d}_{safe_state}" + ) + + +def extract_state(row: dict[str, str], output_dir: Path, gmx: str) -> dict[str, Any]: + target_dir = state_output_dir(output_dir, row) + metadata_path = target_dir / "review_md_wiley_state_metadata.json" + features_path = target_dir / "review_md_wiley_state_features.npz" + if metadata_path.is_file() and features_path.is_file(): + metadata = json.loads(metadata_path.read_text()) + if ( + metadata.get("status") == "PASS" + and metadata.get("features_sha256") == sha256_file(features_path) + ): + return metadata + raise ValueError(f"incomplete or inconsistent existing state output: {target_dir}") + + input_pdb = Path(row["input_pdb"]) + gro = Path(row["md_solute_gro"]) + xtc = Path(row["md_solute_xtc"]) + if sha256_file(input_pdb) != row["certified_pdb_sha256"]: + raise ValueError(f"input PDB changed for {row['structure_state_id']}") + atoms, serial_to_index, residues, connections = parse_pdb(input_pdb) + gro_atoms = parse_gro(gro) + pdb_to_gro_order = pdb_to_gro_atom_order(atoms, gro_atoms) + mapping = json.loads(row["wurcs_to_pdb_mapping_json"]) + node_order, atom_indices_by_node, edge_metadata = build_edge_definitions( + row["canonical_wurcs"], + mapping, + atoms, + serial_to_index, + residues, + connections, + ) + masses = np.asarray( + [MASS_BY_ELEMENT.get(str(atom["element"]).upper(), 12.0) for atom in atoms], + dtype=np.float64, + ) + + target_dir.parent.mkdir(parents=True, exist_ok=True) + with tempfile.TemporaryDirectory( + prefix=f"review_wiley_{row['campaign_index']}_", + dir=os.environ.get("SLURM_TMPDIR") or None, + ) as temporary: + times, coordinates_nm, gmx_output = extract_coordinates( + gmx, xtc, gro, len(atoms), Path(temporary) + ) + coordinates_nm = coordinates_nm[:, pdb_to_gro_order, :] + if ( + len(times) != 1001 + or not np.isclose(times[0], 0.0) + or not np.isclose(times[-1], 20000.0) + or not np.all(np.isfinite(coordinates_nm)) + ): + raise ValueError( + f"trajectory coverage failure for {row['structure_state_id']}: " + f"frames={len(times)} first={times[0]} last={times[-1]}" + ) + + angles = angles_for_edges(coordinates_nm, edge_metadata) + if not np.all(np.isfinite(angles["phi_deg"])): + raise ValueError("every certified glycosidic edge must have a finite phi") + rg_nm, asphericity = gyration_descriptors(coordinates_nm, masses) + centers_nm = residue_centers(coordinates_nm, atom_indices_by_node, masses) + residue_distances_A, pair_indices = lower_triangle_distances(centers_nm) + + target_dir.mkdir(parents=True, exist_ok=False) + temporary_features = features_path.with_name( + f"{features_path.name}.tmp.{os.getpid()}" + ) + with temporary_features.open("wb") as handle: + np.savez_compressed( + handle, + times_ps=times.astype(np.float32), + residue_pair_distances_A=residue_distances_A.astype(np.float32), + radius_of_gyration_A=(rg_nm * 10.0).astype(np.float32), + asphericity=asphericity.astype(np.float32), + **angles, + ) + os.replace(temporary_features, features_path) + metadata = { + "schema": SCHEMA, + "status": "PASS", + "campaign_index": int(row["campaign_index"]), + "structure_state_id": row["structure_state_id"], + "parent_glycorpus_id": row["parent_glycorpus_id"], + "state_label": row["state_label"], + "size_bin": row["size_bin"], + "glucan_like": bool(int(row["glucan_like"])), + "canonical_wurcs": row["canonical_wurcs"], + "input_pdb": str(input_pdb), + "input_pdb_sha256": sha256_file(input_pdb), + "md_solute_gro": str(gro), + "md_solute_gro_sha256": sha256_file(gro), + "md_solute_xtc": str(xtc), + "md_solute_xtc_sha256": sha256_file(xtc), + "features_path": str(features_path), + "features_sha256": sha256_file(features_path), + "frame_count": int(len(times)), + "first_time_ps": float(times[0]), + "last_time_ps": float(times[-1]), + "atom_count": len(atoms), + "trajectory_coordinates_reordered_to_certified_pdb_atom_order": ( + pdb_to_gro_order != list(range(len(atoms))) + ), + "mapped_node_count": len(node_order), + "glycosidic_edge_count": len(edge_metadata), + "node_order": node_order, + "residue_pair_indices": pair_indices, + "edge_metadata": edge_metadata, + "definitions": { + "phi": "donor_ring_O-donor_Cn-acceptor_On-acceptor_Cn", + "psi": "donor_Cn-acceptor_On-acceptor_Cn-acceptor_C(n-1)", + "omega_1_to_6": "acceptor_O6-C6-C5-O5", + "omega_star_1_to_6": "acceptor_O6-C6-C5-C4", + "radius_of_gyration": "mass_weighted_all_solute_atoms", + "asphericity": "normalized_mass_weighted_gyration_tensor_0_to_1", + "pca_distances": "mapped_monosaccharide_center_of_mass_pair_distances", + "torsion_convention": "GROMACS_and_Wiley_minus180_to_plus180", + }, + "gmx_traj_tail": gmx_output[-2000:], + "official_submitted_artifacts_modified": False, + } + atomic_write_json(metadata_path, metadata) + return metadata + + +def extract_shard( + manifest: Path, + output_dir: Path, + shard_index: int, + shard_count: int, + gmx: str, +) -> dict[str, Any]: + rows = read_tsv(manifest) + selected = [ + row for offset, row in enumerate(rows) if offset % shard_count == shard_index + ] + if not selected: + raise ValueError(f"empty shard {shard_index}/{shard_count}") + sentinel = ( + output_dir + / "shards" + / f"review_md_wiley_pca_shard_{shard_index:02d}_of_{shard_count:02d}.json" + ) + if sentinel.exists(): + payload = json.loads(sentinel.read_text()) + if payload.get("status") == "PASS": + return payload + raise ValueError(f"existing shard sentinel is not PASS: {sentinel}") + results = [extract_state(row, output_dir, gmx) for row in selected] + payload = { + "schema": SCHEMA, + "status": "PASS", + "shard_index": shard_index, + "shard_count": shard_count, + "manifest": str(manifest.resolve()), + "manifest_sha256": sha256_file(manifest), + "state_count": len(results), + "campaign_indices": [row["campaign_index"] for row in results], + "state_ids": [row["structure_state_id"] for row in results], + "official_submitted_artifacts_modified": False, + } + atomic_write_json(sentinel, payload) + return payload + + +def finite_feature_columns(values: np.ndarray) -> np.ndarray: + finite = np.all(np.isfinite(values), axis=0) + variable = np.nanstd(values, axis=0) > 1e-10 + keep = finite & variable + if int(np.sum(keep)) < 2: + raise ValueError("PCA requires at least two finite variable features") + return values[:, keep] + + +def fit_pca_and_clusters( + values: np.ndarray, seed: int = SEED +) -> dict[str, Any]: + from sklearn.cluster import KMeans + from sklearn.decomposition import PCA + from sklearn.metrics import silhouette_score + + matrix = finite_feature_columns(np.asarray(values, dtype=np.float64)) + component_count = min(20, matrix.shape[1], matrix.shape[0] - 1) + pca = PCA(n_components=component_count, svd_solver="full") + scores = pca.fit_transform(matrix) + cumulative = np.cumsum(pca.explained_variance_ratio_) + retained = int(np.searchsorted(cumulative, 0.90) + 1) + retained = min(retained, scores.shape[1]) + cluster_scores = scores[:, :retained] + best: dict[str, Any] | None = None + for clusters in range(2, min(5, len(scores) - 1) + 1): + model = KMeans(n_clusters=clusters, random_state=seed, n_init=20) + labels = model.fit_predict(cluster_scores) + silhouette = float( + silhouette_score( + cluster_scores, + labels, + sample_size=min(300, len(labels)), + random_state=seed, + ) + ) + if best is None or silhouette > best["silhouette"]: + distances = np.linalg.norm( + cluster_scores[:, None, :] - model.cluster_centers_[None, :, :], + axis=2, + ) + representatives = [ + int(np.argmin(distances[:, cluster])) for cluster in range(clusters) + ] + best = { + "cluster_count": clusters, + "silhouette": silhouette, + "labels": labels, + "representative_frame_indices": representatives, + } + assert best is not None + return { + "scores": scores, + "explained_variance_ratio": pca.explained_variance_ratio_, + "retained_components_90": retained, + **best, + } + + +def describe_vector(values: np.ndarray, prefix: str) -> dict[str, float]: + return { + f"{prefix}_mean": float(np.mean(values)), + f"{prefix}_sd": float(np.std(values, ddof=1)), + f"{prefix}_q10": float(np.quantile(values, 0.10)), + f"{prefix}_median": float(np.median(values)), + f"{prefix}_q90": float(np.quantile(values, 0.90)), + f"{prefix}_half_delta": float( + np.mean(values[len(values) // 2 :]) - np.mean(values[: len(values) // 2]) + ), + } + + +def circular_summary(values_degrees: np.ndarray, prefix: str) -> dict[str, float]: + radians = np.radians(values_degrees) + mean_sin = float(np.mean(np.sin(radians))) + mean_cos = float(np.mean(np.cos(radians))) + resultant = math.hypot(mean_sin, mean_cos) + histogram, _ = np.histogram(values_degrees, bins=24, range=(-180, 180)) + probabilities = histogram / np.sum(histogram) + nonzero = probabilities[probabilities > 0] + entropy = float(-np.sum(nonzero * np.log(nonzero))) + return { + f"{prefix}_circular_mean_deg": float( + np.degrees(math.atan2(mean_sin, mean_cos)) + ), + f"{prefix}_resultant_length": resultant, + f"{prefix}_circular_variance": 1.0 - resultant, + f"{prefix}_entropy_24bin": entropy, + } + + +def save_figure(fig: Any, base: Path) -> None: + base.parent.mkdir(parents=True, exist_ok=True) + fig.savefig(base.with_suffix(".png"), dpi=220, bbox_inches="tight") + fig.savefig(base.with_suffix(".pdf"), bbox_inches="tight") + + +def summarize_pilot(manifest: Path, output_dir: Path) -> dict[str, Any]: + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + from sklearn.decomposition import PCA + + summary_dir = output_dir / "summary" + figures_dir = output_dir / "figures" + final_receipt = summary_dir / "review_md_wiley_pca_pilot_summary.json" + if final_receipt.exists(): + payload = json.loads(final_receipt.read_text()) + if payload.get("status") == "PASS": + return payload + raise ValueError(f"existing final receipt is not PASS: {final_receipt}") + + rows = read_tsv(manifest) + entries: list[dict[str, Any]] = [] + for row in rows: + target_dir = state_output_dir(output_dir, row) + metadata_path = target_dir / "review_md_wiley_state_metadata.json" + features_path = target_dir / "review_md_wiley_state_features.npz" + metadata = json.loads(metadata_path.read_text()) + if ( + metadata.get("status") != "PASS" + or metadata.get("features_sha256") != sha256_file(features_path) + ): + raise ValueError(f"state output failed integrity check: {target_dir}") + arrays = dict(np.load(features_path)) + entries.append({"row": row, "metadata": metadata, "arrays": arrays}) + if len(entries) != 64: + raise ValueError(f"expected 64 state outputs, found {len(entries)}") + + state_rows: list[dict[str, Any]] = [] + pca_by_state: dict[str, dict[str, Any]] = {} + edge_rows: list[dict[str, Any]] = [] + angles_by_class: dict[str, list[tuple[str, np.ndarray, np.ndarray]]] = defaultdict(list) + for entry in entries: + row = entry["row"] + metadata = entry["metadata"] + arrays = entry["arrays"] + pca_result = fit_pca_and_clusters(arrays["residue_pair_distances_A"]) + pca_by_state[row["structure_state_id"]] = pca_result + labels = pca_result["labels"] + cluster_counts = Counter(int(value) for value in labels) + state_summary: dict[str, Any] = { + "campaign_index": int(row["campaign_index"]), + "structure_state_id": row["structure_state_id"], + "parent_glycorpus_id": row["parent_glycorpus_id"], + "state_label": row["state_label"], + "size_bin": row["size_bin"], + "mapped_monosaccharides": int(row["mapped_monosaccharides"]), + "glycosidic_edges": int(row["glycosidic_edges"]), + "branched": int(row["branched"]), + "charged": int(row["charged"]), + "modified": int(row["modified"]), + "glucan_like": int(row["glucan_like"]), + "pc1_variance_fraction": float( + pca_result["explained_variance_ratio"][0] + ), + "pc2_variance_fraction": float( + pca_result["explained_variance_ratio"][1] + ), + "pc1_pc2_variance_fraction": float( + np.sum(pca_result["explained_variance_ratio"][:2]) + ), + "pca_components_90": int(pca_result["retained_components_90"]), + "selected_cluster_count": int(pca_result["cluster_count"]), + "cluster_silhouette": float(pca_result["silhouette"]), + "cluster_occupancies": json.dumps( + { + str(cluster): count / len(labels) + for cluster, count in sorted(cluster_counts.items()) + }, + sort_keys=True, + ), + "representative_times_ps": json.dumps( + [ + float(arrays["times_ps"][index]) + for index in pca_result["representative_frame_indices"] + ] + ), + } + state_summary.update( + describe_vector(arrays["radius_of_gyration_A"], "radius_of_gyration_A") + ) + state_summary.update(describe_vector(arrays["asphericity"], "asphericity")) + state_rows.append(state_summary) + + for edge_index, edge in enumerate(metadata["edge_metadata"]): + phi = arrays["phi_deg"][:, edge_index] + psi = arrays["psi_deg"][:, edge_index] + edge_summary: dict[str, Any] = { + "campaign_index": int(row["campaign_index"]), + "structure_state_id": row["structure_state_id"], + "parent_glycorpus_id": row["parent_glycorpus_id"], + "state_label": row["state_label"], + "edge_index": edge_index, + "donor_node": edge["donor_node"], + "acceptor_node": edge["acceptor_node"], + "donor_token": edge["donor_token"], + "acceptor_token": edge["acceptor_token"], + "linkage_label": edge["linkage_label"], + "class_key": edge["class_key"], + } + edge_summary.update(circular_summary(phi, "phi")) + if np.all(np.isfinite(psi)): + edge_summary.update(circular_summary(psi, "psi")) + angles_by_class[edge["class_key"]].append( + (row["structure_state_id"], phi, psi) + ) + omega = arrays["omega_deg"][:, edge_index] + if np.all(np.isfinite(omega)): + edge_summary.update(circular_summary(omega, "omega")) + edge_rows.append(edge_summary) + + state_fields = list(state_rows[0]) + edge_fields = sorted({key for row in edge_rows for key in row}) + state_table = summary_dir / "review_md_wiley_pca_state_summary.tsv" + edge_table = summary_dir / "review_md_wiley_torsion_edge_summary.tsv" + write_tsv(state_table, state_rows, state_fields) + write_tsv(edge_table, edge_rows, edge_fields) + + class_counts = Counter( + { + class_key: len({state_id for state_id, _, _ in values}) + for class_key, values in angles_by_class.items() + } + ) + top_classes = [ + class_key + for class_key, _ in sorted( + class_counts.items(), key=lambda item: (-item[1], item[0]) + )[:6] + ] + if not top_classes: + raise ValueError("no linkage class has finite phi/psi observations") + fig, axes = plt.subplots(2, 3, figsize=(13.2, 8.2), constrained_layout=True) + bins = np.linspace(-180, 180, 73) + for axis, class_key in zip(axes.flat, top_classes): + values = angles_by_class[class_key] + phi_parts = [] + psi_parts = [] + weight_parts = [] + by_state = Counter(state_id for state_id, _, _ in values) + for state_id, phi, psi in values: + phi_parts.append(phi) + psi_parts.append(psi) + weight_parts.append(np.full(len(phi), 1.0 / (by_state[state_id] * len(phi)))) + phi = np.concatenate(phi_parts) + psi = np.concatenate(psi_parts) + weights = np.concatenate(weight_parts) + histogram, xedges, yedges = np.histogram2d( + phi, psi, bins=(bins, bins), weights=weights + ) + histogram /= np.sum(histogram) + image = axis.pcolormesh( + xedges, yedges, histogram.T, shading="auto", cmap="viridis" + ) + axis.set_title(class_key.replace("|", "\n"), fontsize=8) + axis.set_xlim(-180, 180) + axis.set_ylim(-180, 180) + axis.set_xticks([-180, -90, 0, 90, 180]) + axis.set_yticks([-180, -90, 0, 90, 180]) + axis.set_xlabel("phi (degrees)") + axis.set_ylabel("psi (degrees)") + fig.colorbar(image, ax=axis, fraction=0.046, pad=0.03) + for axis in axes.flat[len(top_classes) :]: + axis.axis("off") + fig.suptitle("Wiley-style carbohydrate Ramachandran maps", fontsize=14) + save_figure(fig, figures_dir / "review_wiley_ramachandran_top_linkage_classes") + plt.close(fig) + + state_by_id = {row["structure_state_id"]: row for row in state_rows} + examples: list[dict[str, Any]] = [] + for bin_name in ("small", "medium", "large"): + bin_entries = [ + entry + for entry in entries + if entry["row"]["size_bin"] == bin_name + and entry["row"]["state_label"] in {"alpha", "single"} + ] + glucans = [entry for entry in bin_entries if int(entry["row"]["glucan_like"])] + nonglucans = [entry for entry in bin_entries if not int(entry["row"]["glucan_like"])] + examples.append(sorted(glucans, key=lambda x: x["row"]["structure_state_id"])[0]) + examples.append( + sorted(nonglucans or bin_entries, key=lambda x: x["row"]["structure_state_id"])[ + 0 + ] + ) + + fig, axes = plt.subplots(2, 3, figsize=(13.2, 8.2), constrained_layout=True) + for axis, entry in zip(axes.flat, examples): + row = entry["row"] + result = pca_by_state[row["structure_state_id"]] + scores = result["scores"] + axis.hexbin(scores[:, 0], scores[:, 1], gridsize=35, cmap="magma", mincnt=1) + state = state_by_id[row["structure_state_id"]] + axis.set_title( + f"{row['structure_state_id']} ({row['size_bin']}, {row['state_label']})", + fontsize=9, + ) + axis.set_xlabel(f"PC1 ({100 * state['pc1_variance_fraction']:.1f}%)") + axis.set_ylabel(f"PC2 ({100 * state['pc2_variance_fraction']:.1f}%)") + fig.suptitle("Per-state conformational PCA density", fontsize=14) + save_figure(fig, figures_dir / "review_wiley_pca_density_examples") + plt.close(fig) + + fig, axes = plt.subplots(2, 3, figsize=(13.2, 8.2), constrained_layout=True) + for axis, entry in zip(axes.flat, examples): + row = entry["row"] + result = pca_by_state[row["structure_state_id"]] + scores = result["scores"] + labels = result["labels"] + axis.scatter( + scores[:, 0], + scores[:, 1], + c=labels, + cmap="tab10", + s=5, + alpha=0.65, + linewidths=0, + ) + axis.set_title( + f"{row['structure_state_id']}: k={result['cluster_count']}, " + f"sil={result['silhouette']:.2f}", + fontsize=9, + ) + axis.set_xlabel("PC1") + axis.set_ylabel("PC2") + fig.suptitle("PCA clusters selected from k=2-5", fontsize=14) + save_figure(fig, figures_dir / "review_wiley_pca_cluster_examples") + plt.close(fig) + + entries_by_parent: dict[str, dict[str, dict[str, Any]]] = defaultdict(dict) + for entry in entries: + entries_by_parent[entry["row"]["parent_glycorpus_id"]][ + entry["row"]["state_label"] + ] = entry + pair_rows: list[dict[str, Any]] = [] + joint_results: dict[str, dict[str, Any]] = {} + for parent, states in entries_by_parent.items(): + if "alpha" not in states or "beta" not in states: + continue + alpha = states["alpha"]["arrays"]["residue_pair_distances_A"] + beta = states["beta"]["arrays"]["residue_pair_distances_A"] + if alpha.shape[1] != beta.shape[1]: + raise ValueError(f"alpha/beta PCA dimension mismatch for {parent}") + combined = finite_feature_columns(np.vstack([alpha, beta])) + pca = PCA(n_components=min(10, combined.shape[1]), svd_solver="full") + scores = pca.fit_transform(combined) + alpha_scores = scores[: len(alpha)] + beta_scores = scores[len(alpha) :] + centroid_distance = float( + np.linalg.norm( + np.mean(alpha_scores[:, :2], axis=0) + - np.mean(beta_scores[:, :2], axis=0) + ) + ) + pooled_scale = float( + np.sqrt( + 0.5 + * ( + np.mean(np.var(alpha_scores[:, :2], axis=0)) + + np.mean(np.var(beta_scores[:, :2], axis=0)) + ) + ) + ) + separation = centroid_distance / pooled_scale if pooled_scale > 0 else 0.0 + pair_row = { + "parent_glycorpus_id": parent, + "size_bin": states["alpha"]["row"]["size_bin"], + "mapped_monosaccharides": int( + states["alpha"]["row"]["mapped_monosaccharides"] + ), + "glucan_like": int(states["alpha"]["row"]["glucan_like"]), + "pc1_variance_fraction": float(pca.explained_variance_ratio_[0]), + "pc2_variance_fraction": float(pca.explained_variance_ratio_[1]), + "alpha_beta_pc12_centroid_distance": centroid_distance, + "alpha_beta_pc12_standardized_separation": separation, + } + pair_rows.append(pair_row) + joint_results[parent] = { + "scores": scores, + "alpha_count": len(alpha), + "row": pair_row, + } + pair_rows.sort( + key=lambda row: (-row["alpha_beta_pc12_standardized_separation"], row["parent_glycorpus_id"]) + ) + pair_table = summary_dir / "review_md_wiley_alpha_beta_joint_pca.tsv" + write_tsv(pair_table, pair_rows, list(pair_rows[0])) + + joint_examples = [] + for bin_name in ("small", "medium", "large"): + pool = [row for row in pair_rows if row["size_bin"] == bin_name] + joint_examples.extend(pool[:2]) + fig, axes = plt.subplots(2, 3, figsize=(13.2, 8.2), constrained_layout=True) + for axis, pair_row in zip(axes.flat, joint_examples): + result = joint_results[pair_row["parent_glycorpus_id"]] + scores = result["scores"] + split = result["alpha_count"] + axis.scatter( + scores[:split, 0], + scores[:split, 1], + s=5, + alpha=0.45, + label="alpha", + color="#0072B2", + linewidths=0, + ) + axis.scatter( + scores[split:, 0], + scores[split:, 1], + s=5, + alpha=0.45, + label="beta", + color="#D55E00", + linewidths=0, + ) + axis.set_title( + f"{pair_row['parent_glycorpus_id']} ({pair_row['size_bin']}), " + f"sep={pair_row['alpha_beta_pc12_standardized_separation']:.2f}", + fontsize=9, + ) + axis.set_xlabel( + f"PC1 ({100 * pair_row['pc1_variance_fraction']:.1f}%)" + ) + axis.set_ylabel( + f"PC2 ({100 * pair_row['pc2_variance_fraction']:.1f}%)" + ) + axis.legend(frameon=False, markerscale=2) + fig.suptitle("Joint alpha/beta PCA in a shared parent-specific basis", fontsize=14) + save_figure(fig, figures_dir / "review_wiley_alpha_beta_joint_pca") + plt.close(fig) + + fig, axis = plt.subplots(figsize=(8.2, 6.2), constrained_layout=True) + colors = {"alpha": "#0072B2", "beta": "#D55E00", "single": "#009E73"} + for label in ("single", "alpha", "beta"): + subset = [row for row in state_rows if row["state_label"] == label] + axis.scatter( + [row["radius_of_gyration_A_mean"] for row in subset], + [row["asphericity_mean"] for row in subset], + s=[18 + 2 * row["mapped_monosaccharides"] for row in subset], + alpha=0.72, + label=label, + color=colors[label], + edgecolors="white", + linewidths=0.4, + ) + axis.set_xlabel("Mean radius of gyration (A)") + axis.set_ylabel("Mean normalized asphericity") + axis.set_title("Basic ESM-Dance-style global dynamic descriptors") + axis.legend(frameon=False) + save_figure(fig, figures_dir / "review_esmdance_basic_global_descriptors") + plt.close(fig) + + figure_files = sorted( + str(path) for path in figures_dir.glob("review_*") if path.is_file() + ) + report_path = output_dir / "README.md" + lines = [ + "# Reviewed MD Wiley PCA Pilot", + "", + "Status: PASS", + "", + "## Scope", + "", + f"- States analyzed: {len(entries)}", + f"- Parent glycans: {len({row['parent_glycorpus_id'] for row in state_rows})}", + f"- Complete alpha/beta pairs: {len(pair_rows)}", + f"- Frames per state: 1,001", + "- Production represented per state: 20 ns", + "- PCA input: mapped monosaccharide center-of-mass internal distances", + "- Clustering: k=2-5 selected by silhouette in the PCs explaining at least 90%", + "", + "## Claim boundary", + "", + "These are standardized short-timescale sampled conformational descriptors.", + "Cluster occupancy is descriptive for each 20 ns trajectory and is not an", + "equilibrium conformer population.", + "", + "## Main outputs", + "", + f"- State table: `{state_table}`", + f"- Edge torsion table: `{edge_table}`", + f"- Alpha/beta PCA table: `{pair_table}`", + f"- Figure directory: `{figures_dir}`", + "", + "Official submitted artifacts were not modified.", + "", + ] + temporary_report = report_path.with_name(f"{report_path.name}.tmp.{os.getpid()}") + temporary_report.write_text("\n".join(lines), encoding="utf-8") + os.replace(temporary_report, report_path) + + payload = { + "schema": SCHEMA, + "status": "PASS", + "manifest": str(manifest.resolve()), + "manifest_sha256": sha256_file(manifest), + "analyzed_states": len(entries), + "analyzed_parents": len({row["parent_glycorpus_id"] for row in state_rows}), + "complete_alpha_beta_pairs": len(pair_rows), + "state_table": str(state_table), + "state_table_sha256": sha256_file(state_table), + "edge_table": str(edge_table), + "edge_table_sha256": sha256_file(edge_table), + "alpha_beta_table": str(pair_table), + "alpha_beta_table_sha256": sha256_file(pair_table), + "figures": [ + {"path": path, "sha256": sha256_file(Path(path))} for path in figure_files + ], + "readme": str(report_path), + "readme_sha256": sha256_file(report_path), + "claim_boundary": "short_timescale_sampled_descriptors_not_equilibrium_populations", + "official_submitted_artifacts_modified": False, + } + atomic_write_json(final_receipt, payload) + return payload + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser(description=__doc__) + subparsers = parser.add_subparsers(dest="command", required=True) + + prepare = subparsers.add_parser("prepare") + prepare.add_argument("--campaign-dir", type=Path, required=True) + prepare.add_argument("--static-partition", type=Path, required=True) + prepare.add_argument("--output-dir", type=Path, required=True) + + extract = subparsers.add_parser("extract-shard") + extract.add_argument("--manifest", type=Path, required=True) + extract.add_argument("--output-dir", type=Path, required=True) + extract.add_argument("--shard-index", type=int, required=True) + extract.add_argument("--shard-count", type=int, required=True) + extract.add_argument("--gmx", default="gmx") + + summary = subparsers.add_parser("summarize") + summary.add_argument("--manifest", type=Path, required=True) + summary.add_argument("--output-dir", type=Path, required=True) + return parser + + +def main() -> int: + args = build_parser().parse_args() + if args.command == "prepare": + payload = prepare_pilot( + args.campaign_dir.resolve(), + args.static_partition.resolve(), + args.output_dir.resolve(), + ) + elif args.command == "extract-shard": + if not 0 <= args.shard_index < args.shard_count: + raise ValueError("shard index must be within shard count") + payload = extract_shard( + args.manifest.resolve(), + args.output_dir.resolve(), + args.shard_index, + args.shard_count, + args.gmx, + ) + else: + payload = summarize_pilot( + args.manifest.resolve(), + args.output_dir.resolve(), + ) + print(json.dumps(payload, indent=2, sort_keys=True, allow_nan=False)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_wiley_structural_extension.py b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_wiley_structural_extension.py new file mode 100644 index 0000000000000000000000000000000000000000..bd95e98b64af8b5c0b422be17ffc74a0777ec07c --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_wiley_structural_extension.py @@ -0,0 +1,1329 @@ +#!/usr/bin/env python3 +"""Wiley-style structural descriptors for the completed reviewed-glycan MD corpus.""" + +from __future__ import annotations + +import argparse +import csv +import json +import math +import os +import re +import subprocess +import sys +import tempfile +import traceback +from collections import Counter, defaultdict, deque +from datetime import datetime, timezone +from pathlib import Path +from typing import Any, Sequence + +import numpy as np + +SCRIPT_DIR = Path(__file__).resolve().parent +if str(SCRIPT_DIR) not in sys.path: + sys.path.insert(0, str(SCRIPT_DIR)) + +import review_md_wiley_pca_corpus as corpus +import review_md_wiley_pca_pilot as pilot +import review_md_wiley_torsion_pca_corpus as torsion + + +SCHEMA = "review_md_wiley_structural_extension_v1" +EXPECTED_FRAME_COUNT = 1001 +EXPECTED_FIRST_TIME_PS = 0.0 +EXPECTED_LAST_TIME_PS = 20000.0 +PYRANOSE_RING_NAMES = ("O5", "C1", "C2", "C3", "C4", "C5") +RING_BOND_MIN_A = 1.10 +RING_BOND_MAX_A = 1.75 +OMEGA_ROTAMER_CENTERS_DEG = { + "gg": -60.0, + "gt": 60.0, + "tg": 180.0, +} + + +def utc_now() -> str: + return datetime.now(timezone.utc).isoformat() + + +def safe_state_id(value: str) -> str: + return re.sub(r"[^A-Za-z0-9_.-]+", "_", value) + + +def state_output_dir(output_dir: Path, row: dict[str, str]) -> Path: + return output_dir / "states" / ( + f"{int(row['campaign_index']):06d}_{safe_state_id(row['structure_state_id'])}" + ) + + +def load_valid_state_output( + target: Path, + row: dict[str, str], +) -> dict[str, Any] | None: + metadata_path = target / "review_md_wiley_structural_state.json" + features_path = target / "review_md_wiley_structural_features.npz" + if not metadata_path.is_file() and not features_path.is_file(): + return None + if not metadata_path.is_file() or not features_path.is_file(): + raise ValueError(f"incomplete existing structural output: {target}") + metadata = json.loads(metadata_path.read_text()) + if ( + metadata.get("status") != "PASS" + or int(metadata.get("campaign_index", -1)) != int(row["campaign_index"]) + or metadata.get("structure_state_id") != row["structure_state_id"] + or metadata.get("features_sha256") != pilot.sha256_file(features_path) + ): + raise ValueError(f"inconsistent existing structural output: {target}") + return metadata + + +def vector_summary(values: np.ndarray) -> dict[str, float | int]: + array = np.asarray(values, dtype=np.float64) + finite = array[np.isfinite(array)] + if not len(finite): + return {"count": 0} + return { + "count": int(len(finite)), + "mean": float(np.mean(finite)), + "sd": float(np.std(finite)), + "median": float(np.median(finite)), + "p05": float(np.quantile(finite, 0.05)), + "p95": float(np.quantile(finite, 0.95)), + "min": float(np.min(finite)), + "max": float(np.max(finite)), + } + + +def write_index_group(path: Path, name: str, atom_numbers: Sequence[int]) -> None: + numbers = [int(value) for value in atom_numbers] + if not numbers or min(numbers) < 1 or len(numbers) != len(set(numbers)): + raise ValueError("invalid GROMACS index atom list") + lines = [f"[ {name} ]"] + lines.extend( + " ".join(str(value) for value in numbers[offset : offset + 15]) + for offset in range(0, len(numbers), 15) + ) + path.write_text("\n".join(lines) + "\n", encoding="utf-8") + + +def selected_atom_indices( + selected_keys: Sequence[tuple[str, str, str]], + residues: dict[tuple[str, str, str], list[int]], +) -> list[int]: + indices: list[int] = [] + for key in selected_keys: + if key not in residues: + raise ValueError(f"analysis residue missing from PDB: {key}") + indices.extend(residues[key]) + if len(indices) != len(set(indices)): + raise ValueError("analysis residue atom sets overlap") + return sorted(indices) + + +def heavy_atom_indices( + atom_indices: Sequence[int], atoms: Sequence[dict[str, Any]] +) -> np.ndarray: + values = [ + index + for index in atom_indices + if str(atoms[index]["element"]).upper() != "H" + ] + if len(values) < 3: + raise ValueError("RMSD requires at least three glycan heavy atoms") + return np.asarray(values, dtype=int) + + +def kabsch_rmsd_A(coordinates_nm: np.ndarray, atom_indices: np.ndarray) -> np.ndarray: + points = np.asarray(coordinates_nm[:, atom_indices, :], dtype=np.float64) + reference = points[0] - np.mean(points[0], axis=0) + mobile = points - np.mean(points, axis=1, keepdims=True) + covariance = np.einsum("fai,aj->fij", mobile, reference) + left, _, right = np.linalg.svd(covariance) + orientation = np.linalg.det(np.einsum("fij,fjk->fik", left, right)) + corrected_left = left.copy() + corrected_left[:, :, -1] *= np.where(orientation < 0.0, -1.0, 1.0)[:, None] + rotations = np.einsum("fij,fjk->fik", corrected_left, right) + aligned = np.einsum("fai,fij->faj", mobile, rotations) + squared = np.sum((aligned - reference[None, :, :]) ** 2, axis=2) + values = np.sqrt(np.mean(squared, axis=1)) * 10.0 + if not np.isclose(values[0], 0.0, atol=1e-5): + raise ValueError(f"first-frame RMSD is not zero: {values[0]}") + return values.astype(np.float32) + + +def linear_slope(values: np.ndarray, times_ps: np.ndarray) -> float: + y = np.asarray(values, dtype=np.float64) + x = np.asarray(times_ps, dtype=np.float64) / 1000.0 + if len(y) < 2 or not np.all(np.isfinite(y)): + return math.nan + centered = x - np.mean(x) + denominator = float(np.sum(centered**2)) + if denominator <= 0.0: + return math.nan + return float(np.sum(centered * (y - np.mean(y))) / denominator) + + +def residue_centers_nm( + coordinates_nm: np.ndarray, + selected_keys: Sequence[tuple[str, str, str]], + residues: dict[tuple[str, str, str], list[int]], + masses: np.ndarray, +) -> np.ndarray: + centers = [] + for key in selected_keys: + indices = np.asarray(residues[key], dtype=int) + weights = masses[indices] + centers.append( + np.einsum("fai,a->fi", coordinates_nm[:, indices, :], weights) + / np.sum(weights) + ) + return np.stack(centers, axis=1) + + +def graph_details( + selected_keys: Sequence[tuple[str, str, str]], + edges: Sequence[dict[str, Any]], +) -> dict[str, Any]: + key_to_index = {key: index for index, key in enumerate(selected_keys)} + adjacency: dict[int, set[int]] = { + index: set() for index in range(len(selected_keys)) + } + for edge in edges: + donor = tuple(edge["donor_residue_key"]) + acceptor = tuple(edge["acceptor_residue_key"]) + if donor not in key_to_index or acceptor not in key_to_index: + raise ValueError("glycosidic edge references a non-analysis residue") + left = key_to_index[donor] + right = key_to_index[acceptor] + adjacency[left].add(right) + adjacency[right].add(left) + expected_edges = max(0, len(selected_keys) - 1) + if sum(len(value) for value in adjacency.values()) // 2 != expected_edges: + raise ValueError("analysis glycan graph is not a tree") + leaves = [ + index + for index, neighbors in adjacency.items() + if len(neighbors) <= 1 + ] + branched = any(len(neighbors) > 2 for neighbors in adjacency.values()) + diameter_edges = 0 + if len(selected_keys) > 1: + for source in leaves: + distances = {source: 0} + queue: deque[int] = deque([source]) + while queue: + current = queue.popleft() + for neighbor in adjacency[current]: + if neighbor not in distances: + distances[neighbor] = distances[current] + 1 + queue.append(neighbor) + if len(distances) != len(selected_keys): + raise ValueError("analysis glycan graph is disconnected") + diameter_edges = max( + diameter_edges, + max(distances[target] for target in leaves), + ) + return { + "leaf_indices": leaves, + "leaf_residue_keys": [selected_keys[index] for index in leaves], + "branched": branched, + "graph_diameter_edges": diameter_edges, + "graph_diameter_residues": diameter_edges + 1, + } + + +def terminal_span_A( + centers_nm: np.ndarray, leaf_indices: Sequence[int] +) -> tuple[np.ndarray, list[list[int]], dict[str, float]]: + if len(leaf_indices) < 2: + return ( + np.empty(0, dtype=np.float32), + [], + {}, + ) + pairs: list[list[int]] = [] + columns = [] + for right_offset in range(1, len(leaf_indices)): + for left_offset in range(right_offset): + left = int(leaf_indices[left_offset]) + right = int(leaf_indices[right_offset]) + pairs.append([left, right]) + columns.append( + np.linalg.norm( + centers_nm[:, left, :] - centers_nm[:, right, :], + axis=1, + ) + * 10.0 + ) + matrix = np.stack(columns, axis=1) + maxima = np.argmax(matrix, axis=1) + occupancy = Counter(int(value) for value in maxima) + return ( + np.max(matrix, axis=1).astype(np.float32), + pairs, + { + str(index): count / len(maxima) + for index, count in sorted(occupancy.items()) + }, + ) + + +def ring_definitions( + selected_keys: Sequence[tuple[str, str, str]], + atoms: Sequence[dict[str, Any]], + residues: dict[tuple[str, str, str], list[int]], + pdb_coordinates_A: np.ndarray, +) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]: + accepted = [] + skipped = [] + for key in selected_keys: + named = pilot.named_atoms_for_residue(residues[key], atoms) + missing = [name for name in PYRANOSE_RING_NAMES if name not in named] + if missing: + skipped.append( + { + "residue_key": key, + "residue_name": atoms[residues[key][0]]["residue_name"], + "reason": "missing_standard_pyranose_ring_atoms", + "missing_atom_names": missing, + } + ) + continue + indices = [named[name] for name in PYRANOSE_RING_NAMES] + bond_pairs = list(zip(indices, indices[1:] + indices[:1])) + distances = [ + float(np.linalg.norm(pdb_coordinates_A[left] - pdb_coordinates_A[right])) + for left, right in bond_pairs + ] + if any( + value < RING_BOND_MIN_A or value > RING_BOND_MAX_A + for value in distances + ): + skipped.append( + { + "residue_key": key, + "residue_name": atoms[residues[key][0]]["residue_name"], + "reason": "standard_atom_names_failed_ring_geometry", + "ring_bond_distances_A": distances, + } + ) + continue + accepted.append( + { + "ring_index": len(accepted), + "residue_key": key, + "residue_name": atoms[residues[key][0]]["residue_name"], + "atom_names": list(PYRANOSE_RING_NAMES), + "atom_indices_pdb_order_zero_based": indices, + "initial_ring_bond_distances_A": distances, + } + ) + return accepted, skipped + + +def cremer_pople_6( + coordinates_nm: np.ndarray, ring_definitions_: Sequence[dict[str, Any]] +) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + frames = coordinates_nm.shape[0] + if not ring_definitions_: + empty = np.empty((frames, 0), dtype=np.float32) + return empty, empty.copy(), empty.copy() + ring_indices = np.asarray( + [ + definition["atom_indices_pdb_order_zero_based"] + for definition in ring_definitions_ + ], + dtype=int, + ) + # Shape: frames, rings, six ring atoms, xyz. + points = coordinates_nm[:, ring_indices, :] + centered = points - np.mean(points, axis=2, keepdims=True) + factors = (2.0 * np.pi / 6.0) * np.arange(6, dtype=np.float64) + first = np.einsum("frak,a->frk", centered, np.sin(factors)) + second = np.einsum("frak,a->frk", centered, np.cos(factors)) + normal = np.cross(first, second) + normal_norm = np.linalg.norm(normal, axis=2) + if np.any(normal_norm <= 1e-12): + raise ValueError("degenerate pyranose mean plane") + normal /= normal_norm[:, :, None] + z = np.einsum("frak,frk->fra", centered, normal) + sum1 = np.einsum("fra,a->fr", z, np.cos(2.0 * factors)) + sum2 = -np.einsum("fra,a->fr", z, np.sin(2.0 * factors)) + q2 = np.sqrt(sum1**2 + sum2**2) * math.sqrt(2.0 / 6.0) + q3 = np.einsum( + "fra,a->fr", + z, + np.asarray([1.0, -1.0, 1.0, -1.0, 1.0, -1.0]), + ) / math.sqrt(6.0) + amplitude_A = np.sqrt(q2**2 + q3**2) * 10.0 + theta_deg = np.degrees(np.arctan2(q2, q3)) + phi_deg = np.mod(np.degrees(np.arctan2(sum2, sum1)), 360.0) + return ( + amplitude_A.astype(np.float32), + theta_deg.astype(np.float32), + phi_deg.astype(np.float32), + ) + + +def ring_summaries( + definitions: Sequence[dict[str, Any]], + amplitude_A: np.ndarray, + theta_deg: np.ndarray, + phi_deg: np.ndarray, +) -> list[dict[str, Any]]: + result = [] + for index, definition in enumerate(definitions): + theta = np.asarray(theta_deg[:, index], dtype=np.float64) + phase = np.asarray(phi_deg[:, index], dtype=np.float64) + wrapped_phase = (phase + 180.0) % 360.0 - 180.0 + phase_summary: dict[str, Any] = pilot.circular_summary( + wrapped_phase, + "phi", + ) + phase_summary.update(circular_mode_summary(wrapped_phase)) + row = { + key: value + for key, value in definition.items() + if key != "atom_indices_pdb_order_zero_based" + } + row.update( + { + "amplitude_A": vector_summary(amplitude_A[:, index]), + "theta_deg": vector_summary(theta), + "phi_deg": phase_summary, + "four_C_one_cap_occupancy": float(np.mean(theta <= 30.0)), + "north_intermediate_occupancy": float( + np.mean((theta > 30.0) & (theta < 75.0)) + ), + "boat_twist_region_occupancy": float( + np.mean((theta >= 75.0) & (theta <= 105.0)) + ), + "south_intermediate_occupancy": float( + np.mean((theta > 105.0) & (theta < 150.0)) + ), + "one_C_four_cap_occupancy": float(np.mean(theta >= 150.0)), + "nonchair_occupancy": float( + np.mean((theta > 30.0) & (theta < 150.0)) + ), + } + ) + result.append(row) + return result + + +def periodic_delta_deg(values: np.ndarray, center: float) -> np.ndarray: + return np.abs((np.asarray(values) - center + 180.0) % 360.0 - 180.0) + + +def circular_mode_summary(values: np.ndarray) -> dict[str, float | int]: + finite = np.asarray(values, dtype=np.float64) + finite = finite[np.isfinite(finite)] + if not len(finite): + return {"count": 0} + wrapped = (finite + 180.0) % 360.0 - 180.0 + counts, edges = np.histogram(wrapped, bins=36, range=(-180.0, 180.0)) + index = int(np.argmax(counts)) + center = float((edges[index] + edges[index + 1]) / 2.0) + return { + "count": int(len(finite)), + "mode_deg_10_degree_bin": center, + "modal_bin_occupancy": float(counts[index] / len(finite)), + "within_15_degrees_of_mode_occupancy": float( + np.mean(periodic_delta_deg(finite, center) <= 15.0) + ), + } + + +def omega_rotamer_summary(values: np.ndarray) -> dict[str, Any]: + finite = np.asarray(values, dtype=np.float64) + finite = finite[np.isfinite(finite)] + if not len(finite): + return {"count": 0} + labels = list(OMEGA_ROTAMER_CENTERS_DEG) + distances = np.stack( + [ + periodic_delta_deg(finite, center) + for center in OMEGA_ROTAMER_CENTERS_DEG.values() + ], + axis=1, + ) + assignments = np.argmin(distances, axis=1) + counts = Counter(int(value) for value in assignments) + occupancies = { + label: counts.get(index, 0) / len(finite) + for index, label in enumerate(labels) + } + dominant = max(labels, key=lambda label: occupancies[label]) + return { + "count": int(len(finite)), + "definitions": { + label: f"nearest periodic center {center:g} degrees" + for label, center in OMEGA_ROTAMER_CENTERS_DEG.items() + }, + "occupancy": occupancies, + "dominant_rotamer": dominant, + "dominant_occupancy": occupancies[dominant], + } + + +def torsion_paths( + torsion_dir: Path, row: dict[str, str] +) -> tuple[Path, Path]: + target = torsion.output_state_dir(torsion_dir, row) + return ( + target / "review_md_wiley_torsion_state.json", + target / "review_md_wiley_torsion_features.npz", + ) + + +def torsion_mode_summaries( + torsion_dir: Path, row: dict[str, str] +) -> tuple[str, list[dict[str, Any]]]: + if int(row["analysis_residue_count"]) == 1: + return "NOT_APPLICABLE_MONOMER", [] + metadata_path, features_path = torsion_paths(torsion_dir, row) + metadata = json.loads(metadata_path.read_text()) + if ( + metadata.get("status") != "PASS" + or metadata.get("features_sha256") != pilot.sha256_file(features_path) + ): + raise ValueError("existing torsion output is absent or inconsistent") + with np.load(features_path, allow_pickle=False) as arrays: + angle_arrays = { + name: np.asarray(arrays[name], dtype=np.float32) + for name in ("phi_deg", "psi_deg", "omega_deg", "omega_star_deg") + } + rows = [] + for edge_index, edge in enumerate(metadata["edge_metadata"]): + summary = { + key: value + for key, value in edge.items() + if not key.endswith("_atom_indices") + } + summary["phi_mode"] = circular_mode_summary( + angle_arrays["phi_deg"][:, edge_index] + ) + summary["psi_mode"] = circular_mode_summary( + angle_arrays["psi_deg"][:, edge_index] + ) + omega = angle_arrays["omega_deg"][:, edge_index] + summary["omega_mode"] = circular_mode_summary(omega) + summary["omega_rotamers"] = omega_rotamer_summary(omega) + rows.append(summary) + return str(metadata["torsion_authority"]), rows + + +def run_sasa( + gmx: str, + xtc: Path, + gro: Path, + glycan_atom_numbers_gro_one_based: Sequence[int], + expected_residue_numbers: Sequence[int], + work_dir: Path, +) -> tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray, str]: + index_path = work_dir / "glycan.ndx" + total_path = work_dir / "sasa_total.xvg" + residue_path = work_dir / "sasa_residue.xvg" + write_index_group( + index_path, + "Glycan", + glycan_atom_numbers_gro_one_based, + ) + process = subprocess.run( + [ + gmx, + "sasa", + "-f", + str(xtc), + "-s", + str(gro), + "-n", + str(index_path), + "-surface", + 'group "Glycan"', + "-output", + 'group "Glycan"', + "-o", + str(total_path), + "-or", + str(residue_path), + "-xvg", + "none", + "-probe", + "0.14", + "-ndots", + "24", + ], + text=True, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + check=False, + ) + if process.returncode != 0: + raise RuntimeError( + f"gmx sasa failed ({process.returncode}): {process.stdout[-6000:]}" + ) + total = np.loadtxt(total_path, dtype=np.float64) + residue = np.loadtxt(residue_path, dtype=np.float64) + if total.ndim == 1: + total = total[None, :] + if residue.ndim == 1: + residue = residue[None, :] + if total.shape[1] < 2 or residue.shape[1] < 3: + raise ValueError( + f"unexpected SASA output shapes total={total.shape} residue={residue.shape}" + ) + observed_residue_numbers = [int(round(value)) for value in residue[:, 0]] + if ( + len(observed_residue_numbers) != len(set(observed_residue_numbers)) + or set(observed_residue_numbers) != set(expected_residue_numbers) + ): + raise ValueError( + "SASA residue identity mismatch: " + f"expected={list(expected_residue_numbers)} " + f"observed={observed_residue_numbers}" + ) + row_by_residue = { + int(round(row[0])): row for row in residue + } + ordered_residue = np.stack( + [row_by_residue[number] for number in expected_residue_numbers], + axis=0, + ) + return ( + total[:, 0].astype(np.float32), + total[:, 1].astype(np.float32), + ordered_residue[:, 1].astype(np.float32), + ordered_residue[:, 2].astype(np.float32), + process.stdout, + ) + + +def validate_times(times_ps: np.ndarray) -> None: + if ( + len(times_ps) != EXPECTED_FRAME_COUNT + or not np.isclose(times_ps[0], EXPECTED_FIRST_TIME_PS) + or not np.isclose(times_ps[-1], EXPECTED_LAST_TIME_PS) + or not np.all(np.isfinite(times_ps)) + ): + raise ValueError( + f"trajectory coverage failure frames={len(times_ps)} " + f"first={times_ps[0] if len(times_ps) else 'NA'} " + f"last={times_ps[-1] if len(times_ps) else 'NA'}" + ) + + +def extract_state( + row: dict[str, str], + output_dir: Path, + torsion_dir: Path, + gmx: str, +) -> dict[str, Any]: + target = state_output_dir(output_dir, row) + metadata_path = target / "review_md_wiley_structural_state.json" + features_path = target / "review_md_wiley_structural_features.npz" + input_pdb = Path(row["input_pdb"]) + gro = Path(row["md_solute_gro"]) + xtc = Path(row["md_solute_xtc"]) + source_hashes = pilot.verify_analysis_input_hashes(row, input_pdb, gro, xtc) + existing = load_valid_state_output(target, row) + if existing is not None: + if pilot.metadata_matches_analysis_input_hashes(existing, row): + return existing + raise ValueError(f"existing structural output has stale inputs: {target}") + + atoms, serial_to_index, residues, connections = pilot.parse_pdb(input_pdb) + gro_atoms = pilot.parse_gro(gro) + pdb_to_gro = pilot.pdb_to_gro_atom_order(atoms, gro_atoms) + selected_keys = [ + tuple(value) for value in json.loads(row["analysis_residue_keys_json"]) + ] + glycan_atoms = selected_atom_indices(selected_keys, residues) + glycan_heavy_atoms = heavy_atom_indices(glycan_atoms, atoms) + masses = np.asarray( + [ + pilot.MASS_BY_ELEMENT.get(str(atom["element"]).upper(), 12.0) + for atom in atoms + ], + dtype=np.float64, + ) + initial_coordinates_A = torsion.pdb_coordinates_A(input_pdb) + edges = ( + torsion.native_edge_definitions( + selected_keys, + atoms, + serial_to_index, + residues, + connections, + initial_coordinates_A, + ) + if len(selected_keys) > 1 + else [] + ) + graph = graph_details(selected_keys, edges) + rings, skipped_rings = ring_definitions( + selected_keys, + atoms, + residues, + initial_coordinates_A, + ) + torsion_authority, torsion_summaries = torsion_mode_summaries( + torsion_dir, + row, + ) + + gro_atom_numbers = sorted(pdb_to_gro[index] + 1 for index in glycan_atoms) + expected_gro_residue_numbers = [] + for key in selected_keys: + gro_indices = [pdb_to_gro[index] for index in residues[key]] + numbers = {int(gro_atoms[index]["residue_number"]) for index in gro_indices} + if len(numbers) != 1: + raise ValueError(f"PDB residue maps to multiple GRO residues: {key}") + expected_gro_residue_numbers.append(numbers.pop()) + + target.parent.mkdir(parents=True, exist_ok=True) + with tempfile.TemporaryDirectory( + prefix=f"review_wiley_structural_{row['campaign_index']}_", + dir=os.environ.get("SLURM_TMPDIR") or None, + ) as temporary: + temporary_path = Path(temporary) + times_ps, coordinates_nm, gmx_traj_output = pilot.extract_coordinates( + gmx, + xtc, + gro, + len(atoms), + temporary_path, + ) + ( + sasa_times_ps, + sasa_total_nm2, + sasa_residue_mean_nm2, + sasa_residue_sd_nm2, + gmx_sasa_output, + ) = run_sasa( + gmx, + xtc, + gro, + gro_atom_numbers, + expected_gro_residue_numbers, + temporary_path, + ) + coordinates_nm = coordinates_nm[:, pdb_to_gro, :] + validate_times(times_ps) + validate_times(sasa_times_ps) + if not np.allclose(times_ps, sasa_times_ps, atol=1e-4): + raise ValueError("coordinate and SASA frame times disagree") + if not np.all(np.isfinite(coordinates_nm)): + raise ValueError("trajectory coordinates contain non-finite values") + + rmsd_A = kabsch_rmsd_A(coordinates_nm, glycan_heavy_atoms) + centers_nm = residue_centers_nm( + coordinates_nm, + selected_keys, + residues, + masses, + ) + span_A, terminal_pairs, terminal_pair_occupancy = terminal_span_A( + centers_nm, + graph["leaf_indices"], + ) + ring_amplitude_A, ring_theta_deg, ring_phi_deg = cremer_pople_6( + coordinates_nm, + rings, + ) + ring_rows = ring_summaries( + rings, + ring_amplitude_A, + ring_theta_deg, + ring_phi_deg, + ) + + staging = target.with_name(f"{target.name}.tmp.{os.getpid()}") + if staging.exists(): + raise FileExistsError(staging) + staging.mkdir(parents=True) + staging_features = staging / features_path.name + with staging_features.open("wb") as handle: + np.savez_compressed( + handle, + times_ps=np.asarray(times_ps, dtype=np.float32), + heavy_atom_rmsd_A=rmsd_A, + terminal_span_A=span_A, + sasa_total_nm2=sasa_total_nm2, + sasa_residue_mean_nm2=sasa_residue_mean_nm2, + sasa_residue_sd_nm2=sasa_residue_sd_nm2, + ring_amplitude_A=ring_amplitude_A, + ring_theta_deg=ring_theta_deg, + ring_phi_deg=ring_phi_deg, + ) + rmsd_late_start = len(rmsd_A) // 2 + metadata = { + "schema": SCHEMA, + "status": "PASS", + "created_at_utc": utc_now(), + "campaign_index": int(row["campaign_index"]), + "structure_state_id": row["structure_state_id"], + "parent_glycorpus_id": row["parent_glycorpus_id"], + "state_label": row["state_label"], + "canonical_wurcs": row["canonical_wurcs"], + "input_pdb": str(input_pdb), + "md_solute_gro": str(gro), + "md_solute_xtc": str(xtc), + **source_hashes, + "frame_count": len(times_ps), + "first_time_ps": float(times_ps[0]), + "last_time_ps": float(times_ps[-1]), + "trajectory_stride_ps": float(np.median(np.diff(times_ps))), + "analysis_residue_count": len(selected_keys), + "analysis_residue_keys": selected_keys, + "glycan_atom_count": len(glycan_atoms), + "glycan_heavy_atom_count": len(glycan_heavy_atoms), + "mapping_mode": row["mapping_mode"], + "graph": graph, + "heavy_atom_rmsd_A": vector_summary(rmsd_A), + "rmsd_late_half_slope_A_per_ns": linear_slope( + rmsd_A[rmsd_late_start:], + times_ps[rmsd_late_start:], + ), + "terminal_span_status": ( + "PASS" if len(span_A) else "NOT_APPLICABLE_MONOMER" + ), + "terminal_span_A": vector_summary(span_A), + "terminal_span_A_per_residue": ( + vector_summary(span_A / len(selected_keys)) + if len(span_A) + else {"count": 0} + ), + "terminal_span_A_per_graph_diameter_residue": ( + vector_summary(span_A / graph["graph_diameter_residues"]) + if len(span_A) + else {"count": 0} + ), + "terminal_residue_pair_indices": terminal_pairs, + "terminal_pair_maximum_occupancy": terminal_pair_occupancy, + "sasa_total_nm2": vector_summary(sasa_total_nm2), + "sasa_total_nm2_per_residue": vector_summary( + sasa_total_nm2 / len(selected_keys) + ), + "sasa_residue_mean_nm2": [ + { + "analysis_residue_index": index, + "residue_key": selected_keys[index], + "gro_residue_number": expected_gro_residue_numbers[index], + "mean_nm2": float(sasa_residue_mean_nm2[index]), + "sd_nm2": float(sasa_residue_sd_nm2[index]), + } + for index in range(len(selected_keys)) + ], + "torsion_mode_status": torsion_authority, + "torsion_edge_summaries": torsion_summaries, + "pyranose_ring_status": ( + "PASS_PARTIAL_OR_COMPLETE" + if rings + else "NOT_APPLICABLE_NO_CERTIFIED_STANDARD_PYRANOSE_RING" + ), + "certified_pyranose_ring_count": len(rings), + "skipped_ring_count": len(skipped_rings), + "ring_summaries": ring_rows, + "skipped_rings": skipped_rings, + "definitions": { + "heavy_atom_rmsd": ( + "unweighted glycan-only non-hydrogen atoms, Kabsch-aligned " + "to the first production frame" + ), + "terminal_span": ( + "maximum mass-weighted center-of-mass distance among graph " + "terminal residues; ordinary end-to-end distance for a linear tree" + ), + "sasa": ( + "GROMACS 2024.4 solvent-accessible surface area for graph-mapped " + "glycan atoms; Bondi radii assigned from compact-topology atom " + "and residue names, 0.14 nm probe, 24 surface dots" + ), + "torsion_mode": ( + "most occupied 10-degree periodic histogram bin with a " + "plus-or-minus 15-degree local occupancy" + ), + "omega_rotamers": ( + "nearest periodic basin center: gg=-60, gt=+60, tg=180 degrees" + ), + "ring_puckering": ( + "Cremer-Pople Q, theta, phi for geometry-certified " + "O5-C1-C2-C3-C4-C5 six-membered rings" + ), + "ring_theta_regions": ( + "4C1 cap <=30; north 30-75; boat/twist 75-105; " + "south 105-150; 1C4 cap >=150 degrees" + ), + }, + "features_path": str(features_path), + "features_sha256": pilot.sha256_file(staging_features), + "gmx_traj_tail": gmx_traj_output[-1000:], + "gmx_sasa_tail": gmx_sasa_output[-1600:], + "claim_boundary": ( + "20_ns_sampled_descriptors_and_qc_screens_not_equilibrium_populations" + ), + "official_submitted_artifacts_modified": False, + } + pilot.atomic_write_json(staging / metadata_path.name, metadata) + try: + os.replace(staging, target) + except OSError: + accepted = load_valid_state_output(target, row) + if accepted is not None: + return accepted + raise + if pilot.sha256_file(features_path) != metadata["features_sha256"]: + raise ValueError("post-publication structural feature hash mismatch") + return metadata + + +def failure_receipt( + output_dir: Path, row: dict[str, str], error: BaseException +) -> Path: + directory = output_dir / "failures" + directory.mkdir(parents=True, exist_ok=True) + timestamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%S%fZ") + path = directory / ( + f"{timestamp}_{int(row['campaign_index']):06d}_" + f"{safe_state_id(row['structure_state_id'])}.json" + ) + pilot.atomic_write_json( + path, + { + "schema": SCHEMA, + "status": "FAILED", + "created_at_utc": utc_now(), + "campaign_index": int(row["campaign_index"]), + "structure_state_id": row["structure_state_id"], + "parent_glycorpus_id": row["parent_glycorpus_id"], + "state_label": row["state_label"], + "error_type": type(error).__name__, + "error": str(error), + "traceback": traceback.format_exc()[-10000:], + "official_submitted_artifacts_modified": False, + }, + ) + return path + + +def extract_shard( + manifest: Path, + output_dir: Path, + torsion_dir: Path, + shard_index: int, + shard_count: int, + gmx: str, +) -> dict[str, Any]: + rows = [ + row + for offset, row in enumerate(pilot.read_tsv(manifest)) + if offset % shard_count == shard_index + ] + if not rows: + raise ValueError(f"empty shard {shard_index}/{shard_count}") + sentinel = output_dir / "shards" / ( + f"review_md_wiley_structural_shard_{shard_index:04d}_" + f"of_{shard_count:04d}.json" + ) + if sentinel.exists(): + payload = json.loads(sentinel.read_text()) + if payload.get("status") == "COMPLETE": + return payload + raise ValueError(f"existing shard sentinel is not COMPLETE: {sentinel}") + passed = [] + failures = [] + for row in rows: + try: + metadata = extract_state(row, output_dir, torsion_dir, gmx) + passed.append(int(metadata["campaign_index"])) + except Exception as error: + accepted = load_valid_state_output(state_output_dir(output_dir, row), row) + if accepted is not None: + passed.append(int(accepted["campaign_index"])) + continue + failures.append( + { + "campaign_index": int(row["campaign_index"]), + "structure_state_id": row["structure_state_id"], + "failure_receipt": str(failure_receipt(output_dir, row, error)), + } + ) + payload = { + "schema": SCHEMA, + "status": "COMPLETE", + "created_at_utc": utc_now(), + "manifest": str(manifest.resolve()), + "manifest_sha256": pilot.sha256_file(manifest), + "torsion_dir": str(torsion_dir.resolve()), + "shard_index": shard_index, + "shard_count": shard_count, + "assigned_state_count": len(rows), + "passed_state_count": len(passed), + "failed_state_count": len(failures), + "passed_campaign_indices": passed, + "failures": failures, + "official_submitted_artifacts_modified": False, + } + pilot.atomic_write_json(sentinel, payload) + return payload + + +def subset_manifest( + manifest: Path, output: Path, campaign_indices: Sequence[int] +) -> dict[str, Any]: + requested = list(dict.fromkeys(int(value) for value in campaign_indices)) + rows = pilot.read_tsv(manifest) + by_index = {int(row["campaign_index"]): row for row in rows} + missing = [value for value in requested if value not in by_index] + if missing: + raise ValueError(f"campaign indices absent from manifest: {missing}") + selected = [by_index[value] for value in requested] + output.parent.mkdir(parents=True, exist_ok=True) + pilot.write_tsv(output, selected, rows[0].keys()) + receipt = { + "schema": SCHEMA, + "status": "PASS", + "created_at_utc": utc_now(), + "source_manifest": str(manifest.resolve()), + "source_manifest_sha256": pilot.sha256_file(manifest), + "output_manifest": str(output.resolve()), + "output_manifest_sha256": pilot.sha256_file(output), + "campaign_indices": requested, + "state_count": len(selected), + "official_submitted_artifacts_modified": False, + } + pilot.atomic_write_json(output.with_suffix(output.suffix + ".json"), receipt) + return receipt + + +def residual_manifest( + manifest: Path, + output_dir: Path, + output: Path, +) -> dict[str, Any]: + rows = pilot.read_tsv(manifest) + residual = [] + valid_existing = 0 + for row in rows: + existing = load_valid_state_output( + state_output_dir(output_dir, row), + row, + ) + if existing is None: + residual.append(row) + else: + valid_existing += 1 + output.parent.mkdir(parents=True, exist_ok=True) + if residual: + pilot.write_tsv(output, residual, rows[0].keys()) + else: + pilot.write_tsv(output, [], rows[0].keys()) + receipt = { + "schema": SCHEMA, + "status": "PASS", + "created_at_utc": utc_now(), + "source_manifest": str(manifest.resolve()), + "source_manifest_sha256": pilot.sha256_file(manifest), + "state_output_dir": str(output_dir.resolve()), + "output_manifest": str(output.resolve()), + "output_manifest_sha256": pilot.sha256_file(output), + "source_state_count": len(rows), + "valid_existing_state_count": valid_existing, + "residual_state_count": len(residual), + "official_submitted_artifacts_modified": False, + } + pilot.atomic_write_json(output.with_suffix(output.suffix + ".json"), receipt) + return receipt + + +def extract_row( + manifest: Path, + output_dir: Path, + torsion_dir: Path, + row_index: int, + gmx: str, +) -> dict[str, Any]: + rows = pilot.read_tsv(manifest) + if row_index < 0 or row_index >= len(rows): + raise IndexError( + f"row index {row_index} outside manifest with {len(rows)} rows" + ) + row = rows[row_index] + try: + metadata = extract_state(row, output_dir, torsion_dir, gmx) + except Exception as error: + accepted = load_valid_state_output( + state_output_dir(output_dir, row), + row, + ) + if accepted is not None: + metadata = accepted + else: + receipt = failure_receipt(output_dir, row, error) + raise RuntimeError( + f"residual extraction failed; receipt={receipt}" + ) from error + return { + "schema": SCHEMA, + "status": "PASS", + "created_at_utc": utc_now(), + "manifest": str(manifest.resolve()), + "manifest_sha256": pilot.sha256_file(manifest), + "row_index": row_index, + "campaign_index": int(metadata["campaign_index"]), + "structure_state_id": metadata["structure_state_id"], + "features_sha256": metadata["features_sha256"], + "official_submitted_artifacts_modified": False, + } + + +def flatten_outputs( + manifest: Path, output_dir: Path +) -> tuple[list[dict[str, Any]], list[dict[str, Any]], list[dict[str, Any]]]: + state_rows = [] + torsion_rows = [] + ring_rows = [] + for row in pilot.read_tsv(manifest): + target = state_output_dir(output_dir, row) + metadata_path = target / "review_md_wiley_structural_state.json" + features_path = target / "review_md_wiley_structural_features.npz" + metadata = json.loads(metadata_path.read_text()) + if ( + metadata.get("status") != "PASS" + or metadata.get("features_sha256") != pilot.sha256_file(features_path) + ): + raise ValueError(f"inconsistent structural output: {target}") + state_rows.append( + { + "campaign_index": metadata["campaign_index"], + "structure_state_id": metadata["structure_state_id"], + "parent_glycorpus_id": metadata["parent_glycorpus_id"], + "state_label": metadata["state_label"], + "analysis_residue_count": metadata["analysis_residue_count"], + "branched": int(metadata["graph"]["branched"]), + "terminal_residue_count": len(metadata["graph"]["leaf_indices"]), + "rmsd_mean_A": metadata["heavy_atom_rmsd_A"]["mean"], + "rmsd_p95_A": metadata["heavy_atom_rmsd_A"]["p95"], + "rmsd_max_A": metadata["heavy_atom_rmsd_A"]["max"], + "rmsd_late_half_slope_A_per_ns": metadata[ + "rmsd_late_half_slope_A_per_ns" + ], + "terminal_span_mean_A": metadata["terminal_span_A"].get("mean", ""), + "terminal_span_sd_A": metadata["terminal_span_A"].get("sd", ""), + "terminal_span_per_residue_mean_A": metadata[ + "terminal_span_A_per_residue" + ].get("mean", ""), + "sasa_mean_nm2": metadata["sasa_total_nm2"]["mean"], + "sasa_sd_nm2": metadata["sasa_total_nm2"]["sd"], + "sasa_per_residue_mean_nm2": metadata[ + "sasa_total_nm2_per_residue" + ]["mean"], + "certified_pyranose_ring_count": metadata[ + "certified_pyranose_ring_count" + ], + "skipped_ring_count": metadata["skipped_ring_count"], + "torsion_edge_count": len(metadata["torsion_edge_summaries"]), + } + ) + for edge in metadata["torsion_edge_summaries"]: + omega = edge["omega_rotamers"] + torsion_rows.append( + { + "campaign_index": metadata["campaign_index"], + "structure_state_id": metadata["structure_state_id"], + "parent_glycorpus_id": metadata["parent_glycorpus_id"], + "state_label": metadata["state_label"], + "edge_index": edge["edge_index"], + "linkage_label": edge["linkage_label"], + "class_key": edge["class_key"], + "phi_mode_deg": edge["phi_mode"].get( + "mode_deg_10_degree_bin", "" + ), + "phi_mode_occupancy": edge["phi_mode"].get( + "within_15_degrees_of_mode_occupancy", "" + ), + "psi_mode_deg": edge["psi_mode"].get( + "mode_deg_10_degree_bin", "" + ), + "psi_mode_occupancy": edge["psi_mode"].get( + "within_15_degrees_of_mode_occupancy", "" + ), + "omega_mode_deg": edge["omega_mode"].get( + "mode_deg_10_degree_bin", "" + ), + "omega_gg_occupancy": omega.get("occupancy", {}).get("gg", ""), + "omega_gt_occupancy": omega.get("occupancy", {}).get("gt", ""), + "omega_tg_occupancy": omega.get("occupancy", {}).get("tg", ""), + "omega_dominant_rotamer": omega.get("dominant_rotamer", ""), + "omega_dominant_occupancy": omega.get("dominant_occupancy", ""), + } + ) + for ring in metadata["ring_summaries"]: + ring_rows.append( + { + "campaign_index": metadata["campaign_index"], + "structure_state_id": metadata["structure_state_id"], + "parent_glycorpus_id": metadata["parent_glycorpus_id"], + "state_label": metadata["state_label"], + "ring_index": ring["ring_index"], + "residue_key": json.dumps(ring["residue_key"]), + "residue_name": ring["residue_name"], + "amplitude_mean_A": ring["amplitude_A"]["mean"], + "theta_mean_deg": ring["theta_deg"]["mean"], + "four_C_one_cap_occupancy": ring["four_C_one_cap_occupancy"], + "boat_twist_region_occupancy": ring[ + "boat_twist_region_occupancy" + ], + "one_C_four_cap_occupancy": ring[ + "one_C_four_cap_occupancy" + ], + "nonchair_occupancy": ring["nonchair_occupancy"], + } + ) + return state_rows, torsion_rows, ring_rows + + +def summarize(manifest: Path, output_dir: Path) -> dict[str, Any]: + state_rows, torsion_rows, ring_rows = flatten_outputs(manifest, output_dir) + summary_dir = output_dir / "summary" + summary_dir.mkdir(parents=True, exist_ok=True) + pilot.write_tsv( + summary_dir / "review_md_wiley_structural_state_summary.tsv", + state_rows, + state_rows[0].keys(), + ) + if torsion_rows: + pilot.write_tsv( + summary_dir / "review_md_wiley_structural_torsion_summary.tsv", + torsion_rows, + torsion_rows[0].keys(), + ) + if ring_rows: + pilot.write_tsv( + summary_dir / "review_md_wiley_structural_ring_summary.tsv", + ring_rows, + ring_rows[0].keys(), + ) + payload = { + "schema": SCHEMA, + "status": "PASS", + "created_at_utc": utc_now(), + "manifest": str(manifest.resolve()), + "manifest_sha256": pilot.sha256_file(manifest), + "state_count": len(state_rows), + "parent_count": len({row["parent_glycorpus_id"] for row in state_rows}), + "branched_state_count": sum(row["branched"] for row in state_rows), + "terminal_span_applicable_state_count": sum( + row["analysis_residue_count"] > 1 for row in state_rows + ), + "torsion_edge_count": len(torsion_rows), + "omega_applicable_edge_count": sum( + row["omega_dominant_rotamer"] != "" for row in torsion_rows + ), + "certified_pyranose_ring_count": len(ring_rows), + "states_with_certified_pyranose_ring": len( + {row["campaign_index"] for row in ring_rows} + ), + "official_submitted_artifacts_modified": False, + "claim_boundary": ( + "20_ns_sampled_descriptors_and_qc_screens_not_equilibrium_populations" + ), + } + pilot.atomic_write_json( + summary_dir / "review_md_wiley_structural_summary.json", + payload, + ) + return payload + + +def parse_indices(value: str) -> list[int]: + values = [] + for token in value.split(","): + token = token.strip() + if not token: + continue + values.append(int(token)) + if not values: + raise argparse.ArgumentTypeError("no campaign indices supplied") + return values + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + subparsers = parser.add_subparsers(dest="command", required=True) + + subset_parser = subparsers.add_parser("subset-manifest") + subset_parser.add_argument("--manifest", type=Path, required=True) + subset_parser.add_argument("--output", type=Path, required=True) + subset_parser.add_argument( + "--campaign-indices", + type=parse_indices, + required=True, + ) + + residual_parser = subparsers.add_parser("residual-manifest") + residual_parser.add_argument("--manifest", type=Path, required=True) + residual_parser.add_argument("--output-dir", type=Path, required=True) + residual_parser.add_argument("--output", type=Path, required=True) + + extract_parser = subparsers.add_parser("extract-shard") + extract_parser.add_argument("--manifest", type=Path, required=True) + extract_parser.add_argument("--output-dir", type=Path, required=True) + extract_parser.add_argument("--torsion-dir", type=Path, required=True) + extract_parser.add_argument("--shard-index", type=int, required=True) + extract_parser.add_argument("--shard-count", type=int, required=True) + extract_parser.add_argument("--gmx", required=True) + + row_parser = subparsers.add_parser("extract-row") + row_parser.add_argument("--manifest", type=Path, required=True) + row_parser.add_argument("--output-dir", type=Path, required=True) + row_parser.add_argument("--torsion-dir", type=Path, required=True) + row_parser.add_argument("--row-index", type=int, required=True) + row_parser.add_argument("--gmx", required=True) + + summary_parser = subparsers.add_parser("summarize") + summary_parser.add_argument("--manifest", type=Path, required=True) + summary_parser.add_argument("--output-dir", type=Path, required=True) + + arguments = parser.parse_args() + if arguments.command == "subset-manifest": + payload = subset_manifest( + arguments.manifest, + arguments.output, + arguments.campaign_indices, + ) + elif arguments.command == "residual-manifest": + payload = residual_manifest( + arguments.manifest, + arguments.output_dir, + arguments.output, + ) + elif arguments.command == "extract-shard": + payload = extract_shard( + arguments.manifest, + arguments.output_dir, + arguments.torsion_dir, + arguments.shard_index, + arguments.shard_count, + arguments.gmx, + ) + elif arguments.command == "extract-row": + payload = extract_row( + arguments.manifest, + arguments.output_dir, + arguments.torsion_dir, + arguments.row_index, + arguments.gmx, + ) + elif arguments.command == "summarize": + payload = summarize(arguments.manifest, arguments.output_dir) + else: + raise AssertionError(arguments.command) + print(json.dumps(payload, indent=2, sort_keys=True)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_wiley_torsion_pca_corpus.py b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_wiley_torsion_pca_corpus.py new file mode 100644 index 0000000000000000000000000000000000000000..923c42a7bd4222a820d20a788d821b7f46717e47 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/review_md_wiley_torsion_pca_corpus.py @@ -0,0 +1,850 @@ +#!/usr/bin/env python3 +"""Wiley-aligned glycosidic-torsion PCA for the completed MD corpus.""" + +from __future__ import annotations + +import argparse +import json +import os +import re +import sys +import tempfile +import traceback +from collections import Counter, defaultdict +from datetime import datetime, timezone +from pathlib import Path +from typing import Any, Sequence + +import numpy as np + +SCRIPT_DIR = Path(__file__).resolve().parent +if str(SCRIPT_DIR) not in sys.path: + sys.path.insert(0, str(SCRIPT_DIR)) + +import review_md_wiley_pca_corpus as corpus +import review_md_wiley_pca_pilot as pilot + + +SCHEMA = "review_md_wiley_torsion_pca_corpus_v1" +SEED = 20260724 +ANGLE_FIELDS = ( + ("phi_deg", "phi"), + ("psi_deg", "psi"), + ("omega_deg", "omega"), +) + + +def utc_now() -> str: + return datetime.now(timezone.utc).isoformat() + + +def atom_adjacency( + atoms: Sequence[dict[str, Any]], + serial_to_index: dict[int, int], + connections: set[tuple[int, int]], +) -> dict[int, set[int]]: + adjacency: dict[int, set[int]] = defaultdict(set) + for left_serial, right_serial in connections: + if left_serial not in serial_to_index or right_serial not in serial_to_index: + continue + left = serial_to_index[left_serial] + right = serial_to_index[right_serial] + adjacency[left].add(right) + adjacency[right].add(left) + return adjacency + + +def pdb_coordinates_A(path: Path) -> np.ndarray: + coordinates = [] + with path.open("r", encoding="utf-8") as handle: + for line in handle: + if line.startswith(("ATOM ", "HETATM")): + coordinates.append( + [ + float(line[30:38]), + float(line[38:46]), + float(line[46:54]), + ] + ) + values = np.asarray(coordinates, dtype=np.float64) + if values.ndim != 2 or values.shape[1] != 3: + raise ValueError(f"invalid PDB coordinate matrix {values.shape}") + return values + + +def infer_anomer(residue_name: str) -> str: + suffix = residue_name[-1:].upper() + return {"A": "a", "B": "b"}.get(suffix, "?") + + +def ring_oxygen_index( + donor_index: int, + atoms: Sequence[dict[str, Any]], + residues: dict[tuple[str, str, str], list[int]], + coordinates_A: np.ndarray, +) -> int: + donor_key = atoms[donor_index]["residue_key"] + donor_match = pilot.CARBON_NAME.fullmatch( + str(atoms[donor_index]["atom_name"]) + ) + if donor_match is None: + raise ValueError("donor atom is not a numbered carbon") + exocyclic_name = f"O{donor_match.group(1)}" + candidates = [] + for neighbor in residues[donor_key]: + atom = atoms[neighbor] + if str(atom["element"]).upper() != "O": + continue + if str(atom["atom_name"]) == exocyclic_name: + continue + distance = float( + np.linalg.norm( + coordinates_A[donor_index] - coordinates_A[neighbor] + ) + ) + if 1.15 <= distance <= 1.75: + candidates.append(neighbor) + if len(candidates) != 1: + names = [ + ( + str(atoms[index]["atom_name"]), + float( + np.linalg.norm( + coordinates_A[donor_index] - coordinates_A[index] + ) + ), + ) + for index in candidates + ] + raise ValueError( + f"expected one donor ring oxygen for atom {donor_index}, found {names}" + ) + return candidates[0] + + +def glycosidic_bond_candidates( + selected_keys: Sequence[tuple[str, str, str]], + atoms: Sequence[dict[str, Any]], + serial_to_index: dict[int, int], + connections: set[tuple[int, int]], + coordinates_A: np.ndarray, +) -> list[tuple[int, int]]: + selected = set(selected_keys) + candidates: set[tuple[int, int]] = set() + for left_serial, right_serial in connections: + if left_serial not in serial_to_index or right_serial not in serial_to_index: + continue + left = serial_to_index[left_serial] + right = serial_to_index[right_serial] + if ( + atoms[left]["residue_key"] != atoms[right]["residue_key"] + and atoms[left]["residue_key"] in selected + and atoms[right]["residue_key"] in selected + ): + candidates.add(tuple(sorted((left, right)))) + expected = max(0, len(selected_keys) - 1) + if len(candidates) < expected: + carbon_indices = [ + index + for index, atom in enumerate(atoms) + if ( + atom["residue_key"] in selected + and pilot.CARBON_NAME.fullmatch(str(atom["atom_name"])) + ) + ] + oxygen_indices = [ + index + for index, atom in enumerate(atoms) + if ( + atom["residue_key"] in selected + and pilot.OXYGEN_NAME.fullmatch(str(atom["atom_name"])) + ) + ] + for carbon in carbon_indices: + for oxygen in oxygen_indices: + if atoms[carbon]["residue_key"] == atoms[oxygen]["residue_key"]: + continue + distance = float( + np.linalg.norm( + coordinates_A[carbon] - coordinates_A[oxygen] + ) + ) + if 1.15 <= distance <= 1.75: + candidates.add(tuple(sorted((carbon, oxygen)))) + return sorted(candidates) + + +def native_edge_definitions( + selected_keys: Sequence[tuple[str, str, str]], + atoms: Sequence[dict[str, Any]], + serial_to_index: dict[int, int], + residues: dict[tuple[str, str, str], list[int]], + connections: set[tuple[int, int]], + coordinates_A: np.ndarray, +) -> list[dict[str, Any]]: + selected = set(selected_keys) + if coordinates_A.shape != (len(atoms), 3): + raise ValueError( + f"PDB coordinate/atom mismatch {coordinates_A.shape} != " + f"({len(atoms)}, 3)" + ) + named = { + key: pilot.named_atoms_for_residue(residues[key], atoms) + for key in selected_keys + } + edges = [] + central_bonds: set[tuple[int, int]] = set() + for left_index, right_index in glycosidic_bond_candidates( + selected_keys, + atoms, + serial_to_index, + connections, + coordinates_A, + ): + left = atoms[left_index] + right = atoms[right_index] + if ( + left["residue_key"] == right["residue_key"] + or left["residue_key"] not in selected + or right["residue_key"] not in selected + ): + continue + left_carbon = pilot.CARBON_NAME.fullmatch(str(left["atom_name"])) + right_carbon = pilot.CARBON_NAME.fullmatch(str(right["atom_name"])) + left_oxygen = pilot.OXYGEN_NAME.fullmatch(str(left["atom_name"])) + right_oxygen = pilot.OXYGEN_NAME.fullmatch(str(right["atom_name"])) + if left_carbon and right_oxygen: + donor_index, oxygen_index = left_index, right_index + donor_position = left_carbon.group(1) + acceptor_position = right_oxygen.group(1) + elif right_carbon and left_oxygen: + donor_index, oxygen_index = right_index, left_index + donor_position = right_carbon.group(1) + acceptor_position = left_oxygen.group(1) + else: + continue + central = (donor_index, oxygen_index) + if central in central_bonds: + raise ValueError(f"duplicate central glycosidic bond {central}") + central_bonds.add(central) + + donor = atoms[donor_index] + oxygen = atoms[oxygen_index] + donor_key = donor["residue_key"] + acceptor_key = oxygen["residue_key"] + donor_named = named[donor_key] + acceptor_named = named[acceptor_key] + acceptor_carbon_name = f"C{acceptor_position}" + if acceptor_carbon_name not in acceptor_named: + raise ValueError( + f"missing {acceptor_carbon_name} for glycosidic oxygen " + f"{oxygen['atom_name']}" + ) + ring_index = ring_oxygen_index( + donor_index, atoms, residues, coordinates_A + ) + phi_indices = [ + ring_index, + donor_index, + oxygen_index, + acceptor_named[acceptor_carbon_name], + ] + acceptor_number = int(acceptor_position) + psi_fourth_name = ( + f"C{acceptor_number - 1}" if acceptor_number > 1 else "" + ) + psi_indices = ( + [ + donor_index, + oxygen_index, + acceptor_named[acceptor_carbon_name], + acceptor_named[psi_fourth_name], + ] + if psi_fourth_name in acceptor_named + else [] + ) + omega_indices = [] + omega_star_indices = [] + if acceptor_position == "6": + omega_names = ("O6", "C6", "C5", "O5") + omega_star_names = ("O6", "C6", "C5", "C4") + if all(name in acceptor_named for name in omega_names): + omega_indices = [acceptor_named[name] for name in omega_names] + if all(name in acceptor_named for name in omega_star_names): + omega_star_indices = [ + acceptor_named[name] for name in omega_star_names + ] + donor_name = str(donor["residue_name"]) + acceptor_name = str(oxygen["residue_name"]) + anomer = infer_anomer(donor_name) + edges.append( + { + "edge_index": len(edges), + "donor_residue_key": donor_key, + "acceptor_residue_key": acceptor_key, + "donor_residue_name": donor_name, + "acceptor_residue_name": acceptor_name, + "donor_anomer": anomer, + "donor_position": donor_position, + "acceptor_position": acceptor_position, + "linkage_label": ( + f"{anomer}{donor_position}-{acceptor_position}" + ), + "class_key": ( + f"{donor_name}|{anomer}{donor_position}-" + f"{acceptor_position}|{acceptor_name}" + ), + "phi_atom_indices": phi_indices, + "psi_atom_indices": psi_indices, + "omega_atom_indices": omega_indices, + "omega_star_atom_indices": omega_star_indices, + } + ) + edges.sort( + key=lambda edge: ( + min(residues[tuple(edge["acceptor_residue_key"])]), + min(residues[tuple(edge["donor_residue_key"])]), + edge["acceptor_position"], + ) + ) + for index, edge in enumerate(edges): + edge["edge_index"] = index + expected = max(0, len(selected_keys) - 1) + if len(edges) != expected: + raise ValueError( + f"selected glycan graph is not a complete tree: " + f"residues={len(selected_keys)} edges={len(edges)} expected={expected}" + ) + return edges + + +def align_exact_angles( + native_edges: Sequence[dict[str, Any]], + exact_edges: Sequence[dict[str, Any]], + arrays: dict[str, np.ndarray], +) -> tuple[dict[str, np.ndarray], list[dict[str, Any]]]: + exact_by_bond = { + tuple(edge["phi_atom_indices"][1:3]): (index, edge) + for index, edge in enumerate(exact_edges) + } + aligned: dict[str, list[np.ndarray]] = { + name: [] for name in ("phi_deg", "psi_deg", "omega_deg", "omega_star_deg") + } + semantic_edges = [] + for native in native_edges: + central = tuple(native["phi_atom_indices"][1:3]) + if central not in exact_by_bond: + raise ValueError( + f"native central bond is absent from certified mapping: {central}" + ) + exact_index, exact = exact_by_bond[central] + merged = dict(native) + for field in ( + "donor_node", + "acceptor_node", + "donor_token", + "acceptor_token", + "donor_anomer", + "donor_position", + "acceptor_position", + "linkage_label", + "class_key", + ): + merged[field] = exact[field] + merged["edge_index"] = len(semantic_edges) + semantic_edges.append(merged) + for name in aligned: + aligned[name].append(np.asarray(arrays[name])[:, exact_index]) + if len(exact_by_bond) != len(native_edges): + raise ValueError("certified and native edge counts disagree") + return ( + { + name: np.stack(columns, axis=1).astype(np.float32) + for name, columns in aligned.items() + }, + semantic_edges, + ) + + +def circular_feature_matrix( + angles: dict[str, np.ndarray], + edge_metadata: Sequence[dict[str, Any]], +) -> tuple[np.ndarray, list[str]]: + columns = [] + labels = [] + for edge_index, edge in enumerate(edge_metadata): + for array_name, angle_label in ANGLE_FIELDS: + values = np.asarray(angles[array_name])[:, edge_index] + if not np.all(np.isfinite(values)): + continue + radians = np.radians(values) + columns.extend([np.sin(radians), np.cos(radians)]) + class_key = str(edge["class_key"]) + labels.extend( + [ + f"edge{edge_index}:{class_key}:{angle_label}:sin", + f"edge{edge_index}:{class_key}:{angle_label}:cos", + ] + ) + if len(columns) < 2: + raise ValueError("fewer than two finite circular torsion features") + return np.stack(columns, axis=1), labels + + +def fit_torsion_pca(values: np.ndarray) -> dict[str, Any]: + result = pilot.fit_pca_and_clusters(values, seed=SEED) + labels = np.asarray(result["labels"], dtype=int) + occupancies = Counter(int(value) for value in labels) + return { + "scores": np.asarray(result["scores"], dtype=np.float32), + "labels": labels.astype(np.int16), + "explained_variance_ratio": np.asarray( + result["explained_variance_ratio"], dtype=np.float32 + ), + "summary": { + "pc1_variance_fraction": float(result["explained_variance_ratio"][0]), + "pc2_variance_fraction": float(result["explained_variance_ratio"][1]), + "pc1_pc2_variance_fraction": float( + np.sum(result["explained_variance_ratio"][:2]) + ), + "pca_components_90": int(result["retained_components_90"]), + "selected_cluster_count": int(result["cluster_count"]), + "cluster_silhouette": float(result["silhouette"]), + "cluster_occupancies": { + str(cluster): count / len(labels) + for cluster, count in sorted(occupancies.items()) + }, + "representative_frame_indices": [ + int(value) for value in result["representative_frame_indices"] + ], + }, + } + + +def output_state_dir(output_dir: Path, row: dict[str, str]) -> Path: + safe_state = re.sub(r"[^A-Za-z0-9_.-]+", "_", row["structure_state_id"]) + return output_dir / "torsion_states" / ( + f"{int(row['campaign_index']):06d}_{safe_state}" + ) + + +def base_state_paths( + output_dir: Path, row: dict[str, str] +) -> tuple[Path, Path]: + base = corpus.output_state_dir(output_dir, row) + return ( + base / "review_md_wiley_corpus_state.json", + base / "review_md_wiley_corpus_features.npz", + ) + + +def extract_state( + row: dict[str, str], output_dir: Path, gmx: str +) -> dict[str, Any]: + target = output_state_dir(output_dir, row) + metadata_path = target / "review_md_wiley_torsion_state.json" + features_path = target / "review_md_wiley_torsion_features.npz" + input_pdb = Path(row["input_pdb"]) + gro = Path(row["md_solute_gro"]) + xtc = Path(row["md_solute_xtc"]) + source_hashes = pilot.verify_analysis_input_hashes(row, input_pdb, gro, xtc) + if metadata_path.is_file(): + metadata = json.loads(metadata_path.read_text()) + if ( + metadata.get("status") == "NOT_APPLICABLE_MONOMER" + and pilot.metadata_matches_analysis_input_hashes(metadata, row) + ): + return metadata + if ( + metadata.get("status") == "PASS" + and features_path.is_file() + and metadata.get("features_sha256") + == pilot.sha256_file(features_path) + and pilot.metadata_matches_analysis_input_hashes(metadata, row) + ): + return metadata + raise ValueError(f"inconsistent existing torsion output: {target}") + + selected_keys = [ + tuple(value) for value in json.loads(row["analysis_residue_keys_json"]) + ] + if len(selected_keys) == 1: + target.mkdir(parents=True, exist_ok=False) + metadata = { + "schema": SCHEMA, + "status": "NOT_APPLICABLE_MONOMER", + "created_at_utc": utc_now(), + "campaign_index": int(row["campaign_index"]), + "structure_state_id": row["structure_state_id"], + "parent_glycorpus_id": row["parent_glycorpus_id"], + "state_label": row["state_label"], + "analysis_residue_count": 1, + "reason": "a monomer has no inter-residue glycosidic torsion", + "input_pdb": str(input_pdb), + "md_solute_gro": str(gro), + "md_solute_xtc": str(xtc), + **source_hashes, + "official_submitted_artifacts_modified": False, + } + pilot.atomic_write_json(metadata_path, metadata) + return metadata + + atoms, serial_to_index, residues, connections = pilot.parse_pdb(input_pdb) + coordinates_A = pdb_coordinates_A(input_pdb) + native_edges = native_edge_definitions( + selected_keys, + atoms, + serial_to_index, + residues, + connections, + coordinates_A, + ) + + base_metadata_path, base_features_path = base_state_paths(output_dir, row) + base_metadata = json.loads(base_metadata_path.read_text()) + if ( + base_metadata.get("status") != "PASS" + or base_metadata.get("features_sha256") + != pilot.sha256_file(base_features_path) + ): + raise ValueError("base all-state PCA output is absent or inconsistent") + + gmx_output = "" + if base_metadata.get("torsion_status") == "PASS_EXACT_CERTIFIED": + with np.load(base_features_path) as values: + exact_arrays = { + name: np.asarray(values[name], dtype=np.float32) + for name in ( + "phi_deg", + "psi_deg", + "omega_deg", + "omega_star_deg", + ) + } + times = np.asarray(values["times_ps"], dtype=np.float32) + angles, edge_metadata = align_exact_angles( + native_edges, base_metadata["edge_metadata"], exact_arrays + ) + torsion_authority = "exact_certified_and_pdb_connectivity_agree" + else: + gro_atoms = pilot.parse_gro(gro) + pdb_to_gro = pilot.pdb_to_gro_atom_order(atoms, gro_atoms) + with tempfile.TemporaryDirectory( + prefix=f"review_wiley_torsion_{row['campaign_index']}_", + dir=os.environ.get("SLURM_TMPDIR") or None, + ) as temporary: + times, coordinates_nm, gmx_output = pilot.extract_coordinates( + gmx, xtc, gro, len(atoms), Path(temporary) + ) + coordinates_nm = coordinates_nm[:, pdb_to_gro, :] + if ( + len(times) != 1001 + or not np.isclose(times[0], 0.0) + or not np.isclose(times[-1], 20000.0) + or not np.all(np.isfinite(coordinates_nm)) + ): + raise ValueError( + f"trajectory coverage failure frames={len(times)} " + f"first={times[0]} last={times[-1]}" + ) + angles = pilot.angles_for_edges(coordinates_nm, native_edges) + edge_metadata = native_edges + torsion_authority = "pdb_connectivity_native" + + if not np.all(np.isfinite(angles["phi_deg"])): + raise ValueError("every glycosidic edge must have a finite phi") + matrix, feature_labels = circular_feature_matrix(angles, edge_metadata) + pca = fit_torsion_pca(matrix) + representative_indices = pca["summary"]["representative_frame_indices"] + + staging = target.with_name(f"{target.name}.tmp.{os.getpid()}") + if staging.exists(): + raise FileExistsError(staging) + staging.mkdir(parents=True) + staging_features = staging / features_path.name + with staging_features.open("wb") as handle: + np.savez_compressed( + handle, + times_ps=np.asarray(times, dtype=np.float32), + pca_scores=pca["scores"], + pca_labels=pca["labels"], + pca_explained_variance_ratio=pca["explained_variance_ratio"], + **angles, + ) + metadata = { + "schema": SCHEMA, + "status": "PASS", + "created_at_utc": utc_now(), + "campaign_index": int(row["campaign_index"]), + "structure_state_id": row["structure_state_id"], + "parent_glycorpus_id": row["parent_glycorpus_id"], + "state_label": row["state_label"], + "canonical_wurcs": row["canonical_wurcs"], + "input_pdb": str(input_pdb), + "md_solute_gro": str(gro), + "md_solute_xtc": str(xtc), + **source_hashes, + "frame_count": len(times), + "first_time_ps": float(times[0]), + "last_time_ps": float(times[-1]), + "analysis_residue_count": len(selected_keys), + "glycosidic_edge_count": len(edge_metadata), + "torsion_authority": torsion_authority, + "edge_metadata": edge_metadata, + "circular_feature_count": matrix.shape[1], + "circular_feature_labels": feature_labels, + "pca": pca["summary"], + "representative_times_ps": [ + float(times[index]) for index in representative_indices + ], + "features_path": str(features_path), + "features_sha256": pilot.sha256_file(staging_features), + "gmx_traj_tail": gmx_output[-1000:], + "definitions": { + "phi": "donor_ring_O-donor_Cn-acceptor_On-acceptor_Cn", + "psi": "donor_Cn-acceptor_On-acceptor_Cn-acceptor_C(n-1)", + "omega_1_to_6": "acceptor_O6-C6-C5-O5", + "pca_input": ( + "sine_and_cosine_embedding_of_each_finite_glycosidic_torsion" + ), + }, + "claim_boundary": ( + "short_timescale_sampled_descriptors_not_equilibrium_populations" + ), + "official_submitted_artifacts_modified": False, + } + pilot.atomic_write_json(staging / metadata_path.name, metadata) + target.parent.mkdir(parents=True, exist_ok=True) + os.replace(staging, target) + if pilot.sha256_file(features_path) != metadata["features_sha256"]: + raise ValueError("post-publication torsion feature hash mismatch") + return metadata + + +def failure_receipt( + output_dir: Path, row: dict[str, str], error: BaseException +) -> Path: + directory = output_dir / "torsion_failures" + directory.mkdir(parents=True, exist_ok=True) + timestamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%S%fZ") + path = directory / ( + f"{timestamp}_{int(row['campaign_index']):06d}_" + f"{re.sub(r'[^A-Za-z0-9_.-]+', '_', row['structure_state_id'])}.json" + ) + pilot.atomic_write_json( + path, + { + "schema": SCHEMA, + "status": "FAILED", + "created_at_utc": utc_now(), + "campaign_index": int(row["campaign_index"]), + "structure_state_id": row["structure_state_id"], + "parent_glycorpus_id": row["parent_glycorpus_id"], + "state_label": row["state_label"], + "error_type": type(error).__name__, + "error": str(error), + "traceback": traceback.format_exc()[-8000:], + "official_submitted_artifacts_modified": False, + }, + ) + return path + + +def extract_shard( + manifest: Path, + output_dir: Path, + shard_index: int, + shard_count: int, + gmx: str, +) -> dict[str, Any]: + rows = [ + row + for offset, row in enumerate(pilot.read_tsv(manifest)) + if offset % shard_count == shard_index + ] + if not rows: + raise ValueError(f"empty torsion shard {shard_index}/{shard_count}") + sentinel = output_dir / "torsion_shards" / ( + f"review_md_wiley_torsion_shard_{shard_index:04d}_" + f"of_{shard_count:04d}.json" + ) + if sentinel.exists(): + payload = json.loads(sentinel.read_text()) + if payload.get("status") == "COMPLETE": + return payload + raise ValueError(f"existing torsion shard is not COMPLETE: {sentinel}") + passed = [] + not_applicable = [] + failures = [] + for row in rows: + try: + result = extract_state(row, output_dir, gmx) + if result["status"] == "PASS": + passed.append(int(row["campaign_index"])) + else: + not_applicable.append(int(row["campaign_index"])) + except Exception as error: + failures.append( + { + "campaign_index": int(row["campaign_index"]), + "failure_receipt": str( + failure_receipt(output_dir, row, error) + ), + } + ) + payload = { + "schema": SCHEMA, + "status": "COMPLETE", + "created_at_utc": utc_now(), + "manifest": str(manifest.resolve()), + "manifest_sha256": pilot.sha256_file(manifest), + "shard_index": shard_index, + "shard_count": shard_count, + "assigned_state_count": len(rows), + "passed_state_count": len(passed), + "not_applicable_monomer_count": len(not_applicable), + "failed_state_count": len(failures), + "passed_campaign_indices": passed, + "not_applicable_campaign_indices": not_applicable, + "failures": failures, + "official_submitted_artifacts_modified": False, + } + pilot.atomic_write_json(sentinel, payload) + return payload + + +def summarize( + manifest: Path, output_dir: Path, expected_shards: int +) -> dict[str, Any]: + summary_dir = output_dir / "summary" + final = summary_dir / "review_md_wiley_torsion_pca_corpus_summary.json" + if final.exists(): + payload = json.loads(final.read_text()) + if payload.get("status") in {"PASS", "PASS_WITH_FAILURES"}: + return payload + raise ValueError(f"existing torsion summary is not reusable: {final}") + rows = pilot.read_tsv(manifest) + shard_files = sorted( + (output_dir / "torsion_shards").glob( + "review_md_wiley_torsion_shard_*.json" + ) + ) + if len(shard_files) != expected_shards: + raise ValueError( + f"expected {expected_shards} torsion shards, found {len(shard_files)}" + ) + table_rows = [] + not_applicable = [] + missing = [] + for row in rows: + target = output_state_dir(output_dir, row) + metadata_path = target / "review_md_wiley_torsion_state.json" + features_path = target / "review_md_wiley_torsion_features.npz" + if not metadata_path.is_file(): + missing.append(int(row["campaign_index"])) + continue + metadata = json.loads(metadata_path.read_text()) + if metadata.get("status") == "NOT_APPLICABLE_MONOMER": + not_applicable.append(int(row["campaign_index"])) + continue + if ( + metadata.get("status") != "PASS" + or not features_path.is_file() + or metadata.get("features_sha256") + != pilot.sha256_file(features_path) + ): + missing.append(int(row["campaign_index"])) + continue + pca = metadata["pca"] + table_rows.append( + { + "campaign_index": metadata["campaign_index"], + "structure_state_id": metadata["structure_state_id"], + "parent_glycorpus_id": metadata["parent_glycorpus_id"], + "state_label": metadata["state_label"], + "analysis_residue_count": metadata["analysis_residue_count"], + "glycosidic_edge_count": metadata["glycosidic_edge_count"], + "torsion_authority": metadata["torsion_authority"], + "circular_feature_count": metadata["circular_feature_count"], + "pc1_variance_fraction": pca["pc1_variance_fraction"], + "pc2_variance_fraction": pca["pc2_variance_fraction"], + "pc1_pc2_variance_fraction": pca[ + "pc1_pc2_variance_fraction" + ], + "pca_components_90": pca["pca_components_90"], + "selected_cluster_count": pca["selected_cluster_count"], + "cluster_silhouette": pca["cluster_silhouette"], + } + ) + table = summary_dir / "review_md_wiley_torsion_pca_state_summary.tsv" + if table_rows: + pilot.write_tsv(table, table_rows, list(table_rows[0])) + payload = { + "schema": SCHEMA, + "status": ( + "PASS" + if len(table_rows) + len(not_applicable) == len(rows) + else "PASS_WITH_FAILURES" + ), + "created_at_utc": utc_now(), + "manifest": str(manifest.resolve()), + "manifest_sha256": pilot.sha256_file(manifest), + "input_state_count": len(rows), + "completed_multiresidue_state_count": len(table_rows), + "not_applicable_monomer_count": len(not_applicable), + "missing_or_failed_state_count": len(missing), + "missing_or_failed_campaign_indices": missing, + "torsion_authority_counts": dict( + sorted(Counter(row["torsion_authority"] for row in table_rows).items()) + ), + "state_table": str(table), + "state_table_sha256": ( + pilot.sha256_file(table) if table.is_file() else "" + ), + "claim_boundary": ( + "short_timescale_sampled_descriptors_not_equilibrium_populations" + ), + "official_submitted_artifacts_modified": False, + } + pilot.atomic_write_json(final, payload) + return payload + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser(description=__doc__) + subparsers = parser.add_subparsers(dest="command", required=True) + extract = subparsers.add_parser("extract-shard") + extract.add_argument("--manifest", type=Path, required=True) + extract.add_argument("--output-dir", type=Path, required=True) + extract.add_argument("--shard-index", type=int, required=True) + extract.add_argument("--shard-count", type=int, required=True) + extract.add_argument("--gmx", required=True) + summary = subparsers.add_parser("summarize") + summary.add_argument("--manifest", type=Path, required=True) + summary.add_argument("--output-dir", type=Path, required=True) + summary.add_argument("--expected-shards", type=int, required=True) + return parser + + +def main() -> int: + arguments = build_parser().parse_args() + if arguments.command == "extract-shard": + payload = extract_shard( + arguments.manifest, + arguments.output_dir, + arguments.shard_index, + arguments.shard_count, + arguments.gmx, + ) + else: + payload = summarize( + arguments.manifest, + arguments.output_dir, + arguments.expected_shards, + ) + print(json.dumps(payload, indent=2, sort_keys=True)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/run_review_md_charge_corrected_feature_stage_20260802_r1.sh b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/run_review_md_charge_corrected_feature_stage_20260802_r1.sh new file mode 100644 index 0000000000000000000000000000000000000000..bc579eedfd0358e595f6f881242e75b7ae335364 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/run_review_md_charge_corrected_feature_stage_20260802_r1.sh @@ -0,0 +1,82 @@ +#!/usr/bin/env bash +set -euo pipefail + +: "${STAGE:?set STAGE to pca, torsion, structural, or temporal}" +: "${MANIFEST:?set MANIFEST to the corrected affected-state manifest}" +: "${OUTPUT:?set OUTPUT to the create-only stage output directory}" + +SHARDS=${SHARDS:-256} +WORKERS=${WORKERS:-${SLURM_CPUS_PER_TASK:-32}} +PYTHON=${PYTHON:-$(command -v python3)} +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P) + +[[ $SHARDS =~ ^[1-9][0-9]*$ ]] || { echo "invalid SHARDS: $SHARDS" >&2; exit 2; } +[[ $WORKERS =~ ^[1-9][0-9]*$ ]] || { echo "invalid WORKERS: $WORKERS" >&2; exit 2; } +test -f "$MANIFEST" +test -x "$PYTHON" + +if [[ $STAGE != temporal ]]; then + if [[ -z ${GMX:-} ]]; then + source /etc/profile >/dev/null 2>&1 + module load gromacs/2024.4-cuda12.1-u22.04 + GMX=$(command -v gmx) + fi + test -x "$GMX" +fi + +export GMX_MAXBACKUP=-1 OMP_NUM_THREADS=1 + +case "$STAGE" in + pca) + SCRIPT="$SCRIPT_DIR/review_md_wiley_pca_corpus.py" + test -f "$SCRIPT" + seq 0 $((SHARDS - 1)) | xargs -P "$WORKERS" -I {} \ + "$PYTHON" "$SCRIPT" extract-shard \ + --manifest "$MANIFEST" --output-dir "$OUTPUT" \ + --shard-index {} --shard-count "$SHARDS" --gmx "$GMX" + "$PYTHON" "$SCRIPT" summarize \ + --manifest "$MANIFEST" --output-dir "$OUTPUT" --expected-shards "$SHARDS" + ;; + torsion) + SCRIPT="$SCRIPT_DIR/review_md_wiley_torsion_pca_corpus.py" + test -f "$SCRIPT" + seq 0 $((SHARDS - 1)) | xargs -P "$WORKERS" -I {} \ + "$PYTHON" "$SCRIPT" extract-shard \ + --manifest "$MANIFEST" --output-dir "$OUTPUT" \ + --shard-index {} --shard-count "$SHARDS" --gmx "$GMX" + "$PYTHON" "$SCRIPT" summarize \ + --manifest "$MANIFEST" --output-dir "$OUTPUT" --expected-shards "$SHARDS" + ;; + structural) + : "${TORSION_DIR:?set TORSION_DIR to the completed torsion output directory}" + SCRIPT="$SCRIPT_DIR/review_md_wiley_structural_extension.py" + test -f "$SCRIPT" + test -d "$TORSION_DIR/torsion_states" + seq 0 $((SHARDS - 1)) | xargs -P "$WORKERS" -I {} \ + "$PYTHON" "$SCRIPT" extract-shard \ + --manifest "$MANIFEST" --output-dir "$OUTPUT" --torsion-dir "$TORSION_DIR" \ + --shard-index {} --shard-count "$SHARDS" --gmx "$GMX" + "$PYTHON" "$SCRIPT" summarize --manifest "$MANIFEST" --output-dir "$OUTPUT" + ;; + temporal) + : "${PCA_DIR:?set PCA_DIR to the completed PCA/torsion output directory}" + : "${STRUCTURAL_DIR:?set STRUCTURAL_DIR to the completed structural output directory}" + SCRIPT="$SCRIPT_DIR/build_review_md_temporal_20x9.py" + test -f "$SCRIPT" + test -d "$PCA_DIR/states" + test -d "$PCA_DIR/torsion_states" + test -d "$STRUCTURAL_DIR/states" + seq 0 $((SHARDS - 1)) | xargs -P "$WORKERS" -I {} \ + "$PYTHON" "$SCRIPT" extract-shard \ + --manifest "$MANIFEST" --pca-dir "$PCA_DIR" --structural-dir "$STRUCTURAL_DIR" \ + --output-dir "$OUTPUT" --shard-index {} --shard-count "$SHARDS" \ + --verify-source-hashes + "$PYTHON" "$SCRIPT" merge \ + --manifest "$MANIFEST" --output-dir "$OUTPUT" \ + --shard-count "$SHARDS" --expected-state-count 9943 + ;; + *) + echo "invalid STAGE: $STAGE" >&2 + exit 2 + ;; +esac diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/slurm_freeze_review_md_temporal_feature_layer_20260801.sh b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/slurm_freeze_review_md_temporal_feature_layer_20260801.sh new file mode 100644 index 0000000000000000000000000000000000000000..3bf01bb497703952fd1b8c74434eaebf5b5810df --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/slurm_freeze_review_md_temporal_feature_layer_20260801.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +#SBATCH --job-name=md-20x9-freeze +#SBATCH --partition=scavenger +#SBATCH --account=ratul-scavenger +#SBATCH --qos=scavenger +#SBATCH --nodes=1 +#SBATCH --ntasks=1 +#SBATCH --cpus-per-task=1 +#SBATCH --mem=2G +#SBATCH --time=00:20:00 +#SBATCH --requeue +#SBATCH --output=/work/ratul1/supantha/glycan-SD-VS/review/md_temporal_20x9_feature_freeze_20260801/slurm/%x_%j.out +#SBATCH --error=/work/ratul1/supantha/glycan-SD-VS/review/md_temporal_20x9_feature_freeze_20260801/slurm/%x_%j.err + +set -euo pipefail + +: "${PARENT_JOB_ID:?PARENT_JOB_ID is required}" +: "${AUDIT_JOB_ID:?AUDIT_JOB_ID is required}" + +ROOT=/work/ratul1/supantha/glycan-SD-VS +BERT_ROOT="${ROOT}/bert_training_v3/v3.1_cluster_training" +WRITING_ROOT="${BERT_ROOT}/writing" +RAW_ROOT="${ROOT}/review/md_temporal_20x9_full_20260731/package" +PARENT_ROOT="${ROOT}/review/md_temporal_20x9_parent_v2_20260731" +FREEZE_ROOT="${ROOT}/review/md_temporal_20x9_feature_freeze_20260801" + +mkdir -p "${FREEZE_ROOT}/slurm" "${FREEZE_ROOT}/package" + +python "${WRITING_ROOT}/review/glycam_structure/scripts/freeze_review_md_temporal_feature_layer.py" \ + --raw-state-summary "${RAW_ROOT}/review_md_state_temporal_20x9_v1_summary.json" \ + --parent-summary "${PARENT_ROOT}/package/review_md_parent_temporal_20x9_v2_summary.json" \ + --independent-audit "${PARENT_ROOT}/audit/review_md_parent_temporal_20x9_v2_independent_audit.json" \ + --parent-package-dir "${PARENT_ROOT}/package" \ + --output-dir "${FREEZE_ROOT}/package" \ + --pilot-job-id 11818390 \ + --full-job-id 11818420 \ + --parent-job-id "${PARENT_JOB_ID}" \ + --audit-job-id "${AUDIT_JOB_ID}" \ + --code-or-config "${WRITING_ROOT}/review/glycam_structure/configs/review_md_temporal_20x9_v1_20260731.yaml" \ + --code-or-config "${WRITING_ROOT}/review/glycam_structure/scripts/build_review_md_temporal_20x9.py" \ + --code-or-config "${WRITING_ROOT}/review/glycam_structure/scripts/build_review_md_parent_feature_package.py" \ + --code-or-config "${WRITING_ROOT}/review/glycam_structure/scripts/audit_review_md_parent_feature_package.py" \ + --code-or-config "${WRITING_ROOT}/review/glycam_structure/scripts/freeze_review_md_temporal_feature_layer.py" diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/slurm_review_md_parent_feature_package_20260731.sh b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/slurm_review_md_parent_feature_package_20260731.sh new file mode 100644 index 0000000000000000000000000000000000000000..797c8d61008a101ab9b562242662820676d92517 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/glycam_structure/scripts/slurm_review_md_parent_feature_package_20260731.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +#SBATCH --job-name=md-20x9-parent +#SBATCH --partition=scavenger +#SBATCH --account=ratul-scavenger +#SBATCH --qos=scavenger +#SBATCH --nodes=1 +#SBATCH --ntasks=1 +#SBATCH --cpus-per-task=8 +#SBATCH --mem=32G +#SBATCH --time=02:00:00 +#SBATCH --requeue +#SBATCH --output=/work/ratul1/supantha/glycan-SD-VS/review/md_temporal_20x9_parent_v2_20260731/slurm/%x_%j.out +#SBATCH --error=/work/ratul1/supantha/glycan-SD-VS/review/md_temporal_20x9_parent_v2_20260731/slurm/%x_%j.err + +set -euo pipefail + +ROOT=/work/ratul1/supantha/glycan-SD-VS +BERT_ROOT="${ROOT}/bert_training_v3/v3.1_cluster_training" +WRITING_ROOT="${BERT_ROOT}/writing" +STATE_ROOT="${ROOT}/review/md_temporal_20x9_full_20260731/package" +OUTPUT_ROOT="${ROOT}/review/md_temporal_20x9_parent_v2_20260731" + +mkdir -p "${OUTPUT_ROOT}/slurm" + +python "${WRITING_ROOT}/review/glycam_structure/scripts/build_review_md_parent_feature_package.py" \ + --state-package "${STATE_ROOT}/review_md_state_temporal_20x9_v1.npz" \ + --state-index "${STATE_ROOT}/review_md_state_temporal_20x9_v1_index.tsv" \ + --state-summary "${STATE_ROOT}/review_md_state_temporal_20x9_v1_summary.json" \ + --md-manifest "${WRITING_ROOT}/review/multimodal/inputs/review_md_clean20_manifest_snapshot_20260710.tsv.gz" \ + --parent-partition "${WRITING_ROOT}/review/multimodal/outputs/p1_non_iar_pretraining_partition_80_20_20260712/review_p1_non_iar_pretraining_parent_partition.tsv.gz" \ + --objective-partition "${WRITING_ROOT}/review/multimodal/outputs/p1_a5_certified_static_authority_80_20_20260712/review_a5_certified_objective_partition_80_20.tsv.gz" \ + --static-state-partition "${BERT_ROOT}/data/review_a5_static_state_partition.tsv.gz" \ + --review-index "${WRITING_ROOT}/review/glycam_structure/inputs/review_md_outside_a5_parent_context_v2_20260731.csv.gz" \ + --feature-config "${WRITING_ROOT}/review/glycam_structure/configs/review_md_temporal_20x9_v1_20260731.yaml" \ + --output-dir "${OUTPUT_ROOT}" \ + --expected-state-count 47063 \ + --expected-parent-count 30088 \ + --expected-scaler-parent-count 22914 diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/multimodal/outputs/p1_a5_static_role_successor_cascade_20260720_r1/review_a5_static_role_successor_cascade_receipt.json b/releases/2026-10-02/structure_md_processing/project/writing/review/multimodal/outputs/p1_a5_static_role_successor_cascade_20260720_r1/review_a5_static_role_successor_cascade_receipt.json new file mode 100644 index 0000000000000000000000000000000000000000..2af9e00481f3197c602e1425eabb5d55ad4cd884 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/multimodal/outputs/p1_a5_static_role_successor_cascade_20260720_r1/review_a5_static_role_successor_cascade_receipt.json @@ -0,0 +1 @@ +{"builder":{"path":"writing/review/multimodal/scripts/build_review_a5_static_role_successor_cascade_20260720_r1.py","sha256":"928fda0c3d7f9f66969f29b12683e70fae46b1094600c7b33dd262a771b7d5e9","size_bytes":20932},"checks":{"all_changed_active_parents_wholly_nonfit":true,"all_unaffected_static_roles_preserved":true,"exact_28_active_parents_removed":true,"exact_35_active_states_removed":true,"input_bytes_reopened_after_build":true,"no_downstream_targets_or_model_outputs_read":true,"no_pdb_or_graph_payload_opened":true,"official_submitted_or_predecessor_artifacts_unchanged":true,"train_removed_32_development_removed_3":true},"gpu_launch_authorized":false,"inputs":{"changed_parent_roles":{"sha256":"3f448dfe8bbe50d24220493d292b0986c2cdd3f3a7ad291ac6c4ea7dda6336a9","size_bytes":2466},"role_successor_receipt":{"sha256":"a61f94887b59fef0b4c9715132756a6b7fe1ac5ab09b5f410fcf08552880dd34","size_bytes":2654},"role_successor_summary":{"sha256":"9921325fa3e0d8540510ec22c3123f5d98c9704d00941aa33424eb174acb7785","size_bytes":15160},"static_child_authority":{"sha256":"2ca981b78bca56928d449d35467671b03db515496ac61162e68f8a1381a3661f","size_bytes":10920113}},"outputs":{"authority":{"filename":"review_a5_static_role_successor_child_authority.tsv.gz","sha256":"efa36988f4420ad36787cdf729e51973a3ba279f8495d293454239c8387937cd","size_bytes":11053339},"changed_states":{"filename":"review_a5_static_role_successor_changed_states.tsv.gz","sha256":"ee0ee9421a6af79927f34740256c6edcad8bc6e7a61dea6b6105ae7be905543c","size_bytes":648},"summary":{"filename":"review_a5_static_role_successor_cascade_summary.json","sha256":"e637a48ee30cf6d2a06b4d8322521038255415e108e9874c7f9fa1c39813234b","size_bytes":1115}},"schema":"bertose_a5_static_role_successor_cascade_20260720_r1_receipt","status":"PASS_PREPARATION_ONLY_NOT_TRAINING_AUTHORIZATION","training_authorized":false} diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_r2.json b/releases/2026-10-02/structure_md_processing/project/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_r2.json new file mode 100644 index 0000000000000000000000000000000000000000..23fa10f52021d903aec08cfed4b632a02f88ed1f --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_r2.json @@ -0,0 +1 @@ +{"coverage":{"active_pdb_residue_code_count":822,"active_state_count":42372,"atom_name_or_element_mismatches":0,"attached_component_instance_count":63933,"attached_component_template_code_count":4,"exact_template_connectivity_extracted":true,"library_template_count":2249,"mapped_sugar_instance_count":257038,"missing_active_codes":[],"registry_template_code_count":826},"schema":"bertose_a5_static_glycam_template_registry_20260721_r2","source":{"commit":"af5958391ea75b2cbc2b7ba21a814d6110fc7147","license":"LGPL-3.0","repository":"https://github.com/GLYCAM-Web/gmml2","source_sha256":"b12926723233cdad357480e2ef5b6e481c25c0a27d472406e297722d823610bc","upstream_git_blob_sha1":"a0ef3ad5c637a25129817d914710be2e07307e58","upstream_path":"dat/parameters/GLYCAM_06k.lib"},"templates":{"0AA":{"atom_surface_sha256":"68de15e15b35e6ae7a131b9cccdd088f98cc3590ab27ef5801e400c14316afdd","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"092e28a53fe00471dd6724539ff31abca3003bb6a635c691f61e5c3309ec5267","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0AB":{"atom_surface_sha256":"9eaf2a0e9f5900c414d95924144b6a0eb8d27da3363916de89cf724cd6897a68","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"59ecc13fab1045ac972f000721d2bbce30d792a094f19fe65330b849733bb058","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0AD":{"atom_surface_sha256":"ab457b48802382383aa50617dccb818164d025bd2f619d8b0f79aaa12a61fa2f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"3c6604054e1f200e22fb84be1ec1e5e68a1cab059f5a5eb78ee40a0cff86d230","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"0AE":{"atom_surface_sha256":"17ac068a7e1ed0f5cce16bff8b10fd865f361a2a5acce86240e240bb8c7ae7cb","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H31"},{"element":"H","name":"H32"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d5b61d3f34a38e3e14ff3561e0a3d9000292f47c2b2566109b7577099c9680ee","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H31"],["C3","H32"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H4O","O4"]]},"0AU":{"atom_surface_sha256":"1ee49e26387bbbae6b8b3c9814fd58857b6f48531a7fab151ad6db0dcfb2b3b4","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"84bc975f63469f2e5fd76ab93e55f8c801534c72f569f3825b8c3c461e482f32","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"0Ae":{"atom_surface_sha256":"f1717c1dbc882cf05cee9fef9ca392d0728150fe8d0e08b7dc3fca329a69c679","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H31"},{"element":"H","name":"H32"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d3cd65dbfb91edfddc5c4224ccde4c31f2a5f74dab7bd8db14417e8cf8dbd407","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H31"],["C3","H32"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H4O","O4"]]},"0BA":{"atom_surface_sha256":"fec914a1f4b7060dc22b5b1ee7593bab5447e61649f1ec9e863ea39a2f41d5c9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"cf1baadbb488a4cf9661730fcea24e50a6fd7182105273626153ca798070054b","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"0BB":{"atom_surface_sha256":"f82cd4094adbb922b3be5db7f2229c6224aca0976094f0b4ceaa4488ef146213","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"9b87c26d664b4f449d392734c5e3440337fb354c10c345eee012771c6a7836bd","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"0BC":{"atom_surface_sha256":"0efceb5bd33660d97dedd3271ac4429f0c99118ea9f6d5e0904b321ce9bac66b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2M"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C4M"},{"element":"C","name":"C4N"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H21"},{"element":"H","name":"H22"},{"element":"H","name":"H23"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H41"},{"element":"H","name":"H42"},{"element":"H","name":"H43"},{"element":"H","name":"H4N"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"N","name":"N2"},{"element":"N","name":"N4"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4N"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"274faf89f01d206635a971bed8b80fbd32a7b39932a7c797ec0abf6075699db6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2M","C2N"],["C2M","H21"],["C2M","H22"],["C2M","H23"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","N4"],["C4M","C4N"],["C4M","H41"],["C4M","H42"],["C4M","H43"],["C4N","N4"],["C4N","O4N"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2N","N2"],["H3O","O3"],["H4N","N4"]]},"0BD":{"atom_surface_sha256":"ab8b12e42ba9a903aab0a67925890777df59371a7bc132de95a978e2e5c9f118","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"818f0d73ef4300d2d5d19d7cf972f8992abedf371d1b9adffbd46f62f97ca4fb","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0BU":{"atom_surface_sha256":"40a205a750c6c27dc935147eeb654a28e2c77d847dbb4699282f9a4bb13e3820","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"bb769bcecaf76ab2ee1477ebab9dea224d91ae3e590f69da795a898d5c983ced","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0CA":{"atom_surface_sha256":"3d9f0b8cf896497897c82e1a4edab81b3ad5e39afef986cb199a58ecd5bd930f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f735f44a153347b272ae52853722d1fb2e0a1d3f39dbbc526d9702d1f7efba8d","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"0CB":{"atom_surface_sha256":"a70258690f5e14678239f8c48121f42509d08a7a3e152edd710c4d40e4e6d272","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"17d454e3b34563286fee8225d493dc6d4de34ae3a9f19c15cde4a1b47e033433","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"0CD":{"atom_surface_sha256":"65ab4c4dcc2b034dc8d002c2be051c9d1c58fe4cba959ed4f4da7a93042f0f0e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5e3e915a52edb75fd7ec29943f14cee5527636eff7a1dc8816442c2e75d6fb08","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0CU":{"atom_surface_sha256":"3601c8650a822d9f1d4d8818045bf2de5535b5e573e1359a436c1c1d4fd03fc7","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f1c9451c661a375df4838c72d0543089f4b63f4aa6fb6b05503a9cfd51fa85a4","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0DA":{"atom_surface_sha256":"c0823e0b7b2eb0512f74b4159b7a566f66660b5f4d43478778da3034b3fd44d6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e8c62b689fce78de93163444d809875d232cb1a8b6839c5e4f78f3a0dbd0bfe1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0DB":{"atom_surface_sha256":"56e0ea612341715b80699c57a9690bc79c6ec6ae7a97204656cd57250ad80582","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"9bff91912901cc701af9e487971189f45cf86885ebf5a60c1b0817ee3414324e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0DD":{"atom_surface_sha256":"88ba16e8ec20d5aae3bc3b52d8cac9b345a541ca91916a33ddfc50036ab3ddb9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"46f2814896cea340526c3fdebf975dd762cbab3cfce09925cc353f127d944433","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"0DU":{"atom_surface_sha256":"8e609d65974231ce0cb527f6b6b7af6ed28217b1a0acf3722cf140d40e3ec76a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"f424320afd12da13f50961d675964d9000d1fab183c2a5d8c2d76bbfd8dedbcc","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"0EA":{"atom_surface_sha256":"e591218974475ef14ccc97c9269f361ce9ba0f78af143afbe05e75b02a5da93a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"72e34bfa6784b0218ca5973ed21b79605184242c1d924a307bcae970bd15cdc4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0EB":{"atom_surface_sha256":"1e15c0baad91ea3d3e5332f0da84ddbae12865c949ceede5a5d2e2ec485c26eb","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"9ee02db0c0d0ec190eedfec92ffb97898947f99614dc22dbf1721e1f01490d02","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0FA":{"atom_surface_sha256":"a1665766888e03cfa0a945630591f723f64083ba817bb94a69064017a6dc6130","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d93c7283d0a68fc20fae14c1eeaf0032da9feb94a83a0d2265129aed54874a13","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0FB":{"atom_surface_sha256":"d56dcfb125d68a05c3af464a723c25b50379270fe1b95dc9864763074a49c74a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d3d761bb3ce0c96e76c0a8222fafd1fa99c19a5bac085d3c82fee1320326aa00","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0GA":{"atom_surface_sha256":"318087f6795addd1800520600673646e89fbaebc0b8c681c34f039e51df2ff10","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"84f2a4b37733023951a9bc41c1892d8f9afd3da993e7f8c388d4682d48649101","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0GB":{"atom_surface_sha256":"7310ea0a2042ba5bbb3579e621ffdf09fef55255b4fd406e751f7d4810673fff","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0a590b4df429a31021bf6d5a97db14e38f6d49c1cd66489189ceb8720e720e4a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0GL":{"atom_surface_sha256":"6c66cab29b9d1798bab64d45bbd49748626de943cf893c159abbf59dfa2e4624","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C5N"},{"element":"C","name":"C6"},{"element":"C","name":"C7"},{"element":"C","name":"C8"},{"element":"C","name":"C9"},{"element":"C","name":"CME"},{"element":"H","name":"H1M"},{"element":"H","name":"H2M"},{"element":"H","name":"H3A"},{"element":"H","name":"H3E"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5N"},{"element":"H","name":"H6"},{"element":"H","name":"H7"},{"element":"H","name":"H7O"},{"element":"H","name":"H8"},{"element":"H","name":"H8O"},{"element":"H","name":"H9O"},{"element":"H","name":"H9R"},{"element":"H","name":"H9S"},{"element":"H","name":"HOG"},{"element":"N","name":"N5"},{"element":"O","name":"O1A"},{"element":"O","name":"O1B"},{"element":"O","name":"O4"},{"element":"O","name":"O5N"},{"element":"O","name":"O6"},{"element":"O","name":"O7"},{"element":"O","name":"O8"},{"element":"O","name":"O9"},{"element":"O","name":"OHG"}],"covalent_bond_surface_sha256":"5a829adbca5b19a5741baebc9fc729b5b58515c137ab682120bc074834415954","covalent_bonds":[["C1","C2"],["C1","O1A"],["C1","O1B"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3A"],["C3","H3E"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","N5"],["C5N","CME"],["C5N","N5"],["C5N","O5N"],["C6","C7"],["C6","H6"],["C6","O6"],["C7","C8"],["C7","H7"],["C7","O7"],["C8","C9"],["C8","H8"],["C8","O8"],["C9","H9R"],["C9","H9S"],["C9","O9"],["CME","H1M"],["CME","H2M"],["CME","OHG"],["H4O","O4"],["H5N","N5"],["H7O","O7"],["H8O","O8"],["H9O","O9"],["HOG","OHG"]]},"0HA":{"atom_surface_sha256":"87dbb59844b176066b232ccb6e7fdc0271f0fbcaa26ab148cfea411200c018e5","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"eef5b4758c52cc5d8f955db948226049e91b2f9a5806f7a013b882b1946d3b80","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0HB":{"atom_surface_sha256":"7d4d043b195394788f7c2cdeff7b76edaa92310ef2cd7af3924317b9151d0ec2","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6M"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"4153a5a9a1d6dbc442c38153fcb91e65d9e9353a9741065b085f24d895905df9","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6M"],["C5","H5"],["C5","O5"],["C6M","H1M"],["C6M","H2M"],["C6M","H3M"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0JA":{"atom_surface_sha256":"6994d06d51cea96f8ab2b9dc80c88adfd65ca6de4ec48068ff57cc2d5f341bae","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"11dad8ee4fa08994b56769271dbd7170419d537eeb3c588826e05cc4762b44c7","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"0JB":{"atom_surface_sha256":"823bb55a0666a9d86c3a58054474ab6e971094da1b47a59982a7fe98183cc0dc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a5f698f834acca7502e6ef07440af95343c5720a19c85070e5d312ed33324044","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"0JD":{"atom_surface_sha256":"d48284a6fcee5d0d0a3cf0b35cf5e83c04e92487a177227fda0708d6af1dc457","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"defc8bc31058ba17e348b60b5729d6481e88a211f12a3aaecc5256f01cf65ca7","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0JU":{"atom_surface_sha256":"d204f1f894e11f0efdbddd1d4060cc51c2eca77d8715a4af26d3f96a0823f605","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f895dc7be6c242bc1aaf0831ac997dbe4fdf11b099003df924bb9dff0c1636b4","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0KA":{"atom_surface_sha256":"9ccd04f36e1b807c617d8014ebd8478549c8cb92ded1a5e5851200236a9f9433","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"27d1e74f01e3e22e0899f06bd179ea66a49099926587498cd132e2b6adb95185","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0KB":{"atom_surface_sha256":"5fdec22f5eacd31993aee0513bc4347a6cfe0dc74d3c023c83222948746af1b4","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"bc75a0d51c03e512219b847798711c727d6c7eab2e6504ab651f63b22726d4bf","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0LA":{"atom_surface_sha256":"473a7e542bff0b77790a3149e89f340daaeafbd54537d5a9695b571267fb74e8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"fcef18c8b644c6b625e58aef8e518d4e213ffde741f0f5d586f9bdf4f3543e94","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0LB":{"atom_surface_sha256":"7865e6acc06963331640d5c058c40b78ef8da66a4ae4d5b00656d257c324ad02","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"8632a0246eeedd4109531334c05617296ce5e39369c119c12ef6be4deb33f7c6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0LD":{"atom_surface_sha256":"85cdeb091ba5621d79eafa32713a1d52dbeeec84eb09a3f342995aaa1f0a5d05","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"569bc3d218c2b775297fa9f3491a7c117f40f27390a9192cae1431548381f588","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H5O","O5"],["H6O","O6"]]},"0LU":{"atom_surface_sha256":"9586bbcd8135e96ec7c7aad296a7a36a31c4cf7a4251a1760f5789ff247db151","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"639a26cccdf1f5ce9a72727a15d0da64e9b960df75d6b3421e979c5e87d2db35","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H5O","O5"],["H6O","O6"]]},"0MA":{"atom_surface_sha256":"d695091222388b3484bc5be1f0f82804497174c76de599c84887ab9a7bd750d9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7816c9251c1c7158ee8b470a716fd849b6ed846acaafbde141f055f971a4996e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0MB":{"atom_surface_sha256":"e9331886ef689ab1d929e606f650409d604d2775aa2da8226bdb8a53ce65753a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"2c25d7243b4cd35efd2e2432dca414df94461bd1211afb2e3b86e727e5938426","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0NA":{"atom_surface_sha256":"10e8b8f8c719f1719f0fc912e2e4f1f6c8b3b3848bfdec09832a46c5b26b079c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"73ac15b885964733dc6890e8f2a70464842fd841fa59b0703f1087a0adff529f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0NB":{"atom_surface_sha256":"af53d9daaf9ba366cab5ef5dd07d7c0bfae621dacb86f42a6a30e67eb73f4ca1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"73e99524fcbff05affb958c1d964e3134a4c7492bc491380f0882c3523fc7571","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0PA":{"atom_surface_sha256":"081ef69f8f436bced8cc109f2c780607a39c1b1376cb5aad9ca170f1962d0104","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"352f7183b86c22b5184d8718e96280566b209b5b825b4a48341b44fedbb9de35","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"0PB":{"atom_surface_sha256":"aa233c845735668c10038a05528f18f02b06b24165de6d41c97370a744c88c3e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b1d5c72d05154a7e18766f95f5a989706d2b03f5e5e0df7a75be97adfd073075","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"0PD":{"atom_surface_sha256":"7f4145d008befcd76f4fd6bb328548667b2ec46a3c57cfa3f2933132093627a9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"54673fe3b4efa80709e6fa66450a4c79ceb93908e8e373f3f62eedee6d3cecf2","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0PU":{"atom_surface_sha256":"01d70c18e273e44ff4072ad0821760321b4f579a4e9f3efebc2285f8bb5f10f3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0374db92dfd6489c1f99d05ae1c61d93b458a167ecc30acb9eed3e637ec44427","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0QA":{"atom_surface_sha256":"fbbc442e19418542377f41725500ff52cd5a15334c05acadee5d30426a37d240","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"b931b4b9f83d76c1983708c63ae3a08e3e00c46de5adb6a764a100479dd92fcb","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0QB":{"atom_surface_sha256":"6a782dc4fc79e632ae87dfe6c5a4fe03cb24e63b8d75758495f213d73b27081a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"8c9eb54915d6a410f9b4563efd7cebb6b181a37a851d9db695df2b397f610f28","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0QE":{"atom_surface_sha256":"bf7e0b1bc4737b029908652fe6007dd5042734e434d4aec56acf39ddd5f517dc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2M"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H21"},{"element":"H","name":"H22"},{"element":"H","name":"H23"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"503b20257fdb70905bf4b09ddd43569ace4469eb9fd041db09f4af4deb987398","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2M","C2N"],["C2M","H21"],["C2M","H22"],["C2M","H23"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2N","N2"],["H3O","O3"],["H4O","O4"]]},"0Qe":{"atom_surface_sha256":"aad89e720eb57b78858515555ba1ca1692784711ae31e1c413a4ee12a3f0af3a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2M"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H21"},{"element":"H","name":"H22"},{"element":"H","name":"H23"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"f92b0fea8376a20177967040c308be0d16d6581a0d631e565693f0dcb6eb07e4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2M","C2N"],["C2M","H21"],["C2M","H22"],["C2M","H23"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2N","N2"],["H3O","O3"],["H4O","O4"]]},"0RA":{"atom_surface_sha256":"11ddd75bd62c74ce8d971a2096c8f55607fb0509479a2c9089130960668fc365","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"eee3c0b1f865b055b61cc1de159ca6a4b1daf05c31d9192ef30dc5700731015c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0RB":{"atom_surface_sha256":"ad3e8048f30b89295d5c4d34d7df7ed185f5f590af216b72de75d3741cafe62f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"94b235cd6cd954dd99076c5de2a8c5258910551a2b1bc911c008a2b1fbdb3045","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0RD":{"atom_surface_sha256":"27b2d300cd9658be20f5ea85623a4b5e3acee6fdcafb72f0868ffc2378151414","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"91da03ed2163f19f23cbc75875b23115c3307997d710b7628f45eba0a4fc290c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"0RU":{"atom_surface_sha256":"8776c14dd9ea987762e0fdcd39e27435e650d9d150da42b400da8e296360e997","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"3d0c2aa76139fdbf309f2805b295c3decb0d938bab7a835863844739fe6f9b99","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"0SA":{"atom_surface_sha256":"19fc3f61e91f84808e087b608c8e8fbe7b290256030060b495bb0056b0f5d56f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C5N"},{"element":"C","name":"C6"},{"element":"C","name":"C7"},{"element":"C","name":"C8"},{"element":"C","name":"C9"},{"element":"C","name":"CME"},{"element":"H","name":"H1M"},{"element":"H","name":"H2M"},{"element":"H","name":"H3A"},{"element":"H","name":"H3E"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5N"},{"element":"H","name":"H6"},{"element":"H","name":"H7"},{"element":"H","name":"H7O"},{"element":"H","name":"H8"},{"element":"H","name":"H8O"},{"element":"H","name":"H9O"},{"element":"H","name":"H9R"},{"element":"H","name":"H9S"},{"element":"N","name":"N5"},{"element":"O","name":"O1A"},{"element":"O","name":"O1B"},{"element":"O","name":"O4"},{"element":"O","name":"O5N"},{"element":"O","name":"O6"},{"element":"O","name":"O7"},{"element":"O","name":"O8"},{"element":"O","name":"O9"}],"covalent_bond_surface_sha256":"eb72d7540b3d45a92859e4716529f6f2c4f7feca230d53498bfd704c29530880","covalent_bonds":[["C1","C2"],["C1","O1A"],["C1","O1B"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3A"],["C3","H3E"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","N5"],["C5N","CME"],["C5N","N5"],["C5N","O5N"],["C6","C7"],["C6","H6"],["C6","O6"],["C7","C8"],["C7","H7"],["C7","O7"],["C8","C9"],["C8","H8"],["C8","O8"],["C9","H9R"],["C9","H9S"],["C9","O9"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H4O","O4"],["H5N","N5"],["H7O","O7"],["H8O","O8"],["H9O","O9"]]},"0SB":{"atom_surface_sha256":"2a18aebe2a7a80df0183827da4c8328892c353d83af362f6e482e1f8d2cd8b37","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C5N"},{"element":"C","name":"C6"},{"element":"C","name":"C7"},{"element":"C","name":"C8"},{"element":"C","name":"C9"},{"element":"C","name":"CME"},{"element":"H","name":"H1M"},{"element":"H","name":"H2M"},{"element":"H","name":"H3A"},{"element":"H","name":"H3E"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5N"},{"element":"H","name":"H6"},{"element":"H","name":"H7"},{"element":"H","name":"H7O"},{"element":"H","name":"H8"},{"element":"H","name":"H8O"},{"element":"H","name":"H9O"},{"element":"H","name":"H9R"},{"element":"H","name":"H9S"},{"element":"N","name":"N5"},{"element":"O","name":"O1A"},{"element":"O","name":"O1B"},{"element":"O","name":"O4"},{"element":"O","name":"O5N"},{"element":"O","name":"O6"},{"element":"O","name":"O7"},{"element":"O","name":"O8"},{"element":"O","name":"O9"}],"covalent_bond_surface_sha256":"8e48220e77d143e8c07aac2981590a705820b45c31f004ceba09d925cfa48c96","covalent_bonds":[["C1","C2"],["C1","O1A"],["C1","O1B"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3A"],["C3","H3E"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","N5"],["C5N","CME"],["C5N","N5"],["C5N","O5N"],["C6","C7"],["C6","H6"],["C6","O6"],["C7","C8"],["C7","H7"],["C7","O7"],["C8","C9"],["C8","H8"],["C8","O8"],["C9","H9R"],["C9","H9S"],["C9","O9"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H4O","O4"],["H5N","N5"],["H7O","O7"],["H8O","O8"],["H9O","O9"]]},"0TA":{"atom_surface_sha256":"3f00d7e5c59ec2453654c19a4944fe2d6f5a7617b98af00b868a72f62ddc8dc6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7cf493fa4cd1fcedd2e3041e02efd0afdfab77a56ca008128969509ae9585a1b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0TB":{"atom_surface_sha256":"41d0833403c04b2fb9a5e48a6e137fa2d67f1686d8c5ed2f95ccfb06440cd8a8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"028344099a2885423b9aa43beb75898e9f553ecd15467329d53b1e2d891e2315","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0TV":{"atom_surface_sha256":"2bdde220d340063bd29e035da5422b9fb55769c53642d7abb8d6a7a8e695344b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H31"},{"element":"H","name":"H32"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"0ade65b49911be8d55291c211a05dc1afbaa601bde7736020623d833ce43d797","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H31"],["C3","H32"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H4O","O4"]]},"0Tv":{"atom_surface_sha256":"4e9a79014968a01bbef1f5a8ba23b651107553ce445cd1a31b8368ef522cee81","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H31"},{"element":"H","name":"H32"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"a536c1f9288e89d73171fe7e184ea6477e1664cd86d28c07f581861a2dd94a9f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H31"],["C3","H32"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H4O","O4"]]},"0VA":{"atom_surface_sha256":"06a75d8537b7ce9654d2c92def5e568bedf09975e68c9a9ba199f004efcf8613","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"039d7b4e403037bfcadea8d6c515a11c1551304c36fb9a643060d48f8c70c3d2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0VB":{"atom_surface_sha256":"5a87ee4901916b4609314bac0248557f9366f9bacb4092b4dd0669f5677dddce","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f594e4a4d2544d090e457273f7667c2de77facefc7c30f88afb90797ba222d2a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0WA":{"atom_surface_sha256":"1c5deffec64fe52626c0cf09e40a1043a6bf32f80e11f13ad44606697db1dfae","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c748e07b8fbadb88368448073d06cb91ed198b9a03600f9638fe31b98681417d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0WB":{"atom_surface_sha256":"65568e00349667a0d90a2cb3439a8f7a2fb6ad9607cad1344de749eab40be20d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0e20a2236156adf27eec57a2a3c87c49f942e02f2ea4ab113bc25c40c6688fd0","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0XA":{"atom_surface_sha256":"cfd9d86b0a81c09bd00b158aa94556ac663cc6e4a8e5429f33bf5033e8ff0647","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"9fdf7af9d0f5d3ae0e5e397320280aea7225185288d74af944f8e18d3c41b1a6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0XB":{"atom_surface_sha256":"952c7e6e0c7f88f96c9140aaf950969dd934cfad121d94d7fae4d2d333b479d2","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"01c7fd7153c6ca8e0473707199e5b23fda4e42bd9766c625ad64e287b0d46766","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0XD":{"atom_surface_sha256":"6e2d3ad256d2b766d926a9e59581607dc22e891e6dc3a4346dcef47927469396","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"9231f99920b989f4efaf63d7b062678631d9e2946d31e278f943306b69e1fc45","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"0XU":{"atom_surface_sha256":"82fda76d4446421daa895ffa16ca08460686426fe12be2cf09585e373cb2c196","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"04b873b85f625156ed6f25d986fe4e9459cd0ead9252952acfdffc7f3f4efddc","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"0YA":{"atom_surface_sha256":"4c04131a66701c934f2aeb45849ba735c23f59268161b44fa2b03f60b139415a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"1f52a5f5ef0d6989c289cb0f54f36fda49c9862d0c848e945e41dad72ffb9ff8","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0YB":{"atom_surface_sha256":"7996f5aa2375e2443f37abb53acfcb6e6fe553a53021fbe266360cfdd6374344","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7d8fa6953a9710f1bfad538e06cb55f7d8ca4db376e8de10c2dde57af6149ffd","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0aA":{"atom_surface_sha256":"0081362d991caf34350b3de22dfdb12e2c3e128401e740528864af107021ad14","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"61bfc4913fa7740d3e5744243ea6f98b3936ad44674af66274740d7e131080a0","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0aB":{"atom_surface_sha256":"cf0b8859fb5f0cafa8295805c10c913b61ec778cef978a7871e93bb9a6e85ec3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"ef5e8ef8bc108a28b4007f36f433f0c5cf085a25cb5e252cea71934e3ca64c36","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0aD":{"atom_surface_sha256":"5a866f0ea7458b89a187d70ad9f3c6d11f374f8c4bb74e770addacc21b3b5ccd","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"01848e8db50963690b8cd32bcd5692a8a87359c62328adc711b5c9a5484baa39","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"0aU":{"atom_surface_sha256":"dfacfacbaed1941509aa376cea64fcdbd593800d835ea1ecc1b7458557d96159","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"bc60fd804db02bce71577d83356a2bf5f30042b7bf0209a88d62f3e0255e247e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"0bA":{"atom_surface_sha256":"fa500c8822a6c6fa9a7dad6ca5ca3cfcbd78a95602370297a823dacf29b18026","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"78949f2aa6b95d04217d112ba2da9c55b80c6f768e0dc5c5240d3ff37b2dcd1f","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"0bB":{"atom_surface_sha256":"9f0891249285331510745b45d2e19807e095e9e4412693701362b65e616b8205","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"02b66ff129d9cbd1902a270ab1c6976fc8bf2f5173c0c68f4e4d473cb8671072","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"0bD":{"atom_surface_sha256":"5afbea654ebb540e922c8b842e2e689890877b77018b26ec4156c2142010ecb8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"3b851ac265fc184ec3d0d535ebb99c9beed43facedfd9edaeeff3c9e19409eed","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0bU":{"atom_surface_sha256":"ae73aee8c379af6bc6a4bf380f44518658b4308a3e4ad7d49575ba221c48e190","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d466dd627ace687fd4dc03696875b6e8c6013dca82e8e9b47c9976843a6d3a63","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0cA":{"atom_surface_sha256":"d3d5c7bfd698805718c65208f532672f76b5879be5a3ec39207f708bced4ac28","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"59ded1239a47dca07f8e02d8ac592d89d8cb142e3c8bc2f97663437f1178b685","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"0cB":{"atom_surface_sha256":"68ed8f3c1bdfed476bae1b19e22d7555d2ccdfe92bffe42814d2119a62fc15e0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ba8a522c055cea3e3105950b2c2a5ac7925dc781cf243301e540646d9bca4562","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"0cD":{"atom_surface_sha256":"40405328363b4f24ba1caebe2dbcecdb0bfefd387d6b7eff85d07d9941c91085","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"de6bb830f366a247c06181aa89029153828220b374afd0e2d8c6c6c0db897240","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0cU":{"atom_surface_sha256":"40133f4dc38a8b5999d59881e73f45cc8c63be2a8427ea197b8c9afaf6b1e812","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4968b957b29e8a1a57e854528e47684ab8960c1c60f6df180b9a28910fe0287b","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0dA":{"atom_surface_sha256":"b8001a9aa166f92d9472e03194dc286bd7bbaf0257b4803de6d1f92d1182682c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"032d824f924ae3fb9fee1684a127cd9fb0c77059d099f27b817ba49ec07c2dd4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0dB":{"atom_surface_sha256":"ae3395913048f3a988721e18b7e930f4cb474ac72245ebc743fa45d4dbf84bb7","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"c1d8345d9d8c6e66f369c9af0097c3f52579554cfc6e2dccaacff0720c855548","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0dD":{"atom_surface_sha256":"95f3f32dcca8855570c39488261a0db2d0dc43b9086890e3087a2ac91c75901b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"54187e8d6908ee6db711796c7097fe86a442c2696cd2fc21f038f1f458fb45a4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"0dR":{"atom_surface_sha256":"50ce4bb4df887b27f29bb40d181645206da3c08fff0fd7b245219894ce01fc22","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H21"},{"element":"H","name":"H22"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"72b0276ea9fc4ba31d368a724334394f5625af2bf0270a4f98e0e3111ced6aa3","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H21"],["C2","H22"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"],["H4O","O4"]]},"0dU":{"atom_surface_sha256":"ae797ebd626bf31581b7a83d670d7d5875f1c42b14398c2f7f410adf6d448f1b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"36cc2bee8f4380882a85ce89ae913d0e68952410ec26f08d7508c70a77f3f8b1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"0eA":{"atom_surface_sha256":"1c977a23e21103b3adc19c6736a9d191010398979531258b4db8e77143a72667","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"3deee26faede2a3b0ecb0af36eb2f3e2f81ec1c9a75b024a2314bbc547847bd7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0eB":{"atom_surface_sha256":"c68809a9538487c6327fb05d5361493fa2fe7375d45e4083a7d1f9c01e260e4a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0162b3e62ff0d8df206211520d456e6ebd4cf759ae7f6fd5b9d7ecb68f1b84e6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0fA":{"atom_surface_sha256":"f8c77738c8ca98561234d2fad6d6588a8a89f0e4d4d9fbb294b7a45faf6a47ce","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"9b7ec911ee41f554801295f6b748f92adf0226c2ad42194c9e31a11248ee0e4c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0fB":{"atom_surface_sha256":"049e3c454d83d57d38183c9147d3602c78b4c842bc1493e3bfc55701ceda3f3d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"66ce49573af1f04431ab2213773e27c130c0464cff84f590f4d55f8d6ab9a73d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0gA":{"atom_surface_sha256":"52c86c24dab4ef681b7c870f34acb5fe2c1db2c555272ede8687eb8b8ab65c9d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"1b37240b6a8f4dca0fc58849c3dd36c5d489e820bd607d7164db5984f839d185","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0gB":{"atom_surface_sha256":"b4cd31da7d633c6546b87eb9b873aca9e69efe714ec7b08a13cec1e4b54c58c9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"1aeb5417e9b00337c63e3f579e95f944127b84419fc5cbf89757ffdd3be3e649","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0hA":{"atom_surface_sha256":"e2c26159635774f39d7857d15fc5e3f438969ba0292b4da5d01d8fa2ea95a671","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"797a26a6561a57f70e9ec4c60cf3e63b0f413e9140c9a70d9891eb8f61cb756d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0hB":{"atom_surface_sha256":"7db9c1242787799adb2b981b8662d6b72865a78db693c1bfe2bb4647d4acc31b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6M"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d4b901209e45df1c9d3bd3a42f477259239d871616d623920a9666f670270b5e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6M"],["C5","H5"],["C5","O5"],["C6M","H1M"],["C6M","H2M"],["C6M","H3M"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0jA":{"atom_surface_sha256":"9747209df79512888048944c366c44970ba65f0466a8a7b35f23884a767072f5","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"12c193a69b0cfbd16e208e514b76b32caa15a9abdab5f0677d98a2866d090bc8","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"0jB":{"atom_surface_sha256":"4a8d994fa3c56e551caf208e32d91d0913a2619c062afc611d326b09428b0c3d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6c6867b93d08439a9f60409ae596b7193d6391595ffae0193050a9e73ccb6bdd","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"0jD":{"atom_surface_sha256":"6f7637238507dca773eb1df8667030226614c1c5fbf1a1327511bf2c5c410a1f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ffb18e546f5fe9deb7a8b42a0973cdcc5d7a46fcc166986e3d6f4931c460a05c","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0jU":{"atom_surface_sha256":"7ba0420467f504c7f080646ab88ac48da3f19dc3e63481a56d2aac7bf049bf9d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"94c6b8da098625dbd4e8623a7b69c4a2330241483da045c703e720ed475d2577","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0kA":{"atom_surface_sha256":"13023b8bc083169f52093472cd05e97676a58bd192b3829a0e79cb7e308c91c3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"25a0b1a2347766ba73bf3fc48fedb9b6e2df56fb4a4063d55651003ebf553d0d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0kB":{"atom_surface_sha256":"01ec7f56b1b360f27308fbf7ad97f97a2cb8c54d71d821122dbfeea17463f01c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"547f77d9592df5d77fcf518b3e9b2d6407aad46f4b716c58019cb23a1137d28b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0lA":{"atom_surface_sha256":"ea73f50f82dc9481f034854fe6fe5cd27478752addf231b7ed0c4e7629fdfa08","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5fe9fa21ffadcd59468a8ce7944e12c3378d3dff49fbf8f72200525dba836e11","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0lB":{"atom_surface_sha256":"78a55c338ba5aed1d966d5c2674deb6b4c5d71b85b1414348e484d337668f671","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0ab2c16f2539a59ee312febe4bf8b4995f5c6cc35d866e2c201bbce76f926212","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0mA":{"atom_surface_sha256":"2b035cf178e0d4eb0fd0520753640aea9f3f8ff860ab1c3257537d0b3e555b6a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f3fbe130830146de0b23debc0a77d5db0d0b4de9dc17898a101a301b73db5d5b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0mB":{"atom_surface_sha256":"4a58f357bbd158fa7e82c4a41bf12a2898c2392b2bbd234bb9116bd50bcd9d51","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"abb1adab135402c2dbc7c6e3f2c9f742cc0acafcf094be7134935182915445c8","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0nA":{"atom_surface_sha256":"a35ac9118be24b08b6ec6711ca97ba2c268c31a22931b8829b29846cc8e03d46","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"567de195bd9306cfbbf73fb6e1dc503b47abc0b4169a77e92594135fb5a8e4a1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0nB":{"atom_surface_sha256":"7b4c3965f312be9a10ef3051faac6021f4f70ea6f9d329a2004d3e79d8acd7a3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"49981523fefe7915e2ea6aa3b850123794eeb601521395dc4223b5bb3e3e6a8f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0pA":{"atom_surface_sha256":"ecd49a21ea9d1b3ff12d9cc4e7a4d00e7f30bf914908bfeeafc462b8caacca1d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"04fe8df35876fff258301e5f0271f0170a42435e3129a16dc0465f3d013c7cfc","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"0pB":{"atom_surface_sha256":"f5f51b6c50a6cb08f7c41f2abea7f51bba151c39db943e709cb8e66f043c7c42","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"08d7189727c104900550fc496dbcda337c9a284ee7083a6e8919879528a00083","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"0pD":{"atom_surface_sha256":"044b6c71c98b1f26aae7da886c0e9b83094ff544c477479f16d86f074718d5e2","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"450fc29dd1ad2359c4eb9de2ac6314148d7d37a1ceb81e3b412bf20d4e18af30","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0pU":{"atom_surface_sha256":"a073305fe20d8acd8bcef302320e851d93a13810af0f79b25944440240f62e2d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"3e14f1a752e05da194fe5e4dad9f5c143c3a2b1742bf36fd5b84b6a70cb7e335","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0qA":{"atom_surface_sha256":"4b647ac537480abccc0d529c62783808c461fb58505e8b449ff6be0408357705","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e88f9561b161419c081d3669e6937ec18ce9ba3633067de8987b7d3f15efde60","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0qB":{"atom_surface_sha256":"c32652caad2414c6359b3cc0c5ce0125a2747d57245fce97a1be87f80468f916","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"892aca35598c5cca0d0f25cd5ace6531a81eadc268d3d2bcd9f0408a8a4cfc22","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0rA":{"atom_surface_sha256":"69ea9f5b1a0d531b4856c9d3c318fe6a2340119e8ebcf788bb7f18c3b8e1a0cf","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"c6a7f1e05ccd6136ae314cdb03c02ad111095d8edcd8f4f1c770f523c8e17e90","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0rB":{"atom_surface_sha256":"036a758d73c054455294f84c02c4cd3cbf6189655a59877dbbb0e69442dc4f5a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"5b2550f592f3b351ec1a66a5d9a5ef27a233f6df37f9bb50b053ba69d13cf447","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0rD":{"atom_surface_sha256":"ee2d8a04de418a2f7ab4722dcf6cbe9be26b2fd0cd170128fde68bc4ae2bcca6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"2a58b8bfae0ffcd0482a37e485a4d38221b90945ae5d2b086a9477db03570b11","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"0rU":{"atom_surface_sha256":"d0b7ab12b3ec411f4af512a833c40e240e5eed11782f0f1c21c59a1538af96f6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"b968dc4b5d6bfce4e41b39651ed4143020668722162230b7c6d12ed16521dc7d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"0tA":{"atom_surface_sha256":"7e92a59557428fcfd06203b04d4d3e19474b1dd6d996dfa118072f4fca6383c6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6fb91ac495a5404583db10c0a9d2d625353ab49e9f54d09691efb5f95c02d19b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0tB":{"atom_surface_sha256":"5e057bd3e10126e8f1f0083c51450758c85d7066d6623498bc9f2ff1a35a1238","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"610939e5a0e22dc46b136054b93e81d61e0f8e895c1986eccea5e598ced79c43","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0vA":{"atom_surface_sha256":"c7af0860698d426f573aaea97639a132b5d8e4dfaaf94c97f060a802a0b2a75e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"99ca7490095912bb3651100a487a5e7adf4aeaba433fa7fe30c8c7025c0c4e9d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0vB":{"atom_surface_sha256":"23880cff9efc44102073ef654485f400bfee3d5ae46335fc779571a62c148d69","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c5b43598ad8aee4ca2c43fa4e71de49200c2cbeb41be44e1f9a366cf16888fea","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0wA":{"atom_surface_sha256":"35e19e7932cb881000857bfd3d3409f2003ad722309bde38a7b7c8a28f66c80b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c265db5731e37fb0084793a518b068c8e70facfc2dec6ef5f157a77f3e4e276a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0wB":{"atom_surface_sha256":"34c77c19ffe7c31de00aaee30021caeb4875eb190355d8a4b44657c19df3824b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"24784065a81e02bf988cbd5f7bb5a7607f8ed6da580dd7199f2d6ebb621a2b8a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0xA":{"atom_surface_sha256":"386084ef573b77d1f39ed24d3948a537d2e4d12bdbaf43bf91db2d2fbc83f858","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"2a4431d833785a230ea33dc7c3c7d816faba606111cd69567d9c6e1b7427289e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0xB":{"atom_surface_sha256":"00ff663075b811c7387d0d187c4ce30400e6b5802f5fff2b0c0414527444cbfe","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"4c4601f7cc8ef1be3729c5bbc1fbe949ad075c511cf02c4aca0557b646d83d94","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"0xD":{"atom_surface_sha256":"9bc33f7ec5225ad3743b8bee5a284d926346e37d6297ee8d9f758a5b0fb54020","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"5434318aeeb6d1bf25094366f752ed76b3d08c05e88f26ffb7f1d1fda9d34b66","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"0xU":{"atom_surface_sha256":"d3ffe2b0efd3455c22be02ae955ad3b2cf937fd3c000a93e255bec4a269dc8c8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"4725444be7813d86668d5187c57308c1b9a8ff8f00a68de69e4711a56d8e8f8c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"0yA":{"atom_surface_sha256":"e6ac16cb8b4b108a746790bd73ccb1464ba4b2b7b06bfb7f9698bd0c81305ead","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5eb440a8dabc49834db8e73e0ec039e2de42ef0484e1b71d2be4b1b803ace2d6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"0yB":{"atom_surface_sha256":"f78015490c024b658caa45b9c8ab1fafc57e8dc17cc5ae18bc10ac02c6cc05e3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0a1f219a63c18913c191f72cc19ee22d67ad4827bf46e97b1b4d4942e018dd1d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"1CA":{"atom_surface_sha256":"b5de681af9c719620ea01dd4a98e2aff70800b725811a21a037acc86afedab91","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"63d9cbad0b1d44c21784206d60457a612bc071f65366f282b0f6d2e3fe343ef8","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"1CB":{"atom_surface_sha256":"6b585d1e1381adc877606ffb59e3ee6ec5c1ab7f76b5b85942e2fa0edf0ed218","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"03a61860b9256ddbcb181388a621b99d43e6b80222eaabfe45e9b74c82764f99","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H5O","O5"]]},"1CD":{"atom_surface_sha256":"670e5c80de2832fdb1e653898e1e197a2f1528811d4b3bb3f8c80bea8f7771cc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"04b8214a58dae9e9947f4f743718d2e75658acd97769aef2c5a8ccd44180a8ac","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"1CU":{"atom_surface_sha256":"c53ce18d740503f1e166bd992791529237bd847636055bfe3bf6ccb15b76aa07","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d29d7067509a8750771e7b9e3e670c8c1bf57b2e7e7650b70835a2e621a89344","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"1GB":{"atom_surface_sha256":"c5154d695f8ebd76d5b9690df39046248477df943a548fb73ba11a5c264a63d1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"fa303e55002bae81f690848d2271c60573908bd1057a455dcff306eb1856a004","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"1hA":{"atom_surface_sha256":"18574b085994b58af2074847c62729fb97616799ac4f33995b86e0bc5c6cb810","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O1"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"9635c691c3fa2db2af9eb2be48b2792e26e2ad0657d9171caba3f8499cf9aef3","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"2AA":{"atom_surface_sha256":"10d544a505e5dfce1ced677a2789febab350e32c9937e6bdfcedbffd21bbb54d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"f54c681a47ac44e41c25146fbd3f37d0cff8539babe7d2d08d148677efeca896","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"],["H4O","O4"]]},"2AB":{"atom_surface_sha256":"1413576621c3a84bab03e830fd9d1b3e1d40e395ad0ea1e861259f30019cacb8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"42a2b0a9dcfa72356a5063b17af03df11dcb758152ab093750470b98c829412e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"],["H4O","O4"]]},"2AD":{"atom_surface_sha256":"0a666288eee0968f3ddc26c5d873cc8be4a0939d10ea155fa6273b2212f62334","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d610604d228ca51f557ca3614eb461499359ab05881e334a7fae03a5c41e7303","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H3O","O3"],["H5O","O5"]]},"2AE":{"atom_surface_sha256":"474d3ccacc4a30d7da80b9249f72138cf3f41cd5e6a80447481b5da9b9a8e822","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H31"},{"element":"H","name":"H32"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e6c46b50a90329cb6d217d12529e74214a75bd49d8a0749ce2d3b1e9fa445783","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H31"],["C3","H32"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H4O","O4"]]},"2AU":{"atom_surface_sha256":"c7673cbdb752768016867804cd4c8d7572e336d4dc1fa4f5852c052b5d4dcdda","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"4b395c3690739a6dcd246c5d0d16e44befe5f388c7439d39ea903cf3dca37f65","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H3O","O3"],["H5O","O5"]]},"2DA":{"atom_surface_sha256":"916d2a4f8ccf98e732a215ff485498407d3c0ea46afcf79d6986bab972017cdb","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d909e570e8b6cc4c2802d89e171ba037a4aacde11430dbe9b7fb75f742a0d897","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"],["H4O","O4"]]},"2DB":{"atom_surface_sha256":"396d6c0762c8d93836f594adbf0c7bcad565be5006d4f3c2d41e5c241c80481f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"560376af1414f427f2c24a726a33defb5b0473a481ece29dbc4a8214848aa3ea","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"],["H4O","O4"]]},"2DD":{"atom_surface_sha256":"b8bb8564af9225367bd8ca4fd21c2ca616af0229700b9a65404e55e6e04aaddb","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"19360875069b5b575cd8f30f2186077f1030037300105c7f0508c8a2a76c97a6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H3O","O3"],["H5O","O5"]]},"2EA":{"atom_surface_sha256":"74f7adcf0d44743e975e63c3e4c805ce31491835e686e30290675357d6f39ebe","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"aac3488b9e615faf40cca1c83184c6ab26adc5e0f5c882e7e6b17461e55318a7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2EB":{"atom_surface_sha256":"b358cfe13bff3975846b393f5bb835f7b5ea9d0d92861d0b79cf8c0a68a27ddb","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"cf14d2e7d7ecd3c0fcf23ce9b29840da3c1a63bc78d1c8af3d3ec3c3cabccb21","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2FA":{"atom_surface_sha256":"43def61b7831565f1c8170c11c41b09b027eac2322b7d2ff49e6e243a7416d2c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e650b4edd991423e37c8ea2c0ed7f3735368af8611fde4c75f85ed7fa829fbab","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"],["H4O","O4"]]},"2FB":{"atom_surface_sha256":"3788c19f3097a07913cd80be6b73f9076551386cd734647cc41d0ab5206decef","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"6843ed1576ab33713727eb649fca385a5ef085a2acedb08448cf7682a1538008","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"],["H4O","O4"]]},"2GA":{"atom_surface_sha256":"7dbf314ad838a09b325912e335629fe2e90a3b2e6a8b71764e0da9d9c90f3700","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"3bf2c65b312238b90c29fb90c3be683b799593ddb74eed893f6b6c46cd0d7c35","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2GB":{"atom_surface_sha256":"89a016982d7102a239197dadf6a74b8bfaaf5aaab0d161b169d98708cb56d779","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"15ad89f1be52b0f5e72baae4e2c6542dc41624490ad311008ff5971edc0f8bf4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2HA":{"atom_surface_sha256":"3870df24eb7129a56bf6be9ae93bce8134a979b6af1177c7c0e48b9e3e6d72fe","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"583299c5a9555f1897737a2568f558e45e8a4ac4a1226938bd5d03797e723eab","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"],["H4O","O4"]]},"2HB":{"atom_surface_sha256":"0bc7e8b9dab09a783fa2ae2e8501790e9c9f0c623744b76ca5180e58885544dc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6M"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"b7345f91c51728c95ce94cde79abe396c2be0fa854efe6e20fe2ca55cfd676d4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6M"],["C5","H5"],["C5","O5"],["C6M","H1M"],["C6M","H2M"],["C6M","H3M"],["H3O","O3"],["H4O","O4"]]},"2KA":{"atom_surface_sha256":"326fc4a6bc9b1a6d8725f9fdac9e97a8fb92fce150434527b262b519a817fb91","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"087e39ecd432b46464fbb6bed2263042ea98c79d76a1eb675046c0e3b2886297","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2KB":{"atom_surface_sha256":"d8f37a38d4cc9a3c050d47cb5a3e9593d55c9e29b38472b2a4b72737d368cd01","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f6a789c80bc6e769c9c9b11722373a2ab2de58d147accc65838005100bd8285a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2LA":{"atom_surface_sha256":"aaf630dfe225cf79116d38ed115a9098579807eba612b7f8bfbe4fbc5ef060a6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f638fb9e9c6e25a65c67529fde0a83f85742fe80f33f10e40340439d31ffaa59","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2LB":{"atom_surface_sha256":"70f2f52366e69f8bc7a8979f38c5e80dc1165702a6fa223fd70b673c03cda0a9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6161ba1ba6ead94517ed27bc4379223b9d6a220951c4b32e0b03aeb8b36cd137","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2LD":{"atom_surface_sha256":"92852977738da80574d7f5b0e2cf8ee71f2965467dbdab48869a22521342a608","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5e68bd3deef32f942c9e1b5217eb1fdd68caacd1c2d248d554341db90f0e2f6b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H5O","O5"],["H6O","O6"]]},"2LU":{"atom_surface_sha256":"c301c0eb0f1ed48fac86ba5d9bface24bece1f3e9c74ff781ab43cfb1d686196","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b0e44c76a60ecf5e163e5941460ce4cf0024d94d571bdeaff1f262149c4c4132","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H5O","O5"],["H6O","O6"]]},"2MA":{"atom_surface_sha256":"8e898944c9b299302f153e6c36bd1bc89327cdceed27114c785ea9b84b2c592f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"8d2134afb641e2b7eeb47c73abac8064a546a72e29d3137bbdab783ccf59d502","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2MB":{"atom_surface_sha256":"278a667eab5f19aeaae9948249875c3f61f64ea4d580bde3ab254e71af96b98c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f1d509985739107d03a464b6c913152ca0c3d0c4a6eac8e9395e6dbbd6d3b61f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2NA":{"atom_surface_sha256":"55536cc00c38e6546fcabe9afe2de1607d902c577e9f851006042429fa41f0b3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5fb47dbebd33358732c6c32e11aaf1fbeeb4cb040a453419e4ed618718cde012","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2NB":{"atom_surface_sha256":"466a01ec67e6f197b70998328d648752e54c0ec1bee0ea97cbf9c30fd906ef08","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5194fcdde2fefdc17ee57eb12ac0f76c890e3fe010b9d5070f804537f4c21042","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2QA":{"atom_surface_sha256":"b34479599e2f405172d3930272624e62f593b9959194cbcb84463730f5aa2fb2","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"19c29af7dacae65e4d866e171073be5f9fcc87d587f0e39841984d3f8be78b96","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"],["H4O","O4"]]},"2QB":{"atom_surface_sha256":"280fa30289d20c42dea80a0d733c9925d49444048e47953a5ac28d94d242cfdd","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"29b6c4bc1307ab37732f32f907c5870aa4fb4f8d0f05009c4b1d39e5a9acdd54","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"],["H4O","O4"]]},"2RA":{"atom_surface_sha256":"d4a8f71628b8d182f09f681e0dd4b0353f88b10ef4c060abdf8fde6a757b02f7","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"1ae9f764ec73dd8851e64b3177c528dd6741b29ccfea526cf55cf729be26b9e5","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"],["H4O","O4"]]},"2RB":{"atom_surface_sha256":"2db4798c4c12a758c764bb9dd66721561a5aa72b1fcf38f1d7a30e40a248e25d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"29c2ad85a4028b08bcb2698039fa6b87a5a3cbb484c6bc92c3d2a9610032fb73","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"],["H4O","O4"]]},"2RD":{"atom_surface_sha256":"ba2c5a7086d93caacb3d1a364c0a040092b28d26e5583f4f9229f3fbba88051d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"ee8091d49b586be0194c0d1f5347c197772c566d66a32bb4d23d983bb80819df","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H3O","O3"],["H5O","O5"]]},"2RU":{"atom_surface_sha256":"2ab5e6e9bce7453b7860bd6044183d678007f3c8340e8180a3cee4e01322187d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"01a79c7ea6d0a8c4186f025775c97cbf76655f99909600b01e1b06547e6d4aee","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H3O","O3"],["H5O","O5"]]},"2TA":{"atom_surface_sha256":"f3d9e755542192610b197bc8e7a2a2d55985b65b07bb70b9ba07e26ca22aca3d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"e0d6cbefcc9cc384eeae65d908f3a3d39d1376b8c62eaa2d300b3412663d6488","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2TB":{"atom_surface_sha256":"f584d814c04301d9fd45a75379dc6dde4b82910cd1fbb439c361a83fe9f00f40","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"652cd170ba01f423021efd17d192868e6d318ea5d58a1066708a5a07c2caafc2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2TV":{"atom_surface_sha256":"634523a60d3687d7490e976314f26692475305258145bee3cfb218278ea8a5c5","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H31"},{"element":"H","name":"H32"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"15628514267b7ec0b6c38ea679642f733a1656506ced09a1aeb4529598e773b7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H31"],["C3","H32"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H4O","O4"]]},"2XA":{"atom_surface_sha256":"79f295a3cbed0b143c95e6a61a26f0b037cc5650dc9ebb462ae05cb38d3445bc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"08b55442f510915cd0c5d9c4a57542028cb55c31a09b27075e95a97e7a0850cd","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"],["H4O","O4"]]},"2XB":{"atom_surface_sha256":"fc1dc9b433d09938f1c896c34daa64805e50fbc33fe679bde5cc7e60e220448b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"2d28f4a0e2397a52738ac5d2ff002d0e23f60a4814bde2aee632941d1b5f973c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"],["H4O","O4"]]},"2XD":{"atom_surface_sha256":"df8f2279baf9da11289b654e87e76a92e9d0f2eee53a550e58884c7b32a4b6b5","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"9ad8a692843219e803bddf9084750d180cf09145f7f54a7c6450dbfc55f589df","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H3O","O3"],["H5O","O5"]]},"2XU":{"atom_surface_sha256":"b6f19486d31b34b0752869d42494d1a3788cce2ae6d5f8ff2abd56e46ef8d524","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e3c53c678b2775530fe749d29e3c895b960f80b085fe5e4d99ae462c31128b4a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H3O","O3"],["H5O","O5"]]},"2aA":{"atom_surface_sha256":"ada055478190895d6237175ca7c8e1271943c02a22c580038def710146a8250c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d445a04c10b89382c1bfba741bf5bfe785a87ed99b1ec6142133542a2c102844","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"],["H4O","O4"]]},"2aB":{"atom_surface_sha256":"a295f3f609bfb345f12a6a86454514bf18396a4f40ac47100552e5b0616b0383","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"9f3ddf1dce24a5a2d9febfe5c26947d3e51dbc4c7f7dc178185cdc02cfddbe33","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"],["H4O","O4"]]},"2aD":{"atom_surface_sha256":"7692fbaa9f5d57f2b1d1d433cc0e2538f053cd2fdbcc1a3b9f3d202fb179124f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"c29de6e95cf232e7218fb58d97eb9d80681a7c9568055f03a67565b924a6f67d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H3O","O3"],["H5O","O5"]]},"2aU":{"atom_surface_sha256":"c2138064e2a3b81624f08fb97967f55c30a57c486f1d39d02b87bf366ef4bbca","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"b819ab6c07d67c9d77cc845bfa1ae7ead1b8ebe5bf6ce6e3e8fe5e005ba9616d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H3O","O3"],["H5O","O5"]]},"2dA":{"atom_surface_sha256":"ca9a1a46b9c0ae2a43f2a687c8582876832c8452b0751bafa5e99d4b3978c885","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"75a01a410b2a27d2576879bad9dc7f6d276cd2c05946651d9959391b891db2d6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"],["H4O","O4"]]},"2eA":{"atom_surface_sha256":"ebb26ac6c34fedcb7496141ad5af25924fa31aa4a543f17665f4fdbee641e480","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"128b64d19fef29125ad7f15cc55a45aadf55350716ddb40147cbbfbdb3ad1ad5","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2eB":{"atom_surface_sha256":"4221f652d5dc6d658099844fff1bf304e0e0f4a62616db18a058982f411cc9bc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"23e884e857bf392b5afc033bd8e5fd98c3c875e67caa6f7b9a9cd243520a7b89","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2fA":{"atom_surface_sha256":"ef94476b1f57a17e351d123e9f2b676d7ce9d5116faddc3bda858c545f7469b0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"95db594bf473cb37a7391e6322a86fe3ee497c4ab0e22c630fe46630074ad040","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"],["H4O","O4"]]},"2fB":{"atom_surface_sha256":"578c4fb86b1841c261e8760ef6133e9923bba154a40fe14a14573ff7325deb39","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"9cdeb25db86d5046559cd5fe58790d05f81015fdffb91d1b89d2f0e34109970d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"],["H4O","O4"]]},"2gA":{"atom_surface_sha256":"130a9845c07ba1836f428c1bf077a07d2acdc4dac50d9a56ab04cb48215d901e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"56aade129cb82b405eb455baf678d083d43f286c888e2b0f34450a1386805749","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2gB":{"atom_surface_sha256":"4f53e9a6e853bc80dd7aeab84e074534ab2b376935b6eb253fdefe460a677cc1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"cb736333d00f198862d61b26805c9a69d3abbf6019f6dd184c66432f8867a6fb","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2hA":{"atom_surface_sha256":"64e84bf1c9195f7a289866707cc34e2ace7197d25d65979d24ebdb90fdd759ea","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"c94bcf047f32328ec3d33c83306145fd19f2d6b0bf21850c75c0e48600a42742","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"],["H4O","O4"]]},"2hB":{"atom_surface_sha256":"bb8f48e784096a22ec25ca6afc0978e3ddc7b038408f602df575072028728306","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6M"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"71fdee495ff96bcd95ef91218354047f55d9d2c11bc596cf8708682b5210a67e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6M"],["C5","H5"],["C5","O5"],["C6M","H1M"],["C6M","H2M"],["C6M","H3M"],["H3O","O3"],["H4O","O4"]]},"2kA":{"atom_surface_sha256":"436cc2224a3256ab406e38b3e9619b111502dd642c707d45b95ff630555042e1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5df4173a3c228434bc65faa1f4e192bfe954a0541147b30142376014f59861a4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2kB":{"atom_surface_sha256":"d6f3ff7edace5c9c835e9a3e1e2397bdb0576020473470d4e645a2adf12a16f7","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a9e5c8f63c8ee61152d0946fa390bfc2a478ab4629f28bb3e152755b2f4a76cc","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2lA":{"atom_surface_sha256":"86f626f23e60ab21fa77223af48fb14c0cd1cf71b48e6878f0bb654d5bacc516","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"22e3dd7add98b90070718ee2cf32fda72d6ef47c00b8562ceede789eea0179f1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2lB":{"atom_surface_sha256":"f1954fcd039947597a17c04eff38721d2c924f81b8d615f583e6d4975b6ea831","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"62d54a779f5c517e303b0e619725850af3704bb4675bc824e807d93b231f749b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2mA":{"atom_surface_sha256":"ee5e833a3e9d331e2d94d7e19c0c808ae07fef4428ae467c625427ea37d4f048","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"9844b7ac4adf9712fddd869a284018d2534e3069ab62a8ea8fbd6fb09a6f6243","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2mB":{"atom_surface_sha256":"a0e69a9e416f9d3487bf7eb2ca5f5212f21b6e9a8311e3f996901869978a4092","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"42bc2e6677da10a1df5cc0a642f089bd2347a40c7529b20e4011aa2ee12cc8e7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2qA":{"atom_surface_sha256":"66768c5c16652696db4fe41684a2cb043b3f5192f04e0dc9b387f6cc7126a428","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"7294934a7e82aaec0a60abd08a75cc1ec7d781c842c690413d5a1b763258c561","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"],["H4O","O4"]]},"2qB":{"atom_surface_sha256":"93fb7fa926bfd7acd6d42648b1336c3595af8c16141b990b5c16537ab8d5ccb6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"c4cb8e3ba1319e2a790f2df67d52de0ce1309698e1e18863b64edff82af5c76d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"],["H4O","O4"]]},"2rB":{"atom_surface_sha256":"048e4767b73009ac91d779d189a15af22a26daadddbb658c5ea52cf9b53c3201","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"eb86bb65a8922006c077e5d571e19f860d97983619e51ee6500f60f5a28cfafd","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"],["H4O","O4"]]},"2rU":{"atom_surface_sha256":"7f880b81d463acc9ca183f015cb6e8c8b34f8fc333bbed560df1f30e05f1200e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"18b060bfc1934a9f904a63478d80724d5ab8376bfb447ba14223879e74136d0e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H3O","O3"],["H5O","O5"]]},"2tA":{"atom_surface_sha256":"33c0bebbba9063854aa132a321f51a58957857244f9802fe37c8cb3ac877375a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ee54144137e5c6e2cfe850bb193df90798c7ec9702147220e9a26a8b435ae744","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2tB":{"atom_surface_sha256":"e35b05f990dd2fcbbe014b13e257f19af2fc5fe110e4d7faf5a77afd8e0a82f0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f5958979ec64b8adaa1bc107ce4ad641f06e510ed9a34c4f77c3fac8f3156dde","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"],["H6O","O6"]]},"2xA":{"atom_surface_sha256":"cbc00ebe8ffe1101be1924ca3b5a35e79a90f160339de29192fdbd59cde916b1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"2a54e302ae5c46b5ad21df69c2643487b69525b73090a3325c4135d8ad6654fd","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"],["H4O","O4"]]},"2xB":{"atom_surface_sha256":"84895f1059543e3347f2a46af221e7cde0a09e7a597a1d12c42597c104de542b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"dd230d291fb9905347542dfd51ba8c4cae8b2ea23f2ff7846e104da2923a34c3","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"],["H4O","O4"]]},"2xD":{"atom_surface_sha256":"0e7e515de64008c87368366da241495819242a0a45b2ad2990756a1f2b6dcccb","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e3c337d55b43bf29658490b2fa86c8f1e3f7de3a9ffd81ac4b32fcd30438140d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H3O","O3"],["H5O","O5"]]},"3AA":{"atom_surface_sha256":"4c94453c5328659482007204552da2afc62c617eda5ff011696be8fff6c7651e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"ec82b908b28f01f7f646184dd6ba816664acc7b43608eab87e1cc293fd254573","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H4O","O4"]]},"3AB":{"atom_surface_sha256":"99638d840a47238aad59012d4de5fb71f98158094fb80773e63643e2dc43271b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"eaca7790aba180743c25e60614632a4d4b585acbd46d64460120766e9cca31b3","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H4O","O4"]]},"3AD":{"atom_surface_sha256":"359ab76cffc05fc2d34bee6c0c3e4d8d9ebf2cac7fea5f1c2ed9cc4b0e60dcb7","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"f19a04025eff04462e8315e4776f823add4ac2cc5c19f5ee6f08ac007d631be6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H5O","O5"]]},"3AU":{"atom_surface_sha256":"a30c483ba1e03c178aa85ba09569abd8699e918ce846b26af1cc9135e78d4e3b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d1bc41499037d0cf305b5a493aedfe04d131e27b3182257217213c8a66efded3","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H5O","O5"]]},"3BA":{"atom_surface_sha256":"c290845356e67f002acb919694100369aa269360afe37ed297ed993d41004521","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"642cf3f1bd5f887103844c204fb00e224668d157243055715d0dbe38b189dba5","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H4O","O4"],["H5O","O5"]]},"3CA":{"atom_surface_sha256":"dd7b8c203c6350ddb593f6145129be6825da1953d1c3abe28f36a442934c0f59","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"9119fd8c3e087dadeb40b5d0fa9bae73b29180fe2371e7724f9f2a350ee2e944","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H4O","O4"],["H5O","O5"]]},"3CB":{"atom_surface_sha256":"94448e26ec6dbeeaf109d4f95b946a3da51611cf77bfdc10ca9c9a2494467c22","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"2159327094162f474038898f86411dbb7e4a26f48d18e86632304a8d3144d716","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H4O","O4"],["H5O","O5"]]},"3CD":{"atom_surface_sha256":"a3b5ded3bf946f8d6b1655b3f6d4aa142bf044f0c1f64d14d584bbf1a48cf052","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"9c501613c3946065e076e5327108cd67d048df88e19b3c62f1207d8465e8e344","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H4O","O4"],["H6O","O6"]]},"3CU":{"atom_surface_sha256":"86183b50db93a03db7059a644df1f70b5f1939b5978378b4b916cfe6759bc3dc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"fa69008b592b7b536e3a5e41a2dd943e947bfb51b133a039781157b4d837e71e","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H4O","O4"],["H6O","O6"]]},"3DA":{"atom_surface_sha256":"e8bdd342d1d98cf6151958fa2d0fb314d9a27b5a88972f53d4e39592b8705721","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"06fb4360186bdc89c2eb96bd47d6d8719469a35bb9f8dec033068b0204ce25b4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H4O","O4"]]},"3DB":{"atom_surface_sha256":"3bfb381185b4e2d418ab6e23433758b28907ed275d60e8704e48c199fccfa38c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"5ee4fca1822ecb01a81d16c60ec74281e1a3f811d69cda10df8df9d697ee9e91","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H4O","O4"]]},"3DD":{"atom_surface_sha256":"5ee9c40e5d4c6804ac7cf2342909a6dbdb8c1d8c62415610ff13d63743bcef50","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e8f19dd6ec22ea9a132e137a0f074be1a0899976d0dd81e47cee80991b593cea","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H5O","O5"]]},"3DU":{"atom_surface_sha256":"a1c857ce0ec963f9fe2747f3e8b7b072dec5245517313b390668292d7e237d3e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e9302120694303e922a5be8022bfa37987a036a68728c31210dacae8c98f01ec","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H5O","O5"]]},"3EA":{"atom_surface_sha256":"dd7c007511b12919d374c1fc8dc618f77718c8f15574dd00fe0ce383b9450325","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d3c11c18e93aeb143fedb3b49d076cecef36d0d121c86687acf5424ffbe06eb3","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3EB":{"atom_surface_sha256":"3219e267d081f81e1ad108035a6be7ded283551f5ac0481e0f600b7c875a863d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"53cc5933ff397828d6c7a201565f6b9faa2db45eca1eff9b7fb2d24710fd436e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3FA":{"atom_surface_sha256":"69c083974a1887c2f12fbfec7ceef796cec9387410ef003457828bf8a2c0450f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"41718eac6efa42f673f3fddefd576c761af924e4fa7430184f3f30beb24c673a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H4O","O4"]]},"3FB":{"atom_surface_sha256":"50c9fc8bc978d69dd8cb712148ba91b8a5d6c96ab32082aa720477151c81f32f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"aaa31dd19963fe1248c3ac45142c438f5750f2a6b7b6912240f37c49bd84982d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H4O","O4"]]},"3GA":{"atom_surface_sha256":"1bb1aa2185d8259ff3b8aba93ef3c63b065828dd8f994dcd0eb9002997187e7e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6e3579bb59c8c7ba2e95f8b4a7d6d4367e60d023ad4a012bf94fab3dfa1f2318","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3GB":{"atom_surface_sha256":"e77afc82feecbb3c511f5c2023c66e93dbef3f43831bcd3a554adbec0f71371b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"90557fe3365823a5e764a71c74fad997d1470511b30e08dbd504d5984eae55ac","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3HA":{"atom_surface_sha256":"2d3df187c9b104bef89310eed38b500534afbce81500efcead59cb9ae06e696a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"5cb3e234d909fcca08e4e40c925ced9f3802f0b1762befecf53cc0a33552cd92","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H4O","O4"]]},"3HB":{"atom_surface_sha256":"9ba92941bfd30ef09e1e198cf13461c07c9ce099dd516003213a5b4488766c4d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6M"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"3ea0e2f636d2376ef58492e674d804c490707312999db33b1bac9f9464523727","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6M"],["C5","H5"],["C5","O5"],["C6M","H1M"],["C6M","H2M"],["C6M","H3M"],["H2O","O2"],["H4O","O4"]]},"3JA":{"atom_surface_sha256":"6d84528cdcb1d26eef789b7cbb6f3d4bcc203e3e8c7f67363ac69563b84da99b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a9661c8135aa3d25ca81da1f81b42fe2724c9fa91366f647235b42e0a7de907e","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H4O","O4"],["H5O","O5"]]},"3JB":{"atom_surface_sha256":"8693738d92567788c3a5885f9517fe4be4b0b206ce1b7872b977106754eed6bd","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a12173402339d01dcd7f98a5f4b5ed2ae3b848e5bc4f55fd6e2027483765ea98","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H4O","O4"],["H5O","O5"]]},"3KA":{"atom_surface_sha256":"e7e8ded3bd72ab1dd1ecf5c7bad2c6b5a63c5886701ff311b26cac5625ae7a9c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4f4a4eb8879f6d6afa233ff7df59fd94b1e774e275e85ae7c8c2c3731d04e514","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3KB":{"atom_surface_sha256":"bf499cf97da4dc5e6947fec7ee0d8378a3dc1a9c447c4b5eb6e356e9395b118e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c37b2ddc6f1f8c0100351784cbc451ef8a725972254d194d4e955c4e240e2c26","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3LA":{"atom_surface_sha256":"d0adff3865a4f48028bcab6b1ff2eb0d99d913a64e672a4c1b67a8e218c87bd4","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"283e9af90d0e140a1da167e19c4295b48bf7aeff69d8a3217ff7057bba46c725","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3LB":{"atom_surface_sha256":"94d8f7f2f7e62319b4506d9c02cd123048be970c881939c897a0e5df1e9ef49b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"31607817a5f31890fe288369345d7c81ad53fab2ab4629b59f1ec129c4534476","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3LD":{"atom_surface_sha256":"2098c62b2af7bb56d55e462f1548032b984872ad54363c13f2b53b6fc02e27e1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4dd9572078b1417e17af21913429e2cea8262f132339acef932853be022476d2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H5O","O5"],["H6O","O6"]]},"3LU":{"atom_surface_sha256":"9023959d76af7559a98f9c2db74653b7d428fe7d5e94b8c747b66a5722c53cec","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6253913f27bbf455dd49bbbde5604de576bca41620d33fb9b649cc9707929337","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H5O","O5"],["H6O","O6"]]},"3MA":{"atom_surface_sha256":"c11c7f5971957cc4f395263a54b10f54eebfd1608280a7919d1d911a6a6da25e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"36c1d61a354e0e8a90fd73fcabf20ae7cf2ff1dae2b97683d33f81c82c7a354f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3MB":{"atom_surface_sha256":"7f29787568217dd451f95cefcff12d49178722b69a8669d795ec156758cc219a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d1443ef0a9635c45a2c764cb6a19012b7654e1ebb3379c8adf10398255ec47b4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3NA":{"atom_surface_sha256":"6336dc460b698480dddfb63bd0eb37a21fc9e7702f42f7cb67b837c12cf79203","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"10ff8f9fc87a1f8871cf86673fbf471b2c71e5084bfb79d7a3dfa2ac45756f11","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3NB":{"atom_surface_sha256":"08624183c51129d648d700fd82f7b5109b120b460693a9401007df880f3efb6d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"3a4aeee935153d54d186104f1573ce7f6de974c9f8254d460ca1fb17035472e4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3QA":{"atom_surface_sha256":"2940228191c6e50d116a0814501abff95a812f6cec5787b6aab1e6f7cac7ac15","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"79babf48bacb71304cafce9c686429b2306f879f2463ab77546f150f9e7322f5","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H4O","O4"]]},"3QB":{"atom_surface_sha256":"3c3aa2ddd037690e101dc31fc5b90dfda636be370b61c3e1b4eea952f1f42dbc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"7d69c3af7c8a17bde8b7aa3aa6a444fbe934fc4a7fda8010c93314657560ab1f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H4O","O4"]]},"3QE":{"atom_surface_sha256":"1094664576021f7e9424cde664751afa57563bbf44336c39ca38fe94d4ed61fe","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2M"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H21"},{"element":"H","name":"H22"},{"element":"H","name":"H23"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"6d9948d53ec5124014f6ab290af1815725f1920cb373703315f33311d169df2b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2M","C2N"],["C2M","H21"],["C2M","H22"],["C2M","H23"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2N","N2"],["H4O","O4"]]},"3Qe":{"atom_surface_sha256":"5fa885f3ad690afc49f708947f3bcca43239af727834e1ca6d7a062913784a38","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2M"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H21"},{"element":"H","name":"H22"},{"element":"H","name":"H23"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"1b98ad684eb3a842cf36744e046b13603821cabcabbe283b885ce18852156124","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2M","C2N"],["C2M","H21"],["C2M","H22"],["C2M","H23"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2N","N2"],["H4O","O4"]]},"3RA":{"atom_surface_sha256":"c813fc35d16362b715a764ce4902edd4d978ec89bbaf7078246118af03547087","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"11ff40473474bac78541880103392e4c66e217013798a7da4f29f4109efcca24","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H4O","O4"]]},"3RB":{"atom_surface_sha256":"f53bf18da361183d8236187b2c2ecd51e28182994899acb38c98e953292ca78e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"20e62c7c8526e336e0f02f956ac8288899799f65b10dea13bbf469fcfc9ed07b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H4O","O4"]]},"3RD":{"atom_surface_sha256":"1fd7fdb1cda2870d75711cd608afdd9035fa9216f9c916f745d080728d55846a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"bff80a51a4fa4348c273729b4bfc1cd46c94896282aec67b82bdc779358d240f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H5O","O5"]]},"3RU":{"atom_surface_sha256":"5ad49ba6c77be6809827e76cd225d1b7ff71c268cfac39b9e3b275013477d3a0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"9e87ab6939967d93ed93f9b1415b6afdbb9e81661303c9494d20d556844e75a8","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H5O","O5"]]},"3TA":{"atom_surface_sha256":"a325599feda3ef0594b8e0a77de70cd96dabf135663c0cb1cf2dcc291734d208","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ebcf76ec56c08898ec1528835a02a4e950316e9fc4037ca2b915d373cbd577d4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3TB":{"atom_surface_sha256":"6ac7a0f1830ab86ed7307c8e342aa3373749b753043983006e2dd32cd5e4b223","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"168f6c6407036deb264884651fa7c100843d0d22ccf6f0336c972f4fdd73933d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3VA":{"atom_surface_sha256":"1a693eff304bf3b61f0facee409546544be3ef15dedf85f8193b7e0929a2e8e1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ea6a63db0f2aa5230853d23e5f7841ba60577421dc5aa5604bcea05e0b912486","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"],["H6O","O6"]]},"3VB":{"atom_surface_sha256":"86d18313774a078c7200349b1c4397c545396ccb0edea8b9bf62e14627fdf5e8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"3a666eed52434a8a34f66e32e6a1feba48584137e6cbe1079008f33fe7377b60","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"],["H6O","O6"]]},"3WA":{"atom_surface_sha256":"834b53668b70dda6a5d270f02164733174771f0af991eab6f65e3d78214c1c18","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b5bac567f1386d18be83f3643ec8a90a61fd4abba95ec501513edc3f6bf05ce1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"],["H6O","O6"]]},"3WB":{"atom_surface_sha256":"b62bf45be43bdf5daa95c7ab278f28d0f997d5959e9724ff88ad9d4d724d503e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ea53b62076e4df7fe46ccbef477511c4d027c5ca9d6643753c40c50a6c72c4b3","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"],["H6O","O6"]]},"3XA":{"atom_surface_sha256":"ac4f0f125a4540ce6ea9cbacca50d709936f4ea3721792eb631c0c6616f32cdb","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"ede296bd1103a8d0266142fe410cefb077ab1fbb97021e65d4047b3ea78856c7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H4O","O4"]]},"3XB":{"atom_surface_sha256":"06f5b4a4d9a9b339d8dd1bdc8b611d5ba1794c2a7f8c3b78d8e84341cfb37225","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"5dacc174189bb70cc53822ce8b808175b1b63373f1a6bc213660ac1d427faf73","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H4O","O4"]]},"3XD":{"atom_surface_sha256":"43eaa99f6ef8dea75fc07ab4298c2b306e6c0c7ec409319631e2cccfa6cf8f61","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"736e4271a1b5eed8f17013735fd913dbb9aa390dda254a8655bb16fa0142d04e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H5O","O5"]]},"3XU":{"atom_surface_sha256":"e3944511457d461b60964c7b9647d6efc604abcb10e5074d757f55ceb4acd6fb","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e57f07113af7d9333c3e237bedd447b97d50967b066d0db21645291c269c0b55","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H5O","O5"]]},"3YA":{"atom_surface_sha256":"c677d62bb347a8cbc4b1facb88b02d25cb90f613345a5534de2bce89e93325f7","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"409c6c46b1373cd0f797c2b60bf6b9cce62c09467b19b782aa02bfb07c445de2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"],["H6O","O6"]]},"3YB":{"atom_surface_sha256":"820f4c5f3ac14a750884a94e47c11dcc33c1fd96b618f4c6d5ebe2f74701cc8a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a8bf3b2c262cbe51e0d4b5169ec9b4cb1a2edcf8c507a7bf2937dad714418cff","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"],["H6O","O6"]]},"3aA":{"atom_surface_sha256":"351d1876d943af4b2b969d03df5a67e19d3b704ca8b82b9bc0604dce3037bc86","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"4a8333ea09203d4a5245eb4990e9a01ab210d9ddb8a253fdc982a548cb1edd8e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H4O","O4"]]},"3aB":{"atom_surface_sha256":"09eb62f37450bc2ee9fef98074cc8002ad5d1ff04bb6d44fe04803dd2018a80f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"dbaf679e4779885021c64a70663b7ff5e57328d3ef7cc123e4c3672f73e8c709","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H4O","O4"]]},"3aD":{"atom_surface_sha256":"0233a01fe5ea5b5b83714c1fe9c444001ef4797340cedb96982939ad5dc29894","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"4991c3ba7e90dae2f6dc825e13d6bc38efacaa6afe1f8de9a35d5318cb57a93d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H5O","O5"]]},"3aU":{"atom_surface_sha256":"5d769e094febabb29dafbb2acce8436887690072966857e2f8dd61d9cfae3761","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"083cd7ba00616ca47b91e23bbb4fd80e4f4dfd3cecae3f5879c1b32224550c27","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H5O","O5"]]},"3bB":{"atom_surface_sha256":"32c9b7d68d0658342aca647a2a40fa131867bd25e169f14a51d0b17c04b9aabe","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5b9405a8e0a7f9a72ca4510b0ce3ed2a43ffb7bbe79c8e71e1e9460ea4f94251","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H4O","O4"],["H5O","O5"]]},"3bD":{"atom_surface_sha256":"508e06b4985673c5ed6c4e66ffb3464a3f563caaefc804b0422ff1572c5a37d3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4f7ef36cd8a400d8893c44367558c4b71f1e34bdeba680d8336e736b34af543a","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H4O","O4"],["H6O","O6"]]},"3cA":{"atom_surface_sha256":"da9d0fe39b7819a66d7baece180205ac93eef206fd491a5325ec18a60abdc54f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"8fe5c3ce6e59dba31e6e196d2daa1f0e9f0b84732801345f49001f55ac8192d9","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H4O","O4"],["H5O","O5"]]},"3cB":{"atom_surface_sha256":"d89b4675ab2769c01038a0d43533b94f25171509ea97f423856afd6cc6ce880c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"3dfaf4783e833ee7a1971d812bb1421e026ef139c9ecbcd69e7d808de904dd08","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H4O","O4"],["H5O","O5"]]},"3dA":{"atom_surface_sha256":"76ee0cc03c2b8b159b79eba892d7b28953c308fa860b64c7e7312f951c2c2233","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"48b4e38a02b8b5be306b13d550183639194907c2c70fac58a7582ebc25632c4f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H4O","O4"]]},"3dR":{"atom_surface_sha256":"03874f357d91769762b2e800666c7636e49c44e1e64112fc914a6fe77b9500af","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H21"},{"element":"H","name":"H22"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"c17ee54e8d5370bacdbd1b971d15f67f75b7c6394fb02c8a1a8a7d63684304e6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H21"],["C2","H22"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H4O","O4"]]},"3eA":{"atom_surface_sha256":"21af7bd59a3859c85aba160735a7e0b2a4df8d0872869703a87981b7fb86aa77","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b14682883efdee41a3e67696bec26da0cba1579fd153961c213f3c246fbd3889","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3eB":{"atom_surface_sha256":"eab87c5279ce1df54b8d65f348fc880ccce9e34e9d12cc9f75078ec3735ad5f4","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f349f44d6ebbadd4d96fb3da76642c8577c6422615fd9b752e254b731c13e58e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3fA":{"atom_surface_sha256":"810db672bb5a6143daa35e0fadf15a74dfe60cd2121b5f99ff18694f9cdc295a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"f1c2672fc7abf1da697433c187e901447842f77addae4bce768895f74e6fcc57","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H4O","O4"]]},"3fB":{"atom_surface_sha256":"d1fe4086f2776596673d3ef6bea03f824919e54c79d5a51f6fa93c79d3c59091","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"f65ebe325fee422526ca49fcbe1216dec84fb57f2e49c7c5b6cfb3fb1a1f09ae","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H4O","O4"]]},"3gA":{"atom_surface_sha256":"112302018ee1b3864d805f7942ba1cbf8c40f6fdce8b0defe5d48759f6d7c34d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c7953bb95d18739f1a76a3eee9854f583c5485be6202ee10f60c409cac6e821f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3gB":{"atom_surface_sha256":"361ae870b170c60cfcb50429959fb48fc56ac0f08b6277a4689bb511b5f350cf","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"714adec8936b33ff942723cfaff3ce447b1302a15f7f6fc9d751b235aac32fe8","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3hA":{"atom_surface_sha256":"795701c4e6616f0c50acd3ff113b9d9acde098c2d72475cd8c7a2c6c274b2d06","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"8b088bf7326d56692dc77aeae06628907299db983c37855b862d082f21863eb8","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H4O","O4"]]},"3hB":{"atom_surface_sha256":"0db50861efca1315ff6e61d9bcde491820af2e5f31ba24782d82b274121b1eee","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6M"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"879a8e86ad44520e846aeae50d5b61dd457bff7f187b96e2af39663d3d771d5a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6M"],["C5","H5"],["C5","O5"],["C6M","H1M"],["C6M","H2M"],["C6M","H3M"],["H2O","O2"],["H4O","O4"]]},"3kA":{"atom_surface_sha256":"251442679e6db32fdab46665f864dd43b9a0a1adb6c245e67536ef77b2246f04","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"091d9e58bc2f67ee4d93cbf693b397883bd07e9cdd4bc08bdfe49ffdd8e7aa5e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3kB":{"atom_surface_sha256":"43f99e7c6b0db42476f134291c67914c784d8da7e49c1192fd7b15f473d9bbe1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"2aa45380e32aa62707a5055de32345860b4269ac8b2e306eee7b28053b77475e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3lA":{"atom_surface_sha256":"a350489038fadb340231eeec10857bf7fbec0417df641e29fccc5a62e9787c71","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"8b958eccc8d2757967a5935d4067ea1779769e909b9eeacbf73923abba3ff69a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3lB":{"atom_surface_sha256":"a8f66e9febb5f74034c562f9d5885b325a3d89b5537c3c4aac4f390ea1d909f4","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a7f18e1be6a500b41361f67e926e0595a22b2ff4065921b2c09a34a5213629a3","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3mA":{"atom_surface_sha256":"9301d8cbb95fde13ba02000e09ded0d3feafdc1f14bc8174a0d12d87fbf44b5b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"be4bc58bb1203a83dd33915788888fd63c498667b4713d72110b8be497fa346b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3mB":{"atom_surface_sha256":"41a37bd3681dbd292bef272732ab2779532ddcaeec0f271b99eb761cdea5592f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"401a9a71abf361a3a9032b64919768c726092683aa53ab21e3ee2964fd7422ec","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3nA":{"atom_surface_sha256":"f9a57b5ceb6f2445dbc388521cf393270231b5cb1978611f92f3da000636fe6d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"77773e190c27f08163c5bb4397b8f3d2d832bef61897f6dab4192354ef2efa75","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3nB":{"atom_surface_sha256":"6d4d5b6ccc70e492941c20cc4d429cd6e71ce8a31e903417ffc9c41b6f62e862","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"45ff23be98af25a43e2c3e317bd6aa4c7a9e485d3ead2c11a6500c37a5f0519a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3pA":{"atom_surface_sha256":"91faddd3b503ca52bc392d94e10a2f12113f0f03619b467638dad2f65a05429d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0660435c28be62654add5e34fcf231f5b2122e70b80c1a23603079765906c90d","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H4O","O4"],["H5O","O5"]]},"3pB":{"atom_surface_sha256":"9cfff1f8ae15bd0bba4dd461f35b4063be3947077109bf558104173b4ed4d76f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"bd3ac995d6e20a1abe0f74af8f53ab8c333a98a5f17b315aea5e6a44a9910c18","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H4O","O4"],["H5O","O5"]]},"3pD":{"atom_surface_sha256":"0dd099116692bb1efb656e495278cdd975a63c44481c9d7c8f0c6ed31f6552e9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"cff1228ed93ea27ede9f4658701fa694c1d698489b59013e888004d5beb439dc","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H4O","O4"],["H6O","O6"]]},"3qA":{"atom_surface_sha256":"396d122c3ba91ff9dcc4ed671ea0427d3e633c78173deb31fccccd48a0991b46","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"426a6c7724d1f6a4f10afa618fc72d073516fd50988b8fc8bb189b6d50ee2b5c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H4O","O4"]]},"3qB":{"atom_surface_sha256":"d99829ca271c5c841408283ff6a91e558c0257edd32fd069f9cf6dbc0ad80839","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"c106f5a7cd18a7c526fac125d12d1bc137aa50f2e89d2f11cc9bb529c4802579","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H4O","O4"]]},"3rA":{"atom_surface_sha256":"fbd17be108618e3ff5724fb08a5fb046a011a08cc0b2a90491e5cf1a0e8af7dc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"f463e09545317c0aa1100576baace165b01b375210aca4326482c89737ad0d1b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H4O","O4"]]},"3rB":{"atom_surface_sha256":"da44ce0fffa91ab1625ecd223d60984e148a11b9e5450e00d9471067d10b9ee4","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"5df3c19432037259b39c6f49dc417a48d1ee5645303a1897546cbdfb67330550","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H4O","O4"]]},"3tB":{"atom_surface_sha256":"504b2cae0a90be609aba944eb976a13ff0853e722ad3cb718194fc40a4a89704","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"32454f7c1027af0672587e2cabbaf5cdcecdb9d68fbf6c6a52b240a1bdef553d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"],["H6O","O6"]]},"3vA":{"atom_surface_sha256":"1f5036791cce49464f500d4078c8a3f51d575132df81033285eea8846d05963e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d66044790719bbb4a8465f225d01ee4a55d092355221adfa9e7ce5f0278086fc","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"],["H6O","O6"]]},"3vB":{"atom_surface_sha256":"8f7741111f4e67fb0805d158611e21d0b3b526cc25e1f9fa209aa9fab45713f5","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"916566ae68ff60e852441de247760d31d5910ec47e1596e9478ff745d85071c5","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"],["H6O","O6"]]},"3wA":{"atom_surface_sha256":"9c579cdca255d23ee8443eeeb8f78655b44f9652806aefeeaf3cff068953c541","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"be79564007896f0f273348c43e3dd015455c48d3eca36ef505497a71cebe1ee4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"],["H6O","O6"]]},"3wB":{"atom_surface_sha256":"32160f56d61c8a43ab3da53b79d81196012d236c973ea3e9a856b592116b1026","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"032ad6ddb078feb7331ec8f8fd2c113b38e3979316a11f95fed0b4698b55c017","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"],["H6O","O6"]]},"3xA":{"atom_surface_sha256":"06345a31f46195f8f7cbf3fd042631158e9020da8d4832b57aee66d9b6d115eb","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"8d7177f0aea7794054bc8ce672ff3e1198b3689b6fef9d3858787aa400a7b5f1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H4O","O4"]]},"3xB":{"atom_surface_sha256":"3d2708f46e5029ef50f1dc7fc7aab8362744ca5bfa5572e2ac52c51f0f139c47","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d40772a919c3a796d95cac919d922d8335f20c142b8cc0876c0e9d4d5baac9ad","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H4O","O4"]]},"3yA":{"atom_surface_sha256":"0a4790e810290bcf5bc6e36875fc7fc3795a2454d50e0e5508e495234f92816a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"e52bdae16f379ccb01eb87c06d38418efb3e1efe71559ed27a596d29cf5cd14d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"],["H6O","O6"]]},"3yB":{"atom_surface_sha256":"fc09cad4fd9428a8fa52b7b9bb0a3730254873bf89d23a9f938fd5899b28a9d6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"965501fd276189b24cc8ec56cdd5bd7c1dd79e31f2e60fc33f98d7672261586d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"],["H6O","O6"]]},"4AA":{"atom_surface_sha256":"28a1b87483057a7772ccd2ab406db4ce53e8f4d5d0fbb968dcbfde8efc1e4858","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"fd607beeffc901099c0166f3c4d716aad0a7f879c800a71f8b034b0494023b4f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"4AB":{"atom_surface_sha256":"deb0853b64c2ceca07332c7935569244b1be5553b4cebeb34a206739c64dd901","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"f009d6b44f65234fccc6a90e4c47eaf1f53687f90df2c06f52248d3306a511e5","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"4BA":{"atom_surface_sha256":"1595332426407ffc8702e37e8309cc7d751420243f5506a4bdf4512371401a09","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6d6bd05a6f1bd6c2208e4b39188a50e3f21b28db03113e8ccd96e77582836f11","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H5O","O5"]]},"4BB":{"atom_surface_sha256":"906d1ffcdf7b6519d6b33d22c69fa0ec5d75def707a98e72e89277a4c9d2fed0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a6515c5a3e53fea5bc16af8d5195d9756d4338852b4c53ce44e3b8a5dcd20abf","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H5O","O5"]]},"4BD":{"atom_surface_sha256":"a8338bb5a5790929e5343853dde8756300fc9f02a9a1b01b1cbeea64a557501e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"e018cbe6f053b382e33fb28cc41f65e32b0ee9bc6ee2df8a723f11f187414c13","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H6O","O6"]]},"4CA":{"atom_surface_sha256":"2f649fb1c9f2569d9537c35afad0367e6d892a6795b912d1aaf693b8b203aa7d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"58552eac983c1100cd78cc9eb0ccaeb951a9c96af5d98432781490917d67fa82","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H5O","O5"]]},"4CB":{"atom_surface_sha256":"ac714e7544e84818ebb1a4280fab49586c0e767b4f219b5bd1d1c76cb2394ec8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"de044d450e2bce5edd57d5cee8ab1a1a50d6f40d1ed48ec4113c399ad0fa5a7d","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H5O","O5"]]},"4CD":{"atom_surface_sha256":"806ed856f0c9a0bad4453d8cf78a7c45df62e2d3ee8803f022b11d2a753e9cab","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"da5e5647828789a077669779a44275fa5f2cdf9f77e7864fd5d1f4da9e8b114e","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H6O","O6"]]},"4CU":{"atom_surface_sha256":"e6f6b3cec5e54ef43149a844796686125695d6f55b84cc14046e12cd7f06aaf7","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ce8ff352f8c57bbea29e7670da437337830101d093e509ed299dbffba19ae8de","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H6O","O6"]]},"4DA":{"atom_surface_sha256":"0508bb01d3d8247bf8c17b45c2e2adb6ad14c28c67b492c0b2412e0b877756e9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"f85bfcc2cf0909d530c95f794c9984a4ec26f04f604e9503259762a98bde8b40","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"4DB":{"atom_surface_sha256":"7447ab496f949be558af87b29710a08c4bbe97f87b65fa2a770de1ffd4d25cf9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"18a08969064fceae706dd9fad82607049c4ca5200de86df486dc1d2a04405cae","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"4EA":{"atom_surface_sha256":"861af30e91cc98196ed96dab2da3fb578ec8bbe9c33d980c7bcac7d12ce2995c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"00fa152f8a63481a506ff7efbab0a86f668d5abff6fbe8c3e6e63d3f656d483c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4EB":{"atom_surface_sha256":"42c16792f48e201474c8feddd34ec0bec05d2c11b608e71814ac5071a82a42f5","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"2709d9ecbdab88b623492b43f47b713739ce738e17292bf9b22c65fd544c0611","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4FA":{"atom_surface_sha256":"91bbdd8e86a3dd35ddd4a8e4840f80c58fb0df4231a1d652ee6cb266bf483793","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"fa33a8c38619f62c017d855e071ca97c3e773162c0fe0a6d1d56877228577e78","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"]]},"4FB":{"atom_surface_sha256":"778acf90af296f1b2ffa805c770d44c5f7af6b0829e12967d127afcb15c7ce5f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"c99210e61f76f2f097b671e0c2b12b79eee047c1a6bf90b586df2794fa43f249","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"]]},"4GA":{"atom_surface_sha256":"0207427c46870b19f38f00a86ff88390b1d5ae09e0cebc1e928bd5a6ebb7a426","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f568ae80beee41cbc56e3ec5d15f20c9657e69776d7e712fde261f421e4c4914","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4GB":{"atom_surface_sha256":"bfacbe1fd268cf4b8af33cf7f6a631b35ceee74425d453954836d56c55e6ebb7","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"2a555185efcc6f4b75dedac7df597d4b3705d8e4855265bc6e43f548f6613d92","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4GL":{"atom_surface_sha256":"71583ca71769cb090a4f20949e8afd53238c1f16614bc5b9e41bac2f6fe8047e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C5N"},{"element":"C","name":"C6"},{"element":"C","name":"C7"},{"element":"C","name":"C8"},{"element":"C","name":"C9"},{"element":"C","name":"CME"},{"element":"H","name":"H1M"},{"element":"H","name":"H2M"},{"element":"H","name":"H3A"},{"element":"H","name":"H3E"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5N"},{"element":"H","name":"H6"},{"element":"H","name":"H7"},{"element":"H","name":"H7O"},{"element":"H","name":"H8"},{"element":"H","name":"H8O"},{"element":"H","name":"H9O"},{"element":"H","name":"H9R"},{"element":"H","name":"H9S"},{"element":"H","name":"HOG"},{"element":"N","name":"N5"},{"element":"O","name":"O1A"},{"element":"O","name":"O1B"},{"element":"O","name":"O4"},{"element":"O","name":"O5N"},{"element":"O","name":"O6"},{"element":"O","name":"O7"},{"element":"O","name":"O8"},{"element":"O","name":"O9"},{"element":"O","name":"OHG"}],"covalent_bond_surface_sha256":"8ac1c3a00c8a9a1dc9011b33704363c8a8b8828c3a3186554cfe101c19bd9a4c","covalent_bonds":[["C1","C2"],["C1","O1A"],["C1","O1B"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3A"],["C3","H3E"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","N5"],["C5N","CME"],["C5N","N5"],["C5N","O5N"],["C6","C7"],["C6","H6"],["C6","O6"],["C7","C8"],["C7","H7"],["C7","O7"],["C8","C9"],["C8","H8"],["C8","O8"],["C9","H9R"],["C9","H9S"],["C9","O9"],["CME","H1M"],["CME","H2M"],["CME","OHG"],["H5N","N5"],["H7O","O7"],["H8O","O8"],["H9O","O9"],["HOG","OHG"]]},"4HA":{"atom_surface_sha256":"af285baef7fde5d04c7fb6cf0d0c62ee714b19ab599ba6497efbe60eb13314f8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"2951c211033298a231910db01ba11a11ca060e95ae58effeedfb77c430bf2e11","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"]]},"4HB":{"atom_surface_sha256":"36c158d9107624b17af831f26901fec15e91a8edf5e3237ae7096cbcb8a3a1fd","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6M"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"7d050ac87c99b37569f7fca5ca111b3a7db2568bc79ad4cd6185e5e3aa17a0c1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6M"],["C5","H5"],["C5","O5"],["C6M","H1M"],["C6M","H2M"],["C6M","H3M"],["H2O","O2"],["H3O","O3"]]},"4JA":{"atom_surface_sha256":"fcee52a630e937cd98c06311aaece2eadd7f0b4ca4a22138b94cdf1a5b8536b7","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"cf1b857fbdbded514f378df1565740f63b63bd60b53c7c1e50478fd8b774cfd4","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H5O","O5"]]},"4JD":{"atom_surface_sha256":"5de5a951305e575dfa38cc0ae26ea81a87a7ce803e3b0ea37a7fcca584c4e41a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0b0fd1fd35c85a77406104bbce24d795a2f5d8cb9976520bef5bc235d024048c","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H6O","O6"]]},"4JU":{"atom_surface_sha256":"dd182adc121909a655d12816af51d1191da2996755ebe9f4378e31a095904fa0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"8fcfde8b1ea50b054008485256fb53145c973b68a210d51b7519b60058e15cce","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H6O","O6"]]},"4KA":{"atom_surface_sha256":"d876f4713b7cd4d524d2c121b01837fae8961946c6ef52ac212cdf060494fd19","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"e9cc436a72c6661400c9d1ed1f9e5b17b59fa48590e7f2ef7492e6b2b0c7b53d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4KB":{"atom_surface_sha256":"b8a8b97c3b1555ef52cbf047aef917758b8d59cb96ea4b2f7b4233149a8df912","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"62a81c0a341ecae7602fae251acc782a3b31b8dd8028152eeadd1ab17dcd3ed7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4LA":{"atom_surface_sha256":"fcff2022161fcb00f8386cafeacd661302f5957712c92fb0397ed8dd72bcccda","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6f2ad28aaa372ac9ece197ed1e28a3eb3bd1f2cda31d4938511ec48fe34a2fd7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4LB":{"atom_surface_sha256":"dca88ac9446a051602605b15cdfd021ba65a576043652dac0bebca789e0e8c64","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"10f69c6d4cdaf2f3cc70e912f20ac2f53c796bc4111bd82675c5b80e47765959","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4MA":{"atom_surface_sha256":"067572791a02389f54ea0a062f961c59f606126e5d9f8baee1a4d5bd2a1c35f2","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"83ec3f4306b34f1088693fbc5dfe935977f5aae59bba2ed9a7a2bdf515c535d1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4MB":{"atom_surface_sha256":"8a2b8f87b3be74d256173d2bc8699c3e4b96df135c4e6114a8db2b2b511cc144","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"42cb8bc25c82a74a5bace8f2cfa75e3a6574d955d7ace54c60aa3f9adacf31b0","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4NA":{"atom_surface_sha256":"25afdc0c3564ffa186b775f5b9f8061b47ff07c5abd03e0250258e64d6a91d69","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6439bb2bea750979eeb286d823c75ddfedfb9a8aaf51d3f25c916711ff40139b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4NB":{"atom_surface_sha256":"769713c8f2b3293f9d95bb03fde7526c397b16c6997274abea0a2ec91e0f8b35","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0f3dfd08f7fcb210bf2bb4058294e224183cb62f876e41320d744bdd16f23de8","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4PA":{"atom_surface_sha256":"0f13f72271520ab5f45d8e4085bc013e71b9395545b14f6281973978aaac928a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d316b13fde50c9b39b1fd895ab3d1bef47cb91d587700a1a382bf069ea2c9d81","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H5O","O5"]]},"4PB":{"atom_surface_sha256":"ffdd548b076347dd56e2bde428dc282ae3ef85e850536cce8004f35aab548a2a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c4b837a32d52a62f321219c04e40be75ca7e8da21cdde32ff415efd3b21f7319","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H5O","O5"]]},"4PU":{"atom_surface_sha256":"7cb05bab399529da1aa22d5fccc7386e56569ed0e3e668952692c8bb2125e0e4","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ae0c4b0a65294fd23811422665222a300e2f4c1f087cfa50a686861a5f0fcbe6","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H6O","O6"]]},"4QA":{"atom_surface_sha256":"c6a17e170accfd5d287bb997db1da34e4eacbdac769f2d4f4b8a889f8bd111cf","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d21e22690af88fa036f52e9ff8957d9f9d43e86dd8a2c304e241172c48d18703","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"]]},"4QB":{"atom_surface_sha256":"23d17b9b1b24b3c180b6a5ce7245bf6ff7a8e2cdec344b2068e2de4bdb6acb0c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d87fb166016bdd2e577d51e48edba20be7dee9f84b0d32ba6dbb45a2f6eee2fd","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"]]},"4QE":{"atom_surface_sha256":"0bdf280510952095d5b2775532babb70a1e2f885c2a936f38b8078144ff82b84","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2M"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H21"},{"element":"H","name":"H22"},{"element":"H","name":"H23"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"7cf1e8a48ad763fa30c3e8172970424f82db9b669d26d76d644a7464b375dbb1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2M","C2N"],["C2M","H21"],["C2M","H22"],["C2M","H23"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2N","N2"],["H3O","O3"]]},"4Qe":{"atom_surface_sha256":"b606b1b9ecee90bc5fce283936eed8a94bab30d9697c985d0d52902c46419f82","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2M"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H21"},{"element":"H","name":"H22"},{"element":"H","name":"H23"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"1e3df73ace1928d761b2a185fa13dcf287c468e83c6bceef49596a08ec55b7b2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2M","C2N"],["C2M","H21"],["C2M","H22"],["C2M","H23"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2N","N2"],["H3O","O3"]]},"4RA":{"atom_surface_sha256":"603db2ad4cd9f7286e18530eca5098d0a98ebc58346be0e8d6a583dfbbbc86db","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"869eb618cf084f193212a30a98fb8fda1ccdb481c4b36a41e93f90d265935f13","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"4RB":{"atom_surface_sha256":"c7b6e845cb72fc4379c40a6a4174d323b4c3569070d8ee9da773924c15f61894","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"4638694128af1fe00b39f4ae9577d71ee2255890b34836356811928aa6db9f56","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"4SA":{"atom_surface_sha256":"87e4e27bf257032d44d16b3a5e274e50c37793a659dc5391d0fd7954cce2afe2","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C5N"},{"element":"C","name":"C6"},{"element":"C","name":"C7"},{"element":"C","name":"C8"},{"element":"C","name":"C9"},{"element":"C","name":"CME"},{"element":"H","name":"H1M"},{"element":"H","name":"H2M"},{"element":"H","name":"H3A"},{"element":"H","name":"H3E"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5N"},{"element":"H","name":"H6"},{"element":"H","name":"H7"},{"element":"H","name":"H7O"},{"element":"H","name":"H8"},{"element":"H","name":"H8O"},{"element":"H","name":"H9O"},{"element":"H","name":"H9R"},{"element":"H","name":"H9S"},{"element":"N","name":"N5"},{"element":"O","name":"O1A"},{"element":"O","name":"O1B"},{"element":"O","name":"O4"},{"element":"O","name":"O5N"},{"element":"O","name":"O6"},{"element":"O","name":"O7"},{"element":"O","name":"O8"},{"element":"O","name":"O9"}],"covalent_bond_surface_sha256":"82c3b1b2a31e4525de3333a0c4e83572fd3d53afb9ca2551ebb87a98fe6da985","covalent_bonds":[["C1","C2"],["C1","O1A"],["C1","O1B"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3A"],["C3","H3E"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","N5"],["C5N","CME"],["C5N","N5"],["C5N","O5N"],["C6","C7"],["C6","H6"],["C6","O6"],["C7","C8"],["C7","H7"],["C7","O7"],["C8","C9"],["C8","H8"],["C8","O8"],["C9","H9R"],["C9","H9S"],["C9","O9"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H5N","N5"],["H7O","O7"],["H8O","O8"],["H9O","O9"]]},"4SB":{"atom_surface_sha256":"f8e4c75b9cd89b9682d1ecc865779fda031452c86fac00877cc9dc676ad96f35","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C5N"},{"element":"C","name":"C6"},{"element":"C","name":"C7"},{"element":"C","name":"C8"},{"element":"C","name":"C9"},{"element":"C","name":"CME"},{"element":"H","name":"H1M"},{"element":"H","name":"H2M"},{"element":"H","name":"H3A"},{"element":"H","name":"H3E"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5N"},{"element":"H","name":"H6"},{"element":"H","name":"H7"},{"element":"H","name":"H7O"},{"element":"H","name":"H8"},{"element":"H","name":"H8O"},{"element":"H","name":"H9O"},{"element":"H","name":"H9R"},{"element":"H","name":"H9S"},{"element":"N","name":"N5"},{"element":"O","name":"O1A"},{"element":"O","name":"O1B"},{"element":"O","name":"O4"},{"element":"O","name":"O5N"},{"element":"O","name":"O6"},{"element":"O","name":"O7"},{"element":"O","name":"O8"},{"element":"O","name":"O9"}],"covalent_bond_surface_sha256":"c49bc887c98ae4223a43219a4a176b156dbbc6981f1fbdb4280a211ce75101a4","covalent_bonds":[["C1","C2"],["C1","O1A"],["C1","O1B"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3A"],["C3","H3E"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","N5"],["C5N","CME"],["C5N","N5"],["C5N","O5N"],["C6","C7"],["C6","H6"],["C6","O6"],["C7","C8"],["C7","H7"],["C7","O7"],["C8","C9"],["C8","H8"],["C8","O8"],["C9","H9R"],["C9","H9S"],["C9","O9"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H5N","N5"],["H7O","O7"],["H8O","O8"],["H9O","O9"]]},"4TA":{"atom_surface_sha256":"66a8d4c7147a6e913a6d80a8fffd3dfff3881353637d34f5b17931ec23e703a0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"463ff19c890bf9022f45d009a720ed79a97359dbf0e77a4fbb0fc47072491d19","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4TB":{"atom_surface_sha256":"e8d82d52319199f44da74430cef0e9ea48f90b5893bb5b836d3b40dc7de7b52d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7f501557c6ad71f3b67c75d91cbbb3878d4fbe87ee3154bc7dd2ac2aeda8e7a2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4VA":{"atom_surface_sha256":"9d10af46c6e8a81b3a69e32ddb6fc688984c4ea1174c000088f1335e03cbc275","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"40043fca2d007030f9d7c43a449a702d479dc9d650e6ea6a03d629e2420d557d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H6O","O6"]]},"4VB":{"atom_surface_sha256":"7d88fd9591e22bd5fe713e446ba7c0fbb63d6365b5d40fb4ab1dfb962c8a1e43","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d075660bcdd7a4ef938afdf00af1e950f5b5980c9f0f8a1f490b9e3757a49c89","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H6O","O6"]]},"4WA":{"atom_surface_sha256":"70b46726268cce30dfe9dcf83169bad4c0fa9de648bfafdc47510ca21dd4ec50","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"184d0488e7c30da2fd2792692dd4c8163d943f9882a2c17966a01de4507603a3","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H6O","O6"]]},"4WB":{"atom_surface_sha256":"4d0362abff7ebee1b50edd41b6a47fa04db5e4a7557261dbc145e8ac1efb6864","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c48adc1535e50257d10dfcbc81632a1d636ece1e0d75e1aed9131adf42a75f98","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H6O","O6"]]},"4XA":{"atom_surface_sha256":"253e19c4f0747396661cda4d6f052ab82c397a78b31918de5f1c8b5055558111","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d6bcf20d7e406bcceeb1e8e35ea7409aa4cd0bd6f811fae20ea68698f804c144","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"4XB":{"atom_surface_sha256":"bd89ba9ddba23cf616d41f52605a0b895829f34ee06d92788b2d3ee8b0a347c2","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"742d16930b7f3ac06877bb6547b08fd214817ed490b4094c90f7416f088961a7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"4YA":{"atom_surface_sha256":"6484aa06eec6da9518ed50da0ed8523c0a5161959f27753a0ffb0b9eea409435","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4fd46ffa6bf3496df6b30bb09d2d7113cb777c23da96d35e01bdf551fac6c2a6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H6O","O6"]]},"4YB":{"atom_surface_sha256":"2fd4ae8ffabbcc8ea3ebbc3e946bfe8bd2709f225ccfd134a5031bbffd59ffde","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d81540357a43f9247cff02869ac9537c003ecee2608f40864505b52bda27ac20","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H6O","O6"]]},"4aA":{"atom_surface_sha256":"e8d7a1054fbe20d03396dc70f77985139a2d792d2c9ca95fbdb9d343252131b3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"cc6f94de68e3c92545a6c10301f4d0d47afd2c9874d8b724d5f3d6c1a61c7d22","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"4aB":{"atom_surface_sha256":"0f10a3438efaacddfbc23e9ea60e50dacf46d373967bc6dd17d53e4aed26b121","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"bd3d630e57ae1f59d3bc5fff2da597800ecc5fdf969dfa703e3cdad737eaca5b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"4bD":{"atom_surface_sha256":"7547c580e1c43196c4f8468665f2957252f637248b9cca6a04349190642d9363","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f05cb50a44cc6ffe3eb4b34fac3e36162de8f5fe266db8b18932d3b788982184","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H6O","O6"]]},"4bU":{"atom_surface_sha256":"878d6f0ce7d4cf2cf876333cd975e477ac2e76878c9e03d9d8652e955b597f74","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4ef552ebff99ee26a8fa52138f32ad61262cbd37c847a8a458d65c9f00b3fd0f","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H6O","O6"]]},"4cA":{"atom_surface_sha256":"99efed71542adcf68e4390ffce7909434dce17837c633ff9683d3f8867654048","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b567d6eb863ab7efc30ca2f8e77cf579d5fdd660ced8164531aaecf2c4bba44b","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H5O","O5"]]},"4cB":{"atom_surface_sha256":"da265af507aafd8c7903501223ea14438f563c3dcada73b8c183abeff61d6edf","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"63fd88b56a27e146ebc506fa801f3d0994b3cda31aaa450243652d1f7f9e2729","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H5O","O5"]]},"4cU":{"atom_surface_sha256":"0796f90556668d6ef60d2ce902a85d5a14669cd7434787be1cafde469c20ea44","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c36cd3d61d02962f84ac7162073a72dd2e63eff28ac32dd384a4de77a0d9bc69","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H6O","O6"]]},"4dR":{"atom_surface_sha256":"8a593ec7e556754485fe65e583ff6847abdeb185b895cbbbe463a8304a2c9f05","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H21"},{"element":"H","name":"H22"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"add1a014bfe2a2d6ef945bb1ef2437f759265a3661ca6770fd350c39fffdd3d1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H21"],["C2","H22"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"]]},"4eA":{"atom_surface_sha256":"18d64fb219652116f311c27ec6f82d14aebbc7abf5614a10021519908f5109b6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"382747f6f4e666fab7b5adaa210d2a78155e4ba7306b388833a66eef285bb73d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4eB":{"atom_surface_sha256":"4a9a9e728e2d63ad6e8d8aa731bb6df919b448726d950fafd977938d00d93247","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6b8cf6936706231569bb242ba7fb0d6c0e8e67ce6602abbea14041e2565bcfa0","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4fA":{"atom_surface_sha256":"f16d6657ff6800480cd1e5b50edbf663a8f7d43ab778ba7b3b53d375ce1bd8d3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"8f872eb2286d0991783089d1306050692d5faff20fb7c7b74f4c1decda7a30d2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"]]},"4fB":{"atom_surface_sha256":"a059d49327a2ee3ca44d00f61c2a237418ae6538a021508a5b01fd6dad90e678","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"92ccdefa9aabbfc65d3be5228e0e5d2a8c6c1278b9f6f6abe1e91a9daf3c4010","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"]]},"4gA":{"atom_surface_sha256":"bd6334f51803048d4e06484ada30852f9ca1ec3339f1ce80b150ed1b7d297503","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"77c8c2c3682c7d3043c5a3a5a6b2830843e4dee225d99565473dfb0ad2a6f146","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4gB":{"atom_surface_sha256":"df1b01640a1808ab47c7c60b65336be60d44b0e3dd561ac332ad7ab60d1075ea","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"457b51c0eaf93654cd61369052f5242c990d844205292a7e28ee5ca8cc7cbc5c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4hA":{"atom_surface_sha256":"49450a3bdef230b00902428f0525fa37ec6989b5610e2287318df24e0d1750be","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e1ed45b30777b32e8c86031fabb7b42a99ffd56b9894d5922f7474fc1c988d2a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"]]},"4hB":{"atom_surface_sha256":"253ef0c717a10aba50758d02c7c76cd948c9e44b246bebb45c2e0e5ece8fd643","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6M"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"382eee403bc3cee1c4bdf298b8b46a137dc229f5793e12924c780ce8e224b751","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6M"],["C5","H5"],["C5","O5"],["C6M","H1M"],["C6M","H2M"],["C6M","H3M"],["H2O","O2"],["H3O","O3"]]},"4jD":{"atom_surface_sha256":"5b8d56beea8786db65939e93105d77990091a04240884670eaa8c4c01d9b6f3b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6fd0b84819d6086f1222d6eff2499d0d42cf165f2af7a998750c90172c104f64","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H6O","O6"]]},"4jU":{"atom_surface_sha256":"b00d8f362bab30b420c67770d26fa737d47a2a93447e47be71b98a6ac5f26130","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"2aa8db31d1eb84eabdea03fa12e4717ce0c840773ad8de2e6c38ed7fd521b1f8","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H6O","O6"]]},"4kA":{"atom_surface_sha256":"f9a8437c3f68ef4827c1ea8d59a3158317d87db98e9670c4e8624ab98cbf240d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"e577d29d1e49b4a270053bf11ba2888e2b31be67a94422bf0a6f44540b0b58a6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4kB":{"atom_surface_sha256":"9691665c96ad6f116d81d747361b708ae892cfd05bb63d609295c42e84d41bf0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"726d09d0eec5e2d50a29f2ddd66645f02dd996188a15e276737d2451628d85ee","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4lA":{"atom_surface_sha256":"41d953a371281ecb358ea34dee5e696862d103878bb01c811b9d8c5765c5000c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f7c33071925b9b6079e7d4e543bb80239005a4eae190bdb0c340502657bc7d30","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4lB":{"atom_surface_sha256":"79cda7a128bec8c138aa0f86ec06eb8548dbc59e02165ba81cbfdd3b7f4c8e94","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c4d2c9f90a3baa629fdf39c712993c10dc8ab8ab1b513077ef30100f47f0469f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4mA":{"atom_surface_sha256":"cce467a3b562afcfd63365cc1cf22211ec87a8fd5107dd6f0e5f4f0c685ded57","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0e5fe1b6760484012059be47e16bb3036b566765e73df173e69e94336bcbaba4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4mB":{"atom_surface_sha256":"a496ae94ac2b48f1c1ea936a1505de447978e3d224e35e465ab19742532723ce","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"e07a79d8b11ae8d99878a52fce8b1792428303c50a5830a2bd69433ba4cda6ef","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4nA":{"atom_surface_sha256":"5ae0bb2c5f0608fed00be74919e93d05fa1e7cfaf33322bcad7ab2d6020fbf78","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"289cf552233cdfbc1a70e122b5002b0f0e2a2f03aab47ca87eca4bc25d29d757","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4nB":{"atom_surface_sha256":"8666a718662dfcd87c48e2e0432f4af04a285f276a9155eeaee73f7c0a30dc31","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"cc6dc25bc5578c507fee853589673eaab27a377c41c2f188dc42da49edc3bcdb","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4pU":{"atom_surface_sha256":"c54016f1550a104862f8ad18c29ada75f7363b38f7013cdbb5d4d3c6f2399311","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"de16c18c22c64ce5ac23a7196a2b8d254eb34e5ca44153fe34a5331f5ce00b60","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H6O","O6"]]},"4qA":{"atom_surface_sha256":"97583d13f716df53d51e6413e9af881eea728736349f121905741f62eb1fc6b2","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"2e40b78651dad66c80c4bdacb53c3a525f571ee2161f418c56c7285a327ca2ac","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"]]},"4qB":{"atom_surface_sha256":"cbe1e845812232be603d9cd32858833457fe2d6abe223fb188a6220aa4ae048d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e7716cee109b1b0e53845eff94bf159a809e8523ffa11b07cecd43bc0d7f04da","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"],["H3O","O3"]]},"4rA":{"atom_surface_sha256":"2c498b16f8bbcf9175d2be1b46908f0ab9b029a6d7226840618b85bc5b4f9d76","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"2902f831406af01e1550919b7106786c1ccd972735dafb2ddee320cc017fd764","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"4rB":{"atom_surface_sha256":"8fba1b51ad61c1e1c79437ad87e1e8008108d635fab40b0a7f08c5e60bf4d8a4","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"f9358531313cab4d8496a3bfc4d1088fe2af633e961fb1c453cf78fd07b26b07","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"4tA":{"atom_surface_sha256":"c25168405ddbfcc1d9611863ccc9890365f69e79c454274f7dff839523d9ff68","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4e47f94f8863051bc4ff35722b8c9138ddf5bfe29bc32f5746389eae2e92ba04","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4tB":{"atom_surface_sha256":"a6ea0eb47079d9ef81fe597b2bdb4ad27937acd98f690b80eb1bd652a41dec74","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f19035ed92468844e02b22ca2784c7acc3da028f589d56abacf351734c021eeb","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"4vA":{"atom_surface_sha256":"6c433decbc64c5513feacf6333b2df853d2b8820a7f108a0cca5a4c2192fb3d6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4aa5e9236d5fcfe0f4dc9d108284bf859895668e197c287fd19036154e9da53e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H6O","O6"]]},"4vB":{"atom_surface_sha256":"9890da317baafe6a40964571884f97187eb2ae6801fada3b92ad40419246c56e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"8492d309d57f34a104cd01e75ae21ee4517a605af4880893e996be476e135f13","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H6O","O6"]]},"4wA":{"atom_surface_sha256":"978cec6d136ed870316664fd47a282790cb4995e9f578adb3ae03772a66fab22","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"1b69b0cf6c58342ee57a5192b7cbd3f84e0b205b1416542a76ea16fb0cc0fb99","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H6O","O6"]]},"4xA":{"atom_surface_sha256":"12d400270913aaa9ed1ee706e5348c357559a062fec6809176c054dbf7d2677e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"4e95ccea68191c3a033f0ef47d0103a2afa20c011459fcfddb92ab42e501d354","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"4xB":{"atom_surface_sha256":"77aff9b030e203c2496b357c6bfcce6f2048092e443f1cb30f6a85326aec12ee","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"70a04f61ab91a95ca8937734d5dde99ea5c30c20b159cbddb0e923257c762ed0","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"4yA":{"atom_surface_sha256":"a57f9ef607c85d9f7839098caec63019fa156bbc82e46e69c7f33bb6955e8a6d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"79f183fb1a1871416b16382f1a154c777cb5bdc49a4aae7ce6601e12df8f714c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H6O","O6"]]},"4yB":{"atom_surface_sha256":"1305b3a532d131170dbd3c3d23cbc0f17d16c23082f5c946bc6211296bd7eb9e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"3255b6d02eaa848bae47aaa2e1b2b99c9e39098da5dee8f83bb29393436d18f7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H6O","O6"]]},"5AD":{"atom_surface_sha256":"644f532a8ce4f25a35b3c6bc1bfb7fb08de7c19ddebb57a016b7d09c5f4fe5ad","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"0fe64a9e17614c806803b0054a5fe36fb3d45653fe74c748dd37cac5d281f129","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"5AU":{"atom_surface_sha256":"c6ef2c97b7d90f910cf72e38f56d766cb9dd82abb0187706678e534db9453b7b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"767f1da1feac68e9bfedb3d97f0113ebb89d534fc0400bb9c783cca8a3efbaff","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"5CA":{"atom_surface_sha256":"ad99cb3c33a72fc4259f773a2318081087b6ba5cc7cbc186fe046d60867ca81e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c5e81159face4042baefde55e891458e3a236bf00554274249ca4a2a3c676afd","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"]]},"5CB":{"atom_surface_sha256":"b44043403d7392b82821306f6f0440181e6e6bf72fab74b8444f68d0c1f0b747","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ad9e02ab41ff1ca6442fbe07f387f0eb78a44c9a033b996f1571a02e790d1088","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"]]},"5DD":{"atom_surface_sha256":"c2c7e609aa41431db6f9a7e704f5f8291e3792c7905e17f805c2ecf459e31608","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"f31ee3b1f831b39f30c9b4eeab73f49f44f7c9aa0f2a95ccb470347d68f9df00","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"5DU":{"atom_surface_sha256":"b471633cea9d955b79b37c3ab969c1d48755fc2bf8c9981fcf5672465b6bd2ca","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"737c9c922d38149e95b745c1f477837423b740cc837b6a30a971e8c5ccbd1f6c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"5JA":{"atom_surface_sha256":"af23eaae886997620362eba05fd17981b154bd3a2f1e2629faf921f6b4313277","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5fc79bb0898913ecf0d3bec66bb871079d8b5f285d17926ab00aa88c2882b69c","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"]]},"5JB":{"atom_surface_sha256":"ae0fbaf5d686db1637b59c78480e6ecb8d69a87624759d9c3db638138105877e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5e2a52dd47da638cacf6cb7625aec85de97aa76d33fb839c72722006c7749c0a","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"]]},"5LD":{"atom_surface_sha256":"b220915284ebb0776c17a39f968d6ee44c6a0d51296a1ca88bcb87788022acc1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"923c31d8ee157d4ca5a68275dd8d08fa98d30f5f63da320547e0075fd9d2c965","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"5LU":{"atom_surface_sha256":"ddf70ba492557694a886e703c72f20e85b9f2dbc1978482f3595aa529e38a843","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a8e0d401930f4257845104d43acc56ebd69aa4de74f753d0a89eeb4f717ab066","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H6O","O6"]]},"5PA":{"atom_surface_sha256":"f60c9642a04522df276e0a6df29b0904e397ebf2866ad8ce84421d2def59d08c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d8f9702cd6ae5dd504991dea32b0d565d148ec98ef2705d022820269184169ea","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"]]},"5PB":{"atom_surface_sha256":"351b1ee99feadb385f90d876cb7c543630052b90890558358987e1263be4a16c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c4abf2932bf1b26eb593b7aed6cc2016d2cb5bd16c3e1acb0bea9f687dda614e","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"]]},"5RD":{"atom_surface_sha256":"330f0fb1315a6f513e709781322ba51a703334181ff69368ab7ff4347b3f4bc3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d876301f5f27ced358609ed97c2520334f3525d5db26c543970c77456af1bd23","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"5RU":{"atom_surface_sha256":"f1a4d5423f7dc8ffaebe56159db6a2afc83de83c86305b9efca0ea41bd5a6c3e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"2be0799e28854aed67c20ac9a04c5a5f2ea4044a30a32996ab4ddadb64a593c0","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"5XD":{"atom_surface_sha256":"ee1de656fa1a11ac2aa7fa505888167e2b28628572374027093a119b18d9e0ed","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"9610c5f2137046ed19956523901ed156cb4de2ef3110d35be770686d68246dc2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"5XU":{"atom_surface_sha256":"8bbb0a8127d762ca5d7b0f02f1ac4e2415abea03ac489d03275da6d04ff83a06","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"fbfb64975c5991b669ec19fe85cb72d8359751b43c79b61eb7a7dc83085463c9","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"5aD":{"atom_surface_sha256":"eade86ef9f55ad7419002ec5df5a0621f12856eb497cce0f6081bd343e70ed3b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"345241846c5cee383489d5fc5cc2e87d8f2099f39045129c18b6489a41ea2f64","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"5aU":{"atom_surface_sha256":"8cb6d2d2a9b780e6997d9dbf0cbc2da231f9842e60ffe707e8c9a27a91e2caee","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"8bf448466fc4314a62fc2c8be2ab5ac89c7fde2a74d27316f71879de1cd79b24","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"],["H3O","O3"]]},"5bA":{"atom_surface_sha256":"3b85648709dce9e7561001fc886ce794d4da435b18e3ed7b8f43de0060f7e19b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H6A"},{"element":"H","name":"H6E"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"59056b18e8c11774655e908246a752488ebf646a3e9cb339bc3124f1dcee88ab","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H6A"],["C6","H6E"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"]]},"6CD":{"atom_surface_sha256":"dfd1636382e3fed799a49bc890f89db2300d8af0aca1ab12571fbe80cb13f238","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6929f31a92cd0e1911309475cfd9821b4d5d6b6c8fe43d7ad713509d2c47d40c","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"]]},"6CU":{"atom_surface_sha256":"edc2f2a84f9bd15ce1b4f47b54b81c68ea239ded22b43d0f03d067de1dd364f9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"2b49d780d437a0d77c9c53db3dea9887173a1b74dc62a0080e92a1a2deffab0f","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"]]},"6EA":{"atom_surface_sha256":"788cc62c85695ab8e19402599d2485ce5d84f3f2e681000ff7e9d8bdd477174f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c12bd6541a80d2c1cf8c653ede1c7414a4269498348eb5537d357505b79ff9e0","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6EB":{"atom_surface_sha256":"554653cf27a9120933c059e87790f86a31d7fdb446ae772a087382c98e2a736c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ef5a70999b2e6152a3d5b777aaf5efaabfabfc3bcdbc6c38fb08b94e2a9dc2d9","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6GA":{"atom_surface_sha256":"3b655c8c7d385e174edb49b295d92a180d233858286ac754d9d96f8d03893079","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"634471ae67f34cafa5b1065f6cd4c0b140b0957433b53acb6df23c8ae73361f9","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6GB":{"atom_surface_sha256":"5fdd478432f2792f14c758480f4cf31b3c89c736751d39433228217f9545ce0f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ee49f7c5afdf677ed12add4920c8d83e57b70045eead8a45491ba6064da6c27d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6JD":{"atom_surface_sha256":"a4a6dcd205eb69f729cb9a2ba4069b909158edf22bcdc8531e98516c89b9e529","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0a7289833d65d2e1c21bb9ddbcd0e6653c82fcbf200d48fa0bd5ee287c889e87","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"]]},"6KA":{"atom_surface_sha256":"4808d1e719d9762007eb66cb665bbc968d0f07858ff9cf495005b696dcd8c1c3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c5b28f6e85387e2a5c6c63176dd31fba88ab979436a69fd31e0e654226e50b06","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6KB":{"atom_surface_sha256":"61372dd0ce8008b0926366d82bcb97d00bb87f86989a9ee1999d20660894a9d7","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f85642eb91076c0c94cf3a5cec32821e057eb2afc1b5d51df5cd915cd82f3a5a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6LA":{"atom_surface_sha256":"40248234079ca2c7e5a811d48d8638704d16434f4071d37fbe025f456f151aff","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4222384945aaa7090eba12f42ed725accca6da201db4495270479f90a9c1b08c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6LB":{"atom_surface_sha256":"b3d75c35b23887c17102a02575271e53f38ab52ad6296750b52b56b7dd38ffda","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ed3d99d533a23854fb3beccaf1239fb20cba1f822ae6760924c72b2e078f22f8","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6LD":{"atom_surface_sha256":"307a08e3a676a0a0f003faa97223b95269dd7cca81516323d327b1e0dd5736a8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"fb7fc261d3c50794fdfaf9ddc7b8547489089f1f2bf9e7d6fefb66192b811070","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"6LU":{"atom_surface_sha256":"213dd40c9ad3258d8ec1afeda0ffffc57fef0a6df03730ec1bac90612ae5e55b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ea7862f76926bf1706cf714471d01af94ebc7c3b5a709eb4c18077eeff822c7b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H5O","O5"]]},"6MA":{"atom_surface_sha256":"e8f3826e730bed1c9e20b458462b52a9a5926433b216fd0f932159ccb3bf1657","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"17fd72548555264013c07d24323909c2f7659753784b3dc24a2ba3443651d02a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6MB":{"atom_surface_sha256":"b31f84309b2ac8ebdb7fea8ca39383bc1d22b61b589b892aff0dfe52daa835be","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"8c5703e571af73cb69c64b06b76d1b2809079103e951647a08c663f625baf49d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6NA":{"atom_surface_sha256":"a448df01f698aa2342a04912568ddda5aedd83364f59d21ee96576ecd3cf4192","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"8bbbfa5710fc5bf1beaa01537103c796d999f14ba2cfc95eec158301f222a5d6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6NB":{"atom_surface_sha256":"48b2e21b7f4291798687f09fd9217f16fd889bc5e546cf59d277140db2e3fcfe","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7246a8d6dd59273b3317e8213927314e450c66d1bcec98f8c247f49e645a9886","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6PD":{"atom_surface_sha256":"1cf516e058d608f9e5e1df6ff3e5c6a0c26345efbf4955a60f5c53c7ee0d5186","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c94e5a87cd979d64438f0130ab12eba3511b786bdb9217b8b83d1e0be9603356","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"]]},"6PU":{"atom_surface_sha256":"a908e252f668f6fe0f6f53b13c641979213b812ed02880a816aaafb1d1d232e7","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"bdc79f50bf1f3a09fcff4ea3816563272a8229f3c039a0aace04ceec9cc56f11","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"]]},"6TA":{"atom_surface_sha256":"043a5be2c24f6998dda3c865a8a5b430d98a4920358beddc700fba549410677a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4ef0b31f0514b62087e943c2d75713eca0177f3fd5b3d83cbcd222855c4e444f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6TB":{"atom_surface_sha256":"5c6d3d79745ea5cdc5aadc5a434b21c3dadc017cc714626fdbf33f7469f0b079","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"953679e5432f9b18ead39fdeb2454512c0f155eff735373d31de07b81a4b11de","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6VA":{"atom_surface_sha256":"bc003e51158e5cf74923ff885608705d7151c7fb4e2505054e6b397275fb3c3a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"bf0a0e3722a6861fbbcad518d082b228c94dd0f31ba868b033d886a200b708ed","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"]]},"6VB":{"atom_surface_sha256":"2236ffb59013af7a121ffa1803c51301e506373b8c23822e9b01ab59b059edd1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"e49852e325581f937c1715ada74c13acf5a1009212f59ea95a02cbf86ffde145","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"]]},"6WA":{"atom_surface_sha256":"d8020795acb2c01b7e7df990a22315cefeb766d0909d1473ad5e7a1acf9353dd","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b9d6f7b0eb4d0e6c535e3becac8a459834bde21a3dc7092b08a4c045cb15c30d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"]]},"6WB":{"atom_surface_sha256":"082b3f1dc6d8faee4663755bf0bd3ad84150b7b84a52af242c9d992f79e9fa7f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d940f1ae735a14a7d506a6cdef6721f3a9d451c253d3e838b825613921bc5b7d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"]]},"6YA":{"atom_surface_sha256":"77fba6f13c0c583162b890e687badbaba97c21bb6019e3ed55435397d97c2981","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0b69e2c9e510da0c1a9e490316a8a61103922036b5c4d93a6cce5367a41e2110","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"]]},"6YB":{"atom_surface_sha256":"7f6af0f89f77b590304949dfe59d810e815ae48a1d3b731bba3e48af2e7d537b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5225f1684f08db815b046786385dae5e92320e7dba264af52bd958928410e2c2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"]]},"6bD":{"atom_surface_sha256":"e0e6aac8c9b2a09cc66b9e08818db2a92dfb4c89a046993921ae9a61bcb68e45","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"dc1660d7755fa6a696cbe60a84394bd5904d1b7e371b8008c49e8cff66a84b41","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"]]},"6bU":{"atom_surface_sha256":"0641b85b8a2df30f193d4200b443f87c7cc72e22a955bf0a17dc2a657c382ddd","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a99d2465dc5e4c505e37b1f882f52efaa2b66fb88295027f3ca6cc67893be95b","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"]]},"6cU":{"atom_surface_sha256":"7cbd2c814e5112f5696f7dd62c5834782a68f382151908b411d17d5c5c97600e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"be4e882ed3a3038dbd2f5e80a2405482679299e2366b52bde4ef3a3e9e761129","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"],["H4O","O4"]]},"6eA":{"atom_surface_sha256":"4ec95b305a9eb7cf030b5d8b58b6cb7c80808fc41fab1baa878a0429d97b4cfb","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c2c74fdb6882a8c6246c155bbfad03a7799ce4b15ce049a47dcfb121b0c0f401","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6eB":{"atom_surface_sha256":"350442c0fb40bb528996e1b046e92e05a5e78ba280c83d2dba4d13e3014c5c62","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"abab27da58cc0e87f3774e132aabfbb87f2aacc393efd81ce4f5e673452b7309","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6gA":{"atom_surface_sha256":"822695164a7748fe2e3499f26ac58fcf52aa94b28f86c76aff32f5d8c4289182","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0589633ebbd8011733d23dbce6c16ea19d797c1e5b5d09f77297bb85d1b60eaf","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6gB":{"atom_surface_sha256":"d925e60bc8052a793290b27d8de48003098b81802246e25b19b0514a7e560c0a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"1d0d7f43a64b48f4391054213c0d6a57690bb562761ff30c9f23cc527e6f1edf","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6kA":{"atom_surface_sha256":"0c0e7433ca1fc13a2d9e44eda8065274efaf5b9c54351460fed5f803dd5b7ce6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"51b94a4f7ce487ce2a0aa3dfb186a682e245f27a91926f0b097cd64fd3fe90a0","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6kB":{"atom_surface_sha256":"282f4385be321171cfd04c8ec5964fc9bd5b6fc0965b7cc29ff6a7009497db26","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"13c4acd2bacc4526d6ee5ce0fd89e49d76202f3c4b651f0b6f15f96f6c9236a9","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6lA":{"atom_surface_sha256":"8f3cd43e73f4df2a10929d9052e62e3a1eea46044f26711491d7ec49b54ea748","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"e44fd23366e023d9c89284f3847ae475c364f93e8aceb44e8e19ef389f31fb31","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6lB":{"atom_surface_sha256":"f9ed007f72409cc7335cc106d045552213cc36b313b3dc5d1af579caae14a8ef","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"bd7983e64ef3514c73147e8ba92bda8fe65680e0d14bd008f474fdcd7b22ec7e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6mA":{"atom_surface_sha256":"7264f6476dfd51ca79e2cf72c96c2ad3afeb95bfd36a42e512a5129b42520494","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"bc937cdb15458cf9ff2e03712fc44f9d0a67be15a8b06cda03c041a055fd642d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6mB":{"atom_surface_sha256":"1b9420d846f27e34f410ad69c38c27c4cd625787d86abbde340a831fd0c62232","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"8b7c5e08d9e3bd46edc03445170041221912d68ac5c23cb066a50d2f37d4dd4b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6nA":{"atom_surface_sha256":"554a1c1d0207900001e14d578764ac81751e2e2299991a0fe9c69517883d02aa","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b1f1fe83085a9d3851991e162bb1a0d497b78675020384a6bc6a6e3b9a9e836e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6tA":{"atom_surface_sha256":"05bfcca3741a49c750fe50ec639db5cbc6ef7627bd6295275b718d8cca4ef86f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"cb88ab8d43759424f1fd9c9642db928d699b3ac502288abb77c60089b1258727","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6tB":{"atom_surface_sha256":"92b8ebe0e80e9a2af68479e6bde1f81be85d49955923b5648d9ee8744acbdf24","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"128eb79a67591cee8aac4af58a9b851a5552b24ad2512e46480e61c515f0a116","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"],["H4O","O4"]]},"6vA":{"atom_surface_sha256":"8da6adf635c29595671917bd0556b5ce3c5696f606283f524865a52dd7d58bdc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a1940dc13c5ff6c35f534f7a84bbb1a9b390e2d9c64b651c77cf8b12ec7e2fe9","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"]]},"6vB":{"atom_surface_sha256":"f2523dcb3d2b95c44d9c07e6842f66b99b785f0d3465c146579b286b7d4c1595","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"cb3eaf8c7ac692b2aeca12e5a169f869389a27583b44839322f7700fbcb2540b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"]]},"6yB":{"atom_surface_sha256":"8bf20eff0b8150ec34651332e919ea808263990ec1a2ce97112d1b807eb6dc75","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"55ae1b5b92a5e30869541a670befeb5987ad36946c2f36baa9a06ac44b864170","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"],["H4O","O4"]]},"7SA":{"atom_surface_sha256":"1369e936094c978048d2e3c7ddd282099c438b97ea4d6227876e088b64143146","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C5N"},{"element":"C","name":"C6"},{"element":"C","name":"C7"},{"element":"C","name":"C8"},{"element":"C","name":"C9"},{"element":"C","name":"CME"},{"element":"H","name":"H1M"},{"element":"H","name":"H2M"},{"element":"H","name":"H3A"},{"element":"H","name":"H3E"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5N"},{"element":"H","name":"H6"},{"element":"H","name":"H7"},{"element":"H","name":"H8"},{"element":"H","name":"H8O"},{"element":"H","name":"H9O"},{"element":"H","name":"H9R"},{"element":"H","name":"H9S"},{"element":"N","name":"N5"},{"element":"O","name":"O1A"},{"element":"O","name":"O1B"},{"element":"O","name":"O4"},{"element":"O","name":"O5N"},{"element":"O","name":"O6"},{"element":"O","name":"O7"},{"element":"O","name":"O8"},{"element":"O","name":"O9"}],"covalent_bond_surface_sha256":"59796c1fcc32da07a05776713109a5491dad92c9cd7f3d817a2c8dc761b2b438","covalent_bonds":[["C1","C2"],["C1","O1A"],["C1","O1B"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3A"],["C3","H3E"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","N5"],["C5N","CME"],["C5N","N5"],["C5N","O5N"],["C6","C7"],["C6","H6"],["C6","O6"],["C7","C8"],["C7","H7"],["C7","O7"],["C8","C9"],["C8","H8"],["C8","O8"],["C9","H9R"],["C9","H9S"],["C9","O9"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H4O","O4"],["H5N","N5"],["H8O","O8"],["H9O","O9"]]},"7SB":{"atom_surface_sha256":"2a6e6d2ebbcf131ec6bbbc6b9a54b7b98c0aff7245ea7c76e24b0c3e85b565a2","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C5N"},{"element":"C","name":"C6"},{"element":"C","name":"C7"},{"element":"C","name":"C8"},{"element":"C","name":"C9"},{"element":"C","name":"CME"},{"element":"H","name":"H1M"},{"element":"H","name":"H2M"},{"element":"H","name":"H3A"},{"element":"H","name":"H3E"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5N"},{"element":"H","name":"H6"},{"element":"H","name":"H7"},{"element":"H","name":"H8"},{"element":"H","name":"H8O"},{"element":"H","name":"H9O"},{"element":"H","name":"H9R"},{"element":"H","name":"H9S"},{"element":"N","name":"N5"},{"element":"O","name":"O1A"},{"element":"O","name":"O1B"},{"element":"O","name":"O4"},{"element":"O","name":"O5N"},{"element":"O","name":"O6"},{"element":"O","name":"O7"},{"element":"O","name":"O8"},{"element":"O","name":"O9"}],"covalent_bond_surface_sha256":"08aa2f37c75008b85708738727c68cece4a3f54355df733eff16c78a67b3cf99","covalent_bonds":[["C1","C2"],["C1","O1A"],["C1","O1B"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3A"],["C3","H3E"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","N5"],["C5N","CME"],["C5N","N5"],["C5N","O5N"],["C6","C7"],["C6","H6"],["C6","O6"],["C7","C8"],["C7","H7"],["C7","O7"],["C8","C9"],["C8","H8"],["C8","O8"],["C9","H9R"],["C9","H9S"],["C9","O9"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H4O","O4"],["H5N","N5"],["H8O","O8"],["H9O","O9"]]},"8GL":{"atom_surface_sha256":"cd7604951c01f0619ef83b30c584152dc0eba90666cd234d3c405da12c141763","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C5N"},{"element":"C","name":"C6"},{"element":"C","name":"C7"},{"element":"C","name":"C8"},{"element":"C","name":"C9"},{"element":"C","name":"CME"},{"element":"H","name":"H1M"},{"element":"H","name":"H2M"},{"element":"H","name":"H3A"},{"element":"H","name":"H3E"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5N"},{"element":"H","name":"H6"},{"element":"H","name":"H7"},{"element":"H","name":"H7O"},{"element":"H","name":"H8"},{"element":"H","name":"H9O"},{"element":"H","name":"H9R"},{"element":"H","name":"H9S"},{"element":"H","name":"HOG"},{"element":"N","name":"N5"},{"element":"O","name":"O1A"},{"element":"O","name":"O1B"},{"element":"O","name":"O4"},{"element":"O","name":"O5N"},{"element":"O","name":"O6"},{"element":"O","name":"O7"},{"element":"O","name":"O8"},{"element":"O","name":"O9"},{"element":"O","name":"OHG"}],"covalent_bond_surface_sha256":"aa07991fd19f6bbec1b57fcbefa3aada758796b4ef0a60934ed429468150523b","covalent_bonds":[["C1","C2"],["C1","O1A"],["C1","O1B"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3A"],["C3","H3E"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","N5"],["C5N","CME"],["C5N","N5"],["C5N","O5N"],["C6","C7"],["C6","H6"],["C6","O6"],["C7","C8"],["C7","H7"],["C7","O7"],["C8","C9"],["C8","H8"],["C8","O8"],["C9","H9R"],["C9","H9S"],["C9","O9"],["CME","H1M"],["CME","H2M"],["CME","OHG"],["H4O","O4"],["H5N","N5"],["H7O","O7"],["H9O","O9"],["HOG","OHG"]]},"8SA":{"atom_surface_sha256":"df81e55143d9f62b569ae26550adf011db2abbff917f4e8e598355869a73bc66","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C5N"},{"element":"C","name":"C6"},{"element":"C","name":"C7"},{"element":"C","name":"C8"},{"element":"C","name":"C9"},{"element":"C","name":"CME"},{"element":"H","name":"H1M"},{"element":"H","name":"H2M"},{"element":"H","name":"H3A"},{"element":"H","name":"H3E"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5N"},{"element":"H","name":"H6"},{"element":"H","name":"H7"},{"element":"H","name":"H7O"},{"element":"H","name":"H8"},{"element":"H","name":"H9O"},{"element":"H","name":"H9R"},{"element":"H","name":"H9S"},{"element":"N","name":"N5"},{"element":"O","name":"O1A"},{"element":"O","name":"O1B"},{"element":"O","name":"O4"},{"element":"O","name":"O5N"},{"element":"O","name":"O6"},{"element":"O","name":"O7"},{"element":"O","name":"O8"},{"element":"O","name":"O9"}],"covalent_bond_surface_sha256":"2df5e8c576914780259a2572d9f9c3cc528c1cced1740a58d93d0c696477977c","covalent_bonds":[["C1","C2"],["C1","O1A"],["C1","O1B"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3A"],["C3","H3E"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","N5"],["C5N","CME"],["C5N","N5"],["C5N","O5N"],["C6","C7"],["C6","H6"],["C6","O6"],["C7","C8"],["C7","H7"],["C7","O7"],["C8","C9"],["C8","H8"],["C8","O8"],["C9","H9R"],["C9","H9S"],["C9","O9"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H4O","O4"],["H5N","N5"],["H7O","O7"],["H9O","O9"]]},"8SB":{"atom_surface_sha256":"d9882465e425e0d0c7cdfd7791d66e6a4e0577d5c36a6fabea03077b90990cb8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C5N"},{"element":"C","name":"C6"},{"element":"C","name":"C7"},{"element":"C","name":"C8"},{"element":"C","name":"C9"},{"element":"C","name":"CME"},{"element":"H","name":"H1M"},{"element":"H","name":"H2M"},{"element":"H","name":"H3A"},{"element":"H","name":"H3E"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5N"},{"element":"H","name":"H6"},{"element":"H","name":"H7"},{"element":"H","name":"H7O"},{"element":"H","name":"H8"},{"element":"H","name":"H9O"},{"element":"H","name":"H9R"},{"element":"H","name":"H9S"},{"element":"N","name":"N5"},{"element":"O","name":"O1A"},{"element":"O","name":"O1B"},{"element":"O","name":"O4"},{"element":"O","name":"O5N"},{"element":"O","name":"O6"},{"element":"O","name":"O7"},{"element":"O","name":"O8"},{"element":"O","name":"O9"}],"covalent_bond_surface_sha256":"7cb4a3ccd02b8fdafb5a8f1fbd044b675497d550a593507b5044c5f16179be65","covalent_bonds":[["C1","C2"],["C1","O1A"],["C1","O1B"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3A"],["C3","H3E"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","N5"],["C5N","CME"],["C5N","N5"],["C5N","O5N"],["C6","C7"],["C6","H6"],["C6","O6"],["C7","C8"],["C7","H7"],["C7","O7"],["C8","C9"],["C8","H8"],["C8","O8"],["C9","H9R"],["C9","H9S"],["C9","O9"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H4O","O4"],["H5N","N5"],["H7O","O7"],["H9O","O9"]]},"9SA":{"atom_surface_sha256":"825691f1c435e4384c22dde97ea4ad89dbdd722f2deaccd67007f586412593c3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C5N"},{"element":"C","name":"C6"},{"element":"C","name":"C7"},{"element":"C","name":"C8"},{"element":"C","name":"C9"},{"element":"C","name":"CME"},{"element":"H","name":"H1M"},{"element":"H","name":"H2M"},{"element":"H","name":"H3A"},{"element":"H","name":"H3E"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5N"},{"element":"H","name":"H6"},{"element":"H","name":"H7"},{"element":"H","name":"H7O"},{"element":"H","name":"H8"},{"element":"H","name":"H8O"},{"element":"H","name":"H9R"},{"element":"H","name":"H9S"},{"element":"N","name":"N5"},{"element":"O","name":"O1A"},{"element":"O","name":"O1B"},{"element":"O","name":"O4"},{"element":"O","name":"O5N"},{"element":"O","name":"O6"},{"element":"O","name":"O7"},{"element":"O","name":"O8"},{"element":"O","name":"O9"}],"covalent_bond_surface_sha256":"5e016e41f88a94e1b9678dca85984ab5e334d7598f5dcb84c5aa3347d6630831","covalent_bonds":[["C1","C2"],["C1","O1A"],["C1","O1B"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3A"],["C3","H3E"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","N5"],["C5N","CME"],["C5N","N5"],["C5N","O5N"],["C6","C7"],["C6","H6"],["C6","O6"],["C7","C8"],["C7","H7"],["C7","O7"],["C8","C9"],["C8","H8"],["C8","O8"],["C9","H9R"],["C9","H9S"],["C9","O9"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H4O","O4"],["H5N","N5"],["H7O","O7"],["H8O","O8"]]},"9SB":{"atom_surface_sha256":"329e53375f96ac32c40e3b03e1937b521b5b475e1dfa7db83392d1fa29716422","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C5N"},{"element":"C","name":"C6"},{"element":"C","name":"C7"},{"element":"C","name":"C8"},{"element":"C","name":"C9"},{"element":"C","name":"CME"},{"element":"H","name":"H1M"},{"element":"H","name":"H2M"},{"element":"H","name":"H3A"},{"element":"H","name":"H3E"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H5N"},{"element":"H","name":"H6"},{"element":"H","name":"H7"},{"element":"H","name":"H7O"},{"element":"H","name":"H8"},{"element":"H","name":"H8O"},{"element":"H","name":"H9R"},{"element":"H","name":"H9S"},{"element":"N","name":"N5"},{"element":"O","name":"O1A"},{"element":"O","name":"O1B"},{"element":"O","name":"O4"},{"element":"O","name":"O5N"},{"element":"O","name":"O6"},{"element":"O","name":"O7"},{"element":"O","name":"O8"},{"element":"O","name":"O9"}],"covalent_bond_surface_sha256":"6bfd0162e9663a556a94bfc9b0e4657dae4aed8a3211c7d4749bb66a46a8fe01","covalent_bonds":[["C1","C2"],["C1","O1A"],["C1","O1B"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3A"],["C3","H3E"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","N5"],["C5N","CME"],["C5N","N5"],["C5N","O5N"],["C6","C7"],["C6","H6"],["C6","O6"],["C7","C8"],["C7","H7"],["C7","O7"],["C8","C9"],["C8","H8"],["C8","O8"],["C9","H9R"],["C9","H9S"],["C9","O9"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H4O","O4"],["H5N","N5"],["H7O","O7"],["H8O","O8"]]},"ACX":{"atom_surface_sha256":"73a9a3373f2d35cc925f9a1ed2164fdb22b712559ef59f1748e4c5b340e275e0","atoms":[{"element":"C","name":"C1A"},{"element":"C","name":"C2A"},{"element":"H","name":"H1A"},{"element":"H","name":"H2A"},{"element":"H","name":"H3A"},{"element":"O","name":"O1A"}],"covalent_bond_surface_sha256":"147c5c001b321eb0aa6c81049c7eb2c325cd894e06594391bde34ed7ad403ecf","covalent_bonds":[["C1A","C2A"],["C1A","O1A"],["C2A","H1A"],["C2A","H2A"],["C2A","H3A"]]},"JGL":{"atom_surface_sha256":"ebe29b10138f8cbc1364d30551b140c07dec5009a4ea50344312637d31b4e883","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C5N"},{"element":"C","name":"C6"},{"element":"C","name":"C7"},{"element":"C","name":"C8"},{"element":"C","name":"C9"},{"element":"C","name":"CME"},{"element":"H","name":"H1M"},{"element":"H","name":"H2M"},{"element":"H","name":"H3A"},{"element":"H","name":"H3E"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5N"},{"element":"H","name":"H6"},{"element":"H","name":"H7"},{"element":"H","name":"H7O"},{"element":"H","name":"H8"},{"element":"H","name":"H9O"},{"element":"H","name":"H9R"},{"element":"H","name":"H9S"},{"element":"H","name":"HOG"},{"element":"N","name":"N5"},{"element":"O","name":"O1A"},{"element":"O","name":"O1B"},{"element":"O","name":"O4"},{"element":"O","name":"O5N"},{"element":"O","name":"O6"},{"element":"O","name":"O7"},{"element":"O","name":"O8"},{"element":"O","name":"O9"},{"element":"O","name":"OHG"}],"covalent_bond_surface_sha256":"9920f87e023bb3840cfcd6dcdf3edc129d2ee3af2f7c008debedfaa8b19f38b5","covalent_bonds":[["C1","C2"],["C1","O1A"],["C1","O1B"],["C2","C3"],["C2","O6"],["C3","C4"],["C3","H3A"],["C3","H3E"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","N5"],["C5N","CME"],["C5N","N5"],["C5N","O5N"],["C6","C7"],["C6","H6"],["C6","O6"],["C7","C8"],["C7","H7"],["C7","O7"],["C8","C9"],["C8","H8"],["C8","O8"],["C9","H9R"],["C9","H9S"],["C9","O9"],["CME","H1M"],["CME","H2M"],["CME","OHG"],["H5N","N5"],["H7O","O7"],["H9O","O9"],["HOG","OHG"]]},"MEX":{"atom_surface_sha256":"0a987b1526c563ea07ecb3d0380c1564ef9a368277152f1d7f32f8c2e7de1f7d","atoms":[{"element":"C","name":"CH3"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"}],"covalent_bond_surface_sha256":"41f663f9cc370fc44b2998c5a407d9c5f2a1f3ed9d215c4012419681b330ea95","covalent_bonds":[["CH3","H1"],["CH3","H2"],["CH3","H3"]]},"PCD":{"atom_surface_sha256":"b55166a5dd0ca7f295f28b51acd9f6cd0a16d5e79be2c3e84e2c608bbb7221b1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"322251ad70b4069d2c5ca5e8a23e6f6347068e9db2b43afdeeb2958541e8fa69","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PCU":{"atom_surface_sha256":"5511a6cb4e2ccac90114fa16a841ad35b1090ae4c3f744c247deaf2606365e23","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a2f3814f5c6cabcf3f262e52b43c4cdd31b35bb0cbb98046a0041bc883b8d1b9","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PEA":{"atom_surface_sha256":"eaf7e19cedaf6fe95a58a5a416f2031abfd28ad4a664f14169affa6bd8ab19f2","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b8e302edc68240dee504f30e3c24772d241a29ee8fa10ccea925e87635166dc7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PEB":{"atom_surface_sha256":"9d0a245596a2beb78b870f47bb498f5439d84b9b7eaad495e9838a22aa8a6ef1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"12cc5f8ed61f7cf1fbce70ac30bb2e8ba7ec9bf12788255958c2cbe1701fb19f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PGA":{"atom_surface_sha256":"5a4be346c4a0ac64dbdc861acb19256cd1466fdef45683e2d412e6d7e9a7c4f3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"e7ea188e0caa4d5315015b5b753882f57d6f35983df101b36af51cd626fc97a1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PGB":{"atom_surface_sha256":"5f5a9d147f8208138a839f74133d7bf3233befdd6ff5b1982613300898c3afbc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"8b67e21850f990106fdba0d2649addf568543f895bbb9afa36a328767a23a804","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PKA":{"atom_surface_sha256":"7d255045ebda6f7ce690800413b509c9afc575f84ecd043d7b30a8cf5141aa4a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c98a0c15d1d26f0ad4003f160f7191268ba00870158a6bea150b88a81c83f388","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PKB":{"atom_surface_sha256":"77815c747cc3d7d7d21c2abf8d3d1c9c6e0941314b7641e5a77bba8b1a8934d5","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7ea7be2ba848e9fdd61ad7478deefbd9b424771ffb7355f55d932b3c8d2aaa4c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PLA":{"atom_surface_sha256":"76b9852bf26f18e1338e20e3febcd63c38c3f176c8815c72b9892af8432cb3be","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"68edf7f298493c44091107757d8ae2211605bdeb94f82a7aeccf3fcd34c4d540","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PLB":{"atom_surface_sha256":"6c05acd22eb9d012db7bb375960036afc9e4001cb976e9f0f8dd9da6599a0f03","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"dacf15740d671cda62f21363e8181c81881fd553c6501d0c97b77ef8e4a86b26","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PMA":{"atom_surface_sha256":"4b907aff08770829a03f7fbb645d19654d1a06264e130a34ed94640e88dfd583","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"971305d12d937e6f4e2212f6a23a66f4e60555409fc5c5f4cfaaa9e503950ed1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PMB":{"atom_surface_sha256":"d4a7b4031afa1549107282aa4b45d445727d6f333dfb28ca2f01271c3bcca806","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6b82d3d24f370b4f8691b030d15c53fd3fcc24c75c01d82c869bcd696053ea17","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PNA":{"atom_surface_sha256":"8523da7808840067cc3d7cf47e5bf4f8c896e0cf39b358274047bf60b4d843e8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b78ba9e0182e95c5191c16eec694f12925663d1f8a7e679b2e306dab7d1389bd","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PNB":{"atom_surface_sha256":"0c3e44c514a71f883d31463e3de957428d7aaf04b0a308486547efd9b256d60e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"112ebf8705f31fbfe3f8e6392b0acb80165f4fed902f8eef5fa49685884d5f63","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PTA":{"atom_surface_sha256":"071c7530da4cc5254a863e7e25dd5155b223f17899b22a02d6e7d4257e708b46","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"034ae94db298803af7c88c0dac7fde6c1591f993aa669fbfbf53aa78c36740e9","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PTB":{"atom_surface_sha256":"3bf36dfc891c1d1519bf793cbf42468850dc26893c5e04467c5673f82c12f3a3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5b5d2dba6af113bef14250db5f0f634f201274e243e5292024f1661f7072a32d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PeA":{"atom_surface_sha256":"8c1a07705bd28e048dc079844fe346341ee3e80eb8b3df76f124dbf1768eb80b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"598d8b6d595a15107b3c1b11cac80c4998aeb66f750df0666ff99069898bf524","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PeB":{"atom_surface_sha256":"5a92192650473e163242572b71648ca50ab0356a20409c8fd91bd19a42819805","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0ca8a9fc70af3c6a9e3711e749013839c3a8d861e6e5afe132024835eb51155f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PgA":{"atom_surface_sha256":"caeffa8989e2084ab7af89a9ffdde6b7c4d805473daa6f9d028bcf9450e07218","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"29465588f44946979498b1d7ccf0052963945311846811900c5ef355dc8d8ff2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PgB":{"atom_surface_sha256":"d1150456427fdb63977a39785333f2463fdb988f53568a148ff4957d6377003c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"8968c956111fe2c4c62e4cf5eee98beceb909dfecae44b09737d794f26596f64","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PkA":{"atom_surface_sha256":"25331c9f470fab412bd454f9226a7a0477cc6b197dc5b57c5ef6df4f6ad52a97","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"e6e8483f33f0f1977939b7f64ee4b2ecbb8c0cf6ce3ee03ed5076ed6f3e3f7a5","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PkB":{"atom_surface_sha256":"22e91ccd8929eece137663cb0b250e92821786246b01ffa4ac2f6c8e2baacaee","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"518499aeb8efa1366db0d5cff8f9488c259e824c5d1928ea72c48acd856002d8","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PlA":{"atom_surface_sha256":"82b0f761a72504f984d79fa743ee4420291687e645ab61b65d1b15754c23e3d4","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b2f4ae658fb360da8c52158600048c0d61cc4d53439c827641758da5341dddf3","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PlB":{"atom_surface_sha256":"df30937c2cf0c1fc6f99ed86b507c2519e8fe9778b37cc8ad43fcff9797c0fdd","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a27a93ee0ee85f69630a0aaf6273a18990a6fcd3cc49583b7d60097fa7e21d20","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PmA":{"atom_surface_sha256":"10cf7d347c4584f1ea9b4639ee00d30c6216bc03405bc6dc47f65433409931f4","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"548adc95a32a2ad0be933726ce18db6b2bfa80d927638c421e1baf5ba3d55058","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PmB":{"atom_surface_sha256":"a7c762cb8fc042e08d3a00de6d53731d9a77df12a62191bab67e64a37f62f5b9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"afeca7d979b2b51f76de7ee06940122ddd8e491109e85eda08c2c46c7b8e6e22","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PnA":{"atom_surface_sha256":"9e0d9033779a5b9adcb5f34df3b7f3097d530c835b331ff196d67e45b11fb89d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"df63d993d28e0124a898f4313a33937bbcbfab4ace8faa5bd1f80b9f905bc7b0","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PnB":{"atom_surface_sha256":"5ce39ab2a378c1601570af265f9d5c55a526600dbf4b48e67b2c3b2c1b83720f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c4ea7e0dd652c3b962a5e5e18258e2dfc07cd0e436e8f811129e9b3344d84629","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PtA":{"atom_surface_sha256":"608f933e3a51b4f429914c94b8e4d7295f42fb321f245c2cafe9c9ff90f0ed60","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"61b3bf44e741445fded000e524f92e8b995bcd90281fcff6f556c0536a02af32","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"PtB":{"atom_surface_sha256":"6fcefca613766d49ddf29b58239ed4bcb08fa64fce33d69c16470cc7b8b15431","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d7eeb235717392b1544b943d5208beb54c98e36d06d70b6caa9237b126c41209","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"QCD":{"atom_surface_sha256":"f3a2689bda28204f5951f0ac80a176afe36293e4d84fea4d3807638755865710","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"9c8e132aad90b000e805fe3650ef2a6739275771b32546ca89e73ceebd67e87a","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"]]},"QCU":{"atom_surface_sha256":"55a0effb8eb70a0de94f73f398d367b36db022b030fc6870938fa13be7a15b92","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4f88e661312ce4e8eae8c790a757e080ff044122e3c305378b54735480342e1d","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"]]},"QEA":{"atom_surface_sha256":"5d4dbf7bfc923ff650e68b0208b0d9def578998d8a7d249cfa7c7eb3c2966722","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f8bff074f1d7b3e7925a50b205ed59dcb4a0c4a1e1e83fbf6ca88a3d34f5a70d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QEB":{"atom_surface_sha256":"2aaf67c71b02181171f9a7fcb94250a730671574dc4e5d8e3fa37c6f7a0ffe35","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d79a806db172fe4a498f211564f8110022b64ea8cf96da4652c7e6914b2c14b1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QGA":{"atom_surface_sha256":"a88fffea3dbbad8a8b4ab40d9c6c1256137487df2688d2fa985da93ed56da226","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"74705fbec94d2f74a339f7c285a67493cb418e87cda24dd51a8439df28586300","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QGB":{"atom_surface_sha256":"3f5846466da8246cab02bb064e751d25a0b79302aaac28fca6d1b44d8a7cd68e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"72248706f7ea6b454afd0c74d7453b76fba5193f8d3564b2dc9e06b399321b77","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QKA":{"atom_surface_sha256":"520168356187f932e629f1d6ba93d0346a0531ceee9ce39e468a792653421eb3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d742a231937f7f0f71cc39bdfe9832950e2dcdc6ab93448dee71871494a31cfc","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QLA":{"atom_surface_sha256":"fa67f90de38074c44d8239655ae0028d30d873f46c807850a5491ba478091190","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f596cf27827d09abaf7d2f0897135b1ef40aa1f0ed5d2eb9aaef1ecbb7b85ca7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QLB":{"atom_surface_sha256":"0165216b0721c1ed1edf586f5bd116eadbef4cfca0ddee2521c225d0bb6f8431","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"72a9b9f35cc0a3a510558109b744b787aa9e5dcb5de160b1271561acff9bddff","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QMA":{"atom_surface_sha256":"46e7d7bb236896e3e2de902009a2d8ef548a28acec5407fe5c59258f675d857e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"9405c6cd5c764eed8b14e2a101d4e7678c94648a7e0f875cad0986daaff8bcc2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QMB":{"atom_surface_sha256":"16cbeacabea6a2392e17d596e74cea5b521451708297c214bf8d365cf938e0a0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d89d0164de769301c7ed18acbd91b2618bf6adea9a05877337e1e5c5965d6941","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QTA":{"atom_surface_sha256":"d76d7ca919b6e2a35792dcfe9b1b0c06e5a730694e69458bd33dd02432dc8249","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"133e08aa247a8056445f0d78c5d9b21a3f1ddd6e1320750e99cd1e3f12e06f40","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QTB":{"atom_surface_sha256":"19ac9af8bd57b42381142e2ab74678b9271ff7bf0278e51a46d8d43d5de58bfd","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f5f8795c47cf86341a1301d945fa5fe2d447841df3ee6a6a8015fff4d2b40896","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QVA":{"atom_surface_sha256":"cc05364371b0045fe5236ab5098b72750a66aa4e3c59704cdc5dafd3ceaf0b57","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7923fa380eff1dbc21c520dd8e5a10eac75c54167bbc12d85aeac5b105d9fc75","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"]]},"QVB":{"atom_surface_sha256":"62c6961851f8bd8a7c97e1ab5df3338ea3542d99a91926ce0000a6d64479bf29","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d8a4cce1a971fcc471add8b5727739a70ce9f851a41b9218ab41fa2d202ad6b0","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"]]},"QWA":{"atom_surface_sha256":"bf9fa06c4d3fa9aaeeff6d9a92ef7c357071cd0022cd1cd301a2b71b3cde4ca9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"904982f1806d7bc507e30fc89d09da8c5ec8454e7d930846f4b9d81aa752b733","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"]]},"QWB":{"atom_surface_sha256":"056c97024ad7d715ed1b829ad9de60b1d968dfc5d194e9e5fb23f62dd4e55a50","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0df57ddc7f9f3553731b4d182ce0b069e735ba68a5316d09a1508a71eb51e988","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"]]},"QYA":{"atom_surface_sha256":"181a8f03c29ba693eea10ce9246bd94e6af649870c0cf25faefbe21a9bc33bda","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"819ded6506e524364ae75c3ddd9fb8f4c238a76aeaaeb659e7997359170b3f22","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"]]},"QYB":{"atom_surface_sha256":"d48222c0f6c120e4c7723f15ecf5f3b57a57553106888350dd2dbb25263f7241","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"66a4f02feef2c5cb924beedc69ef01d028e4e56d300932ec024ed8c4c0484b03","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"]]},"QgA":{"atom_surface_sha256":"30b7728bf2542becd2a80d128b5a2b497f0ab26d121853023972ab94e96e6d54","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"26f907577c1c039eca6d9fda5f81e61b66dd5b007835da6277de27e8e7ec2ee2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QgB":{"atom_surface_sha256":"1933264206fb8ba44e9591e184eab5c8f14b66143987d7ae9cdede90dba06701","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7706c7063cd52be30eeee1006dc12dd3484d2e8b47e1c19af33dcd980b3a944c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QkA":{"atom_surface_sha256":"04a7d83c906014820a7e8e2fea6ae6b62621eacadd6675d3d381ae9995f9d546","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"9824a6a0591e8298e61a851cac4e5878ec5c6c1142aaebc9b0c0aae54e80b699","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QkB":{"atom_surface_sha256":"1a0f0e6c88a537e07d6a75eafd94377c25709cd02d0a9197249446385bfb6656","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"dce32360d01f8ed40fbeef17be5e3f09017b70b7c6c8b1c4e122313a37eb27aa","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QlA":{"atom_surface_sha256":"53a1502958211384a070c052a643e59a2d9334095db98043afd031fcd9c88830","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6467d95a0736da2b5d4747dc79c6f7b96aa10d88bade2d2c442f6e89c427abb7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QlB":{"atom_surface_sha256":"4760e15af47feb1267c7299094b8983af547875120b7830d1ef9d57f52fcb0bb","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"977dc4ddaa05104f70782bddf616fce6bba1e0d310638460688797975bc35695","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QmA":{"atom_surface_sha256":"5f2086205c00eb9f678f4142573519895c83e4481b612bfdc01ced48a9967063","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"8813e66e0b2519fc998527a54a1a72bfd63252df7d2ab801dc97af3c77af1711","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QmB":{"atom_surface_sha256":"addc6bd604bce44243dc8faa145eb2c5d322d470d5455ffb3594b40bf9430a44","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"48807d18e6c2fd6bd0fac55f26f6c9a8aad487bb4f30ec80412e746eace45eac","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QnA":{"atom_surface_sha256":"f8c3aea5022f4fde1ef769753c455e36d69737a9c200e5fe5af909266071c99a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"3e23238bc6f0110c44b881a8ad535171f194a4a2699992d6b72ecb0a76508d49","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QnB":{"atom_surface_sha256":"3f6c8ce2b10fca419879e5fa44d7f96b97631de4c1c06aa6f33df01c6bf23c26","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c21761f6501a845c9719e8da916b391d22ef1a2be9a12bff21eca2e8a070c07f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"QvA":{"atom_surface_sha256":"8e72626c504c81b34256a77cafc242add46b216a5a8072ec54f6051920e6c777","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"396b431e967ea79d70367465357c2779d9cd7fa24f4d844bd1681174b7b07661","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"]]},"QvB":{"atom_surface_sha256":"5b57007557d3051774f39388f3b29df9d7f5c544a3564e88bd54b335ccc32de0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"e57e0994aa53fe73ff9346581b20845b625de8d8398832536ee58fb9185ab3d5","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"]]},"QwA":{"atom_surface_sha256":"f975223b92448d870eb5983911811f21acdbafe49f451f5e402e07de8640a991","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d61d1637ebcfc2a2dde8622ec194849391de9d7d4bbc4e67db6836968be2a751","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"]]},"QwB":{"atom_surface_sha256":"1d1a40f3f1b6b673c212efbb0a1d49585b049bec36220907c39141b7f0ce3307","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5b5428874e1749042952f348d90adb2f559854d7008f976fecb82ad96787b072","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"]]},"QyB":{"atom_surface_sha256":"133d106a0e7542bbf8644485f9978b854363d2a16df0a8281a0da040ca95d14e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"75c419c2afeaa75844a47c08527bd3d4b695229e530eac0c18f7402e4ec3332b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"]]},"RGA":{"atom_surface_sha256":"2b397425282e32d138707cfb07e1fc5a23f7698dd83beaedf2bcf37f03c01e29","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4c3d53aeabd37a27a5c6ed3de7a6dcf14c20ddae2c4bef8b78608d30b450e73e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"]]},"RGB":{"atom_surface_sha256":"01973cd35833832d516650e0238f5bc0d60026cc7bbb1cc32399db0ae7fd1a3d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a3086632019b8975b72e4b5cb57a5aaf094898a60817509b4ae11618c7e79e31","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"]]},"RKB":{"atom_surface_sha256":"dddf17886c3945fcfea70266ada398da77da703e1384454d91763e2918a4c8f0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"1559bff29c170ea3e2af28d4e9b8882ff23b0812d20475cb1b4e2cdce33512f6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"]]},"RLA":{"atom_surface_sha256":"078ee0bd9cf570c58b51398d267dbe8c37efbf7d2c12a258cb0e1a307312083e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"92e64cf01b1d62b40ce69a3babbb94d3bc5fc0c3c41dc552fcccff56acc8a63f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"]]},"RLB":{"atom_surface_sha256":"8fb39988712425353769c4f727baaf2e2aa6382fa1486181cfd1ffe8fee9ad1d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"778f23bd917f3f4a63982ae59a329e723a7f75f2b443c00accc9cde33459e1c2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"]]},"RMA":{"atom_surface_sha256":"db92d42b9a41e0cb0e79f3e44607214dde7c5f3c103332fb4c75982a09220386","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4a21def7fa4882d390fe3f54248f563afad71057ebdb2c9c1734dab26cba6d9b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"]]},"RMB":{"atom_surface_sha256":"118f3cd1ffb351d711dcfec80df2c2c29550e9eb82203abb76ba091f31936925","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"867d512e7a07cc8221e892dbb0ffa639999fa21500b8107299d302952bb39e17","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"]]},"RNA":{"atom_surface_sha256":"c6a332be4208d8f6cdb1613bc213c5bd8eb13bb4f894d48cc5492fa8cf4a7628","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f188e092c7200a84c6dc5314d32f09215b837c71d6fb6c11ba38a90447e59f24","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"]]},"ROH":{"atom_surface_sha256":"b6afba117f10015acb2c17287a535afcccc19cfb26a8b62c43ebf1797d08670e","atoms":[{"element":"H","name":"HO1"},{"element":"O","name":"O1"}],"covalent_bond_surface_sha256":"cdc8204b2c23774762e4b871d7c875d515b9f1122338870ecdef9d3b3738cedb","covalent_bonds":[["HO1","O1"]]},"RTA":{"atom_surface_sha256":"5e17e2f6ea787c5ed8ac3e4fb1ccd8fffef2d8649cdc63959d511ca839e50bbf","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a7204427e85b6003a9414ed3f742f5f61c894910bbdd006f4b510d06e326711c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"]]},"RTB":{"atom_surface_sha256":"e5047c8ce3de3345e6b60be8b859253fcea80dc64cb5e86045821caf2def655f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"e4b90f5804c2271dcec6b7a9a38d1faa61ff07273beab83d85e9baecd978223e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"]]},"RgA":{"atom_surface_sha256":"797f9f73cbd17ce1a103ad645e191fd7d474f2fc590711c2d9f4cf00feabbd13","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0afaf6f7d774becde2d4e357675ebd1a4b67527228fea68446e058d5602f9fcb","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"]]},"RgB":{"atom_surface_sha256":"0949e35c2961b8603d90ad5190090741c9ef91e2f066ddad7026121f1c8d3b8a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7207a1bd0c1c7e5b969c8739504a6d7a154fda74c32e6a4fca04a2f33f240f63","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"]]},"SGA":{"atom_surface_sha256":"bbdf3872b1c02bc3a0cfee1e97c936cd3412d8085e4b41e99fcbbed06e96fa2f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"1f7b985f217a1ee436ed822fe135cd8a56392f3504c69352bd4d229524924a5d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"SGB":{"atom_surface_sha256":"f1adc4c8763cfe8217aad32798bdbe09186d10f859bc7510341df6543d3505ee","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"1bd85e1d98b9c67358976805ce10085c1e3593c4ec7524472c422d3d3f8065f4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"SKA":{"atom_surface_sha256":"7472ba81ea68db2b32a91943e3e5f030f6890f66498191c0e26928233f840f5f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4e939e12b6cc25f01e8a420042de1eb6ce89fe911c004c4289c27edc83464f63","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"SLA":{"atom_surface_sha256":"8cc9ed03d85917c7a0814c49b96b91504c268a0ad2d91a2a0337cc895f890947","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"e849ade4b8065be0506439b7b667493f09c220aaba86ff1f0b2b60c197be0ad7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"SLB":{"atom_surface_sha256":"b7d93972bc6744779de5f837c11ad86681b6fda4d50c001af37bf901ddfcd37c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"45894e24294c07b32a813de13218eb9bb47945c857f2aeb1c8ef0b4fa34de6bc","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"SMA":{"atom_surface_sha256":"dfd356505ee5decbf72a14fa08213235adcaee29131d992ba1ed3338ca82e6be","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"71d5c0e7a6ea839defef01ac18fdbd9215f70ec42f3ee27551fc575573e4da0e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"SMB":{"atom_surface_sha256":"9678526822c9fdb73f2b29af3a61703f3655c5f57f3233f180daf4702a18d97f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6d16ffb526117e507d71019f9c18c77162490e608e9c72776ccec5aa5e9a1b81","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"SNA":{"atom_surface_sha256":"7e0d57dabb796605cf4ae6b751bdd392079facc6342deaf373b7f4c68c4f8e79","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"e4fc7ac40be1bbcc8f99efc0b9ece5f1e6f575e34897f16fc0a261e13ce3cf49","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"SNB":{"atom_surface_sha256":"26b75a4e34399962e04ae9a40b3be6843c6e47999997eb380b9137f0939f4ff6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f7b599c40a29ebb9f5b27dc9e6c1329b6479b4f95cc072fca80103161b3dbeaa","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"SO3":{"atom_surface_sha256":"de775b4201cea7d1f170b9fbd0194c5d1c82a74e9fbef8a9ed820f1bd45b12c6","atoms":[{"element":"O","name":"O1"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"S","name":"S1"}],"covalent_bond_surface_sha256":"db05647485a5001ac9ccf451b9b51422a9c718cf3a59ea14897f21ed19a8b848","covalent_bonds":[["O1","S1"],["O2","S1"],["O3","S1"]]},"STB":{"atom_surface_sha256":"b8626f5937fc905f407b559c198df72c95cad0b8aac26670153369814a8c04c8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"fb0e2df186ac116a341d61d98f7d2e604a07ab6d0ae79e7a5dd986e24004d659","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"SgA":{"atom_surface_sha256":"3280abef8b3eb77cca8f410d578b236432820f2cf220164d4a2356703ce6be64","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4e25c97593cd84c923cab5f9be788dbb3493cbc412fe5e0a0a36cf4e3b77767c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"SgB":{"atom_surface_sha256":"42a1385d389f7530653a73040de2ce00693fb4431bd28e014d0fa87542065139","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c1a908e25b2b25357ebe4901300f3cb748bd827c965582256dec644b926dcb7b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"SkA":{"atom_surface_sha256":"c01a843050c51b54f2f4abe37a99d79b7e69767c046b33b459ac7fde1fe410b0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ddd74b442fad972d30e9fd3781190c29322bf10c47bd8f5923d2ec8c1e3a089f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"SlA":{"atom_surface_sha256":"e4edeb4ac161209a0fc6757714ec9ff1e7cde41be1e9b53339e6a2da62627bb1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"03ee6fe2b0f11cf8d6fb1604eee955c2e40f9889f18c99c08206efd62e7471e8","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"SmA":{"atom_surface_sha256":"26229f826383ff9c3299954a713573ea657312b6cd73aaa80fa3cd195b698b21","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ae7df8046fbc93ba8c97a7bd5949e76943fba484a4938ca98460492fe8b5b192","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"SmB":{"atom_surface_sha256":"9e543e9c6cffd1a239ee1294a6a1f7c393bcc512438f2da5f47fea69495b3135","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4f48af012fa83b26076354980608c02db5fc0babefad9957f4eec43e62d4ad83","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"SnA":{"atom_surface_sha256":"846c0a7d635239dae0a802cec973862b1cb43f8a4f2fba1207ede0abb77c70e7","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7842197c756b638d0201599999c43b1122829b01a22e2945ac8aedc9d4acf927","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"]]},"TAA":{"atom_surface_sha256":"2acb1be0e9619ab644ab3204193f2545746416d2a681e8f2ccb412dde4e3816d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"1dffef1ff8d338a8beb383eafe978aaf4401593b05bfcabcbf58b5c7e4ba6653","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"]]},"TAB":{"atom_surface_sha256":"3dd78278342807c8bf7835624cc58b72024402ce35f6c2602e938e2517d1f527","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"98f33ef70456cda501865d96d88ef785011b1b9c945bd760b808179d7171335b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"]]},"TCD":{"atom_surface_sha256":"95206f2047a4a720dfb4ab80059149713ea70294b3775ebf07b435a896f450bf","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"423d57708c19224790972a0d8f61014fff87cf65eb574ee29573b15364b00604","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TCU":{"atom_surface_sha256":"d813613d4e1656f207ca155eaddcb0d84e02508092a9637981283de50632d4a2","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0f8451352a052272a55baf55be11ab179d4b6a0e88b007bfb5cdfede9a1e0218","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TDA":{"atom_surface_sha256":"da189dadd012ba4a71c16940b35b462b945caeb99e25633836943bb02309b8a4","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"f2a31966b8e48527447b98f34e2b7ea228e7f4cc3a79afba5b3a4b57d9323dd9","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"]]},"TDB":{"atom_surface_sha256":"3d07d93777034712dfc4b97d8d5523f42f83a508bcbec6748a3c9b15c642da51","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"a4a5c545b5118717e0a98547b671ef9d196f223fab90a8d54d735bf33840f014","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"]]},"TEB":{"atom_surface_sha256":"fec5f9f6aaf24942306bacdb4b18f46d08a4fa509f5fd0aad004a51ef64e1053","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"fc777259ce2f0a38be1e188055bf494c179eae8a28fb4ed3f35da50afcc86bb3","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TFA":{"atom_surface_sha256":"4a06cde0a90db5cbc09d9e2111b88bacaedfa75fc6f7a1b5340405fd5c89107e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"12595a6276df27aea9724a0f6d44148e36c83bf3c06fd499cb5961ce0308a901","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"]]},"TFB":{"atom_surface_sha256":"63e5f678fe8e1142ee6dd93c2e169a7c0afd535818007c1601ef9d5dcffd6f8f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"6f39b73d84e78681aa9cb18f6a4abb1dc5305f9bf32252242feb234e21498175","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"]]},"TGA":{"atom_surface_sha256":"6cf858b93d0d4926d6ed20dbba7132145cbb2b57035159f32c6a77f762b4902d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"3bf576e09ff845830f3ce2b7e90408e78e66c3c23825eefb51a5bfe4d23260b0","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TGB":{"atom_surface_sha256":"47bd11da3759e35c08df7c67e8b0e3b4aa91f424ada63f6cdb3c076ce402bf25","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"31fa22a9d2756db64a0f3b973d648cd7db3d63da36dee296e6c16e4a0f22b425","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"THA":{"atom_surface_sha256":"421e56d2c195f244baffd47daa6261d386335f948918909587cf64d9ec8c3ef9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"927c81f862d3e37ec52e4561ab9d50b1f2c88b853dc5fdeceb7553899dd0f87c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"]]},"THB":{"atom_surface_sha256":"d5ec42dfa25e4daf9727a5b015b03d29d7b16f9b6150cf9b355e550e267bd327","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6M"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"eb17ccd378bdd13b6dd5f14e60ddfc6342773816f630669478a165657a25956f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6M"],["C5","H5"],["C5","O5"],["C6M","H1M"],["C6M","H2M"],["C6M","H3M"]]},"TKA":{"atom_surface_sha256":"47277ae2000a837003c7f5c25fd411a597b5ddf81da433dd0bffcccb8fcbf137","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a9bf9255562b17afeb2dd7a9f0ec0b0a3721b76e60669dd091948af67d6dc093","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TLA":{"atom_surface_sha256":"9989dc006fa9ca17cae235310f413e370d9b7d4fe8668fe52d8a72a00f49f4e9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"446662036c4f0fdc06de5deb84aafd51f3a150b8a480dfacc9c60fe3b3b1b41f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TLB":{"atom_surface_sha256":"a76da04a82f6fd05c0a99904f54125f634a64e24dac7cafcab4677f6c30a8bbb","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c017f713a0b7e8a581ba5e3422d7ae622083acdd98278f98ff83b9debde271f4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TMA":{"atom_surface_sha256":"af157ba7b9411f34861add2bb4d880465597b7c7a7280c679c9c3f7272e8ab71","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"282a3a38d34476df49b72e7ada0106f7eef6acb600e69e6df8e745fed975b6aa","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TMB":{"atom_surface_sha256":"f27a8946f65283b7dcaa255a33482b3c4575db216989c81a4b31a0eaf823c924","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f79ea46da34a727fec416138b84fd5ed05f87c74fc7e16d71361b491f9bdd91b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TNA":{"atom_surface_sha256":"0a8ebb02897f5929e4138365df8917ec61e9cf6dd466c21f8556ec5371113efc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"cf91af55252a9470f0a04364079fd131e8851b299c2a6c8a391098e5189b1039","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TNB":{"atom_surface_sha256":"24c0b32c7ffe57acbf6d3d870f290af8c992d020e4d409d88e87ce9133ab51cc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"24696cd8fe93d9cb23f972221d74ed99ac6dbab74597ea0909ee5e1af1e145aa","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TQA":{"atom_surface_sha256":"812bd969ba73b2a76ece1bec81cf5dbc9e65b8baba376015c55863f249891189","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"400f5d4ad3f1c704244637983784c9722c08b2cf4c5f149c8c103cdf5f6f6df6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"]]},"TQB":{"atom_surface_sha256":"e5b984a49626264fff81f6b83c9d63f6ecb3cac02a421f8658e1580c1f3ad45a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"c6650af87114f314f965c8d45d63af5ed5574408c83beb910c85816997ebd66a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"]]},"TRA":{"atom_surface_sha256":"73a69bb81a931aab8017f6ba7dc54a3d1815320c0dba4ae0a3475d91cbba293d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"50d59a5a6656fc4a21e35c52d7d2a46fa457f30bf63954dcd81dac53b842a7c4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"]]},"TRB":{"atom_surface_sha256":"a2ceaafafeea33800d91e55ab41112d308732c8cc6181fcf9eb3315029ff01d5","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"790daf16928a9575db4849cf65fdb6a2749a5141111587a4a4df4c483a4ee4db","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"]]},"TXA":{"atom_surface_sha256":"b8dfd4b7783f842788893acd51cd17b601042981c4ecde77afe26bad688c61c1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"94120d2043e403809a5556012d586f9d1aaabfc749fb4145793a3b6dac1c6657","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"]]},"TXB":{"atom_surface_sha256":"ee28d34fd3cafe40289a9a062c778ac121bacd9f05cb8d1682f9c9076a2c2a72","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"5a8db8dda6faa655fa0a2fccbda5032db5051513b9fed2250b4afdc104d9ff0f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"]]},"TaA":{"atom_surface_sha256":"ef3ce19c92b3d94749026ad43730d567c99124dcc21adc51c28caee563d81cf4","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"669f19bd65e9ea9c46fddca3b1e0c744bc14e63272a96426fd5dff6929fe6c59","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"]]},"TaB":{"atom_surface_sha256":"412fb530dcaf419f773c9dc86ca779af2f8856f26c918d998e9ce0c6083dd895","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e30e4c35c71223595ff97d02c61ef7be0797dc5f194574bcfd884406566c03e2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"]]},"TfA":{"atom_surface_sha256":"0c269efd925a0a99c374abca5d7088f1e5b770c54a085a7a2d2d09392409ec84","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"407af25f7d2bcdb00bf94a431cd8fc96a28807dd4586d55ade9a841a35bde815","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"]]},"TfB":{"atom_surface_sha256":"77d8ab40b1b837f831c94aa0812ec41755bf676ee316b5382d4ca1cb6b425148","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"8aabfa66ab5e22cb93003ea51c3533c39beee1fbed1419c56569d71a7ec4fcf7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"]]},"TgA":{"atom_surface_sha256":"e03520b58b257e9e15f11dc7915bea53ff5eaca5060b0534ea57a7fd82408502","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b7af1ba73a6715923bb63ad930ac1a7a95bd2ad2dabda5bc070f781d09ebce7e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TgB":{"atom_surface_sha256":"a9188570741868a8573b6bb629d53aa01ee207b2d1c1b82d2e40170089201757","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"1d999bef64aaf77ad76b6ec782c9e3987af6ffe6736ad36b6d38594708b85de9","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"ThA":{"atom_surface_sha256":"7462f0ffc44b6c90e629a75ccd9efbdd043f8378cfaedb8b7d92be362510c502","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"f6d63a3aff448de1811f8bf27b5b89e58a297974574686b54f199c53bb2851d6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"]]},"ThB":{"atom_surface_sha256":"1ef6b8e4d96f3227436e09387262387e623d7207fccbc200cf1f737f5d61203b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6M"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"20a004404825a34a8e8b9722ee7fdf04e035b6dacd04fccf512c7de28192c802","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6M"],["C5","H5"],["C5","O5"],["C6M","H1M"],["C6M","H2M"],["C6M","H3M"]]},"TkA":{"atom_surface_sha256":"2fe23ff0a3a4a2068e0ad2d3720f5e228a5f9d084b02d7c26691b5a5cef0e8aa","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"84b6245865abdd89ccda5708e0574530376941a87e919496a1eb7d7cc014dbdb","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TmA":{"atom_surface_sha256":"b3df6480b36718801b21ca2f1194f24cf14e1d7a01ca5feb559b4727e931f949","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"41cbd7b6fc200d0b4f0ccf68925209f9df308e97d0242ac48246a470cbcd894d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TmB":{"atom_surface_sha256":"fecef57463817dd770016419175bbefd27f42d1acef4bbaddb2ef1757840fd97","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6d06e8ea26553c98fc5af753a8139cca09ceb9b50337ad95454024159eb733fd","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TnA":{"atom_surface_sha256":"3962b80db0c0ce31524c7b42316284558d3a497218001506617999e94d2623e7","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"44f70f7e07a8bfdeac4d3e52eeecc8a69e4ded6c3fc40d641a08bd9159d06a8b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TnB":{"atom_surface_sha256":"3f3aa5e538d5cc1acd3195bea6349929f5096f94296adac2710d8089a1bdc948","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"2af8f45a62b8b2be708e80f610eacbd89067c95c8b3c7b4f3e07d37766d83f00","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TqA":{"atom_surface_sha256":"8df8bc7ef2dcf9cbc07497a02430282545d5463a7e834286e442bf176a905e96","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"659ce3ef4bf2762724798612b197d16f7bf458d8562661bfe72ec9071efb1675","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"]]},"TqB":{"atom_surface_sha256":"a2cd5844ec18bef56f9207616d38a1c689c6d49e01cddc5626f1069dffb5cf3b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d19cdb4c858820522a4a211146639e628436fec7e4056ab7a6c407012d1691d0","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"]]},"TrA":{"atom_surface_sha256":"2cd038380cf769f496645e9881c5e1e08de1058d213fd0c0b4c3f503a3993d78","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"9223d209b1fdb6b0949051a167cc38a2aab326e2253034b34e411a6c9b9a917b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"]]},"TrB":{"atom_surface_sha256":"6709736f50ca7bff25755ddf23df639b3463cf07f192acd26c1d0fdf6bb737f1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"493954d793e567b51ea234d24a9c2ab08692038ba4760f404279c5666f524673","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"]]},"TtA":{"atom_surface_sha256":"46c2138717664950abdd7566de31991569234fa2b8e748a3425c4730548385e3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"fe285c94aa524030653a6bdcf6935615d2d017abee77fab1e37fe88b8875244e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"TtB":{"atom_surface_sha256":"9af9aa1578bc90c2c8fed6ef7daad48115e38d04da9bfef831e4405dc3991bac","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"8b64904a074a56e29d23c68a2c771b697a5e0fc2ee69bc210dbb07699773cb74","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"UCD":{"atom_surface_sha256":"bdbcd497c7d2019b96caf478bceefa110680dd252c7baca2ce41ea16a7d82464","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"96573927dd698c265bbb64217291d183ab5df9054b8dbf51a54ce32dfca0c6c0","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"]]},"UCU":{"atom_surface_sha256":"c6261241cd9710736fc2fb77562e34b709b1e711fe6b516b0390555c0d57dd8c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"8e791f8fc8c290af2ab79ec83907cdd3dbd9fe7a6edfe99be70263b5ffb32582","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H3O","O3"]]},"UEA":{"atom_surface_sha256":"e69cd5f68163920f8ba209460173db104aac9af282e58ef7a903f10573f85ffd","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"18bdd9184ef7f6b6884870c8868d4358b50459c634f9bf0de56d78bb1aea1af5","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"UEB":{"atom_surface_sha256":"35ad0b32c6b287159f83ced82bd79c07bf402281f920f1542a43271ef8d7f480","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"530bdc1917e617fef3e0df7366d8d27dc331e6f7708ed2ff6c26653c7da84788","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"UGA":{"atom_surface_sha256":"4b6952fdd87981ba28adba75eca459ef6ae3be9c87f51fd1f9d0afa2a634b915","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"607d8dac67758754ff2b0dbbcd3e6fd00d94a4b66c7affd19ec5c6939bb0808a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"UGB":{"atom_surface_sha256":"086e81fc0d8c86bae35c9198cbdfe43f222977a07bcd3422012997fb2e555198","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"91f6f31b66bdaa1899f87cc1570d1080fd414f0c6aebaa585dd56b7949a374dd","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"ULA":{"atom_surface_sha256":"42e77ee4ec18fc557b20b3ebfac1f903b1b0e0b73e0137751bc4393c8856cf28","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"418950692c4f4d5948b6cafe8a30348499668174cce28264f129eddfa3e3394d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"ULB":{"atom_surface_sha256":"6fbc5cbc67e013122f2e4c64293f74f52ebfff8728281b3af01f7f50e3566b04","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d8a82944a83bc0c8f22b8b63883bab3b0b9e05c106209d4cfdc7c51f443f52dc","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"UMA":{"atom_surface_sha256":"e409057b381b7f0c1369b91f06526f5602cbd74948155c178dd9655eff3e3ef3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ce690281ff43d070925adbea05a6e73b4e22dd492343eb52f1e02daa9d677856","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"UMB":{"atom_surface_sha256":"9edc4668c77f8da9a924b9489f9efbce6b30030ef35507d4bb956ce6ea4a2450","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c6c30cb4ca3295ea0771dc943a4a68b072cfb39f89ec442362955ccc7bc69193","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"UNB":{"atom_surface_sha256":"afe0412b10c301ef583cd41c0a6182d7b419e96725666dc2d46f5155c2fad59e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"e7759659438ab51e0f5018bb29533711a1a879d47dda8821880c3d9bcb89ff37","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"UTB":{"atom_surface_sha256":"9b8ab6a4cb1d03f989e915c7356064dc9e2e5351a0e791f2f094b0abcb430f3a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"9c007bf8a40ee7bf77161f223b7a68db69559578df05545dfc13252af4a1ce35","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"UVA":{"atom_surface_sha256":"5ce90826b4bb7435e51ab1dbe834e3e870c8cb0e10d701b7df51e7cceb0598b1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"42e07fb57f5fa34ce66a959b8d630de30c06bf24fc3090f98b0c452ede3b4938","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"]]},"UVB":{"atom_surface_sha256":"10e955b80b679501af30ff214011952384e0d8692f955b8906c80227656aa244","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4b8f638d5d8b6b6549470c0c178ce613926ff6063df1a0cd0523032c9751e4f3","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"]]},"UWA":{"atom_surface_sha256":"7e216706a15e3724e932038f34571d708efef53c860960d6ad06e57d07375223","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"97ef6eb928a9b9670b85f88ad42bfb02ff19d4337244f4337cd6db785e7edeeb","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"]]},"UWB":{"atom_surface_sha256":"bde8e8f2b03e7fe3e72ca5bc1627e6fb9e2aab523460f9ecf1e4d0360b9dda54","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d8fc553b06eefd69e093e715a960351a8616a14a31cff4dfc7384de884226186","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"]]},"UYA":{"atom_surface_sha256":"b807560367d554bd3cc140d31bb4be7bd5893c3f4556fb104c13b51f4977d2b9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"3effa38c41ac1be7aeb5395483e9f0ddfa45c209d3fe27394a1b640d6752ce0b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"]]},"UYB":{"atom_surface_sha256":"bdaa85fe3be09ab80eac88f2931d4f3c6709b857d4c3746a798ae8d01900526a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"924fda13b7b1b466106564817050c1cef149f6308e4cbe8ddbc153e0540322e5","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"]]},"UgA":{"atom_surface_sha256":"39a5a30ef7a21f67b25577115e98eaddd1ae973c2829fe7586ea82a15d4d7ed5","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b704286285eb99ac093c5290114995a06a31dd90607c3add0099c510a6bfb944","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"UgB":{"atom_surface_sha256":"44c71b765ea482b4943d4a6821e2640d0b2f0a0b3446aaec8f0486aebe865f67","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7f2006664fc6842f75806f2a7f3a9f54c6b45827aae4fc4f2a1b267a6e6cc295","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"UkA":{"atom_surface_sha256":"3346d378c447c5d7b6838a37eaef5cd7388a0d7b871ad65ff57950cd7e8ea88c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6175d4d15a315530cd21afbefca650f1edd0f2008b268f9f3dd85f770af3d07c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"UlA":{"atom_surface_sha256":"c485bb32888817814c60dd07d270f7e6d9b2ee4c39bbbbbcc4ffca37dbac31c3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"bb00bfdbcebcf5416d93d6549ba26d2bf993eb1aac6a9b325f8c128ac26e3511","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"UlB":{"atom_surface_sha256":"a129cdae72d616fc3cfaed4daae1b6934fcab99d6e8cad1bf0896fa81b1ee59c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"90eb7174b91eedf705145e5cb816ae060e07890650e1e92c6be6a5f48c5934f5","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"UmA":{"atom_surface_sha256":"a709c56de6628fef0007601b41c0a24d910b8dece5063c265ffe46b955f4568b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"1eb9b128d0e032a66a71fe9be43349cbcb87a66dd45ccd4dac387d3ccbce7f40","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"UnA":{"atom_surface_sha256":"4f4c0d4f4789a4cef88f582870779d9de15195953750c14f6fe754fcfcd2df57","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"44d7aaf63b3366b27c54eed7d0e2c40051a26e7a1ea8f0c52cbca11367e95263","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"UwA":{"atom_surface_sha256":"b17ef956747702bad2961a6c57a2cb688c78c6216047ba63f15cd2bc950e0423","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"723744865809b9da5d602bc4d7d996cea0d1f1d5ef1d8b5e873b35036b454b8c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"]]},"UwB":{"atom_surface_sha256":"6e84e7376c8c293cab38c65dd777d5cb2f6eff71a08d69db72fb121f08890cf4","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"595534b3ac3d098ddecd826d16479d95fbb77cb30f79ddb0ba9ff61ba96b3f62","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"]]},"UyA":{"atom_surface_sha256":"caa23b82f06f157872527d5680d2fff8370a44fc38039f1b0761ebcd6b5f6fcc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7d02e6dfa7c4cdde36497dccb7a6cee10eaebec8f8fcab4ad780cb92c5eb08c7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"]]},"UyB":{"atom_surface_sha256":"853b94376859c066d4321cf1adeb93c2a406a396773e3d4e3f07e74859a1e4dd","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"3595aa7ba73b0967e1339605169aa903c0e3738d11e42d14a6bc1826fac8d1ec","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H3O","O3"]]},"VEA":{"atom_surface_sha256":"c6e33672f66ebf8875b926dcd4fef1f9250453cae650df48aa3694be79fa24b7","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a46281e01828f15471cb477f5a0f09c4d17dd36c0d4396975bbaa56ce6e3e844","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VEB":{"atom_surface_sha256":"9fa32ab648616772f67d023aebd8a3822065e0e2dd98979374a90403af6743f6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0122b09fbc0c22845d3f43f753f735341a30a0c583a14817b34b7b08f3875c7a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VGA":{"atom_surface_sha256":"bed9ac2eb73dd77acf71c0390ab04d8631b2f88e7070372caf904f4dd8ca9fae","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6daa522047617d289fabf1af53ceaef21f6cd5ce89bbe276bc757d4fad7b84c2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VGB":{"atom_surface_sha256":"20681d7609c610d05c1fa8e7f0b5d62dda0edebd33e9a7046824d34805b6aa19","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c24c5ebbf21d13b9c7e7edf7edafa28462ba76f0281bb85be798078d93bbe0b4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VKB":{"atom_surface_sha256":"c408c52c95fe6a3a7c4eecd8c68c546bc6ec64ddd575a8cfa4f140a18519c4c4","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"34241b8ca47dd299089ad087e0f959a4741a1e678856e78d189c45bd8435eeee","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VLA":{"atom_surface_sha256":"9da288dc5322cccbb5aaa9ae4a326d060ebfacc9c989f0c4bd4d8a19b7295cdc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f2140573ea10755d2f8f89310d5e590dafa4fe927371de79f0e6df4c89cd0cc6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VLB":{"atom_surface_sha256":"f6f0119942c078f21ec68780c5f2fa5c6f8a65ad93ca84c99918486169c00d06","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c3df1531d4f2a682be6e827feda4b9b3f892a59b86192188cdd7a494737d10e6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VLD":{"atom_surface_sha256":"18d36972cb9373b09e570fbda3b466d4f93939f8e5b05bd7e66a0a6e4676a4dc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7a4c52861790c620966e0740d1240dd497c4b3fd5b483ef982d6e4d30eab9f8a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H5O","O5"]]},"VLU":{"atom_surface_sha256":"853ca79d3f05ce7e1b302c7b81f4c7f5d8fa29e5bef28c5bd974827004042f4a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ce0f6c10114ee6dfa1a9b160cf3c5a7fb4ca9c46daf1b4ce640b3d23d1e18208","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H5O","O5"]]},"VMA":{"atom_surface_sha256":"4aa67db274a0f467c1a8dbee3a809d7a3eefa1054119fb6bf45803311fdb8079","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"1e765e5ef914689e9d1ac6d708e318011be1f8dc1cfc1d306b0a24b86f13f9f6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VMB":{"atom_surface_sha256":"04f9675baf303be210d4e5a08c63be391cb496fe03e7c63dc8d78922bb785a87","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f068d5f29c2a700902694733ba91ac8eb09ea537fe66b2535e2dbd0cf1afa13a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VNB":{"atom_surface_sha256":"7493f2dbc41011bd078965d649ac127dc7271a6f7c33fe23bd792661e0f64d27","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ceaae75a5ec8861de0fcc5c919277f124495959eb846b7bee9e9ee550cce8631","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VTB":{"atom_surface_sha256":"02ee91eef148a60a4981e69b7fa0844a58fe9be913c7609aa9acddc6d8daf77d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"caa297813d6dbdbc7b820e816c0ce0facc5122f75a6fd7d3ff545b93cdfbb258","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VVA":{"atom_surface_sha256":"f9e35cf52ed44782ad770df741428ccd585c59acf66195b0cd7d41d2422c11d2","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"73009383410f03dabeefe6b84cd643938f2906d20a9aee87976d2eb94cae0867","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"]]},"VVB":{"atom_surface_sha256":"e93b53e228d252f4cbaf469f4cc39232e38b59774aa6869c9367a11b24069247","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"534323c1b9320ad5ee2fbcbd56032d7c518543cfbdc74bbb915bf89c3fc002dd","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"]]},"VWA":{"atom_surface_sha256":"ee25929ef6e1ae0dc5812d7ab94043106abc2f320d4ef389a255dccd39efcc7b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"3b35cb82614619c8752daf7efb3d68f1963480163512f99cc2723d87eeb1dcbf","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"]]},"VWB":{"atom_surface_sha256":"404aef3db334abf2aec758ae2900d600c1d7fab33faecfefacdd122de296ce9c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c4bdcc76b1aad5508552dfad6e3704cf0d5ec21c6a3e67359f20ee26d0528925","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"]]},"VYA":{"atom_surface_sha256":"604ba5b2851b180751fe11999760b4477d83b251bee074067e371a9b8f674c0f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"332e050b800e7b8fbebb9cbf8d5c3e44e49327108bb95d428385cd1489a5248e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"]]},"VYB":{"atom_surface_sha256":"cb479e6576b6dd36e9babd28b5227b5868775c2b9c3b5e4f54255e1ec21b5265","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d0314202ab245af938710575023d86b8ab5427eb5a9786020c36347a28062b0c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"]]},"VgA":{"atom_surface_sha256":"1e3ee4261a05bd49ad19af71f06a6012016e4f95f0331079709c38191f7bc861","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"99b21f5eb5f3632479211a247d8d6b554b5206592ad846b1af253fbf619ba929","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VgB":{"atom_surface_sha256":"68e00a9e2746de599880bc0f695131ac25d074131fb40744c5dcc0fecfc58ff4","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5858e0d7d5dd5e259de1d7ef285caedda8bc583f6e55ae34b7a13c44876dfef1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VkA":{"atom_surface_sha256":"bd28e0d344bc1302413b0efaf3a73c62f787f5fa54ee20f3116ff6358ec48428","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d3d8c5b0327313efa6f4f8559139aeb26860869ae298bfcb6415e6961e28212d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VmA":{"atom_surface_sha256":"9808608f7a6be4f766e8ec17fef8b8af398fcf18d9a8a31cb1983b0c721191db","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a1826df32c798f88f1847f1ffe1df8c349c050141b74715f2b35341db2ad239c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VmB":{"atom_surface_sha256":"5fd19ba6ddaf2c119597a88cb54dedb4e4c13d7880f6c0bf2dbe11fed3180d01","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"059913673810ad58693e6035b5a0a256f0aff5f520233919f2dd7421e62e46c2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VtB":{"atom_surface_sha256":"038b08f212e251ebce25fcf63a347bcb833ceca425699a63fa25fce58847f4d8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"30d7ff0c3becbe8338d6dc24b71ccd29dc397195faea300f6a1d2f9d7de67074","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H4O","O4"]]},"VvB":{"atom_surface_sha256":"3de1356323b9ea21ebd3d9f3810836e560da65d10ad7b35c0aa974b20aec3a8d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"8b912289ed302ef92064396cc30d72c7beea9c2f2705a012fdb0ee118dffb652","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"]]},"VwB":{"atom_surface_sha256":"93df7a0fa91bc6929f5fbf82a94b4c5d0f04bbdbc763dd09a6e3eda353efad90","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"56ac29a4d99fce53ec63d8e7a5d1502125f034ab45005ced73aa45da0f2c7cb0","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"]]},"VyB":{"atom_surface_sha256":"a9e122088e8935b8c5d0d20b2272b5112280b90d016e5e31646d61c7676613d1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"2b3812494d837d16bb785d674a3a9e53ec431a04ef93608c65303634f860e0a6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H4O","O4"]]},"WCU":{"atom_surface_sha256":"6dad83ceb5882f3b277f1a209d16176b9a1d6d301fc66614969b87f8fe09a4ca","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H11"},{"element":"H","name":"H12"},{"element":"H","name":"H1O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O1"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"1fadefd73dc0ce0b377d068a518d8b3cad252bdb43adbde5d99e482f75bb3a03","covalent_bonds":[["C1","C2"],["C1","H11"],["C1","H12"],["C1","O1"],["C2","C3"],["C2","O5"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H1O","O1"],["H6O","O6"]]},"WDA":{"atom_surface_sha256":"d44b63eea09d80c3175886b98c056a5992cc7f56a5862f61e90ebf04b000b73e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"78d84d930932e75f06be8489304c6e8f494fb1ea43c0bd904734dc4c746082df","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"]]},"WDB":{"atom_surface_sha256":"c131a38f931f88c02aadb619d572b36c5499a97977a65544f1466a8216e8f0e3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e3d69a454e69bd697ae2b1c5b33fc66f6ec6f99f1932e6d8eecae2eb32e24222","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"]]},"WEA":{"atom_surface_sha256":"095a6fc6e258c642683fc9280dcbe256dbd60fca6802233c073ce7dc0a6ea7d8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ce9bd8d88508041376bae387079c179a786bf3807379555d6d5638cb6461b984","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H6O","O6"]]},"WFA":{"atom_surface_sha256":"86d6407ec196acd775f42c38d2c281883fb9d6c15ca6b18993b8f02c6209fe7a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"6dc0af8a1b5c133901cccc92421fdb3c1d1f81880b187fbbc43f961edf0c2819","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"]]},"WFB":{"atom_surface_sha256":"7a9f9e1e3844449145ec8b273c2b0bd3ad3c6248d0b2637a79eb7d7af1768384","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"759b7eb70e2f0a8a923050b6cf33a3e2a7293512b2235be41e6a36cad936759f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"]]},"WGA":{"atom_surface_sha256":"be77f6da158b3b02c32d0b3b72afc35b6712bf3abce9e471ca46d46c8a674f03","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"38b848fde7fa6b1d0603870c115086e631a19b3095e7f404806045c6806ef47d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H6O","O6"]]},"WGB":{"atom_surface_sha256":"e38f5e53069604a6a323ddacc3ae45a5ed57b4e1e2c3283d124977532ee978f7","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"1aeabcc978e729e89acb0bcc39e3643f8d775703608ac596410a1be0a4d92ad9","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H6O","O6"]]},"WHA":{"atom_surface_sha256":"241cc85e36ca6831df368c49bb7a25c37981909077ff071736a770ace7f53060","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"833917552c5bae1d4040ecb337957a01cae056b4c9441d6a6d189b24cf02d926","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"]]},"WHB":{"atom_surface_sha256":"3914db5cabf6eea0c9e60fb0a406a5a4e5a5778e1b12e9b4935a8c72aabe04f8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6M"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"8572ff449c96aeb2b7842c324ca34b86c2163d517d893ea58216cd6f889e5f83","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6M"],["C5","H5"],["C5","O5"],["C6M","H1M"],["C6M","H2M"],["C6M","H3M"],["H2O","O2"]]},"WKB":{"atom_surface_sha256":"2f2c38ad11af4bb38666f666e2b7e133b5c2561e3a9c9e4bb9e9e09b0e525acf","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"3f9414407ed53d3c4d1bc0118df53cc0d0d53f2a3a00d1e6702691bea910e78e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H6O","O6"]]},"WLA":{"atom_surface_sha256":"283c986967e150d81556298a5bce8acee0061f883a7e582b6e853b74b7733820","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ac61b4458a8a9347531f4834e926ee1bc0cc35eea93bdfaa21f3c4dfdffbb8c1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H6O","O6"]]},"WLB":{"atom_surface_sha256":"02b4f571a630ae7b455936d69e226106985dc4164b66826f36a8c629a1b15f87","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7956010357835061b4f9f16e96cf523f4cfd549e677a622de04cd8bc8436fee7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H6O","O6"]]},"WMA":{"atom_surface_sha256":"91e7a01c64628c93c7a54b142445505a99fe7356322e534204072e3a51229106","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5bf8f0721079d3dd557581070c5e3e3b31ef4bfcf4aea882027f55aa6d1b9a59","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H6O","O6"]]},"WMB":{"atom_surface_sha256":"b16b8aad215976f3658dbdb02e2366eb5fa47bed9a2f453b5857d8e49bd8efec","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"8e5a43762c3edaa885d052a385a93610e4747628bca722d5e9bd64119e03cf48","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H6O","O6"]]},"WQA":{"atom_surface_sha256":"edf388647e222e2e924465cfa5d30ac8fbaef9340c89af230b1bfb2ba602f5e8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"6f0c679dad681686282c929afe838124023882216e274ae388743d5b16144a84","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"]]},"WQB":{"atom_surface_sha256":"ebdb0eb310c08e0e2b194b605390ef156b70d71fe54756afa1a8653e8d26a7bf","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"5f00afae5342a9c333acf7925a8c5f852e685c3a1835009b15910bf347f5d172","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"]]},"WQE":{"atom_surface_sha256":"dcaee7ff87494f7375ffe4ac4cc2f6c3102ec0c1aa8824067c743c1c4b5f6f11","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2M"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H21"},{"element":"H","name":"H22"},{"element":"H","name":"H23"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e0232d8d78057b30d1bcdfda07f5fd7fcd9134fbc194d21d87e4ab7a1acca3c6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2M","C2N"],["C2M","H21"],["C2M","H22"],["C2M","H23"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2N","N2"]]},"WQe":{"atom_surface_sha256":"ce19d3ee1ec6b558dac33038a8c175a31d3446874528696282e3ce88cfec726d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2M"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H21"},{"element":"H","name":"H22"},{"element":"H","name":"H23"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"149b0f4cf7581f63a46f62c470686b7e40543d1b8975130eea6008ede443c567","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2M","C2N"],["C2M","H21"],["C2M","H22"],["C2M","H23"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2N","N2"]]},"WRA":{"atom_surface_sha256":"c9219f476ecf0b82e26f75000052b156e533e8b79c4c7bf3c38f0068b9800748","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"990bed4376b02fd16e16ad781d9d260bf32d73b401a2322806c60cbc0e0f2152","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"]]},"WRB":{"atom_surface_sha256":"aab31b2f4b11f2da330f20429ab49936738333e204adecdf3d2097b65c41e6c1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"edbc3cddb400448bb3675b6a987165cb25a7547f66924e51c64b100b43396bb8","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"]]},"WVA":{"atom_surface_sha256":"fdf115006ce24bc9566265ce9fc2b7d6d05ab7c3dad6c09a68ecc23197b9260e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6031164fd01e2a977105359bd8ad7c025e8d2f4f1f7f17663a12415dcf2c0ee5","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H6O","O6"]]},"WVB":{"atom_surface_sha256":"1d0d6214656820fd3a2606327dfe04ac3377f34d7a5362079425a954ebff3505","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"d08ea6e8eb589b2a29ccc739207ff4618c6310781bebc1cb8c353aeef80c90a3","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H6O","O6"]]},"WWA":{"atom_surface_sha256":"3bfbe3647a70326504165a6316e3433285c996e1c1da4f8f84c232f113a3ba40","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"cf82a54ab40e88cd437b65b8503ce7dc5325e55cbef2e996f91beafad06e9134","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H6O","O6"]]},"WWB":{"atom_surface_sha256":"054d8f9fa3d4508d94d25c0a5e3e4dbb47691a7b68e71c975ed9713b4c37b81c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ac03973c0f3e052688657ae2a91f31b284ae376c654fc0ed41428acae391def4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H6O","O6"]]},"WXA":{"atom_surface_sha256":"f162e129f9c7b3ab5fadebb994756d5213d74beb8c86b41612805d85e932b86e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"628d54d6ea2a49befa7041f967465b6591c0874ba42938255daf3b41525c0508","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"]]},"WXB":{"atom_surface_sha256":"023b81b2a87d97c1a20dd5c47fef3caf9b5ed7b56908d4b5a335ece2286abcb1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"8cc7475baf11e8abfd455513b218208df929143b0caead4898cccc718d201f08","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"]]},"WYA":{"atom_surface_sha256":"a333840d32b9c75c2b075375d610ed305563a33abf4a7b8a0fe3c8b581aab672","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5ea60387ea1f3a7dd565eccb279abf2d00fdbd78c6d890801b7feadec5181669","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H6O","O6"]]},"WYB":{"atom_surface_sha256":"2da36a3bfed1f76acedd0a9a121113791686822d5196949860e660ed8b11e34c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"9728d8408bab00fff072765a7bf5d1ddf178efb03de89b2933cc0860ac4a89cf","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H6O","O6"]]},"WaA":{"atom_surface_sha256":"03e913257c614d4add51f1e71f20b91df461c0d35d67176abaf0e62997a52bc3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"08f286027e61154ff67d4d47c8561ca1cfb4e07942fc632a705d610053eda4c4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"]]},"WaB":{"atom_surface_sha256":"8371fe05be68e49e6e5bd868e165a67d5a51fd6e9fb0c624c0783b0240729bc9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"5625f349e5e6d85d4570ca3abf4df62c955f9bae2d393c5061e1e7a2766e2f82","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"]]},"WdR":{"atom_surface_sha256":"548a17b4efe0b6627e8c892e142eb30dcfda43bb871bb343cc362f83b441bea6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H21"},{"element":"H","name":"H22"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"edcbd77329ed5a69227a91309f000732ee30dff1d8f13bf907d899f94897ece3","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H21"],["C2","H22"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"]]},"WfA":{"atom_surface_sha256":"0ff926d9ac317d8b1007e5169e5e5a9dc99f19caf9e5da355a779b05d0f2251d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"f2c339429454b0a63c88cef279e118d1120f7b02ec2529e5baee8ce8068e2f4c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"]]},"WfB":{"atom_surface_sha256":"7027edc860e0dac872f047539916e6ff5a855f0e00a523881ce40cc6f7013108","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"df12e87794ecaa1eb45470cf63559c198ceb40fdc4fabbc0861a225c841d7800","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"]]},"WhA":{"atom_surface_sha256":"9c62738a08351874c8fb01d7230321de0a62c5474848e18698678e56d859605f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"809f0b5fd60dfbb50e319e827a30866b1c4e1eeaa41b6d18b1968bf261d1da2c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"]]},"WhB":{"atom_surface_sha256":"bb701e4fdd31872b8655a1403e61877ca873082cbb45c4d32c39adf08dcc011c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6M"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"a7a5a3af291edbae286ce4922bcdfae0ad47a97b114fc74036c2e20864d3167f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6M"],["C5","H5"],["C5","O5"],["C6M","H1M"],["C6M","H2M"],["C6M","H3M"],["H2O","O2"]]},"WlA":{"atom_surface_sha256":"9a2f11db1e3eb462c25ddef8afbbdb43b25a899613c6b508c74cedcd760a0651","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"54ab95feb33bf9b86f8e5732ce0641d69be1a016254bd7d58b861ce1962de348","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H6O","O6"]]},"WqA":{"atom_surface_sha256":"4ef4d058757c0cbdb426d29d0cf53a58023496ba4eb7f536c2fc89600ec806eb","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"c34fdb7e48032ef457e42ed93ae6ffabb3c025c6e73ebcce3ffe30bc7fe23e60","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"]]},"WqB":{"atom_surface_sha256":"8890698f5e94fcaef5bf6341f46d5e2f08cac16b7747a6fbaf88b5f7fefdb74f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"b88d8cee1ebfdd656a5423ea1bdecc4e76450983c4b2d4bf28e13c3ab886a569","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H2O","O2"]]},"WrA":{"atom_surface_sha256":"f66613d5c80491f074afa35cba3e9af51bddcc7f14cfe315b70fbe087fae48d1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d0df9cd356811fc0689420912c5ea59bf3462dced19cc94b0ce7f91b14ff3e46","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H2O","O2"]]},"WvB":{"atom_surface_sha256":"08571b4f74251b3c64c00a10aad5f54932119dddca6e322dab5f5dcfcacf207b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b4d4c264c02db317008656c6a2e3de71d50f08c7723f8caddad83ed045daf13f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H6O","O6"]]},"WyA":{"atom_surface_sha256":"b4300ba5162a80317c47dca233299b13870a8d4a2b106d04a876f91e9601b6a8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ea30aed899bc50429102029bfe0487d3f0bbcf576469e1ce568def240d6ef67f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H6O","O6"]]},"WyB":{"atom_surface_sha256":"7ca9c1a3abea901859158d2d2e1ace321eddccc8097a1813598d0734f02afdaa","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C2N"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"C","name":"CME"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H2N"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"N","name":"N2"},{"element":"O","name":"O2N"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6b8b68a76e99ede55cfbf779085f5f11fbaa3c26819ffcf3d6e1906cf8ac84fc","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","N2"],["C2N","CME"],["C2N","N2"],["C2N","O2N"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["CME","H1M"],["CME","H2M"],["CME","H3M"],["H2N","N2"],["H6O","O6"]]},"XEA":{"atom_surface_sha256":"92768ef8060dced0232de8cb4d8e85cb533da37380d34101f3e222b97347efc0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0acfa0abe1dfe3d8006a058aa0ab34ce04c884badb276d07844f37d4456b1c43","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"]]},"XGA":{"atom_surface_sha256":"890ccbb939b1dcbbbb0791b191428afcffa337b0d8f6b22ebee651f48156ebf2","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"76a0686cd5c0b23828830e73b22a9c2d86c75a8df68c4a724494c59a1bbdad57","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"]]},"XGB":{"atom_surface_sha256":"674cf1debcd3ecef22ff7120f08ae6c016dca5b30e652a9ccd896dfb748652e9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7abf45806944dbbce5e1ee24033e6d6c0720cb07a3711118909552f7c4ac2100","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"]]},"XLA":{"atom_surface_sha256":"b45636b976bd710302ed4b53b35177b4c055db41ba5a78438b292f5a32a6a020","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"af688633c58c423a7f889e28886d914743abdea219b82cdb4dacf731d1c143a2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"]]},"XLB":{"atom_surface_sha256":"111a6ea99947b82322c739017ae00885e1768a462fc3a4cac41ddcd7567bbda6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"465515e5a723c9c998fb81ef20e4f423cf9ec4961cdc78d8470ee0b475c8b595","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"]]},"XLU":{"atom_surface_sha256":"1cbc9a825f2aa7871b9d468bc1b4d0a5775c0f14a27153e09056580cffff89c3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"78696668e610bc7052bdf9987d8b261f24dcdd30c5cb335028143e2815b9d452","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H5O","O5"]]},"XMA":{"atom_surface_sha256":"3d3b690c03265c5163318b89d70382e3254f8add21ffd7fcf77acb5720663316","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6bff3f367adbf990f31814e0bbb70406d5528b87460a622ba978584b22a3fb8f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"]]},"XMB":{"atom_surface_sha256":"c9d4287d7689a8009273ccf09abb27cb232e5eed5dba65f0918710aef43f9bc8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"a352dbba07cce15c0d023326aec90d149165703e749f1f43430f9b748d518449","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"]]},"XlA":{"atom_surface_sha256":"d536fb6c731821df2abddcdacd8fdacd4e1e509123354a1d491910a4e12c2822","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"2179ff4449af654f5f05a433f560119ec62f5be844b93753d3b7383fe1166c47","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"]]},"XmB":{"atom_surface_sha256":"8e5767c2a0dd7cf3b3f13ed9bd6f836972c466c49bb0c58ed22b1277d1ede83a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"388c170a58ca0e387aa6fdf254fcccbcd29910aae5b49f09743d0bc2dce20006","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H4O","O4"]]},"YAA":{"atom_surface_sha256":"0ad64ab94ff61a743420a7551b7adb360aa501896e9150aba460911d1e91fd0a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"db5ad31e7930c78b197af24e51b3f1dd4e6db94c899fddee4d850dd27319a7be","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"]]},"YAE":{"atom_surface_sha256":"15e05e0e0a104d0133a001757df386abc81f8602ec0c0ef22864c1867c863204","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H31"},{"element":"H","name":"H32"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"805cee1eaacd13e9b2e002f1e1c782a98ecc8d842a1222ebaf69f067b5f8d118","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H31"],["C3","H32"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"]]},"YDA":{"atom_surface_sha256":"7c6cb8930e75702e2041cdd6dc48e4d78092c7d255dfcd50f814508d9197920f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e23da09117070647c4eb9d6f7a7f36c97645407c8ca4f8132a6bf637821b1629","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"]]},"YFA":{"atom_surface_sha256":"6440d9f6e9eed17645396def04c23e60407c89416db68658e8dfe2205ff518fe","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"90a2ba11285bb787911037bbf2cceae01a91bc7b3284f152a818cddc626ccda4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"]]},"YFB":{"atom_surface_sha256":"98f49a41f0df4f911352821371bb6f0c7933201b687d4c1d857a845497787ae9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"ae09cfabb572b3e1d88561a46e694bd971917371ff686498eb9dd982de668d3f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"]]},"YGA":{"atom_surface_sha256":"710a8a613ad874efef96824f706bada9671ccf79cd0d369eb4e2dfda545b3f5f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6719d92a68ffa5d77d0b3686a4b2deb5cbc054baf6d95fd9bc64ebe8c3456aed","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H6O","O6"]]},"YGB":{"atom_surface_sha256":"3615872139c00a0a13b56677c7bee73e19ae69e7f8730c71e107ced1122b8c26","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"bfb0f5d44b6e783747253c24e112cae6ea3f97c66306bcfd84bf244f762719a1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H6O","O6"]]},"YHA":{"atom_surface_sha256":"3bf9a080716d9268814a108d01ecbf850ca7254889ccc858feab63ecf76ee8d5","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"9698ac67a2754879ae0cce6682c631213a99a715b7caee4106212b417db853b1","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"]]},"YLA":{"atom_surface_sha256":"794660e0e508c1eb8c9be4ca7bb3b248b14eb6faee07da251ef98f1b8892f2f0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"9680f3a7ab79673a21db1e86a5b48b78ef4ae461812d3ceb2bf11ef68b9ddd96","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H6O","O6"]]},"YLB":{"atom_surface_sha256":"7f88625e851899acfc5a9d78d9e2fde96f91f5d3dad14939ccad849a4910cdee","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"2467185d4c6d3d74768d5268c75656851ed5dfbd95c5ca89aa17397856b72146","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H6O","O6"]]},"YMA":{"atom_surface_sha256":"5511ed2f12cd66de803e2522222f973af5ceb1fa45b3fbe66b9ecfb6393e1f01","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b328d6c7bbd522bf01f6fca6abdfa1b866248aa42d4602635c60cddb3bde6bfb","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H6O","O6"]]},"YMB":{"atom_surface_sha256":"74dd797a435245a6b8ce2a36d96cb8e644e02d98457a536f52b8e47bfabc685e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"288c94653c518d229b2f4f7cf0f4368dfebeb4a9b3c2f17a3cfbb054bd0081a3","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H6O","O6"]]},"YQA":{"atom_surface_sha256":"7a7a85f670fc8b6f4f1efa0e2f92e7484c87af9e65f012279ba9130ded88fc9e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"62703e1c4fc5a4b65edc9c49346d909aa0137b2a99c7ff77ac7724bb4d6c1d2b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"]]},"YQB":{"atom_surface_sha256":"fc9bc060bc5c3681e3514adae9f1481033e1e9a12090c2835808414baf8460ac","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"da615ec3235d7d07ae226afacfcb81d3f16f495e04cf1441eb19e737b3ad4255","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"]]},"YRA":{"atom_surface_sha256":"550090b6b0b2a93dd6b5bfc1583935f1db9fd0115ed838abb0d4413fbd6f7c0f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"c5c6bad55dbf9d183d246fc8f2c0d922977b398ab51192961c898b636137301c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"]]},"YRB":{"atom_surface_sha256":"3945cfe90c546323a032e21afaf3d46d3374cc0b5c8966b5be472c651fbaef92","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"fbc527e3308b03f58c27b287a0a78b5971a4c7e2b1e905c394b9854134dcca22","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"]]},"YXA":{"atom_surface_sha256":"a265da65f06468220ac9207d03e0a0f32def2e6c578df6a298b2f2a2a4ea2695","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"1209684f1908da7467afed7993399c3004d82e4b3f5766486b2784f30b01245a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"]]},"YXB":{"atom_surface_sha256":"6edba2a21b696f2195a4bd03f6fa29b0cfdace7387455b36f417239854e7e407","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"073ac4c5786d2a6794307800eeb0446e1625bf429f642cdbb76f95f6dbe92179","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"]]},"YaA":{"atom_surface_sha256":"5b6bb7c48dcc800928417da30ab29174d2208401bc06b8b45dcefb21312905a7","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"92a075d00faf30bd0fbe8154cbfd4a7edcad2891d459435bb8e47fa7c8886a5d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"]]},"YaB":{"atom_surface_sha256":"934cef67c880df2dc692b5750dc83e58ad578826c3b481ec993e30548c6ab228","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"52f5e8e965d4e6f4de43c5d972ac03b47cc4271c40fa61e31938cc05a5f9f843","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"]]},"YfA":{"atom_surface_sha256":"6f2ade5add36d7b6c659ca5e4333e438c78609eb829808c91e96f8331cd4f280","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d7d11f54e7a9a39343fbbbbbfe9d3bcd26cfde0ae768b2db564b53db23c46a9b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"]]},"YfB":{"atom_surface_sha256":"3ec6668f75f2aad82c97d33b686bf4c0bd582d1a1e7286a170e0b406c1e54ad6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"76ebb699265b26b11b386de152c3732154d6c5e164afca74b49ea3ca4102f095","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"]]},"YhA":{"atom_surface_sha256":"4580d93df78a0b7f58a00ca486c5d77b8b05d9a3911adcadc908f8870c25d056","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"9055b2c11b8d9c149511f8e85daa2243525c4d959ea109ea1c91f1ed00f774c8","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H3O","O3"]]},"YhB":{"atom_surface_sha256":"7e78c05de7594e752de5e29f59bfae77eacd31dfef83e3511abd9a6d86bc590f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6M"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"cf791ee6acb05bc9e74f79e317bb4d7317120a148a1122bd97269984d503f39a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6M"],["C5","H5"],["C5","O5"],["C6M","H1M"],["C6M","H2M"],["C6M","H3M"],["H3O","O3"]]},"YkB":{"atom_surface_sha256":"814c80b4850bffb0efafefb3b3d2a67fdb031f38b72d8aee88322e4d87884153","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f85bed15c0712b2a9c6df67131d178e0bd62373a74434b95b3a65ccd87b77275","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H6O","O6"]]},"YlA":{"atom_surface_sha256":"b64e19405c606f1ff4df593aefb45e07961302f0e33a4d273ad7a68d0bff2001","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f0d5bdfa35c24337e0818c831631c9ea1601bb0c66164ac896579a88bd5afd34","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H6O","O6"]]},"YlB":{"atom_surface_sha256":"58a24953b77520cee1f5fcfe458b1057e8b75b760df29354eff77f3d1f4e2527","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f31f534304d9491df489fdef59f7ba9890ec77b8304eac5bdda839238d12c97d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H6O","O6"]]},"YnA":{"atom_surface_sha256":"d0001b92f6308ba0ee411988b8ae0f58ebc224277747d0c1eaa0e84421c9f1d0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"cfe5201f02c3fa1c9b82379e8caa71fc820c2b5c8239e1e13f4eba5a993d0d0b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H6O","O6"]]},"YnB":{"atom_surface_sha256":"5ac5297d36637ee42585a873ff0fe6f11f7c43b96c5575db071e782adf059fdf","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"1dfae491875981be0916ffb6e7472c53cc980e9ba7d1ed0b06cac827d22053bf","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H6O","O6"]]},"YrB":{"atom_surface_sha256":"e8eb9ab2538a39bbab954c200ae2ee94808d1b40aa19b2bcca4aa377b36d2d7b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"db5eb32298bd7d64f2a4e2450a5c41d7f89795400679027aeb4fda2a0d87559a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H3O","O3"]]},"YtB":{"atom_surface_sha256":"3e07fe6595bd19d6b4e6af81a227f47d82171ca6be159e5db9501eb0f5d47308","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f24622172026a60b26fe210e9b3c55db8fa8aa8f6b9c1ef19f986d847cf282ca","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H6O","O6"]]},"ZAA":{"atom_surface_sha256":"b831019228fd0db4780f4d60c50f1b6f6c81deebae2432cf397f2ddeacc9b5de","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"6a58d8ba1f38c8c5ea3ab47f58b2d3e12e124ca334abcb8ff53c7d8e499634b5","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H4O","O4"]]},"ZAB":{"atom_surface_sha256":"7d5df4a678a991fb0ff4bca0f0a1d347aa285d5bce7056a795a0ecbfe8072cd3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"4a7dda6ea5d37dac2e9b24962324fa9c7feb380b27393c2f1e4fa9ec527a9b6e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H4O","O4"]]},"ZAD":{"atom_surface_sha256":"44e98442651160a283ed0c9ae49fb615f9192b3f573a12f43b79c7a7423ae9d9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d03a8c1c4d5b70940c040c2e1534c4ebf9bdfb8267d63ded69389ca1482402d4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H5O","O5"]]},"ZAU":{"atom_surface_sha256":"334022608807ffa45e84fb2c41b3fa6c2160364099b07d13bc7973910cb1769a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"73d18f4892097ab4c07bfbf30d5792071d23c33d3f95d3eb773861ddf5c5acdb","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H5O","O5"]]},"ZDA":{"atom_surface_sha256":"d29028c39f973c5dee5968ffa0ec9c4400ca42e9d2aaeea6a582c578cebf8d8f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e7124215d1309cf70f6047cf4e6d5d272bd117835e69e537a532c179a5206f44","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H4O","O4"]]},"ZDB":{"atom_surface_sha256":"3be8b5a8b0abf3501e2d27c4c096a7987463c643147e40a8e15146b2e5ecd300","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"65cacacfa3719e7733355b2882ae23bd51bb03e341e9f6d62efb2f624bbedcb4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H4O","O4"]]},"ZDD":{"atom_surface_sha256":"4d4bde19fdd565cc0faa4aa5f1329518cbd0575fc2ed39329e58cc1811c21c0d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"bc716678b58fe02f0571959f11a5b041528df67298f569f95a014ad4545b2ed5","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H5O","O5"]]},"ZDU":{"atom_surface_sha256":"36c5e0318d9994eb507659f0b6de37d04ed37e3b1b4f736bbf7409507927dab0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"844eb698fe2cecb9e61ab528cfdd1d1911ba6767695f9b17f2e24a41e52baeb6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H5O","O5"]]},"ZEA":{"atom_surface_sha256":"dc393820435cde318c4bdfaa32fe4bdda7a4101450e8f1b4cbfa814ad77e75d5","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"3c8b842a2aa8f2b0833b13cf720905c1a00d5493a94363d9af450b147784e428","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZFA":{"atom_surface_sha256":"8266f5095bd3375f5ed18428d2733412dd3d1c13b86d085361c8d9e588a8e94b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"9fa2353eda646363973c8f52f0988de2855caa49edf065133e3af92a4580c607","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H4O","O4"]]},"ZFB":{"atom_surface_sha256":"4c06bd8fba636e909e020ca7241c88f2c552c0e316ea464eb709dad0a92a0fa2","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"c55a6f98a935d197822eb7dc780ea396d7dc60298c621d87e8b2520199666bca","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H4O","O4"]]},"ZGA":{"atom_surface_sha256":"157e93f71d1f12d6e542d21c0e6c5bb8a18993058d077659cce238406ee5f029","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"fb0f0a1f7f4c34013bc4dc6d20526598274a9fa575b517eb453c7657b2351709","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZGB":{"atom_surface_sha256":"0b942da4a17c1ca6ab4a1f2c59a680ae684342cc67316c33414ac104deae0830","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b016ac100dd0b260230d3ce16d2c6c996cbae12cbda9f282d1591ee390039d30","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZHA":{"atom_surface_sha256":"050a03ce65ee8cbf5a79b985f060a9a3f14102e45673f5098296a3546a773ae4","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"6144f543c10e6c5295932c5de7135ef9808758fd3870d73441db0f12ce79cf34","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H4O","O4"]]},"ZHB":{"atom_surface_sha256":"685e2c91c40f2040505dfe14fed43215859f995699de48ad584530e045497bf1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6M"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"46a4ce36e1b169204006bb13c136a11f6793bd5059c616fe484427923bfe529b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6M"],["C5","H5"],["C5","O5"],["C6M","H1M"],["C6M","H2M"],["C6M","H3M"],["H4O","O4"]]},"ZKA":{"atom_surface_sha256":"7229b86144c9b326594b0bd9567482f5e690058eda8293e3f10523505f95f8eb","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4f6badab5c22a93e66ae2cb932e1691ef9fd3e9fa43a402192eb3d1891d9f74c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZKB":{"atom_surface_sha256":"11042c9f91f49708741e511d4e58e40dfc01dab154137f58cd6327163d1f862a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"c8b40a15e9aadc1a70d74bd9382257201ac8a78787f9eec753980b37f6ceec40","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZLA":{"atom_surface_sha256":"271dab1429a30906f88d4461c85fee94d12cfee0b05881fe7c88d1ebf5066e2c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"0a2a7a5fb5e2a5ac352cb81510d18854d89616b23fe70c1de265e9af27e270f3","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZLB":{"atom_surface_sha256":"9067b0259e754ac96f9785375af154aa243e61439c7e5aedd814e29215cad9ea","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"74c5af53152f09e824a702e98bccc3f5f24b9555205ff90cb477e12cfc36d3d5","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZLD":{"atom_surface_sha256":"3d3c73735e0f777ad7321db856296bac1fab670be215f8bc0c413d6cc014c3b3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"97476db94018539157bec22b6e4b9fd4f801d87223d19fcc104c7062ee799bbd","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H5O","O5"],["H6O","O6"]]},"ZLU":{"atom_surface_sha256":"2ec1877887f088f5cf3a68715c8557a4a385ff74efbcc47e16e4d1e4df164217","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H5O"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b816e1e7347692fb5f6e2ea555025385ba1d82e98dd9cc460acd5e155c8f8465","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H5O","O5"],["H6O","O6"]]},"ZMA":{"atom_surface_sha256":"d350cd7bd6c093d31a9995fba8a3d8da4837a9052a8cc061f6ac9a074040cf90","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"34dfef125773dc6177c5006989594e7cfe0541ef35fc462f87d6415120130ca8","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZMB":{"atom_surface_sha256":"381cc24144bd97c49273dd93e0f7a8fc4ec43379a099cfb326dd5c8a4a9a3949","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"6408c43e3657ca4ae5c5ea4c5e6eae30887a27a6c177ab44447e890d13256d13","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZNA":{"atom_surface_sha256":"cd627a048fcf58eb1f590cdb1fcd6b49dd0f70c4d355206873a6544dd9638959","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"585c4b669ff12b2e27ae49eada72a5a910409eac85d9f017f6fc8a80429516cd","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZNB":{"atom_surface_sha256":"623e7e484e7725367b667a5090083d4676decb51bd19e5622edcf23eda4ed9cd","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"5b7dcc967d36c647c7cd0a5215cae4a1e137a347535c04630608beca8fcb7035","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZQA":{"atom_surface_sha256":"d17dba29631a5c36fd7c875a539b23b6528d7f09767f6f1774c7ea37b4809927","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"656c37e7e1bbf85c5a8ad1445006e27a19ab47f3defab62a0e621e7974e7632b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H4O","O4"]]},"ZQB":{"atom_surface_sha256":"3b8e0d53ccdbe26798028003d759609ec921b7d55d949bd5ecc10708617a4c35","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"22b840f96dc45c5311d64a249a480f8f8cd8cc64483f8931a73ec9d6838d1544","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H4O","O4"]]},"ZRA":{"atom_surface_sha256":"f10dfc1248074aef00c0dde18620398f3af07287cdb3786d88aa14cd34173be1","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"3945a1cac9da1ba1ff81dabf7c01ae6e3c5c250e733ae764c9e505db5f79fca7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H4O","O4"]]},"ZRB":{"atom_surface_sha256":"83e2310a0fcc6403cb211c3329e0965766c47f05419e37106d0571965c2fcf9a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"5868d60a16af7bce7f276ce932404e313a7620de9316fdcc607aa863f79c6980","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H4O","O4"]]},"ZRD":{"atom_surface_sha256":"c22598d6fdbf12e44861d1e9aa29f66ecbefdb4c30812166e83ce169622ad3ac","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"0cffbe42c6e0aba55b12fa7876e03644b3823b58a85b2fb6ab5f5c7baf5a7ad7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H5O","O5"]]},"ZRU":{"atom_surface_sha256":"a0ccda7a06a310255531956dd9862eee795a25ce0aa64f62850c6f21cef42db0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"1169ee1d694868136bf7dda537a2964fe305e19cf845f0aadc379048e2126b3d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H5O","O5"]]},"ZTA":{"atom_surface_sha256":"c5e2a47c62951c200f85472c7d467ccd1db10bd27acd72cf69280821b4b38b4c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"b696edeea1d598b65e3eeebd1e860aadc6b0ca602763c58a2085f42926afb369","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZTB":{"atom_surface_sha256":"702e8fb037ba9cc01eb26170daaa1e01ece9671b67790998ac8f943890923767","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"cfa37e087b34e835b4e597223cd6336c3352b5022d16517bf1c40eecdc921e4f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZXA":{"atom_surface_sha256":"301dd9568102899bcd69a68aea1c62d1877d97c317b655ea8ea3b444c505698e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"30baf2873538c41e5045112a04c508495bb4f34eeb4ee9ada9b16fd5e74f0faf","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H4O","O4"]]},"ZXB":{"atom_surface_sha256":"2248dc05f547e236a56211c2a9cdf042fc4252ba6c3f60382b0b8e8e1a9c7019","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"26446c543734071c7deeba253b4bc933f14ec482becfb7ad388e7e652ee95ab6","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H4O","O4"]]},"ZXU":{"atom_surface_sha256":"f2ab3089988cebae0a37e64c1e28906fc7ff4cf2d825ab76a90eb71c45085061","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"37081d6c22ad6dca74fc3db41282159086bd79295104f2f54f9f60b75dc09df4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H5O","O5"]]},"ZaA":{"atom_surface_sha256":"391ce5a575d108f0b98c4e9e556065bd1d191206829eeb8bc8ee2feb6108fc24","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"f3ba3c1512682234f6875a62b20bcdf1adb75e4ae0583875b4085b368dc1e244","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H4O","O4"]]},"ZaB":{"atom_surface_sha256":"582ab973ac076c0cf218db90090682b9368746c728e030b434e860bb7cc555ae","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"a5824468d40f5c82803f168bdbdc1dc69e0664d81fe8db919c8006967d3c33e4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H4O","O4"]]},"ZaD":{"atom_surface_sha256":"b6f0e79a3007af662c5324a7451494b7bbea518002613ec41f28d689de982e2e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"62f605b5dbc0c5ce1850d1a8357d2f4565c161c8c98dadc098da4fb965f34ce9","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H5O","O5"]]},"ZaU":{"atom_surface_sha256":"75ae63ff53888041c21f1b0ff248f965aaaa089f836eec408416a7e25f0bf85c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d4d691ed923ca59782e4488fdc0c36922e50831447712b4d0e33866bae64fe57","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H5O","O5"]]},"ZdA":{"atom_surface_sha256":"4488cb912d3f9ddf8628099d173ed976b00e1dd14555543e3e9e927b27d9e528","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5A"},{"element":"H","name":"H5E"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"34ab544e0109726bfa5e2d7e170d67bed6cc1e5f3fe3d083548fa76917405493","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H5A"],["C5","H5E"],["C5","O5"],["H4O","O4"]]},"ZfA":{"atom_surface_sha256":"d0512e13f62c124cb507a68580a1c76eb417d7debbf48280d958405dc5835b05","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"97cd3936ccd74e8ff94eb5a66f00725ae088f7f1afe0b1191e09b6186d95871a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H4O","O4"]]},"ZfB":{"atom_surface_sha256":"c5fc08686453c9da62a948e7014b0f3d805ceb5da50e84ab9f21381c50f4f440","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"04b531957ffb8c0e3f08569d8ff8661d8f8356f7a4f210661c935e38fd71f6ee","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H4O","O4"]]},"ZgA":{"atom_surface_sha256":"76df5736461bf7ce048a9af0fb9dc56ad4b5e10b822c9235c046e2c70c56d90e","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7e0bb383c97094a2d4768e06757053056f82a81aa1dc507d211121ee35346d83","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZgB":{"atom_surface_sha256":"d0940d68927a976049d32ae87b667a24b7595ce65fb3f1a816efadfd7b504cc8","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"35ee91eaa93db5b87f3640b7509d39a410dc7edeb82b599d771eef312c97aefa","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZhA":{"atom_surface_sha256":"c92954b94c921a3074021828011d8404f1c8f9727b83f65b32c1794efc00d128","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H63"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"c0e28805de7b126554b6851a472f897eaf4b5824caddc92be7437cac647506e5","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","H63"],["H4O","O4"]]},"ZhB":{"atom_surface_sha256":"4f21e5f0a1bc97a894bb31cfaba1e1215466bab0e739c6d1665495f281c8ea7c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6M"},{"element":"H","name":"H1"},{"element":"H","name":"H1M"},{"element":"H","name":"H2"},{"element":"H","name":"H2M"},{"element":"H","name":"H3"},{"element":"H","name":"H3M"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"e86e04c59c023c1f4021c6eb596ec29bde65cf119abfd654ba898ac478d95f4d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6M"],["C5","H5"],["C5","O5"],["C6M","H1M"],["C6M","H2M"],["C6M","H3M"],["H4O","O4"]]},"ZlB":{"atom_surface_sha256":"ed0e2088a40cfd56e0851eeaad09b405e9f92cd49b24b5c1b2d6319f75326819","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"90a5482d7cf6a8dbb634349b9c3eb7879d21d4de4711fe196c71a4859bffe790","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZmA":{"atom_surface_sha256":"f8a6fca2439586afceed25be7aef89000798d3461a78581e8a99f7bf6fbfa34a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"130f55cd05168c78dc1d26c0378370c264c45997e175bcb7963130f65df5d2fd","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZmB":{"atom_surface_sha256":"80f3a63638f7b75df38a59b2e6109e67a0188660d4a6daafdf61dbcc359f8e46","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4fab0b7727bba4435c38cd866f096d0e489b33ba46576fc3377557c4e0f8489a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZnB":{"atom_surface_sha256":"f9207657f033a0eb7dfe0909a1c019a390b2480d77f71be2a0ac7f9525881909","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H4O"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"32120c00f18a85ff4a891bfdda1a314ac4e0311718ad7b1771ff686c3fc69a69","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O5"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H4O","O4"],["H6O","O6"]]},"ZrD":{"atom_surface_sha256":"87f1102ab298240c57a9e74762673d51b7741ded99b79ba7a08e68838faa2b31","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"742a7bd0647dc04781db6d0d46c7a221882aaad063d28b195efb09af3a7f7a51","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H5O","O5"]]},"ZrU":{"atom_surface_sha256":"bd0667979da73801e68f4d92119426e0759586917171007eb213197ea30dc0e6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"58c84364b16bbd2a17b5013e346542880c8f315b48733ef40938e2fb69469419","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H5O","O5"]]},"ZxD":{"atom_surface_sha256":"642c41f6a4748016ed44e566140ce06aaa450076af02a94274a43754cd8d84cd","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"H","name":"H5O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"c9a4f177f5a4f2913de46e421787dca66923426b98bd02c66a21276583ca7ea7","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H5O","O5"]]},"eLD":{"atom_surface_sha256":"2c2e8be4a62f116fa9dd1b63750953e1799ecaf284cd5be49cce945e9033ee14","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"69f8934c6f5ca05f47dbf3131128fe7fd82cff578e28fd96a9969be93c97b978","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"eLU":{"atom_surface_sha256":"9b8efbaa2ba50c9bca072a7c57b5aa0a30dcd3e9e7906584517a37e45bc2cf0f","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"3e40831535cd326dc3637895241f6d5cda664e074d8467b797e7415ae704025c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"]]},"lLD":{"atom_surface_sha256":"69f7650213d46a9444e1eb64de64c83e7bd63bc8aae552acf89efb7f7f98046b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"f096fa2ccdd2ed18be106bd39829ff2ac81d5bb5a76ed79a3162c61b07a1e89f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"]]},"mLD":{"atom_surface_sha256":"7d8b567e0d8a2420fd9469a5c0b81e36129d5cbf306cfb11a455bcad279a6b00","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"fe3f2a1e3994fd94972067e25f1aa8d80152d0187d6fbb9e4b50837b1b18bd47","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"]]},"nAD":{"atom_surface_sha256":"cbac5e80dc865a757feeb9206f78b626f36a785cf0fc3206a730c15ad655929a","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"2e4f96d5d1bf7aeb985e1e54354e2ef91023fe0cd1fb8de3b22c956efc74522e","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"]]},"nAU":{"atom_surface_sha256":"80839149af761fd8156f209986eee39395750d02634cbf633d4bccae3d270f33","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"fc1116cd84d5c67031a2e0e5a04b56627fbc3ef476fe46869a95481bab0fb697","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"]]},"nLD":{"atom_surface_sha256":"d2f218ebdc9b4e38c02170300b5eaef291c05f4c78bdaa7b06cd5ceb2207abd3","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"10f3a3e4ad07cf0f1829097b9ce5e8743f6cec08a7d899a1161cd594ec009c65","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"nLU":{"atom_surface_sha256":"669f2ae520b8b12f55c8c001cc84d861ce881fd0fe391950c4ff24a2677662dc","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"4f7a6875809f85e03c17cbc004438116721910e8f7cb2c6682fd6d9c7ef59750","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H6O","O6"]]},"nRD":{"atom_surface_sha256":"fbca693055949f803444b53ebc49fe1495696782a60f7e67a3b072c1b93f3093","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"cadd15e44b142be5062858355c968cf814704af1131d03255f221ae7c47372b4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"]]},"nRU":{"atom_surface_sha256":"c490b75691bca61b9ab9010ec26c10770247981ae8a113db06f8abde79205573","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"3b09b9f7896d7225014c308646791fca4b9cc10405cda7a29a6872a80f3fe43f","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"]]},"nXU":{"atom_surface_sha256":"1e4e4f33ab62d7a37375af7bd5269001750c71c647fe3f66de65a8dce81de45c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"059b712a4e659451a28f34b78f151c910d96074f99de35f3b98cbaebceee1228","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"]]},"naD":{"atom_surface_sha256":"ec68311fca47406fd1a9c4d7e123b2dec17f5d4cc29123403954207f4ed0f37b","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"4f10e99d457a3e8172e24d3d962003ab0d0841cff8070a7ef965868c8fbe7c6b","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"]]},"naU":{"atom_surface_sha256":"2d673cfc0978bbef1b6569187b52e10c50d81837e58480658da9cbbb74671e06","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"ca1131925c39c1c58a87f74b7b5c16434d7d17f87a61a5782731b8c17aeed776","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"]]},"nrU":{"atom_surface_sha256":"340f0c324329b42188158ff731408a04f828689c28fb026de06738835ccb03f9","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"70ce7c0795136bf5c6fd99e1d9c7982c647e1a08fd84df22e24693e216eb1c3a","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"]]},"rLD":{"atom_surface_sha256":"666ababd5154cd098d27903839fb35e6c99f92739e3067a15bd28e0a8dfa3ef0","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"98abb1ae8b4a0962838e0e8512106ec2cc1ee3f4e8956313db701cf511448a77","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"rLU":{"atom_surface_sha256":"ceb0fc5cb9aeb215f80087a427cfd8c71e5a417b6a64a7084609390b6df79432","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"78b3a0ccf217e61a6c4c0a7b559baf3cf1e08e21bb7fff839c73df999bae8170","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H3O","O3"]]},"tAD":{"atom_surface_sha256":"96b78e3f1e697336af757a72af1ec5af631c712419a57cb2feea924f3aa66380","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"98f589f7d3a8247e841fc414bf5cf69319bae6f15aa6fce8a7884437e3eb84de","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"]]},"tAU":{"atom_surface_sha256":"220378b1b96cc0d324ef8bfd2f20263d65e276c6750975074a0230072775285c","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"4338018c85be81096d5bca1fa411228dae0b929e9e2c70e0f8c28759f2c23cbb","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"]]},"tLD":{"atom_surface_sha256":"45e3a2d48ad2a1269e123259a7a5b228616d2c1ad3180d7dce74e05992a35d18","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"ed6b4e80f52452e4bd030e2e042cfa5aa18e7854c73b13055635f341143f0657","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H6O","O6"]]},"tLU":{"atom_surface_sha256":"1dd90c7bc589e233dc830a77ee88d3931fc5bf30366b5eb73022ffd70380b5fd","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"7296ddbb665a7ccc35e7fa2bada04e65f4ea4beb9f70d024c856b55cec7978c4","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H2O","O2"],["H6O","O6"]]},"taD":{"atom_surface_sha256":"06ed601907db160c905e39e5ed434f9e1efffd8849e709376d6bd5fd6bbbe804","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"82a6b627a90963c259d9968a0277f1b41835203036febedb42fb13ea8f0f9074","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"]]},"taU":{"atom_surface_sha256":"d3975457b3f913fb46bf37e9a62fff13cb205b4b18864d7377a2bcf7ff10caaa","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H2O"},{"element":"H","name":"H3"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"72a6b375e1fdb49391fa7e820dfee7a11a22101796bf8fb538ddfa0302617c2d","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H2O","O2"]]},"uAD":{"atom_surface_sha256":"aec8a5c8e41922ae1dea6d5b9c291bb1e47bbf49d5acf29d77ec0c20c17f55f6","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"b72d85c1077da45f3f7921c3d62c9ffad4c2269ab5d8ace069154905d5883a35","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H3O","O3"]]},"uLD":{"atom_surface_sha256":"da0c98690ab31a60c98e77cb13283df6c89f177908ce9cfd2696131fab3bfb00","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"65082ed15d8b56dedaa36dc0939e9f527748d0fb869dc83f02dfe1e22013b7bb","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H6O","O6"]]},"uLU":{"atom_surface_sha256":"1a3d269840e2e46abaa928099d471e42fb96b90bc41e3fd802da683e7b3f3446","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"C","name":"C6"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H5"},{"element":"H","name":"H61"},{"element":"H","name":"H62"},{"element":"H","name":"H6O"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"},{"element":"O","name":"O6"}],"covalent_bond_surface_sha256":"aef7db73d3fefbe5d8e234413552e2342992ac347de57d7eb0aa670f21ef0b0c","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","C6"],["C5","H5"],["C5","O5"],["C6","H61"],["C6","H62"],["C6","O6"],["H3O","O3"],["H6O","O6"]]},"uaD":{"atom_surface_sha256":"cb8897e0cf498825fb570b6c583f4c440b62a52b0d1e6af780aeca7cde6f4541","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"d3ec16176e268b1df4e603643b5ea0932622aa81fbffd7bf0e019967edd1e5c2","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H3O","O3"]]},"uaU":{"atom_surface_sha256":"445844e534f23a8249cde3f7e390b9940ccf3cb9a0507adce624c880e444d32d","atoms":[{"element":"C","name":"C1"},{"element":"C","name":"C2"},{"element":"C","name":"C3"},{"element":"C","name":"C4"},{"element":"C","name":"C5"},{"element":"H","name":"H1"},{"element":"H","name":"H2"},{"element":"H","name":"H3"},{"element":"H","name":"H3O"},{"element":"H","name":"H4"},{"element":"H","name":"H51"},{"element":"H","name":"H52"},{"element":"O","name":"O2"},{"element":"O","name":"O3"},{"element":"O","name":"O4"},{"element":"O","name":"O5"}],"covalent_bond_surface_sha256":"1e0e5fcc0d486e5bd2908cb282d43fc64d2742b75532084c5498fa954d6958c8","covalent_bonds":[["C1","C2"],["C1","H1"],["C1","O4"],["C2","C3"],["C2","H2"],["C2","O2"],["C3","C4"],["C3","H3"],["C3","O3"],["C4","C5"],["C4","H4"],["C4","O4"],["C5","H51"],["C5","H52"],["C5","O5"],["H3O","O3"]]}}} diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_receipt_r2.json b/releases/2026-10-02/structure_md_processing/project/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_receipt_r2.json new file mode 100644 index 0000000000000000000000000000000000000000..a660416cdbbb79a9776b57ffcf62e654f3399c32 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_receipt_r2.json @@ -0,0 +1 @@ +{"authorization":{"downstream_evaluation_authorized":false,"external_release_authorized":false,"gpu_launch_authorized":false,"inference_authorized":false,"nova_submission_authorized":false,"scientific_launch_authorized":false,"test_opening_authorized":false,"training_authorized":false},"inputs":{"builder":{"filename":"build_review_a5_static_glycam_template_registry_20260721_r2.py","sha256":"4480a112b25ad61f78cf944c6f48419339cdcf04db6494bc4c22b6cdf78cde32","size_bytes":29388},"child_authority":{"filename":"review_a5_static_role_successor_child_authority.tsv.gz","sha256":"efa36988f4420ad36787cdf729e51973a3ba279f8495d293454239c8387937cd","size_bytes":11053339},"glycam_template_source":{"filename":"review_GLYCAM_06k.lib","sha256":"b12926723233cdad357480e2ef5b6e481c25c0a27d472406e297722d823610bc","size_bytes":8220742},"gmml2_license":{"filename":"review_GMML2_LICENSE","sha256":"e3a994d82e644b03a792a930f574002658412f62407f5fee083f2555c5f23118","size_bytes":7652},"source_provenance":{"filename":"review_source_provenance.json","sha256":"51b977cacb65de706831e93f7cf6d29806232961011cfa9ac3649055a47e9eca","size_bytes":1441}},"outputs":{"ledger":{"filename":"review_a5_static_glycam_template_exact_match_ledger_r2.tsv.gz","sha256":"168792f09ef41c80646f9ec4ee86af2fd1b7346af8c6d3a856d8bd15f6bfe4e9","size_bytes":4221292},"registry":{"filename":"review_a5_static_glycam_template_registry_r2.json","sha256":"ffbbe2126eb6131ab8b64ab5809b79b29e5534785cbe6fcfe1bba04b93e06050","size_bytes":868036},"summary":{"filename":"review_a5_static_glycam_template_exact_match_summary_r2.json","sha256":"330da4dfd836b32b62f333bd65a489d2c455fc4cf231f52b594b69abc9d37d77","size_bytes":1798}},"schema":"bertose_a5_static_glycam_template_registry_receipt_20260721_r2"} diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/multimodal/runtime/a5_static_v2_20260721_r7/review_a5_static_graph_materializer_r7.py b/releases/2026-10-02/structure_md_processing/project/writing/review/multimodal/runtime/a5_static_v2_20260721_r7/review_a5_static_graph_materializer_r7.py new file mode 100644 index 0000000000000000000000000000000000000000..a1c485850d07cd26a6b2cc9465e612d9d4f17c1d --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/multimodal/runtime/a5_static_v2_20260721_r7/review_a5_static_graph_materializer_r7.py @@ -0,0 +1,2197 @@ +"""Immutable, fail-closed static-graph materializer for the A5 review. + +This module is deliberately independent of the live A5 modules. It builds one +component-inclusive atom graph per certified GLYCAM state, derives both an exact +certified-owner identity and a conservative relabel-invariant WL8 safety +screen for split quarantine. Trainable encoder, RVQ, optimizer, and checkpoint +code live in a separate runtime so those changes cannot alter this +materialization authority. This module never authorizes training. + +Every mapped sugar is checked against a hash-bound official GLYCAM_06k.lib +registry certified independently over the complete post-cascade active roster. +The registry is an explicit input to every public materialization call. +""" + +from __future__ import annotations + +import hashlib +import json +import math +import re +from collections import Counter, defaultdict, deque +from dataclasses import dataclass, replace +from pathlib import Path +from typing import Any, Iterable, Mapping, Sequence + +import numpy as np +import torch +from torch import nn +from torch.nn import functional as F + + +MATERIALIZER_SCHEMA = "bertose_a5_static_graph_materializer_20260721_r7" +MATERIALIZED_GRAPH_DIGEST_SCHEMA = ( + "bertose_a5_static_v2_materialized_graph_digest_v7_" + "exact_glycam_bonds_component_instance_pair_relation_frame_magnitude" +) +FEATURE_VOCABULARY_SCHEMA = "bertose_a5_static_v2_feature_vocabulary_v7" +GEOMETRY_NORMALIZER_SCHEMA = ( + "bertose_a5_static_v2_geometry_normalizer_v7_frame_magnitude" +) +CERTIFIED_POST_CASCADE_AUTHORITY_SHA256 = ( + "efa36988f4420ad36787cdf729e51973a3ba279f8495d293454239c8387937cd" +) +CERTIFIED_POST_CASCADE_RECEIPT_SHA256 = ( + "b8e953947b4ac55e1cd9d509c33e1bddf211f046b9124ddc175166a1a763b31a" +) +CERTIFIED_POST_CASCADE_ACTIVE_STATE_COUNT = 42_372 +CERTIFIED_TERMINAL_M_C6M_INSTANCE_COUNT = 1_624 +EXACT_MAPPED_SUGAR_TEMPLATE_REGISTRY_STATUS = ( + "CERTIFIED_GLYCAM_06K_EXACT_NAME_ELEMENT_MATCH_257038_SUGARS_" + "63933_COMPONENTS_WITH_EXACT_TEMPLATE_CONNECTIVITY" +) +GLYCAM_TEMPLATE_REGISTRY_SCHEMA = ( + "bertose_a5_static_glycam_template_registry_20260721_r2" +) +GLYCAM_TEMPLATE_REGISTRY_SHA256 = ( + "ffbbe2126eb6131ab8b64ab5809b79b29e5534785cbe6fcfe1bba04b93e06050" +) +GLYCAM_TEMPLATE_SOURCE_SHA256 = ( + "b12926723233cdad357480e2ef5b6e481c25c0a27d472406e297722d823610bc" +) +GLYCAM_TEMPLATE_SOURCE_COMMIT = "af5958391ea75b2cbc2b7ba21a814d6110fc7147" +GLYCAM_TEMPLATE_SOURCE_GIT_BLOB_SHA1 = ( + "a0ef3ad5c637a25129817d914710be2e07307e58" +) +ACTIVE_ROLES = frozenset({"pretraining_train", "pretraining_development"}) +ELEMENTS = ("H", "C", "N", "O", "S", "OTHER") +COMPONENT_CLASSES = ("sugar", "reducing_end_ROH", "ACX", "MEX", "SO3") +RESERVED_FEATURE_TOKENS = ("__NONE__", "__UNK__") +SUPPORTED_DERIVATIVES = frozenset({"ACX", "MEX", "SO3"}) +UNSUPPORTED_COMPONENTS = frozenset({"PO3"}) +COMPONENT_ATOM_SIGNATURES = { + "ROH": ("HO1", "O1"), + "ACX": ("C1A", "O1A", "C2A", "H1A", "H2A", "H3A"), + "MEX": ("CH3", "H1", "H2", "H3"), + "SO3": ("S1", "O1", "O2", "O3"), +} +DERIVATIVE_ATTACHMENT_ATOM = {"ACX": "C1A", "MEX": "CH3", "SO3": "S1"} +ATOM_NAME_ELEMENT = re.compile(r"^(?:[0-9]+)?([HCNOS])") +FRAME_CANDIDATES = ( + ("O5", "C1", "C2", "C3"), + ("C1", "C2", "C3", "C4"), + ("C2", "C3", "C4", "C5"), + ("O6", "C2", "C3", "C4"), + ("O4", "C1", "C2", "C3"), +) +WURCS_RES_INDEX_ALPHABET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" +ANOMER_RE = re.compile(r"-([0-9]+)([abuxo])(?:_|$)") +LINK_RE = re.compile(r"([A-Za-z]+)([0-9]+)-([A-Za-z]+)([0-9]+)") +WURCS_EDGE_LABEL = re.compile(r"[abuxo]([0-9]+)-([0-9]+)") +WURCS_RING_CLOSURE = re.compile(r"([0-9]+)-([0-9]+)") +CARBON_NAME = re.compile(r"C([0-9]+)") +OXYGEN_NAME = re.compile(r"O([0-9]+)") +CANONICAL_COORDINATE_DECIMALS = 8 +COMPONENT_ATTACHMENT_KINDS = ( + "mapped_sugar", + "reducing_end_ROH", + "ACX", + "MEX", + "SO3", +) +PAIR_RELATION_CHANNELS = ("same_component", "cross_component") +GEOMETRY_TARGET_SCOPE = { + "claim": ( + "partial chemistry-aware generated-conformer geometry; not complete 3D " + "or complete glycosidic-linkage reconstruction" + ), + "included": ( + "all atom-pair distances within each WURCS owner including assigned components", + "absolute stereochemical frame-volume magnitude per WURCS residue", + "one ringO-donorC-acceptorO-acceptorC phi-like dihedral per glycosidic link", + ), + "not_included": ( + "general cross-owner atom-pair reconstruction", + "glycosidic psi", + "1-to-6 glycosidic omega", + "complete linkage angle or distance reconstruction", + ), + "chirality_claim": ( + "preservation of supplied certified chirality parity under proper rotations; " + "not de novo chirality inference" + ), +} + +# Undirected edge channels. Intracomponent bonds come only from the hash-bound +# GLYCAM_06k.lib atom-name connectivity tables. Cross-component attachment and +# glycosidic channels come only from the certified PDB CONECT records. +EDGE_CHANNELS = ( + "same_component_geometry", + "cross_component_geometry", + "exact_glycam_template_covalent", + "exact_derivative_attachment", + "exact_reducing_end_attachment", + "exact_glycosidic_connection", +) + +class StaticV2Error(RuntimeError): + """A fail-closed static-v2 input, chemistry, or runtime error.""" + + +def sha256_bytes(data: bytes) -> str: + return hashlib.sha256(data).hexdigest() + + +def sha256_file(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as handle: + for chunk in iter(lambda: handle.read(1024 * 1024), b""): + digest.update(chunk) + return digest.hexdigest() + + +def module_state_sha256(module: nn.Module) -> str: + """Hash a module state dict without serialization-container metadata.""" + + digest = hashlib.sha256() + for name, value in sorted(module.state_dict().items()): + if not torch.is_tensor(value): + raise StaticV2Error("static-v2 module state contains a nontensor value") + tensor = value.detach().contiguous().cpu() + digest.update(name.encode("utf-8") + b"\0") + digest.update(str(tensor.dtype).encode("ascii") + b"\0") + digest.update(np.asarray(tensor.shape, dtype=" str: + if not values or any(not value for value in values) or len(values) != len(set(values)): + raise StaticV2Error("ordered ID surface is empty, duplicated, or malformed") + return sha256_bytes(canonical_json_bytes(list(values))) + + +def canonical_json_bytes(value: object) -> bytes: + return ( + json.dumps(value, sort_keys=True, separators=(",", ":"), ensure_ascii=True) + + "\n" + ).encode("utf-8") + + +def ordered_state_tensor_manifest_sha256( + state_ids: Sequence[str], tensor_sha256_by_state: Mapping[str, str] +) -> str: + """Bind one ordered final-train roster to every materialized tensor digest.""" + + ordered = tuple(state_ids) + if not ordered or len(ordered) != len(set(ordered)): + raise StaticV2Error("train tensor manifest state roster is empty or duplicated") + if set(tensor_sha256_by_state) != set(ordered): + raise StaticV2Error("train tensor manifest differs from the ordered state roster") + rows: list[dict[str, str]] = [] + for state_id in ordered: + tensor_sha256 = tensor_sha256_by_state[state_id] + if not re.fullmatch(r"[0-9a-f]{64}", tensor_sha256): + raise StaticV2Error("train tensor manifest contains a malformed digest") + rows.append({"state_id": state_id, "tensor_sha256": tensor_sha256}) + return sha256_bytes(canonical_json_bytes(rows)) + + +def node_label(index: int) -> str: + if index < 1: + raise StaticV2Error("WURCS residue indices are one-based") + base = len(WURCS_RES_INDEX_ALPHABET) + index -= 1 + label = "" + while True: + label = WURCS_RES_INDEX_ALPHABET[index % base] + label + index = index // base - 1 + if index < 0: + return label + + +def split_top_level_sections(text: str) -> list[str]: + sections: list[str] = [] + current: list[str] = [] + depth = 0 + for character in text: + if character == "[": + depth += 1 + elif character == "]" and depth: + depth -= 1 + if character == "/" and depth == 0: + sections.append("".join(current)) + current = [] + else: + current.append(character) + sections.append("".join(current)) + return sections + + +def top_level_bracket_contents(text: str) -> list[str]: + contents: list[str] = [] + depth = 0 + start = -1 + for index, character in enumerate(text): + if character == "[": + if depth == 0: + start = index + 1 + depth += 1 + elif character == "]" and depth: + depth -= 1 + if depth == 0: + contents.append(text[start:index]) + start = -1 + if depth: + raise StaticV2Error("unclosed WURCS residue definition") + return contents + + +def parse_wurcs_header_counts(wurcs: str) -> tuple[int, int, int]: + """Return and validate the exact unique/residue/link count header.""" + + prefix = "WURCS=2.0/" + if not wurcs.startswith(prefix): + raise StaticV2Error("not WURCS 2.0") + sections = split_top_level_sections(wurcs[len(prefix) :]) + if len(sections) < 4: + raise StaticV2Error("missing WURCS sections") + fields = sections[0].split(",") + if len(fields) != 3 or any(not re.fullmatch(r"[0-9]+", value) for value in fields): + raise StaticV2Error("malformed WURCS header counts") + unique_count, residue_count, linkage_count = map(int, fields) + if unique_count < 1 or residue_count < 1 or linkage_count < 0: + raise StaticV2Error("invalid WURCS header counts") + return unique_count, residue_count, linkage_count + + +def parse_wurcs_residue_instances(wurcs: str) -> tuple[str, ...]: + prefix = "WURCS=2.0/" + if not wurcs.startswith(prefix): + raise StaticV2Error("not WURCS 2.0") + sections = split_top_level_sections(wurcs[len(prefix) :]) + if len(sections) < 4: + raise StaticV2Error("missing WURCS sections") + unique_count, residue_count, _ = parse_wurcs_header_counts(wurcs) + definitions = top_level_bracket_contents(sections[1]) + if len(definitions) != unique_count: + raise StaticV2Error("WURCS residue-definition header count differs from definitions") + try: + indices = [int(value) for value in sections[2].split("-")] + except ValueError as error: + raise StaticV2Error("invalid WURCS residue instance map") from error + if ( + len(indices) != residue_count + or any(index < 1 or index > unique_count for index in indices) + or set(indices) != set(range(1, unique_count + 1)) + ): + raise StaticV2Error("WURCS residue instance indices/count differ from header") + result = tuple(definitions[index - 1] for index in indices) + return result + + +@dataclass(frozen=True) +class RootedTree: + nodes: tuple[str, ...] + root: str + children: Mapping[str, tuple[tuple[str, str], ...]] + + +def parse_wurcs_edge_tree(wurcs: str) -> RootedTree: + prefix = "WURCS=2.0/" + if not wurcs.startswith(prefix): + raise StaticV2Error("not WURCS 2.0") + sections = split_top_level_sections(wurcs[len(prefix) :]) + _, residue_count, linkage_count = parse_wurcs_header_counts(wurcs) + instances = parse_wurcs_residue_instances(wurcs) + if len(instances) != residue_count: + raise StaticV2Error("WURCS residue count changed between validated sections") + nodes = tuple(node_label(index + 1) for index in range(len(instances))) + anomers: list[tuple[str, str] | None] = [] + for definition in instances: + match = ANOMER_RE.search(definition) + anomers.append((match.group(1), match.group(2)) if match else None) + children: dict[str, list[tuple[str, str]]] = {node: [] for node in nodes} + child_nodes: set[str] = set() + linkage_section = "/".join(sections[3:]) + for token in linkage_section.split("_") if linkage_section else []: + if not token or "*OC" in token: + continue + match = LINK_RE.fullmatch(token) + if match is None: + raise StaticV2Error(f"unsupported WURCS link: {token}") + left, left_position, right, right_position = match.groups() + if left not in nodes or right not in nodes or left == right: + raise StaticV2Error("WURCS link node is invalid") + left_anomer = anomers[nodes.index(left)] + right_anomer = anomers[nodes.index(right)] + left_is_donor = left_anomer is not None and left_position == left_anomer[0] + right_is_donor = right_anomer is not None and right_position == right_anomer[0] + if left_is_donor == right_is_donor: + raise StaticV2Error("cannot orient WURCS link") + if left_is_donor: + child, parent = left, right + donor_position, acceptor_position = left_position, right_position + anomer = left_anomer[1] + else: + child, parent = right, left + donor_position, acceptor_position = right_position, left_position + anomer = right_anomer[1] + children[parent].append((child, f"{anomer}{donor_position}-{acceptor_position}")) + child_nodes.add(child) + roots = [node for node in nodes if node not in child_nodes] + observed_linkage_count = sum(map(len, children.values())) + if observed_linkage_count != linkage_count: + raise StaticV2Error("WURCS linkage header count differs from parsed links") + if len(roots) != 1 or observed_linkage_count != len(nodes) - 1: + raise StaticV2Error("WURCS residue graph is not one rooted tree") + frozen = { + node: tuple(sorted(values, key=lambda item: (item[1], item[0]))) + for node, values in children.items() + } + seen = {roots[0]} + queue = deque([roots[0]]) + while queue: + for child, _ in frozen[queue.popleft()]: + if child in seen: + raise StaticV2Error("WURCS residue graph contains a cycle") + seen.add(child) + queue.append(child) + if seen != set(nodes): + raise StaticV2Error("WURCS residue graph is disconnected") + return RootedTree(nodes=nodes, root=roots[0], children=frozen) + + +def expected_wurcs_links(tree: RootedTree) -> set[tuple[str, str, str]]: + links: set[tuple[str, str, str]] = set() + for acceptor, children in tree.children.items(): + for donor, label in children: + match = WURCS_EDGE_LABEL.fullmatch(label) + if match is None: + raise StaticV2Error(f"unsupported oriented WURCS link: {label}") + links.add((donor, acceptor, f"{match.group(1)}-{match.group(2)}")) + return links + + +def wurcs_ring_oxygen_name(definition: str, donor_position: str) -> str | None: + candidates: list[str] = [] + for token in definition.split("_"): + match = WURCS_RING_CLOSURE.fullmatch(token) + if match is not None and match.group(1) == donor_position: + candidates.append(f"O{match.group(2)}") + return candidates[0] if len(candidates) == 1 else None + + +def normalized_pdb_field(value: object) -> str: + text = "" if value is None else str(value).strip() + return "" if text == "-" else text + + +def residue_key(chain: object, resseq: object, insertion: object) -> tuple[str, str, str]: + return normalized_pdb_field(chain), str(resseq).strip(), normalized_pdb_field(insertion) + + +def _validated_attachment_position(value: object, *, context: str) -> int: + try: + position = int(str(value)) + except (TypeError, ValueError) as error: + raise StaticV2Error(f"{context} attachment position is malformed") from error + if not 1 <= position <= 9: + raise StaticV2Error( + f"{context} attachment position is outside the manifest-bound 1..9 surface" + ) + return position + + +@dataclass(frozen=True) +class PDBAtom: + serial: int + name: str + residue_name: str + residue_key: tuple[str, str, str] + xyz: tuple[float, float, float] + element: str + + +@dataclass(frozen=True) +class ParsedPDB: + atoms: Mapping[int, PDBAtom] + residues: Mapping[tuple[str, str, str], tuple[int, ...]] + residue_order: tuple[tuple[str, str, str], ...] + connections: frozenset[tuple[int, int]] + + +def parse_pdb(path: Path) -> ParsedPDB: + atoms: dict[int, PDBAtom] = {} + residues: dict[tuple[str, str, str], list[int]] = defaultdict(list) + residue_order: list[tuple[str, str, str]] = [] + connections: set[tuple[int, int]] = set() + with path.open("r", encoding="utf-8") as handle: + for line in handle: + if line.startswith(("ATOM ", "HETATM")): + try: + serial = int(line[6:11]) + key = residue_key(line[21:22], line[22:26], line[26:27]) + xyz = (float(line[30:38]), float(line[38:46]), float(line[46:54])) + except ValueError as error: + raise StaticV2Error(f"malformed PDB atom record: {path}") from error + if serial in atoms: + raise StaticV2Error(f"duplicate PDB atom serial {serial}") + element = line[76:78].strip().upper() + if not element: + raise StaticV2Error("PDB atom has no element") + atom = PDBAtom( + serial=serial, + name=line[12:16].strip(), + residue_name=line[17:20].strip(), + residue_key=key, + xyz=xyz, + element=element, + ) + atoms[serial] = atom + if key not in residues: + residue_order.append(key) + residues[key].append(serial) + elif line.startswith("CONECT"): + serials: list[int] = [] + for start in range(6, len(line), 5): + field = line[start : start + 5].strip() + if field: + try: + serials.append(int(field)) + except ValueError as error: + raise StaticV2Error("malformed PDB CONECT record") from error + if serials: + connections.update(tuple(sorted((serials[0], target))) for target in serials[1:]) + if not atoms or not residues: + raise StaticV2Error("PDB contains no atoms") + bad = {serial for edge in connections for serial in edge if serial not in atoms} + if bad: + raise StaticV2Error(f"PDB CONECT references absent serials: {sorted(bad)[:5]}") + return ParsedPDB( + atoms=atoms, + residues={key: tuple(values) for key, values in residues.items()}, + residue_order=tuple(residue_order), + connections=frozenset(connections), + ) + + +def subtract(left: Sequence[float], right: Sequence[float]) -> tuple[float, float, float]: + return tuple(float(a) - float(b) for a, b in zip(left, right)) # type: ignore[return-value] + + +def dot(left: Sequence[float], right: Sequence[float]) -> float: + return float(sum(float(a) * float(b) for a, b in zip(left, right))) + + +def cross(left: Sequence[float], right: Sequence[float]) -> tuple[float, float, float]: + return ( + float(left[1]) * float(right[2]) - float(left[2]) * float(right[1]), + float(left[2]) * float(right[0]) - float(left[0]) * float(right[2]), + float(left[0]) * float(right[1]) - float(left[1]) * float(right[0]), + ) + + +def distance(left: Sequence[float], right: Sequence[float]) -> float: + delta = subtract(left, right) + return math.sqrt(dot(delta, delta)) + + +def canonical_fixed_6(value: float) -> str: + if not math.isfinite(value): + raise StaticV2Error("cannot canonicalize a nonfinite graph scalar") + rounded = round(float(value), 6) + if rounded == 0.0: + rounded = 0.0 + return f"{rounded:.6f}" + + +def signed_volume(points: Sequence[Sequence[float]]) -> float: + anchor, second, third, fourth = points + return dot(subtract(second, anchor), cross(subtract(third, anchor), subtract(fourth, anchor))) + + +def dihedral(points: Sequence[Sequence[float]]) -> float | None: + first, second, third, fourth = points + middle = subtract(third, second) + middle_norm = math.sqrt(dot(middle, middle)) + if middle_norm <= 1e-12: + return None + unit = tuple(value / middle_norm for value in middle) + left = subtract(second, first) + right = subtract(fourth, third) + left_plane = tuple(value - dot(left, unit) * axis for value, axis in zip(left, unit)) + right_plane = tuple(value - dot(right, unit) * axis for value, axis in zip(right, unit)) + if math.sqrt(dot(left_plane, left_plane)) <= 1e-12 or math.sqrt(dot(right_plane, right_plane)) <= 1e-12: + return None + return math.atan2(dot(cross(unit, left_plane), right_plane), dot(left_plane, right_plane)) + + +def _named_atoms(serials: Sequence[int], atoms: Mapping[int, PDBAtom]) -> dict[str, PDBAtom]: + result: dict[str, PDBAtom] = {} + for serial in serials: + atom = atoms[serial] + if atom.name in result: + raise StaticV2Error(f"duplicate atom role {atom.name} in component") + result[atom.name] = atom + return result + + +def _validate_atom_name_element(atom: PDBAtom) -> None: + match = ATOM_NAME_ELEMENT.match(atom.name) + if match is None or atom.element != match.group(1): + raise StaticV2Error( + f"PDB atom role/element mismatch: {atom.residue_name}:{atom.name}:{atom.element}" + ) + + +def _wurcs_backbone_carbon_count(definition: str) -> int: + skeleton = definition.split("-", 1)[0] + if not re.fullmatch(r"[A-Za-z0-9]+", skeleton): + raise StaticV2Error("unsupported WURCS skeleton for structural-surface audit") + if not 4 <= len(skeleton) <= 12: + raise StaticV2Error("WURCS carbon-backbone length is outside certified scope") + return len(skeleton) + + +@dataclass(frozen=True) +class MappedSugarTemplateRegistry: + """Immutable active-code view of the independently certified GLYCAM file.""" + + templates: tuple[ + tuple[ + str, + str, + str, + tuple[tuple[str, str], ...], + tuple[tuple[str, str], ...], + ], + ..., + ] + payload_sha256: str = GLYCAM_TEMPLATE_REGISTRY_SHA256 + + def validate(self) -> None: + if self.payload_sha256 != GLYCAM_TEMPLATE_REGISTRY_SHA256: + raise StaticV2Error("mapped-sugar template registry hash is not certified") + if len(self.templates) != 826: + raise StaticV2Error("GLYCAM template registry code count changed") + codes = tuple(value[0] for value in self.templates) + if codes != tuple(sorted(codes)) or len(codes) != len(set(codes)): + raise StaticV2Error("mapped-sugar template registry codes are not unique/sorted") + atom_names_by_code: dict[str, set[str]] = {} + for code, atom_digest, bond_digest, atoms, bonds in self.templates: + if not re.fullmatch(r"[A-Za-z0-9]+", code): + raise StaticV2Error("GLYCAM template code is malformed") + if not re.fullmatch(r"[0-9a-f]{64}", atom_digest) or not re.fullmatch( + r"[0-9a-f]{64}", bond_digest + ): + raise StaticV2Error("GLYCAM template surface digest is malformed") + if ( + not atoms + or atoms != tuple(sorted(atoms)) + or len(atoms) != len({name for name, _ in atoms}) + or any( + not re.fullmatch(r"[A-Za-z0-9]+", name) + or element not in ELEMENTS[:-1] + for name, element in atoms + ) + ): + raise StaticV2Error("GLYCAM template atom surface is malformed") + atom_names = {name for name, _ in atoms} + atom_names_by_code[code] = atom_names + if ( + not bonds + or bonds != tuple(sorted(bonds)) + or len(bonds) != len(set(bonds)) + or any( + left >= right or left not in atom_names or right not in atom_names + for left, right in bonds + ) + ): + raise StaticV2Error("GLYCAM template covalent-bond surface is malformed") + atom_payload = { + "pdb_residue_code": code, + "atoms": [ + {"name": name, "element": element} for name, element in atoms + ], + } + bond_payload = { + "pdb_residue_code": code, + "bonds": [list(bond) for bond in bonds], + } + if sha256_bytes(canonical_json_bytes(atom_payload)) != atom_digest: + raise StaticV2Error("GLYCAM template atom-surface digest changed") + if sha256_bytes(canonical_json_bytes(bond_payload)) != bond_digest: + raise StaticV2Error("GLYCAM template bond-surface digest changed") + if not {"ROH", "ACX", "MEX", "SO3"}.issubset(atom_names_by_code): + raise StaticV2Error("GLYCAM component templates are absent") + if sha256_bytes(canonical_json_bytes(self.to_dict())) != self.payload_sha256: + raise StaticV2Error("GLYCAM template registry payload digest changed") + + def assert_bound(self) -> None: + """Cheap per-graph guard after one full load-time validation.""" + + if ( + self.payload_sha256 != GLYCAM_TEMPLATE_REGISTRY_SHA256 + or len(self.templates) != 826 + ): + raise StaticV2Error("GLYCAM template registry binding changed") + + def atom_surface(self, code: str) -> tuple[tuple[str, str], ...]: + """Return one exact active template using allocation-free binary search.""" + + low = 0 + high = len(self.templates) + while low < high: + middle = (low + high) // 2 + candidate = self.templates[middle][0] + if candidate < code: + low = middle + 1 + else: + high = middle + if low == len(self.templates) or self.templates[low][0] != code: + raise StaticV2Error(f"component lacks a certified GLYCAM template: {code}") + return self.templates[low][3] + + def bond_surface(self, code: str) -> tuple[tuple[str, str], ...]: + """Return exact atom-name connectivity from the bound GLYCAM template.""" + + low = 0 + high = len(self.templates) + while low < high: + middle = (low + high) // 2 + candidate = self.templates[middle][0] + if candidate < code: + low = middle + 1 + else: + high = middle + if low == len(self.templates) or self.templates[low][0] != code: + raise StaticV2Error(f"component lacks a certified GLYCAM template: {code}") + return self.templates[low][4] + + def to_dict(self) -> dict[str, object]: + return { + "schema": GLYCAM_TEMPLATE_REGISTRY_SCHEMA, + "source": { + "repository": "https://github.com/GLYCAM-Web/gmml2", + "commit": GLYCAM_TEMPLATE_SOURCE_COMMIT, + "upstream_path": "dat/parameters/GLYCAM_06k.lib", + "upstream_git_blob_sha1": GLYCAM_TEMPLATE_SOURCE_GIT_BLOB_SHA1, + "source_sha256": GLYCAM_TEMPLATE_SOURCE_SHA256, + "license": "LGPL-3.0", + }, + "coverage": { + "active_state_count": 42_372, + "mapped_sugar_instance_count": 257_038, + "active_pdb_residue_code_count": 822, + "attached_component_template_code_count": 4, + "attached_component_instance_count": 63_933, + "registry_template_code_count": 826, + "library_template_count": 2_249, + "missing_active_codes": [], + "atom_name_or_element_mismatches": 0, + "exact_template_connectivity_extracted": True, + }, + "templates": { + code: { + "atom_surface_sha256": atom_digest, + "covalent_bond_surface_sha256": bond_digest, + "atoms": [ + {"name": name, "element": element} + for name, element in atoms + ], + "covalent_bonds": [list(bond) for bond in bonds], + } + for code, atom_digest, bond_digest, atoms, bonds in self.templates + }, + } + + @classmethod + def from_json_path(cls, path: Path) -> "MappedSugarTemplateRegistry": + if path.is_symlink() or not path.is_file(): + raise StaticV2Error("mapped-sugar template registry is absent or symlinked") + actual = sha256_file(path) + if actual != GLYCAM_TEMPLATE_REGISTRY_SHA256: + raise StaticV2Error("mapped-sugar template registry bytes changed") + try: + payload = json.loads(path.read_text(encoding="utf-8")) + except (OSError, UnicodeDecodeError, json.JSONDecodeError) as error: + raise StaticV2Error("mapped-sugar template registry is unreadable") from error + raw_templates = payload.get("templates") + if not isinstance(raw_templates, dict): + raise StaticV2Error("mapped-sugar template registry lacks templates") + templates: list[ + tuple[ + str, + str, + str, + tuple[tuple[str, str], ...], + tuple[tuple[str, str], ...], + ] + ] = [] + for code in sorted(raw_templates): + value = raw_templates[code] + if ( + not isinstance(value, dict) + or not isinstance(value.get("atoms"), list) + or not isinstance(value.get("covalent_bonds"), list) + or any( + not isinstance(bond, list) or len(bond) != 2 + for bond in value.get("covalent_bonds", []) + ) + ): + raise StaticV2Error("GLYCAM template entry is malformed") + try: + atoms = tuple( + sorted( + (str(atom["name"]), str(atom["element"])) + for atom in value["atoms"] + ) + ) + bonds = tuple( + sorted( + tuple(sorted((str(bond[0]), str(bond[1])))) + for bond in value["covalent_bonds"] + ) + ) + except (KeyError, TypeError) as error: + raise StaticV2Error("GLYCAM template atom/bond entry is malformed") from error + templates.append( + ( + str(code), + str(value.get("atom_surface_sha256", "")), + str(value.get("covalent_bond_surface_sha256", "")), + atoms, + bonds, + ) + ) + result = cls(templates=tuple(templates), payload_sha256=actual) + result.validate() + if payload != result.to_dict(): + raise StaticV2Error("mapped-sugar template registry has undeclared fields") + return result + + +def _validate_mapped_sugar_structural_surface( + definition: str, + named: Mapping[str, PDBAtom], + expected_atoms: Sequence[tuple[str, str]], +) -> int: + """Check exact GLYCAM membership plus independent WURCS backbone sanity.""" + + observed_atoms = tuple(sorted((atom.name, atom.element) for atom in named.values())) + if observed_atoms != tuple(expected_atoms): + raise StaticV2Error( + "mapped sugar atom-name/element set differs from certified GLYCAM template" + ) + + skeleton = definition.split("-", 1)[0] + carbon_count = _wurcs_backbone_carbon_count(definition) + resolved_backbone_atoms: list[str] = [] + terminal_m_cnm_fallback_count = 0 + for index, symbol in enumerate(skeleton, 1): + literal = f"C{index}" + fallback = f"C{index}M" + if literal in named: + resolved_backbone_atoms.append(literal) + elif symbol == "m" and index == carbon_count and fallback in named: + resolved_backbone_atoms.append(fallback) + terminal_m_cnm_fallback_count += 1 + else: + raise StaticV2Error( + "mapped sugar ordinal-first WURCS carbon-backbone atom is absent" + ) + if ( + len(resolved_backbone_atoms) != carbon_count + or len(set(resolved_backbone_atoms)) != carbon_count + ): + raise StaticV2Error("mapped sugar WURCS carbon-backbone resolution is ambiguous") + ring_oxygens = { + f"O{match.group(2)}" + for token in definition.split("_") + if (match := WURCS_RING_CLOSURE.fullmatch(token)) is not None + } + if not ring_oxygens or not ring_oxygens.issubset(named): + raise StaticV2Error("mapped sugar ring-closure oxygen set is incomplete") + if any(atom.residue_key != next(iter(named.values())).residue_key for atom in named.values()): + raise StaticV2Error("mapped sugar structural surface crosses residues") + return terminal_m_cnm_fallback_count + + +def _round_canonical_coordinate(value: float) -> float: + rounded = round(float(value), CANONICAL_COORDINATE_DECIMALS) + return 0.0 if rounded == 0.0 else rounded + + +def _canonicalize_pdb_coordinates( + pdb: ParsedPDB, + root_key: tuple[str, str, str], +) -> ParsedPDB: + """Express coordinates in a certified chemical right-handed root frame. + + The frame is selected only by mapped-sugar atom roles. Consequently a + proper rigid transform or PDB record/serial permutation produces identical + materialized coordinate bytes, while a reflection still changes chirality. + """ + + named = _named_atoms(pdb.residues[root_key], pdb.atoms) + frame = next( + ( + candidate + for candidate in FRAME_CANDIDATES + if all(name in named for name in candidate) + ), + None, + ) + if frame is None: + raise StaticV2Error("mapped WURCS root lacks a canonical coordinate frame") + origin = named[frame[0]].xyz + first = subtract(named[frame[1]].xyz, origin) + first_norm = math.sqrt(dot(first, first)) + if not math.isfinite(first_norm) or first_norm <= 1e-12: + raise StaticV2Error("canonical coordinate frame has a degenerate first axis") + axis_x = tuple(value / first_norm for value in first) + second = subtract(named[frame[2]].xyz, origin) + projected = dot(second, axis_x) + second_orthogonal = tuple( + value - projected * axis for value, axis in zip(second, axis_x) + ) + second_norm = math.sqrt(dot(second_orthogonal, second_orthogonal)) + if not math.isfinite(second_norm) or second_norm <= 1e-12: + raise StaticV2Error("canonical coordinate frame has a degenerate second axis") + axis_y = tuple(value / second_norm for value in second_orthogonal) + axis_z = cross(axis_x, axis_y) + if abs(math.sqrt(dot(axis_z, axis_z)) - 1.0) > 1e-8: + raise StaticV2Error("canonical coordinate frame is not orthonormal") + + canonical_atoms: dict[int, PDBAtom] = {} + for serial, atom in pdb.atoms.items(): + offset = subtract(atom.xyz, origin) + xyz = tuple( + _round_canonical_coordinate(dot(offset, axis)) + for axis in (axis_x, axis_y, axis_z) + ) + canonical_atoms[serial] = replace(atom, xyz=xyz) + return replace(pdb, atoms=canonical_atoms) + + +def _classify_glycosidic(left: PDBAtom, right: PDBAtom) -> tuple[PDBAtom, PDBAtom] | None: + left_carbon = CARBON_NAME.fullmatch(left.name) + right_carbon = CARBON_NAME.fullmatch(right.name) + left_oxygen = OXYGEN_NAME.fullmatch(left.name) + right_oxygen = OXYGEN_NAME.fullmatch(right.name) + if left_carbon and right_oxygen: + return left, right + if right_carbon and left_oxygen: + return right, left + return None + + +@dataclass(frozen=True) +class FeatureVocabulary: + atom_roles: tuple[str, ...] + component_names: tuple[str, ...] + + def validate(self) -> None: + for name, values in (("atom_roles", self.atom_roles), ("component_names", self.component_names)): + if ( + len(values) < len(RESERVED_FEATURE_TOKENS) + or values[: len(RESERVED_FEATURE_TOKENS)] != RESERVED_FEATURE_TOKENS + or len(values) != len(set(values)) + ): + raise StaticV2Error(f"feature vocabulary {name} is malformed") + if ( + tuple(sorted(values[len(RESERVED_FEATURE_TOKENS) :])) + != values[len(RESERVED_FEATURE_TOKENS) :] + ): + raise StaticV2Error(f"feature vocabulary {name} must be sorted") + + @property + def sha256(self) -> str: + self.validate() + return sha256_bytes(canonical_json_bytes(self.to_dict())) + + def to_dict(self) -> dict[str, object]: + return { + "schema": FEATURE_VOCABULARY_SCHEMA, + "atom_roles": list(self.atom_roles), + "component_names": list(self.component_names), + "unknown_policy": ( + "fit final pretraining train only; unseen development atom-role or " + "component-name values map to __UNK__ without expanding the schema" + ), + } + + @classmethod + def from_observed(cls, atom_roles: Iterable[str], component_names: Iterable[str]) -> "FeatureVocabulary": + result = cls( + atom_roles=( + *RESERVED_FEATURE_TOKENS, + *sorted(set(atom_roles) - set(RESERVED_FEATURE_TOKENS)), + ), + component_names=( + *RESERVED_FEATURE_TOKENS, + *sorted(set(component_names) - set(RESERVED_FEATURE_TOKENS)), + ), + ) + result.validate() + return result + + +@dataclass(frozen=True) +class StaticGraphV2: + state_id: str + parent_id: str + state_label: str + role: str + source_authority_sha256: str + template_registry_sha256: str + feature_vocabulary_sha256: str + residue_nodes: tuple[str, ...] + # Canonical chemistry-order ordinals. Source PDB serials are deliberately + # not emitted because they are record metadata, not model identity. + atom_serials: tuple[int, ...] + atom_identity_labels: tuple[str, ...] + atom_feature_ids: torch.Tensor + attachment_features: torch.Tensor + component_attachment_features: torch.Tensor + parity_features: torch.Tensor + coordinates: torch.Tensor + residue_index: torch.Tensor + edge_index: torch.Tensor + edge_features: torch.Tensor + pair_target_edges: torch.Tensor + pair_relation_features: torch.Tensor + pair_distance_target: torch.Tensor + pair_residue_index: torch.Tensor + frame_volume_magnitude_target: torch.Tensor + glycosidic_residue_edges: torch.Tensor + glycosidic_torsion_target: torch.Tensor + glycosidic_torsion_owner: torch.Tensor + graph_fingerprint_sha256: str + relabel_invariant_wl8_screen_sha256: str + component_counts: Mapping[str, int] + + @property + def residue_count(self) -> int: + return len(self.residue_nodes) + + def to(self, device: torch.device | str) -> "StaticGraphV2": + tensors = { + name: getattr(self, name).to(device) + for name in ( + "atom_feature_ids", + "attachment_features", + "component_attachment_features", + "parity_features", + "coordinates", + "residue_index", + "edge_index", + "edge_features", + "pair_target_edges", + "pair_relation_features", + "pair_distance_target", + "pair_residue_index", + "frame_volume_magnitude_target", + "glycosidic_residue_edges", + "glycosidic_torsion_target", + "glycosidic_torsion_owner", + ) + } + return replace(self, **tensors) + + +def static_graph_tensor_sha256(graph: StaticGraphV2) -> str: + """Hash tensors/chemistry; the enclosing authority hash is bound separately.""" + + digest = hashlib.sha256() + metadata = { + "schema": MATERIALIZED_GRAPH_DIGEST_SCHEMA, + "state_id": graph.state_id, + "parent_id": graph.parent_id, + "state_label": graph.state_label, + "role": graph.role, + "template_registry_sha256": graph.template_registry_sha256, + "feature_vocabulary_sha256": graph.feature_vocabulary_sha256, + "residue_nodes": list(graph.residue_nodes), + "atom_serials": list(graph.atom_serials), + "atom_identity_labels": list(graph.atom_identity_labels), + "graph_fingerprint_sha256": graph.graph_fingerprint_sha256, + "relabel_invariant_wl8_screen_sha256": ( + graph.relabel_invariant_wl8_screen_sha256 + ), + "component_counts": dict(sorted(graph.component_counts.items())), + "canonical_coordinate_frame": ( + "right_handed_root_mapped_sugar_role_frame_round_8_decimals" + ), + "geometry_target_scope": GEOMETRY_TARGET_SCOPE, + } + digest.update(canonical_json_bytes(metadata)) + for name in ( + "atom_feature_ids", + "attachment_features", + "component_attachment_features", + "parity_features", + "coordinates", + "residue_index", + "edge_index", + "edge_features", + "pair_target_edges", + "pair_relation_features", + "pair_distance_target", + "pair_residue_index", + "frame_volume_magnitude_target", + "glycosidic_residue_edges", + "glycosidic_torsion_target", + "glycosidic_torsion_owner", + ): + value = getattr(graph, name).detach().contiguous().cpu() + digest.update(name.encode("ascii") + b"\0") + digest.update(str(value.dtype).encode("ascii") + b"\0") + digest.update(np.asarray(value.shape, dtype=" dict[str, object]: + return { + "state_id": self.state_id, + "parent_id": self.parent_id, + "role": self.role, + "template_registry_sha256": self.template_registry_sha256, + "fingerprint": self.fingerprint, + "relabel_invariant_wl8_screen": self.relabel_invariant_wl8_screen, + "pdb_sha256": self.pdb_sha256, + "pdb_bytes": self.pdb_bytes, + "residue_count": self.residue_count, + "atom_count": self.atom_count, + "component_counts": dict(sorted(self.component_counts.items())), + "atom_roles": list(self.atom_roles), + "component_names": list(self.component_names), + "undirected_edge_count": self.undirected_edge_count, + "geometry_pair_count": self.geometry_pair_count, + "torsion_count": self.torsion_count, + "parity_positive": self.parity_positive, + "parity_negative": self.parity_negative, + "terminal_m_c6m_backbone_count": self.terminal_m_c6m_backbone_count, + "pair_residue_moments": [list(value) for value in self.pair_residue_moments], + "frame_volume_magnitudes": list(self.frame_volume_magnitudes), + "torsion_values": [list(value) for value in self.torsion_values], + } + + +def _wl_graph_fingerprint( + node_labels: Sequence[str], + undirected_edges: Sequence[tuple[int, int, str]], + *, + rounds: int = 8, +) -> str: + """Relabel-invariant conservative screen; equality is never treated as proof.""" + + if not node_labels: + raise StaticV2Error("cannot fingerprint an empty graph") + if rounds != 8: + raise StaticV2Error("static-v2 WL safety screen is frozen at exactly 8 rounds") + adjacency: list[list[tuple[int, str]]] = [[] for _ in node_labels] + for left, right, label in undirected_edges: + if left == right or not (0 <= left < len(node_labels) and 0 <= right < len(node_labels)): + raise StaticV2Error("invalid fingerprint edge") + adjacency[left].append((right, label)) + adjacency[right].append((left, label)) + colors = [sha256_bytes(label.encode("utf-8")) for label in node_labels] + for _ in range(rounds): + colors = [ + sha256_bytes( + (colors[index] + "|" + "|".join(sorted(f"{edge}:{colors[other]}" for other, edge in adjacency[index]))).encode("utf-8") + ) + for index in range(len(colors)) + ] + edge_colors = sorted( + f"{min(colors[left], colors[right])}:{max(colors[left], colors[right])}:{label}" + for left, right, label in undirected_edges + ) + payload = { + "schema": "bertose_a5_static_v2_graph_relabel_safety_screen_wl8_v1", + "rounds": rounds, + "node_count": len(node_labels), + "edge_count": len(undirected_edges), + "node_colors": sorted(colors), + "edge_colors": edge_colors, + } + return sha256_bytes(canonical_json_bytes(payload)) + + +def _exact_labeled_graph_fingerprint( + node_labels: Sequence[str], + undirected_edges: Sequence[tuple[int, int, str]], +) -> str: + """Exact domain identity from unique certified owner/component atom labels.""" + + if not node_labels or len(node_labels) != len(set(node_labels)): + raise StaticV2Error( + "exact graph identity requires unique certified atom labels" + ) + edge_rows: list[tuple[str, str, str]] = [] + seen_edges: set[tuple[str, str, str]] = set() + for left, right, edge_label in undirected_edges: + if left == right or not ( + 0 <= left < len(node_labels) and 0 <= right < len(node_labels) + ): + raise StaticV2Error("invalid exact-identity edge") + left_label, right_label = sorted((node_labels[left], node_labels[right])) + row = (left_label, right_label, edge_label) + if row in seen_edges: + raise StaticV2Error("exact graph identity has a duplicate labeled edge") + seen_edges.add(row) + edge_rows.append(row) + payload = { + "schema": "bertose_a5_static_v2_exact_domain_graph_identity_v2", + "node_labels": sorted(node_labels), + "edges": sorted(edge_rows), + } + return sha256_bytes(canonical_json_bytes(payload)) + + +def _component_class(residue_name: str, is_sugar: bool) -> str: + if is_sugar: + return "sugar" + if residue_name == "ROH": + return "reducing_end_ROH" + if residue_name in SUPPORTED_DERIVATIVES: + return residue_name + if residue_name in UNSUPPORTED_COMPONENTS: + raise StaticV2Error(f"unsupported component is fail-closed: {residue_name}") + raise StaticV2Error(f"unexpected nonmapped component: {residue_name}") + + +def _expected_component_signature(name: str, named: Mapping[str, PDBAtom]) -> None: + expected = COMPONENT_ATOM_SIGNATURES[name] + # PDB atom record order and serial numbering are metadata, not chemistry. + # Exact role membership is certified; order is deliberately ignored. + if len(named) != len(expected) or set(named) != set(expected): + raise StaticV2Error(f"component {name} atom signature differs from certification") + + +def _connection_for_component( + key: tuple[str, str, str], + pdb: ParsedPDB, + mapped_keys: set[tuple[str, str, str]], +) -> tuple[PDBAtom, PDBAtom]: + matches: list[tuple[PDBAtom, PDBAtom]] = [] + for left_serial, right_serial in pdb.connections: + left, right = pdb.atoms[left_serial], pdb.atoms[right_serial] + if left.residue_key == key and right.residue_key in mapped_keys: + matches.append((left, right)) + elif right.residue_key == key and left.residue_key in mapped_keys: + matches.append((right, left)) + if len(matches) != 1: + raise StaticV2Error("assigned component must have exactly one mapped-sugar attachment") + return matches[0] + + +def _build_static_graph( + row: Mapping[str, str], + pdb_path: Path, + *, + template_registry: MappedSugarTemplateRegistry, + vocabulary: FeatureVocabulary | None, + materialize_tensors: bool, + source_authority_sha256: str | None, +) -> tuple[StaticGraphV2 | None, GraphBuildRecord, set[str], set[str]]: + template_registry.assert_bound() + state_id = row.get("canonical_structure_state_id", "") + parent_id = row.get("parent_glycorpus_id", "") + state_label = row.get("state_label", "").strip().lower() + state_role = row.get("state_role", "") + if not re.fullmatch(r"GC[0-9]{7}", parent_id): + raise StaticV2Error("authority parent GlyCorpus ID is malformed") + if state_label not in {"single", "alpha", "beta"}: + raise StaticV2Error("authority state label is outside the certified surface") + if state_id != f"{parent_id}__state_{state_label}": + raise StaticV2Error("authority state/parent/label identity is inconsistent") + expected_state_role = ( + "single_parent_structure" + if state_label == "single" + else "alpha_beta_child_state" + ) + if state_role != expected_state_role: + raise StaticV2Error("authority state role disagrees with the state label") + expected_hash = row.get("certified_pdb_sha256", "") + if not re.fullmatch(r"[0-9a-f]{64}", expected_hash): + raise StaticV2Error("authority row lacks a certified PDB SHA-256") + if not pdb_path.is_file(): + raise StaticV2Error(f"certified PDB is absent: {pdb_path}") + actual_hash = sha256_file(pdb_path) + if actual_hash != expected_hash: + raise StaticV2Error("certified PDB hash mismatch") + if row.get("a5_static_partition") not in ACTIVE_ROLES: + raise StaticV2Error("graph builder accepts only active child rows") + pdb = parse_pdb(pdb_path) + for atom in pdb.atoms.values(): + _validate_atom_name_element(atom) + try: + mapping = json.loads(row["wurcs_to_pdb_mapping_json"]) + except (KeyError, json.JSONDecodeError) as error: + raise StaticV2Error("authority mapping JSON is malformed") from error + if not isinstance(mapping, dict) or not mapping: + raise StaticV2Error("authority mapping is empty") + wurcs = row.get("effective_wurcs") or row.get("canonical_wurcs") + if not wurcs: + raise StaticV2Error("authority row lacks effective WURCS") + tree = parse_wurcs_edge_tree(wurcs) + definitions = parse_wurcs_residue_instances(wurcs) + residue_nodes = tuple(str(node) for node in tree.nodes) + if len(definitions) != len(residue_nodes) or set(mapping) != set(residue_nodes): + raise StaticV2Error("mapping does not cover every WURCS residue exactly") + definition_by_node = dict(zip(residue_nodes, definitions)) + + key_by_node: dict[str, tuple[str, str, str]] = {} + terminal_m_c6m_backbone_count = 0 + for node in residue_nodes: + value = mapping[node] + if not isinstance(value, dict): + raise StaticV2Error("mapping residue entry is not a mapping") + key = residue_key(value.get("pdb_chain"), value.get("pdb_resseq"), value.get("pdb_insertion_code")) + if key in key_by_node.values(): + raise StaticV2Error("mapping reuses one PDB residue") + serials = pdb.residues.get(key) + if not serials: + raise StaticV2Error("mapped sugar residue is absent from PDB") + observed_names = {pdb.atoms[serial].residue_name for serial in serials} + if observed_names != {str(value.get("pdb_residue_name", ""))}: + raise StaticV2Error("mapped PDB residue name differs from certification") + key_by_node[node] = key + named = _named_atoms(serials, pdb.atoms) + terminal_m_c6m_backbone_count += _validate_mapped_sugar_structural_surface( + definition_by_node[node], + named, + template_registry.atom_surface(str(value.get("pdb_residue_name", ""))), + ) + mapped_keys = set(key_by_node.values()) + owner_by_key = {key_by_node[node]: index for index, node in enumerate(residue_nodes)} + + # From this point onward every coordinate-derived decision and target uses + # the same chemistry-anchored frame. Source PDB coordinates remain + # hash-bound above but neither global axes nor translation affect tensors. + pdb = _canonicalize_pdb_coordinates(pdb, key_by_node[tree.root]) + + component_keys = [key for key in pdb.residues if key not in mapped_keys] + if not component_keys: + raise StaticV2Error("PDB lacks the certified reducing-end ROH") + component_names = [pdb.atoms[pdb.residues[key][0]].residue_name for key in component_keys] + if component_names.count("ROH") != 1: + raise StaticV2Error("PDB must contain exactly one reducing-end ROH") + component_owner: dict[tuple[str, str, str], int] = {} + component_attachment_position: dict[tuple[str, str, str], int] = {} + exact_connection_kind: dict[tuple[int, int], str] = {} + attachment_position_by_serial: dict[int, set[int]] = defaultdict(set) + attachment_flags_by_serial: dict[int, set[str]] = defaultdict(set) + observed_derivatives: dict[int, Counter[tuple[str, str]]] = defaultdict(Counter) + component_counts: Counter[str] = Counter() + + for key in component_keys: + serials = pdb.residues[key] + names = {pdb.atoms[serial].residue_name for serial in serials} + if len(names) != 1: + raise StaticV2Error("one PDB component has inconsistent residue names") + component_name = next(iter(names)) + _component_class(component_name, False) + named = _named_atoms(serials, pdb.atoms) + _expected_component_signature(component_name, named) + observed_component_surface = tuple( + sorted((atom.name, atom.element) for atom in named.values()) + ) + if observed_component_surface != template_registry.atom_surface(component_name): + raise StaticV2Error( + "attached component atom-name/element set differs from its exact " + "GLYCAM template" + ) + component_atom, sugar_atom = _connection_for_component(key, pdb, mapped_keys) + owner = owner_by_key[sugar_atom.residue_key] + component_owner[key] = owner + pair = tuple(sorted((component_atom.serial, sugar_atom.serial))) + if component_name == "ROH": + if component_atom.name != "O1" or sugar_atom.name not in {"C1", "C2"}: + raise StaticV2Error("ROH attachment atom pair differs from certification") + if residue_nodes[owner] != tree.root: + raise StaticV2Error("ROH is not attached to mapped WURCS root") + exact_connection_kind[pair] = "roh" + attachment_flags_by_serial[component_atom.serial].add("roh") + attachment_flags_by_serial[sugar_atom.serial].add("roh") + position = _validated_attachment_position( + sugar_atom.name[1:], context="reducing-end ROH" + ) + component_attachment_position[key] = position + attachment_position_by_serial[component_atom.serial].add(position) + attachment_position_by_serial[sugar_atom.serial].add(position) + component_counts["ROH"] += 1 + else: + if component_atom.name != DERIVATIVE_ATTACHMENT_ATOM[component_name]: + raise StaticV2Error("derivative attachment atom differs from certified template") + oxygen = OXYGEN_NAME.fullmatch(sugar_atom.name) + if oxygen is None: + raise StaticV2Error("derivative is not attached through a mapped sugar oxygen") + position_value = _validated_attachment_position( + oxygen.group(1), context=f"{component_name} component" + ) + position = str(position_value) + component_attachment_position[key] = position_value + exact_connection_kind[pair] = "derivative" + attachment_flags_by_serial[component_atom.serial].add("derivative") + attachment_flags_by_serial[sugar_atom.serial].add("derivative") + attachment_position_by_serial[component_atom.serial].add(position_value) + attachment_position_by_serial[sugar_atom.serial].add(position_value) + observed_derivatives[owner][(position, component_name)] += 1 + component_counts[component_name] += 1 + + for owner, node in enumerate(residue_nodes): + declared_raw = mapping[node].get("positioned_derivatives", []) + if not isinstance(declared_raw, list): + raise StaticV2Error("positioned_derivatives is malformed") + declared: Counter[tuple[str, str]] = Counter() + for value in declared_raw: + if not isinstance(value, list) or len(value) != 2: + raise StaticV2Error("positioned derivative declaration is malformed") + position = str( + _validated_attachment_position( + value[0], context="declared derivative" + ) + ) + component = str(value[1]) + if component not in SUPPORTED_DERIVATIVES: + raise StaticV2Error(f"unsupported declared derivative: {component}") + declared[(position, component)] += 1 + if declared[(position, component)] > 1: + raise StaticV2Error( + "duplicate derivative type at one attachment position is invalid" + ) + if declared != observed_derivatives[owner]: + raise StaticV2Error("observed derivative components/positions differ from mapping") + + # Resolve every intracomponent GLYCAM bond by exact atom name. Coordinates + # do not participate in bond identity, and a missing/extra atom already + # fails the exact template-surface checks above. + exact_template_bonds: set[tuple[int, int]] = set() + for key in sorted(pdb.residues): + serials = pdb.residues[key] + named = _named_atoms(serials, pdb.atoms) + template_code = pdb.atoms[serials[0]].residue_name + expected_bonds = template_registry.bond_surface(template_code) + resolved_for_component: set[tuple[int, int]] = set() + for left_name, right_name in expected_bonds: + left_atom = named.get(left_name) + right_atom = named.get(right_name) + if left_atom is None or right_atom is None: + raise StaticV2Error( + "GLYCAM covalent bond endpoint is absent from a certified component" + ) + pair = tuple(sorted((left_atom.serial, right_atom.serial))) + if pair in resolved_for_component or pair in exact_template_bonds: + raise StaticV2Error("GLYCAM covalent bond resolves ambiguously") + resolved_for_component.add(pair) + exact_template_bonds.add(pair) + if len(resolved_for_component) != len(expected_bonds): + raise StaticV2Error("GLYCAM covalent bond resolution is incomplete") + + expected_links = expected_wurcs_links(tree) + observed_links: dict[tuple[str, str, str], tuple[PDBAtom, PDBAtom]] = {} + for left_serial, right_serial in pdb.connections: + left, right = pdb.atoms[left_serial], pdb.atoms[right_serial] + if left.residue_key not in mapped_keys or right.residue_key not in mapped_keys: + continue + classified = _classify_glycosidic(left, right) + if classified is None: + raise StaticV2Error("mapped-sugar cross connection is not carbon-oxygen") + donor, acceptor = classified + donor_position = CARBON_NAME.fullmatch(donor.name) + acceptor_position = OXYGEN_NAME.fullmatch(acceptor.name) + donor_node = residue_nodes[owner_by_key[donor.residue_key]] + acceptor_node = residue_nodes[owner_by_key[acceptor.residue_key]] + link = (donor_node, acceptor_node, f"{donor_position.group(1)}-{acceptor_position.group(1)}") + if link in observed_links: + raise StaticV2Error("duplicate glycosidic link") + observed_links[link] = (donor, acceptor) + pair = tuple(sorted((left_serial, right_serial))) + exact_connection_kind[pair] = "glycosidic" + for atom in (left, right): + attachment_flags_by_serial[atom.serial].add("glycosidic") + match = CARBON_NAME.fullmatch(atom.name) or OXYGEN_NAME.fullmatch(atom.name) + if match: + attachment_position_by_serial[atom.serial].add( + _validated_attachment_position( + match.group(1), context="glycosidic linkage" + ) + ) + if set(observed_links) != expected_links: + raise StaticV2Error("observed glycosidic links differ from WURCS") + if set(exact_connection_kind) != set(pdb.connections): + raise StaticV2Error( + "PDB has an extra or unclassified CONECT edge outside exact attachments" + ) + + owner_by_serial: dict[int, int] = {} + component_key_by_serial: dict[int, tuple[str, str, str]] = {} + for key, owner in owner_by_key.items(): + for serial in pdb.residues[key]: + owner_by_serial[serial] = owner + component_key_by_serial[serial] = key + for key, owner in component_owner.items(): + for serial in pdb.residues[key]: + owner_by_serial[serial] = owner + component_key_by_serial[serial] = key + if set(owner_by_serial) != set(pdb.atoms): + raise StaticV2Error("not every PDB atom was assigned to one WURCS owner") + + frame_by_owner: dict[int, float] = {} + for owner, node in enumerate(residue_nodes): + named = _named_atoms(pdb.residues[key_by_node[node]], pdb.atoms) + frame = next((candidate for candidate in FRAME_CANDIDATES if all(name in named for name in candidate)), None) + if frame is None: + raise StaticV2Error("mapped sugar lacks a certified stereochemical frame") + value = signed_volume([named[name].xyz for name in frame]) + if not math.isfinite(value) or abs(value) <= 1e-6: + raise StaticV2Error("mapped sugar has a degenerate stereochemical frame") + frame_by_owner[owner] = value + + def canonical_atom_identity_key(serial: int) -> tuple[object, ...]: + atom = pdb.atoms[serial] + is_sugar = atom.residue_key in mapped_keys + component_class = _component_class(atom.residue_name, is_sugar) + component_kind = ( + "mapped_sugar" + if is_sugar + else ( + "reducing_end_ROH" + if atom.residue_name == "ROH" + else atom.residue_name + ) + ) + component_position = ( + 0 + if is_sugar + else component_attachment_position[component_key_by_serial[serial]] + ) + return ( + residue_nodes[owner_by_serial[serial]], + COMPONENT_CLASSES.index(component_class), + COMPONENT_ATTACHMENT_KINDS.index(component_kind), + component_position, + atom.residue_name, + atom.name, + atom.element, + ) + + # Tensor order is defined only by certified owner, component attachment + # identity, atom role, and element. XYZ, PDB record order, residue order, + # and PDB serial number are never tie-breakers. A collision is therefore + # ambiguous chemistry and fails closed rather than falling back to metadata. + canonical_keys = { + serial: canonical_atom_identity_key(serial) for serial in pdb.atoms + } + if len(set(canonical_keys.values())) != len(canonical_keys): + raise StaticV2Error("canonical chemistry-only atom identity is not unique") + atom_serials = tuple(sorted(pdb.atoms, key=canonical_keys.__getitem__)) + serial_to_index = {serial: index for index, serial in enumerate(atom_serials)} + atom_roles_observed: set[str] = set() + component_names_observed: set[str] = set() + atom_identity_labels: list[str] = [] + relabel_invariant_atom_labels: list[str] = [] + raw_feature_rows: list[ + tuple[ + str, + str, + str, + str, + str, + int | None, + tuple[int, ...], + tuple[str, ...], + int, + ] + ] = [] + for serial in atom_serials: + atom = pdb.atoms[serial] + is_sugar = atom.residue_key in mapped_keys + component_class = _component_class(atom.residue_name, is_sugar) + component_kind = ( + "mapped_sugar" + if is_sugar + else ( + "reducing_end_ROH" + if atom.residue_name == "ROH" + else atom.residue_name + ) + ) + component_position = ( + None + if is_sugar + else component_attachment_position[component_key_by_serial[serial]] + ) + atom_role = f"{component_class}:{atom.name}" + component_name = atom.residue_name + atom_roles_observed.add(atom_role) + component_names_observed.add(component_name) + positions = tuple(sorted(attachment_position_by_serial.get(serial, set()))) + flags = tuple(sorted(attachment_flags_by_serial.get(serial, set()))) + parity = 1 if frame_by_owner[owner_by_serial[serial]] > 0 else -1 + raw_feature_rows.append( + ( + atom.element, + component_class, + atom_role, + component_name, + component_kind, + component_position, + positions, + flags, + parity, + ) + ) + atom_identity_labels.append( + json.dumps( + { + "owner_wurcs_node": residue_nodes[owner_by_serial[serial]], + "element": atom.element, + "component_class": component_class, + "component_name": component_name, + "component_attachment_kind": component_kind, + "component_attachment_position": component_position, + "atom_role": atom.name, + "attachment_positions": positions, + "attachment_flags": flags, + "parity": parity, + }, + sort_keys=True, + separators=(",", ":"), + ) + ) + # This second label deliberately excludes the certified WURCS-owner + # name. It is used only by the conservative WL8 cross-split screen: + # equal screens cause quarantine, while unequal exact identities never + # override an equal screen. Therefore a WL collision can only remove + # extra training parents; it cannot create leakage. + relabel_invariant_atom_labels.append( + json.dumps( + { + "element": atom.element, + "component_class": component_class, + "component_name": component_name, + "component_attachment_kind": component_kind, + "component_attachment_position": component_position, + "atom_role": atom.name, + "attachment_positions": positions, + "attachment_flags": flags, + "parity": parity, + }, + sort_keys=True, + separators=(",", ":"), + ) + ) + + pair_edges: list[tuple[int, int]] = [] + pair_relation_features: list[tuple[int, int]] = [] + pair_distances: list[float] = [] + pair_owner: list[int] = [] + undirected_edges: list[tuple[int, int, tuple[int, ...], float]] = [] + emitted_exact_template_bonds: set[tuple[int, int]] = set() + serials_by_owner: dict[int, list[int]] = defaultdict(list) + for serial in atom_serials: + serials_by_owner[owner_by_serial[serial]].append(serial) + for owner in range(len(residue_nodes)): + serials = serials_by_owner[owner] + for left_offset, left_serial in enumerate(serials): + for right_serial in serials[left_offset + 1 :]: + left, right = serial_to_index[left_serial], serial_to_index[right_serial] + left_atom, right_atom = pdb.atoms[left_serial], pdb.atoms[right_serial] + same_component = component_key_by_serial[left_serial] == component_key_by_serial[right_serial] + pair = tuple(sorted((left_serial, right_serial))) + kind = exact_connection_kind.get(pair, "") + if pair in exact_template_bonds: + emitted_exact_template_bonds.add(pair) + features = ( + int(same_component), + int(not same_component), + int(pair in exact_template_bonds), + int(kind == "derivative"), + int(kind == "roh"), + 0, + ) + value = distance(left_atom.xyz, right_atom.xyz) + pair_edges.append((left, right)) + pair_relation_features.append( + (int(same_component), int(not same_component)) + ) + pair_distances.append(value) + pair_owner.append(owner) + undirected_edges.append((left, right, features, value)) + if emitted_exact_template_bonds != exact_template_bonds: + raise StaticV2Error( + "not every exact GLYCAM template bond was emitted once within its owner" + ) + for link in sorted(expected_links): + donor, acceptor = observed_links[link] + left, right = serial_to_index[donor.serial], serial_to_index[acceptor.serial] + # Glycosidic atoms have different WURCS owners, so this exact edge is + # not also a cross-component geometry edge "within one owner". + features = (0, 0, 0, 0, 0, 1) + undirected_edges.append((left, right, features, distance(donor.xyz, acceptor.xyz))) + + glycosidic_edges: list[tuple[int, int]] = [] + torsion_targets: list[tuple[float, float]] = [] + torsion_owner: list[int] = [] + torsion_by_atom_pair: dict[tuple[int, int], tuple[float, float]] = {} + for link in sorted(expected_links): + donor, acceptor = observed_links[link] + donor_node, acceptor_node, linkage = link + donor_owner = residue_nodes.index(donor_node) + acceptor_owner = residue_nodes.index(acceptor_node) + donor_named = _named_atoms(pdb.residues[key_by_node[donor_node]], pdb.atoms) + acceptor_named = _named_atoms(pdb.residues[key_by_node[acceptor_node]], pdb.atoms) + acceptor_position = OXYGEN_NAME.fullmatch(acceptor.name) + acceptor_carbon = acceptor_named.get(f"C{acceptor_position.group(1)}") + donor_position = linkage.split("-", 1)[0] + ring_name = wurcs_ring_oxygen_name(definition_by_node[donor_node], donor_position) + ring_oxygen = donor_named.get(ring_name) if ring_name else None + if ring_oxygen is None or acceptor_carbon is None: + raise StaticV2Error("glycosidic torsion atoms are absent") + angle = dihedral([ring_oxygen.xyz, donor.xyz, acceptor.xyz, acceptor_carbon.xyz]) + if angle is None: + raise StaticV2Error("glycosidic torsion is degenerate") + target = (math.sin(angle), math.cos(angle)) + glycosidic_edges.append((donor_owner, acceptor_owner)) + torsion_targets.append(target) + torsion_owner.append(donor_owner) + torsion_by_atom_pair[tuple(sorted((serial_to_index[donor.serial], serial_to_index[acceptor.serial])))] = target + + fingerprint_edges: list[tuple[int, int, str]] = [] + for left, right, features, value in undirected_edges: + torsion = torsion_by_atom_pair.get(tuple(sorted((left, right)))) + edge_label = json.dumps( + { + "channels": features, + "distance_angstrom": canonical_fixed_6(value), + "torsion_sin_cos": [canonical_fixed_6(x) for x in torsion] + if torsion + else None, + }, + sort_keys=True, + separators=(",", ":"), + ) + fingerprint_edges.append((left, right, edge_label)) + fingerprint = _exact_labeled_graph_fingerprint( + atom_identity_labels, fingerprint_edges + ) + relabel_invariant_wl8_screen = _wl_graph_fingerprint( + relabel_invariant_atom_labels, fingerprint_edges + ) + + pair_moments: list[tuple[int, float, float]] = [] + for owner in range(len(residue_nodes)): + values = np.asarray([value for value, pair_owner_value in zip(pair_distances, pair_owner) if pair_owner_value == owner], dtype=np.float64) + if values.size == 0: + raise StaticV2Error("one WURCS owner has no geometry pairs") + pair_moments.append((int(values.size), float(values.mean()), float(np.square(values).mean()))) + record = GraphBuildRecord( + state_id=row["canonical_structure_state_id"], + parent_id=row["parent_glycorpus_id"], + role=row["a5_static_partition"], + template_registry_sha256=template_registry.payload_sha256, + fingerprint=fingerprint, + relabel_invariant_wl8_screen=relabel_invariant_wl8_screen, + pdb_sha256=actual_hash, + pdb_bytes=pdb_path.stat().st_size, + residue_count=len(residue_nodes), + atom_count=len(atom_serials), + component_counts=dict(component_counts), + atom_roles=tuple(sorted(atom_roles_observed)), + component_names=tuple(sorted(component_names_observed)), + undirected_edge_count=len(undirected_edges), + geometry_pair_count=len(pair_edges), + torsion_count=len(torsion_targets), + parity_positive=sum(value > 0 for value in frame_by_owner.values()), + parity_negative=sum(value < 0 for value in frame_by_owner.values()), + terminal_m_c6m_backbone_count=terminal_m_c6m_backbone_count, + pair_residue_moments=tuple(pair_moments), + frame_volume_magnitudes=tuple( + abs(frame_by_owner[index]) for index in range(len(residue_nodes)) + ), + torsion_values=tuple(torsion_targets), + ) + if not materialize_tensors: + return None, record, atom_roles_observed, component_names_observed + if vocabulary is None: + raise StaticV2Error("tensor materialization requires the frozen feature vocabulary") + if source_authority_sha256 != CERTIFIED_POST_CASCADE_AUTHORITY_SHA256: + raise StaticV2Error( + "tensor materialization is not bound to the certified post-cascade authority" + ) + vocabulary.validate() + role_index = {value: index for index, value in enumerate(vocabulary.atom_roles)} + component_name_index = {value: index for index, value in enumerate(vocabulary.component_names)} + atom_feature_ids: list[list[int]] = [] + attachment_features: list[list[float]] = [] + component_attachment_features: list[list[float]] = [] + parity_features: list[list[float]] = [] + for ( + element, + component_class, + atom_role, + component_name, + component_kind, + component_position, + positions, + flags, + parity, + ) in raw_feature_rows: + if component_position is not None and not 1 <= component_position <= 9: + raise StaticV2Error( + "nonsugar component position escaped the manifest-bound 1..9 surface" + ) + if any(not 1 <= position <= 9 for position in positions): + raise StaticV2Error( + "atom attachment position escaped the manifest-bound 1..9 surface" + ) + element_id = ELEMENTS.index(element) if element in ELEMENTS else ELEMENTS.index("OTHER") + atom_feature_ids.append( + [ + element_id, + COMPONENT_CLASSES.index(component_class), + role_index.get(atom_role, role_index["__UNK__"]), + component_name_index.get( + component_name, component_name_index["__UNK__"] + ), + ] + ) + position_bits = [float(position in positions) for position in range(1, 10)] + attachment_features.append( + [ + float("roh" in flags), + float("derivative" in flags), + float("glycosidic" in flags), + *position_bits, + ] + ) + component_attachment_features.append( + [ + *[ + float(component_kind == value) + for value in COMPONENT_ATTACHMENT_KINDS + ], + *[ + float(component_position == position) + for position in range(1, 10) + ], + ] + ) + parity_features.append([float(parity)]) + directed_edges: list[tuple[int, int]] = [] + directed_features: list[tuple[int, ...]] = [] + for left, right, features, _ in undirected_edges: + directed_edges.extend(((left, right), (right, left))) + directed_features.extend((features, features)) + graph = StaticGraphV2( + state_id=record.state_id, + parent_id=record.parent_id, + state_label=row["state_label"].strip().lower(), + role=record.role, + source_authority_sha256=source_authority_sha256, + template_registry_sha256=template_registry.payload_sha256, + feature_vocabulary_sha256=vocabulary.sha256, + residue_nodes=residue_nodes, + atom_serials=tuple(range(len(atom_serials))), + atom_identity_labels=tuple(atom_identity_labels), + atom_feature_ids=torch.tensor(atom_feature_ids, dtype=torch.long), + attachment_features=torch.tensor(attachment_features, dtype=torch.float32), + component_attachment_features=torch.tensor( + component_attachment_features, dtype=torch.float32 + ), + parity_features=torch.tensor(parity_features, dtype=torch.float32), + coordinates=torch.tensor([pdb.atoms[serial].xyz for serial in atom_serials], dtype=torch.float32), + residue_index=torch.tensor([owner_by_serial[serial] for serial in atom_serials], dtype=torch.long), + edge_index=torch.tensor(directed_edges, dtype=torch.long).T.contiguous(), + edge_features=torch.tensor(directed_features, dtype=torch.float32), + pair_target_edges=torch.tensor(pair_edges, dtype=torch.long).T.contiguous(), + pair_relation_features=torch.tensor( + pair_relation_features, dtype=torch.float32 + ), + pair_distance_target=torch.tensor(pair_distances, dtype=torch.float32), + pair_residue_index=torch.tensor(pair_owner, dtype=torch.long), + frame_volume_magnitude_target=torch.tensor( + record.frame_volume_magnitudes, dtype=torch.float32 + ), + glycosidic_residue_edges=( + torch.tensor(glycosidic_edges, dtype=torch.long).T.contiguous() + if glycosidic_edges + else torch.empty((2, 0), dtype=torch.long) + ), + glycosidic_torsion_target=( + torch.tensor(torsion_targets, dtype=torch.float32) + if torsion_targets + else torch.empty((0, 2), dtype=torch.float32) + ), + glycosidic_torsion_owner=torch.tensor(torsion_owner, dtype=torch.long), + graph_fingerprint_sha256=fingerprint, + relabel_invariant_wl8_screen_sha256=relabel_invariant_wl8_screen, + component_counts=record.component_counts, + ) + validate_graph(graph, vocabulary) + return graph, record, atom_roles_observed, component_names_observed + + +def build_graph_record( + row: Mapping[str, str], + pdb_path: Path, + template_registry: MappedSugarTemplateRegistry, +) -> tuple[GraphBuildRecord, set[str], set[str]]: + _, record, atom_roles, component_names = _build_static_graph( + row, + pdb_path, + template_registry=template_registry, + vocabulary=None, + materialize_tensors=False, + source_authority_sha256=None, + ) + return record, atom_roles, component_names + + +def build_static_graph( + row: Mapping[str, str], + pdb_path: Path, + vocabulary: FeatureVocabulary, + template_registry: MappedSugarTemplateRegistry, + *, + source_authority_sha256: str, +) -> StaticGraphV2: + graph, _, _, _ = _build_static_graph( + row, + pdb_path, + template_registry=template_registry, + vocabulary=vocabulary, + materialize_tensors=True, + source_authority_sha256=source_authority_sha256, + ) + if graph is None: + raise AssertionError("materialized graph unexpectedly missing") + return graph + + +def pair_decoder_discrete_identity( + graph: StaticGraphV2, pair_index: int +) -> tuple[object, ...]: + """Exact pre-embedding symmetric identity for one distance-decoder input.""" + + pair_count = int(graph.pair_target_edges.shape[1]) + if not 0 <= pair_index < pair_count: + raise StaticV2Error("pair decoder identity index is out of range") + left, right = ( + int(value) for value in graph.pair_target_edges[:, pair_index].tolist() + ) + + def endpoint(index: int) -> tuple[object, ...]: + return ( + *graph.atom_feature_ids[index].tolist(), + *graph.attachment_features[index].tolist(), + *graph.component_attachment_features[index].tolist(), + *graph.parity_features[index].tolist(), + ) + + endpoints = tuple(sorted((endpoint(left), endpoint(right)))) + return ( + int(graph.pair_residue_index[pair_index]), + endpoints, + tuple(graph.pair_relation_features[pair_index].tolist()), + ) + + +def validate_graph(graph: StaticGraphV2, vocabulary: FeatureVocabulary) -> None: + vocabulary.validate() + if graph.source_authority_sha256 != CERTIFIED_POST_CASCADE_AUTHORITY_SHA256: + raise StaticV2Error("graph source-authority hash is not the certified cascade") + if graph.template_registry_sha256 != GLYCAM_TEMPLATE_REGISTRY_SHA256: + raise StaticV2Error("graph mapped-sugar template registry hash is not certified") + if graph.feature_vocabulary_sha256 != vocabulary.sha256: + raise StaticV2Error("graph feature-vocabulary hash mismatch") + for name, value in ( + ("exact graph identity", graph.graph_fingerprint_sha256), + ("relabel-invariant WL8 screen", graph.relabel_invariant_wl8_screen_sha256), + ): + if not re.fullmatch(r"[0-9a-f]{64}", value): + raise StaticV2Error(f"{name} is malformed") + atom_count = len(graph.atom_serials) + residue_count = graph.residue_count + expected_shapes = { + "atom_feature_ids": (atom_count, 4), + "attachment_features": (atom_count, 12), + "component_attachment_features": ( + atom_count, + len(COMPONENT_ATTACHMENT_KINDS) + 9, + ), + "parity_features": (atom_count, 1), + "coordinates": (atom_count, 3), + "residue_index": (atom_count,), + "edge_index": (2, graph.edge_index.shape[1]), + "edge_features": (graph.edge_index.shape[1], len(EDGE_CHANNELS)), + "pair_target_edges": (2, graph.pair_target_edges.shape[1]), + "pair_relation_features": ( + graph.pair_target_edges.shape[1], + len(PAIR_RELATION_CHANNELS), + ), + "pair_distance_target": (graph.pair_target_edges.shape[1],), + "pair_residue_index": (graph.pair_target_edges.shape[1],), + "frame_volume_magnitude_target": (residue_count,), + "glycosidic_residue_edges": (2, graph.glycosidic_residue_edges.shape[1]), + "glycosidic_torsion_target": (graph.glycosidic_residue_edges.shape[1], 2), + "glycosidic_torsion_owner": (graph.glycosidic_residue_edges.shape[1],), + } + for name, shape in expected_shapes.items(): + value = getattr(graph, name) + if tuple(value.shape) != shape: + raise StaticV2Error(f"graph tensor {name} has wrong shape") + if value.is_floating_point() and not torch.isfinite(value).all(): + raise StaticV2Error(f"graph tensor {name} is nonfinite") + for name in ( + "atom_feature_ids", + "residue_index", + "edge_index", + "pair_target_edges", + "pair_residue_index", + "glycosidic_residue_edges", + "glycosidic_torsion_owner", + ): + if getattr(graph, name).dtype != torch.long: + raise StaticV2Error(f"graph index {name} is not int64") + if set(graph.residue_index.tolist()) != set(range(residue_count)): + raise StaticV2Error("graph owner segments are not dense and complete") + if graph.atom_serials != tuple(range(atom_count)): + raise StaticV2Error("graph exposes source PDB serial metadata") + if len(graph.atom_identity_labels) != atom_count or len( + set(graph.atom_identity_labels) + ) != atom_count: + raise StaticV2Error("graph canonical atom identity labels are not unique") + if not torch.all( + (graph.component_attachment_features == 0) + | (graph.component_attachment_features == 1) + ): + raise StaticV2Error("component attachment features must be binary") + component_kind = graph.component_attachment_features[ + :, : len(COMPONENT_ATTACHMENT_KINDS) + ] + component_position = graph.component_attachment_features[ + :, len(COMPONENT_ATTACHMENT_KINDS) : + ] + if not torch.all(component_kind.sum(dim=1) == 1): + raise StaticV2Error("every atom must have exactly one component kind") + sugar_mask = component_kind[:, COMPONENT_ATTACHMENT_KINDS.index("mapped_sugar")].bool() + if not torch.all(component_position[sugar_mask].sum(dim=1) == 0) or not torch.all( + component_position[~sugar_mask].sum(dim=1) == 1 + ): + raise StaticV2Error( + "component attachment position must propagate to every nonsugar atom" + ) + if not torch.all( + (graph.pair_relation_features == 0) + | (graph.pair_relation_features == 1) + ) or not torch.all(graph.pair_relation_features.sum(dim=1) == 1): + raise StaticV2Error("pair relation features must be exact one-hot values") + decoded_labels = [json.loads(value) for value in graph.atom_identity_labels] + for pair_index, (left, right) in enumerate(graph.pair_target_edges.T.tolist()): + left_label, right_label = decoded_labels[left], decoded_labels[right] + left_component = ( + left_label["owner_wurcs_node"], + left_label["component_attachment_kind"], + left_label["component_attachment_position"], + ) + right_component = ( + right_label["owner_wurcs_node"], + right_label["component_attachment_kind"], + right_label["component_attachment_position"], + ) + expected_relation = ( + (1.0, 0.0) if left_component == right_component else (0.0, 1.0) + ) + if tuple(graph.pair_relation_features[pair_index].tolist()) != expected_relation: + raise StaticV2Error("pair relation feature disagrees with chemistry identity") + target_by_decoder_identity: dict[tuple[object, ...], float] = {} + for pair_index, target in enumerate(graph.pair_distance_target.tolist()): + identity = pair_decoder_discrete_identity(graph, pair_index) + prior = target_by_decoder_identity.setdefault(identity, float(target)) + if abs(prior - float(target)) > 1.0e-6: + raise StaticV2Error( + "chemically distinct pair targets alias at the discrete decoder input" + ) + if not torch.all(graph.parity_features.abs() == 1): + raise StaticV2Error("parity input must be exactly -1 or +1") + if torch.any(graph.frame_volume_magnitude_target <= 0): + raise StaticV2Error("frame-volume magnitude targets must be positive") + if graph.edge_index.numel() == 0 or graph.pair_target_edges.numel() == 0: + raise StaticV2Error("graph lacks declared edges or geometry targets") + adjacency: list[set[int]] = [set() for _ in range(atom_count)] + for source, target in graph.edge_index.T.tolist(): + adjacency[source].add(target) + seen = {0} + queue = deque([0]) + while queue: + queue.extend(neighbor for neighbor in adjacency[queue.popleft()] if neighbor not in seen and not seen.add(neighbor)) + if len(seen) != atom_count: + raise StaticV2Error("declared message graph is disconnected") + + +@dataclass(frozen=True) +class GeometryNormalizerV2: + """Train-only, nested-unit normalizers for all coordinate-derived targets.""" + + pair_distance_mean: float + pair_distance_std: float + frame_volume_magnitude_mean: float + frame_volume_magnitude_std: float + torsion_sin_mean: float + torsion_sin_std: float + torsion_cos_mean: float + torsion_cos_std: float + source_role: str = "pretraining_train_after_v2_graph_quarantine" + + def validate(self) -> None: + values = ( + self.pair_distance_mean, + self.pair_distance_std, + self.frame_volume_magnitude_mean, + self.frame_volume_magnitude_std, + self.torsion_sin_mean, + self.torsion_sin_std, + self.torsion_cos_mean, + self.torsion_cos_std, + ) + if not all(math.isfinite(float(value)) for value in values): + raise StaticV2Error("static-v2 geometry normalizer is nonfinite") + if min( + self.pair_distance_std, + self.frame_volume_magnitude_std, + self.torsion_sin_std, + self.torsion_cos_std, + ) <= 0: + raise StaticV2Error("static-v2 geometry normalizer standard deviations must be positive") + if self.source_role not in { + "pretraining_train_after_v2_graph_quarantine", + "fixture_identity_transform_no_fit", + }: + raise StaticV2Error("static-v2 geometry normalizer source role is invalid") + + def to_dict(self) -> dict[str, object]: + self.validate() + return { + "schema": GEOMETRY_NORMALIZER_SCHEMA, + **self.__dict__, + "hierarchical_measure": ( + ( + "identity transform; no train or development values read" + if self.source_role == "fixture_identity_transform_no_fit" + else "pair_to_residue_to_state_to_parent_then_equal_parent; " + "frame_volume_magnitude_residue_to_state_to_parent; torsion_link_to_donor_" + "residue_to_positive_state_to_positive_parent" + ) + ), + "chirality_claim": ( + "preserves supplied certified chirality parity; does not infer chirality" + ), + } + + @property + def sha256(self) -> str: + return sha256_bytes(canonical_json_bytes(self.to_dict())) + + def normalized_targets( + self, graph: StaticGraphV2 + ) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]: + """Return normalized targets without mutating the manifest-bound graph.""" + + self.validate() + torsion = graph.glycosidic_torsion_target.clone() + if torsion.numel(): + torsion[:, 0] = ( + torsion[:, 0] - self.torsion_sin_mean + ) / self.torsion_sin_std + torsion[:, 1] = ( + torsion[:, 1] - self.torsion_cos_mean + ) / self.torsion_cos_std + return ( + (graph.pair_distance_target - self.pair_distance_mean) + / self.pair_distance_std, + (graph.frame_volume_magnitude_target - self.frame_volume_magnitude_mean) + / self.frame_volume_magnitude_std, + torsion, + ) + + def normalize_graph(self, graph: StaticGraphV2) -> StaticGraphV2: + pair, frame, torsion = self.normalized_targets(graph) + return replace( + graph, + pair_distance_target=pair, + frame_volume_magnitude_target=frame, + glycosidic_torsion_target=torsion, + ) + + + +__all__ = [ + "ACTIVE_ROLES", + "CERTIFIED_POST_CASCADE_ACTIVE_STATE_COUNT", + "CERTIFIED_POST_CASCADE_AUTHORITY_SHA256", + "CERTIFIED_POST_CASCADE_RECEIPT_SHA256", + "COMPONENT_CLASSES", + "COMPONENT_ATTACHMENT_KINDS", + "EDGE_CHANNELS", + "ELEMENTS", + "EXACT_MAPPED_SUGAR_TEMPLATE_REGISTRY_STATUS", + "FeatureVocabulary", + "FEATURE_VOCABULARY_SCHEMA", + "GEOMETRY_NORMALIZER_SCHEMA", + "GeometryNormalizerV2", + "GraphBuildRecord", + "MATERIALIZER_SCHEMA", + "MATERIALIZED_GRAPH_DIGEST_SCHEMA", + "GEOMETRY_TARGET_SCOPE", + "GLYCAM_TEMPLATE_REGISTRY_SCHEMA", + "GLYCAM_TEMPLATE_REGISTRY_SHA256", + "GLYCAM_TEMPLATE_SOURCE_SHA256", + "PAIR_RELATION_CHANNELS", + "MappedSugarTemplateRegistry", + "StaticGraphV2", + "StaticV2Error", + "build_graph_record", + "build_static_graph", + "canonical_fixed_6", + "canonical_json_bytes", + "module_state_sha256", + "ordered_state_tensor_manifest_sha256", + "ordered_string_ids_sha256", + "pair_decoder_discrete_identity", + "sha256_bytes", + "sha256_file", + "static_graph_tensor_sha256", + "validate_graph", +] diff --git a/releases/2026-10-02/structure_md_processing/project/writing/review/multimodal/scripts/build_review_a5_static_graph_v2_20260721_r7.py b/releases/2026-10-02/structure_md_processing/project/writing/review/multimodal/scripts/build_review_a5_static_graph_v2_20260721_r7.py new file mode 100644 index 0000000000000000000000000000000000000000..91981c5466b1e2eb6c90fd45831f39908382dbf9 --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/project/writing/review/multimodal/scripts/build_review_a5_static_graph_v2_20260721_r7.py @@ -0,0 +1,1298 @@ +#!/usr/bin/env python3 +"""Prepare the isolated r7 A5 static graph-authority successor. + +The builder consumes only the certified post-cascade child authority and local, +hash-verified review PDB cache. Its fixture path builds each selected graph +twice. The full path quarantines whole train parents for any +exact or conservative relabel-invariant WL8 train/development crossing and only +then fits hierarchical train-only geometry normalizers. Every mapped sugar and +attached component is checked against the independently certified exact +GLYCAM_06k atom/element and atom-name connectivity registry. +It emits no learned tokens and never authorizes training. +""" + +from __future__ import annotations + +import argparse +import csv +import gzip +import hashlib +import io +import json +import math +import os +import re +import shutil +import sys +import tempfile +from collections import Counter, defaultdict +from concurrent.futures import ProcessPoolExecutor +from pathlib import Path +from typing import Iterable, Mapping, Sequence + + +PROJECT_ROOT = Path(__file__).resolve().parents[4] +WRITING_ROOT = PROJECT_ROOT / "writing" +BUILDER_PATH = Path(__file__).resolve() +if str(PROJECT_ROOT) not in sys.path: + sys.path.insert(0, str(PROJECT_ROOT)) + +from writing.review.multimodal.runtime.a5_static_v2_20260721_r7.review_a5_static_graph_materializer_r7 import ( # noqa: E402 + ACTIVE_ROLES, + CERTIFIED_POST_CASCADE_ACTIVE_STATE_COUNT, + CERTIFIED_POST_CASCADE_AUTHORITY_SHA256, + CERTIFIED_POST_CASCADE_RECEIPT_SHA256, + CERTIFIED_TERMINAL_M_C6M_INSTANCE_COUNT, + EXACT_MAPPED_SUGAR_TEMPLATE_REGISTRY_STATUS, + FeatureVocabulary, + GEOMETRY_TARGET_SCOPE, + GeometryNormalizerV2, + GraphBuildRecord, + GLYCAM_TEMPLATE_REGISTRY_SHA256, + MappedSugarTemplateRegistry, + build_graph_record, + build_static_graph, + canonical_json_bytes, + sha256_file, + static_graph_tensor_sha256, +) + + +SCHEMA = "bertose_a5_static_graph_v2_authority_builder_20260721_r7" +RECEIPT_SCHEMA = "bertose_a5_static_graph_v2_authority_receipt_20260721_r7" +EXPECTED_HASHES = { + "child_authority": CERTIFIED_POST_CASCADE_AUTHORITY_SHA256, + "role_cascade_receipt": CERTIFIED_POST_CASCADE_RECEIPT_SHA256, + "glycam_template_registry_receipt": ( + "6bba07e7da9284af46b97f80c25c7e1dc332facf452e0fd2140a975b7c1e496b" + ), + "materializer": "da8d6dab478ace650fa5af3e99c72dedaf65a6cbc2bf62373fa2082bef748cea", +} +DEFAULT_AUTHORITY = ( + WRITING_ROOT + / "review/multimodal/outputs/p1_a5_static_role_successor_cascade_20260720_r1" + / "review_a5_static_role_successor_child_authority.tsv.gz" +) +DEFAULT_CACHE = ( + WRITING_ROOT + / "review/multimodal/inputs/review_a5_static_v2_pdb_cache_20260720_r1" +) +DEFAULT_OUTPUT = ( + WRITING_ROOT + / "review/multimodal/outputs/review_a5_static_graph_v2_authority_20260721_r7" +) +MATERIALIZER_PATH = ( + WRITING_ROOT + / "review/multimodal/runtime/a5_static_v2_20260721_r7/review_a5_static_graph_materializer_r7.py" +) +GLYCAM_REGISTRY_DIRECTORY = ( + WRITING_ROOT + / "review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2" +) +GLYCAM_REGISTRY_PATH = ( + GLYCAM_REGISTRY_DIRECTORY / "review_a5_static_glycam_template_registry_r2.json" +) +BOUND_INPUTS = { + "role_cascade_receipt": WRITING_ROOT + / "review/multimodal/outputs/p1_a5_static_role_successor_cascade_20260720_r1" + / "review_a5_static_role_successor_cascade_receipt.json", + "glycam_template_registry_receipt": GLYCAM_REGISTRY_DIRECTORY + / "review_a5_static_glycam_template_registry_receipt_r2.json", + "materializer": MATERIALIZER_PATH, +} +OUTPUT_NAMES = { + "authority": "review_a5_static_graph_v2_authority_r7.tsv.gz", + "graph_ledger": "review_a5_static_graph_v2_fingerprint_ledger_r7.tsv.gz", + "quarantine": "review_a5_static_graph_v2_train_identity_quarantine_r7.tsv", + "vocabulary": "review_a5_static_graph_v2_feature_vocabulary_r7.json", + "normalizer": "review_a5_static_graph_v2_train_normalizer_r7.json", + "summary": "review_a5_static_graph_v2_authority_summary_r7.json", + "glycam_template_registry": "review_a5_static_glycam_template_registry_r7.json", + "receipt": "review_a5_static_graph_v2_authority_receipt_r7.json", +} +REVIEW_CLOSED_AUTHORIZATIONS = { + "training_authorized": False, + "scientific_launch_authorized": False, + "gpu_launch_authorized": False, + "nova_submission_authorized": False, + "downstream_evaluation_authorized": False, + "inference_authorized": False, + "external_release_authorized": False, + "test_opening_authorized": False, +} +R7_BOUNDED_FIXTURE_STATE_IDS = ( + "GC0007191__state_single", + "GC0009273__state_single", + "GC0007203__state_single", + "GC0007232__state_single", +) + + +def _read_authority(path: Path) -> tuple[list[dict[str, str]], list[str]]: + if path.is_symlink() or not path.is_file(): + raise RuntimeError("static-v2 child authority is absent or symlinked") + if sha256_file(path) != EXPECTED_HASHES["child_authority"]: + raise RuntimeError("static-v2 child authority bytes changed") + with gzip.open(path, "rt", encoding="utf-8", newline="") as handle: + reader = csv.DictReader(handle, delimiter="\t") + fields = list(reader.fieldnames or []) + rows = list(reader) + required = { + "authority_index", + "canonical_structure_state_id", + "parent_glycorpus_id", + "a5_static_partition", + "state_label", + "state_role", + "effective_wurcs", + "wurcs_to_pdb_mapping_json", + "resolved_remote_pdb_path", + "certified_pdb_sha256", + } + if not required.issubset(fields): + raise RuntimeError("static-v2 child authority lacks required columns") + if len(rows) != 54_702 or [int(row["authority_index"]) for row in rows] != list(range(len(rows))): + raise RuntimeError("static-v2 child authority row order/count changed") + state_ids = [row["canonical_structure_state_id"] for row in rows] + if len(state_ids) != len(set(state_ids)): + raise RuntimeError("static-v2 child authority repeats a state ID") + active_counts = Counter( + row["a5_static_partition"] + for row in rows + if row["a5_static_partition"] in ACTIVE_ROLES + ) + if active_counts != Counter( + {"pretraining_train": 34_408, "pretraining_development": 7_964} + ): + raise RuntimeError("post-cascade active role counts changed") + for row in rows: + if row["a5_static_partition"] not in ACTIVE_ROLES: + continue + parent_id = row["parent_glycorpus_id"] + label = row["state_label"].strip().lower() + expected_role = ( + "single_parent_structure" + if label == "single" + else "alpha_beta_child_state" + ) + if ( + not re.fullmatch(r"GC[0-9]{7}", parent_id) + or label not in {"single", "alpha", "beta"} + or row["canonical_structure_state_id"] + != f"{parent_id}__state_{label}" + or row.get("state_role") != expected_role + ): + raise RuntimeError("post-cascade state/parent/label identity changed") + return rows, fields + + +def _validate_cascade_receipt(path: Path) -> None: + try: + receipt = json.loads(path.read_text(encoding="utf-8")) + except (OSError, UnicodeDecodeError, json.JSONDecodeError) as error: + raise RuntimeError("static-v2 cascade receipt is malformed") from error + authority = receipt.get("outputs", {}).get("authority", {}) + if ( + receipt.get("schema") + != "bertose_a5_static_role_successor_cascade_20260720_r1_receipt" + or receipt.get("status") + != "PASS_PREPARATION_ONLY_NOT_TRAINING_AUTHORIZATION" + or receipt.get("training_authorized") is not False + or receipt.get("gpu_launch_authorized") is not False + or authority.get("filename") + != "review_a5_static_role_successor_child_authority.tsv.gz" + or authority.get("sha256") != CERTIFIED_POST_CASCADE_AUTHORITY_SHA256 + or receipt.get("checks", {}).get("exact_35_active_states_removed") is not True + or receipt.get("checks", {}).get( + "official_submitted_or_predecessor_artifacts_unchanged" + ) + is not True + ): + raise RuntimeError("static-v2 cascade receipt semantics changed") + + +def _validate_glycam_template_registry_receipt(path: Path) -> None: + try: + receipt = json.loads(path.read_text(encoding="utf-8")) + except (OSError, UnicodeDecodeError, json.JSONDecodeError) as error: + raise RuntimeError("static-v2 GLYCAM template receipt is unreadable") from error + registry = receipt.get("outputs", {}).get("registry", {}) + if ( + set(receipt) != {"schema", "inputs", "outputs", "authorization"} + or receipt.get("schema") + != "bertose_a5_static_glycam_template_registry_receipt_20260721_r2" + or receipt.get("authorization") != REVIEW_CLOSED_AUTHORIZATIONS + or registry.get("filename") + != "review_a5_static_glycam_template_registry_r2.json" + or registry.get("sha256") != GLYCAM_TEMPLATE_REGISTRY_SHA256 + or registry.get("size_bytes") != GLYCAM_REGISTRY_PATH.stat().st_size + or GLYCAM_REGISTRY_PATH.is_symlink() + or not GLYCAM_REGISTRY_PATH.is_file() + or sha256_file(GLYCAM_REGISTRY_PATH) != GLYCAM_TEMPLATE_REGISTRY_SHA256 + ): + raise RuntimeError("static-v2 GLYCAM template receipt semantics changed") + + +def _bind_inputs(authority: Path) -> dict[str, dict[str, object]]: + paths = {"child_authority": authority, **BOUND_INPUTS} + result: dict[str, dict[str, object]] = {} + for name, path in paths.items(): + if path.is_symlink() or not path.is_file(): + raise RuntimeError(f"bound static-v2 input is absent or symlinked: {name}") + actual = sha256_file(path) + expected = EXPECTED_HASHES[name] + if actual != expected: + raise RuntimeError(f"bound static-v2 input changed: {name}") + result[name] = { + "filename": path.name, + "sha256": actual, + "size_bytes": path.stat().st_size, + } + _validate_cascade_receipt(BOUND_INPUTS["role_cascade_receipt"]) + _validate_glycam_template_registry_receipt( + BOUND_INPUTS["glycam_template_registry_receipt"] + ) + result["builder"] = { + "filename": BUILDER_PATH.name, + "sha256": sha256_file(BUILDER_PATH), + "size_bytes": BUILDER_PATH.stat().st_size, + } + if set(result) != { + "child_authority", + "role_cascade_receipt", + "glycam_template_registry_receipt", + "materializer", + "builder", + }: + raise RuntimeError("static-v2 r7 receipt input-key contract changed") + return result + + +def _cache_path(cache: Path, row: Mapping[str, str]) -> Path: + remote = row["resolved_remote_pdb_path"] + if not remote.startswith("/work/ratul1/supantha/") or ".." in Path(remote).parts: + raise RuntimeError("authority contains an unsafe remote PDB path") + result = cache / remote.lstrip("/") + try: + result.resolve().relative_to(cache.resolve()) + except ValueError as error: + raise RuntimeError("cached PDB path escapes review cache") from error + if result.is_symlink(): + raise RuntimeError("cached PDB input is symlinked") + return result + + +_RECORD_WORKER_MATERIALIZER_BOUND = False +_RECORD_WORKER_BUILDER_BOUND = False +_RECORD_WORKER_TEMPLATE_REGISTRY: MappedSugarTemplateRegistry | None = None + + +def _worker(arguments: tuple[dict[str, str], str]) -> tuple[GraphBuildRecord, set[str], set[str]]: + if ( + not _RECORD_WORKER_MATERIALIZER_BOUND + or not _RECORD_WORKER_BUILDER_BOUND + or _RECORD_WORKER_TEMPLATE_REGISTRY is None + ): + raise RuntimeError("static-v2 record worker lacks frozen source binding") + row, path = arguments + return build_graph_record(row, Path(path), _RECORD_WORKER_TEMPLATE_REGISTRY) + + +def _assert_materializer_source_hash() -> str: + if MATERIALIZER_PATH.is_symlink() or not MATERIALIZER_PATH.is_file(): + raise RuntimeError( + "static-v2 frozen graph materializer is absent or symlinked" + ) + actual = sha256_file(MATERIALIZER_PATH) + if actual != EXPECTED_HASHES["materializer"]: + raise RuntimeError( + "static-v2 frozen graph materializer changed during build" + ) + return actual + + +def _assert_builder_source_hash(expected_sha256: str) -> str: + if not re.fullmatch(r"[0-9a-f]{64}", expected_sha256): + raise RuntimeError("static-v2 expected builder hash is malformed") + if BUILDER_PATH.is_symlink() or not BUILDER_PATH.is_file(): + raise RuntimeError("static-v2 builder source is absent or symlinked") + actual = sha256_file(BUILDER_PATH) + if actual != expected_sha256: + raise RuntimeError("static-v2 builder source changed during build") + return actual + + +def _initialize_record_worker( + expected_builder_sha256: str, + template_registry: MappedSugarTemplateRegistry, +) -> None: + global _RECORD_WORKER_MATERIALIZER_BOUND, _RECORD_WORKER_BUILDER_BOUND + global _RECORD_WORKER_TEMPLATE_REGISTRY + _assert_materializer_source_hash() + _assert_builder_source_hash(expected_builder_sha256) + template_registry.validate() + _RECORD_WORKER_TEMPLATE_REGISTRY = template_registry + _RECORD_WORKER_MATERIALIZER_BOUND = True + _RECORD_WORKER_BUILDER_BOUND = True + + +_MATERIALIZED_WORKER_VOCABULARY: FeatureVocabulary | None = None +_MATERIALIZED_WORKER_TEMPLATE_REGISTRY: MappedSugarTemplateRegistry | None = None + + +def _initialize_materialized_worker( + vocabulary: FeatureVocabulary, + expected_builder_sha256: str, + template_registry: MappedSugarTemplateRegistry, +) -> None: + global _MATERIALIZED_WORKER_VOCABULARY, _MATERIALIZED_WORKER_TEMPLATE_REGISTRY + _assert_materializer_source_hash() + _assert_builder_source_hash(expected_builder_sha256) + vocabulary.validate() + template_registry.validate() + _MATERIALIZED_WORKER_VOCABULARY = vocabulary + _MATERIALIZED_WORKER_TEMPLATE_REGISTRY = template_registry + + +def _materialized_worker(arguments: tuple[dict[str, str], str]) -> tuple[str, str]: + row, path = arguments + if ( + _MATERIALIZED_WORKER_VOCABULARY is None + or _MATERIALIZED_WORKER_TEMPLATE_REGISTRY is None + ): + raise RuntimeError("materialized graph worker lacks frozen scientific inputs") + graph = build_static_graph( + row, + Path(path), + _MATERIALIZED_WORKER_VOCABULARY, + _MATERIALIZED_WORKER_TEMPLATE_REGISTRY, + source_authority_sha256=EXPECTED_HASHES["child_authority"], + ) + return graph.state_id, static_graph_tensor_sha256(graph) + + +def _build_pass( + rows: Sequence[dict[str, str]], + cache: Path, + template_registry: MappedSugarTemplateRegistry, + *, + workers: int, + label: str, + expected_builder_sha256: str | None = None, +) -> tuple[list[GraphBuildRecord], set[str], set[str], str]: + _assert_materializer_source_hash() + if expected_builder_sha256 is None: + expected_builder_sha256 = sha256_file(BUILDER_PATH) + _assert_builder_source_hash(expected_builder_sha256) + template_registry.validate() + arguments = [(row, str(_cache_path(cache, row))) for row in rows] + records: list[GraphBuildRecord] = [] + atom_roles: set[str] = set() + component_names: set[str] = set() + digest = hashlib.sha256() + if workers == 1: + _initialize_record_worker(expected_builder_sha256, template_registry) + iterator: Iterable[tuple[GraphBuildRecord, set[str], set[str]]] = map(_worker, arguments) + executor = None + else: + executor = ProcessPoolExecutor( + max_workers=workers, + initializer=_initialize_record_worker, + initargs=(expected_builder_sha256, template_registry), + ) + iterator = executor.map(_worker, arguments, chunksize=16) + try: + for index, (record, roles, names) in enumerate(iterator, start=1): + records.append(record) + atom_roles.update(roles) + component_names.update(names) + digest.update(canonical_json_bytes(record.canonical_identity_payload())) + if index % 500 == 0 or index == len(rows): + print(f"{label}: {index}/{len(rows)}", flush=True) + finally: + if executor is not None: + executor.shutdown(wait=True, cancel_futures=True) + _assert_materializer_source_hash() + _assert_builder_source_hash(expected_builder_sha256) + return records, atom_roles, component_names, digest.hexdigest() + + +def _validate_materialized_pass( + rows: Sequence[dict[str, str]], + cache: Path, + vocabulary: FeatureVocabulary, + template_registry: MappedSugarTemplateRegistry, + *, + workers: int, + label: str, + expected_builder_sha256: str | None = None, +) -> tuple[dict[str, str], str]: + """Materialize and validate every selected graph without retaining tensors.""" + + _assert_materializer_source_hash() + if expected_builder_sha256 is None: + expected_builder_sha256 = sha256_file(BUILDER_PATH) + _assert_builder_source_hash(expected_builder_sha256) + vocabulary.validate() + template_registry.validate() + arguments = [(row, str(_cache_path(cache, row))) for row in rows] + executor: ProcessPoolExecutor | None = None + if workers == 1: + _initialize_materialized_worker( + vocabulary, expected_builder_sha256, template_registry + ) + iterator = map(_materialized_worker, arguments) + else: + executor = ProcessPoolExecutor( + max_workers=workers, + initializer=_initialize_materialized_worker, + initargs=(vocabulary, expected_builder_sha256, template_registry), + ) + iterator = executor.map(_materialized_worker, arguments, chunksize=8) + per_state: dict[str, str] = {} + aggregate = hashlib.sha256() + try: + for index, (state_id, tensor_sha256) in enumerate(iterator, start=1): + expected_state_id = rows[index - 1]["canonical_structure_state_id"] + if state_id != expected_state_id: + raise RuntimeError("materialized graph validation changed state order") + if state_id in per_state or not re.fullmatch(r"[0-9a-f]{64}", tensor_sha256): + raise RuntimeError("materialized graph validation emitted malformed identity") + per_state[state_id] = tensor_sha256 + aggregate.update(state_id.encode("utf-8") + b"\0") + aggregate.update(tensor_sha256.encode("ascii") + b"\n") + if index % 500 == 0 or index == len(rows): + print(f"{label}: {index}/{len(rows)}", flush=True) + finally: + if executor is not None: + executor.shutdown(wait=True, cancel_futures=True) + if len(per_state) != len(rows): + raise RuntimeError("materialized graph validation did not cover every state") + _assert_materializer_source_hash() + _assert_builder_source_hash(expected_builder_sha256) + return per_state, aggregate.hexdigest() + + +def _hierarchical_family_moments( + records: Sequence[GraphBuildRecord], family: str +) -> tuple[float, float, dict[str, int]]: + by_parent: dict[str, list[GraphBuildRecord]] = defaultdict(list) + for record in records: + by_parent[record.parent_id].append(record) + parent_means: list[float] = [] + parent_seconds: list[float] = [] + used_states = 0 + used_residues_or_links = 0 + raw_values = 0 + for parent in sorted(by_parent): + state_means: list[float] = [] + state_seconds: list[float] = [] + for record in by_parent[parent]: + if family == "pair_distance": + moments = record.pair_residue_moments + state_means.append(sum(value[1] for value in moments) / len(moments)) + state_seconds.append(sum(value[2] for value in moments) / len(moments)) + used_residues_or_links += len(moments) + raw_values += sum(value[0] for value in moments) + elif family == "frame_volume_magnitude": + values = record.frame_volume_magnitudes + state_means.append(sum(values) / len(values)) + state_seconds.append(sum(value * value for value in values) / len(values)) + used_residues_or_links += len(values) + raw_values += len(values) + elif family in {"torsion_sin", "torsion_cos"}: + axis = 0 if family == "torsion_sin" else 1 + by_owner_proxy: list[float] = [value[axis] for value in record.torsion_values] + if not by_owner_proxy: + continue + # Each tree donor has one parent edge in this authority. The + # link mean is therefore also the donor-residue mean; retain + # the explicit hierarchy in the manifest. + state_means.append(sum(by_owner_proxy) / len(by_owner_proxy)) + state_seconds.append( + sum(value * value for value in by_owner_proxy) / len(by_owner_proxy) + ) + used_residues_or_links += len(by_owner_proxy) + raw_values += len(by_owner_proxy) + else: + raise ValueError(f"unknown normalizer family: {family}") + used_states += 1 + if state_means: + parent_means.append(sum(state_means) / len(state_means)) + parent_seconds.append(sum(state_seconds) / len(state_seconds)) + if len(parent_means) < 2: + raise RuntimeError(f"normalizer family {family} lacks two contributing parents") + mean = sum(parent_means) / len(parent_means) + second = sum(parent_seconds) / len(parent_seconds) + variance = second - mean * mean + if not math.isfinite(variance) or variance <= 0: + raise RuntimeError(f"normalizer family {family} has invalid variance") + return mean, math.sqrt(variance), { + "parents": len(parent_means), + "states": used_states, + "residues_or_links": used_residues_or_links, + "raw_values": raw_values, + } + + +def _fit_normalizer(records: Sequence[GraphBuildRecord]) -> tuple[GeometryNormalizerV2, dict[str, object]]: + if not records or any(record.role != "pretraining_train" for record in records): + raise RuntimeError("geometry normalizer input is not final train only") + values: dict[str, tuple[float, float]] = {} + counts: dict[str, object] = {} + for family in ( + "pair_distance", + "frame_volume_magnitude", + "torsion_sin", + "torsion_cos", + ): + mean, std, family_counts = _hierarchical_family_moments(records, family) + values[family] = (mean, std) + counts[family] = family_counts + normalizer = GeometryNormalizerV2( + pair_distance_mean=values["pair_distance"][0], + pair_distance_std=values["pair_distance"][1], + frame_volume_magnitude_mean=values["frame_volume_magnitude"][0], + frame_volume_magnitude_std=values["frame_volume_magnitude"][1], + torsion_sin_mean=values["torsion_sin"][0], + torsion_sin_std=values["torsion_sin"][1], + torsion_cos_mean=values["torsion_cos"][0], + torsion_cos_std=values["torsion_cos"][1], + ) + normalizer.validate() + return normalizer, counts + + +def _fixture_identity_normalizer() -> tuple[GeometryNormalizerV2, dict[str, object]]: + """Non-fitted diagnostic transform for a fixture with no glycosidic links.""" + + normalizer = GeometryNormalizerV2( + pair_distance_mean=0.0, + pair_distance_std=1.0, + frame_volume_magnitude_mean=0.0, + frame_volume_magnitude_std=1.0, + torsion_sin_mean=0.0, + torsion_sin_std=1.0, + torsion_cos_mean=0.0, + torsion_cos_std=1.0, + source_role="fixture_identity_transform_no_fit", + ) + normalizer.validate() + return normalizer, { + "fixture_identity_transform_not_fit": True, + "train_or_development_values_read_for_fit": 0, + "reason": "bounded three-state alias fixture contains no glycosidic torsions", + } + + +def _plan_identity_quarantine( + records: Sequence[GraphBuildRecord], +) -> dict[str, object]: + """Plan conservative whole-parent quarantine with complete lineage. + + The exact fingerprint is exact only in the certified stable owner-label + domain. The owner-label-free WL8 value is a conservative safety screen, + never an identity proof. The union is used for exclusion so a WL collision + can only over-quarantine training data. + """ + + train = [record for record in records if record.role == "pretraining_train"] + development = [ + record for record in records if record.role == "pretraining_development" + ] + if len(train) + len(development) != len(records) or not train or not development: + raise RuntimeError("static-v2 identity planner received an invalid role surface") + + screens_by_exact: dict[str, set[str]] = defaultdict(set) + for record in records: + screens_by_exact[record.fingerprint].add( + record.relabel_invariant_wl8_screen + ) + inconsistent_exact = { + fingerprint: screens + for fingerprint, screens in screens_by_exact.items() + if len(screens) != 1 + } + if inconsistent_exact: + raise RuntimeError( + "static-v2 exact fingerprint maps to multiple WL8 safety screens" + ) + + development_by_exact: dict[str, list[str]] = defaultdict(list) + development_by_wl8: dict[str, list[str]] = defaultdict(list) + for record in development: + development_by_exact[record.fingerprint].append(record.state_id) + development_by_wl8[record.relabel_invariant_wl8_screen].append( + record.state_id + ) + + direct_basis_by_state: dict[str, str] = {} + direct_records: list[GraphBuildRecord] = [] + for record in train: + exact = record.fingerprint in development_by_exact + wl8 = record.relabel_invariant_wl8_screen in development_by_wl8 + if exact and not wl8: + raise RuntimeError( + "static-v2 exact train/development match escaped the WL8 safety screen" + ) + if exact or wl8: + direct_records.append(record) + direct_basis_by_state[record.state_id] = ( + "both_exact_and_wl8" if exact else "wl8_only" + ) + + excluded_parents = {record.parent_id for record in direct_records} + excluded_train = [ + record for record in train if record.parent_id in excluded_parents + ] + final_train = [ + record for record in train if record.parent_id not in excluded_parents + ] + remaining_exact = {record.fingerprint for record in final_train} & { + record.fingerprint for record in development + } + remaining_wl8 = { + record.relabel_invariant_wl8_screen for record in final_train + } & {record.relabel_invariant_wl8_screen for record in development} + if remaining_exact or remaining_wl8: + raise RuntimeError( + "static-v2 exact or relabel-invariant graph screen remains across " + "final train/development" + ) + + basis_by_state = { + record.state_id: direct_basis_by_state.get( + record.state_id, "whole_parent_sibling" + ) + for record in excluded_train + } + trigger_state_ids_by_parent: dict[str, tuple[str, ...]] = {} + for parent in sorted(excluded_parents): + trigger_state_ids_by_parent[parent] = tuple( + sorted( + record.state_id + for record in direct_records + if record.parent_id == parent + ) + ) + + return { + "development_by_exact": { + key: tuple(sorted(value)) for key, value in development_by_exact.items() + }, + "development_by_wl8": { + key: tuple(sorted(value)) for key, value in development_by_wl8.items() + }, + "direct_records": tuple(direct_records), + "excluded_parents": frozenset(excluded_parents), + "excluded_train": tuple(excluded_train), + "final_train": tuple(final_train), + "final_development": tuple(development), + "remaining_exact": frozenset(remaining_exact), + "remaining_wl8": frozenset(remaining_wl8), + "basis_by_state": basis_by_state, + "trigger_state_ids_by_parent": trigger_state_ids_by_parent, + } + + +def _gzip_tsv(path: Path, fields: Sequence[str], rows: Iterable[Mapping[str, object]]) -> None: + with path.open("wb") as raw: + with gzip.GzipFile(filename="", mode="wb", fileobj=raw, mtime=0) as compressed: + with io.TextIOWrapper(compressed, encoding="utf-8", newline="") as text: + writer = csv.DictWriter( + text, + fieldnames=list(fields), + delimiter="\t", + lineterminator="\n", + extrasaction="raise", + ) + writer.writeheader() + writer.writerows(rows) + + +def _plain_tsv(path: Path, fields: Sequence[str], rows: Iterable[Mapping[str, object]]) -> None: + with path.open("w", encoding="utf-8", newline="") as handle: + writer = csv.DictWriter( + handle, + fieldnames=list(fields), + delimiter="\t", + lineterminator="\n", + extrasaction="raise", + ) + writer.writeheader() + writer.writerows(rows) + + +def _json(path: Path, value: object) -> None: + path.write_bytes(canonical_json_bytes(value)) + + +def build( + *, + authority: Path, + cache: Path, + output: Path, + workers: int, + fixture_state_ids: Sequence[str], +) -> dict[str, object]: + if output.exists() or output.is_symlink(): + raise RuntimeError(f"refusing to overwrite static-v2 output: {output}") + if cache.is_symlink() or not cache.is_dir(): + raise RuntimeError("static-v2 review PDB cache is absent or symlinked") + if workers < 1 or workers > 12: + raise RuntimeError("static-v2 workers must be between 1 and 12") + bound_inputs = _bind_inputs(authority) + template_registry = MappedSugarTemplateRegistry.from_json_path( + GLYCAM_REGISTRY_PATH + ) + all_rows, source_fields = _read_authority(authority) + active_rows = [row for row in all_rows if row["a5_static_partition"] in ACTIVE_ROLES] + fixture_mode = bool(fixture_state_ids) + if fixture_mode: + requested = list(fixture_state_ids) + if tuple(requested) != R7_BOUNDED_FIXTURE_STATE_IDS: + raise RuntimeError( + "r7 fixture mode requires the exact bounded three-state ordered allowlist" + ) + by_state = {row["canonical_structure_state_id"]: row for row in active_rows} + missing = sorted(set(requested) - set(by_state)) + if missing: + raise RuntimeError(f"fixture state IDs are absent: {missing}") + active_rows = [by_state[state_id] for state_id in requested] + elif len(active_rows) != CERTIFIED_POST_CASCADE_ACTIVE_STATE_COUNT: + raise RuntimeError("full static-v2 active-state count differs from 42,372") + estimated_uncompressed_input = sum( + _cache_path(cache, row).stat().st_size for row in active_rows + ) + free_bytes = shutil.disk_usage(output.parent).free + projected_output_bytes = max(20_000_000, len(active_rows) * 1_350) + if free_bytes < projected_output_bytes + 2_000_000_000: + raise RuntimeError( + f"insufficient safe disk headroom: free={free_bytes}, projected={projected_output_bytes}" + ) + print( + json.dumps( + { + "preflight_active_states": len(active_rows), + "cached_pdb_bytes": estimated_uncompressed_input, + "projected_output_bytes": projected_output_bytes, + "free_bytes": free_bytes, + "workers": workers, + "fixture_mode": fixture_mode, + }, + sort_keys=True, + ), + flush=True, + ) + + first, atom_roles, component_names, first_digest = _build_pass( + active_rows, + cache, + template_registry, + workers=workers, + label="static-v2 pass1", + expected_builder_sha256=bound_inputs["builder"]["sha256"], + ) + second, roles_second, names_second, second_digest = _build_pass( + active_rows, + cache, + template_registry, + workers=workers, + label="static-v2 pass2", + expected_builder_sha256=bound_inputs["builder"]["sha256"], + ) + if first_digest != second_digest or first != second: + raise RuntimeError("static-v2 graph build is not byte-deterministic across two passes") + if atom_roles != roles_second or component_names != names_second: + raise RuntimeError("static-v2 feature surface changed across two passes") + + quarantine_plan = _plan_identity_quarantine(first) + development_by_exact = quarantine_plan["development_by_exact"] + development_by_wl8 = quarantine_plan["development_by_wl8"] + direct_train_records = quarantine_plan["direct_records"] + excluded_train_records = quarantine_plan["excluded_train"] + colliding_train_parents = quarantine_plan["excluded_parents"] + final_train = quarantine_plan["final_train"] + final_development = quarantine_plan["final_development"] + remaining_exact_crossings = quarantine_plan["remaining_exact"] + remaining_wl8_crossings = quarantine_plan["remaining_wl8"] + quarantine_basis_by_state = quarantine_plan["basis_by_state"] + trigger_state_ids_by_parent = quarantine_plan[ + "trigger_state_ids_by_parent" + ] + development_fingerprints = set(development_by_exact) + development_wl8_screens = set(development_by_wl8) + final_train_atom_roles = { + value for record in final_train for value in record.atom_roles + } + final_train_component_names = { + value for record in final_train for value in record.component_names + } + development_atom_roles = { + value for record in final_development for value in record.atom_roles + } + development_component_names = { + value for record in final_development for value in record.component_names + } + vocabulary = FeatureVocabulary.from_observed( + final_train_atom_roles, + final_train_component_names, + ) + dev_only_atom_roles = sorted(development_atom_roles - final_train_atom_roles) + dev_only_component_names = sorted( + development_component_names - final_train_component_names + ) + materialized_tensor_sha256_by_state, materialized_pass_sha256 = ( + _validate_materialized_pass( + active_rows, + cache, + vocabulary, + template_registry, + workers=workers, + label="static-v2 materialized validation", + expected_builder_sha256=bound_inputs["builder"]["sha256"], + ) + ) + normalizer, normalizer_counts = ( + _fixture_identity_normalizer() + if fixture_mode + else _fit_normalizer(final_train) + ) + + output.parent.mkdir(parents=True, exist_ok=True) + staging = Path( + tempfile.mkdtemp(prefix="review_a5_static_graph_v2_building_", dir=output.parent) + ) + try: + record_by_state = {record.state_id: record for record in first} + authority_fields = [ + *source_fields, + "review_r7_graph_fingerprint_sha256", + "review_r7_graph_wl8_screen_sha256", + "review_r7_static_partition", + "review_r7_static_role_reason", + "review_r7_static_quarantine_basis", + ] + + def authority_rows() -> Iterable[dict[str, object]]: + selected = {row["canonical_structure_state_id"] for row in active_rows} + for row in all_rows: + state_id = row["canonical_structure_state_id"] + result: dict[str, object] = dict(row) + if state_id in selected: + record = record_by_state[state_id] + result["review_r7_graph_fingerprint_sha256"] = record.fingerprint + result["review_r7_graph_wl8_screen_sha256"] = ( + record.relabel_invariant_wl8_screen + ) + if record.role == "pretraining_train" and record.parent_id in colliding_train_parents: + result["review_r7_static_partition"] = "excluded_r7_graph_identity" + result["review_r7_static_role_reason"] = ( + "whole_train_parent_quarantine_union_exact_and_relabel_invariant_wl8" + ) + result["review_r7_static_quarantine_basis"] = ( + quarantine_basis_by_state[state_id] + ) + else: + result["review_r7_static_partition"] = record.role + result["review_r7_static_role_reason"] = ( + "exact_glycam_partial_geometry_r7_graph_retained" + ) + result["review_r7_static_quarantine_basis"] = "not_quarantined" + else: + result["review_r7_graph_fingerprint_sha256"] = "" + result["review_r7_graph_wl8_screen_sha256"] = "" + result["review_r7_static_partition"] = row["a5_static_partition"] + result["review_r7_static_role_reason"] = ( + "fixture_not_selected" if fixture_mode and row["a5_static_partition"] in ACTIVE_ROLES else "preserved_nonactive_child_role" + ) + result["review_r7_static_quarantine_basis"] = ( + "not_evaluated_fixture" if fixture_mode else "not_active" + ) + yield result + + _gzip_tsv(staging / OUTPUT_NAMES["authority"], authority_fields, authority_rows()) + ledger_fields = ( + "authority_index", + "canonical_structure_state_id", + "parent_glycorpus_id", + "source_role", + "final_role", + "graph_fingerprint_sha256", + "graph_wl8_screen_sha256", + "quarantine_basis", + "materialized_tensor_sha256", + "certified_pdb_sha256", + "cached_pdb_relative_path", + "pdb_bytes", + "residue_count", + "atom_count", + "roh_count", + "acx_count", + "mex_count", + "so3_count", + "undirected_edge_count", + "geometry_pair_count", + "torsion_count", + "parity_positive", + "parity_negative", + "terminal_m_c6m_backbone_count", + ) + source_index = { + row["canonical_structure_state_id"]: row["authority_index"] for row in active_rows + } + + def ledger_rows() -> Iterable[dict[str, object]]: + for row, record in zip(active_rows, first): + final_role = ( + "excluded_r7_graph_identity" + if record.role == "pretraining_train" and record.parent_id in colliding_train_parents + else record.role + ) + yield { + "authority_index": source_index[record.state_id], + "canonical_structure_state_id": record.state_id, + "parent_glycorpus_id": record.parent_id, + "source_role": record.role, + "final_role": final_role, + "graph_fingerprint_sha256": record.fingerprint, + "graph_wl8_screen_sha256": ( + record.relabel_invariant_wl8_screen + ), + "quarantine_basis": quarantine_basis_by_state.get( + record.state_id, "not_quarantined" + ), + "materialized_tensor_sha256": materialized_tensor_sha256_by_state[ + record.state_id + ], + "certified_pdb_sha256": record.pdb_sha256, + "cached_pdb_relative_path": str(_cache_path(cache, row).relative_to(cache)), + "pdb_bytes": record.pdb_bytes, + "residue_count": record.residue_count, + "atom_count": record.atom_count, + "roh_count": record.component_counts.get("ROH", 0), + "acx_count": record.component_counts.get("ACX", 0), + "mex_count": record.component_counts.get("MEX", 0), + "so3_count": record.component_counts.get("SO3", 0), + "undirected_edge_count": record.undirected_edge_count, + "geometry_pair_count": record.geometry_pair_count, + "torsion_count": record.torsion_count, + "parity_positive": record.parity_positive, + "parity_negative": record.parity_negative, + "terminal_m_c6m_backbone_count": ( + record.terminal_m_c6m_backbone_count + ), + } + + _gzip_tsv(staging / OUTPUT_NAMES["graph_ledger"], ledger_fields, ledger_rows()) + quarantine_fields = ( + "parent_glycorpus_id", + "train_state_id", + "graph_fingerprint_sha256", + "graph_wl8_screen_sha256", + "direct_match_basis", + "matched_development_state_ids_exact", + "matched_development_state_ids_wl8", + "parent_trigger_train_state_ids", + "reason", + ) + quarantine_rows = [ + { + "parent_glycorpus_id": record.parent_id, + "train_state_id": record.state_id, + "graph_fingerprint_sha256": record.fingerprint, + "graph_wl8_screen_sha256": record.relabel_invariant_wl8_screen, + "direct_match_basis": quarantine_basis_by_state[ + record.state_id + ], + "matched_development_state_ids_exact": ",".join( + development_by_exact.get(record.fingerprint, ()) + ), + "matched_development_state_ids_wl8": ",".join( + development_by_wl8.get( + record.relabel_invariant_wl8_screen, () + ) + ), + "parent_trigger_train_state_ids": ",".join( + trigger_state_ids_by_parent[record.parent_id] + ), + "reason": "cross_role_r7_exact_and_wl8_union_safety_quarantine_whole_train_parent_removed", + } + for record in excluded_train_records + ] + _plain_tsv( + staging / OUTPUT_NAMES["quarantine"], quarantine_fields, quarantine_rows + ) + _json( + staging / OUTPUT_NAMES["vocabulary"], + { + **vocabulary.to_dict(), + "sha256_identity": vocabulary.sha256, + "source_scope": "final_pretraining_train_after_v2_identity_quarantine_only", + "development_rows_read_for_vocabulary_fit": 0, + "development_unseen_atom_roles_mapped_to_unknown": dev_only_atom_roles, + "development_unseen_component_names_mapped_to_unknown": dev_only_component_names, + **REVIEW_CLOSED_AUTHORIZATIONS, + }, + ) + _json( + staging / OUTPUT_NAMES["normalizer"], + { + **normalizer.to_dict(), + "sha256_identity": normalizer.sha256, + "contribution_counts": normalizer_counts, + "fit_parent_count": len({record.parent_id for record in final_train}), + "fit_state_count": len(final_train), + "development_rows_read_for_fit": 0, + **REVIEW_CLOSED_AUTHORIZATIONS, + }, + ) + component_totals: Counter[str] = Counter() + for record in first: + component_totals.update(record.component_counts) + terminal_m_c6m_count = sum( + record.terminal_m_c6m_backbone_count for record in first + ) + if ( + not fixture_mode + and terminal_m_c6m_count + != CERTIFIED_TERMINAL_M_C6M_INSTANCE_COUNT + ): + raise RuntimeError( + "full static-v2 terminal-m/C6M equivalence count changed" + ) + summary = { + "schema": SCHEMA, + "status": ( + "FIXTURE_R7_PASS_EXACT_TEMPLATE_BOUND_PREPARATION_ONLY" + if fixture_mode + else "FULL_R7_PASS_EXACT_TEMPLATE_BOUND_PREPARATION_ONLY" + ), + **REVIEW_CLOSED_AUTHORIZATIONS, + "official_or_submitted_artifacts_modified": False, + "fixture_mode": fixture_mode, + "fixture_state_ids": list(fixture_state_ids), + "inputs": bound_inputs, + "cache": { + "path": str(cache.relative_to(PROJECT_ROOT)), + "active_file_count": len(active_rows), + "authority_selected_bytes": estimated_uncompressed_input, + "all_selected_hashes_verified_in_each_of_two_build_passes": True, + }, + "determinism": { + "passes": 2, + "pass1_canonical_record_sha256": first_digest, + "pass2_canonical_record_sha256": second_digest, + "records_exactly_equal": True, + }, + "materialized_validation": { + "passes": 1, + "state_count": len(materialized_tensor_sha256_by_state), + "all_tensor_shapes_finiteness_and_connectivity_validated": True, + "aggregate_state_tensor_sha256": materialized_pass_sha256, + "pair_decoder_discrete_alias_check_run_for_every_selected_graph": True, + "component_attachment_and_pair_relation_features_manifest_bound": True, + "exact_glycam_template_covalent_edge_channel_manifest_bound": True, + "frame_volume_magnitude_target_manifest_bound": True, + }, + "launch_gates": { + "post_cascade_authority_and_receipt_bound": True, + "glycam_template_registry_receipt_bound": True, + "glycam_template_registry_receipt_sha256": EXPECTED_HASHES[ + "glycam_template_registry_receipt" + ], + "exact_external_glycam_atom_role_template_registry": ( + EXACT_MAPPED_SUGAR_TEMPLATE_REGISTRY_STATUS + ), + "exact_sugar_component_and_bond_template_registry_gate_passed": True, + "suffix_aware_terminal_m_c6m_equivalence_gate_passed": ( + fixture_mode + or terminal_m_c6m_count + == CERTIFIED_TERMINAL_M_C6M_INSTANCE_COUNT + ), + "full_active_42372_alias_sweep_run": not fixture_mode, + "full_graph_build_completed": not fixture_mode, + "training_authorized": False, + }, + "materializer_source_closure": { + "expected_materializer_sha256": EXPECTED_HASHES["materializer"], + "expected_builder_sha256": bound_inputs["builder"]["sha256"], + "verified_before_and_after_each_pass": True, + "verified_in_every_process_worker_initializer": True, + "final_bound_input_reopen_required_before_receipt": True, + }, + "source_counts": { + "active_states": len(first), + "active_parents": len({record.parent_id for record in first}), + "train_states": sum(record.role == "pretraining_train" for record in first), + "development_states": sum( + record.role == "pretraining_development" for record in first + ), + "residues": sum(record.residue_count for record in first), + "atoms": sum(record.atom_count for record in first), + "geometry_pairs": sum(record.geometry_pair_count for record in first), + "glycosidic_torsions": sum(record.torsion_count for record in first), + "components": dict(sorted(component_totals.items())), + "terminal_m_c6m_backbone_instances": terminal_m_c6m_count, + }, + "identity_quarantine": { + "exact_fingerprint_semantics": ( + "exact in the certified stable owner-label domain and invariant " + "to atom order and SE(3); no arbitrary-owner-renaming claim" + ), + "wl8_screen_semantics": ( + "owner-label-free fixed 8-round 1-WL conservative screen over " + "the same chemistry and geometry edge labels; equality is not " + "claimed as exact identity" + ), + "cross_role_exact_fingerprint_count_before": len( + {record.fingerprint for record in first if record.role == "pretraining_train"} + & development_fingerprints + ), + "cross_role_relabel_invariant_wl8_screen_count_before": len( + { + record.relabel_invariant_wl8_screen + for record in first + if record.role == "pretraining_train" + } + & development_wl8_screens + ), + "quarantine_rule": ( + "whole-train-parent removal on union(exact fingerprint match, " + "relabel-invariant WL8 screen match) before vocabulary and " + "normalizer fit" + ), + "direct_both_exact_and_wl8_train_state_count": sum( + quarantine_basis_by_state[record.state_id] + == "both_exact_and_wl8" + for record in direct_train_records + ), + "direct_wl8_only_train_state_count": sum( + quarantine_basis_by_state[record.state_id] == "wl8_only" + for record in direct_train_records + ), + "direct_trigger_train_state_count": len(direct_train_records), + "excluded_total_train_state_count": len(excluded_train_records), + "excluded_whole_parent_sibling_state_count": sum( + quarantine_basis_by_state[record.state_id] + == "whole_parent_sibling" + for record in excluded_train_records + ), + "whole_train_parent_count": len(colliding_train_parents), + "final_train_states": len(final_train), + "final_train_parents": len({record.parent_id for record in final_train}), + "final_development_states": len(final_development), + "final_development_parents": len( + {record.parent_id for record in final_development} + ), + "cross_role_exact_fingerprint_count_after": len( + remaining_exact_crossings + ), + "cross_role_relabel_invariant_wl8_screen_count_after": len( + remaining_wl8_crossings + ), + }, + "feature_vocabulary": { + "fit_scope": "final_pretraining_train_only", + "atom_role_count_including_reserved": len(vocabulary.atom_roles), + "component_name_count_including_reserved": len(vocabulary.component_names), + "development_only_atom_role_count": len(dev_only_atom_roles), + "development_only_component_name_count": len( + dev_only_component_names + ), + "development_only_component_name_examples": dev_only_component_names[:10], + "unseen_policy": "map_to_explicit___UNK___without_schema_expansion", + "identity_sha256": vocabulary.sha256, + }, + "normalizer": { + **normalizer.to_dict(), + "sha256_identity": normalizer.sha256, + }, + "normalizer_contribution_counts": normalizer_counts, + "tokenizer_and_package_status": ( + "separate tokenizer/trainer runtime not bound by this immutable " + "graph authority; not fit or emitted" + ), + "runtime_dependency_boundary": ( + "trainable masking, slot, tokenizer, optimizer, and A000/downstream " + "authorities are intentionally outside this graph-materialization authority" + ), + "claim_boundary": ( + "Generated GLYCAM single conformers with -OH reducing-end termination; " + "partial intra-owner distances, absolute frame-volume magnitude, " + "and one phi-like torsion only. Supplied chirality parity is retained " + "as an input rather than inferred, and this is not experimental structure, " + "an ensemble, dynamics, complete inter-residue 3D, or complete linkage reconstruction." + ), + "geometry_target_scope": GEOMETRY_TARGET_SCOPE, + } + _json(staging / OUTPUT_NAMES["summary"], summary) + shutil.copyfile( + GLYCAM_REGISTRY_PATH, + staging / OUTPUT_NAMES["glycam_template_registry"], + ) + if ( + sha256_file(staging / OUTPUT_NAMES["glycam_template_registry"]) + != GLYCAM_TEMPLATE_REGISTRY_SHA256 + ): + raise RuntimeError("packaged GLYCAM template registry bytes changed") + output_bindings: dict[str, dict[str, object]] = {} + for name in ( + "authority", + "graph_ledger", + "quarantine", + "vocabulary", + "normalizer", + "summary", + "glycam_template_registry", + ): + path = staging / OUTPUT_NAMES[name] + output_bindings[name] = { + "filename": path.name, + "sha256": sha256_file(path), + "size_bytes": path.stat().st_size, + } + final_bound_inputs = _bind_inputs(authority) + if final_bound_inputs != bound_inputs: + raise RuntimeError("static-v2 bound input changed during authority build") + _assert_materializer_source_hash() + MappedSugarTemplateRegistry.from_json_path(GLYCAM_REGISTRY_PATH) + receipt = { + "schema": RECEIPT_SCHEMA, + "inputs": bound_inputs, + "outputs": output_bindings, + "authorization": REVIEW_CLOSED_AUTHORIZATIONS, + } + _json(staging / OUTPUT_NAMES["receipt"], receipt) + os.replace(staging, output) + except BaseException: + # Preserve failed staging for forensic inspection; do not erase data. + print(f"static-v2 failed staging preserved at {staging}", file=sys.stderr) + raise + return summary + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + parser.add_argument("--authority", type=Path, default=DEFAULT_AUTHORITY) + parser.add_argument("--cache", type=Path, default=DEFAULT_CACHE) + parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT) + parser.add_argument("--workers", type=int, default=4) + parser.add_argument("--fixture-state-id", action="append", default=[]) + return parser.parse_args() + + +def main() -> None: + args = parse_args() + summary = build( + authority=args.authority.resolve(), + cache=args.cache.resolve(), + output=args.output.resolve(), + workers=args.workers, + fixture_state_ids=args.fixture_state_id, + ) + print(json.dumps({"status": summary["status"], "output": str(args.output)}, sort_keys=True)) + + +if __name__ == "__main__": + main() diff --git a/releases/2026-10-02/structure_md_processing/source_manifest.json b/releases/2026-10-02/structure_md_processing/source_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..6e71aa4a8a72c4b72e7e42cc0588d308115cbfac --- /dev/null +++ b/releases/2026-10-02/structure_md_processing/source_manifest.json @@ -0,0 +1,490 @@ +{ + "schema": "structure_md_processing_sources_snapshot_v2", + "created_utc": "2026-09-30T03:18:02.878140+00:00", + "status": "SOURCE_SNAPSHOT_AND_FINAL_REDUCER_INPUTS_INTEGRATED_NOT_REPLAY_CERTIFICATION", + "project_root_at_collection": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training", + "source_plan": { + "path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/release_20260928/nova/collection_20260929/structure_md_inventory_plan.json", + "sha256": "d72ace09fb6a94242a1fb09f8511fa67e0051e7b679875b19a4f979f769c2cd2" + }, + "scope": { + "copied_file_count": 32, + "copied_bytes": 1564504, + "payload_layout": "project/ ", + "original_bytes_preserved": true, + "remote_access_performed": false, + "processing_or_training_executed": false, + "canonical_submit_comm_modified": false, + "release_archives_modified": false, + "public_upload_authorized": false, + "new_corrected_md_sources_and_configuration_files": 14, + "copied_final_summary_evidence_files": 1, + "python_source_count": 23, + "shell_source_count": 3, + "original_identified_processing_scripts": 6, + "original_explicit_local_python_companions_including_package_initializer_imports": 8, + "original_static_configuration_or_receipt_jsons": 3 + }, + "files": [ + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/prepare_review_md_charge_corrected_feature_overlay_r1.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/prepare_review_md_charge_corrected_feature_overlay_r1.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/prepare_review_md_charge_corrected_feature_overlay_r1.py", + "bytes": 7950, + "sha256": "47c9d9a448325e59742e30a444b636e888df18cf88f010fdad09e0393f5bf9c9", + "mode_octal": "0o644", + "role": "identified_processing_source", + "reason": "Pinned in structure_md_inventory_plan.json associated_source_scripts." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/review_md_all20_charge_corrected_run_state_r6.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/review_md_all20_charge_corrected_run_state_r6.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/review_md_all20_charge_corrected_run_state_r6.py", + "bytes": 90312, + "sha256": "80c1e2cbf2f2bbf7a19564a7e88d65e2d9dd4a190c33e6b5405dd107d6e553fe", + "mode_octal": "0o644", + "role": "identified_processing_source", + "reason": "Pinned in structure_md_inventory_plan.json associated_source_scripts." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/review_md_wiley_pca_corpus.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/review_md_wiley_pca_corpus.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/review_md_wiley_pca_corpus.py", + "bytes": 34251, + "sha256": "dfc5670ad8a146af48abfb381198bacd017ad7dbac4a081bc204d5dbf61cb1cb", + "mode_octal": "0o644", + "role": "identified_processing_source", + "reason": "Pinned in structure_md_inventory_plan.json associated_source_scripts." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/audit_review_md_charge_corrected_exact_roster_20260802_r1.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/audit_review_md_charge_corrected_exact_roster_20260802_r1.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/audit_review_md_charge_corrected_exact_roster_20260802_r1.py", + "bytes": 8986, + "sha256": "ddabd88756774a9c75ae93709fafb6b7c2d3cdf0c9b7d5b66fd801d8e2388c76", + "mode_octal": "0o644", + "role": "identified_processing_source", + "reason": "Pinned in structure_md_inventory_plan.json associated_source_scripts." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/scripts/build_review_a5_static_graph_v2_20260721_r7.py", + "source_project_relative_path": "writing/review/multimodal/scripts/build_review_a5_static_graph_v2_20260721_r7.py", + "staged_relative_path": "project/writing/review/multimodal/scripts/build_review_a5_static_graph_v2_20260721_r7.py", + "bytes": 55927, + "sha256": "12fd869f52759168e0f3ff3243ac7dcdb36c0b067d83e24931c185c67fc80c26", + "mode_octal": "0o644", + "role": "identified_processing_source", + "reason": "Pinned in structure_md_inventory_plan.json associated_source_scripts." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/runtime/a5_static_v2_20260721_r7/review_a5_static_graph_materializer_r7.py", + "source_project_relative_path": "writing/review/multimodal/runtime/a5_static_v2_20260721_r7/review_a5_static_graph_materializer_r7.py", + "staged_relative_path": "project/writing/review/multimodal/runtime/a5_static_v2_20260721_r7/review_a5_static_graph_materializer_r7.py", + "bytes": 93845, + "sha256": "da8d6dab478ace650fa5af3e99c72dedaf65a6cbc2bf62373fa2082bef748cea", + "mode_octal": "0o444", + "role": "identified_processing_source", + "reason": "Pinned in structure_md_inventory_plan.json associated_source_scripts." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/review_md_wiley_pca_pilot.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/review_md_wiley_pca_pilot.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/review_md_wiley_pca_pilot.py", + "bytes": 66350, + "sha256": "b9f20eef44858866d95338a6f5dedebf253d8e827890d10806ce7d0045b14594", + "mode_octal": "0o644", + "role": "explicit_local_import_companion", + "reason": "review_md_wiley_pca_corpus.py:25 imports review_md_wiley_pca_pilot after inserting its own directory." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/training/a5_static_alignment.py", + "source_project_relative_path": "training/a5_static_alignment.py", + "staged_relative_path": "project/training/a5_static_alignment.py", + "bytes": 26312, + "sha256": "ee6e3d06fce7316b3622f4ad92d900608eb91af09f3872d0200c1b246158605f", + "mode_octal": "0o644", + "role": "explicit_local_import_companion", + "reason": "review_md_wiley_pca_pilot.py:29 imports training.a5_static_alignment." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/training/a5_glycam_chemistry.py", + "source_project_relative_path": "training/a5_glycam_chemistry.py", + "staged_relative_path": "project/training/a5_glycam_chemistry.py", + "bytes": 3690, + "sha256": "daae9ee3f3c286e36c7fd7ede37f889eca2a6f9956755717a5bf714645ffa4bb", + "mode_octal": "0o644", + "role": "explicit_local_import_companion", + "reason": "training/a5_static_alignment.py:14 imports training.a5_glycam_chemistry." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/training/a5_topology.py", + "source_project_relative_path": "training/a5_topology.py", + "staged_relative_path": "project/training/a5_topology.py", + "bytes": 6186, + "sha256": "f48ba266abf30a7a1298dea747676da64d53acef4ef02cba7ac8f16509460fc7", + "mode_octal": "0o644", + "role": "explicit_local_import_companion", + "reason": "training/a5_static_alignment.py:18 imports training.a5_topology." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/training/__init__.py", + "source_project_relative_path": "training/__init__.py", + "staged_relative_path": "project/training/__init__.py", + "bytes": 207, + "sha256": "0d967082a8225a1eab98315c2fe7916eff0e863ec04287a43351b757e08f5070", + "mode_octal": "0o644", + "role": "explicit_local_import_companion", + "reason": "Package initializer executes when training.a5_static_alignment is imported; preserved unchanged." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/training/multimodal_dataset.py", + "source_project_relative_path": "training/multimodal_dataset.py", + "staged_relative_path": "project/training/multimodal_dataset.py", + "bytes": 27321, + "sha256": "ca2be55ece9c15271713f553f619bdd42cf4292c6c9d86e19037db9a73168e28", + "mode_octal": "0o644", + "role": "explicit_local_import_companion", + "reason": "training/__init__.py:2 explicitly imports .multimodal_dataset." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/training/multimodal_masking.py", + "source_project_relative_path": "training/multimodal_masking.py", + "staged_relative_path": "project/training/multimodal_masking.py", + "bytes": 15430, + "sha256": "21ae467f964ea98486ed7efa3f7887194e05c326e4fa92f124e8d5f5570f030c", + "mode_octal": "0o644", + "role": "explicit_local_import_companion", + "reason": "training/__init__.py:3 explicitly imports .multimodal_masking." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/training/masking.py", + "source_project_relative_path": "training/masking.py", + "staged_relative_path": "project/training/masking.py", + "bytes": 18878, + "sha256": "d08683664ffe28661becd6bdfd5b6b8169bd430800c3e844218969548d3498a2", + "mode_octal": "0o644", + "role": "explicit_local_import_companion", + "reason": "training/__init__.py:4 and training/multimodal_masking.py:17 explicitly import .masking." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_r2.json", + "source_project_relative_path": "writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_r2.json", + "staged_relative_path": "project/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_r2.json", + "bytes": 868036, + "sha256": "ffbbe2126eb6131ab8b64ab5809b79b29e5534785cbe6fcfe1bba04b93e06050", + "mode_octal": "0o644", + "role": "explicit_static_runtime_configuration_or_receipt", + "reason": "build_review_a5_static_graph_v2_20260721_r7.py:88-94,214-233,745-747 loads this fixed registry path; payload pin in materializer:56-58." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_receipt_r2.json", + "source_project_relative_path": "writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_receipt_r2.json", + "staged_relative_path": "project/writing/review/multimodal/outputs/review_a5_static_glycam_template_registry_20260721_r2/review_a5_static_glycam_template_registry_receipt_r2.json", + "bytes": 1753, + "sha256": "6bba07e7da9284af46b97f80c25c7e1dc332facf452e0fd2140a975b7c1e496b", + "mode_octal": "0o644", + "role": "explicit_static_runtime_configuration_or_receipt", + "reason": "Builder:99-100,214-233 requires this fixed receipt path and validates its hash." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/multimodal/outputs/p1_a5_static_role_successor_cascade_20260720_r1/review_a5_static_role_successor_cascade_receipt.json", + "source_project_relative_path": "writing/review/multimodal/outputs/p1_a5_static_role_successor_cascade_20260720_r1/review_a5_static_role_successor_cascade_receipt.json", + "staged_relative_path": "project/writing/review/multimodal/outputs/p1_a5_static_role_successor_cascade_20260720_r1/review_a5_static_role_successor_cascade_receipt.json", + "bytes": 1861, + "sha256": "b8e953947b4ac55e1cd9d509c33e1bddf211f046b9124ddc175166a1a763b31a", + "mode_octal": "0o644", + "role": "explicit_static_runtime_configuration_or_receipt", + "reason": "Builder:95-98 requires this bound receipt; pin in materializer:44-46." + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/build_review_md_temporal_20x6_r2.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/build_review_md_temporal_20x6_r2.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/build_review_md_temporal_20x6_r2.py", + "bytes": 21090, + "sha256": "4bad11cfd69c150f2c50b92856a6ab21641772baa2236b45ca505f5637ea5a0b", + "mode_octal": "0o644", + "role": "final_transform_source", + "reason": "Final corrected parent 20x9 to20x6 channel-selection builder; current local source hash, no historical execution-source seal established.", + "hash_identity_basis": "current local source bytes; not an asserted historical execution-source pin" + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/audit_review_md_temporal_20x6_r2.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/audit_review_md_temporal_20x6_r2.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/audit_review_md_temporal_20x6_r2.py", + "bytes": 12371, + "sha256": "dacc54f37dc4c816fdf2fb801b13eb239cf42444883ace1dfed2a92b6fc798da", + "mode_octal": "0o644", + "role": "final_transform_auditor", + "reason": "Independent corrected20x6 audit; opens original absolute overlay summary path.", + "hash_identity_basis": "current local source bytes; not an asserted historical execution-source pin" + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/merge_review_md_charge_corrected_temporal_20x9_r1.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/merge_review_md_charge_corrected_temporal_20x9_r1.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/merge_review_md_charge_corrected_temporal_20x9_r1.py", + "bytes": 9654, + "sha256": "102466ed3bf04ef2cf2ab53b04fdbb9c6e6ea1d16061194f97eed5bedc4e2e2d", + "mode_octal": "0o644", + "role": "corrected_overlay_source", + "reason": "Replaces the9943 affected states and verifies unaffected state values; imports build_review_md_temporal_20x9.", + "hash_identity_basis": "current local source bytes; not an asserted historical execution-source pin" + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/build_review_md_parent_feature_package.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/build_review_md_parent_feature_package.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/build_review_md_parent_feature_package.py", + "bytes": 38195, + "sha256": "2df5009bdcefb49ed7742391d7d6f5f73cf1574fc7d17cd46bd2ad3098331a06", + "mode_octal": "0o644", + "role": "parent_package_source", + "reason": "Groups states by parent and constructs parent-fitted normalization and availability outputs.", + "hash_identity_basis": "current local source bytes; not an asserted historical execution-source pin" + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/build_review_md_temporal_20x9.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/build_review_md_temporal_20x9.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/build_review_md_temporal_20x9.py", + "bytes": 29546, + "sha256": "2743e322eccd5c0217b44e3eb6c4dc242d35db7eacf91f235d23f7a846b70dbb", + "mode_octal": "0o644", + "role": "temporal_extraction_and_import_companion", + "reason": "Temporal extraction/merge, called by stage launcher and imported by corrected-overlay merger.", + "hash_identity_basis": "current local source bytes; not an asserted historical execution-source pin" + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/run_review_md_charge_corrected_feature_stage_20260802_r1.sh", + "source_project_relative_path": "writing/review/glycam_structure/scripts/run_review_md_charge_corrected_feature_stage_20260802_r1.sh", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/run_review_md_charge_corrected_feature_stage_20260802_r1.sh", + "bytes": 3177, + "sha256": "3cb1b2ea38fef04ba9ba2b01ef1944f69a48fb5dcfd4d8011684de9ddaa10ca7", + "mode_octal": "0o755", + "role": "corrected_feature_stage_launcher", + "reason": "Explicit launcher for PCA, torsion, structural and temporal extraction stages; supplied variables and external tools still required.", + "hash_identity_basis": "current local source bytes; not an asserted historical execution-source pin" + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/review_md_wiley_torsion_pca_corpus.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/review_md_wiley_torsion_pca_corpus.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/review_md_wiley_torsion_pca_corpus.py", + "bytes": 31670, + "sha256": "163c93827dc18dd281d8e5a6ceb8b106a02b00e3366442ee09fd0e1b477262e8", + "mode_octal": "0o644", + "role": "launcher_and_import_companion", + "reason": "Called by stage launcher; imports existing PCA corpus/pilot and is imported by structural extension.", + "hash_identity_basis": "current local source bytes; not an asserted historical execution-source pin" + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/review_md_wiley_structural_extension.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/review_md_wiley_structural_extension.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/review_md_wiley_structural_extension.py", + "bytes": 49477, + "sha256": "39f9ddfd0e91c3afc1c3b6085689f8bed7bf585446128be634ab97369a79869b", + "mode_octal": "0o644", + "role": "launcher_companion", + "reason": "Called by stage launcher; imports PCA corpus, pilot and torsion corpus.", + "hash_identity_basis": "current local source bytes; not an asserted historical execution-source pin" + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/freeze_review_md_temporal_feature_layer.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/freeze_review_md_temporal_feature_layer.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/freeze_review_md_temporal_feature_layer.py", + "bytes": 9384, + "sha256": "35108afde036b0f1fbf888014a5afebc45568b45dbdea85a5913c2dba8938127", + "mode_octal": "0o644", + "role": "freeze_producer_source_candidate", + "reason": "Emits the required freeze schema; corrected-run invocation and exact execution-byte linkage await the pinned freeze receipt. Calls sacct and is not an offline replay command.", + "hash_identity_basis": "current local source bytes; not an asserted historical execution-source pin" + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/audit_review_md_parent_feature_package.py", + "source_project_relative_path": "writing/review/glycam_structure/scripts/audit_review_md_parent_feature_package.py", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/audit_review_md_parent_feature_package.py", + "bytes": 13331, + "sha256": "131499356bc91f07ebd1f2f40166c9f756d7e64b49a66ee69d1efa0fcecf9843", + "mode_octal": "0o644", + "role": "parent_package_auditor", + "reason": "Auditor referenced by original freeze launcher; source retained unchanged.", + "hash_identity_basis": "current local source bytes; not an asserted historical execution-source pin" + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/slurm_review_md_parent_feature_package_20260731.sh", + "source_project_relative_path": "writing/review/glycam_structure/scripts/slurm_review_md_parent_feature_package_20260731.sh", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/slurm_review_md_parent_feature_package_20260731.sh", + "bytes": 2057, + "sha256": "bf3ef76494d936044615b59e0941f3b6fb35a935d6743abb5c035995b61a63d5", + "mode_octal": "0o644", + "role": "historical_precorrection_launcher_context", + "reason": "Original parent invocation names partition/config input paths; points to pre-correction outputs, not the corrected historical invocation.", + "hash_identity_basis": "current local source bytes; not an asserted historical execution-source pin" + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/scripts/slurm_freeze_review_md_temporal_feature_layer_20260801.sh", + "source_project_relative_path": "writing/review/glycam_structure/scripts/slurm_freeze_review_md_temporal_feature_layer_20260801.sh", + "staged_relative_path": "project/writing/review/glycam_structure/scripts/slurm_freeze_review_md_temporal_feature_layer_20260801.sh", + "bytes": 2164, + "sha256": "21ffbc09d34291adc6d2a3535ef142014d1d31ea8a28002fee23af29b88f415a", + "mode_octal": "0o644", + "role": "historical_precorrection_launcher_context", + "reason": "Original freeze invocation names audit/config/code sources and scheduler IDs; not the corrected historical invocation.", + "hash_identity_basis": "current local source bytes; not an asserted historical execution-source pin" + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/configs/review_md_temporal_20x6_v1_20260801.yaml", + "source_project_relative_path": "writing/review/glycam_structure/configs/review_md_temporal_20x6_v1_20260801.yaml", + "staged_relative_path": "project/writing/review/glycam_structure/configs/review_md_temporal_20x6_v1_20260801.yaml", + "bytes": 2191, + "sha256": "2e3b0a72767fa5e7ca950ada7923faac63e58db53f6969a030e01938a81254ad", + "mode_octal": "0o644", + "role": "historically_pinned_feature_configuration", + "reason": "Exact SHA in final corrected20x6 summary source_sha256.", + "hash_identity_basis": "Exact historical input pin in final corrected20x6 summary", + "recorded_input_pin": "2e3b0a72767fa5e7ca950ada7923faac63e58db53f6969a030e01938a81254ad", + "recorded_remote_path": "/work/ratul1/supantha/glycan-SD-VS/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/configs/review_md_temporal_20x6_v1_20260801.yaml" + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/glycam_structure/configs/review_md_temporal_20x9_v1_20260731.yaml", + "source_project_relative_path": "writing/review/glycam_structure/configs/review_md_temporal_20x9_v1_20260731.yaml", + "staged_relative_path": "project/writing/review/glycam_structure/configs/review_md_temporal_20x9_v1_20260731.yaml", + "bytes": 3467, + "sha256": "4d668c45f1f17f12b1d4af022d2e1849cec815e24664e8ad9183569fae7f764f", + "mode_octal": "0o644", + "role": "parent_feature_configuration_source", + "reason": "Named by original parent/freeze launchers; current hash only until corrected parent/freeze source pins are retrieved.", + "hash_identity_basis": "current local source bytes; not an asserted historical execution-source pin" + }, + { + "source_absolute_path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/release_20260928/nova/collection_20260929/retrieved/md20x6/review_md_parent_temporal_20x6_v2_summary.json", + "source_project_relative_path": null, + "staged_relative_path": "evidence/review_md_parent_temporal_20x6_v2_summary.json", + "bytes": 9435, + "sha256": "39c6691d762b1ac2d0bed3464b1ed31e4fbe72b18e218ba4a553f3f94702a9e2", + "mode_octal": "0o600", + "role": "collected_corrected_output_source_binding_evidence", + "reason": "Existing verified final summary supplies exact ten transformation input pins; it does not pin the execution scripts." + } + ], + "unresolved_or_unstaged_dependencies": [ + { + "dependency": "Python and Python packages", + "status": "version_and_environment_lock_not_verified", + "details": "Source imports require numpy, torch, pandas, networkx, parmed; pilot summary/plot branches also import sklearn and matplotlib. Standard-library imports are not separately packaged. No processing code was imported or executed. The newly included20x6 reducer additionally imports PyYAML. No environment was installed or runtime imports executed." + }, + { + "dependency": "MD executables and force-field resources", + "status": "remote_runtime_unresolved_not_staged", + "details": "Runner resolves tleap, acpype and gmx; runner lines 759-760 and 773-774 source leaprc.GLYCAM_06j-1 and leaprc.water.tip3p. Their actual remote binaries, force-field files, versions and hashes were not collected here. Embedded .mdp and tleap input generators remain unchanged in the runner." + }, + { + "dependency": "Historical launcher and exact runtime environment", + "status": "not_established_by_this_source_snapshot", + "details": "Exact Slurm launchers, commands, module/Conda environment, worker counts and source-to-completed-output execution linkage are not certified by these local copies. The corrected feature-stage launcher and original pre-correction parent/freeze launchers are now copied as source context; the exact corrected parent/freeze invocation is still not established." + }, + { + "dependency": "Static child authority and PDB cache", + "status": "data_inputs_not_copied_into_processing_sources", + "details": "Builder defaults to writing/review/multimodal/outputs/p1_a5_static_role_successor_cascade_20260720_r1/review_a5_static_role_successor_child_authority.tsv.gz (expected sha256 efa36988f4420ad36787cdf729e51973a3ba279f8495d293454239c8387937cd). PDB cache default is writing/review/multimodal/inputs/review_a5_static_v2_pdb_cache_20260720_r1; exact member is cache/resolved_remote_pdb_path.lstrip(\"/\"). This staging makes no new whole-cache presence claim." + }, + { + "dependency": "MD manifests and per-state retained inputs", + "status": "referenced_by_inventory_plan_not_copied_here", + "details": "Manifest arguments, input.pdb, corrected/base state directories, trajectories, topology and per-state audit records remain data dependencies. Exact roster roots and final-versus-historical classification are in the linked inventory plan; any remote presence is determined by the separate compute inventory, not this staging." + }, + { + "dependency": "Complete corrected parent20x6 descriptor aggregation and replay chain", + "status": "final_reducer_input_identity_closed_upstream_replay_and_execution_linkage_open", + "details": "The named temporal extraction, corrected merge, parent package/auditor, freeze helper and final20x6 reducer/auditor are present. All ten final-reducer input pins are now verified and integrated in data/md/replay_inputs/replay_manifest.json: eight recovered files and two local reuses. Upstream simulation/extraction/partition dependencies, historical environment and execution-byte linkage remain separate. Current script hashes are not historical execution-byte seals." + }, + { + "dependency": "Static registry upstream generation and coordinate generation", + "status": "upstream_provenance_recorded_not_staged", + "details": "Materializer records https://github.com/GLYCAM-Web/gmml2 commit af5958391ea75b2cbc2b7ba21a814d6110fc7147, dat/parameters/GLYCAM_06k.lib, git blob a0ef3ad5c637a25129817d914710be2e07307e58, sha256 b12926723233cdad357480e2ef5b6e481c25c0a27d472406e297722d823610bc. It consumes the staged derived JSON registry; original .lib, registry-generation script and coordinate-generation launcher are not part of this bounded copy." + }, + { + "dependency": "Absolute path binding in unchanged final audit", + "status": "portable_relocation_mapping_not_implemented", + "details": "audit_review_md_temporal_20x6_r2.py lines116-125 opens corrected_overlay.summary_path and verifies its resolved absolute key in source_sha256. Simply changing CLI directories does not relocate this historical input." + } + ], + "validation": { + "all_six_plan_source_pins_match": true, + "all_three_static_config_receipt_pins_match": true, + "source_and_destination_bytes_equal_for_all_files": true, + "source_bytes_rechecked_after_copy": true, + "runtime_import_or_execution_test": "NOT_RUN", + "all_original_17_payload_pins_preserved": true, + "all_python_files_ast_parse": 23, + "all_shell_files_bash_n": 3, + "corrected_summary_pins_are_inputs_not_script_execution_seals": true, + "all_32_source_payload_pins_preserved_at_input_closure": true + }, + "updated_utc": "2026-09-30T21:57:20.899161+00:00", + "prior_snapshot": { + "path": "prior_snapshot_20260929.json", + "sha256": "0f43a293b4b5edaa76da4c4073a7a221582b064c41375a7de982b09dbfe05642", + "original_payload_files": 17, + "all_original_payload_pins_preserved": true + }, + "source_chain": [ + { + "stage": "PCA/torsion/structural extraction", + "entrypoints": [ + "run_review_md_charge_corrected_feature_stage_20260802_r1.sh", + "review_md_wiley_pca_corpus.py", + "review_md_wiley_torsion_pca_corpus.py", + "review_md_wiley_structural_extension.py" + ], + "input_boundary": "State manifest and retained per-state coordinates, topology, trajectories and audits; GROMACS external." + }, + { + "stage": "20x9 temporal extraction and merge", + "entrypoints": [ + "build_review_md_temporal_20x9.py" + ], + "input_boundary": "PCA/torsion/structural per-state JSON and NPZ pairs plus exact state manifest." + }, + { + "stage": "Corrected overlay", + "entrypoints": [ + "merge_review_md_charge_corrected_temporal_20x9_r1.py" + ], + "input_boundary": "Base and affected package/index/summary triples; expected47063 base and9943 affected states." + }, + { + "stage": "Parent aggregation, audit and freeze", + "entrypoints": [ + "build_review_md_parent_feature_package.py", + "audit_review_md_parent_feature_package.py", + "freeze_review_md_temporal_feature_layer.py" + ], + "input_boundary": "State package/index/summary, MD and partition manifests, review index, feature config; freeze requires historical job IDs and sacct access." + }, + { + "stage": "Corrected20x6 reduction and audit", + "entrypoints": [ + "build_review_md_temporal_20x6_r2.py", + "audit_review_md_temporal_20x6_r2.py" + ], + "input_boundary": "All ten historically pinned final-reducer inputs are verified and integrated in data/md/replay_inputs: eight remote recoveries and two local reuses. Numerical replay and absolute embedded-path adaptation remain unperformed." + } + ], + "exact_input_retrieval_plan": { + "path": "/Users/supantha/Documents/esm-g/plan/bert_training_v3/v3.1_cluster_training/writing/review/release_20260928/assembly_20260930/processing_exact_retrieval_plan.json", + "sha256": "8352ee0a9ce493a33ce1b7fb58f48a2d020562161ae86b6b81e804ff05bd422f", + "local_reuse": 2, + "status": "HISTORICAL_PLAN_FINAL_REDUCER_INPUTS_NOW_FULFILLED", + "original_remote_candidates": 8, + "recovered_remote_inputs": 8, + "remaining_final_reducer_inputs": 0 + }, + "current_final_reducer_input_closure": { + "receipt": "input_closure_20260930.json", + "sha256": "1e15e8a160c1af8e31c490fde35e9177fce583d98157751a852846d1390cb43a", + "replay_manifest_path": "../../data/md/replay_inputs/replay_manifest.json", + "replay_manifest_sha256": "1ba19dbf997008cb510cd20dbdfafbdda88eefeef8ef86014160e71578ecc536", + "historical_input_count": 10, + "recovered_remote_count": 8, + "local_reuse_count": 2, + "remaining_input_identity_count": 0, + "scientific_replay_performed": false + } +} diff --git a/releases/2026-10-02/test_bertose_workbench.py b/releases/2026-10-02/test_bertose_workbench.py new file mode 100644 index 0000000000000000000000000000000000000000..c0647fbc3648e787f571e31df9eb49d1f8221b37 --- /dev/null +++ b/releases/2026-10-02/test_bertose_workbench.py @@ -0,0 +1,301 @@ +"""Small offline tests for the workbench; no real models or downloads are used.""" + +import importlib.util +from pathlib import Path +import sys +import types +import unittest +from unittest.mock import Mock, patch + +import numpy as np + + +MODULE_PATH = Path(__file__).with_name("bertose_workbench.py") +VALIDATION_ERRORS = (ValueError, TypeError) +ALPHA = "WURCS=2.0/1,1,0/[a2122h-1a_1-5]/1/" +BETA = "WURCS=2.0/1,1,0/[a2122h-1b_1-5]/1/" +GAMMA = "WURCS=2.0/1,1,0/[a2112h-1a_1-5]/1/" +DELTA = "WURCS=2.0/1,1,0/[a2112h-1b_1-5]/1/" +EPSILON = "WURCS=2.0/1,1,0/[a1122h-1a_1-5]/1/" + + +def load_workbench(): + name = "_bertose_workbench_under_test" + spec = importlib.util.spec_from_file_location(name, MODULE_PATH) + module = importlib.util.module_from_spec(spec) + with patch.dict(sys.modules, {name: module}): + spec.loader.exec_module(module) + return module + + +class FakeBertose: + def __init__(self): + self.encoder = object() + self.tokenizer = object() + self.metadata = {"test_only": True} + self.calls = [] + self.values = {ALPHA: 1.0, BETA: 2.0, GAMMA: 3.0, + DELTA: 4.0, EPSILON: 5.0} + self.module = types.ModuleType("bertose") + self.module.load_encoder = Mock(return_value=(self.encoder, self.metadata)) + self.module.load_tokenizer = Mock(return_value=self.tokenizer) + self.module.embed = Mock(side_effect=self.embed) + + def embed(self, batch, encoder, tokenizer, pooling="first"): + if encoder is not self.encoder or tokenizer is not self.tokenizer: + raise AssertionError("The wrapper did not reuse the loaded encoder/tokenizer") + if isinstance(batch, str): + raise AssertionError("The low-level embed API must receive a batch") + batch = list(batch) + self.calls.append((batch, pooling)) + vectors = np.asarray([np.full(768, self.values[text], dtype=np.float32) + for text in batch], dtype=np.float32) + diagnostics = [{"text": text, "batch_position": index} + for index, text in enumerate(batch)] + return vectors, diagnostics + + +class LazyDependencyTests(unittest.TestCase): + def test_import_does_not_require_encoder_or_huggingface(self): + with patch.dict(sys.modules, {"bertose": None, "huggingface_hub": None}): + module = load_workbench() + actual = module.cosine_similarity([1.0, 0.0], [1.0, 0.0]) + np.testing.assert_allclose(actual, [[1.0]]) + + +class EncoderTests(unittest.TestCase): + def setUp(self): + self.fake = FakeBertose() + self.modules = patch.dict(sys.modules, {"bertose": self.fake.module, + "huggingface_hub": None}) + self.modules.start() + self.addCleanup(self.modules.stop) + self.workbench = load_workbench() + + def make_encoder(self): + return self.workbench.Encoder("local-test-checkpoint.pt", variant="3", device="cpu") + + def test_constructor_reuses_existing_loaders_without_embedding(self): + self.fake.module.load_encoder.assert_not_called() + self.fake.module.load_tokenizer.assert_not_called() + self.make_encoder() + self.fake.module.load_encoder.assert_called_once() + call = self.fake.module.load_encoder.call_args + self.assertIn("local-test-checkpoint.pt", [str(value) for value in (*call.args, *call.kwargs.values())]) + self.fake.module.load_tokenizer.assert_called_once() + self.fake.module.embed.assert_not_called() + + def test_single_string_is_one_glycan_not_characters(self): + encoder = self.make_encoder() + vectors = encoder.encode(ALPHA) + self.assertEqual(vectors.shape, (1, 768)) + self.assertEqual(vectors.dtype, np.dtype(np.float32)) + np.testing.assert_array_equal(vectors, np.ones((1, 768), dtype=np.float32)) + self.assertEqual(self.fake.calls, [([ALPHA], "first")]) + + def test_generator_batches_preserve_order_and_reuse_model(self): + encoder = self.make_encoder() + texts = [ALPHA, BETA, GAMMA, DELTA, EPSILON] + vectors = encoder.encode((text for text in texts), batch_size=2, pooling="mean") + self.assertEqual(vectors.shape, (5, 768)) + self.assertEqual(vectors.dtype, np.dtype(np.float32)) + np.testing.assert_array_equal(vectors[:, 0], np.arange(1, 6, dtype=np.float32)) + self.assertEqual(self.fake.calls, [([ALPHA, BETA], "mean"), + ([GAMMA, DELTA], "mean"), + ([EPSILON], "mean")]) + self.fake.module.load_encoder.assert_called_once() + self.fake.module.load_tokenizer.assert_called_once() + + def test_diagnostics_are_preserved_across_batches(self): + encoder = self.make_encoder() + vectors, diagnostics = encoder.encode_with_diagnostics( + [ALPHA, BETA, GAMMA, DELTA, EPSILON], batch_size=2, pooling="first") + np.testing.assert_array_equal(vectors[:, 0], np.arange(1, 6, dtype=np.float32)) + self.assertEqual(diagnostics, [ + {"text": ALPHA, "batch_position": 0}, + {"text": BETA, "batch_position": 1}, + {"text": GAMMA, "batch_position": 0}, + {"text": DELTA, "batch_position": 1}, + {"text": EPSILON, "batch_position": 0}, + ]) + + def test_single_string_with_diagnostics(self): + vectors, diagnostics = self.make_encoder().encode_with_diagnostics(BETA, pooling="mean") + self.assertEqual(vectors.shape, (1, 768)) + self.assertEqual(diagnostics, [{"text": BETA, "batch_position": 0}]) + self.assertEqual(self.fake.calls, [([BETA], "mean")]) + + def test_rejects_empty_or_nonstring_inputs(self): + encoder = self.make_encoder() + for method in (encoder.encode, encoder.encode_with_diagnostics): + for value in ("", [], (), None, 7, [ALPHA, ""], [ALPHA, None], [ALPHA, 7]): + with self.subTest(method=method.__name__, value=repr(value)): + with self.assertRaises(VALIDATION_ERRORS): + method(value) + with self.subTest(method=method.__name__, value="empty generator"): + with self.assertRaises(VALIDATION_ERRORS): + method(iter(())) + + def test_rejects_invalid_batch_size(self): + encoder = self.make_encoder() + for value in (0, -1, 1.5, True, False, "2", None): + with self.subTest(batch_size=value): + with self.assertRaises(VALIDATION_ERRORS): + encoder.encode([ALPHA], batch_size=value) + + def test_rejects_unsupported_pooling(self): + encoder = self.make_encoder() + for value in ("unsupported", "", None, 1): + with self.subTest(pooling=value): + with self.assertRaises(VALIDATION_ERRORS): + encoder.encode([ALPHA], pooling=value) + + +class PretrainedTests(unittest.TestCase): + def setUp(self): + self.fake = FakeBertose() + self.hub = types.ModuleType("huggingface_hub") + self.hub.hf_hub_download = Mock(return_value="download-cache/sequence_encoder.pt") + self.modules = patch.dict(sys.modules, {"bertose": self.fake.module, + "huggingface_hub": self.hub}) + self.modules.start() + self.addCleanup(self.modules.stop) + self.workbench = load_workbench() + + def test_download_uses_exact_repository_revision_and_variant_path(self): + encoder = self.workbench.Encoder.from_pretrained(variant="2", revision="test-revision", device="cpu") + self.hub.hf_hub_download.assert_called_once_with( + repo_id="supanthadey1/bertose-glycan-encoder", + filename="releases/2026-09-28/variants/variant-2/sequence_encoder.pt", + revision="test-revision") + np.testing.assert_array_equal(encoder.encode(ALPHA)[:, 0], [1.0]) + self.fake.module.load_encoder.assert_called_once() + call = self.fake.module.load_encoder.call_args + self.assertIn("download-cache/sequence_encoder.pt", + [str(value) for value in (*call.args, *call.kwargs.values())]) + + def test_default_variant_and_revision(self): + self.workbench.Encoder.from_pretrained() + self.hub.hf_hub_download.assert_called_once_with( + repo_id="supanthadey1/bertose-glycan-encoder", + filename="releases/2026-09-28/variants/variant-3/sequence_encoder.pt", + revision="main") + + def test_local_checkpoint_does_not_import_or_call_hub(self): + with patch.dict(sys.modules, {"huggingface_hub": None}): + encoder = self.workbench.Encoder.from_pretrained( + variant="3", revision="unused-revision", device="cpu", + local_checkpoint="offline/sequence_encoder.pt") + self.assertEqual(encoder.encode(BETA).shape, (1, 768)) + self.hub.hf_hub_download.assert_not_called() + self.fake.module.load_encoder.assert_called_once() + call = self.fake.module.load_encoder.call_args + self.assertIn("offline/sequence_encoder.pt", [str(value) for value in (*call.args, *call.kwargs.values())]) + + +class ArrayUtilityTests(unittest.TestCase): + def setUp(self): + with patch.dict(sys.modules, {"bertose": None, "huggingface_hub": None}): + self.workbench = load_workbench() + + def test_cosine_one_dimensional_inputs_are_single_rows(self): + result = self.workbench.cosine_similarity([1.0, 0.0], [0.0, 1.0]) + self.assertEqual(result.shape, (1, 1)) + np.testing.assert_allclose(result, [[0.0]]) + + def test_cosine_expected_values_and_zero_vector_policy(self): + query = np.array([[1.0, 0.0], [0.0, 0.0], [0.0, 2.0]]) + reference = np.array([[2.0, 0.0], [0.0, 3.0], [-1.0, 0.0], [0.0, 0.0]]) + expected = np.array([[1.0, 0.0, -1.0, 0.0], + [0.0, 0.0, 0.0, 0.0], + [0.0, 1.0, 0.0, 0.0]]) + result = self.workbench.cosine_similarity(query, reference) + self.assertEqual(result.shape, (3, 4)) + self.assertTrue(np.isfinite(result).all()) + np.testing.assert_allclose(result, expected, atol=1e-12) + + def test_nearest_neighbors_expected_indices_and_scores(self): + indices, scores = self.workbench.nearest_neighbors( + [[1.0, 0.0], [0.0, 1.0]], [[1.0, 0.0], [0.0, 1.0], [-1.0, 0.0]], k=2) + self.assertEqual(indices.shape, (2, 2)) + self.assertEqual(scores.shape, (2, 2)) + self.assertTrue(np.issubdtype(indices.dtype, np.integer)) + np.testing.assert_array_equal(indices, [[0, 1], [1, 0]]) + np.testing.assert_allclose(scores, [[1.0, 0.0], [1.0, 0.0]]) + + def test_neighbor_ties_keep_original_reference_order(self): + reference = [[1.0, 0.0], [2.0, 0.0], [0.0, 1.0], [1.0, 0.0]] + indices, scores = self.workbench.nearest_neighbors([1.0, 0.0], reference, k=3) + np.testing.assert_array_equal(indices, [[0, 1, 3]]) + np.testing.assert_allclose(scores, [[1.0, 1.0, 1.0]]) + zero_indices, zero_scores = self.workbench.nearest_neighbors([0.0, 0.0], reference, k=4) + np.testing.assert_array_equal(zero_indices, [[0, 1, 2, 3]]) + np.testing.assert_array_equal(zero_scores, np.zeros((1, 4))) + + def test_neighbor_count_bounds_and_type(self): + for value in (0, -1, 3, 1.5, True, False, "1", None): + with self.subTest(k=value): + with self.assertRaises(VALIDATION_ERRORS): + self.workbench.nearest_neighbors([1.0, 0.0], [[1.0, 0.0], [0.0, 1.0]], k=value) + + def test_cosine_and_neighbors_reject_invalid_vectors(self): + invalid = [[], np.empty((0, 2)), np.empty((2, 0)), np.zeros((1, 2, 2)), + [[np.nan, 0.0]], [[np.inf, 0.0]], [[-np.inf, 0.0]], [[1.0 + 1.0j, 0.0]]] + good = [[1.0, 0.0]] + for bad in invalid: + for query, reference in ((bad, good), (good, bad)): + with self.subTest(shape=np.asarray(bad).shape, bad=repr(bad)): + with self.assertRaises(VALIDATION_ERRORS): + self.workbench.cosine_similarity(query, reference) + with self.assertRaises(VALIDATION_ERRORS): + self.workbench.nearest_neighbors(query, reference, k=1) + with self.assertRaises(VALIDATION_ERRORS): + self.workbench.cosine_similarity([1.0, 0.0], [[1.0, 0.0, 0.0]]) + with self.assertRaises(VALIDATION_ERRORS): + self.workbench.nearest_neighbors([1.0, 0.0], [[1.0, 0.0, 0.0]], k=1) + + def test_pca_centering_sign_convention_and_translation_invariance(self): + centered = np.array([[-2.0, -1.0], [-2.0, 1.0], [2.0, -1.0], [2.0, 1.0]]) + vectors = centered + [10.0, -5.0] + projected = self.workbench.pca(vectors, n_components=2) + self.assertEqual(projected.shape, (4, 2)) + np.testing.assert_allclose(projected.mean(axis=0), [0.0, 0.0], atol=1e-12) + # Unequal principal variances make the expected axis order unambiguous. + np.testing.assert_allclose(projected, centered, atol=1e-12) + loadings = np.linalg.lstsq(centered, projected, rcond=None)[0] + for column in loadings.T: + self.assertGreater(column[np.argmax(np.abs(column))], 0.0) + shifted = self.workbench.pca(vectors + [100.0, 20.0], n_components=2) + np.testing.assert_allclose(shifted, projected, atol=1e-12) + one_component = self.workbench.pca(vectors, n_components=1) + np.testing.assert_allclose(one_component, centered[:, :1], atol=1e-12) + + def test_full_rank_pca_preserves_distances_and_reconstructs_centered_data(self): + vectors = np.array([[1.0, 2.0, 4.0], [3.0, 2.0, 3.0], + [5.0, -1.0, 0.0], [-2.0, 4.0, 8.0], [0.0, -2.0, 3.0]]) + projected = self.workbench.pca(vectors, n_components=3) + original_distances = np.sum((vectors[:, None, :] - vectors[None, :, :]) ** 2, axis=2) + projected_distances = np.sum((projected[:, None, :] - projected[None, :, :]) ** 2, axis=2) + np.testing.assert_allclose(projected_distances, original_distances, atol=1e-10) + centered = vectors - vectors.mean(axis=0) + inverse = np.linalg.lstsq(projected, centered, rcond=None)[0] + np.testing.assert_allclose(projected @ inverse + vectors.mean(axis=0), vectors, atol=1e-10) + + def test_pca_component_bounds_and_type(self): + for value in (0, -1, 3, 1.5, True, False, "1", None): + with self.subTest(n_components=value): + with self.assertRaises(VALIDATION_ERRORS): + self.workbench.pca([[1.0, 0.0, 2.0], [0.0, 1.0, 4.0]], n_components=value) + + def test_pca_requires_finite_real_nonempty_two_dimensional_input(self): + invalid = [[], [1.0, 2.0], np.empty((0, 2)), np.empty((2, 0)), + np.zeros((1, 2, 2)), [[np.nan, 0.0]], [[np.inf, 0.0]], + [[-np.inf, 0.0]], [[1.0 + 1.0j, 0.0]]] + for vectors in invalid: + with self.subTest(vectors=repr(vectors)): + with self.assertRaises(VALIDATION_ERRORS): + self.workbench.pca(vectors, n_components=1) + + +if __name__ == "__main__": + unittest.main()