o
    h                     @   s  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 zd dlZW n eys   dZY nw 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,m-Z-m.Z. d dl/m0Z0m1Z1 d d	l2m3Z3m4Z4 d
dl5m6Z6m7Z7m8Z8 d
dl9m:Z:m;Z; d
dl<m=Z= d
dl>m?Z? d
dlm@Z@mAZAmBZB d
dlCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZM e	NeOZPejQReOdZSejQReOdZTejUjVjWjXZXejUjVjWjYZYejUjVjWjZZZe[ddd Z\e]deZfdeYfdej^fdej_fdejUj`fdej]jafdeFfdeDfdeMfdeLfde
jbfd ecd fd!d"d# fd$ejCjdfd%ejefd&ejffgZgejhdd' d(krzd dliZid)e jjd*ekfd+d,Zld-ZmW n eny   d.ZmY nw d-Zmd)e jjd*ekfd/d,Zld0d1 Zod2d3 ZpejqG d4d5 d5ZrG d6d7 d7e(ZsG d8d9 d9ZtG d:d; d;Zud*eekekf fd<d=Zvdawd>eBd?ejxd@eekeyf dAezdBe{d*dfdCdDZ|d>eBd?ejxd@eekeyf dAezdBe{f
dEdFZ}e:e} dGdH Z~dIdJ ZdS )K    N)currentframegetframeinfo)AnyCallableDictListOptionalTupleTypeUnion)ReferenceType)is_from_local_sourceTensorPropertyTensorPropertySource)DuplicateInputsGuardGuardBuilderBaseGuardEnvExprGuardSourceSource)EqualityConstraintSYMPY_INTERP)format_framereport_compile_source_on_error)TensorWeakRef	WeakIdRef   )configconvert_framemutation_guard)set_guard_error_hookset_guard_fail_hook)unimplemented)
TypeSource)GuardedCode	GuardFailGuardFn)
dict_const_keysdict_const_keys_reprdict_param_key_idsguard_failures"is_guard_failure_reporting_enabledistypeorig_code_maptensor_always_has_static_shapetuple_iterator_getitemtuple_iterator_lenguardsverbose_guardsc                  C   s    dd l } | jjg}dd |D S )Nr   c                 S   s   h | ]}t |qS  )inspectgetfile).0mr3   r3   J/var/www/html/ai/venv/lib/python3.10/site-packages/torch/_dynamo/guards.py	<setcomp>R   s    z&uninteresting_files.<locals>.<setcomp>)torch._dynamo.external_utils_dynamoexternal_utils)torchmodsr3   r3   r8   uninteresting_filesK   s   r?   ___check_type_id___check_obj_id___is_grad_enabled'___are_deterministic_algorithms_enabled___is_torch_function_enabled___odict_getitem___dict_param_key_ids___dict_const_keys___tuple_iterator_len___tuple_iterator_getitem__math_isnaninf__load_modulec                 C   s
   t | S N)	importlibimport_modulenamer3   r3   r8   <lambda>f   s   
 rR   utils_devicedevice__as_tensor   )      nodereturnc                 C      t | ddS N
 )
astunparseunparsereplacerY   r3   r3   r8   _ast_unparseu      rc   TFc                 C   r[   r\   )astr`   ra   rb   r3   r3   r8   rc      rd   c                 C   sb   t d}d}| D ]#}|dv rd}q	|dv r(|r'|dkr'||r't|  S q	||7 }q	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_].*r^   z (z),[]None)recompilematchstrip_function_callstrip_getattr_getitem)rQ   
valid_namecurrcharr3   r3   r8   rj      s   
	
rj   c                 C   s   t d| d S )z*
    "a[1]" => "a"
    "a.foo" => "a"
    z[.\[]r   )rg   splitrP   r3   r3   r8   rk      s   rk   c                   @   s"   e Zd ZU ee ed< eed< dS )GuardCodeList	code_listguardN)__name__
__module____qualname__r   str__annotations__r   r3   r3   r3   r8   rp      s   
 rp   c                
   @   s  e Zd Zdeee gef deegef dee	eef  ddde
f
ddZd	ed
efddZdeeef d
efddZdefddZdefddZdefddZdefddZdefddZdefddZdefddZdefddZdefd d!Zdefd"d#Zdefd$d%Zdefd&d'Zd(d) Zd*d+ Zd,d- Zd.d/ Z d0d1 Z!d2d3 Z"d4d5 Z#defd6d7Z$defd8d9Z%defd:d;Z&defd<d=Z'defd>d?Z(defd@dAZ)dHdefdCdDZ*	EdIdFdGZ+dBS )JGuardBuilderid_ref
source_ref
user_scopecheck_fn_managerCheckFunctionManagerlocalc          	      C   s   || _ || _|| _|r|rdnd|i}n	|rdndt i}|| _tj | jd< tj	j
j D ]\}}|dddddd}|| jd |< || j|< q/g | _g | _g | _g | _g | _g | _|| _d S )	NLG__builtins__>_<._dot_)r~   ry   rz   dictscopebuiltins__dict__copyr=   packagepackage_importer_package_imported_modulesitemsra   argnamescodeshape_env_codetensor_check_namestensor_check_examplestensor_check_guardsr|   )	selfry   rz   r{   r|   r~   r   rQ   package_moduler3   r3   r8   __init__   s,   	
zGuardBuilder.__init__rQ   rZ   c                 C   s   t || jtS rM   )evalr   CLOSURE_VARS)r   rQ   r3   r3   r8   get   s   zGuardBuilder.getrr   c                 C   s`   t |tr|}n|j}tt|}|| jvr.td|r.td|r(t	d| | j
| |S )Nz[a-zA-Z0-9_]+z^\d+$zinvalid var name: %s)
isinstancerv   rQ   rk   rj   r   rg   ri   logwarningappend)r   rr   rQ   baser3   r3   r8   arg_ref   s   

zGuardBuilder.arg_refc                 C   sD   t | |j}| |}d| | d| d}| ||g d S )N___check_type_id(, ))typer   rQ   ry   r   _produce_guard_code)r   rr   tobj_idr   r3   r3   r8   
TYPE_MATCH   s   
zGuardBuilder.TYPE_MATCHc                 C   s&   |  |}d| }| ||g d S )Nznot )r   r   )r   rr   refr   r3   r3   r8   
BOOL_FALSE  s   

zGuardBuilder.BOOL_FALSEc                 C   s^   t |jtr| t|jj|jtjS d| | d| 	| 
|j d}| ||g d S )Nz___check_obj_id(r   r   )r   originating_sourcer#   r   r   r   sourcerx   r   ry   r   rQ   r   r   rr   r   r3   r3   r8   ID_MATCH  s   &zGuardBuilder.ID_MATCHc                 C   s6   |  |j}| | d|j d}| ||g d S )Nz.__name__ == '')r   rQ   r   rs   r   r   rr   objr   r3   r3   r8   
NAME_MATCH$     zGuardBuilder.NAME_MATCHc                 C   s6   |  |j}| | d|  }| ||g d S )Nz.data_ptr() == )r   rQ   r   data_ptrr   r   r3   r3   r8   DATA_PTR_MATCH)  r   zGuardBuilder.DATA_PTR_MATCHc                 C   s   t d|j}|sJ d|j |dd\}}| |}t| ||}d }|r4d| d|d}n	d| d|d}| j||g| |d	 d S )
Nz^(.*)[.]([a-zA-Z0-9_]+)$zinvalid hasattr check r   rV   hasattr(r   r   znot hasattr()provided_guarded_object)rg   ri   rQ   groupr   hasattrr   r   )r   rr   r7   r   attrr   valr   r3   r3   r8   HASATTR.  s   
zGuardBuilder.HASATTRc           	         s  |  |}| |j}t|}tr*t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tttjtjtjg|R  t|tr`t  fddt!"|# |$ D s_J n
t| sjJ |j%t|tjtjfrd| dt|g}| &|| d S t|trt'(|rt }|)d| d| *| d |)d	| d | &|| d S t }t|ttfr| +| t,|D ]\}}|)d| d
| d| *t| d qn|)d| d| *| d t|tjrt|}|)| d| | &|| d S )Nr3   c                 3   s    | ]}t | V  qd S rM   )r,   )r6   xok_typesr3   r8   	<genexpr>c  s    

z,GuardBuilder.EQUALS_MATCH.<locals>.<genexpr>str() == r   r   r   z__math_isnan([z],  == )-r   r   rQ   r   npint8int16int32int64uint8uint16uint32uint64float16float32float64intfloatboolrv   listtuplesetslice	frozensetranger=   SizerT   dtyper,   r   all	itertoolschainkeysvaluesrs   r   mathisnanr   ry   LIST_LENGTH	enumerate)	r   rr   r   r   r   np_typesr   idxelemr3   r   r8   EQUALS_MATCH<  s   


 zGuardBuilder.EQUALS_MATCHc                 C   s:   |  |j}t|ttd fr| | d S | | d S rM   )r   rQ   r,   r   r   r   r   )r   rr   r   r3   r3   r8   CONSTANT_MATCH  s   zGuardBuilder.CONSTANT_MATCHc                    s\        j fdd}tdr#|  d S tdt  d S )Nc                      s4   t jtsJ jt dj g  d S )Nz.training == )r,   trainingr   r   r   rp   r3   rr   r   r   r   r3   r8   setup_guard  s   z+GuardBuilder.NN_MODULE.<locals>.setup_guardr   z$Guard setup for uninitialized class )r   r   r   rQ   r   r"   r   )r   rr   r   r3   r   r8   	NN_MODULE  s   



zGuardBuilder.NN_MODULEc                 C   s   |  r	| |S dS )z0things like torch.add and user defined functionsN)is_localr   r   rr   r3   r3   r8   FUNCTION_MATCH  s   
zGuardBuilder.FUNCTION_MATCHc                 C   
   |  |S rM   r   r   r3   r3   r8   BUILTIN_MATCH     
zGuardBuilder.BUILTIN_MATCHc                 C   r   rM   r   r   r3   r3   r8   PYMODULE_MATCH  r   zGuardBuilder.PYMODULE_MATCHc                 C   l   |  |}| |j}t|}t }|d| d| | d |d| dt|  | || d S )Nr   r   r   zlen(r   )	r   r   rQ   r   r   r   ry   lenr   r   rr   r   valuer   r   r3   r3   r8   r        
zGuardBuilder.LIST_LENGTHc                 C   r   )Nr   r   r   z___tuple_iterator_len(r   )	r   r   rQ   r   r   r   ry   r0   r   r   r3   r3   r8   TUPLE_ITERATOR_LEN  r   zGuardBuilder.TUPLE_ITERATOR_LENc                 C   s8   |  |}|  | }| d| g}| || d S )N is )r   rQ   r   )r   rr   source_bref_aref_br   r3   r3   r8   DUPLICATE_INPUT  s   
zGuardBuilder.DUPLICATE_INPUTc           	      C   s   |  |}| |j}t|}t }|d| d| | d tt|}tt	|}t
|| jd}|rM|d| d| |d| d|  n|d| d	|  | || d S )
Nr   r   r   r~   z___dict_param_key_ids(r   z___dict_const_keys(zset(.keys()) == )r   r   rQ   r   r   r   ry   r   r)   r'   r(   r~   r   )	r   rr   r   r   r   r   param_key_ids
const_keysconst_keys_reprr3   r3   r8   	DICT_KEYS  s   
zGuardBuilder.DICT_KEYSc                 C   s   |  || | dg d S )Nz is not None)r   r   r   r3   r3   r8   WEAKREF_ALIVE  s   zGuardBuilder.WEAKREF_ALIVEc                 C   sz   |  |}| |j}t|}dd | D }t }|d| d| | d |d| d| | || d S )Nc                 S   s   h | ]\}}|qS r3   r3   )r6   kvr3   r3   r8   r9     s    z5GuardBuilder.NN_MODULE_PARAM_NAMES.<locals>.<setcomp>r   r   r   z{k for k, v in z.named_parameters()} == )	r   r   rQ   r   named_parametersr   r   ry   r   )r   rr   r   r   r   r   r   r3   r3   r8   NN_MODULE_PARAM_NAMES  s   
z"GuardBuilder.NN_MODULE_PARAM_NAMESc                 C   sp   |  |}| |j}t|}t }|d| d| | d |d| dt|  | 	|| dS )zOrderedDict keys matchr   r   r   r   r  N)
r   r   rQ   r   r   r   ry   rv   r   r   r   r3   r3   r8   
ODICT_KEYS  s   
zGuardBuilder.ODICT_KEYSc                 C   s   t | |j| j d S rM   )r   watchr   rQ   r|   r   r3   r3   r8   OBJECT_MUTATION  s   zGuardBuilder.OBJECT_MUTATIONc                 C   sD   |j dksJ |jtju sJ d}tjrd}nd}| ||g dS )zGuard on the initial grad stater^   Nz___is_grad_enabled()znot ___is_grad_enabled())rQ   r   r   GLOBALr   initial_grad_stater   r   r3   r3   r8   	GRAD_MODE  s   zGuardBuilder.GRAD_MODEc                 C   s6   |j tju sJ d}tjrd}nd}| ||g dS )z1Guard on the initial determinism algorithms stateNz)___are_deterministic_algorithms_enabled()z-not ___are_deterministic_algorithms_enabled())r   r   r  r   &initial_deterministic_algorithms_stater   r   r3   r3   r8   DETERMINISTIC_ALGORITHMS  s   z%GuardBuilder.DETERMINISTIC_ALGORITHMSc                 C   s6   |j tju sJ d }tjrd}nd}| ||g d S )Nz___is_torch_function_enabled()z"not ___is_torch_function_enabled())r   r   r  r   initial_torch_function_stater   r   r3   r3   r8   TORCH_FUNCTION_STATE  s   z!GuardBuilder.TORCH_FUNCTION_STATEc                 C   s<   |j tju sJ ddlm  m} | |d|jg dS )z/Guard on CURRENT_DEVICE per torch.utils._devicer   Nzutils_device.CURRENT_DEVICE == )r   r   r  torch.utils._deviceutils_devicer   CURRENT_DEVICE)r   rr   r7   r3   r3   r8   DEFAULT_DEVICE#  s
   zGuardBuilder.DEFAULT_DEVICEc                    s  |j dksJ | jj  j}dd |D } fdd} jr\g } jD ]1}||j|j^}|fdd|D  |jd urT||jj|jj}|fdd|D  q#t	|d	d
}nd } j
jdd |D dd |D ||| j| jjj d}	 j
  |	D ]}
| j||
gdd qd S )Nr^   c                 S      g | ]}|j qS r3   )constraint_dimsr6   ar3   r3   r8   
<listcomp>4      z*GuardBuilder.SHAPE_ENV.<locals>.<listcomp>c                    s    fddj |  D S )Nc                    s   g | ]	}t |tj qS r3   )r   r   SIZE)r6   r   dimr3   r8   r   9  s    z?GuardBuilder.SHAPE_ENV.<locals>.get_sources.<locals>.<listcomp>)tracked_fakes_id_to_source)t_idr$  )output_graphr#  r8   get_sources6  s   
z+GuardBuilder.SHAPE_ENV.<locals>.get_sourcesc                 3       | ]} |fV  qd S rM   r3   r6   other_sourcer   r3   r8   r   D      
z)GuardBuilder.SHAPE_ENV.<locals>.<genexpr>c                 3   r)  rM   r3   r*  r,  r3   r8   r   N  r-  F)source_pairs	warn_onlyc                 S   r  r3   )faker  r3   r3   r8   r   X  r!  c                 S   r  r3   r,  r  r3   r3   r8   r   Y  r!  )constraint_inputsequalities_inputsrz   ignore_staticT)	shape_env)rQ   r|   r'  tracked_fakesexport_constraintsr&  r$  extendsharedr   r4  produce_guardsrz   exportfreezer   )r   rr   fsr1  r(  r.  
constraintother_sourcesr2  r1   shape_guardr3   )r'  r   r8   	SHAPE_ENV,  sJ   



	zGuardBuilder.SHAPE_ENVNc           
   
   C   s  |  r| | d S t|tr| }|d ur|n| |j}t|tjs'J | |}t	 }| j
jjrs| | g d}|D ]2}| |d | }t|tjtjfrd|d| d| dt| q?|| d| d|  q?n| j| | j| | j| |jd usJ t|d|jd\}}	|st|dr|d	| d
|j d| d n	|d| d t|dkr| || d S d S )N)r   rT   requires_gradzndimension()r   r   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   r   r   r   rQ   r=   Tensorr   r   r|   r'  r:  r   r,   rT   r   r   rv   r   r   r   r   r.   r   rD  r   r   )
r   rr   r   tensor_namer   termsterm
real_valuestaticreasonr3   r3   r8   TENSOR_MATCHd  sF   



"


zGuardBuilder.TENSOR_MATCHFc                 C   s  t  }|d us	J |j}~|d usJ t|d }~|t| jv s(J d| |r4| jt|| n	| jt|| |d u rV|j	d uoJ|j	dk}|rS| 
|j	nd }	n|}	|	d urctt|	nd }
d }t|	jdrxt|	tjsxt|	}|||
|| d S )NrV   zH_produce_guard_code must be called from inside GuardedCode. Called from r^   __weakref__)r   f_backr   dir	__class__r   r   rp   r   rQ   r   weakrefr   r   r   r   enumEnumset_export_info)r   rr   rq   r   r4  	cur_framecaller	func_name
name_validguarded_objectguarded_object_typeobj_refr3   r3   r8   r     s@   
z GuardBuilder._produce_guard_coderM   NF),rs   rt   ru   r   r
   objectrv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r@  rM  r   r3   r3   r3   r8   rx      sT    
>W
		8erx   c                   @   s   e Zd ZdZejejejfZe	j
G dd dZG dd dejZG dd dejZdd
dZddedefddZdee dd	fddZdedeee ef fddZd	S )PyExprCSEPassr   c                   @   s.   e Zd ZU eeef ed< eeef ed< dS )PyExprCSEPass.Config
expr_countexpr_to_nameN)rs   rt   ru   r   rv   r   rw   r3   r3   r3   r8   Config  s   
 rc  c                       s2   e Zd Zd
ddZdejdef fdd	Z  ZS )zPyExprCSEPass.ExprCounterr   r`  rZ   Nc                 C   s
   || _ d S rM   )_config)r   r   r3   r3   r8   r     r   z"PyExprCSEPass.ExprCounter.__init__rY   c                    s4   t |tjr| jjt|  d7  < t | d S Nr   )r   r_  ALLOWED_NODE_TYPESrd  ra  rc   supervisit)r   rY   rQ  r3   r8   rh    s   zPyExprCSEPass.ExprCounter.visit)r   r`  rZ   N)	rs   rt   ru   r   re   ASTr   rh  __classcell__r3   r3   ri  r8   ExprCounter  s    
 rl  c                       sJ   e Zd Zdddeg ef ddf fddZdejdef fd	d
Z	  Z
S )zPyExprCSEPass.Replacerr   r`  gen_namerZ   Nc                    s    t    || _|| _g | _d S rM   )rg  r   rd  	_gen_namepreface)r   r   rm  ri  r3   r8   r   "  s   

zPyExprCSEPass.Replacer.__init__rY   c                    s   t |tjrGt|}| jj| tjkrG|| jjvr9t 	|}t|}| 
 }| j| d|  || jj|< n| jj| }t|t S t 	|S )Nz = )r   r_  rf  rc   rd  ra  USE_THRESHOLDrb  rg  rh  rn  ro  r   re   NameLoad)r   rY   exprnode_expr_var_nameri  r3   r8   rh  ,  s   zPyExprCSEPass.Replacer.visit)rs   rt   ru   r   rv   r   re   rj  r   rh  rk  r3   r3   ri  r8   Replacer!  s    
 
rw  rZ   Nc                 C   s$   d| _ | jtdd i d| _d S )Nr   c                   S   s   dS )Nr   r3   r3   r3   r3   r8   rR   I  s    z(PyExprCSEPass.__init__.<locals>.<lambda>)ra  rb  )_counterrc  collectionsdefaultdictrd  r   r3   r3   r8   r   F  s   zPyExprCSEPass.__init___varprefixc                 C   s    | | j  }|  j d7  _ |S re  )rx  )r   r}  rQ   r3   r3   r8   _new_varL  s   zPyExprCSEPass._new_varexprsc                 C   s*   |  | j}|D ]
}|t| qd S rM   )rl  rd  rh  re   parse)r   r  counterer3   r3   r8   countQ  s   zPyExprCSEPass.countrs  c                 C   s.   |  | j| j}|t|}|jt|fS rM   )rw  rd  r~  rh  re   r  ro  rc   )r   rs  replacernew_noder3   r3   r8   ra   V  s   zPyExprCSEPass.replace)rZ   N)r|  )rs   rt   ru   rp  re   	AttributeCall	Subscriptrf  dataclasses	dataclassrc  NodeVisitorrl  NodeTransformerrw  r   rv   r~  r   r  r	   ra   r3   r3   r3   r8   r_    s    	
%"r_  c                   @   sN   e Zd Z		ddeeeeef gdf  fddZdd Zdd Z	d	d
 Z
dS )r}   Nguard_fail_fnc           	         s  |r|j nd }d| _i | _|| _dd } fdd}t| j|||j|j| dd}t| j||j| dd}d|jv rB|jd |jd< t	
|t	
| t|pPg tjd	D ]"}tjsq| rqd
|jvrqd|jvrqtjspd|jvrqqU||| qU| ||||| _| j  d S )NTc                 S   s$   | d u r|S |d u r| S i | |S rM   r3   )leftrightr3   r3   r8   combine_scopesr  s
   z5CheckFunctionManager.__init__.<locals>.combine_scopesc                    sD   |   }|tju r|  S |   }|d usJ ||  S rM   )rC  r   CONSTANTrQ   selectr   )r   rC  builderw_globalw_localr3   r8   rz   {  s   
z1CheckFunctionManager.__init__.<locals>.source_refr  Fr   )key__defaults____kwdefaults__hooks)r1   valid	_weakrefsr'  rx   ry   global_scopelocal_scoper   rR  r   sortedr   sort_keyr   guard_nn_modulesrE  rQ   skip_nnmodule_hook_guardscreatecompile_check_fncheck_fnclear)	r   r'  r  r1   r  rz   local_builderglobal_builderrr   r3   r  r8   r   g  sH   		





zCheckFunctionManager.__init__c           )         s  t |jt |j@ rJ |j}|dg7 }d|}td dg tjt}d% fdd	}|j	D ]}	|	j
D ]}
||
|	j q6q1|j	D ]}	|	j
D ]}
||
|	j qHqC|j|j }d }d }|rjjrgJ d|j|j }d }d }d	d
 fdd|D }fdd|D }t|||d}|j}|j}d|dg } d| d |j|j }t|D ]Q\}}|| }t|}tj|tj B tj  }|j}|jj}|j}|| }|| }|d| d|j  d| d| d| d| d| d| d|| dd qjrjj!j"j#ng }|D ]$}t$|t%r0|j&} |j'}!|| (  d|!(  d  qt)d| |j*D ]}	|	j
D ]	}
||
|	j q?q:|j*rQJ t+,dfd|fd|fd|fgt-t./  }"|"0t1 t-t2 }#d|"3 }$t4|#|$\}%}&tj56d d d!krt7d"|% t8 s|d urt9t: t; }'t<|&|j=|' |'d# |">  }(|"|(_?||(_@ |(_Ad$|j=d$ i|(_B||(_C|(S )&Nz**___kwargs_ignored,zGUARDS:z___guarded_code.validFc                    s  t tjrHd}|d ur=|jr.t|jD ]
}|jt vr nq|jd }dt|dd }n|j	r=dt|j	
 d  }t d| d|  ttjrwd}d}|d urodd|j	  }|jrod	d|j  }td
| || |s |  d S d S )Nr^   z  # T)linez%sz<60z
Stack:
z
User stack:
zGuard: %s%s%s)
guards_logisEnabledForloggingDEBUG
user_stackreversedfilenamer?   r   stacksummarydebugverbose_guards_logjoinformatr   )r   rr   log_onlyextrar<  maybe_stackmaybe_user_stack)
code_partsr3   r8   add_code_part  s<   
z<CheckFunctionManager.compile_check_fn.<locals>.add_code_partz,Illegal to set tensor_check_names in export.c                 S   sH   g }| D ]}t |tr|| qt |tjsJ ||j  q|S rM   )r   r   r   r=   SymIntrY   maybe_as_int)size_or_stride	convertedr$  r3   r3   r8   convert  s   
z6CheckFunctionManager.compile_check_fn.<locals>.convertc                    $   g | ]} j jt| d  qS )sizer'  tensor_weakref_to_sizes_stridesr   r6   r   r  r   r3   r8   r         z9CheckFunctionManager.compile_check_fn.<locals>.<listcomp>c                    r  )strider  r  r  r3   r8   r     r  )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  r   zUnknown GuardEnvExpr: ___guarded_code___check_tensors___check_tensors_verboser   TORCHDYNAMO_PRINT_GUARDS1zGUARDS
___make_guard_fnr   )F)Dr   r   r  r  r  ospathdirname__file__r   rq   rr   r   r'  r:  r   TensorGuardscheckcheck_verboser   r   r   r   r=   _C_dispatch_keys_dispatch_tls_local_include_set_dispatch_tls_local_exclude_setr   rT   indexrA  ru   tracing_contextguards_contextaotautograd_guardsr   r   input_source_ainput_source_brQ   RuntimeErrorr   ry  OrderedDictr   r   r   updater   uniquer   build_guard_functionenvironr   printr+   r!   guard_fail_hookr   execr   r   closure_varsargsr  r  r  ))r   r  r  
guards_outr  largsr  r   r  gclr   r   check_tensors_fncheck_tensors_verbose_fnr   r  r  tensor_guardstensor_check_argsr   irQ   r   pytypedispatch_keyr   device_indexrA  sizesstridesr  rr   source_ar   r  unique_code_partsmake_guard_fn_args
guard_bodypycodeoutguard_fnr3   )r  r  r   r8   r    s   



%




		

	 



	

z%CheckFunctionManager.compile_check_fnc                 C   s
   d| _ d S r]  )r  r{  r3   r3   r8   
invalidatep  s   
zCheckFunctionManager.invalidatec                 C   s^   z"t || jvrt|| jt |< t|| j W t |S W t |S  ty.   Y t |S w )zadd a weakref, return the id)idr  rR  r   finalizer  	TypeError)r   r   r3   r3   r8   ry   t  s   zCheckFunctionManager.id_ref)NN)rs   rt   ru   r   r   r	   rv   r   r  r  ry   r3   r3   r3   r8   r}   f  s    
@ Jr}   c           	   	      s|  ddl m} tr"t   |  dtdttt tf f fdd}ndtdttt tf fdd}| }| D ]/}||\}}|| |	d| d	 |
  |	d
 W d    n1 s`w   Y  q6| }|	d |
  || |	d W d    n1 sw   Y  | }|	d| d	 |
  || |	d W d    n1 sw   Y  | | fS )Nr   )IndentedBufferrs  rZ   c                    s
     | S rM   )ra   rs  csepassr3   r8   ra     r   z%build_guard_function.<locals>.replacec                 S   s   g | fS rM   r3   r	  r3   r3   r8   ra     s   zif not (z):zreturn Falsezdef guard(L):zreturn Truezdef ___make_guard_fn(zreturn guard)torch._inductor.utilsr  HAS_UNPARSE_FUNCTIONSr_  r  rv   r	   r   
writelines	writelineindentsplicegetvalue)	r  closure_argsr  ra   r   rs  ro  rr   make_guard_fnr3   r
  r8   r    s8   
$






r  r  r   f_localsr  lastc              
   C   sP  |dk}| j s|s|sdS || jd d}|| j |d |d< d}| jD ]8}t| j}	||	d< t  t||	|}
W d   n1 sEw   Y  t|
t	rS|
} nt|
t
r^|
s^|} nq&|rc|a|sgdS tskJ tt|  t daz| j dur|  t|pdt|  W dS W dS  ty } ztjd	d
d W Y d}~dS d}~ww )z(
    called whenever a guard fails.
    r   Nr   )r   r   r  r  __compile_source__zunknown reasonzVFailure in guard_fail_fn callback - raising here will cause a NULL Error on guard evalT)exc_info)r  r  r  r  r  r   r   r   r   rv   r   stashed_first_fail_reasonr*   r-   r   r%   	Exceptionr   error)r  r   r  r  r  firstr   rL  partr  fail_reasonr  r3   r3   r8   r    sP   





r  c                 C   sN   t d|j d|j d|j  t dd| j d  t dd| j d S )NzERROR RUNNING GUARDS  :zlambda r   z and
  )r  co_nameco_filenameco_firstlinenor  r  r  )r  r   r  r  r  r3   r3   r8   guard_error_hook  s
   r$  c                 c   s.    t  }| D ]}||vr|V  || qd S rM   )r   add)seqseenr   r3   r3   r8   r    s   
r  c                 C   s8   |r|| krt |}t | }||krtjtj|dS d S )N)r   )r   	functoolspartialrx   r  )
obj_sourcedupe_sourceser_source_is_localsource_is_localr3   r3   r8   make_dupe_guard	  s   r.  )re   r   ry  r  rS  r(  rN   r4   r   r  r   r  rg   systypesrR  r   r   typingr   r   r   r   r   r	   r
   r   r   numpyr   ModuleNotFoundErrorr=   r  torch._dynamo.sourcer   r   r   torch._guardsr   r   r   r   r   r   %torch.fx.experimental.symbolic_shapesr   r   torch.utils._tracebackr   r   torch.utils.weakr   r   r^   r   r   r   
eval_framer    r!   excr"   r   r#   r$   r%   r&   r  r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   	getLoggerrs   r   _logginggetArtifactLoggerr  r  r  r;   r1   r  check_obj_idcheck_type_id	lru_cacher?   r  is_grad_enabled$are_deterministic_algorithms_enabled_is_torch_function_enabled__getitem__r   r   r  rT   	as_tensorr   version_infor_   rj  rv   rc   r  ImportErrorrj   rk   r  rp   rx   r_  r}   r  r  CodeTyper^  r   r   r  r$  r  r.  r3   r3   r3   r8   <module>   s    ( 0

	





    e[  +

<

