
    bi                       d dl mZ d dlZd dlZ ej                  d        ej                  d       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mZ d dlmZ d dlmZmZmZ ej4                  j7                  d	d
ddddddddddddddddefdddefdddefdddefg      d        Zej4                  j7                  dg d       d!        Zd" Zej4                  j7                  d	dddefddd#efddd$efddd%efd&d'd(efd)d'd(efd*d'd(efd+d'd(efd,dd-efd,dd.efd,dd/efdddd0d1d2dddefg      d3        Z ej4                  j7                  d	d
dddddddddddddd0d1d2ddde!fg      d4        Z"d5 Z#ej4                  j7                  d6g d7      d8        Z$ej4                  j7                  d9d:d;g      d<        Z%ej4                  j7                  d9d=d>g      d?        Z&ej4                  j7                  d@ejN                  ejN                  fejP                  ejP                  fg      dA        Z)ej4                  j7                  dBg dC      ej4                  j7                  dDejN                  ejP                  g      dE               Z*dF Z+ej4                  j7                  dGg dH      ej4                  j7                  dIg dH      ej4                  j7                  dJdKg      ej4                  j7                  dBdLdMg      dN                             Z,dO Z-dP Z.ej4                  j^                  ej4                  j7                  dQg dR      ej4                  ja                  dS      dT                      Z1ej4                  j^                  ej4                  j7                  dQg dU      dV               Z2dW Z3ej4                  j7                  dXg dY      dZ        Z4ej4                  j7                  dXg d[      d\        Z5ej4                  j7                  dXg d[      d]        Z6d^ Z7ej4                  j7                  dXd/d_g      d`        Z8ej4                  j7                  dXd/d_g      da        Z9db Z:dc Z;ej4                  j7                  dXd/ddg      de        Z<ej4                  j7                  dXg df      dg        Z=ej4                  j7                  dhdidjg      ej4                  j7                  dkdldmg      dn               Z>do Z?ej4                  j7                  dpg dq      ej4                  j7                  dBg dr      ej4                  j7                  dDdsdtg      du                      Z@ej4                  j7                  dDg dv      ej4                  j7                  dwdjdig      dx               ZAej4                  j7                  dBg dy      ej4                  j7                  dpg dz      d{               ZBd| ZCej4                  j7                  d}g d~      d        ZDej4                  j                  ej                  dk(  xr e e
d      k  ddi      ej4                  j7                  dg dg dg dg dg      ej4                  j7                  ddddej                  ej                   g      ej4                  j7                  ddidjg      d                             ZHej4                  j                  e e
d      k  ddi      ej4                  j7                  dddg      ej4                  j7                  ddjdig      ej4                  j7                  ddidjg      ej4                  j7                  ddddej                  ej                   g      d                                    ZIej4                  j^                  ej4                  j                  ej                  dk(  xr e e
d      k  ddi      ej4                  j7                  dddgddgddgddgddgg      ej4                  j7                  ddddej                  ej                   g      ej4                  j7                  ddidjg      d                                    ZJej4                  j7                  dg dg dg dg      ej4                  j7                  dg d      ej4                  j7                  ddidjg      d                      ZKej4                  j7                  dg dg dg dg      ej4                  j7                  dg d      ej4                  j7                  ddidjg      d                      ZLej4                  j7                  dg dg dg      ej4                  j7                  dg d      ej4                  j7                  ddidjg      d                      ZMy)    )annotationsNnumpyscipy)Version)qrsfqrsvdsvd_compressedtsqr)_np_version)	assert_eq	same_keyssvd_flipzm,n,chunks,error_type)   
   r   N)r   r      r   N)r   r   )      r   r   N)(   r         r   r      r   N)         r   N)   r   r   N)   r   r   N)   r   r   N),  r   r   r   N)r$   r      r   N)r$   r   r   r   N)r   r   r   N)r   r   r   N)r   r   r   Nr   r   r   r   r   r   r   r   r   c                *   t         j                  j                         j                  | |f      }t        j                  ||d      }| }t        | |      }|}|}	| }
t        | |      }|}|}|}t        ||      }|$t        |      \  }}t        ||f|j                         t        ||	f|j                         t        |t        j                  ||             t        t        j                  ||      t        j                  |j                  |             t        |t        j                  |j                  |j                  d                      t        |d      \  }}}t         j                  j!                  |      d   }t        ||       t        |
|f|j                         t        |f|j                         t        ||f|j                         t        t        j                  ||      t        j                  |j                  |             t        t        j                  ||      t        j                  ||j                               t        |t        j                  t        j                  |t        j"                  |            |d |              y t%        j&                  |      5  t        |      \  }}d d d        t%        j&                  |      5  t        |d      \  }}}d d d        y # 1 sw Y   9xY w# 1 sw Y   y xY w)NAchunksnamer   Tcompute_svd   )nprandomdefault_rngda
from_arrayminmaxr   r   shapedoteyeTtriurechunklinalgr	   diagpytestraises)mnr/   
error_typematdatam_qn_qm_rn_rm_un_un_sm_vhn_vhd_vhqrusvhs_exacts                         W/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/array/tests/test_linalg.py	test_tsqrr[      sV   X ))


!
(
(!Q
0C==V#6D C
a)C
C
C C
a)C
CDDtT?DDz13*agg&3*agg&#rvva|$"&&c"BFF133N3!RWWQYYqwwqz234 $/1b))--$Q'!W3*agg&3&!''"4,)"&&c"BFF133N3"&&t$bffR&67#rvvbffQ
3RX>?]]:& 	:DAq	]]:& 	4Dd3HAq"	4 	4	 		4 	4s   6K="L	=L	Lz1m_min,n_max,chunks,vary_rows,vary_cols,error_type))r   r   r   r   TFN)r   r   r\   FTN)r   r   r\   TTN)r   r   r\   TFN)r   r   r\   FTN)r   r   r\   TTN)r$   r   r%   TFN)r$   r   r&   TFN)r$   r   r(   TFN)r$   r   r%   FTN)r$   r   r&   FTN)r$   r   r(   FTN)r$   r   r%   TTN)r$   r   r&   TTN)r$   r   r(   TTNc                   t         j                  j                         j                  | dz  |f      }| dz  |}}|d| dfxx   dz  cc<   |d d df   }	|dd d f   }
t        j                  |	| d      }t        j                  |
|d      }t        j                  ||d      }|r'||dkD  d d f   }||	dkD  d d f   }|j
                  d   }|r'|d d |dkD  f   }|d d |
dkD  f   }|j
                  d   }|}t        ||      }|}|}|}t        ||      }|}|}|}t        ||      }|Xt        |      \  }}|j                         }|j                         }t        ||f|j
                         t        ||f|j
                         t        |t        j                  ||             t        t        j                  ||      t        j                  |j                  |             t        |t        j                  |             t        |d	
      \  }}}|j                         }|j                         }|j                         }t         j                  j!                  |      d   }t        ||       t        ||f|j
                         t        |f|j
                         t        ||f|j
                         t        t        j                  ||      t        j                  |j                  |             t        t        j                  ||      t        j                  ||j                               t        |t        j                  t        j                  |t        j"                  |            |d |              y t%        j&                  |      5  t        |      \  }}d d d        t%        j&                  |      5  t        |d	
      \  }}}d d d        y # 1 sw Y   9xY w# 1 sw Y   y xY w)Nr   r   r3   cr.   rU   r-         ?Tr1   )r4   r5   r6   r7   r8   r;   r9   r:   r   computer   r<   r=   r>   r?   rA   r	   rB   rC   rD   )m_minn_maxr/   	vary_rows	vary_colsrG   rH   rE   rF   _c0_r0c0r0rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   s                                 rZ   test_tsqr_uncertainri   k   sI   h ))


!
(
(%!)U);
<C19eqA%
OqO
ad)C
ad)C	s5s	3B	s5s	3B==V#6DBHaK #)Q,IIaLArCxK !S3Y,IIaL C
a)C
C
C C
a)C
CDDtT?DDz1IIKIIK3*agg&3*agg&#rvva|$"&&c"BFF133N3!RWWQZ  $/1bIIKIIKZZ\))--$Q'!W3*agg&3&!''"4,)"&&c"BFF133N3"&&t$bffR&67#rvvbffQ
3RX>?]]:& 	:DAq	]]:& 	4Dd3HAq"	4 	4	 		4 	4s   O O, O),O5c            	     ,   d} d}d}d}t         j                  j                         j                  d      }t        j                  |d      }t        j
                  j                  |      \  }}t        | |f|j                         t        ||f|j                         t        |t        j                  ||             t        t        j                  ||      t        j                  |j                  |             t        |t        j                  |j                  |j                  d                      t        j                  |t        j                  d       g      }|d d df   }	t        j                  |d      }
t        j                  |	d      }|
|dk\  d d f   }t        j
                  j                  |      \  }}|j!                         }|j!                         }t        | |f|j                         t        ||f|j                         t        |t        j                  ||             t        t        j                  ||      t        j                  |j                  |             t        |t        j                  |             y )Nr   r   r\   ))r   r   r3   r   r   r   r/   r   )r4   r5   r6   r7   r8   rA   r   r   r;   r<   r=   r>   r?   r@   vstackonesr`   )rJ   rK   rL   rM   rH   xrT   rU   mat2v2x2r^   s               rZ   test_tsqr_zero_height_chunksrs      s   
C
C
C
C ))


!
(
(
1C
c"9:A99<<?DAqsCj!''"sCj!''"c266!Q< bffS#qssA/a1771:./0 99cRWWW-./0D	adB	tA	&B
b#A
1619A99<<?DAq			A			AsCj!''"sCj!''"c266!Q< bffS#qssA/a    r   r   r   r   r   r   r!   r"   r#   r$   r%   r&   r(   )r   r   r)   N)r   r   r*   N)r   r   r+   Nc           	        t         j                  j                         j                  | |f      }t        j                  ||d      }| }t        | |      }|}|}	|}
|t        |      \  }}t        ||f|j                         t        ||	f|j                         t        |t        j                  ||             t        t        j                  |
|
      t        j                  |j                  |             t        |t        j                  |j                  |j                  d                      y t        j                  |      5  t        |      \  }}d d d        y # 1 sw Y   y xY wNr-   r.   r   )r4   r5   r6   r7   r8   r9   r   r   r;   r<   r=   r>   r?   r@   rC   rD   rE   rF   r/   rG   rH   rI   rJ   rK   rL   rM   m_qtqrT   rU   s                rZ   	test_sfqrry     s   @ ))


!
(
(!Q
0C==V#6D
C
a)C
C
CEDz13*agg&3*agg&#rvva|$"&&&qssA7!RWWQYYqwwqz234]]:& 	:DAq	 	 	   E##E,c           	        t         j                  j                         j                  | |f      }t        j                  ||d      }| }t        | |      }|}|}	|}
|t        |      \  }}t        ||f|j                         t        ||	f|j                         t        |t        j                  ||             t        t        j                  |
|
      t        j                  |j                  |             t        |t        j                  |j                  |j                  d                      y t        j                  |      5  t        |      \  }}d d d        y # 1 sw Y   y xY wrv   )r4   r5   r6   r7   r8   r9   r   r   r;   r<   r=   r>   r?   r@   rC   rD   rw   s                rZ   test_qrr|   q  s   N ))


!
(
(!Q
0C==V#6D
C
a)C
C
CE$x13*agg&3*agg&#rvva|$"&&&qssA7!RWWQYYqwwqz234]]:& 	d8DAq	 	 	rz   c                    d\  } }t         j                  j                         j                  | |f      }t        j                  |d|fd      }t        |      \  }}t        |      \  }}t        ||      sJ t        ||      sJ t        |      \  }}	}
t        |      \  }}}t        ||      sJ t        |	|      sJ t        |
|      sJ y )Nr(   r   r-   r.   )r4   r5   r6   r7   r8   r   r   r	   )rE   rF   rH   rI   q1r1q2r2u1s1v1u2s2rq   s                 rZ   test_linalg_consistent_namesr     s    DAq
))


!
(
(!Q
0C==b!W37DXFBXFBRRTJBBTJBBRRRrt   zm,n)r   r   )r   r   r(   c                   t         j                  j                         j                  | |f      }t        j                  |d|fd      }t        j
                  j                  |      \  }}}t        j                  |||      \  }}}	t        |||g|||	g      D ];  \  }
}|
j                  |j                  k(  sJ |
j                  |j                  k(  r;J  y )Nr   r-   r.   )r4   r5   r6   r7   r8   rA   r	   r`   zipr;   dtype)rE   rF   ad_ad_ud_sd_vtrV   rW   vtd_ees               rZ   test_dask_svd_self_consistentr     s    
		&&1v.A
--1a&s
3CYY]]3'NCdzz#sD)HAq"sC&Ar
3 $QyyAGG###yyAGG###$rt   iteratorpowerQRc                F   t        j                  dd      }t         j                  j                  |d| ddd      \  }}}t         j                  j                  |d| dd	      \  }}}t	        |j
                        t	        |j
                        k  sJ t        ||       y )
N)d   r   r)   rl   r   r3   T{   )kr   n_power_iterr`   seed)r   r   r   r   )r7   rn   rA   r
   lendaskr   )r   ro   rV   rW   vuussvvs           rZ   test_svd_compressed_computer     s    

8,Aii&&	Q4c ' GAq! ))	Q * JBB qvv;RWW%%%art   )r   r   )r   r   c           
        d\  }}d}t         j                  j                         j                  ||f||f      }t        |d|z  | d   | d   d      \  }}}t        j
                  j                  |j                         d	
      }t        j
                  j                  ||d d d |f   |d | z  |d |d d f   z  z
  j                         d      }	|	||dz      z  dz
  }
d}|
|k  sJ t        t        j                  ||      t        j                  |d d d |f   j                  |d d d |f                t        t        j                  ||      t        j                  |d |d d f   |d |d d f   j                               y )N)r   2   r   rl   r   r   r3     )r   r   r   F)
compute_uvg?)r7   r5   r6   r
   r   rA   r	   r`   normr   r4   r=   r<   r>   )r   rE   rF   rU   r   rV   rW   r   s_truer   fractols               rZ   test_svd_compressedr     st   DAq	A
		&&1vq!f&=A 	1q58A;Xa[tHAq" \\aiike<F <<a1QU8ae#3r"1"a%y"@@IIKQOD &Q-!#D C#::bffQlBFF1QU8::qBQBx89bffQlBFF2bqb!e9b!Qikk:;rt   zinput_dtype, output_dtypec                   t         j                  j                         j                  dd      j                  |       }t	        |dd      \  }}}|j
                  |j
                  cxk(  r|j
                  cxk(  r|k(  sJ  J y )Nr   r   rl   r3   r   r   )r7   r5   r6   astyper
   r   )input_dtypeoutput_dtypero   rV   rW   r   s         rZ   &test_svd_compressed_dtype_preservationr     so     			&&x&AHHUAa.HAq"77agg99\99999rt   r/   ))r   r   r   r   r   r   c                   t         j                  j                         j                  d|       j                  |      }t	        |      \  }}}|j
                  |j
                  cxk(  r|j
                  cxk(  r|k(  sJ  J y )Nr   rl   )r7   r5   r6   r   r	   r   )r/   r   ro   rV   rW   r   s         rZ   test_svd_dtype_preservationr     sj     			&&x&?FFuMA!fGAq!77agg11E11111rt   c                 d   d\  } }t         j                  j                  d      j                  | |fd      }t        |dd      \  }}}t        |dd      \  }}}t	        t        j
                  ||k(  j	                         ||k(  j	                         ||k(  j	                                     sJ y )N)r'      i  r   r   sizer/   r   r   )r7   r5   r6   r
   allr`   )	rE   rF   ro   rV   rW   r   r   r   vt2s	            rZ   !test_svd_compressed_deterministicr     s    DAq
		d#**Av*FAa.HAq" AD1KBCrzz17--/AG==?R3YOO<MNOOOrt   rE   )r   r   r   r   rF   r   r   )r   r   r\   c                N   t         j                  j                         j                  | |f|      }t        ||ddd      \  }}}t        j                  |||      \  }}}t        | ||      }|j                  | |fk(  sJ |j                  |fk(  sJ |j                  ||fk(  sJ y )Nr   r3   T)r   r`   r   )r7   r5   r6   r
   r`   r9   r;   )	rE   rF   r   r/   ro   rV   rW   r   rU   s	            rZ   test_svd_compressed_shapesr     s    
 			&&QF6&BAQ4aHGAq!jjAq!GAq!Aq!A77q!f77qd??77q!frt   c                    t        j                  | j                  |      j                  |      |      sJ t        |t	        j
                  |      d       t        |t	        j                  |      d       y )NFcheck_graph)r4   allcloser<   r   r7   trilr?   )plrV   r-   s       rZ   _check_lu_resultr     sP    ;;quuQx||A*** a/a/rt   c            	     F   t        j                  g dg dg dg dg      } t        j                  g dg dg dg dg d	g d
g      }t        | |gddg      D ]  \  }}t        j                  |||f      }t
        j                  j                  |      \  }}}t        j                  j                  |      \  }}	}
t        ||d       t        ||	d       t        ||
d       t        ||	|
|        t        j                  g dg dg dg dg dg dg      }t        |gdg      D ]r  \  }}t        j                  |||f      }t
        j                  j                  |      \  }}}t        j                  j                  |      \  }}	}
t        ||	|
|       t y )N)r   r   r   r   )r   r   r3   )r   r3   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   rl   Fr   )r   r   r   r3   r   r3   )r      r   r   r   r   )   r   r    r   r    r   )r   )         r    r   )   .         r      )r   8         r   r   )
r4   arrayr   r7   r8   r   rA   lur   r   )A1A2r-   chunkdAr   r   rV   dpdlduA3s               rZ   	test_lu_1r   %  sp   	=-P	QB		
	
B R1a&) (5]]1eU^4,,//!$1aYY\\"%
B!RU+!RU+!RU+RQ'( 
#$$"	
	
B qcN (5]]1eU^4,,//!$1aYY\\"%
BRQ'	(rt   r   )r   r   r'   r   z4ignore:Increasing:dask.array.core.PerformanceWarningc                    t         j                  j                  d      }|j                  dd| | f      }t	        j
                  |d      }t        j                  j                  |      \  }}}t        ||||       y )Nr   r   r   rl   	r4   r5   r6   integersr7   r8   rA   r   r   r   rngr-   r   r   r   r   s          rZ   	test_lu_2r   O  sd     ))


#CQT4L)A	q	(Bb!JBBRR#rt   )r   r      c                    t         j                  j                  d      }|j                  dd| | f      }t	        j
                  |d      }t        j                  j                  |      \  }}}t        ||||       y )Nr   r   )r   r   rl   r   r   s          rZ   	test_lu_3r   [  sd     ))


#CQT4L)A	q	*Bb!JBBRR#rt   c                    t         j                  j                         } | j                  ddd      }t	        j
                  |d      t        j                  t        fd       | j                  ddd      }t	        j
                  |d      t        j                  t        fd	       | j                  ddd
      }t	        j
                  |d      t        j                  t        fd       y )Nr   r   r   r   r   r   r   r   rl   c                 B    t         j                  j                         S Nr7   rA   r   r   s   rZ   <lambda>z test_lu_errors.<locals>.<lambda>k      biill2&6 rt   )r   r   )r   r   c                 B    t         j                  j                         S r   r   r   s   rZ   r   z test_lu_errors.<locals>.<lambda>o  r   rt   )r   r   c                 B    t         j                  j                         S r   r   r   s   rZ   r   z test_lu_errors.<locals>.<lambda>s  r   rt   	r4   r5   r6   r   r7   r8   rC   rD   
ValueError)r   r-   r   s     @rZ   test_lu_errorsr   f  s    
))


!CQL)A	q	+B
MM*67QG$A	q	(B
MM*67QH%A	q	(B
MM*67rt   )r;   r   )r(   r   )F   r   c                   t         j                  j                  d      }|j                  dd| | f      }|j                  dd|       }t        j                  |      }t        j                  |||f      }t        j                  ||      }t
        j                  j                  ||      }t        |t        j                  j                  ||             t        |j                  |      |j                  t              d       t        j                  |      }	t        j                  |	||f      }
t        j                  ||      }t
        j                  j                  |
|d      }t        |t        j                  j                  |	|d             t        |
j                  |      |j                  t                     y )Nr3   r   g-C6?)rtolTlowerr4   r5   r6   r   r?   r7   r8   rA   solve_triangularr   r   r<   r   floatr   r;   r   r   r-   bAudAudbresAldAls              rZ   test_solve_triangular_vectorr  v  sF   
))


"CQUEN+AQE"A 
B
--UEN
+C	q%	 B
))
$
$S"
-Cc5<<00Q78cggclAHHUO$7 
B
--UEN
+C	q%	 B
))
$
$S"D
$
9Cc5<<00Qd0CDcggclAHHUO,rt   )r(   r   )r   r   c                   t         j                  j                  d      }|j                  dd| | f      }|j                  dd| df      }t        j                  |      }t        j                  |||f      }t        j                  ||df      }t
        j                  j                  ||      }t        |t        j                  j                  ||             t        |j                  |      |j                  t                     t        j                  |      }	t        j                  |	||f      }
t        j                  ||df      }t
        j                  j                  |
|d      }t        |t        j                  j                  |	|d             t        |
j                  |      |j                  t                     y )Nr3   r   r   Tr  r  r  s              rZ   test_solve_triangular_matrixr    sP   
))


"CQUEN+AQUAJ'A 
B
--UEN
+C	q5!*	%B
))
$
$S"
-Cc5<<00Q78cggclAHHUO, 
B
--UEN
+C	q5!*	%B
))
$
$S"D
$
9Cc5<<00Qd0CDcggclAHHUO,rt   c                   t         j                  j                  d      }|j                  dd| | f      }|j                  dd| | f      }t        j                  |      }t        j                  |||f      }t        j                  |||f      }t
        j                  j                  ||      }t        |t        j                  j                  ||             t        |j                  |      |j                  t                     t        j                  |      }	t        j                  |	||f      }
t        j                  |||f      }t
        j                  j                  |
|d      }t        |t        j                  j                  |	|d             t        |
j                  |      |j                  t                     y )Nr3   r   Tr  r  r  s              rZ   test_solve_triangular_matrix2r    sP   
))


"CQUEN+AQUEN+A 
B
--UEN
+C	q5%.	)B
))
$
$S"
-Cc5<<00Q78cggclAHHUO, 
B
--UEN
+C	q5%.	)B
))
$
$S"D
$
9Cc5<<00Qd0CDcggclAHHUO,rt   c                    t         j                  j                         j                  ddd      } t         j                  j                         j                  ddd      }t	        j
                  | d      t	        j
                  |d      t        j                  t        fd       t         j                  j                         j                  ddd	      } t         j                  j                         j                  ddd      }t	        j
                  | d
      t	        j
                  |d      t        j                  t        fd       y )Nr   r   r   r3   r   rl   r   c                 D    t         j                  j                         S r   r7   rA   r  r   r
  s   rZ   r   z.test_solve_triangular_errors.<locals>.<lambda>      bii&@&@R&H rt   r)   )r   r   c                 D    t         j                  j                         S r   r  r  s   rZ   r   z.test_solve_triangular_errors.<locals>.<lambda>  r  rt   r   )r-   r  r   r
  s     @@rZ   test_solve_triangular_errorsr    s    
		((B=A
		((B3A	q	+B	q	#B
MM*HI
		((B9A
		((B3A	q	(B	q	#B
MM*HIrt   r   c                   t         j                  j                  d      }|j                  dd| | f      }t	        j
                  |||f      }|j                  dd|       }t	        j
                  ||      }t        j                  j                  ||      }t        |t        j                  j                  ||      d       t        |j                  |      |j                  t              d       |j                  dd| df      }t	        j
                  ||df      }t        j                  j                  ||      }t        |t        j                  j                  ||      d       t        |j                  |      |j                  t              d       |j                  dd| | f      }t	        j
                  |||f      }t        j                  j                  ||      }t        |t        j                  j                  ||      d       t        |j                  |      |j                  t              d       y )Nr3   r   Fr   r   )r4   r5   r6   r   r7   r8   rA   solver   r   r<   r   r  r;   r   r   r-   r   r  r
  r  s           rZ   
test_solver    s   
))


"CQUEN+A	q5%.	)B 	QE"A	q%	 B
))//"b
!Cc5<<%%a+?bffSk188E?> 	QUAJ'A	q5!*	%B
))//"b
!Cc5<<%%a+?bffSk188E?> 	QUEN+A	q5%.	)B
))//"b
!Cc5<<%%a+?bffSk188E?>rt   c                   t         j                  j                  d      }|j                  dd| | f      }t	        j
                  |||f      }t        j                  j                  |      }t        |t        j                  j                  |      d       t        |j                  |      t        j                  | t              d       y )Nr3   r   Fr   r   )r4   r5   r6   r   r7   r8   rA   invr   r   r<   r=   r  )r;   r   r   r-   r   r  s         rZ   test_invr!    s    
))


"CQUEN+A	q5%.	)B
))--
Cc5<<##A&E:bffSk266%u55Irt   c                    t         j                  j                  d      }|j                  dd| | f      }t        j                  |      }|j                  |j                        S )Nr3   r   )r4   r5   r6   r   r   r<   r>   )r   r   r-   lAs       rZ   _get_symmatr$    sK    
))


"CQT4L)A	B66"$$<rt   c                    t        t        j                        t        d      k\  r"t        j                  j	                  | ||      S |dk(  r"t        j                  j	                  | |d      S t        j                  j	                  | |      S )Nz1.9.0r   r  assume_aposT)r   r  sym_pos)r   r  )r   r   __version__rA   r  r&  s      rZ   _scipy_linalg_solver+    st    u  !WW%55||!!AX!>>	U	||!!AD!99||!!A!++rt   r'   r   c           	        t         j                  j                  d      }t        |       }t	        j
                  |||f      }|j                  dd|       }t	        j
                  ||      }t        j                  j                  ||d      }t        |t        ||d      d       t        |j                  |      |j                  t              d       |j                  dd| df      }t	        j
                  ||df      }t        j                  j                  ||d      }t        |t        ||d      d       t        |j                  |      |j                  t              d       |j                  dd| | f      }t	        j
                  |||f      }t        j                  j                  ||d      }t        |t        ||d      d       t        |j                  |      |j                  t              d       t        j                  t         d	      5  t        j                  j                  ||d
      }t        |t        ||d      d       t        |j                  |      |j                  t              d       d d d        t        j                  t         d	      5  t        j                  j                  ||d      }t        |t        ||d      d       t        |j                  |      |j                  t              d       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr3   r   r(  )r'  Fr   r   zsym_pos keyword is deprecatedmatchT)r)  gen)r4   r5   r6   r$  r7   r8   r   rA   r  r   r+  r<   r   r  rC   warnsFutureWarningr  s           rZ   test_solve_assume_ar3  
  sz   
))


"CEA	q5%.	)B 	QE"A	q%	 B
))//"b5/
1Cc&q!e<%PbffSk188E?> 	QUAJ'A	q5!*	%B
))//"b5/
1Cc&q!e<%PbffSk188E?> 	QUEN+A	q5%.	)B
))//"b5/
1Cc&q!e<%PbffSk188E?>	m+J	K Ciioob"do3#*1a%@eT"&&+qxxEBC
 
m+J	K Ciioob"eo4#*1a%@eT"&&+qxxEBC CC C
C Cs   %A-L+5A-L7+L47M )r(   )   r   )r'   r   r,  c                   t        |       }t        j                  |||f      }t        t        j                  j                  |      j                         t        j                  j                  |      dd       t        t        j                  j                  |d      t        j                  j                  |d      dd       y )NF)r   check_chunksTr  )r$  r7   r8   r   rA   choleskyr`   r   )r;   r   r-   r   s       rZ   test_choleskyr8  4  s    EA	q5%.	)B
		2&&(a 	 
		2T*at,	rt   	iscomplexFT)nrowncolr   )r   r   r   )r   r   r   c           	        t         j                  j                  d      }|j                  dd| |f      }|j                  dd|       }|rF|d|j                  dd|j                        z  z   }|d|j                  dd|j                        z  z   }t        j                  |||f      }t        j                  ||      }t         j                  j                  ||d      \  }	}
}}t
        j                  j                  ||      \  }}}}t        ||	       t        ||
       |j                         |k(  sJ t        ||       |d d df   |d d df<   t        j                  |||f      }t        j                  ||      }t         j                  j                  ||t        j                  t         j                        j                  t        | |      z        \  }	}
}}||dz
  k(  sJ t
        j                  j                  ||      \  }}}}|j                         |k(  sJ |j                  dd| |f      }|j                  dd| |dz  f      }|rF|d|j                  dd|j                        z  z   }|d|j                  dd|j                        z  z   }t        j                  |||f      }t        j                  |||dz  f      }t         j                  j                  ||d      \  }	}
}}t
        j                  j                  ||      \  }}}}t        ||	       t        ||
       |j                         |k(  sJ t        ||       y )Nr3   r   y              ?r   )rcondr   )r4   r5   r6   r   r;   r7   r8   rA   lstsqr   r`   finfodoubleepsr:   )r:  r;  r   r9  r   r-   r  r   r
  ro   rU   rankrW   dxdrdrankdsb2Ddb2Ds                      rZ   
test_lstsqrI  F  s    ))


"CQT4L)AQD!As||Ar177333s||Ar177333	q5$-	(B	q%	 BIIOOAqO3MAq$		B/BE2b!b!==?d"""b! 1gAadG	q5$-	(B	q%	 BIIOO	1BHHRYY'++c$o= $ MAq$ 4!8		B/BE2==?d""" 	QT4L)A
,,q"tTQY/
0Cs||Ar177333D3<<2syy999	q5$-	(B==udai01DIIOOAs"O5MAq$		D1BE2b!b!==?d"""b!rt   c            	     |   t         j                  j                         j                  d      } t         j                  j	                  | d      \  }}}t         j
                  fdz  dft         j
                  fdz  t         j
                  fffD ]  }t        j                  | d      }||_        t        j                  j	                  |      \  }}}t        ||       t        |j                  t        j                  |            j                  |      |j                  t        j                  |            j                  |             t        |j                  j                  |      t        j                  d             t        |j                  j                  |      t        j                  d             t        j                  | d      }t         j
                  fdz  t         j
                  ff|_        t        t        |      t        |             t        t        |      t        |              y )Nr   r   Ffull_matricesr   r   r)   rl   )r4   r5   r6   rA   r	   nanr7   r8   _chunksr   r<   rB   r>   r=   abs)	ro   rV   rW   r   r/   rC  r   rF  dvs	            rZ   test_no_chunks_svdrS  w  sz   
		&&y1AiimmAUm3GAq!VVINE*bffY^bffY,GH #]]1X.
YY]]2&
B!R!%%
#''*BFF2772;,?,C,CB,GH"$$((2,r
+"$$((2,r
+]]1X.vvi"nrvvi0
#a&#b'"#a&#b'"#rt   r;   )r   r)   r(   )r   r   r   r   r   f4f8c                v   t         j                  j                         j                  | |      j                  |      }t         j                  j                  |      \  }}}t        j                  |      j                  dkD  rdnd}t        ||      \  }}	|j                  |j                  k(  sJ |	j                  |j                  k(  sJ t        j                  j                  t        j                  t        j                  ||z  |	            ||       t        t        j                  ||       \  }
}|
j                  |j                  k(  sJ |j                  |j                  k(  sJ t        j                  j                  t        j                  t        j                  |
|z  |            ||       y )Nr   r   	   r   )decimal)r7   r5   r6   r   rA   r	   r4   r   itemsizer   testingassert_almost_equalasarrayr<   r`   )r;   r/   r   ro   rV   rW   r   rZ  ufvfucvcs               rZ   test_svd_flip_correctionrc    sM    			&&E&&AHHOAiimmAGAq! 88E?++a/aQG a^FB88qww88qwwJJ""2::bffR!VR.@#A1g"V rzz!Q'(FB88qww88qwwJJ""2::bffR!VR.@#A1g"Vrt   )f2rV  rW  f16c8c16c32u_basedc                   	 t        j                  g dg dg dg dg|       }t        |j                  |      \  }}|j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                         }|d d dfxx   |j                  j                  d      z  cc<   t        ||       t        ||j                         y # t        $ r t        j                  d       Y w xY w)N)r3   r   r3   r   )r   r3   r3   r   r  z%128-bit floats not supported by NumPy)u_based_decisionr   )r4   r   	TypeErrorrC   skipr   r>   r   copytyper   )r   ri  ro   rV   r   ys         rZ   test_svd_flip_signrq    s    =HH^^^L
 AqssW5DAq77agg77agg 	
AaeHR  HaOa  =;<=s   #C C43C4)rT  rU  )rY  r   )r   rY  ))r   r   rK  r)   c                   t         j                  j                         j                  |      }t        j                  ||       }t        j
                  j                  |      \  }}}t        j                  ||      \  }}t         j
                  j                  |d      \  }}}	t        ||      \  }}t        ||	      \  }}	t        ||       t        ||       t        ||	       y )Nrl   FrL  )
r4   r5   r6   r7   r8   rA   r	   r`   r   r   )
r/   r;   ro   rC  r   rF  rR  nunsnvs
             rZ   test_svd_supported_array_shapesrv    s     			&&u-A	q	(Br"JBBZZBFBq6JBB b"FBb"FBb"b"b"rt   c                     t        j                  t        d      5  t        j                  j                         j	                  dd      } t        j                  j                  |        d d d        y # 1 sw Y   y xY w)Nz+Array must be chunked in one dimension onlyr.  r)   r   rl   )rC   rD   NotImplementedErrorr7   r5   r6   rA   r	   )ro   s    rZ   test_svd_incompatible_chunkingry    s]    	#P
  II!!#**8F*C
		a	  s   AA44A=ndim)r   r3   r   c                   t        j                  t        d      5  t        j                  j                         j	                  d| z  d| z        }t        j                  j                  |       d d d        y # 1 sw Y   y xY w)NzArray must be 2Dr.  rN  )r   rl   )rC   rD   r   r7   r5   r6   rA   r	   )rz  ro   s     rZ    test_svd_incompatible_dimensionsr|    s`    	z);	< II!!#**54<*M
		a  s   AA::Bdarwinz1.22z(https://github.com/dask/dask/issues/7189)reasonstrictzshape, chunks, axisrk   r   N)rk   r  r   )rk   r  )r   )r   r   r   r   Nr   r3   r   keepdimsc                0   t         j                  j                         j                  |       }t        j                  ||      }t         j
                  j                  ||||      }t        j
                  j                  ||||      }t        ||       y Nrl   ordaxisr  r4   r5   r6   r7   r8   rA   r   r   	r;   r/   r  r   r  r   da_rd_rs	            rZ   test_norm_any_ndimr    so     			&&u-A
a'A
))..4(.
CC
))..4(.
CCc3rt   z1.23z)https://github.com/numpy/numpy/pull/17709	precisionsingler@  isrealc                   d\  }}}ddd}ddd}|r||   n||   }	t         j                  j                         j                  |      j                  |	      }
t	        j
                  |
|      }t         j                  j                  |
| ||      }t        j                  j                  || ||      }|j                  ||   k(  sJ |j                  |j                  k(  sJ y )	Nr  float32float64)r  r@  	complex64
complex128rl   r  )	r4   r5   r6   r   r7   r8   rA   r   r   )r   r  r  r  r;   r/   r  precs_rprecs_cr   r   r  r   r  s                 rZ   test_norm_any_precr    s     +E64"i8G$=G"(GIgi.@E
		&&u-44U;A
a'A
))..4(.
CC
))..4(.
CC99	****99		!!!rt   zshape, chunksrk   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   c                   t         j                  j                         j                  |       }t        j                  ||      }t        t        |             D ]y  }t        t        |             D ]`  }||k7  r||f}n|}t         j                  j                  ||||      }	t        j                  j                  ||||      }
t        |	|
       b { y r  )
r4   r5   r6   r7   r8   ranger   rA   r   r   )r;   r/   r   r  r   r  	firstaxis
secondaxisr  r  r  s              rZ   test_norm_any_slicer    s    & 			&&u-A
a'A3u:&  	E
+ 	 JJ&!:. ))..4(.KC))..4(.KCc3	  rt   )r   r   r_   c                0   t         j                  j                         j                  |       }t        j                  ||      }t         j
                  j                  ||||      }t        j
                  j                  ||||      }t        ||       y r  r  r  s	            rZ   test_norm_1dimr  1  so     			&&u-A
a'A
))..4(.
CC
))..4(.
CCc3rt   )r  r  )r   r3   )r  r  )r3   r   )fronucr   r  c                t   t         j                  j                         j                  |       }t        j                  ||      }|dk(  s
|dk(  s|dk(  r|j                  ddi      }t         j                  j                  ||||      }t        j                  j                  ||||      }t        ||       y )Nrl   r  r   r  r   r  )	r4   r5   r6   r7   r8   r@   rA   r   r   r  s	            rZ   test_norm_2dimr  ?  s     			&&u-A
a'A u}	TRZIIr2h
))..4(.
CC
))..4(.
CCc3rt   ))r   r   r   r  )r3   r   ))r   r   r   r   r  )r   r  )r  r   r  c                j   t         j                  j                         j                  |       }t        j                  ||      }t        |       dkD  rUt        |      dk(  rFt        j                  t              5  t        j                  j                  ||||       d d d        y y y # 1 sw Y   y xY w)Nrl   r   r  )r4   r5   r6   r7   r8   r   rC   rD   rx  rA   r   )r;   r/   r  r   r  r   r  s          rZ   test_norm_implemented_errorsr  S  s     			&&u-A
a'A
5zA~#d)q.]]./ 	FIINN1$THNE	F 	F )~	F 	Fs   :$B))B2)N
__future__r   sysrC   importorskipr   r4   scipy.linalgr   packaging.versionr   
dask.arrayr   r7   dask.array.linalgr   r   r	   r
   r   dask.array.numpy_compatr   dask.array.utilsr   r   r   markparametrizer   r[   ri   rs   ry   rx  r|   r   r   r   r   r  r  r   r   r   r   r   r   slowfilterwarningsr   r   r   r  r  r  r  r  r!  r$  r+  r3  r8  rI  rS  rc  rq  rv  ry  r|  xfailplatforminfr  r  r  r  r  r   rt   rZ   <module>r     s   " 
    G    G    %  A A / ; ; '.	
	
	
 	"!!	R:&	R:&"		
 
RZ M'*V)4W*V)4X 7ORf<4gRf<4~@ 	RZ 	R*%	R*-"		
 		
 		
 		
 		
 		
 		
 		
 	  .	RZ u;>~>~* '.	
	
	
 	"!!  .	R()C"%LM%L*"  >?	$ @	$ gt_5
 6
 lI%>?< @<8 2::rzz":RZZ<T!U:: #AB2::rzz":;2 < C2P o.o.qc"GW#56 7 # / /0'(T !12RS$ T 3 $ 0$ 1 $8  +-KL- M-. +-KL- M-. +-KL- M-.J +h-AB? C?> +h-ABJ CJ, +h-@A&C B&CR +-RS T" udm42[-4PQ, R 5,^#* "@A#AB4,/W 0 C BW, "OPT5M2 3 Q& #IJ"BC D K, + , LLH>wv!>5  
 *<>TU $2rvvw!?@eT]3 4 A	 '&/!6  
 x&:;D%=1eT]3$2rvvw!?@" A 4 2 <"" LLH>wv!>5  
 	t		I	|$	/*	 $2rvvw!?@eT]3  4 A	 $  .AST 1eT]3 4 2
 57OP !67eT]3 4 8	 #%KL 0eT]3F 4 1	Frt   