ó
    ñZjc  ã                   óz   • S SK r S SKJr  S SKJrJrJrJrJr  S SK	J
r
Jr  SSKJr   " S S\5      r " S	 S
5      rg)é    N)ÚEnum)ÚAnyÚDictÚListÚSequenceÚTuple)Úget_available_providersÚ
get_deviceé   )Úloggerc                   ó(   • \ rS rSrSrSrSrSrSrSr	g)	ÚEPé   ÚCPUExecutionProviderÚCUDAExecutionProviderÚDmlExecutionProviderÚCANNExecutionProviderÚCoreMLExecutionProvider© N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚCPU_EPÚCUDA_EPÚDIRECTML_EPÚCANN_EPÚ	COREML_EPÚ__static_attributes__r   ó    Úr/home/mande/repo/quber/.venv/lib/python3.13/site-packages/rapidocr/inference_engine/onnxruntime/provider_config.pyr   r      s   † Ø#€FØ%€GØ(€KØ%€GØ)ƒIr    r   c                   ó,  • \ rS rSrS\\\4   4S jrS\\	\\\\4   4      4S jr
S\\\4   4S jrS\\\4   4S jrS\\\4   4S jrS\\\4   4S	 jrS\\\4   4S
 jrS\\   4S jrS\4S jrS\4S jrS\4S jrS\4S jrS\\   4S jrSrg)ÚProviderConfigé   Ú
engine_cfgc                 ó  • [        5       U l        U R                  S   U l        UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l        Xl        g )Nr   Úuse_cudaFÚuse_dmlÚuse_cannÚ
use_coreml)	r	   Úhad_providersÚdefault_providerÚgetÚcfg_use_cudaÚcfg_use_dmlÚcfg_use_cannÚcfg_use_coremlÚcfg)Úselfr%   s     r!   Ú__init__ÚProviderConfig.__init__   sq   € Ü(?Ó(AˆÔØ $× 2Ñ 2°1Ñ 5ˆÔà&ŸN™N¨:°uÓ=ˆÔØ%Ÿ>™>¨)°UÓ;ˆÔØ&ŸN™N¨:°uÓ=ˆÔØ(Ÿn™n¨\¸5ÓAˆÔà�r    Úreturnc                 óX  • [         R                  R                  U R                  5       4/nU R	                  5       (       a:  UR                  S[         R                  R                  U R                  5       45        U R                  5       (       aP  [        R                  " S5        UR                  S[         R                  R                  U R                  5       45        U R                  5       (       aP  [        R                  " S5        UR                  S[         R                  R                  U R                  5       45        U R!                  5       (       aP  [        R                  " S5        UR                  S[         R"                  R                  U R%                  5       45        U$ )Nr   zEWindows 10 or above detected, try to use DirectML as primary providerz)Try to use CANNExecutionProvider to inferz9macOS/iOS detected, try to use CoreML as primary provider)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Úis_coreml_availabler   Úcoreml_ep_cfg)r3   Úresultss     r!   Úget_ep_listÚProviderConfig.get_ep_list!   s   € Ü—I‘I—O‘O T§_¡_Ó%6Ð7Ð8ˆà×!Ñ!×#Ñ#Ø�N‰N˜1œrŸz™z×/Ñ/°×1AÑ1AÓ1CÐDÔEà× Ñ ×"Ñ"Ü�KŠKØWôð �N‰N˜1œrŸ~™~×3Ñ3°T·_±_Ó5FÐGÔHà×!Ñ!×#Ñ#Ü�KŠKÐCÔDØ�N‰N˜1œrŸz™z×/Ñ/°×1AÑ1AÓ1CÐDÔEà×#Ñ#×%Ñ%Ü�KŠKÐSÔTØ�N‰N˜1œrŸ|™|×1Ñ1°4×3EÑ3EÓ3GÐHÔIàˆr    c                 ó@   • [        U R                  R                  5      $ ©N)Údictr2   r9   ©r3   s    r!   r9   ÚProviderConfig.cpu_ep_cfg7   s   € Ü�D—H‘H×'Ñ'Ó(Ð(r    c                 ó@   • [        U R                  R                  5      $ rH   )rI   r2   r<   rJ   s    r!   r<   ÚProviderConfig.cuda_ep_cfg:   ó   € Ü�D—H‘H×(Ñ(Ó)Ð)r    c                 óÆ   • U R                   R                  b  U R                   R                  $ U R                  5       (       a  U R                  5       $ U R	                  5       $ rH   )r2   r?   r:   r<   r9   rJ   s    r!   r?   ÚProviderConfig.dml_ep_cfg=   sM   € Ø�8‰8×ÑÑ*Ø—8‘8×&Ñ&Ð&à×!Ñ!×#Ñ#Ø×#Ñ#Ó%Ð%Ø�‰Ó Ð r    c                 ó@   • [        U R                  R                  5      $ rH   )rI   r2   rA   rJ   s    r!   rA   ÚProviderConfig.cann_ep_cfgE   rN   r    c                 ó@   • [        U R                  R                  5      $ rH   )rI   r2   rC   rJ   s    r!   rC   ÚProviderConfig.coreml_ep_cfgH   s   € Ü�D—H‘H×*Ñ*Ó+Ð+r    Úsession_providersc                 óô  • U(       d  [        S5      eUS   n[        R                  U R                  [        R                  U R
                  [        R                  U R                  [        R                  U R                  0nUR                  5        Hc  u  pEU" 5       (       d  M  X$R                  :w  d  M$  [        R                  " UR                   SU S35        [        R                  " SU 35        Me     g )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   r:   r   r=   r   r@   r   rB   Úitemsr8   r   Úwarning)r3   rU   Úfirst_providerÚproviders_to_checkÚepÚ
check_funcs         r!   Úverify_providersÚProviderConfig.verify_providersK   sÓ   € Þ ÜÐ9Ó:Ð:à*¨1Ñ-ˆô �J‰J˜×.Ñ.Ü�N‰N˜D×1Ñ1Ü�J‰J˜×.Ñ.Ü�L‰L˜$×2Ñ2ð	
Ðð 1×6Ñ6Ö8‰NˆBÙ�|‹| ·(±(Õ :Ü—’Ø—x‘x�jÐ tð  vDð  uEð  EGð  Hôô —’Ð!9Ð:KÐ9LÐMÖNò 9r    c                 ó@  • U R                   (       d  g[        R                  R                  n[	        5       S:X  a  XR
                  ;   a  g[        R                  " U SU R
                   SU R                   S35        SU S3S	S
SSSU S3/nU R                  U5        g)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   r8   r
   r+   r   rY   r,   Ú	print_log)r3   r   Úinstall_instructionss      r!   r:   Ú ProviderConfig.is_cuda_available_   s³   € Ø× × Øä—*‘*×"Ñ"ˆÜ‹<˜5Ó  W×0BÑ0BÓ%BØä�ŠØˆiÐ7¸×8JÑ8JÐ7KÈ7ÐSW×ShÑShÐRiÐið  Aô	
ð " ' ð +Uð UàOØOØVØrØ˜W˜IÐ%|Ð}ð 
Ðð 	�‰Ð+Ô,Ør    c                 óŒ  • U R                   (       d  g[        R                  " 5       nUS:w  a(  [        R                  " SU SU R
                   S35        g[        R                  " 5       R                  S5      S   nUR                  5       (       a  [        U5      OSnUS	:  a(  [        R                  " S
U SU R
                   S35        g[        R                  R                  nX@R                  ;   a  g[        R                  " U SU R                   SU R
                   S35        SSSSU S3/nU R                  U5        g)NFÚWindowsz<DirectML is only supported in Windows OS. The current OS is ú. Use rd   Ú.éÿÿÿÿr   iºG  z`DirectML is only supported in Windows 10 Build 18362 and above OS. The current Windows Build is Trb   rc   z6If you want to use DirectML acceleration, you must do:re   zJSecond, install onnxruntime-directml by `pip install onnxruntime-directml`rf   zV is in available providers list. e.g. ['DmlExecutionProvider', 'CPUExecutionProvider'])r/   ÚplatformÚsystemr   rY   r,   ÚversionÚsplitÚisdigitÚintr   r   r8   r+   rg   )r3   Úcur_osÚwindow_build_number_strÚwindow_build_numberÚDML_EPrh   s         r!   r=   ÚProviderConfig.is_dml_availablev   st  € Ø××Øä—’Ó"ˆØ�YÓÜ�NŠNØNÈvÈhÐV\Ð]a×]rÑ]rÐ\sð  tJð  Kôð ä"*×"2Ò"2Ó"4×":Ñ":¸3Ó"?ÀÑ"CÐà,C×,KÑ,K×,MÑ,MŒCÐ'Ô(ÐSTð 	ð  Ó&Ü�NŠNØrð  tGð  sHð  HNð  OS÷  Odñ  Odð  Neð  e{ð  |ôð ä—‘×%Ñ%ˆØ×'Ñ'Ó'Øä�ŠØˆhÐ6°t×7IÑ7IÐ6JÈ'ÐRV×RgÑRgÐQhÐh~Ðô	
ð EØOØXØ˜V˜HÐ$zÐ{ð	 
Ðð 	�‰Ð+Ô,Ør    c                 ó  • U R                   (       d  g[        R                  R                  nXR                  ;   a  g[
        R                  " U SU R                   SU R                   S35        SSSS	S
U S3/nU R                  U5        g)NFTrb   rc   rd   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.htmlrf   zW is in available providers list. e.g. ['CANNExecutionProvider', 'CPUExecutionProvider'])	r0   r   r   r8   r+   r   rY   r,   rg   )r3   r   rh   s      r!   r@   Ú ProviderConfig.is_cann_available›   s˜   € Ø× × Øä—*‘*×"Ñ"ˆØ×(Ñ(Ó(Øä�ŠØˆiÐ7¸×8JÑ8JÐ7KÈ7ÐSW×ShÑShÐRiÐið  Aô	
ð AØLØ]ØpØ˜W˜IÐ%|Ð}ð 
Ðð 	�‰Ð+Ô,Ør    c                 óš  • U R                   (       d  g[        R                  " 5       nUS:w  a(  [        R                  " SU SU R
                   S35        g[        R                  R                  nX R                  ;   a  g[        R                  " U SU R                   SU R
                   S35        S	S
U S3/nU R                  U5        g)NFÚDarwinz9CoreML is only supported in macOS/iOS. The current OS is rl   rd   Trb   rc   zCThe standard onnxruntime package for macOS includes CoreML support.zEnsure zY is in available providers list. e.g. ['CoreMLExecutionProvider', 'CPUExecutionProvider'])r1   ro   rp   r   rY   r,   r   r   r8   r+   rg   )r3   ru   r   rh   s       r!   rB   Ú"ProviderConfig.is_coreml_available°   sÛ   € Ø×"×"Øä—’Ó"ˆØ�XÓÜ�NŠNØKÈFÈ8ÐSYÐZ^×ZoÑZoÐYpð  qGð  Hôð ä—L‘L×&Ñ&ˆ	Ø×*Ñ*Ó*Øä�ŠØˆkÐ9¸$×:LÑ:LÐ9MÈWÐUY×UjÑUjÐTkð  lBð  Cô	
ð RØ�i�[Ð yÐzð 
Ðð 	�‰Ð+Ô,Ør    Úlog_listc                 óB   • U H  n[         R                  " U5        M     g rH   )r   r>   )r3   r   Úlog_infos      r!   rg   ÚProviderConfig.print_logÉ   s   € Û ˆHÜ�KŠK˜Ö!ò !r    )r2   r0   r1   r.   r/   r,   r+   N)r   r   r   r   r   Ústrr   r4   r   r   rE   r9   r<   r?   rA   rC   r   r^   Úboolr:   r=   r@   rB   rg   r   r   r    r!   r#   r#      sð   † ð	 4¨¨S¨¡>ô 	ð˜T %¨¨T°#°s°(©^Ð(;Ñ"<Ñ=ô ð,)˜D  c ™Nô )ð*˜T # s (™^ô *ð!˜D  c ™Nô !ð*˜T # s (™^ô *ð,˜t C¨ H™~ô ,ðO°(¸3±-ô Oð( 4ô ð.# $ô #ðJ 4ô ð* Tô ð2" $ s¡)÷ "r    r#   )ro   Úenumr   Útypingr   r   r   r   r   Úonnxruntimer	   r
   Ú	utils.logr   r   r#   r   r    r!   Ú<module>r‰      s1   ðó Ý ß 3Õ 3ç ;å ô*ˆô *÷v"ò v"r    