
    9jO              
          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	 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)
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     U/media/conek/DATA/Code/OCR/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 ]P  }t        |      t        t        j                  dz         k  st        d|       ||v r||   }Ct        d|  d       y )N.-z!Tag contains invalid characters: zTag z! is not found in registered tags.)splitr   setstringascii_lowercaseAssertionErrorr!   )r)   partstparts       r   _validate_tagr5   ?   sy    IIcNEA L4yC 6 6 <== #DTF!KLL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dz  ed<    e	e      Zee   ed	<   ej"                  Zeed
<   dZe
eef   dz  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__X   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   rA   rB   rG   r   r   r   r8   r8   K   s    88??
I%*4%@NDcN@"&J4&3/D#c(/"."8"8M<8,0NDcNT)0	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   j   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   w   s2    66$h5D66%x6<<>>r   c                     t        | t        j                  j                        st	        d      d|vr,| j
                  t        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   r1   r8   )mr<   configss      r   _make_export_caser^   |   s{    a)HIIG#99 KA3O  8W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      |t	        d      t        j                  |       |j                  j                  d      d   }t        | ||      }t        |       |S )Nz6export_case should only be used once per example file.zmodule must not be Noner+   )
inspect	getmodulerM   RuntimeErrorr1   addr   r-   r^   rT   )r\   r]   modulemodule_namerP   r&   s        r   wrapperzexport_case.<locals>.wrapper   s}    ""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                 D   }|j                  d      }t        |t              st        dt	        |             |j
                  }|t        vr	g t        |<   |j                  |d<   t        | t        | j                        |      }t        |   j                  |       |S )Nparentzexpected ExportCase, got r9   )popr   r8   r1   r"   r<   rO   r9   r^   rY   r   rS   )r\   r]   rm   r'   rP   r&   s        r   rh   z$export_rewrite_case.<locals>.wrapper   s    X&&*- #<T&\N!KLLkk,,*,"3'"("5"5 M!**$=wGs#**40r   r   ri   s   ` r   export_rewrite_casero      s     Nr   )"rb   rV   r/   dataclassesr   r   enumr   typingr   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   