
    tKgŎ                         d Z ddlZddlmZ ddlmZmZmZmZ ddl	Z	ddl	m
Z ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z! dd	l"m#Z$ g d
Z%ddZ&ddZ' G d d      Z(d Z)y)z)test sparse matrix construction functions    N)array)assert_equalassert_assert_array_equalassert_array_almost_equal_nulp)raises)check_free_memory)check_random_state)
csr_matrix
coo_matrix	csr_array	coo_array	csc_array	bsr_array	dia_array	dok_array	lil_array
csc_matrix
bsr_matrix
dia_matrix
lil_matrixsparrayspmatrix
_construct)rand)csrcsccoobsrdialildokc           	      f    t        |      }|j                  }t        j                  | ||||||      S )N)r
   standard_normal	constructrandom)mndensityformatdtyperandom_statedata_rvss          e/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/sparse/tests/test_construct.py_sprandnr/      s9    %l3L++HAq'65((4 4    c                 j    t        |      }|j                  }t        j                  | |f|||||      S )N)r)   r*   r+   r,   data_sampler)r
   r$   r%   random_array)r'   r(   r)   r*   r+   r,   r2   s          r.   _sprandn_arrayr4   #   s>    %l3L//L!!1a&'&PU/;,X Xr0   c            
       &   e Zd Zej                  j                  deeee	e
eeg      d        Zej                  j                  deeeeeeg      d        Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zej                  j                  dej>                  ej@                  g      d        Z!ej                  j                  dejD                  ej@                  g      d        Z#ej                  j                  dejD                  ej@                  g      d        Z$d Z%d Z&d Z'd Z(d Z)d Z*ej                  j                  deeg      d        Z+d Z,d Z-ej                  j                  deeg      d        Z.d Z/ej                  j                  dej`                  ejb                  f      d        Z2d  Z3d! Z4ej                  jj                  ej                  jm                  d"      d#               Z7d$ Z8d% Z9d& Z:d' Z;d( Z<d) Z=d* Z>d+ Z?d, Z@d- ZAy.)/TestConstructUtilsclsc                 t    t        j                  t        d      5   |d       d d d        y # 1 sw Y   y xY w)NzEscipy sparse array classes do not support instantiation from a scalarmatchr   )pytestr   
ValueErrorselfr7   s     r.    test_singleton_array_constructorz3TestConstructUtils.test_singleton_array_constructor-   s1    
 ]].
 F
 
 
s   	.7c                 2     |d      j                   dk(  sJ y)a1  
        This test is for backwards compatibility post scipy 1.13.
        The behavior observed here is what is to be expected
        with the older matrix classes. This test comes with the
        exception of dok_matrix, which was not working pre scipy1.12
        (unlike the rest of these).
        r      rB   Nshaper=   s     r.   !test_singleton_matrix_constructorz4TestConstructUtils.test_singleton_matrix_constructor;   s     1v||v%%%r0   c                 r   t        g dg      }t        g dg dg      }t        g dg dg dg      }g }|j                  |ddddggf       |j                  |dgdddggf       |j                  |dgdddgdggf       |j                  |dgddddggf       |j                  |dgddddggf       |j                  |dgddddggf       |j                  |dgddddgddggf       |j                  |dgddddgddggf       |j                  |dgddddgddggf       |j                  |dgdd	g d
g dg dgf       |j                  |dgdd	g dg dg dgf       |j                  |dgddg dg dg dgf       |j                  |ddgddg dg dg dgf       |j                  |ddgdd	g dg dg dgf       |j                  |ddgddg dg dg dg dg dg dgf       |j                  |g d ddg d!g d"g d#g d$g d%g dgf       |j                  |g d&ddg d'g d(g d)g d*g d+g d,gf       |j                  |g d-t        |d         t        |d         g d.g d/g d0g d1g dgf       |D ]  \  }}}}}	t        |d         |k(  r3||k(  r.t        t	        j
                  ||      j                         |	       t        t	        j
                  ||||      j                         |	       t        t	        j
                  ||||f      j                         |	        y )2NrB                        	   
                  r   rB   rH   rI   rJ   rB   r   r   r   r   rH   r   r   r   r   rI   r   )r   r   r   rJ   rK   r   r   rI   r   r   )r   r   r   rJ   r   )r   r   r   r   rK   )rB   r   rO   r   rH   r   r   r   rI   rM   r   r   r   rB   rN   r   r   r   rH   rO   r   rM   )r   r   rI   r   r   r   )r   r   r   rJ   r   r   )r   r   r   r   rK   r   )rM   r   r   r   r   r   r   rN   r   r   r   r   r   r   rO   r   r   r   rX   r   rB   )rM   rT   r   r   r   r   )rB   rN   rU   r   r   r   )r   rH   rO   rV   r   r   )r   r   rI   rP   rW   r   )r   r   r   rJ   rQ   r   rH   rX   )r   r   rO   r   r   )rS   r   r   rP   r   )r   rT   r   r   rQ   r   r   rU   r   r   rB   r   r   rV   r   r   rH   r   r   rW   )rX   rB   rH   )r   rN   rU   r   r   )rB   r   rO   rV   r   )r   rH   r   rP   rW   )r   r   rI   r   rQ   )r   appendlenr   r%   spdiagstoarray)
r>   diags1diags2diags3casesdor'   r(   results
             r.   test_spdiagszTestConstructUtils.test_spdiagsI   s{   ()(* +()+ , faAu-.fqc1a1#/0fqc1a1#qc34fqc1a1Q%12fqc1a1Q%12fbT1a1Q%12fqc1a1Q%178fbT1a1Q%178fqc1a1Q%178fqc1a)Ii)HIJfqc1a)Ii)HIJfqc1a+k+)NOPfqeQGGG+DEFfr!faYy,KLMfqfa].;.;.;.;.;-= > 	? 	fh1/A0B0B0B0B0B/D E 	F 	fiA1A1@1@1@1@0B C 	D 	fj#fQi.#fQi.''''&	() 	* #(Aq!Q1Q4yA~!q&Y..q!4<<>G**1aA6>>@&I**1a!Q8@@BFK	 #(r0   c                    t        g d      }t        g d      }t        g d      }g }|j                  |d d dddggf       |j                  |d d gdgddggf       |j                  |d d gdgddgdggf       |j                  |d d gdgdddggf       |j                  |d d gdgdddggf       |j                  |d d	 gdgd
ddgdd	ggf       |j                  |d d gdgd
ddgddggf       |j                  |d d gdgdg dg dg dgf       |j                  |d d gdgdg dg dg dgf       |j                  |d d gdgdg dg dg dgf       |j                  |d d	 gdgdg dg dg dgf       |j                  |d d gdgdg dg dg dgf       |j                  |d d gdgdg dg dg dgf       |j                  |d d gd	gdg dg dg dgf       |j                  |d d	 gdgdg d g d!g dgf       |j                  |d d gd"gdg d#g dg dgf       |j                  |d d gd$gd%g d&g d&g d&g d&g d'gf       |j                  |d d	 gd(gd%g d&g d&g d&g d'g d)gf       |j                  |d d gdgd%g d&g d&g d'g d)g d*gf       |j                  |d d gdgd%g d&g d'g d)g d*g d&gf       |j                  |d d gdgd%g d'g d)g d*g d&g d&gf       |j                  |d d	 gdgd%g d+g d,g d&g d&g d&gf       |j                  |d d gd	gd%g d-g d&g d&g d&g d&gf       |j                  |d d |d d gdd	gd.g d/g d)g d*gf       |j                  |d d	 |d d gddgdg d0g d1g d2gf       |j                  |d d" |d d gd	d(gd3g d4g d5g d6g d7g d8g d9gf       |j                  |d d" ||d d" gg d:d;g d<g d=g d>g d?g d@gf       |j                  |d d	 |d d |gg dAdBg dCg dDg dEg dFg dGg dHgf       |j                  |gdgddggf       |j                  |d d |gdd	gd.g d/g d)g d*gf       |j                  t        j                   g dIg dJg      ddgd.g d'g dKg dLgf       |j                  g dMg dNd.g dOg dMg dPgf       |D ]  \  }}}}|dQ|dQ|dQ|}	t        t	        j
                  |||R      j                         ||	S       |d   |d   k(  sSt        |d   dT      sct        |d         t        |      k  s~t        t	        j
                  ||U      j                         ||	S        y )VNrG   rL   rR   rB   r   rA   rH   rB   rB   rH   rH   rH   rH   rX   rI   )rI   rJ   rY   rZ   r[   )r   rB   r   r   )r   r   rH   r   )r   r   r   rI   rI   rK   )r   r   r   r   r   )rB   r   r   r   r   )r   rH   r   r   r   r\   )r   rB   r   r   r   )r   r   rH   r   r   )r   r   r   rI   r   )r   r   rB   r   r   )r   r   r   rH   r   )r   r   r   r   rI   )r   r   r   rB   r   )r   r   r   r   rH   rJ   )r   r   r   r   rB   rg   )rK   rI   r   r   r   rB   r   r   rb   r]   r^   r   rB   r   )r   r   rH   r   r   rB   rI   rI   )rB   r   rM   r_   r`   ra   )rM   rM   )r   r   rB   r   r   r   )r   r   r   rH   r   r   )r   r   r   r   rI   r   )rM   r   r   r   r   rJ   rc   rd   re   rK   rK   )rM   rS   r   r   r   )rB   rN   rT   r   r   )r   rH   rO   rU   r   )r   r   rI   rP   rV   )r   r   r   rJ   rQ   rf   rM   rK   )r   r   rM   r   r   )rS   r   r   rN   r   )r   rT   r   r   rO   rh   ri   rj   rB   rH   rI   )rJ   rK   rM   )rJ   rH   r   )r   rK   rI   )rB   r{   rB   )rB   r   rX   )r{   rB   r   )r   rB   r{    offsetsrD   )err_msg__len__r   )
r   rk   npr   r%   diagsrn   hasattrrl   max)
r>   abcrr   rs   rt   rD   ru   r   s
             r.   
test_diagszTestConstructUtils.test_diags   s*   /""#&'aeQ!./q!ugsFaSE23q!ugsFaS!I67q!ugsFaUG45q!ugsFaUG45q!ugsFaUAa5M:;q!ugrdFaUAa5M:;q!ugsFYy,KLMq!ugsFYy,KLMq!ugtVk+k-RSTq!ugtVk+k-RSTq!ugsF[[,QRSq!ugsF[[,QRSq!ugsF[[,QRSq!ugsF[[,QRSq!ugsF[[,QRSq!ugtVggggg-VWXq!ugtVggggg-VWXq!ugtVggggg-VWXq!ugtVggggg-VWXq!ugsFWWWWW,UVWq!ugsFWWWWW,UVWq!ugsFWWWWW,UVWq!uQrUmaUFWWW4MNOq!uQrUmbVVi	)5TUVq!uQrUmaVVm5B5B5B5B5B6D E 	F 	q!uQq!uox/<K<K<K<K	:M N 	O
 	q!uQrU1oy&?:J:I:I:I:I;K L 	M 	qcA3!./q!uQi!AIy0QRSHHi+,rF	9-	
 	 	h&:4>4>3@ A 	B $)Aq%Qqe1UIQvj9GAUCKKM2 aE!H$AaD),!IU+Y__Q:BBDf%,. $)r0   c                     t        g d      }t        t        j                  |      j	                         t        j                  |             y )NrG   )r   r   r%   r   rn   r   diagr>   r   s     r.   test_diags_defaultz%TestConstructUtils.test_diags_default   s0    /"Y__Q'//12771:>r0   c                 d    t        g dg dg      }t        t        t        j                  |       y )NrG   )rH   rI   rJ   rK   rM   )r   assert_raisesr<   r%   r   r   s     r.   test_diags_default_badz)TestConstructUtils.test_diags_default_bad   s!    ?O45j)//15r0   c                 d   t        g d      }t        g d      }t        g d      }g }|j                  |d d gddf       |j                  |d d ||d d gg dd	f       |j                  |d d
 ||d d gg ddf       |j                  |d d
 ||d d gg dd f       |j                  g g dd f       |j                  dgdgdf       |j                  |gdd f       |D ](  \  }}}t        t        t        j
                  |||       * t        t        t        j
                  d ggdg       y )NrG   rL   rR   r   rA   rJ   rI   re   r   rH   rf   r   rB   rJ   rJ   r   r   )r   rk   r   r<   r%   r   	TypeError)r>   r   r   r   rr   rs   rt   rD   s           r.   test_diags_badz!TestConstructUtils.test_diags_bad   s-   /""#&'q!ugq&)*q!uQq!uox89q!uQq!uoy&9:q!uQq!uoy$78b)T*+qcB4()qc1d^$ KAq%*iooq!5Q ! 	iD6(QCHr0   c                 N   t         j                  j                  d       dD ]u  }d|dz  z   t         j                  j                  dd      z   }t        j                  | dz   |dz
        }t         j                  j                  |       |d | }|D cg c]-  }t         j                  j                  |t        |      z
        / }}t        j                  ||      }t        t        ||      D cg c]  \  }}t        j                  ||       c}}      }	t        |j                         |	       t        |      dk(  s#t        j                  |d   |d         }t        j                  |d   |d         }	t        |j                         |	       x y c c}w c c}}w )Ni  )rB   rH   rI   rJ   rK   rQ   rB   rH   r   rQ   r   )r   r&   seedrandintarangeshuffler   absr%   r   sumzipr   r   rn   rl   )
r>   n_diagsr(   r   q	diagonalsmatxj	dense_mats
             r.   test_diags_vs_diagz%TestConstructUtils.test_diags_vs_diag   sJ    			t*GGQJ!2!21b!99Aii1ac*GIIg&hw'G=DEWCF
3WIE//)W=Cs9g7NO7Ntq!RWWQ]7NOPI*3;;=)D7|q ooilGAJGGGIaL'!*=	.s{{}iH# + F Ps   2F3 F!c                     t        j                  dgdgdt              }t        |j                  t               t        |j                         ddgddgg       y )Ng@r   rz   )r   rD   r+   rH   )r%   r   intr   r+   rn   r>   r   s     r.   test_diags_dtypez#TestConstructUtils.test_diags_dtype  sE    OOSEA3fCHQWWc"QYY[Aq6Aq6"23r0   c                     t        t        d            }t        dd      D ]V  }t        t        j                  ||      j                         t        j                  |g|g      j                                X y )NrK   r   rM   r   )listranger   r%   r   rn   )r>   rs   ks      r.   test_diags_one_diagonalz*TestConstructUtils.test_diags_one_diagonal
  sY    qNr1AA6>>@"!qc:BBDF r0   c                 Z    t        j                  g       }t        |j                  d       y )Nr   r   )r%   r   r   rD   r   s     r.   test_diags_emptyz#TestConstructUtils.test_diags_empty  s    OOBQWWf%r0   identityc                    t         |d      j                         dgg       t         |d      j                         ddgddgg        |ddd      }t        |j                  t        j                  d             t        |j                  d       t
        D ]E  } |d|      }t        |j                  |       t        |j                         g d	g d
g dg       G y NrB   rH   r   rI   int8r    )r+   r*   r*   r~   r   r   r   rn   r+   r   r*   sparse_formats)r>   r   Ifmts       r.   test_identityz TestConstructUtils.test_identity  s    Xa[((*aSE2Xa[((*aUAa5M:QfU3QWWbhhv./QXXu%!C3'A3'www&?@ "r0   eyec                    t         |dd      j                         dgg       t         |dd      j                         g dg dg       t         |dd      j                         ddgddgddgg       t         |dd      j                         g dg dg dg       t         |ddd	      j                  t        j                  d             d
D ]  }d
D ]  }t	        dd      D ]  }|dkD  r||kD  s|dk  r>t        |      |kD  r0t        j                  t        d      5   ||||       d d d        Pt         ||||      j                         t        j                  |||             ||k(  st         |||      j                         t        j                  |||                y # 1 sw Y   xY w)NrB   rH   rI   r~   r   r   r   int16r+   r|   r   rM   zOffset.*out of boundsr9   r   )
r   rn   r+   r   r   r   r;   r   r<   r   )r>   r   r'   r(   r   s        r.   test_eyezTestConstructUtils.test_eye"  s   S1X%%'1#/S1X%%'''):;S1X%%'1Q%1qe)<=S1X%%'''')BCS17+11288G3DEAr!A A!a%QUs1vz#]]&.E  1N  %1N224FF1a1- 6( #A 3 3 5 "q!q 1) %   s   "F5	5F>c                    t         |d      j                         dgg       t         |d      j                         ddgddgg        |ddd      }t        |j                  t        j                  d             t        |j                  d       t
        D ]E  } |d|      }t        |j                  |       t        |j                         g d	g d
g dg       G y r   r   )r>   r   r   r   s       r.   test_eye_onezTestConstructUtils.test_eye_oneF  s    SV^^%u-SV^^%1qe}5.QWWbhhv./QXXu%!CAc"A3'www&?@ "r0   c                     t        t        j                  d      t              sJ t        t        j                  d      t              rJ y )NrI   )
isinstancer%   	eye_arrayr   r   r>   s    r.   test_eye_array_vs_matrixz+TestConstructUtils.test_eye_array_vs_matrixT  s9    )--a0':::immA.8888r0   c                 v   g }|j                  t        dgg             |j                  t        dgg             |j                  t        dgg             |j                  t        dgg             |j                  t        dgdgg             |j                  t        ddgg             |j                  t        ddgddgg             |j                  t        ddgddgg             |j                  t        g d	g d
g             |j                  t        ddgddgddgg             |j                  t        g dg dg dg             |j                  t        g dg             |j                  t        g dg dg             |D ]  }t        |      }|D ]  }t        |      }t        j                  ||      }t
        dd D ]\  }t        j                  |||      }t        |j                  |       t        |j                         |       t        |t              r\J    |d   }|d   }t        |      }t        |      }t        j                  ||      }t
        D ]\  }t        j                  |||      }t        |j                  |       t        |j                         |       t        |t              r\J  t        j                  t        |      t        |            }t        |j                  |       t        |j                         |       t        |t              sJ y )Nr   rX   rJ   rQ   rB   rH   rI   rK   r   rH   irO   r   rV   rM   )rK   rJ   rJ   r~   )rM   r   rO   )r   rB   r   rH   r   rK   rO   )      ?g      ?r   g      
@)r   g      @r   r   r   rb   )rk   r   r   r   kronr   r%   r   r*   r   rn   r   r   r   r   )	r>   rr   r   car   cbexpectedr   ru   s	            r.   	test_kronzTestConstructUtils.test_kronX  s   UQC5\"URD6]#UQC5\"URD6]#UQC9%&UQqE7^$UQqE1Q%=)*UQqE1Q%=)*UHX./0UQqE1Q%1./0UGGG456UO,-.U.{;<= A1Bq\771a=)!A.C&^^B3?F 4&v~~'7B%fg666	 /   "I"Iq\q\771a=!C^^B37F,v~~/:fg...	 " 
1z!}SIV]]C(6>>+X6&(+++r0   c                    t        j                  t        d      5  t        j                  dgdggt        ddg             d d d        t        j                  t        d      5  t        j                  t        ddg      dgdgg       d d d        t        j                  dgdggddg       y # 1 sw Y   oxY w# 1 sw Y   2xY w)Nrequires 2D inputr9   r   rB   )r;   r   r<   r%   r   r   r   s    r.   test_kron_ndim_exceptionsz,TestConstructUtils.test_kron_ndim_exceptions  s    ]]:-@ANNQC!:y!Q'89 B]]:-@ANN9aV,sQCj9 B 	aSzAq6* BAAAs   &B0%&B<0B9<Cc                     d}t        j                  dgd|f|dz
        }t        j                  dg|dfd|z
        }t        j                  ||       t        j                  ||       y )Ni   rB   )rD   r   )r%   diags_arrayr   )r>   r(   r   r   s       r.   test_kron_largez"TestConstructUtils.test_kron_large  s_    !!1#aVQqSA!!1#aVQqSAq!q!r0   c           
         g }|j                  t        dgg             |j                  t        dgg             |j                  t        dgg             |j                  t        dgg             |j                  t        ddgddgg             |j                  t        ddgddgg             |j                  t        g d	g d
g dg             |j                  t        g dg dg dg             |D ]  }|D ]  }t        j                  t	        |      t	        |            j                         }t        j                  t        j                  |j                  d         |      t        j                  |t        j                  |j                  d               z   }t        ||         t        j                  t              t                    j                         }t        |       y )Nr   rX   rJ   rQ   rB   rH   rI   rK   r   r   )r   rI   r   r~   )r   rK   rX   )rJ   r{   rO   )rk   r   r%   kronsumr   rn   r   r   r   rD   r   r   )r>   rr   r   r   ru   r   s         r.   test_kronsumzTestConstructUtils.test_kronsum  sx   UQC5\"URD6]#UQC5\"URD6]#UQqE1Q%=)*UQqE1Q%=)*UHXg678UGHX678 A"**9Q<1FNNPGGBFF1771:$6: gga
);<="684	   "":a=*Q-@HHJ68,r0   c                    t        j                  t        d      5  t        j                  dgdggt        ddg             d d d        t        j                  t        d      5  t        j                  t        ddg      dgdgg       d d d        t        j                  ddgddggdg       y # 1 sw Y   pxY w# 1 sw Y   3xY w)Nr   r9   r   rB   rH   )r;   r   r<   r%   r   r   r   s    r.   test_kronsum_ndim_exceptionsz/TestConstructUtils.test_kronsum_ndim_exceptions  s    ]]:-@AsQCj)QF*;< B]]:-@AiA/1#s< B 	Aq6Aq6*QC0 BAAAs   &B1%&B=1B:=Ccoo_clsc                      |ddgddgg      } |ddgg      }t        ddgddgddgg      }t        t        j                  ||g      j	                         |       t        t        j                  ||gt
        j                        j                  t
        j                         t        t        j                  |j                         |j                         g      j	                         |       t        t        j                  |j                         |j                         g      j	                         |       t        j                  |j                         |j                         gdt
        j                  	      }t        |j                  t
        j                         t        |j                  j                  t
        j                         t        |j                  j                  t
        j                         t        t        j                  |j                         |j                         g      j	                         |       t        j                  |j                         |j                         gd
t
        j                  	      }t        |j                  t
        j                         t        |j                  j                  t
        j                         t        |j                  j                  t
        j                         y )NrB   rH   rI   rJ   rK   rM   r   r   )r*   r+   r   )r   r   r%   vstackrn   r   float32r+   todoktocsrindicesint32indptrtocsc)r>   r   ABr   ru   s         r.   test_vstackzTestConstructUtils.test_vstack  s   aUAa5M"aUG1a&a&a&" # 	Y%%q!f-557BY%%q!fBJJ?EEZZ	! 	Y%%qwwy!'')&<=EEGRY%%qwwy!'')&<=EEG	!!1779aggi"8).bjjBV\\2::.V^^))2884V]](("((3Y%%qwwy!'')&<=EEG	!!1779aggi"8).bjjBV\\2::.V^^))2884V]](("((3r0   c                    ddgddgg}ddgg}t        t        j                  t        |      t        |      g      t              sJ t        t        j                  t        |      t        |      g      t              sJ t        t        j                  t        |      t        |      g      t              sJ t        t        j                  t        |      t        |      g      t              sJ y NrB   rH   rI   rJ   rK   rM   )r   r%   r   r   r   r   r   r>   r   r   s      r.   test_vstack_matrix_or_arrayz.TestConstructUtils.test_vstack_matrix_or_array  s    UAa5MUG)**IaL)A,+GH'RRR)**IaL*Q-+HI7SSS)**JqM9Q<+HI7SSS)**JqM:a=+IJHUUUr0   c                    t        g dg dg      }t        g d      }t        g d      }t        j                  |t	        j
                  g d      g      j                  dk(  sJ t        j                  |t	        j
                  dgg      g      j                  dk(  sJ t        j                  ||g      j                  dk(  sJ t        j                  ||g      j                  dk(  sJ t        j                  ||g      j                  d	k(  sJ t        j                  ||g      j                  dk(  sJ t        j                  ||g      j                  dk(  sJ t        j                  ||g      j                  dk(  sJ t        j                  ||g      j                  dk(  sJ t        j                  t        d
      5  t        j                  |t	        j
                  ddg      g       d d d        t        j                  t        d      5  t        j                  |t	        j
                  ddg      g       d d d        y # 1 sw Y   ZxY w# 1 sw Y   y xY w)Nr~   r   r}   r   r   )rB   rJ   )rB   rM   )rH   rI   )rH   rM   zincompatible row dimensionsr9   zincompatible column dimensions)r   r   r%   r   r   r   rD   hstackr;   r   r<   )r>   arrarr1darr1dcoos       r.   test_vstack_1d_with_2dz)TestConstructUtils.test_vstack_1d_with_2d  s   I./)$Y'bhhy&9 :;AAVKKK1# 89??6III/55???/55??? c
+11V;;;/55??? 1288FBBBh066&@@@ 1288FBBB]]:-JKc288QF#345 L]]:-MNc288QF#345 ON LKNNs   -I-III"c                     |ddgddgg      } |dgdgg      }t        g dg dg      }t        t        j                  ||g      j	                         |       t        t        j                  ||gt
        j                  	      j                  t
        j                         t        t        j                  |j                         |j                         g      j	                         |       t        t        j                  |j                         |j                         g      j	                         |       t        t        j                  |j                         |j                         gt
        j                  	      j                  t
        j                         t        t        j                  |j                         |j                         g      j	                         |       t        t        j                  |j                         |j                         gt
        j                  	      j                  t
        j                         y )
NrB   rH   rI   rJ   rK   rM   rB   rH   rK   rI   rJ   rM   r   )r   r   r%   r   rn   r   r   r+   r   r   r   )r>   r   r   r   r   s        r.   test_hstackzTestConstructUtils.test_hstack  s   aUAa5M"aS!I)#% &Y%%q!f-557BY%%q!fBJJ?EEZZ	! 	Y%%qwwy!'')&<=EEGRY%%qwwy!'')&<=EEG	Y%%qwwy!'')&<,.JJ88=ZZ	! 	Y%%qwwy!'')&<=EEG	Y%%qwwy!'')&<,.JJ88=ZZ	!r0   c                    ddgddgg}dgdgg}t        t        j                  t        |      t        |      g      t              sJ t        t        j                  t        |      t        |      g      t              sJ t        t        j                  t        |      t        |      g      t              sJ t        t        j                  t        |      t        |      g      t              sJ y r   )r   r%   r   r   r   r   r   r   s      r.   test_hstack_matrix_or_arrayz.TestConstructUtils.test_hstack_matrix_or_array  s    UAa5MS!I)**IaL)A,+GH'RRR)**IaL*Q-+HI7SSS)**JqM9Q<+HI7SSS)**JqM:a=+IJHUUUr0   block_arrayc                    t        ddgddgg      }t        dgdgg      }t        dgg      }t        d      }t        g d	g d
g dg      }t         |||gd |gg      j                         |       t	        dt
        j                        }t         ||j                         |j                         g||j                         gg      j                         |       t         ||j                         |j                         g|j                         |j                         gg      j                         |       t        g dg dg dg      }t         ||d gd |gg      j                         |       t         ||j                         |j                  j                         g||j                         gg      j                         |       t         ||j                         |j                  j                         g|j                         |j                         gg      j                         |       t	        dt
        j                        }t        ddgddgddgg      }t         |d |g|d gg      j                         |       t         ||j                  j                         |j                         g|j                         |gg      j                         |       t         ||j                  j                         |j                         g|j                         |j                         gg      j                         |       t        j                  d      }t         |d d gg      j                         |       t         |d |g|d gg      j                         |       t        dgg      }t         |d |g|d gg      j                         |       t        t              5 }	 ||g|gg       d d d        	j                  d       t        t              5 }	 ||j                         g|j                         gg       d d d        |	j                  d       t        t              5 }	 ||j                         g|j                         gg       d d d        |	j                  d       t        t              5 }	 |||gg       d d d        |	j                  d       t        t              5 }	 ||j                         |j                         gg       d d d        |	j                  d       t        t              5 }	 ||j                         |j                         gg       d d d        |	j                  d       y # 1 sw Y   xY w# 1 sw Y   NxY w# 1 sw Y   
xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ZxY w)NrB   rH   rI   rJ   rK   rM   rN   r   r   r   )r   r   rN   ry   r   )rB   rH   r   )rI   rJ   r   rA   r   z.Got blocks\[1,0\]\.shape\[1\] == 1, expected 2z"incompatible dimensions for axis 1z4Mismatching dimensions along axis 1: ({1, 2}|{2, 1})z.Got blocks\[0,1\]\.shape\[0\] == 1, expected 2z4Mismatching dimensions along axis 0: ({1, 2}|{2, 1})z"incompatible dimensions for axis 0)r   r   r   rn   r   r   r   r   r   Temptyr   r<   r:   )
r>   r  r   r   CDr   EZexcinfos
             r.   test_block_creationz&TestConstructUtils.test_block_creation  s    1v1v&'sA3i sef)##% & 	[1a&4)!45==?JfBHH-[1779aggi"8#$aggi."2 33:79	 	[1779aggi"8#$779aggi"8": ;;B79	 )##% & 	[1d)dAY!78@@BHM[1779acciik":#$aggi."2 33:79	 	[1779acciik":#$779aggi"8": ;;B79	 fBHH-1a&a&a&" # 	[4)aY!78@@BHM[13399;	":#$779a."2 33:79	 	[13399;	":#$779aggi"8": ;;B79	 88F#[4,088:HE[4)aY!78@@B	 1#<[4)aY!78@@B	 :&'!qc
# 'GH:&'!'')qwwyk23 ';<:&'!'')qwwyk23 'MN:&'!Q! 'GH:&'!'')QWWY/01 'MN:&'!'')QWWY/01 ';<- '& '& '& '& '& '&sH   /V$)V5)V&V3:(V?
(WVV#&V03V<?WWc                 &   t         j                  }ddgddggdgdgg}}t        |      t        |      }}t         |d |g|d ggd      t              sJ t         |d |g|d ggd      t              sJ t         |||ggd      t              sJ y )	NrB   rH   rI   rJ   rN   rK   r   r   )r%   r  r   r   r   )r>   blockFlGlFmGms         r.   test_block_return_typez)TestConstructUtils.test_block_return_typec  s    %%
 a&!QA3*BBBB%$b$Z 8GQQQ%$b$Z 8GQQQ%"b
597CCCr0   c                 P   t         j                  }ddgddggdgdgg}}t        |      t        |      }}t        |      t        |      }}t	         |||ggd      t
              sJ t	         |||ggd      t              sJ t	         |d	|g|d	ggd      t
              sJ t	         |d	|g|d	ggd      t
              sJ t	         |d	|g|d	ggd      t              sJ t	         |d	|g|d	ggd      t              sJ t	         |||ggd      t
              sJ t	         |||ggd      t
              sJ t	         |||ggd      t
              sJ t	         |||ggd      t              sJ t	         |||ggd      t
              sJ t	         |||ggd      t              sJ t	         ||j                         |j                         ggd
      t
              sJ t	         ||j                         |j                         ggd
      t              sJ t	         ||j                         |j                         ggd      t
              sJ t	         ||j                         |j                         ggd      t              sJ t	         |||ggd      t
              sJ t	         ||j                         |ggd      t
              sJ t	         ||j                         |ggd      t              sJ t	         |||ggd
      t              sJ y	)z2This can be removed after sparse matrix is removedrB   rH   rI   rJ   rN   rK   r   r   Nr   )r%   bmatr   r   r   r   r   r   )r>   r  r  r  r  r  FaGas           r.   test_bmat_return_typez(TestConstructUtils.test_bmat_return_typeo  s   ~~a&!QA3*BBBB2	"B$Rz%8'BBB$Rz%8(CCC$r
RJ7FPPP$r
RJ7FPPP$r
RJ7FQQQ$r
RJ7FQQQ $Rz%8'BBB$Rz%8'BBB$Rz%8'BBB$Rz%8(CCC$Rz%8'BBB$Rz%8(CCC $RXXZ 89%H'RRR$RXXZ 89%H(SSS$RXXZ 89%H'RRR$RXXZ 89%H(SSS $Rz%8'BBB$R 01%@'JJJ$R 01%@(KKK$Rz%8(CCCr0   z!Can't create large array for testc           	         t        d       d}t        t        j                  ||ft                    }|j                         }t        j                  ||fdd      }t        t        j                  t        j                  t        j                  |j                        |                   t        |j                  j                  t        j                          t        |j                  j                  t        j                          y)z6 test for indptr overflow when concatenating matrices i0u  i  r   r   F)axisreturn_spmatrixN)r	   r   r   onesboolcopyr%   _compressed_sparse_stackr   allequaldiffr   r   r   r+   int64)r>   r(   r   r   r  s        r.   test_concatenate_int32_overflowz2TestConstructUtils.test_concatenate_int32_overflow  s     	% bggq!fD12FFH..1vA?DF 	rxx 11567QYY__bhh/QXX^^RXX.r0   c                     t        ddgddgg      }t        dgdgg      }t        dgg      }t        g dg d	g d
g dg dg      }t        t        j                  |||f      j                         |       y)z basic test for block_diag rB   rH   rI   rJ   rK   rM   rN   )rB   rH   r   r   )rI   rJ   r   r   )r   r   rK   r   )r   r   rM   r   )r   r   r   rN   N)r   r   r   r%   
block_diagrn   )r>   r   r   r  r   s        r.   test_block_diag_basicz(TestConstructUtils.test_block_diag_basic  s{    !uaUm$sA3i se,&&&&	( ) 	Y))1a)4<<>Ir0   c                    t        t        j                  ddgdg      j                         g dg dg       t	        g d      }t	        ddg      }t        t        j                  ||g      j                         g dg d	g       y
)z) block_diag with scalar and 1d arguments rH   rI   rJ   )rH   rI   r   )r   r   rJ   )rB   r   rI   r   )rB   r   rI   r   r   )r   r   r   r   rJ   N)r   r%   r&  rn   r   r   s      r.   test_block_diag_scalar_1d_argsz1TestConstructUtils.test_block_diag_scalar_1d_args  sv     	9//!A
;CCE%y1	3 gqe9//A7??A+_=	?r0   c                    t        t        j                  ddgg      j                         t	        ddgg             t        t        j                  ddggg      j                         t	        ddgg             t        t        j                  dgdggg      j                         t	        dgdgg             t        t        j                  dg      j                         t	        dgg             y)z block_diag with one matrix rB   r   N)r   r%   r&  rn   r   r   s    r.   test_block_diag_1z$TestConstructUtils.test_block_diag_1  s    Y))Aq6(3;;=QF8_	&Y))QF8*5==?QF8_	&Y))QC!:,7??AQC!:&	( 	Y))1#.668QC5\	#r0   c                    t        g dgd      }t        ddggd      }t        t        j                  ||g      j	                         t        g dg dg             t        d	gd
gdggd      }t        dgdggd      }t        t        j                  ||g      j	                         t        d	dgd
dgddgddgddgg             y)z block_diag with sparse arrays r   )rB   rI   rC   rJ   rK   ry   )rB   rH   rI   r   r   )r   r   r   rJ   rK   rB   rH   rI   )rI   rB   rx   r   N)r   r   r%   r&  rn   r   r   s      r.   test_block_diag_sparse_arraysz0TestConstructUtils.test_block_diag_sparse_arrays  s     yk01vhf-Y))1a&199;O_=>	@ sQC!oV4sQCj/Y))1a&199;QFQFQFQFQFCD	Fr0   c                 t   t        g dg      t        g dg      }}t        t        j                  ||g      t
              sJ t        t        j                  ||g      t
              sJ t        t        j                  ||g      t
              sJ t        t        j                  ||g      t              sJ y )Nr   )rH   rI   rJ   )r   r   r   r%   r&  r   r   r   s      r.   test_block_diag_return_typez.TestConstructUtils.test_block_diag_return_type  s    )%z9+'>1)..1v6@@@)..1v6@@@)..1v6@@@)..1v6AAAr0   c                 X   t         t        fD ]  t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  fD ]P  } ddd|      }t        |j                  |       t        |j                  d       t        |j                  d       R  dddd      }t        |j                  t        j                          dddt        j                  j                  d            }t!        |j"                  |j"                         t!        |j$                  |j$                         t!        |j&                  |j&                         dD ]L  } dd|	      }t        |j                  t)        |t        j*                  |j                        z               N d
D ]#  } dd|      }t        |j,                  |       % t/        t0        fd       t/        t0        fd        y )NrK   rQ   皙?)r)   r+   )rK   rQ     )r)   r,   )g        r1  r   g      ?r)   )r   r   r   r!   r   c                        ddd      S )NrK   rQ   g? fs   r.   <lambda>z9TestConstructUtils.test_random_sampling.<locals>.<lambda>  s    a2smr0   c                        ddd      S )NrK   rQ   gr5  r6  s   r.   r8  z9TestConstructUtils.test_random_sampling.<locals>.<lambda>  s    a2tnr0   )sprandr/   r   r   float64
longdoubler   r#  	complex64
complex128r   r+   rD   nnzr&   RandomStater   datarowcolr   prodr*   r   r<   )r>   tr   x1x2r)   r   r7  s          @r.   test_random_samplingz'TestConstructUtils.test_random_sampling  s   !Ajj"**bmmhh",,GaS2QWWa(QWWg.QUUA&G 1b#D9B2::.1b# "		 5 5d ;=B rww0rvvrvv.rvvrvv./aW-QUUC"''!''2B(B$CD 0 4aC(QXXs+ 4 *&;<*&<=7 "r0   c           	         d dt         j                  j                         g}	 t         j                  j                         }|j	                  |       |D ]  }t        dddt         j                  |      }t        t        j                  t        j                  d|j                                     t        t        j                  t        j                  |j                  d                    y # t
        $ r Y w xY wNr2  rQ      r   )r)   r+   r,   r   rB   )r   r&   r@  default_rngrk   AttributeErrorr:  r;  r   r   
less_equalrA  )r>   random_statesgenr,   r   s        r.   	test_randzTestConstructUtils.test_rand  s    tRYY%:%:%<=	))'')C  % *Lr2s"**$02ABFF2==AFF345BFF2==345	 *  		s   /C0 0	C<;C<c           	      0   d dt         j                  j                         g}	 t         j                  j                         }|j	                  |       |D ]/  }t        dddt         j                  |      }t        t        j                  t        j                  |j                  d                   t        t        j                  t        j                  d|j                                     t        dddt         j                  |      }t        t        j                  t        j                  |j                  d                   t        t        j                  t        j                  d|j                                     2 y # t
        $ r Y Bw xY wrJ  )r   r&   r@  rL  rk   rM  r/   r;  r   anylessrA  r4   )r>   rO  rP  rsr   s        r.   
test_randnzTestConstructUtils.test_randn  s    tRYY%:%:%<=	))'')C  %  BRBJJRPABFF2771661-./BFF2771aff-./r2s"**SUVABFF2771661-./BFF2771aff-./    		s   /F 	FFc                 b    t        j                  ddd       t        j                  dd       y )NrQ   rs   r   rQ   rQ   )r%   r&   r3   r   s    r.   test_random_accept_str_dtypez/TestConstructUtils.test_random_accept_str_dtype  s&     	Rs+xs3r0   c                 T   t        j                  ddd      }t        |j                         d       t        j                  dd      }t        |j                         d       t        |t              sJ d}t        j                  |d      }t        |j                         d       y )	NrQ   gx&1?r3  rU   rX  )        r[  g(Rs?<i  )r%   r&   r   count_nonzeror3   r   r   )r>   sparse_matrixsparse_arrayrD   s       r.   Etest_random_sparse_matrix_returns_correct_number_of_non_zero_elementszXTestConstructUtils.test_random_sparse_matrix_returns_correct_number_of_non_zero_elements$  s     "((R@]00226 --hG\//1"5,000 --eZH\//1$7r0   N)B__name__
__module____qualname__r;   markparametrizer   r   r   r   r   r   r   r?   r   r   r   r   r   r   rE   rv   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  slowxfail_on_32bitr$  r'  r)  r+  r-  r/  rH  rQ  rV  rY  r_  r5  r0   r.   r6   r6   +   s   [[U9i9i% 	 [[UJ
J
% &	&6LpL.\?6I&I64
F& [[Z)*<*<i>Q>Q)RSA TA [[UY]]I4G4G$HI! J!F [[UY]]I4G4G$HIA JA9.,`+-01 [[YY(?@4 A4:V6. [[YY(?@! A!.V [[]Y^^Y=R=R,STK= UK=Z
D"DH [[[[ CD/ E /J	?
#FB>>60&48r0   r6   c                     t        j                  dd      } t        t        j                  |       j                         t        j                  |              t        t        j                  | d      j                         t        j                  | d             t        t        j                  | dd      j                         t        j                  | d      dd	dd	f          t        j                  t        d
      5  t        j                  t        j                  dd      dd       ddd       y# 1 sw Y   yxY w)z7Tests of diags_array that do not rely on diags wrapper.rB   rK   rH   r   r   r   r   NrJ   z.*out of boundsr9   rC   )r   r   r   r%   r   rn   r   r;   r   r<   r   )r   s    r.   test_diags_arrayrh  3  s    99Q?Dy,,T2::<bggdmLdA.668"''$!:L dAV<DDF
2A2rr6" 
z):	;		!Q&9 
<	;	;s   -D::E)g{Gz?r   NN)*__doc__numpyr   r   numpy.testingr   r   r   r   r;   r   r   scipy._lib._testutilsr	   scipy._lib._utilr
   scipy.sparser   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   scipy.sparse._constructr   r:  r   r/   r4   r6   rh  r5  r0   r.   <module>rp     sd    /  < <  * 3 /3 3 3 3 3 3<
4XE8 E8P:r0   