U
    +-e                     @   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ddddddd d!d"d#d$g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 )0    N   )is_masked_tensor)as_masked_tensormasked_tensorc                 C   s"   |d kr|   S | | d  S )NT)allmasked_fill)datamask r
   e/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/torch/masked/maskedtensor/reductions.py_masked_all_all   s    r   Fc                 C   s2   |d k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   s6   t | dkr,t |dkr,t| d |d dS t| |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  }|  }|  r$|   n|  } dkrB|||d}n dkr|  r|| |djtjd}|  s|	 
 n|
 }|d| }|  tj| |jdd }t|| }n(|  r|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_all.   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   |   r"d  d}t| tS t| s2tdt }|  }|  } dkrd|||||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_dimR   s(    

    z%_torch_reduce_dim.<locals>.reduce_dim)FNr
   )r!   r:   r
   r    r   _torch_reduce_dimQ   s    r;   c                    s    fdd}|S )Nc                     s6   t | dkr(t |dkr(t | d S t | |S Nr   r   )r   r4   r;   r   r    r
   r   	reduce_fno   s    z _torch_reduce.<locals>.reduce_fnr
   )r!   r=   r
   r    r   _torch_reducen   s    r>   c                 C   s   | |||fS Nr
   )inputr   r   r%   r
   r
   r   _reduce_dim_argsw   s    rA   c                    s    fdd}|S )Nc                     sL   t | dkr(t |dkr(t | d S t| |\}}}}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.   ZmeanZaminZamaxr$   r#   prodr   ZnormvarZstdc                 C   s    i | ]}t tjj|t|qS r
   )r   r   ZopsZatenr>   .0namer
   r
   r   
<dictcomp>   s     rI   c                 C   s   i | ]}t t|t|qS r
   )r   r   rC   rF   r
   r
   r   rI      s     c                 C   s   i | ]}t tj|t|qS r
   )r   r   ZTensorrC   rF   r
   r
   r   rI      s    
 c                 C   s   | t kp| tkp| tkS r?   )NATIVE_REDUCE_MAPTORCH_REDUCE_MAPTENSOR_REDUCE_MAPr    r
   r
   r   _is_reduction   s    rM   c                 O   sF   | t krt |  ||S | tkr,t|  ||S | tkrBt|  ||S tS r?   )rJ   rK   rL   r7   )r!   r   r   r
   r
   r   _apply_reduction   s    rN   )N)FN)FN)r5   r   corer   Zcreationr   r   __all__r   r   r   r   r"   r4   r;   r>   rA   rC   ZREDUCE_NAMESrJ   rK   rL   listkeysZNATIVE_REDUCE_FNSZTORCH_REDUCE_FNSZTENSOR_REDUCE_FNSrM   rN   r
   r
   r
   r   <module>   sP   

$	
