
    fPi                     N    d dl Z d dlmZ d dlZd Zd Zdej        j        fdZdS )    N)abcc                    fdg d}d}t          |           D ]Z\  }}|j        t          j        j        k    rIt          |t          |                    D ]*}|j         d| }|dz  }||         }	| ||	          z  }+i|j        t          j        j        k    s4|j        t          j        j	        k    s|j        t          j        j
        k    r_|j        }d }	||z  }d}
|t          |          k     r||         	||         }	n||v r||         
||         }	d}
 ||	          }|
r||z  }|j        t          j        j        k    r*|                                D ]\  }}	|vr ||	           \S )Nc                 \   |dS d}t          |t          j                  r+t          |          D ]\  }}| |  d| |          z  }|S t          |t          j                  r0|                                D ]\  }}| |  d| |          z  }|S                     |            dS )z;Returns number of expanded inputs that _add_input processedNr   _   )
isinstancer   Sequence	enumerateMappingitemsappend)nameinputnum_expanded_non_none_inputsivalkey
_add_inputinput_namess         |/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/onnxruntime/tools/pytorch_export_helpers.pyr   z1_parse_inputs_for_onnx_export.<locals>._add_input   s     =1'($eS\** 	0 $E** O O3 -

d==Q==#0N0NN,, 0/s{++ 	0 "KKMM Q QS,

d??S??C0P0PP,, 0/ 	4    q    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&E * *"	?7#4#CCC	3v;;77 Q Q).EE1CEE"a'"Vn7::dC;P;PP77	Q  G$5$EEE#w'8'NNN#w'8'EEE #'DC++I M3v;;&&6)+<+HY'F4L$<Tl %1;D#1F1F. ^7;]]7!W%6%BBB#\\^^ * *	c{**JtS)))r   c                     d d fd|D             }|fd| D             z  }s|                     i            t          |          S )z5Flatten args and kwargs in a single tuple of tensors.c                 H    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{{sD%000r   c                 *    t          j        |           S r0   )torchtensorr5   s    r   	to_tensorz(_flatten_module_input.<locals>.to_tensor_   s    |E"""r   c                 @    g | ]} |          r |          n|S  r=   ).0argr7   r;   s     r   
<listcomp>z)_flatten_module_input.<locals>.<listcomp>b   s6    
M
M
M..s33<99S>>>
M
M
Mr   c                 l    g | ]0}|v  |                   r |                   n|         1S r=   r=   )r>   r   r7   r$   r;   s     r   r@   z)_flatten_module_input.<locals>.<listcomp>c   sX       Y]jnrxjxjx#4#4VD\#B#BT		&,tjxjxjxr   )r   tuple)namesargsr$   retr7   r;   s     ` @@r   _flatten_module_inputrF   X   s    1 1 1# # # N
M
M
M
M
M
M
MC      af   C  

2::r   modulec                     t          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-   rF   )rG   r#   r$   module_parametersr   inputs_as_tuples         r   infer_input_inforO   o   sT       )&.99DKKMM/0A66RRK+KHHO''r   )	r   collectionsr   r9   r-   rF   nnModulerO   r=   r   r   <module>rS      sv           K K K\  .(UX_ ( ( ( ( ( (r   