o
    "i                     @   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dd f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   d0ZmY nw d/Zmd+e jjd,ekfd1d.Zld2d3 Zod4d5 ZpejqG d6d7 d7ZrG d8d9 d9e(ZsG d:d; d;ZtG d<d= d=Zud,eekekf fd>d?Zvdawd@eBdAejxdBeekeyf dCezdDe{d,dfdEdFZ|d@eBdAejxdBeekeyf dCezdDe{f
dGdHZ}e:e} dIdJ Z~dKdL ZdS )M    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guardsZ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mr2   r2   c/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/torch/_dynamo/guards.py	<setcomp>R   s    z&uninteresting_files.<locals>.<setcomp>)Ztorch._dynamo.external_utils_dynamoZexternal_utils)torchmodsr2   r2   r7   uninteresting_filesK   s   r<   Z___check_type_idZ___check_obj_idZ___is_grad_enabledZ'___are_deterministic_algorithms_enabledZ___is_torch_function_enabledZ___odict_getitemZ___dict_param_key_idsZ___dict_const_keysZ___dict_containsc                 C   s   | |v S Nr2   )abr2   r2   r7   <lambda>b   s    r@   Z___tuple_iterator_lenZ___tuple_iterator_getitemZ__math_isnaninfZ__load_modulec                 C   s
   t | S r=   )	importlibimport_modulenamer2   r2   r7   r@   g   s   
 Zutils_devicedeviceZ__as_tensor   )      nodereturnc                 C      t | ddS N
 )
astunparseunparsereplacerJ   r2   r2   r7   _ast_unparsev      rT   TFc                 C   rL   rM   )astrQ   rR   rS   r2   r2   r7   rT      rU   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_].*rO   z (z),[]None)recompilematchstrip_function_callstrip_getattr_getitem)rE   Z
valid_namecurrcharr2   r2   r7   r[      s   
	
r[   c                 C   s   t d| d S )z*
    "a[1]" => "a"
    "a.foo" => "a"
    z[.\[]r   )rX   splitrD   r2   r2   r7   r\      s   r\   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   r2   r2   r2   r7   r`      s   
 r`   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de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d0d1 Z d2d3 Z!d4d5 Z"d6d7 Z#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(defdBdCZ)defdDdEZ*dLdefdGdHZ+	IdMdJdKZ,dFS )N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__>_<.Z_dot_)rn   ri   rj   dictscopebuiltins__dict__copyr:   packageZpackage_importerZ_package_imported_modulesitemsrR   argnamescodeshape_env_codetensor_check_namestensor_check_examplestensor_check_guardsrl   )	selfri   rj   rk   rl   rn   rw   rE   Zpackage_moduler2   r2   r7   __init__   s,   	
zGuardBuilder.__init__rE   rK   c                 C   s   t || jtS r=   )evalrw   CLOSURE_VARS)r   rE   r2   r2   r7   get   s   zGuardBuilder.getrb   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)
isinstancerf   rE   r\   r[   r}   rX   rZ   logwarningappend)r   rb   rE   baser2   r2   r7   arg_ref   s   

zGuardBuilder.arg_refc                 C   sD   t | |j}| |}d| | d| d}| ||g d S )N___check_type_id(, ))typer   rE   ri   r   _produce_guard_code)r   rb   tobj_idr~   r2   r2   r7   
TYPE_MATCH  s   
zGuardBuilder.TYPE_MATCHkeyinvertc                 C   s:   |  |}|r	dnd}| d|d| d}| ||gS )Nnot rO   z___dict_contains(r   r   r   r   )r   rb   r   r   Zdict_refZ	maybe_notr~   r2   r2   r7   DICT_CONTAINS  s   
zGuardBuilder.DICT_CONTAINSc                 C   s&   |  |}d| }| ||g d S )Nr   r   )r   rb   refr~   r2   r2   r7   
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   Zoriginating_sourcer#   r   r   r   sourcerh   r   ri   r   rE   r   r   rb   r~   r2   r2   r7   ID_MATCH  s   &zGuardBuilder.ID_MATCHc                 C   s6   |  |j}| | d|j d}| ||g d S )Nz.__name__ == '')r   rE   r   rc   r   r   rb   objr~   r2   r2   r7   
NAME_MATCH,     zGuardBuilder.NAME_MATCHc                 C   s6   |  |j}| | d|  }| ||g d S )Nz.data_ptr() == )r   rE   r   Zdata_ptrr   r   r2   r2   r7   DATA_PTR_MATCH1  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   rG   hasattr(r   r   znot hasattr()provided_guarded_object)rX   rZ   rE   groupr   hasattrr   r   )r   rb   r6   r   attrr   valr~   r2   r2   r7   HASATTR6  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 )Nr2   c                 3   s    | ]}t | V  qd S r=   )r,   )r5   xZok_typesr2   r7   	<genexpr>k  s    

z,GuardBuilder.EQUALS_MATCH.<locals>.<genexpr>str() == r   r   r   z__math_isnan([z],  == )-r   r   rE   r   npZint8Zint16Zint32Zint64Zuint8Zuint16Zuint32Zuint64Zfloat16Zfloat32Zfloat64intfloatboolrf   listtuplesetslice	frozensetranger:   SizerF   dtyper,   rv   all	itertoolschainkeysvaluesrc   r   mathisnanr   ri   LIST_LENGTH	enumerate)	r   rb   r   r   r   Znp_typesr~   idxelemr2   r   r7   EQUALS_MATCHD  s   


 zGuardBuilder.EQUALS_MATCHc                 C   s:   |  |j}t|ttd fr| | d S | | d S r=   )r   rE   r,   r   r   r   r   )r   rb   r   r2   r2   r7   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   r`   r2   rb   r   r   r   r2   r7   setup_guard  s   z+GuardBuilder.NN_MODULE.<locals>.setup_guardr   z$Guard setup for uninitialized class )r   r   r   rE   r   r"   r   )r   rb   r   r2   r   r7   	NN_MODULE  s   



zGuardBuilder.NN_MODULEc                 C   s   |  r	| |S dS )z0things like torch.add and user defined functionsN)is_localr   r   rb   r2   r2   r7   FUNCTION_MATCH  s   
zGuardBuilder.FUNCTION_MATCHc                 C   
   |  |S r=   r   r   r2   r2   r7   BUILTIN_MATCH     
zGuardBuilder.BUILTIN_MATCHc                 C   r   r=   r   r   r2   r2   r7   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   rE   r   r   r   ri   lenr   r   rb   r   valuer   r~   r2   r2   r7   r        
zGuardBuilder.LIST_LENGTHc                 C   r   )Nr   r   r   z___tuple_iterator_len(r   )	r   r   rE   r   r   r   ri   r0   r   r   r2   r2   r7   TUPLE_ITERATOR_LEN  r   zGuardBuilder.TUPLE_ITERATOR_LENc                 C   s8   |  |}|  | }| d| g}| || d S )N is )r   rE   r   )r   rb   source_bZref_aZref_br~   r2   r2   r7   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   rn   z___dict_param_key_ids(r   z___dict_const_keys(zset(.keys()) == )r   r   rE   r   r   r   ri   r   r)   r'   r(   rn   r   )	r   rb   r   r   r   r~   Zparam_key_idsZ
const_keysZconst_keys_reprr2   r2   r7   	DICT_KEYS  s   
zGuardBuilder.DICT_KEYSc                 C   s   |  || | dg d S )Nz is not None)r   r   r   r2   r2   r7   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 r2   r2   )r5   kvr2   r2   r7   r8     s    z5GuardBuilder.NN_MODULE_PARAM_NAMES.<locals>.<setcomp>r   r   r   z{k for k, v in z.named_parameters()} == )	r   r   rE   r   Znamed_parametersr   r   ri   r   )r   rb   r   r   r   r   r~   r2   r2   r7   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   rE   r   r   r   ri   rf   r   r   r   r2   r2   r7   
ODICT_KEYS  s   
zGuardBuilder.ODICT_KEYSc                 C   s   t | |j| j d S r=   )r   watchr   rE   rl   r   r2   r2   r7   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 staterO   Nz___is_grad_enabled()znot ___is_grad_enabled())rE   r   r   GLOBALr   Zinitial_grad_stater   r   r2   r2   r7   	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   Z&initial_deterministic_algorithms_stater   r   r2   r2   r7   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   Zinitial_torch_function_stater   r   r2   r2   r7   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   ZCURRENT_DEVICE)r   rb   r6   r2   r2   r7   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 )NrO   c                 S      g | ]}|j qS r2   )Zconstraint_dimsr5   r>   r2   r2   r7   
<listcomp><      z*GuardBuilder.SHAPE_ENV.<locals>.<listcomp>c                    s    fddj |  D S )Nc                    s   g | ]	}t |tj qS r2   )r   r   ZSIZE)r5   r   dimr2   r7   r   A  s    z?GuardBuilder.SHAPE_ENV.<locals>.get_sources.<locals>.<listcomp>)Ztracked_fakes_id_to_source)t_idr   )output_graphr   r7   get_sources>  s   
z+GuardBuilder.SHAPE_ENV.<locals>.get_sourcesc                 3       | ]} |fV  qd S r=   r2   r5   Zother_sourcer   r2   r7   r   L      
z)GuardBuilder.SHAPE_ENV.<locals>.<genexpr>c                 3   r   r=   r2   r   r   r2   r7   r   V  r   F)source_pairsZ	warn_onlyc                 S   r   r2   )Zfaker   r2   r2   r7   r   `  r   c                 S   r   r2   r   r   r2   r2   r7   r   a  r   )constraint_inputsequalities_inputsrj   Zignore_staticT)	shape_env)rE   rl   r   Ztracked_fakesZexport_constraintsr   r   extendZsharedr   r  Zproduce_guardsrj   exportfreezer   )r   rb   fsr  r   r  
constraintZother_sourcesr  r1   Zshape_guardr2   )r   r   r7   	SHAPE_ENV4  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   rF   requires_gradzndimension()ru   r   r   r   T)Z	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   rE   r:   ZTensorr   r   rl   r   r  r   r,   rF   r   r   rf   r   r   r   r   r.   r   r  r   r   )
r   rb   r   Ztensor_namer~   Ztermsterm
real_valueZstaticreasonr2   r2   r7   TENSOR_MATCHl  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 )NrG   zH_produce_guard_code must be called from inside GuardedCode. Called from rO   __weakref__)r   f_backr   dir	__class__r   r   r`   r~   rE   r   weakrefr   r   r   r   enumEnumZset_export_info)r   rb   ra   r   r  Z	cur_frameZcaller	func_nameZ
name_validZguarded_objectZguarded_object_typeZobj_refr2   r2   r7   r     s@   
z GuardBuilder._produce_guard_coder=   NF)-rc   rd   re   r   r
   objectrf   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   r
  r  r   r2   r2   r2   r7   rh      sV    
>W
		8erh   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)rc   rd   re   r   rf   r   rg   r2   r2   r2   r7   Config  s   
 r!  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  rK   Nc                 C   s
   || _ d S r=   )_config)r   r   r2   r2   r7   r   !  r   z"PyExprCSEPass.ExprCounter.__init__rJ   c                    s4   t |tjr| jjt|  d7  < t | d S Nr   )r   r  ALLOWED_NODE_TYPESr"  r  rT   supervisit)r   rJ   r  r2   r7   r&  $  s   zPyExprCSEPass.ExprCounter.visit)r   r  rK   N)	rc   rd   re   r   rV   ASTr   r&  __classcell__r2   r2   r'  r7   ExprCounter   s    
 r*  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_namerK   Nc                    s    t    || _|| _g | _d S r=   )r%  r   r"  	_gen_namepreface)r   r   r+  r'  r2   r7   r   *  s   

zPyExprCSEPass.Replacer.__init__rJ   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  r$  rT   r"  r  USE_THRESHOLDr   r%  r&  r,  r-  r   rV   NameLoad)r   rJ   exprZnode_Zexpr_var_namer'  r2   r7   r&  4  s   zPyExprCSEPass.Replacer.visit)rc   rd   re   r   rf   r   rV   r(  r   r&  r)  r2   r2   r'  r7   Replacer)  s    
 
r3  rK   Nc                 C   s$   d| _ | jtdd i d| _d S )Nr   c                   S   s   dS )Nr   r2   r2   r2   r2   r7   r@   Q  s    z(PyExprCSEPass.__init__.<locals>.<lambda>)r  r   )_counterr!  collectionsdefaultdictr"  r   r2   r2   r7   r   N  s   zPyExprCSEPass.__init___varprefixc                 C   s    | | j  }|  j d7  _ |S r#  )r4  )r   r9  rE   r2   r2   r7   _new_varT  s   zPyExprCSEPass._new_varexprsc                 C   s*   |  | j}|D ]
}|t| qd S r=   )r*  r"  r&  rV   parse)r   r;  counterer2   r2   r7   countY  s   zPyExprCSEPass.countr1  c                 C   s.   |  | j| j}|t|}|jt|fS r=   )r3  r"  r:  r&  rV   r<  r-  rT   )r   r1  replacernew_noder2   r2   r7   rR   ^  s   zPyExprCSEPass.replace)rK   N)r8  )rc   rd   re   r.  rV   	AttributeCall	Subscriptr$  dataclasses	dataclassr!  NodeVisitorr*  NodeTransformerr3  r   rf   r:  r   r?  r	   rR   r2   r2   r2   r7   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 )rm   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 r=   r2   )leftrightr2   r2   r7   combine_scopesz  s
   z5CheckFunctionManager.__init__.<locals>.combine_scopesc                    sD   |   }|tju r|  S |   }|d usJ ||  S r=   )r  r   ZCONSTANTrE   selectr   )r   r  ZbuilderZw_globalZw_localr2   r7   rj     s   
z1CheckFunctionManager.__init__.<locals>.source_refr   Frp   )r   __defaults____kwdefaults__hooks)r1   valid	_weakrefsr   rh   ri   global_scopeZlocal_scoperw   r  r   sortedr   sort_keyr   Zguard_nn_modulesr  rE   Zskip_nnmodule_hook_guardscreatecompile_check_fnZcheck_fnclear)	r   r   rI  r1   rL  rj   local_builderglobal_builderrb   r2   rN  r7   r   o  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 )NrO   z  # T)linez%sz<60z
Stack:
z
User stack:
zGuard: %s%s%s)
guards_logisEnabledForloggingDEBUGZ
user_stackreversedfilenamer<   r   stacksummarydebugverbose_guards_logjoinformatr   )r~   rb   log_onlyextrar  Zmaybe_stackZmaybe_user_stack)
code_partsr2   r7   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 r=   )r   r   r   r:   ZSymIntrJ   Zmaybe_as_int)Zsize_or_strideZ	convertedr   r2   r2   r7   convert  s   
z6CheckFunctionManager.compile_check_fn.<locals>.convertc                    $   g | ]} j jt| d  qS )sizer   Ztensor_weakref_to_sizes_stridesr   r5   r   ro  r   r2   r7   r         z9CheckFunctionManager.compile_check_fn.<locals>.<listcomp>c                    rp  )Zstriderr  rs  rt  r2   r7   r     ru  )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)rk  r   zUnknown GuardEnvExpr: Z___guarded_code___check_tensors___check_tensors_verboser   ZTORCHDYNAMO_PRINT_GUARDS1zGUARDS
Z___make_guard_fnrp   )F)Dr   r}   ri  r_  rg  ospathdirname__file__r~   ra   rb   r   r   r  r   TensorGuardscheckZcheck_verboser   r   r   r   r:   _CZ_dispatch_keysZ_dispatch_tls_local_include_setZ_dispatch_tls_local_exclude_setr   rF   indexr  re   Ztracing_contextZguards_contextaotautograd_guardsr   r   Zinput_source_aZinput_source_brE   RuntimeErrorr   r5  OrderedDictr   r   r|   updater   uniquer   build_guard_functionenvironr   printr+   r!   guard_fail_hookrv   execrw   r   closure_varsargsrm  rT  rI  ))r   rZ  r[  Z
guards_outrI  largsr  r   rn  Zgclr~   r   Zcheck_tensors_fnZcheck_tensors_verbose_fnr   rv  rw  Ztensor_guardsZtensor_check_argsr   irE   r   ZpytypeZdispatch_keyr   Zdevice_indexr  sizesstridesr  rb   Zsource_ar   r  Zunique_code_partsZmake_guard_fn_args
guard_bodyZpycodeoutguard_fnr2   )rm  ro  r   r7   rX    s   



%




		

	 



	

z%CheckFunctionManager.compile_check_fnc                 C   s
   d| _ d S r  )rR  r7  r2   r2   r7   
invalidatex  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)idrS  r  r   finalizer  	TypeError)r   r   r2   r2   r7   ri   |  s   zCheckFunctionManager.id_ref)NN)rc   rd   re   r   r   r	   rf   r   rX  r  ri   r2   r2   r2   r7   rm   n  s    
@ Jrm   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   )IndentedBufferr1  rK   c                    s
     | S r=   )rR   r1  Zcsepassr2   r7   rR     r   z%build_guard_function.<locals>.replacec                 S   s   g | fS r=   r2   r  r2   r2   r7   rR     s   zif not (z):zreturn Falsezdef guard(L):zreturn Truezdef ___make_guard_fn(zreturn guard)Ztorch._inductor.utilsr  HAS_UNPARSE_FUNCTIONSr  r?  rf   r	   r   
writelinesZ	writelineindentsplicegetvalue)	rm  Zclosure_argsr  rR   r  r1  r-  rb   Zmake_guard_fnr2   r  r7   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   Nrp   )ro   rp   ry  rx  Z__compile_source__zunknown reasonzVFailure in guard_fail_fn callback - raising here will cause a NULL Error on guard evalT)exc_info)rI  rT  r  r  rm  rv   r   r   r   rf   r   stashed_first_fail_reasonr*   r-   r   r%   	Exceptionr   error)r  r~   r  r  r  firstrw   r  partrT  Zfail_reasonr>  r2   r2   r7   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_firstlinenori  r  rm  )r  r~   r  r  r  r2   r2   r7   guard_error_hook  s
   r  c                 c   s.    t  }| D ]}||vr|V  || qd S r=   )r   add)seqseenr   r2   r2   r7   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partialrh   r   )Z
obj_sourceZdupe_sourceZser_source_is_localZsource_is_localr2   r2   r7   make_dupe_guard  s   r  )rV   rx   r5  rE  r  r  rB   r3   r   ra  r   r{  rX   systypesr  r   r   typingr   r   r   r   r   r	   r
   r   r   numpyr   ModuleNotFoundErrorr:   r   Ztorch._dynamo.sourcer   r   r   Ztorch._guardsr   r   r   r   r   r   Z%torch.fx.experimental.symbolic_shapesr   r   Ztorch.utils._tracebackr   r   Ztorch.utils.weakr   r   rO   r   r   r   Z
eval_framer    r!   excr"   r   r#   r$   r%   r&   r   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   	getLoggerrc   r   Z_loggingZgetArtifactLoggerr_  rh  r  r9   r1   r  Zcheck_obj_idZcheck_type_id	lru_cacher<   r  Zis_grad_enabledZ$are_deterministic_algorithms_enabledZ_is_torch_function_enabled__getitem__r   r   r   rF   Z	as_tensorr   version_inforP   r(  rf   rT   r  ImportErrorr[   r\   rF  r`   rh   r  rm   r  r  CodeTyper  r   r   r  r  r  r  r2   r2   r2   r7   <module>   s    ( 0

	






    l[  +

<

