o
    wZh                     @   s   d dl Z d dlZddlmZ ddlmZmZ g Zd#ddZd$dd	Z	d
d Z
dd Zdd Zdd Zdd Zdd Zd$ddZdd Zg dZdd eD Zdd eD Zdd eD Zee Zee Zee Zdd  Zd!d" ZdS )%    N   )is_masked_tensor)as_masked_tensormasked_tensorc                 C   s"   |d u r|   S | | d  S )NT)allmasked_fill)datamask r
   S/var/www/auris/lib/python3.10/site-packages/torch/masked/maskedtensor/reductions.py_masked_all_all   s   r   Fc                 C   s2   |d u rt j| ||dS t j| | d||dS )NdimkeepdimT)torchr   r   )r   r   r   r	   r
   r
   r   _masked_all_dim   s   r   c                  O   s:   t | dkrt |dkrt| d |d dS t| i |S )Nr   r   r	   r	   )lenr   r   argskwargsr
   r
   r   _masked_all   s   r   c                 C   s>   t |trt| |g|S t|ddD ]
}tj| ||d} q| S )NT)reverser   )
isinstanceint_multidim_anysortedr   any)r	   r   r   dr
   r
   r   r   !   s
   
r   c                 C   s   | dkrt S ttj| S )Nr   )r   getattrr   Zmaskedfnr
   r
   r   _get_masked_fn)   s   r"   c                        fdd}|S )Nc           	         s   t  }|  }| jr|   n|  } dkr |||d}nX dv re|  re|| |djtjd}|  s?|	 
 n|
 }|d| }|  tj| |jdd }t|| }n| jrr|t| |}n|| |d}t|t|S )Nr   r   >   argmaxargmin)dtyper   )devicer   )r"   get_data	is_sparseget_maskvaluesZis_sparse_cootor   r   Zto_sparse_cooindicesZunbindsizeZnumelZtensorr'   Zcumprodsumr   r   r   )	self	masked_fnr   r	   result_dataZ
sparse_idxr-   idxZstrider    r
   r   
reduce_all0   s,   
z%_torch_reduce_all.<locals>.reduce_allr
   )r!   r4   r
   r    r   _torch_reduce_all/   s    r5   c                    s   d fdd	}|S )NFc           	         s   | j rd  d}t| tS t| stdt }|  }|  } dkr1|||||d}n|| ||||  d}t	|t
|||S )NzThe sparse version of aa   is not implemented in reductions.
If you would like this operator to be supported, please file an issue for a feature request at https://github.com/pytorch/maskedtensor/issues with a minimal reproducible code snippet.
In the case that the semantics for the operator are not trivial, it would be appreciated to also include a proposal for the semantics.z*Input to reduce_dim must be a MaskedTensorr   )r   r   r	   )r   r   r&   r	   )r)   warningswarnNotImplementedr   	TypeErrorr"   r(   r*   r   r   )	r0   r   r   r&   msgr1   r   r	   r2   r    r
   r   
reduce_dimT   s    

z%_torch_reduce_dim.<locals>.reduce_dimFNr
   )r!   r;   r
   r    r   _torch_reduce_dimS   s   r=   c                    r#   )Nc                     s:   t | dkrt |dkrt | d S t | i |S Nr   r   )r   r5   r=   r   r    r
   r   	reduce_fnq   s   z _torch_reduce.<locals>.reduce_fnr
   )r!   r?   r
   r    r   _torch_reducep   s   r@   c                 C   s   | |||fS Nr
   )inputr   r   r&   r
   r
   r   _reduce_dim_argsy   s   rC   c                    r#   )Nc                     sP   t | dkrt |dkrt | d S t| i |\}}}}t ||||S r>   )r   r5   rC   r=   )r   r   rB   r   r   r&   r    r
   r   grad_reduce~   s   z'_torch_grad_reduce.<locals>.grad_reducer
   )r!   rD   r
   r    r   _torch_grad_reduce}   s   rE   )r/   meanZaminZamaxr%   r$   prodr   ZnormvarZstdc                 C   s    i | ]}t tjj|t|qS r
   )r   r   opsZatenr@   .0namer
   r
   r   
<dictcomp>   s    rM   c                 C   s   i | ]
}t t|t|qS r
   )r   r   rE   rJ   r
   r
   r   rM      s    c                 C   s   i | ]}t tj|t|qS r
   )r   r   ZTensorrE   rJ   r
   r
   r   rM      s    c                 C   s   | t v p| tv p| tv S rA   )NATIVE_REDUCE_MAPTORCH_REDUCE_MAPTENSOR_REDUCE_MAPr    r
   r
   r   _is_reduction   s   rQ   c                 O   sR   | t v rt |  |i |S | tv rt|  |i |S | tv r't|  |i |S tS rA   )rN   rO   rP   r8   )r!   r   r   r
   r
   r   _apply_reduction   s   rR   rA   r<   )r6   r   corer   Zcreationr   r   __all__r   r   r   r   r"   r5   r=   r@   rC   rE   ZREDUCE_NAMESrN   rO   rP   listkeysZNATIVE_REDUCE_FNSZTORCH_REDUCE_FNSZTENSOR_REDUCE_FNSrQ   rR   r
   r
   r
   r   <module>   s<   

$
	