
    wiD                        d dl 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
mZ ddlmZ ddlmZ d	d
lmZmZ  ee                                          j        j        Zedz  dz  Z G d de          Z G d de          ZdS )    )PathN)	OmegaConf   )	BaseModel)DownloadFileDownloadFileInput)logger)mkdir   )FileInfoInferSessionnetworkszarch_config.yamlc                   z    e Zd ZddZdefdZdefdZdefdZd Zd	 Z	d
 Z
d Zdej        fdZddedefdZdS )TorchInferSessionreturnNc                     |                      |          }|                     |          }|                     ||          | _        |                     |           | j                                         d S N)_init_model_path_load_arch_config_build_and_load_model	predictor_setup_deviceeval)selfcfg
model_patharch_configs       w/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/rapidocr/inference_engine/torch.py__init__zTorchInferSession.__init__   sm    **3//
,,Z8833KLL3    c           	         |                     dd           }||                     t          |j        |j        |j        |j        |j                            }|d         }| j        t          |          j
        z  }t          j        t          ||d         |t                               t          j        d|            |                     |           t          |          S )Nr   )engine_typeocr_version	task_type	lang_type
model_type	model_dirSHA256)file_urlsha256	save_pathr	   zUsing )getget_model_urlr   r"   r#   r$   r%   r&   DEFAULT_MODEL_PATHr   namer   runr   r	   info_verify_model)r   r   r   
model_infodefault_model_urls        r   r   z"TorchInferSession._init_model_path   s    WW\400
++ # #!m!m"~   J !+; 7048I3J3J3OOJ!.%h/(!	     	)Z))***:&&&Jr    r   c                     t          j        t                    }|j        }||vrt	          d| d          |                    |          S )Nzarchitecture z is not in arch_config.yaml)r   loadDEFAULT_CFG_PATHstem
ValueErrorr,   )r   r   all_arch_config	file_names       r   r   z#TorchInferSession._load_arch_config:   sR    #.)9::O	O++SYSSSTTT""9---r    c                 |    t          |          }t          j        |dd          }|                    |           |S )NcpuF)map_locationweights_only)r   torchr6   load_state_dict)r   r   r   model
state_dicts        r   r   z'TorchInferSession._build_and_load_modelC   s>    +&&Z
USSS
j)))r    c                     |                      |          \  | _        | _        | _        | j        r|                                  |                                  d S r   )_resolve_device_configdeviceuse_gpuuse_npu_config_npu_move_model_to_devicer   r   s     r   r   zTorchInferSession._setup_deviceI   sV    262M2Mc2R2R/T\4<< 	""$$$$$r    c                     |j         j        r$t          j        d|j         j                   ddfS |j         j        r$t          j        d|j         j                   ddfS t          j        d          ddfS )Nzcuda:TFznpu:r=   )
engine_cfguse_cudar@   rF   gpu_idrH   npu_idrK   s     r   rE   z(TorchInferSession._resolve_device_configQ   s    >" 	N< ?(= ? ?@@$MM>! 	M< >s~'< > >??LL|E""E500r    c                 H   	 dd l }t          dz                                  }t          |           dt	          |          d}|j                            |           d S # t          $ r8 t          j	        d           t          j        d          | _        d| _        Y d S w xY w)Nr   kernel_metaenable)ACL_OP_COMPILER_CACHE_MODEACL_OP_COMPILER_CACHE_DIRztorch_npu is not installed, options with ACL setting failed. 
Please refer to https://github.com/Ascend/pytorch to see how to install.r=   F)	torch_npuroot_dirresolver
   strnpu
set_optionImportErrorr	   warningr@   rF   rH   )r   rV   kernel_meta_diroptionss       r   rI   zTorchInferSession._config_npuZ   s    	!'-7@@BBO/""" /7-0-A-A G M$$W----- 	! 	! 	!N[  
  ,u--DK DLLLL	!s   AA >B! B!c                 D    | j                             | j                   d S r   )r   torF   )r   s    r   rJ   z'TorchInferSession._move_model_to_deviceo   s     $+&&&&&r    imgc                 J   t          j                    5  t          j        |          }| j        s| j        r|                    | j                  }|                     |                                          	                                }|cd d d            S # 1 swxY w Y   d S r   )
r@   no_grad
from_numpyrG   rH   ra   rF   r   r=   numpy)r   rb   inpoutputss       r   __call__zTorchInferSession.__call__r   s    ]__ 	 	"3''C| *t| *ffT[)) nnS))--//5577G	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A7BBB	characterkeyc                     dS )NF )r   rk   s     r   have_keyzTorchInferSession.have_key|   s    ur    )r   N)rj   )__name__
__module____qualname__r   r   r   r   r   r   rE   rI   rJ   npndarrayri   rY   boolrn   rm   r    r   r   r      s            t        6.D . . . .T    % % %1 1 1! ! !*' ' 'BJ     C $      r    r   c                       e Zd ZdS )TorchInferErrorN)ro   rp   rq   rm   r    r   rv   rv      s        Dr    rv   )pathlibr   rf   rr   r@   	omegaconfr   !networks.architectures.base_modelr   utils.download_filer   r   	utils.logr	   utils.utilsr
   baser   r   __file__rX   parentrW   r7   r   	Exceptionrv   rm   r    r   <module>r      s=                    9 9 9 9 9 9 A A A A A A A A             ( ( ( ( ( ( ( (4>>!!##*1j(+== i i i i i i i iX	 	 	 	 	i 	 	 	 	 	r    