
    >ie                    	   d dl mZ d dlZd dlmZ d dlZ ej        d          Zd dl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mZ d dlmZ d dlmZ d Zd	 Zd
 Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+ej,        -                    d ej        g            ej        g g g           ej        g gg gg          g          d             Z.d Z/d Z0d Z1d Z2d Z3d Z4d  Z5d! Z6d" Z7d# Z8d$ Z9d% Z:dpd)Z;d* Z<d+ Z=d, Z>d- Z?d. Z@d/ ZAej,        -                    d0d1d2gd3d4gd3d5gg          d6             ZBd7 ZCd8 ZDd9 ZEd: ZFd; ZGej,        -                    d< ejH        d=d>?          d@f ejH        d=d>?          d&dAif ejH        d=d>?          dBf ejH        dCdD?          d@f ejH        dCdD?          d&dAif ejH        dCdD?          dBf ejH        dEdE?          d@f ejH        dEdE?          d&dAif ejH        dEdE?          dBf ejH        dEdF?          d@f ejH        dEdF?          d&dAif ejH        dEdF?          dBfg          dG             ZIej,        -                    d< ejH        d=d>?          d@f ejH        d=d>?          d&dAif ejH        d=d>?          dBf ejH        dCdD?          d@f ejH        dCdD?          d&dAif ejH        dCdD?          dBf ejH        dEdE?          d@f ejH        dEdE?          d&dAif ejH        dEdE?          dBf ejH        dEdF?          d@f ejH        dEdF?          d&dAif ejH        dEdF?          dBfg          dH             ZJej,        -                    dIejK        ejK        fdJfejK        ejK        fdJf eLdK           eLdK          fdJfg          dL             ZMej,        -                    dIdAdAejK        ejK        fdJfdAdAejK        ejK        fdJfdAdA eLdK           eLdK          fdJfg          dM             ZNdN ZOdO ZPdP ZQdQ ZRdR ZSdS ZTdT ZUdU ZVdV ZWej,        -                    dWg dX          dY             ZXdZ ZYd[ ZZej,        -                    d\d]d^g          d_             Z[d` Z\da Z]db Z^dc Z_dd Z`de Zadf Zbdg Zcdh Zddi Zedj Zfdk Zgdl Zhdm Zidn Zjdo ZkdS )q    )annotationsN)productnumpy)
_breakpoints_intersect_1dcumdims_labeldivide_to_widthintersect_chunksmerge_to_numbernormalize_chunks
old_to_newplan_rechunkrechunk)	assert_eq)funcnamec            
     j   t          dd          } t          dd          }t          d t          ||           D                       }d}|d         |k    sJ d}|d	         |k    sJ d
 |D             }dt          dd	          fgdt          d	d          fgdt          dd          fgg}|d         |k    sJ dt          dd	          fgd	t          dd	          fdt          dd	          fdt          dd	          fdt          dd	          fdt          dd	          fgdt          d	d          fgg}|d	         |k    sJ t          dd          } t          d t          ||           D                       }d}|d	         |k    sJ d |D             }dt          dd	          fgd	t          dd	          fdt          dd	          fdt          dd	          fdt          dd	          fdt          dd	          fgdt          d	d          fgdt          dd          fgg}	|d	         |	k    sJ dS )zXTest the cumdims_label and _breakpoints and
    _intersect_1d internal funcs to rechunk.)   r      )r      r   n)   )r   r   r   r   r   oc              3  <   K   | ]\  }}t          ||          V  d S Nr   .0r   r   s      =lib/python3.11/site-packages/dask/array/tests/test_rechunk.py	<genexpr>z+test_rechunk_internals_1.<locals>.<genexpr>"   0      @@$!Q<1%%@@@@@@    )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   c                ,    g | ]}t          |          S  r   r   bs     r    
<listcomp>z,test_rechunk_internals_1.<locals>.<listcomp>2        
,
,
,=
,
,
,r#   r   r   r+   r   )r   )r   r   r   r   c              3  <   K   | ]\  }}t          ||          V  d S r   r   r   s      r    r!   z+test_rechunk_internals_1.<locals>.<genexpr>C   r"   r#   )r$   r%   r(   r&   r)   r*   r'   r,   r-   r/   r/   c                ,    g | ]}t          |          S r2   r3   r4   s     r    r6   z,test_rechunk_internals_1.<locals>.<listcomp>R   r7   r#   N)r   tuplezipslice)
newoldbreaksansweranswer2i1danswer3answer4answer5answer6s
             r    test_rechunk_internals_1rG      s    .
4
4C
(#
.
.C@@#c3--@@@@@FIF!9G !9
,
,V
,
,
,CE!QKK !Qa$4#5E!QKK8H7IJGq6W
U1a[[	aaaaa	
 U1a[[	
G q6W
13
7
7C@@#c3--@@@@@FG !9
,
,V
,
,
,C
U1a[[	aaaaa	
 U1a[[	
U1a[[	G q6Wr#   c                 <   d} d}dt          dd          ffdt          dd          ffdt          dd          fffdt          dd          fffdt          dd          ffd	t          dd          fffg}t          t          | |
                    }||k    sJ dS )Convert 1 D chunks)
   rK   rK   rK   rK   )   r      r   rK   r   r   r   r+   r   
old_chunks
new_chunksNr<   listr
   r>   r=   r@   crosss       r    test_intersect_1rV   b   s    
!C
CeArll
	E!RLL 13q%1++6F5HIeArll
	eArll
	E!RLL 134F
 !SSAAABBEU??????r#   c                    d} d}dt          dd          ffdt          dd          ffdt          dd          fffdt          dd          ffdt          dd          fffdt          dd          ffd	t          dd          fffd	t          dd          fffg}t          t          | |
                    }||k    sJ dS )rI   ))rN   rN   rN   rN   rN   )):   r   rN      r   rN   r   r   rY   r+   r   rO   NrR   rT   s       r    test_intersect_2rZ   o   s    
!C
CeArll
	E!RLL 13q%2,,6G5IJeBmm
	!U1a[[!1 34eArll
	E!QKK 023eArll
		F !SSAAABBEU??????r#   c                 <   t           j                                                            ddd          } t	          j        | d          }d}t          ||          }|j        |k    sJ t                               |	                                | k              sJ dS )z!Try rechunking a random 1d matrixr   r      ))rK   rK   rK   chunks)r   r   r   r   r   r   N)
nprandomdefault_rnguniformda
from_arrayr   r^   allcomputeaxr=   x2s       r    test_rechunk_1drl   }   s    
	''1b11A
a---A
C	3			B966"**,,!#$$$$$$$r#   c                 b   t           j                                                            ddd                              d          } t          j        | d          }d}t          ||          }|j        |k    sJ t           	                    |
                                | k              sJ dS )	z!Try rechunking a random 2d matrixr   r   i,  )rK   r\   ))r   r   r+   r   r_   r]   )r   r   )   ro   Nr`   ra   rb   rc   reshaperd   re   r   r^   rf   rg   rh   s       r    test_rechunk_2drr      s    
	''1c22::8DDA
a 8999A
C	3			B966"**,,!#$$$$$$$r#   c                 f   d} t           j                                                            ddd                              d          }t          j        ||           }d}t          ||          }|j        |k    sJ t           	                    |
                                |k              sJ dS )	z!Try rechunking a random 4d matrix)rn   rn   rn   rn   r   r   '  rK   rK   rK   rK   r]   )rK   rv   rv   rv   Nrp   )r>   ri   rj   r=   rk   s        r    test_rechunk_4drw      s    
C
	''1e44<<YGGA
a$$$A
C	3			B966"**,,!#$$$$$$$r#   c                 N   t           j                                                            ddd                              d          } t          j        | d          }|                    d          }t                               |	                                | k              sJ d S )Nr   r   d   rK   rK   rn   r]   )r+   r+   r+   r   r{   )
r`   ra   rb   rc   rq   rd   re   r   rf   rg   ri   rj   ys      r    test_rechunk_expandr~      s    
	''1c22::8DDA
a'''A			5	66A66!))++"#######r#   c                    d\  } }t           j                                                            dd| |z                                | f|z            }t          t          d| dz
            t          d| dz
                      D ]\  }}| |z
  |ff|z  }t          j        ||          }| |z
  |ff|z  }t           	                    |
                    |                                          |k              sJ | |z
  |z
  dk    rW|| |z
  |z
  |ff|z  }|
                    |                                          }t           	                    ||k              sJ d S )Nr+   r   r   r   r]   )r`   ra   rb   rc   rq   r   rangerd   re   rf   r   rg   )	ri   r5   origoffoff2r>   rj   r=   r}   s	            r    test_rechunk_expand2r      sh   FQ9  ""**1aA66>>taxHHDU1a!e__eAq1uoo>> % %	TC~!#M$s+++D$!A%vvaiisi++3355=>>>>>s7T>ATC.014C			%%--//A66!t)$$$$$% %r#   c                 p   d} d}t           j                                                            ddd                              d          }t          j        ||           }|                    |          }|j        |k    sJ t           	                    |
                                |k              sJ dS )	z6Test rechunking can be done as a method of dask array.)r   r   r+   r   r   r   )r{   r{   r{   r{   r   r   rt   ru   r]   Nrp   )r>   r=   ri   rj   rk   s        r    test_rechunk_methodr      s    
C
C
	''1e44<<YGGA
a$$$A	
#		B966"**,,!#$$$$$$$r#   c                    d\  } }t          ||           }d}t          j                                                            ddd                              d          }t          j        ||          }t          ||          }|j	        |k    sJ t          
                    |                                |k              sJ dS )	z!Test that blockshape can be used.)rz   r   r+   ))r   r   r   r{   r   r   ry   rz   r]   N)r   r`   ra   rb   rc   rq   rd   re   r   r^   rf   rg   )	new_shaperQ   new_blockdimsrP   ri   rj   check1s          r    test_rechunk_blockshaper      s    ,Iz$Z;;M*J
	''1c22::8DDA
a
+++AQz***F=M))))66&..""a'(((((((r#   c                 ~    t          j        dd          } |                     d          j        | j        k    sJ d S )Nr   r   r]   r   )rd   onesr   dtyperj   s    r    
test_dtyper      s@    
$A99D9!!'17222222r#   c                    t          j        dd          } |                     ddi          }|j        dk    sJ t          j        dd          } |                     ddi          }|j        dk    sJ t          j        dd          } |                     ddi          }|j        d	k    sJ t          j        dd          } |                     d d
d          }|j        dk    sJ d S )N   r   r      r]   r      )r   r   r   r   r   r   r   r   autor   r   ))r   r   r   r   r   r   r   rd   r   r   r^   rj   r}   s     r    test_rechunk_with_dictr      s   
(((A			!R	!!A8,,,,,
(((A			!X	''A8,,,,,
(((A			!R	!!A8)))))
(((A			Tf--	..A82222222r#   c                      t          j        dd                                i           j         j        k    sJ t	          j        t           fd           d S )Nr   r   r]   c                 0                          d          S )Nr2   r]   )r   r   s   r    <lambda>z/test_rechunk_with_empty_input.<locals>.<lambda>   s    aiiri&:&: r#   )rd   r   r   r^   pytestraises
ValueErrorr   s   @r    test_rechunk_with_empty_inputr      s]    
(((A99B9&!(2222
M*::::;;;;;r#   c                 P   t          j        t                              d          d          } |                     d          j        t          j        dd          j        k    sJ |                     d dd          j        t          j        dd          j        k    sJ d S )Nr   r   r]   Nr   r   r   r   r   )rd   re   r`   r   r   r^   r   s    r    !test_rechunk_with_null_dimensionsr      s    
bggh''777A99I9&&-&1Q1Q1Q1XXXXX			Ta	))078F+++2	3 	3 	3 	3 	3 	3r#   c                 "   t          j        t                              d          d          } |                     d          }|j        dk    sJ |                                 |                                k                                    sJ d S )Nr   r   r]   r+   )r   )rd   re   r`   aranger   r^   rg   rf   r   s     r    test_rechunk_with_integerr      su    
biill1---A			!A8y    IIKK199;;&++-------r#   c                     t                               d          } t          j        | d          }|                    d          }|j        dk    sJ |                                | k    sJ d S )N*   r2   r]   )r`   arrayrd   re   r   r^   rg   r|   s      r    test_rechunk_0dr      sb    
A
a###A			"A8r>>>>99;;!r#   arrc                H    |                                   | j        dk    sJ d S )Nr   )r   size)r   s    r    test_rechunk_empty_arrayr      s$     KKMMM8q======r#   c                     t          j        dd          } |                     d          }|j        dk    sJ t	          | |           d S )N)r   rK   rn   r]   r   r   )r   )r   r   r   r   r   rd   r   r   r^   r   r   s     r    test_rechunk_emptyr     sL    
'''A			&A8'''''aOOOOOr#   c                     t          j        dd          } |                     ddi          }|j        dk    sJ t	          | |           d S )Nr   r   r+   r]   r   r   )r   r   rd   zerosr   r^   r   r   s     r    test_rechunk_zero_dim_arrayr     sO    
"""A			1a&A8|####aOOOOOr#   c                     t          j        dd          } |                     ddd          }|j        dk    sJ t	          | |           d S )N)r   r   r.   rK   r+   r]   r   r   )r   r   )r   r   r   r   r   r{   r   r   s     r    test_rechunk_zero_dim_array_IIr     sR    
q)))A			aA,,A8<<<<<aOOOOOr#   c                 r    t          j        dd          } |                     | j                  }| |u sJ d S )Nr   r   r]   r   r   s     r    test_rechunk_samer     s:    
(((A			!(A666666r#   c                    t          j        d          } t          j        dd          }|                     |          j        }t          j        t          j        fdf}|j        |k    sJ |	                    |          }||u sJ d S )Ndask.dataframerz   r   rK   shaper^   rv   )
r   importorskiprd   r   re   valuesr`   nanr^   r   ddrj   r}   rQ   results        r    test_rechunk_same_fully_unknownr      s    		-	.	.B
hw///A
aA626"E*J8z!!!!YYz""F;;;;;;r#   c                    t          j        d          } t          j        dd          }|                     |          j        }t          d          t          d          fdf}|                    |          }||u sJ dS )zSimilar to test_rechunk_same_fully_unknown but testing the behavior if
    ``float("nan")`` is used instead of the recommended ``np.nan``
    r   rz   r   r   r   rv   N)r   r   rd   r   re   r   floatr   r   s        r    &test_rechunk_same_fully_unknown_floatsr   *  sz     
	-	.	.B
hw///A
aA<<u.6JYYz""F;;;;;;r#   c                 B   t          j        d          } t          j        dd          }|                     |          j        }t          j        ||g          }ddt          j        t          j        fdf}|j	        |k    sJ |
                    |          }||u sJ d S )Nr   rz   r   r   r   rv   )r   r   rd   r   re   r   concatenater`   r   r^   r   )r   rj   r}   zrQ   r   s         r    #test_rechunk_same_partially_unknownr   6  s    		-	.	.B
hw///A
aA
1vAa(%0J8z!!!!YYz""F;;;;;;r#   c                     t          j        dd          } t          j        dd          }|                    d          }| j        |j        k    sJ d S )Nr   )r   )r   r   r]   )r   r   r   r   s     r    #test_rechunk_with_zero_placeholdersr   A  sY    
!4555A
!5666A			%&&A8qxr#   c                     t          j        dd          } |                     d          }|j        dk    sJ t	          | |           d S )Nr   r   r]   )r   r   r   r   r   s     r    test_rechunk_minus_oner   H  sL    
(((A			'A8)))))aOOOOOr#   c                     t           j                                                            dddd          } |                     d          }t          |j                  dk    sJ d S )NrK   g?rz   )rK   r   r]   )r   rK   r\   )rd   ra   rb   normalr   lendaskr   s     r    test_rechunk_intermediatesr   O  s\    
	&&r3&IIA			'Aqv;;r#   c                 f    t          dd          } | dk    sJ t          dd          } | dk    sJ d S )N)r   	   rK   rK   )r   r   r   rK      r   r   )r   r   r   r+   r+   r+   r+   r+   r   r+   r   r   r   r   r   )r	   r]   s    r    test_divide_to_widthr   U  sJ    Z,,FZ2A66FBBBBBBBr#   c                 6   t          dd          } | dk    sJ t          dd          } | dk    sJ t          dd          } | dk    sJ t          dd          } | dk    sJ t          dd          } | d	k    sJ t          d
d          } | dk    sJ t          d
d          } | dk    sJ t          dd          } | dk    sJ t          dd          } | dk    sJ t          dd          } | dk    sJ t          dd          } | dk    sJ t          dd          } | dk    sJ t          dd          } | dk    sJ t          dd          } | dk    sJ t          dd          } | dk    sJ t          dd          } | dk    sJ t          dd          } | dk    sJ d S )Nru   r   r   r+   )rN   rK   rK   r   rN   rN   r   )(   
rK   rK   rK   rK   rK   rK   rK   rK   rK   rK   )2   r   )r   r\   r\   )r   r   r   ro   rK   )r   r   ro   rK   )r0   ro   rK   )   rK   )    )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   r   )r   )r   r]   s    r    test_merge_to_numberr   ]  s'   Y**F%%%%%Y**F%%%%%Y**F\!!!!Y**FXY**FU????Z++FYZ++F\!!!!.22F^####.22F[    .22FX.22FU????2A66F'''''2A66F_$$$$2A66F\!!!!2A66FY2A66FV2A66FT>>>>>>r#   r       cAr   c                *    t          | ||||          S )N)itemsizeblock_size_limit	threshold)r   )rP   rQ   r   r   r   s        r    _planr     s(    )   r#   c                Z    t          |           t          |          k    sJ | |k    sJ d S r   )r   )stepsexpecteds     r    _assert_stepsr     s6    u::X&&&&Hr#   c                     d} d}t           j        fdz  }t           j        fdz  }t          dd          }t          |dg           t          | df|df          }t          ||dfg           t          | f|f          }t          ||fg           t          |f| f          }t          || fg           t          | | f||f          }t          |||fg           t          ||f| | f          }t          || | fg           t          || f| | f          }t          || | fg           t          | | | | f| || | f          }t          || || | fg           t          || f| |f          }t          || | f| |fg           t          | | z   | |z   f||z   | | z   f          }t          || | z   | | z   f||z   | | z   fg           t          ||z   | | z   | |z   f||z   ||z   | | z   f          }t          ||           t          | | f||fd          }t          |||fg           t          || f| |fd	          }t          || | f| |fg           d
}t          || f| |fd	          }t          ||| f| |fg           t          || f| |fdd          }t          ||           d} ddz  }t          || f| |fd	          }t	          |          dk    sJ |d         | |fk    sJ t          t	          |          dz
            D ]w}||         }||dz            }	t	          |	d                   t	          |d                   dz  k    sJ t	          |	d                   t	          |d                   dz  k    sJ xd S )Nr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rN   r2   r   )r   i  r   ru   i  i  rK   )r   r   )  r   r   r   i r+   r   r   g       @)r`   r   r   r   r   r   )
cfncnfr   msteps2iprevsuccs
             r    test_plan_rechunkr	    s"   AA
&QB
&RB "bMME%"1b'Ar7##E%1b'### 1$E%1$   1$E%1$   1a&1a&!!E%1a&"""1a&1a&!!E%1a&"""1a&1a&!!E%1a&"""1aA,Aq!--E%1aA,((( 1a&1a&!!E%1a&1a&)***1q5!a%.1q5!a%.11E%1q5!a%.1q5!a%.9::: 27AE1q5)BGQUAE+BCCE% 1a&1a&A...E%1a&""" 1a&1a&3777E%1a&1a&)*** 	A1a&1a&3777E%1a&1a&)***Aq6Aq6D2FFFF&%    	AtA1a&1a&5999Eu::????9A3u::>"" 2 2QxQU|47||s47||c1111147||s47||c1111112 2r#   c            	     J   d} d}t          | | | | | f|||||f          }t          ||||||fg           t          ||||| f| | | ||f          }t          || | | || f| | | ||fg           t          | | ||| f| | | ||fd          }t          || | | || f| | | ||fg           d S )Nrv   
r   r   r   r   r   r   r   r   r   r   g     @r   r   r   )r   r  r   s      r    test_plan_rechunk_5dr    s    AA1aAq/Aq!Q?33E%1aAq/*+++1aAq/Aq!Q?33E%1aAq/Aq!Q?;<<<1aAq/Aq!Q?SIIIE%1aAq/Aq!Q?;<<<<<r#   c                    d} d}| |z   }| | z   }||z   }|| z   }t          ||f||f          }t          |||fg           t          ||f||f          }t          |||fg           t          ||f||f          }t          |||f||fg           t          |||f|||f          }t          ||||f|||fg           t          |||f|||fd          }t          ||||f|||fg           d S )Nrv   r  ry   r   r  )r   r  cfccfffcr   s          r    test_plan_rechunk_heterogeneousr    sG   AA	
QB	
QB	
QB	
QB 2r(RH%%E%2r($$$2r(RH%%E%2r($$$ 2r(RH%%E%2r(RH-...2r2,R--E%2r2,R5666 2r2,RsCCCE%2r2,R566666r#   c                    ddz  df} dddz  f}t          | |d          }t          |          dk    sJ t          j        d	d
          }|                    d|j        d         dz  f          }t          |j                  dk     sJ d S )Nr   r   ) r   )i8 r   )r   r   )r   r  )r   r  r]   i )r   r   rd   r   r   r   r   )ri   r5   r   rj   r}   s        r    test_plan_rechunk_asymmetricr    s    	k"A	(T/"AA***Eu::>>>>
 777A			4t+,--Aqv;;r#   c                    d} t           j                                                            | | dfd| df          }t	          j        d          5 }|                    | ddf          }d d d            n# 1 swxY w Y   |rJ d S )NrN   ry   r   )r   r^   T)record)rd   ra   rb   r   warningscatch_warningsr   )Nrj   ws      r    test_rechunk_warningr    s    
A
	&&Q3KAs&LLA		 	-	-	- #IIq!Sk""# # # # # # # # # # # # # # # LLLLLs   A66A:=A:zshape,chunksr   r   r   r   )r   r   c                    t          j        | |           }|                    |          }t          |j                  }t          d |                                D                       rJ d S )Nr]   c              3     K   | ]@}t          j        |          t          |d                                        d          V  AdS )r   concatN)r   istaskr   
startswith)r   tasks     r    r!   z6test_dont_concatenate_single_chunks.<locals>.<genexpr>   s`        ;ta$$X..     r#   )rd   r   r   dictr   anyr   )r   r^   rj   r}   dsks        r    #test_dont_concatenate_single_chunksr(    s     	e$$$A			&A
qv,,C  JJLL         r#   c            
        t           j        t           j        fdf} t           j        t           j        fdf}t          t          | |                    }dt	          dd d           fdt	          ddd           fffdt	          dd d           fdt	          ddd           fffdt	          dd d           fdt	          ddd           fffdt	          dd d           fdt	          ddd           fffg}||k    sJ d S )Nr   r   r   r   r   r   r`   r   rS   r
   r<   rP   rQ   r   r   s       r    test_intersect_nanr-  '  s   626"D)J626"F+J":z::;;FeAtT""
#aq!T):):%;	<>eAtT""
#aq!T):):%;	<>eAtT""
#aq!T):):%;	<>eAtT""
#aq!T):):%;	<>	H Xr#   c                 (   t           j        fdf} t           j        fdf}t          t          | |                    }dt	          dd d           fdt	          ddd           fffdt	          dd d           fdt	          ddd           fffg}||k    sJ d S Nrv   rn   r   r   rK   r+  r,  s       r    test_intersect_nan_singler0  5  s    6)U#J6)V$J":z::;;FeAtT""
#aq!T):):%;	<>eAtT""
#aq"d););%<	=?H Xr#   c                 0   t          t          j        gdz            df} t          t          j        gdz            df}t          t	          | |                    }dt          dd d           fdt          ddd           fffdt          dd d           fdt          ddd           fffdt          dd d           fdt          ddd           fffdt          dd d           fdt          ddd           fffdt          dd d           fdt          ddd           fffdt          dd d           fdt          ddd           fffd	t          dd d           fdt          ddd           fffd	t          dd d           fdt          ddd           fffg}||k    sJ d S )
Nr   rv   rn   r   r   rK   r   r   r+   )r:   r`   r   rS   r
   r<   r,  s       r    test_intersect_nan_longr2  A  s   1%%u-J1%%v.J":z::;;FeAtT""
#aq!T):):%;	<>eAtT""
#aq"d););%<	=?eAtT""
#aq!T):):%;	<>eAtT""
#aq"d););%<	=?eAtT""
#aq!T):):%;	<>eAtT""
#aq"d););%<	=?eAtT""
#aq!T):):%;	<>eAtT""
#aq"d););%<	=?	H Xr#   c                    t          j        d          } t          j        d          }t          j                                                            d          }|                     |                    |          d          j        }|	                    d          }t          
                    |j        d                                                   sJ t          
                    |j        d                                                   sJ |j        d         dk    sJ t          j        |d	
          	                    d          }t          ||           d S )Nr   pandasr   rK   r   Nrn   r   r   rn   ))rM   rM   rv   r]   )r   r   r`   ra   rb   standard_normalfrom_pandas	DataFramer   r   isnanr^   rf   rd   re   r   )r   pdr   rj   r   r   s         r     test_rechunk_unknown_from_pandasr<  R  s   		-	.	.B		X	&	&B
)


!
!
1
1(
;
;C
r||C((!,,3AYY~&&F88AHQK  $$&&&&&88FM!$%%))+++++=v%%%%}S):;;;CCNSSHfhr#   c                    t          j        d          } |                     t          j        dd                    j        }|                    d          }t                              |j	        d                   
                                sJ t                              |j	        d                   
                                sJ |j	        d         dk    sJ t          ||           d S )	Nr   r   r   r   r   r   r   r   )r   r   re   rd   r   r   r   r`   r:  r^   rf   r   )r   rj   r   s      r    test_rechunk_unknown_from_arrayr>  `  s    		-	.	.B
bgF6:::;;BAYYy!!F88AHQK  $$&&&&&88FM!$%%))+++++8A;$ar#   z	x, chunksr5  )rM   rK   r   )Nr   r   r6  )r   rK   r   rz   )rK   r   c                
   t          j        d          }|                    |           j        }|                    |          }|                     |          }t          |j        |j                   t          ||           d S Nr   )r   r   re   r   r   assert_chunks_matchr^   r   )rj   r^   r   r}   r   r   s         r    )test_rechunk_with_fully_unknown_dimensionrB  l  su    $ 
	-	.	.B
aAYYvFyy  Hx777fhr#   c                b   t          j        d          }|                    |           j        }t	          j        | |g          }t	          j        | | g          }|                    |          }|                    |          }t          |j        |j                   t          ||           d S r@  )
r   r   re   r   rd   r   r   rA  r^   r   )rj   r^   r   r}   r   xxr   r   s           r    -test_rechunk_with_partially_unknown_dimensionrE    s    $ 
	-	.	.B
aA
1vA	A		BYYvFzz&!!Hx777fhr#   rQ   rn   r   c                6   t          j        d          }t          j        dd          }|                    |          j        }|                    |           }|                    d          }t          |j        |j                   t          ||           d S Nr   rz   )r   r   r   r6  )
r   r   rd   r   re   r   r   rA  r^   r   )rQ   r   rj   r}   r   r   s         r    2test_rechunk_with_fully_unknown_dimension_explicitrH    s     
	-	.	.B
hv...A
aAYYz""Fyy((Hx777fhr#   c                   t          j        d          }t          j        dd          }|                    |          j        }t          j        ||g          }t          j        ||g          }|                    |           }|                    d          }t          |j	        |j	                   t          ||           d S rG  )r   r   rd   r   re   r   r   r   rA  r^   r   )rQ   r   rj   r}   r   rD  r   r   s           r    6test_rechunk_with_partially_unknown_dimension_explicitrJ    s     
	-	.	.B
hv...A
aA
1vA	A		BYYz""Fzz.))Hx777fhr#   c                    t          | |          D ].\  }}t          d t          ||          D                       sJ /d S )Nc              3  \   K   | ]'\  }}t                               |          p||k    V  (d S r   )r`   r:  )r   lrs      r    r!   z&assert_chunks_match.<locals>.<genexpr>  s9      EETQ288A;;(!q&EEEEEEr#   )r;   rf   )leftrightldimrdims       r    rA  rA    s[    $&& F F
dEESt__EEEEEEEEEF Fr#   c                 x   t          j        d          } t          j        dd          }|                     |          j        }t          j        t          d          5  |                    d           d d d            n# 1 swxY w Y   t          j        t          d          5  |                    t          j
        t          j
        t          j
        fdf           d d d            n# 1 swxY w Y   t          j        t          d          5  |                    d	           d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        ||g          }|                    d
ddt          j
        t          j
        fdf           d d d            d S # 1 swxY w Y   d S )Nr   rz   rn   r   zChunks do not addmatch)N)r   r   r   zChunks must be unchanging)rn   rn   r   r+   r   )r   r   rd   r   re   r   r   r   r   r`   r   r   )r   rj   r}   r   s       r    test_rechunk_unknown_raisesrV    s   		-	.	.B
hv...A
aA	z)<	=	=	= % %			#$$$% % % % % % % % % % % % % % % 
z)D	E	E	E 6 6			BFBFBF+V45556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 
z)D	E	E	E $ $			"###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 
z)D	E	E	E 7 7NAq6""			Aq!RVRV,f56667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7sI    BB	B(9C--C14C1D55D9<D9AF//F36F3c                 >   t           j        t           j        fdf} t           j        t           j        fdf}t          | |          }dt          dd d           fgdt          dd d           fggdt          ddd           fgdt          ddd           fggg}||k    sJ d S )Nr*  r   r   r   r   r   r`   r   r   r<   r>   r=   r   r   s       r    test_old_to_new_singlerZ    s    FBFT
"CFBFV
$CS!!F eAtT""
#	$5D$+?+?'@&ABeAq$
 	!QaD(9(9$:#;<H
 Xr#   c                     t           j        fdf} t           j        fdf}t          | |          }dt          dd d           fggdt          ddd           fgdt          ddd           fggg}||k    sJ d S r/  rX  rY  s       r    test_old_to_newr\    s    F9e
CF9f
CS!!FeAtT""
#	$%eAq$
 	!QaT(:(:$;#<=H
 Xr#   c            	        t          t          j        gdz            df} t          t          j        gdz            df}t          | |          }dt	          dd d           fgdt	          dd d           fgdt	          dd d           fgdt	          dd d           fggdt	          ddd           fgdt	          dd	d           fggg}||k    sJ d S )
Nr   rv   rn   r   r   r   r+   r   rK   )r:   r`   r   r   r<   rY  s       r    test_old_to_new_larger^    s    "&A
&C"&A
'CS!!F q$%%&'q$%%&'q$%%&'q$%%&'		
 eAq$
 	!QaT(:(:$;#<=H Xr#   c            	     "   d} d}t          | |          }dt          ddd           fdt          ddd           fdt          ddd           fgdt          ddd           fgdt          ddd           fd	t          ddd           fggg}||k    sJ d S )
NrJ   rL   r   rK   r   r   r   r+   r   )r   r<   rY  s       r    test_old_to_new_knownr`  
  s    
!C
CS!!F q"d##$q%2t*<*<&=5AtCTCT?UVq"d##$%q"d##$q%2t*<*<&=>	
H Xr#   c                     t          j        d          }  | j        dd                              d          }t	          |                                          dk    sJ d S )Nz
dask.array)r   rK   ry   )r   rK   rK   r]   )r   rK   r   r   )r   r   r   r   r   rg   )rd   rj   s     r    test_rechunk_zero_dimrb    s]    		\	*	*B[11199+FFAqyy{{q      r#   c                 |    t          j        dd          } |                     d          }t          | |           d S )N)r0   r   ))r0   )rK   r   r   r   r   r   r]   )r   r+   )rd   r   r   r   r   s     r    test_rechunk_empty_chunksrd    s9    
!<===A			&AaOOOOOr#   c                     t          j        dd          } |                     d          }|                                }t	          |          dk    sJ d S )N   r   r]   r   rK   )rd   r   r   __dask_graph__r   )rj   r}   r'  s      r    $test_rechunk_avoid_needless_chunkingrh  %  sS    
1A			!A




Cs88ur#   zshape,chunks,bs,expected))ry   r   rK   r   )ry   r   rK   r   )ry   ry   rK   r   )rN   r0   rK   )r0   r0   r.   )rN   )r   r   r   r   r.   r   r   r0   r   )r   r   r   r   c                    t          j        | |f          }|                    ddi||j        j        z            }|j        |fk    sJ d S )Nr]   r   r   r   rd   r   r   r   r   r^   )r   r^   bsr   rj   r}   s         r    test_rechunk_auto_1drl  ,  sX     	vi(((A			1f+QW5E0E	FFA8{""""""r#   c                    t          j        dd          } |                     dddd| j        j        z            }|j        d	k    sJ t          j        dd          } |                     d
d| j        j        z            }|j        dk    sJ t          j        dd          } |                     ddid| j        j        z            }|j        d         | j        d         k    sJ |j        d         dk    sJ t          j        dd          } |                     ddid| j        j        z            }|j        d         | j        d         k    sJ |j        d         dk    sJ d S )Nr   r   r]   r   r   r   rN   r   )rN   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   P   )rn  r   r   r   r   r   r   r   rz   ))
r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   rp  rj  r   s     r    test_rechunk_auto_2drq  <  su   
(((A			bV$$rAG<L7L	MMA8)))))
(((A			,ag6F1F	GGA8(((((
&***A			1f+QW5E0E	FFA8A;!(1+%%%%8A;(""""
!CDDDA			1f+QW5E0E	FFA8A;!(1+%%%%8A;/))))))r#   c                    t          j        dd          } |                     dddd| j        j        z            }|j        d         | j        d         k    sJ |j        d	         d
k    sJ |j        d         d
k    sJ d S )N)rN   rN   rN   r   r]   r   r      r   r   r   rz   r   rj  r   s     r    test_rechunk_auto_3drt  P  s    
i111A			f((3AQ;Q	RRA8A;!(1+%%%%8A;(""""8A;(""""""r#   r   ry   r   c                &   t           j                            ddi          5  t          j        | ddfdd          }|                    d          }|j        d| d	z  z  d
d
fk    sJ |                    d          j        |j        k    sJ 	 d d d            n# 1 swxY w Y   t           j                            ddi          5  |                    d          }| dk    r|j        dk    sJ n|j        dk    sJ d d d            n# 1 swxY w Y   t           j                            ddi          5  t          j        | ddfdd          }|                    d          }|j        d| z  ddfk    sJ 	 d d d            d S # 1 swxY w Y   d S )Narray.chunk-size10MiBr   r   r   r   uint8r^   r   r   rv   rK   r  7MiBry   ))r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r   r  r  ))r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r0   r.   r  r  1MiBfloat64r   )j  r~  i  r   configsetrd   r   r   r^   )r   rj   r}   r   s       r    test_rechunk_auto_image_stackr  X  s   	,g6	7	7 4 4GQdOO7KKKIIfxEQ"W-w@@@@@yy  '1833333	4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 
,f5	6	6 E EIIf888CCCCCC8DDDDDE E E E E E E E E E E E E E E 
,f5	6	6 H HGQdOO9MMMIIfxD1HoGGGGGGH H H H H H H H H H H H H H H H H Hs7   A+BB!B7D		DD5AFF
F
c                    t           j                            ddi          5  t          j        ddd          } |                     d          }|j        dk    sJ 	 d d d            n# 1 swxY w Y   t           j                            dd	i          5  |                    d          }|j        d
k    sJ 	 d d d            n# 1 swxY w Y   t           j                            dd	i          5  |                    ddi          }|j        dk    sJ |                    ddi          }|j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nrv  rw  )ry   r   r   rx  ry  rz  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   r   r   r   i  i  r  r   ))dr   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   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   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   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   )r   )
h   r  r  r  r  r  r  r  r  @   r  r  )rj   r}   r   s      r    test_rechunk_downr  m  s2   	,g6	7	7 : :G%oWMMMIIfx999999: : : : : : : : : : : : : : :
 
,f5	6	6 ? ?IIfx>>>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 
,f5	6	6 E EIIq&k""x99999IIq&k""xDDDDDDE E E E E E E E E E E E E E E E E Es6   :A))A-0A-#CC	C	1A	EEEc                     t           j                            ddi          5  t          j        dd          } |                     d          }|j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nrv  1BrK   )r   r]   r   )r  r  r   s     r    test_rechunk_zeror    s    	,d3	4	4 ( (GBt$$$IIfx<'''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   9A))A-0A-c                    t          j        dd          } |                     ddi          j        dk    sJ |                     | j         di          j        dk    sJ t          j        t                    5 }|                     d	di           d d d            n# 1 swxY w Y   d	t          |j	                  v sJ t          j        t                    5 }|                     d
di           d d d            n# 1 swxY w Y   dt          |j	                  v sJ t          j        t                    5 }|                     ddi           d d d            n# 1 swxY w Y   dt          |j	                  v sJ d S )N)r   r+   r   r   r]   r   r   )r   r   r   r   r   r   r   )r   r  )r   r   r   r   blahry   100iz-100)rd   r   r   r^   ndimr   r   	TypeErrorstrvaluer   )rj   infos     r    test_rechunk_bad_keysr    s#   
1%%%A99b!W$(AAAAA99qvgq\"")-LLLLL	y	!	! T			61+               S__$$$$	z	"	" d			3(               C
OO####	z	"	" d			4)               S__$$$$$$s6   :BB"%B"C>>DD:EE"%E"c                    d} t          j        t                              |           d          }|                    dd          }|                    dd          }|j        d         dk    sJ |j        d         d	k    sJ d S )
N   ry   r]   Tr^   balanceFr   ry   ry   rN   n   r  rd   re   r`   r   r   r^   arr_lenrj   balanced
unbalanceds       r    test_balance_basicsr    s    G
bii((555AyyTy22H#u55JQ>1111?1++++++r#   c                 
   d} t          j        t                              |                     }|                    dd          }|                    dd          }|j        d         dk    sJ |j        d         dk    sJ d S )	Nr  ry   Tr  Fr   r  r  r  r  s       r    test_balance_chunks_unchangedr    s    G
bii(())AyyTy22H#u55JQ>1111?1++++++r#   c                    d} t          j        t                              |                     }|                    dd          }|                    dd          }|j        d         dk    sJ |j        d         dk    sJ d	} t          j        t                              |                     }|                    d
d          }|                    d
d          }|j        d         dk    sJ |j        d         dk    sJ d S )N   r   Tr  Fr   )r   r   r+   )r   r   r   r   r0   r+   r   )r+   r+   r   r  r  s       r    test_balance_smallr    s    G
bii(())Ayy4y00H!U33J?1****Q<////G
bii(())Ayy4y00H!U33J?1''''Q9,,,,,,r#   c                    d} d}t          j        t                              |                     }|                    | |z  d          }|                    | |z  d          }|j        d         dk    sJ |j        d         dk    sJ d S )	Nry   r   Tr  Fr   )r  r  r  r  r  r  r  r   )	r   r   r   r   r   r   r   r   r   r  r  n_chunksrj   r  r  s        r    test_balance_n_chunks_sizer    s    GH
bii(())Ayy8 3TyBBH'X"5uEEJ?1!11111Q#3333333r#   c                    d} d}t          j        t                              |                     }t	          j        t          d          5  |                    | |z  d          }d d d            n# 1 swxY w Y   |                    | |z  d          }|j        |j        k    sJ d}|                    | |z  d           d S )	Nry   r   zTry increasing the chunk sizerT  Tr  FrK   )	rd   re   r`   r   r   warnsUserWarningr   r^   r  s        r    test_balance_raisesr    s   GH
bii(())A	k)H	I	I	I G G99Gx$79FFG G G G G G G G G G G G G G G'X"5uEEJ?j/////HIIW($I77777s   A33A7:A7c                 &   d} t          j        t          j                                                            | | f                    }|                    dd          }|                    dd          }|j        dk    sJ |j        dk    sJ d S )	N   r   )ry   ry   Tr  F)ry   ry   rK   r  )i   r  r  rd   re   r`   ra   rb   rc   r   r^   r  rj   r  r  s       r    test_balance_basics_2dr    s    A
bi++--55Aq65BBCCAyy
Dy99H*e<<J @@@@@?6666666r#   c                 2   d} t          j        t          j                                                            | | f                    }|                    dd          }|                    dd          }|j        d| ffk    sJ |j        d| ffk    sJ d S )	Nr  r  )ry   r   Tr  Fr  r  r  r  s       r    "test_balance_2d_negative_dimensionr    s    A
bi++--55Aq65BBCCAyy	4y88H)U;;J! 66666?zA40000000r#   c                 >   d} t          j        t          j                                                            | | f                    }|                    dd          }|                    dd          }|j        |j        k    sJ |j        d         | fk    sJ d S )Nr  r  )10MBr   Tr  Fr   r  r  s       r    test_balance_different_inputsr    s    A
bi++--55Aq65BBCCAyydy;;H,>>J?j/////?1!%%%%%%r#   c                 T   g d} | D ]}t          dd          D ]}t          j        t          j                                                            |                    }|                    t          |          |z  d          }t          |j	        d                   |k    sJ d S )N)i  i  i  i  i  i  i  i	  i  i  i  i%  i'  i-  r   rN   r  Tr  r   )
r   rd   re   r`   ra   rb   rc   r   r   r^   )
array_lensr  nchunksrj   r}   s        r     test_balance_split_into_n_chunksr    s      J"  / /Q|| 	/ 	/Gbi3355==1=EEFFA		Q7!2D	AAAqx{##w.....	// /r#   c                     t          j        dd          } |                     d          }t          j        dd          }|| }} |                     d          }t          ||           d S )N)r   r   r   r]   )r   r   r   r   r   )rd   r   r   r   )ri   r   r   s      r    test_rechunk_with_zeror    so    
v&&&AYY-..Fwv&<===H AxAYYvFfhr#   c            	        ddl m}  d}d}t           | ||                    }dt          ddd           fdt          ddd           ffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           ffdt          ddd           fdt          ddd           fffg}||k    sJ d S )Nr   r
   r   r   )r*  r  r   r   r   dask.array.rechunkr
   rS   r<   r
   r>   r=   r   r   s        r    "test_intersect_chunks_with_nonzeror    s   333333
C
C""3,,--F q!T""#aq!T):):%;<q!T""#aq!T):):%;<	

 q!T""#aq!T):):%;<q!T""#aq!T):):%;<	
	H Xr#   c                 .
   ddl m}  d}d}t           | ||                    }dt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffg}||k    sJ d}d}t           | ||                    }dt          ddd           fdt          ddd           ffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           ffdt          ddd           fdt          ddd           fffg}||k    sJ d}d	}t           | ||                    }dt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffg
}||k    sJ d}d
}t           | ||                    }dt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffdt          ddd           fdt          ddd           fffg}||k    sJ d S )Nr   r  r  )r  r  r   r   r   r+   ))r   r   r   r   r   r  ))r   r   r   r   r  r  r  s        r    test_intersect_chunks_with_zeror  0  s`   333333
C
 C""3,,--F eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;	H X
 C
C""3,,--F q!T""#aq!T):):%;<q!T""#aq!T):):%;<	

 q!T""#aq!T):):%;<q!T""#aq!T):):%;<	
	H X
C
#C""3,,--FeAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;H X
C
 C""3,,--FeAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;eAq$
 1eAq$&7&7"8	9;	H Xr#   c                    ddl m}  d}d} | ||          }dt          dd          fgdt          dd          fgdt          dd          fggg}||k    sJ d}d} | ||          }dt          dd          fgdt          dd          fggg}||k    sJ d}d	} | ||          }dt          dd          fgd
t          dd          fgd
t          dd
          fgd
t          d
d          fggg}||k    sJ d S )Nr   )r   )r   ))r   r   r   r   r   )r   )r   ))r   r   r   r   r   )r  r   r<   )r   r>   r=   r   r   s        r    test_old_to_new_with_zeror  x  sa   ------
C
CZS!!FeAqkk"#q%1++&6%71eAqkk:J9KLMHX
C
CZS!!FeAqkk"#q%1++&6%789HX
C
CZS!!FeAqkk
	q%1++./1eAqkk2B1Cq%PQST++FVEWXH Xr#   )r   r   r   )l
__future__r   r  	itertoolsr   r   r   r`   mathr   
dask.arrayr   rd   r  r   r   r   r	   r
   r   r   r   r   r   dask.array.utilsr   
dask.utilsr   rG   rV   rZ   rl   rr   rw   r~   r   r   r   r   r   r   r   r   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	  r  r  r  r  r(  r-  r0  r2  r<  r>  r   rB  rE  r   r   rH  rJ  rA  rV  rZ  r\  r^  r`  rb  rd  rh  rl  rq  rt  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r2   r#   r    <module>r     s.
   " " " " " "        V!!                                ' & & & & &      B B BJ
 
 
  % % %% % %% % %$ $ $% % %% % %	) 	) 	)3 3 3
3 3 3$< < <  . . .   	HBHRLL("(B8,,hbhrd|.D.DE   
          	 	 	           C C C% % %P     
B2 B2 B2J= = =7 7 7<        dD\FF#3ff5EF     	 	 	  "     	 	 	 	x	1	1	19=	x	1	1	1Aq6:	x	1	1	1>B	z'	2	2	2I>	z'	2	2	2QF;	z'	2	2	2NC	x	1	1	19=	x	1	1	1Aq6:	x	1	1	1>B	x	0	0	0)<	x	0	0	01a&9	x	0	0	0.A "   # "  	x	1	1	19=	x	1	1	1Aq6:	x	1	1	1>B	z'	2	2	2I>	z'	2	2	2QF;	z'	2	2	2NC	x	1	1	19=	x	1	1	1Aq6:	x	1	1	1>B	x	0	0	0)<	x	0	0	01a&9	x	0	0	0.A "   # "  
&"&	6"
(DH	v&
%,,e	%v.       
Q	(
Q$(	#V,
QeeeEll	+V4 	  	  	 F F F
7 7 7&
 
 
	 	 	  "  ! ! !       	 	# #	 	#* * *(# # # sDk**H H +*H(E E E$( ( (% % %*, , ,, , ,- - -$4 4 48 8 87 7 71 1 1& & &/ / /4       &E E EP    r#   