
    biU                    6   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
mZmZmZ d dl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j6                  j9                  dddg      d        Zej6                  j9                  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j6                  j9                  de*e*fg      d         Z+d! Z,d" Z-d# Z.d$ Z/d% Z0d& Z1d' Z2d( Z3d) Z4d* Z5d+ Z6ej6                  j9                  d,ddg      d-        Z7d. Z8d/ Z9d0 Z:ej6                  j9                  d1g d2      d3        Z;ej6                  j9                  d4d d5gd6d7gg      d8        Z<d9 Z=d: Z>ej6                  j                   e	j                         d;<      d=        ZAej6                  j                   e	j                         d;<      d>        ZBd? ZCd@ ZDej6                  j                   e	j                         dA<      dB        ZEdC ZFy)D    )annotationsN)assert_equal)Arrayapply_gufunc	as_gufuncgufunc)_parse_gufunc_signature_validate_normalize_axes)	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        t        j                  t              5  t        d       d d d        t        j                  t              5  t        d       d d d        t        j                  t              5  t        d       d d d        y # 1 sw Y   xY w# 1 sw Y   pxY w# 1 sw Y   OxY w# 1 sw Y   y xY w)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       W/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/array/tests/test_gufunc.pytest__parse_gufunc_signaturer      sV   (3vh^D(5b7IJ(9ZL";MN(766:JB9OP(4x6HI(76(VRL9QR 78	&
3 
z	" .-.	z	" -,-	z	" .-.	z	" -,- -. .- -. .- -s0   E"3E. E:F"E+.E7:FFc                    d } t         j                  j                         j                  dd      }t	        j
                  t              5  t        | d|d       d d d        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        t	        j
                  t              5  t        | d|ddg       d d d        y # 1 sw Y   xY w# 1 sw Y   IxY w# 1 sw Y   y xY w)
Nc                0    t        j                  | d      S Naxisnpmeanr   s    r   fooz7test_apply_gufunc_axes_input_validation_01.<locals>.foo%       wwqr""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   $   s   # 			&&HR&@A	z	" 0S)QQ/0 i!-i$0i!UW6i$9	z	" 7S)QfX67 
z	" 5S)QaV45 50 07 75 5s$   DD(D4D%(D14D=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        y # 1 sw Y   y xY w)
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   9   sz     	bhhy)!#>A
bhhy)!#>A	z	" GS+q!QaggFG G Gs   7BB%c                    t        j                  t              5  t        dgd ddgd       d d d        t        j                  t              5  t        ddgd ddgd       d d d        t        j                  t              5  t        ddgd ddgd       d d d        t        ddgd ddgd      \  } }| dgk(  sJ |dgk(  sJ y # 1 sw Y   xY w# 1 sw Y   oxY w# 1 sw Y   GxY w)Nr2   r   FijrP   r   r0   )r   r   r   r
   rO   os     r    test__validate_normalize_axes_01rT   C   s    	z	" N &4fMN 
z	" L !QuzlFKL 
z	" O $D%*vNO $VQKuzlFSDAq==;;N NL LO Os#   CCCCCC#c                 X   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        t        j                  t              5  t        d ddddgd       d d d        t        j                  t              5  t        d ddddgd       d d d        y # 1 sw Y   pxY w# 1 sw Y   IxY w# 1 sw Y   y xY w)Nr   FrO   r   r0   TrQ   r
   r   r   r   rR   s     r    test__validate_normalize_axes_02rX   R   sd   #D!UVV4DbIDAqt99#D!UVHfEDAq;;;;#D!TFF3CRHDAqt;;	z	" J tUVV4DbIJ 
z	" G q%&&1A2FG 
z	" K q%&&1A6JK KJ JG GK Ks$   D:D-D DD D)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        t        j                  t              5  t        ddgd ddgd       d d d        t        j                  t              5  t        ddgd dddgd       d d d        y # 1 sw Y   sxY w# 1 sw Y   KxY w# 1 sw Y   y xY w)	Nr   TrV   r   r0   r1   rN   rQ   rW   rR   s     r    test__validate_normalize_axes_03rZ   i   s    #D!TF8R@DAq;;;;	z	" B q$&AB 
z	" Y &&!14
|ZXY 
z	" Q $tTFF;KRPQ QB BY YQ Qs#   C /C#C C	CC!c                 L   d } t         j                  j                         j                  dd      }t	        | d|d|j
                  fz        }|\  }}t        |t              sJ |j                         j                  dk(  sJ |j                         j                  dk(  sJ y )	Nc                ^    t        j                  | d      t        j                  | d      fS r   r$   r%   stdr   s    r   statsz#test_apply_gufunc_01.<locals>.statsy   #    wwqr"BFF12$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   x   s    7 			&&L&LA%qQWWJOFID#fe$$$<<>8+++;;=(***r   c                 &   d } t         j                  j                         j                  dd      }t	        | d|d|j
                  fz  d      \  }}|j                         j                  d	k(  sJ |j                         j                  d	k(  sJ y )
Nc                ^    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 			&&L&CA|Qa177*nDID# <<>8+++;;=(***r   	vectorizeFTc                    d }t         j                  j                         j                  dd      }t	        |d|d|       }|j                         j                  dk(  sJ y )	Nc                0    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      sW    # 			&&L&LAy!3)TD<<>8+++r   c                J   d }t         j                  j                         j                  dd      }t	        |d|d|       \  }}}|j                         j                  dk(  sJ |j                         j                  dk(  sJ |j                         j                  dk(  sJ y )	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   s0    wwqr"BFF12$6qr8J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 			&&L&LA!IND#s <<>8+++;;=(***;;=(***r   c                 |    d } t        | ddt        d      }t        |t        j                  dt                     y )Nc                    |dk(  sJ | S )Nr?   r   )r   bars     r   r&   z5test_apply_gufunc_pass_additional_kwargs.<locals>.foo   s    axxr   ()->()g      ?r?   )rE   r   rI   )r   floatr   r$   rH   )r&   rets     r   (test_apply_gufunc_pass_additional_kwargsr      s0     sHcA
FCc288Cu-.r   c                    d } t         j                  j                         }|j                  dd      }|j                  dd      }t	        | d|||j
                        }|j                         j                  dk(  sJ y )	Nc                0    t        j                  d| |      S )Nz...i,...j->...ijr$   einsumr   s     r   outer_productz+test_apply_gufunc_02.<locals>.outer_product   s    yy+Q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      sq    3 ))


!C


1A

K
8A]$4a!''RA99; 0000r   c                 X    d } t        | dt              }|j                         dk(  sJ y )Nc                      y)Nr2   r   r   r   r   r&   z,test_apply_gufunc_scalar_output.<locals>.foo   s    r   z->()rD   r2   r   intrh   r&   r   s     r   test_apply_gufunc_scalar_outputr      s+     	S&4A99;!r   c                 4   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	             y )
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      sh     	bhhy)!#>A
bhhy)!#>AS+q!177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        y # 1 sw Y   y xY w)
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      sx     	bhhy)!#>A
bhhy)!#>A	z	" DS+q!177CD D Ds   7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
             y )Nc                6    | 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&    ww,&&&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     	bhhy)!#>A
bhhy)!#>A&.!Qa177*nUFBb"((9%&b"((9%&r   c                     d } t        | dt        ddi      }|j                  dk(  sJ t        |t	        j
                  g d             y )Nc                 <    t        j                  g dt              S )Nr>   r   )r$   rH   r   r   r   r   r&   z&test_gufunc_vector_output.<locals>.foo   s    xx	--r   z->(i_0)i_0r@   rE   output_sizesr@   r>   )r   r   r-   r   r$   rH   r   s     r   test_gufunc_vector_outputr      sB    . 	S)3eQZPA88w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	             y )
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    ww,&&&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      sY     	bhhy)!#>AS(AS9A88y   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	             y )
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    ww$1ur   r>   r@   r   rA   (i)->(i)rD   r   r   r   r   s      r   test_apply_gufunc_elemwise_corer      sY     	bhhy)!#>AS*as;A88wa)$%r   c                     d } t        | dt        t        f      \  }}|j                         dk(  sJ |j                         dk(  sJ y )Nc                      y)N)r2   r?   r   r   r   r   r&   z0test_apply_gufunc_two_scalar_output.<locals>.foo  s    r   z->(),()rD   r2   r?   r   r&   r   r   s      r   #test_apply_gufunc_two_scalar_outputr     sG     YsCjADAq99;!99;!r   c                     d } t        | dt        t        fddd      \  }}|j                         dk(  sJ |j                  dk(  sJ t        |t        j                  d	t        
             y )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     sg    / \#u!RSDTDAq 99;!88|###au-.r   rE   c                    fd}t         j                  j                         j                  d      }|j	                  t
              t        |d||       }t        |       y )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   !  sN     			//3A	A	c8Qm	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         y )Nc                0    t        j                  d| |      S )Nz...ij,...jk->ikr   r   s     r   r&   z#test_gufunc_two_inputs.<locals>.foo.  s    yy*Aq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   -  sZ    2 	s#.A
s#.AS.1CHAaRWWV3//0r   c                     d } t        j                  dt              }t        j                  ddt              }t	        | d||t              }t        |d	t        j                  d
t              z         y )Nc                    | |z   S r;   r   r   s     r   r&   z%test_gufunc_mixed_inputs.<locals>.foo8  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   7  sW     	c"A
vS1AS+q!3?AaRWWV3//0r   c                     d } t        j                  ddt              }t        j                  dt              }t	        | d||d	      }t        |t        j                  d
dt                     y )Nc                ,    | |z   j                  d      S Nr2   r!   sumr   s     r   r&   z/test_gufunc_mixed_inputs_vectorize.<locals>.fooB      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   A  sU    # 		)37A
AS*AqDAAa3/0r   c                    d } t        j                  ddt              }t        j                  dt              }t	        | d||d	      }t        |t        j                  d
dt                     t         j                  j                         j                  d      }t        j                  dt        d      d        } ||       y )Nc                ,    | |z   j                  d      S r   r   r   s     r   r&   z-test_gufunc_vectorize_whitespace.<locals>.fooR  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                  j                  |       S r;   )r$   linalginvr   s    r   gufooz/test_gufunc_vectorize_whitespace.<locals>.gufoo]  s    yy}}Qr   )r3   r   r   r$   r   r   r   r4   r5   r   r   )r&   r   r   r   r   s        r    test_gufunc_vectorize_whitespacer   L  s    # 		)37A
AS+QTBAa3/0
		&&y1A\\,ETR  S 
 
!Hr   c                    t         j                  j                         j                  dd      } d }t	        |dddt
        d	      } ||       }|j                         }t        |t              sJ |j                  d
k(  sJ y )Nrb   rd   r?   rd   r+   c                0    t        j                  | d      S r   r#   r   s    r   r&   ztest_gufunc.<locals>.fooi  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   f  s    
		&&GF&CA# E 	aA99;Da::r   c                    t         j                  j                         j                  dd      } t	        dddt
        d      d	        } ||       }|j                         }t        |t              sJ |j                  d
k(  sJ y )Nr   r   r+   r.   r    FT)r"   r   rE   rr   c                0    t        j                  | d      S r   r#   r   s    r   r&   ztest_as_gufunc.<locals>.foo~  s    wwqr""r   r   )
r3   r4   r5   r6   r   r   rh   rg   r   ri   )r   r&   r   r   s       r   test_as_gufuncr   {  s}    
		&&GF&CAyrERVW# X# 	AA99;Da::r   c                    d } t         j                  j                         }|j                  dd      }|j                  dd      }t	        | d||dt
        fz  d	
      \  }}}|j                         j                  dk(  sJ |j                         j                  dk(  sJ |j                         j                  dk(  sJ y )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  sT    177|q   177|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


1A

J
7A#QeXQVGAq! 99;,,,99;,,,99;,,,r   c            	     J   d } t         j                  j                         }|j                  dd      }|j                  dd      }t	        j
                  t              5 }t        | d||t        d       d d d        d	t        j                        v sJ y # 1 sw Y   #xY w)
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V(C,>>>>V Vs   !BB"c                 2   d } t         j                  j                         j                  dd      }t	        j
                  t              5 }t        j                  | d|t        d       d d d        dt        j                        v sJ y # 1 sw Y   #xY w)	Nc                0    t        j                  | d      S r   )r$   r   r   s    r   r&   z6test_apply_gufunc_check_coredim_chunksize.<locals>.foo  s    vvab!!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U(C,>>>>U Us   BBc            	     ^   d } t         j                  j                         }|j                  dd      }|j                  dd      }t	        j
                  t              5 }t        j                  | d||t        d       d d d        d	t        j                        v sJ y # 1 sw Y   #xY w)
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

_
5A

\
2A	z	" 
g
a%u	

 .W]]1CCCC	
 
s   ! B##B,c            	        t        j                  d      j                  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        t        j                        }|j                  d      sJ d|v sJ d|v sJ d }t        |d||      \  }	}
t        |	||z          t        |
||z
         y # 1 sw Y   pxY w)N2   )rd   rb   rb   rd   r-   c                `    |j                  dd      }| t        |      z   j                  |      S )Ncasti8)popr   r   )r   argskwargsr  s       r   r&   z*test_apply_gufunc_infer_dtype.<locals>.foo  s+    zz&$'CI%%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"    s~   
		"g&A
		"A	q	#B	q	#B, 
c>2r1	5BBAAb!	c>2r14	@BBAD!Ab!	c>2r14t	TBBAD!Ab!$ 
z	" (aS(B'(
agg,C>>45550C777S    #~r26FBb"r'b"r'( (s   ?E<<Fr   c                    d }t         j                  j                         j                  d      }t	        j
                  |d      }t        j                  |d|       }t        |d|d| d	      }t        ||       y )
Nc                0    t        j                  | d      S r   r$   medianr   s    r   mymedianz+test_apply_gufunc_axis_01.<locals>.mymedian      yy$$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/    sk    % 			//8A
--!
$C
		!!h/A	)Sq84
B ar   c                    d } t         j                  j                         j                  d      }t	        j
                  |d      }t         j                  j                  |d      }t        | d|dd	      }t        ||       y )
Nc                D    t         j                  j                  | d      S r   )r$   fftr   s    r   myfftz(test_apply_gufunc_axis_02.<locals>.myfft  s    vvzz!"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    sh    & 			//8A
--!
$C


11
A	eZ1D	IBar   c                     d
d} t         j                  j                         j                  d      }t	        j
                  |d      } | |d      }t        | d|dd	      }t        ||       y )Nc                    t         j                  j                  | |      }d|||  t         j                  j                  ||      }t        j                  |      S )Nr!   r   )r$   r2  ifftreal)r   cnr"   r   nxs        r   myfilterz,test_apply_gufunc_axis_02b.<locals>.myfilter  sI    FFJJqtJ$"bS	VV[[[&wwr{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	LBar   c                     d } t         j                  j                         j                  d      }t	        j
                  |d      }t        j                  |d      }t        | d|ddd	id
      }t        ||       y )Nc                0    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    sm    # 			//	:A
--!
$C
A	
CasAhd
B ar   r"   )r    Nc                   d }t         j                  j                         j                  d      }t	        j
                  |d      }t        j                  || xs dd      }t        |d|| dd	      }t        ||       y )
Nc                0    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  $  so    % 			//8A
--!
$C
		!$*"t4A	)Std$
B ar   r/   r2   r0   r   c                ~   d }t         j                  j                         }|j                  d      }|j                  d      }t	        j
                  |d      }t	        j
                  |d      }t        j                  |d      t        j                  |d      z  }t        |d	||| d
      }t        ||       y )Nc                `    t        j                  | d      t        j                  |d      z  S r   )r$   r^   r%   r   s     r   mystatsz*test_apply_gufunc_axes_01.<locals>.mystats5  s#    vvab!BGGAB$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  3  s    8 ))


!CG$AF#A
--!
$C
--!
$C
qqBGGAA..A	g}c3TQU	VBar   c                 R   d } t         j                  j                         }|j                  d      }|j                  d      }t	        j
                  |d      }t	        j
                  |d      }t        j                  d||      }t        | d||g d	d
      }t        ||       y )Nc                0    t        j                  d| |      S )Nz...ij,...jk->...ikr   r   s     r   matmulz)test_apply_gufunc_axes_02.<locals>.matmulD  s    yy-q!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  C  s    5 ))


!CI&AI&A
--!
$C	q	#B
		.!Q'A	
(
B ar   c                     t         j                  j                         } | j                  dd      }| j                  dd      }d }t	        |d||d	      }|j                         j                  d
k(  sJ y )Nr(   r   r+   r   )rd   r2   r   c                0    t        j                  d| |      S )Nzi,j->ijr   r   s     r   r   z?test_apply_gufunc_axes_two_kept_coredims.<locals>.outer_product_  s    yyAq))r   r   Tr   r   rw   )r   r   r   r   r   s        r   (test_apply_gufunc_axes_two_kept_coredimsrV  Z  sm    
))


!C


2A

J
7A* 	]$4adKA99; 0000r   z(numba doesn't tokenize deterministically)reasonc                 t   t        j                  d      } | j                  | j                  d d  | j                  d d  | j                  d d  fgd      d        }t        j
                  j                         }|j                  dd      }|j                  dd      }||z   } |||d      }t        ||       y )	Nnumbaz(n),(n)->(n)c                Z    t        | j                  d         D ]  }| |   ||   z   ||<    y )Nr   rangeri   )r   r   resrO   s       r   gz)test_apply_gufunc_via_numba_01.<locals>.gl  s5     qwwqz" 	!AqTAaD[CF	!r   r(   r*   r+   r   r!   )	r   importorskipguvectorizefloat64r3   r4   r5   r6   r   )rY  r^  r   r   r   r   r   s          r   test_apply_gufunc_via_numba_01rb  f  s     (E

--
EMM!,emmA.>	?@.!! ))


!C


,A


,A	AA	!QQAaOr   c                 J   t        j                  d      } | j                  | j                  d d  | j                  d d  fgd      d        }t        j
                  j                         j                  dd      }|j                  dd	      } ||dd	      }t        ||       y )
NrY  z(n)->()c                h    d|d<   t        | j                  d         D ]  }|dxx   | |   z  cc<    y )Ng        r   r[  )r   r]  rO   s      r   mysumz-test_apply_gufunc_via_numba_02.<locals>.mysum  s8    Aqwwqz" 	AFadNF	r   r(   r*   r+   r   Tr)  )
r   r_  r`  ra  r3   r4   r5   r6   r   r   )rY  re  r   r   r   s        r   test_apply_gufunc_via_numba_02rf  }  s     (E
q)5==+;<=yI J
 			&&HR&@A	1t$Aaa$'AaOr   c                    t        j                  d      } d }t        j                  j	                         j                  dd      }|j                  | 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        ||       y )	Nsparsec                ^    t        j                  | d      t        j                  | d      fS r   )r$   r   r%   r   s    r   r_   z&test_preserve_meta_type.<locals>.stats  s#    vvab!27712#666r   ra   rc   r+   re   r?   rD   )r   r_  r3   r4   r5   r6   
map_blocksCOO
from_numpyr   rI   rg   _metar   )rh  r_   r   r   r%   s        r   test_preserve_meta_typern    s      *F7 			&&L&LA	VZZ**+AUL!1z>RICaggvzz***cii,,,djj&**---c3dDr   c                    d } t         j                  j                         j                  dd      }t	        j
                  dt        j                        t	        j
                  dt        j                        f}t        | d||      } | |j                               }t        |d   |d          t        |d	   |d	          y )
Nc                |    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)    wwqr"BFF12RZZ$HHHr   ra   rc   r+   r   r   re   )metar2   )r3   r4   r5   r6   r$   r   ra  rq  r   rh   r   )r_   r   rr  rj   expecteds        r   test_apply_gufunc_with_metart    s    I 			&&L&LAGGARZZ("''!2::*FGD%qt<FQYY[!Hhqk6!9%hqk6!9%r   zCreate our Own Scalar Classc                    t        j                  dd      } | | j                         f}t        j                  dt        j
                        t        j                  dt        j
                        f}t        j                  d|      d        } ||       }t        |d	   |d	          t        t        j                  |d
   j                         g      |d
   j                                y )N)r2   r  <   )r2   r    r    r  r   r   z(i,j) ->(i,j), ())r   rr  c                L    | t        j                  | j                               fS r;   )r$   
atleast_1dmax)arrs    r   array_and_maxz/test_as_gufunc_with_meta.<locals>.array_and_max  s    BMM#''),,,r   r   r2   )	r3   r   ry  r$   rH   ra  r   r   rh   )stackrs  rr  r{  rj   s        r   test_as_gufunc_with_metar}    s    GGK4Euyy{#HHHRrzz*BHHRrzz,JKD\\/d;- <- 5!Fhqk6!9%
 bhh++-./1B1B1DEr   c            	     4   d } t         j                  j                  dd      }t         j                  j                  dd      }t        | dg|||j                         gdd	gd
diddd}|j                  dk(  sJ t        ||j                                y )Nc                    | S r;   r   )r   r  s     r   r&   z.test_gufunc_chunksizes_adjustment.<locals>.foo  s    r   )r2   i    )r2   r       r  r  )r    z"(dim0_0),(dim0_1),(dim0_2)->(dim0)Fra  dim0r  T)r   rE   r   rr   ro   )r   )   r  r  r  )r3   r4   r   copyr-   r   rh   )r&   rz  arr2rj   s       r   !test_gufunc_chunksizes_adjustmentr    s     ))

=

>C99F51D,	 tTYY[	!	  kc]	F ==;;;;fckkm$r   )G
__future__r   numpyr$   r   numpy.testingr   
dask.arrayrH   r3   r   r   r   r   dask.array.gufuncr	   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  xfail_array_expr_enabledrb  rf  rn  rt  r}  r  r   r   r   <module>r     s   "   &  = = O &-,5*GK.Q	+	+ udm4, 5, udm4
+ 5
+/	1&D	'&&&&	/ 3-8 91114*
-(
??D'T eT]3 4	 0 1 1a&4,!78 9.	1 B%O  ( B%O   $	& )2))+4QRF SF&%r   