o
    0hx                     @   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atan2arctan2bitwise_and
bitwise_orbitwise_xorbitwise_left_shiftbitwise_right_shiftdivdividefloor_dividefmod	logaddexp
logaddexp2mulmultiply	nextafter	remaindersubsubtracttrue_divideeqnelegegreatergreater_equalgt
less_equalltlessmaximumminimumfmaxfmin	not_equalc                 C   s   g | ]}|d  qS )_ ).0nr-   r-   T/var/www/vscode/kcb/lib/python3.10/site-packages/torch/masked/maskedtensor/binary.py
<listcomp>8   s    r1   >   r)   r*   equalr'   r(   r   r   c                 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-   r0   _get_at_least_one_maskK   s   
r8   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-   r0   <lambda>c       z _binary_helper.<locals>.<lambda>c                 S   r:   r;   )r5   r=   r-   r-   r0   r?   d   r@   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.)lenr4   torch	is_tensorr3   r   r   layoutr   
sparse_coor   indicessizevaluessparse_coo_tensor
sparse_csrcrow_indicescol_indicessparse_csr_tensor_set_data_maskr8   strided	expand_asr   )fnargskwargsinplacer6   	data_args_data_kwargs	mask_args_mask_kwargsargs0_layoutsame_layoutirG   vresult_datacrowcolresult_maskr-   r-   r0   _binary_helperU   sz   





ra   c                       t tjj|   fdd}|S )Nc                        t  | |ddS )NFrT   ra   rR   rS   rQ   r-   r0   	binary_fn      z _torch_binary.<locals>.binary_fngetattrrB   opsatenfn_namerh   r-   rg   r0   _torch_binary      rp   c                    rb   )Nc                     rc   )NTrd   re   rf   rg   r-   r0   rh      ri   z(_torch_inplace_binary.<locals>.binary_fnrj   rn   r-   rg   r0   _torch_inplace_binary   rq   rr   c                 C       i | ]}t tjj|t|qS r-   )rk   rB   rl   rm   rp   r.   namer-   r-   r0   
<dictcomp>   s    rv   c                 C   rs   r-   )rk   rB   rl   rm   rr   rt   r-   r-   r0   rv      s    c                 C   s   | t v p| tv S r;   )NATIVE_BINARY_FNSNATIVE_INPLACE_BINARY_FNSrg   r-   r-   r0   _is_native_binary   ri   ry   c                 O   s8   | t v rt|  |i |S | tv rt|  |i |S tS r;   )rw   NATIVE_BINARY_MAPrx   NATIVE_INPLACE_BINARY_MAPNotImplemented)rQ   rR   rS   r-   r-   r0   _apply_native_binary   s
   r}   )rB   corer   r   r   r   r   __all__BINARY_NAMESlistsetINPLACE_BINARY_NAMESr8   ra   rp   rr   rz   r{   keysrw   rx   ry   r}   r-   r-   r-   r0   <module>   s2   	'
L		