
    >ieR                    0   d dl mZ d dlZd dlZd dlmZ d dlmZ	 d dl
mZ d dlmZmZmZmZmZ d dlmZ d Zd Zd	 Zd
 Zd Zd Zd Zd Zej                            dddg          d             Zej                            dddg          d             Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*ej                            de+e+fg          d              Z,d! Z-d" Z.d# Z/d$ Z0d% Z1d& Z2d' Z3d( Z4d) Z5d* Z6d+ Z7ej                            d,ddg          d-             Z8d. Z9d/ Z:d0 Z;ej                            d1g d2          d3             Z<ej                            d4d d5gd6d7gg          d8             Z=d9 Z>d: Z?d; Z@d< ZAd= ZBd> ZCd? ZDdS )@    )annotationsN)assert_equal)Array)_parse_gufunc_signature_validate_normalize_axesapply_gufunc	as_gufuncgufunc)	assert_eqc                    t          t          d          dgdf           t          t          d          dgdf           t          t          d          dgdf           t          t          d          ddgdf           t          t          d	          dgdf           t          t          d
          dgddgf           t          t          d          g ddf           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            n# 1 swxY w Y   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 )Nz(x)->()x z	(x,y)->()r   yz  (x, y) ->()z(x),(y)->())r   z(x)->(y)z(x)->(y),()z(),(a,b,c),(d)->(d,e))r   )abc)d)r   ez
(x)(y)->()z	(x),(y)->z
((x))->(x)z	(x)->(x),)r   r   pytestraises
ValueErrorr       <lib/python3.11/site-packages/dask/array/tests/test_gufunc.pytest__parse_gufunc_signaturer      s   (33vh^DDD(55b7IJJJ(99ZL";MNNN(7766:JB9OPPP(44x6HIII(776(VRL9QRRR 788	&	&	&
3   
z	"	" . .---. . . . . . . . . . . . . . .	z	"	" - -,,,- - - - - - - - - - - - - - -	z	"	" . .---. . . . . . . . . . . . . . .	z	"	" - -,,,- - - - - - - - - - - - - - - - - -sH   >DD!D>EE!E>FF!F>GG"Gc                    d } t           j                                                            dd          }t	          j        t                    5  t          | d|d           d d d            n# 1 swxY w Y   t          | d|dg           t          | d|dg           t          | d|dt                      g           t          | d|dt                      g           t	          j        t                    5  t          | d|d	g           d d d            n# 1 swxY w Y   t	          j        t                    5  t          | d|ddg           d d d            d S # 1 swxY w Y   d S )
Nc                .    t          j        | d          S Naxisnpmeanr   s    r   fooz7test_apply_gufunc_axes_input_validation_01.<locals>.foo+       wqr""""r         r*   sizechunks(i)->()r   )axesr   r      )	darandomdefault_rngnormalr   r   r   r   tuple)r&   r   s     r   *test_apply_gufunc_axes_input_validation_01r8   *   s6   # # # 		&&HR&@@A	z	"	" 0 0S)QQ////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i!----i$0000i!UWW6666i$9999	z	"	" 7 7S)QfX66667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 
z	"	" 5 5S)QaV44445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s6   A00A47A4>DD#&D#E&&E*-E*c            	     P   d } t          j        t          j        g d          dd          }t          j        t          j        g d          dd          }t	          j        t                    5  t          | d||d|j        	           d d d            d S # 1 swxY w Y   d S )
Nc                    | |z   S Nr   r   s     r   addz3test_apply_gufunc_axes_args_validation.<locals>.add@       1ur   r2         r?   r   r-   namer   	(),()->()r   output_dtypes	r3   
from_arrayr$   arrayr   r   r   r   dtyper<   r   r   s      r   &test_apply_gufunc_axes_args_validationrK   ?   s       	bhyyy))!#>>>A
bhyyy))!#>>>A	z	"	" G GS+q!QagFFFFG G G G G G G G G G G G G G G G G Gs   3BB"Bc                    t          j        t                    5  t          dgd ddgd           d d d            n# 1 swxY w Y   t          j        t                    5  t          ddgd ddgd           d d d            n# 1 swxY w Y   t          j        t                    5  t          ddgd ddgd           d d d            n# 1 swxY w Y   t          ddgd ddgd          \  } }| dgk    sJ |dgk    sJ d S )Nr2   r   FijrP   r   r0   )r   r   r   r   rO   os     r    test__validate_normalize_axes_01rT   I   s   	z	"	" N N &4fMMMN N N N N N N N N N N N N N N 
z	"	" L L !QuzlFKKKL L L L L L L L L L L L L L L 
z	"	" O O $D%*vNNNO O O O O O O O O O O O O O O $VQKuzlFSSDAq====;;;;;;s3   <A A  BB
B'C

CCc                    t          d ddddgd          \  } }| ddgk    sJ |dgk    sJ t          d dddgd          \  } }| dgk    sJ |dgk    sJ t          d ddddgd          \  } }| ddgk    sJ |dgk    sJ t          j        t                    5  t          d ddddgd           d d d            n# 1 swxY w Y   t          j        t                    5  t          d ddddgd           d d d            n# 1 swxY w Y   t          j        t                    5  t          d ddddgd           d d d            d S # 1 swxY w Y   d S )Nr   FrO   r   r0   TrQ   r   r   r   r   rR   s     r    test__validate_normalize_axes_02rX   X   s   #D!UVV4DbIIDAqt9999#D!UVHfEEDAq;;;;;;;;#D!TFF3CRHHDAqt;;;;	z	"	" J J tUVV4DbIIIJ J J J J J J J J J J J J J J 
z	"	" G G q%&&1A2FFFG G G G G G G G G G G G G G G 
z	"	" K K q%&&1A6JJJK K K K K K K K K K K K K K K K K Ks6   B;;B?B?DDD%EEEc                    t          d dddgd          \  } }| dgk    sJ |dgk    sJ t          j        t                    5  t          d dddgd           d d d            n# 1 swxY w Y   t          j        t                    5  t          ddgd ddgd           d d d            n# 1 swxY w Y   t          j        t                    5  t          ddgd dddgd           d d d            d S # 1 swxY w Y   d S )	Nr   TrV   r   r0   r1   rN   rQ   rW   rR   s     r    test__validate_normalize_axes_03rZ   o   s   #D!TF8R@@DAq;;;;;;;;	z	"	" B B q$&AAAB B B B B B B B B B B B B B B 
z	"	" Y Y &&!14
|ZXXXY Y Y Y Y Y Y Y Y Y Y Y Y Y Y 
z	"	" Q Q $tTFF;KRPPPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Qs6   A$$A(+A(B++B/2B/C44C8;C8c                 ^   d } t           j                                                            dd          }t	          | d|d|j        fz            }|\  }}t          |t                    sJ |                                j	        dk    sJ |                                j	        dk    sJ d S )	Nc                Z    t          j        | d          t          j        | d          fS r   r$   r%   stdr   s    r   statsz#test_apply_gufunc_01.<locals>.stats   +    wqr"""BF12$6$6$666r   
   r)   r*      rd   r*   r+   
(i)->(),()r?   rD   rb   r)   )
r3   r4   r5   r6   r   rI   
isinstancer7   computeshape)r_   r   resultr%   r^   s        r   test_apply_gufunc_01rk   ~   s    7 7 7 		&&L&LLA%qQWJOOOFID#fe$$$$$<<>>8++++;;==(******r   c                 .   d } t           j                                                            dd          }t	          | d|d|j        fz  d          \  }}|                                j        d	k    sJ |                                j        d	k    sJ d S )
Nc                Z    t          j        | d          t          j        | d          fS r   r]   r   s    r   r_   z$test_apply_gufunc_01b.<locals>.stats   r`   r   ra   rd   r+   re   r?   TrE   allow_rechunkrf   r3   r4   r5   r6   r   rI   rh   ri   )r_   r   r%   r^   s       r   test_apply_gufunc_01brq      s    7 7 7 		&&L&CCA|Qa17*nD  ID# <<>>8++++;;==(******r   	vectorizeFTc                    d }t           j                                                            dd          }t	          |d|d|           }|                                j        dk    sJ d S )	Nc                .    t          j        | d          S r   r#   r   s    r   r_   z5test_apply_gufunc_output_dtypes_string.<locals>.stats   r'   r   ra   rc   r+   r.   frE   rr   rf   r3   r4   r5   r6   r   rh   ri   )rr   r_   r   r%   s       r   &test_apply_gufunc_output_dtypes_stringrx      ss    # # # 		&&L&LLAy!3)TTTD<<>>8++++++r   c                \   d }t           j                                                            dd          }t	          |d|d|           \  }}}|                                j        dk    sJ |                                j        dk    sJ |                                j        dk    sJ d S )	Nc                    t          j        | d          t          j        | d          t          j        | d          fS r   )r$   r%   r^   minr   s    r   r_   zBtest_apply_gufunc_output_dtypes_string_many_outputs.<locals>.stats   s<    wqr"""BF12$6$6$6qr8J8J8JJJr   ra   rc   r+   z(i)->(),(),())ru   ru   ru   rv   rf   rw   )rr   r_   r   r%   r^   r{   s         r   3test_apply_gufunc_output_dtypes_string_many_outputsr|      s    K K K 		&&L&LLA!I  ND#s <<>>8++++;;==(****;;==(******r   c                     d } t          | ddt          d          }t          |t          j        dt                               d S )Nc                    |dk    sJ | S )Nr?   r   )r   bars     r   r&   z5test_apply_gufunc_pass_additional_kwargs.<locals>.foo   s    axxxxr   ()->()g      ?r?   )rE   r   rI   )r   floatr   r$   rH   )r&   rets     r   (test_apply_gufunc_pass_additional_kwargsr      sP       sHcA
F
F
FCc28Cu---.....r   c                    d } t           j                                        }|                    dd          }|                    dd          }t	          | d|||j                  }|                                j        dk    sJ d S )	Nc                .    t          j        d| |          S )Nz...i,...j->...ijr$   einsumr   s     r   outer_productz+test_apply_gufunc_02.<locals>.outer_product   s    y+Q222r   r(   )rd   r*   r+   rb   r2   (   (i),(j)->(i,j)rD   rb   r)   r*   r   rp   )r   rngr   r   r   s        r   test_apply_gufunc_02r      s    3 3 3 )


!
!C


11A

K
88A]$4a!'RRRA99;; 0000000r   c                 n    d } t          | dt                    }|                                dk    sJ d S )Nc                     dS )Nr2   r   r   r   r   r&   z,test_apply_gufunc_scalar_output.<locals>.foo   s    qr   z->()rD   r2   r   intrh   r&   r   s     r   test_apply_gufunc_scalar_outputr      sF       	S&444A99;;!r   c                 2   d } t          j        t          j        g d          dd          }t          j        t          j        g d          dd          }t	          | d|||j                  }t          |t          j        g d	                     d S )
Nc                    | |z   S r;   r   r   s     r   r<   z*test_apply_gufunc_elemwise_01.<locals>.add   r=   r   r>   r?   r   rA   r   rC   rD   r?         r3   rG   r$   rH   r   rI   r   )r<   r   r   zs       r   test_apply_gufunc_elemwise_01r      s       	bhyyy))!#>>>A
bhyyy))!#>>>AS+q!17CCCAa)))$$%%%%%r   c                 N   d } t          j        t          j        g d          dd          }t          j        t          j        g d          dd          }t	          j        t                    5  t          | d|||j        	           d d d            d S # 1 swxY w Y   d S )
Nc                    | |z   S r;   r   r   s     r   r<   z+test_apply_gufunc_elemwise_01b.<locals>.add   r=   r   r>   r?   r   rA   r2   r   rC   rD   rF   rJ   s      r   test_apply_gufunc_elemwise_01br      s       	bhyyy))!#>>>A
bhyyy))!#>>>A	z	"	" D DS+q!17CCCCD D D D D D D D D D D D D D D D D Ds   3BB!Bc                    d } t          j        t          j        g d          dd          }t          j        t          j        g d          dd          }t	          | d||d|j        fz            \  }}t          |t          j        g d	                     t          |t          j        g d
                     d S )Nc                ,    | j         dv sJ | |z   | |z  fS )Nr?   r2   ri   r   s     r   addmulz-test_apply_gufunc_elemwise_02.<locals>.addmul   s'    w,&&&&1ua!e|r   r>   r?   r   rA   r   (),()->(),()rD   r   )r2   r   	   r   )r   r   r   z1z2s        r   test_apply_gufunc_elemwise_02r      s       	bhyyy))!#>>>A
bhyyy))!#>>>A&.!Qa17*nUUUFBb"(999%%&&&b"(999%%&&&&&r   c                     d } t          | dt          ddi          }|j        dk    sJ t          |t	          j        g d                     d S )Nc                 <    t          j        g dt                    S )Nr>   r   )r$   rH   r   r   r   r   r&   z&test_gufunc_vector_output.<locals>.foo   s    x			----r   z->(i_0)i_0r@   rE   output_sizesr@   r>   )r   r   r-   r   r$   rH   r   s     r   test_gufunc_vector_outputr      sd    . . . 	S)3eQZPPPA8wa)))$$%%%%%r   c                     d } t          j        t          j        g d          dd          }t	          | d|t
                    }|j        dk    sJ t          |t          j        g d	                     d S )
Nc                "    | j         dv sJ d| z  S )Nr   r?   r   r   s    r   r&   z,test_apply_gufunc_elemwise_loop.<locals>.foo   s    w,&&&&1ur   r>   r?   r   rA   r   rD   )r?   r2   r   r3   rG   r$   rH   r   r   r-   r   r&   r   r   s      r   test_apply_gufunc_elemwise_loopr      s       	bhyyy))!#>>>AS(AS999A8y    a)))$$%%%%%r   c                     d } t          j        t          j        g d          dd          }t	          | d|t
                    }|j        dk    sJ t          |t          j        g d	                     d S )
Nc                &    | j         dk    sJ d| z  S )Nr   r?   r   r   s    r   r&   z,test_apply_gufunc_elemwise_core.<locals>.foo   s    w$1ur   r>   r@   r   rA   (i)->(i)rD   r   r   r   r   s      r   test_apply_gufunc_elemwise_corer      s       	bhyyy))!#>>>AS*as;;;A8wa)))$$%%%%%r   c                     d } t          | dt          t          f          \  }}|                                dk    sJ |                                dk    sJ d S )Nc                     dS )N)r2   r?   r   r   r   r   r&   z0test_apply_gufunc_two_scalar_output.<locals>.foo  s    tr   z->(),()rD   r2   r?   r   r&   r   r   s      r   #test_apply_gufunc_two_scalar_outputr     sg       YsCjAAADAq99;;!99;;!r   c                     d } t          | dt          t          fddd          \  }}|                                dk    sJ |j        dk    sJ t          |t          j        d	t          
                     d S )Nc                 <    dt          j        dt                    fS )Nr2   r?   r@   r   )r$   onesr   r   r   r   r&   z0test_apply_gufunc_two_mixed_outputs.<locals>.foo  s    "'&.....r   z
->(),(i,j)r?   r@   rN   r   r2   )r   r   r   r   )r   r   r   rh   r-   r   r$   r   r   s      r   #test_apply_gufunc_two_mixed_outputsr     s    / / / \#u!RSDTDT  DAq 99;;!8|####au---.....r   rE   c                    fd}t           j                                                            d          }|                    t
                    t          |d||           }t          |           d S )Nc                    S r;   r   r   s    r   r&   z,test_apply_gufunc_output_dtypes.<locals>.foo)  s    r   rb   r   rD   )r$   r4   r5   standard_normalastyper   r   r   )rE   r&   r   dyr   s       @r   test_apply_gufunc_output_dtypesr   '  sz         		//33A	A	c8Qm	D	D	DBar   c                    d } t          j        ddt                    }t          j        ddt                    }t          | d||t                    }t	          |dt          j        d	t          
          z             d S )Nc                .    t          j        d| |          S )Nz...ij,...jk->ikr   r   s     r   r&   z#test_gufunc_two_inputs.<locals>.foo4  s    y*Aq111r   r   d   r-   rI   )r@   r   (i,j),(j,k)->(i,k)rD   r@   )r?   r   r   )r3   r   r   r   r   r$   r&   r   r   r   s       r   test_gufunc_two_inputsr   3  s    2 2 2 	s#...A
s#...AS.1CHHHAaRWV3////00000r   c                    d } t          j        dt                    }t          j        ddt                    }t	          | d||t                    }t          |d	t          j        d
t                    z             d S )Nc                    | |z   S r;   r   r   s     r   r&   z%test_gufunc_mixed_inputs.<locals>.foo>  r=   r   r   r   )r2      r   r   rC   rD   r?   )r?   r   )r$   r   r   r3   r   r   r   s       r   test_gufunc_mixed_inputsr   =  s       	c"""A
vS111AS+q!3???AaRWV3////00000r   c                     d } t          j        ddt                    }t          j        dt                    }t	          | d||d	          }t          |t          j        d
dt                               d S )Nc                4    | |z                        d          S Nr2   r!   sumr   s     r   r&   z/test_gufunc_mixed_inputs_vectorize.<locals>.fooH      A{{{"""r   r   r@   rd   r?   r@   rd   r   rd   r   z(m,n),(n)->(m)Trr   r   r@   rb   )r3   r   r   r$   r   r   fullr   s       r   "test_gufunc_mixed_inputs_vectorizer   G  s}    # # # 		)3777A
AS*AqDAAAAa3///00000r   c                    d } t          j        ddt                    }t          j        dt                    }t	          | d||d	          }t          |t          j        d
dt                               t           j                                                            d          }t          j	        dt          d          d             } ||           d S )Nc                4    | |z                        d          S r   r   r   s     r   r&   z-test_gufunc_vectorize_whitespace.<locals>.fooX  r   r   r   r   r   rd   r   z(m, n),(n)->(m)Tr   r   rb   )r   rd   rd   z(n, n)->(n, n))	signaturerE   rr   c                @    t           j                            |           S r;   )r$   linalginvr   s    r   gufooz/test_gufunc_vectorize_whitespace.<locals>.gufooc  s    y}}Qr   )r3   r   r   r$   r   r   r   r4   r5   r	   r   )r&   r   r   r   r   s        r    test_gufunc_vectorize_whitespacer   R  s    # # # 		)3777A
AS+QTBBBAa3///000
	&&y11A\,ETRRR    SR 
 
E!HHHHHr   c                 ,   t           j                                                            dd          } d }t	          |dddt
          d	          } ||           }|                                }t          |t                    sJ |j	        d
k    sJ d S )Nrb   rd   r?   rd   r+   c                .    t          j        | d          S r   r#   r   s    r   r&   ztest_gufunc.<locals>.fooo  r'   r   r.   r    FT)r   r"   keepdimsrE   rr   rb   )
r3   r4   r5   r6   r
   r   rh   rg   r   ri   )r   r&   r   r   valys        r   test_gufuncr   l  s    
	&&GF&CCA# # #   E 	aA99;;Da:r   c                 6   t           j                                                            dd          } t	          dddt
          d          d	             } ||           }|                                }t          |t                    sJ |j	        d
k    sJ d S )Nr   r   r+   r.   r    FT)r"   r   rE   rr   c                .    t          j        | d          S r   r#   r   s    r   r&   ztest_as_gufunc.<locals>.foo  s    wqr""""r   r   )
r3   r4   r5   r6   r	   r   rh   rg   r   ri   )r   r&   r   r   s       r   test_as_gufuncr     s    
	&&GF&CCAyrERVWWW# # XW# 	AA99;;Da:r   c                    d } t           j                                        }|                    dd          }|                    dd          }t	          | d||dt
          fz  d	
          \  }}}|                                j        dk    sJ |                                j        dk    sJ |                                j        dk    sJ d S )Nc                    t          | j                  dk    sJ t          |j                  dk    sJ t          j        | |          \  } }| || |z  fS )Nr?   r@   )lenri   r$   broadcast_arraysr   s     r   r&   z4test_apply_gufunc_broadcasting_loopdims.<locals>.foo  sZ    17||q    17||q    "1a((1!QU{r   rb   r*   )r   r*   r+   )r)   r2   r*   )r@   r2   r*   z(i),(i)->(i),(i),(i)r@   Frv   )r)   rb   r*   )r3   r4   r5   r6   r   r   rh   ri   )r&   r   r   r   r   r   r   s          r   'test_apply_gufunc_broadcasting_loopdimsr     s       )


!
!C


11A

J
77A#QeXQV  GAq! 99;;,,,,99;;,,,,99;;,,,,,,r   c            	     j   d } t           j                                        }|                    dd          }|                    dd          }t	          j        t                    5 }t          | d||t          d           d d d            n# 1 swxY w Y   d	t          |j
                  v sJ d S )
Nc                    | |z   S r;   r   r   s     r   r&   z2test_apply_gufunc_check_same_dimsizes.<locals>.foo  r=   r   r   r   r+   )r   rC   Trn   zdifferent lengths in arraysr3   r4   r5   r6   r   r   r   r   r   strvaluer&   r   r   r   excinfos        r   %test_apply_gufunc_check_same_dimsizesr    s       )


!
!C

T
**A

T
**A	z	"	" VgS+q!5PTUUUUV V V V V V V V V V V V V V V(C,>,>>>>>>>s   )BBBc                 @   d } t           j                                                            dd          }t	          j        t                    5 }t          j        | d|t          d           d d d            n# 1 swxY w Y   dt          |j
                  v sJ d S )	Nc                .    t          j        | d          S r   )r$   r   r   s    r   r&   z6test_apply_gufunc_check_coredim_chunksize.<locals>.foo  s    vab!!!!r   r   r@   r+   r.   Frn   zconsists of multiple chunksr   )r&   r   r  s      r   )test_apply_gufunc_check_coredim_chunksizer	    s    " " " 		&&D&;;A	z	"	" Ug
YeTTTTU U U U U U U U U U U U U U U(C,>,>>>>>>>s   A;;A?A?c            	     t   d } t           j                                        }|                    dd          }|                    dd          }t	          j        t                    5 }t          j        | d||t          d           d d d            n# 1 swxY w Y   d	t          |j
                  v sJ d S )
Nc                    | |z   S r;   r   r   s     r   r&   z<test_apply_gufunc_check_inhomogeneous_chunksize.<locals>.foo  r=   r   r  ))r?   r?   r?   r?   r+   ))r?   r@   r@   rC   Frn   z with different chunksize presentr   r  s        r   /test_apply_gufunc_check_inhomogeneous_chunksizer    s       )


!
!C

_
55A

\
22A	z	"	" 
g
a%u	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 .W]1C1CCCCCCCs   ) BBBc            	        t          j        d                              d          } t          j        d          }t          j        | d          }t          j        |d          }d }t          |d||d          } |||d          }t          ||           t          |d||dd	
          } |||dd	
          }t          ||           t          |d||dd	d	          } |||dd	
          }t          ||           d }t          j        t                    5 }t          |d|           d d d            n# 1 swxY w Y   t          |j                  }|                    d          sJ d|v sJ d|v sJ d }t          |d||          \  }	}
t          |	||z              t          |
||z
             d S )N2   )rd   rb   rb   rd   r-   c                x    |                     dd          }| t          |          z                       |          S )Ncasti8)popr   r   )r   argskwargsr  s       r   r&   z*test_apply_gufunc_infer_dtype.<locals>.foo  s3    zz&$''CII%%d+++r   z(),(),()->()r2   f8)r  )r  rE   c                     t          d          )NWoops)RuntimeErrorr   s    r   r&   z*test_apply_gufunc_infer_dtype.<locals>.foo  s    7###r   r   z`dtype` inference failedz#Please specify the dtype explicitlyr  c                    | |z   | |z
  fS r;   r   r   s     r   r&   z*test_apply_gufunc_infer_dtype.<locals>.foo  s    1ua!e|r   r   )r$   arangereshaper3   rG   r   r   r   r   r   r  r  
startswith)r   r   dxr   r&   dzr   r   msgz0r   s              r   test_apply_gufunc_infer_dtyper"    sB   
	"g&&A
	"A	q	#	#	#B	q	#	#	#B, , , 
c>2r1	5	5BBAAb!	c>2r14	@	@	@BBAD!!!Ab!	c>2r14t	T	T	TBBAD!!!Ab!$ $ $ 
z	"	" (aS(B'''( ( ( ( ( ( ( ( ( ( ( ( ( ( (
ag,,C>>4555550C7777S       #~r266FBb"r'b"r's    D>>EEr   c                   d }t           j                                                            d          }t	          j        |d          }t          j        |d|           }t          |d|d| d	          }t          ||           d S )
Nc                .    t          j        | d          S r   r$   medianr   s    r   mymedianz+test_apply_gufunc_axis_01.<locals>.mymedian      y$$$$r   r   r?   r  r   r"   r   r.   Tr"   r   ro   	r$   r4   r5   r   r3   rG   r&  r   r   )r   r'  r   da_mdms         r   test_apply_gufunc_axis_01r/    s    % % % 		//88A
-!
$
$
$C
	!!h///A	)Sq84
 
 
B ar   c                 $   d } t           j                                                            d          }t	          j        |d          }t           j                            |d          }t          | d|dd	          }t          ||           d S )
Nc                D    t           j                            | d          S r   )r$   fftr   s    r   myfftz(test_apply_gufunc_axis_02.<locals>.myfft  s    vzz!"z%%%r   r   r?   r  r   r!   r   Tr"   ro   )	r$   r4   r5   r   r3   rG   r2  r   r   )r3  r   r,  r-  r.  s        r   test_apply_gufunc_axis_02r5    s    & & & 		//88A
-!
$
$
$C


11
A	eZ1D	I	I	IBar   c                     dd} t           j                                                            d          }t	          j        |d          } | |d          }t          | d	|dd
          }t          ||           d S )Nrb   r    c                    t           j                            | |          }d||| <   t           j                            ||          }t          j        |          S )Nr!   r   )r$   r2  ifftreal)r   cnr"   r   nxs        r   myfilterz,test_apply_gufunc_axis_02b.<locals>.myfilter  sM    FJJqtJ$$"bS&	V[[[&&wr{{r   r@   r   r   r?   r  r2   r!   r   Tr4  )rb   r    )r$   r4   r5   r   r3   rG   r   r   )r<  r   r,  r-  r.  s        r   test_apply_gufunc_axis_02br>    s        		//	::A
-!
$
$
$CA	h
Cat	L	L	LBar   c                    d } t           j                                                            d          }t	          j        |d          }t          j        |d          }t          | d|ddd	id
          }t          ||           d S )Nc                .    t          j        | d          S r   )r$   diffr   s    r   mydiffz)test_apply_gufunc_axis_03.<locals>.mydiff  r'   r   r=  r?   r  r2   r!   r   rO   rd   T)r"   r   ro   )	r$   r4   r5   r   r3   rG   rA  r   r   )rB  r   r,  r-  r.  s        r   test_apply_gufunc_axis_03rC    s    # # # 		//	::A
-!
$
$
$C
A	
CasAhd
 
 
B ar   r"   )r    Nc                   d }t           j                                                            d          }t	          j        |d          }t          j        || sdn| d          }t          |d|| dd	          }t          ||           d S )
Nc                .    t          j        | d          S r   r%  r   s    r   r'  z1test_apply_gufunc_axis_keepdims.<locals>.mymedian,  r(  r   r   r?   r  r    Tr)  r.   r*  r+  )r"   r'  r   r,  r-  r.  s         r   test_apply_gufunc_axis_keepdimsrG  *  s    % % % 		//88A
-!
$
$
$C
	!D2""dTBBBA	)Std$
 
 
B ar   r/   r2   r0   r   c                   d }t           j                                        }|                    d          }|                    d          }t	          j        |d          }t	          j        |d          }t          j        |d          t          j        |d          z  }t          |d	||| d
          }t          ||           d S )Nc                \    t          j        | d          t          j        |d          z  S r   )r$   r^   r%   r   s     r   mystatsz*test_apply_gufunc_axes_01.<locals>.mystats;  s+    vab!!!BGAB$7$7$777r   r   )rd   r   r?   r  r   r!   r2   z(i),(j)->()Tr/   ro   )
r$   r4   r5   r   r3   rG   r^   r%   r   r   )	r/   rJ  r   r   r   r,  db_r-  r.  s	            r   test_apply_gufunc_axes_01rM  9  s    8 8 8 )


!
!CG$$AF##A
-!
$
$
$C
-!
$
$
$C
qqBGAA....A	g}c3TQU	V	V	VBar   c                 n   d } t           j                                        }|                    d          }|                    d          }t	          j        |d          }t	          j        |d          }t          j        d||          }t          | d||g d	d
          }t          ||           d S )Nc                .    t          j        d| |          S )Nz...ij,...jk->...ikr   r   s     r   matmulz)test_apply_gufunc_axes_02.<locals>.matmulJ  s    y-q!444r   )r@   r?   r2   )r@      rd   r?   r  r@   zjiu,juk->uikr   )rM   )r   r    )rD  r    TrK  )	r$   r4   r5   r   r3   rG   r   r   r   )rP  r   r   r   r,  dbr-  r.  s           r   test_apply_gufunc_axes_02rS  I  s    5 5 5 )


!
!CI&&AI&&A
-!
$
$
$C	q	#	#	#B
	.!Q''A	
(((
 
 
B ar   c                 
   t           j                                        } |                     dd          }|                     dd          }d }t	          |d||d	          }|                                j        d
k    sJ d S )Nr(   r   r+   r   )rd   r2   r   c                .    t          j        d| |          S )Nzi,j->ijr   r   s     r   r   z?test_apply_gufunc_axes_two_kept_coredims.<locals>.outer_producte  s    yAq)))r   r   Tr   r   rw   )r   r   r   r   r   s        r   (test_apply_gufunc_axes_two_kept_coredimsrV  `  s    
)


!
!C


22A

J
77A* * * 	]$4adKKKA99;; 0000000r   c                    t          j        d          } |                     | j        d d          | j        d d          | j        d d          fgd          d             }t          j                                        }|                    dd          }|                    dd          }||z   } |||d          }t          ||           d S )	Nnumbaz(n),(n)->(n)c                h    t          | j        d                   D ]}| |         ||         z   ||<   d S )Nr   rangeri   )r   r   resrO   s       r   gz)test_apply_gufunc_via_numba_01.<locals>.go  sB     qwqz"" 	! 	!AqTAaD[CFF	! 	!r   r(   r*   r+   r   r!   )	r   importorskipguvectorizefloat64r3   r4   r5   r6   r   )rX  r]  r   r   r   r   r   s          r   test_apply_gufunc_via_numba_01ra  l  s    ((E

-
EM!!!,emAAA.>	?@. ! ! ! )


!
!C


,,A


,,A	AA	!QQAaOOOOOr   c                 v   t          j        d          } |                     | j        d d          | j        d d          fgd          d             }t          j                                                            dd          }|                    dd	          } ||dd	          }t          ||           d S )
NrX  z(n)->()c                v    d|d<   t          | j        d                   D ]}|dxx         | |         z  cc<   d S )Ng        r   rZ  )r   r\  rO   s      r   mysumz-test_apply_gufunc_via_numba_02.<locals>.mysum  sM    Aqwqz"" 	 	AFFFadNFFFF	 	r   r(   r*   r+   r   Tr)  )
r   r^  r_  r`  r3   r4   r5   r6   r   r   )rX  rd  r   r   r   s        r   test_apply_gufunc_via_numba_02re    s    ((E
qqq)5=+;<=yII  JI
 		&&HR&@@A	1t$$Aaa$'''AaOOOOOr   c                    t          j        d          } d }t          j                                                            dd          }|                    | j        j                  }t          |d|d|j
        fz            \  }}t          |j        | j                  sJ t          |j        | j                  sJ t          |j        | j                  sJ t          ||           t          ||           d S )	Nsparsec                Z    t          j        | d          t          j        | d          fS r   )r$   r   r%   r   s    r   r_   z&test_preserve_meta_type.<locals>.stats  s+    vab!!!2712#6#6#666r   ra   rc   r+   re   r?   rD   )r   r^  r3   r4   r5   r6   
map_blocksCOO
from_numpyr   rI   rg   _metar   )rg  r_   r   r   r%   s        r   test_preserve_meta_typerm    s     **F7 7 7 		&&L&LLA	VZ*++AUL!1z>RRRICagvz*****ci,,,,,dj&*-----c3dDr   c                    d } t           j                                                            dd          }t	          j        dt          j                  t	          j        dt          j                  f}t          | d||          } | |	                                          }t          |d         |d                    t          |d	         |d	                    d S )
Nc                p    t          j        | d          t          j        | dt           j                  fS )Nr    r!   )r"   rI   )r$   r%   r^   float32r   s    r   r_   z*test_apply_gufunc_with_meta.<locals>.stats  s/    wqr"""BF12RZ$H$H$HHHr   ra   rc   r+   r   r   re   )metar2   )r3   r4   r5   r6   r$   r   r`  rp  r   rh   r   )r_   r   rq  rj   expecteds        r   test_apply_gufunc_with_metars    s    I I I 		&&L&LLAGARZ((("'!2:*F*F*FGD%qt<<<FuQYY[[!!Hhqk6!9%%%hqk6!9%%%%%r   c                    t          j        dd          } | |                                 f}t          j        dt          j                  t          j        dt          j                  f}t          j        d|          d             } ||           }t          |d	         |d	                    t          t          j        |d
                                         g          |d
                                                    d S )N)r2   r  <   )r2   r    r    r  r   r   z(i,j) ->(i,j), ())r   rq  c                R    | t          j        |                                           fS r;   )r$   
atleast_1dmax)arrs    r   array_and_maxz/test_as_gufunc_with_meta.<locals>.array_and_max  s    BM#'')),,,,r   r   r2   )	r3   r   rx  r$   rH   r`  r	   r   rh   )stackrr  rq  rz  rj   s        r   test_as_gufunc_with_metar|    s    GK444Euyy{{#HHRrz***BHRrz,J,J,JKD\/d;;;- - <;- ]5!!Fhqk6!9%%%
 bh++--.//1B1B1D1DEEEEEr   )E
__future__r   numpyr$   r   numpy.testingr   
dask.arrayrH   r3   dask.array.corer   dask.array.gufuncr   r   r   r	   r
   dask.array.utilsr   r   r8   rK   rT   rX   rZ   rk   rq   markparametrizerx   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/  r5  r>  rC  rG  rM  rS  rV  ra  re  rm  rs  r|  r   r   r   <module>r     sj   " " " " " "      & & & & & &       ! ! ! ! ! !              ' & & & & &- - -,5 5 5*G G G  K K K.Q Q Q	+ 	+ 	+	+ 	+ 	+ udm44, , 54, udm44
+ 
+ 54
+/ / /	1 	1 	1  & & &D D D	' 	' 	'& & && & && & &&  	/ 	/ 	/ 3-88  981 1 11 1 11 1 1  4  *
 
 
- - -(
? 
? 
?? ? ?D D D' ' 'T eT]33  43	 	 	     00  10 1a&4,!788  98  .	1 	1 	1  (     $	& 	& 	&F F F F Fr   