
    sgM                        d dl Z ddlmZmZmZmZmZ g Zg dZ e	 e
e      h dz
        D  cg c]  } | dz   	 c} Zd Zd Zd	 Zd
 ZeD ci c]&  } ee j"                  j$                  |       e|      ( c}ZeD ci c]&  } ee j"                  j$                  |       e|      ( c}Z e	ej+                               Z e	ej+                               Zd Zd Zyc c} w c c}w c c}w )    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_equal>   r*   r+   equalr(   r)   r   r   _c                     t        |       st        |      st        d      t        | |      st        d      t        |       r| j	                         S |j	                         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bs     S/var/www/html/venv/lib/python3.12/site-packages/torch/masked/maskedtensor/binary.py_get_at_least_one_maskr6   K   sT    A'7':LMM1;<<zz|::<    c                     t        |      dk7  rt        d      |dd  D ]"  }t        j                  |      st	        d       t        |d d  st        d      t        ||d       \  }}t        ||d       \  }}|d   j                  }	t        j                  |d         xs t        |d         xr |	|d   j                  k(  }
|	t        j                  k(  r|
rt        |d   j                         |d   j                               st        d	      |d   j                         |d   j                         k7  rt        d
      |d   j                         |d<   |d   j                         }|d   j                         }|d   j                         |d<    | | }t        j                  |||      }n|	t        j                  k(  r|
r}t        |d   j!                         |d   j!                               r.t        |d   j#                         |d   j#                               st        d      |d   j                         |d<   |d   j!                         }|d   j#                         }|d   j                         |d<    | | }t        j$                  |||      }n | | }|r|d   j'                  ||d          |d   S t)        |d d  }|	t        j*                  k(  r|j-                  |      }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                 "    | j                         S N)get_dataxs    r5   <lambda>z _binary_helper.<locals>.<lambda>c        r7   c                 "    | j                         S r;   )r2   r=   s    r5   r?   z _binary_helper.<locals>.<lambda>d   r@   r7   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.)lenr1   torch	is_tensorr0   r   r   layoutr   
sparse_coor   indicessizevaluessparse_coo_tensor
sparse_csrcrow_indicescol_indicessparse_csr_tensor_set_data_maskr6   strided	expand_asr   )fnargskwargsinplacer3   	data_argsdata_kwargs	mask_argsmask_kwargsargs0_layoutsame_layoutirH   vresult_datacrowcolresult_masks                     r5   _binary_helperrb   U   s   
6{a344!"X ??1d  bq"c
 	
 1v?UVI{0v?UVI{Q<&&L	!%G)9)A,)G09Q<...  u'''!)A,"6"6"8)A,:N:N:PQ r  |  "il&7&7&99 U  %Q<..0IaLaL  "|  " |**,	!	N--aD9	))	)y|88:IaL<U<U<WX"aL,,.	!0H0H0J !r  %Q<..0IaL|((*l&&( |**,	!	N--dC; )nQ{IaL9Aw,d2Ah75==(%//<KK55r7   c                 Z    t        t        j                  j                  |       fd}|S )Nc                  "    t        | |d      S )NFrU   rb   rS   rT   rR   s     r5   	binary_fnz _torch_binary.<locals>.binary_fn   s    b$>>r7   getattrrC   opsatenfn_namerh   rR   s     @r5   _torch_binaryro      s$    		)B? r7   c                 Z    t        t        j                  j                  |       fd}|S )Nc                  "    t        | |d      S )NTre   rf   rg   s     r5   rh   z(_torch_inplace_binary.<locals>.binary_fn   s    b$==r7   ri   rm   s     @r5   _torch_inplace_binaryrr      s$    		)B> r7   c                 &    | t         v xs | t        v S r;   )NATIVE_BINARY_FNSNATIVE_INPLACE_BINARY_FNS)rR   s    r5   _is_native_binaryrv      s    ""Eb,E&EEr7   c                 f    | t         v rt        |    |i |S | t        v rt        |    |i |S t        S r;   )rt   NATIVE_BINARY_MAPru   NATIVE_INPLACE_BINARY_MAPNotImplemented)rR   rS   rT   s      r5   _apply_native_binaryr{      sD    	 $d5f55	&&(,d=f==r7   )rC   corer   r   r   r   r   __all__BINARY_NAMESlistsetINPLACE_BINARY_NAMESr6   rb   ro   rr   rj   rk   rl   rx   ry   keysrt   ru   rv   r{   )nnames   00r5   <module>r      s     %T 			
	 G &H6V DP;?GEIINND!=#66 
 % EIINND!#8#>> 
 *//12  !:!?!?!AB FUts   C +C%?+C*