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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
U
­ý°d;Pã
@sdZddlZddlZddlmmZddlm    Z    ddl
Z ddl m ZddlmZddlmZejdd„ƒZejdd    „ƒZd
d „Zd d „Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zej j!ddd d!„ƒZ"ej j!ddd"d#„ƒZ#d$d%„Z$d&d'„Z%d(d)„Z&d*d+„Z'd,d-„Z(ej  )d.ej*e +d/¡e,d/ƒde j-g¡d0d1„ƒZ.ej  )d2d3d4g¡d5d6„ƒZ/d7d8„Z0d9d:„Z1d;d<„Z2ej  )d=d3d4g¡ej j!d>dd?d@„ƒƒZ3ej  )d=d3d4g¡ej j!d>ddAdB„ƒƒZ4ej  )dCdDdEg¡ej  )d=d3d4g¡dFdG„ƒƒZ5ej  )dCdDdEg¡ej  )dHe j6e j7g¡dIdJ„ƒƒZ8dKdL„Z9dMdN„Z:e ;dO¡dPdQ„ƒZ<e ;dO¡dRdS„ƒZ=dTdU„Z>dVdW„Z?ej  )dXdYdZd[ge 7d4d4d4g¡fdYdZdge 7d4d4d3g¡fg¡d\d]„ƒZ@d^d_„ZAej  )d`ejBejCej+g¡dadb„ƒZDdcdd„ZEdedf„ZFdgdh„ZGdidj„ZHdkdl„ZIdmdn„ZJdS)oz—
This module tests the functionality of StringArray and ArrowStringArray.
Tests for the str accessors are in pandas/tests/strings/test_string_array.py
éN)Úis_dtype_equal)ÚArrowStringArray)ÚVersioncCs tj|dS)z=Fixture giving StringDtype from parametrized 'string_storage')Ústorage)ÚpdÚ StringDtype)Ústring_storage©r    ú^d:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/tests/arrays/string_/test_string.pyÚdtypesr cCs| ¡S)z3Fixture giving array type from parametrized 'dtype')Zconstruct_array_type©r r    r    r
Úclssr cCs€t dtjdtjdg|di¡}d}t|ƒ|ks4t‚d}t|jƒ|ksJt‚|jdkrXdnd    }d
|›d }t|jjƒ|ks|t‚dS) NÚAÚaÚbr z      A
0     a
1  <NA>
2     bz40       a
1    <NA>
2       b
Name: A, dtype: stringÚpyarrowrÚ StringArrayú<z+>
['a', <NA>, 'b']
Length: 3, dtype: string)rÚ    DataFrameÚarrayÚNAÚreprÚAssertionErrorrr)r ÚdfÚexpectedZarr_namer    r    r
Ú    test_reprs  rcCs6| dddg¡}|ddk    s t‚|dtjks2t‚dS)Nrré)Ú_from_sequencerrr)r rr    r    r
Útest_none_to_nan+src    Cs| ddg¡}|tjjkr d}nd}tjt|dd|d<W5QRX|tjjkrXd}nd}tjt|dt d    d
g¡|dd…<W5QRXdS) Nrrz4Cannot set non-string value '10' into a StringArray.úScalar must be NA or str©Úmatché
rzMust provide strings.ré)    rrÚarraysrÚpytestÚraisesÚ    TypeErrorÚnpr)r ÚarrÚmsgr    r    r
Útest_setitem_validates1s  r+cCs<tjddg|d}d|d<tjddg|d}t ||¡dS)NrÚcr Údr©rrÚtmÚassert_extension_array_equal)r r)rr    r    r
Útest_setitem_with_scalar_stringCsr1cCshtjdddg|d}t ddg¡}| ¡}||ddg<tjdtjdg|d}t ||¡t ||¡dS)Nrrr,r rrr)rrr(Úcopyrr/r0Úassert_numpy_array_equal)r r)ÚvalueZ
value_origrr    r    r
Ú$test_setitem_with_array_with_missingLs  r5cCsPt tjddd¡}d|d<| |¡}t|j|ƒs6t‚| d¡}t ||¡dS)NÚ2000é )Zperiodsrzdatetime64[ns])    rÚSeriesZ
date_rangeÚastyperr rr/Úassert_series_equal)r ÚserZcastedÚresultr    r    r
Útest_astype_roundtripYs 
 
r=cCsÖtjdddddg|d}tjdddddg|d}||}tjdd    dddg|d}t ||¡| |¡}t ||¡| |¡}tjd
d dddg|d}t ||¡|j|d d }tjdd    dddg|d}t ||¡dS)Nrrr,r ÚxÚyÚzÚaxÚbyÚxaÚybú-)Ú
fill_valuezc-z-z)rr8r/r:ÚaddZradd)r rrr<rr    r    r
Útest_addds 
 
 rHc    Cs¦|jdkr*d}tjjd|d}|j |¡tjdddg|d}tjdddggt    d}tj
t dd    ||W5QRXt  |¡}tj
t dd    ||W5QRXdS)
Nrz*Failed: DID NOT RAISE <class 'ValueError'>©r&Úreasonrrr,r z3 != 1r ) rr%ÚmarkÚxfailÚnodeÚ
add_markerrrr(Úobjectr&Ú
ValueErrorr8)r ÚrequestrJrKrrÚsr    r    r
Ú test_add_2dxs
 
rScCsztjddddg|d}ddddg}||}tjddddg|d}t ||¡||}tjddddg|d}t ||¡dS©Nrrr r>r?rArCr.)r rÚotherr<rr    r    r
Útest_add_sequenceˆs  rVcCs~|jdkr*d}tjjt|d}|j |¡tjdddg|d}|d}tjdd    dg|d}t     
||¡d|}t     
||¡dS)
Nrz?unsupported operand type(s) for *: 'ArrowStringArray' and 'int'rIrrr r#ZaaZbb) rr%rKrLÚNotImplementedErrorrMrNrrr/r0)r rQrJrKrr<rr    r    r
Útest_mul•s
  rXzGH-28527)rJcCsœtjddddg|d}t dddd    gg¡}| |¡tks<t‚||}t d
d d d gg¡ |¡}t ||¡||}t ddddgg¡ |¡}t ||¡dS)Nrrr,r-r Útr?ÚvÚwÚatrBZcvZdwÚtarDZvcÚwd)    rrrÚ__add__ÚNotImplementedrr9r/Úassert_frame_equal©r r)rr<rr    r    r
Útest_add_strings¤s rccCs°tjddtjtjg|d}t dtjdtjgg¡}| |¡tksDt‚||}t dtjtjtjgg¡ |¡}t     
||¡||}t dtjtjtjgg¡ |¡}t     
||¡dSrT) rrr(Únanrr_r`rr9r/rarbr    r    r
Útest_add_frame³s   recs‚d|j›d‰tjdddg|d}d‰t|ˆƒˆƒ}|jdkrBdnd}tj‡‡fdd    „|Dƒtd}tj||d}t ||¡dS)
NÚ__rr,r rúboolean[pyarrow]Úbooleancsg|]}t|ˆƒˆƒ‘qSr    )Úgetattr)Ú.0Úitem©Úop_namerUr    r
Ú
<listcomp>Ész2test_comparison_methods_scalar.<locals>.<listcomp>)    Ú__name__rrrirr(rOr/r0)Ú comparison_opr rr<Úexpected_dtyperr    rlr
Útest_comparison_methods_scalarÃsrrcCshd|j›d}tjdddg|d}t||ƒtjƒ}|jdkr@dnd}tjdddg|d}t ||¡dS)Nrfrr,r rrgrh)rorrrirrr/r0)rpr rmrr<rqrr    r    r
Ú$test_comparison_methods_scalar_pd_naÎs rsc        Cs²d|j›d}tjdddg|d}d}|dkrZtjtddt||ƒ|ƒW5QRXdSt||ƒ|ƒ}d    dd    gd
dd
gdœ|}|jd krd nd }tj||d}t     ||¡dS)Nrfrr,r é*)Ú__eq__Ú__ne__znot supported betweenr FTrrgrh)
rorrr%r&r'rirr/r0)    rpr rmrrUr<Z expected_datarqrr    r    r
Ú)test_comparison_methods_scalar_not_string×sÿrwcCsÈd|j›d}tjdddg|d}dddg}t||ƒ|ƒ}|jdkrHdnd}tjt|ƒddd    }t|d
|ƒ|d
ƒ|d
<tj||d}t     ||¡t||ƒtj
ƒ}tjdddg|d}t     ||¡dS) Nrfrr,r rrgrhrO)rFr éÿÿÿÿ) rorrrirr(ÚfullÚlenr/r0r)rpr rmrrUr<rqrr    r    r
Útest_comparison_methods_arrayìs
 r{c    Cs²|tjjkrd}nd}tjt|d|tjddgddƒW5QRXtjt|d|t g¡ƒW5QRX|tjjkrª|tjdtjgt    dƒ|tjddgt    dƒnbtjt|d|tjdtjgt    dƒW5QRXtjt|d|tjddgt    dƒW5QRXtjt|d|tjdtj
gt    dƒW5QRXtjt|d$|tjdt  dd    ¡gt    dƒW5QRXtjt|d$|tjdt  dd    ¡gt    dƒW5QRXdS)
Nz7StringArray requires a sequence of strings or pandas.NAzBUnsupported type '<class 'numpy.ndarray'>' for ArrowExtensionArrayr rrZS1r ÚNaTÚns) rr$rr%r&rPr(rrdrOr|Z
datetime64Z timedelta64)r r*r    r    r
Útest_constructor_raisesýs(   " "(r~ÚnardcCs>tj t dtjg¡¡}t tj tjd|gdd¡|¡dS)NrrOr )rr$rr(rrr/r0)rrr    r    r
Útest_constructor_nan_likes
ÿr€r2TFc    CsŒtjdtjgtd}| ¡}tjdtjgtd}|j||d}|tkrhddl    }||j|| 
¡ddƒ}n||ƒ}t   ||¡t   ||¡dS)Nrr )r2rT©ÚtypeZ from_pandas)r(rrdrOr2rrrrrÚstringr/r0r3)    r2r rQZnan_arrZexpected_inputZna_arrr<Úparr    r    r
Útest_from_sequence_no_mutate&s r…c    Cs€tjdddg|d}| d¡}tjdddgdd}t ||¡tjdtjdg|d}d    }tjt    |d
| d¡W5QRXdS) NÚ1Ú2Ú3r Úint64rr#ézJint\(\) argument must be a string, a bytes-like object or a( real)? numberr )
rrr9r(r/r3rr%r&r')r r)r<rr*r    r    r
Útest_astype_int9s
 r‹cCsFtjdtjdg|d}| d¡}tjdtjdgdd}t ||¡dS)Nr†rˆr ÚInt64rrŠ)rrrr9r/r0©r r)r<rr    r    r
Útest_astype_nullable_intEs
rŽcCsFtjdtjdg|d}| |¡}tjdtjdg|d}t ||¡dS)Nz1.1z3.3r gš™™™™™ñ?gffffff
@)rr8rr9r(rdr/r:)r Zany_float_dtyper;r<rr    r    r
Útest_astype_floatMs
rÚskipnazNot implemented StringArray.sumcCs0tjdddg|d}|j|d}|dks,t‚dS©Nrrr,r ©rÚabc)rr8Úsumr©rr r)r<r    r    r
Ú test_reduceUs r–cCsJtjddddddg|d}|j|d}|r8|dksFt‚nt |¡sFt‚dSr‘)rr8r”rÚisnar•r    r    r
Útest_reduce_missing]s
 r˜ÚmethodÚminÚmaxcCsZtjddddg|d}t||ƒ|d}|rH|dkr6dnd}||ksVt‚n|tjksVt‚dS)Nrrr,r r’rš)rr8rirr)r™rr rQr)r<rr    r    r
Ú test_min_maxhs rœÚboxc    Cs†|jdkrD|tjkrD|tjkr$d}nd}tjjt|d}|j |¡|ddddg|d}t    t
|ƒ|ƒ}|d    krrdnd}||ks‚t ‚dS)
Nrz<'<=' not supported between instances of 'str' and 'NoneType'z0'ArrowStringArray' object has no attribute 'max'rIrrr,r rš) rrrr%rKrLr'rMrNrir(r)    r™rr rQrJrKr)r<rr    r    r
Útest_min_max_numpyts
 ržc    Cs¬tjdtjg|d}|jdd}tjddg|d}t ||¡|jt d¡d}tjddg|d}t ||¡|jdkr~d}nd}t    j
t |d|jd    dW5QRXdS)
Nrr r)r4rz"Invalid value '1' for dtype stringz3Cannot set non-string value '1' into a StringArray.r r) rrrZfillnar/r0r(Ústr_rr%r&r')r rQr)Úresrr*r    r    r
Útest_fillna_args…s   
r¡cCsxt d¡}tjdddg|d}| |¡}|jt|ƒ| ¡dd}|jdkrft|jƒtdƒkrf|     |¡}| 
|¡stt ‚dS)    Nrrrr,r Trz11.0.0) r%Z importorskiprrÚlistrƒrrÚ __version__Ú chunked_arrayÚequalsr)r r„Údatar)rr    r    r
Útest_arrow_arrayšs
 
 
r§rc    Cs´ddl}tjdddg|d}t d|i¡}| |¡}| d¡jdksHt‚t d|¡|     ¡}W5QRXt
|dj tj ƒs~t‚|  d|›d¡}t ||¡|jd    tjks°t‚dS)
Nrrrr rƒrústring[ú])r#r)rrrrÚtableÚfieldr‚rÚoption_contextÚ    to_pandasÚ
isinstancer rr9r/raÚlocr©r Zstring_storage2r„r¦rrªr<rr    r    r
Útest_arrow_roundtrip§s
 r±c    Csºddl}tjg|d}t d|i¡}| |¡}| d¡jdksBt‚|j|jg|     ¡dg|j
d}t  d|¡|  ¡}W5QRXt |djtjƒs˜t‚| d|›d    ¡}t ||¡dS)
Nrr rrƒ)r‚)Úschemarr¨r©)rrrrrªr«r‚rr¤rƒr²r¬r­r®r rr9r/rar°r    r    r
Ú test_arrow_load_from_zero_chunks¹s
 r³cCs¦t|ddƒdkrd}nd}tjdddtjg|d}|jd    d
}tjd d d g|d d dg|dd}t ||¡|jdd
}tjd d g|dd …|dd}t ||¡dS)NrÚrzint64[pyarrow]rŒrrr F)Zdropnar#rrrŠÚcount©Úindexr ÚnameT)rirrrÚ value_countsr8r/r:)r Ú    exp_dtyper)r<rr    r    r
Útest_value_counts_naËs "  r»cCspt|ddƒdkrd}nd}tjdddtjg|d}|jd    d
}tjd d g|dd …|d dd}t ||¡dS)Nrr´rzdouble[pyarrow]ZFloat64rrr T)Ú    normalizer#rZ
proportionr¶rŠ)rirr8rr¹r/r:)r rºr;r<rr    r    r
Ú test_value_counts_with_normalizeÚs "r½zvalues, expectedrrr,c    Cs†tj||d}t dd¡b| ¡}t ||¡t |¡ ¡}t |¡}t ||¡t |¡ ¡}t |¡}t     ||¡W5QRXdS)Nr zmode.use_inf_as_naT)
rrr¬r—r/r3r8r:rra)Úvaluesrr r<r    r    r
Útest_use_inf_as_naås     
 
r¿cCsf|jdkrt d|j›¡tjdddg|d}d|jkr\| ¡kr\|jdd    ksbnt‚dS)
Nrznot applicable for rrr,r rT)Údeep)rr%Úskiprr8ÚnbytesZ memory_usager)r Zseriesr    r    r
Útest_memory_usageüs
rÃÚ float_dtypecCs:tjdg|d}| |¡}tjdg|d}t ||¡dS)Ngš™™™™™¹?r z0.1)rr8r9r/r:)rÄr r;r<rr    r    r
Útest_astype_from_float_dtypes
rÅcCsFtjdtjdg|d}t |¡}tjdtjdgtd}t ||¡dS)Nrrr )rrrr(rOr/r3rr    r    r
Ú"test_to_numpy_returns_pdna_defaults
rÆcCsJ|}tjdtjdg|d}|j|d}tjd|dgtd}t ||¡dS)Nrrr )Úna_value)rrrZto_numpyr(rOr/r3)r Z nulls_fixturerÇr)r<rr    r    r
Útest_to_numpy_na_values
 rÈcCs¾tjdddg|d}| ddg¡}t dddg¡}t ||¡| dtjg¡}t dddg¡}t ||¡| g¡}t dddg¡}t ||¡| d|g¡}t dddg¡}t ||¡dS)Nrrr r,TF)rr8Úisinr/r:r)r Z fixed_now_tsrRr<rr    r    r
Ú    test_isins  
 rÊc    Cs–tjdddg|d}t dddg¡}d||<|jdtjks@t‚tjdddg|d}t|jƒtjjkrld}nd    }t    j
t |d
d||<W5QRXdS) Nrrr,r FTrzCannot set non-string valuerr ) rr8r(rrrr‚r$rr%r&r')r r;Úmaskr*r    r    r
Ú(test_setitem_scalar_with_mask_validation3srÌcCsFdddg}tj|tjd}tj||d}tj||d}t ||¡dS©Nrrr,r )r(rrŸrr/r0©r Úvalsr)r<rr    r    r
Útest_from_numpy_strGs
 
rÐcCs4dddg}tj||d}| ¡}|}t ||¡dSrÍ)rrÚtolistr/Z assert_equalrÎr    r    r
Ú test_tolistOs
 
rÒ)KÚ__doc__Únumpyr(r%Zpandas.util._test_decoratorsÚutilZ_test_decoratorsÚtdZpandas.core.dtypes.commonrZpandasrZpandas._testingZ_testingr/Zpandas.core.arrays.string_arrowrZpandas.util.versionrZfixturer r rrr+r1r5r=rHrSrVrXrKrLrcrerrrsrwr{r~Z parametrizerdÚfloat64Úfloatrr€r…r‹rŽrr–r˜rœr8rržr¡r§Z
skip_if_nor±r³r»r½r¿rÃÚfloat16Úfloat32rÅrÆrÈrÊrÌrÐrÒr    r    r    r
Ú<module>s”    
 
         
 
     !$
 
         
 
 
 þþ