Ë
    cQêjô  ã                  ó@   — d dl mZ d dlZd dlmZ d dlZd„ Zd„ Zdd„Zy)é    )ÚannotationsN)Úabcc                óJ  ‡‡— ˆˆfd„Šg Šd}d}t        | «      D �]…  \  }}|j                  t        j                  j                  k(  rBt        |t        |«      «      D ])  }|j                  › d|› �}|dz  }||   }	| ‰||	«      z  }Œ+ Œp|j                  t        j                  j                  k(  sN|j                  t        j                  j                  k(  s'|j                  t        j                  j                  k(  rR|j                  }d }	||z  }d}
|t        |«      k  r||   �||   }	n||v r||   �||   }	d}
 ‰||	«      }|
s�Œ0||z  }�Œ7|j                  t        j                  j                  k(  s�Œ`|j                  «       D ]  \  }}	|‰vsŒ ‰||	«       Œ �Œˆ ‰S )Nc                ó<  •— |€yd}t        |t        j                  «      r&t        |«      D ]  \  }}| ‰| › d|› �|«      z  }Œ |S t        |t        j                  «      r+|j                  «       D ]  \  }}| ‰| › d|› �|«      z  }Œ |S ‰j                  | «       y)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         €€úm/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/onnxruntime/tools/pytorch_export_helpers.pyr   z1_parse_inputs_for_onnx_export.<locals>._add_input   sÇ   ø€ ð ˆ=àà'(Ð$Ü�eœSŸ\™\Ô*ô $ EÓ*ò O‘��3ð -±
¸d¸VÀ1ÀQÀC¸=È#Ó0NÑNÑ,ðOð 0Ð/Ü˜œsŸ{™{Ô+ð "ŸK™K›Mò Q‘��SØ,±
¸d¸VÀ1ÀSÀE¸?ÈCÓ0PÑPÑ,ðQð
 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ä 	¬3¨v«;Ó7ò Q�Ø)×.Ñ.Ð/¨qÐ1CÐ0DÐE�Ø" aÑ'Ð"Ø˜V‘n�Ø7¹:ÀdÈCÓ;PÑPÑ7ñ	Qð × Ñ ¤G×$5Ñ$5×$EÑ$EÒEØ×#Ñ#¤w×'8Ñ'8×'NÑ'NÒNØ×#Ñ#¤w×'8Ñ'8×'EÑ'EÒEð #×'Ñ'ˆDØˆCØÐ+Ñ+ˆIØ ˆMØœ3˜v›;Ò&¨6°)Ñ+<Ð+HØ˜YÑ'‘Ø˜‘ F¨4¡LÐ$<Ø˜T‘l�Ø %�Ù1;¸DÀ#Ó1FÐ.ÛØ7Ð;]Ñ]Ò7Ø×!Ñ!¤W×%6Ñ%6×%BÑ%BÔBà#Ÿ\™\›^ò *‘	��cØ˜{Ò*Ù˜t SÕ)ò*ð9*ð@ Ðr   c                óþ   — d„ }d„ }|D �cg c]  } ||«      r ||«      n|‘Œ }}|| D �cg c]"  }||v sŒ |||   «      r |||   «      n||   ‘Œ$ c}z  }|s|j                  i «       t        |«      S c c}w c c}w )z5Flatten args and kwargs in a single tuple of tensors.c                ó:   — t        | «      t        t        t        hv S ©N)ÚtypeÚintÚboolÚfloat©Úvalues    r   Úis_primitive_typez0_flatten_module_input.<locals>.is_primitive_type^   s   € Ü�E‹{œs¤D¬%Ð0Ð0Ð0r   c                ó,   — t        j                  | «      S r1   )ÚtorchÚtensorr6   s    r   Ú	to_tensorz(_flatten_module_input.<locals>.to_tensora   s   € Ü�|‰|˜EÓ"Ð"r   )r   Útuple)ÚnamesÚargsr%   r8   r<   ÚargÚretr   s           r   Ú_flatten_module_inputrB   Z   s�   € ò1ò#ð IMÖ
MÀÑ.¨sÔ3‰9�SŒ>¸Ñ<Ð
M€CÐ
MØØaföØY]ÐjnÐrxÒjxÑ#4°V¸D±\Ô#B‰	�&˜‘,ÔÈÈtÉÑTòñ €Cñ Ø�
‰
�2Œä�‹:Ðùò Nùòs   ‹A5«	A:µA:c                ó¬   — t        j                  | j                  «      j                  j	                  «       }t        |||«      }t        |||«      }||fS )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.   rB   )Úmoduler$   r%   Úmodule_parametersr   Úinputs_as_tuples         r   Úinfer_input_inforK   q   sP   € ô   ×)Ñ)¨&¯.©.Ó9×DÑD×KÑKÓMÐÜ/Ð0AÀ6È6ÓR€KÜ+¨K¸ÀÓH€Oà˜Ð'Ð'r   )rH   ztorch.nn.Module)	Ú
__future__r   r   Úcollectionsr   r:   r.   rB   rK   © r   r   ú<module>rO      s$   ðõ #ã Ý ã òKò\ô.(r   