o
    ߥi                     @   s"  d dl Zd dlZd dlZd dlZd dlmZmZ d dlZd dl	Z
d dlmZ ddlmZ ddlmZ d&d	d
Zeddddedeeef fddZeddddedeeef fddZdd ZdedefddZdefddZde
jiZdedefdd Zdedefd!d"Zd#efd$d%ZdS )'    N)AnyDict)sparse   )residue_constants)	NumpyDict   Fc                    s<   |r fdd}|S |r fdd}|S t  }|S )Nc                    *   t |  t |  fdd}|S )Nc                        t  | i |S N)copy_libdeepcopyargskwargscached_func `/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/science/unifold/data/utils.pywrapper      -lru_cache.<locals>.decorator.<locals>.wrapper	functools	lru_cachewrapsfr   maxsizetypedr   r   	decorator      zlru_cache.<locals>.decoratorc                    r	   )Nc                     r
   r   )r   copyr   r   r   r   r   %   r   r   r   r   r   r   r   r!   "   r"   )r   r   )r   r    r#   r   r!   r   r   r   r      s   r      T)r   r   pathreturnc                 C      dd }|| }t |}|S )Nc                 S   p   |  ds|  dsJ d|  d|  drtjnt}|| d}t|W  d    S 1 s1w   Y  d S Nz.pklz.pkl.gzzbad suffix in z as pickle file.z.gzrbendswithgzipopenpickleloadr%   open_fnr   r   r   r   r0   3      
$zload_pickle_safe.<locals>.loaduncompress_featuresr%   r0   retr   r   r   load_pickle_safe0      r8   )r   r#   c                 C   r'   )Nc                 S   r(   r)   r+   r1   r   r   r   r0   B   r3   zload_pickle.<locals>.loadr4   r6   r   r   r   load_pickle?   r9   r:   c                 C   s8   t j| ddt j} tj}t j|| t jdd} | S )zECorrect template restype to have the same order as residue_constants.)axisr   )npargmaxastypeint32rc MAP_HHBLITS_AATYPE_TO_OUR_AATYPEtake)featurenew_order_listr   r   r   correct_template_restypesN   s   rF   rD   c                    sD   | d  tj| d< d| v r| d dd   fdd|  D S )Nmsanum_alignmentsc                 S   s   |  ds
|  dS | S )N_all_seq)r,   )kr   r   r   make_all_seq_key\   s   

z1convert_all_seq_feature.<locals>.make_all_seq_keyc                    s   i | ]	\}} ||qS r   r   .0rJ   vrK   r   r   
<dictcomp>a   s    z+convert_all_seq_feature.<locals>.<dictcomp>)r?   r=   uint8popitems)rD   r   rO   r   convert_all_seq_featureV   s
   
rT   
spmat_dictc                 C   s2   t j| d | d | d ff| d tjd}| S )Ndatarowcolshape)rY   dtype)sp
coo_matrixr=   float32toarray)rU   spmatr   r   r   to_dense_matrixd   s   r`   rG   featsc                 C   s&   d| v r|  d}t|}|| d< | S )Nsparse_deletion_matrix_intdeletion_matrix)rR   r`   )ra   rN   r   r   r   r5   p   s
   
r5   c                    s   t  dksJ d  d v r fdd|  D } | S d v r7 d D ]}|| v s4J d| dq&| S d	 v rH fd
d|  D } | S td  )Nr   z#wrong usage of filter with kwargs: desired_keysc                    s"   i | ]\}}| d  v r||qS )rd   r   rL   r   r   r   rP   {       zfilter.<locals>.<dictcomp>required_keyszcannot find required key .ignored_keysc                    s"   i | ]\}}| d  vr||qS )ri   r   rL   re   r   r   rP      rf   )lenrS   AssertionError)rD   r   rJ   r   re   r   filterx   s    

rl   featuresc                 C   s   dt ji}dg}i }|  D ]1\}}||v r||| }||v r;tj||jd}|j|j|j	|j
d}d| }|}|||< q|S )NrG   deletion_matrix_int)rZ   )rY   rW   rX   rV   sparse_)r=   rQ   rS   r?   r[   r\   rZ   rY   rW   rX   rV   )rm   change_dtypesparse_keyscompressed_featuresrJ   rN   sp_vr   r   r   compress_features   s$   

rt   )r   FFF)r#   r   r   r-   r/   typingr   r   jsonnumpyr=   scipyr   r[    r   rA   data_opsr   r   strr8   r:   rF   rT   r`   r@   FEATS_DTYPEr5   rl   rt   r   r   r   r   <module>   s,   



	