
    xf9a                         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 dd	lmZ dd
lmZ g dZddZ G d 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
_construct)rand)matrix)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          C/usr/lib/python3/dist-packages/scipy/sparse/tests/test_construct.py_sprandnr#      s9    %l3L++HAq'65((4 4    c                   "   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zej,                  j.                  ej,                  j1                  d      d               Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"y)TestConstructUtilsc                 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                        	   
                  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   r1   r   r*   r   r   r   r+   r/   r   r   r   r)   r0   r   r   r   r*   r1   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   r0   r   r   r   r   r   r   r1   r   r   r   r:   r   r)   )r/   r6   r   r   r   r   )r)   r0   r7   r   r   r   )r   r*   r1   r8   r   r   )r   r   r+   r2   r9   r   )r   r   r   r,   r3   r   r*   r:   )r   r   r1   r   r   )r5   r   r   r2   r   )r   r6   r   r   r3   r   r   r7   r   r   r)   r   r   r8   r   r   r*   r   r   r9   )r:   r)   r*   )r   r0   r7   r   r   )r)   r   r1   r8   r   )r   r*   r   r2   r9   )r   r   r+   r   r3   )r   appendlenr   r   spdiagstoarray)
selfdiags1diags2diags3casesdor   r   results
             r"   test_spdiagszTestConstructUtils.test_spdiags   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.''''&	() 	* #( 	LAq!Q1Q4yA~!q&Y..q!4<<>G**1aA6>>@&I**1a!Q8@@BFK		Lr$   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
                  ||      j                         ||	S        y )UNr(   r.   r4   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   )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   r   r   r   r*   r,   )r   r   r   r   r)   rI   )r-   r+   )r   r   r   r)   r   r   rD   r?   r@   r   r)   r   )r   r   r*   r   r   r)   )r+   r+   )r)   r   r/   rA   rB   rC   )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,   rE   rF   rG   r-   r-   )r/   r5   r   r   r   )r)   r0   r6   r   r   )r   r*   r1   r7   r   )r   r   r+   r2   r8   )r   r   r   r,   r3   rH   r/   r-   )r   r   r/   r   r   )r5   r   r   r0   r   )r   r6   r   r   r1   rJ   rK   rL   r)   r*   r+   )r,   r-   r/   )r,   r*   r   )r   r-   r+   )r)   r_   r)   )r)   r   r:   )r_   r)   r   )r   r)   r_    shape)err_msg__len__)
r   rM   npr   r   diagsrP   hasattrrN   max)
rQ   abcrU   rV   rW   ri   rX   rj   s
             r"   
test_diagszTestConstructUtils.test_diagsW   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bhh	9562T]_hHijk 	h&:4>4>3@ A 	B $) 	.Aq%Qqe1UIQvj9GAU;CCE2 Qx58#!i(@S1YRUV[R\E\Y__Q2::<f%,.	.r$   c                     t        g d      }t        t        j                  |      j	                         t        j                  |             y )Nr(   )r   r   r   rm   rP   rl   diagrQ   rp   s     r"   test_diags_defaultz%TestConstructUtils.test_diags_default   s0    /"Y__Q'//12771:>r$   c                 d    t        g dg dg      }t        t        t        j                  |       y )Nr(   )r*   r+   r,   r-   r/   )r   assert_raises
ValueErrorr   rm   rv   s     r"   test_diags_default_badz)TestConstructUtils.test_diags_default_bad   s!    ?O45j)//15r$   c                 `   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 )Nr(   r.   r4   r   r[   r,   r+   rG   rd   r*   rH   re   r)   )r,   r,   )r   rM   ry   rz   r   rm   	TypeError)rQ   rp   rq   rr   rU   rV   rW   ri   s           r"   test_diags_badz!TestConstructUtils.test_diags_bad   s4   /""#&'q!ugq&)*q!uQq!uox89q!uQq!uoy&9:q!uQq!uoy$78b)T*+qcB4()qc1d^$  	DKAq%*iooq!UC	D 	iD6(QC@r$   c                 J   t         j                  j                  d       dD ]s  }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                         |	       v y c c}w c c}}w )Ni  )r)   r*   r+   r,   r-   r3   r)   r*   r   r3   )rl   r   seedrandintarangeshuffler   absr   rm   sumzipru   r   rP   rN   )
rQ   n_diagsr   offsetsq	diagonalsmatxj	dense_mats
             r"   test_diags_vs_diagz%TestConstructUtils.test_diags_vs_diag   sJ    			t* 	IGGQJ!2!21b!99Aii1ac*GIIg&hw'G=DECF
3EIE//)W5Cs9g7NOtq!RWWQ]OPI*3;;=)D7|q ooilGAJ?GGIaL'!*=	.s{{}iH#	I F Ps   2F2 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   r^   )ri   r   r*   )r   rm   intr   r   rP   rQ   r   s     r"   test_diags_dtypez#TestConstructUtils.test_diags_dtype   sE    OOSEA3fC@QWWc"QYY[Aq6Aq6"23r$   c                     t        t        d            }t        dd      D ]T  }t        t        j                  ||      j                         t        j                  |g|g      j                                V y )Nr-   r}   r/   )listranger   r   rm   rP   )rQ   rV   ks      r"   test_diags_one_diagonalz*TestConstructUtils.test_diags_one_diagonal   s]    qNr1 	>AA.668"!qc2::<>	>r$   c                 Z    t        j                  g       }t        |j                  d       y )Nr   r   )r   rm   r   ri   r   s     r"   test_diags_emptyz#TestConstructUtils.test_diags_empty   s    OOBQWWf%r$   c                 ,   t        t        j                  d      j                         dgg       t        t        j                  d      j                         ddgddgg       t        j                  ddd      }t        |j                  t        j                  d             t        |j                  d       t        D ]R  }t        j                  d|      }t        |j                  |       t        |j                         g d	g d
g dg       T y Nr)   r*   r   r+   int8r   )r   r   r   ra   rb   rc   )r   r   identityrP   r   rl   r   sparse_formatsrQ   Ifmts      r"   test_identityz TestConstructUtils.test_identity   s    Y''*224se<Y''*224!uaUmDqu=QWWbhhv./QXXu%! 	AC""1S1A3'www&?@	Ar$   c                    t        t        j                  dd      j                         dgg       t        t        j                  dd      j                         g dg dg       t        t        j                  dd      j                         ddgddgddgg       t        t        j                  dd      j                         g dg dg dg       t        t        j                  ddd	      j                  t        j                  d             d
D ]  }d
D ]  }t        dd      D ]  }t        t        j                  |||      j                         t        j                  |||             ||k(  sOt        t        j                  ||      j                         t        j                  |||                y )Nr)   r*   r+   ra   rb   r   rc   int16r   r`   r}   r/   )r   )r   r   eyerP   r   rl   r   )rQ   r   r   r   s       r"   test_eyezTestConstructUtils.test_eye   s^   Y]]1Q'//1QC59Y]]1Q'//1GG3DEY]]1Q'//1QqE1Q%13FGY]]1Q'//1GGG3LMY]]1QW5;;RXXg=NO 	YA Yr! YA q!q!9!A!A!CRVVAqTUEVWAv$Y]]1%:%B%B%DbffQPQUVFWXYY	Yr$   c                 ,   t        t        j                  d      j                         dgg       t        t        j                  d      j                         ddgddgg       t        j                  ddd      }t        |j                  t        j                  d             t        |j                  d       t        D ]R  }t        j                  d|      }t        |j                  |       t        |j                         g d	g d
g dg       T y r   )r   r   r   rP   r   rl   r   r   r   s      r"   test_eye_onezTestConstructUtils.test_eye_one   s    Y]]1%--/1#7Y]]1%--/1Q%1?MM!6%8QWWbhhv./QXXu%! 	ACa,A3'www&?@	Ar$   c           	      6   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 ]  }|D ]}  }t        j                  ||      }t        D ]\  }t        j                  t        |      t        |      |      }t        |j                  |       t        |j                         |       ^   y )Nr   r:   r,   r3   r)   r*   r+   r-   r   r*   ir1   r   r8   r/   )r-   r,   r,   ra   )r/   r   r1   )r   r)   r   r*   r   r-   r1   )      ?g      ?r   g      
@)r   g      @r   r   r   )rM   r   rl   kronr   r   r   r   r   r   rP   )rQ   rU   rp   rq   expectedr   rX   s          r"   	test_kronzTestConstructUtils.test_kron  s   UQC5\"URD6]#UQC5\"URD6]#UQC9%&UQqE7^$UQqE1Q%=)*UQqE1Q%=)*UHX./0UQqE1Q%1./0UGGG456UO,-.U.{;<= 	CA C771a=) CC&^^JqM:a=QTUF 4&v~~'7BCC	Cr$   c                     d}t        j                  d||dz
        }t        j                  |dd|z
        }t        j                  ||       t        j                  ||       y )Ni   r)   )r   r   r   )rQ   r   rp   rq   s       r"   test_kron_largez"TestConstructUtils.test_kron_large%  sO    MM!Q!$MM!Q!$q!q!r$   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                  t        |            |      t        j                  |t        j                  t        |                  z   }t        ||         y )Nr   r:   r,   r3   r)   r*   r+   r-   r   r   )r   r+   r   ra   )r   r-   r:   )r,   r_   r1   )rM   r   r   kronsumr   rP   rl   r   r   rN   r   )rQ   rU   rp   rq   rX   r   s         r"   test_kronsumzTestConstructUtils.test_kronsum-  sK   UQC5\"URD6]#UQC5\"URD6]#UQqE1Q%=)*UQqE1Q%=)*UHXg678UGHX678 	4A 4"**qM:a=229') 77266#a&>15266#a&>23"6(34	4r$   c                    t        ddgddgg      }t        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        j                  |j                         |j                         g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t        j                        }t        |j                  t        j                         t        |j                  j                  t        j                         t        |j                  j                  t        j                         y )Nr)   r*   r+   r,   r-   r/   r   )r   r   r   r   vstackrP   rl   float32r   tocsrindicesint32indptrtocsc)rQ   ABr   rX   s        r"   test_vstackzTestConstructUtils.test_vstackA  s   1qe}%1w1a&a&a&" # 	Y%%q!f-557BY%%q!fBJJ?EEZZ	! 	Y%%qwwy!'')&<=EEG	!!1779aggi"8

KV\\2::.V^^))2884V]](("((3Y%%qwwy!'')&<=EEG	!!1779aggi"8

KV\\2::.V^^))2884V]](("((3r$   c                    t        ddgddgg      }t        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t        j                  	      j                  t        j                         t        t        j                  |j                         |j                         g      j                         |       t        t        j                  |j                         |j                         gt        j                  	      j                  t        j                         y )
Nr)   r*   r+   r,   r-   r/   r)   r*   r-   r+   r,   r/   r   )r   r   r   r   hstackrP   rl   r   r   r   r   )rQ   r   r   r   s       r"   test_hstackzTestConstructUtils.test_hstack[  sh   1qe}%QCy!)#% &Y%%q!f-557BY%%q!fBJJ?EEZZ	!Y%%qwwy!'')&<=EEG	Y%%qwwy!'')&<,.JJ88=ZZ	! 	Y%%qwwy!'')&<=EEG	Y%%qwwy!'')&<,.JJ88=ZZ	!r$   c                    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        t        j                  ||gd |gg      j                         |       t        dt        j                        }t        t        j                  |j                         |j                         g||j                         gg      j                         |       t        t        j                  |j                         |j                         g|j                         |j                         gg      j                         |       t        g dg dg dg      }t        t        j                  |d gd |gg      j                         |       t        t        j                  |j                         |j                  j                         g||j                         gg      j                         |       t        t        j                  |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        t        j                  d |g|d gg      j                         |       t        t        j                  |j                  j                         |j                         g|j                         |gg      j                         |       t        t        j                  |j                  j                         |j                         g|j                         |j                         gg      j                         |       t        t        j                  d            }t        t        j                  d d gg      j                         |       t        t        j                  d |g|d gg      j                         |       t        dgg      }t        t        j                  d |g|d gg      j                         |       t        t              5 }t        j                  |g|gg       d d d        j!                  d       t        t              5 }t        j                  |j                         g|j                         gg       d d d        |j!                  d       t        t              5 }t        j                  |j                         g|j                         gg       d d d        |j!                  d       t        t              5 }t        j                  ||gg       d d d        |j!                  d       t        t              5 }t        j                  |j                         |j                         gg       d d d        |j!                  d       t        t              5 }t        j                  |j                         |j                         gg       d d d        |j!                  d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   1xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ZxY w)Nr)   r*   r+   r,   r-   r/   r0   r   r   r   )r   r   r0   r]   r   )r)   r*   r   )r+   r,   r   r[   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   r   bmatrP   r   rl   r   r   r   Tr   emptyry   rz   match)	rQ   r   r   CDr   EZexcinfos	            r"   	test_bmatzTestConstructUtils.test_bmatp  sF   AA'(QCy!uv)##% & 	Y^^aVdAY$78@@BHMvRXX.Y^^aggi%;&'^%5 66=gi	 	Y^^aggi%;&'ggi%;%= >>Egi	 )##% & 	Y^^aYq	$:;CCE	Y^^aggi%=&'^%5 66=gi	 	Y^^aggi%=&'ggi%;%= >>Egi	 vRXX.1a&a&a&" # 	Y^^dAYD	$:;CCE	Y^^acciik1779%=&'ggi^%5 66=gi	 	Y^^acciik1779%=&'ggi%;%= >>Egi	 "((6*+Y^^dD\N3;;=xHY^^dAYD	$:;CCE	 1#<Y^^dAYD	$:;CCE	 :& 	''NNQC!:&	'GH:& 	7'NNQWWYK!'')56	7;<:& 	7'NNQWWYK!'')56	7MN:& 	%'NNQF8$	%GH:& 	5'NNQWWY	234	5MN:& 	5'NNQWWY	234	5;<-	' 	'	7 	7	7 	7	% 	%	5 	5	5 	5sH   Y?6Z46ZZ&5Z205Z>?Z	ZZ#&Z/2Z;>[z!Can't create large array for testc           	         t        d       d}t        t        j                  ||ft                    }|j                         }t        j                  ||f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   N)r	   r   rl   onesboolcopyr   _compressed_sparse_stackr   allequaldiffr   r   r   r   int64)rQ   r   r   r   r   s        r"   test_concatenate_int32_overflowz2TestConstructUtils.test_concatenate_int32_overflow  s     	% rww1vT23FFH..!ua8rxx 11567QYY__bhh/QXX^^RXX.r$   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 r)   r*   r+   r,   r-   r/   r0   )r)   r*   r   r   )r+   r,   r   r   )r   r   r-   r   )r   r   r/   r   )r   r   r   r0   N)r   r   r   r   
block_diagrP   )rQ   r   r   r   r   s        r"   test_block_diag_basicz(TestConstructUtils.test_block_diag_basic  s{    1qe}%QCy!u,&&&&	( ) 	Y))1a)4<<>Ir$   c                 r    t        t        j                  ddgdg      j                         g dg dg       y)z) block_diag with scalar and 1d arguments r*   r+   r,   )r*   r+   r   )r   r   r,   N)r   r   r   rP   rQ   s    r"   test_block_diag_scalar_1d_argsz1TestConstructUtils.test_block_diag_scalar_1d_args  s2     	9//!A
;CCE%y1	3r$   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 r)   r   N)r   r   r   rP   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\	#r$   c                    t        g dgd      t        ddggd      g}t        j                  |      }t        |j	                         t        g dg dg             t        d	gd
gdggd      t        dgdggd      g}t        j                  |      }t        |j	                         t        d	dgd
dgddgddgddgg             y)z! block_diag with sparse matrices rf   )r)   r+   rh   r,   r-   r]   )r)   r*   r+   r   r   )r   r   r   r,   r-   r)   r*   r+   )r+   r)   r\   r   N)r   r   r   r   rP   r   )rQ   sparse_col_matricesblock_sparse_cols_matricessparse_row_matricesblock_sparse_row_matricess        r"   test_block_diag_sparse_matricesz2TestConstructUtils.test_block_diag_sparse_matrices  s      *I;vF)QF8FCE%.%9%9:M%N"/779O_=>	@  *QC!qc?6J)QC!:fEG$-$8$89L$M!.668QFQFQFQFQFCD	Fr$   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.                  |       % t1        t2        fd       t1        t2        fd        y )Nr-   r3   皙?)r   r   )r-   r3     )r   r    )g        r   r   g      ?r   )r   r   r   r   r   c                        ddd      S )Nr-   r3   g? fs   r"   <lambda>z9TestConstructUtils.test_random_sampling.<locals>.<lambda>  s    a2sm r$   c                        ddd      S )Nr-   r3   gr   r   s   r"   r   z9TestConstructUtils.test_random_sampling.<locals>.<lambda>  s    a2tn r$   )sprandr#   rl   r   float64
longdoubler   r   	complex64
complex128r   r   ri   nnzdoubler   RandomStater   datarowcolr   prodr   ry   rz   )rQ   tr   x1x2r   r   r   s          @r"   test_random_samplingz'TestConstructUtils.test_random_sampling  s   ! 	>Ajj"**bmmhh",,G 'aS2QWWa(QWWg.QUUA&' 1b#D9B299-1b# "		 5 5d ;=B rww0rvvrvv.rvvrvv./ EaW-QUUC"''!''2B(B$CDE 4 ,aC(QXXs+, *&;<*&<=7	>r$   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Nr   r3      r   )r   r   r    r   r)   )rl   r   r   default_rngrM   AttributeErrorr   r   r   r   
less_equalr   rQ   random_statesgenr    r   s        r"   	test_randzTestConstructUtils.test_rand  s    tRYY%:%:%<=	))'')C  % * 	6Lr2s"**$02ABFF2==AFF345BFF2==345		6  		   /C0 0	C<;C<c           	         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                                      y # t
        $ r Y w xY wr  )rl   r   r   r
  rM   r  r#   r   r   anylessr   r  s        r"   
test_randnzTestConstructUtils.test_randn+  s     tRYY%:%:%<=	))'')C  % * 	0LRBJJ&24ABFF2771661-./BFF2771aff-./		0  		r  c                 4    t        j                  ddd       y )Nr3   rV   r   )r   r   r   s    r"   test_random_accept_str_dtypez/TestConstructUtils.test_random_accept_str_dtype<  s     	Rs+r$   c                 h    t        j                  ddd      }t        |j                         d       y )Nr3   gx&1?r   r7   )r   r   r   count_nonzero)rQ   sparse_matrixs     r"   Etest_random_sparse_matrix_returns_correct_number_of_non_zero_elementszXTestConstructUtils.test_random_sparse_matrix_returns_correct_number_of_non_zero_elementsA  s+     "((R@]00226r$   N)#__name__
__module____qualname__rY   rs   rw   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   pytestmarkslowxfail_on_32bitr   r   r   r   r   r  r  r  r  r  r   r$   r"   r&   r&      s    6LpE.N?6A&I64
>&AYAC24(44!*M=^ [[[[ CD/ E /J3
#F>>60",
7r$   r&   )g{Gz?r   NN)__doc__numpyrl   r   numpy.testingr   r   r   r   r  r   ry   scipy._lib._testutilsr	   scipy._lib._utilr
   scipy.sparser   r   r   r   scipy.sparse._constructr   r   scipy.sparse._sputilsr   r   r#   r&   r   r$   r"   <module>r+     sJ    /  < <  * 3 /3 3 2 (<
4g7 g7r$   