
    PhxE                         d dl Z d dl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d dlmc mZ g dZe G d d             Zd Zdd	d
edefdZd Ze G d d             Zd Z G d de      Zy)    N)	dataclass)AnyCallableDictListOptionalTupleUnion)ShapeEnvEventrecord_shapeenv_eventreplay_shape_env_eventsFakeTensorMetashape_env_check_state_equalNotEqualErrorc                       e Zd ZU eed<   dZeee      ed<   dZ	ee
eef      ed<   dZeee      ed<   dZee   ed<   ddefdZdefd	Zdefd
ZdefdZdefdZy)r   fNargskwargstracked_fakesnamereturnc                    ddl m}m} | j                  |u r.| j                  | j
                  J  |di | j
                  S J t        | j                  xs
 t                     t        | j
                  xs
 t                     t        j                  |fdf      \  t        j                  |fdf      \  dt        dt        ffddt        d	t        d
t        ffd}| j                         r |ddfd       | j                         s| j!                         r |dd        | j                  i S )Nr   ShapeEnvSymTypesc                     S N )_	shape_envs    jC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/fx/experimental/recording.py<lambda>z#ShapeEnvEvent.run.<locals>.<lambda>f   s    	    c                 X     t        |       | j                  j                              S r   )typenodewith_shape_env)ar    s    r!   r"   z#ShapeEnvEvent.run.<locals>.<lambda>m   s    gd1gaff33I>?r#   xr   c                     t        | t        j                  j                        s| S t	        d      sJ j
                  }| j                  |v sJ || j                     S )Nname_to_node)
isinstancetorchfxNodehasattrr+   r   )r)   r+   r    s     r!   maybe_convert_nodez-ShapeEnvEvent.run.<locals>.maybe_convert_noder   sX    a/ 9n555$11L66\)))''r#   indexkeyfnc                 d    | t              k  r ||          | <   |v r ||         |<   y y r   )len)r2   r3   r4   r   r   s      r!   
replaceargz%ShapeEnvEvent.run.<locals>.replacearg   s=    s4y  eoUf} os r#      r   c                 ,    t        fd| D              S )Nc              3   .   K   | ]  } |        y wr   r   ).0r(   r1   s     r!   	<genexpr>z6ShapeEnvEvent.run.<locals>.<lambda>.<locals>.<genexpr>   s     %JT&8&;Ts   )tuple)r   r1   s    r!   r"   z#ShapeEnvEvent.run.<locals>.<lambda>   s    %JT%J Jr#   )r2   r3   r4      fx_noder   )%torch.fx.experimental.symbolic_shapesr   r   r   r   r   listdictpytreetree_map_onlyr   intstrr   is_create_fx_call_functionis_evaluate_expris_defer_runtime_assert)selfr    r   r   r7   r   r   r1   s    `   @@@r!   runzShapeEnvEvent.runX   sM   L 66X$):t{{?VVV*dkk**$$$DII'(dkk+TV, ++)D&>
f ++?6N
f
	(# 
	(# 
	(	.c 	. 	. 	. **,
 J
   "d&B&B&D
 QI2DE tvvt&v&&r#   c                     | j                   | j                   n| j                  j                  }d| d| j                   d| j                   dS )Nzevent: z (, ))r   r   __name__r   r   )rJ   r   s     r!   __str__zShapeEnvEvent.__str__   sA     II1tyytvvb2dkk]!<<r#   c                      | j                   dk(  S )Ncreate_fx_call_functionr   rJ   s    r!   rG   z(ShapeEnvEvent.is_create_fx_call_function   s    yy555r#   c                      | j                   dk(  S )Nevaluate_exprrS   rT   s    r!   rH   zShapeEnvEvent.is_evaluate_expr   s    yyO++r#   c                      | j                   dk(  S )Ndefer_runtime_assertrS   rT   s    r!   rI   z%ShapeEnvEvent.is_defer_runtime_assert   s    yy222r#   r   )rO   
__module____qualname__r   __annotations__r   r   r   r   r   r   rF   r   r   rK   rP   boolrG   rH   rI   r   r#   r!   r   r   G   s     K !%D(49
$'+FHT#s(^$+ *.M8DI&- D(3-?'S ?'B= =6D 6,$ ,3 3r#   r   c                    ddl m}m} dt        |   d|d|fd}d }t	        j
                  | |j                               D ]A  }t        ||      r	 |||      }t        ||      s% |||j                  j                        }C |S )Nr   r   oldnewr   c                      | | |u sJ d       |S )Nzcall with different ShapeEnvr   )r^   r_   s     r!   assert_equalz9_extract_shape_env_and_assert_equal.<locals>.assert_equal   s    ?#:===:
r#   )
r@   r   r   r   	itertoolschainvaluesr,   r&   r    )r   r   r   r   ra   r    vals          r!   #_extract_shape_env_and_assert_equalrf      s    H(8, 8  
 ItV]]_5c8$$Y4Ic8$$Y0B0BCI	 6 r#   F)save_tracked_fakesrg   r   c                 ,     dt         dt         f fd}|S )Nr4   r   c                 x     t               sJ  j                  }t        j                          fd       }|S )Nc                     ddl m} t        | d   |      r| d   j                  r | i |S t	        | |      }| | i |S |j                         5  r|j                         nd }t        t        |       ||j                        }|j                  j                  |       |j                  |      cd d d        S # 1 sw Y   y xY w)Nr   r   rS   )r@   r   r,   is_recordingrf   	recordingsnapshot_tracked_fakesr   rA   rO   eventsappendrK   )r   r   r   rJ   r   eventr4   rg   s         r!   wrapperz9record_shapeenv_event.<locals>.decorator.<locals>.wrapper   s    F$q'8,a1E1E 4*6**
 7tVDD |4*6** ! 6HD//1T  &T
FM ""5)yy "!!s   A#CC
)callablerO   	functoolswraps)r4   r   rr   rg   s   `  r!   	decoratorz(record_shapeenv_event.<locals>.decorator   s;    ||{{		!	' 
!	'F r#   )r   )rg   rv   s   ` r!   r   r      s    (h (8 (T r#   c                     ddl m} | d   }|j                  |k(  sJ |j                         }| dd  D ]  }	 |j                  |        |S # t        $ r}t        d|       |d }~ww xY w)Nr   rk      zfailed when running event: )r@   r   r   rK   	ExceptionRuntimeError)ro   r   constructor_eventr    rq   es         r!   r   r     s    >q	(*** "%%'I	M IIi     	M!<UGDE1L	Ms   A	A(A##A(c                   T   e Zd ZU eeeej                  f   df   ed<   eeeej                  f   df   ed<   eeej                  f   ed<   e	ed<   deeeej                  f   df   fdZ
deeeej                  f   df   fdZdeeej                  f   fd	Zdefd
Zedd       Zy)r   .tensor_sizetensor_stridetensor_storage_offset	is_nestedr   c                     | j                   S r   )r~   rT   s    r!   sizezFakeTensorMeta.size$  s    r#   c                     | j                   S r   )r   rT   s    r!   stridezFakeTensorMeta.stride'  s    !!!r#   c                     | j                   S r   )r   rT   s    r!   storage_offsetzFakeTensorMeta.storage_offset*  s    )))r#   c                 ,    t        | j                        S r   )r6   r~   rT   s    r!   dimzFakeTensorMeta.dim-  s    4##$$r#   c                     t        | j                         | j                         | j                         | j                        S r   )r   r   r   r   r   )fakes    r!   	from_fakezFakeTensorMeta.from_fake0  s1    IIK(;(;(=t~~
 	
r#   N)r   r   )rO   rY   rZ   r	   r
   rE   r-   SymIntr[   r\   r   r   r   r   staticmethodr   r   r#   r!   r   r     s    uS%,,./455sELL013677 ell!233O eE#u||"34c9:  "eC$56;< "*c5<<&7 8 *%S % 
 
r#   r   c                   	 t        |       j                         t        |      j                         |D ]-  }|v rj                  |       |v sj                  |       / dt        dt        fd	dt
        t        t        gt        f   dt        t        t        t        t        f      f	fd} ||      }t        |      dkD  rt        d|      y )Nvaluer   c                 "    t         t              r=ddj                   fdt         j	                         t
              D              z   dz   S t         t              r'ddj                  d t               D              z   dz   S t               S )N{rM   c              3   2   K   | ]  }| d |      yw)z: Nr   )r;   kr   s     r!   r<   zDshape_env_check_state_equal.<locals>.value_to_str.<locals>.<genexpr>x  s#     V8U1qcE!H:.8Us   )r3   }c              3   "   K   | ]  }|  	 y wr   r   )r;   vs     r!   r<   zDshape_env_check_state_equal.<locals>.value_to_str.<locals>.<genexpr>|  s     "A=aaS6=s   )r,   rB   joinsortedkeysrF   set)r   s   `r!   value_to_strz1shape_env_check_state_equal.<locals>.value_to_strt  s|    eT"))Vuzz|QT8UVVW
 eS!"A6%="AAACGG5zr#   	map_valuec                    t              t        	      }}||k7  r:t        ddt        t        ||z
              t        t        ||z
              fg      t	        |      }|j                          |D cg c]  }| | ||          | |	|         f }}|D cg c]  \  }}}||k7  r| d 
|       
|      f! c}}}S c c}w c c}}}w )Nzfield set mismatch:zfound unique fields:z: values don't match.)r   r   rF   r   rA   sort)r   env1_setenv2_setsorted_keysr   mapped_dictval1val2	env1_vars	env2_varsr   s           r!   compare_varsz1shape_env_check_state_equal.<locals>.compare_vars  s    !^S^( x% /F8h#678F8h#678	 	 8n !
  	!Yq\*Ia1,FG  	 
 "-
!,4t| s'(,t*<l4>PQ!,
 	


s   6 C$Cr   zfield values don't match:)
varscopypopr   rF   r   r   r	   r6   r   )
env1env2non_state_variable_namesr   r   r   errorsr   r   r   s
          @@@r!   r   r   e  s     T
!IT
!I%	>MM!	>MM!	 &	C 	C 	!
S#JO,!
	eCcM"	#!
H )$F
6{Q7@@ r#   c                   >     e Zd Zdedeeeeef      ddf fdZ xZS )r   msg
mismatchedr   Nc                     dj                  |D cg c]#  \  }}}dj                  d| d| d| g      % c}}}      }t        | 	  d| d| d       y c c}}}w )N
z==> z  >  Left: z  > Right: zShapeEnv not equal: z

)r   super__init__)rJ   r   r   	inner_msgstr1str2details	__class__s          r!   r   zNotEqualError.__init__  s    
 )) .8	 .8)ItT 		yk*%dV,%dV, .8	
 	E 	 
	
	s   (A)rO   rY   rZ   rF   r   r	   r   __classcell__)r   s   @r!   r   r     s9    

 sC}-.
 
	
 
r#   r   )rt   rb   dataclassesr   typingr   r   r   r   r   r	   r
   r-   torch.utils._pytreeutils_pytreerC   __all__r   rf   r\   r   r   r   r   ry   r   r   r#   r!   <module>r      s      ! D D D  $ $z \3 \3 \3JL 9> + +( +d0 
 
 
NDAN
I 
r#   