Ë
    *�£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y)z&
EA-compatible analogue to np.putmask
é    )Úannotations)ÚTYPE_CHECKINGÚAnyN)Úlib)Úinfer_dtype_from)Úis_list_like)ÚExtensionArray)Ú	ArrayLikeÚnpt)Ú
MultiIndexc                ó   — t        | t        j                  «      rl| j                  t        k(  rt        j                  |«      rDt        |t        j                  «      r[t        j                  |j                  | j                  «      s1t        |«      r t        |«      t        | «      k(  r	||   | |<   y|| |<   yt        j                  | ||«       y)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)ÚvaluesÚmaskÚvalues      úAC:\FundamentalWorkbench\vendor\pandas\core\array_algos\putmask.pyÚputmask_inplacer      s�   € ô �vœrŸz™zÔ*Ø�L‰LœFÒ"¬3¯=©=¸Ô+?ô �uœbŸj™jÔ)´"·+±+¸e¿k¹kÈ6Ï<É<Ô2Xô
 ˜Ô¤3 u£:´°V³Ò#<Ø  ™;ˆF�4ŠLà ˆF�4ŠLô 	�
‰
�6˜4 Õ'ó    c                óÖ  — t        |dd«      dk\  r|j                  | j                  d¬«      }|j                  «       }|dkD  r�t	        |«      r…t        |dd«      dk(  rut        j                  |«      }||d   k(  rt        j                  | ||«       y|j                  d   |d   k(  s|d   dk(  rt        j                  | ||«       yt        d«      ‚t        j                  | ||«       y)	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)Úcopyéÿÿÿÿz-cannot assign mismatch length to masked arrayN)
ÚgetattrÚastyper   Úsumr   r   ÚshapeÚplacer   Ú
ValueError)r   r   ÚnewÚnlocsr%   s        r   Úputmask_without_repeatr*   ?   sÍ   € ô ˆs�F˜AÓ !Ò#Ø�j‰j˜Ÿ™¨EˆjÓ2ˆð �H‰H‹J€EØˆq‚y”\ #Ô&¬7°3¸ÀÓ+BÀaÒ+GÜ—‘˜“ˆð �E˜"‘IÒô �H‰H�V˜T 3Õ'à�Z‰Z˜‰^˜u R™yÒ(¨E°"©I¸ªNÜ�J‰J�v˜t SÕ)äÐLÓMÐMä
�
‰
�6˜4 Õ%r   c                óŠ   — t        |«      }|j                  | j                  k7  rt        d«      ‚|j                  «        }||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_putmaskr/   f   sA   € ô ˜dÓ#€DØ‡z�z�V—\‘\Ò!ÜÐGÓHÐHà�x‰x‹zˆ>€DØ�ˆ:Ðr   c                óŠ   — t        | t        «      r| j                  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   r,   r,   t   s7   € ô �$œÔ'ð �}‰}¤4°%ˆ}Ó8ˆä�:‰:�d¤$Ô'€DØ€Kr   c                ó°   — | j                   t        k(  rBt        |«      \  }}t        j                  |d«      rt        |«      s|g|z  }|S 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   Únum_setÚotherr   Ú_s        r   Úsetitem_datetimelike_compatr<   ‚   sY   € ð ‡|�|”vÒÜ# EÓ*‰ˆˆqä�?‰?˜5 $Ô'ô   Ô&Ø˜ 'Ñ)�ð €Lô ˜U›�à€Lr   )r   r
   r   únpt.NDArray[np.bool_]r   r   ÚreturnÚNone)r   ú
np.ndarrayr   r=   r(   r   r>   r?   )r   zArrayLike | MultiIndexr   r@   r>   z"tuple[npt.NDArray[np.bool_], bool])r   r
   r>   r=   )r   r@   r9   Úint)Ú__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*   r/   r,   r<   © r   r   Ú<module>rM      s…   ðñõ #÷ó
 å å 4Ý 2å -á÷õ
 "ó(ðB$&Øð$&Ø3ð$&Ø:=ð$&à	ó$&ðNØ"ðØ*4ðà'óóôr   