
    Ph$                     X   d dl Z d dlmZmZ d dlmc mZ d dlm	Z	m
Z
 ddlmZ ddlmZmZ ddlmZmZ ddlmZ d	d
lmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ  e
       D  cg c]   }  e|       r| j<                  j>                  " c} Z d Z!d Z"d Z#d Z$d Z%d Z& G d de      Z'yc c} w )    N)DictList)_get_overloaded_argsget_default_nowrap_functions   )unimplemented)GuardBuilderinstall_guard)
AttrSourceGlobalSource)is_tensor_base_attr_getter   )VariableTracker)ConstantVariable)TupleVariable)TensorVariable)UserDefinedClassVariablec                     t        | d      S )N__torch_function__)hasattr)objs    qC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_dynamo/variables/torch_function.pyis_torch_function_user_objectr   /   s    3,--    c                     dd l }d}	 t        j                  |j                         |      }||t	        |j
                  |      k7  z  }|S # t        $ r Y |S w xY w)Nr   F)torchinspectgetattr_staticpython_typegetattrTensorAttributeError)txvarnamer   
overriddenattr_vals         r   _is_attr_overiddenr(   3   sd    J))#//*;TBh'%,,"===
   s   A A
 
	AAc                 X    |||t        t        |            f}| j                  |||      S N)r   listinline_user_function_return)r#   torch_function_typetorch_function_varfntypesargskwargstf_argss           r   call_torch_functionr4   @   s1    
 #B}T$Z/HIG))*<gvNNr   c           
          ddl m}m} |s7  || t        t        |d      d            |j                  j
                        S   |       | |j                  j
                        S )Nr   SourcelessBuilderVariableBuilderr   __func__)builderr7   r8   r   r   r9   )r#   valuesourcer7   r8   s        r   build_torch_function_fnr=   I   se    ;
z&*>?L
 
"
"
+
+- 	-
 # "2u'?'?'H'HIIr   c                 ~    | j                   j                  r't        j                  |i |}t	        d |D              S y)Nc              3   <   K   | ]  }t        |t                y wr*   )
isinstanceTensorWithTFOverrideVariable).0args     r   	<genexpr>z.can_dispatch_torch_function.<locals>.<genexpr>X   s     UHS:c#?@Hs   F)outputtorch_function_enabledpytreearg_tree_leavesany)r#   r1   r2   all_argss       r   can_dispatch_torch_functionrK   U   s8    	yy''))4:6:UHUUUr   c                    t        j                  |i |}t        |D cg c]  }t        |t              s| c}d       }|D ]b  }|j                  | |t        |D cg c]  }|j                          c}      ||      }t        |t              r|j                  t        u r`|c S  t        d| d| d| d       yc c}w c c}w )zsGathers all args that are TensorWithTFOverrideVariable and dispatches based on the ordering in _get_overloaded_argsc                     | j                   S r*   
class_type)xs    r   <lambda>z)dispatch_torch_function.<locals>.<lambda>c   s    !,,r   z*All __torch_function__ overrides for call z with args z and kwargs z returned NotImplementedN)rG   rH   r   r@   rA   r4   r   subclass_type_varr   r;   NotImplementedr   )r#   r/   r1   r2   rJ   rC   overloaded_argsress           r   dispatch_torch_functionrV   ]   s     %%t6v6H* RJs4P$QRO
 %%oNos3002oNO
 3 01cii>6QJ  
4RDD6V\U]]uv! 	S Os   B?B?Cc                   r     e Zd ZdZ fdZed        Zd Zd Zd Z	d Z
 fdZd	 Z	 	 	 	 	 	 d fd
Z xZS )rA   zS
    Represents a tensor subclass instance with a __torch_function__ override.
    c                 P    |j                  d      | _        t        |   |i | y )Ntorch_function_fn)poprY   super__init__)selfr1   r2   	__class__s      r   r\   z%TensorWithTFOverrideVariable.__init__|   s'    !',?!@$)&)r   c                     dd l }t        |j                        }|j                  d      |j                  u sJ d        | d||d|}|j                  |       |S )Nr   rO   zBinvalid class type in TensorWithTFOverrideVariable.from_tensor_var)rY   rO    )r   dict__dict__rZ   r!   install_global)clsr#   
tensor_varrO   rY   r   r2   r$   s           r   from_tensor_varz,TensorWithTFOverrideVariable.from_tensor_var   se    j))*JJ|$4	PO	P4W$5*WPVW2
r   c                     | j                         |j                  j                  vr5|j                  j                  | j                         | j                         y y r*   )global_mangled_class_namerE   global_scoperc   rO   )r]   r#   s     r   rc   z+TensorWithTFOverrideVariable.install_global   sF     ))+2993I3IIII$$T%C%C%EtW Jr   c                     | j                   S r*   rN   r]   s    r   r   z(TensorWithTFOverrideVariable.python_type   s    r   c                 ^    t        | j                  t        | j                                     S )N)r<   )r   rO   r   rh   rk   s    r   rR   z.TensorWithTFOverrideVariable.subclass_type_var   s&    'OOL1O1O1Q$R
 	
r   c                 `    d| j                   j                   dt        | j                          S )N__subclass__)rO   __name__idrk   s    r   rh   z6TensorWithTFOverrideVariable.global_mangled_class_name   s*    T__556a4??8K7LMMr   c                 N   dd l }ddlm} |t        v st	        |j
                  |      st        d| d       t        || |      rt        d| d       |j                  j                  r| j                  rFt        t        t        | j                  d      |      j                  t        j                                 |       |t!        |j
                  |      j"                        }| j%                  ||t'        | j)                         g      | gi       S t*        | Y  ||      S )Nr   r   )r7   z
Accessing I on a tensor subclass with a __torch_function__ override is not supportedz&Accessing overridden method/attribute r^   )r   r:   r7   banned_attrsr   r!   r   r(   rE   rF   r<   r
   r   
make_guardr	   FUNCTION_MATCHr    __get__r4   r   rR   r[   var_getattr)r]   r#   r%   r   r7   get_fnr^   s         r   rx   z(TensorWithTFOverrideVariable.var_getattr   s    	.<wu||T'BTF"kl b$-8 ?P P
 99++{{z$++{CTJUU$33
 )&(WU\\4-H-P-PQF++t55789  7&r400r   c           	      T    t        || j                         | j                  ||||      S r*   )r4   rR   rY   )r]   r#   r/   r0   r1   r2   s         r   r4   z0TensorWithTFOverrideVariable.call_torch_function   s3    """$""
 	
r   c           
         |j                   j                  rdd l}ddlm}m} t        || |      rt        d| d       | j                  rP  ||t        t        | j                  d      |            t        j                  | j                         |            }n"  |       |t        |j                  |            }t        ||| g|z   |      S t         	| E  ||||      S )Nr   r   r6   zCalling overridden method rs   r^   )rE   rF   r   r:   r7   r8   r(   r   r<   r   r   r   r   r    r!   rV   r[   call_method)
r]   r#   r%   r1   r2   r   r7   r8   func_varr^   s
            r   r|   z(TensorWithTFOverrideVariable.call_method   s     99++C!"dD10 7T T {{?
:dkk;#GN(()9)9);TBD /,.r75<<3NO*2x$$OO7&r4v>>r   )r1   zList[VariableTracker]r2   zDict[str, VariableTracker]returnr   )rp   
__module____qualname____doc__r\   classmethodrf   rc   r   rR   rh   rx   r4   r|   __classcell__)r^   s   @r   rA   rA   w   sj    * 	 	X

N"1H	
? &	?
 -? 
? ?r   rA   )(r   typingr   r   torch.utils._pytreeutils_pytreerG   torch.overridesr   r   excr   guardsr	   r
   r<   r   r   r   baser   constantr   listsr   tensorr   user_definedr   __self__rp   rt   r   r(   r4   r=   rK   rV   rA   )r/   s   0r   <module>r      s      $ $ N  0 - . ! &   " 26 +,,!"% KK,.
O	J4u?> u?_s   !%B'