o
    Ih                  
   @   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)condzdynamic-shapezescape-hatchmapzdynamic-valueoperator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__	SUPPORTEDNOT_SUPPORTED_YET r   r   I/var/www/vscode/kcb/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   

r0   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%   r3   r8   r9   r:   r0   r   r4   r!   lenr   )selfr&   r   r   r   __post_init__Y   s   


zExportCase.__post_init__)r   r   r   ArgsType__annotations__r!   r   nnModuler   r    r8   r   r9   r   r*   r:   r   r   r;   r<   r@   r   r   r   r   r2   L   s   
 r2   _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)r6   rE   rG   append)rI   r   r   r   register_db_casek   s   

rL   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)r6   r   r   r   to_snake_casex   s   rP   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.r4   z9Could not find description or docstring for export case: )r5   r6   r   )r   r   rC   rD   	TypeErrorr   r2   )mr6   configsr   r   r   _make_export_case}   s   rT   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	getmodulerF   RuntimeErroraddr   r)   rT   rL   )rR   rS   modulemodule_namerI   r#   r   r   wrapper   s   

zexport_case.<locals>.wrapperr   r#   r^   r   r]   r   export_case   s   r`   c                     rU   )Nc                    s`    }| d}t|tsJ |j}|tvrg t|< |j|d< t| t| j|}t| 	| |S )Nparentr3   )
popr   r2   r6   rH   r3   rT   rP   r   rK   )rR   rS   ra   r$   rI   r]   r   r   r^      s   

z$export_rewrite_case.<locals>.wrapperr   r_   r   r]   r   export_rewrite_case   s   rc   )#rW   rM   r+   dataclassesr   r   enumr   typingr   r   typesr   r   r   r    r!   rB   r   r   rA   r%   r0   r2   rE   r*   rF   rG   listrH   rL   rP   rT   r`   rc   r   r   r   r   <module>   sR   


