o
    Ih5                     @   sX  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sRd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re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                   @      e Zd ZdS )DimensionMismatchErrorN__name__
__module____qualname__ r   r   J/var/www/vscode/kcb/lib/python3.10/site-packages/functorch/dim/__init__.pyr          r   c                   @   r   )DimensionBindErrorNr	   r   r   r   r   r      r   r   )op_propertiesT)	referencec                   @   s\   e Zd Zedd Zdd Zere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   6   s   $ z#_Tensor.__repr__.<locals>.<genexpr>z sizes=)_tensorr   r    r   size)r   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+   Tensor_from_batchedfrom_batchedTensor_from_positionalfrom_positionalr-   
Tensor_sumsumr   r   r   r   r2   B   s
    

r2   c                 C   s   t  }t| ||||g|S r   )r   stackr/   )tensorsr   new_dimnr   r   r   catI   s   r>   c              	   O   s4   t tj| }tt| tt|g|R i | d S r   )getattrtorchr2   setattrr   r+   r-   _wrap)nameargskwargsorigr   r   r   _defQ   s   (rG   meanr9   allamaxaminaminmaxanycount_nonzero	logsumexpnanmeannansumprodstd   )keepdim_offsetvarmax)
single_dimminargmaxargminkthvaluemedian	nanmedianmodesortF)reduceargsortunbindchunk)
dim_offsetra   cummax)rX   ra   cummincumprodcumprod_cumsumcumsum_logcumsumexprenorm)re   rX   ra   softmax)-functorch._C	functorchr@   r   r+   r   r   r   _patch_tensor_classr   DimListdimlists	Exceptionr   r    r   dictfromkeys	pointwiser)   r   r   r2   
TensorLiker   r>   rB   rG   r-   __getitem__t__getitem__r:   split__setitem__t__setitem__r.   r/   r,   r    order
positionalnn
functionalrn   r   r   r   r   <module>   s    
