o
    *j"                     @   s   d dl mZ d dlZd dlZd dlmZ dd Zdd Zdd	 Z	d
d Z
ejdd Zdd Zdd Z	ddedee defddZddee fddZdd ZdS )    )OptionalN)data_opsc                 C   s   | j }g }|jr|t| j |tjtjtjtdtj	tj
g ||r+tjntj | jrI|tjtdg |tj|j|jd | jrU|tdg |tj |tj |S )z8Input pipeline data transformers that are not ensembled.g        Z	template_)max_templatessubsample_templates)
v2_featureZrandom_delete_msaappendr   extendZcast_to_64bit_intsZcorrect_msa_restypesZsqueeze_featuresZ!randomly_replace_msa_with_unknownZmake_seq_maskZmake_msa_maskZmake_hhblits_profile_v2Zmake_hhblits_profileZuse_templatesZmake_template_maskmake_pseudo_betaZcrop_templatesr   r   Zuse_template_torsion_anglesatom37_to_torsion_anglesmake_atom14_masksZmake_target_feat)
common_cfgmode_cfgr   	operators r   o/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/science/unifold/data/process.pynonensembled_fns   sJ   
r   c              	   C   s   g }| j r|j|j }n|j}t| j}|jrP|jr9| jr+tj	|j
|||j|jd}n	tj|j
||d}|| |t| |t||| j|j
|j |S )N)	crop_sizeshape_schemaseedspatial_crop_probca_ca_threshold)r   r   r   )$reduce_msa_clusters_by_max_templatesmax_msa_clustersr   dictfeaturesZ
fixed_sizecropis_multimerr   Zcrop_to_size_multimerr   r   r   Zcrop_to_size_singler   select_featZmake_fixed_sizemax_extra_msa)r   r   crop_and_fix_size_seedr   pad_msa_clustersZ
crop_featscrop_fnr   r   r   crop_and_fix_size_fns3   s@   

r"   c           	      C   sL  g }| j }| j}|jr|s|t| j d|v r#|t|j | jr-|j|j	 }n|j}|}| j
}| js:J | j}|tj|d||jd d| v r]|tj| j|j||jd | jrw|rj|t  n|t  |tj |r|tj n|tj |r|r|t| |S |t| |S |tj |S )zDInput pipeline data transformers that can be ensembled and averaged.max_distillation_msa_clustersT)Z
keep_extragumbel_samplebiased_msa_by_chain
masked_msa)r$   
share_mask)r   r   Zblock_delete_msar   r   Zsample_msa_distillationr#   r   r   r   r   Zresample_msa_in_recyclingr$   Z
sample_msar%   Zmake_masked_msar&   Zmasked_msa_replace_fractionr'   Zmsa_cluster_featuresZnearest_neighbor_clusters_v2Znearest_neighbor_clustersZsummarize_clustersZmake_msa_feat_v2Zmake_msa_featZmake_extra_msa_featZcrop_extra_msaZdelete_extra_msa)	r   r   r   multimer_moder   r    r   r   r$   r   r   r   ensembled_fnsY   sj   


r)   c                    s   t dd jtd }t | fddt }jr3r-r3|t  t	|td d }j
}tfdd	t|| }t	fd
dD | S )zCBased on the config, apply filters and transformations to the data.is_distillationr   r   c                    sb   |   }t }t||}rr!t j|}t|S t|}t j|}|S )z2Function to be mapped over the ensemble dimension.)copyr)   composer   r   Zrecycling_features)dataidZfnsZnew_d)r   r!   r*   r   r(   r   r   wrap_ensemble_fn   s   z*process_features.<locals>.wrap_ensemble_fnZnum_recycling_iters   c                    s
    | S Nr   )x)tensorsr0   r   r   <lambda>   s   
 z"process_features.<locals>.<lambda>c                    s"   i | ]}|t j | gd dqS )r   dim)torchstack.0k)r4   r   r   
<dictcomp>   s   " z$process_features.<locals>.<dictcomp>)boolgetr   intr"   r   Z
supervisedr   label_transform_fnr,   num_ensemblesmap_fnr8   Zarangeupdate)r4   r   r   r   ZnonensembledZnum_recyclingrB   Zensemble_tensorsr   )r   r!   r*   r   r(   r4   r0   r   process_features   s.   

rE   c                 C   s   |D ]}|| } q| S r2   r   )r3   fsfr   r   r   r,      s   
r,   c                 C   s   t | d jdkrDtdd | D }g }| D ],}|jd |k r;| d j|g|jdd  R  }||d |jd df< n|}|| qn| }tj|ddS )Nr   r1   c                 s   s    | ]}|j d  V  qdS )r   N)shape)r;   vr   r   r   	<genexpr>   s    z!pad_then_stack.<locals>.<genexpr>.r6   )lenrH   maxZ	new_zerosr   r8   r9   )valuessize
new_valuesrI   resr   r   r   pad_then_stack   s    rQ   c                    sJ   fdd|D }|d   }i }|D ] t fdd|D | < q|S )Nc                    s   g | ]} |qS r   r   )r;   elem)funr   r   
<listcomp>       zmap_fn.<locals>.<listcomp>r   c                    s   g | ]}|  qS r   r   )r;   Zdict_i)featr   r   rT      rU   )keysrQ   )rS   r3   Z	ensemblesr   Zensembled_dictr   )rV   rS   r   rC      s   
rC   labelnum_ensemblereturnc                    sT   d| v sJ d| v sJ d| v sJ t t | }  d ur( fdd|  D } | S )NZaatypeZall_atom_positionsZall_atom_maskc                    s.   i | ]\} |t  fd dtD qS )c                    s   g | ]} qS r   r   )r;   _rI   r   r   rT      s    z3process_single_label.<locals>.<dictcomp>.<listcomp>)r8   r9   ranger:   rY   r\   r   r=      s    z(process_single_label.<locals>.<dictcomp>)r,   rA   items)rX   rY   r   r^   r   process_single_label   s   
r`   c                    s    fdd| D S )Nc                    s   g | ]}t | qS r   )r`   )r;   Zllr^   r   r   rT      s    z"process_labels.<locals>.<listcomp>r   )Zlabels_listrY   r   r^   r   process_labels   s   ra   c                   C   s(   t jt jt jt dt dt jt jgS )N )r   r   Zmake_atom14_positionsZatom37_to_framesr
   r	   Zget_backbone_framesZget_chi_anglesr   r   r   r   rA      s   rA   r2   )typingr   numpynpr8   Z&modelscope.models.science.unifold.datar   r   r"   r)   rE   Zcurry1r,   rQ   rC   r   r@   r`   ra   rA   r   r   r   r   <module>   s(   '&C0

