U
    Kcw                     @   s  d dl Z d dlmZmZ d dlZd dlZddlmZmZ ddl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 dd 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_+e_*nej, e_+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d0dd+ ed1dd+ ed2dd+ ed3d4d5 ed6d4d5 ed7dd+ ed8dd4d9 ed:dd4d; ed<dd4d; ed=dd4d; ed>dd4d; ed?dd4d; ed@dd4d; edAdd4d; edBddd4dC edDdd4d; ee j-j.j/dd4d;Z/dS )E    N)UnionSequence   )tree_flattentree_map)	wrap_type)dimc                   @   s   e Zd ZdS )DimensionMismatchErrorN__name__
__module____qualname__ r   r   :/tmp/pip-unpacked-wheel-gikjz4vx/functorch/dim/__init__.pyr	      s   r	   c                   @   s   e Zd ZdS )DimensionBindErrorNr
   r   r   r   r   r      s   r   )op_propertiesc                 C   s   i | ]
}|d qS )Tr   ).0tr   r   r   
<dictcomp>   s      r   T)	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)r   dr   r   r   	<genexpr>!   s     
 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   1   s     z#_Tensor.__repr__.<locals>.<genexpr>z sizes=)Z_tensorr   r"   r   size)r   Ztensorlevelsr   r!   r   __repr__/   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   6   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   r2   <   s   

r2   c                 C   s   t  }t| ||||g|S r   )r    stackr/   )Ztensorsr   Znew_dimnr   r   r   catC   s    r7   c                 O   s.   t tj| }tt| tt|f|| d S r   )getattrtorchr2   setattrr   r+   r-   _wrap)nameargskwargsorigr   r   r   _defJ   s    r@   Zmeanr4   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_offsetrK   Zcummax)rG   rK   ZcumminZcumprodZcumprod_ZcumsumZcumsum_ZlogcumsumexpZrenorm)rM   rG   rK   softmax)0r9   typingr   r   inspectdisr   r   r   Zfunctorch._Cr   r+   Z_patch_tensor_classr    ZDimListZdimlists	Exceptionr	   r    r   Z	pointwiser)   r   r   r2   Z
TensorLiker   r7   r;   r@   r-   __getitem__Zt__getitem__r5   split__setitem__Zt__setitem__r.   r/   r,   r"   orderZpermute
positionalnnZ
functionalrN   r   r   r   r   <module>   s   
