
    d;-                   T'   d dl mZ d dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZmZ d dlZd dlmZ d dlmZmZmZmZmZmZmZmZmZ d dlmZmZmZmZ d Z dd
Z!ddZ"ddZ#ddZ$ddZ%ddZ&d Z'ddZ(d Z)ddZ*ddZ+ddZ,edd            Z-ddZ.ddZ/ddZ0ddZ1ddZ2ddZ3ddZ4ddZ5e	j6        7                    g d e	j8        dd d!id d"id d#igi d$d%&           e	j8        d$d d!id d"id d#igi d$d'&           e	j8        d(d d!id d"id d#igd d!id$d)&           e	j8        d*d d!id d"id d#igd d!id$d*&           e	j8        d+d d!id d"id d#igi d$d+&           e	j8        d,d!d"d-d!d#d.d#d/d0gd!d#d/d1d$d,&           e	j8        d2d d!id3d"id3d#igdd(d2&          f          dd4            Z9e	j6        7                    g d e	j8        dd d!id d"id d#igi d$d%&           e	j8        d$d d!id d"id d#igi d$d'&           e	j8        d(d d!id d"id d#igd d!id$d)&           e	j8        d*d d!id d"id d#igd d!id$d*&           e	j8        d+d d!id d"id d#igi d$d+&           e	j8        d,d!d"d-d!d#d.d#d/d0gd!d#d/d1d$d,&           e	j8        d2d d!id3d"id3d#igdd(d2&          f          dd5            Z:e	j6        7                    d6d7          e	j6        7                    g d e	j8        dd d!id d"id d#igi d$d%&           e	j8        d$d d!id d"id d#igi d$d'&           e	j8        d(d d!id d"id d#igd d!id$d)&           e	j8        d*d d!id d"id d#igd d!id$d*&           e	j8        d+d d!id d"id d#igi d$d+&           e	j8        d,d!d"d-d!d#d.d#d/d0gd!d#d/d1d$d,&           e	j8        d2d d!id3d"id3d#igdd(d2&          f          d8                         Z;e	j6        7                    g d e	j8        dd d!id d"id d#igi d$d%&           e	j8        d$d d!id d"id d#igi d$d'&           e	j8        d(d d!id d"id d#igd d!id$d)&           e	j8        d*d d!id d"id d#igd d!id$d*&           e	j8        d+d d!id d"id d#igi d$d+&           e	j8        d,d!d"d-d!d#d.d#d/d0gd!d#d/d1d$d,&           e	j8        d2d d!id3d"id3d#igdd(d2&          f          dd9            Z<e	j6        7                    d6d:          e	j6        7                    g d e	j8        dd d!id d"id d#igi d$d%&           e	j8        d$d d!id d"id d#igi d$d'&           e	j8        d(d d!id d"id d#igd d!id$d)&           e	j8        d*d d!id d"id d#igd d!id$d*&           e	j8        d+d d!id d"id d#igi d$d+&           e	j8        d,d!d"d-d!d#d.d#d/d0gd!d#d/d1d$d,&           e	j8        d2d d!id3d"id3d#igdd(d2&          f          d;                         Z=dd<Z>edd=            Z?edd>            Z@edd?            ZAedd@            ZBee	j6        C                    dA          ddB                        ZDeddC            ZEeddD            ZFeddE            ZGdF ZHddGZIeddH            ZJeddI            ZKee	j6        7                    dJ ejL        g dKg dLgdMN           ejL        g dOgdMN          g          ddP                        ZMeddQ            ZNdR ZOddSZPeddT            ZQddUZR e	jS        dVW          dX             ZT e	jS        dVW          dY             ZUe	j6        7                    dZd d!g          e	j6        7                    d[g d\          e	j6        7                    d]g d^          eddc                                                ZVe	j6        7                    dZd d!g          e	j6        7                    d[g dK          e	j6        7                    d]dddg          dde                                    ZWe	j6        7                    d[g dK          e	j6        7                    d]dddg          ddf                        ZXe	j6        7                    d[ eYdg                    e	j6        7                    d]g dh          ddi                        ZZee	j6        7                    d[ eYdg                    e	j6        7                    d]g dh          e	j6        C                    dj          ddk                                                Z[edl             Z\e	j6        7                    d[ eYdm                    e	j6        7                    d]ddddndddngg          ddo                        Z]ddpZ^eddq            Z_ddrZ`ddsZaddtZbe	j6        7                    dud(d$g          ddw            Zce	j6        7                    dud(d$g          ddx            ZdddyZeddzZfe	j6        7                    du e	j8        d$d{&           e	j8        d(d|&          g          e	j6        7                    g d} e	j8         ejL        g dLdnN           ejL        g d~ddg dKi           ejL        g ddnN          d&           e	j8         ejL        g dLdnN           ejL        d d!gd d!ggddd d!gi           ejL        d!d!gd"d"gd#d#ggdMN          d&           e	j8         ejL        g dLdnN           ejL        d d!gd!d gd!d!ggddd d!gi           ejL        g ddnN          d&           e	j8         ejL        g dLdnN           ejL        g dddg di           ejL        g ddnN          d&           e	j8         ejL        g dLdnN           ejL        dmgddd#gi           ejL        g ddnN          d&           e	j8         ejL        g dLdnN           ejg        dd d!gfdd!d gfd-dd d!gi           ejg        dng dLfdng dfd-          d&           e	j8         ejg        dng dLfdng d~fd-           ejL        d!d!gddd d!gi           ejg        dng d~fdng dfd-          d&           e	j8         ejg        dng dLfdg d~fd-           ejg        dd d!gfdd!d!gfd-dd d!gi           ejg        dng dLfdg dfd-          d&           e	j8         ejL         ejh        ddd#          dnN           ejL        d d!gddd d!gi           ejL        g ddndn ejh        ddd#          i          d&           e	j8         ejL         eji        g dd          dnN           ejL        d d!gddd d!gi           ejL        g ddnN          d&           e	j8         ejL        g dLdnN           ejL        g d~dd eji        g dKejj                  i           ejL        g ddnN          d&           e	j8         ejL        g dLdnN           ejL        g d~dd eji        g dKejk                  i           ejL        g ddnN          d&           e	j8         ejL        g dLdnN           ejL        g d~dd eji        g dKejl                  i           ejL        g ddnN          d&          g          dd                        Zmee	j6        7                    du e	j8        d$d{&           e	j8        d(d|&          g          e	j6        7                    dddg          dd                                    ZnddZoe	j6        7                    du e	j8        d$d{&           e	j8        d(d|&          g          e	j6        7                    dn e	j8         ejL        g dKdnN          d&           e	j8         ejL         ejh        ddd#          dnN          d&           e	j8         ejL         eji        g dKd          dnN          d&          g          e	j6        7                    d e	j8         ejL        g ddnN          d&           e	j8         ejL        g dg dgdN          d&          g          dd                                    Zpe	j6        7                    dud$d(g          e	j6        7                    d ejL        g dL           ejL        g d          g dLg dddg ejL        d!d"g           ejL        g d          d!d"gg dddg ejq        dgg dL           ejq        dgg d          g dLg dddg ejq        dgd!d"g           ejq        dgg d          d!d"gg dddg ejL         ejr        d d          s                    d          g d etddg ejr        d dm          fdgg dfdgg df                     ejL         ejr        d d          s                    d          d!z   g d etddg ejr        d dm          fdgg dfdgg df                     ejr        d d          s                    d           ejr        d d          s                    d          d!z   dd!g ejL         eji        d!g          dg etdgdgf                     ejL         eji        g d          dg etdgg df                    g dg dddg ejL        d!d"gdg etdgdndgf                     ejL        g ddg etdgg df                    g d¢g dddgg          ddĄ                        ZudS )    )annotationsN)assert_allcloseassert_array_equal)	broadcast)	_UFuncSignatureapply_ufuncbroadcast_compat_datacollect_dict_valuesjoin_dict_keysordered_set_intersectionordered_set_unionresult_nameunified_dim_sizes)has_daskraise_if_dask_computesrequires_cftimerequires_daskc                r    d}ddl m} t          | d          r || |           dS t          | |           dS )z5A version of this function which accepts numpy arraysTr   )assert_identical	identicalN)xarray.testingr   hasattrr   )ab__tracebackhide__assert_identical_s       =lib/python3.11/site-packages/xarray/tests/test_computation.pyr   r   !   s[    DDDDDDq+ !!Q1a         returnNonec                    t          dgddggdgg          } | j        dk    sJ | j        dk    sJ | j        t	          ddg          k    sJ | j        t	          dg          k    sJ | j        dk    sJ | j        dk    sJ t          |           dk    sJ | 	                                d	k    sJ | 	                    t          d          
          dk    sJ t          dgg          t          dgg          k    sJ d S )Nxyz)r"   r"   r#   ))r$         z(x),(x,y)->(z)z(dim0),(dim0,dim1)->(dim2)exclude_dimsz(dim0_0),(dim0_1,dim1)->(dim2))r   input_core_dimsoutput_core_dimsall_input_core_dims	frozensetall_output_core_dims
num_inputsnum_outputsstrto_gufunc_stringset)sigs    r   test_signature_propertiesr6   ,   s=   
C53*-w
7
7C"666669,,,,"ic
&;&;;;;;#y#'7'77777>Q?as88'''''!!%AAAAA#c((337WWWWW SE7##w'?'???????r   c                 L    G d d          } t          ddg          J t           |             g          J t           | d          dg          dk    sJ t           | d           | d          g          J t           | d           |             g          J d S )Nc                      e Zd ZddZdS )test_result_name.<locals>.NamedNc                    || _         d S Nname)selfr=   s     r   __init__z(test_result_name.<locals>.Named.__init__?   s    DIIIr   r;   )__name__
__module____qualname__r?    r   r   Namedr9   >   s(        	 	 	 	 	 	r   rD   r(   r'   foobar)r   )rD   s    r   test_result_namerG   =   s            1v&&&y!!)))ea())U2222eeeEll344<<<eeegg.//77777r   c                     t          t          ddgg                    ddgk    sJ t          t          ddgddgg                    ddgk    sJ t          t          dgddgddgg                    g dk    sJ d S )Nr(   r'   r      r   r(   r'   rI   )listr   rC   r   r   test_ordered_set_unionrL   I   s    !Aq6(++,,A6666!Aq6Aq6"23344A>>>>!A3AA"78899\\\IIIIIIr   c                 J   t          t          ddgg                    ddgk    sJ t          t          ddgddgg                    ddgk    sJ t          t          ddgddgg                    dgk    sJ t          t          ddgdgg                    dgk    sJ d S )Nr(   r'   rI   )rK   r   rC   r   r   test_ordered_set_intersectionrN   O   s    (1a&22331v====(1a&1a&)9::;;1vEEEE(1a&1a&)9::;;sBBBB(1a&1#7788QC??????r   c                 V   d ddgddgfD             } t          t          | d                    ddgk    sJ t          t          | d                    ddgk    sJ t          t          | d                    dgk    sJ t          t          | d                    g d	k    sJ t          j        t                    5  t          | d
           d d d            n# 1 swxY w Y   t          j        t
                    5  t          | d           d d d            d S # 1 swxY w Y   d S )Nc                B    g | ]}t                               |          S rC   )dictfromkeys).0keyss     r   
<listcomp>z'test_join_dict_keys.<locals>.<listcomp>W   s$    FFFTT]]4  FFFr   r"   r#   r$   leftrightinnerouterr"   r#   r$   exactfoobar)rK   r   pytestraises
ValueErrorKeyError)dictss    r   test_join_dict_keysrb   V   s   FFsCj3*-EFFFEuf--..3*<<<<ug..//C:====ug..//C58888ug..//???BBBB	z	"	" ' 'ug&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '	x	 	  ( (uh'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s$   ?CC #C  DD"%D"c                 j    ddddddidg} g dg d	g d
g}t          | g dd          }||k    sJ d S )Nr(   r'   rI   rZ   r$         )r(   r   re   )r'   r   re   rI   rd   re   r   )
fill_value)r
   )ra   expected	collecteds      r   test_collect_dict_valuesrj   b   sc    11%%Qx3E		999iii0H#E???qIIII      r   c                    | S r;   rC   r%   s    r   identityrl   i   s    Hr   c                 t   t          j        d          } t          j        d|           }t          j        |d|  fg          }t          j        d|id|  i          }t          j        t          t                    }t          |  ||                      t          | ||                     t          | ||                     t          | ||                    d                               t          | ||                     t          | ||                    d                               d S )N
   r"   r#   )nparangexrVariable	DataArrayDataset	functoolspartialr   rl   r   groupby)arrayvariable
data_arraydatasetapply_identitys        r   test_apply_identityr}   m   s"   IbMME{3&&Hh#v88Jj#x3-88G&{H==NUNN511222X~~h77888Z
!;!;<<<Z
0B0B30G0G!H!HIIIWnnW55666WnnW__S-A-ABBCCCCCr   c                8    t          t          j        | |          S r;   r   operatoraddr   r   s     r   r   r   }   s    x|Q***r   c            	     :	   t          j        g d          } t          j        d|           }t          j        |d|  fg          }t          j        d|id|  i          }t          j        |           }t          j        d|          }t          j        |d|  fg          }t          j        d|id|  i          }t          | t          | |                     t          | t          ||                      t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          |	                    d          |                     t          |t          ||	                    d                               t          |t          |	                    d          |                     t          |t          ||	                    d                               t          |t          |	                    d          |                     t          |t          |	                    d          |                     t          |t          ||	                    d                               t          |t          ||	                    d                               d S )Nr(   r'   rI   r"   r#   )
ro   rx   rq   rr   rs   rt   
zeros_liker   r   rw   rx   ry   rz   r{   
zero_arrayzero_variablezero_data_arrayzero_datasets           r   test_apply_two_inputsr      s   HYYYE{3&&Hh#v88Jj#x3-88Gu%%JKZ00Ml=C%=/BBO:sM2S5&MBBLUCz22333UC
E22333Xs8Z88999Xs8];;<<<Xs:x88999Xs=(;;<<<ZZ!<!<===ZZ!?!?@@@ZZ!A!ABBBZZ!<!<===Z]J!?!?@@@Z_j!A!ABBBWc':66777Wc'=99:::Wc'?;;<<<Wc'<88999Wc*g66777Wc-99:::Wc/7;;<<<Wc,88999ZZ%7%7%<%<o!N!NOOOZ_j6H6H6M6M!N!NOOOWc*"4"4S"9"9<HHIIIWc,
0B0B30G0GHHIIIWc'//#"6"6HHIIIWc'//#"6"6EEFFFWc/7??33G3GHHIIIWc,0D0DEEFFFFFr   c            	     	   t          j        g d          } t          j        d|           }t          j        |d|  fg          }t          j        d|id|  i          }d}t          j        d|          }t          j        |          }t          j        d|i          }t          | t          | |                     t          | t          ||                      t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          ||                     t          |t          |                    d          |                     t          |t          ||                    d                               t          |t          |                    d          |                     t          |t          ||                    d                               t          |t          |                    d          |                     t          |t          |                    d          |                     t          |t          ||                    d                               t          |t          ||                    d                               d S )Nr   r"   r#   r   rC   )	ro   rx   rq   rr   rs   rt   r   r   rw   r   s           r   test_apply_1d_and_0dr      s   HYYYE{3&&Hh#v88Jj#x3-88GJKJ//Ml=11O:sM233LUCz22333UC
E22333Xs8Z88999Xs8];;<<<Xs:x88999Xs=(;;<<<ZZ!<!<===ZZ!?!?@@@ZZ!A!ABBBZZ!<!<===Z]J!?!?@@@Z_j!A!ABBBWc':66777Wc'=99:::Wc'?;;<<<Wc'<88999Wc*g66777Wc-99:::Wc/7;;<<<Wc,88999ZZ%7%7%<%<o!N!NOOOZ_j6H6H6M6M!N!NOOOWc*"4"4S"9"9<HHIIIWc,
0B0B30G0GHHIIIWc'//#"6"6HHIIIWc'//#"6"6EEFFFWc/7??33G3GHHIIIWc,0D0DEEFFFFFr   c                 8   t          j        d          } t          j        d|           }t          j        |d|  fg          }t          j        d|id|  i          }d } ||           \  }}t          ||            t          ||             ||          \  }}t          ||           t          ||            ||          \  }}t          ||           t          ||            ||          \  }}t          ||           t          ||            ||                    d                    \  }}t          ||           t          ||            ||                    d                    \  }}t          ||           t          ||           d S )Nre   r"   r#   c                0    d }t          || g g g          S )Nc                
    | | fS r;   rC   r%   s    r   funcz3test_apply_two_outputs.<locals>.twice.<locals>.func       q6Mr   r,   r   objr   s     r   twicez%test_apply_two_outputs.<locals>.twice   s,    	 	 	 4Bx@@@@r   )ro   rp   rq   rr   rs   rt   r   rw   )rx   ry   rz   r{   r   out0out1s          r   test_apply_two_outputsr      s   IaLLE{3&&Hh#v88Jj#x3-88GA A A uJD$T5!!!T5!!!xJD$T8$$$T8$$$z""JD$T:&&&T:&&&wJD$T7###T7###z))#..//JD$T:&&&T:&&&ws++,,JD$T7###T7#####r   c                     t          j        g dg dgd          } d } ||                     ddi                    \  }}t          | |           t          | |           d S )Nr   r(   r'   r   r&   dimsc                2    d }t          || g g gd          S )Nc                
    | | fS r;   rC   r%   s    r   r   zEtest_apply_dask_parallelized_two_outputs.<locals>.twice.<locals>.func	  r   r   parallelized)r,   daskr   r   s     r   r   z7test_apply_dask_parallelized_two_outputs.<locals>.twice  s.    	 	 	 4BxnUUUUr   r"   r(   )rq   rs   chunkr   )rz   r   r   r   s       r   (test_apply_dask_parallelized_two_outputsr     s    yyy)))4:FFFJV V V z''a1122JD$Z&&&Z&&&&&r   c                 L   d } t          j        ddgddgg          }t          j        ddg|          }t          j        |dd	gd
dgd          }t          j        d|i          }t          j        dgddg          }t          j        |dd
dgi          }t          j        d|i          }t          j        dgddg          }t          j        |ddd	gi          }	t          j        d|	i          }
t          | | |d                     t          | | |d                     t          | | |d                     t          |	 | |d                     t          | | |d                     t          |
 | |d                     t          | | |                    d          d                     t          | | |                    d          d                     d }t          j	        t                    5  t          |||d         j        dggdgg           d d d            n# 1 swxY w Y   t          j         |||d                   ddg|j                  }t          |||d         j        dgg gdgg          }t          ||           d S )Nc                0    d }t          || |gg          S )Nc                    | d         S N).r   rC   r%   s    r   r   zDtest_apply_input_core_dimension.<locals>.first_element.<locals>.func  s    V9r   r+   r   )r   dimr   s      r   first_elementz6test_apply_input_core_dimension.<locals>.first_element  s,    	 	 	 4ug>>>>r   r(   r'   rI   rd   r"   r#   r   r   r&   datac                 :    | d         }| dd          D ]}||z  }|S )Nr   r(   rC   )argsvalargs      r   multiplyz1test_apply_input_core_dimension.<locals>.multiply3  s2    1g8 	 	C)CC
r   r+   r,   r   coords)ro   rx   rq   rr   rs   rt   r   rw   r]   r^   r_   r   valuesr   )r   rx   ry   rz   r{   expected_variable_xexpected_data_array_xexpected_dataset_xexpected_variable_yexpected_data_array_yexpected_dataset_yr   rh   actuals                 r   test_apply_input_core_dimensionr     s>   ? ? ? Hq!fq!f%&&E{C:u--HhsCjBx(H(HIIJj&*-..G+seaV44L)<sRHoNNV-B$CDD+seaV44L)<sS#J>OPPV-B$CDD(--#*F*FGGG(--#*F*FGGG*MM*c,J,JKKK*MM*c,J,JKKK'w)D)DEEE'w)D)DEEE*MM*:L:LS:Q:QSV,W,WXXX'ws7K7KS)Q)QRRR   
z	"	" 
 
sO"!UG"eW	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 |Z_--S#JzGX  H 3%  F Xv&&&&&s   $H77H;>H;c                    d } t          j        ddgddgg          }t          j        ddg|          }t          j        |dd	gd
dgd          }t          j        d|i          }t          j        dd
gddggddgddggg          }t          j        g d|          }dd	gd
dgdd
gd}t          j        ||          }t          j        d|i          }	t          | | |                     t          | | |                     t          | | |                     t          |	 | |                     t          | | |                    d                               t          |	 | |                    d                               d }
 |
|          \  }}t          ||           t          ||            |
|          \  }}t          ||           t          ||            |
|          \  }}t          ||           t          ||            |
|          \  }}t          ||           t          |	|            |
|                    d                    \  }}t          ||           t          ||            |
|                    d                    \  }}t          ||           t          |	|           d S )Nc                    d }t          || dgg          }t          |t          j        t          j        f          rddg|j        d<   |S )Nc                4    t          j        | |  gd          S Nr   axisro   stackr%   s    r   r   zFtest_apply_output_core_dimension.<locals>.stack_negative.<locals>.funcQ      8QG"----r   signr   r(   r   r   
isinstancerq   rt   rs   r   r   r   results      r   stack_negativez8test_apply_output_core_dimension.<locals>.stack_negativeP  s[    	. 	. 	. T36(DDDfrz2<899 	,%&GFM&!r   r(   r'   rI   rd   r"   r#   r   r   r   r   r&   r   r"   r#   r   c                    d }t          || g dgg          }t          |d         t          j        t          j        f          rddg|d         j        d<   |S )Nc                8    | t          j        | |  gd          fS r   r   r%   s    r   r   zStest_apply_output_core_dimension.<locals>.original_and_stack_negative.<locals>.funcl  s"    rxQBb11122r   r   r   r(   r   r   r   s      r   original_and_stack_negativezEtest_apply_output_core_dimension.<locals>.original_and_stack_negativek  sf    	3 	3 	3 T3"vhHHHfQi"*bl!;<< 	/()2wF1IV$r   )ro   rx   rq   rr   rs   rt   r   rw   )r   rx   ry   rz   r{   stacked_arraystacked_variablestacked_coordsstacked_data_arraystacked_datasetr   r   r   s                r    test_apply_output_core_dimensionr   O  s(      Hq!fq!f%&&E{C:u--HhsCjBx(H(HIIJj&*-..GH2wB0Ar7QG2DEFFM{#5#5#5}EE:RHq"gFFN&6GGj&*<!=>>O]NN5$9$9:::%~~h'?'?@@@'
)C)CDDD_nnW&=&=>>>'
8J8J38O8O)P)PQQQ_nnW__S5I5I&J&JKKK   -,U33JD$UD!!!]D))),,X66JD$Xt$$$%t,,,,,Z88JD$Z&&&'...,,W55JD$Wd###_d+++,,Z-?-?-D-DEEJD$Z&&&'...,,W__S-A-ABBJD$Wd###_d+++++r   c                    dd} t          j        dg          t          j        ddg          g}d |D             }d t          |dgd	d
gg          D             }d |D             }t          j        g d          }t          j        d|          }t          j        |dt          d          fg          }t          j        d|i          }t          | | |                     t          | | |                     t          | | |                     t          | | |                     t          j
        t                    5  t          t          |d         dh           d d d            d S # 1 swxY w Y   d S )Nr"   c                    d }t          |g| R ggt          |           z  gghd}t          |t          j        t          j        f          r*t          j        fd| D                       }||j        <   |S )Nc                 .    t          j        | d          S r   )ro   concatenater%   s    r   r   z5test_apply_exclude.<locals>.concatenate.<locals>.func  s    >!"----r   r+   r,   r*   c                *    g | ]}|j                  S rC   r   )rS   r   r   s     r   rU   z;test_apply_exclude.<locals>.concatenate.<locals>.<listcomp>  s    'K'K'KC
3'K'K'Kr   )	r   lenr   rq   rt   rs   ro   r   r   )objectsr   r   r   	new_coords    `   r   r   z'test_apply_exclude.<locals>.concatenate  s    	. 	. 	. 

 
 "UGc'll2"eW
 
 
 frz2<899 	+'K'K'K'K7'K'K'KLLI!*FM#r   r(   r'   rI   c                8    g | ]}t          j        d |          S r%   )rq   rr   )rS   r   s     r   rU   z&test_apply_exclude.<locals>.<listcomp>  s$    555S!$$555r   c                |    g | ]9\  }}t          j        ||d t          t          |                    fd          :S )r"   r&   )rq   rs   ranger   )rS   vcs      r   rU   z&test_apply_exclude.<locals>.<listcomp>  sQ       Aq 	QasE#a&&MM&:;;<<  r   r   r   r   c                :    g | ]}t          j        d |i          S )r   )rq   rt   )rS   rz   s     r   rU   z&test_apply_exclude.<locals>.<listcomp>  s'    OOOZ
FJ/00OOOr   r   abcr   r   r)   r%   )ro   rx   ziprq   rr   rs   rK   rt   r   r]   r^   r_   r   rl   )	r   arrays	variablesdata_arraysdatasetsexpected_arrayexpected_variableexpected_data_arrayexpected_datasets	            r   test_apply_excluder     s      " hsmmRXq!f--.F55f555I 	SEC:#677  K PO;OOOHXiii((NC88,'8Ce;M:NOOz6+>"?@@^[[%8%8999&I(>(>???(++k*B*BCCC%{{8'<'<=== 
z	"	" @ @Hil#????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   
E66E:=E:c                 |   t          j        d          } t          j        d|           }|  dg dfd}t          j        ||d          }t          j        d|i|          }t          j        ddd	g          }t          j        |d          }t          j        d|i          }t          j        ddd
ddt           j        g          }t          j        ||d          }	t          j        d|i|          }
t          |	t          |	                    d          |                     t          |
t          |	                    d          |                     t          |
t          |	                    d          |                     t          |
t          |	                    d          |                     t          j        t                    5  t          |	                    d          |           d d d            n# 1 swxY w Y   t          j        t                    5  t          |	                    d          |d d         	                    d                     d d d            n# 1 swxY w Y   t          j        t                    5  t          |	                    d          |d
d          	                    d                     d d d            n# 1 swxY w Y   t          j        t                    5  t          |	                    d          |	                    d                     d d d            n# 1 swxY w Y   t          j        t                    5  t          |	                    d          |	                    d                     d d d            d S # 1 swxY w Y   d S )Nre   r"   )r   r   r(   r(   r'   r&   r   r$   r#   r   rn   r(         rd   )ro   rp   rq   rr   rs   rt   nanr   r   rw   r]   r^   r_   )rx   ry   r   rz   r{   other_variableother_data_arrayother_datasetr   r   r   s              r   test_apply_groupby_addr     s   IaLLE{3&&H6ooo 677FhS999Jj#x&11G[q"g..N|N===J^455MC!QB)?@@,'8&sKKKz3(9":FCCS!3!3C!8!8:JKK   %s:+=+=c+B+BM'R'RSSS%s7??3+?+?AQ'R'RSSS%s7??3+?+?'O'OPPP 
z	"	" 5 5Js##^4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 
z	"	" B BJs##Z^%;%;C%@%@AAAB B B B B B B B B B B B B B B	z	"	" B BJs##Z^%;%;C%@%@AAAB B B B B B B B B B B B B B B	z	"	" D DJs##%5%=%=c%B%BCCCD D D D D D D D D D D D D D D	z	"	" > >Js##Z%7%7%<%<===> > > > > > > > > > > > > > > > > >sZ   $HHH(?I33I7:I7?K""K&)K&7M		MM-7N11N58N5c            	     z   t          t          j        dd          g          i k    sJ t          t          j        ddg          t          j        ddg          g          ddik    sJ t          t          j        ddg          t          j        dddg          g          dddk    sJ t          t          j        ddgg          t          j        d	ddgd
dgg          gdh          dddk    sJ t          j        t
                    5  t          t          j        ddgg          g           d d d            n# 1 swxY w Y   t          j        t
                    5  t          t          j        ddg          t          j        dddg          g           d d d            d S # 1 swxY w Y   d S )NrC   r   r"   r(   r#   r'   r&   r"   r$   r#   r$   rI   rd   r$   r)   )r"   r"   )r   rq   rr   r]   r^   r_   rC   r   r   test_unified_dim_sizesr    sm   bk"a00122b8888bk#s33R[qc5J5JKLLQTVWPXXXXXbk#s33R[q!f5M5MNOOT T     	Z1#	'	'Z1a&1a&AQ)R)RSU   q		    
z	"	" < <2;zQC599:;;;< < < < < < < < < < < < < < < 
z	"	" M M2;sQC00"+cAq62J2JKLLLM M M M M M M M M M M M M M M M M Ms$   &EEE(;F00F47F4c                 ~   t          j        d          } t          j        d|           }t	          | t          |dd                     t	          | t          |dd                     t	          | d d          t          |dd                     t	          | d d d f         t          |dd                     t          j        t                    5  t          |dd           d d d            n# 1 swxY w Y   t          j        t                    5  t          |dd           d d d            d S # 1 swxY w Y   d S )Nre   r"   r%   rC   w)r  r"   r#   )	ro   rp   rq   rr   r   r	   r]   r^   r_   r   vars     r   test_broadcast_compat_data_1dr    s   9Q<<D
+c4
 
 CT0fbAABBBT0b&AABBBT!!!W3CHHIIIT!!!T']$9#PR$S$STTT	z	"	" 3 3c662223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 
z	"	" + +c2r***+ + + + + + + + + + + + + + + + + +s$   C//C36C3D22D69D6c                 L   t          j        d                              dd          } t          j        ddg|           }t          | t          |dd                     t          | t          |dd	                     t          | t          |dd                     t          | j        t          |d
d                     t          | j        t          |d	d                     t          | t          |dd	                     t          | t          |dd                     t          | j        t          |dd
                     t          | d d d d d f         t          |dd                     t          | d d d d d f         j        t          |dd                     d S )Nr   rI   rd   r"   r#   r&   rC   r%   r#   r#   r"   )r  r"   r  )r  r"   r#   r$   )r  r#   r"   r$   )ro   rp   reshaperq   rr   r   r	   Tr  s     r   test_broadcast_compat_data_2dr     s   9R==  A&&D
+sCj$
'
'CT0j"EEFFFT0ffEEFFFT0b*EEFFFTV23
BGGHHHTV23GGHHHT0j&IIJJJT0fjIIJJJTV23
KKLLLQQQ4Z/5I2NN   T111aaaZ1#7KRPP    r   c                 x   d } t          j        ddgdddgfg          }d|j        d<   d|d         j        d<   t          j        ddgdddgfg          } | ||d	
          }|j        rJ  | ||d
          }t          |j        |j                   t          |d         j        |d         j                    | |j        |j        d	
          }|j        rJ  | |j        |j        d
          }t          |j        |j                   t          j        dddgi          }d|j        d<   d|j        j        d<   t          j        dddgi          } | ||d	
          }|j        rJ  | ||d
          }t          |j        |j                   t          |j        j        |j        j                   d S )Nc                v    |rt          t          j        | ||          S t          t          j        | |          S )N
keep_attrsr   )r   r   r  s      r   r   ztest_keep_attrs.<locals>.add  s7     	3x|QjIIIIx|Q222r   r   r(   r"   daattrda_coordr'   Fr  Tds)rq   rs   attrsr   ry   rt   r"   )r   r   r   r   ds_ads_bs         r   test_keep_attrsr    s   3 3 3 	aVsQFm_--AAGFO%AcFL
aVsQFm_--ASA%(((F|SA$'''FV\17+++VC[&#555SQZE:::F|SQZD999FV\17+++:sQFm$$DDJvDFL:sQFm$$DSt...F|St---FV\4:...VX^TV\22222r   )strategyr  rh   errorr   r(   r'   rI   Fdefault)idFalseTTrueoverridedropdrop_conflictsr   r   r   rd   )r   d)r   r   r$  no_conflictsr   c                   t          j        dddg|d                   }t          j        dddg|d                   }t          j        dddg|d                   }|rNt          j        t           j                  5  t          d ||||            d d d            d S # 1 swxY w Y   d S t          j        dddg|          }t          d	 ||||           }t          ||           d S )
Nr"   r   r(   r  r'   c                      t          |           S r;   sumr   s    r   <lambda>z5test_keep_attrs_strategies_variable.<locals>.<lambda>t      c$ii r   r  rI   c                      t          |           S r;   r)  r+  s    r   r,  z5test_keep_attrs_strategies_variable.<locals>.<lambda>w      3t99 r   )rq   rr   r]   r^   
MergeErrorr   r   r  r  rh   r  r   r   r   r   s           r   #test_keep_attrs_strategies_variabler2  7  s\   n 	C!QuQx000A
C!QuQx000A
C!QuQx000A +]2=)) 	O 	O//AqXNNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O ;sQF(;;;44aA(SSS*****   >B!!B%(B%c                   t          j        dddg|d                   }t          j        dddg|d                   }t          j        dddg|d                   }|rNt          j        t           j                  5  t          d ||||            d d d            d S # 1 swxY w Y   d S t          j        dddg|          }t          d	 ||||           }t          ||           d S )
Nr"   r   r(   )r   r   r  r'   c                      t          |           S r;   r)  r+  s    r   r,  z6test_keep_attrs_strategies_dataarray.<locals>.<lambda>  r-  r   r  rI   c                      t          |           S r;   r)  r+  s    r   r,  z6test_keep_attrs_strategies_dataarray.<locals>.<lambda>  r/  r   )rq   rs   r]   r^   r0  r   r   r1  s           r   $test_keep_attrs_strategies_dataarrayr7  |  s\   n 	#QF%(;;;A
#QF%(;;;A
#QF%(;;;A +]2=)) 	O 	O//AqXNNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O <S1vXFFF44aA(SSS*****r3  variantr   coordc           	        d d d                     |           } ||i i i g          \  }}t          j        dddgdddg|d         fdddg|d         fd          }t          j        dddgdddg|d         fdddg|d         fd          }	t          j        dddgdddg|d	         fdddg|d	         fd          }
|rNt          j        t          j                  5  t          d
 ||	|
|           d d d            d S # 1 swxY w Y   d S  ||i           \  }}t          j        dddgdddg|fdddg|fd          }t          d ||	|
|          }t          ||           d S )Nc                
    | |fS r;   rC   r  r  s     r   r,  z@test_keep_attrs_strategies_dataarray_variables.<locals>.<lambda>  s    ug&6 r   c                
    || fS r;   rC   r=  s     r   r,  z@test_keep_attrs_strategies_dataarray_variables.<locals>.<lambda>  s    %(8 r   r9  r"   r   r(   r"   u)r   r   r   r'   c                      t          |           S r;   r)  r+  s    r   r,  z@test_keep_attrs_strategies_dataarray_variables.<locals>.<lambda>  r-  r   r  rI   c                      t          |           S r;   r)  r+  s    r   r,  z@test_keep_attrs_strategies_dataarray_variables.<locals>.<lambda>  r/  r   )getrq   rs   r]   r^   r0  r   r   )r8  r  r  rh   r  compute_attrs	dim_attrscoord_attrsr   r   r   r   s               r   .test_keep_attrs_strategies_dataarray_variablesrG    sk   v 7688  
c'll 
 +]52r2,??I{
VAq69Q<0aV[QR^7TUU	 	 	A
 	VAq69Q<0aV[QR^7TUU	 	 	A
 	VAq69Q<0aV[QR^7TUU	 	 	A  +]2=)) 	O 	O//AqXNNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O "/x!<!<	;<Q1vy1q!fk8RSS
 
 

 44aA(SSS*****s   #DD
D
c                   t          j        ddddgfi|d                   }t          j        ddddgfi|d                   }t          j        ddddgfi|d                   }|rNt          j        t           j                  5  t          d ||||            d d d            d S # 1 swxY w Y   d S t          j        dddd	gfi|          }t          d
 ||||           }t          ||           d S )Nr   r"   r   r(   r'  r'   c                      t          |           S r;   r)  r+  s    r   r,  z4test_keep_attrs_strategies_dataset.<locals>.<lambda>^  r-  r   r  rI   c                      t          |           S r;   r)  r+  s    r   r,  z4test_keep_attrs_strategies_dataset.<locals>.<lambda>a  r/  r   )rq   rt   r]   r^   r0  r   r   r1  s           r   "test_keep_attrs_strategies_datasetrK  !  sx   n 	
C#1v'uQx888A

C#1v'uQx888A

C#1v'uQx888A +]2=)) 	O 	O//AqXNNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O :sS1a&M2(CCC44aA(SSS*****s   B**B.1B.r   r   r:  c                   d d d d                     |           } ||i i i g          \  }}}t          j        ddg |d         fidg |d         fdg |d         fd	          }	t          j        ddg |d
         fidg |d
         fdg |d
         fd	          }
t          j        ddg |d         fidg |d         fdg |d         fd	          }|rNt          j        t          j                  5  t          d |	|
||           d d d            d S # 1 swxY w Y   d S  ||i           \  }}}t          j        ddg |fidg |fdg |fd	          }t          d |	|
||          }t          ||           d S )Nc                    | ||fS r;   rC   r=  s     r   r,  z>test_keep_attrs_strategies_dataset_variables.<locals>.<lambda>  s    w'@ r   c                    || |fS r;   rC   r=  s     r   r,  z>test_keep_attrs_strategies_dataset_variables.<locals>.<lambda>  s    ww&? r   c                    ||| fS r;   rC   r=  s     r   r,  z>test_keep_attrs_strategies_dataset_variables.<locals>.<lambda>  s    '5(A r   rL  r   r"   r   r?  r   r(   r'   c                      t          |           S r;   r)  r+  s    r   r,  z>test_keep_attrs_strategies_dataset_variables.<locals>.<lambda>  r-  r   r  c                      t          |           S r;   r)  r+  s    r   r,  z>test_keep_attrs_strategies_dataset_variables.<locals>.<lambda>  r/  r   )rC  rq   rt   r]   r^   r0  r   r   )r8  r  r  rh   r  rD  
data_attrsrE  rF  r   r   r   r   s                r   ,test_keep_attrs_strategies_dataset_variablesrT  f  ss   v A@??AA  
c'll	 
 *7ur2rl)K)K&J	;

	sB
1&'2y|,C[^3LMM	 	 	A 	
	sB
1&'2y|,C[^3LMM	 	 	A 	
	sB
1&'2y|,C[^3LMM	 	 	A
  +]2=)) 	O 	O//AqXNNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O .;]8R-H-H*
I{:3J'(r9-S"k4JKK
 
 
 44aA(SSS*****s   2DDD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        t          d	          5  t          t          j        | |           d d d            n# 1 swxY w Y   t          j        t          d
	          5  t          t          j        | |d           d d d            n# 1 swxY w Y   d } || |dd          }t          j        dt          j
        dt          j
        gfg dd          }t          ||            || |dd          }t          ||           t          j        t          d	          5  t          t          j        | t          j        ddi                     d d d            n# 1 swxY w Y   t          j        dddgfddgd          } || |dd          }t          j        dg di          }t          ||            || |dd          }t          j        dt          j
        t          j
        t          j
        gfdt          j
        t          j
        t          j
        gfg dd          }t          ||           d S )Nr"   r(   r'   r   r   r"   c   rI   zcannot align.*join.*exact.*matchzmust supplyrY   )dataset_joinc                T    t          t          j        | |||t          j                  S )N)joinrZ  dataset_fill_value)r   r   r   ro   r   )r   r   r\  rZ  s       r   r   ztest_dataset_join.<locals>.add  s/    L%!v
 
 
 	
r   rX   e   r   zdata variable namesr   )r   r"   )r   r   r"   )rq   rt   r]   r^   r_   r   r   r   	TypeErrorro   r   r   )ds0ds1r   r   rh   ds2s         r   test_dataset_joinrc    sM   
*C!Q=1v66
7
7C
*C"a>A77
8
8C 
z)G	H	H	H , ,HL#s+++, , , , , , , , , , , , , , ,	y	7	7	7 B BHL#sAAAAB B B B B B B B B B B B B B B
 
 
 Sc7G,,FzrvsBF&; <999MMNNHVX&&&Sc7G,,FVX&&&	z)?	@	@	@ = =HL#rz3(';';<<<= = = = = = = = = = = = = = = *C"a>A77
8
8CSc7G,,Fz3			*++HVX&&& Sc7G,,Fz/0/0	
 	
 H VX&&&&&s6   A>>BB$CCC%0F!!F%(F%c                 <   dd l m}  |                     dd          }t          j        d|          }t          j        |          j        j        }t          j        |dg|          }t          j        d|i          }t          j
        t                    5  t          t          |           d d d            n# 1 swxY w Y   t          j
        t                    5  t          t          |           d d d            n# 1 swxY w Y   t          j
        t                    5  t          t          |           d d d            n# 1 swxY w Y   t          j
        t                    5  t          t          |           d d d            n# 1 swxY w Y   t          j
        t                    5  t          t          |d	           d d d            n# 1 swxY w Y   d
 }| ||          u sJ  ||          }t          |j        | j                  sJ t#          ||            ||          }t          |j        | j                  sJ t#          ||            ||          }t          |d         j        | j                  sJ t#          ||           d S )Nr   )r'   r'   chunksr"   r   r#   unknownr   c                0    t          t          | d          S )Nallowedrh  )r   rl   r%   s    r   dask_safe_identityz+test_apply_dask.<locals>.dask_safe_identity	  s    8QY7777r   )
dask.arrayrx   onesrq   rr   rs   r   r   rt   r]   r^   r_   r   rl   r   r   Arrayr   )r  rx   ry   r   rz   r{   rk  r   s           r   test_apply_daskro    s   GGDG##E{3&&H\(##*4FhcU6BBBJj#x))G 
z	"	" % %He$$$% % % % % % % % % % % % % % %	z	"	" ( (Hh'''( ( ( ( ( ( ( ( ( ( ( ( ( ( (	z	"	" * *Hj)))* * * * * * * * * * * * * * *	z	"	" ' 'Hg&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 
z	"	" 5 5He)44445 5 5 5 5 5 5 5 5 5 5 5 5 5 58 8 8 &&u------))Ffk28,,,,,Xv&&&
++Ffk28,,,,,Z(((((FfSk&11111Wf%%%%%sZ   B::B>B>D  DD$EE
E
*FFF0GGGc                 l   dd l m}  |                     dd          }t          j        |d          }d } ||          }t          |j        | j                  sJ |j        j        |j        k    sJ t          ||           |
                                } ||          }t          ||           d S )Nr   r'   r'   r(   r(   re  r&   r   c                >    t          t          | d| j        g          S Nr   )r   output_dtypes)r   rl   dtyper%   s    r   parallel_identityz?test_apply_dask_parallelized_one_arg.<locals>.parallel_identity"  s    8Q^AG9UUUUr   )rl  rx   rm  rq   rs   r   r   rn  rf  r   compute)r  rx   rz   rw  r   computeds         r   $test_apply_dask_parallelized_one_argrz    s    GGF6G**Ee*555JV V V z**Ffk28,,,,,;----Z(((!!##Hx((FXv&&&&&r   c                    dd l m                     ddt          j                  t          j        d          d _        d fd}  | d          f  | d            | t          j        d                      | dz              | dd         z              | d d df         dd         z              | d                                z             d S )	Nr   rq  rr  )rf  rv  r&   r   c                T    t          t          j        | |dt          j        g          S rt  )r   r   r   ro   int64r&   s     r   parallel_addz;test_apply_dask_parallelized_two_args.<locals>.parallel_add7  s*    L!Q^BH:
 
 
 	
r   c                     | |          }t          |j        j                  sJ |j        j        j        k    sJ t	          |           d S r;   )r   r   rn  rf  r   )r"   r#   r   rx   r  rz   r~  s      r   checkz4test_apply_dask_parallelized_two_args.<locals>.check<  s\    a##&+rx00000{!U\1111V,,,,,r   )	rl  rx   rm  ro   r}  rq   rs   r=   rx  )r  rx   r  rz   r~  s    @@@@r   %test_apply_dask_parallelized_two_argsr  /  sH   GGF6G::Ee*555JJO
 
 

- - - - - - - - 
E*a	E!Z	E*bl1oo&&&	E*a*n%%%	E*a*Q-'(((	E*QQQT
A
1-...	E*a*,,.../////r   c            	        dd l m}  |                     dd          }t          j        |d          }t          j        t          d          5  t          t          |d	
           d d d            n# 1 swxY w Y   t          j        t          d          5  t          t          |d	t          gdgdg           d d d            d S # 1 swxY w Y   d S )Nr   rq  rr  re  r&   r   z&at least one input is an xarray objectrX  r   rh  zconsists of multiple chunksr	  )r   ru  r+   r,   )rl  rx   rm  rq   rs   r]   r^   r_   r   rl   float)r  rx   rz   s      r   #test_apply_dask_parallelized_errorsr  K  sj   GGF6G**Ee*555J 
z)R	S	S	S : :He.9999: : : : : : : : : : : : : : : 
z)G	H	H	H 
 
 '#H$X	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s$   A33A7:A7#C		CCzignore:Mean of empty slicec                 v   dd l m}  d }t          j                            d          }|                     |                    dd          d          }|                     |                    dd          d          }t          j        |d          }t          j        |d	          }t          ||
                                |
                                d
gd
gg          }t          |||d
gd
ggd          }t          |j        | j                  sJ t          j                            ||
                                           t          |||d
gd
ggdt           g          }	t          |	j        | j                  sJ t          j                            ||	
                                           d S )Nr   c                    | |                      dd          z
  ||                     dd          z
  z                       d          S )Nr   T)r   keepdimsr   )meanr&   s     r   
covariancez3test_apply_dask_multiple_inputs.<locals>.covariancei  sG    R$///ABQU8V8V4VW
$B$--	r   *   rd   )r'   rd   re  r   r   r   r$   r   rj  )r+   r   r   )r+   r   ru  )rl  rx   ro   randomRandomState
from_arrayrandnrq   rs   r   rx  r   r   rn  testingr   r  )
r  r  rsarray1array2data_array_1data_array_2rh   rj  r   s
             r   test_apply_dask_multiple_inputsr  d  s      
 
		r	"	"B]]288Aq>>&]99F]]288Aq>>&]99F<Z888L<Z888L	  H   G glBH-----Jx):):;;;g  L l'22222Jx)=)=)?)?@@@@@r   c                 N   dd l m}  |                     dd          }t          j        |d          }d } ||                                          } ||          }|j        dk    sJ |j        d	k    sJ t          |j	        | j
                  sJ t          ||           d S )
Nr   rq  rr  re  r&   r   c                b    d }t          || dggd| j        gt          ddi                    S )Nc                4    t          j        | |  gd          S r   r   r%   s    r   r   zJtest_apply_dask_new_output_dimension.<locals>.stack_negative.<locals>.func  r   r   r   r   r'   output_sizes)r,   r   ru  dask_gufunc_kwargs)r   rv  rQ   r   s     r   r   z<test_apply_dask_new_output_dimension.<locals>.stack_negative  sS    	. 	. 	. %hZ9+#&!===
 
 
 	
r   r   )r'   r'   r'   )rl  rx   rm  rq   rs   rx  r   shaper   r   rn  r   )r  rx   rz   r   rh   r   s         r   $test_apply_dask_new_output_dimensionr    s    GGF6G**Ee*555J
 
 
 ~j002233H^J''F;,,,,,<9$$$$fk28,,,,,Xv&&&&&r   c                 d   t          j        dddgt          j        d                              d          fi          } | d         | d<   ddd	fd
} ||           } ||                                           }|j        ddd	k    sJ t          |                                |           d S )NrE   lonlatd   )rn   rn   rF   rI      )lon_newlat_newc           
     \    d }t          || dddggddggt                              S )	Nc                    | ddddf         S )Nr(   rd      rC   r  s    r   r   z?test_apply_dask_new_output_sizes.<locals>.extract.<locals>.func  s    ac1Q3h<r   r   r  r  r  r  r  )r   r+   r,   r  )r   rQ   )r   r   newdimss     r   extractz1test_apply_dask_new_output_sizes.<locals>.extract  sW    	  	  	  #U^,()45#999
 
 
 	
r   )rq   rt   ro   rp   r  r   r   r   )r  r  rh   r   r  s       @r    test_apply_dask_new_output_sizesr    s    	UeU^RYw-?-?-G-G-Q-QRS	T	TB5	BuI**G
 
 
 
 
 wr{{HWRXXZZ  F;aA666666X^^%%v.....r   c            
        t           j                            dddd          } t          j        | d                              dd          }t          j        t          d	          5  t          j	        t           j
        j        |d
dggd
dggt          d          d           d d d            d S # 1 swxY w Y   d S )Nrd   rI   r'   )r"   r#   ij)r   r   r(   r&   r  rX  r  r  )r  r  r   )r+   r,   r*   r   )ro   r  r  rq   rs   r   r]   r^   r_   r   linalgpinvr4   )r   r  s     r   <test_apply_dask_new_output_sizes_not_supplied_same_dim_namesr    s    
 9??1aA&&D	4&:	;	;	;	A	AA	A	K	KB	z	8	8	8 
 

IN!3ZL"Cj\Z	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   )=B33B7:B7c                N    t          j        |                                           S r;   pdSeriesmedianr%   s    r   pandas_medianr    s    9Q<<   r   c                     t          j        g dg dgd          } t          j        ddgdg          }t          t          | dggd	
          }t	          ||           d S )Nr   r   r&   r   r(   r'   r"   r#   T)r+   	vectorize)rq   rs   r   r  r   rz   rh   r   s      r   test_vectorizer    sv    yyy)))4:FFFJ|QF#///HzSE7d  F Xv&&&&&r   c                     t          j        g dg dgd          } t          j        ddgdg          }t          t          |                     ddi          dggd	d
t
          g          }t          ||           d S )Nr   r   r&   r   r(   r'   r"   r#   Tr   r+   r  r   ru  )rq   rs   r   r  r   r  r   r  s      r   test_vectorize_daskr    s     yyy)))4:FFFJ|QF#///H#q""g  F Xv&&&&&r   c                 (   t          j        g dg dgd          } t          j        ddgdg          }t          t          |                     ddi          dggd	d
t
          g          }t          ||           |j        |j        k    sJ t          j        g dgd          } |                                 }t          t          |                     ddi          d	d
t          g          }t          ||           |j        |j        k    sJ d S )Nr   r   r&   r   r(   r'   r"   r#   Tr   r  y                y      ?       @y       @      ?)r  r   ru  )rq   rs   r   r  r   intr   rv  copyrl   complexr  s      r   test_vectorize_dask_dtyper    s7    yyy)))4:FFFJ|QF#///H#q""e  F Xv&&&>V\)))) 7778zJJJJ  H#q""i  F Xv&&&>V\))))))r   rz   r   r   r&   r   r  c                    |                                  }t          t          |                     ddi          dd          }t	          ||           |j        |j        k    sJ d S )Nr"   r(   Tr   )r  r   )r  r   rl   r   r   rv  r  s      r   /test_vectorize_dask_dtype_without_output_dtypesr    sr       H#q""	  F Xv&&&>V\))))))r   c                 d   t          j        g dg dgd          } t          j        ddgdg          }t          t          |                     ddi          dggd	d
t          t          j        dt                                        }t          ||           t          |j
        k    sJ d S )Nr   r   r&   r   r(   r'   r"   r#   Tr   )r   r   rv  )meta)r+   r  r   r  )rq   rs   r   r  r   rQ   ro   ndarrayr  r   rv  r  s      r   test_vectorize_dask_dtype_metar  0  s    yyy)))4:FFFJ|QF#///H#q""RZe%D%D%DEEE  F Xv&&&FL      r   c                    t          j        |                                           t          j        |                                          z   S r;   r  r&   s     r   pandas_median_addr  B  s5    9Q<<  29Q<<#6#6#8#888r   c            
        t          j        g dg dgd          } t          j        g dg dgd          }t          j        ddgd	g          }t          t          | |d
gd
ggdt	          d
                    }t          ||           d S )Nr   r   r&   r   r   r(   r'   rI   rd   r(   r'   rI   rd   re   rI   re   r"   r#   T)r+   r  r*   )rq   rs   r   r  r4   r   data_array_adata_array_brh   r   s       r   test_vectorize_exclude_dimsr  G  s    <III 6ZHHHL</// BTTTL|QF#///HXX  F Xv&&&&&r   c            
        t          j        g dg dgd          } t          j        g dg dgd          }t          j        ddgd	g          }t          t          |                     d	d
i          |                    d	d
i          dgdggt          d          ddt          g          }t          ||           d S )Nr   r   r&   r   r  r  rI   re   r"   r(   r#   Tr   )r+   r*   r  r   ru  )rq   rs   r   r  r   r4   r  r   r  s       r    test_vectorize_exclude_dims_daskr  X  s     <III 6ZHHHL</// BTTTL|QF#///HC8$$C8$$XXg	 	 	F Xv&&&&&r   c                     t          j        t          d          5  t          j        t          j                    t          j                               d d d            d S # 1 swxY w Y   d S )NzOnly xr.DataArray is supportedrX  )r]   r^   r_  rq   corrrt   rC   r   r   test_corr_only_dataarrayr  l  s    	y(H	I	I	I , ,

bjll+++, , , , , , , , , , , , , , , , , ,s   8A!!A%(A%module)scopec            	     `   t          j        t          j                            d          dt	          j        ddd          id          } |                     t          d	d
                    |                     t          dd                                        dd          	                                t          j        ddgdt          j
        ggddg          t          j        ddgt          j
        t          j
        ggddg          t          j        ddgddggddg          gS )N)rI      rd   timez
2000-01-011Dr  freqperiods)r   r  r"   )r   r   r      )r  r'      rI   T)r  centerr(   r"   r   )rq   rs   ro   r  r  
date_rangeiselr   rollingr  r   r  s    r   r   r   q  s   	
	$$lrJJJK
 
 
B 	U1b\\""
U1b\\""**$*??DDFF
q!fq"&k*#v???
q!frvrv./sFmDDD
q!fq!f%S&M::: r   c                   | d         | d         f| d         | d         f| d         | d         f| d         | d         f| d         | d         f| d         | d         f| d         | d         f| d         | d         f| d         | d         fg	S )Nr   r(   r'   rI   rd   rC   )r   s    r   array_tuplesr    s     
F1I	F1I	F1I	F1I	F1I	F1I	F1I	F1I	F1I
 
r   ddofn)rI   rd   re   r  r     r   )Nr"   r  r  
str | Noner  !tuple[xr.DataArray, xr.DataArray]c                   ddl m} ||          \  }}t                      5  t          j        |                                |                                ||          } ||          sJ t          j        |                                |                                |          } ||          sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   )is_dask_collectionr   r  r   )r   r  r   rq   covr   r  )	r  r   r  r  r  da_ada_br  r  s	            r   test_lazy_corrcovr    s    ('''''aJD$		!	! ( (fTZZ\\4::<<StDDD!!#&&&&&wtzz||TZZ\\s;;;!!$''''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   BC  CCr  c                V   ||          \  }}|afd}t          j        d          }dD ]}dD ]}	 |||||	          |||	f<   t          j        |||          }
t	          |
|           d S fd} |||          }t          j        |||          }
t	          |
|           d S )Nc           	     D   t          | |          \  } }|                                 |                                z  }|                     |          } |                    |          }t          j                            t          j                            |                     ||          j        	                                          t          j                            |                    ||          j        	                                                    d         S )NrV  r  r   r(   )
r   notnullwherero   mar  masked_invalidselr   flatten)ts1ts2r   r"   valid_valuesr  s        r   
np_cov_indztest_cov.<locals>.np_cov_ind  s     c**HC;;==3;;==8L ))L))C))L))C599$$SWWqAW%6%6%;%C%C%E%EFF$$SWWqAW%6%6%;%C%C%E%EFF    	 r   rI   rd   r   rJ   rV  r  c                   t          | |          \  } }|                                 |                                z  }|                     |          } |                    |          }t          j                            t          j                            | j                                                  t          j                            |j                                                            d         S )Nr  r  )	r   r  r  ro   r  r  r  r   r  )r  r  r  r  s      r   np_covztest_cov.<locals>.np_cov  s     c**HC;;==3;;==8L))L))C))L))C599$$SX%5%5%7%788$$SX%5%5%7%788    	 r   )ro   zerosrq   r  r   )r  r   r  r  r  r  r  rh   r   r"   r   r  s     `         r   test_covr
    s    aJD$
	 	 	 	 	  8F## 	B 	BA! B B!+D$!q!A!A!AABd$777)))))	 	 	 	 	 6$%%d$777)))))r   c                D   ||          \  }}|]d }t          j        d          }dD ]}dD ]} |||||          |||f<   t          j        |||          }	t	          |	|           d S d }
 |
||          }t          j        |||          }	t	          |	|           d S )Nc           	     >   t          | |          \  } }|                                 |                                z  }|                     |          } |                    |          }t          j                            t          j                            |                     ||          j        	                                          t          j                            |                    ||          j        	                                                    d         S )NrV  r  )
r   r  r  ro   r  corrcoefr  r   r   r  )r  r  r   r"   r  s        r   np_corr_indztest_corr.<locals>.np_corr_ind  s     c**HC;;==3;;==8L))L))C))L))C5>>$$SWWqAW%6%6%;%C%C%E%EFF$$SWWqAW%6%6%;%C%C%E%EFF   r   r  r   rJ   rV  c                   t          | |          \  } }|                                 |                                z  }|                     |          } |                    |          }t          j                            t          j                            | j                                                  t          j                            |j                                                            d         S )Nr  )	r   r  r  ro   r  r  r  r   r  )r  r  r  s      r   np_corrztest_corr.<locals>.np_corr  s     c**HC;;==3;;==8L))L))C))L))C5>>$$SX%5%5%7%788$$SX%5%5%7%788   r   )ro   r	  rq   r  r   )r  r   r  r  r  r  rh   r   r"   r   r  s              r   	test_corrr    s    
 aJD$
	 	 	 8F## 	C 	CA! C C!,T41!B!B!BACtS)))))))	 	 	 74&&tS)))))))r   	   )Nr  r"   c                   ||          \  }}t          ||          \  }}|                                |                                z  }|                    |          }|                    |          }t          j        |||d          |                    |          |                    |          z  z  }t          j        |||          }t          ||           d S )Nr   r  r  )r   r  r  rq   r  stdr  r   )r  r   r  r  r  r  rh   r   s           r   test_covcorr_consistencyr    s    
 aJD$ 4&&JD$<<>>DLLNN2L::l##D::l##DvdDc222SDHHH---H WT4S)))FFH%%%%%r   z,ignore:invalid value encountered in .*dividec                6   ||          \  }}|                                 }|                                 }t          j        |||          }t          j        |||          }t          j        |||          }	t          ||           t          ||	           d S )Nr  )r   rq   r  r   )
r  r   r  r  r  da_alda_blc_ablc_ab
c_ab_mixeds
             r   test_corr_lazycorr_consistencyr  !  s     aJD$JJLLEJJLLEGE5c***E743'''Du#...JD%   D*%%%%%r   c                    t          j        ddgddggddg          } t          j        ddgdt          j        ggddg          }t           j                            t          j        | |          t          j        |                                 |                                                     t           j                            t          j        | |          t          j        | |                                                     d S )Nr(   r'   r"   r  r   )rq   rs   ro   r   r  assert_equalr  r   )r  r  s     r   test_corr_dtype_errorr  2  s    <!Q!Q(V}===D<!Q!RV-S&MBBBDJBGD$//tzz||1T1TUUUJBGD$//tzz||1L1LMMMMMr   re   r"   c                |   ||          }|                                 }|                    |                    |          dk              }||                    |          z
  dz                      |dd          }t	          j        |||          |                    |          dz
  z  }t          ||           d S )Nr  r(   r'   T)r   skipna	min_count)r  r  r*  r  rq   r  r   )r  r   r   r  r  rh   r   s          r   test_autocovr#  ;  s     
B ::<<L	,""s"++a/	0	0Bbgg#g&&&1,11c$RS1TTHVB$$$(8(8(=(=(ABFFH%%%%%r   c                     t          j        ddg          } t          j        | |           }t          |                                          dk    sJ d S )Ny              ?y             r'   )rq   rs   r  absitem)r  r   s     r   test_complex_covr'  J  sK    	r3i	 	 BVB^^Fv{{}}""""""r   c                    t          j        g dg dgd          } d }|                     d          } t          ||                     ddi          dggd	d
t
          gt          ddi                    j        |j         }t          ||           t          j        t          d          5  t          ||                     ddi          dggd	d
t
          gt          ddi                     d d d            n# 1 swxY w Y   t          j        t          d          5  t          ||                     ddi          dggd	d
t
          g           d d d            d S # 1 swxY w Y   d S )Nr   r   r&   r   c                *    | t           j        df         S N.ro   newaxisr%   s    r   r,  z5test_vectorize_dask_new_output_dims.<locals>.<lambda>U  s    Qrz3' r   r$   r"   r(   Tr   r  )r,   r  r   ru  r  z0dimension 'z1' in 'output_sizes' must correspondrX  z1z7dimension 'z' in 'output_core_dims' needs corresponding)r,   r  r   ru  )rq   rs   expand_dimsr   r   r  rQ   	transposer   r   r]   r^   r_   )rz   r   rh   r   s       r   #test_vectorize_dask_new_output_dimsr0  P  sA    yyy)))4:FFFJ''D%%c**H[#q""%gc1X666    F Xv&&&	M
 
 
 
 
 	c1X&&"eW '#$;;;	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
T
 
 
 

 

 	c1X&&"eW '	
 	
 	
 	


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s%   0AD  DD&3E&&E*-E*c                 ~   t          j        dt          j        d                    } d }d }t	          j        t          d          5  t          || ddg           d d d            n# 1 swxY w Y   t	          j        t          d          5  t          || ddg           d d d            d S # 1 swxY w Y   d S )	Nr"   rn   c                    | S r;   rC   r%   s    r   rl   z*test_output_wrong_number.<locals>.identity  s    r   c                    | | | fS r;   rC   r%   s    r   tuple3xz)test_output_wrong_number.<locals>.tuple3x  s    1ayr   znumber of outputsrX  rC   r   rq   rr   ro   rp   r]   r^   r_   r   )ry   rl   r4  s      r   test_output_wrong_numberr6  |  sy   {3	"..H     
z)=	>	>	> C CHh"bBBBBC C C C C C C C C C C C C C C 
z)=	>	>	> B BGXRAAAAB B B B B B B B B B B B B B B B B Bs$   	A**A.1A.B22B69B6c                    t          j        dt          j        d                    } d }d }t	          j        t          d          5  t          || dg           d d d            n# 1 swxY w Y   t	          j        t          d          5  t          ||            d d d            n# 1 swxY w Y   t	          j        t          d          5  t          ||            d d d            d S # 1 swxY w Y   d S )	Nr"   rn   c                *    | dt           j        f         S r*  r+  r%   s    r   add_dimz'test_output_wrong_dims.<locals>.add_dim  s    bj!!r   c                    | d         S r   rC   r%   s    r   
remove_dimz*test_output_wrong_dims.<locals>.remove_dim  s    yr   zunexpected number of dimensionsrX  r   r   r5  )ry   r9  r;  s      r   test_output_wrong_dimsr<    s   {3	"..H" " "   
z)K	L	L	L F FGXEEEEF F F F F F F F F F F F F F F 
z)K	L	L	L ' 'GX&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 
z)K	L	L	L * *J)))* * * * * * * * * * * * * * * * * *s6   	A))A-0A-B,,B03B0C00C47C4c            	     Z   t          j        d          } t          j        d|           }t          j        |d|  fg          }t          j        d|id|  i          }d fd}t          j        t          d          5   ||           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            n# 1 swxY w Y   fd}t          j        t          d          5   ||           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            n# 1 swxY w Y   fd	}t          t          j        d
| d d                    ||                     t          t          j        | d d         d
g           ||                     t          t          j        dd
| d d         fi           ||                     fd}t          t          j        d| d d                    ||                     t          t          j        | d d         dg           ||                     t          t          j        dd| d d         fi           ||                     d S )Nrn   r"   r#   c                    | d d         S )Nre   rC   )rx   s    r   truncatez,test_output_wrong_dim_size.<locals>.truncate  s    RaRyr   c                $    t          |           S r;   r   r   r?  s    r    apply_truncate_broadcast_invalidzDtest_output_wrong_dim_size.<locals>.apply_truncate_broadcast_invalid  s    8S)))r   zsize of dimensionrX  c                2    t          | dggdgg          S )Nr"   r   r   rA  s    r   apply_truncate_x_x_invalidz>test_output_wrong_dim_size.<locals>.apply_truncate_x_x_invalid  +    cSE7seW
 
 
 	
r   c                2    t          | dggdgg          S )Nr"   r$   r   r   rA  s    r   apply_truncate_x_zz6test_output_wrong_dim_size.<locals>.apply_truncate_x_z  rE  r   r$   re   r   c                6    t          | dggdggdh          S )Nr"   r   r   rA  s    r   apply_truncate_x_x_validz<test_output_wrong_dim_size.<locals>.apply_truncate_x_x_valid  s3    !UG"eW
 
 
 	
r   )
ro   rp   rq   rr   rs   rt   r]   r^   r_   r   )	rx   ry   rz   r{   rB  rD  rG  rI  r?  s	           @r   test_output_wrong_dim_sizerJ    s   IbMME{3&&Hh#v88Jj#x3-88G  * * * * * 
z)=	>	>	> 3 3((2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3	z)=	>	>	> 5 5((4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5	z)=	>	>	> 2 2((1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 
 
 
 

 
z)=	>	>	> - -""8,,,- - - - - - - - - - - - - - -	z)=	>	>	> / /"":.../ / / / / / / / / / / / / / /	z)=	>	>	> , ,""7+++, , , , , , , , , , , , , , ,
 
 
 
 

 R[eBQBi002D2DX2N2NOOO
U2A2YcU+++-?-?
-K-K   RZsE"1"I&6 788:L:LW:U:UVVV
 
 
 
 
 R[eBQBi002J2J82T2TUUU
U2A2YcU+++-E-Ej-Q-Q   

C#uRaRy)*++-E-Eg-N-N    sl   BB B?CCC=DDD EEE>FFF<GGGuse_daskboolc           
     N   | rt           st          j        d           t          j        d                              dd          }t          j        d                              ddd          }t          j        d                              dd          }t          j        |d	d
gd	t          j        ddd          i          }t          j        |g dd	t          j        ddd          i          }t          j        |ddg          }| rE|	                    d	di          }|	                    d	di          }|	                    ddi          }t          j
        ||d	d
g          }|j        dk    sJ |j        t          j        d||          k                                    sJ t          |j        j        t#          |j        j                            sJ t          j
        ||          }|j        dk    sJ |j        t          j        d||          k                                    sJ t          |j        j        t#          |j        j                            sJ t          j
        |          }t%          ||           t          j
        |j        |j                  }|j        dk    sJ |j        t          j        d||          k                                    sJ t          |j        t#          |j        j                            sJ | r|	                    d	di          }|	                    d	di          }t          j
        ||d
g          }|j        dk    sJ |j        t          j        d||          k                                    sJ t          |j        j        t#          |j        j                            sJ t          j
        ||d
g          }|j        dk    sJ |j        t          j        d||          k                                    sJ t          j
        ||d
          }|j        dk    sJ |j        t          j        d||          k                                    sJ t          j
        ||d	          }|j        dk    sJ |j        t          j        d||          k                                    sJ t          j
        ||d          }|j        dk    sJ |j        t          j        d||          k                                    sJ t          j
        |||d	d
g          }|j        dk    sJ |j        t          j        d|||          k                                    sJ t          j
        ||d          }|j        dk    sJ |j        t          j        d||          k                                    sJ t          j
        |||          }|j        dk    sJ |j        t          j        d|||          k                                    sJ t          j
        |d	          }|j        dk    sJ |j        t          j        d |          k                                    sJ t          j
        |                    g !          |                    g !          d	          }|j        dk    sJ |j        t          j        |j                  k                                    sJ t          j
        ||d"          }|j        d#k    sJ |j        t          j        d$||          k                                    sJ t          j
        |||d"          }|j        d#k    sJ |j        t          j        d%|||          k                                    sJ t          j
        |d"          }|j        d#k    sJ |j        t          j        d&|          k                                    sJ t          j
        |                    g !          |                    g !          d"          }|j        d#k    sJ |j        t          j        |j                  k                                    sJ | sHt          j        t.                    5  t          j
        |d	d '           d d d            n# 1 swxY w Y   t          j        t.                    5  t          j
        |                    d()          d	           d d d            n# 1 swxY w Y   t          j        t.                    5  t          j
        d	           d d d            n# 1 swxY w Y   t          j
        ||d
gd*+          }|j        t          j        d||          k                                    sJ |j        j        d,         sJ |j        j        d-         rJ t          j
        ||d
gd.+          }|j        t          j        d||          k                                    sJ | s(|j        j        d,         rJ |j        j        d-         sJ t7          j        t7          j        t          j
        |                               d S )/Ntest for dask.x      rd   X  re   i,  <   r   r   r   r(   r   r   r   r   r   er   rI   )r   z	ij,ijk->k)r   r   z
ij,ijk->ikr#  z
ij,ijk->jkr   z
ij,ijk->ij)r   rT  zij,ijk,kl->kl )rT  zij,ijk,kl->l )r   zij->j )r   .rC   zij,ijk->zij,ijk,kl-> zij-> )r   invalidr  r<   C)r   orderC_CONTIGUOUSF_CONTIGUOUSF)r   r]   skipro   rp   r  rq   rs   linspacer   dotr   r   einsumallr   ry   typer   r   r	  r  r^   r_  
to_datasetr   flagspickleloadsdumps)rK  r   r   r   r  r  da_cr   s           r   test_dotrg    s
    * 	*K()))
	&!!"a((A
	*%%b!Q//A
	&!!!R((A<c
CQ29N9N3OPPPD<bk!QPR>S>S8TUUUD<c
+++D $zz3(##zz3(##zz3(##VD$c3Z000F;&    K29[!Q777<<>>>>>fo*D1C,D,DEEEEEVD$F;&    K29[!Q777<<>>>>>fo*D1C,D,DEEEEE VD\\FT6""" VDM4=11F;&    K29[!Q777<<>>>>>fk4(:#;#;<<<<< Jzz3(##zz3(##d#///{j((((ryq!<<<AACCCCC&/.T]5G0H0HIIIIIVD$cU+++F;*$$$$K29\1a888==?????VD$S)))F;*$$$$K29\1a888==?????VD$S)))F;*$$$$K29\1a888==?????VD$S)))F;*$$$$K29\1a888==?????VD$C:666F;*$$$$K29%5q!Q???DDFFFFF VD$V,,,F;*$$$$K29\1a888==????? VD$%%F;&    K29_aA>>>CCEEEEE VDs###F;&    K29Xq1116688888 VDHHrHNNDHHrHNN===F;&    K28FL1116688888 VD$S)))F;"K29ZA666;;=====VD$3///F;"K29^Q1===BBDDDDDVDs###F;"K29Wa0005577777VDHHrHNNDHHrHNN===F;"K28FL1116688888  1]9%% 	1 	1F4c40000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1	y	!	! 5 5
tD))44445 5 5 5 5 5 5 5 5 5 5 5 5 5 5	y	!	!  
C               VD$cU#666FK29\1a888==?????=~....}">2222VD$cU#666FK29\1a888==????? 3=&~6666}">2222 LbfTll++,,,,,s6   3ccc;+d22d69d6e88e<?e<c                \   | rt           st          j        d           t          j        d                              dd          }t          j        d                              ddd          }t          j        d          t          j        d          d}t          j        dd          t          j        d	d          d}t          j        |d
dg|          }t          j        |g d|          }| r.|                    d
di          }|                    d
di          }t          j	        ||          }||z  
                    d
dg          }t          j                            ||           t          j	        ||d          }||z  
                                }t          j                            ||           t          j        d          5  t          j        t          d          5  t          j	        ||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        d          5  t          j	        ||          }||z  
                    d
dg          }t          j                            ||           d d d            n# 1 swxY w Y   t          j        d          5  t          j	        ||          }||z  
                    d
dg          }t          j                            ||           d d d            n# 1 swxY w Y   t          j        d          5  t          j	        ||          }||z  
                    d
dg          }t          j                            ||           d d d            d S # 1 swxY w Y   d S )NrN  rO  rP  rd   rQ  re   r   #   r(   r   r   r   rS  rI   .r   r[   )arithmetic_joinz&cannot align.*join.*exact.*not equal.*rX  rV   rW   rY   )r   r]   r[  ro   rp   r  rq   rs   r   r]  r*  r  r   set_optionsr^   r_   )	rK  r   r   coords_acoords_br  r  r   rh   s	            r   test_dot_align_coordsrn  ]  s     * 	*K()))
	&!!"a((A
	*%%b!Q//A Yr]]166HYq"%%BIaOO<<H<c
8<<<D<AAAD $zz3(##zz3(## VD$Ft  #s,,HJx000VD$S)))Ft  ""HJx000		0	0	0  ]:-VWWW 	 	F4	 	 	 	 	 	 	 	 	 	 	 	 	 	 	               
	/	/	/ 5 5d##4K$$c3Z00

""8V4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5
 
	0	0	0 5 5d##4K$$c3Z00

""8V4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5
 
	0	0	0 5 5d##4K$$c3Z00

""8V4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5so   H,3H	H,H	H,H	H,,H03H0AJ((J,/J,AL$$L(+L(AN!!N%(N%c                     t          j        ddgd          } t          j        | dd          }t          j        ddgd          }t          ||           d S )NTFr"   r   r(   r   )rq   rs   r  r   )condr   rh   s      r   
test_whererq    s[    <uC000DXdAq!!F|QF---HXv&&&&&r   c            	        t          j        ddgdddgiddi          } dd	i| d         _        t          j        ddgdddgidd
i          }ddi|d         _        t          j        ddgdddgiddi          }ddi|d         _        t          j        | ||d          }t          j        ddgdddgidd
i          }ddi|d         _        t	          ||           t          j        | d|d          }t          j        ddgdddgi          }t	          ||           t          j        | |dd          }t          j        ddgdddgidd
i          }ddi|d         _        t	          ||           t          j        | ddd          }t          j        ddgdddgi          }t	          ||           t          j        d||d          }t          j        ddgdddgidd
i          }ddi|d         _        t	          ||           t          j        dddd          }t          j        d          }t	          ||           t          j        d|iddi          }t          j        d|iddi          }t          j        | ||d          }	t          j        dt          j        ddgdddgidd
i          iddi          }
ddi|
d         _        t	          |
|	           t          j        | |                    d          |d          }	t          j        dt          j        ddgdddgidd
i          i          }
ddi|
d         _        t	          |
|	           d S )NTFr   r   r(   r  cond_da)r   r  
cond_coordx_dax_coordy_day_coordr  r   r"   x_ds)	data_varsr  y_ds)rz  )	rq   rs   r  r  r   ro   rx   rt   rename)rp  r"   r#   r   rh   	actual_npexpected_npds_xds_y	ds_actualds_expecteds              r   test_where_attrsr    s   <usQFmFICVWWWD|,DIO
aVS1a&M&&9IJJJAI&AcFL
aVS1a&M&&9IJJJAI&AcFL XdAqT222F|QFC!Q=@PQQQH!9-HSMXv&&& XdAqT222F|QFC!Q=999HXv&&& XdAqT222F|QFC!Q=@PQQQH!9-HSMXv&&& XdAqT222F|QFC!Q=999HXv&&& XdAqT222F|QFC!Q=@PQQQH!9-HSMXv&&& q!555I(1++K[),,, :a0@AAAD:a0@AAADtTd;;;I*q!fcAq6]66BRSSS
 v	  K %i0K[),,, qxx}}dtDDDI*q!fcAq6]66BRSSS
  K
 %i0K[),,,,,r   nodaskr   )r"   coeffsrh   r'   rI   rd   degreer   )r     /   simple)r#   r  zbroadcast-x)r"   r  )r(   r(   rd   z
shared-dim)r(   r   r   )r'   r(   r   )r(   rd   r  zreordered-index)re   (      zsparse-indexr   )r(   r(   r(   zarray-datasetrf   zdataset-arrayr#   zdataset-datasetz
1970-01-01sr  r       eAg    eAdatetime)i  i  i  ztimedelta64[ns]r  )g     @@g     @@g     p@	timedeltazint64-degreezint32-degreezuint8-degreexr.DataArray | xr.Datasetr  rh   c                T   | rIt           st          j        d           |                    ddi          }|                    ddi          }t	                      5  t          j        ||          }d d d            n# 1 swxY w Y   t
          j                            ||           d S )Nrequires daskr  r'   r"   r:  r  )	r   r]   r[  r   r   rq   polyvalr  r   )rK  r"   r  rh   r   s        r   test_polyvalr    s    t   	)K(((xm,,GGS!H		!	! 4 4!F3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 Jvx00000s   A==BBdatez
0753-04-21r2   c                   dd l }t          j        t          j        |ddd          d          }t          j        ddgd	d	ddgi
          }| rIt          st          j        d           |                    d	di          }|                    ddi          }t          d          5  t          j	        ||          }d d d            n# 1 swxY w Y   t          j        |d          d         }||
                    ddd          z
                                  dz  }t          j        g dddt          j        |ddd          i
          |z   }t          j                            ||           d S )Nr   1SrI   T)r  r  
use_cftimer"   r   r(   r  r   r  r'   )max_computesr  )r  i  r  r  )cftimerq   rs   r  r   r]   r[  r   r   r  DatetimeGregoriantotal_secondsr  r   )	rK  r  r  r"   r  r   t0offsetrh   s	            r   test_polyval_cftimer  a  s    MMM

dqTBBB	 	 	A \1a&xAq68JKKKF  	)K(((xm,,GGS!H	Q	/	/	/ 4 4!F3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 
tQ	'	'	'	*B6++D!Q777FFHH3NF
MMt$dSSST	
 	
 	

 	  Jvx00000s   )CCCc            	        t          j        g dd          } t          j        g dddg di          }t          j        t                    5  t          j        | |                    d                     d d d            n# 1 swxY w Y   t          j        t                    5  t          j        | |                    |j        	                    t                                         d d d            d S # 1 swxY w Y   d S )	Nr   r"   r   r  r  r   r   )r  )rq   rs   r]   r^   r_   r  	drop_varsassign_coordsr  astyper  )r"   r  s     r   test_polyval_degree_dim_checksr    s}   
YYYS)))A\)))(Hiii;PQQQF	z	"	" 2 2

1f&&x001112 2 2 2 2 2 2 2 2 2 2 2 2 2 2	z	"	" P P

1f**&-2F2Fu2M2M*NNOOOP P P P P P P P P P P P P P P P P Ps%   )BBB(AC<<D D ns)r(   r     r  )"   9   V   r
  2Dxr.DataArrayc                `   ||j         d<   | r2t          st          j        d           |                    ddi          }|                    dd          }t          j        |j        |j	                  } |j
        |j         }t          j                            |j        |j                   d S )Nr"   r  r'   )r   deg)r   r   r]   r[  r   polyfitrq   r  r"   polyfit_coefficientsr/  r   r  r   ry   )rK  r"   r#   fit	evaluatedrh   s         r    test_polyfit_polyval_integrationr    s    : AHSM  	)K(((GGS!H
)))
#
#C
13 899Iq{IN+HJy183DEEEEEr   za, b, ae, be, dim, axis)rd   re   r  dim_0r   )r   r   rR  )re   rI   rd   )r  	cartesianr  r  rZ   r  )r(   g      ?r'   g      @r$   )r  )r   r   r(   )r(   r   r'   r   c                ,   t          j        |||          }|rCt          st          j        d           |                                 } |                                }t          j        | ||          }t          j                            ||           d S )Nr   rN  r  )	ro   crossr   r]   r[  r   rq   r  assert_duckarray_allclose)	r   r   aeber   r   rK  rh   r   s	            r   
test_crossr    s    ~ xBT***H  	*K()))GGIIGGIIXa$$$FJ((6:::::r   )r   r    )
r  r  r   r  r  r  r  r  r   r    )r  r  r   r  r  r  r   r    )r  r  r   r  r   r    )rK  rL  r   r    )
rK  rL  r"   r  r  r  rh   r  r   r    )rK  rL  r  r2   r   r    )rK  rL  r"   r  r#   r  r   r    )r   r2   r   r  rK  rL  r   r    )v
__future__r   ru   r   rc  numpyro   pandasr  r]   numpy.testingr   r   xarrayrq   xarray.core.alignmentr   xarray.core.computationr   r   r	   r
   r   r   r   r   r   xarray.testsr   r   r   r   r   r6   rG   rL   rN   rb   rj   rl   r}   r   r   r   r   r   r   r   r   r   r  r  r  r  markparametrizeparamr2  r7  rG  rK  rT  rc  ro  rz  r  r  filterwarningsr  r  r  r  r  r  r  r  rs   r  r  r  r  r  r  fixturer   r  r  r
  r  r   r  r  r  r#  r'  r0  r6  r<  rJ  rg  rn  rq  r  rt   r  rx   r}  int32uint8r  r  r  r  rr   rp   r  rQ   r  rC   r   r   <module>r     sH"   " " " " " "                = = = = = = = =     + + + + + +
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
           ! ! !@ @ @ @"	8 	8 	8 	8J J J J@ @ @ @	( 	( 	( 	(! ! ! !  D D D D + + +,G ,G ,G ,G^,G ,G ,G ,G^"$ "$ "$ "$J ' ' ' '9' 9' 9' 9'x;, ;, ;, ;,|&@ &@ &@ &@R"> "> "> ">JM M M M*+ + + +    ( 3  3  3  3F ...1XQx#q*	
 	
 	
 	1XQx#q*	
 	
 	
 	1XQx#q*!H	
 	
 	
 	1XQx#q*!H	
 	
 	
 	1XQx#q*	
 	
 	
 	1QQ//qq1A1AB!!$$	
 	
 	
 	1XQx#q*	
 	
 	
W25 5l+ + +m5 5l+ ...1XQx#q*	
 	
 	
 	1XQx#q*	
 	
 	
 	1XQx#q*!H	
 	
 	
 	1XQx#q*!H	
 	
 	
 	1XQx#q*	
 	
 	
 	1QQ//qq1A1AB!!$$	
 	
 	
 	1XQx#q*	
 	
 	
W25 5l+ + +m5 5l+ $455...1XQx#q*	
 	
 	
 	1XQx#q*	
 	
 	
 	1XQx#q*!H	
 	
 	
 	1XQx#q*!H	
 	
 	
 	1XQx#q*	
 	
 	
 	1QQ//qq1A1AB!!$$	
 	
 	
 	1XQx#q*	
 	
 	
W25 5l&+ &+m5 5 65n&+R ...1XQx#q*	
 	
 	
 	1XQx#q*	
 	
 	
 	1XQx#q*!H	
 	
 	
 	1XQx#q*!H	
 	
 	
 	1XQx#q*	
 	
 	
 	1QQ//qq1A1AB!!$$	
 	
 	
 	1XQx#q*	
 	
 	
W25 5l+ + +m5 5l+ $<==...1XQx#q*	
 	
 	
 	1XQx#q*	
 	
 	
 	1XQx#q*!H	
 	
 	
 	1XQx#q*!H	
 	
 	
 	1XQx#q*	
 	
 	
 	1QQ//qq1A1AB!!$$	
 	
 	
 	1XQx#q*	
 	
 	
W25 5l"+ "+m5 5 >=n"+J,' ,' ,' ,'^ && && && &&R ' ' ' '& 0 0 0 06 
 
 
 
0 899'A 'A 'A :9 'AT ' ' ' '8 / / / /2 
 
 
 
$! ! !' ' ' ' ' ' ' ' * * * *@ iii+*===.../jAAA * * *  *  ! ! ! !"9 9 9
' ' ' '" ' ' ' '&, , , ,
 h     h    !Q((00011 3 3 344( ( (  54 21 )((  !Q((iii((v//0* 0* 0* 0/ )( )(0*f iii((v//,* ,* ,* 0/ )(,*^ eeAhh'' 3 3 344& & & 54 ('&& eeAhh'' 3 3 344JKK
& 
& 
& LK 54 (' 
& N N N eeAhh''vsVSM BCC
& 
& 
& DC ('
&# # # # (
 (
 (
 (
VB B B B * * * *&9 9 9 9x dE]33~- ~- ~- 43~-B dE]3325 25 25 4325j' ' ' '>- >- >- >-B e111<6<3P3P3PQ  BL---BL8YYY:OPPPBL4443???		
 	
 	
 	BL---BLQ!Q 1a&?Q   BL1a&1a&1a&1
CCC	
 	
 	
 	BL---BLQ!Q!Q($ 1a&)  
 BLS111		
 		
 		
 	BL---BL8YYY:OPPPBLs333 		
 	
 	
 	BL---BL!8XsODDDBL000s;;;		
 	
 	
 	BL---BJ!Q(1a&/ABB 1a&)   BJc999-S)))4DEEFF	
 	
 	
 	BJc999-S)))4DEEFFBL!Qh1a&7IJJJBJc999-S)))4DEEFF		
 	
 	
 	BJc999-S)))4DEEFFBJ!Q(1a&/ABB 1a&)   BJc999-S)))4DEEFF 	
 	
 	
 	BL|#qIIIPSTTTBL!Qh1a&7IJJJBL]R]<c1MMMN  
 		
 		
 		
 	BL+++3DEEEC   BL!Qh1a&7IJJJBL111<<<	
 	
 	
 	BL---BL		 ("(999BH"E"E"EF  
 BL4443???		
 		
 		
 	BL---BL		 ("(999BH"E"E"EF  
 BL4443???		
 		
 		
 	BL---BL		 ("(999BH"E"E"EF  
 BL4443???		
 		
 		
Gmp pb1 1 1cp p h1$ e111<6<3P3P3PQ  ,!=>>1 1 1 ?>  
1>P P P P e111<6<3P3P3PQ  \R\)))#6668DDDBL|$JJJQTUUU	
 	
 	
 	BL)))3DEEECPPP	
 	
 	

  \R\***3777DAAABL***lll3*EEE$	
 	
 	
 F F F   4F eT]33 BL##BL##IIII	
 BL!Q  BL##FII	
 BKgYYYY777BKgYYYY777IIII	
 BKgYaV444BKgYYYY777FII	
 BL	!Y''//	::111t!(IBIaOO4 +}ooo>"2"2"23     BL	!Y''//	::Q>111t!(IBIaOO4 +}ooo>"2"2"23     BIa##++I66BIa##++I66:-	
2 BL!!]t}se&<===  
 BL##!]t}ooo&FGGG  
 IIII	
" BLA!]t}sCj&ABBB  
 BL		!]t}ooo&FGGG  
 IIII	
SY\ \z
; 
; 
;{\ \ 43|
; 
; 
;r   