
    d                       d dl mZ d dlmZ d dlmZ d dlZd dlZd dlm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZ d dlmZmZmZ d d	lmZ d
 Z G d d          Z  G d d          Z! ej"        d          d             Z#d Z$d Z% G d d          Z& G d d          Z' G d d          Z( G d d          Z) G d d          Z* G d d          Z+ed              Z,ed!             Z-d" Z.dS )#    )annotations)datetime)productN)	DataArrayDataset
MergeErrorcombine_by_coordscombine_nestedconcatmerge)dtypes)_check_shape_tile_ids_combine_all_along_first_dim_combine_nd_infer_concat_order_from_coords"_infer_concat_order_from_positions_new_tile_id)assert_equalassert_identicalrequires_cftimecreate_test_datac                    t          |           t          |          k    sJ |                                 D ]9\  }}||                                v sJ t          | |         ||                    :d S N)lenitemskeysr   )dict1dict2kvs       9lib/python3.11/site-packages/xarray/tests/test_combine.pyassert_combined_tile_ids_equalr#      sx    u::U#### ) )1EJJLL    U1XuQx(((() )    c                  D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )TestTileIDsFromNestedListc                    t           } |d           |d          g} |d           |d          d}t          |          }t          ||           d S Nr      r   r)   r   r   r#   selfdsinputexpectedactuals        r"   test_1dz!TestTileIDsFromNestedList.test_1d'   `    A1"Q%%rr!uu--3E::&x88888r$   c                R   t           } |d           |d          g |d           |d          g |d           |d          gg} |d           |d           |d           |d           |d           |d          d}t          |          }t          ||           d S )Nr   r)               )r   r   r   r)   r)   r   r)   r)   )r7   r   )r7   r)   r-   r.   s        r"   test_2dz!TestTileIDsFromNestedList.test_2d/   s    "Q%%A""Q%%A""Q%%A@ BqEEBqEEBqEEBqEEBqEEBqEE
 
 4E::&x88888r$   c                L   t           } |d           |d          g |d           |d          g |d           |d          gg |d           |d          g |d	           |d
          g |d           |d          ggg} |d           |d           |d           |d           |d           |d           |d           |d           |d	           |d
           |d           |d          d}t          |          }t          ||           d S )Nr   r)   r7   r8   r9   r:            	   
      ))r   r   r   )r   r   r)   )r   r)   r   )r   r)   r)   )r   r7   r   )r   r7   r)   )r)   r   r   )r)   r   r)   )r)   r)   r   )r)   r)   r)   )r)   r7   r   )r)   r7   r)   r-   r.   s        r"   test_3dz!TestTileIDsFromNestedList.test_3d>   sR   beeRRUU^bbeeRRUU^bbeeRRUU^<beeRRUU^bbeeRRUU^bbffbbff-=>
 r!uur!uur!uur!uur!uur!uur!uur!uur!uur!uur"vvr"vv
 
 4E::&x88888r$   c                p    t          d          }|g}d|i}t          |          }t          ||           d S Nr   r+   r-   r.   s        r"   test_single_datasetz-TestTileIDsFromNestedList.test_single_datasetV   sB    a  ":3E::&x88888r$   c                    t           } |d          g |d          gg} |d           |d          d}t          |          }t          ||           d S )Nr   r)   )r;   r=   r-   r.   s        r"   test_redundant_nestingz0TestTileIDsFromNestedList.test_redundant_nesting^   se    "Q%%22a55'"BqEE22a55113E::&x88888r$   c                r    t          d          }|g g}d|i}t          |          }t          ||           d S rI   r-   r.   s        r"   test_ignore_empty_listz0TestTileIDsFromNestedList.test_ignore_empty_listf   sD    a  R":3E::&x88888r$   c                    t           } |d           |d           |d          gg} |d           |d           |d          d}t          |          }t          ||           d S )Nr   r)   r7   )r+   r=   r>   r-   r.   s        r"   test_uneven_depth_inputz1TestTileIDsFromNestedList.test_uneven_depth_inputm   sy     AA1'"Q%%A1>>3E::&x88888r$   c                    t           } |d          g |d           |d          gg} |d           |d           |d          d}t          |          }t          ||           d S )Nr   r)   r7   )r;   r=   r>   r-   r.   s        r"   test_uneven_length_inputz2TestTileIDsFromNestedList.test_uneven_length_inputw   s{     "Q%%22a55""Q%%.)BqEE22a55""Q%%@@3E::&x88888r$   c                    t           } |d           |d          g} |d           |d          d}t          |          }t          ||           d S r(   r-   r.   s        r"   test_infer_from_datasetsz2TestTileIDsFromNestedList.test_infer_from_datasets   r5   r$   N)__name__
__module____qualname__r4   r?   rG   rJ   rL   rN   rP   rR   rT    r$   r"   r&   r&   &   s        9 9 99 9 99 9 909 9 99 9 99 9 99 9 99 9 99 9 9 9 9r$   r&   c                  J    e 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 )TestTileIDsFromCoordsc                    t          dddgi          }t          dddgi          }||d}t          ||g          \  }}t          ||           |dgk    sJ d S )Nxr   r)   r7   r8   r*   r   r   r#   r/   ds0ds1r2   r3   concat_dimss         r"   r4   zTestTileIDsFromCoords.test_1d   x    sQFm$$sQFm$$S))=sCjII&x888se######r$   c                   t          ddgg dd          }t          ddgg dd          }t          ddgg dd          }t          ddgg dd          }t          ddgg dd          }t          ddgg dd          }||||||d	}t          ||||||g          \  }}	t          ||           |	d
dgk    sJ d S )Nr   r)   rE         r\   yr7   r8   (   2   <   )F   P   Z   )r;   r=   r<   r>   r   r7   )r)   r7   r\   rh   r]   )
r/   r_   r`   ds2ds3ds4ds5r2   r3   ra   s
             r"   r?   zTestTileIDsFromCoords.test_2d   s#   QF6677QF6677QF6677QF6677QF6677QF6677 
 
 >#sCc*
 
 	'x888sCj((((((r$   c                    t          ddddgfi          }t          ddddgfi          }t          j        t          d          5  t	          ||g           d d d            d S # 1 swxY w Y   d S )	Nfoor\   r   r)   r7   r8   zCould not find any dimensionmatchr   pytestraises
ValueErrorr   r/   r_   r`   s      r"   test_no_dimension_coordsz.TestTileIDsFromCoords.test_no_dimension_coords   s    usQFm,--usQFm,--]:-LMMM 	8 	8+S#J777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   A%%A),A)c                    t          dddgi          }t          dddgi          }t          j        t          d          5  t	          ||g           d d d            d S # 1 swxY w Y   d S )Nr\   r   r)   r8   r7   z=Coordinate variable x is neither monotonically increasing norrw   ry   r}   s      r"   test_coord_not_monotonicz.TestTileIDsFromCoords.test_coord_not_monotonic   s    sQFm$$sQFm$$]R
 
 
 	8 	8 ,S#J777		8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8   A!!A%(A%c                    t          dddgi          }t          dddgi          }||d}t          ||g          \  }}t          ||           |dgk    sJ d S )Nr\   r8   r7   r)   r   r*   r]   r^   s         r"   #test_coord_monotonically_decreasingz9TestTileIDsFromCoords.test_coord_monotonically_decreasing   rb   r$   c                    t          ddddgfi          }d|i}t          |g          \  }}t          ||           |g k    sJ d S )Nrv   r\   r   r)   rX   r]   )r/   r0   r2   r3   ra   s        r"   test_no_concatenation_neededz2TestTileIDsFromCoords.test_no_concatenation_needed   s`    ecAq6]+,,8=rdCC&x888b      r$   c                <   t          ddgg dddgd          }t          ddgg dddgd          }t          ddgg d	ddgd          }t          ddgg d	ddgd          }||||d
}t          ||||g          \  }}t          ||           |ddgk    sJ d S )Nr   r)   rd   g?g?)r\   rh   tr7   r8   ri   )r;   r=   r<   r>   r\   rh   r]   )r/   r_   r`   rq   rr   r2   r3   ra   s           r"   test_2d_plus_bystander_dimz0TestTileIDsFromCoords.test_2d_plus_bystander_dim   s    QFS#JGGHHQFS#JGGHHQFS#JGGHHQFS#JGGHHc3GG=sCc>RSS&x888sCj((((((r$   c                    t          dddgi          }t          dddgi          }||d}t          ||g          \  }}t          ||           |dgk    sJ d S )NpersonAliceBobCarolineDanielr*   r]   r^   s         r"   test_string_coordsz(TestTileIDsFromCoords.test_string_coords   s|    x'5!1233x*h!7899S))=sCjII&x888xj((((((r$   c                    t          dddgi          }t          dddgi          }||d}t          ||g          \  }}t          ||           |dgk    sJ d S )N
simulationrun8run9run10run11r*   r]   r^   s         r"   %test_lexicographic_sort_string_coordsz;TestTileIDsFromCoords.test_lexicographic_sort_string_coords   s|    |ff%5677|gw%7899S))=sCjII&x888|n,,,,,,r$   c           	     .   t          dt          ddd          t          ddd          gi          }t          dt          ddd          t          dd	d
          gi          }||d}t          ||g          \  }}t          ||           |dgk    sJ d S )Ntime  r8   rA     rB   i  r)   r7   r9   r*   )r   r   r   r#   r^   s         r"   test_datetime_coordsz*TestTileIDsFromCoords.test_datetime_coords   s    vq! 4 4htQ6J6JKLMMvq! 4 4htQ6J6JKLMMS))=sCjII&x888vh&&&&&&r$   N)rU   rV   rW   r4   r?   r~   r   r   r   r   r   r   r   rX   r$   r"   rZ   rZ      s        $ $ $) ) ),8 8 88 8 8$ $ $! ! !	) 	) 	)) ) )- - -' ' ' ' 'r$   rZ   module)scopec                     t           S r   )_create_combined_idsrX   r$   r"   create_combined_idsr      s    r$   c                    t          |           }t          t          |                    }d t          ||          D             S )Nc                4    i | ]\  }}|t          |          S rX   r   ).0tile_idnums      r"   
<dictcomp>z(_create_combined_ids.<locals>.<dictcomp>   s'    SSS|wG%c**SSSr$   )_create_tile_idsranger   zip)shapetile_idsnumss      r"   r   r      s@    &&HXDSSs8T?R?RSSSSr$   c                F    t          d | D              }t          |          S )Nc              3  4   K   | ]}t          |          V  d S r   )r   )r   is     r"   	<genexpr>z#_create_tile_ids.<locals>.<genexpr>   s(      11aq111111r$   )r   list)r   r   s     r"   r   r      s'    1151112H>>r$   c                  `    e Zd Zej                            dg d          d             Zd ZdS )TestNewTileIDszold_id, new_id)))r8   r   r)   r<   )r;   r+   )r,   rX   )r+   rX   )r=   r+   c                B    t           }t          ||f          |k    sJ d S r   )r   r   )r/   old_idnew_idr0   s       r"   test_new_tile_idzTestNewTileIDs.test_new_tile_id  s,    
 VRL))V333333r$   c                    d} ||          }t          |                                          }t          |          }||k    sJ d S )Nr)   r7   r8   )sortedr   r   )r/   r   r   combined_idsexpected_tile_idsactual_tile_idss         r"   test_get_new_tile_idsz$TestNewTileIDs.test_get_new_tile_ids
  sU    **511"<#4#4#6#677*511 O333333r$   N)rU   rV   rW   rz   markparametrizer   r   rX   r$   r"   r   r     s]        [UUU 4 4	 44 4 4 4 4r$   r   c                      e Zd Zej                            dddg          d             Zd Zej                            dddg          d             ZdS )TestCombineND
concat_dimdim1new_dimc                    d} ||          }t           }t          ||ddd          }t           |d           |d          g|          }t          |d	|i           d S )
N)r7   all	differentno_conflictsdim	data_varscoordscompatr   r)   r   rX   )r   r   r   r#   )r/   r   r   r   r   r0   resultexpected_dss           r"   test_concat_oncezTestCombineND.test_concat_once  s    **511-!
 
 
 bbeeRRUU^<<<&vK/@AAAAAr$   c                   d} ||          }t          |dddd          }t          }t           |d           |d          gd	          }t           |d
           |d          gd	          }t           |d           |d          gd	          }|||g}	d t          |	          D             }
t	          ||
           d S )Nr7   r8   r   r   r   r   r   r   r8   r   r)   r9   r7   r:   c                    i | ]	\  }}|f|
S rX   rX   )r   r   r0   s      r"   r   z<TestCombineND.test_concat_only_first_dim.<locals>.<dictcomp>4  s     GGGBQD"GGGr$   )r   r   r   	enumerater#   )r/   r   r   r   r   r0   partway1partway2partway3expected_datasetsr2   s              r"   test_concat_only_first_dimz(TestCombineND.test_concat_only_first_dim$  s    **511-!
 
 
 22a55""Q%%.f55522a55""Q%%.f55522a55""Q%%.f555%x:GG)4E*F*FGGG&vx88888r$   c                z   d} ||          }t          |d|g          }t          }t           |d           |d          gd          }t           |d           |d          gd          }t           |d	           |d
          gd          }	t          |||	g|          }
t          ||
           d S )Nr   r   )ra   r   r8   r   r)   r9   r7   r:   )r   r   r   r   )r/   r   r   r   r   r   r0   r   r   r   r2   s              r"   test_concat_twicezTestCombineND.test_concat_twice8  s    **511\
7KLLL22a55""Q%%.f55522a55""Q%%.f55522a55""Q%%.f5558Xx8jIIIVX&&&&&r$   N)	rU   rV   rW   rz   r   r   r   r   r   rX   r$   r"   r   r     s        [\FI+>??B B @?B9 9 9( [\FI+>??' ' @?' ' 'r$   r   c                      e Zd Zd Zd ZdS )TestCheckShapeTileIDsc                    t          d          }||d}t          j        t          d          5  t	          |           d d d            d S # 1 swxY w Y   d S )Nr   )r+   r<   'sub-lists do not have consistent depthsrw   r   rz   r{   r|   r   r/   r0   combined_tile_idss      r"   test_check_depthsz'TestCheckShapeTileIDs.test_check_depthsH  s    a  #%r22]H
 
 
 	5 	5 ""3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   AAAc                    t          d          }|||||d}t          j        t          d          5  t	          |           d d d            d S # 1 swxY w Y   d S )Nr   )r;   r<   rp   r=   r>   (sub-lists do not have consistent lengthsrw   r   r   s      r"   test_check_lengthsz(TestCheckShapeTileIDs.test_check_lengthsP  s    a  %'RUWXX]I
 
 
 	5 	5 ""3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   AAAN)rU   rV   rW   r   r   rX   r$   r"   r   r   G  s2        5 5 55 5 5 5 5r$   r   c                     e Zd Zd Zej                            dd eddgddgd          fd eddgg d          fd eddgdgd          fd	 eddgdgd          fg          d
             Zd Z	d Z
ej        j        d             Zd Zd Zd Zd Zd Zd 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d S )!TestNestedCombinec                   t          ddgi          t          ddgi          g}t          dddgi          }t          |d          }t          ||           t          |dg          }t          ||           t          |gd           }t          ||           t          |gd          }t          ||           t          dddgi          t          ddgi          g}t          |d          }t          dg di          }t          ||           t          ddgfddgfd          t          ddgfddgfd	          g}t          |d          }t          dddgfdddgfd          }t          ||           t          dgdgd          t          ddgi          g}t          |d          }t          ddgdgd          }t          ||           d S )
Nr\   r   r)   r   r7   r   r)   r7   arg   rh   r\   r   r
   r   r/   objsr2   r3   s       r"   test_nested_concatz$TestNestedCombine.test_nested_concatZ  s*   qc
##WcA3Z%8%89C!Q=))5556***#7776***T:::6***S9996***q!f&&qc
(;(;<555C+,,6*** 3*C!:66773*C!:6677
  555#1vcAq6]CCDD6***qc,,--waSz/B/BC555!Qqc22336*****r$   join, expectedouterr   r)   rg   innerleftrightc                    t          dgdgd          t          dgdgd          g}t          |d|          }t          ||           d S Nr   rg   r)   r\   r   joinr   r/   r   r2   r   r3   s        r"   test_combine_nested_joinz*TestNestedCombine.test_combine_nested_join{  `     qc,,--waSs7K7K/L/LM4@@@6*****r$   c                    t          dgdgd          t          dgdgd          g}t          j        t          d          5  t	          |dd           d d d            d S # 1 swxY w Y   d S )	Nr   rg   r)   zcannot align.*join.*exactrw   r\   exactr   r   rz   r{   r|   r
   r/   r   s     r"   test_combine_nested_join_exactz0TestNestedCombine.test_combine_nested_join_exact  s    qc,,--waSs7K7K/L/LM]:-IJJJ 	? 	?4Cg>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?   A$$A(+A(c                \    t          t                      t          g d                     d S )Nr\   r   )r   r   r
   r/   s    r"   test_empty_inputz"TestNestedCombine.test_empty_input  s)    N2#$F$F$FGGGGGr$   c                    t          dgdgd          t          dgdgd          g}t          j        t          d          5  t	          |dd	           d d d            d S # 1 swxY w Y   d S )
Nr   r)   rg   r   znot equal across datasetsrw   r\   minimal)r   r   r  r  s     r"   (test_nested_concat_too_many_dims_at_oncez:TestNestedCombine.test_nested_concat_too_many_dims_at_once  s    qc,,--waSs7K7K/L/LM]:-HIII 	C 	C4C	BBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cr  c                t   t          ddgfdgd          t          ddgfdgd          g}t          ddgdggfdgd          }t          |d          }t          ||           t          d	d
gdd          }t          ddgdggfdgd	d
gd          }t          ||          }t          ||           d S )Nr\   rE   r   r   r\   re   r   r\   r   r   d      baznamedims)r  r\   )r   r\   r  )r   r
   r   r   )r/   r   r2   r3   r   s        r"    test_nested_concat_along_new_dimz2TestNestedCombine.test_nested_concat_along_new_dim  s    3+QC00113+QC0011
 *tbTl!;1#FFGG5556*** c
U;;;2$.aS#sLL
 
  5556*****r$   c                   t          ddi          }t          |||gd           }t          ||           t          dddgfddgd          }t          dddgfddgd          }t          dg dfg d	d          }t          ||gd           }t          ||           t          ||gd g          }t          ||           t          ddi          }t          dt          j        i          }t          ||gd           }t          ||           t          ||gd g          }t          ||           t          ddd
          g}t          dgdd          }	t          ||	g          }t          ddgfddgfd
ddgi          }t          ||           t          dddgfdddgfd
          g}t          dgdd          }	t          ||	g          }t          dddggfdddggfd
ddgi          }t          ||           d S )Nr\   r   r   r)   r7   r  r8   r   r   rg   r  r  r  z)r  r  )r   r
   r   npnanr   )
r/   datar3   r`   rq   r2   tmp1tmp2r   r   s
             r"   test_nested_mergez#TestNestedCombine.test_nested_merge  s   Qx  tT 2tDDDv&&&S1a&MA7788S1a&MA7788#yyy!1			BBCCc
t<<<6***c
v>>>6***Qx  RV}%%t>>>v&&&t$@@@v&&& aa(())*E666#777%!UQCLAAEC5>RR6*** sQFm3A-@@AABE666#7771a&*,!Q1IJJSEN
 
 	6*****r$   c                &   t          dddggfi          t          dddggfi          gt          dddggfi          t          dddggfi          gg}t          |ddg	          }t          ddddgddggfi          }t          ||           d S )
Nr   rg   r   r)   r7   r8   r\   rh   r   r   r/   r   r3   r2   s       r"   test_concat_multiple_dimsz+TestNestedCombine.test_concat_multiple_dims  s    cJ!./00'3qcU@S:T2U2UVcJ!./00'3qcU@S:T2U2UV
  #s<<<C*1v1v.>!?@AA6*****r$   c                :   t          ddggddg          }t          ddggddg          }t          ddggddg          }t          dd	ggddg          }t          ||g||ggddg
          }t          ||g||ggddg
          }t          ||           dS )z,Inspired by the discussion on GH issue #2777r   r   r\   rh   )r  r  r  br)   r7   r8   r   Nr   r
   r   )r/   da1da2da3da4x_firsty_firsts          r"   test_concat_name_symmetryz+TestNestedCombine.test_concat_name_symmetry  s     SuC:>>>SuC:>>>SuC:>>>SuC:>>> 3*sCj!9sCjQQQ 3*sCj!9sCjQQQ'*****r$   c                   t          d          }|                    d          }|                    d          }|j                            t	          d                    |j                            t	          dd                    g|j                            t	          d                    |j                            t	          dd                    gg}|dd	g         }t          |d d
g          }t          ||           d S )NF	add_attrsTdeepr9   dim2rD   var1var2r1  r   )r   copyr2  iselslicer3  r
   r   )r/   r  data1data2r   r2   r3   s          r"   !test_concat_one_dim_merge_anotherz3TestNestedCombine.test_concat_one_dim_merge_another  s    %000		t	$$		t	$$ Z__%((_++UZ__%1++_-N-NOZ__%((_++UZ__%1++_-N-NO

 ()$@@@6*****r$   c                   t           }t           |d           |d          gd          }t           |d           |d          gd          }t           |d           |d          gd          }t          |||gd	          } |d           |d           |d          g |d           |d           |d          gg}t          |dd	g
          }t          ||           d S )Nr   r8   r   r   r)   r9   r7   r:   r1  r   )r   r   r
   r   )r/   r0   r   r   r   r2   datasetsr   s           r"   test_auto_combine_2dz&TestNestedCombine.test_auto_combine_2d  s   22a55""Q%%.f55522a55""Q%%.f55522a55""Q%%.f5558Xx8fEEERUUBBqEE22a55)BBqEE22a55""Q%%+@Aff5EFFFVX&&&&&r$   c                   d }t           |d           |d          gd          }t           |d           |d          gd          }t           |d           |d	          gd          }t          |||gd
          }i }|                    d          |d<   i |d         _        |                    d          |d<   ddddd	dd|d         _        |                    d          |d<   ddi|d         _        d }|                    d          ||<    |ddigd           ||         _         |d           |d           |d          g |d           |d           |d	          gg}ddi|d         d         _        ddd|d         d         _        ddd|d         d         _        ddd|d         d         _        dd	d|d         d         _        ddd|d         d         _        t          j        t
          d          5  t          |dd
gd          }	d d d            n# 1 swxY w Y   |D ],}
t          |dd
g|
          }	t          |	||
                    -d S )Nc                $    t          | d          S )NFr,  r   )r\   s    r"   <lambda>zLTestNestedCombine.test_auto_combine_2d_combine_attrs_kwarg.<locals>.<lambda>  s    'U;;; r$   r   r8   r   r   r)   r9   r7   r:   r1  Tr.  dropr   rA   )r   r"  cdefoverrider   c                    | d         S )Nr   rX   attrscontexts     r"   r?  zLTestNestedCombine.test_auto_combine_2d_combine_attrs_kwarg.<locals>.<lambda>  s
    58 r$   r   r"  r   rA  )r   rB  )r   rC  )r   rD  combine_attrs='identical'rw   	identical)r   combine_attrs)r   r4  rH  rz   r{   r|   r
   r   )r/   r0   r   r   r   r2   expected_dictrD  r;  r   rN  s              r"   (test_auto_combine_2d_combine_attrs_kwargz:TestNestedCombine.test_auto_combine_2d_combine_attrs_kwarg  s   ;;22a55""Q%%.f55522a55""Q%%.f55522a55""Q%%.f5558Xx8fEEE (4 8 8f&(f#(04(@(@n%/
 /
n%+ %-MMtM$<$<j!+.(j!'++#==d=33a!"S!H:t!4!4aRUUBBqEE22a55)BBqEE22a55""Q%%+@A #QxA%&Q//A%&Q//A%&Q//A%&Q//A%&Q//A]:-IJJJ 	 	#ff%5[  F	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 + 	C 	CM#ff%5]  F V]=%ABBBB		C 	Cs   H99H= H=c                   t          dddgfddgd          t          dddgfddgd          g}t          ddt          j        ddgddt          j        ggfidg d	i          }t          |d
          }t	          ||           d S )Nr\   r7   r8   r)   r  r   r   r  r   r   r   )r   r  r  r
   r   r/   r;  r2   r3   s       r"   (test_combine_nested_missing_data_new_dimz:TestNestedCombine.test_combine_nested_missing_data_new_dim/  s     3A-q!f55663A-q!f5566
 :AArv?@ACCS
 
  S9996*****r$   c                   t           } |d           |d           |d          g |d           |d          gg}t          j        t          d          5  t	          |dd	g
           d d d            n# 1 swxY w Y    |d           |d          g |d           |d          ggg}t          j        t          d          5  t	          |dd	g
           d d d            n# 1 swxY w Y    |d           |d          g |d           |d          gg}t          j        t          d          5  t	          |dg
           d d d            d S # 1 swxY w Y   d S )Nr   r)   r7   r8   r9   r   rw   r   r1  r   r   zconcat_dims has length)r   rz   r{   r|   r
   )r/   r0   r;  s      r"   test_invalid_hypercube_inputz.TestNestedCombine.test_invalid_hypercube_input<  sx   RUUBBqEE22a55)BBqEE22a55>:]I
 
 
 	B 	B 80@AAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B
 RUUBBqEENbbeeRRUU^$45]H
 
 
 	B 	B 80@AAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B
 RUUBBqEENRRUUBBqEEN3]:-FGGG 	: 	:89999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s6   A99A= A=C,,C03C0>EE"%E"c                   t          ddddgfi          t          ddddgfi          gt          dddd	gfi          t          ddd
dgfi          gg}t          dg dfdg dfd          }t          |dd gd          }t          ||           t          ddddgfi          t          dddd	gfi          gt          ddddgfi          t          ddd
dgfi          gg}t          |d dgd          }t          ||           d S )Nrv   r\   r   r)   barrE   re   r7   r8   rf   rj   r   r)   r7   r8   )rE   re   rf   rj   )rv   rW  equals)r   r   r   r   s       r"   !test_merge_one_dim_concat_anotherz3TestNestedCombine.test_merge_one_dim_concat_anotherO  s^   ecAq6]+,,gusRHo6N.O.OPecAq6]+,,gusRHo6N.O.OP
 C#6EUEUEU?VWWXX#tXNNN6*** ecAq6]+,,gusQFm6L.M.MNecB8_-..r2h8P0Q0QR
  $XNNN6*****r$   c                   t          ddgi          t          ddgi          gg}t          |d dg          }t          dddgi          }t          ||           t          ddgi          gt          ddgi          gg}t          |dd g          }t          dddgi          }t          ||           t          ddgi          gg}t          |d d g          }t          ddgi          }t          ||           d S )Nr\   r   r)   r   r   r  s       r"   *test_combine_concat_over_redundant_nestingz<TestNestedCombine.test_combine_concat_over_redundant_nestinga  s%   #s$$gsQCj&9&9:;$===C!Q=))6***#s$$%qc
(;(;'<=#t===C!Q=))6***#s$$%&$>>>C!:&&6*****r$   
fill_valuer7          @rJ  c                   t          dddgfdddgfddgd          t          dddgfdddgfddgd          g}|t          j        k    rt          j        x}}n*t          |t                    r|d	         }|d
         }n|x}}t          d|ddgdd|ggfd|ddgdd|ggfddg di          }t          |d|          }t          ||           d S )Nr\   r7   r8   r)   r   r"  r\   r   r   r"  r  rJ  r   r   )r   r]  )	r   r   NAr  r  
isinstancedictr
   r   )r/   r]  r;  fill_value_afill_value_br2   r3   s          r"   test_combine_nested_fill_valuez0TestNestedCombine.test_combine_nested_fill_valueq  s5    3A-sRGnAq6JJKK3A-sQGnAq6JJKK
 "" +-&0L<<
D)) 	5%c?L%c?LL*44L< L!Q#7!Q9M"NO L"a#81b,:O"PQ  )))
 
  SZPPP6*****r$   c                   t          ddgdddgid          }t          |gd          }|}t          ||           t          ddgdddgid          }t          dd	gdd
dgid          }t          ||gd          }t          g ddg did          }t          ||           t          dggdgdgdddg          }t          dggdgdgdddg          }t          dggdgdgdddg          }t          dggdgdgdddg          }	||g||	gg}
t          ddgddggddgddgdddg          }t          |
ddg          }t          ||           d S )N      ?r^  r\   r   r)   r  r   r  r         @      @r7   r8   rj  r^  rl  rm  rX  g        rg   rh   r#  )r/   unnamed_arrayr3   r2   unnamed_array1unnamed_array2r$  r%  r&  r'  r   s              r"   'test_combine_nested_unnamed_data_arraysz9TestNestedCombine.test_combine_nested_unnamed_data_arrays  s   !Sz3A-cRRRC@@@ 6***"c
C!Q=sSSS"c
C!Q=sSSS @SQQQ%%%sLLL.A
 
 
 	6***seWA3aS-A-Ac
SSSseWA3aS-A-Ac
SSSseWA3aS-A-Ac
SSSseWA3aS-A-Ac
SSSc
S#J'*sCj)Qq!f--s
 
 

  #s<<<6*****r$   c                    t          ddgddddgi          t          dddgi          g}t          j        t          d          5  t          |d           d d d            d S # 1 swxY w Y   d S )	Nr   r)   r\   r  r   r7   r8   z+Can't combine datasets with unnamed arrays.rw   )r   r   rz   r{   r|   r
   r  s     r"   )test_nested_combine_mixed_datasets_arraysz;TestNestedCombine.test_nested_combine_mixed_datasets_arrays  s    q!fC3A-AAAS1a&M""
 ]L
 
 
 	& 	& 4%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   A%%A),A)N)rU   rV   rW   r   rz   r   r   r   r   r  r  xfailr  r  r  r   r*  r9  r<  rP  rS  rU  rZ  r\  r   rc  rh  rr  ru  rX   r$   r"   r   r   Y  s+       + + +B [ggQF!Q8899:ggQF44556WWAq644556ggQF!55667		
 + + +
? ? ?
H H H [C C C
+ + +"%+ %+ %+N+ + ++ + ++ + +
' 
' 
',C ,C ,C\+ + +: : :&+ + +$+ + +  [\FIq#QQ?O?O+PQQ+ + RQ+0+ + +>& & & & &r$   r   c                     e Zd Zd Zd Zej                            dd eddgddgd          fd eddgg d          fd	 eddgdgd          fd
 eddgdgd          fg          d             Z	d Z
ej                            dd eddgddgdi           fd eddgddgdddd          fd eddgddgdddi          fd  eddgddgdddd          fg          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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g	          d&             Zd' Zd( Zd) Zd* Zd+ Zd, Zd- Zd.S )/TestCombineDatasetsbyCoordsc                   t          ddgi          t          ddgi          g}t          |          }t          dddgi          }t          ||           t          |g          }t          ||           t          dddgi          t          ddgi          g}t          |          }t          dg di          }t          ||           t          ddgfddgfdgd          t          ddgfddgfdgd          g}t          |          }t          dddgfdddgfddgd          }t          ||           t          dgdgd          t          dgdgd	          g}t          |          }t          ddgddgd          }t          ||           t          ddi          t          ddi          g}t	          j        t          d
          5  t          |           d d d            n# 1 swxY w Y   t          dgdgd          t          ddgi          g}t	          j        t          d          5  t          |           d d d            d S # 1 swxY w Y   d S )Nr\   r   r)   r7   r   r   r\   rh   r   rg   r   z(Could not find any dimension coordinatesrw   z"Every dimension needs a coordinate)r   r	   r   r   rz   r{   r|   r  s       r"   test_combine_by_coordsz2TestCombineDatasetsbyCoords.test_combine_by_coords  s3   qc
##WcA3Z%8%89"4((C!Q=))6***"F8,,6***q!f&&qc
(;(;<"4((C+,,6*** 3*C!:QC@@AA3*C!:QC@@AA
 #4((#1vcAq6]!QPPQQ6***qc,,--waSs7K7K/L/LM"4((!Qq!f5566VX&&&a!!7C8#4#45]I
 
 
 	$ 	$ d###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$
 qc,,--waSz/B/BC]:-RSSS 	$ 	$d###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s$   G44G8;G8 II!$I!c                X    t          t                      t          g                      d S r   )r   r   r	   r  s    r"   r  z,TestCombineDatasetsbyCoords.test_empty_input  s%    $5b$9$9:::::r$   r   r   r   r)   rg   r   r   r   c                    t          dgdgd          t          dgdgd          g}t          |d|          }t          ||           d S r   r   r   s        r"   test_combine_coords_joinz4TestCombineDatasetsbyCoords.test_combine_coords_join  r   r$   c                    t          dgdgd          t          dgdgd          g}t          j        t          d          5  t	          |dd           d d d            d S # 1 swxY w Y   d S )	Nr   rg   r)   zcannot align.*join.*exact.*rw   r\   r  r   r  r  s     r"   test_combine_coords_join_exactz:TestCombineDatasetsbyCoords.test_combine_coords_join_exact  s    qc,,--waSs7K7K/L/LM]:-KLLL 	? 	?4Cg>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?r  zcombine_attrs, expectedr@  rH  r   r7   rJ  rE  r   c                    | d         S )Nr)   rX   rG  s     r"   r?  z$TestCombineDatasetsbyCoords.<lambda>  s
    uQx r$   c                l   t          dgdgdddi          t          dgdgdddd          g}t          |dd	|
          }t          ||           |dk    rYd|d         j        d<   t	          j        t          d          5  t          |dd	|
          }d d d            d S # 1 swxY w Y   d S d S )Nr   rg   r   r)   r  r7   rJ  r\   r   r   r   rN  r   zcombine_attrs='no_conflicts'rw   r   r
   r   rH  rz   r{   r|   )r/   rN  r2   r   r3   s        r"   !test_combine_coords_combine_attrsz=TestCombineDatasetsbyCoords.test_combine_coords_combine_attrs  s:   " 1#QC((a9991#QC((aa0@0@AAA
  Swm
 
 
 	6***N**!"DGM#z1PQQQ  'Swm                    +*s   B''B+.B+c                   t          dgdgdddi          t          dgdgdddi          g}t          ddgddgdddi          }t          |ddd	          }t          ||           d
|d         j        d<   t	          j        t          d          5  t          |ddd	          }d d d            d S # 1 swxY w Y   d S )Nr   rg   r   r)   r  r\   r   rM  r  r7   r"  rL  rw   r  r   s       r"   +test_combine_coords_combine_attrs_identicalzGTestCombineDatasetsbyCoords.test_combine_coords_combine_attrs_identical  sG   1#QC((a9991#QC((a999
 !Qq!f55c1XFFFSwk
 
 
 	6***Qc]:-IJJJ 	 	#7+  F	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   B::B>B>c                    t          dgdgddddd          t          dgdgddddd          g}t          ddgddgddddd	          }t          |d
dd          }t          ||           d S )Nr   rg   r)   r7   r8   r   r"  rA  r  )r   r"  rB  r   rA  rB  r\   r   drop_conflictsr  r   r   s       r"   0test_combine_nested_combine_attrs_drop_conflictszLTestCombineDatasetsbyCoords.test_combine_nested_combine_attrs_drop_conflicts#  s    1#QC((aaa0H0HIII1#QC((aaa0H0HIII
 !Qq!f5511ST=U=UVVVSw>N
 
 
 	6*****r$   z?combine_attrs, attrs1, attrs2, expected_attrs, expect_exceptionr8   rK  r  Fr9   TrM  r:   r  )r"  rA  rB  r  c                   t          dddg|fdddg|fdddg|fd          }t          dddg|fdddg|fdddg|fd          }|rIt          j        t          d	
          5  t	          ||g|           ddd           dS # 1 swxY w Y   dS t	          ||g|          }t          dg d|fdg d|fdddg d|fi          }	t          ||	           dS )=check that combine_attrs is used on data variables and coordsr\   r)   r7   r8   rb  r   ra  r`  rN  rw   rN  N)r)   r7   r7   r8   )r8   rb  r`  r)   rJ  rX  r   rz   r{   r   r	   r   
r/   rN  attrs1attrs2expected_attrsexpect_exceptionr7  r8  r3   r2   s
             r"   +test_combine_nested_combine_attrs_variableszGTestCombineDatasetsbyCoords.test_combine_nested_combine_attrs_variables.  s   T Aq66*Ar7F+Aq66* 
 
 Aq66*B7F+Aq66* 
 
  	/zAAA O O!5%.NNNNO O O O O O O O O O O O O O O O O O 'u~]SSSF|||^<~~~~>  sLLL.9: H VX.....s   "BB
Bc                   t          ddg|fddg|fddg|fd          }t          ddg|fddg|fddg|fd          }|rIt          j        t          d          5  t	          ||g|           ddd           dS # 1 swxY w Y   dS t	          ||g|          }t          dddg|fdddg|fdddg|fd          }	t          ||	           dS )	r  r   r   rz  r)   rN  rw   r  Nr  r  s
             r"   .test_combine_by_coords_combine_attrs_variableszJTestCombineDatasetsbyCoords.test_combine_by_coords_combine_attrs_variablesv  s   T V$C!f+=S1#vDVWW
 
 V$C!f+=S1#vDVWW
 
  	/zAAA O O!5%.NNNNO O O O O O O O O O O O O O O O O O 'u~]SSSF1v~61v~61v~6  H VX.....s   A==BBc                    t                      }|                    t          dd                    |                    t          d                    g}t          |          }|}|                    |          sJ d S )Nr9   rD   r0  )r   r5  r6  r	   broadcast_equals)r/   r  r   r3   r2   s        r"   test_infer_order_from_coordsz8TestCombineDatasetsbyCoords.test_infer_order_from_coords  ss    !!		uQ{{	++TYYE!HHY-E-EF"4((((0000000r$   c           	        g d}t           j                            dd          }t          t	          ddg|d dd d f         f          t	          g d|          	          }t          t	          ddg|dd d d f         f          t	          g d
|          	          }t          t	          ddg|f          t	          g d|          	          }t          ||f          }t          ||           d S )N)r   rA  r"  rB   r8   r\   rh   )r  r   rg   )r   r   )r9   r:   rA   rB   )r)   r7   r8   r9   r:   rA   rB   )r  randomrandr   re  r	   r   )r/   ycoordr  r`   rq   r2   r3   s          r"   )test_combine_leaving_bystander_dimensionszETestCombineDatasetsbyCoords.test_combine_leaving_bystander_dimensions  s/    !y~~a###sT"1"aaa%[ 9:::)))v...
 
 

 #sT!""aaa%[ 9:::,,,&111
 
 

 #sT 2333///6:::
 
 

 #C:..6*****r$   c                   t          ddgfdgd          t          ddgfdgd          t          ddgfdgd          g}t          dddgfddt          j        gfddddgi          }t          |          }t	          ||           d S )Nr\   r   r  )r"  r\   r)   rJ  )r   r  r  r	   r   rR  s       r"   (test_combine_by_coords_previously_failedzDTestCombineDatasetsbyCoords.test_combine_by_coords_previously_failed  s     3*A3//003*A3//003*A3//00

 #1vcArv;5GHH3QRTUPV-XX"8,,6*****r$   c                    t          ddiddi          t          ddiddd          g}t          j        t                    5  t	          |d           d d d            d S # 1 swxY w Y   d S )Nr\   r   rh   r)   rh   r  r   rz   r{   r|   r	   )r/   r;  s     r"   "test_combine_by_coords_still_failsz>TestCombineDatasetsbyCoords.test_combine_by_coords_still_fails  s     S!HsAh//#qQRCSCS1T1TU]:&& 	- 	-h,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   A!!A%(A%c                l   t          ddi          t          ddi          g}t          |          }t          ddd          }t          ||           t          ddd          t          t          j        dd          g}t          |          }t          dddd          }t          ||           d S )	Nr\   r   rh   r)   rg   r7   r  )r\   rh   r  )r   r	   r   r  r  r  s       r"    test_combine_by_coords_no_concatz<TestCombineDatasetsbyCoords.test_combine_by_coords_no_concat  s    a!!7C8#4#45"4((++,,6***aa(())7a3H3H+I+IJ"4((33446*****r$   c                    t          dg di          }t          dddgi          }t          j        t          d          5  t	          ||g           d d d            d S # 1 swxY w Y   d S )Nr\   )r   r)   r:   r7   r8   z8does not have monotonic global indexes along dimension xrw   r  r}   s      r"   "test_check_for_impossible_orderingz>TestCombineDatasetsbyCoords.test_check_for_impossible_ordering  s    sIII&''sQFm$$]M
 
 
 	* 	* sCj)))		* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*r   c                   t          dddggfidgdgd          }t          dddggfidgdgd          }t          dddggfidgdgd          }t          |||g          }t          ddddgdt          j        ggfiddgddgd          }t	          ||           t          j        t                    5  t          |||gd            d d d            d S # 1 swxY w Y   d S )Nr   r   r)   r   r   )r]  )r   r	   r  r  r   rz   r{   r|   )r/   x1x2x3r3   r2   s         r"   +test_combine_by_coords_incomplete_hypercubezGTestCombineDatasetsbyCoords.test_combine_by_coords_incomplete_hypercube  s}   cJ!./qc8L8LMMMcJ!./qc8L8LMMMcJ!./qc8L8LMMM"BB<00:ABF456Qq!f--
 
 
 	6*** ]:&& 	= 	=r2rlt<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   <CC"%C"N)rU   rV   rW   r{  r  rz   r   r   r   r~  r  r  r  r  r  r  r  r  r  r  r  r  r  rX   r$   r"   rx  rx    s       $$ $$ $$L; ; ; [ggQF!Q8899:ggQF44556WWAq644556ggQF!55667		
 + + +
? ? ?
 [!WWAq6A77rBBBCq!fAq622:J:JKKK 1vQF!;!;C8LLLM//q!fAq622:J:JKKK	
   "  $	+ 	+ 	+ [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((7"	
% %L /  /M% %L /D [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((7"	
% %L/ /M% %L/41 1 1+ + +2
+ 
+ 
+- - -	+ 	+ 	+* * *= = = = =r$   rx  c                  ,    e Zd Zd Zd Zd Zd Zd ZdS )TestCombineMixedObjectsbyCoordsc                   t          dddgdddgid          }t          dd	gdd
dgid          }t          j        t          d          5  t	          ||g           d d d            n# 1 swxY w Y   t          ddgddddgi          }t          dd
dgi          }t          j        t          d          5  t	          ||g           d d d            d S # 1 swxY w Y   d S )Nr   rj  r^  r\   r   r)   r  r  r   r  rl  rm  r7   r8   rk  z3Can't automatically combine unnamed DataArrays withrw   rt  )r   rz   r{   r|   r	   r   )r/   named_da
unnamed_dadar0   s        r"   /test_combine_by_coords_mixed_unnamed_dataarrayszOTestCombineMixedObjectsbyCoords.test_combine_by_coords_mixed_unnamed_dataarrays  s   #S#JaV}SVWWWS#JaV}3OOO
]S
 
 
 	6 	6 x4555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6
 1vC#1v@@@cAq6]##]G
 
 
 	( 	( r2h'''		( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s$   A++A/2A/<CC"Cc                    t          dddgddddgi          }t          ddd	d
gfi          }t          ||g          }t          dddgfdd	d
gfdddddgfi          }t          ||           d S )Nr   r9   r:   r\   r   r)   )r  r  r  r   r"  r7   r8   rJ  r  )r   r   r	   r   )r/   r  r0   r3   r2   s        r"   3test_combine_coords_mixed_datasets_named_dataarrayszSTestCombineMixedObjectsbyCoords.test_combine_coords_mixed_datasets_named_dataarrays   s    Cq!f3q!fOOOcC!Q=)**"B8,,A-sQFm44cC!Q==Q
 
 
 	6*****r$   c                L   t          ddgdddgid          }t          |g          }|}t          ||           t          ddgdddgid          }t          ddgdd	d
gid          }t          ||g          }t          g ddg did          }t          ||           d S )Nrj  r^  r\   r   r)   rk  rl  rm  r7   r8   rn  rX  )r   r	   r   )r/   ro  r3   r2   rp  rq  s         r"   -test_combine_by_coords_all_unnamed_dataarrayszMTestCombineMixedObjectsbyCoords.test_combine_by_coords_all_unnamed_dataarrays)  s    !Sz3A-cRRR"M?33 6***"c
C!Q=sSSS"c
C!Q=sSSS"NN#CDD%%%sLLL.A
 
 
 	6*****r$   c           	        t          dddgdddgid          }t          |g          }|                                }t          ||           t          dddgdddgid          }t          dd	d
gdddgid          }t          ||g          }t	          t          ddgdddgid          t          d	d
gdddgid          d          }t          ||           d S )Nr   rj  r^  r\   r   r)   r  r"  rl  rm  r7   r8   rk  rJ  )r   r	   
to_datasetr   r   )r/   r  r3   r2   	named_da1	named_da2s         r"   +test_combine_by_coords_all_named_dataarrayszKTestCombineMixedObjectsbyCoords.test_combine_by_coords_all_named_dataarrays9  s   #S#JaV}SVWWW"H:..&&((6***3c3Zq!fTWXXX	3c3Zq!fTWXXX	"Iy#9::S#JaV}3OOOS#JaV}3OOO 
 
 	6*****r$   c                    t          dddgdddgid          }t          ddd	gdd
dgid          }t          ||g          }t          ||g          }t          ||           d S )Nr   rj  r^  r\   r   r)   r  rl  rm  r7   r8   )r   r	   r   r   )r/   r  r  r3   r2   s        r"   8test_combine_by_coords_all_dataarrays_with_the_same_namezXTestCombineMixedObjectsbyCoords.test_combine_by_coords_all_dataarrays_with_the_same_nameL  s    3c3Zq!fTWXXX	3c3Zq!fTWXXX	"Iy#9::)Y/006*****r$   N)rU   rV   rW   r  r  r  r  r  rX   r$   r"   r  r    s_        ( ( ("+ + ++ + + + + +&+ + + + +r$   r  c                 R   dd l } |                     ddd          g}|                     ddd          g}|                     ddd          g}t          dgdg|gd	                                          }t          d
gdg|gd	                                          }t          dgdg|gd	                                          }t	          |||g          }t          j        |||g          }t          g ddg|gd	                                          }	t          ||	           d S )Nr   i        i  i  r   r   r  r   r  r)   r7   r   )cftimeDatetimeGregorianr   r  r	   r  concatenater   )
r  time_1time_2time_3da_1da_2da_3r   expected_timer2   s
             r"   +test_combine_by_coords_distant_cftime_datesr  U  sF    MMM&&tR445F&&tR445F&&tR445FaSxsCCCNNPPDaSxsCCCNNPPDaSxsCCCNNPPDdD122FNFFF#;<<M		-s  jll  VX&&&&&r$   c                    dd l } |                     ddd          g}|                     ddd          g}t          dgdg|gd                                          }t          dgdg|gd                                          }d}t          j        t          |	          5  t          ||g           d d d            d S # 1 swxY w Y   d S )
Nr   r   r)   r   r   r   r  zCannot combine along dimension 'time' with mixed types. Found:.* If importing data directly from a file then setting `use_cftime=True` may fix this issue.rw   )	r  r  DatetimeProlepticGregorianr   r  rz   r{   	TypeErrorr	   )r  r  r  r  r  	error_msgs         r"   5test_combine_by_coords_raises_for_differing_calendarsr  k  s(   
 MMM&&tQ223F//a;;<FaSxsCCCNNPPDaSxsCCCNNPPD	1  
y		2	2	2 ( (4,'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   "CCCc                 4   t          dgdgdggd                                          } t          dgdgdggd                                          }t          j        t          d          5  t          | |g           d d d            d S # 1 swxY w Y   d S )	Nr   r   r   r  r)      bz7Cannot combine along dimension 'time' with mixed types.rw   )r   r  rz   r{   r  r	   )r  r  s     r"   1test_combine_by_coords_raises_for_differing_typesr    s    aSx#cBBBMMOODaSx$sCCCNNPPD	S
 
 
 ( ( 	4,'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   .BBB)/
__future__r   r   	itertoolsr   numpyr  rz   xarrayr   r   r   r	   r
   r   r   xarray.corer   xarray.core.combiner   r   r   r   r   r   xarray.testsr   r   r   xarray.tests.test_datasetr   r#   r&   rZ   fixturer   r   r   r   r   r   r   rx  r  r  r  r  rX   r$   r"   <module>r     sY   " " " " " "                                                        I H H H H H H H H H 6 6 6 6 6 6) ) )a9 a9 a9 a9 a9 a9 a9 a9Hd' d' d' d' d' d' d' d'N h      T T T  
4 4 4 4 4 4 4 4$1' 1' 1' 1' 1' 1' 1' 1'h5 5 5 5 5 5 5 5$X& X& X& X& X& X& X& X&v
W= W= W= W= W= W= W= W=t
D+ D+ D+ D+ D+ D+ D+ D+N ' ' '* ( ( (,( ( ( ( (r$   