o
    0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
   X/var/www/vscode/kcb/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   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valuesis_sparse_cootor   r   to_sparse_cooindicesunbindsizenumeltensorr(   cumprodsumr   r   r   )	self	masked_fnr   r	   result_data
sparse_idxr0   idxstrider!   r
   r   
reduce_all0   s,   
z%_torch_reduce_all.<locals>.reduce_allr
   )r"   r=   r
   r!   r   _torch_reduce_all/   s    r>   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   )	r7   r   r   r'   msgr8   r   r	   r9   r!   r
   r   
reduce_dimT   s    

z%_torch_reduce_dim.<locals>.reduce_dimFNr
   )r"   rD   r
   r!   r   _torch_reduce_dimS   s   rF   c                    r$   )Nc                     s:   t | dkrt |dkrt | d S t | i |S Nr   r   )r   r>   rF   r   r!   r
   r   	reduce_fnq   s   z _torch_reduce.<locals>.reduce_fnr
   )r"   rH   r
   r!   r   _torch_reducep   s   rI   c                 C   s   | |||fS Nr
   )inputr   r   r'   r
   r
   r   _reduce_dim_argsy   s   rL   c                    r$   )Nc                     sP   t | dkrt |dkrt | d S t| i |\}}}}t ||||S rG   )r   r>   rL   rF   )r   r   rK   r   r   r'   r!   r
   r   grad_reduce~   s   z'_torch_grad_reduce.<locals>.grad_reducer
   )r"   rM   r
   r!   r   _torch_grad_reduce}   s   rN   )r6   meanaminamaxr&   r%   prodr   normvarstdc                 C   s    i | ]}t tjj|t|qS r
   )r   r   opsatenrI   .0namer
   r
   r   
<dictcomp>   s    r[   c                 C   s   i | ]
}t t|t|qS r
   )r   r   rN   rX   r
   r
   r   r[      s    c                 C   s   i | ]}t tj|t|qS r
   )r   r   TensorrN   rX   r
   r
   r   r[      s    c                 C   s   | t v p| tv p| tv S rJ   )NATIVE_REDUCE_MAPTORCH_REDUCE_MAPTENSOR_REDUCE_MAPr!   r
   r
   r   _is_reduction   s   r`   c                 O   sR   | t v rt |  |i |S | tv rt|  |i |S | tv r't|  |i |S tS rJ   )r]   r^   r_   rA   )r"   r   r   r
   r
   r   _apply_reduction   s   ra   rJ   rE   )r?   r   corer   creationr   r   __all__r   r   r   r   r#   r>   rF   rI   rL   rN   REDUCE_NAMESr]   r^   r_   listkeysNATIVE_REDUCE_FNSTORCH_REDUCE_FNSTENSOR_REDUCE_FNSr`   ra   r
   r
   r
   r   <module>   s<   

$
	