
    Vh              
          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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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                       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     E/home/dcms/DCMS/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_tagr5   ?   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)   r9   r>   r?   r@   r5   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$   r>   r   r?   r   r/   r@   r   r   rA   rB   rG   r   r   r   r8   r8   L   s    88??
I%*4%@NDcN@%)J")3/D#c(/"."8"8M<8/3NHT#s(^,3	Kr   r8   _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<   rL   rN   append)rP   s    r   register_db_caserT   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_caserY   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   rJ   rK   	TypeErrorr   r8   )mr<   configss      r   _make_export_caser^   }   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.r,   )	inspect	getmodulerM   RuntimeErroraddr   r.   r^   rT   )r\   r]   modulemodule_namerP   r'   s        r   wrapperzexport_case.<locals>.wrapper   sx    ""1%XWXX!!!Voo++C04 K9r   r   r'   rh   s   ` r   export_caserj      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parentr9   )
popr    r8   r<   rO   r9   r^   rY   r   rS   )r\   r]   rm   r(   rP   r'   s        r   rh   z$export_rewrite_case.<locals>.wrapper   s    X&&*---kk,,*,"3'"("5"5 M!**$=wGs#**40r   r   ri   s   ` r   export_rewrite_casero      s     Nr   )#rb   rV   r0   dataclassesr   r   enumr   typingr   r   typesr   r   r   r$   r%   rI   r   r!   rH   r)   r5   r8   rL   r/   rM   rN   listrO   rT   rY   r^   rj   ro   r   r   r   <module>ru      sG    	  (       	$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   