U
    zhq                     @   s|  d dl Z d dlZd dlmZmZ 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!d0dd) e!d1d2d3 e!d4d2d3 e!d5dd) e!d6dd2d7 e!d8dd2d9 e!d:dd2d9 e!d;dd2d9 e!d<dd2d9 e!d=dd2d9 e!d>dd2d9 e!d?dd2d9 e!d@ddd2dA e!dBdd2d9 e ej/j0j1dd2d9Z1dS )C    N)SequenceUnion)dim   )tree_flattentree_map)	wrap_typec                   @   s   e Zd ZdS )DimensionMismatchErrorN__name__
__module____qualname__ r   r   H/var/www/html/venv/lib/python3.8/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>(   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   8   s     z#_Tensor.__repr__.<locals>.<genexpr>z sizes=)Z_tensorr   r    r   size)r   ZtensorZlevelsr   r   r   __repr__6   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/   D   s   

r/   c                 C   s   t  }t| ||||g|S r   )r   stackr,   )Ztensorsr   Znew_dimnr   r   r   catK   s    r4   c                 O   s.   t tj| }tt| tt|f|| d S r   )getattrtorchr/   setattrr   r(   r*   _wrap)nameargskwargsorigr   r   r   _defS   s    r=   Z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_offsetrH   Zcummax)rD   rH   ZcumminZcumprodZcumprod_ZcumsumZcumsum_ZlogcumsumexpZrenorm)rJ   rD   rH   softmax)2disinspecttypingr   r   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
functionalrK   r   r   r   r   <module>   s   
