
    =pj9#                         S r SSKJr  SSKJr  SSKJrJrJrJ	r	J
r
Jr  SSK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  SSKJr  SS/r " S S\5      r\" S5       " S S\5      5       rg)zONNX Runtime runner.    )PathLike)Path)AnyDictListOptionalSequenceUnionN)	BaseModel
ConfigDictmodel_validator   )class_requires_deps   )get_model_paths   )InferenceRunner)sort_inputsONNXRuntimeRunnerConfigONNXRuntimeRunnerc                   b   \ rS rSr% Sr\" SS9rSr\\	   \
S'   Sr\\   \
S'   Sr\\\	      \
S'   Sr\\\\\	\4      \\	\4   4      \
S	'   Sr\\   \
S
'   Sr\\   \
S'   Sr\\   \
S'   Sr\\	   \
S'   Sr\\   \
S'   Sr\\   \
S'   Sr\\   \
S'   Sr\\\	\4      \
S'   \" SS9S 5       rSrg)r       z(Engine config for onnxruntime inference.forbid)extraNdevice_type	device_id	providersprovider_optionsgraph_optimization_levelintra_op_num_threadsinter_op_num_threadsexecution_modelog_severity_levelenable_mem_patternenable_cpu_mem_arenasession_optionsafter)modec                 l   U R                   bV  [        U R                  [        5      (       a7  [	        U R                   5      [	        U R                  5      :w  a  [        S5      eU R                   bC  [        U R                  [        5      (       a$  [	        U R                   5      S:w  a  [        S5      eU $ )Nz;Length mismatch between `providers` and `provider_options`.r   zQWhen `provider_options` is a dict, `providers` must contain exactly one provider.)r   
isinstancer   listlen
ValueErrordictselfs    o/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/paddlex/inference/models/runners/onnxruntime_runner.pycheck_provider_options.ONNXRuntimeRunnerConfig.check_provider_options2   s     NN&400$77DNN#s4+@+@'AAM  NN&400$77DNN#q(c       )__name__
__module____qualname____firstlineno____doc__r   model_configr   r   str__annotations__r   intr   r   r   r
   r   r   r   r    r!   r"   r#   r$   boolr%   r&   r   r2   __static_attributes__r5   r4   r1   r   r       s   2H-L!%K#%#Ix}#%)IxS	")NRhuT$sCx.%94S>%IJKR.2hsm2*.(3-.*.(3-.$(NHSM((,,)--+/(4./04OXd38n-4'" #r4   onnxruntimec            
         ^  \ rS rSrSr SS\\\4   S\S\\	\\
4      SS4U 4S jjjr SS	\\\R                     \R                  S4   S
\
S\\R                     4S jjrSS jrS rS\4S jrS rS rS rS rS rS rSrU =r$ )r   G   zONNX Runtime inference runner.N	model_dirmodel_file_prefixconfigreturnc                   > SS K n[        TU ]	  5         [        U5      U l        X l        [        R                  U=(       d    0 5      R                  SS9U l	        X@l
        U R                  5       U l        U R                  R                  5        Vs/ s H  oUR                  PM     snU l        U R                  R!                  5        Vs/ s H  oUR                  PM     snU l        g s  snf s  snf )Nr   T)exclude_none)rA   super__init__r   rD   rE   r   model_validate
model_dump_config_ort_create_sessionsession
get_inputsname_input_namesget_outputs_output_names)r0   rD   rE   rF   ortmeta	__class__s         r1   rK   ONNXRuntimeRunner.__init__K   s     	"i!2.==flKVV W 
 	++-37<<3J3J3LM3L4YY3LM48LL4L4L4NO4NDii4NO NOs   C(
C-xkwargsc                    Uc  SU;   a  US   nUc  [        S5      e[        U[        R                  5      (       a  U/n[	        U R
                  5      [	        U5      :w  a-  [        S[	        U R
                  5       S[	        U5       35      e[        XR
                  5      n[        U R
                  U5       VVs0 s H  u  p4U[        R                  " U5      _M     nnnU R                  R                  U R                  U5      $ s  snnf )Nr[   z)`ONNXRuntimeRunner.__call__` requires `x`z/The number of inputs does not match the model: z vs )	TypeErrorr*   npndarrayr,   rT   r-   r   zipascontiguousarrayrQ   runrV   )r0   r[   r\   rS   input_feedss         r1   __call__ONNXRuntimeRunner.__call__^   s    
 9sA9GHHa$$At  !SV+At(()*$s1vh8 
 ,,- !$D$5$5q 9
 9 "&&v.. 9 	 
 || 2 2E::	
s   <#Dc                     g Nr5   r/   s    r1   closeONNXRuntimeRunner.closew   s    r4   c                     U R                  5       nU R                  5       nU R                  5       u  p4U R                  R	                  [        U5      UUUS9$ )N)sess_optionsr   r   )_get_model_path_build_session_options_resolve_providersrO   InferenceSessionr<   )r0   
model_pathr&   r   r   s        r1   rP   !ONNXRuntimeRunner._create_sessionz   s[    ))+
557&*&=&=&?#	yy))
O(-	 * 
 	
r4   c                 n    [        U R                  U R                  5      nSU;  a  [        S5      eUS   $ )NonnxzNo valid ONNX model found)r   rD   rE   RuntimeError)r0   model_pathss     r1   rn   !ONNXRuntimeRunner._get_model_path   s7    %dnnd6L6LM$:;;6""r4   c                 D   U R                   R                  5       nU R                  R                  S5      nUb   U R                   R	                  U5      Ul        U R                  R                  S5      nUb  U R                  U5      Ul        S H/  nU R                  R                  U5      nUc  M#  [        XU5        M1     U R                  R                  S0 5      R                  5        H0  u  pE[        X5      (       d  [        SU< 35      e[        XU5        M2     U$ )Nr   r"   )r    r!   r#   r$   r%   r&   z%Invalid ONNX Runtime session option: )rO   SessionOptionsrN   getGraphOptimizationLevelr   _resolve_execution_moder"   setattritemshasattrr-   )r0   rm   graph_levelr"   keyvalues         r1   ro   (ONNXRuntimeRunner._build_session_options   s   yy//1ll&&'AB"48II4T4T5L1 ))*:;%*.*F*F~*VL'
C LL$$S)E 51
 ,,**+<bAGGIJC<-- #H!PQQLu- J
 r4   c                 0   [        U[        5      (       a  U R                  R                  U5      $ UR	                  5       nUS;   a   U R                  R                  R
                  $ US;   a   U R                  R                  R                  $ [        S5      e)N>   
sequentialort_sequential>   parallelort_parallelzeInvalid `execution_mode`, expected one of 'sequential', 'parallel', 'ORT_SEQUENTIAL', 'ORT_PARALLEL'.)r*   r>   rO   ExecutionModelowerORT_SEQUENTIALORT_PARALLELr-   )r0   r"   r(   s      r1   r}   )ONNXRuntimeRunner._resolve_execution_mode   s    nc**99**>::##%3399**999//99**777J
 	
r4   c                 Z   U R                   R                  S5      nU R                   R                  S5      nUc6  U R                  5       u  pUc  UnO6[        U[        5      (       a  U/USS  QnO[        U[        5      (       a  U/nU R                  X5      nU R                  U5        X4$ )Nr   r   r   )rN   r{   _default_providersr*   r.    _inject_default_provider_options_validate_providers)r0   r   r   default_provider_optionss       r1   rp   $ONNXRuntimeRunner._resolve_providers   s    LL$$[1	<<++,>?262I2I2K/I'#; ,d33$4#T7OPQPR7S#T ($// 01@@
 	  +**r4   c                     U R                   R                  S5      =(       d    SR                  5       nU R                   R                  S5      nUS:X  a  S/S 4$ US:X  a  Uc  SnSS/SU00 /4$ [        S5      e)	Nr   cpur   CPUExecutionProvidergpur   CUDAExecutionProviderzp`engine='onnxruntime'` only supports `device_type` of 'cpu' or 'gpu' unless `providers` is specified explicitly.)rN   r{   r   r-   )r0   r   r   s      r1   r   $ONNXRuntimeRunner._default_providers   s    ||''6?%FFHLL$$[1	%*+T11% 	'& i("-. .
 I
 	
r4   c                     [        U R                  R                  5       5      nU Vs/ s H  o3U;  d  M
  UPM     nnU(       a  [        SU< S[	        U5      < S35      eg s  snf )Nz2Requested ONNX Runtime providers are unavailable: z. Available providers: .)setrO   get_available_providersrv   sorted)r0   r   	availableprovidermissings        r1   r   %ONNXRuntimeRunner._validate_providers   sl    		99;<	,5SI9R8ISDWK P((.y(9'<A?   Ts
   	A"A"c                     Uc  U Vs/ s H  n0 PM     nnO[        U5      nU R                  R                  S5      nUc  U$ [        U5       H  u  pVUS:X  d  M  SU0X%   EX%'   M     U$ s  snf )Nr   r   )r+   rN   r{   	enumerate)r0   r   r   _r   idxr   s          r1   r   2ONNXRuntimeRunner._inject_default_provider_options   s    #,56IqI6#$45LL$$[1	##&y1MC22)&+) % 2    7s   A*)rN   rT   rO   rV   rD   rE   rQ   ri   )rG   N)r6   r7   r8   r9   r:   r
   r<   r   r   r   r   rK   r	   r_   r`   r   rf   rj   rP   r   rn   ro   r}   rp   r   r   r   r@   __classcell__)rY   s   @r1   r   r   G   s    ( ,0	Ph'P P c3h(	P
 
P P* <@;"**%rzz478; ; 
bjj		;2	
# #>
+&
(   r4   )r:   osr   pathlibr   typingr   r   r   r   r	   r
   numpyr_   pydanticr   r   r   
utils.depsr   utils.model_pathsr   inference_runnerr   utilsr   __all__r   r   r5   r4   r1   <module>r      sf       = =  ; ; . / - $&9
:$i $N ]#q  q  $q r4   