
    dF                        d dl mZ d dlZd dlZd dlZd dlmZm	Z	 d dl
mZ d dlmZmZ d dlmZ  G d d          Z G d	 d
          Z G d d          ZdS )    )annotationsN)dtypesmerge)
MergeError)assert_equalassert_identical)create_test_datac                      e Zd Zd ZdS )TestMergeInternalsc                   t          j        t          j        ddg          t          j        dddg          g          }|dddk    sJ t          j        t          j        dddgg          t          j        dddg          g          }|dddk    sJ t	          j        t                    5  t          j        t          j        dddgg          t          j        ddg          g           d d d            d S # 1 swxY w Y   d S )Nx   y   r   r   )r   broadcast_dimension_sizexrVariablepytestraises
ValueError)selfactuals     7lib/python3.11/site-packages/xarray/tests/test_merge.pytest_broadcast_dimension_sizez0TestMergeInternals.test_broadcast_dimension_size   s]   /[qc""BKaV$<$<=
 
 qq))))))/[q!fX..C!Q0H0HI
 
 qq))))))]:&& 	 	*Z1a&22BKaS4I4IJ  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   0AC>>DDN)__name__
__module____qualname__r        r   r   r      s#            r    r   c                     e Zd Zd Zd Zd Zd Zej        	                    ddddd	dd
dddd
ddfdddd	i ddd	dfdi dd
ddd
ddfdddd	dd
dddd
ddfdddd	dd
di dfdddd	ddd	ddd	dfdddd	dd
dddd	dfdddd	ddd
dddd	dfdddd
ddd
dddd
dddfdd e
j        dg           e
j        d
g          dd e
j        d
g          ddd e
j        d
g          dddfd ddd
ddd
dddd
dddfg          d             Zej        	                    ddddd	dd
dddd
ddfdddd	i ddd	dfdi dd
ddd
ddfdddd	dd
dddd
ddfdddd	dd
di dfdddd	ddd	ddd	dfdddd	dd
dddd	dfdddd	ddd
dddd	dfdddd
ddd
dddd
dddfd ddd
ddd
dddd
dddfg
          d             Zd Zd Zd Zd Zd  Zd! Zd" Zd# Zd$ Zd% Zd& Zd' Zd(S ))TestMergeFunctionc                    t          d          }t          j        |j        |j        g          }|ddg         }t          ||           d S NF	add_attrsvar1var2)r	   r   r   r'   r(   r   r   datar   expecteds       r   test_merge_arraysz#TestMergeFunction.test_merge_arrays    sO    %00049di011()*****r    c                    t          d          }t          j        |dg         |dg         g          }|ddg         }t          ||           t          j        ||g          }t          ||           d S r$   )r	   r   r   r   r)   s       r   test_merge_datasetsz%TestMergeFunction.test_merge_datasets'   sz    %0004>4>:;;()***4,''&&&&&r    c                    t          j        ddgd          }t          j        t          d          5  t          j        |g           d d d            d S # 1 swxY w Y   d S )Nr   r   r   )dimsz"without providing an explicit namematch)r   	DataArrayr   r   r   r   )r   r*   s     r   test_merge_dataarray_unnamedz.TestMergeFunction.test_merge_dataarray_unnamed1   s    |QF---]:-RSSS 	 	HdV	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                J   ddd}ddd}ddd}t          d          }|dd	g                                         }||j        _        ||j        _        ||_        ||j        _        ||j        _        t          j        |j        |j        g          }t          ||           d S )
Nr   r   ab   r7   cFr%   r'   r(   )r	   copyr'   attrsr(   r   r   r   )r   
var1_attrs
var2_attrsexpected_attrsr*   r+   r   s          r   test_merge_arrays_attrs_defaultz1TestMergeFunction.test_merge_arrays_attrs_default6   s    1%%
1%%
 q))%000()..00(('$	$	49di011*****r    zGcombine_attrs, var1_attrs, var2_attrs, expected_attrs, expect_exceptionno_conflictsr   r   r6   r9   r:   r7   r8   r;   F   Tdrop	identicaloverride   drop_conflictsr8   r;   dr7   r;   rK   c                    | d         S Nr   r   r=   contexts     r   <lambda>zTestMergeFunction.<lambda>r   
    uQx r    c                t   t          j        |          }t          j        |          }|rNt          j        t          d          5  t          j        ||g|          }d d d            d S # 1 swxY w Y   d S t          j        ||g|          }t          j        |          }	t          ||	           d S )Nr=   combine_attrsr1   rU   r   Datasetr   r   r   r   r   )
r   rU   r>   r?   r@   expect_exceptiondata1data2r   r+   s
             r   test_merge_arrays_attrsz)TestMergeFunction.test_merge_arrays_attrsF   s   n 
,,,
,,, 	/zAAA O O5%.NNNO O O O O O O O O O O O O O O O O O XuenMJJJFz777HVX.....s   A..A25A2z?combine_attrs, attrs1, attrs2, expected_attrs, expect_exceptionc                    | d         S rN   r   rO   s     r   rQ   zTestMergeFunction.<lambda>   rR   r    c                   t          j        ddg |fiddg |fi          }t          j        ddg |fiddg |fi          }|rNt          j        t          d          5  t          j        ||g|          }ddd           dS # 1 swxY w Y   dS t          j        ||g|          }t          j        ddg |fiddg |fi          }	t          ||	           dS )z=check that combine_attrs is used on data variables and coordsr'   dim1coordsrU   r1   rV   NrW   )
r   rU   attrs1attrs2r@   rY   rZ   r[   r   r+   s
             r   !test_merge_arrays_attrs_variablesz3TestMergeFunction.test_merge_arrays_attrs_variables   s   b 
fb&)*FVR<P3Q
 
 
 
fb&)*FVR<P3Q
 
 
  
	/zAAA O O5%.NNNO O O O O O O O O O O O O O O O O O XuenMJJJFz&"n56^ <=  H
 VX.....s   BBBc                    t          j        ddi          }t          j        ddi          }t          j        ||gd          }d|j        d<   |j        dk    sJ d S )Nr   r   rT   r   rG   rV   r   )r   rX   r   r=   r   )r   ds1ds2ds3s       r   test_merge_attrs_override_copyz0TestMergeFunction.test_merge_attrs_override_copy   sd    jQx(((jQx(((hSz<<<	#uzzzzzzr    c                "   t          j        dddd          }t          j        dddd          }t          j        ddddd          }t          j        |||gd          }t          j        dddd	          }t          ||           d S )
Nr   rC   rT   r   rJ   )r7   r8   r;   erI   rV   )r7   rK   rk   r   rX   r   r   )r   rf   rg   rh   r   r+   s         r   test_merge_attrs_drop_conflictsz1TestMergeFunction.test_merge_attrs_drop_conflicts   s    jQQQ77888jQQQ77888jQQQQ??@@@3S/9IJJJ:!!!$<$<===*****r    c                   t          j        ddg ddifi          }t          j        ddg ddifi          }t          j        t           j        d          5  t          j        ||gdd	           d
d
d
           d
S # 1 swxY w Y   d
S )z2make sure compat="minimal" does not silence errorsr7   r   r   r   rU   r1   rB   minimal)rU   compatNr   rX   r   r   r   r   )r   rf   rg   s      r   ,test_merge_attrs_no_conflicts_compat_minimalz>TestMergeFunction.test_merge_attrs_no_conflicts_compat_minimal   s    j#R#q2344j#R#q2344]2=@@@ 	Q 	QHc3Z~iPPPP	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Qs   A>>BBc                    t          j        ddiddiddig          }t          j        dddd          }t          ||           d S )Nfoor   baronebazg      @)rt   ru   rw   r   r   rX   r   r   r   r+   s      r   test_merge_dicts_simplez)TestMergeFunction.test_merge_dicts_simple   sS    E1:u~s|DEE:acBBCC*****r    c                    t          j        dddgfiddgig          }t          j        dgddgfd          }t          ||           d S )Nr   r         r   rx   ry   s      r   test_merge_dicts_dimsz'TestMergeFunction.test_merge_dicts_dims   s\    C#t-bT{;<<:RDbT{;;<<*****r    c                    t          j        ddi          }t          j        t           j                  5  t          j        ||dz   g           d d d            d S # 1 swxY w Y   d S )Nr   r   r   rq   r   dss     r   test_merge_errorz"TestMergeFunction.test_merge_error   s    Za!!]2=)) 	# 	#Hb"q&\"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   AA #A c                   t          j        dddgi          }t          j        dddgi          }t          j        t          d          5  t          j        ||gd	           d d d            d S # 1 swxY w Y   d S )
Nr   r   r   r`   r9   z&cannot align.*join.*exact.*not equal.*r1   exactjoin)r   rX   r   r   r   r   )r   r   others      r   test_merge_alignment_errorz,TestMergeFunction.test_merge_alignment_error   s    ZaV}---
3A-000]:-VWWW 	0 	0Hb%[w////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   A44A8;A8c                   t          j        t          d          5  t          j        dg           d d d            n# 1 swxY w Y   t          j        dddgi          }t          j        t          d          5  t          j        d|i           d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        |dg           d d d            d S # 1 swxY w Y   d S )Nzobjects must be an iterabler1   r   r   r   r`   r7   )r   r   	TypeErrorr   r   rX   r   s     r   test_merge_wrong_input_errorz.TestMergeFunction.test_merge_wrong_input_error   s   ]9,JKKK 	 	HaSMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	ZaV}---]9,JKKK 	  	 Hc2Y	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 ]9,JKKK 	 	Hb!W	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s3   >AA=B  B$'B$C**C.1C.c                `   t          j        dddgfddgd          }t          j        dddgfddgd          }t          j        dg dfg dd          }|                    t          j        ||gd	
                    sJ |                    t          j        ||gd	
                    sJ |                    t          j        ||gd	d                    sJ |                    t          j        ||gd	d                    sJ t          j        ddgfdgd          }|                    t          j        ||gd	d                    sJ t	          j        t           j                  5  t          j        dddgfddgd          }t          j        ||gd	
           d d d            n# 1 swxY w Y   t	          j        t           j                  5  t          j        dddgfddgd          }t          j        ||gd	
           d d d            d S # 1 swxY w Y   d S Nr   r   r   r   r7   r   r9   )r   r   r9   r   r   r   rB   rp   left)rp   r   rightinnerc   r   )r7   r   r   rX   rF   r   r   r   r   )r   rf   rg   r+   rh   s        r   "test_merge_no_conflicts_single_varz4TestMergeFunction.test_merge_no_conflicts_single_var  s   jaV}Aq6::;;jaV}Aq6::;;:S)))$4999EEFF!!"(C:n"M"M"MNNNNN!!"(C:n"M"M"MNNNNN}}RXsCjfUUUVVVVV}}RXsCjgVVVWWWWW:S1#JaS99::!!Hc3ZWEEE
 
 	
 	
 	
 ]2=)) 	8 	8*C"a>A??@@CHc3Z7777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 ]2=)) 	8 	8*C!Q=1v>>??CHc3Z7777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s$   56F77F;>F; 6H##H'*H'c                $   t          d          }|                    d          }|                    d          }|ddg         }t          j        |j        |j        gd          }t          ||           t          j        |d         d d d d	f<   t          j        |d         d d d	d f<   t          j        |d         d d
d d f<   t          j        |d         d
d d d f<   |d= t          j        ||gd          }t          ||           d S )NFr%   T)deepr'   r(   rB   r   rH   rD   var3)
r	   r<   r   r   r'   r(   r   npnanr   )r   r*   rZ   r[   r+   r   s         r   !test_merge_no_conflicts_multi_varz3TestMergeFunction.test_merge_no_conflicts_multi_var  s   %000		t	$$		t	$$()5:uz2>JJJ6***!vfaaa!e!vfaaae!vfbqb!!!e!vfabb!!!e&M5%.@@@T6"""""r    c                    t          j        dg dddifi          }t          j        ||gd          }t          ||           d S )Nr   r   rt   ru   rB   rV   rl   )r   r*   r   s      r   &test_merge_no_conflicts_preserve_attrsz8TestMergeFunction.test_merge_no_conflicts_preserve_attrs)  sO    z3Q 78994,nEEEv&&&&&r    c                   t          j        dddgfi          t          j        dt          j        i          g}t          j        |          }t          j        dddgfi          }t          ||           t          j        ddt          j        gfi          t          j        ddi          g}t          j        |          }t          ||           d S )Nr   r   r   )r   rX   r   r   r   r   )r   datasetsr   r+   s       r   !test_merge_no_conflicts_broadcastz3TestMergeFunction.test_merge_no_conflicts_broadcast.  s    JcA3Z0112:sBFm3L3LM(##:sS1#J/006***JcBF8_566
C88L8LM(##6*****r    N)r   r   r   r,   r.   r4   rA   r   markparametrizer   arrayr\   rd   ri   rm   rr   rz   r~   r   r   r   r   r   r   r   r   r    r   r"   r"      s)       + + +' ' '  
+ + +  [Q a  a  aa(( 11--r3C3CUKRqq!1!13C3CUKa  a  aa(( 11%%QQ'7'7UC**!!,<,<AA>N>NPUV**!!,<,<AA>N>NPTUa  aa((a   !aa((aa((aa(( !hbhsmm("(A3--@@hbhsmm!44hbhsmm!44 0/aa((aa((aa((S0	
3 3h/ /i3 3h/ [I a  a  aa(( 11--r3C3CUKRqq!1!13C3CUKa  a  aa(( 11%%QQ'7'7UC**!!,<,<AA>N>NPUV**!!,<,<AA>N>NPTUa  aa((a   !aa((aa((aa(( 0/aa((aa((aa((E)	
, ,Z/ /[, ,Z/.  + + +Q Q Q+ + +
+ + +
# # #
0 0 0  8 8 8*# # #$' ' '
+ + + + +r    r"   c                  l   e Zd Zd Zd Zd Zd Zej        	                    de
j        ddddd	g          d
             Zd Zd Zej        	                    g ddddddddddi dfddddddddddddddfdddd	ddd	ddd	dfdddd	ddd	ddfdddd	ddd	ddff          d             ZdS )TestMergeMethodc                <   t                      }|dg         }|dg         }|ddg         }|                    |          }t          ||           |                    |          }t          ||           |                    |          }t          ||           |                    d                              |          }t          ||           |                    |                    d                    }t          ||           t	          j        t                    5  |                    |                    ddi                     d d d            n# 1 swxY w Y   t	          j        t          d          5  |                                                    |           d d d            n# 1 swxY w Y   t	          j        t          d          5  |                    |                                           d d d            d S # 1 swxY w Y   d S )Nr'   r   T)rE   should be coordinates or notr1   )r	   r   r   reset_coordsr   r   r   rename)r   r*   rf   rg   r+   r   s         r   
test_mergezTestMergeMethod.test_merge:  s   !!F8nF8n()36***36***D!!v&&&"""--33D99v&&&D--4-8899v&&&]:&& 	4 	4IIcjj&&!122333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4]:-LMMM 	, 	,%%d+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,]:-LMMM 	, 	,JJt((**+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s6   %+EE #E (F66F:=F:(HHHc                R   t          j        ddi          }t          j        ddddgfi          }|                    |          }t          ||           |                    |          }t          ||           |                                }|                    |           t          ||           t          j        dt          j        i          }t          j        ddt          j        t          j        gfi          }|                    |          }t          ||           d S )Nr   r   r   )r   rX   r   r   r<   updater   r   )r   rf   rg   r   s       r   test_merge_broadcast_equalsz+TestMergeMethod.test_merge_broadcast_equalsS  s    j#q""j#aV}-..3f%%%3f%%%cf%%%j#rv''j#bfbf%567883f%%%%%r    c                   t          j        ddi          }t          j        ddi          }dD ]O}t          j        t           j                  5  |                    ||           d d d            n# 1 swxY w Y   Pt          j        dddgi          }dD ]L}t          j        t          d          5  |                    ||           d d d            n# 1 swxY w Y   Mt          j        dd	dd
difi          }t          j        t           j                  5  |                    |d           d d d            n# 1 swxY w Y   t          j        t          d          5  |                    |d           d d d            n# 1 swxY w Y   |                    |                    |d                    sJ d S )Nr   r   r   )broadcast_equalsequalsrF   rB   r   )r   rF   r   r1   r   rt   ru   rF   zcompat=.* invalidfoobarrG   )r   rX   r   r   r   r   r   rF   )r   rf   rg   rp   s       r   test_merge_compatz!TestMergeMethod.test_merge_compate  s   j#q""j#q""Q 	. 	.Fr}-- . .		#f	---. . . . . . . . . . . . . . . j#1v''- 	. 	.Fz1PQQQ . .		#f	---. . . . . . . . . . . . . . . j#Au~6788]2=)) 	/ 	/IIc+I...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ ]:-ABBB 	, 	,IIc(I+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, }}SYYs:Y>>???????sH   A33A7	:A7	6CC	!C	EE
E)FFFc                   t          j        dddgfddgd          }t          j        dddgfddgd          }t          j        dddt          j        gfdt          j        ddgfd	dg d
i          }|                    |                    |                    sJ |                    |                    |                    sJ |                    t          d                    }|                    |                    |d                    sJ |                    |                    |d                    sJ |                    t          dd                    }|                    |                    |d                    sJ |                    |                    |d                    sJ d S )Nr   r   r   r   r   r9   rD   r8   r   r6   r   )r   r   r   r   r   )r   rX   r   r   rF   r   iselslice)r   rf   rg   r+   s       r   test_merge_auto_alignz%TestMergeMethod.test_merge_auto_alignz  s   jaV}Aq6::;;jaV}Aq6::;;:Arv'sRVQN.CDDsIIIFV
 
 !!#))C..11111!!#))C..11111==588=,,!!#))Cf)"="=>>>>>!!#))Cg)">">?????==5A;;=//!!#))Cg)">">?????!!#))Cg)">">???????r    
fill_valuer   g       @r   r6   c                b   t          j        dddgfddgd          }t          j        dddgfddgd          }|t          j        k    rt          j        x}}n*t          |t                    r|d	         }|d
         }n|x}}t          j        ddd|gfd|ddgfddg di          }|                    |	                    ||                    sJ |                    |	                    ||                    sJ |                    t          j	        ||g|                    sJ d S )Nr   r   r   r   r   r9   rD   r   r7   r8   r6   r   )r   )
r   rX   r   NAr   r   
isinstancedictrF   r   )r   r   rf   rg   fill_value_afill_value_br+   s          r   test_merge_fill_valuez%TestMergeMethod.test_merge_fill_value  s^   jaV}Aq6::;;jaV}Aq6::;;"" +-&0L<<
D)) 	5%c?L%c?LL*44L<:A|,-S<A:N4OPP)))
 
 !!#))CJ)"G"GHHHHH!!#))CJ)"G"GHHHHH!!"(C:*"M"M"MNNNNNNNr    c                R   t          j        dddgfddgd          }t          j        dddgfddgd          }t          j        dg dfg dd          }|                    |                    |d	
                    sJ |                    |                    |d	
                    sJ |                    |                    |d	d                    sJ |                    |                    |d	d                    sJ t          j        ddgfdgd          }|                    |                    |d	d                    sJ t	          j        t           j                  5  t          j        dddgfddgd          }|                    |d	
           d d d            n# 1 swxY w Y   t	          j        t           j                  5  t          j        dddgfddgd          }|                    |d	
           d d d            d S # 1 swxY w Y   d S r   r   )r   rf   rg   r+   	expected2rh   s         r   test_merge_no_conflictsz'TestMergeMethod.test_merge_no_conflicts  s   jaV}Aq6::;;jaV}Aq6::;;:S)))$4999EEFF!!#))C)"G"GHHHHH!!#))C)"G"GHHHHH}}SYYs>YOOPPPPP}}SYYs>YPPQQQQQJcA3Zqc::;;	""399Sg9#V#VWWWWW]2=)) 	2 	2*C"a>A??@@CIIc.I111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 ]2=)) 	2 	2*C!Q=1v>>??CIIc.I111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s$   05F11F58F55HH #H c                    t          j        ddi          }t          j        dd          }t          |                    |          t          j        ||g                     d S )Nr7   r   r   r8   )r*   name)r   rX   r3   r   r   )r   r   das      r   test_merge_dataarrayz$TestMergeMethod.test_merge_dataarray  sW    Za!!\qs+++"rxR'9'9:::::r    )rU   rb   rc   r@   expect_errorrE   r   rC   r9   FrI   rJ   rL   rG   rB   NTrF   c                v   t          j        |          }t          j        |          }|rPt          j        t           j                  5  |                    ||           d d d            d S # 1 swxY w Y   d S |                    ||          }t          j        |          }	t          ||	           d S )NrT   rV   rW   )
r   rU   rb   rc   r@   r   rf   rg   r   r+   s
             r   test_merge_combine_attrsz(TestMergeMethod.test_merge_combine_attrs  s    ( jv&&&jv&&& 	/r}-- < <		#]	;;;< < < < < < < < < < < < < < < < < < YYs-Y@@Fz777HVX.....s   A00A47A4)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   r   9  s       , , ,2& & &$@ @ @*@ @ @" [\FIq#QQ?O?O+PQQO O RQO*2 2 2.; ; ; [OOO 111--QQQ/G/GUS aa((aa((aa(( qq))+;+;11=M=MuU11--QQ/?/?tL**!!,<,<dDI	
 "/ /# "/ / /r    r   )
__future__r   numpyr   r   xarrayr   xarray.corer   r   xarray.core.merger   xarray.testingr   r   xarray.tests.test_datasetr	   r   r"   r   r   r    r   <module>r      s!   " " " " " "          % % % % % % % % ( ( ( ( ( ( 9 9 9 9 9 9 9 9 6 6 6 6 6 6       $W+ W+ W+ W+ W+ W+ W+ W+tb/ b/ b/ b/ b/ b/ b/ b/ b/ b/r    