o
    wZhx                     @   s   d dl Z ddlmZmZmZmZmZ g Zg dZdd e	e
eh d D Zdd	 Zd
d Zdd Zdd Zdd eD Zdd eD Ze	e Ze	e Zdd Zdd ZdS )    N   )_map_mt_args_kwargs_masks_match_tensors_match_wrap_resultis_masked_tensor)$addatan2Zarctan2Zbitwise_andZ
bitwise_orZbitwise_xorZbitwise_left_shiftZbitwise_right_shiftdivdivideZfloor_dividefmod	logaddexp
logaddexp2mulmultiply	nextafter	remaindersubsubtractZtrue_divideeqnelegeZgreaterZgreater_equalgtZ
less_equalltlessmaximumminimumfmaxfmin	not_equalc                 C   s   g | ]}|d  qS )_ ).0nr"   r"   O/var/www/auris/lib/python3.10/site-packages/torch/masked/maskedtensor/binary.py
<listcomp>8   s    r&   >   r   r   r   r   r   r   equalc                 C   sB   t | st |stdt| |stdt | r|  S | S )Nz2At least one of `a` and `b` must be a MaskedTensorz a and b must have matching masks)r   	TypeErrorr   
ValueErrorget_mask)abr"   r"   r%   _get_at_least_one_maskK   s   
r-   c                 C   sL  t |dkr
td|dd  D ]}t|rtdqt|d d  s(tdt||dd \}}t||dd \}}|d j}	t|d	 pMt|d	 oT|	|d	 jk}
|	tj	kr|
rt
|d  |d	  smtd
|d  |d	  kr}td|d	  |d	< |d  }|d  }|d  |d< | | }t|||}nX|	tjkr|
rt
|d  |d	  rt
|d  |d	  std|d	  |d	< |d  }|d  }|d  }|d  |d< | | }t||||}n| | }|r|d ||d  |d S t|d d  }|	tjkr!||}t||S )Nr   zlen(kwargs) must equal 0   zRMaskedTensor binary ops do not support Tensor arguments aside from the lhs and rhszUInput masks must match. If you need support for this, please open an issue on Github.c                 S      |   S N)get_dataxr"   r"   r%   <lambda>c       z _binary_helper.<locals>.<lambda>c                 S   r/   r0   )r*   r2   r"   r"   r%   r4   d   r5   r   z\sparse_coo indices must match. If you need support for this, please open an issue on Github.z?input1 and input2 must have the same size for binary functions.z\sparse_csr indices must match. If you need support for this, please open an issue on Github.)lenr)   torchZ	is_tensorr(   r   r   Zlayoutr   Z
sparse_coor   indicessizevaluesZsparse_coo_tensorZ
sparse_csrZcrow_indicesZcol_indicesZsparse_csr_tensorZ_set_data_maskr-   ZstridedZ	expand_asr   )fnargskwargsinplacer+   Z	data_argsZ_data_kwargsZ	mask_argsZ_mask_kwargsZargs0_layoutZsame_layoutir9   vZresult_dataZcrowcolZresult_maskr"   r"   r%   _binary_helperU   sz   





rB   c                       t tjj|   fdd}|S )Nc                        t  | |ddS )NFr>   rB   r<   r=   r;   r"   r%   	binary_fn      z _torch_binary.<locals>.binary_fngetattrr7   opsatenfn_namerI   r"   rH   r%   _torch_binary      rQ   c                    rC   )Nc                     rD   )NTrE   rF   rG   rH   r"   r%   rI      rJ   z(_torch_inplace_binary.<locals>.binary_fnrK   rO   r"   rH   r%   _torch_inplace_binary   rR   rS   c                 C       i | ]}t tjj|t|qS r"   )rL   r7   rM   rN   rQ   r#   namer"   r"   r%   
<dictcomp>   s    rW   c                 C   rT   r"   )rL   r7   rM   rN   rS   rU   r"   r"   r%   rW      s    c                 C   s   | t v p| tv S r0   )NATIVE_BINARY_FNSNATIVE_INPLACE_BINARY_FNSrH   r"   r"   r%   _is_native_binary   rJ   rZ   c                 O   s8   | t v rt|  |i |S | tv rt|  |i |S tS r0   )rX   NATIVE_BINARY_MAPrY   NATIVE_INPLACE_BINARY_MAPNotImplemented)r;   r<   r=   r"   r"   r%   _apply_native_binary   s
   r^   )r7   corer   r   r   r   r   __all__ZBINARY_NAMESlistsetZINPLACE_BINARY_NAMESr-   rB   rQ   rS   r[   r\   keysrX   rY   rZ   r^   r"   r"   r"   r%   <module>   s2   	'
L		