1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
U
¬ý°d7ã@sâdZddlmZddlmZmZddlZddlm    Z    ddl
m Z m Z ddl mZddlmZdd    lmZdd
lmZer„dd lmZd d dddœdd„Zdd dddœdd„Zddddœdd„Zd d dœdd„Zddd œd!d"„ZdS)#z&
EA-compatible analogue to np.putmask
é)Ú annotations)Ú TYPE_CHECKINGÚAnyN)Úlib)Ú    ArrayLikeÚnpt)Únp_version_under1p21)Úinfer_dtype_from)Ú is_list_like)ÚExtensionArray)Ú
MultiIndexrznpt.NDArray[np.bool_]rÚNone)ÚvaluesÚmaskÚvalueÚreturncCs~t|tjƒr<|jtkr t |¡r<t|tjƒrlt |j|j¡slt|ƒrbt    |ƒt    |ƒkrb||||<qz|||<nt 
|||¡dS)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ÚnpZndarrayÚdtypeÚobjectrZ    is_scalarZcan_castr
ÚlenÚputmask)rrr©rúVd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/core/array_algos/putmask.pyÚputmask_inplaces
ÿþþ
úú 
rz
np.ndarray)rrÚnewrcCsÌtrt|| ¡|ƒ}t|ddƒdkr4|j|jdd}| ¡}|dkrºt|ƒrºt|ddƒdkrºt |¡}||dkr‚t     |||¡qÈ|jd|dks |ddkr°t 
|||¡qÈt dƒ‚nt 
|||¡dS)    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) rÚsetitem_datetimelike_compatÚsumÚgetattrZastyperr
rÚshapeZplacerÚ
ValueError)rrrZnlocsr#rrrÚputmask_without_repeat>s  
 
r%zArrayLike | MultiIndexz"tuple[npt.NDArray[np.bool_], bool])rrrcCs.t|ƒ}|j|jkrtdƒ‚| ¡ }||fS)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)rrZnooprrrÚvalidate_putmaskhs
 
r()rrcCs*t|tƒr|jtdd}tj|td}|S)zP
    If we have a SparseArray or BooleanArray, convert it to ndarray[bool].
    F)rZna_value)r)rr Zto_numpyÚboolrZasarray)rrrrr&vs
r&Úint)rÚnum_setcCsP|jtkrLt|dd\}}t|tjƒrL|jdkrLt|ƒsD|g|}nt|ƒ}|S)z…
    Parameters
    ----------
    values : np.ndarray
    num_set : int
        For putmask, this is mask.sum()
    other : Any
    T)Z pandas_dtype)ÚmÚM)rrr    rrÚkindr
Úlist)rr+ÚotherrÚ_rrrr „s    
 r )Ú__doc__Ú
__future__rÚtypingrrÚnumpyrZ pandas._libsrZpandas._typingrrZ pandas.compatrZpandas.core.dtypes.castr    Zpandas.core.dtypes.commonr
Zpandas.core.arraysr Zpandasr rr%r(r&r rrrrÚ<module>s        !*