U
    ªÊ¹jo  ã                   @   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 dd„ ejD ƒZdZesÆd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�rBe	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�rÔe	  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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)ÚSequenceÚUnion)Údimé   )Útree_flattenÚtree_map)Ú	wrap_typec                   @   s   e Zd ZdS )ÚDimensionMismatchErrorN©Ú__name__Ú
__module__Ú__qualname__© r   r   úU/var/www/html/bwave/python/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_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   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   r1   D   s   

r1   c                 C   s   t ƒ }t| ||ƒ ||g|¡S r   )r    Ústackr.   )Ztensorsr   Znew_dimÚnr   r   r   ÚcatK   s    r6   c                 O   s.   t tj| ƒ}tt| t t|f|ž|Ž¡ƒ d S r   )ÚgetattrÚtorchr1   Úsetattrr   r*   r,   Ú_wrap)ÚnameÚargsÚkwargsÚorigr   r   r   Ú_defS   s    r?   Zmeanr3   Ú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_offsetrJ   Zcummax)rF   rJ   ZcumminZcumprodZcumprod_ZcumsumZcumsum_ZlogcumsumexpZrenorm)rL   rF   rJ   Úsoftmax)0ÚdisÚinspectÚtypingr   r   r8   Zfunctorch._CZ	functorchr   r*   r   r   r   Z_patch_tensor_classr    ZDimListZdimlistsÚ	Exceptionr	   r   Ú r   Z	pointwiser(   r   r   r1   Z
TensorLiker   r6   r:   r?   r,   Ú__getitem__Zt__getitem__r4   ÚsplitÚ__setitem__Zt__setitem__r-   r.   r+   r"   ÚorderÚ
positionalÚnnZ
functionalrM   r   r   r   r   Ú<module>   sž   
