U
    •Ê¹jº  ã                   @   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
   úc/var/www/html/bwave/python/venv/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   

$	
õÿÿÿ