
    9i?                         S SK r S SKrS SKJrJrJrJrJr  S SKrS SK	r
S SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKJrJr  S SKJrJr  S S	KJr  S S
KJrJr  S SKJ r   S SK!J"r"J#r#  S SK$J%r%J&r&J'r'  S SK(J)r)  S SK*J+r+  S SK,J-r-  \-" 5       r.S/r/S r0    SS jr1\ Rd                  " \'Rf                  \Rf                  S9 " S S\5      5       r4g)    N)AnyDictListOptionalUnion)tensor_tree_map)	Pipelines)Model)model_config)proteinresidue_constants)UnifoldDatasetload_and_process)
OutputKeys)PipelineTensor)	PIPELINES)Preprocessorbuild_preprocessor)Fields
FrameworksTasks)device_placement)read_config)
get_loggerProteinStructurePipelinec                 Z    U S:  a  SnU$ U S:  a  SnU$ U S:  a  SnU$ U S:  a  SnU$ S	nU$ )
Ni      i      i       i          )seq_len
chunk_sizes     w/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/pipelines/science/protein_structure_pipeline.pyautomatic_chunk_sizer'       se    }
  
4
  
4

 	 
4
  
    c                 h   U(       d  S nS/nU(       a  UnOFUn[        [        R                  R                  US5      SS9R	                  5       R                  5       nUc  [        U R                  SUS SSUUUS9	u  pO[        U R                  SUS SSUUUS9	u  p[        R                  " U/5      nU$ )	NAz
chains.txtzutf-8)encodingpredictr   F)	configmodeseed	batch_idxdata_idxis_distillationsequence_idsmonomer_feature_diruniprot_msa_dir)
openospathjoinreadlinesplitr   datar   collater)
r-   data_folderr/   is_multimeruse_uniprotsymmetry_groupr5   r3   batch_s
             r&   load_feature_for_one_targetrD   .   s     u)O &GGLLl3&hj 	 #;;!% ++

q $;;!% ++

 ##UG,ELr(   )module_namec                      ^  \ rS rSr SS\\\4   S\\   4U 4S jjjr	S r
S\\\4   4S jrS\\\4   S\\\4   4S	 jrS\\\4   4S
 jrSrU =r$ )r   `   modelpreprocessorc                   > [         TU ]  " SXS.UD6  [        U R                  R                  5      U l        [        U R
                  S   S   5      U l        U R
                  R                  SS5      U l	        Uc5  U R
                  R                  n[        U[        R                  5      U l
        U R                  R                  5         g)a  Use `model` and `preprocessor` to create a protein structure pipeline for prediction.

Args:
    model (str or Model): Supply either a local model dir which supported the protein structure task,
    or a model id from the model hub, or a torch model instance.
    preprocessor (Preprocessor): An optional preprocessor instance, please make sure the preprocessor fits for
    the model if supplied.

Examples:
    >>> from modelscope.pipelines import pipeline
    >>> pipeline_ins = pipeline(task='protein-structure',
    >>>    model='DPTech/uni-fold-monomer')
    >>> protein = 'LILNLRGGAFVSNTQITMADKQKKFINEIQEGDLVRSYSITDETFQQNAVTSIVKHEADQLCQINFGKQHVVC'
    >>> print(pipeline_ins(protein))

)rH   rI   pipeline
model_namepostprocessorNr#   )super__init__r   rH   	model_dircfgr   r-   poprM   rI   r   r   scienceeval)selfrH   rI   kwargspreprocessor_cfg	__class__s        r&   rO   !ProteinStructurePipeline.__init__d   s    ( 	JuJ6Jtzz334"HHZ .0!XX\\/4@#xx44 23C39>>!CD

r(   c                 
    XU4$ Nr#   )rU   pipeline_parameterss     r&   _sanitize_parameters-ProteinStructurePipeline._sanitize_parameters   s    "9LLLr(   returnc                    UR                  S0 5      nUR                  S0 5      nUR                  S0 5      nU R                  " U40 UD6n[        U R                  U R                  5         [
        R                  " 5          U R                  " U40 UD6nS S S 5        S S S 5        U R                  " U40 UD6nU$ ! , (       d  f       N+= f! , (       d  f       N4= f)Npreprocess_paramsforward_paramspostprocess_params)	get
preprocessr   	frameworkdevice_nametorchno_gradforwardpostprocess)rU   inputargsrV   ra   rb   rc   outs           r&   _process_single(ProteinStructurePipeline._process_single   s    "JJ':B?$4b9#ZZ(<bAooe9'89dnnd.>.>?ll39.9 ! @ s9&89
	 ! @?s$   *C
 B9C
9
C	C


Cinputsc                 *   0 n0 n[         R                  R                  U R                  R                  US   5      n/ n[        U R                  S   S   5       GHk  n[        SU45      S-  n[        U R                  UUUS   US   U R                  R                  S9n	U	S   R                  S	   n
[        U
5      U R                  R                  R                  l        [         R"                  " 5          U	R%                  5        VVs0 s H  u  pU[         R&                  " US
S9_M     n	nnU R                  U	5      nS S S 5        S n[)        S U	5      n	[)        X5      n	[)        S WS   5      n[)        X5      n[)        S U	5      n	[)        S U5      nUS   n[*        R,                  " U5      n[*        R.                  " US   [0        R2                  S	S9n[4        R6                  " XUS9nU n[9        U5      UU'   US   (       a<  U R                  R                  c%  [9        [*        R,                  " US   5      5      UU'   [;        [         R                  R                  UUS-   5      S5       nUR=                  [4        R>                  " U5      5        URA                  [4        R>                  " U5      5        S S S 5        GMn     [B        RE                  S[9        U5      -   5        U R                  S   S   nU nUS-   n[;        [         R                  R                  UU5      S5       n[F        RH                  " UUSS9  S S S 5        U(       aq  [B        RE                  S[9        U5      -   5        US-   n[;        [         R                  R                  UU5      S5       n[F        RH                  " UUSS9  S S S 5        U$ U$ s  snnf ! , (       d  f       GN= f! , (       d  f       GM  = f! , (       d  f       N= f! , (       d  f       U$ = f) N	target_idrK   times*   i r?   )r?   r@   rA   aatypezcuda:0)devicec                     U R                   [        R                  :X  d  U R                   [        R                  :X  a  U R	                  5       $ U $ r[   )dtyperh   bfloat16halffloatxs    r&   to_float2ProteinStructurePipeline.forward.<locals>.to_float   s2    77enn,5::0E779$Hr(   c                     U S   $ )N)rw   r   .r#   ts    r&   <lambda>2ProteinStructurePipeline.forward.<locals>.<lambda>   s    a
mr(   c                     U S   $ )N)r   .r#   r   s    r&   r   r      s    AfIr(   r   c                 J    [         R                  " U R                  5       5      $ r[   nparraycpur~   s    r&   r   r      s    bhhquuw.?r(   c                 J    [         R                  " U R                  5       5      $ r[   r   r~   s    r&   r   r      s    BHHQUUW,=r(   plddt).N)axis)featuresresult	b_factorsziptm+ptmz.pdbwzplddts:rL   z_plddt.json   )indentptmsz	_ptm.json)%r7   r8   r9   rI   output_dir_baserangerQ   hashrD   r-   rA   shaper'   rH   globalsr%   rh   ri   items	as_tensorr   r   meanrepeatr   atom_type_numr   from_predictionstrr6   writeto_pdbappendloggerinfojsondump)rU   rq   rb   plddtsr   
output_dirpdbsr/   cur_seedrB   r$   kvrn   r   r   
mean_plddtplddt_b_factorscur_proteincur_save_namefrL   
score_nameplddt_fname	ptm_fnames                            r&   rj    ProteinStructurePipeline.forward   st   WW\\$"3"3"C"C"("57
 $((:.w78DRJ'&0H/"=1"=1#00??E Ho++B/G2Fw2ODJJ$$/ !& - uq:: -   jj' ! $$;UCE#H4E!"5s1v>C!(0C#$?GE!"=sCCLEJ iii "3"A"ALO "11oGK (zM$'
OF=!!#'+'8'8'G'G'O&)"''#j/*B&C]#bggll:}v/EF{34GNN;78 ] 9f 	IF+,XXj),7
"|
 =0"'',,z;7=IIfa* >KKT*+"[0Ibggll:y93?1		$!, @ te !B  >=
 @? sC   4O"O
*O1AO.O2$PO
O	
O/	2
P 
Pc                     U$ r[   r#   )rU   rq   rc   s      r&   rk   $ProteinStructurePipeline.postprocess   s    r(   )rQ   r-   rM   rI   r[   )__name__
__module____qualname____firstlineno__r   r
   r   r   r   rO   r]   r   r   ro   rj   r   rk   __static_attributes____classcell__)rX   s   @r&   r   r   `   s     9=eSj)'5 >M
c3h 
Id38n I%)#s(^IV$sF{"3  r(   )r   FFN)5r7   timetypingr   r   r   r   r   r   numpyr   rh   unicore.utilsr   modelscope.metainfor	   modelscope.models.baser
   (modelscope.models.science.unifold.configr   &modelscope.models.science.unifold.datar   r   )modelscope.models.science.unifold.datasetr   r   modelscope.outputsr   modelscope.pipelines.baser   r   modelscope.pipelines.builderr   modelscope.preprocessorsr   r   modelscope.utils.constantr   r   r   modelscope.utils.devicer   modelscope.utils.hubr   modelscope.utils.loggerr   r   __all__r'   rD   register_moduleprotein_structurer   r#   r(   r&   <module>r      s    
  3 3    ) ) ( A MI ) 6 2 E ? ? 4 , .	%
&" 
/d 	)D)DF|x |F|r(   