
    sg              
          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
mZmZ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e      Zee	df   Zd ZdefdZ ed       G 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Zd Z d Z!d Z"d Z#y)    N)	dataclassfield)Enum)AnyDictListOptionalSetTuple)
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                       e Zd ZdZdZdZy)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     H/var/www/html/venv/lib/python3.12/site-packages/torch/_export/db/case.pyr   r   #   s    
 Ir!   r   .c                     t        | t              st        dt        |              t        |t              st        dt        |             |D ])  }t        |t
              rt        dt        |              y )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keys      r"   check_inputs_typer-   0   s    dE"6tDzlC
 	
 fd#7V~F
 	
  #s#=d3i[I r!   tagc                     | j                  d      }t        }|D ]L  }t        |      t        t        j                  dz         k  s
J d|        ||v r||   }?t        d|  d       y )N.-z!Tag contains invalid characters: zTag z! is not found in registered tags.)splitr   setstringascii_lowercaser&   )r.   partstparts       r"   _validate_tagr9   ?   s    IIcNEA L4yC""S(
 
 	6.tf5	6 
 19$AtC5(IJKKLr!   T)frozenc                       e Zd ZU eed<   eed<   ej                  j                  ed<   eed<    e	e
      Zeeef   ed<   dZee   ed<    e	e      Zee   ed	<   ej(                  Zeed
<   dZeeeef      ed<   d Zy)
ExportCaseexample_argsdescriptionmodelname)default_factoryexample_kwargsN
extra_argstagssupport_leveldynamic_shapesc                 V   t        | j                  | j                         | j                  t        | j                  i        | j                  D ]  }t        |        t        | j                  t              rt        | j                        dk(  rt        d| j                   d      y )Nr   zInvalid description: "")r-   r=   rB   rC   rD   r9   r$   r>   r)   lenr&   )selfr.   s     r"   __post_init__zExportCase.__post_init__Y   s    $++T-@-@A??&door299 	C#	 $**C0C8H8H4IQ4N5d6F6F5GqIJJ 5Or!   )r   r   r   ArgsType__annotations__r)   r   nnModuler   r(   rB   r   r   rC   r	   r3   rD   r
   r   r   rE   rF   rK   r    r!   r"   r<   r<   L   s    88??
I%*4%@NDcN@%)J")3/D#c(/"."8"8M<8/3NHT#s(^,3	Kr!   r<   _EXAMPLE_CASES_MODULES_EXAMPLE_CONFLICT_CASES_EXAMPLE_REWRITE_CASEScasereturnc                    | j                   t        v rZ| j                   t        vr%t        | j                      gt        | j                   <   t        | j                      j                  |        y| t        | j                   <   y)zA
    Registers a user provided ExportCase into example bank.
    N)r@   rP   rR   append)rT   s    r"   register_db_caserX   k   s`     yyN"99332@2K1L#DII.		*11$7 $N499r!   c                 z    t        j                  dd|       } t        j                  dd|       j                         S )Nz(.)([A-Z][a-z]+)z\1_\2z([a-z0-9])([A-Z]))resublower)r@   s    r"   to_snake_caser]   x   s2    66$h5D66%x6<<>>r!   c                     t        | t        j                  j                        st	        d      d|vr(| j
                  
J d|         i |d| j
                  i}t        di i || |dS )Nz.Export case class should be a torch.nn.Module.r>   z9Could not find description or docstring for export case: )r?   r@   r    )r$   r   rN   rO   	TypeErrorr   r<   )mr@   configss      r"   _make_export_caserb   }   s}    a)HIIG# II!	KFqcJ	K!7W7mQYY7>=7=Q=>>r!   c                        fd}|S )zK
    Decorator for registering a user provided case into example bank.
    c                     }t        j                  |       }|t        v rt        d      |J t        j	                  |       |j
                  j                  d      d   }t        | ||      }t        |       |S )Nz6export_case should only be used once per example file.r0   )	inspect	getmodulerQ   RuntimeErroraddr   r2   rb   rX   )r`   ra   modulemodule_namerT   r+   s        r"   wrapperzexport_case.<locals>.wrapper   sx    ""1%XWXX!!!Voo++C04 K9r!   r    r+   rl   s   ` r"   export_casern      s    
 Nr!   c                        fd}|S )Nc                    }|j                  d      }t        |t              sJ |j                  }|t        vr	g t        |<   |j
                  |d<   t        | t        | j                        |      }t        |   j                  |       |S )Nparentr=   )
popr$   r<   r@   rS   r=   rb   r]   r   rW   )r`   ra   rq   r,   rT   r+   s        r"   rl   z$export_rewrite_case.<locals>.wrapper   s    X&&*---kk,,*,"3'"("5"5 M!**$=wGs#**40r!   r    rm   s   ` r"   export_rewrite_casers      s     Nr!   )$rf   rZ   r4   dataclassesr   r   enumr   typingr   r   r   r	   r
   r   typesr   r   r   r)   rM   r   rL   r-   r9   r<   rP   r3   rQ   rR   rS   rX   r]   rb   rn   rs   r    r!   r"   <module>rx      sJ    	  (  8 8    	$tCc3h  .4  c?
Ls 
L $K K K0 )+S*_% *E#j/ !79 c4
#334 968 S$z"223 8
%: 
%$ 
%?

?*r!   