a
    h                     @   s   d dl mZmZmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZmZmZ G dd dZG dd dZG dd dZG d	d
 d
ZdS )    )AnyOptionalUnion)
AnnotationArgument	ArgumentsBaseOperatorNameBaseTyBaseTypeCustomClassTypeFunctionSchemaListTypeOperatorNameReturnc                   @   sF   e Zd ZeejeejeejeejiZe	e
eeeef dddZdS )TypeGen)objreturnc                 C   s  dd l }t| |jjr ttjS t| |jr6ttjS t| |jrLttjS t| |jrbttjS t| |j	r~t
|   S t| ttfrt| dksJ dd | D }tt|dkrtd| dt|d t| S t| }|tjv rtd| ttj| S )Nr   c                 S   s   g | ]}t |qS  )r   from_example).0xr   r   G/var/www/auris/lib/python3.9/site-packages/torchgen/gen_schema_utils.py
<listcomp>/       z(TypeGen.from_example.<locals>.<listcomp>   zFCannot generate schema for a sequence of args of heterogeneous types: zc. Consider unpacking the argument and give proper names to them if possible instead of using *args.zunsupported type )torch
isinstanceZfxZGraphModuler
   r	   ZTensorZSymIntZSymBoolZScriptObjectr   _typenamelisttuplelensetRuntimeErrorr   typer   convert_to_base_ty)r   r   Zall_base_tystpr   r   r   r      s.    




zTypeGen.from_exampleN)__name__
__module____qualname__intr	   floatstrboolr%   staticmethodr   r   r
   r   r   r   r   r   r   r   r      s   r   c                   @   s,   e Zd Zeee eee edddZ	dS )	ReturnGen)r   r   
annotationr   c                 C   s   t | t||S N)r   r   r   )r   r   r0   r   r   r   r   >   s    zReturnGen.from_exampleN)
r'   r(   r)   r.   r   r,   r   r   r   r   r   r   r   r   r/   =   s   r/   c                   @   s.   e Zd Zeeeee ee edddZ	dS )ArgumentGen)r   r   defaultr0   r   c                 C   s   t | t|||dS )N)r3   r0   )r   r   r   )r   r   r3   r0   r   r   r   r   F   s    zArgumentGen.from_exampleN)
r'   r(   r)   r.   r,   r   r   r   r   r   r   r   r   r   r2   E   s   r2   c                   @   s<   e Zd Zeeeeeef df eedf edddZdS )FunctionSchemaGen.)op_nameexample_inputsexample_outputsr   c              	   C   sz   g }|D ]\}}| t||d d  qtt d t|t d t t }tdd |D }tt| dddd} t| ||S )Nc                 s   s   | ]}t d |d V  qd S r1   )r/   r   )r   outr   r   r   	<genexpr>]   s   z1FunctionSchemaGen.from_example.<locals>.<genexpr>F )appendr2   r   r   r    r   r   r   )r5   r6   r7   argsr   inp	argumentsreturnsr   r   r   r   P   s    zFunctionSchemaGen.from_exampleN)	r'   r(   r)   r.   r,   r    r   r   r   r   r   r   r   r4   O   s   
r4   N)typingr   r   r   Ztorchgen.modelr   r   r   r   r	   r
   r   r   r   r   r   r   r/   r2   r4   r   r   r   r   <module>   s
   4&
