
    >ie`                    "   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j                            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j                            dg d           d!             Zd" Z ej                            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j                            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j                            d6g d7          d8             Z%ej                            d9d:d;g          d<             Z&ej                            d9d=d>g          d?             Z'ej                            d@ej(        ej(        fej)        ej)        fg          dA             Z*ej                            dBg dC          ej                            dDej(        ej)        g          dE                         Z+dF Z,ej                            dGg dH          ej                            dIg dH          ej                            dJdKg          ej                            dBdLdMg          dN                                                 Z-dO Z.dP Z/ej        j0        ej                            dQg dR          ej        1                    dS          dT                                     Z2ej        j0        ej                            dQg dU          dV                         Z3dW Z4ej                            dXg dY          dZ             Z5ej                            dXg d[          d\             Z6ej                            dXg d[          d]             Z7d^ Z8ej                            dXd/d_g          d`             Z9ej                            dXd/d_g          da             Z:db Z;dc Z<ej                            dXd/ddg          de             Z=ej                            dXg df          dg             Z>ej                            dhdidjg          ej                            dkdldmg          dn                         Z?do Z@ej                            dpg dq          ej                            dBg dr          ej                            dDdsdtg          du                                     ZAej                            dDg dv          ej                            dwdjdig          dx                         ZBej                            dBg dy          ej                            dpg dz          d{                         ZCd| ZDej                            d}g d~          d             ZEej        F                    ejG        dk    oe ed          k     ddi          ej                            dg dg dg dg dg          ej                            ddddejH        ejH         g          ej                            ddidjg          d                                                 ZIej        j0        ej        F                    ejG        dk    oe ed          k     ddi          ej                            dddgddgddgddgddgg          ej                            ddddejH        ejH         g          ej                            ddidjg          d                                                             ZJej                            dg dg dg dg          ej                            dg d          ej                            ddidjg          d                                     ZKej                            dg dg dg dg          ej                            dg d          ej                            ddidjg          d                                     ZLej                            dg dg dg          ej                            dg d          ej                            ddidjg          d                                     ZMdS )    )annotationsNnumpyscipy)parse)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                                                            | |f          }t          j        ||d          }| }t          | |          }|}|}	| }
t          | |          }|}|}|}t          ||          }|4t          |          \  }}t          ||f|j	                   t          ||	f|j	                   t          |t          j
        ||                     t          t          j        ||          t          j
        |j        |                     t          |t          j        |                    |j	        d                                        t          |d          \  }}}t           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 |                              d S t%          j        |          5  t          |          \  }}d d d            n# 1 swxY w Y   t%          j        |          5  t          |d          \  }}}d d d            d S # 1 swxY w Y   d S )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                         <lib/python3.11/site-packages/dask/array/tests/test_linalg.py	test_tsqrr[      sO   X )


!
!
(
(!Q
0
0C=V#666D C
a))C
C
C C
a))C
CDDtT??DDzz13*ag&&&3*ag&&&#rva||$$$"&c""BF13NN333!RWQYYqwqz2233444 $///1b)--$$Q'!W3*ag&&&3&!'"""4,)))"&c""BF13NN333"&t$$bfR&6&6777#rvbfQ

33RX>>?????]:&& 	 	::DAq	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]:&& 	4 	4Dd333HAq"	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s$   K33K7:K7L55L9<L9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                                                            | 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k    d d f         }||	dk    d d f         }|j        d         }|r-|d d |dk    f         }|d d |
dk    f         }|j        d         }|}t          ||          }|}|}|}t          ||          }|}|}|}t          ||          }|zt          |          \  }}|	                                }|	                                }t          ||f|j                   t          ||f|j                   t          |t          j        ||                     t          t          j        ||          t          j        |j        |                     t          |t          j        |                     t          |d	
          \  }}}|	                                }|	                                }|	                                }t           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 |                              d S t%          j        |          5  t          |          \  }}d d d            n# 1 swxY w Y   t%          j        |          5  t          |d	
          \  }}}d d d            d S # 1 swxY w Y   d S )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   sx   h )


!
!
(
(%!)U);
<
<C19eqA%
OOOqOOO
aaad)C
ad)C	s5s	3	3	3B	s5s	3	3	3B=V#666D BHaaaK #)QQQ,IaL AAArCxK !!!S3Y,IaL C
a))C
C
C C
a))C
CDDtT??DDzz1IIKKIIKK3*ag&&&3*ag&&&#rva||$$$"&c""BF13NN333!RWQZZ    $///1bIIKKIIKKZZ\\)--$$Q'!W3*ag&&&3&!'"""4,)))"&c""BF13NN333"&t$$bfR&6&6777#rvbfQ

33RX>>?????]:&& 	 	::DAq	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]:&& 	4 	4Dd333HAq"	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s$   O;;O?O?P==QQc            	     R   d} d}d}d}t           j                                                            d          }t          j        |d          }t          j                            |          \  }}t          | |f|j                   t          ||f|j                   t          |t          j	        ||                     t          t          j
        ||          t          j	        |j        |                     t          |t          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                            |          \  }}|                                }|                                }t          | |f|j                   t          ||f|j                   t          |t          j	        ||                     t          t          j
        ||          t          j	        |j        |                     t          |t          j        |                     d S )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 )


!
!
(
(
1
1C
c"9:::A9<<??DAqsCj!'"""sCj!'"""c26!Q<<   bfS#qsA///a171:..//000 9cRWW--./00D	aaadB	tA	&	&	&B
b###A
161119A9<<??DAq			A			AsCj!'"""sCj!'"""c26!Q<<   bfS#qsA///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                                                            | |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        d                                        d S t          j        |          5  t          |          \  }}d d d            d S # 1 swxY w Y   d S 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
0
0C=V#666D
C
a))C
C
CEDzz13*ag&&&3*ag&&&#rva||$$$"&&&qsA777!RWQYYqwqz223344444]:&& 	 	::DAq	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   E99E= E=c           	        t           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        d                                        d S t          j        |          5  t          |          \  }}d d d            d S # 1 swxY w Y   d S 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
0
0C=V#666D
C
a))C
C
CE$xx13*ag&&&3*ag&&&#rva||$$$"&&&qsA777!RWQYYqwqz223344444]:&& 	 	d88DAq	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	rz   c                    d\  } }t           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 d S )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
0
0C=b!W3777DXXFBXXFBRRTJBBTJBBRRRrt   zm,n)r   r   )r   r   r(   c                   t           j                                                            | |f          }t          j        |d|fd          }t          j                            |          \  }}}t          j        |||          \  }}}	t          |||g|||	g          D ])\  }
}|
j	        |j	        k    sJ |
j
        |j
        k    sJ *d S )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
3
3
3CY]]3''NCdz#sD))HAq"sC&Ar
33 $ $QyAG####yAG#####$ $rt   iteratorpowerQRc                L   t          j        dd          }t           j                            |d| ddd          \  }}}t           j                            |d| dd	          \  }}}t	          |j                  t	          |j                  k     sJ t          ||           d S )
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i&&	Q4c '  GAq! ))	Q *  JBB qv;;RW%%%%art   )r   r   )r   r   c           
     n   d\  }}d}t           j                                                            ||f||f          }t          |d|z  | d         | d         d          \  }}}t          j                            |                                d	
          }t          j                            ||d d d |f         |d |         z  |d |d d f         z  z
                                  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                             d S )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     s   DAq	A
	&&1vq!f&==A 	1q58A;Xa[t  HAq" \aiikke<<F <a1QQQU8ae#3r"1"aaa%y"@@IIKKQOOD &Q-!#D C#::::bfQllBF1QQQU8:qBQBx88999bfQllBF2bqb!!!e9b!QQQik::;;;;;rt   zinput_dtype, output_dtypec                   t           j                                                            dd                              |           }t	          |dd          \  }}}|j        |j        cxk    r|j        cxk    r|k    sn J d S )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     s     		&&x&AAHHUUAa...HAq"7ag99999999\99999999rt   r/   ))r   r   r   r   r   r   c                   t           j                                                            d|                               |          }t	          |          \  }}}|j        |j        cxk    r|j        cxk    r|k    sn J d S )Nr   rl   )r7   r5   r6   r   r	   r   )r/   r   ro   rV   rW   r   s         rZ   test_svd_dtype_preservationr     s     		&&x&??FFuMMA!ffGAq!7ag11111111E11111111rt   c                    d\  } }t           j                            d                              | |fd          }t          |dd          \  }}}t          |dd          \  }}}t	          t          j        ||k                                    ||k                                    ||k                                                        sJ d S )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*FFAa...HAq" AD111KBCrz17--//AG==??R3YOO<M<MNNOOOOOOOrt   rE   )r   r   r   r   rF   r   r   )r   r   r\   c                N   t           j                                                            | |f|          }t          ||ddd          \  }}}t          j        |||          \  }}}t          | ||          }|j        | |fk    sJ |j        |fk    sJ |j        ||fk    sJ d S )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&BBAQ4aHHHGAq!jAq!!GAq!Aq!A7q!f7qd????7q!frt   c                   t          j        |                     |                              |          |          sJ t          |t	          j        |          d           t          |t	          j        |          d           d S )NFcheck_graph)r4   allcloser<   r   r7   trilr?   )plrV   r-   s       rZ   _check_lu_resultr     sp    ;quuQxx||A***** a////a//////rt   c            	     n   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                            |          \  }}}t          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 ]u\  }}t          j        |||f          }t
          j                            |          \  }}}t          j                            |          \  }}	}
t          ||	|
|           vd S )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   %  s   	===---P	Q	QB		
	
 	
B R1a&)) ( (5]1eU^444,//!$$1aY\\"%%
B!RU++++!RU++++!RU++++RQ''''	###$$$$$$"""	
	
 	
B qcNN ( (5]1eU^444,//!$$1aY\\"%%
BRQ''''	( (rt   r   )r   r   r'   r   z4ignore:Increasing:dask.array.core.PerformanceWarningc                   t           j                            d          }|                    dd| | f          }t	          j        |d          }t          j                            |          \  }}}t          ||||           d S )Nr   r   r   rl   	r4   r5   r6   integersr7   r8   rA   r   r   r   rngr-   r   r   r   r   s          rZ   	test_lu_2r   O  sy     )


#
#CQT4L))A	q	(	(	(Bb!!JBBRR#####rt   )r   r      c                   t           j                            d          }|                    dd| | f          }t	          j        |d          }t          j                            |          \  }}}t          ||||           d S )Nr   r   )r   r   rl   r   r   s          rZ   	test_lu_3r   [  sy     )


#
#CQT4L))A	q	*	*	*Bb!!JBBRR#####rt   c                     t           j                                        } |                     ddd          }t	          j        |d          t          j        t          fd           |                     ddd          }t	          j        |d          t          j        t          fd	           |                     ddd
          }t	          j        |d          t          j        t          fd           d S )Nr   r   r   r   r   r   r   r   rl   c                 B    t           j                                       S Nr7   rA   r   r   s   rZ   <lambda>z test_lu_errors.<locals>.<lambda>k      bill2&6&6 rt   )r   r   )r   r   c                 B    t           j                                       S r   r   r   s   rZ   r   z test_lu_errors.<locals>.<lambda>o  r   rt   )r   r   c                 B    t           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
M*6666777QG$$A	q	(	(	(B
M*6666777QH%%A	q	(	(	(B
M*666677777rt   )r;   r   )r(   r   )F   r   c                   t           j                            d          }|                    dd| | f          }|                    dd|           }t          j        |          }t          j        |||f          }t          j        ||          }t
          j                            ||          }t          |t          j                            ||                     t          |                    |          |                    t                               t          j        |          }	t          j        |	||f          }
t          j        ||          }t
          j                            |
|d          }t          |t          j                            |	|d                     t          |
                    |          |                    t                               d S )Nr3   r   T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  sy   
)


"
"CQUEN++AQE""A 
B
-UEN
+
+C	q%	 	 B
)
$
$S"
-
-Cc5<00Q77888cggcllAHHUOO,,, 
B
-UEN
+
+C	q%	 	 B
)
$
$S"D
$
9
9Cc5<00Qd0CCDDDcggcllAHHUOO,,,,,rt   )r(   r   )r   r   c                   t           j                            d          }|                    dd| | f          }|                    dd| df          }t          j        |          }t          j        |||f          }t          j        ||df          }t
          j                            ||          }t          |t          j                            ||                     t          |                    |          |                    t                               t          j        |          }	t          j        |	||f          }
t          j        ||df          }t
          j                            |
|d          }t          |t          j                            |	|d                     t          |
                    |          |                    t                               d S )Nr3   r   r   Tr   r  r  s              rZ   test_solve_triangular_matrixr    s   
)


"
"CQUEN++AQUAJ''A 
B
-UEN
+
+C	q5!*	%	%B
)
$
$S"
-
-Cc5<00Q77888cggcllAHHUOO,,, 
B
-UEN
+
+C	q5!*	%	%B
)
$
$S"D
$
9
9Cc5<00Qd0CCDDDcggcllAHHUOO,,,,,rt   c                   t           j                            d          }|                    dd| | f          }|                    dd| | f          }t          j        |          }t          j        |||f          }t          j        |||f          }t
          j                            ||          }t          |t          j                            ||                     t          |                    |          |                    t                               t          j        |          }	t          j        |	||f          }
t          j        |||f          }t
          j                            |
|d          }t          |t          j                            |	|d                     t          |
                    |          |                    t                               d S )Nr3   r   Tr   r  r  s              rZ   test_solve_triangular_matrix2r    s   
)


"
"CQUEN++AQUEN++A 
B
-UEN
+
+C	q5%.	)	)B
)
$
$S"
-
-Cc5<00Q77888cggcllAHHUOO,,, 
B
-UEN
+
+C	q5%.	)	)B
)
$
$S"D
$
9
9Cc5<00Qd0CCDDDcggcllAHHUOO,,,,,rt   c                    t           j                                                            ddd          } t           j                                                            ddd          }t	          j        | d          t	          j        |d          t          j        t          fd           t           j                                                            ddd	          } t           j                                                            ddd          }t	          j        | d
          t	          j        |d          t          j        t          fd           d S )Nr   r   r   r3   r   rl   r   c                 D    t           j                                       S r   r7   rA   r  r   r	  s   rZ   r   z.test_solve_triangular_errors.<locals>.<lambda>      bi&@&@R&H&H rt   r)   )r   r   c                 D    t           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33A	q	+	+	+B	q	#	#	#B
M*HHHHHIII
	((B99A
	((B33A	q	(	(	(B	q	#	#	#B
M*HHHHHIIIIIrt   r   c                
   t           j                            d          }|                    dd| | f          }t	          j        |||f          }|                    dd|           }t	          j        ||          }t          j                            ||          }t          |t          j                            ||          d           t          |
                    |          |                    t                    d           |                    dd| df          }t	          j        ||df          }t          j                            ||          }t          |t          j                            ||          d           t          |
                    |          |                    t                    d           |                    dd| | f          }t	          j        |||f          }t          j                            ||          }t          |t          j                            ||          d           t          |
                    |          |                    t                    d           d S )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++????bffSkk188E??>>>> 	QUAJ''A	q5!*	%	%B
)//"b
!
!Cc5<%%a++????bffSkk188E??>>>> 	QUEN++A	q5%.	)	)B
)//"b
!
!Cc5<%%a++????bffSkk188E??>>>>>>rt   c                   t           j                            d          }|                    dd| | f          }t	          j        |||f          }t          j                            |          }t          |t          j                            |          d           t          |
                    |          t          j        | t                    d           d S )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::::bffSkk26%u5555IIIIIIrt   c                    t           j                            d          }|                    dd| | f          }t          j        |          }|                    |j                  S )Nr3   r   )r4   r5   r6   r   r   r<   r>   )r   r   r-   lAs       rZ   _get_symmatr#    sO    
)


"
"CQT4L))A	B66"$<<rt   c                ,   t          t          j                  t          d          k    r"t          j                            | ||          S |dk    r"t          j                            | |d          S t          j                            | |          S )Nz1.9.0r   r  assume_aposT)r   r  sym_pos)r   r  )parse_versionr   __version__rA   r  r%  s      rZ   _scipy_linalg_solver+    s    U&''=+A+AAA|!!AX!>>>	U		|!!AD!999|!!A!+++rt   r'   r   c           	        t           j                            d          }t          |           }t	          j        |||f          }|                    dd|           }t	          j        ||          }t          j                            ||d          }t          |t          ||d          d           t          |                    |          |                    t                    d           |                    dd| df          }t	          j        ||df          }t          j                            ||d          }t          |t          ||d          d           t          |                    |          |                    t                    d           |                    dd| | f          }t	          j        |||f          }t          j                            ||d          }t          |t          ||d          d           t          |                    |          |                    t                    d           t          j        t           d	          5  t          j                            ||d
          }t          |t          ||d          d           t          |                    |          |                    t                    d           d d d            n# 1 swxY w Y   t          j        t           d	          5  t          j                            ||d          }t          |t          ||d          d           t          |                    |          |                    t                    d           d d d            d S # 1 swxY w Y   d S )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   rD   FutureWarningr  s           rZ   test_solve_assume_ar2  
  s   
)


"
"CEA	q5%.	)	)B 	QE""A	q%	 	 B
)//"b5/
1
1Cc&q!e<<<%PPPPbffSkk188E??>>>> 	QUAJ''A	q5!*	%	%B
)//"b5/
1
1Cc&q!e<<<%PPPPbffSkk188E??>>>> 	QUEN++A	q5%.	)	)B
)//"b5/
1
1Cc&q!e<<<%PPPPbffSkk188E??>>>>	},K	L	L	L C Cioob"do33#*1a%@@@eTTTT"&&++qxxEBBBBC C C C C C C C C C C C C C C
 
},K	L	L	L C Cioob"eo44#*1a%@@@eTTTT"&&++qxxEBBBBC C C C C C C C C C C C C C C C C Cs&   0BK>>LL$BN33N7:N7)r(   )   r   )r'   r   r,  c                   t          |           }t          j        |||f          }t          t          j                            |                                          t          j                            |          dd           t          t          j                            |d          t          j                            |d          dd           d S )NF)r   check_chunksTr   )r#  r7   r8   r   rA   choleskyr`   r   )r;   r   r-   r   s       rZ   test_choleskyr7  4  s    EA	q5%.	)	)B
	2&&((a  	    
	2T**at,,	     rt   	iscomplexFT)nrowncolr   )r   r   r   )r   r   r   c           	        t           j                            d          }|                    dd| |f          }|                    dd|           }|rD|d|                    dd|j                  z  z   }|d|                    dd|j                  z  z   }t          j        |||f          }t          j        ||          }t           j                            ||d          \  }	}
}}t
          j                            ||          \  }}}}t          ||	           t          ||
           |
                                |k    sJ t          ||           |d d df         |d d df<   t          j        |||f          }t          j        ||          }t           j                            ||t          j        t           j                  j        t          | |          z            \  }	}
}}||dz
  k    sJ t
          j                            ||          \  }}}}|
                                |k    sJ |                    dd| |f          }|                    dd| |dz  f          }|rD|d|                    dd|j                  z  z   }|d|                    dd|j                  z  z   }t          j        |||f          }t          j        |||dz  f          }t           j                            ||d          \  }	}
}}t
          j                            ||          \  }}}}t          ||	           t          ||
           |
                                |k    sJ t          ||           d S )Nr3   r   y              ?r   )rcondr   )r4   r5   r6   r   r;   r7   r8   rA   lstsqr   r`   finfodoubleepsr:   )r9  r:  r   r8  r   r-   r  r   r	  ro   rU   rankrW   dxdrdrankdsb2Ddb2Ds                      rZ   
test_lstsqrH  F  sW    )


"
"CQT4L))AQD!!A 4s||Ar173333s||Ar173333	q5$-	(	(B	q%	 	 BIOOAqO33MAq$	B//BE2b!b!==??d""""b! 1gAaaadG	q5$-	(	(B	q%	 	 BIOO	1BHRY''+c$oo= $  MAq$ 4!8	B//BE2==??d"""" 	QT4L))A
,,q"tTQY/
0
0C :s||Ar173333D3<<2sy9999	q5$-	(	(B=udai011DIOOAs"O55MAq$	D11BE2b!b!==??d""""b!rt   c            	        t           j                                                            d          } t           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                            |          \  }}}t          ||           t          |
                    t          j        |                    
                    |          |
                    t          j        |                    
                    |                     t          |j        
                    |          t          j        d                     t          |j        
                    |          t          j        d                     t          j        | d          }t           j        fdz  t           j        ff|_        t          t          |          t          |                     t          t          |          t          |                     d S )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/   rB  r   rE  dvs	            rZ   test_no_chunks_svdrR  w  s   
	&&y11AimmAUm33GAq!VINE*bfY^bfY,GH # #]1X...
Y]]2&&
B!R!%%

##''**BFF272;;,?,?,C,CB,G,GHHH"$((2,,r

+++"$((2,,r

+++]1X...vi"nrvi0
#a&&#b''"""#a&&#b''""""# #rt   r;   )r   r)   r(   )r   r   r   r   r   f4f8c                6   t           j                                                            | |                              |          }t           j                            |          \  }}}t          j        |          j        dk    rdnd}t          ||          \  }}	|j        |j        k    sJ |	j        |j        k    sJ t          j
                            t          j        t          j        ||z  |	                    ||           t          t          j        ||           \  }
}|
j        |j        k    sJ |j        |j        k    sJ t          j
                            t          j        t          j        |
|z  |                    ||           d S )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   rY  ufvfucvcs               rZ   test_svd_flip_correctionrb    sh    		&&E&&AAHHOOAimmAGAq! 8E??+a//aaQG a^^FB8qw8qwJ""2:bfR!VR.@.@#A#A1g"VVV rz!Q''(FB8qw8qwJ""2:bfR!VR.@.@#A#A1g"VVVVVrt   )f2rU  rV  f16c8c16c32u_basedc                   	 t          j        g dg dg dg dg|           }n$# t          $ r t          j        d           Y nw xY wt          ||j        |          \  }}|j        |j        k    sJ |j        |j        k    sJ |                                }|d d dfxx         |j        	                    d          z  cc<   t          ||           t          ||j                   d S )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   rh  ro   rV   r   ys         rZ   test_svd_flip_signrp    s   =H^^^^^^^^^^^L
 
 
  = = =;<<<<<=AqsW555DAq7ag7ag 	
AaaaeHHHR   HHHaOOOas   "% AA)rS  rT  )rX  r   )r   rX  ))r   r   rJ  r)   c                    t           j                                                            |          }t          j        ||           }t          j                            |          \  }}}t          j        ||          \  }}t           j                            |d          \  }}}	t          ||          \  }}t          ||	          \  }}	t          ||           t          ||           t          ||	           d S )Nrl   FrK  )
r4   r5   r6   r7   r8   rA   r	   r`   r   r   )
r/   r;   ro   rB  r   rE  rQ  nunsnvs
             rZ   test_svd_supported_array_shapesru    s     		&&u--A	q	(	(	(Br""JBBZBFBq66JBB b"FBb"FBb"b"b"rt   c                    t          j        t          d          5  t          j                                                            dd          } t          j                            |            d d d            d S # 1 swxY w Y   d S )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_chunkingrx    s    	#P
 
 
   I!!##**8F*CC
	a	                 s   AA<<B B ndim)r   r3   r   c                   t          j        t          d          5  t          j                                                            d| z  d| z            }t          j                            |           d d d            d S # 1 swxY w Y   d S )NzArray must be 2Dr.  rM  )r   rl   )rC   rD   r   r7   r5   r6   rA   r	   )ry  ro   s     rZ    test_svd_incompatible_dimensionsr{    s    	z);	<	<	<  I!!##**54<*MM
	a                 s   ABB	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                @   t           j                                                            |           }t          j        ||          }t           j                            ||||          }t          j                            ||||          }t          ||           d S 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    s     		&&u--A
a'''A
)..4(.
C
CC
)..4(.
C
CCc3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                                                            |           }t          j        ||          }t          t          |                     D ]}t          t          |                     D ]e}||k    r||f}n|}t           j                            ||||          }	t          j                            ||||          }
t          |	|
           fd S 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(.KKC)..4(.KKCc3	    rt   )r   r   r_   c                @   t           j                                                            |           }t          j        ||          }t           j                            ||||          }t          j                            ||||          }t          ||           d S r  r  r  s	            rZ   test_norm_1dimr    s     		&&u--A
a'''A
)..4(.
C
CC
)..4(.
C
CCc3rt   )r  r  )r   r3   )r  r  )r3   r   )fronucr   r  c                   t           j                                                            |           }t          j        ||          }|dk    s|dk    s|dk    r|                    ddi          }t           j                            ||||          }t          j                            ||||          }t          ||           d S )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}}		TRZZIIr2h
)..4(.
C
CC
)..4(.
C
CCc3rt   ))r   r   r   r  )r3   r   ))r   r   r   r   r  )r   r  )r  r   r  c                   t           j                                                            |           }t          j        ||          }t          |           dk    rjt          |          dk    rYt          j        t                    5  t          j	        
                    ||||           d d d            d S # 1 swxY w Y   d S d S d S )Nrl   r   r  )r4   r5   r6   r7   r8   r   rC   rD   rw  rA   r   )r;   r/   r  r   r  r   r  s          rZ   test_norm_implemented_errorsr  9  s    		&&u--A
a'''A
5zzA~~#d))q..].// 	F 	FINN1$THNEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F ~..s   $B88B<?B<)N
__future__r   sysrC   importorskipr   r4   scipy.linalgr   packaging.versionr   r)  
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   rw  r|   r   r   r   r   float32float64r   r   r   r   r   r   slowfilterwarningsr   r   r   r  r  r  r  r  r   r#  r+  r2  r7  rH  rR  rb  rp  ru  rx  r{  xfailplatforminfr  r  r  r  r   rt   rZ   <module>r     s   " " " " " " 



   G     G            4 4 4 4 4 4       A A A A A A A A A A A A A A / / / / / / ; ; ; ; ; ; ; ; ; ; '.	
	
	
 	"!!	R:&	R:&"		
 
RZ M'* *V)4 )4W* *V)4X 7O O OR Rf<4 <4gR Rf<4~  @ 	RZ 	R*%	R*-"		
 		
 		
 		
 		
 		
 		
 		
 	  .	RZ u;> >~ > >~* '.	
	
	
 	"!!  .	R()C"% %L M% %L*  "  > > >??	$ 	$ @?	$ gt_55
 
 65
 lI%>??< < @?<8 2:rz":RZ<T!U : : : #A#A#ABB2:rz":;;2 2 <; CB2P P P ooo..ooo..qc""GW#566  76 #" /. /.0 0 0'( '( '(T !1!1!122RSS$ $ TS 32 $ 00$ $ 10 $8 8 8  +-K-K-KLL- - ML-. +-K-K-KLL- - ML-. +-K-K-KLL- - ML-.J J J +h-ABB? ? CB?> +h-ABBJ J CBJ  , , , +h-@AA&C &C BA&CR +-R-R-RSS  TS" udm442[-4PQQ, , RQ 54,^# # #* "@"@"@AA#A#A#ABB4,//W W 0/ CB BAW, "O"O"OPPT5M22  32 QP& #I#I#IJJ"B"B"BCC  DC KJ,   ++  ,+ LHD}}V/D/D!D5   
 *<*<*<>T>T>TU  $2rvw!?@@eT]33  43 A@	   LHD}}V/D/D!D5   
 	t		I	|$	/*	 	 $2rvw!?@@eT]33    43 A@	 	  $  ...ASASAST  11eT]33  43 21 
 5557O7O7OP  !6!6!677eT]33  43 87	  ###%K%K%KL  00eT]33F F 43 10	 F F Frt   