
    wi                         d dl Z d dlmZ d dlmZmZmZmZmZ d dl	m
Z
mZ ddlmZ  G d de          Z G d	 d
          ZdS )    N)Enum)AnyDictListSequenceTuple)get_available_providers
get_device   )loggerc                       e Zd ZdZdZdZdZdS )EPCPUExecutionProviderCUDAExecutionProviderDmlExecutionProviderCANNExecutionProviderN)__name__
__module____qualname__CPU_EPCUDA_EPDIRECTML_EPCANN_EP     /var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/rapidocr/inference_engine/onnxruntime/provider_config.pyr   r      s"        #F%G(K%GGGr   r   c                   &   e Zd Zdeeef         fdZdeeeeeef         f                  fdZ	deeef         fdZ
deeef         fdZdeeef         fdZdeeef         fdZd	ee         fd
ZdefdZdefdZdefdZdee         fdZdS )ProviderConfig
engine_cfgc                     t                      | _        | j        d         | _        |                    dd          | _        |                    dd          | _        |                    dd          | _        || _        d S )Nr   use_cudaFuse_dmluse_cann)r	   had_providersdefault_providergetcfg_use_cudacfg_use_dmlcfg_use_canncfg)selfr   s     r   __init__zProviderConfig.__init__   sm    (?(A(A $ 21 5&NN:u==%>>)U;;&NN:u==r   returnc                 p   t           j        j        |                                 fg}|                                 r9|                    dt           j        j        |                                 f           |                                 rMt          j
        d           |                    dt           j        j        |                                 f           |                                 rMt          j
        d           |                    dt           j        j        |                                 f           |S )Nr   zEWindows 10 or above detected, try to use DirectML as primary providerz)Try to use CANNExecutionProvider to infer)r   r   value
cpu_ep_cfgis_cuda_availableinsertr   cuda_ep_cfgis_dml_availabler   infor   
dml_ep_cfgis_cann_availabler   cann_ep_cfg)r+   resultss     r   get_ep_listzProviderConfig.get_ep_list   s   IOT__%6%678!!## 	FNN1rz/1A1A1C1CDEEE  "" 	IKW   NN1r~3T__5F5FGHHH!!## 	FKCDDDNN1rz/1A1A1C1CDEEEr   c                 4    t          | j        j                  S N)dictr*   r0   r+   s    r   r0   zProviderConfig.cpu_ep_cfg1   s    DH'(((r   c                 4    t          | j        j                  S r<   )r=   r*   r3   r>   s    r   r3   zProviderConfig.cuda_ep_cfg4       DH()))r   c                     | j         j        | j         j        S |                                 r|                                 S |                                 S r<   )r*   	dm_ep_cfgr1   r3   r0   r>   s    r   r6   zProviderConfig.dml_ep_cfg7   sN    8)8%%!!## 	&##%%%   r   c                 4    t          | j        j                  S r<   )r=   r*   r8   r>   s    r   r8   zProviderConfig.cann_ep_cfg?   r@   r   session_providersc                 l   |st          d          |d         }t          j        | j        t          j        | j        t          j        | j        i}|                                D ]P\  }} |            rA||j	        k    r6t          j        |j	         d| d           t          j        d|            Qd S )NzSession Providers is emptyr   zT is available, but the inference part is automatically shifted to be executed under z. zThe available lists are )
ValueErrorr   r   r1   r   r4   r   r7   itemsr/   r   warning)r+   rD   first_providerproviders_to_checkep
check_funcs         r   verify_providerszProviderConfig.verify_providersB   s      	;9:::*1- J.ND1J.
 16688 	O 	ONB
z|| O"( : :x  H  H  vD  H  H  H   M:KMMNNN	O 	Or   c                    | j         sdS t          j        j        }t	                      dk    r|| j        v rdS t          j        | d| j         d| j         d           d| dd	d
ddd| dg}| 	                    |           dS )NFGPUT  is not in available providers (). Use  inference by default.zIf you want to use za acceleration, you must do:(For reference only) If you want to use GPU acceleration, you must do:AFirst, uninstall all onnxruntime packages in current environment.zASecond, install onnxruntime-gpu by `pip install onnxruntime-gpu`.zHNote the onnxruntime-gpu version must match your cuda and cudnn version.zdYou can refer this link: https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.htmlThird, ensure zW is in available providers list. e.g. ['CUDAExecutionProvider', 'CPUExecutionProvider'])
r'   r   r   r/   r
   r$   r   rH   r%   	print_log)r+   r   install_instructionss      r   r1   z ProviderConfig.is_cuda_availableU   s      	5*"<<5  W0B%B%B4  A  A8J  A  ASWSh  A  A  A	
 	
 	
U' U U UOOVr}W}}} 
 	+,,,ur   c                 D   | j         sdS t          j                    }|dk    r"t          j        d| d| j         d           dS t          j                                        d          d         }|                                rt          |          nd}|d	k     r"t          j        d
| d| j         d           dS t          j        j        }|| j        v rdS t          j        | d| j         d| j         d           dddd| dg}|                     |           dS )NFWindowsz<DirectML is only supported in Windows OS. The current OS is z. Use rR   .r   iG  z`DirectML is only supported in Windows 10 Build 18362 and above OS. The current Windows Build is TrP   rQ   z6If you want to use DirectML acceleration, you must do:rS   zJSecond, install onnxruntime-directml by `pip install onnxruntime-directml`rT   zV is in available providers list. e.g. ['DmlExecutionProvider', 'CPUExecutionProvider'])r(   platformsystemr   rH   r%   versionsplitisdigitintr   r   r/   r$   rU   )r+   cur_oswindow_build_number_strwindow_build_numberDML_EPrV   s         r   r4   zProviderConfig.is_dml_availablel   s    	5""YN Kv  K  K]a]r  K  K  K   5"*"2"4"4":":3"?"?"C,C,K,K,M,MTC'(((ST 	 &&N |  tG  |  |  OS  Od  |  |  |   5%T'''4t7IRVRg	
 	
 	
 EOX{V{{{	 
 	+,,,ur   c                     | j         sdS t          j        j        }|| j        v rdS t          j        | d| j         d| j         d           dddd	d
| dg}|                     |           dS )NFTrP   rQ   rR   z2If you want to use CANN acceleration, you must do:z>First, ensure you have installed Huawei Ascend software stack.zOSecond, install onnxruntime with CANN support by following the instructions at:za	https://onnxruntime.ai/docs/execution-providers/community-maintained/CANN-ExecutionProvider.htmlrT   zW is in available providers list. e.g. ['CANNExecutionProvider', 'CPUExecutionProvider'])	r)   r   r   r/   r$   r   rH   r%   rU   )r+   r   rV   s      r   r7   z ProviderConfig.is_cann_available   s      	5*"d(((4  A  A8J  A  ASWSh  A  A  A	
 	
 	
 AL]p}W}}} 
 	+,,,ur   log_listc                 8    |D ]}t          j        |           d S r<   )r   r5   )r+   rf   log_infos      r   rU   zProviderConfig.print_log   s.      	" 	"HK!!!!	" 	"r   N)r   r   r   r   strr   r,   r   r   r:   r0   r3   r6   r8   r   rM   boolr1   r4   r7   rU   r   r   r   r   r      s       4S>    T%T#s(^(;"<=    $)DcN ) ) ) )*T#s(^ * * * *!DcN ! ! ! !*T#s(^ * * * *O(3- O O O O&4    .#$ # # # #J4    *"$s) " " " " " "r   r   )r[   enumr   typingr   r   r   r   r   onnxruntimer	   r
   	utils.logr   r   r   r   r   r   <module>ro      s           3 3 3 3 3 3 3 3 3 3 3 3 3 3 ; ; ; ; ; ; ; ;      & & & & & & & &T" T" T" T" T" T" T" T" T" T"r   