
<!DOCTYPE article
  PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD with MathML3 v1.4 20241031//EN" "JATS-archivearticle1-4-mathml3.dtd">
<article xml:lang="en" article-type="research-article" dtd-version="1.4"><?da-xref-anchor-style superscripted?><processing-meta base-tagset="archiving" mathml-version="3.0" table-model="xhtml" tagset-family="jats"><restricted-by>pmc</restricted-by></processing-meta><front><journal-meta><journal-id journal-id-type="nlm-ta">bioRxiv</journal-id><journal-id journal-id-type="pmc-domain-id">3848</journal-id><journal-id journal-id-type="pmc-domain">biorxiv</journal-id><journal-id journal-id-type="nlm-id">101680187</journal-id><journal-id journal-id-type="publisher-id">BIORXIV</journal-id><journal-title-group><journal-title>bioRxiv</journal-title></journal-title-group><issn pub-type="epub">2692-8205</issn><?publisher_abbrev cshlpreprints?><publisher><publisher-name>Cold Spring Harbor Laboratory Preprints</publisher-name></publisher></journal-meta><article-meta><article-id pub-id-type="pmcid">PMC11601547</article-id><article-id pub-id-type="pmcid-ver">PMC11601547.4</article-id><article-id pub-id-type="pmcaid">11601547</article-id><article-id pub-id-type="pmcaiid">12233685</article-id><article-id pub-id-type="pmid">39605745</article-id><article-id pub-id-type="doi">10.1101/2024.11.19.624167</article-id><article-version-alternatives><article-version article-version-type="pmc-version">4</article-version><article-version article-version-type="status">preprint</article-version><article-version article-version-type="number">4</article-version></article-version-alternatives><article-categories><subj-group subj-group-type="heading"><subject>Article</subject></subj-group></article-categories><title-group><article-title>B<sc>oltz</sc>-1 Democratizing Biomolecular Interaction Modeling</article-title></title-group><contrib-group><contrib contrib-type="author"><contrib-id contrib-id-type="orcid" authenticated="false">http://orcid.org/0000-0002-1993-2380</contrib-id><name name-style="western"><surname>Wohlwend</surname><given-names initials="J">Jeremy</given-names></name><xref rid="FN1" ref-type="author-notes">*</xref><xref rid="A1" ref-type="aff">1</xref><xref rid="A2" ref-type="aff">2</xref></contrib><contrib contrib-type="author"><contrib-id contrib-id-type="orcid" authenticated="false">http://orcid.org/0000-0002-1963-8755</contrib-id><name name-style="western"><surname>Corso</surname><given-names initials="G">Gabriele</given-names></name><xref rid="FN1" ref-type="author-notes">*</xref><xref rid="A1" ref-type="aff">1</xref><xref rid="A2" ref-type="aff">2</xref></contrib><contrib contrib-type="author"><name name-style="western"><surname>Passaro</surname><given-names initials="S">Saro</given-names></name><xref rid="FN1" ref-type="author-notes">*</xref><xref rid="A1" ref-type="aff">1</xref><xref rid="A2" ref-type="aff">2</xref></contrib><contrib contrib-type="author"><name name-style="western"><surname>Getz</surname><given-names initials="N">Noah</given-names></name><xref rid="FN1" ref-type="author-notes">*</xref><xref rid="A1" ref-type="aff">1</xref><xref rid="A2" ref-type="aff">2</xref></contrib><contrib contrib-type="author"><contrib-id contrib-id-type="orcid" authenticated="false">http://orcid.org/0000-0002-5680-4150</contrib-id><name name-style="western"><surname>Reveiz</surname><given-names initials="M">Mateo</given-names></name><xref rid="A1" ref-type="aff">1</xref><xref rid="A2" ref-type="aff">2</xref></contrib><contrib contrib-type="author"><name name-style="western"><surname>Leidal</surname><given-names initials="K">Ken</given-names></name><xref rid="A3" ref-type="aff">3</xref></contrib><contrib contrib-type="author"><name name-style="western"><surname>Swiderski</surname><given-names initials="W">Wojtek</given-names></name><xref rid="A3" ref-type="aff">3</xref></contrib><contrib contrib-type="author"><name name-style="western"><surname>Atkinson</surname><given-names initials="L">Liam</given-names></name><xref rid="A4" ref-type="aff">4</xref></contrib><contrib contrib-type="author"><contrib-id contrib-id-type="orcid" authenticated="false">http://orcid.org/0000-0002-8543-7855</contrib-id><name name-style="western"><surname>Portnoi</surname><given-names initials="T">Tally</given-names></name><xref rid="A1" ref-type="aff">1</xref><xref rid="A2" ref-type="aff">2</xref></contrib><contrib contrib-type="author"><contrib-id contrib-id-type="orcid" authenticated="false">http://orcid.org/0000-0001-5449-8818</contrib-id><name name-style="western"><surname>Chinn</surname><given-names initials="I">Itamar</given-names></name><xref rid="A1" ref-type="aff">1</xref><xref rid="A2" ref-type="aff">2</xref></contrib><contrib contrib-type="author"><contrib-id contrib-id-type="orcid" authenticated="false">http://orcid.org/0000-0001-9159-5836</contrib-id><name name-style="western"><surname>Silterra</surname><given-names initials="J">Jacob</given-names></name><xref rid="A1" ref-type="aff">1</xref><xref rid="A2" ref-type="aff">2</xref></contrib><contrib contrib-type="author"><contrib-id contrib-id-type="orcid" authenticated="false">http://orcid.org/0000-0002-2199-0379</contrib-id><name name-style="western"><surname>Jaakkola</surname><given-names initials="T">Tommi</given-names></name><xref rid="A1" ref-type="aff">1</xref><xref rid="A2" ref-type="aff">2</xref></contrib><contrib contrib-type="author"><name name-style="western"><surname>Barzilay</surname><given-names initials="R">Regina</given-names></name><xref rid="A1" ref-type="aff">1</xref><xref rid="A2" ref-type="aff">2</xref></contrib></contrib-group><aff id="A1"><label>1</label>MIT CSAIL</aff><aff id="A2"><label>2</label>MIT Jameel Clinic</aff><aff id="A3"><label>3</label>Genesis Research, a part of Genesis Therapeutics</aff><aff id="A4"><label>4</label>CHARM Therapeutics</aff><author-notes><corresp id="CR1">Correspondence to <email>jwohlwend@csail.mit.edu</email>,<email>gcorso@csail.mit.edu</email>,<email>saro00@csail.mit.edu</email></corresp><fn fn-type="equal" id="FN1"><label>*</label><p id="P1">Equal contribution</p></fn></author-notes><pub-date pub-type="epub"><day>06</day><month>5</month><year>2025</year></pub-date><issue-id pub-id-type="pmc-issue-id">475922</issue-id><elocation-id>2024.11.19.624167</elocation-id><pub-history><event event-type="pmc-release"><date><day>07</day><month>07</month><year>2025</year></date></event><event event-type="pmc-live"><date><day>28</day><month>11</month><year>2024</year></date></event><event event-type="pmc-last-change"><date iso-8601-date="2025-12-02 00:25:12.950"><day>02</day><month>12</month><year>2025</year></date></event><event event-type="original-publication" specific-use="live"><article-id pub-id-type="pmcaiid">11601547</article-id><article-version>1</article-version><pub-date><day>20</day><month>11</month><year>2024</year></pub-date></event><event event-type="pmc-published-version" specific-use="live"><article-id pub-id-type="pmcaiid">11601547</article-id><article-version>1</article-version><pub-date><day>20</day><month>11</month><year>2024</year></pub-date></event><event event-type="pmc-published-version" specific-use="live"><article-id pub-id-type="pmcaiid">11684373</article-id><article-version>2</article-version><pub-date><day>27</day><month>12</month><year>2024</year></pub-date></event><event event-type="pmc-published-version" specific-use="live"><article-id pub-id-type="pmcaiid">12233685</article-id><article-version>4</article-version><pub-date><day>06</day><month>05</month><year>2025</year></pub-date></event></pub-history><permissions><license><ali:license_ref xmlns:ali="http://www.niso.org/schemas/ali/1.0/" specific-use="textmining" content-type="ccbylicense">https://creativecommons.org/licenses/by/4.0/</ali:license_ref><license-p>This work is licensed under a <ext-link xmlns:xlink="http://www.w3.org/1999/xlink" ext-link-type="uri" xlink:href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</ext-link>, which allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.</license-p></license></permissions><self-uri xmlns:xlink="http://www.w3.org/1999/xlink" content-type="pmc-pdf" xlink:href="nihpp-2024.11.19.624167v4.pdf"><?pdf-name nihpp-2024.11.19.624167v4.pdf?><?pdf-size 1734633?><?pdf-md5 88b36cf00de035afe6de55801c6950c7?><?pdf-image-server-status NEVER_LOAD?><?pdf-cloudpmc-urn urn:app:8131/12233685/88b36cf00de0/nihpp-2024.11.19.624167v4.pdf?></self-uri><self-uri content-type="pdf">nihpp-2024.11.19.624167.pdf</self-uri><abstract id="ABS1"><p id="P2">Understanding biomolecular interactions is fundamental to advancing fields like drug discovery and protein design. In this paper, we introduce B<sc>oltz</sc>-1, an open-source deep learning model incorporating innovations in model architecture, speed optimization, and data processing achieving A<sc>lpha</sc>f<sc>old</sc>3-level accuracy in predicting the 3D structures of biomolecular complexes. B<sc>oltz</sc>-1 demonstrates a performance on-par with state-of-the-art commercial models on a range of diverse benchmarks, setting a new benchmark for commercially accessible tools in structural biology. Further, we push the boundary of capabilities of these models with B<sc>oltz-steering</sc>, a new inference time steering technique that is able to fix hallucinations and non-physical predictions from the models. By releasing the training and inference code, model weights, datasets, and benchmarks under the MIT open license, we aim to foster global collaboration, accelerate discoveries, and provide a robust platform for advancing biomolecular modeling.</p></abstract><custom-meta-group><custom-meta><meta-name>pmc-status-qastatus</meta-name><meta-value>0</meta-value></custom-meta><custom-meta><meta-name>pmc-status-live</meta-name><meta-value>yes</meta-value></custom-meta><custom-meta><meta-name>pmc-status-embargo</meta-name><meta-value>no</meta-value></custom-meta><custom-meta><meta-name>pmc-status-released</meta-name><meta-value>yes</meta-value></custom-meta><custom-meta><meta-name>pmc-prop-open-access</meta-name><meta-value>yes</meta-value></custom-meta><custom-meta><meta-name>pmc-prop-olf</meta-name><meta-value>no</meta-value></custom-meta><custom-meta><meta-name>pmc-prop-manuscript</meta-name><meta-value>no</meta-value></custom-meta><custom-meta><meta-name>pmc-prop-legally-suppressed</meta-name><meta-value>no</meta-value></custom-meta><custom-meta><meta-name>pmc-prop-has-pdf</meta-name><meta-value>yes</meta-value></custom-meta><custom-meta><meta-name>pmc-prop-has-supplement</meta-name><meta-value>no</meta-value></custom-meta><custom-meta><meta-name>pmc-prop-pdf-only</meta-name><meta-value>no</meta-value></custom-meta><custom-meta><meta-name>pmc-prop-suppress-copyright</meta-name><meta-value>no</meta-value></custom-meta><custom-meta><meta-name>pmc-prop-is-real-version</meta-name><meta-value>yes</meta-value></custom-meta><custom-meta><meta-name>pmc-prop-is-scanned-article</meta-name><meta-value>no</meta-value></custom-meta><custom-meta><meta-name>pmc-prop-preprint</meta-name><meta-value>yes</meta-value></custom-meta><custom-meta><meta-name>pmc-prop-in-epmc</meta-name><meta-value>yes</meta-value></custom-meta><custom-meta><meta-name>pmc-license-ref</meta-name><meta-value>CC BY</meta-value></custom-meta></custom-meta-group></article-meta></front><body><sec id="S1"><label>1</label><title>Overview</title><p id="P3">Biomolecular interactions drive almost all biological mechanisms, and our ability to understand these interactions guides the development of new therapeutics and the discovery of disease drivers. In 2020, A<sc>lpha</sc>F<sc>old</sc>2 [<xref rid="R15" ref-type="bibr">Jumper et al., 2021</xref>] demonstrated that deep learning models can reach experimental accuracy for single-chain protein structure prediction on a large class of protein sequences. However, a critical question about modeling biomolecular complexes in 3D space remained open.</p><p id="P4">In the past few years, the research community has made significant progress toward solving this pivotal problem. In particular, the use of deep generative models has proven to be effective in modeling the interaction between different biomolecules with D<sc>iff</sc>D<sc>ock</sc> [<xref rid="R9" ref-type="bibr">Corso et al., 2022</xref>] showing significant improvements over traditional molecular docking approaches and, most recently, A<sc>lpha</sc>F<sc>old</sc>3 [<xref rid="R1" ref-type="bibr">Abramson et al., 2024</xref>] reaching unprecedented accuracy in the prediction of arbitrary biomolecular complexes.</p><p id="P5">In this manuscript, we present B<sc>oltz</sc>-1, the first fully commercially accessible open-source model reaching A<sc>lpha</sc>F<sc>old</sc>3 reported levels of accuracy. By making the training and inference code, model weights, datasets, and benchmarks freely available under the MIT license, we aim to empower researchers, developers, and organizations around the world to experiment, validate, and innovate with B<sc>oltz</sc>-1. At a high level, B<sc>oltz</sc>-1 follows the general framework and architecture presented by <xref rid="R1" ref-type="bibr">Abramson et al. [2024]</xref>, but it also presents several innovations which include:</p><list list-type="order" id="L2"><list-item><p id="P6">New algorithms to more efficiently and robustly pair MSAs, crop structure at training time, and condition predictions on user-defined binding pockets;</p></list-item><list-item><p id="P7">Changes to the flow of the representations in the architecture and the diffusion training and inference procedures;</p></list-item><list-item><p id="P8">Revision of the confidence model both in terms of architectural components as well as the framing of the task as a fine-tuning of the model’s trunk layers.</p></list-item></list><p id="P9">In the following sections, we detail these changes as well as benchmark the performance of B<sc>oltz</sc>-1 with other publicly available models. Our experimental results show that B<sc>oltz</sc>-1 delivers performance on par with the state-of-the-art commercial models on a wide range of structures and metrics.</p><p id="P10">Further, we tackle one of the biggest outstanding challenges with machine learning based structure prediction methods, their frequent lack of respect for physical laws observed, for example, in mistakes in properties like internal geometries, chirality, and steric clashes as well as hallucinations like overlapping chains. We propose a new inference time technique, B<sc>oltz-steering</sc>, which is able to solve almost all these physical issues while maintaining the model accuracy. We refer to the B<sc>oltz</sc>-1 model with the steering as B<sc>oltz</sc>-1x.</p><p id="P11">Given the dynamic nature of this open-source project, this manuscript and its linked GitHub repository<sup><xref rid="FN2" ref-type="fn">1</xref></sup> will be regularly updated with improvements from our core team and the community. We aspire for this project and its associated codebase to serve as a catalyst for advancing our understanding of biomolecular interactions and a driver for the design of novel biomolecules.</p></sec><sec id="S2"><label>2</label><title>Data pipeline</title><p id="P12">B<sc>oltz</sc>-1 operates on proteins represented by their amino acid sequence, ligands represented by their smiles strings (and covalent bonds), and nucleic acids represented by their genomic sequence. This input is then augmented by adding multiple sequence alignment (MSA) and predicted molecular conformations. Unlike A<sc>lpha</sc>F<sc>old</sc>3, we do not include input templates, due to their limited impact on the performance of large models.</p><p id="P13">In this section, we first outline how the structural training data, as well as the MSA and conformer, were obtained and describe the curation of our validation and test sets. Then, we describe three important algorithmic developments applied to data curation and augmentation that we find to be critical:</p><list list-type="order" id="L4"><list-item><p id="P14">A new algorithm to pair MSAs for multimeric protein complexes from taxonomy information (<xref rid="S8" ref-type="sec">2.3</xref>).</p></list-item><list-item><p id="P15">A unified cropping algorithm that combines the spatial and contiguous cropping strategies used in previous work (<xref rid="S9" ref-type="sec">2.4</xref>).</p></list-item><list-item><p id="P16">A robust pocket-conditioning algorithm tailored to common use cases (<xref rid="S10" ref-type="sec">2.5</xref>).</p></list-item></list><sec id="S3"><label>2.1</label><title>Data source and processing</title><sec id="S4"><title>PDB structural data</title><p id="P17">For training we use all PDB structures [<xref rid="R4" ref-type="bibr">Berman et al., 2000</xref>] released before 2021-09-30 (same training cut-off date as A<sc>lpha</sc>F<sc>old</sc>3) and with a resolution of at least 9Å. We parse the Biological Assembly 1 from these structures from their mmCIF file. For each polymer chain, we use the reference sequence and align it to the residues available in the structure. For ligands, we use the CCD dictionary to create the conformers and to match atoms from the structure. We remove leaving atoms when (1) the ligand is covalently bound and (2) that atom does not appear in the PDB structure. Finally, we follow the same process as A<sc>lpha</sc>F<sc>old</sc>3 for data cleaning, which includes the ligand exclusion list, the minimum number of resolved residues, and the removal of clashing chains.</p></sec><sec id="S5"><title>MSA and molecular conformers</title><p id="P18">We construct MSAs for the full PDB data using the <monospace>colabfold_search</monospace> tool [<xref rid="R17" ref-type="bibr">Mirdita et al., 2022</xref>] (which leverages MMseqs2 [<xref rid="R21" ref-type="bibr">Steinegger and Söding, 2017</xref>]), using default parameters (versions: <monospace>uniref30_2302, colabfold_envdb_202108</monospace>). We then assign taxonomy labels to all UniRef sequences using the taxonomy annotation provided by UniProt [<xref rid="R8" ref-type="bibr">Consortium, 2015</xref>]. For the initial molecular conformers that are provided to the model, we pre-compute a single conformer for all CCD codes using the RDKit’s ETKDGv3 [<xref rid="R23" ref-type="bibr">Wang et al., 2022</xref>].</p></sec><sec id="S6"><title>Structure prediction training pipeline</title><p id="P19">We train the structure prediction model (see <xref rid="S15" ref-type="sec">Section 3.2</xref> for details of the confidence model training) for a total of 68k steps with a batch size of 128. During the first 53k iterations, we use a crop size of 384 tokens and 3456 atoms and draw structures equally from the PDB dataset and the OpenFold distillation dataset (approximately 270K structures, using the MSAs they provided) [<xref rid="R2" ref-type="bibr">Ahdritz et al., 2024</xref>]. For the last 15k iterations, we only sampled from the PDB structures and had a crop size of 512 tokens and 4608 atoms. As a comparison A<sc>lpha</sc>F<sc>ol</sc>3 trained a similar architecture for nearly 150k steps with a batch size of 256, which required approximately four times the computing time. We attribute some of this drastic reduction to the various innovations we detail in the remainder of this section and the next.</p></sec></sec><sec id="S7"><label>2.2</label><title>Validation and test sets curation</title><p id="P20">To address the absence of a standardized benchmark for all-atom structures, we are releasing a new PDB split designed to help the community converge on reliable and consistent benchmarks for all-atom structure prediction tasks.</p><p id="P21">Our training, validation and test splitting strategy largely follows <xref rid="R1" ref-type="bibr">Abramson et al. [2024]</xref>. We first cluster the protein sequences in PDB by sequence identity with the command <monospace>mmseqs easy-cluster</monospace> … <monospace>--min-seq-id</monospace> 0.4 [<xref rid="R13" ref-type="bibr">Hauser et al., 2016</xref>]. Then, we select all structures in PDB satisfying the following filters:</p><list list-type="order" id="L6"><list-item><p id="P22">Initial release date is before 2021-09-30 (exclusive) and 2023-01-13 (inclusive).</p></list-item><list-item><p id="P23">Resolution is below 4.5Å.</p></list-item><list-item><p id="P24">All the protein sequences of the chains are not present in any training set clusters (i.e. before 2021-09-30).</p></list-item><list-item><p id="P25">Either no small-molecule is present, or at least one of the small-molecules exhibits a Tanimoto similarity of 0.8 or less to any small-molecule in the training set. Here, a small-molecule is defined as any non-polymer entity containing more than one heavy atom and not included in the ligand exclusion list.</p></list-item></list><p id="P26">This yields 1728 structures, which we further refine through the following steps:</p><list list-type="order" id="L8"><list-item><p id="P27">Retaining all the structures containing RNA or DNA entities. (126 structures)</p></list-item><list-item><p id="P28">Iteratively adding structures containing small-molecules or ions under the condition that all their protein chains belong to new unseen clusters (330 additional structures)</p></list-item><list-item><p id="P29">Iteratively adding multimeric structures under the condition that all the protein chains belong to new unseen clusters. These are further filtered by randomly keeping only 50% of the passing structures. (231 additional structures)</p></list-item><list-item><p id="P30">Iteratively adding monomers under the condition that their chain belongs to a new unseen cluster. These are further randomly filtered out by keeping only 30% of the passing structures. (57 additional structures)</p></list-item></list><p id="P31">This results in a total of 744 structures. Finally, we retain the structures with at most 1024 residues in the valid protein/RNA/DNA chains, finishing with a total of 553 validation set structures.</p><p id="P32">The test set is created using the same procedure described above with the following differences: for protein and ligand similarity exclusion we consider all structures released before 2023-01-13 (which include all training and validation sets), we filter to structures released after 2023-01-13 and the final size filter to structures between 100 and 2000 total residues. The resulting final test set size is 593.</p></sec><sec id="S8"><label>2.3</label><title>Dense MSA pairing algorithm</title><p id="P33">Multiple sequence alignments uncover amino acids that co-evolved throughout evolution, and therefore are likely close to each other in physical space. However, extracting such signals for protein-protein interactions poses a greater challenge, as most proteins are sequenced or reported individually. To approximate these pairings, researchers have leveraged the taxonomy information frequently associated with sequences. In <xref rid="T3" ref-type="table">Algorithm 3</xref>, we present a method for pairing MSAs using taxonomy in a manner that preserves MSA density (a critical factor, as model complexity scales linearly with the number of MSA rows) while balancing the trade-off between the signal derived from paired sequences and the sequence redundancy within each chain.</p></sec><sec id="S9"><label>2.4</label><title>Unified cropping algorithm</title><p id="P34">In order to efficiently train on complexes with variable size, methods like A<sc>lpha</sc>F<sc>old</sc>2 and A<sc>lpha</sc>F<sc>old</sc>3 crop the structures during training to a fixed maximum number of atoms, residues, or tokens. The most common techniques to perform such crops are (1) contiguous, where tokens are chosen to be consecutive residues in a biomolecular sequence (or entire molecules), and (2) spatial crops, where tokens are chosen purely depending on their distance from a center token. Each of these two has its advantages and provides different training signals to the models, therefore they are often used in combination as done, for example, by <xref rid="R1" ref-type="bibr">Abramson et al. [2024]</xref>.</p><p id="P35">We argue, however, that these are two extremes and it is useful to train the model on a more diverse range of cropping strategies. To this end, we define a new cropping algorithm which directly interpolates between spatial and contiguous strategies. The algorithm, formalized in <xref rid="T5" ref-type="table">Algorithm 4</xref>, revolves around the definition of neighborhoods, that characterize contiguous portions of sequences of a particular length (or entire non-polymer entities) around a specific token. Neighborhoods are incrementally added to the crop depending on the distance of their central token from the chosen center of the crop. If the size of the neighborhoods is chosen to be zero, this strategy translates into spatial cropping, whereas if the size is half of the maximum token budget, this strategy translates into continuous cropping. In our experiments, we find it beneficial to randomly sample the neighborhood size uniformly between zero and 40 tokens for every training sample.</p></sec><sec id="S10"><label>2.5</label><title>Robust pocket-conditioning</title><p id="P36">In many real-world scenarios, researchers have prior knowledge of the protein’s binding pocket. Therefore, it is valuable to enable the model to condition on the pocket information. A<sc>lpha</sc>F<sc>old</sc>3 explored pocket-conditioned generation by fine-tuning the model to include an additional token feature for all the pocket-ligand pairs, where the pocket is defined as any residue with heavy atoms within 6Å of the ligand. While effective, this design has some limitations. It requires maintaining two models, one with and one without pocket conditioning, and it assumes the specification of all residues within 6Å. This assumption may not align with realistic scenarios, where users might only know key residues, and the full set of interacting residues is highly dependent on the ligand pose, which is often unknown.</p><p id="P37">To address these challenges, we implement a different strategy for pocket conditioning, designed to (1) retain a single unified model, (2) ensure robustness to a partial specification of interacting residues, and (3) enable interaction site specification for polymer binders such as proteins or nucleic acids. During training, we incorporate pocket information for a randomly selected binder in 30% of iterations. For these cases, we draw the (maximum) number of pocket residues to reveal from a geometric distribution and randomly select residues from those with at least one heavy atom within 6Å of the binder. This information is then encoded as an additional one-hot token feature provided to the model. The training process for this pocket-conditioning approach is described in detail in <xref rid="T6" ref-type="table">Algorithm 5</xref>.</p></sec></sec><sec id="S11"><label>3</label><title>Modeling</title><p id="P38">For the model architecture and training, we started by reproducing A<sc>lpha</sc>F<sc>old</sc>3 as described in the supplementary material of <xref rid="R1" ref-type="bibr">Abramson et al. [2024]</xref>. A<sc>lpha</sc>F<sc>old</sc>3 is a diffusion model that uses a multi-resolution transformer-based model for the denoising of atom coordinates. The model operates at two levels of resolution: heavy atoms and tokens. Tokens are defined as amino acids for protein chains, nucleic acid bases for RNA and DNA, and individual heavy atoms for other molecules and modified residues or bases.</p><p id="P39">On top of the denoising transformer, critically, A<sc>lpha</sc>F<sc>old</sc>3 also employs a central trunk architecture that is used to initialize tokens’ representations and determine the denoising transformer’s attention pair bias. This trunk is computationally expensive due to its use of token pairs as fundamental “computational token” and its axial attention operations on these pair representations which results in a complexity that scales cubically with the number of input tokens. To make such encoding computationally tractable, the trunk is set to be independent of the specific diffusion time or input structure such that it can be run only once per complex.</p><p id="P40">Starting from this architecture, we designed and tested a number of potential alternative approaches. In the following sections, we describe the ones that yielded improvements and were therefore adopted into B<sc>oltz</sc>-1.<sup><xref rid="FN3" ref-type="fn">2</xref></sup> Because of the significant computational budget required to train a full-sized model, we tested these changes on a smaller-sized architecture at different points of our development process. We expect our observations to hold for the final full-size model, but cannot present direct ablation studies.</p><sec id="S12"><label>3.1</label><title>Architectural modifications</title><sec id="S13"><title>MSA module</title><p id="P41">We find it beneficial to reorder the operations performed in the <monospace>MSAModule</monospace> (A<sc>lpha</sc>F<sc>old</sc>3 Algorithm 8) to better allow the updates on the single and pair representations to feed to one another. In particular, we change the order<sup><xref rid="FN4" ref-type="fn">3</xref></sup> of its operations from:</p><p id="P42"><monospace>OuterProductMean, PairWeightedAveraging, MSATransition, TriangleUpdates, PairTransition</monospace> to:</p><p id="P43"><monospace>PairWeightedAveraging, MSATransition, OuterProductMean, TriangleUpdates, PairTransition.</monospace> Note that <monospace>OuterProductMean</monospace> propagates information from the single to the pair representation, so we now allow the single representations learned in the <monospace>MSATransition</monospace> to directly propagate to the pair representation.</p></sec><sec id="S14"><title>Transformer layer</title><p id="P45"><xref rid="R1" ref-type="bibr">Abramson et al. [2024]</xref> presents an unusual order of operations in their <monospace>DiffusionTransformer</monospace> layers where hidden representations are updated as (A<sc>lpha</sc>F<sc>old</sc>3 Algorithm 23):</p><list list-type="simple" id="L10"><list-item><p id="P46">a ← AttentionPairBias(a) + ConditionedTransitionBlock(a).</p></list-item></list><p id="P47">This has two issues (1) it lacks residual connections that may make backpropagation more complex and (2) it does not allow for the transformation learned in the <monospace>AttentionPairBias</monospace> to be fed in the <monospace>ConditionedTransitionBlock</monospace> at the same block. We found it to be beneficial to apply the following transformation order:</p><list list-type="simple" id="L12"><list-item><p id="P48">a ← a + AttentionPairBias(a)</p></list-item><list-item><p id="P49">a ← a + ConditionedTransitionBlock(a).</p></list-item></list></sec></sec><sec id="S15"><label>3.2</label><title>Training and inference procedures</title><sec id="S16"><title>Kabsch diffusion interpolation</title><p id="P50">A key change between A<sc>lpha</sc>F<sc>old</sc>2 and A<sc>lpha</sc>F<sc>old</sc>3 was the non-equivariance of the denoising model of A<sc>lpha</sc>F<sc>old</sc>3 (compared to the equivariant IPA-based structure module of A<sc>lpha</sc>F<sc>old</sc>2) to rotations and translations. To encourage the robustness of the denoising model to such transformations their input is randomly translated and rotated before the denoising at training and inference times. To further reduce the variance of the denoising loss with respect to these variations, <xref rid="R1" ref-type="bibr">Abramson et al. [2024]</xref> use a rigid alignment between the predicted denoising coordinates and the true coordinates before computing the MSE loss.</p><p id="P51">However, we argue that on its own this procedure is theoretically problematic. One can define simple functions that would achieve zero rigid aligned MSE loss during training, but completely fail to sample realistic poses at inference time. For example, consider a model trying to fit a given structure with coordinates <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M23" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula>. Let’s assume that for any noised structure within some reasonable noising perturbation (e.g. <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M24" display="inline"><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>Δ</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mn>10</mml:mn><mml:msub><mml:mi>σ</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>), the model always predicts <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M25" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula>:
<disp-formula id="FD1">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M1" display="block"><mml:mrow><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi>x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi><mml:mtext>denoised</mml:mtext></mml:msubsup></mml:mrow><mml:mo>=</mml:mo><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi>x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi><mml:mtext>noisy</mml:mtext></mml:msubsup></mml:mrow><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo>∗</mml:mo><mml:msup><mml:mi>R</mml:mi><mml:mi mathvariant="sans-serif">T</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:mi>T</mml:mi><mml:mo>+</mml:mo><mml:msub><mml:mi>ϵ</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mo stretchy="true">{</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mi>x</mml:mi></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mtext>if</mml:mtext><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">‖</mml:mo><mml:msub><mml:mi>ϵ</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mo stretchy="false">‖</mml:mo><mml:mo>&lt;</mml:mo><mml:mn>10</mml:mn><mml:mspace width="thinmathspace"/><mml:msub><mml:mi>σ</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mn>0</mml:mn></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mtext>otherwise</mml:mtext><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">}</mml:mo></mml:mphantom></mml:mrow></mml:math>
</disp-formula>
where <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M26" display="inline"><mml:mi>R</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M27" display="inline"><mml:mi>T</mml:mi></mml:math></inline-formula> are respectively a random rotation matrix and a random translation vector, <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M28" display="inline"><mml:mrow><mml:msub><mml:mi>ϵ</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M29" display="inline"><mml:mrow><mml:msub><mml:mi>σ</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> represent respectively the random noise and noise standard deviation for some diffusion time <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M30" display="inline"><mml:mi>t</mml:mi></mml:math></inline-formula>. This model will have a loss approaching zero during training (one will never sample something beyond 10 standard deviations, and one could make this <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M31" display="inline"><mml:mstyle mathvariant="normal"><mml:mi>Δ</mml:mi></mml:mstyle></mml:math></inline-formula> arbitrarily large). However, when used at inference time, this model will consistently go out of distribution (and therefore predict a zero vector). This is because at low noise levels the interpolation between the current randomly rotated <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M32" display="inline"><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi>x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi><mml:mtext>noisy</mml:mtext></mml:msubsup></mml:mrow></mml:math></inline-formula> and the predicted <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M33" display="inline"><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi>x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi><mml:mtext>denoised</mml:mtext></mml:msubsup></mml:mrow></mml:math></inline-formula> may lead to a pose <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M34" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mrow><mml:mi>t</mml:mi><mml:mo>−</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>Δ</mml:mi></mml:mstyle><mml:mi>t</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> that is very far from <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M35" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> and will fall beyond the <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M36" display="inline"><mml:mrow><mml:mn>10</mml:mn><mml:msub><mml:mi>σ</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> mark. <xref rid="F2" ref-type="fig">Figure 2</xref> shows a graphical representation of this issue.</p><p id="P52">We overcome this issue by adding a rigid alignment with Kabsch algorithm after every step during the inference procedure before <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M37" display="inline"><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi>x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi><mml:mtext>noisy</mml:mtext></mml:msubsup></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M38" display="inline"><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi>x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi><mml:mtext>denoised</mml:mtext></mml:msubsup></mml:mrow></mml:math></inline-formula> are interpolated (see <xref rid="F2" ref-type="fig">Figure 2</xref> for a visual explanation). Informally, our diffusion interpolation operates on the minimal projection between noisy and denoised structures, guaranteeing, under the assumption of a Dirac distribution, that the interpolated structure is more similar to the denoised sample than the noisy structure. Empirically, we note that this change to the reverse diffusion has a bigger effect when training models on subsets of the full data where the model is more likely to overfit, on the other hand, the final B<sc>oltz</sc>-1 seems to largely denoising close to the projection making the Kapsch alignment not critical.</p></sec><sec id="S17"><title>Diffusion loss weighting</title><p id="P53">For the weighting of the diffusion loss we use <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M39" display="inline"><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:msup><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mn>2</mml:mn></mml:msup><mml:mo>+</mml:mo><mml:mrow><mml:msubsup><mml:mi>σ</mml:mi><mml:mtext>data</mml:mtext><mml:mn>2</mml:mn></mml:msubsup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mrow><mml:mo stretchy="false">∕</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mo>×</mml:mo><mml:msub><mml:mi>σ</mml:mi><mml:mtext>data</mml:mtext></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mrow></mml:mrow></mml:math></inline-formula> in line with the EDM framework [<xref rid="R16" ref-type="bibr">Karras et al., 2022</xref>], rather than <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M40" display="inline"><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:msup><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mn>2</mml:mn></mml:msup><mml:mo>+</mml:mo><mml:mrow><mml:msubsup><mml:mi>σ</mml:mi><mml:mtext>data</mml:mtext><mml:mn>2</mml:mn></mml:msubsup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mrow><mml:mo stretchy="false">∕</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mover accent="true"><mml:mi>t</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mo>×</mml:mo><mml:msub><mml:mi>σ</mml:mi><mml:mtext>data</mml:mtext></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mrow></mml:mrow></mml:math></inline-formula> (A<sc>lpha</sc>F<sc>old</sc>3 Section 3.7.1 Eq. 6).</p></sec></sec><sec id="S18"><label>3.3</label><title>Confidence model</title><p id="P54">A<sc>lpha</sc>F<sc>old</sc>3 trains the confidence model alongside the trunk and denoising models while, however, cutting all the gradients going from the confidence task to the rest of the model. Instead, training structure prediction and confidence models separately allowed us to disentangle experiments on each component and make several important improvements to the confidence prediction task.</p><p id="P55">In A<sc>lpha</sc>F<sc>old</sc>3 the architecture of the confidence model is composed of four PairFormer layers that take as input the final single and pair token representations from the model trunk as well as an encoding of the token pairwise distances predicted by the reverse diffusion. These four layers are followed by linear projections trained to predict whether each atom is resolved in the crystal structure, per-atom LDDT and per-token pair PAE and PDE.</p><sec id="S19"><title>Trunk architecture and initialization</title><p id="P56">We noticed that, at a high level, the input-output composition of the confidence model is similar to that of the trunk. The trunk also takes as input its own final representations (through recycling) and outputs expressive representations used by the denoising model. Therefore, inspired by the way that researchers in the large language model community have been training reward models by fine-tuning the “trunk” of their pretrained generative models [<xref rid="R22" ref-type="bibr">Touvron et al., 2023</xref>], we define the architecture of our confidence model to contain all the components of the trunk and initialize its representation to the trained trunk weights. Hence, our confidence model presents an <monospace>AtomAttentionEncoder</monospace>, an <monospace>MSAModule</monospace>, and a <monospace>PairFormerModule</monospace> with 48 layers. In addition, we still integrate the predicted conformation as an encoding of the pairwise token distance matrix and decode the confidence with linear layers on the final PairFormer representation.</p></sec><sec id="S20"><title>Diffusion model features</title><p id="P57">We feed to the confidence model not only the representations coming from the trunk but also a learned aggregation of the final token representation at each reverse diffusion step. These representations are aggregated through the reverse diffusion trajectory with a time-conditioned recurrent block and then fed concatenated to the trunk token-level features at the start of the confidence model. We further modify the way that token-level features are fed to the pairwise representations adding an element-wise multiplication of linearly transformed token-level features.</p></sec><sec id="S21"><title>Overall procedure and training</title><p id="P58">We detail our new full inference procedure in <xref rid="T1" ref-type="table">Algorithm 1</xref> and provide a schematic representation in <xref rid="F3" ref-type="fig">Figure 3</xref>. To train the confidence model we initialize all the components borrowed by the trunk to the final trunk weights (from the exponentially moving average) and initialize the weights of all the other components of the network randomly but with zeroed final layers not to perturb initial rich representation from the pretrained weights.</p><table-wrap position="anchor" id="T1" orientation="portrait"><table frame="hsides" rules="groups"><colgroup span="1"><col align="left" valign="middle" span="1"/></colgroup><thead><tr><th align="left" valign="top" rowspan="1" colspan="1">Algorithm 1: Confidence model</th></tr></thead><tbody><tr><td align="left" valign="top" rowspan="1" colspan="1"><disp-formula id="FD18">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M18" display="block"><mml:mtable><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="bold"><mml:mi>Input</mml:mi><mml:mo>:</mml:mo></mml:mstyle><mml:mtext>diffusion module activations and timesteps</mml:mtext><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">A</mml:mi><mml:mspace width="thinmathspace"/><mml:mo>=</mml:mo><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">[</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="sans-serif">a</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:msub><mml:mi mathvariant="sans-serif">t</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi>…</mml:mi><mml:mspace width="thickmathspace"/><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="sans-serif">a</mml:mi><mml:mi>N</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:msub><mml:mi mathvariant="sans-serif">t</mml:mi><mml:mi>N</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="3.75em"/><mml:mtext>where</mml:mtext><mml:mspace width="thickmathspace"/><mml:mi>N</mml:mi><mml:mspace width="thickmathspace"/><mml:mtext>is the number of sampling steps</mml:mtext></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="bold"><mml:mi>Input</mml:mi><mml:mo>:</mml:mo></mml:mstyle><mml:mtext>distogram of the predicted token coordinates</mml:mtext><mml:mspace width="thinmathspace"/><mml:msub><mml:mi mathvariant="sans-serif">D</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="bold"><mml:mi>Input</mml:mi><mml:mo>:</mml:mo></mml:mstyle><mml:mtext>trunk features</mml:mtext><mml:mspace width="thickmathspace"/><mml:mi mathvariant="monospace">s</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="monospace">trunk</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace"/><mml:mi mathvariant="monospace">z</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="monospace">trunk</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="bold"><mml:mi>Input</mml:mi><mml:mo>:</mml:mo></mml:mstyle><mml:mtext>input features</mml:mtext><mml:mspace width="thickmathspace"/><mml:mi mathvariant="monospace">feats</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∕</mml:mo><mml:mo stretchy="false">∕</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">Process</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">diffusion</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">model</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">activations</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">acc</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">diffusion</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">for</mml:mi><mml:mspace width="thickmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">a</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">t</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mspace width="thinmathspace"/><mml:mtext>in</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">A</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">do</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mi mathvariant="sans-serif">t</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">emb</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">FourierEmbedding</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mstyle scriptlevel="1"><mml:mfrac><mml:mn>1</mml:mn><mml:mn>4</mml:mn></mml:mfrac></mml:mstyle><mml:mi>log</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi mathvariant="sans-serif">t</mml:mi><mml:mrow><mml:mo stretchy="false">∕</mml:mo><mml:msub><mml:mi>σ</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>a</mml:mi><mml:mi>t</mml:mi><mml:mi>a</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mi mathvariant="sans-serif">t</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">emb</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">LayerNorm</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">t</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">emb</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mi mathvariant="sans-serif">a</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">LayerNorm</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">a</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mi mathvariant="sans-serif">acc</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">diffusion</mml:mi><mml:mo>+</mml:mo><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">ConditionedTransitionBlock</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">a</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">cat</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">acc</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">diffusion</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">t</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">emb</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∕</mml:mo><mml:mo stretchy="false">∕</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">Initialize</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">single</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">and</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">pair</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">representation</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">inputs</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">InputFeatureEmbedder</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">feats</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">LinearNoBias</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">inputs</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mspace width="thinmathspace"/><mml:mrow><mml:mo>+</mml:mo><mml:mo>=</mml:mo></mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">LinearNoBias</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">LayerNorm</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">trunk</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mspace width="thinmathspace"/><mml:mrow><mml:mo>+</mml:mo><mml:mo>=</mml:mo></mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">LinearNoBias</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">LayerNorm</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">acc</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">diffusion</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">z</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">LinearNoBias</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">inputs</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mo>:</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mo>:</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">None</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="sans-serif">LinearNoBias</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">inputs</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mo>:</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">None</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mo>:</mml:mo><mml:mo stretchy="false">]</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">z</mml:mi><mml:mspace width="thinmathspace"/><mml:mrow><mml:mo>+</mml:mo><mml:mo>=</mml:mo></mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">RelativePositionEncoding</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">feats</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">z</mml:mi><mml:mspace width="thinmathspace"/><mml:mrow><mml:mo>+</mml:mo><mml:mo>=</mml:mo></mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">LinearNoBias</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">feats</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mi mathvariant="sans-serif">token</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">bonds</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">z</mml:mi><mml:mspace width="thinmathspace"/><mml:mrow><mml:mo>+</mml:mo><mml:mo>=</mml:mo></mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">LinearNoBias</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">z</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">trunk</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">z</mml:mi><mml:mspace width="thinmathspace"/><mml:mrow><mml:mo>+</mml:mo><mml:mo>=</mml:mo></mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">LinearNoBias</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">LinearNoBias</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">inputs</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mo>:</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mo>:</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">None</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mspace width="thinmathspace"/><mml:mo>∗</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">LinearNoBias</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">inputs</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mo>:</mml:mo><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mi mathvariant="sans-serif">None</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mo>:</mml:mo><mml:mo stretchy="false">]</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">z</mml:mi><mml:mspace width="thinmathspace"/><mml:mrow><mml:mo>+</mml:mo><mml:mo>=</mml:mo></mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">LinearNoBias</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">one</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">hot</mml:mi><mml:mspace width="thinmathspace"/><mml:msub><mml:mi mathvariant="sans-serif">D</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∕</mml:mo><mml:mo stretchy="false">∕</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">Update</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">single</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">and</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">pair</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">representation</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">z</mml:mi><mml:mspace width="thinmathspace"/><mml:mrow><mml:mo>+</mml:mo><mml:mo>=</mml:mo></mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">MSAModule</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">z</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">inputs</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">feats</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">z</mml:mi><mml:mspace width="thinmathspace"/><mml:mrow><mml:mo>+</mml:mo><mml:mo>=</mml:mo></mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">PirFormerModule</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">z</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">z</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">LayerNorm</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">LayerNorm</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">z</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∕</mml:mo><mml:mo stretchy="false">∕</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">Predict</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">confidence</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">metrics</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">plddt</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">SoftMax</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">LayerNoBias</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">pde</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">SoftMax</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">LayerNoBias</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">z</mml:mi><mml:mo>+</mml:mo><mml:msup><mml:mi mathvariant="sans-serif">z</mml:mi><mml:mi mathvariant="sans-serif">T</mml:mi></mml:msup><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">resolved</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">SoftMax</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">LayerNoBias</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">s</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">pae</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">SoftMax</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">LayerNoBias</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">z</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="bold"><mml:mi>Output</mml:mi><mml:mo>:</mml:mo></mml:mstyle><mml:mi mathvariant="sans-serif">plddt</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">pde</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">resolved</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">pae</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math>
</disp-formula>
</td></tr></tbody></table></table-wrap></sec></sec><sec id="S22"><label>3.4</label><title>Optimizations</title><p id="P59">Below we summarize some computational techniques we use to speed up and/or reduce the memory consumption of the model. For details on the implementation of each of these, please refer to our code repository.</p><sec id="S23"><title>Sequence-local atom representation</title><p id="P60">The <monospace>AtomAttentionEncoder</monospace> and <monospace>AtomAttentionDecoder</monospace> include a pair-biased transformer on the representations of every atom. In particular, the attention of these transformers is sequence-local: blocks of 32 atoms only attend to the 128 atoms that are closest to them in sequence space. We developed a GPU-efficient implementation of the sequence-local attention precomputing a mapping (performed in blocks of 16 tokens) to the key and query sequence embeddings for each 32 key tokens block. The attention is then performed in parallel in each 32x128 block achieving a block sparse attention with dense matrices.</p></sec><sec id="S24"><title>Attention bias sharing and caching</title><p id="P61">At a high level the denoising model must be run repeatedly for every diffusion timestep for every separate sample we take, while the trunk can be run once and its representation fed to all those denoising model passes.</p><p id="P62">The most expensive components of the denoising model are represented by the computation of the attention pair bias for the token and atom transformers. However, by examining their computational graph, we find that these elements do not depend either on the particular input structure given to the denoising model or the diffusion timestep. In particular, these elements are: the attention bias of all the transformer layers in the <monospace>AtomAttentionEncoder, AtomAttentionDecoder</monospace>, and <monospace>DiffusionTransformer</monospace>, and the intermediate single and pairwise atom representations of the <monospace>AtomAttentionEncoder</monospace>. Therefore, we can also run these components once and share them across all the samples and the entirety of the reverse diffusion trajectory, significantly reducing the computational cost of the reverse diffusion at the cost of storing these representations and biases in memory.</p></sec><sec id="S25"><title>Greedy symmetry correction</title><p id="P63">During validation and confidence model training, the optimal alignment between the ground truth and predicted structure must be determined, accounting for permutations in the order of identical chains or symmetric atoms within those chains. Because the number of possible perturbations grows exponentially with the size of the complex, considering all of them is computationally unfeasible.</p><p id="P64">We devise the following procedure to perform an approximate, yet effective, atom matching. This operates in a hierarchical way searching (1) the optimal assignment of chains, and, then, (2) assuming chain assignment, to select atom perturbations greedily for every ligand or residue. For the first, for each symmetric chain, we compute the resulting global LDDT without changing any inner atom assignment. For the second step, iteratively for every ligand, amino acid, or nucleotide basis (one at a time), we find the perturbation of that ligand the most improves the global LDDT and greedily apply it.</p><p id="P65">Note that because the LDDT between pairs of elements that were not affected by the perturbation does not change, one can implement the test in the last step very efficiently only looking at the specific rows and columns of the distance matrix that change. In practice, we limit the number of perturbations of the chain assignment we consider to 100 and the perturbations of the atoms of each ligand to 1000.</p></sec><sec id="S26"><title>Chunking for the MSA Module and Triangular Attention</title><p id="P66">To optimize memory efficiency in our model, we implement a chunking strategy that significantly reduces peak memory usage during inference. We follow the OpenFold chunking implementation for the Triangular Attention layer [<xref rid="R2" ref-type="bibr">Ahdritz et al., 2024</xref>], and extend it to the MSA Module, applying it at three critical points: the transition layers, pair-weighted average layers, and outer product layers. This improvement ensures the scalability of our model to larger inputs while maintaining a similar speed.</p></sec><sec id="S27"><title>Trifast kernel</title><p id="P67">Triangle Self Attention, used in the PairFormer, suffers from <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M41" display="inline"><mml:mrow><mml:mi>O</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msup><mml:mi>n</mml:mi><mml:mn>3</mml:mn></mml:msup><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> memory and time complexity. The memory complexity is often the limiting factor with regards to input size, for a given GPU. At moderate input sizes, it also dominates the runtime. A common solution to the memory issue is applying chunking to the calculation, which is typically done in PyTorch. We implement a Triton kernel that performs the calculation via a chunked online softmax. As such, the memory complexity is improved to <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M42" display="inline"><mml:mrow><mml:mi>O</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msup><mml:mi>n</mml:mi><mml:mn>2</mml:mn></mml:msup><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>. It also exploits the GPU architecture to speed up the computation for practical input sizes. This is an extension of FlashAttention that allows for the inner bias term [<xref rid="R10" ref-type="bibr">Dao et al., 2022</xref>]. A plot of the forwards runtime, compared to compiled PyTorch and another efficient kernel implementation [<xref rid="R20" ref-type="bibr">Song et al., 2023</xref>] can be found in <xref rid="F4" ref-type="fig">Figure 4</xref>. The implementation can be found at <ext-link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://github.com/latkins/trifast" ext-link-type="uri">https://github.com/latkins/trifast</ext-link>.</p></sec></sec></sec><sec id="S28"><label>4</label><title>Boltz steering</title><sec id="S29"><label>4.1</label><title>Introduction</title><p id="P68">A visual inspection of several predictions from B<sc>oltz</sc>-1 revealed instances of hallucinations in the model’s outputs. The most prominent type of hallucination involved the placement of entire chains directly on top of one another. <xref rid="R1" ref-type="bibr">Abramson et al. [2024]</xref> noted a similar behaviour with A<sc>lpha</sc>F<sc>old</sc>3. Moreover, like previous machine learning-based structure prediction methods [<xref rid="R6" ref-type="bibr">Buttenschoen et al., 2024</xref>], we observe some non-physical structures predicted by the model. Examples of these behaviours include steric clashes between atoms, slightly incorrect bond lengths and angles, incorrect stereochemistry at chiral centers and stereobonds and aromatic rings predicted to be non-planar. While these issues are not strongly penalized in geometric measures of accuracy of the poses, they can prevent the predictions from being used in many downstream applications, both for expert and computational analyses (e.g. running molecular dynamics calculations). To tackle these issues, we introduce a new inference time steering technique that we refer to as B<sc>oltz-steering</sc>.</p><p id="P69">We aim to fix these issues by tilting the distribution defined by the trained diffusion model with a newly defined physics-inspired potential function.
<disp-formula id="FD2">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M2" display="block"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mtext>target</mml:mtext></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mn>0</mml:mn></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>∝</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mi>θ</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mn>0</mml:mn></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mspace width="thinmathspace"/><mml:mtext>exp</mml:mtext><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:mo>−</mml:mo><mml:mi>λ</mml:mi><mml:mi>E</mml:mi><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mn>0</mml:mn></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math>
</disp-formula>
where <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M43" display="inline"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>θ</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is the data distribution and <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M44" display="inline"><mml:mi>E</mml:mi></mml:math></inline-formula> the potential.</p><p id="P70">To sample from this tilted distribution, one approach would be to sample k particles from our diffusion process <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M45" display="inline"><mml:mrow><mml:mo stretchy="false">{</mml:mo><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mn>0</mml:mn><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo stretchy="false">}</mml:mo><mml:mo>∼</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mi>θ</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mn>0</mml:mn></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>, and subsequently resample them based on their corresponding importance weights <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M46" display="inline"><mml:mrow><mml:mo stretchy="false">{</mml:mo><mml:mtext>exp</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mo>−</mml:mo><mml:mi>λ</mml:mi><mml:mi>E</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mn>0</mml:mn><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">}</mml:mo></mml:mrow></mml:math></inline-formula>. This approach would function similarly to the approach employed by <xref rid="R1" ref-type="bibr">Abramson et al. [2024]</xref> in A<sc>lpha</sc>F<sc>old</sc>3 where multiple samples of the diffusion model are then filtered based on physical-realism heuristics. However, as noted by <xref rid="R19" ref-type="bibr">Singhal et al. [2025]</xref>, this approach has drawbacks. First, for constraints that are rarely satisfied by the model, importance sampling or filtering will be unable to bias the model towards the rare conformer that satisfies the constraint.</p><sec id="S30"><title>Related work</title><p id="P71">In the space of biomolecular structures, there have been other works using inference time potentials to guide the diffusion process. RFDiffusion [<xref rid="R24" ref-type="bibr">Watson et al., 2023</xref>] computes potentials based on the <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M47" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> prediction at each time step and applies a gradient update to encourage specific symmetric protein motifs and inter-chain contacts. <xref rid="R14" ref-type="bibr">Ishitani and Moriwaki [2025]</xref> also applies gradient updates to improve ligand structures using an RDKit conformer to define loss functions based on the RMSE between the bond lengths, bond angles, and chiral volumes of the predicted <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M48" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> conformer and reference conformer. By contrast, we use a flat-bottom potential based on the distance bounds, to enforce that the potential is within the range of realistic conformers without forcing it to match the RDKit conformer, expand to other physical properties and not only use gradient updates but also resampling. Finally, DecompDiff [<xref rid="R12" ref-type="bibr">Guan et al., 2024</xref>] also uses gradient updates in the reverse diffusion to improve the physical quality of generated molecule conformers.</p></sec></sec><sec id="S31"><label>4.2</label><title>Method</title><p id="P72">B<sc>oltz-steering</sc> takes a different and more effective approach, built on top the Feynmac-Kac (FK) steering framework introduced by <xref rid="R19" ref-type="bibr">Singhal et al. [2025]</xref>. We employ potential functions <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M49" display="inline"><mml:mrow><mml:msub><mml:mi>G</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>T</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>…</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> to tilt the transition kernels of the diffusion process <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M50" display="inline"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>θ</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="thinmathspace"/><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> at each intermediate timestep such that the trajectory is biased towards paths where the eventual <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M51" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> will have a low energy - or, equivalently, as described in the initial formulation, a large reward value.</p><p id="P73">During the steered reverse diffusion process, we begin with a sample from the initial tilted distribution at time <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M52" display="inline"><mml:mrow><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mi>T</mml:mi></mml:mrow></mml:math></inline-formula>
<disp-formula id="FD3">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M3" display="block"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>p</mml:mi><mml:mo>~</mml:mo></mml:mover><mml:mi>T</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>T</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>∝</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mi>θ</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>T</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mspace width="thinmathspace"/><mml:msub><mml:mi>G</mml:mi><mml:mi>T</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>T</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math>
</disp-formula>
and at each subsequent timestep <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M53" display="inline"><mml:mrow><mml:mi>t</mml:mi><mml:mo>&lt;</mml:mo><mml:mi>T</mml:mi></mml:mrow></mml:math></inline-formula>, we sample from the tilted transition kernel
<disp-formula id="FD4">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M4" display="block"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>θ</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="thinmathspace"/><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mspace width="thinmathspace"/><mml:msub><mml:mi>G</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>T</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>…</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math>
</disp-formula></p><p id="P74">We define <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M54" display="inline"><mml:mrow><mml:msub><mml:mi>G</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> in terms of the energy difference between the predicted denoised conformer <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M55" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mi>θ</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> at subsequent timesteps.</p><disp-formula id="FD5">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M5" display="block"><mml:mrow><mml:msub><mml:mi>G</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>T</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>…</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mo stretchy="true">{</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mtext>exp</mml:mtext><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:mi>λ</mml:mi><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>E</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>−</mml:mo><mml:msub><mml:mi>E</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mtext>if</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi>t</mml:mi><mml:mo>&lt;</mml:mo><mml:mi>T</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mtext>exp</mml:mtext><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:mo>−</mml:mo><mml:mi>λ</mml:mi><mml:msub><mml:mi>E</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mtext>if</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mi>T</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">}</mml:mo></mml:mphantom></mml:mrow></mml:math>
</disp-formula><p id="P75"><inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M56" display="inline"><mml:mrow><mml:msub><mml:mi>E</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is a weighted sum of constraint potentials, each tackling a specific physical issue. For each of these constraint potentials <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M57" display="inline"><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:math></inline-formula>, is defined as a flat-bottomed energy function <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M58" display="inline"><mml:mrow><mml:msub><mml:mi>E</mml:mi><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>, such that the energy <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M59" display="inline"><mml:mrow><mml:msub><mml:mi>E</mml:mi><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:math></inline-formula> for any conformer <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M60" display="inline"><mml:mi mathvariant="bold">x</mml:mi></mml:math></inline-formula> that satisfies the constraint and <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M61" display="inline"><mml:mrow><mml:msub><mml:mi>E</mml:mi><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> is increasingly positive for conformers that violate the constraint to a greater degree. These potentials are summed to form <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M62" display="inline"><mml:mrow><mml:msub><mml:mi>E</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> with time-dependent weights as the different physical errors of the model occur at different timescales (e.g. overlapping chains are set at high noise levels, strained bonds at low noise levels).</p><p id="P76">Directly sampling from the tilted transition kernel is intractable, therefore, the FK steering framework uses Sequential Monte Carlo (SMC) to propose multiple particles at each timeste,p which are then resampled based on their importance weights. For ease of notation, we use <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M63" display="inline"><mml:mrow><mml:mi>τ</mml:mi><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="thinmathspace"/><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> to denote the sampling algorithm used by Boltz at timestep <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M64" display="inline"><mml:mi mathvariant="bold">t</mml:mi></mml:math></inline-formula>, such that the transition distribution of the diffusion model corresponds to
<disp-formula id="FD6">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M6" display="block"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>θ</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="thinmathspace"/><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mi>τ</mml:mi><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="thinmathspace"/><mml:msub><mml:mi>f</mml:mi><mml:mi>θ</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math>
</disp-formula></p><p id="P77">We further bias the diffusion trajectory towards low-energy conformers by incorporating guidance. Specifically, we employ backwards universal guidance introduced by <xref rid="R3" ref-type="bibr">Bansal et al. [2023]</xref>, and define our proposal distribution as
<disp-formula id="FD7">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M7" display="block"><mml:mrow><mml:mi>τ</mml:mi><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="thinmathspace"/><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:mstyle mathvariant="normal"><mml:mstyle mathvariant="bold"><mml:mi>Δ</mml:mi></mml:mstyle></mml:mstyle><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math>
</disp-formula>
where <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M65" display="inline"><mml:mrow><mml:mstyle mathvariant="normal"><mml:mstyle mathvariant="bold"><mml:mi>Δ</mml:mi></mml:mstyle></mml:mstyle><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is computed by taking m steps of gradient descent with respect to <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M66" display="inline"><mml:mrow><mml:mi>E</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:mstyle mathvariant="normal"><mml:mstyle mathvariant="bold"><mml:mi>Δ</mml:mi></mml:mstyle></mml:mstyle><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> To adapt to these gradient steps we adjust the importance weights to be:
<disp-formula id="FD8">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M8" display="block"><mml:mrow><mml:mrow><mml:msubsup><mml:mi>G</mml:mi><mml:mi>t</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mi>τ</mml:mi><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="thinmathspace"/><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>,</mml:mo><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mi>τ</mml:mi><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="thinmathspace"/><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>+</mml:mo><mml:mstyle mathvariant="normal"><mml:mstyle mathvariant="bold"><mml:mi>Δ</mml:mi></mml:mstyle></mml:mstyle><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>,</mml:mo><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow></mml:mfrac><mml:msub><mml:mi>G</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mi>T</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>,</mml:mo><mml:mi>…</mml:mi><mml:mo>,</mml:mo><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow></mml:math>
</disp-formula></p><p id="P78">However, in practice we incorporate guidance at each time step while only resampling every 3 timesteps to facilitate sufficient exploration. The full B<sc>oltz-steering</sc> algorithm is presented in <xref rid="T2" ref-type="table">Algorithm 2</xref>.</p></sec><sec id="S32"><label>4.3</label><title>Constraint potentials</title><p id="P79">We define the overall potential <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M67" display="inline"><mml:mrow><mml:msub><mml:mi>E</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> as a linear combination of the various constraint potentials.</p><disp-formula id="FD9">
<label>(1)</label>
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M9" display="block"><mml:mrow><mml:msub><mml:mi>E</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mi>α</mml:mi><mml:mrow><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mi>i</mml:mi><mml:mi>r</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mi>E</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mi>e</mml:mi><mml:mi>t</mml:mi><mml:mi>r</mml:mi><mml:mi>a</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mi>α</mml:mi><mml:mrow><mml:mi>s</mml:mi><mml:mi>t</mml:mi><mml:mi>e</mml:mi><mml:mi>r</mml:mi><mml:mi>e</mml:mi><mml:mi>o</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mi>E</mml:mi><mml:mrow><mml:mi>s</mml:mi><mml:mi>t</mml:mi><mml:mi>e</mml:mi><mml:mi>r</mml:mi><mml:mi>e</mml:mi><mml:mi>o</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mi>α</mml:mi><mml:mrow><mml:mi>p</mml:mi><mml:mi>l</mml:mi><mml:mi>a</mml:mi><mml:mi>n</mml:mi><mml:mi>a</mml:mi><mml:mi>r</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mi>E</mml:mi><mml:mrow><mml:mi>p</mml:mi><mml:mi>l</mml:mi><mml:mi>a</mml:mi><mml:mi>n</mml:mi><mml:mi>a</mml:mi><mml:mi>r</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mi>α</mml:mi><mml:mrow><mml:mi>g</mml:mi><mml:mi>e</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mi>E</mml:mi><mml:mrow><mml:mi>g</mml:mi><mml:mi>e</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mspace linebreak="newline"/><mml:mspace width="5.6em"/><mml:mo>+</mml:mo><mml:msub><mml:mi>α</mml:mi><mml:mrow><mml:mi>c</mml:mi><mml:mi>l</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:mi>h</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mstyle mathvariant="double-struck"><mml:mn>1</mml:mn></mml:mstyle><mml:mrow><mml:mi>t</mml:mi><mml:mo>&lt;</mml:mo><mml:msub><mml:mi>t</mml:mi><mml:mrow><mml:mi>c</mml:mi><mml:mi>l</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:mi>h</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:msub><mml:mi>E</mml:mi><mml:mrow><mml:mi>c</mml:mi><mml:mi>l</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:mi>h</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mi>α</mml:mi><mml:mrow><mml:mi>o</mml:mi><mml:mi>v</mml:mi><mml:mi>e</mml:mi><mml:mi>r</mml:mi><mml:mi>l</mml:mi><mml:mi>a</mml:mi><mml:mi>p</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:msubsup><mml:mi>E</mml:mi><mml:mrow><mml:mi>o</mml:mi><mml:mi>v</mml:mi><mml:mi>e</mml:mi><mml:mi>r</mml:mi><mml:mi>l</mml:mi><mml:mi>a</mml:mi><mml:mi>p</mml:mi></mml:mrow><mml:mi>t</mml:mi></mml:msubsup></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mi>α</mml:mi><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>v</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi><mml:mi>e</mml:mi><mml:mi>n</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mi>E</mml:mi><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>v</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi><mml:mi>e</mml:mi><mml:mi>n</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math>
</disp-formula><p id="P80">The clash potential is only applied for <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M68" display="inline"><mml:mrow><mml:mi>t</mml:mi><mml:mo>&lt;</mml:mo><mml:msub><mml:mi>t</mml:mi><mml:mrow><mml:mi>c</mml:mi><mml:mi>l</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:mi>h</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>. Below we present the formalization of each of the constraint potentials.</p><table-wrap position="anchor" id="T2" orientation="portrait"><table frame="hsides" rules="groups"><colgroup span="1"><col align="left" valign="middle" span="1"/></colgroup><thead><tr><th align="left" valign="top" rowspan="1" colspan="1">Algorithm 2: BOLTZ-STEERING</th></tr></thead><tbody><tr><td align="left" valign="top" rowspan="1" colspan="1"><disp-formula id="FD19">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M19" display="block"><mml:mtable><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mtext>Initialize</mml:mtext><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="normal"><mml:mstyle mathvariant="bold"><mml:mi>Δ</mml:mi></mml:mstyle></mml:mstyle><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>T</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>←</mml:mo><mml:mstyle mathvariant="bold"><mml:mn>0</mml:mn></mml:mstyle><mml:mspace width="1em"/><mml:mspace width="thinmathspace"/><mml:mtext>for</mml:mtext><mml:mspace width="thickmathspace"/><mml:mi>i</mml:mi><mml:mo>∈</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mi>k</mml:mi><mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">for</mml:mi><mml:mspace width="thickmathspace"/><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mi>T</mml:mi><mml:mo>,</mml:mo><mml:mi>…</mml:mi><mml:mo>,</mml:mo><mml:mn>1</mml:mn><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">do</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1em"/><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">if</mml:mi><mml:mspace width="thickmathspace"/><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mi>T</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">then</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Sample</mml:mtext><mml:mspace width="thinmathspace"/><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mi>T</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>∼</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mi>θ</mml:mi></mml:msub><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mi>T</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="thinmathspace"/><mml:mi>T</mml:mi></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1em"/><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">else</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Sample</mml:mtext><mml:mspace width="thinmathspace"/><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>∼</mml:mo><mml:mi>τ</mml:mi><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="thinmathspace"/><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>+</mml:mo><mml:mstyle mathvariant="normal"><mml:mstyle mathvariant="bold"><mml:mi>Δ</mml:mi></mml:mstyle></mml:mstyle><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>,</mml:mo><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1em"/><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1em"/><mml:mspace width="thinmathspace"/><mml:mtext>Predict</mml:mtext><mml:mspace width="thinmathspace"/><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mn>0</mml:mn><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>←</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mi>θ</mml:mi></mml:msub><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>,</mml:mo><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1em"/><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">if</mml:mi><mml:mspace width="thickmathspace"/><mml:mi>T</mml:mi><mml:mo>−</mml:mo><mml:mi>t</mml:mi><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:mtext>mod</mml:mtext><mml:mspace width="thinmathspace"/><mml:mn>3</mml:mn><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mn>0</mml:mn><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">then</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Compute</mml:mtext><mml:mspace width="thinmathspace"/><mml:msup><mml:mi>G</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mi>τ</mml:mi><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="thinmathspace"/><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>,</mml:mo><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mi>τ</mml:mi><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="thinmathspace"/><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>+</mml:mo><mml:mstyle mathvariant="normal"><mml:mstyle mathvariant="bold"><mml:mi>Δ</mml:mi></mml:mstyle></mml:mstyle><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>,</mml:mo><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow></mml:mfrac><mml:msub><mml:mi>G</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mi>T</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>,</mml:mo><mml:mi>…</mml:mi><mml:mo>,</mml:mo><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Resample</mml:mtext><mml:mspace width="thinmathspace"/><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>∼</mml:mo><mml:mtext>Multinomial</mml:mtext><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mi>t</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>j</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>,</mml:mo><mml:msup><mml:mi>G</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>j</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1em"/><mml:mspace width="thinmathspace"/><mml:mtext>Initialize</mml:mtext><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="normal"><mml:mstyle mathvariant="bold"><mml:mi>Δ</mml:mi></mml:mstyle></mml:mstyle><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>←</mml:mo><mml:mstyle mathvariant="bold"><mml:mn>0</mml:mn></mml:mstyle></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1em"/><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">for</mml:mi><mml:mspace width="thickmathspace"/><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>…</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">do</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mstyle mathvariant="normal"><mml:mstyle mathvariant="bold"><mml:mi>Δ</mml:mi></mml:mstyle></mml:mstyle><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>←</mml:mo><mml:mstyle mathvariant="normal"><mml:mstyle mathvariant="bold"><mml:mi>Δ</mml:mi></mml:mstyle></mml:mstyle><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>−</mml:mo><mml:mstyle mathvariant="normal"><mml:mo>∇</mml:mo></mml:mstyle><mml:mi>E</mml:mi><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>+</mml:mo><mml:mstyle mathvariant="normal"><mml:mstyle mathvariant="bold"><mml:mi>Δ</mml:mi></mml:mstyle></mml:mstyle><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>t</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1em"/><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="bold"><mml:mi>Output</mml:mi><mml:mo>:</mml:mo></mml:mstyle><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">x</mml:mi><mml:mn>0</mml:mn><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo>+</mml:mo><mml:mstyle mathvariant="normal"><mml:mstyle mathvariant="bold"><mml:mi>Δ</mml:mi></mml:mstyle></mml:mstyle><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mn>0</mml:mn><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math>
</disp-formula>
</td></tr></tbody></table></table-wrap><sec id="S33"><title>Tetrahedral Atom Chirality</title><p id="P81">For a chiral center Z with substituents A, B, C, D in decreasing Cahn-Ingold-Prelog (CIP) priority order, we say that Z has R chirality if the bonds (Z-A, Z-B, Z-C) form a right handed system and S chirality if they form a left handed system. To enforce that the predicted conformers have the correct chirality, we define potentials based on the improper torsion angles (<inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M69" display="inline"><mml:mrow><mml:mi mathvariant="normal">X</mml:mi><mml:mn>1</mml:mn></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M70" display="inline"><mml:mrow><mml:mi mathvariant="normal">X</mml:mi><mml:mn>2</mml:mn></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M71" display="inline"><mml:mrow><mml:mi mathvariant="normal">X</mml:mi><mml:mn>3</mml:mn></mml:mrow></mml:math></inline-formula>, Z).</p><disp-formula id="FD10">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M10" display="block"><mml:mrow><mml:msub><mml:mi>E</mml:mi><mml:mrow><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mi>i</mml:mi><mml:mi>r</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:munder><mml:mo>∑</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mi>l</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>∈</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mrow><mml:mi mathvariant="normal">R</mml:mi><mml:mspace width="thickmathspace"/><mml:mtext>chiral sets</mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:munder><mml:mi>max</mml:mi><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:mfrac><mml:mi>π</mml:mi><mml:mn>6</mml:mn></mml:mfrac><mml:mo>−</mml:mo><mml:mtext>DihedralAngle</mml:mtext><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>l</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mspace width="thinmathspace"/><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow><mml:mspace linebreak="newline"/><mml:mspace width="4em"/><mml:mo>+</mml:mo><mml:munder><mml:mo>∑</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mi>l</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>∈</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mrow><mml:mi mathvariant="normal">S</mml:mi><mml:mspace width="thickmathspace"/><mml:mtext>chiral sets</mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:munder><mml:mi>max</mml:mi><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:mfrac><mml:mi>π</mml:mi><mml:mn>6</mml:mn></mml:mfrac><mml:mo>+</mml:mo><mml:mtext>DihedralAngle</mml:mtext><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>l</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mspace width="thinmathspace"/><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow></mml:math>
</disp-formula></sec><sec id="S34"><title>Bond Stereochemistry</title><p id="P82">For a bond Z1=Z2 where Z1 has substituents A1, B1 and Z2 has substituents A2, B2 in decreasing CIP priority order, we say that Z1=Z2 has E stereochemistry if the higher priority atoms A1 and A2 are on opposite sides of the bond and Z stereochemistry otherwise. To enforce that the predicted conformers have the correct stereochemistry, we define potentials based on the torsion angles (A1, Z1, Z2, A2) and (B1, Z1, Z2, B2).</p><disp-formula id="FD11">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M11" display="block"><mml:mrow><mml:msub><mml:mi>E</mml:mi><mml:mrow><mml:mi>s</mml:mi><mml:mi>t</mml:mi><mml:mi>e</mml:mi><mml:mi>r</mml:mi><mml:mi>e</mml:mi><mml:mi>o</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:munder><mml:mo>∑</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mi>l</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>∈</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mrow><mml:mi mathvariant="normal">E</mml:mi><mml:mspace width="thickmathspace"/><mml:mtext>stereo sets</mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:munder><mml:mi>max</mml:mi><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:mfrac><mml:mrow><mml:mn>5</mml:mn><mml:mi>π</mml:mi></mml:mrow><mml:mn>6</mml:mn></mml:mfrac><mml:mo>−</mml:mo><mml:mtext>DihedralAngle</mml:mtext><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>l</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mspace width="thinmathspace"/><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow><mml:mspace linebreak="newline"/><mml:mspace width="4.7em"/><mml:mo>+</mml:mo><mml:munder><mml:mo>∑</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mi>l</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>∈</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mrow><mml:mi mathvariant="normal">Z</mml:mi><mml:mspace width="thickmathspace"/><mml:mtext>stereo sets</mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:munder><mml:mi>max</mml:mi><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:mtext>DihedralAngle</mml:mtext><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>l</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>−</mml:mo><mml:mfrac><mml:mi>π</mml:mi><mml:mn>6</mml:mn></mml:mfrac><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow></mml:math>
</disp-formula></sec><sec id="S35"><title>Planar Double Bonds</title><p id="P83">For planar double bonds C1=C2 between carbon atoms where C1 has substituents A1, B1, and C2 has substituents A2, B2, we define a flat bottom potential function to enforce planarity based on the improper torsion angles (A1, B1, C2, C1) and (A2, B2, C1, C2).</p><disp-formula id="FD12">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M12" display="block"><mml:mrow><mml:msub><mml:mi>E</mml:mi><mml:mrow><mml:mi>p</mml:mi><mml:mi>l</mml:mi><mml:mi>a</mml:mi><mml:mi>n</mml:mi><mml:mi>a</mml:mi><mml:mi>r</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:munder><mml:mo>∑</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mi>l</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>∈</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mtext>trigonal planar sets</mml:mtext></mml:msub></mml:mrow></mml:munder><mml:mi>max</mml:mi><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:mtext>DihedralAngle</mml:mtext><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>l</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>−</mml:mo><mml:mfrac><mml:mi>π</mml:mi><mml:mn>12</mml:mn></mml:mfrac><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow></mml:math>
</disp-formula></sec><sec id="S36"><title>Internal Geometry</title><p id="P84">To ensure that the model generates ligand conformers with a physically realistic distance geometry, we define a flat-bottomed potential based on the bounds matrix which is generated by the RDKit package. For a ligand with <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M72" display="inline"><mml:mi>N</mml:mi></mml:math></inline-formula> atoms, we define the lower and upper bounds matrices as <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M73" display="inline"><mml:mrow><mml:mi>L</mml:mi><mml:mo>,</mml:mo><mml:mi>U</mml:mi><mml:mo>∈</mml:mo><mml:msup><mml:mi mathvariant="double-struck">R</mml:mi><mml:mrow><mml:mi>N</mml:mi><mml:mo>×</mml:mo><mml:mi>N</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> where for a pair of atoms (<inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M74" display="inline"><mml:mi mathvariant="normal">i</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M75" display="inline"><mml:mi mathvariant="normal">j</mml:mi></mml:math></inline-formula>), the lower and upper distance bounds are given by <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M76" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M77" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> respectively [<xref rid="R6" ref-type="bibr">Buttenschoen et al., 2024</xref>]:
<disp-formula id="FD13">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M13" display="block"><mml:mrow><mml:msub><mml:mi>E</mml:mi><mml:mrow><mml:mi>g</mml:mi><mml:mi>e</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:munder><mml:mo>∑</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>∈</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mtext>bonds</mml:mtext></mml:msub></mml:mrow></mml:munder><mml:mi>max</mml:mi><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:mo stretchy="false">‖</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>−</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo stretchy="false">‖</mml:mo><mml:mo>−</mml:mo><mml:mn>1.2</mml:mn><mml:msub><mml:mi>U</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mn>0</mml:mn><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi>max</mml:mi><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:mn>0.8</mml:mn><mml:msub><mml:mi>L</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>−</mml:mo><mml:mo stretchy="false">‖</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>−</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo stretchy="false">‖</mml:mo><mml:mspace width="thinmathspace"/><mml:mo>,</mml:mo><mml:mn>0</mml:mn><mml:mo stretchy="false">)</mml:mo><mml:mspace linebreak="newline"/><mml:mspace width="4em"/><mml:mo>+</mml:mo><mml:munder><mml:mo>∑</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>∈</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mtext>angles</mml:mtext></mml:msub></mml:mrow></mml:munder><mml:mi>max</mml:mi><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:mo stretchy="false">‖</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>−</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo stretchy="false">‖</mml:mo><mml:mo>−</mml:mo><mml:mn>1.2</mml:mn><mml:msub><mml:mi>U</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mn>0</mml:mn><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi>max</mml:mi><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:mn>0.8</mml:mn><mml:msub><mml:mi>L</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>−</mml:mo><mml:mo stretchy="false">‖</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>−</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo stretchy="false">‖</mml:mo><mml:mspace width="thinmathspace"/><mml:mo>,</mml:mo><mml:mn>0</mml:mn><mml:mo stretchy="false">)</mml:mo><mml:mspace linebreak="newline"/><mml:mspace width="4em"/><mml:mo>+</mml:mo><mml:munder><mml:mo>∑</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>∉</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mtext>bonds</mml:mtext></mml:msub><mml:mo>∪</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mtext>angles</mml:mtext></mml:msub></mml:mrow></mml:munder><mml:mi>max</mml:mi><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:mo stretchy="false">‖</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>−</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo stretchy="false">‖</mml:mo><mml:mo>−</mml:mo><mml:mn>1.2</mml:mn><mml:msub><mml:mi>U</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mn>0</mml:mn><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi>max</mml:mi><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:mn>0.8</mml:mn><mml:msub><mml:mi>L</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>−</mml:mo><mml:mo stretchy="false">‖</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>−</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo stretchy="false">‖</mml:mo><mml:mspace width="thinmathspace"/><mml:mo>,</mml:mo><mml:mn>0</mml:mn><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math>
</disp-formula></p></sec><sec id="S37"><title>Steric Clash</title><p id="P85">To prevent steric clashes, we constrain the distance between atoms in distinct and non-bonded chains to be greater than 0.725 times the sum of the atoms’ Van der Waals radii.
<disp-formula id="FD14">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M14" display="block"><mml:mrow><mml:msub><mml:mi>E</mml:mi><mml:mrow><mml:mi>c</mml:mi><mml:mi>l</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:mi>h</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:munder><mml:mo>∑</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>∈</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mtext>cross chains</mml:mtext></mml:msub></mml:mrow></mml:munder><mml:mi>max</mml:mi><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:mn>0.725</mml:mn><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>r</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>r</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>−</mml:mo><mml:mo stretchy="false">‖</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>−</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo stretchy="false">‖</mml:mo><mml:mspace width="thinmathspace"/><mml:mo>,</mml:mo><mml:mn>0</mml:mn><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math>
</disp-formula>
where the Van der Waals radius of atom <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M78" display="inline"><mml:mi mathvariant="normal">i</mml:mi></mml:math></inline-formula> is denoted by <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M79" display="inline"><mml:mrow><mml:msub><mml:mi>r</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></p></sec><sec id="S38"><title>Overlapping Chains</title><p id="P86">To prevent overlapping chains, we define a time dependent potential based on the distance between the centroids of symmetric chains with more than one atom.
<disp-formula id="FD15">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M15" display="block"><mml:mrow><mml:mrow><mml:msubsup><mml:mi>E</mml:mi><mml:mrow><mml:mi>o</mml:mi><mml:mi>v</mml:mi><mml:mi>e</mml:mi><mml:mi>r</mml:mi><mml:mi>l</mml:mi><mml:mi>a</mml:mi><mml:mi>p</mml:mi></mml:mrow><mml:mi>t</mml:mi></mml:msubsup></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:munder><mml:mo>∑</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>A</mml:mi><mml:mo>,</mml:mo><mml:mi>B</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>∈</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mtext>symmetric chains</mml:mtext></mml:msub></mml:mrow></mml:munder><mml:mi>max</mml:mi><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>b</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mo>−</mml:mo><mml:mo stretchy="false">‖</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">¯</mml:mo></mml:mover><mml:mi>A</mml:mi></mml:msub><mml:mo>−</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">¯</mml:mo></mml:mover><mml:mi>B</mml:mi></mml:msub><mml:mo stretchy="false">‖</mml:mo><mml:mspace width="thinmathspace"/><mml:mo>,</mml:mo><mml:mn>0</mml:mn><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math>
</disp-formula>
where <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M80" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">¯</mml:mo></mml:mover><mml:mi>A</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is the centroid of chain <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M81" display="inline"><mml:mi mathvariant="normal">A</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M82" display="inline"><mml:mrow><mml:msub><mml:mi>b</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is a time dependent parameter which controls the minimum distance between centroids and smoothly interpolates between 5.0 Å at <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M83" display="inline"><mml:mrow><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:math></inline-formula> and 1.0 Å at <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M84" display="inline"><mml:mrow><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:math></inline-formula> according to the schedule
<disp-formula id="FD16">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M16" display="block"><mml:mrow><mml:msub><mml:mi>b</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>+</mml:mo><mml:mn>4</mml:mn><mml:mfrac><mml:mrow><mml:mtext>exp</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mo>−</mml:mo><mml:mn>2</mml:mn><mml:mo stretchy="false">(</mml:mo><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mtext>exp</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mo>−</mml:mo><mml:mn>2</mml:mn><mml:mo stretchy="false">)</mml:mo><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:mfrac></mml:mrow></mml:math>
</disp-formula></p></sec><sec id="S39"><title>Covalently Bonded Chains</title><p id="P87">To ensure that the model respects covalently bonded chains, we define a potential to enforce that covalently bonded atoms between separate chains are within 2Å.</p><disp-formula id="FD17">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M17" display="block"><mml:mrow><mml:msub><mml:mi>E</mml:mi><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>v</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi><mml:mi>e</mml:mi><mml:mi>n</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="bold">x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:munder><mml:mo>∑</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>∈</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mtext>covalent bonds</mml:mtext></mml:msub></mml:mrow></mml:munder><mml:mi>max</mml:mi><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:mo stretchy="false">‖</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>−</mml:mo><mml:msub><mml:mi mathvariant="bold">x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo stretchy="false">‖</mml:mo><mml:mo>−</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math>
</disp-formula></sec></sec></sec><sec id="S40"><label>5</label><title>Results</title><p id="P88">We evaluate the performance of the model on two benchmarks: the diverse test set of recent PDB structures that we cured as discussed in <xref rid="S7" ref-type="sec">Section 2.2</xref>, and CASP15, the last community-wide protein structure prediction competition where for the first time RNA and ligand structures were also evaluated [<xref rid="R11" ref-type="bibr">Das et al., 2023</xref>, <xref rid="R18" ref-type="bibr">Robin et al., 2023</xref>]. Both these benchmarks contain a very diverse set of structures including protein complexes, nucleic acids, and small-molecule, making them great testbeds for the assessment of models, such as B<sc>oltz</sc>-1, capable of predicting the structure of arbitrary biomolecules.</p><sec id="S41"><title>Benchmarks</title><p id="P89">For CASP15, we extract all the competition targets with the following filters: (1) they were not canceled from the competition, (2) they have an associated PDB id to obtain the ground truth crystal structure, (3) the number of chains in the stochiometry information matches the number of provided chains, (4) the total number of residues with below 2000. This leaves a total of 76 structures. For our test set, we remove structures with covalently bounded ligands because the current version of the C<sc>hai</sc>-1 public repository does not provide a way to set these. Finally, for both datasets, we remove structures that go out of memory or fail for other reasons for any of the methods on A100 80GB GPUs. After these steps, we are left to evaluate 66 structures for CASP15 and 541 structures for the test set.</p></sec><sec id="S42"><title>Baselines</title><p id="P90">We evaluate our performance against A<sc>lpha</sc>F<sc>old</sc>3 [<xref rid="R1" ref-type="bibr">Abramson et al., 2024</xref>] and C<sc>hai</sc>-1 [<xref rid="R7" ref-type="bibr">Chai et al., 2024</xref>], current state-of-the-art biomolecular structure prediction models that were released under an exclusive commercial license and do not have training code and pipelines available. We ran the C<sc>hai</sc>-1 model using the <monospace>chai_lab</monospace> package version 0.2.1.</p><p id="P91">All the models were run with 200 sampling steps and 10 recycling rounds, and producing 5 outputs. We also used the same pre-computed MSA’s up to 16384 sequences. Since C<sc>hai</sc>-1 requires annotating the source of the sequences, we annotated all Uniref sequences with the <monospace>uniref90</monospace> label and all other sequences with the <monospace>bfd_uniclust</monospace> label. We briefly experimented with alternative labelings but did not find these to impact the model substantially.</p></sec><sec id="S43"><title>Evaluation criteria</title><p id="P92">We consider several well-established metrics to evaluate the performance of the models on these very diverse sets of biomolecules and structures. In particular, we compute:</p><list list-type="order" id="L14"><list-item><p id="P93">The mean all-atom LDDT: measuring accuracy of local structures across all biomolecules;</p></list-item><list-item><p id="P94">The average DockQ success rates, i.e. the proportion of predictions with DockQ &gt; 0.23, which measures the number of good protein-protein interactions predicted;</p></list-item><list-item><p id="P95">The average protein-ligand interface LDDT: measuring the quality of the ligand and pocket predicted interactions, official CASP15 metric to evaluate the ligand category;</p></list-item><list-item><p id="P96">The proportion of ligands with a pocket-aligned RMSD below 2Å: a widely adopted measure of molecular docking accuracy.</p></list-item><list-item><p id="P97">The physical quality of the poses generated by the different models by looking at the proportion of poses that pass a set of physical rules from PoseBusters [<xref rid="R6" ref-type="bibr">Buttenschoen et al., 2024</xref>]. In particular, we look at:
<list list-type="alpha-lower" id="L16"><list-item><p id="P98">Whether ligand bonds are strained by checking if the distances between bonded atoms are within a realistic range determined by RDKit</p></list-item><list-item><p id="P99">Whether ligand angles are strained by checking if the 1-3 distances between atoms are within a realistic range determined by RDKit</p></list-item><list-item><p id="P100">Whether ligand internal clashes are present by checking if the distances between all other pairs of atoms are above a lower bound determined by RDKit</p></list-item><list-item><p id="P101">Whether tetrahedral atom chirality is preserved</p></list-item><list-item><p id="P102">Whether bond stereochemistry is preserved</p></list-item><list-item><p id="P103">Whether inter-chain clashes exist by checking if the distances between atoms in distinct and non-bonded chains with more than one atom are greater than 0.75 times the sum of their Van der Waals radii.</p></list-item></list></p></list-item></list><p id="P104">All metrics were computed using OpenStructure [<xref rid="R5" ref-type="bibr">Biasini et al., 2013</xref>] version 2.8.0. LDDT-PLI, DockQ and ligand RMSD success rates are computed over all the different protein-protein and protein-ligand interfaces, these proportions are averaged over interfaces within individual complexes and then averaged across complexes containing interfaces. Following a similar format to that used in CASP and to allow a fair comparison of the methods, we run all methods to generate 5 samples and evaluate both the best (oracle) and highest confidence prediction (top-1) out of the 5 for every metric.</p><p id="P105">To foster further development of methods and the convergence of the field towards well-curated and adopted benchmarks, we publicly release all the inputs, outputs, and evaluations of all the models in our benchmarks as well as the scripts we used to aggregate them. The instructions for downloading them are available on our GitHub repository<sup><xref rid="FN5" ref-type="fn">4</xref></sup>.</p></sec><sec id="S44"><title>Results</title><p id="P106">We report the performance of A<sc>lpha</sc>F<sc>old</sc>3, C<sc>hai</sc>-1 and B<sc>oltz</sc>-1 in <xref rid="F5" ref-type="fig">Figures 5</xref> and <xref rid="F7" ref-type="fig">7</xref>. Overall the models show comparable results across the different metrics across both CASP15 and the test set.</p><p id="P107">A<sc>lpha</sc>F<sc>old</sc>3 has a slight edge over the other models on the mean LDDT metric, which likely derives from better handling complexes containing RNA and DNA thanks to its extra distillation datasets.</p><p id="P108">For protein-protein interactions, the performance of the methods is also aligned. A<sc>lpha</sc>F<sc>old</sc>3 slightly outperforms B<sc>oltz</sc>-1 and C<sc>hai</sc>-1 on the test set in terms of proportion of interfaces with DockQ &gt; 0.23, however, all differences are well within the confidence intervals. Similarly, in the protein-ligand metrics, A<sc>lpha</sc>F<sc>old</sc>3 and B<sc>oltz</sc>-1 obtain slightly better mean LDDT-PLI and proportion of ligand RMSD &lt; 2Å than C<sc>hai</sc>-1, but once again these differences are within the confidence intervals. These results demonstrate, especially in terms of the accuracy of predictions for protein-protein and protein-ligand interactions that B<sc>oltz</sc>-1 obtains a performance comparable to that of the state-of-the-art models A<sc>lpha</sc>F<sc>old</sc>3 and C<sc>hai</sc>-1.</p><p id="P109">When evaluating B<sc>oltz</sc>-1 on the physical quality tests we see that 57% of top-1 poses do not pass these tests on the test set, suggesting that they likely have severe physical issues. C<sc>hai</sc>-1 and A<sc>lpha</sc>F<sc>old</sc>3 also have relatively low rates of complexes passing all the checks, with respectively around 27% and 58%. On the other hand, B<sc>oltz</sc>-1x gets 97% of the poses passing the checks, while maintaining a similar level of performance compared to the other models.</p><p id="P110">In <xref rid="T4" ref-type="table">Table 1</xref>, we report a number of ablations with respect to the number of recycling steps and diffusion steps. These show a generally monotonic improvement in the performance with more steps, which is relatively plateaued beyond 3 recycling and 50 diffusion steps. Finally, in <xref rid="F1" ref-type="fig">Figure 1</xref> we present two examples of hard targets from the test set where B<sc>oltz</sc>-1 performed remarkably well with TM scores around 95%</p></sec></sec><sec id="S45"><label>6</label><title>Conclusion</title><p id="P111">We introduced B<sc>oltz</sc>-1, the first fully commercially accessible open-source model to achieve A<sc>lpha</sc>F<sc>old</sc>3-level accuracy in predicting the 3D structures of biomolecular complexes. To accomplish this, we replicated and expanded upon the A<sc>lpha</sc>F<sc>old</sc>3 technical report, incorporating several innovations in architecture, data curation, training, and inference processes. We empirically validated B<sc>oltz</sc>-1 against A<sc>lpha</sc>F<sc>old</sc>3 and C<sc>hai</sc>-1, the current state-of-the-art structure prediction methods, demonstrating comparable performance on both a diverse test set and the CASP15 benchmark.</p><p id="P112">Further, we introduced B<sc>oltz</sc>-1x an updated model that leverages B<sc>oltz-steering</sc>, a new inference time technique, to significantly improve the physical quality of the poses generated while maintaining their geometric accuracy of B<sc>oltz</sc>-1.</p><p id="P113">The open-source releases of B<sc>oltz</sc>-1 and B<sc>oltz</sc>-1x represent significant steps forward in democratizing access to advanced biomolecular modeling tools and improving their applicability across domains. By freely providing the training and inference code, model weights, and datasets under the MIT license, we aim to enable researchers and organizations to experiment and innovate using B<sc>oltz</sc>-1 and B<sc>oltz</sc>-1x. We envision B<sc>oltz</sc> models as a foundational platform for researchers to build upon, fostering collaboration to advance our collective understanding of biomolecular interactions and accelerating breakthroughs in drug design, structural biology, and beyond.</p><table-wrap position="anchor" id="T3" orientation="portrait"><table frame="hsides" rules="groups"><colgroup span="1"><col align="left" valign="middle" span="1"/></colgroup><thead><tr><th align="left" valign="top" rowspan="1" colspan="1">Algorithm 3: D<sc>ense</sc> MSA P<sc>airing</sc></th></tr></thead><tbody><tr><td align="left" valign="top" rowspan="1" colspan="1"><disp-formula id="FD20">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M20" display="block"><mml:mtable><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="bold"><mml:mi>Input</mml:mi><mml:mo>:</mml:mo></mml:mstyle><mml:mtext>query complex</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">C</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">sequence</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi>…</mml:mi><mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="bold"><mml:mi>Input</mml:mi><mml:mo>:</mml:mo></mml:mstyle><mml:mtext>unpaired MSAs</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">M</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">sequence</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">taxonomy</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi>…</mml:mi><mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∕</mml:mo><mml:mo stretchy="false">∕</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">Add</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">original</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">sequence</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">orig</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">pairing</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">orig</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">is</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">paired</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy="false">{</mml:mo><mml:mo stretchy="false">}</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">{</mml:mo><mml:mo stretchy="false">}</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">for</mml:mi><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">sequence</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">in</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">C</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">do</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">orig</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">pairing</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo>=</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">sequence</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">orig</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">is</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">paired</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">pairing</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">is</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">paired</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mi mathvariant="sans-serif">orig</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">pairing</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">[</mml:mo><mml:mi mathvariant="sans-serif">orig</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">is</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">paired</mml:mi><mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∕</mml:mo><mml:mo stretchy="false">∕</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">Sort</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">and</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">filter</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">taxonomies</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mtext>Group entries in M by taxonomy</mml:mtext><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mtext>Sort taxonomies by the number of unique</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>in its entries</mml:mtext><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:mtext>descending</mml:mtext><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mtext>Filter all taxonomies equal to</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">null</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>or with a single unique</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>in its entries</mml:mtext></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mtext>Store all entries outside the new taxonomy list in an</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">available</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>queue grouped by</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∕</mml:mo><mml:mo stretchy="false">∕</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">Add</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">paired</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">MSAs</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">for</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">taxonomy</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>in taxonomies</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">do</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Group</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">taxonomy</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>entries by</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">for</mml:mi><mml:mspace width="thickmathspace"/><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn><mml:mspace width="thinmathspace"/><mml:mtext>to the maximum number of entries per</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">do</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">row</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">pairing</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">row</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">is</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">paired</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy="false">{</mml:mo><mml:mo stretchy="false">}</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">{</mml:mo><mml:mo stretchy="false">}</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mo stretchy="false">∕</mml:mo><mml:mo stretchy="false">∕</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">Add</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">the</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">chains</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">present</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">in</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">the</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">taxonomy</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">for</mml:mi><mml:mspace width="thickmathspace"/><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">sequences</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mspace width="thinmathspace"/><mml:mtext>in</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">taxonomy</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>entries</mml:mtext><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">do</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">row</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">pairing</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">sequences</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mi mathvariant="sans-serif">i</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">mod</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">len</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">sequences</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">row</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">is</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">paired</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mo stretchy="false">∕</mml:mo><mml:mo stretchy="false">∕</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">Fill</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">any</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">missing</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">chains</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">with</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">unpaired</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">MSAs</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">for</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>in</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">orig</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">pairing</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>bu not</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">row</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">pairing</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">do</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">row</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">pairing</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">available</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo>.</mml:mo><mml:mi mathvariant="sans-serif">pop</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">default</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">empty</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">row</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">is</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">paired</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Append</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">row</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">pairing</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>to</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">pairing</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Append</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">row</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">is</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">paired</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>to</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">is</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">paired</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Break if we have finished the rows</mml:mtext></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∕</mml:mo><mml:mo stretchy="false">∕</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">Fill</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">MSA</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">with</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">remaining</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">unpaired</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">MSAs</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">while</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>MSA not fill and available is not empty</mml:mtext><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">do</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">row</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">pairing</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">row</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">is</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">paried</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy="false">{</mml:mo><mml:mo stretchy="false">}</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">{</mml:mo><mml:mo stretchy="false">}</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">for</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>in</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">orig</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">pairing</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">do</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">row</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">pairing</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">available</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo>.</mml:mo><mml:mi mathvariant="sans-serif">pop</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">default</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">empty</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">row</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">is</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">paired</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Append</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">row</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">pairing</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>to</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">pairing</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Append</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">row</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">is</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">paired</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>to</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">is</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">paired</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="bold"><mml:mi>Output</mml:mi><mml:mo>:</mml:mo></mml:mstyle><mml:mi mathvariant="sans-serif">pairing</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">is</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">paired</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math>
</disp-formula>
</td></tr></tbody></table></table-wrap><table-wrap position="anchor" id="T5" orientation="portrait"><table frame="hsides" rules="groups"><colgroup span="1"><col align="left" valign="middle" span="1"/></colgroup><thead><tr><th align="left" valign="top" rowspan="1" colspan="1">Algorithm 4: Unified Cropping</th></tr></thead><tbody><tr><td align="left" valign="top" rowspan="1" colspan="1"><disp-formula id="FD21">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M21" display="block"><mml:mtable><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="bold"><mml:mi>Input</mml:mi><mml:mo>:</mml:mo></mml:mstyle><mml:mi mathvariant="sans-serif">max</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="sans-serif">max</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">atoms</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>and</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">neighborhood</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">sizes</mml:mi><mml:mspace width="thinmathspace"/><mml:mo>=</mml:mo><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">[</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi>…</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mn>40</mml:mn><mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="bold"><mml:mi>Input</mml:mi><mml:mo>:</mml:mo></mml:mstyle><mml:mtext>Token list tokens and sampled</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>or</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">interface</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mtext>Sample</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">neighborhood</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">size</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>uniformly at random from</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">neighborhood</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">sizes</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mtext>Sample</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">center</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">token</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>uniformly within the tokens in the chain</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>or</mml:mtext><mml:mspace width="thinmathspace"/><mml:mtext>interface</mml:mtext></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">interface</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mtext>Sort</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>by ascending the distance of their center atom to that of</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">center</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">token</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mtext>Let</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">cropped</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>be an empty set</mml:mtext></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">for</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">token</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>in</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">do</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Let</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>be the entries in tokens with the same</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">asym</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">of</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">token</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">if</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">len</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>≤</mml:mo><mml:mi mathvariant="sans-serif">neighborhood</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">size</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">then</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">selected</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">else</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Let</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">selected</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>be the entries in</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>with the same</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">res</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">idx</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>of</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">token</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mo stretchy="false">∕</mml:mo><mml:mo stretchy="false">∕</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">Expand</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">the</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">neighborhood</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">until</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">we</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">have</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">enough</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">min</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">idx</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">max</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">idx</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">token</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>"</mml:mi></mml:mstyle><mml:mi mathvariant="sans-serif">res</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">idx</mml:mi><mml:mstyle mathvariant="normal"><mml:mi>"</mml:mi></mml:mstyle><mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">while</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">len</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">selected</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>&lt;</mml:mo><mml:mi mathvariant="sans-serif">neighborhood</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">size</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">do</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">min</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">idx</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">min</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">idx</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">max</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">idx</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="sans-serif">max</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">idx</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Let</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">selected</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>be the entries in</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">chain</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>with</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">res</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">idx</mml:mi><mml:mo>∈</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mi mathvariant="sans-serif">min</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">idx</mml:mi><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1em"/><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">max</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mo stretchy="false">∕</mml:mo><mml:mo stretchy="false">∕</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">Compute</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">new</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">and</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">new</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">atoms</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Let</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">new</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>be the entries in</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">selected</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>not present in</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">cropped</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">if</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>adding</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">new</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>to</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">cropped</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>would exceed</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">max</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>or</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">max</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">atoms</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>limits</mml:mtext></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">then</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Break the for loop</mml:mtext></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">else</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Add</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">new</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>to</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">cropped</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="bold"><mml:mi>Output</mml:mi><mml:mo>:</mml:mo></mml:mstyle><mml:mtext>cropped</mml:mtext><mml:mi>_</mml:mi><mml:mtext>tokens</mml:mtext></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math>
</disp-formula>
</td></tr></tbody></table></table-wrap><table-wrap position="anchor" id="T6" orientation="portrait"><table frame="hsides" rules="groups"><colgroup span="1"><col align="left" valign="middle" span="1"/></colgroup><thead><tr><th align="left" valign="top" rowspan="1" colspan="1">Algorithm 5: R<sc>obust pocket-conditioning</sc></th></tr></thead><tbody><tr><td align="left" valign="top" rowspan="1" colspan="1"><disp-formula id="FD22">
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M22" display="block"><mml:mtable><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mo stretchy="false">∕</mml:mo><mml:mo stretchy="false">∕</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">Pocket</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">featurization</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">step</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">at</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">training</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">time</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="bold"><mml:mi>Input</mml:mi><mml:mo>:</mml:mo></mml:mstyle><mml:mtext>pocket</mml:mtext><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">conditioned</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">prop</mml:mi><mml:mo>=</mml:mo><mml:mn>0.3</mml:mn><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">pocket</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">cutoff</mml:mi><mml:mo>=</mml:mo><mml:mn>6</mml:mn><mml:mstyle mathvariant="normal"><mml:mi mathvariant="normal">Å</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">pocket</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">geometric</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">p</mml:mi><mml:mo>=</mml:mo><mml:mn>0.3</mml:mn></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="bold"><mml:mi>Input</mml:mi><mml:mo>:</mml:mo></mml:mstyle><mml:mtext>tokens: list of cropped tokens</mml:mtext></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">for</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">token</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>in</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">do</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">token</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>‘</mml:mi><mml:mi>‘</mml:mi></mml:mstyle><mml:mi mathvariant="sans-serif">pocket</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">feature</mml:mi><mml:mstyle mathvariant="normal"><mml:mi>"</mml:mi></mml:mstyle><mml:mo stretchy="false">]</mml:mo><mml:mo>=</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>‘</mml:mi><mml:mi>‘</mml:mi></mml:mstyle><mml:mi mathvariant="monospace">UNSPECIFIED</mml:mi><mml:mstyle mathvariant="normal"><mml:mi>"</mml:mi></mml:mstyle></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">if</mml:mi><mml:mspace width="thinmathspace"/><mml:mi>r</mml:mi><mml:mspace width="thickmathspace"/><mml:mi>U</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy="false">]</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">r</mml:mi><mml:mo>&lt;</mml:mo><mml:mi mathvariant="sans-serif">pocket</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">conditioned</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">prop</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">then</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mo stretchy="false">∕</mml:mo><mml:mo stretchy="false">∕</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">Choose</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">as</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">binder</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">a</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">random</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">ligand</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">in</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">the</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">crop</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">if</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">there</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">are</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">no</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">ligands</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">select</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">a</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">chain</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Let</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">binder</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">asym</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">ids</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>be the list of all unique ligand</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">asym</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>If</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">binder</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">asym</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">ids</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>is empty make it all unique</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">asym</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Select</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">binder</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">asym</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>randomly from</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">binder</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">asym</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">ids</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>For all tokens find the shortest distance of any of its resolved atoms to a resolved atom</mml:mtext></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mtext>with</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">binder</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">asym</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Let</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">pocket</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>be all the tokens with</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">asym</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>different from</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">binder</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">asym</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>and the</mml:mtext></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mtext>shortest distance below</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">pocket</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">cutoff</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">if</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">pocket</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>is not empty</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">then</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">N</mml:mi><mml:mspace width="thinmathspace"/><mml:mo>=</mml:mo><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">min</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">len</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">pocket</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thinmathspace"/><mml:mn>1</mml:mn><mml:mo>+</mml:mo><mml:mi mathvariant="sans-serif">M</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mspace width="thinmathspace"/><mml:mtext>where</mml:mtext></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mi>P</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi mathvariant="sans-serif">M</mml:mi><mml:mo>=</mml:mo><mml:mi>k</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:mi mathvariant="sans-serif">pocket</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">geometric</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">p</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:mrow><mml:mo>∗</mml:mo><mml:mi mathvariant="sans-serif">pocket</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">geometric</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">p</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mtext>Sample</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">N</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>tokens from</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">pocket</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>to from</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">subset</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">pocket</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">for</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">token</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>in</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">do</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mrow><mml:mo stretchy="true">∣</mml:mo><mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">if</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">token</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>‘</mml:mi><mml:mi>‘</mml:mi></mml:mstyle><mml:mi mathvariant="sans-serif">asym</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mstyle mathvariant="normal"><mml:mi>"</mml:mi></mml:mstyle><mml:mo stretchy="false">]</mml:mo><mml:mspace width="thinmathspace"/><mml:mtext>equals</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">binder</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">asym</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">id</mml:mi><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">then</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">token</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>‘</mml:mi><mml:mi>‘</mml:mi></mml:mstyle><mml:mi mathvariant="sans-serif">pocket</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">feature</mml:mi><mml:mstyle mathvariant="normal"><mml:mi>"</mml:mi></mml:mstyle><mml:mo stretchy="false">]</mml:mo><mml:mo>=</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>‘</mml:mi><mml:mi>‘</mml:mi></mml:mstyle><mml:mi mathvariant="monospace">BINDER</mml:mi><mml:mstyle mathvariant="normal"><mml:mi>"</mml:mi></mml:mstyle></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">else</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">if</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">token</mml:mi><mml:mspace width="thinmathspace"/><mml:mtext>in</mml:mtext><mml:mspace width="thinmathspace"/><mml:mi mathvariant="sans-serif">subset</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">pocket</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">tokens</mml:mi><mml:mspace width="thinmathspace"/><mml:mi mathvariant="bold">then</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">token</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>‘</mml:mi><mml:mi>‘</mml:mi></mml:mstyle><mml:mi mathvariant="sans-serif">pocket</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">feature</mml:mi><mml:mstyle mathvariant="normal"><mml:mi>"</mml:mi></mml:mstyle><mml:mo stretchy="false">]</mml:mo><mml:mo>=</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>‘</mml:mi><mml:mi>‘</mml:mi></mml:mstyle><mml:mi mathvariant="monospace">POCKET</mml:mi><mml:mstyle mathvariant="normal"><mml:mi>"</mml:mi></mml:mstyle></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">else</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.2em"/><mml:mspace width="thickmathspace"/><mml:mo stretchy="false">∣</mml:mo><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="sans-serif">token</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>‘</mml:mi><mml:mi>‘</mml:mi></mml:mstyle><mml:mi mathvariant="sans-serif">pocket</mml:mi><mml:mi>_</mml:mi><mml:mi mathvariant="sans-serif">feature</mml:mi><mml:mstyle mathvariant="normal"><mml:mi>"</mml:mi></mml:mstyle><mml:mo stretchy="false">]</mml:mo><mml:mo>=</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>‘</mml:mi><mml:mi>‘</mml:mi></mml:mstyle><mml:mi mathvariant="monospace">UNSELECTED</mml:mi><mml:mstyle mathvariant="normal"><mml:mi>"</mml:mi></mml:mstyle></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="0.5em"/><mml:mspace width="thickmathspace"/><mml:mi mathvariant="bold">end</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mphantom><mml:mo stretchy="true">∣</mml:mo></mml:mphantom></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mspace width="thinmathspace"/></mml:mtd><mml:mtd columnalign="left"><mml:mrow><mml:mspace width="thinmathspace"/><mml:mstyle mathvariant="bold"><mml:mi>Output</mml:mi><mml:mo>:</mml:mo></mml:mstyle><mml:mi mathvariant="sans-serif">tokens</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math>
</disp-formula>
</td></tr></tbody></table></table-wrap></sec></body><back><ack id="S46"><title>Acknowledgments</title><p id="P114">We would like to thank Sergey Ovchinnikov, Bowen Jing, Hannes Stark, Jason Yim, Peter Mikhael, Richard Qi, Wengong Jin, Rohith Krishna, Evan Feinberg, and Maruan Al-Shedivat for the invaluable discussions and help. We also thank the research community for all the feedback we received, that has helped us improve the usability of the model, understand its limitations, and help inform improvements that we are doing for future versions of the model.</p><p id="P115">Large portions of the GPU resources necessary to complete the project were provided by Genesis Therapeutics and the US Department of Energy. For the latter, we acknowledge our use of the National Energy Research Scientific Computing Center (NERSC), a Department of Energy Office of Science User Facility, via NERSC award GenAI@NERSC. This work was also supported by the NSF Expeditions grant (award 1918839: Collaborative Research: Understanding the World Through Code), the Abdul Latif Jameel Clinic for Machine Learning in Health, the DTRA Discovery of Medical Countermeasures Against New and Emerging (DOMANE) Threats program, and the MATCHMAKERS project supported by the Cancer Grand Challenges partnership financed by CRUK (CGCATF-2023/100001) and the National Cancer Institute (OT2CA297463).</p></ack><fn-group><fn id="FN2"><label>1</label><p id="P116">
<ext-link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://github.com/jwohlwend/boltz" ext-link-type="uri">https://github.com/jwohlwend/boltz</ext-link>
</p></fn><fn id="FN3"><label>2</label><p id="P117">Some of these differences may simply be the result of reporting mistakes in the current version of the original manuscript from <xref rid="R1" ref-type="bibr">Abramson et al. [2024]</xref>, as reported.</p></fn><fn id="FN4"><label>3</label><p id="P118">We note that a similar strategy was also concurrently noticed by <ext-link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://github.com/Ligo-Biosciences/AlphaFold3" ext-link-type="uri">https://github.com/Ligo-Biosciences/AlphaFold3</ext-link>.</p></fn><fn id="FN5"><label>4</label><p id="P119">
<ext-link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://github.com/jwohlwend/boltz" ext-link-type="uri">https://github.com/jwohlwend/boltz</ext-link>
</p></fn></fn-group><ref-list><title>References</title><ref id="R1"><mixed-citation publication-type="journal"><name name-style="western"><surname>Abramson</surname><given-names>Josh</given-names></name>, <name name-style="western"><surname>Adler</surname><given-names>Jonas</given-names></name>, <name name-style="western"><surname>Dunger</surname><given-names>Jack</given-names></name>, <name name-style="western"><surname>Evans</surname><given-names>Richard</given-names></name>, <name name-style="western"><surname>Green</surname><given-names>Tim</given-names></name>, <name name-style="western"><surname>Pritzel</surname><given-names>Alexander</given-names></name>, <name name-style="western"><surname>Ronneberger</surname><given-names>Olaf</given-names></name>, <name name-style="western"><surname>Willmore</surname><given-names>Lindsay</given-names></name>, <name name-style="western"><surname>Ballard</surname><given-names>Andrew J</given-names></name>, <name name-style="western"><surname>Bambrick</surname><given-names>Joshua</given-names></name>, <etal/>
<article-title>Accurate structure prediction of biomolecular interactions with alphafold 3</article-title>. <source>Nature</source>, pages <fpage>1</fpage>–<lpage>3</lpage>, <year>2024</year>.<pub-id pub-id-type="doi" assigning-authority="pmc">10.1038/s41586-024-07487-w</pub-id><pub-id pub-id-type="pmcid">PMC11168924</pub-id><pub-id pub-id-type="pmid">38718835</pub-id></mixed-citation></ref><ref id="R2"><mixed-citation publication-type="journal"><name name-style="western"><surname>Ahdritz</surname><given-names>Gustaf</given-names></name>, <name name-style="western"><surname>Bouatta</surname><given-names>Nazim</given-names></name>, <name name-style="western"><surname>Floristean</surname><given-names>Christina</given-names></name>, <name name-style="western"><surname>Kadyan</surname><given-names>Sachin</given-names></name>, <name name-style="western"><surname>Xia</surname><given-names>Qinghui</given-names></name>, <name name-style="western"><surname>Gerecke</surname><given-names>William</given-names></name>, <name name-style="western"><surname>O’Donnell</surname><given-names>Timothy J</given-names></name>, <name name-style="western"><surname>Berenberg</surname><given-names>Daniel</given-names></name>, <name name-style="western"><surname>Fisk</surname><given-names>Ian</given-names></name>, <name name-style="western"><surname>Zanichelli</surname><given-names>Niccolò</given-names></name>, <etal/>
<article-title>Openfold: Retraining alphafold2 yields new insights into its learning mechanisms and capacity for generalization</article-title>. <source>Nature Methods</source>, pages <fpage>1</fpage>–<lpage>11</lpage>, <year>2024</year>.<pub-id pub-id-type="pmid">38744917</pub-id>
<pub-id pub-id-type="doi" assigning-authority="pmc">10.1038/s41592-024-02272-z</pub-id><pub-id pub-id-type="pmcid">PMC11645889</pub-id></mixed-citation></ref><ref id="R3"><mixed-citation publication-type="confproc"><name name-style="western"><surname>Bansal</surname><given-names>Arpit</given-names></name>, <name name-style="western"><surname>Chu</surname><given-names>Hong-Min</given-names></name>, <name name-style="western"><surname>Schwarzschild</surname><given-names>Avi</given-names></name>, <name name-style="western"><surname>Sengupta</surname><given-names>Soumyadip</given-names></name>, <name name-style="western"><surname>Goldblum</surname><given-names>Micah</given-names></name>, <name name-style="western"><surname>Geiping</surname><given-names>Jonas</given-names></name>, and <name name-style="western"><surname>Goldstein</surname><given-names>Tom</given-names></name>. <source>Universal guidance for diffusion models</source>. In <conf-name>Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition</conf-name>, pages <fpage>843</fpage>–<lpage>852</lpage>, <year>2023</year>.</mixed-citation></ref><ref id="R4"><mixed-citation publication-type="journal"><name name-style="western"><surname>Berman</surname><given-names>Helen M</given-names></name>, <name name-style="western"><surname>Westbrook</surname><given-names>John</given-names></name>, <name name-style="western"><surname>Feng</surname><given-names>Zukang</given-names></name>, <name name-style="western"><surname>Gilliland</surname><given-names>Gary</given-names></name>, <name name-style="western"><surname>Bhat</surname><given-names>Talapady N</given-names></name>, <name name-style="western"><surname>Weissig</surname><given-names>Helge</given-names></name>, <name name-style="western"><surname>Shindyalov</surname><given-names>Ilya N</given-names></name>, and <name name-style="western"><surname>Bourne</surname><given-names>Philip E</given-names></name>. <article-title>The protein data bank</article-title>. <source>Nucleic acids research</source>, <volume>28</volume>(<issue>1</issue>):<fpage>235</fpage>–<lpage>242</lpage>, <year>2000</year>.<pub-id pub-id-type="pmid">10592235</pub-id>
<pub-id pub-id-type="doi" assigning-authority="pmc">10.1093/nar/28.1.235</pub-id><pub-id pub-id-type="pmcid">PMC102472</pub-id></mixed-citation></ref><ref id="R5"><mixed-citation publication-type="journal"><name name-style="western"><surname>Biasini</surname><given-names>Marco</given-names></name>, <name name-style="western"><surname>Schmidt</surname><given-names>Tobias</given-names></name>, <name name-style="western"><surname>Bienert</surname><given-names>Stefan</given-names></name>, <name name-style="western"><surname>Mariani</surname><given-names>Valerio</given-names></name>, <name name-style="western"><surname>Studer</surname><given-names>Gabriel</given-names></name>, <name name-style="western"><surname>Haas</surname><given-names>Jürgen</given-names></name>, <name name-style="western"><surname>Johner</surname><given-names>Niklaus</given-names></name>, <name name-style="western"><surname>Schenk</surname><given-names>Andreas Daniel</given-names></name>, <name name-style="western"><surname>Philippsen</surname><given-names>Ansgar</given-names></name>, and <name name-style="western"><surname>Schwede</surname><given-names>Torsten</given-names></name>. <article-title>Openstructure: an integrated software framework for computational structural biology</article-title>. <source>Acta Crystallographica Section D: Biological Crystallography</source>, <volume>69</volume>(<issue>5</issue>):<fpage>701</fpage>–<lpage>709</lpage>, <year>2013</year>.<pub-id pub-id-type="pmid">23633579</pub-id>
<pub-id pub-id-type="doi" assigning-authority="pmc">10.1107/S0907444913007051</pub-id><pub-id pub-id-type="pmcid">PMC3640466</pub-id></mixed-citation></ref><ref id="R6"><mixed-citation publication-type="journal"><name name-style="western"><surname>Buttenschoen</surname><given-names>Martin</given-names></name>, <name name-style="western"><surname>Morris</surname><given-names>Garrett M</given-names></name>, and <name name-style="western"><surname>Deane</surname><given-names>Charlotte M</given-names></name>. <article-title>Posebusters: Ai-based docking methods fail to generate physically valid poses or generalise to novel sequences</article-title>. <source>Chemical Science</source>, <volume>15</volume>(<issue>9</issue>):<fpage>3130</fpage>–<lpage>3139</lpage>, <year>2024</year>.<pub-id pub-id-type="pmid">38425520</pub-id>
<pub-id pub-id-type="doi" assigning-authority="pmc">10.1039/d3sc04185a</pub-id><pub-id pub-id-type="pmcid">PMC10901501</pub-id></mixed-citation></ref><ref id="R7"><mixed-citation publication-type="journal"><name name-style="western"><surname>Chai</surname><given-names>Discovery</given-names></name>, <name name-style="western"><surname>Boitreaud</surname><given-names>Jacques</given-names></name>, <name name-style="western"><surname>Dent</surname><given-names>Jack</given-names></name>, <name name-style="western"><surname>McPartlon</surname><given-names>Matthew</given-names></name>, <name name-style="western"><surname>Meier</surname><given-names>Joshua</given-names></name>, <name name-style="western"><surname>Reis</surname><given-names>Vinicius</given-names></name>, <name name-style="western"><surname>Rogozhnikov</surname><given-names>Alex</given-names></name>, and <name name-style="western"><surname>Wu</surname><given-names>Kevin</given-names></name>. <article-title>Chai-1: Decoding the molecular interactions of life</article-title>. <source>bioRxiv</source>, pages <fpage>2024</fpage>–<lpage>10</lpage>, <year>2024</year>.</mixed-citation></ref><ref id="R8"><mixed-citation publication-type="journal"><collab>UniProt Consortium</collab>. <article-title>Uniprot: a hub for protein information</article-title>. <source>Nucleic acids research</source>, <volume>43</volume>(<issue>D1</issue>):<fpage>D204</fpage>–<lpage>D212</lpage>, <year>2015</year>.<pub-id pub-id-type="pmid">25348405</pub-id>
<pub-id pub-id-type="doi" assigning-authority="pmc">10.1093/nar/gku989</pub-id><pub-id pub-id-type="pmcid">PMC4384041</pub-id></mixed-citation></ref><ref id="R9"><mixed-citation publication-type="journal"><name name-style="western"><surname>Corso</surname><given-names>Gabriele</given-names></name>, <name name-style="western"><surname>Stärk</surname><given-names>Hannes</given-names></name>, <name name-style="western"><surname>Jing</surname><given-names>Bowen</given-names></name>, <name name-style="western"><surname>Barzilay</surname><given-names>Regina</given-names></name>, and <name name-style="western"><surname>Jaakkola</surname><given-names>Tommi</given-names></name>. <article-title>Diffdock: Diffusion steps, twists, and turns for molecular docking</article-title>. <source>arXiv preprint arXiv:2210.01776</source>, <year>2022</year>.</mixed-citation></ref><ref id="R10"><mixed-citation publication-type="journal"><name name-style="western"><surname>Dao</surname><given-names>Tri</given-names></name>, <name name-style="western"><surname>Fu</surname><given-names>Daniel Y.</given-names></name>, <name name-style="western"><surname>Ermon</surname><given-names>Stefano</given-names></name>, <name name-style="western"><surname>Rudra</surname><given-names>Atri</given-names></name>, and <name name-style="western"><surname>Ré</surname><given-names>Christopher</given-names></name>. <article-title>FlashAttention: Fast and memory-efficient exact attention with IO-awareness</article-title>. In <source>Advances in Neural Information Processing Systems (NeurIPS)</source>, <year>2022</year>.</mixed-citation></ref><ref id="R11"><mixed-citation publication-type="journal"><name name-style="western"><surname>Das</surname><given-names>Rhiju</given-names></name>, <name name-style="western"><surname>Kretsch</surname><given-names>Rachael C</given-names></name>, <name name-style="western"><surname>Simpkin</surname><given-names>Adam J</given-names></name>, <name name-style="western"><surname>Mulvaney</surname><given-names>Thomas</given-names></name>, <name name-style="western"><surname>Pham</surname><given-names>Phillip</given-names></name>, <name name-style="western"><surname>Rangan</surname><given-names>Ramya</given-names></name>, <name name-style="western"><surname>Bu</surname><given-names>Fan</given-names></name>, <name name-style="western"><surname>Keegan</surname><given-names>Ronan M</given-names></name>, <name name-style="western"><surname>Topf</surname><given-names>Maya</given-names></name>, <name name-style="western"><surname>Rigden</surname><given-names>Daniel J</given-names></name>, <etal/>
<article-title>Assessment of three-dimensional rna structure prediction in casp15</article-title>. <source>Proteins: Structure, Function, and Bioinformatics</source>, <volume>91</volume>(<issue>12</issue>):<fpage>1747</fpage>–<lpage>1770</lpage>, <year>2023</year>.<pub-id pub-id-type="doi" assigning-authority="pmc">10.1002/prot.26602</pub-id><pub-id pub-id-type="pmcid">PMC10841292</pub-id><pub-id pub-id-type="pmid">37876231</pub-id></mixed-citation></ref><ref id="R12"><mixed-citation publication-type="journal"><name name-style="western"><surname>Guan</surname><given-names>Jiaqi</given-names></name>, <name name-style="western"><surname>Zhou</surname><given-names>Xiangxin</given-names></name>, <name name-style="western"><surname>Yang</surname><given-names>Yuwei</given-names></name>, <name name-style="western"><surname>Bao</surname><given-names>Yu</given-names></name>, <name name-style="western"><surname>Peng</surname><given-names>Jian</given-names></name>, <name name-style="western"><surname>Ma</surname><given-names>Jianzhu</given-names></name>, <name name-style="western"><surname>Liu</surname><given-names>Qiang</given-names></name>, <name name-style="western"><surname>Wang</surname><given-names>Liang</given-names></name>, and <name name-style="western"><surname>Gu</surname><given-names>Quanquan</given-names></name>. <article-title>Decompdiff: diffusion models with decomposed priors for structure-based drug design</article-title>. <source>arXiv preprint arXiv:2403.07902</source>, <year>2024</year>.</mixed-citation></ref><ref id="R13"><mixed-citation publication-type="journal"><name name-style="western"><surname>Hauser</surname><given-names>Maria</given-names></name>, <name name-style="western"><surname>Steinegger</surname><given-names>Martin</given-names></name>, and <name name-style="western"><surname>Söding</surname><given-names>Johannes</given-names></name>. <article-title>Mmseqs software suite for fast and deep clustering and searching of large protein sequence sets</article-title>. <source>Bioinformatics</source>, <volume>32</volume>(<issue>9</issue>):<fpage>1323</fpage>–<lpage>1330</lpage>, <year>2016</year>.<pub-id pub-id-type="pmid">26743509</pub-id>
<pub-id pub-id-type="doi" assigning-authority="pmc">10.1093/bioinformatics/btw006</pub-id></mixed-citation></ref><ref id="R14"><mixed-citation publication-type="journal"><name name-style="western"><surname>Ishitani</surname><given-names>Ryuichiro</given-names></name> and <name name-style="western"><surname>Moriwaki</surname><given-names>Yoshitaka</given-names></name>. <article-title>Improving stereochemical limitations in protein-ligand complex structure prediction</article-title>. <source>bioRxiv</source>, pages <fpage>2025</fpage>–<lpage>03</lpage>, <year>2025</year>.<pub-id pub-id-type="doi" assigning-authority="pmc">10.1021/acsomega.5c07675</pub-id><pub-id pub-id-type="pmcid">PMC12658688</pub-id><pub-id pub-id-type="pmid">41322640</pub-id></mixed-citation></ref><ref id="R15"><mixed-citation publication-type="journal"><name name-style="western"><surname>Jumper</surname><given-names>John</given-names></name>, <name name-style="western"><surname>Evans</surname><given-names>Richard</given-names></name>, <name name-style="western"><surname>Pritzel</surname><given-names>Alexander</given-names></name>, <name name-style="western"><surname>Green</surname><given-names>Tim</given-names></name>, <name name-style="western"><surname>Figurnov</surname><given-names>Michael</given-names></name>, <name name-style="western"><surname>Ronneberger</surname><given-names>Olaf</given-names></name>, <name name-style="western"><surname>Tunyasuvunakool</surname><given-names>Kathryn</given-names></name>, <name name-style="western"><surname>Bates</surname><given-names>Russ</given-names></name>, <name name-style="western"><surname>Žídek</surname><given-names>Augustin</given-names></name>, <name name-style="western"><surname>Potapenko</surname><given-names>Anna</given-names></name>, <etal/>
<article-title>Highly accurate protein structure prediction with alphafold</article-title>. <source>nature</source>, <volume>596</volume>(<issue>7873</issue>):<fpage>583</fpage>–<lpage>589</lpage>, <year>2021</year>.<pub-id pub-id-type="pmid">34265844</pub-id>
<pub-id pub-id-type="doi" assigning-authority="pmc">10.1038/s41586-021-03819-2</pub-id><pub-id pub-id-type="pmcid">PMC8371605</pub-id></mixed-citation></ref><ref id="R16"><mixed-citation publication-type="journal"><name name-style="western"><surname>Karras</surname><given-names>Tero</given-names></name>, <name name-style="western"><surname>Aittala</surname><given-names>Miika</given-names></name>, <name name-style="western"><surname>Aila</surname><given-names>Timo</given-names></name>, and <name name-style="western"><surname>Laine</surname><given-names>Samuli</given-names></name>. <article-title>Elucidating the design space of diffusion-based generative models</article-title>. <source>Advances in neural information processing systems</source>, <volume>35</volume>:<fpage>26565</fpage>–<lpage>26577</lpage>, <year>2022</year>.</mixed-citation></ref><ref id="R17"><mixed-citation publication-type="journal"><name name-style="western"><surname>Mirdita</surname><given-names>Milot</given-names></name>, <name name-style="western"><surname>Schütze</surname><given-names>Konstantin</given-names></name>, <name name-style="western"><surname>Moriwaki</surname><given-names>Yoshitaka</given-names></name>, <name name-style="western"><surname>Heo</surname><given-names>Lim</given-names></name>, <name name-style="western"><surname>Ovchinnikov</surname><given-names>Sergey</given-names></name>, and <name name-style="western"><surname>Steinegger</surname><given-names>Martin</given-names></name>. <article-title>Colabfold: making protein folding accessible to all</article-title>. <source>Nature methods</source>, <volume>19</volume>(<issue>6</issue>):<fpage>679</fpage>–<lpage>682</lpage>, <year>2022</year>.<pub-id pub-id-type="pmid">35637307</pub-id>
<pub-id pub-id-type="doi" assigning-authority="pmc">10.1038/s41592-022-01488-1</pub-id><pub-id pub-id-type="pmcid">PMC9184281</pub-id></mixed-citation></ref><ref id="R18"><mixed-citation publication-type="journal"><name name-style="western"><surname>Robin</surname><given-names>Xavier</given-names></name>, <name name-style="western"><surname>Studer</surname><given-names>Gabriel</given-names></name>, <name name-style="western"><surname>Durairaj</surname><given-names>Janani</given-names></name>, <name name-style="western"><surname>Eberhardt</surname><given-names>Jerome</given-names></name>, <name name-style="western"><surname>Schwede</surname><given-names>Torsten</given-names></name>, and <name name-style="western"><surname>Walters</surname><given-names>W Patrick</given-names></name>. <article-title>Assessment of protein-ligand complexes in casp15</article-title>. <source>Proteins: Structure, Function, and Bioinformatics</source>, <volume>91</volume>(<issue>12</issue>):<fpage>1811</fpage>–<lpage>1821</lpage>, <year>2023</year>.<pub-id pub-id-type="doi" assigning-authority="pmc">10.1002/prot.26601</pub-id><pub-id pub-id-type="pmid">37795762</pub-id></mixed-citation></ref><ref id="R19"><mixed-citation publication-type="journal"><name name-style="western"><surname>Singhal</surname><given-names>Raghav</given-names></name>, <name name-style="western"><surname>Horvitz</surname><given-names>Zachary</given-names></name>, <name name-style="western"><surname>Teehan</surname><given-names>Ryan</given-names></name>, <name name-style="western"><surname>Ren</surname><given-names>Mengye</given-names></name>, <name name-style="western"><surname>Yu</surname><given-names>Zhou</given-names></name>, <name name-style="western"><surname>McKeown</surname><given-names>Kathleen</given-names></name>, and <name name-style="western"><surname>Ranganath</surname><given-names>Rajesh</given-names></name>. <article-title>A general framework for inference-time scaling and steering of diffusion models</article-title>. <source>arXiv preprint arXiv:2501.06848</source>, <year>2025</year>.</mixed-citation></ref><ref id="R20"><mixed-citation publication-type="journal"><name name-style="western"><surname>Song</surname><given-names>Shuaiwen Leon</given-names></name>, <name name-style="western"><surname>Kruft</surname><given-names>Bonnie</given-names></name>, <name name-style="western"><surname>Zhang</surname><given-names>Minjia</given-names></name>, <name name-style="western"><surname>Li</surname><given-names>Conglong</given-names></name>, <name name-style="western"><surname>Chen</surname><given-names>Shiyang</given-names></name>, <name name-style="western"><surname>Zhang</surname><given-names>Chengming</given-names></name>, <name name-style="western"><surname>Tanaka</surname><given-names>Masahiro</given-names></name>, <name name-style="western"><surname>Wu</surname><given-names>Xiaoxia</given-names></name>, <name name-style="western"><surname>Rasley</surname><given-names>Jeff</given-names></name>, <name name-style="western"><surname>Awan</surname><given-names>Ammar Ahmad</given-names></name>, <etal/>
<article-title>Deepspeed4science initiative: Enabling large-scale scientific discovery through sophisticated ai system technologies</article-title>. <source>arXiv preprint arXiv:2310.04610</source>, <year>2023</year>.</mixed-citation></ref><ref id="R21"><mixed-citation publication-type="journal"><name name-style="western"><surname>Steinegger</surname><given-names>Martin</given-names></name> and <name name-style="western"><surname>Söding</surname><given-names>Johannes</given-names></name>. <article-title>Mmseqs2 enables sensitive protein sequence searching for the analysis of massive data sets</article-title>. <source>Nature biotechnology</source>, <volume>35</volume>(<issue>11</issue>):<fpage>1026</fpage>–<lpage>1028</lpage>, <year>2017</year>.<pub-id pub-id-type="doi" assigning-authority="pmc">10.1038/nbt.3988</pub-id><pub-id pub-id-type="pmid">29035372</pub-id></mixed-citation></ref><ref id="R22"><mixed-citation publication-type="journal"><name name-style="western"><surname>Touvron</surname><given-names>Hugo</given-names></name>, <name name-style="western"><surname>Martin</surname><given-names>Louis</given-names></name>, <name name-style="western"><surname>Stone</surname><given-names>Kevin</given-names></name>, <name name-style="western"><surname>Albert</surname><given-names>Peter</given-names></name>, <name name-style="western"><surname>Almahairi</surname><given-names>Amjad</given-names></name>, <name name-style="western"><surname>Babaei</surname><given-names>Yasmine</given-names></name>, <name name-style="western"><surname>Bashlykov</surname><given-names>Nikolay</given-names></name>, <name name-style="western"><surname>Batra</surname><given-names>Soumya</given-names></name>, <name name-style="western"><surname>Bhargava</surname><given-names>Prajjwal</given-names></name>, <name name-style="western"><surname>Bhosale</surname><given-names>Shruti</given-names></name>, <etal/>
<article-title>Llama 2: Open foundation and fine-tuned chat models</article-title>. <source>arXiv preprint arXiv:2307.09288</source>, <year>2023</year>.</mixed-citation></ref><ref id="R23"><mixed-citation publication-type="journal"><name name-style="western"><surname>Wang</surname><given-names>Shuzhe</given-names></name>, <name name-style="western"><surname>Krummenacher</surname><given-names>Kajo</given-names></name>, <name name-style="western"><surname>Landrum</surname><given-names>Gregory A</given-names></name>, <name name-style="western"><surname>Sellers</surname><given-names>Benjamin D</given-names></name>, <name name-style="western"><surname>Di Lello</surname><given-names>Paola</given-names></name>, <name name-style="western"><surname>Robinson</surname><given-names>Sarah J</given-names></name>, <name name-style="western"><surname>Martin</surname><given-names>Bryan</given-names></name>, <name name-style="western"><surname>Holden</surname><given-names>Jeffrey K</given-names></name>, <name name-style="western"><surname>Tom</surname><given-names>Jeffrey YK</given-names></name>, <name name-style="western"><surname>Murthy</surname><given-names>Anastasia C</given-names></name>, <etal/>
<article-title>Incorporating noe-derived distances in conformer generation of cyclic peptides with distance geometry</article-title>. <source>Journal of Chemical Information and Modeling</source>, <volume>62</volume>(<issue>3</issue>):<fpage>472</fpage>–<lpage>485</lpage>, <year>2022</year>.<pub-id pub-id-type="pmid">35029985</pub-id>
<pub-id pub-id-type="doi" assigning-authority="pmc">10.1021/acs.jcim.1c01165</pub-id></mixed-citation></ref><ref id="R24"><mixed-citation publication-type="journal"><name name-style="western"><surname>Watson</surname><given-names>Joseph L</given-names></name>, <name name-style="western"><surname>Juergens</surname><given-names>David</given-names></name>, <name name-style="western"><surname>Bennett</surname><given-names>Nathaniel R</given-names></name>, <name name-style="western"><surname>Trippe</surname><given-names>Brian L</given-names></name>, <name name-style="western"><surname>Yim</surname><given-names>Jason</given-names></name>, <name name-style="western"><surname>Eisenach</surname><given-names>Helen E</given-names></name>, <name name-style="western"><surname>Ahern</surname><given-names>Woody</given-names></name>, <name name-style="western"><surname>Borst</surname><given-names>Andrew J</given-names></name>, <name name-style="western"><surname>Ragotte</surname><given-names>Robert J</given-names></name>, <name name-style="western"><surname>Milles</surname><given-names>Lukas F</given-names></name>, <etal/>
<article-title>De novo design of protein structure and function with rfdiffusion</article-title>. <source>Nature</source>, <volume>620</volume>(<issue>7976</issue>):<fpage>1089</fpage>–<lpage>1100</lpage>, <year>2023</year>.<pub-id pub-id-type="pmid">37433327</pub-id>
<pub-id pub-id-type="doi" assigning-authority="pmc">10.1038/s41586-023-06415-8</pub-id><pub-id pub-id-type="pmcid">PMC10468394</pub-id></mixed-citation></ref></ref-list></back><floats-group><fig position="float" id="F1" orientation="portrait"><label>Figure 1:</label><caption><p id="P120">Example predictions of B<sc>oltz</sc>-1 on targets from the test set.</p></caption><graphic xmlns:xlink="http://www.w3.org/1999/xlink" position="float" orientation="portrait" xlink:href="nihpp-2024.11.19.624167v4-f0001.jpg"><?image-name nihpp-2024.11.19.624167v4-f0001.jpg?><?image-size 146541?><?image-md5 34f36c2c373ffced108e9f4ada5cd72a?><?image-image-server-status LOAD_COMPLETED?><?image-original-height 815?><?image-original-width 1709?><?image-scaled-height 326?><?image-scaled-width 683?><?image-cloudpmc-urn urn:cdn:blobs/8131/12233685/34f36c2c373f/nihpp-2024.11.19.624167v4-f0001.jpg?><?thumb-name nihpp-2024.11.19.624167v4-f0001.gif?><?thumb-size 24513?><?thumb-md5 211cc24ac90f27af6a50f8c00d81d168?><?thumb-image-server-status NEVER_LOAD?><?thumb-scaled-height 80?><?thumb-scaled-width 167?><?thumb-cloudpmc-urn urn:cdn:blobs/8131/12233685/211cc24ac90f/nihpp-2024.11.19.624167v4-f0001.gif?></graphic></fig><fig position="float" id="F2" orientation="portrait"><label>Figure 2:</label><caption><p id="P121">2D representation of the difference between A<sc>lpha</sc>F<sc>old</sc>3 reverse diffusion and B<sc>oltz</sc>-1 reverse diffusion with our Kapsch interpolation. Colors indicate correspondence between different points. Even though the prediction of the denoising model is “perfect” according to the aligned MSE loss, the unaligned interpolation may lead to poor structures fed to the next reverse diffusion step.</p></caption><graphic xmlns:xlink="http://www.w3.org/1999/xlink" position="float" orientation="portrait" xlink:href="nihpp-2024.11.19.624167v4-f0002.jpg"><?image-name nihpp-2024.11.19.624167v4-f0002.jpg?><?image-size 68194?><?image-md5 05f66fe6d0f5ab616bbcd6db49dafdfa?><?image-image-server-status LOAD_COMPLETED?><?image-original-height 485?><?image-original-width 1531?><?image-scaled-height 242?><?image-scaled-width 765?><?image-cloudpmc-urn urn:cdn:blobs/8131/12233685/05f66fe6d0f5/nihpp-2024.11.19.624167v4-f0002.jpg?><?thumb-name nihpp-2024.11.19.624167v4-f0002.gif?><?thumb-size 15122?><?thumb-md5 be291c73cfff1cbb007001fe9e9c9c86?><?thumb-image-server-status NEVER_LOAD?><?thumb-scaled-height 63?><?thumb-scaled-width 200?><?thumb-cloudpmc-urn urn:cdn:blobs/8131/12233685/be291c73cfff/nihpp-2024.11.19.624167v4-f0002.gif?></graphic></fig><fig position="float" id="F3" orientation="portrait"><label>Figure 3:</label><caption><p id="P122">Diagram of the architecture of B<sc>oltz</sc>-1. The critical difference with A<sc>lpha</sc>F<sc>old</sc>3 lies in the confidence model, which now not only has a <monospace>PairFormerModule</monospace> but follows a full trunk composition and is fed features coming from the denoising model through the recursive updates.</p></caption><graphic xmlns:xlink="http://www.w3.org/1999/xlink" position="float" orientation="portrait" xlink:href="nihpp-2024.11.19.624167v4-f0003.jpg"><?image-name nihpp-2024.11.19.624167v4-f0003.jpg?><?image-size 94302?><?image-md5 498c32f2da281bedcc98df74f7f30f96?><?image-image-server-status LOAD_COMPLETED?><?image-original-height 705?><?image-original-width 1548?><?image-scaled-height 353?><?image-scaled-width 774?><?image-cloudpmc-urn urn:cdn:blobs/8131/12233685/498c32f2da28/nihpp-2024.11.19.624167v4-f0003.jpg?><?thumb-name nihpp-2024.11.19.624167v4-f0003.gif?><?thumb-size 14750?><?thumb-md5 64f0671bfbafe8fc83843a69008ddbaa?><?thumb-image-server-status NEVER_LOAD?><?thumb-scaled-height 80?><?thumb-scaled-width 175?><?thumb-cloudpmc-urn urn:cdn:blobs/8131/12233685/64f0671bfbaf/nihpp-2024.11.19.624167v4-f0003.gif?></graphic></fig><fig position="float" id="F4" orientation="portrait"><label>Figure 4:</label><caption><p id="P123">Forwards runtime of trifast kernel compared to compiled PyTorch and DeepSpeed kernel.</p></caption><graphic xmlns:xlink="http://www.w3.org/1999/xlink" position="float" orientation="portrait" xlink:href="nihpp-2024.11.19.624167v4-f0004.jpg"><?image-name nihpp-2024.11.19.624167v4-f0004.jpg?><?image-size 54853?><?image-md5 baf9e3ea04717cc42743c4531438887d?><?image-image-server-status LOAD_COMPLETED?><?image-original-height 846?><?image-original-width 1738?><?image-scaled-height 338?><?image-scaled-width 695?><?image-cloudpmc-urn urn:cdn:blobs/8131/12233685/baf9e3ea0471/nihpp-2024.11.19.624167v4-f0004.jpg?><?thumb-name nihpp-2024.11.19.624167v4-f0004.gif?><?thumb-size 10815?><?thumb-md5 723ee58c6d0a0e06b868217694a44156?><?thumb-image-server-status NEVER_LOAD?><?thumb-scaled-height 80?><?thumb-scaled-width 164?><?thumb-cloudpmc-urn urn:cdn:blobs/8131/12233685/723ee58c6d0a/nihpp-2024.11.19.624167v4-f0004.gif?></graphic></fig><fig position="float" id="F5" orientation="portrait"><label>Figure 5:</label><caption><p id="P124">Visual summary of the performance of A<sc>lpha</sc>F<sc>old</sc>3, C<sc>hai</sc>-1, B<sc>oltz</sc>-1 and B<sc>oltz</sc>-1x on the test set.</p></caption><graphic xmlns:xlink="http://www.w3.org/1999/xlink" position="float" orientation="portrait" xlink:href="nihpp-2024.11.19.624167v4-f0005.jpg"><?image-name nihpp-2024.11.19.624167v4-f0005.jpg?><?image-size 104192?><?image-md5 bfb5e14e7c6c7312e938246ae4d6b01e?><?image-image-server-status LOAD_COMPLETED?><?image-original-height 751?><?image-original-width 1537?><?image-scaled-height 375?><?image-scaled-width 768?><?image-cloudpmc-urn urn:cdn:blobs/8131/12233685/bfb5e14e7c6c/nihpp-2024.11.19.624167v4-f0005.jpg?><?thumb-name nihpp-2024.11.19.624167v4-f0005.gif?><?thumb-size 15090?><?thumb-md5 2250f0e0d8c48f58b397f4fcda2447fe?><?thumb-image-server-status NEVER_LOAD?><?thumb-scaled-height 80?><?thumb-scaled-width 163?><?thumb-cloudpmc-urn urn:cdn:blobs/8131/12233685/2250f0e0d8c4/nihpp-2024.11.19.624167v4-f0005.gif?></graphic></fig><fig position="float" id="F6" orientation="portrait"><label>Figure 6:</label><caption><p id="P125">Visual summary of the performance of A<sc>lpha</sc>F<sc>old</sc>3, C<sc>hai</sc>-1, B<sc>oltz</sc>-1 and B<sc>oltz</sc>-1x on the CASP15 benchmark.</p></caption><graphic xmlns:xlink="http://www.w3.org/1999/xlink" position="float" orientation="portrait" xlink:href="nihpp-2024.11.19.624167v4-f0006.jpg"><?image-name nihpp-2024.11.19.624167v4-f0006.jpg?><?image-size 101892?><?image-md5 16c164231429dff7a451cde637d886ea?><?image-image-server-status LOAD_COMPLETED?><?image-original-height 753?><?image-original-width 1543?><?image-scaled-height 376?><?image-scaled-width 771?><?image-cloudpmc-urn urn:cdn:blobs/8131/12233685/16c164231429/nihpp-2024.11.19.624167v4-f0006.jpg?><?thumb-name nihpp-2024.11.19.624167v4-f0006.gif?><?thumb-size 18412?><?thumb-md5 ea3ef62c285c7b18bcceec54697ef1a8?><?thumb-image-server-status NEVER_LOAD?><?thumb-scaled-height 80?><?thumb-scaled-width 163?><?thumb-cloudpmc-urn urn:cdn:blobs/8131/12233685/ea3ef62c285c/nihpp-2024.11.19.624167v4-f0006.gif?></graphic></fig><fig position="float" id="F7" orientation="portrait"><label>Figure 7:</label><caption><p id="P126">Examples of some failure modes of B<sc>oltz</sc>-1 leading to unphysical poses, on the left, and the fixed poses resulting from <sc>Boltz-1x</sc>, on the right.</p></caption><graphic xmlns:xlink="http://www.w3.org/1999/xlink" position="float" orientation="portrait" xlink:href="nihpp-2024.11.19.624167v4-f0007.jpg"><?image-name nihpp-2024.11.19.624167v4-f0007.jpg?><?image-size 175726?><?image-md5 e907a9e239ea42c88edda8a156652a2a?><?image-image-server-status LOAD_COMPLETED?><?image-original-height 1188?><?image-original-width 1544?><?image-scaled-height 594?><?image-scaled-width 772?><?image-cloudpmc-urn urn:cdn:blobs/8131/12233685/e907a9e239ea/nihpp-2024.11.19.624167v4-f0007.jpg?><?thumb-name nihpp-2024.11.19.624167v4-f0007.gif?><?thumb-size 20689?><?thumb-md5 807d773f290c600c45f4b6fff8c46934?><?thumb-image-server-status NEVER_LOAD?><?thumb-scaled-height 79?><?thumb-scaled-width 103?><?thumb-cloudpmc-urn urn:cdn:blobs/8131/12233685/807d773f290c/nihpp-2024.11.19.624167v4-f0007.gif?></graphic></fig><table-wrap position="float" id="T4" orientation="portrait"><label>Table 1:</label><caption><p id="P127">Ablation on the number of recycling rounds and sampling steps for B<sc>oltz</sc>-1 on the test set. We run the ablation study generating 5 samples and evaluating both the best (oracle) and highest confidence prediction (top-1) out of the 5 for every metric. All models used pre-computed MSAs with up to 4,096 sequences. It is worth noting that the metrics are noisy, so minor inconsistencies (e.g., lack of improvement with increased recycling rounds or diffusion steps) should not be overinterpreted. Moreover, there is a slight difference with the results in <xref rid="F5" ref-type="fig">Figures 5</xref> and <xref rid="F7" ref-type="fig">7</xref> due to differences in MSA parameters as well as the set of structures passing all ablations.</p></caption><table frame="hsides" rules="groups"><colgroup span="1"><col align="left" valign="middle" span="1"/><col align="left" valign="middle" span="1"/><col align="left" valign="middle" span="1"/><col align="left" valign="middle" span="1"/><col align="left" valign="middle" span="1"/><col align="left" valign="middle" span="1"/><col align="left" valign="middle" span="1"/><col align="left" valign="middle" span="1"/><col align="left" valign="middle" span="1"/><col align="left" valign="middle" span="1"/></colgroup><thead><tr><th align="center" valign="top" rowspan="1" colspan="1"/><th align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1"/><th colspan="2" align="center" valign="top" rowspan="1">Mean LDDT</th><th colspan="2" align="center" valign="top" rowspan="1">DockQ &gt; 0.23</th><th colspan="2" align="center" valign="top" rowspan="1">Mean LDDT-PLI</th><th colspan="2" align="center" valign="top" rowspan="1">L-RMSD &lt; 2Å</th></tr><tr><th align="center" valign="top" rowspan="1" colspan="1"># rec.</th><th align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1"># steps</th><th align="center" valign="top" rowspan="1" colspan="1">oracle</th><th align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">top-1</th><th align="center" valign="top" rowspan="1" colspan="1">oracle</th><th align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">top-1</th><th align="center" valign="top" rowspan="1" colspan="1">oracle</th><th align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">top-1</th><th align="center" valign="top" rowspan="1" colspan="1">oracle</th><th align="center" valign="top" rowspan="1" colspan="1">top-1</th></tr></thead><tbody><tr><td align="center" valign="top" style="border-bottom: solid 1px" rowspan="1" colspan="1">3</td><td align="center" valign="top" style="border-right: solid 1px; border-bottom: solid 1px" rowspan="1" colspan="1">200</td><td align="center" valign="top" style="border-bottom: solid 1px" rowspan="1" colspan="1">0.729</td><td align="center" valign="top" style="border-right: solid 1px; border-bottom: solid 1px" rowspan="1" colspan="1">0.716</td><td align="center" valign="top" style="border-bottom: solid 1px" rowspan="1" colspan="1">0.654</td><td align="center" valign="top" style="border-right: solid 1px; border-bottom: solid 1px" rowspan="1" colspan="1">0.625</td><td align="center" valign="top" style="border-bottom: solid 1px" rowspan="1" colspan="1">0.621</td><td align="center" valign="top" style="border-right: solid 1px; border-bottom: solid 1px" rowspan="1" colspan="1">0.580</td><td align="center" valign="top" style="border-bottom: solid 1px" rowspan="1" colspan="1">0.581</td><td align="center" valign="top" style="border-bottom: solid 1px" rowspan="1" colspan="1">0.545</td></tr><tr><td align="center" valign="top" rowspan="1" colspan="1">0</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">200</td><td align="center" valign="top" rowspan="1" colspan="1">0.698</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.681</td><td align="center" valign="top" rowspan="1" colspan="1">0.579</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.544</td><td align="center" valign="top" rowspan="1" colspan="1">0.573</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.530</td><td align="center" valign="top" rowspan="1" colspan="1">0.582</td><td align="center" valign="top" rowspan="1" colspan="1">0.541</td></tr><tr><td align="center" valign="top" rowspan="1" colspan="1">1</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">200</td><td align="center" valign="top" rowspan="1" colspan="1">0.718</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.702</td><td align="center" valign="top" rowspan="1" colspan="1">0.656</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.635</td><td align="center" valign="top" rowspan="1" colspan="1">0.623</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.573</td><td align="center" valign="top" rowspan="1" colspan="1">0.588</td><td align="center" valign="top" rowspan="1" colspan="1">0.535</td></tr><tr><td align="center" valign="top" rowspan="1" colspan="1">2</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">200</td><td align="center" valign="top" rowspan="1" colspan="1">0.726</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.710</td><td align="center" valign="top" rowspan="1" colspan="1">0.651</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.632</td><td align="center" valign="top" rowspan="1" colspan="1">0.616</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.581</td><td align="center" valign="top" rowspan="1" colspan="1">0.587</td><td align="center" valign="top" rowspan="1" colspan="1">0.546</td></tr><tr><td align="center" valign="top" rowspan="1" colspan="1">3</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">200</td><td align="center" valign="top" rowspan="1" colspan="1">0.729</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.716</td><td align="center" valign="top" rowspan="1" colspan="1">0.654</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.625</td><td align="center" valign="top" rowspan="1" colspan="1">0.621</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.580</td><td align="center" valign="top" rowspan="1" colspan="1">0.581</td><td align="center" valign="top" rowspan="1" colspan="1">0.545</td></tr><tr><td align="center" valign="top" rowspan="1" colspan="1">6</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">200</td><td align="center" valign="top" rowspan="1" colspan="1">0.732</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.714</td><td align="center" valign="top" rowspan="1" colspan="1">0.644</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.635</td><td align="center" valign="top" rowspan="1" colspan="1">0.630</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.593</td><td align="center" valign="top" rowspan="1" colspan="1">0.595</td><td align="center" valign="top" rowspan="1" colspan="1">0.555</td></tr><tr><td align="center" valign="top" rowspan="1" colspan="1">8</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">200</td><td align="center" valign="top" rowspan="1" colspan="1">0.733</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.717</td><td align="center" valign="top" rowspan="1" colspan="1">0.644</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.633</td><td align="center" valign="top" rowspan="1" colspan="1">0.630</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.584</td><td align="center" valign="top" rowspan="1" colspan="1">0.588</td><td align="center" valign="top" rowspan="1" colspan="1">0.545</td></tr><tr><td align="center" valign="top" style="border-bottom: solid 1px" rowspan="1" colspan="1">10</td><td align="center" valign="top" style="border-right: solid 1px; border-bottom: solid 1px" rowspan="1" colspan="1">200</td><td align="center" valign="top" style="border-bottom: solid 1px" rowspan="1" colspan="1">0.735</td><td align="center" valign="top" style="border-right: solid 1px; border-bottom: solid 1px" rowspan="1" colspan="1">0.720</td><td align="center" valign="top" style="border-bottom: solid 1px" rowspan="1" colspan="1">0.644</td><td align="center" valign="top" style="border-right: solid 1px; border-bottom: solid 1px" rowspan="1" colspan="1">0.631</td><td align="center" valign="top" style="border-bottom: solid 1px" rowspan="1" colspan="1">0.619</td><td align="center" valign="top" style="border-right: solid 1px; border-bottom: solid 1px" rowspan="1" colspan="1">0.577</td><td align="center" valign="top" style="border-bottom: solid 1px" rowspan="1" colspan="1">0.575</td><td align="center" valign="top" style="border-bottom: solid 1px" rowspan="1" colspan="1">0.541</td></tr><tr><td align="center" valign="top" rowspan="1" colspan="1">3</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">20</td><td align="center" valign="top" rowspan="1" colspan="1">0.720</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.693</td><td align="center" valign="top" rowspan="1" colspan="1">0.615</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.592</td><td align="center" valign="top" rowspan="1" colspan="1">0.577</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.547</td><td align="center" valign="top" rowspan="1" colspan="1">0.550</td><td align="center" valign="top" rowspan="1" colspan="1">0.532</td></tr><tr><td align="center" valign="top" rowspan="1" colspan="1">3</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">50</td><td align="center" valign="top" rowspan="1" colspan="1">0.727</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.710</td><td align="center" valign="top" rowspan="1" colspan="1">0.645</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.627</td><td align="center" valign="top" rowspan="1" colspan="1">0.621</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.579</td><td align="center" valign="top" rowspan="1" colspan="1">0.586</td><td align="center" valign="top" rowspan="1" colspan="1">0.540</td></tr><tr><td align="center" valign="top" rowspan="1" colspan="1">3</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">200</td><td align="center" valign="top" rowspan="1" colspan="1">0.729</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.716</td><td align="center" valign="top" rowspan="1" colspan="1">0.654</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.625</td><td align="center" valign="top" rowspan="1" colspan="1">0.621</td><td align="center" valign="top" style="border-right: solid 1px" rowspan="1" colspan="1">0.580</td><td align="center" valign="top" rowspan="1" colspan="1">0.581</td><td align="center" valign="top" rowspan="1" colspan="1">0.545</td></tr></tbody></table></table-wrap></floats-group></article>