
    h                     b    S SK r S SKJr  S SKrS rS rS\R                  R                  4S jrg)    N)abcc                 j  ^^ UU4S jm/ mSnSn[        U 5       GH  u  pVUR                  [        R                  R                  :X  aC  [        U[        U5      5       H(  nUR                   SU 3nUS-  nX   n	UT" X5      -  nM*     Mq  UR                  [        R                  R                  :X  dP  UR                  [        R                  R                  :X  d(  UR                  [        R                  R                  :X  aV  UR                  nS n	XS-  nSn
U[        U5      :  a
  X   b  X   n	OX;   a  X(   b  X(   n	Sn
T" X5      nU
(       a  XK-  nGM<  GM?  UR                  [        R                  R                  :X  d  GMj  UR                  5        H  u  pUT;  d  M  T" X5        M     GM     T$ )Nc                 V  > Uc  gSn[        U[        R                  5      (       a'  [        U5       H  u  p4UT" U  SU 3U5      -  nM     U$ [        U[        R                  5      (       a,  UR                  5        H  u  pTUT" U  SU 3U5      -  nM     U$ TR                  U 5        g)z;Returns number of expanded inputs that _add_input processedr   _   )
isinstancer   Sequence	enumerateMappingitemsappend)nameinputnum_expanded_non_none_inputsivalkey
_add_inputinput_namess         b/var/www/fran/franai/venv/lib/python3.13/site-packages/onnxruntime/tools/pytorch_export_helpers.pyr   1_parse_inputs_for_onnx_export.<locals>._add_input   s     ='($eS\\** $E* -
dV1QC=#0NN, + 0/s{{++ "KKM,
dV1SE?C0PP, *
 0/ 	4      r   r   r   TF)r
   kindinspect	ParameterVAR_POSITIONALrangelenr   POSITIONAL_ONLYPOSITIONAL_OR_KEYWORDKEYWORD_ONLYVAR_KEYWORDr   )all_input_parametersinputskwargsvar_positional_idx'num_expanded_non_none_positional_inputs	input_idxinput_parameterargs_ir   inpis_positional"num_expanded_non_none_inputs_localr   r   s               @@r   _parse_inputs_for_onnx_exportr.   
   s   "H K./+&/0D&E"	7#4#4#C#CC	3v;7)../q1C0DE"a'"n7:d;PP7	 8   G$5$5$E$EE##w'8'8'N'NN##w'8'8'E'EE #''DC+I M3v;&6+<+H'FL$<l %1;D1F.7]7 !!W%6%6%B%BB#\\^	{*t) ,9 'F@ r   c                 $   S nS nU Vs/ s H  oS" U5      (       a  U" U5      OUPM     nnUU  Vs/ s H'  owU;   d  M
  U" X'   5      (       a
  U" X'   5      OX'   PM)     sn-  nU(       d  UR                  0 5        [        U5      $ s  snf s  snf )z5Flatten args and kwargs in a single tuple of tensors.c                 <    [        U 5      [        [        [        1;   $ N)typeintboolfloatvalues    r   is_primitive_type0_flatten_module_input.<locals>.is_primitive_type\   s    E{sD%000r   c                 .    [         R                  " U 5      $ r1   )torchtensorr6   s    r   	to_tensor(_flatten_module_input.<locals>.to_tensor_   s    ||E""r   )r   tuple)namesargsr%   r8   r=   argretr   s           r   _flatten_module_inputrD   X   s    1# IM
M.s339S><C
MafafY]rxjxT#4V\#B#B	&,Taf C 

2: Ns    B	B!Bmodulec                     [         R                  " U R                  5      R                  R	                  5       n[        X1U5      n[        XAU5      nXE4$ )a  
Infer the input names and order from the arguments used to execute a PyTorch module for usage exporting
the model via torch.onnx.export.
Assumes model is on CPU. Use `module.to(torch.device('cpu'))` if it isn't.

Example usage:
input_names, inputs_as_tuple = infer_input_info(module, ...)
torch.onnx.export(module, inputs_as_type, 'model.onnx', input_names=input_names, output_names=[...], ...)

:param module: Module
:param inputs: Positional inputs
:param kwargs: Keyword argument inputs
:return: Tuple of ordered input names and input values. These can be used directly with torch.onnx.export as the
        `input_names` and `inputs` arguments.
)r   	signatureforward
parametersvaluesr.   rD   )rE   r$   r%   module_parametersr   inputs_as_tuples         r   infer_input_inforM   o   sJ       ))&..9DDKKM/0A6RK+KHO''r   )	r   collectionsr   r;   r.   rD   nnModulerM    r   r   <module>rR      s0      K\.(UXX__ (r   