a
    h                     @   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
   R/var/www/auris/lib/python3.9/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                    s    fdd}|S )Nc           	         s   t  }|  }| jr"|   n|  } dkr@|||d}n dv r|  r|| |djtjd}|  s~|	 
 n|
 }|d| }|  tj| |jdd }t|| }n&| jr|t| |}n|| |d}t|t|S )Nr   r   >   argminargmax)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!   r3   r
   r    r   _torch_reduce_all/   s     r4   c                    s   d fdd	}|S )NFc           	         s   | j r d  d}t| tS t| s0tdt }|  }|  } dkrb|||||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   )	r/   r   r   r%   msgr0   r   r	   r1   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                    s    fdd}|S )Nc                     s:   t | dkr(t |dkr(t | d S t | i |S Nr   r   )r   r4   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    rA   c                    s    fdd}|S )Nc                     sP   t | dkr(t |dkr(t | d S t| i |\}}}}t ||||S r<   )r   r4   rA   r;   )r   r   r@   r   r   r%   r    r
   r   grad_reduce~   s    z'_torch_grad_reduce.<locals>.grad_reducer
   )r!   rB   r
   r    r   _torch_grad_reduce}   s    rC   )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   rK   c                 C   s   i | ]}t t|t|qS r
   )r   r   rC   rH   r
   r
   r   rK      s   c                 C   s   i | ]}t tj|t|qS r
   )r   r   ZTensorrC   rH   r
   r
   r   rK      s   c                 C   s   | t v p| tv p| tv S r?   )NATIVE_REDUCE_MAPTORCH_REDUCE_MAPTENSOR_REDUCE_MAPr    r
   r
   r   _is_reduction   s    rO   c                 O   sR   | t v rt |  |i |S | tv r4t|  |i |S | tv rNt|  |i |S tS r?   )rL   rM   rN   r7   )r!   r   r   r
   r
   r   _apply_reduction   s    rP   )N)FN)FN)r5   r   corer   Zcreationr   r   __all__r   r   r   r   r"   r4   r;   r>   rA   rC   ZREDUCE_NAMESrL   rM   rN   listkeysZNATIVE_REDUCE_FNSZTORCH_REDUCE_FNSZTENSOR_REDUCE_FNSrO   rP   r
   r
   r
   r   <module>   s:   

$	
