a
    h4                     @   s\  d dl Zd dlZd dl mZ ddlmZmZ ddlmZ e  ej	ej
ej  Z	Z
ZG dd deZG dd	 d	eZdd
lmZ eejdZdZesddlmZ G dd dZeejfZG dd dejeZG dd deejZdd Zer ejZdd ZeejZej Z eej!Z!n ejej ZZejZej Z ej!Z!eej"Z#ee_e#e_"e!ej_!e!e_!eej$ej_$eej%ej_%eeeejej& e`'ereej(e_(nej)e_(ed ed ed ed ed ed ed ed ed ed  ed! ed" ed#d$d% ed&d$d% ed'dd( ed)dd( ed*dd( ed+dd( ed,dd( ed-dd( ed.dd( ed/dd( ed0d1d2 ed3d1d2 ed4dd( ed5dd1d6 ed7dd1d8 ed9dd1d8 ed:dd1d8 ed;dd1d8 ed<dd1d8 ed=dd1d8 ed>dd1d8 ed?ddd1d@ edAdd1d8 eej*j+j,dd1d8Z,dS )B    N)dim   )tree_flattentree_map)	wrap_typec                   @   s   e Zd ZdS )DimensionMismatchErrorN__name__
__module____qualname__ r   r   D/var/www/auris/lib/python3.9/site-packages/functorch/dim/__init__.pyr      s   r   c                   @   s   e Zd ZdS )DimensionBindErrorNr   r   r   r   r   r      s   r   )op_propertiesT)	referencec                   @   s\   e Zd Zedd Zdd Zer8eej	Z	e
ejZnej	Z	ejZe
ejZdd ZdS )_Tensorc                 C   s   t dd | jD S )Nc                 s   s   | ]}t |tr|V  qd S N)
isinstanceDim).0dr   r   r   	<genexpr>&       z_Tensor.dims.<locals>.<genexpr>)tuple_levelsselfr   r   r   dims$   s    z_Tensor.dimsc                 C   s   | j S r   ndimr   r   r   r   r   (   s    z_Tensor.dimc                    sD   | j | j| j  }} | dt fdd|D  dt|  S )Nz
with dims=c                 3   s$   | ]}t |tr|  n|V  qd S r   )r   int)r   lr   r   r   r   6   r   z#_Tensor.__repr__.<locals>.<genexpr>z sizes=)Z_tensorr   r   r   size)r   Ztensorlevelsr   r   r   __repr__4   s    z_Tensor.__repr__N)r	   r
   r   propertyr   r   use_cclassmethod_C__torch_function___instancemethodexpandr   indexr$   r   r   r   r   r       s   

r   c                   @   s   e Zd ZejZdS )r   N)r	   r
   r   object
__format__r   r   r   r   r   <   s   r   c                   @   s0   e Zd ZeseejZeejZ	e
ejZdS )TensorN)r	   r
   r   r&   staticmethodr(   ZTensor_from_batchedZfrom_batchedZTensor_from_positionalZfrom_positionalr*   Z
Tensor_sumsumr   r   r   r   r/   B   s   

r/   c                 C   s   t  }t| ||||g|S r   )r   stackr,   )Ztensorsr   Znew_dimnr   r   r   catI   s    r4   c              	   O   s4   t tj| }tt| tt|g|R i | d S r   )getattrtorchr/   setattrr   r(   r*   _wrap)nameargskwargsorigr   r   r   _defQ   s    r=   meanr1   allZamaxZaminZaminmaxanyZcount_nonzeroZ	logsumexpZnanmeanZnansumprodZstd   )Zkeepdim_offsetvarmax)
single_dimminZargmaxZargminZkthvalueZmedianZ	nanmedianmodesortF)reduceZargsortZunbindchunk)
dim_offsetrI   Zcummax)rE   rI   ZcumminZcumprodZcumprod_ZcumsumZcumsum_ZlogcumsumexpZrenorm)rK   rE   rI   softmax)-Zfunctorch._CZ	functorchr6   r   r(   r   r   r   Z_patch_tensor_classr   ZDimListZdimlists	Exceptionr   r    r   dictfromkeysZ	pointwiser&   r   r   r/   Z
TensorLiker   r4   r8   r=   r*   __getitem__Zt__getitem__r2   split__setitem__Zt__setitem__r+   r,   r)   r   order
positionalnnZ
functionalrL   r   r   r   r   <module>   s   
