zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
U
­ý°d‰ã @s¨ddlZddlZddlZddlmZmZmZmZm    Z    m
Z
m Z m Z ddl mZd?dd„ZGdd„dƒZd@d d „Zdd„Zdd„Zdd„ZdAdd„Zdd„Zej ddddgfdddgfg¡dd„ƒZdd „Zej d!d"d#gd"d#d#gfd$d%gd$d%d%gfd&d'gd&d'd'gfe
d(ƒe
d)ƒge
d(ƒe
d)ƒe
d)ƒgfg¡d*d+„ƒZej d,d-d.d/d0d1d2d3d4d5d6g
¡d7d8„ƒZej d9d:dd%d$gfd;dd%d$gfd    dd%d$gfd<dd$d%gfg¡d=d>„ƒZdS)BéN)Ú CategoricalÚ    DataFrameÚIndexÚ
MultiIndexÚSeriesÚ    TimestampÚconcatÚmergeéé2cCs`tt|ƒƒ}t t |||¡¡}t|ƒ|krPt t|ƒ|d|t|ƒ…¡}tj |¡|S©N)ÚlistÚrangeÚnpZasarrayÚtileÚlenÚrandomÚshuffle)ÚngroupsÚnZ unique_groupsZarr©rú[d:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/tests/reshape/merge/test_join.pyÚ get_test_datas   " rc
@s~eZdZejdd„ƒZejdd„ƒZejdd„ƒZdd„Zd    d
„Z    d d „Z
d d„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zej dddde dd g¡g¡d!d"„ƒZd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Z d7d8„Z!d9d:„Z"d;d<„Z#d=d>„Z$d?d@„Z%dAdB„Z&dCdD„Z'dEdF„Z(dGdH„Z)dIdJ„Z*dKdL„Z+dMdN„Z,dOdP„Z-dQdR„Z.dSdT„Z/dUdV„Z0dS)WÚTestJoincCs:ttƒtƒtj d¡tj d¡dœƒ}||ddk}|S)Nr )Úkey1Úkey2Zdata1Zdata2ré©rrrrÚrandn)ÚselfÚdfrrrr s
 
üÿ
z TestJoin.dfcCs&ttddtdddtj d¡dœƒS)Né
)ré)rr)rrÚvaluer)rrrrÚdf2.s 
 
ýÿz TestJoin.df2cCs>t ¡\}}t||d}t|d|ddœ|dd}||fS)N©ÚindexÚAÚD)ÚMergedAÚMergedDÚC)ÚtmZgetMixedTypeDictr)rr&ÚdataÚtargetÚsourcerrrÚ target_source8s  ÿzTestJoin.target_sourcecCsFt||dd}t|||dgddt||ƒ}t|||ddgdddS)Nr©ÚonÚleft©Úhowr©r    Ú _check_join©rr r$Z joined_key2Z joined_bothrrrÚtest_left_outer_joinDs
zTestJoin.test_left_outer_joincCsLt||ddd}t|||dgddt||dd}t|||ddgdddS)NrÚright©r2r5r4rr6r8rrrÚtest_right_outer_joinKszTestJoin.test_right_outer_joincCsLt||ddd}t|||dgddt||dd}t|||ddgdddS)NrÚouterr;r4rr6r8rrrÚtest_full_outer_joinRszTestJoin.test_full_outer_joincCsLt||ddd}t|||dgddt||dd}t|||ddgdddS)NrÚinnerr;r4rr6r8rrrÚtest_inner_joinYszTestJoin.test_inner_joincCs,t||ddd}d|kst‚d|ks(t‚dS)Nr©z.fooz.bar)r2Úsuffixesúkey1.foozkey1.bar©r    ÚAssertionError©rr r$ÚjoinedrrrÚtest_handle_overlap`s zTestJoin.test_handle_overlapcCs.t||dddd}d|kst‚d|ks*t‚dS)NrrrA)Úleft_onÚright_onrBrCzkey2.barrDrFrrrÚ!test_handle_overlap_arbitrary_keyfsû z*TestJoin.test_handle_overlap_arbitrary_keyc    CsÂ|\}}|j|dd}tj|d|dddtj|d|dddtd    d
d
d d d giƒ}td dddgid
d d gd}|j|d    d}td
d
d d d gdddddgdœƒ}t ||¡tdgdgdggd
d d gdgd}    tdgdggddgdgd}
tdgdggddgdgd} |    j|
dd}|j| dd}t |dd ¡sBt‚t |dd ¡sZt‚tj    t
dd|j|ddW5QRX|  ¡} d| d<d} tj    t | d|j| ddW5QRXdS)Nr+r1r)r'F)Z check_namesr*r(ÚkeyÚaÚbÚcr#rrér%©rLr#éÚone©r&ÚcolumnsÚfooÚbarÚtwoÚthreez^'E'$©ÚmatchÚEzfYou are trying to merge on float64 and object columns. If you wish to proceed you should use pd.concat) Újoinr,Úassert_series_equalrÚassert_frame_equalrÚisnanrEÚpytestÚraisesÚKeyErrorÚcopyÚ
ValueError)rr0r.r/Úmergedr r$rGÚexpectedZdf_aZdf_bZdf_cZ source_copyÚmsgrrrÚ test_join_onqs4ÿ "ÿzTestJoin.test_join_onc    CsŠttjjddgddtj d¡dœƒ}ttjjddgddtj d¡dœt dd¡d}d    }tjt    |d
t
||d d d W5QRXdS)NÚmÚfrR©Úsize©rMrNr!rPr%úFlen\(left_on\) must equal the number of levels in the index of "right"rZrMT©rIÚ right_index© rrrÚchoicerr,ZmakeCustomIndexrarbrer    ©rr r$rhrrrÚ-test_join_on_fails_with_different_right_index˜s ÿ 
þz6TestJoin.test_join_on_fails_with_different_right_indexc    CsŠttjjddgddtj d¡dœt dd¡d}ttjjddgddtj d¡dœƒ}d    }tjt    |d
t
||d d d W5QRXdS)NrjrkrRrlrnrPr%r!zFlen\(right_on\) must equal the number of levels in the index of "left"rZrNT)rJÚ
left_indexrrrtrrrÚ,test_join_on_fails_with_different_left_index¤s 
þ ÿz5TestJoin.test_join_on_fails_with_different_left_indexc    CsŽttjjddgddtj d¡dœƒ}ttjjddgddtj d¡dœt dd¡d}d    }tjt    |d
t
||d d d gd W5QRXdS)NrjrkrRrlrnr!rPr%z)len\(right_on\) must equal len\(left_on\)rZrMrN)rJrIrrrtrrrÚ/test_join_on_fails_with_different_column_counts°s ÿ 
þz8TestJoin.test_join_on_fails_with_different_column_countsÚ
wrong_typerPÚstrNrrc    Csxtdddgiƒ}dt|ƒ›d}tjt|dt||dddW5QRXtjt|dt||dddW5QRXdS)NrMrz.Can only merge Series or DataFrame objects, a z  was passedrZ)rIrJ)rÚtyperarbÚ    TypeErrorr    )rryr rhrrrÚ)test_join_on_fails_with_wrong_object_type¼sÿz2TestJoin.test_join_on_fails_with_wrong_object_typecCsD|\}}|j|dd}|d=| d¡}|j||d}t ||¡dS)Nr+r1)r]Úpopr,r_)rr0r.r/rgÚjoin_colÚresultrrrÚtest_join_on_pass_vectorÍs 
z!TestJoin.test_join_on_pass_vectorcCs€|\}}|j| g¡dd}|D]$}||ks0t‚|| ¡ ¡s t‚q |j| g¡ddd}t |j|j¡t|ƒdks|t‚dS)Nr+r1r?r;r)    r]ÚreindexrEÚisnaÚallr,Úassert_index_equalrUr)rr0r.r/rfÚcolZmerged2rrrÚtest_join_with_len0Ös zTestJoin.test_join_with_len0cCsžtdddddddgiƒ}tdddgiddgd    }|j|dd
d }|j|dd }||d ¡}t |d|d¡tj|d|dd dt |j|j¡dS)NrLrMÚdrNrOr#rrr%r?r;r1F)Z check_dtype)rr]Únotnar,r^r…r&©rr r$rGrgrrrÚtest_join_on_innerâszTestJoin.test_join_on_innercCs`tddddddgiƒ}tddddgidddgd    }|j|dgd
}|j|dd
}t ||¡dS) NrLrMrNrOr#rrrPr%r1©rr]r,r_rŠrrrÚtest_join_on_singlekey_listîs
z$TestJoin.test_join_on_singlekey_listcCs>|\}}|j|ddd}|j|dgdd}t ||¡dS)Nr)r+r1©r]r,r_)rr0r.r/r€rgrrrÚtest_join_on_seriesøszTestJoin.test_join_on_seriescCs\tdddgiƒ}tdgdgdd}|j|dd}tddgddgdœ|jd}t ||¡dS)    NrMrrPrN©r&Únamer1rnr%)rrr]r&r,r_)rr Zdsr€rgrrrÚtest_join_on_series_bugletþs
z#TestJoin.test_join_on_series_bugletcCs–tt d¡d}d|d<d|d<tt dd¡d}d    |d
<d |d <|j||d }t|||d }t ||¡|j||d }t|||d }t ||¡dS)Nr!r%TÚboolrVÚstringéérÚintçð?Úfloatr4)rrÚaranger]Ú _join_by_handr,r_)rÚ    join_typeÚdf1r$rGrgrrrÚtest_join_index_mixeds zTestJoin.test_join_index_mixedcCsÒtdddddœt d¡ddd    d
gd }|djtjks:t‚|d
jtjksNt‚tdddddœt d dd¡ddd    d
gd }|j|d dd}ddddddddg}|dd…|_|dd…|_t    ||ƒ}t
  ||¡dS)Nr˜rPrVT©r'ÚBr+r(r!r'r r+r(rTrZ_oneZ_two©ÚlsuffixÚrsuffixZA_oneZB_oneZC_oneZD_oneZA_twoZB_twoZC_twoZD_twor") rrršÚdtypeÚint64rEZbool_r]rUr›r,r_)rrr$rGZexpected_columnsrgrrrÚtest_join_index_mixed_overlaps4 
ý  
ýø
 
z&TestJoin.test_join_index_mixed_overlapcCs(tƒ}|jtdgdgdgddddS)NrRrr'rTr=r4)rr])rÚxrrrÚtest_join_empty_bug8szTestJoin.test_join_empty_bugcCsbttj dd¡ddgd}ttj d¡ƒ}||d<ttj dd¡dgd}| |¡| |¡dS)    NérPrMrN©rUrOrÚq)rrrrrr])rrMrOrˆrrrÚtest_join_unconsolidated=s 
z!TestJoin.test_join_unconsolidatedcCstjddddddgddddddggddgd}tjdddd    d    d    gddddddggddgd}ttj d
¡|d gd }ttj d
¡|d gd }|jdd}|jdd}|j|dd}t|j    ƒ 
t|j    ƒ¡}|  |¡ |  |¡¡}|j |j _ t ||¡|j j |j kst‚|jdd}|jdd}|j|ddjdd}t|j    ƒ 
t|j    ƒ¡}|  |¡ |  |¡¡}|j |j _ t ||¡|j j |j ksŒt‚dS)NrMrNrrPrRÚfirstÚsecond©ÚnamesrOézvar X)r-r&rUzvar Yr)Úlevelr=r4)rZ from_arraysrrrrÚ
sort_indexr]rÚvaluesÚunionr‚r°r&r,r_rE)rZindex1Úindex2rr$rGZex_indexrgrrrÚtest_join_multiindexHs4þþ  
 
 zTestJoin.test_join_multiindexc
 
Cs ddddddddddg
}ddddddddddg
}tj t|ƒ¡}t|||d    œƒ}|}ttj d
d ¡|d d dgd}|j|ddgdd}t|| ¡ddgddgddd}t||ddgdddd}    t     ||     
|¡¡t||ddgdddd}    |j ddgdd}|j |_ |j j st‚t     ||¡dS)NrWrVÚbazZquxZsnaprXrSrY)rrr-r!rRZj_oneZj_twoZj_threerTrrr?r;r­r®F)rIrJr5ÚsortT)rJrvr5r¹r©Zaxis)rrrrrr]r    Ú reset_indexr,r_Z reindex_likeZdropr&Zis_monotonic_increasingrE)
rZ%lexsorted_two_level_string_multiindexrrr-r&Zto_joinrGrgZ    expected2rrrÚtest_join_inner_multiindexksdö  ÿú    úú    z#TestJoin.test_join_inner_multiindexc    CsŠtddgdddgd}| dg¡ dtjtjgi¡}tddgdddgd}|jdd    d
tjt    j
j d d t ||d    d    d W5QRXdS)N)rrPrR)r"r•r±rMrNrOrª)ér!r±rˆT)Zinplacez-Not allowed to merge between different levelsrZ©rvrq) rÚgroupbyZaggrÚmeanÚsumÚ    set_indexrarbÚpdÚerrorsÚ
MergeErrorr    )rr Znew_dfZother_dfrrrÚ#test_join_hierarchical_mixed_raises§sÿz,TestJoin.test_join_hierarchical_mixed_raisesc
Cspttj dd¡ddgtjd}ttj dd¡dgtjd}| |¡}|jddksVt‚|jddksht‚|jdd    kszt‚tj     d
d d ¡ 
d ¡}tj d ¡ 
d¡}tj d ¡ 
d    ¡}t|||dœƒ}t|||dœƒ}ttj d ¡ 
d    ¡dgd}|j |ddd}|jdd kst‚|jddks(t‚|jdd    ks<t‚|jdd    ksPt‚|j |ddd}    t   ||    ¡dS)Nr!rPrMrN©rUr¤rrOÚfloat64Úfloat32rr•édr¥©rMrNrOZmdrªTrp)rrrrrÈrÉr]ZdtypesrEÚrandintÚastyper    r,r_)
rrMrNrGrOr ZxpdfÚsÚrsZxprrrÚtest_join_float64_float32´s&
z"TestJoin.test_join_float64_float32c
Cs°tddgddgddgdœƒ}tddgddgddgdœƒ}tddgddgd    d
gd œƒ}| d d g¡}| d d g¡}| d d g¡}|j||gdd}t||d d gdd}t||d d gdd}    | ¡}|    |j}    |    j d¡|    d <|    j d¡|    d <t     
||    ¡tdddgdddgdddgdœƒ}tdddgdddgdddgdœƒ}tdddgdddgd    d
dgd œƒ}| d d g¡}| d d g¡}| d d g¡}|j||gdd}t||d d gdd}t||d d gdd}    | ¡}t     
||    j dd…|jf¡tddddddddgddddddddgt j  d¡t j  d¡dœƒ}
tt  t  d¡d¡t  t  d¡d¡dd} |
j| dd} |
j| dd} |
j| dd}|
j| d d}t     
| | ¡t     
| |¡t     
| |¡dS)!Nrr!érËrPrÊéÈ©rMrNrˆièiÐ)rMrNÚerMrNr=r4r;r¥r©i,i¸ r?rVrWrSrXrYr
rŸZTESTrr3r:)rrÂr]r    r»rUrMrÍrNr,r_ÚlocrrrrÚrepeatrš)rrr$Údf3Zidf1Zidf2Zidf3r€Zdf_partially_mergedrgr rÎr?r=r3r:rrrÚtest_join_many_non_unique_indexËsX
 """
 
üÿÿ  z(TestJoin.test_join_many_non_unique_indexcCs¸tddddgddddgdœƒ}td    d
d d gidddgd }|j|ddd}tddddgddddgd
d d d gdœddddgd }t ||¡|j|ddd}tj|jttdƒƒdddS)NrVrWr¸rrPrRr"rQÚvalue2rMrNrOr%rLT)r2r¹)rLr#rÙrF)Úexact)rr]r,r_r…r&rr)rr3r:rGrgrrrÚtest_join_sorts
 
 
ý
ú zTestJoin.test_join_sortcCstdddddgiddddgd}tddd    d
d giddddgd}| |¡}tdddddgdtjd    d
tjgd œdddddgd}t ||¡tdddddgiddddgd}tddd    d
d giddddgd}| |¡}tddddgdd    d    tjgd œddddgd}t ||¡dS) NrMrrPrRr"r%rNr•r±r½r
rn)rr]rÚnanr,r_)rrr$r€rgr×Zdf4rrrÚ test_join_mixed_non_unique_indexs   
  þ   
 
ÿz)TestJoin.test_join_mixed_non_unique_indexcCs’tjdddd}tttt|ƒƒƒ|dgd}t||gƒ}|j|ddd    }tt     tj
dtj d
  d ¡  d d ¡d ¡ddg| ¡jd}t ||¡dS)Nz
2016-01-01éÚM)ÚperiodsÚfreqZpnumrTr?Z_df2)r5r£©r¤rPéÿÿÿÿrZpnum_df2©rUr&)rÃZ period_rangerr rrrr]rrršr¥rÖÚreshaper³r&r,r_)rr&r r$r€rgrrrÚ!test_join_non_unique_period_index's $ýz*TestJoin.test_join_non_unique_period_indexc    Csttj dd¡ddddddgd    }| d
d d
¡| d d d¡| d ¡}tjtdd|     ¡W5QRX|j    dd}| 
¡}|j |dddS)NrÑr±rMrNrOrˆrÔrkrªrÚidr•ÚdtrVzCould not convertrZT)Z numeric_onlyÚ_right©r£) rrrrÚinsertr¿rarbr|rÀÚcountr])rr ZgroupedÚmnZcnrrrÚ test_mixed_type_join_with_suffix4s"
 z)TestJoin.test_mixed_type_join_with_suffixc    Cs\ttj dd¡tdƒd}|ddg|ddg|d    d
gg}|d  |d d…¡}t ||¡|ddgdd …|ddgdd…|d    d
gd d…g}dd„}|d j|d d…dd}||||jƒ|d  |d d…¡}||||d jƒ|d j|d d…dd}||||jdd…ƒd}t    j
t |d |d j|d d…ddW5QRXdS)Nr!r±ZabcdefrªrMrNrOrˆrÔrkrréþÿÿÿrPé    cs8‡fdd„|Dƒ}|d |dd…¡}t ||¡dS)Ncsg|]}| ˆ¡‘qSr)r‚)Ú.0r§©Ú    exp_indexrrÚ
<listcomp>MszFTestJoin.test_join_many.<locals>._check_diff_index.<locals>.<listcomp>rrrŽ)Údf_listr€róZ    reindexedrgrròrÚ_check_diff_indexLsz2TestJoin.test_join_many.<locals>._check_diff_indexr=r4r?r
z?Joining multiple DataFrames only supported for joining on indexrZr1) rrrrr r]r,r_r&rarbre)rr rõrGrörhrrrÚtest_join_manyCs" :zTestJoin.test_join_manycCsŒttj dd¡ddddgd}dd    gd|d
<|jdd…ddgf}|jdd…ddgf}|jdd…d
gf}| ||g¡}t ||¡dS) Nr
r"r'r r+r(rªrVrWrL)rrrrrÕr]r,r_)rr rr$r×r€rrrÚtest_join_many_mixed_szTestJoin.test_join_many_mixedc        Cs6tttj dd¡ddddgdttjjdddd dd    ¡dd
gdgd d }t||gd d }|j|d d}|j|_t     
||¡ttj dd    ¡ddgd}ttj dd    ¡ddgd}ttj dd    ¡ddgd}ttj dd    ¡ddgd}|j |dddj |dddd}t j tjjdd|j |dddW5QRXdS)Nr!r"r'r rªrrÑrlrPr+rrºZ_2rêr§ÚyTr¾r=)rvrqr5z0Passing 'suffixes' which cause duplicate columnsrZ)rrrrrrÌrår]rUr,r_r    rarbrÃrÄrÅ)    rr rgr€Úwr§rùÚzZdtarrrÚtest_join_dupsis8ÿþù
 ÿþzTestJoin.test_join_dupsc        Cs tjtdƒtdƒddggdddgd}tdtdƒi|d    }tjtdƒtdƒgddgd}td
d d „tdd ƒDƒi|d    }|j|ddg|d}| ¡j| ¡ddg|d dddg¡}t     
||¡d}t j t |d|j|d|dW5QRXt j t |d|j|ddg|dW5QRXdS)NÚabcZxyrrPÚnumr¯Zv1é r%Zv2cSsg|] }d|‘qS)rÊr)rñÚirrrrô”sz5TestJoin.test_join_multi_to_multi.<locals>.<listcomp>r½r;rorZ)rZ from_productr rrr]r»r    rÂr,r_rarbre)    rrœZ    leftindexr3Z
rightindexr:r€rgrhrrrÚtest_join_multi_to_multiŠs2ÿÿ ÿþÿ z!TestJoin.test_join_multi_to_multicCsˆttjddddtdƒdœƒ}ttjddddtdƒd    œƒ}|j| d
¡d
d }| ¡}ttj    gd td ƒt
d|d<t   ||¡dS)Nz
2018-01-01r•zAmerica/Chicago)ÚstartràÚtzZabcde)ÚdateÚvalsz
2018-01-03Ztuvwx)rÚvals_2rr1rPZtuvrâr) rrÃZ
date_ranger r]rÂrdrrrÜÚobjectr,r_)rrr$r€rgrrrÚ#test_join_on_tz_aware_datetimeindex¥s,ÿüÿ    ÿüÿ z,TestJoin.test_join_on_tz_aware_datetimeindexcCsàtdddgdddgdddgdddggd    d
d gd }t |d    ¡|d    <tddd gdddggd    d
dgddgd}t |d    ¡|d    <|j| d    d
g¡d    d
gd}ttdƒdd dgtdƒdddggddgd    d
dd gd}t ||¡dS)Nz
2012-08-02ÚLr!ÚJr–z
2013-04-06rÑér§rùrMrªrrPrûr"rär1z2012-08-02 00:00:00z2013-04-06 00:00:00rT)rrÃÚ to_datetimer]rÂrr,r_)rZdfaZdfbr€rgrrrÚtest_join_datetime_string½s0üù    ýþ
úz"TestJoin.test_join_datetime_stringcCs–ddg}tj||d}tjt|ƒt|ƒd}td|i|d}tdt|ƒi|d}| |¡}tddgddgdœtjddgddgdd}t ||¡dS)NrMrN©Ú
categoriesÚc1r%Úc2)rr)rÃZCategoricalIndexÚreversedrr]r,r_)rÚixZid1Zid2rr$r€rgrrrÚ test_join_with_categorical_indexÚs
þz)TestJoin.test_join_with_categorical_index)1Ú__name__Ú
__module__Ú __qualname__raZfixturer r$r0r9r<r>r@rHrKrirurwrxÚmarkÚ parametrizerÚarrayr}rr‡r‹rrr’ržr¦r¨r¬r·r¼rÆrÐrØrÛrÝrærîr÷rørürrr rrrrrrsX
 
    
 '   
      
  #< 6 
!rr3Ú_xÚ_yc CsF|D]}|| ¡ ¡st‚q| |¡}| |¡}    | t|ƒdkrF|n|d¡D]ð\}
} t| |j|ƒ} t| |j|ƒ} z| |
¡}WnJtk
rÌ}z,|dkr®td|
›dƒ|‚t    | |j|ƒW5d}~XYn Xt
| |ƒz|     |
¡}WnNtk
r4}z.|dkrtd|
›dƒ|‚t    | |j|ƒW5d}~XYqPXt
| |ƒqPdS)Nrr)r3r?zkey z! should not have been in the join)r:r?) r‰r„rEr¿rÚ_restrict_to_columnsrUZ    get_grouprcÚ_assert_all_naÚ_assert_same_contents)r3r:r€rr5r¢r£rOZ left_groupedZ right_groupedZ    group_keyÚgroupZl_joinedZr_joinedZlgroupÚerrZrgrouprrrr7ês>
 
ÿ 
ÿþ 
 
 
ÿþ r7csR‡‡fdd„|jDƒ}|jdd…|f}|j‡fdd„d}|jdd…ˆf}|S)Ncs(g|] }|ˆks | ˆd¡ˆkr|‘qS)Ú©Úreplace)rñrO©rUÚsuffixrrrôsz(_restrict_to_columns.<locals>.<listcomp>cs | ˆd¡S)Nr"r#)r§)r&rrÚ<lambda>óz&_restrict_to_columns.<locals>.<lambda>rª)rUrÕÚrename)r rUr&Úfoundrr%rrs ÿrcsdd}| |¡ ¡j}| |¡ ¡j}dd„|Dƒ‰tˆƒt|ƒksFt‚t‡fdd„|Dƒƒs`t‚dS)Niy)íÿcSsh|] }t|ƒ’qSr©Útuple©rñÚrowrrrÚ    <setcomp>(sz(_assert_same_contents.<locals>.<setcomp>c3s|]}t|ƒˆkVqdSr r+r-©ÚrowsrrÚ    <genexpr>*sz(_assert_same_contents.<locals>.<genexpr>)ZfillnaZdrop_duplicatesr´rrEr„)Ú
join_chunkr/Z NA_SENTINELZjvaluesZsvaluesrr0rr"s rcCs,|D]"}||krq|| ¡ ¡st‚qdSr )rƒr„rE)r3Zsource_columnsrrOrrrr-src    CsZ|jj|j|d}| |¡}| |¡}|j |j¡}| ¡D]\}}|||<q<|j|dS)Nr4rª)r&r]r‚rUÚappendÚitems)    rMrNr5Z
join_indexZa_reZb_reZresult_columnsr†rÎrrrr›4s
 
 
r›cCsxtdditjdgddd}tdditjd    gd
dd}|j|d d }tdgdgd œtjdgddd}t ||¡dS)NrÔr•)rrPr"rÓr¯©r-r&rkr±)rPrR)rNrOr?r4)rÔrk)rPrr"rR)rNrMrˆrOr%©rrÚ from_tuplesr]r,r_)r3r:r€rgrrrÚ.test_join_inner_multiindex_deterministic_orderAsþÿ þr9)Ú    input_colÚ output_colsrNrMZa_xZa_ycCsjtdddgiƒ}t|ddgiƒ}|j|dddd}t|d    ddddg|dddddgiƒ}t ||¡dS)
NrMrrRr"Úcrossrr)r5r¢r£rrŒ)r:r;r3r:r€rgrrrÚtest_join_crossRs
(r=cCs|tdditjdgddd}tdditjd    gd
dd}|j||d }tdgdgd œtjd gddgdd}t ||¡dS)NrOrR)rrPrnr¯r6rˆr")rP)rNr4)rOrˆ)rPrrNrMr%r7)rœr3r:r€rgrrrÚtest_join_multiindex_one_level^sÿ þr>zcategories, valuesÚYÚXrPrg@gø?z
2020-12-31z
2019-12-31cCs¨tddgt||dddgdœƒ ddg¡}tdddgt||dd    d
d gdœƒ ddg¡}|j|d d d}tddgt||dddgd    d
gdœƒ ddg¡}t ||¡dS)Nr'rrrP)r­r®r#r­r®r rRr"r•Ú_leftrér¡)r­r®Z
value_leftZ value_right©rrrÂr]r,r_)rr´r3r:r€rgrrrÚ1test_join_multiindex_not_alphabetical_categoricalls6
ýÿú
ýÿú
üÿùrCzleft_empty, how, exp)Fr3r3)Fr:Úempty)Fr?rD)Fr=r3)Fr<rD)Tr3rD)Tr:r:)Tr?rD)Tr=r:)Tr<rDcCsþtddgddgdœdd d¡}tdgd    gd
œdd d¡}|rL| d ¡}n
| d ¡}|j||d }|d kr˜tddgddgtjtjgdœƒ}| d¡}nV|dkrÄttjgdgd    gdœƒ}| d¡}n*|dkrîtddgdd}|dkrî| d¡}t ||¡dS)NrPrrRr")r'r r¥râr'r•)r'r+rr4r3)r'r r+r:)r r'r+rDr r+rÇr<)    rrÂÚheadr]rrÜZ rename_axisr,r_)Z
left_emptyr5Úexpr3r:r€rgrrrÚtest_join_empty•s"  
   
rGz how, valuesr?r=r:cCsªttdddgƒtdddgƒdddgdœƒ ddg¡}ttdddgƒtdddgƒdddgdœƒ ddg¡}tt|ƒt|ƒ||dœƒ ddg¡}|j||d    }t ||¡dS)
NrrrPrËrMrNrÓ)rMrNrOrˆr4rB)r5r´rr$rgr€rrrÚ3test_join_multiindex_categorical_output_index_dtype½s6   ýÿú  ýÿúüÿù    rH)r
r )r3rr)r3)ÚnumpyrraZpandasrÃrrrrrrrr    Zpandas._testingZ_testingr,rrr7rrrr›r9rrr=r>rCrGrHrrrrÚ<module>st(
 
R
' 
ÿ
    þüþ
öþ
    üþ