
     j                        d Z ddlmZ ddlmZmZ ddlZddlm	Z	 ddl
mZ ddlmZ ddlmZ erdd	lmZmZ dd
lmZ ddZddZd dZd!dZd"dZdS )#z&
EA-compatible analogue to np.putmask
    )annotations)TYPE_CHECKINGAnyN)lib)infer_dtype_from)is_list_like)ExtensionArray)	ArrayLikenpt)
MultiIndexvaluesr
   masknpt.NDArray[np.bool_]valuer   returnNonec                   t          | t          j                  r]| j        t          k    rt          j        |          r9t          |t          j                  rbt          j        |j        | j                  sCt          |          r-t          |          t          |           k    r||         | |<   dS || |<   dS t          j
        | ||           dS )aD  
    ExtensionArray-compatible implementation of np.putmask.  The main
    difference is we do not handle repeating or truncating like numpy.

    Parameters
    ----------
    values: np.ndarray or ExtensionArray
    mask : np.ndarray[bool]
        We assume extract_bool_array has already been called.
    value : Any
    N)
isinstancenpndarraydtypeobjectr   	is_scalarcan_castr   lenputmask)r   r   r   s      sC:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\venv\Lib\site-packages\pandas/core/array_algos/putmask.pyputmask_inplacer      s     vrz**(LF"(+.=+?+?( ubj))( 35+ek6<2X2X(  	!3u::V#< 	! ;F4LLL F4LLL 	
64'''''    
np.ndarraynewc                   t          |dd          dk    r|                    | j        d          }|                                }|dk    rt	          |          rt          |dd          dk    rt          j        |          }||d         k    rt          j        | ||           dS |j        d         |d         k    s|d         dk    rt          j        | ||           dS t          d          t          j        | ||           dS )	z
    np.putmask will truncate or repeat if `new` is a listlike with
    len(new) != len(values).  We require an exact match.

    Parameters
    ----------
    values : np.ndarray
    mask : np.ndarray[bool]
    new : Any
    ndimr      F)copyz-cannot assign mismatch length to masked arrayN)
getattrastyper   sumr   r   shapeplacer   
ValueError)r   r   r!   nlocsr*   s        r   putmask_without_repeatr.   >   s    sFA!# 3jjEj22 HHJJEqy &\#&& &73+B+Ba+G & E"I 	N HVT3'''''Z^uRy( 	NE"IN 	NJvtS)))))LMMM

64%%%%%r   ArrayLike | MultiIndex"tuple[npt.NDArray[np.bool_], bool]c                    t          |          }|j        | j        k    rt          d          |                                 }||fS )zG
    Validate mask and check if this putmask operation is a no-op.
    z,putmask: mask and data must be the same size)extract_bool_arrayr*   r,   any)r   r   noops      r   validate_putmaskr5   e   sK     d##DzV\! IGHHHxxzz>D:r   c                    t          | t                    r|                     t          d          } t	          j        | t                    } | S )zP
    If we have a SparseArray or BooleanArray, convert it to ndarray[bool].
    F)r   na_value)r   )r   r	   to_numpyboolr   asarray)r   s    r   r2   r2   s   sF     $'' 9 }}4%}88:d$'''DKr   num_setintc                    | j         t          k    rLt          |          \  }}t          j        |d          r%t          |          s|g|z  }nt          |          }|S )z
    Parameters
    ----------
    values : np.ndarray
    num_set : int
        For putmask, this is mask.sum()
    other : Any
    mM)r   r   r   r   is_np_dtyper   list)r   r;   otherr   _s        r   setitem_datetimelike_compatrC      sh     |v 	$#E**q?5$'' 	$  && $')ULr   )r   r
   r   r   r   r   r   r   )r   r    r   r   r!   r   r   r   )r   r/   r   r    r   r0   )r   r
   r   r   )r   r    r;   r<   )__doc__
__future__r   typingr   r   numpyr   pandas._libsr   pandas.core.dtypes.castr   pandas.core.dtypes.commonr   pandas.core.arraysr	   pandas._typingr
   r   pandasr   r   r.   r5   r2   rC    r   r   <module>rO      sU    # " " " " "       
           4 4 4 4 4 4 2 2 2 2 2 2 - - - - - - "       
 "!!!!!( ( ( (B$& $& $& $&N           r   