o
    ZhI	                     @   sD   d dl Z ddlmZmZ ddlmZmZmZmZ G dd deZ	dS )    N   )_TensorTensor)_dims_enable_layersllistltuplec                       s`   e Zd Zdd Zedd Zedd Zedd Zed	d
 Ze fddZ	dd Z
  ZS )DelayedMulTensorc                 C   s8   ||| _ | _d | _d | _|jp|j| _d | _d | _d S N)_lhs_rhs_data_levels_data_has_device_batchtensor_data_tensor_data)selflhsrhs r   O/var/www/auris/lib/python3.10/site-packages/functorch/dim/delayed_mul_tensor.py__init__   s   
zDelayedMulTensor.__init__c                 C   sF   | j d u r t| jj}| jjD ]}||vr|| qt|| _ | j S r
   )r   r   r   _levelsr   appendr   )r   Zlevelslr   r   r   r      s   


zDelayedMulTensor._levelsc                 C   sX   | j d u r)t| j td | jj| jj | _ W d    | j S 1 s$w   Y  | j S )Nzbt multiply fallback)r   r   r   printr   _batchtensorr   r   r   r   r   r      s   

zDelayedMulTensor._batchtensorc                 C   s$   | j d u rt| j| jj| _ | j S r
   )r   r   Zfrom_batchedr   r   _tensorr   r   r   r   r   '   s   
zDelayedMulTensor._tensorc                 C   s   | j jS r
   )r   ndimr   r   r   r   r   /   s   zDelayedMulTensor.ndimc                    s   t t jS r
   )r   superdimsr   	__class__r   r   r!   3   s   zDelayedMulTensor.dimsc           	         s   t |dddtd| j  fdd| jj| jj}}| jj| jj}}fdd| jD }dg fd	d
|D dfdd
|D dfdd
|D }t|||f}t	
||dS )Nr   Fac                    s   t  |  S r
   )chrindex)d)
all_levelsnr   r   to_char<   s   z%DelayedMulTensor.sum.<locals>.to_charc                    s   g | ]}| vr|qS r   r   ).0r   )r!   r   r   
<listcomp>A   s    z(DelayedMulTensor.sum.<locals>.<listcomp> c                 3       | ]} |V  qd S r
   r   r+   r'   r*   r   r   	<genexpr>D       z'DelayedMulTensor.sum.<locals>.<genexpr>,c                 3   r.   r
   r   r/   r0   r   r   r1   F   r2   z->c                 3   r.   r
   r   r/   r0   r   r   r1   H   r2   T)r   ordr   r   r   r   jointorchZeinsumr   Zfrom_positional)	r   dimZplhsZ	levelslhsZprhsZ	levelsrhsZ
new_levelsfmtZresult_datar   )r(   r!   r)   r*   r   sum7   s,   	zDelayedMulTensor.sum)__name__
__module____qualname__r   propertyr   r   r   r   r!   r9   __classcell__r   r   r"   r   r	      s    
	


r	   )
r6   r-   r   r   	referencer   r   r   r   r	   r   r   r   r   <module>   s   