o
    ߥi                     @   s   d dl mZ d dlmZ d dlmZ ddlmZ ddlm	Z	m
Z
mZ G dd dejZG d	d
 d
ejZG dd dejZG dd deZG dd deZG dd deZG dd deZdS )    )DictN)	LayerNorm   )Linear)predicted_aligned_errorpredicted_lddtpredicted_tm_scorec                       $   e Zd Z fddZdd Z  ZS )AuxiliaryHeadsc                    s   t t|   tdi |d | _tdi |d | _tdi |d | _|j	j
r3tdi |d | _	|jj
r@tdi |j| _|| _d S )Nplddt	distogram
masked_msaexperimentally_resolved )superr
   __init__PredictedLDDTHeadr   DistogramHeadr   MaskedMSAHeadr   r   enabledExperimentallyResolvedHeadpaePredictedAlignedErrorHeadconfig)selfr   	__class__r   m/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/science/unifold/modules/auxillary_heads.pyr      s   
zAuxiliaryHeads.__init__c           	      C   s6  i }|  |d d }||d< t| |d< | |d }||d< | |d }||d< | jjjr=| |d }||d	< | jjjr| |d }||d
< | }|	t
|fi | jj t|fddi| jj|d< | jjdd}|dkrt|fd|d d| jj|d< ||d  d| |d   |d< |S )Nsmsingleplddt_logitsr   pairdistogram_logitsmsamasked_msa_logitsexperimentally_resolved_logits
pae_logits	interfaceFptmiptm_weightg        Tasym_id)r'   r*   iptmg      ?ziptm+ptm)r   r   detachr   r   r   r   r   r   updater   r   get)	r   outputsaux_outr    r"   r$   exp_res_logitsr&   r)   r   r   r   forward"   sX   




zAuxiliaryHeads.forward__name__
__module____qualname__r   r2   __classcell__r   r   r   r   r
      s    r
   c                       r	   )r   c                    sv   t t|   || _|| _|| _t| j| _t| j| jdd| _	t| j| jdd| _
t | _t| j| jdd| _d S Nrelu)initfinal)r   r   r   num_binsd_ind_hidr   
layer_normr   linear_1linear_2nnGELUactlinear_3)r   r<   r=   r>   r   r   r   r   P   s   
zPredictedLDDTHead.__init__c                 C   s@   |  |}| |}| |}| |}| |}| |}|S N)r?   r@   rD   rA   rE   )r   sr   r   r   r2   ^   s   





zPredictedLDDTHead.forwardr3   r   r   r   r   r   N   s    r   c                       s,   e Zd Z fddZdd Zdd Z  ZS )EnhancedHeadBasec                    sX   t t|   |rd | _d | _nt|| _t||dd| _t | _	t||dd| _
d S r8   )r   rH   r   r?   	linear_inr   r   rB   rC   rD   linear)r   r=   d_outdisable_enhance_headr   r   r   r   j   s   

zEnhancedHeadBase.__init__c                 C   s   d | _ d | _d S rF   )r?   rI   )r   r   r   r   apply_alphafold_original_modeu   s   
z.EnhancedHeadBase.apply_alphafold_original_modec                 C   s2   | j d ur|  |}| | |}| |}|S rF   )r?   rD   rI   rJ   r   xlogitsr   r   r   r2   y   s
   


zEnhancedHeadBase.forward)r4   r5   r6   r   rM   r2   r7   r   r   r   r   rH   h   s    rH   c                       s(   e Zd Z fddZ fddZ  ZS )r   c                       t t| j|||d d S N)r=   rK   rL   )r   r   r   r   d_pairr<   rL   kwargsr   r   r   r      
   

zDistogramHead.__init__c                    s    t  |}||dd }|S )N)r   r2   	transposerN   r   r   r   r2      s   zDistogramHead.forwardr3   r   r   r   r   r      s    r   c                          e Zd Z fddZ  ZS )r   c                    rQ   rR   )r   r   r   rS   r   r   r   r      rV   z"PredictedAlignedErrorHead.__init__r4   r5   r6   r   r7   r   r   r   r   r          r   c                       rZ   )r   c                    rQ   rR   )r   r   r   )r   d_msarK   rL   rU   r   r   r   r      rV   zMaskedMSAHead.__init__r[   r   r   r   r   r      r\   r   c                       rZ   )r   c                    rQ   rR   )r   r   r   )r   d_singlerK   rL   rU   r   r   r   r      rV   z#ExperimentallyResolvedHead.__init__r[   r   r   r   r   r      r\   r   )typingr   torch.nnrB   unicore.modulesr   commonr   
confidencer   r   r   Moduler
   r   rH   r   r   r   r   r   r   r   r   <module>   s   @

