U
    zh5                     @   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mZmZmZ ddlmZ zd dlZW n ek
r   dZY nX zd dlmZ W n ek
r   edZY nX d dlZd dlZd dlmZ ddlm Z  ddl!m"Z" dd	l#m$Z$m%Z% dd
l&m'Z'm(Z(m)Z)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9m:Z: ddl;m<Z<m=Z= ddl>m?Z? dd Z@G dd de:ZAG dd deAZBG dd dZCG dd deAZDG dd deDZEG dd deDZFG dd de:ZGdS )     N)DictGenericList   )create_call_function)
PyTreeSpec)TracingContext)	variables)unimplemented)GuardBuilderinstall_guard)
AttrSourceGetItemSourceODictGetItemSourceRandomValueSource)all_hook_namesbuild_checkpoint_variablecheck_constant_argsget_custom_getattrhas_torch_functionis_namedtuple_clsis_utils_checkpointistypenamedtuple_fieldsobject_has_getattributeproxy_args_kwargstensortype_to_dtype   )MutableLocalVariableTracker)GenericContextWrappingVariableNullContextVariable)DefaultDictVariablec                 C   s   | t jtjjjfkS N)object__setattr__torchnnModule)val r*   V/var/www/html/venv/lib/python3.8/site-packages/torch/_dynamo/variables/user_defined.pyis_standard_setattr;   s    r,   c                   @   s   e Zd ZdS )UserDefinedVariableN__name__
__module____qualname__r*   r*   r*   r+   r-   B   s   r-   c                       s   e Zd Z fddZdd Zdd Zdd Zd	d
 Zee	
ddd Zee	
ddd Zdd Zedd fddZdd Zdddd fddZdddd fddZdd  Zedd fd!d"Z fd#d$Z  ZS )%UserDefinedClassVariablec                    s   t  jf | || _d S r#   )super__init__valueselfr5   kwargs	__class__r*   r+   r4   G   s    z!UserDefinedClassVariable.__init__c                 C   s   | j S r#   r5   r7   r*   r*   r+   as_python_constantK   s    z+UserDefinedClassVariable.as_python_constantc                 C   s
   t | jS r#   )typer5   r<   r*   r*   r+   python_typeN   s    z$UserDefinedClassVariable.python_typec                 C   s   | j S r#   r;   r<   r*   r*   r+   as_proxyQ   s    z!UserDefinedClassVariable.as_proxyc                 C   s   d| j  dS )NzUserDefinedClassVariable()r;   r<   r*   r*   r+   __str__T   s    z UserDefinedClassVariable.__str__Nc                   C   s   t jt jt jt jhS r#   )r&   ZdeviceZfinfoZiinfoSizer*   r*   r*   r+   _constant_fold_classesW   s
    z/UserDefinedClassVariable._constant_fold_classesc                   C   s    t t tjtjjtjjhB S r#   )setr   keysr&   TensorcudaZStreamEventr*   r*   r*   r+   _in_graph_classesa   s
    
z*UserDefinedClassVariable._in_graph_classesc                 C   s   | j |  kS r#   )r5   rD   r<   r*   r*   r+   can_constant_fold_throughj   s    z2UserDefinedClassVariable.can_constant_fold_throughr   namereturnc           
         s  ddl m} ddl m}m} ddlm} |dkr>|| jjS |dkrT|| jj	S | j
d k	rjt| j
|nd }zt| j|}W n tk
r   d }Y nX t|tr|| j}	|d k	r||	j|	|dS ||	|	S nZt|trtj|j| |dS |r6t|s tjd	kr6|d
kr6||||| jS | jtjkr\|dkr\t ||S ||rr||S t|t j!r||S |t"| jdi ks| jj#$ds| jj#dkr|r||||S t ||S )Nr   trace_rulesr   )ConstantVariableEnumVariableVariableBuilderr/   r1   source)      __mro__fromkeys__dict__torch.r&   )% rP   rQ   rR   builderrT   creater5   r/   r1   rV   r   inspectgetattr_staticAttributeError
isinstancestaticmethod__get__lookupcreate_with_sourceclassmethodr	   UserMethodVariable__func__ismemberdescriptorsysversion_infocollectionsOrderedDictr3   var_getattr
is_literalenumEnumgetattrr0   
startswith)
r7   txrM   rP   rQ   rR   rT   rV   objfuncr9   r*   r+   rp   m   sP    




z$UserDefinedClassVariable.var_getattrc                    s~   ddl m} |d|d|d|d|d|dfdd}|||\  fd	d
}t|S )aj  
        functional: input, target, weight=None, size_average=None, ignore_index=- 100, reduce=None, reduction='mean',
        label_smoothing=0.0

        non functional ctor: weight=None, size_average=None, ignore_index=- 100, reduce=None, reduction='mean',
        label_smoothing=0.0

        non functional loss call: input, target, optional_output
        r   rQ   NiZmeang        c                 S   s   | |||||fS r#   r*   )weightsize_averageignore_indexreduce	reductionlabel_smoothingr*   r*   r+   normalize_args   s    	zIUserDefinedClassVariable._call_cross_entropy_loss.<locals>.normalize_argsc                    sD   ddl m} |jjdtjjjft| | gi  dS )Nr   )wrap_fx_proxycall_functionrv   proxy)	r^   r   outputcreate_proxyr&   r'   Z
functionalZcross_entropyr   )inputtargetr   r|   r   Z
reduce_argr~   r{   rv   rz   r*   r+   fake_cross_entropy_loss   s*    
zRUserDefinedClassVariable._call_cross_entropy_loss.<locals>.fake_cross_entropy_loss)r]   rQ   r_   r	   ZLambdaVariable)r7   rv   argsr8   rQ   r   r   r*   r   r+   _call_cross_entropy_loss   s$    

z1UserDefinedClassVariable._call_cross_entropy_lossList[VariableTracker]Dict[str, VariableTracker]r   r8   rN   c           
         s>  |dkrzt |dkrz|szd| jjkrzdt i}t }| j D ],}t||j|j	}|
tj||d q>tj|f|S | jtjtjhkr|dkrddlm}	 |	j|| jf||S |dkrt |dkrt|d d	rt| j|d jkS |d
kr,t |dkr,t|d d	r,t| j|d jkS t ||||S )N__subclasses__r   mutable_localrU   rZ   r   BuiltinVariable__eq__r5   __ne__)lenr5   r[   r   listr   r   import_sourcer0   r/   appendr	   r2   ListVariablern   ro   defaultdictbuiltinr   Zcall_custom_dict_fromkeyshasattrrQ   r3   call_method)
r7   rv   rM   r   r8   optionsZsubs_as_varssubrV   r   r9   r*   r+   r      sD    


 "(z$UserDefinedClassVariable.call_methodc                    s  ddl m} ddlm}m} ddlm} t||}|  rl|rlt	j
|  dd |D dd	 | D S | jtjjkr| |||S | jtjkrt S | jtjkr|j|tjf||S | jtjkr t|dkr t|d
 r ti tj|d
 t dS | jtjkrp|spt|d
kr(g }	n6t|dkrV|d
 |rV|d
  |}	nt!d t	j"j#|	t dS | jt$j%kr|st!d |d
 }
|dd  }t	j&j'|
||dS | jt(j)kr|st	j*||S t+t,| jt,rLt-| jdrLt-| jdrLt||rL| jj.t/j.krLt|d
krLdd |D }t0|| j| dS t1| jrft2| j}| jj3dkrt4t5||d
 j}n| jj6}t7|}	|	8d gt|t|	   i }t5||	D ]N\}}|d kr||kr|| }n||kst9|||| }|||< q| D ]&\}}||ks.t9||	|:|< qt;dd |	D sXt9t	<|	| jS | = r|>| jr| j?r|j@j A| j?| jt+| jtjjBrt	jCntDi }tEF| jdd tjjBj.kr|j@j G|dt	j
d |S |H|d|| |S nt	jIJ| jr6dt i}t	jI| j|||S t	jKJ| jrddt i}t	jK| j|||S t	jLJ| jr| j?rt	jLt	t7M|||j| j| j?t dS | j| N krhtOr@| jtPkr@t|dkr@tQ|d
 t	jRr@t|d
 jdkr@t;dd |d
 jD r@|||j@jSdtjTftU|| d}|g}|||j@jSd| jftU|| d}|S t+| jtVjWrt|dkr|sdt i}t	jX| j|d
 |S tY M|||S )Nr   )SideEffectsr   )SourcelessBuilderr   r   c                 S   s   g | ]}|  qS r*   r=   .0xr*   r*   r+   
<listcomp>  s     z:UserDefinedClassVariable.call_function.<locals>.<listcomp>c                 S   s   i | ]\}}||  qS r*   r   r   kvr*   r*   r+   
<dictcomp>  s      z:UserDefinedClassVariable.call_function.<locals>.<dictcomp>r   )r   z*deque() with more than 1 arg not supportedzfunctools.partial malformed)r   keywords	__enter____exit__c                 S   s   g | ]}|  qS r*   r   r   r*   r*   r+   r   L  s     )Zcm_objztorch.return_typesc                 s   s   | ]}|d k	V  qd S r#   r*   r   r*   r*   r+   	<genexpr>n  s     z9UserDefinedClassVariable.call_function.<locals>.<genexpr>r4   Z__call_nn_module_initTr   )Zuser_clsZuser_cls_sourcer   c                 s   s   | ]}t |tjV  qd S r#   )rc   r	   ZTensorVariabler   r*   r*   r+   r     s     r   r   )Zside_effectsr   r^   r   r   r   r   r   rK   r	   rQ   r_   r=   itemsr5   r&   r'   ZCrossEntropyLossr   
contextlibnullcontextr!   rn   ro   Zcall_custom_dictr   r   r"   Zis_supported_argr   dequeZhas_unpack_var_sequenceunpack_var_sequencer
   listsZDequeVariable	functoolspartialZ	functionsZFunctoolsPartialVariablewarningscatch_warningsZCatchWarningsCtxManagerVariable
issubclassr>   r   r4   r$   r    r   r   r0   dictzip_field_defaultsr   extendAssertionErrorindexallZNamedTupleVariableis_standard_newZ"cls_supports_mutation_side_effectsrV   r   Ztrack_object_newr(   ZUnspecializedNNModuleVariableUserDefinedObjectVariabler`   ra   
store_attrr   ZCustomizedDictVariableis_matching_clsZDataClassVariableZRestrictedListSubclassVariabler   rJ   npr   rc   r   r   stackr   rr   rs   rR   r3   )r7   rv   r   r8   r   r   r   r   Zconstant_argsr   fnZ	rest_argsZunwrapped_argsfieldsfield_defaultsZvar_tracker_kwargs
field_nameZvar_trackerZ	field_varrM   r5   varr   ZstackedZtensor_variabler9   r*   r+   r     sr   
 

    	





 

	

   

		$
z&UserDefinedClassVariable.call_functionc                 C   s0   t | jdd}t|tr |j}|tjtjfkS )z"Check for __new__ being overridden__new__N)	r`   ra   r5   rc   rd   rj   r$   r   r   )r7   Znew_fnr*   r*   r+   r     s    
z(UserDefinedClassVariable.is_standard_newc                    sB   | j r4t| j |}t|tj tt| j	|S t
 ||S r#   )rV   r   r   
make_guardr   HASATTRr	   rQ   r   r5   r3   call_hasattr)r7   rv   rM   rV   r9   r*   r+   r     s
    z%UserDefinedClassVariable.call_hasattrc                    s   |dkr| j jS t ||S )Nr/   )r5   r/   r3   const_getattrr7   rv   rM   r9   r*   r+   r     s    z&UserDefinedClassVariable.const_getattr)r/   r0   r1   r4   r=   r?   r@   rB   rd   r   	lru_cacherD   rJ   rK   strrp   r   r   r   r   r   r   __classcell__r*   r*   r9   r+   r2   F   s4   4D'  <r2   c                   @   s   e Zd ZdS )NO_SUCH_SUBOBJNr.   r*   r*   r*   r+   r     s   r   c                       s  e Zd ZdZddhejZd8 fdd	Zdd Zd	d
 Z fddZ	dd Z
dd Zdd Zeeddd Zdd Zdddd fddZdd Zdd  Z fd!d"Zd#d$ Zd%d& Zdddd fd'd(Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zedd3d4d5Zd6d7 Z   Z!S )9r   z_
    Mostly objects of defined type.  Catch-all for something where we only know the type.
    r5   
value_typeNc                    s8   t  jf | || _|pt|| _t|| jks4td S r#   )r3   r4   r5   r>   r   r   )r7   r5   r   r8   r9   r*   r+   r4     s    z"UserDefinedObjectVariable.__init__c                 C   s6   | j j}|dkr"tt| jdd }| jj d| dS )N)Zbuiltin_function_or_methodZgetset_descriptorZmethod_descriptormethodr/   (rA   )r   r/   r   rt   r5   r:   )r7   innerr*   r*   r+   rB     s    z!UserDefinedObjectVariable.__str__c                 C   s   | j S r#   )r   r<   r*   r*   r+   r?     s    z%UserDefinedObjectVariable.python_typec                    s(   | j rt| j tj | jS t  S r#   )rV   r   r   r   ID_MATCHr5   r3   guard_as_python_constantr<   r9   r*   r+   r     s    z2UserDefinedObjectVariable.guard_as_python_constantc                 C   s   t | std|  d S )Nz<calling torch function on object without __torch_function__ )r   r   r<   r*   r*   r+   torch_function_check  s
    z.UserDefinedObjectVariable.torch_function_checkc                 C   s$   |    ddlm} ||| j| jS )Nr   )build_torch_function_fn)r   torch_functionr   r5   rV   )r7   rv   r   r*   r*   r+   get_torch_fn   s    z&UserDefinedObjectVariable.get_torch_fnc                 C   s8   |    ddlm}m} ||||| | |||||S )Nr   )_get_subclass_type_varcall_torch_function)r   r   r   r   r   )r7   rv   r   typesr   r8   r   r   r*   r*   r+   r     s    z-UserDefinedObjectVariable.call_torch_functionc                  C   s   t j t jt jt jh} | S r#   )randomrandint	randrangeuniform)Zfnsr*   r*   r+   _supported_random_functions  s    z5UserDefinedObjectVariable._supported_random_functionsc                 C   s@   |t | jdi kr<ztt| j|W S  tk
r:   Y nX d S )Nr[   )rt   r5   r`   ra   r>   rb   )r7   rM   r*   r*   r+   _maybe_get_baseclass_method   s    z5UserDefinedObjectVariable._maybe_get_baseclass_methodr   r   r   r   c              	      s8  ddl m}m m}m} | |}|d k	r&|tjkr@ d S t	|rZ| j
|f||S |tjjkr|sn|rrt| js|tt| j }	tt j|	stt| jtj |jj| j  | fdd|	D S |tjjtjfkrrt|dkrrt |d  |frrt!"t#| jdtjjtjfkrr|r<t| jsHtt| jtj  |d $ | jkS |tjj%krt | jtjr| jst|s|rtg }
| &|dg i }	|	'|D ] }|
(||| )||g q|jj| j  ||
S |tjj*krJt|dkrJ|r.t| js:t| )||d S |tj+tj,fkrt|dkr|st-|d dr | j|d jk|tj,kkS t |t.j/r| jd krd nt0t0| jd|}||| |d	1|||S |tj2kr&| jr&|s&|s&t| jtj3  t| jS t4 &||||S )
Nr   )r   rQ   TupleVariableri   c                    s   g | ]}  |qS r*   )r_   r   r   ry   r*   r+   r   H  s     z9UserDefinedObjectVariable.call_method.<locals>.<listcomp>r   rF   r5   r:   rU   )5r]   r   rQ   r   ri   r   r$   r4   r_   r,   method_setattr_standardrn   ro   rF   r   rV   r   r5   r   maprq   r   r   r   ZDICT_CONST_KEYSr   Zguard_on_key_orderaddrM   __contains__r   r   rc   r`   ra   r>   r=   r   r   r   r   odict_getitem__getitem__r   r   r   r   FunctionTyper   r   __len__SEQUENCE_LENGTHr3   )r7   rv   rM   r   r8   r   r   ri   r   rF   r   keyrV   r9   ry   r+   r   (  s    






 

   z%UserDefinedObjectVariable.call_methodc                 C   sp   z|  }W n" tk
r.   td|  Y nX |jj| sTtd|  d| d |jj| || td S )Nznon-const setattr name: zsetattr(z, z, ...))	r=   NotImplementedErrorr
   r   r   is_attribute_mutationr   r	   rQ   )r7   rv   rM   r5   r*   r*   r+   r     s    z1UserDefinedObjectVariable.method_setattr_standardc                 C   s   t t| jdd  S )Nr%   )r,   r`   ra   r5   r<   r*   r*   r+   needs_slow_setattr  s    z,UserDefinedObjectVariable.needs_slow_setattrc                    sp    j rd dtjkrd dtjkrd dtjkrdt j tj	  fddt
t jD S t |S )N__iter__r   r   c                    s*   g | ]"}t jj j| t j|d qS )rU   )r	   ZLazyVariableTrackerr_   r5   r   rV   r   r<   r*   r+   r     s
   
zAUserDefinedObjectVariable.unpack_var_sequence.<locals>.<listcomp>)rV   r   r   r   r   r   r   r   r   r   ranger   r5   r3   r   r7   rv   r9   r<   r+   r     s    
z-UserDefinedObjectVariable.unpack_var_sequencec                 C   s   |  |dg i S )N__next__)r   r   r*   r*   r+   next_variable  s    z'UserDefinedObjectVariable.next_variablec                 C   s,   z| j |  kW S  tk
r&   Y dS X d S )NF)r5   r   	TypeErrorr<   r*   r*   r+   is_supported_random  s    z-UserDefinedObjectVariable.is_supported_randomc                    s   ddl m} ddlm} |  rtdd |D rtdd | D rdd	 |D }d
d | D }t|j	j
}| j||}t|}|j	j
| j||f ||||S t| jtjr| jj}	| jj}
|	tjjjjkrtj|
jr|s|st|
j|||S |	tjjj jkrZ|
jtjjj krZt!|
j"}t|
j||g|S | j#d krnt$d t%| j#d}||||	}t%| j#d}||||
}|||g| |S t| jt&j'r|(| jj)tj*krtdd t+,| jj-| jj. D r| j#rHt/t%| j#d0t1j2t%| j#d0t1j3t%| j#d0t1j3 dd	 | jj-D }|4| dd | jj. D }|5| t6| jj)rt7 |||S t*| jj)|||S t8| jr| j#rt/| j#0t1j9 | :|d||S t; |||S )Nr   rO   r   rS   c                 s   s   | ]}|  V  qd S r#   Zis_python_constantr   r*   r*   r+   r     s     z:UserDefinedObjectVariable.call_function.<locals>.<genexpr>c                 s   s   | ]}|  V  qd S r#   r  r   r   r*   r*   r+   r     s     c                 S   s   g | ]}|  qS r*   r   r   r*   r*   r+   r     s     z;UserDefinedObjectVariable.call_function.<locals>.<listcomp>c                 S   s   i | ]\}}||  qS r*   r   r   r*   r*   r+   r     s      z;UserDefinedObjectVariable.call_function.<locals>.<dictcomp>z9Sourceless UserDefinedObjectVariable method not supportedrj   __self__c                 s   s   | ]}t j|V  qd S r#   )r	   rQ   rq   r  r*   r*   r+   r     s   rx   r   r   c                 S   s   g | ]}t j|qS r*   r	   rQ   r_   r  r*   r*   r+   r     s    c                 S   s   i | ]\}}|t j|qS r*   r  r   r*   r*   r+   r     s    __call__)<r]   rP   r^   rT   r   r   valuesr   r   r   Zrandom_callsr5   r   r   Zwrap_unspecialized_primitiver   r   
MethodTyperj   r  r&   utilsZ_contextlibZ_DecoratorContextManagercloner	   ZTorchCtxManagerClassVariabler   r:   r   ZautogradZ	grad_modeZinference_moderQ   moderV   r
   r   r   r   rf   rx   ZTorchInGraphFunctionVariable	itertoolschainr   r   r   r   r   r   ZCONSTANT_MATCHr   updater   r   callableZFUNCTION_MATCHr   r3   )r7   rv   r   r8   rP   rT   Zrandom_call_indexZexample_valuerV   rx   rw   r   Zfunc_srcZfunc_varZobj_srcZobj_varpartial_argsZpartial_kwargsr9   r*   r+   r     s    
    	



    z'UserDefinedObjectVariable.call_functionc                 C   s   t | jrtd d S )Nz6UserDefinedObjectVariable with custom __getattribute__)r   r5   r
   r<   r*   r*   r+   _check_for_getattribute  s    
z1UserDefinedObjectVariable._check_for_getattributec                 C   s
   t | jS r#   )r   r5   r<   r*   r*   r+   _check_for_getattr  s    z,UserDefinedObjectVariable._check_for_getattrc                 C   s   t | jtjjtfs2d| jjjks2t| jt	j
krz0t| jj|t}|tk	r`|| jjkr`|W S W n tk
rv   Y nX t| j|}nt| j|}|S )N	__slots__)rc   r5   r&   r'   r(   r   r:   r[   r>   	threadinglocalr`   ra   r   rb   rt   )r7   rM   Zcls_varsubobjr*   r*   r+   _getattr_static   s&      
z)UserDefinedObjectVariable._getattr_staticc                 C   sF   |    |jj| |r:|jjj| |dd}t|tj S || jj	kS )NTZ
deleted_ok)
r  r   r   has_pending_mutation_of_attr	load_attrrc   r	   DeletedVariabler5   r[   )r7   rv   r   Zmutated_attrr*   r*   r+   has_key_in_generic_dict5  s
    z1UserDefinedObjectVariable.has_key_in_generic_dictc              	   C   sR  ddl m} ddl m} ddlm} | j}| jr<t| j|nd }|   |j	j
| |rh|j	j
| |S |dkrd|i}tj| |f|S z| |}	W n| tk
r   t}	|  }
t|
tjrd }| jrt| jd}tj|
| |d	|||gi  Y S |
d k	rtd
 Y nX t|	tr`| jrDtt| jd|}t|d}tj|	j| |d	|g i S t|	tjjjrt |	|d	}tj|	j!j"||d	|| gi S t|	t#r|	!| j}|d k	r|$|j%||d	S |$||S nBt|	t&rtj|	j"| '|d|d	S t|	tjs:t|	tj(r(t| jtj)j*r(t+| j|}||	kr~t,|	dr~|	j-}	|	}|rvt|dnd }qFt|	tj(r|j.| jk	rtd |	j"}nt|	tjst/|	}t01|rtj|| |d	S t02|r(t3|rt4|d	S |d k	r|$|j%||d	S |$||S |t+|di ks`|5|	s`t|	tj6tj)j*t7j8fr|rt9|:t;j< ||||	S |5|	r||	S t=|	tjj>j?kst=|	tjj>j@kst=|tjj>j?krddlmA} |||	S |t+|di krt=|jBCds t|	t7j8rdt=|jBkrtD|st|	tjEs|st+tFGt=|jBt=|jHt=|ksxt/tt|It=|jBt=|jH|}||||	S d|i}t|	tjjJjKtjjJjLtjjJjMfrt |	f|S t| jtj)j*r&|tNkr&t|	tOjPst/|	s&tjQ|	tOjPf|S |dkrBtRt=| jf|S tj| |f|S )Nr   rO   r   ry   rS   r[   rV   __getattr__rU   z)UserDefined with non-function __getattr__r:   fget_torchdynamo_inlinez"__self__ mismatch for bound method)r   r\   ztorch.optim)Sr]   rP   rQ   r^   rT   r5   rV   r   r  r   r   r  r  r	   ZGetAttrVariabler  rb   r   r  rc   r   r   ri   r   r_   r
   propertyr  r&   distributionsr  Zlazy_propertyr   re   rj   rd   rf   rg   rh   rp   r  r'   r(   rt   r   r  r  r   r`   ismethod
isfunctionr   r   rq   rG   rePatternr   r   r   r   r>   Z_pytreeZTreeSpecZLeafSpecr   r0   ru   r  MethodDescriptorType	importlibimport_moduler/   r   constraintsZ	_IntervalZ_Real
Constraintr   rn   ro   ZConstDictVariabler2   )r7   rv   rM   rP   rQ   rT   r5   rV   r   r  Z
getattr_fnZ
new_sourceZ
subobj_varrx   Zdynamic_subobjr   r*   r*   r+   rp   =  sL      
 

        
 
 




 




  
z%UserDefinedObjectVariable.var_getattrrL   c                 C   s   |j j| rPz,|j jj| |dd}tjt|tj W S  t	k
rN   Y nX | j
rntt| j
|tj |  s~|  rtd z| | tjdW S  tk
r   tjd Y S X d S )NTr  zhasattr with custom __getattr__F)r   r   r   r  r	   rQ   r_   rc   r  KeyErrorrV   r   r   r   r   r   r  r  r
   r  rb   )r7   rv   rM   resultr*   r*   r+   r     s&    
z&UserDefinedObjectVariable.call_hasattrc                 C   s^   ddl m} ddlm} ||r0|jd k	r0|jn| }||t| j|tj	| j
| S )Nr   rS   )is_hashable)r^   rT   dictsr,  rV   r=   r   rn   ro   r   r5   )r7   rv   r   rT   r,  r   r*   r*   r+   r     s    
z'UserDefinedObjectVariable.odict_getitem)N)"r/   r0   r1   __doc__r-   Z_nonvar_fieldsr4   rB   r?   r   r   r   r   rd   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  rp   r   r   r   r   r*   r*   r9   r+   r     sD   	c c #r   c                       s.   e Zd Z fddZddddddZ  ZS )	SourcelessGraphModuleVariablec                    s   t  j|f| d S r#   )r3   r4   r6   r9   r*   r+   r4     s    z&SourcelessGraphModuleVariable.__init__r   r   r   r   c                 C   s(   t | jjj}| g| }||||S r#   )r	   ZUserFunctionVariabler5   forwardrj   Zinline_user_function_return)r7   rv   rM   r   r8   Zfn_variabler*   r*   r+   r     s    
z)SourcelessGraphModuleVariable.call_method)r/   r0   r1   r4   r   r   r*   r*   r9   r+   r/    s
   r/  c                       s4   e Zd Zedd Z fddZ fddZ  ZS )KeyedJaggedTensorVariablec                 C   s"   t jd}|d k	o t| |jkS )Nztorchrec.sparse.jagged_tensor)rl   modulesgetr>   KeyedJaggedTensor)rw   modr*   r*   r+   is_matching_object   s    z,KeyedJaggedTensorVariable.is_matching_objectc                    s0   ddl m} t||kstt j|f| d S )Nr   )r4  )Ztorchrec.sparse.jagged_tensorr4  r>   r   r3   r4   )r7   r5   r8   r4  r9   r*   r+   r4   %  s    z"KeyedJaggedTensorVariable.__init__c              
      sX   t jjjrJ| jd k	rJ|dkrJtjdd t ||W  5 Q R  S Q R X t ||S )N)Z_length_per_keyZ_offset_per_keyT)Z#force_unspec_int_unbacked_size_like)	r&   Z_dynamoconfigZ3force_unspec_int_unbacked_size_like_on_torchrec_kjtrV   r   patchr3   rp   r   r9   r*   r+   rp   +  s     z%KeyedJaggedTensorVariable.var_getattr)r/   r0   r1   rd   r6  r4   rp   r   r*   r*   r9   r+   r1    s   
r1  c                       s:   e Zd ZdZd	 fdd	Z fddZ fddZ  ZS )
RemovableHandleVariableNc                    s   t  jf | || _|| _d S r#   )r3   r4   r   idx)r7   r   r;  r8   r9   r*   r+   r4   9  s    z RemovableHandleVariable.__init__c                    sN   |dkr8| j | jkr,|jj| j  | j| _ tjd S t 	|||| d S )Nremove)
r;  REMOVEDr   r   Zremove_hookr	   rQ   r_   r3   r   )r7   rv   method_namer   r8   r9   r*   r+   r   D  s    z#RemovableHandleVariable.call_methodc                    s<   | j | jkr,|dd |tdd d S t | d S )Nztorch._dynamo.utilsZinvalid_removeable_handler   T)r;  r=  Zload_import_fromZextend_outputr   r3   reconstruct)r7   Zcodegenr9   r*   r+   r?  L  s
    z#RemovableHandleVariable.reconstruct)NN)r/   r0   r1   r=  r4   r   r?  r   r*   r*   r9   r+   r9  6  s     r9  )Hrn   r   rr   r   r&  r`   r  r   r#  rl   r  r   r   typingr   r   r   Zbytecode_transformationr   numpyr   ModuleNotFoundErrorZtorch.utils._cxx_pytreer   ImportErrorr>   Ztorch._dynamo.configr&   Ztorch.nnZtorch._guardsr   r]   r	   excr
   Zguardsr   r   rV   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   baser   r   Zctx_managerr    r!   r-  r"   r,   r-   r2   r   r   r/  r1  r9  r*   r*   r*   r+   <module>   s`   
8       1