U
    +-e                  $   @   s  d dl Z ddlmZmZmZmZmZ g Zdddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'g$Zd(d) e	e
eddd*d&d$d#d%h D Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 eD Zd5d4 eD Ze	e Ze	e Zd6d7 Zd8d9 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fmodZ	logaddexpZ
logaddexp2mulmultiplyZ	nextafter	remaindersubsubtractZtrue_divideeqnelegeZgreaterZgreater_equalgtZ
less_equalltlessmaximumminimumZfmaxZfmin	not_equalc                 C   s   g | ]}|d  qS )_ ).0nr   r   a/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/torch/masked/maskedtensor/binary.py
<listcomp>0   s   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_maskC   s    
r(   c                 C   sN  t |dkrtd|dd  D ]}t|r tdq t|d d  sPtdt||dd \}}t||dd \}}|d j}	t|d	 st|d	 o|	|d	 jk}
|	tj	krN|
rt
|d  |d	  std
|d  |d	  krtd|d	  |d	< |d  }|d  }|d  |d< | | }t|||}n|	tjkr|
rt
|d  |d	  rt
|d  |d	  std|d	  |d	< |d  }|d  }|d  |d< | | }t|||}n| | }|r|d ||d  |d S t|d d  }|	tjkr@||}t||S d 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   |   S N)get_dataxr   r   r    <lambda>Z       z _binary_helper.<locals>.<lambda>c                 S   s   |   S r*   )r%   r,   r   r   r    r.   ]   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.)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ir3   vZresult_dataZcrowcolZresult_maskr   r   r    _binary_helperM   s~    

    

 

r<   c                    s   t tjj|   fdd}|S )Nc                     s   t  | |ddS )NFr8   r<   r6   r7   r5   r   r    	binary_fn   s    z _torch_binary.<locals>.binary_fngetattrr1   opsatenfn_namerA   r   r@   r    _torch_binary   s    rH   c                    s   t tjj|   fdd}|S )Nc                     s   t  | |ddS )NTr=   r>   r?   r@   r   r    rA      s    z(_torch_inplace_binary.<locals>.binary_fnrB   rF   r   r@   r    _torch_inplace_binary   s    rI   c                 C   s    i | ]}t tjj|t|qS r   )rC   r1   rD   rE   rH   r   namer   r   r    
<dictcomp>   s     rL   c                 C   s    i | ]}t tjj|t|qS r   )rC   r1   rD   rE   rI   rJ   r   r   r    rL      s    c                 C   s   | t kp| tkS r*   )NATIVE_BINARY_FNSNATIVE_INPLACE_BINARY_FNSr@   r   r   r    _is_native_binary   s    rO   c                 O   s0   | t krt|  ||S | tkr,t|  ||S tS r*   )rM   NATIVE_BINARY_MAPrN   NATIVE_INPLACE_BINARY_MAPNotImplemented)r5   r6   r7   r   r   r    _apply_native_binary   s
    rS   )r1   corer   r   r   r   r   __all__ZBINARY_NAMESlistsetZINPLACE_BINARY_NAMESr(   r<   rH   rI   rP   rQ   keysrM   rN   rO   rS   r   r   r   r    <module>   s   '
L		