
    Phd                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	mZmZ d dlmZmZmZmZmZmZmZmZ d dlmZ 	 d dlZ d dl"Z"d dl#Z"d dl$m%Z%m&Z&m'Z' d dl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2 d d	l3m4Z4m5Z5 d d
l6m7Z7 ddl8m9Z9m:Z:m;Z;m<Z< ddl=m>Z> ddl?m@Z@mAZAmBZB ddlmCZCmDZDmEZE ddlFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZO  ej                  eQ      ZRe"j                  j                  eQd      ZUe"j                  j                  eQd      ZVe"j                  j                  eQd      ZWe"j                  j                  eQd      ZXe"j                  j                  j                  j                  Z\e"j                  j                  j                  j                  Z]e"j                  j                  j                  j                  Z^e"j                  j                  j                  j                  Z_ ej                  d      d        Zai de^de]dd dd dd dd d d! d"ej                  j                  d#eId$eGd%e_d&d' d(eOd)eNd*ej                  d+ eed+      d,ej                  e"j                  j                  e"j                  d- e"d.Ziej                  dd/ d0k  r	 d dlkZkdJd1Zld2Zmnd2ZmdJd4Zld5 Zod6 Zpej                   G d7 d8             Zr G d9 d:e+      Zs G d; d<      Ztd= Zu G d> d?      ZvdKd@ZwdA ZxdB Zy	 	 	 	 	 	 	 	 dLdCZz	 	 	 	 dMdDZ{	 	 	 	 	 	 	 	 	 	 dNdEZ| e>e|       dF Z}dG Z~d dHdIZy# e!$ r dZ Y w xY w# en$ r d3ZmY w xY w)O    )annotationsN)currentframegetframeinfo)AnyCallableDictListOptionalTupleTypeUnion)ReferenceType)is_from_local_sourceTensorPropertyTensorPropertySource)DuplicateInputsGuardGuardBuilderBaseGuardEnvExprGuardSourceSource)EqualityConstraintis_symbolicSYMPY_INTERP)format_framereport_compile_source_on_error)TensorWeakRef   )configconvert_frameexcmutation_guard)set_guard_error_hook)DefaultsSourceLocalSource
TypeSource)GuardedCode	GuardFailGuardFn)	dict_const_keysdict_const_keys_reprdict_param_key_idsguard_failuresistypeorig_code_maptensor_always_has_static_shapetuple_iterator_getitemtuple_iterator_lenguards
recompilesrecompiles_verboseverbose_guardsc                     dd l } | j                  j                  g}|D ch c]  }t        j                  |       c}S c c}w Nr   )torch._dynamo.external_utils_dynamoexternal_utilsinspectgetfile)torchmodsms      _C:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_dynamo/guards.pyuninteresting_filesrB   V   s>    ' 	$$D )--1GOOA---s   ?___check_type_id___check_obj_id___current_backendc                 ^    t         j                  j                  j                  j                  S N)r>   r:   
eval_frameguarded_backend_cachecurrent_backend     rA   <lambda>rM   d   s    ((>>NNrL   ___lookup_backendc                d    t         j                  j                  j                  j                  |    S rG   )r>   r:   rH   rI   cached_backends)backend_obj_ids    rA   rM   rM   g   s"    u}}77MM]] 
rL   ___skip_backend_checkc                 ^    t         j                  j                  j                  j                  S rG   )r>   r:   rH   rI   $skip_backend_check_for_run_only_moderK   rL   rA   rM   rM   l   s    ((>>ccrL   ___compile_config_hashc                 n    t         j                  j                  j                         j	                         S rG   )r>   r:   rH   "get_saved_else_current_config_hashhexrK   rL   rA   rM   rM   o   s     ((KKMQQSrL   ___needs_nopythonc                 ^    t         j                  j                  j                  j                  S rG   )r>   r:   rH   config_cachenopythonrK   rL   rA   rM   rM   q   s    %--":":"G"G"P"PrL   ___odict_getitem___dict_param_key_ids___dict_const_keys___dict_version___dict_containsc                
    | |v S rG   rK   )abs     rA   rM   rM   v   s    Q!VrL   ___tuple_iterator_len___tuple_iterator_getitem__math_isnaninf__load_modulec                    t        | t        j                  t        j                  f      rt	        j
                  |       S | S rG   )
isinstancenpgenericndarrayr>   	as_tensor)rc   s    rA   rM   rM      s,    ZBJJ

3K%Luq!SRSSrL   )utils_devicedevice___from_numpyr>      )      c                L    t        j                  |       j                  dd      S N
 )
astunparseunparsereplacenodes    rA   _ast_unparser      s     %%d+33D"==rL   TFc                L    t        j                  |       j                  dd      S rw   )astr{   r|   r}   s    rA   r   r      s    {{4 ((r22rL   c                    t        j                  d      }d}| D ]:  }|dv rd}
|dv r(|s|dk7  s|j                  |      s)t        |      c S ||z  }< t	        |       S )z
    "___odict_getitem(a, 1)" => "a"
    "a.layers[slice(2)][0]._xyz" ==> "a"
    "getattr(a.layers[slice(2)][0]._abc, '0')" ==> "a"
    "getattr(getattr(a.x[3], '0'), '3')" ==> "a"
    "a.layers[slice(None, -1, None)][0]._xyz" ==> "a"
    z[A-Za-z_].*ry   z (z),[]None)recompilematchstrip_function_callstrip_getattr_getitem)name
valid_namecurrchars       rA   r   r      sk     M*JD4<DV^:+;+;D+A*400DLD  !&&rL   c                4    t        j                  d|       d   S )z*
    "a[1]" => "a"
    "a.foo" => "a"
    z[.\[]r   )r   split)r   s    rA   r   r      s    
 88Hd#A&&rL   c                  "    e Zd ZU ded<   ded<   y)GuardCodeList	List[str]	code_listr   guardN__name__
__module____qualname____annotations__rK   rL   rA   r   r      s    LrL   r   c                  :   e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 d&dZd'dZd(dZd)dZd*dZd+dZd*dZ	d*dZ
d*d	Zd*d
Zd*dZd*dZd*dZd*dZd*dZd*dZd*dZd*dZd Zd Zd Zd Zd Zd Zd Zd*dZd*dZd*dZd*dZd*dZ d*dZ!d*d Z"d*d!Z#d*d"Z$d,d*d$Z%	 d-d%Z&y#).GuardBuilderc                0   || _         || _        || _        ||d| _        t        j
                  j                         | j                  d<   t        j                  j                  j                  j                         D ]X  \  }}|j                  dd      j                  dd      j                  dd      }|| j                  d   |<   || j                  |<   Z g | _        g | _        g | _        g | _        g | _        g | _        || _        i | _        d | _        y )NLG__builtins__>_<._dot_)id_ref
source_reflookup_weakrefsscopebuiltins__dict__copyr>   packagepackage_importer_package_imported_modulesitemsr|   argnamescodeshape_env_codetensor_check_namestensor_check_examplestensor_check_guardscheck_fn_managerid_matched_objsconfig_hash)	selfr   r   r   local_scopeglobal_scoper   r   package_modules	            rA   __init__zGuardBuilder.__init__   s    $.9D<3X
%-%6%6%;%;%=

>" ]]++EEKKM
<<S)11#s;CCCQD/=DJJ~&t,-DJJt N $&)+	
 46 .09;"02 6F BD,0rL   c                8    t        || j                  t              S rG   )evalr   CLOSURE_VARS)r   r   s     rA   getzGuardBuilder.get  s    D$**l33rL   c                B   t        |t              r|}n|j                  }t        t	        |            }|| j
                  vr]t        j                  d|      rGt        j                  d|      rt        j                  d|       | j
                  j                  |       |S )Nz[a-zA-Z0-9_]+z^\d+$zinvalid var name: %s)rk   strr   r   r   r   r   r   logwarningappend)r   r   r   bases       rA   arg_refzGuardBuilder.arg_ref	  sy    eS!D::D$%8%>?t}}$xx($/88Hd+KK 6>$$T*rL   c                    t        | j                  |j                              }| j                  |      }d| j	                  |       d| d}| j                  ||g       y )N___check_type_id(, ))typer   r   r   r   _produce_guard_code)r   r   tobj_idr   s        rA   
TYPE_MATCHzGuardBuilder.TYPE_MATCH  sV    %**%&Q"4<<#6"7r&C  /rL   c                    | j                  |      }t        | j                  |j                              }d| d| }| j	                  ||g       y )Nz___dict_version() == )r   dict_versionr   r   r   )r   r   refversionr   s        rA   DICT_VERSIONzGuardBuilder.DICT_VERSION  sK    ll5!txx

34!#eG95  /rL   c                l    | j                  |      }|rdnd}| d|d| d}| j                  ||g      S )Nnot ry   z___dict_contains(r   r   r   r   )r   r   keyinvertdict_ref	maybe_notr   s          rA   DICT_CONTAINSzGuardBuilder.DICT_CONTAINS&  sG    <<&$F"	-cWBxjB''v66rL   c                V    | j                  |      }d| }| j                  ||g       y )Nr   r   )r   r   r   r   s       rA   
BOOL_FALSEzGuardBuilder.BOOL_FALSE-  s/     ll5!cU|  /rL   c                R   t        |j                  t              r=| j                  t	        |j                  j
                  t        j                              S | j                  |      }| j                  |j                        }d| d| j                  |       d}| j                  ||g       t        |j                  t              r_t        |t        j                  j                        r:|j                  j                   }| j#                  |      }||| j$                  |<   y y y y )Nz___check_obj_id(r   r   )rk   originating_sourcer&   r   r   r   r   r   r   r   r   r   r%   r>   nnModule
local_namer   r   )r   r   r   valr   r   weak_ids          rA   ID_MATCHzGuardBuilder.ID_MATCH=  s    e..
;??e..33\5L5LM  ll5!hhuzz"!#bS)9(:!<  / e..< #uxx/"55@@
..s3&7>D((4 ' 0	 =rL   c                    | j                  |j                        }| j                  |       d|j                   d}| j	                  ||g       y )Nz.__name__ == '')r   r   r   r   r   r   r   objr   s       rA   
NAME_MATCHzGuardBuilder.NAME_MATCHV  sF    hhuzz",,u%&nS\\N!D  /rL   c                    | j                  |j                        }| j                  |       d|j                          }| j	                  ||g       y )Nz.data_ptr() == )r   r   r   data_ptrr   r   s       rA   DATA_PTR_MATCHzGuardBuilder.DATA_PTR_MATCH[  sG    hhuzz",,u%&oclln5EF  /rL   c                h   t        j                  d|j                        }|sJ d|j                          |j                  dd      \  }}| j	                  |      }t        | j                  |      |      }d }|r
d| d|d}n	d| d|d}| j                  ||g| j                  |      	       y )
Nz^(.*)[.]([a-zA-Z0-9_]+)$zinvalid hasattr check r   rs   hasattr(r   r   znot hasattr()provided_guarded_object)r   r   r   groupr   hasattrr   r   )r   r   r@   r   attrr   r   r   s           rA   HASATTRzGuardBuilder.HASATTR`  s    HH0%**=7*5::,77qWWQ]
dll4 dhhtnd+cU"THA.D!#b2D  QU WrL   c                t  	 | j                  |      }| j                  |j                        }t        |      }t        rt        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  f}nd}t         t"        t$        t        d       t&        t        t(        t*        t,        t.        t0        t2        t4        j6                  t4        j8                  t4        j:                  g|	t=        |t>              rFtA        	fdtC        jD                  |jG                         |jI                               D              sJ t=        |	      sJ |jJ                         t=        |t"              rntM        jN                  |      rYt)               }|jQ                  d| d| jS                  |       d       |jQ                  d| d       | jU                  ||       y t)               }t=        |t(        t*        f      rX| jW                  |       tY        |      D ]8  \  }}|jQ                  d| d| d| jS                  t        |             d       : n'|jQ                  d| d| jS                  |       d       t=        |t4        j6                        rt+        |      }|jQ                  | d	|       | jU                  ||       y )
NrK   c              3  6   K   | ]  }t        |        y wrG   )r.   ).0xok_typess     rA   	<genexpr>z,GuardBuilder.EQUALS_MATCH.<locals>.<genexpr>  s      -Vq(#-Vs   r   r   r   z__math_isnan([z],  == )-r   r   r   r   rl   int8int16int32int64uint8uint16uint32uint64float16float32float64intfloatboolr   listtuplesetslice	frozensetranger>   Sizerq   dtyper.   dictall	itertoolschainkeysvaluesr   mathisnanr   r   r   LIST_LENGTH	enumerate)
r   r   r   r   r   np_typesr   idxelemr   s
            @rA   EQUALS_MATCHzGuardBuilder.EQUALS_MATCHn  s|   ll5!hhuzz"I						





/H HJJJLLKK
  !
$ #t -6__SXXZ-V      zz  #u$**S/6DKK+C54;;q>2B!DEKK-uA./$$UD1v #e}%U#&s^	T'uAcU#dkk$t*6M5NaP , KK+C54;;q>2B!DE#uzz"*C
 	se4w'(  -rL   c                    | j                  |j                        }t        |t        t	        d       f      r| j                  |       y | j                  |       y rG   )r   r   r.   r  r   r   r$  )r   r   r   s      rA   CONSTANT_MATCHzGuardBuilder.CONSTANT_MATCH  sA    hhuzz"#d4j)*MM% e$rL   c                      j                          j                         j                  j                         fd}t	        d      r |        y t        j                  dt                      y )Nc                     t        j                  t              sJ j                  j	                  t         dj                   g              y )Nz.training == )r.   trainingr  r   r   r   )r   r   r   r   s   rA   setup_guardz+GuardBuilder.NN_MODULE.<locals>.setup_guard  sE    #,,---II#mCLL>BCUKrL   r)  z$Guard setup for uninitialized class )r   r   r   r   r   r!   unimplementedr   )r   r   r*  r   r   s   `` @@rA   	NN_MODULEzGuardBuilder.NN_MODULE  s_    ell5!hhuzz"	 3
#M DT#YKPQrL   c                F    |j                         r| j                  |      S y)z0things like torch.add and user defined functionsN)is_localr   r   r   s     rA   FUNCTION_MATCHzGuardBuilder.FUNCTION_MATCH  s     >>=='' rL   c                \   |j                         r| j                  |j                        }t        |      t        j
                  k(  rSt        |d      rG| j                  |      }d| d| j                  |j                         dg}| j                  ||       y| j                  |       yy)z!matches a closure by __code__ id.__code__z___check_obj_id(getattr(z, '__code__', None), r   N)r.  r   r   r   typesFunctionTyper   r   r   r2  r   r0  )r   r   r   r   r   s        rA   CLOSURE_MATCHzGuardBuilder.CLOSURE_MATCH  s    >>((5::&CCyE...73
3Kll5).se3HUXUaUaIbHccde ((5##E* rL   c                $    | j                  |      S rG   r0  r/  s     rA   BUILTIN_MATCHzGuardBuilder.BUILTIN_MATCH      ""5))rL   c                $    | j                  |      S rG   r7  r/  s     rA   PYMODULE_MATCHzGuardBuilder.PYMODULE_MATCH  r9  rL   c                8   | j                  |      }| j                  |j                        }t        |      }t	               }|j                  d| d| j                  |       d       |j                  d| dt        |              | j                  ||       y )Nr   r   r   zlen(r   )	r   r   r   r   r  r   r   lenr   r   r   r   valuer   r   s         rA   r  zGuardBuilder.LIST_LENGTH  s    ll5!$Kv'uBt{{1~.>a@Ad3%uSZL12  -rL   c                8   | j                  |      }| j                  |j                        }t        |      }t	               }|j                  d| d| j                  |       d       |j                  d| dt        |              | j                  ||       y )Nr   r   r   z___tuple_iterator_len(r   )	r   r   r   r   r  r   r   r2   r   r>  s         rA   TUPLE_ITERATOR_LENzGuardBuilder.TUPLE_ITERATOR_LEN  s    ll5!$Kv'uBt{{1~.>a@A,SE7I%7P6QRS  -rL   c                    | j                  |      }| j                  |j                               }| d| g}| j                  ||       y )N is )r   r   r   )r   r   source_bref_aref_br   s         rA   DUPLICATE_INPUTzGuardBuilder.DUPLICATE_INPUT  sG    U#X]]_-'eW%&  -rL   c                   | j                  |      }| j                  |j                        }t        |      }t	               }|j                  d| d| j                  |       d       t        t        |            }t        t        |            }t        |t        |j                              }|r/|j                  d| d|       |j                  d| d|        n|j                  d| d	|        | j                  ||       y )
Nr   r   r   )localz___dict_param_key_ids(r   z___dict_const_keys(zset(.keys()) == )r   r   r   r   r  r   r   r  r,   r*   r+   r   r   r   )	r   r   r   r?  r   r   param_key_ids
const_keysconst_keys_reprs	            rA   	DICT_KEYSzGuardBuilder.DICT_KEYS  s    ll5!$Kv'uBt{{1~.>a@A.u56/0
.253K3KL
 KK0U=:KLMKK-cU%7HIJKK$se</@AB  -rL   c                N    | j                  || j                  |       dg       y )Nz is not None)r   r   r/  s     rA   WEAKREF_ALIVEzGuardBuilder.WEAKREF_ALIVE#  s&      DLL,?+@)M(NOrL   c                v   | j                  |      }| j                  |j                        }t        |      }|j	                         D ch c]  \  }}|	 }}}t               }|j                  d| d| j                  |       d       |j                  d| d|       | j                  ||       y c c}}w )Nr   r   r   z{k for k, v in z.named_parameters()} == )	r   r   r   r   named_parametersr  r   r   r   )	r   r   r   r?  r   kvr  r   s	            rA   NN_MODULE_PARAM_NAMESz"GuardBuilder.NN_MODULE_PARAM_NAMES&  s    ll5!$K#44676da67v'uBt{{1~.>a@A&se+DTHMN  - 8s   B5c           	     T   | j                  |      }| j                  |j                        }t        |      }t	               }|j                  d| d| j                  |       d       |j                  d| dt        |j                                      | j                  ||       y)zOrderedDict keys matchr   r   r   str(rJ  N)
r   r   r   r   r  r   r   r   r  r   r>  s         rA   
ODICT_KEYSzGuardBuilder.ODICT_KEYS2  s    ll5!$Kv'uBt{{1~.>a@Ad3%|C

,=+@AB  -rL   c                v    t        j                  | j                  |j                        | j                         y rG   )r"   watchr   r   r   r/  s     rA   OBJECT_MUTATIONzGuardBuilder.OBJECT_MUTATION>  s%    TXXejj143H3HIrL   c                     y rG   rK   r/  s     rA   	GRAD_MODEzGuardBuilder.GRAD_MODEA      rL   c                     y rG   rK   r/  s     rA   DETERMINISTIC_ALGORITHMSz%GuardBuilder.DETERMINISTIC_ALGORITHMSD  r^  rL   c                     y rG   rK   r/  s     rA   TORCH_FUNCTION_STATEz!GuardBuilder.TORCH_FUNCTION_STATEG  r^  rL   c                    |j                   t        j                  u sJ ddlmc m} | j                  |d|j                  g       y)z/Guard on CURRENT_DEVICE per torch.utils._devicer   Nzutils_device.CURRENT_DEVICE == )sourcer   GLOBALtorch.utils._deviceutils_devicer   CURRENT_DEVICE)r   r   r@   s      rA   DEFAULT_DEVICEzGuardBuilder.DEFAULT_DEVICEJ  sE    ||{11111''  5a6F6F5IJK	
rL   c                    |j                   t        j                  u sJ t        t        j
                  j                  j                  j                         }d| dg}| j                  ||       y)z8Guard on backend matching based on id of current_backendzF(___skip_backend_check() or ___current_backend() == ___lookup_backend(z))N)
rd  r   re  idr>   r:   rH   rI   rJ   r   )r   r   
backend_idr   s       rA   BACKEND_MATCHzGuardBuilder.BACKEND_MATCHS  sk    ||{11111%--**@@PPQR 	 UU_T``bc
 	  -rL   c                    t         j                  j                  j                         }|j                  t
        j                  u sJ d|j                          dg}|| _        | j                  ||       y)z:Guard on the hash of the compiled function's dynamo configz___compile_config_hash() == 'r   N)
r>   r:   rH   rW   rd  r   re  rX   r   r   )r   r   r   r   s       rA   CONFIG_HASH_MATCHzGuardBuilder.CONFIG_HASH_MATCH^  se     mm..QQS||{11111/0A/B!DE&  -rL   c                .    dg}| j                  ||       y )Nznot ___needs_nopython())r   )r   r   r   s      rA   HAS_GRAPH_BREAKzGuardBuilder.HAS_GRAPH_BREAKg  s     **  -rL   c                   |j                   dk(  sJ | j                  j                  j                  }|D cg c]  }|j                   }}fd}j
                  rg }j
                  D ]  }|j                  j                  v r ||j                  |j                        ^}|j                  fd|D               |j                  a ||j                  j                  |j                  j                        }|j                  fd|D               t        j                  d        t        |d      }	nd }	j                  j                  |D cg c]  }|j                    c}|D cg c]  }|j"                   c}||	| j$                  | j                  j                  j&                         }
j                  j)                          |
D ]  }| j+                  ||gd	
        y c c}w c c}w c c}w )Nry   c                z    j                   |    D cg c]  }t        |t        j                  |       c}S c c}w rG   )tracked_fakes_id_to_sourcer   r   SIZE)t_iddimrd  output_graphs      rA   get_sourcesz+GuardBuilder.SHAPE_ENV.<locals>.get_sourcesx  sD    
 +EEdKKF %V^-@-@#FK  s   "8c              3  &   K   | ]  }|f 
 y wrG   rK   r   other_sourcerd  s     rA   r   z)GuardBuilder.SHAPE_ENV.<locals>.<genexpr>  s      (CP<.=   c              3  &   K   | ]  }|f 
 y wrG   rK   r|  s     rA   r   z)GuardBuilder.SHAPE_ENV.<locals>.<genexpr>  s      ,GT|V\2}r~  z+Untracked tensor used in export constraintsF)source_pairs	warn_only)constraint_inputsequalities_inputsr   ignore_staticT)	shape_env)r   r   ry  tracked_fakesconstraint_dimsexport_constraintsrw  ru  rx  extendsharedr   r   r   r  produce_guardsfakerd  r   exportfreezer   )r   r   fsrc   r  rz  r  
constraintother_sourcesr  r3   shape_guardry  rd  s               @@rA   	SHAPE_ENVzGuardBuilder.SHAPE_ENVn  s    zzR,,99''8:;1Q..;	 **8:L*==
??l&M&MM-8".*F]
 !'' (CP(  "((4 )4&--22J4E4E4I4I) %++ ,GT,  KK MN+ >, !3)!
 !%''66 RQVVR !"r!QXXr"//#44AAHHH 7 
 	%%'!K$$U[MT$J "e <R !"s   G3G84G=
Nc                `   |j                         r| j                  |       y t        |t              r |       }||n| j	                  |j
                        }t        |t        j                        sJ | j                  |      }t               }| j                  j                  j                  r| j                  |       g d}|D ]  }| j	                  |dz   |z         }t        |t        j                  t        j                   f      r$|j#                  d| d| dt%        |             h|j#                  | d| d|         nQ| j&                  j#                  |       | j(                  j#                  |       | j*                  j#                  |       |j,                  J t/        |d|j,                        \  }}	|sGt1        |d      r&|j#                  d	| d
|j2                   d| d       n|j#                  d| d       t5        |      dkD  r| j7                  ||       y y )N)r  rq   requires_gradzndimension()r   rW  r   r   T)	is_tensorguard_source_dynamo_dynamic_indicesz((z"._dynamo_dynamic_indices.issubset(z)) if hasattr(z', '_dynamo_dynamic_indices') else True)r   z%, '_dynamo_dynamic_indices') == Falser   )is_nn_moduler   rk   r   r   r   r>   Tensorr   r  r   ry  r  r   r.   rq   r  r   r   r   r   r   rd  r0   r   r  r=  r   )
r   r   r?  tensor_namer   termsterm
real_valuestaticreasons
             rA   TENSOR_MATCHzGuardBuilder.TENSOR_MATCH  s   MM% %/".EDHHUZZ4HEeU\\222,,u-K, #fD$$1188& "D!%+*;d*B!CJj5<<*EFd;-qeC
OCV$WX{m1TF$zl$KL " ''..{;**11%8((//6: <<+++;ELLNFF 5";<KK[M)KELiLiKjjx  zE  yF  Fm  n KK";-/TU 4y1}((5 rL   c                   t               }|J |j                  }~|J t        |      d   }~|t        | j                        v s
J d|        |r&| j
                  j                  t        ||             n%| j                  j                  t        ||             |?|j                  d uxr |j                  dk7  }|r| j                  |j                        nd }	n|}	|	t        j                  t        |	            nd }
d }t        |	j                  d      r/t        |	t         j"                        st        j                  |	      }|j%                  ||
||       y )Nrs   zH_produce_guard_code must be called from inside GuardedCode. Called from ry   __weakref__)r   f_backr   dir	__class__r   r   r   r   r   r   weakrefr   r   r   rk   enumEnumset_export_info)r   r   r   r   r  	cur_framecaller	func_name
name_validguarded_objectguarded_object_typeobj_refs               rA   r   z GuardBuilder._produce_guard_code  sc    !N	$$$!!!!! (+	CNN
 
 	bUV_U`a	b 
 &&}Y'FGII]9e<= #*4/DEJJ"4DJ5?TXXejj1TN4N 2@1KGKK^,-QU 	  >++];JDIIE
 kk.1G		
rL   )r   zCallable[[Any], str]r   zCallable[[Source], str]r   z)Callable[[object], ReferenceType[object]]r   Dict[str, object]r   r  r   CheckFunctionManager)r   r   returnr   )r   zUnion[str, Guard]r  r   )r   r   r  r   )r   r   )r   r   r   r   r   r  rG   NF)'r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$  r&  r,  r0  r5  r8  r;  r  rA  rG  rN  rP  rU  rX  r[  r]  r`  rb  rj  rn  rp  rr  r  r  r   rK   rL   rA   r   r      s   71$71 ,71 C	71
 '71 (71 /71~40070 ?20
0
XO.b%R$(
+**	.	...(P
.
.J
	...;Kza6J IN/
rL   r   c                      e Zd ZdZej
                  ej                  ej                  fZe	j                   G d d             Z G d dej                        Z G d dej                        ZddZddd	Zdd
ZddZy)PyExprCSEPassr   c                  "    e Zd ZU ded<   ded<   y)PyExprCSEPass.ConfigzDict[str, int]
expr_countzDict[str, str]expr_to_nameNr   rK   rL   rA   Configr  Z  s    ""$$rL   r  c                  (     e Zd ZddZd fdZ xZS )PyExprCSEPass.ExprCounterc                    || _         y rG   )_config)r   r   s     rA   r   z"PyExprCSEPass.ExprCounter.__init__`  s	    !DLrL   c                    t        |t        j                        r*| j                  j                  t        |      xx   dz  cc<   t        |   |       y Nr   )rk   r  ALLOWED_NODE_TYPESr  r  r   supervisit)r   r~   r  s     rA   r  zPyExprCSEPass.ExprCounter.visitc  s>    $ @ @A''T(:;q@;GM$rL   )r   r  r  r   r~   ast.ASTr  r   r   r   r   r   r  __classcell__r  s   @rA   ExprCounterr  _  s    	"	  	 rL   r  c                  8     e Zd Z	 	 	 	 	 	 d fdZd fdZ xZS )PyExprCSEPass.Replacerc                L    t         |           || _        || _        g | _        y rG   )r  r   r  	_gen_namepreface)r   r   gen_namer  s      rA   r   zPyExprCSEPass.Replacer.__init__i  s%    
 G!DL%DN&(DLrL   c                :   t        |t        j                        rt        |      }| j                  j
                  |   t        j                  kD  r|| j                  j                  vrdt        | %  |      }t        |      }| j                         }| j                  j                  | d|        || j                  j                  |<   n| j                  j                  |   }t        j                  |t        j                               S t        | %  |      S )Nz = )rk   r  r  r   r  r  USE_THRESHOLDr  r  r  r  r  r   r   NameLoad)r   r~   exprnode_expr_var_namer  s         rA   r  zPyExprCSEPass.Replacer.visits  s    $ @ @A#D) <<**40=3N3NN4<<#<#<< !&d 3 ,U 3#'>>#3++xjE7,CD:B11$7#'<<#<#<T#B88Hchhj997=&&rL   )r   r  r  zCallable[[], str]r  r   r  r  r  s   @rA   Replacerr  h  s.    	)(	) (	) 		)	' 	'rL   r  c                j    d| _         | j                  t        j                  d       i       | _        y )Nr   c                      yr8   rK   rK   rL   rA   rM   z(PyExprCSEPass.__init__.<locals>.<lambda>  s    qrL   )r  r  )_counterr  collectionsdefaultdictr  r   s    rA   r   zPyExprCSEPass.__init__  s.    {{"..y9 # 
rL   c                P    | | j                    }| xj                   dz  c_         |S r  )r  )r   prefixr   s      rA   _new_varzPyExprCSEPass._new_var  s'    $--)rL   c                    | j                  | j                        }|D ]&  }|j                  t        j                  |             ( y rG   )r  r  r  r   parse)r   exprscounteres       rA   countzPyExprCSEPass.count  s4    ""4<<0AMM#))A,' rL   c                    | j                  | j                  | j                        }|j                  t	        j
                  |            }|j                  t        |      fS rG   )r  r  r  r  r   r  r  r   )r   r  replacernew_nodes       rA   r|   zPyExprCSEPass.replace  sF    ==t}}=>>#))D/2h!777rL   N)r  r   )_var)r  r   r  r   )r  r   r  r   r  r   r  zTuple[List[str], str])r   r   r   r  r   	AttributeCall	Subscriptr  dataclasses	dataclassr  NodeVisitorr  NodeTransformerr  r   r  r  r|   rK   rL   rA   r  r  R  sx     M --3==A% % % coo  #'3&& #'J

(
8rL   r  c                    t        | j                  t              xs. t        j                  xr | j
                  t        j                  u S rG   )rk   r   r$   r    guard_nn_modules_using_dict_tags	create_fnr   r,  )r   s    rA   must_add_nn_module_guardsr    s@    
 	5++^< 	
 33 :<#9#99rL   c                  4    e Zd Z	 	 d	 ddZd Zd Zd Zd Zy)	r  Nc                   |r|j                   nd }d| _        i | _        || _        d }d fd}t	        | j
                  || j                  |j                  |j                  |       }t        j                  |      t        |xs g t        j                        D ]n  }t        j                  sK|j!                         r;d|j"                  vr-d|j"                  vrt        j$                  sd|j"                  vr^|j'                  |       p | j)                  |||      | _        | j                  j-                          |j.                  | j*                  _        |j0                  | j*                  _        y )NTc                    | |S || S i | |S rG   rK   )leftrights     rA   combine_scopesz5CheckFunctionManager.__init__.<locals>.combine_scopes  s&    |}$d$e$$rL   c                    | j                         }|t        j                  u r| j                         S sJ         }|J |j	                  | j                               S rG   )r  r   CONSTANTr   r   )rd  r  	r_builder	w_builders      rA   r   z1CheckFunctionManager.__init__.<locals>.source_ref  s]    !..0L{333{{}$9!I((($$V[[]33rL   )r   __defaults____kwdefaults__hooks)r3   valid	_weakrefsry  r   r   r   r   r   r  r   sortedr   sort_keyr   guard_nn_modulesr  r   skip_nnmodule_hook_guardscreatecompile_check_fncheck_fnclearr   r   )	r   ry  guard_fail_fnr3   r  r   builderr   r  s	           @rA   r   zCheckFunctionManager.__init__  s8   
 )5$$$
;=(	% 		4 KK  $$%%
 KK(	FLbenn=E++&&( #%**4$EJJ655

9RLL! > --gv}M )0(?(?%$+$7$7!rL   c                	  )* |j                   }|dgz  }t        j                  d       ddg))d d  *d)*fd	}t               }|j                  D ]<  }|j
                  D ]+  }||vs |||j                         |j                  |       - > |j                  }	d }
d }|	r| j                  j                  rJ d       |j                  }d }|D cg c]$  } || j                  j                  |   d         & }}|D cg c]$  } || j                  j                  |   d	         & }}t        |||d
}|j                  }
|j                  }dj!                  |	dgz         })j#                  d| d       *j#                  d| d       |j$                  }t'        |	      D ]  \  }}||   }t)        |      }t*        j,                  j/                  |      t*        j,                  j1                         z  t*        j,                  j3                         z
  }|j4                  }|j6                  j8                  }|j:                  }||   }||   } |d| d|j<                   d| d| d| d| d| d| d||   d        | j                  r*| j                  j>                  j@                  jB                  ng }|D ]b  }tE        |tF              rC|jH                  }|jJ                  }  ||jM                          d| jM                          d        VtO        d|        |jP                  D ]&  }|j
                  D ]  } |||j                          ( tR        jT                  }!|!tS        jV                         }!| |
||!j                  |	dtX        tZ        }"t]        t_        )            }#dj!                  |"ja                               }$tc        |#|$      \  }%}&td        jf                  ji                  dd       dk(  rtk        d|%       tm               }'to        |&|jp                  |'        |'d   |"js                          }(|"|(_:        ||(_;        )|(_<        *|(_=        d|jp                  d   i|(_>        ||(_?        |(S c c}w c c}w )Nz**___kwargs_ignoredzGUARDS:z___guarded_code.validz___check_global_state()c                   d}|j                   rCt        |j                         D ]*  }|j                  t               vsdt	        |d       } n7 n5|j
                  r)dt	        |j
                  j                         d          }t        j                  d| d|        t        j                  t        j                        rd}d}|p|j
                  r,ddj                  |j
                  j                                }|j                   r,d	dj                  |j                   j                                }t        j                  d
| ||       |s(j                  |        j                  | d|        y y )Nry   z  # T)linez%sz<60z
Stack:
z
User stack:
zGuard: %s%s%s)
user_stackreversedfilenamerB   r   stacksummary
guards_logdebugverbose_guards_logisEnabledForloggingDEBUGjoinformatr   )	r   r   log_onlyextrar  maybe_stackmaybe_user_stack
code_partsverbose_code_partss	          rA   add_code_partz<CheckFunctionManager.compile_check_fn.<locals>.add_code_part  s`   E"5#3#34B{{*=*??"&|BT'B&C D 5 |EKK,?,?,A",EFGHTd3Zw#78!..w}}= #% ${{(22775;;;M;M;O3P2Q&R''-bgge6F6F6M6M6O.P-QR ) #((#$	 !!$'"))T#Jug*>? rL   z,Illegal to set tensor_check_names in export.c                    g }| D ]d  }t        |      s|j                  |        t        |t        j                        sJ |j                  |j
                  j                                f |S rG   )r   r   rk   r>   SymIntr~   maybe_as_int)size_or_stride	convertedrx  s      rA   convertz6CheckFunctionManager.compile_check_fn.<locals>.convert=  s^    13	)C&s+!((-)#u||<<<!(()>)>)@A * ! rL   sizestride)dynamic_dims_sizesdynamic_dims_stridesr   z%tensor_check_names=tensor_check_namesz___check_tensors(r   zcheck_tensor(z	, device=z, requires_grad=z, size=z	, stride=T)r$  rC  zUnknown GuardEnvExpr: )___guarded_code___check_tensors___check_tensors_verbose___check_global_stater   TORCHDYNAMO_PRINT_GUARDS1zGUARDS
___make_guard_fnr   )F)@r   r  r  r  r   r   r   addr   ry  r  r   tensor_weakref_to_sizes_stridesTensorGuardscheckcheck_verboser"  r   r   r   r   r>   _C_dispatch_keys_dispatch_tls_local_include_set_dispatch_tls_local_exclude_setr  rq   indexr  r   tracing_contextguards_contextaotautograd_guardsrk   r   input_source_ainput_source_br   RuntimeErrorr   r    initial_global_stateGlobalStateGuardr   r   r  uniquer  build_guard_functionosenvironr   printr  execr   r  closure_varsargsr(  r)  r   r  )+r   r  
guards_outr  largsr*  seengclr   r   check_tensors_fncheck_tensors_verbose_fnr   r0  r   r3  r4  tensor_guardstensor_check_argsr   ir   pytypedispatch_keyr  device_indexr  sizesstridesrH  r   source_arD  global_staterT  unique_code_partsmake_guard_fn_args
guard_bodypycodeoutguard_fnr(  r)  s+                                            @@rA   r  z%CheckFunctionManager.compile_check_fn  s     '((# ./HI
']	@B u<<Ct#!$		2HHTN &   %77#' %%,,>=>,$+$A$A!! /".A ))II!LVTU.  " /$.A ))II!LXVW. ! $
 )&#5%9M
  -22'4'B'B$ $		"&M%NN!  12C1DAFG%%(9:K9LA&NO")"="=$%784 *!,aHH++A.hh>>@AHH<<> ?  xx~~ !*1-.q1#D6F,?,?+@<.PRSXRY Z*^+;M?'RWQXXabiajjkm'*!	 9.    --<<OO 	
 (E%1 // // 1hmmo5FGN"%;E7#CDD ( ))CdCII. & * %99(99;L# 0(@%1%7%7"4
 
 
 !
!34!YY|'8'8':;12CEWX
F::>>4d;sB*j)"fVW]]C(*3)*L,?,?,AB ,(&8# s#!
 "/G"
$s   )Q?)Rc                    d| _         y r  )r  r  s    rA   
invalidatezCheckFunctionManager.invalidate  s    
 
rL   c                   	 t        |      | j                  vrKt        j                  |      | j                  t        |      <   t        j                  || j
                         t        |      S # t        $ r Y t        |      S w xY w)zadd a weakref, return the id)rl  r  r  r   finalizerm  	TypeErrorr   r   s     rA   r   zCheckFunctionManager.id_ref  sp    	#wdnn, +2++c*:r#w'  doo6 #w  	#w	s   A"A/ /	BBc                b    t        |      | j                  v r| j                  t        |         S y)zFLookup the _weakrefs created in id_ref function for ID_MATCH'd objectsN)rl  r  rq  s     rA   r   z$CheckFunctionManager.lookup_weakrefs  s(    c7dnn$>>"S'**rL   )NN)r  z%Optional[Callable[[GuardFail], None]])r   r   r   r   r  rm  r   r   rK   rL   rA   r  r    s2     ?CC8 =C8JiVrL   r  c                  	 ddl m} t        r"t               		j	                  |        d	fd}ndd} |       }| D ]]  } ||      \  }}|j                  |       |j                  d| d       |j                         5  |j                  d       d d d        _  |       }|j                  d       |j                         5  |j                  |       |j                  d	       d d d         |       }|j                  d
| d       |j                         5  |j                  |       |j                  d       d d d        |j                         |j                         fS # 1 sw Y   4xY w# 1 sw Y   xY w# 1 sw Y   BxY w)Nr   )IndentedBufferc                &    j                  |       S rG   )r|   )r  csepasss    rA   r|   z%build_guard_function.<locals>.replace  s    ??4((rL   c                
    g | fS rG   rK   )r  s    rA   r|   z%build_guard_function.<locals>.replace  s    t8OrL   zif not (z):zreturn Falsezdef guard(L):zreturn Truezdef ___make_guard_fn(zreturn guardr  )
torch._inductor.utilsrt  HAS_UNPARSE_FUNCTIONSr  r  
writelines	writelineindentsplicegetvalue)
r(  closure_argsrt  r|   rh  r  r  r   make_guard_fnrv  s
            @rA   rO  rO    sR   4/j!	)
	
  !Jg&xvR01   0 ! 	  E	OOO$	Z & 
 #$M3L>DE				U#/ 
   -"8"8":::% !  
 
 	s$   E'#E4#F 'E1	4E= F	c                 h    t         j                  j                  j                  j	                  d      S )Nr4   r>   _logging	_internal	log_stateis_artifact_enabledrK   rL   rA   is_recompiles_enabledr    s#    >>##--AA,OOrL   c                 h    t         j                  j                  j                  j	                  d      S )Nr5   r  rK   rL   rA   is_recompiles_verbose_enabledr    s$    >>##--AABVWWrL   c                   || j                   d   d}|j                  | j                         |d   |d<   g }| j                  D ]  }t	        | j                         }||d<   t               5  	 t        |||      }	 ddd       t        t              r|s|}t        |t              sd|j                  |       t               r n dj                  |      }	t        t        |      j                  |	       	 | j                   &| j!                  t#        |	xs dt        |                |	S # t        $ r}t               rY d}~ddd       	 d}~ww xY w# 1 sw Y   xY w# t        $ r }t$        j'                  d	       Y d}~|	S d}~ww xY w)
z
    Return the reason why `guard_fn` failed.
    Updates `guard_failures` with the generated reason.
    Only the first failed check of guard_fn is reported.
    r   r   r7  r6  __compile_source__Nrx   zunknown reasonzVFailure in guard_fail_fn callback - raising here will cause a NULL Error on guard eval)r   updaterT  r)  r  r   r   	Exceptionr  rk   r  r   r   r"  r-   r/   r  r(   r   	exception)
rk  r   f_localsr   reasonspartr   fail_reasonr  
reason_strs
             rA   get_guard_fail_reasonr    s~    !6!6s!;<E	LL&&' %&@ AE
G++H112-1)*+-"4u= . k4(Kk3'NN;'02' ,* 7#J=&'..z:
!!-""*8(8-:MN 9  02 .- 	 .-4  
d	
 	
 
sN   +E-D,82E" ,	E5
E?EEEEE	"	F+FFc                   g }| Mt        | j                  | j                  |j                        }|r|j	                  |       | j
                  } | M|j                  }t               xs
 t               }|st        j                  rt               r"dj                  d t        |      D              }n%t        j                  dj                  |      d      }d| }d|j                   d|j                    d|j"                   dt        j                  |d	       }|r5t               rt$        j'                  |       nt(        j'                  |       t        j                  rt+        j,                  |      |S )
z
    Return the list of guard failure reasons using cache_entry.
    Logs the recompilation reason if `recompiles` logging is enabled.
    Raises a RecompileError if `config.error_on_recompile` is enabled.
    z

c              3  \   K   | ]$  \  }}d | dt        j                  |d      z    & yw)zguard z failures:
- N)textwrapr|  )r   r^  r  s      rA   r   z9get_and_maybe_log_recompilation_reason.<locals>.<genexpr>E  s5      #!3IAv <(8??64+HH!3s   *,rx   r  z-triggered by the following guard failure(s):
zRecompiling function z in :z    )r  r  r   r  r   nextf_coder  r  r   error_on_recompiler"  r   r  r|  co_nameco_filenameco_firstlinenorecompiles_verbose_logr  recompiles_logr!   RecompileError)	cache_entryframer  r  r   do_recompiles_logfailuresguard_failure_detailsmessages	            rA   &get_and_maybe_log_recompilation_reasonr  -  s[    G

!&  +"2"2ENN
 NN6"!&& 
! <<D ./R3P3RF55(*{{ #!*7!3# H
  tyy'94@H<XJG 	 $DLL>d6F6F5GqI\I\H]]_4f=>@ 	 ,.&,,W5$$W-$$$$W--NrL   c                   t        d|j                   d|j                   d|j                          t        ddj	                  | j
                        z   dz          t        ddj	                  | j                               y )NzERROR RUNNING GUARDS  r  zlambda r   z and
  )rR  r  r  r  r"  rU  r(  )rk  r   r  rE  lasts        rA   guard_error_hookr  ]  sn     

~Qt/?/?.@$BUBUAVW 
)dii.
.
45	#zx2234rL   c              #  b   K   t               }| D ]  }||vs| |j                  |        y wrG   )r  r<  )seqrX  r   s      rA   rN  rN  r  s.     5DD=GHHQK s   //c                    |rE|| k7  r@t        |      }t        |       }||k(  r%t        j                  t        j                  |      S y )N)rD  )r   	functoolspartialr   rG  )
obj_sourcedupe_sourceser_source_is_localsource_is_locals       rA   make_dupe_guardr  z  sK     {j02;?.z:
 /1 $$\%A%AKXXrL   skipc                    ddl m} |j                         j                  j                  j
                  }|D ]!  }t        |t              sJ  ||| dz          # y)z
    Add dynamo guards to the current tracing context.

    Args:
        guards: guard(s) to add
        skip: number of stack frames to ignore for debug stack trace
    r   )TracingContextr   r  N)torch._guardsr  r   rG  dynamo_guardsr<  rk   r   )r  r3   r  r<  r   s        rA   install_guardr    sO     -




-
-
;
;
?
?C%'''Eq! rL   )r~   r  r  r   )r  zTuple[str, str])rk  r)   r   types.CodeTyper  r  r  r   )r  ztypes.FrameTyper  r   )
rk  r)   r   r  r  r  rE  r  r  r  )
__future__r   r   r   r  r  r  r  	importlibr<   r  r   r  rP  r   sysr  r3  r  r   r   typingr   r   r   r	   r
   r   r   r   r   numpyrl   ModuleNotFoundErrorr>   rf  torch._dynamo.sourcer   r   r   r  r   r   r   r   r   r   %torch.fx.experimental.symbolic_shapesr   r   r   torch.utils._tracebackr   r   torch.utils.weakr   ry   r   r    r!   r"   rH   r#   rd  r$   r%   r&   r'   r(   r)   rg  r*   r+   r,   r-   r.   r/   r0   r1   r2   	getLoggerr   r   r  getArtifactLoggerr  r  r  r  rA  r:   r3   r>  check_obj_idcheck_type_idr   	lru_cacherB   OrderedDict__getitem__r  r  import_modulerh  rq   r   version_inforz   r   ry  ImportErrorr   r   r  r   r   r  r  r  rO  r  r  r  r  r  rN  r  r  rK   rL   rA   <module>r     s'   " 
           	 	 
    . J J J !      P * 8 8 , ; ; 2 2
 
 
 g!^^--hA
11(LI99"  ^^55h@PQ xx&&33xx&&33  ''55xx&&33 T. .""|" N	" 	
" c" S"" P#"$ //;;%"& /'"( /)"* |+", +-". //"0  !71"2 DJJ3"4 
5<5"6 Y,,7"8 KK''ll TC"H BQ6!
		> !%
 !3'.'   
}	
# }	
bN8 N8b0I IX(;VPX00
0  0 		0f-'--`55
5  5 	5
 5$ % &4 !" "s+  	Bj   %s$   .M 
M- M*)M*-M76M7