
    PhL              
          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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 G d d      Zeee	df   e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i Zi Ze
eee   f   ed<   deddfdZd Z d Z!d Z"d Z#dedefdZ$y)     N)	dataclassfield)Enum)AnyDictListOptionalSetTupleUnion)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     `C:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_export/db/case.pyr   r   !   s    
 Ir!   r   c                       e Zd ZdZd Zy)
ExportArgsargskwargsc                      || _         || _        y Nr%   )selfr&   r'   s      r"   __init__zExportArgs.__init__.   s    	r!   N)r   r   r   	__slots__r+   r    r!   r"   r$   r$   +   s    "Ir!   r$   .c                 ^    t        | t        t        f      st        dt	        |              y )Nz@Expecting inputs type to be either a tuple, or ExportArgs, got: )
isinstancer$   tuple
ValueErrortypexs    r"   check_inputs_typer4   6   s2    a*e,-NtTUwiX
 	
 .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_lowercaser0   )r5   partstparts       r"   _validate_tagr@   =   s    IIcNEA4yC""S(
 
 	6.tf5	6 
 19$AtC5(IJKK r!   T)frozenc                       e Zd ZU eed<   eed<   ej                  j                  ed<   e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_inputsdescriptionmodelnameNextra_inputs)default_factorytagssupport_leveldynamic_shapesc                 >   t        | j                         | j                  t        | j                         | j                  D ]  }t	        |        t        | j                  t              rt        | j                        dk(  rt        d| j                   d      y )Nr   zInvalid description: "")
r4   rD   rH   rJ   r@   r.   rE   strlenr0   )r*   r5   s     r"   __post_init__zExportCase.__post_init__V   s    $--.(d//099C#  $**C0C8H8H4IQ4N5d6F6F5GqIJJ 5Or!   )r   r   r   
InputsType__annotations__rO   r   nnModulerH   r	   r   r:   rJ   r
   r   r   rK   rL   r   r   rQ   r    r!   r"   rC   rC   J   sp    88??
I)-L(:&-3/D#c(/"."8"8M<8/3NHT#s(^,3	Kr!   rC   _EXAMPLE_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)rG   rV   _EXAMPLE_CONFLICT_CASESappend)rX   s    r"   register_db_caser]   h   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)rG   s    r"   to_snake_caserb   u   s2    66$h5D66%x6<<>>r!   c                    t        j                  |       r6t        | 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.rE   z9Could not find description or docstring for export case: )rF   rG   r    )	inspectisclass
issubclassr   rT   rU   	TypeErrorr   rC   )mrG   configss      r"   _make_export_caserj   z   s    q!UXX__-LMMC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      t        j	                  |       t        | j                        }|J |j                  j                  d      d   }||k7  r-t        d|j                   dd| j                   d| dz         t        | ||      }t        |       |S )	Nz6export_case should only be used once per example file.r7   zModule name "z(" is inconsistent with exported program zname "z ". Please rename the module to "z".)
rd   	getmodule_MODULESRuntimeErroraddrb   r   r9   rj   r]   )rh   ri   modulenormalized_namemodule_namerX   r'   s         r"   wrapperzexport_case.<locals>.wrapper   s    ""1%XWXXV'

3!!!oo++C04/)00XY1::,&FFWWYZ[ 
 !K9r!   r    r'   ru   s   ` r"   export_caserw      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parentrD   )
popr.   rC   rG   rW   rD   rj   rb   r   r\   )rh   ri   rz   keyrX   r'   s        r"   ru   z$export_rewrite_case.<locals>.wrapper   s    X&&*---kk,,*,"3'$*$9$9 ! M!**$=wGs#**40r!   r    rv   s   ` r"   export_rewrite_caser}      s     Nr!   r3   c                 Z    t        | t              rt        |  S t        | t              sJ | S r)   )r.   r/   r$   r2   s    r"   normalize_inputsr      s+    !U1~a$$$Hr!   )%rd   r_   r;   dataclassesr   r   enumr   typingr   r   r   r	   r
   r   r   r   r   rO   rS   r   r$   rR   r4   r@   rC   rV   r:   ro   r[   rW   r]   rb   rj   rw   r}   r   r    r!   r"   <module>r      sT    	  (  ? ? ?   	$tCc3h  .4   5c?J./


Ls 
L $K K K. )+S*_% *5 68 S$z"223 8
%: 
%$ 
%?
?8$
 z r!   