o
    Zh                     @   s   d dl Z d dlmZ d dlmZ d dlmZmZmZ d dl	Z	d dl
Z	d dlZ	d dlZ	d dlZ	d dlZ	d dlZ	d dlZ	d dlmZ e ddd Ze ddd	 ZG d
d de	jjZdS )    N)Sequence)nullcontext)AnyCallableOptional)torch_function_passthroughc               	   C   s  t t jft jt jjft jjt jjjft jt jjft jt jjft jt jjfg} i t jjt jj	t jj
t jjt jjt jjt jjt jjt jjt jjt jjt jjt jjt jjt jjt jjt jjt jjt jjt jjt jjt jjt jjt jjt jjt jjt jj t jj t jj!t jj!t jj"t jj"t jj#t jj#t jj$t jj$t jj%t jj%t jj&t j'j(t jj)t j'j)i}| D ]\}}|j*D ]}|j+,|||j+,|< qqt-t jD ]}|t jj*v rt jj+,||t.t j|< qt jj/j*D ]}t.t j|dpt.t |}t jj/j+,|||< q|S )z}
    Mapping of torch API functions to torch._refs functions.
    E.g. torch_to_refs_map()[torch.add] == torch._refs.add
    N)0torchZ_refsnnZ
functionalZspecialZfftZlinalgZTensor
__invert__Zbitwise_not__xor__Zbitwise_xor__and__Zbitwise_and__or__Z
bitwise_or__eq__eq__rsub__Zrsub__rtruediv__Zrtruediv__floordiv__Zfloor_divide__rfloordiv__Z	rfloordiv__pow__pow__rpow__ZrpowZ	new_emptyZnew_fullZ	new_zerosZnew_onesZfill_Zzero_toZsum_to_sizeZcopy__primsZcopy_toresize__all____dict__getdirgetattrZ_conversions)modulesrZ	mod_torchZmod_refssZtensor_attr r"   C/var/www/auris/lib/python3.10/site-packages/torch/_prims/context.pytorch_to_refs_map   sv   	

r$   c                   C   s   dd t jjD S )zJ
    Set of all prim functions, e.g., torch._prims.add in all_prims()
    c                 S   s   h | ]	}t jj|qS r"   )r   r   r   r   ).0r!   r"   r"   r#   	<setcomp>N   s    zall_prims.<locals>.<setcomp>)r   r   r   r"   r"   r"   r#   	all_primsI   s   r'   c                
   @   sL   e Zd ZdZddd efddZ		dd	ed
edee de	e
 fddZdS )TorchRefsModeaB  
    Switches the interpretation of torch.* functions and Tensor methods to
    use PrimTorch refs in torch._refs.  (Direct calls to _refs are unaffected.)

    >>> # xdoctest: +SKIP
    >>> with TorchRefsMode():
    ...     torch.add(x, y)  # calls torch._refs.add(x, y)

    By default, this context manager will fall back on the torch.* if the
    ref does not exist; set strict=True to error if this occurs.
    If the ref exists we still would like to fall back on the torch.* sometimes,
    this behavior can be customized by passing a function to should_fallback_fn.
    Fc                  G   s   dS )NFr"   )_r"   r"   r#   <lambda>c   s    zTorchRefsMode.<lambda>c                 C   s   || _ || _|| _d S )N)strictshould_fallback_fnprims_mode_cls)selfr+   r,   r-   r"   r"   r#   __init__`   s   
zTorchRefsMode.__init__r"   N	orig_functypesargskwargsc                 C   sl  |d u ri }|t v s|t v r*|   ||i |W  d    S 1 s%w   Y  t }||d }|d u rGt|tjjrGtj	j
|d }n-|d u rtt|tjjrtt|dd }|d u rh|jrht||jd d }|d urttj	j
|d }|d ur| | ||||r||i |S |  ||i |W  d    S 1 sw   Y  | jrtdtj| ||i |S )Ndefaultr   zno _refs support for )r   r'   r-   r$   r   
isinstancer   Z_opsZ
OpOverload_decompZdecomposition_tableZOpOverloadPacketr   Z_dirr,   r+   RuntimeError	overridesresolve_name)r.   r0   r1   r2   r3   mappingfuncr4   r"   r"   r#   __torch_function__j   s6   
  z TorchRefsMode.__torch_function__)r"   N)__name__
__module____qualname____doc__r   r/   r   r   r   r   dictr<   r"   r"   r"   r#   r(   Q   s"    
r(   )	functoolscollections.abcr   
contextlibr   typingr   r   r   r   Ztorch._decompZtorch._primsZtorch._refsZtorch._refs.nnZtorch._refs.nn.functionalZtorch._refs.specialZtorch.overridesZtorch._prims_commonr   	lru_cacher$   r'   r8   ZTorchFunctionModer(   r"   r"   r"   r#   <module>   s$   
6
