o
    Zh                  
   @   st  U d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlZi i i i i i i di i i i i i i i ddZeeeee	f f ed	< G d
d deZee	df Zdd ZdefddZeddG dd dZi Zeeef ed< e Zee ed< i Zeeee f ed< i Zeeee f ed< deddfddZdd Zd d! Z d"d# Z!d$d% Z"dS )&    N)	dataclassfield)Enum)AnyOptional)
ModuleType)Zcondzdynamic-shapezescape-hatchmapzdynamic-valueoperatorZmutation)assertbuiltinclosurezcontext-managerzcontrol-flowzdata-structurezstandard-libraryzobject-model)torchpython_TAGSc                   @   s   e Zd ZdZdZdZdS )SupportLevelz[
    Indicates at what stage the feature
    used in the example is handled in export.
       r   N)__name__
__module____qualname____doc__	SUPPORTEDZNOT_SUPPORTED_YET r   r   D/var/www/auris/lib/python3.10/site-packages/torch/_export/db/case.pyr   #   s    r   .c                 C   sb   t | tstdt|  t |tstdt| |D ]}t |ts.tdt| qd S )Nz(Expecting args type to be a tuple, got: z)Expecting kwargs type to be a dict, got: z+Expecting kwargs keys to be a string, got: )
isinstancetuple
ValueErrortypedictstr)argskwargskeyr   r   r   check_inputs_type0   s   


r"   tagc                 C   s`   |  d}t}|D ]$}t|ttjd ksJ d| ||v r&|| }q	td|  dd S )N.-z!Tag contains invalid characters: zTag z! is not found in registered tags.)splitr   setstringascii_lowercaser   )r#   partstpartr   r   r   _validate_tag?   s   

r-   T)frozenc                   @   s   e Zd ZU eed< eed< ejjed< eed< e	e
dZe
eef ed< dZee ed< e	edZee ed	< ejZeed
< dZee
eef  ed< dd ZdS )
ExportCaseexample_argsdescriptionmodelname)default_factoryexample_kwargsN
extra_argstagssupport_leveldynamic_shapesc                 C   sh   t | j| j | jd urt | ji  | jD ]}t| qt| jtr)t	| jdkr2t
d| j dd S )Nr   zInvalid description: "")r"   r0   r5   r6   r7   r-   r   r1   r   lenr   )selfr#   r   r   r   __post_init__Y   s   


zExportCase.__post_init__)r   r   r   ArgsType__annotations__r   r   nnModuler   r   r5   r   r6   r   r'   r7   r   r   r8   r9   r=   r   r   r   r   r/   L   s   
 r/   _EXAMPLE_CASES_MODULES_EXAMPLE_CONFLICT_CASES_EXAMPLE_REWRITE_CASEScasereturnc                 C   sH   | j tv r| j tvrt| j  gt| j < t| j  |  dS | t| j < dS )zA
    Registers a user provided ExportCase into example bank.
    N)r3   rB   rD   append)rF   r   r   r   register_db_casek   s   

rI   c                 C   s    t dd| } t dd|  S )Nz(.)([A-Z][a-z]+)z\1_\2z([a-z0-9])([A-Z]))resublower)r3   r   r   r   to_snake_casex   s   rM   c                 C   sd   t | tjjstdd|vr$| jd usJ d|  i |d| ji}tdi i || |dS )Nz.Export case class should be a torch.nn.Module.r1   z9Could not find description or docstring for export case: )r2   r3   r   )r   r   r@   rA   	TypeErrorr   r/   )mr3   configsr   r   r   _make_export_case}   s   rQ   c                         fdd}|S )zK
    Decorator for registering a user provided case into example bank.
    c                    s\    }t | }|tv rtd|d usJ t| |jdd }t| ||}t| |S )Nz6export_case should only be used once per example file.r$   )	inspect	getmodulerC   RuntimeErroraddr   r&   rQ   rI   )rO   rP   modulemodule_namerF   r    r   r   wrapper   s   

zexport_case.<locals>.wrapperr   r    r[   r   rZ   r   export_case   s   r]   c                     rR   )Nc                    s`    }| d}t|tsJ |j}|tvrg t|< |j|d< t| t| j|}t| 	| |S )Nparentr0   )
popr   r/   r3   rE   r0   rQ   rM   r   rH   )rO   rP   r^   r!   rF   rZ   r   r   r[      s   

z$export_rewrite_case.<locals>.wrapperr   r\   r   rZ   r   export_rewrite_case   s   r`   )#rT   rJ   r(   dataclassesr   r   enumr   typingr   r   typesr   r   r   r   r   r?   r   r   r>   r"   r-   r/   rB   r'   rC   rD   listrE   rI   rM   rQ   r]   r`   r   r   r   r   <module>   sR   


