
    e!h!                         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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)
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           	          t         j                  j                  |      }|j                  }t	        j                  | ||||||      S N)nprandomdefault_rngstandard_normal	construct)mndensityformatdtyperngdata_rvss          i/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/sparse/tests/test_construct.py_sprandnr1      s>    
))


$C""HAq'65#xHH    c                     t         j                  j                  |      }|j                  }t	        j
                  | |f|||||      S )N)r+   r,   r-   r.   data_sampler)r$   r%   r&   r'   r(   random_array)r)   r*   r+   r,   r-   r.   r4   s          r0   _sprandn_arrayr6   !   sH    
))


$C&&L!!1a&'&PU&)F Fr2   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-d Z.ej                  j                  deeg      d        Z/d Z0ej                  j                  dejb                  ejd                  f      d         Z3d! Z4d" Z5ej                  jl                  ej                  jn                  ej                  jq                  d#      d$                      Z9d% Z:d& Z;d' Z<d( Z=d) Z>d* Z?d+ Z@ej                  j                  d,d-d.eAj                  j                  d.      g      d/        ZDej                  j                  d,d-d.eAj                  j                  d.      g      d0        ZEd1 ZFd2 ZGd3 ZHd4 ZIy-)5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selfr9   s     r0    test_singleton_array_constructorz3TestConstructUtils.test_singleton_array_constructor+   s6    
 ]].
 	 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      rD   Nshaper?   s     r0   !test_singleton_matrix_constructorz4TestConstructUtils.test_singleton_matrix_constructor9   s     1v||v%%%r2   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rD                        	   
                  r   rD   rJ   rK   rL   rD   r   r   r   r   rJ   r   r   r   r   rK   r   )r   r   r   rL   rM   r   r   rK   r   r   )r   r   r   rL   r   )r   r   r   r   rM   )rD   r   rQ   r   rJ   r   r   r   rK   rO   r   r   r   rD   rP   r   r   r   rJ   rQ   r   rO   )r   r   rK   r   r   r   )r   r   r   rL   r   r   )r   r   r   r   rM   r   )rO   r   r   r   r   r   r   rP   r   r   r   r   r   r   rQ   r   r   r   rZ   r   rD   )rO   rV   r   r   r   r   )rD   rP   rW   r   r   r   )r   rJ   rQ   rX   r   r   )r   r   rK   rR   rY   r   )r   r   r   rL   rS   r   rJ   rZ   )r   r   rQ   r   r   )rU   r   r   rR   r   )r   rV   r   r   rS   r   r   rW   r   r   rD   r   r   rX   r   r   rJ   r   r   rY   )rZ   rD   rJ   )r   rP   rW   r   r   )rD   r   rQ   rX   r   )r   rJ   r   rR   rY   )r   r   rK   r   rS   )r   appendlenr   r(   spdiagstoarray)
r@   diags1diags2diags3casesdor)   r*   results
             r0   test_spdiagszTestConstructUtils.test_spdiagsG   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r2   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 )VNrI   rN   rT   rD   r   rC   rJ   rD   rD   rJ   rJ   rJ   rJ   rZ   rK   )rK   rL   r[   r\   r]   )r   rD   r   r   )r   r   rJ   r   )r   r   r   rK   rK   rM   )r   r   r   r   r   )rD   r   r   r   r   )r   rJ   r   r   r   r^   )r   rD   r   r   r   )r   r   rJ   r   r   )r   r   r   rK   r   )r   r   rD   r   r   )r   r   r   rJ   r   )r   r   r   r   rK   )r   r   r   rD   r   )r   r   r   r   rJ   rL   )r   r   r   r   rD   ri   )rM   rK   r   r   r   rD   r   r   rd   r_   r`   r   rD   r   )r   r   rJ   r   r   rD   rK   rK   )rD   r   rO   ra   rb   rc   )rO   rO   )r   r   rD   r   r   r   )r   r   r   rJ   r   r   )r   r   r   r   rK   r   )rO   r   r   r   r   rL   re   rf   rg   rM   rM   )rO   rU   r   r   r   )rD   rP   rV   r   r   )r   rJ   rQ   rW   r   )r   r   rK   rR   rX   )r   r   r   rL   rS   rh   rO   rM   )r   r   rO   r   r   )rU   r   r   rP   r   )r   rV   r   r   rQ   rj   rk   rl   rD   rJ   rK   )rL   rM   rO   )rL   rJ   r   )r   rM   rK   )rD   r}   rD   )rD   r   rZ   )r}   rD   r   )r   rD   r}    offsetsrF   )err_msg__len__r   )
r   rm   r$   r   r(   diagsrp   hasattrrn   max)
r@   abcrt   ru   rv   rF   rw   r   s
             r0   
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%,.
	.r2   c                     t        g d      }t        t        j                  |      j	                         t        j                  |             y )NrI   )r   r   r(   r   rp   r$   diagr@   r   s     r0   test_diags_defaultz%TestConstructUtils.test_diags_default   s0    /"Y__Q'//12771:>r2   c                 d    t        g dg dg      }t        t        t        j                  |       y )NrI   )rJ   rK   rL   rM   rO   )r   assert_raisesr>   r(   r   r   s     r0   test_diags_default_badz)TestConstructUtils.test_diags_default_bad   s!    ?O45j)//15r2   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 )NrI   rN   rT   r   rC   rL   rK   rg   r   rJ   rh   r   rD   rL   rL   r   r   )r   rm   r   r>   r(   r   	TypeError)r@   r   r   r   rt   ru   rv   rF   s           r0   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^$  	RKAq%*iooq!5Q	R 	iD6(QCHr2   c                    t         j                  j                  d      }dD ]J  }d|dz  z   |j                  dd      z   }t        j                  | dz   |dz
        }|j                  |       |d | }|D cg c]  }|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                         |
       M y c c}w c c}	}w )Ni  )rD   rJ   rK   rL   rM   rS   rD   rJ   r   rS   r   )r$   r%   RandomStaterandintarangeshuffler   absr(   r   sumzipr   r   rp   rn   )r@   r.   n_diagsr*   r   q	diagonalsmatxj	dense_mats              r0   test_diags_vs_diagz%TestConstructUtils.test_diags_vs_diag   s>    ii##D)* 	IGGQJQ!33Aii1ac*GKK hw'G7>?!!c!f*-?I?//)W=Cs9g7NOtq!RWWQ]OPI*3;;=)D7|q ooilGAJGGGIaL'!*=	.s{{}iH#	I @ Ps   8$E1	 E6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|   )r   rF   r-   rJ   )r(   r   intr   r-   rp   r@   r   s     r0   test_diags_dtypez#TestConstructUtils.test_diags_dtype  sE    OOSEA3fCHQWWc"QYY[Aq6Aq6"23r2   c                     t        t        d            }t        dd      D ]V  }t        t        j                  ||      j                         t        j                  |g|g      j                                X y )NrM   r   rO   r   )listranger   r(   r   rp   )r@   ru   ks      r0   test_diags_one_diagonalz*TestConstructUtils.test_diags_one_diagonal  s`    qNr1 	FAA6>>@"!qc:BBDF	Fr2   c                 Z    t        j                  g       }t        |j                  d       y )Nr   r   )r(   r   r   rF   r   s     r0   test_diags_emptyz#TestConstructUtils.test_diags_empty  s    OOBQWWf%r2   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 NrD   rJ   r   rK   int8r   )r-   r,   r,   r   r   r   r   rp   r-   r$   r,   sparse_formats)r@   r   Ifmts       r0   test_identityz TestConstructUtils.test_identity  s    Xa[((*aSE2Xa[((*aUAa5M:QfU3QWWbhhv./QXXu%! 	AC3'A3'www&?@	Ar2   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)NrD   rJ   rK   r   r   r   r   int16r-   r~   r   rO   zOffset.*out of boundsr;   r   )
r   rp   r-   r$   r   r   r=   r   r>   r   )r@   r   r)   r*   r   s        r0   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       r0   test_eye_onezTestConstructUtils.test_eye_oneD  s    SV^^%u-SV^^%1qe}5.QWWbhhv./QXXu%! 	ACAc"A3'www&?@	Ar2   c                     t        t        j                  d      t              sJ t        t        j                  d      t              rJ y )NrK   )
isinstancer(   	eye_arrayr   r   r@   s    r0   test_eye_array_vs_matrixz+TestConstructUtils.test_eye_array_vs_matrixR  s9    )--a0':::immA.8888r2   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   rZ   rL   rS   rD   rJ   rK   rM   r   rJ   irQ   r   rX   rO   )rM   rL   rL   r   )rO   r   rQ   )r   rD   r   rJ   r   rM   rQ   )      ?g      ?r   g      
@)r   g      @r   r   r   rd   )rm   r   r   r$   kronr   r(   r   r,   r   rp   r   r   r
   r   )	r@   rt   r   car   cbexpectedr   rw   s	            r0   	test_kronzTestConstructUtils.test_kronV  s   UQC5\"URD6]#UQC5\"URD6]#UQC9%&UQqE7^$UQqE1Q%=)*UQqE1Q%=)*UHX./0UQqE1Q%1./0UGGG456UO,-.U.{;<=  		7A1B 7q\771a=)!A. 7C&^^B3?F 4&v~~'7B%fg666	77		7 "I"Iq\q\771a=! 	/C^^B37F,v~~/:fg...		/ 
1z!}SIV]]C(6>>+X6&(+++r2   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 inputr;   r   rD   )r=   r   r>   r(   r   r   r   s    r0   test_kron_ndim_exceptionsz,TestConstructUtils.test_kron_ndim_exceptions  s    ]]:-@A 	:NNQC!:y!Q'89	:]]:-@A 	:NN9aV,sQCj9	: 	aSzAq6*	: 	:	: 	:s   &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   rD   )rF   r   )r(   diags_arrayr   )r@   r*   r   r   s       r0   test_kron_largez"TestConstructUtils.test_kron_large  s_    !!1#aVQqSA!!1#aVQqSAq!q!r2   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   rZ   rL   rS   rD   rJ   rK   rM   r   r   )r   rK   r   r   )r   rM   rZ   )rL   r}   rQ   )rm   r   r(   kronsumr   rp   r$   r   r   rF   r   r
   )r@   rt   r   r   rw   r   s         r0   test_kronsumzTestConstructUtils.test_kronsum  s   UQC5\"URD6]#UQC5\"URD6]#UQqE1Q%=)*UQqE1Q%=)*UHXg678UGHX678  	5A 5"**9Q<1FNNPGGBFF1771:$6: gga
);<="684	5	5 "":a=*Q-@HHJ68,r2   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   r;   r   rD   rJ   )r=   r   r>   r(   r   r   r   s    r0   test_kronsum_ndim_exceptionsz/TestConstructUtils.test_kronsum_ndim_exceptions  s    ]]:-@A 	=sQCj)QF*;<	=]]:-@A 	=iA/1#s<	= 	Aq6Aq6*QC0	= 	=	= 	=s   &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 )NrD   rJ   rK   rL   rM   rO   r   r   )r,   r-   r   )r   r   r(   vstackrp   r$   float32r-   todoktocsrindicesint32indptrtocsc)r@   r   ABr   rw   s         r0   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]](("((3r2   c                 "   t        g dg dg dg      }|j                  j                  t        j                        |_        |j
                  j                  t        j                        |_        t        j                  ||g      j                  j                  t        j                  k(  sJ t        j                  ||g      j                  j                  t        j                  k(  sJ t        g dg dg dg      }|j                  j                  t        j                        |_        |j
                  j                  t        j                        |_        t        j                  ||g      j                  j                  t        j                  k(  sJ t        j                  ||g      j                  j                  t        j                  k(  sJ t        g dg dg dg      }t        d |j                  D              |_        t        j                  ||g      j                  d   j                  t        j                  k(  sJ t        j                  ||g      j                  d   j                  t        j                  k(  sJ y )Nr   r   c              3   Z   K   | ]#  }|j                  t        j                         % y wr#   astyper$   int64.0cos     r0   	<genexpr>zITestConstructUtils.test_vstack_maintain64bit_idx_dtype.<locals>.<genexpr>       @288,@   )+r   )r   r   r   r$   r   r   r(   r   r-   hstackr   r   tuplecoordsr@   Xs     r0   #test_vstack_maintain64bit_idx_dtypez6TestConstructUtils.test_vstack_maintain64bit_idx_dtype  s   y)Y7888??288,II$$RXX.	A'..44@@@A'..44@@@y)Y7888??288,II$$RXX.	A'..44@@@A'..44@@@y)Y78@qxx@@A'..q177288CCCA'..q177288CCCr2   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 NrD   rJ   rK   rL   rM   rO   )r   r(   r   r   r   r   r   r@   r   r   s      r0   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Ur2   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   )rD   rL   )rD   rO   )rJ   rK   )rJ   rO   zincompatible row dimensionsr;   zincompatible column dimensions)r   r   r(   r   r$   r   rF   r   r=   r   r>   )r@   arrarr1darr1dcoos       r0   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 	6c288QF#345	6]]:-MN 	6c288QF#345	6 	6	6 	6	6 	6s   -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 )
NrD   rJ   rK   rL   rM   rO   rD   rJ   rM   rK   rL   rO   r   )r   r   r(   r   rp   r$   r   r-   r   r   r   )r@   r   r   r   r   s        r0   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	!r2   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      r0   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Ur2   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)NrD   rJ   rK   rL   rM   rO   rP   r   r  r  )r   r   rP   r{   r   )rD   rJ   r   )rK   rL   r   rC   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   rp   r   r$   r   r   r   Temptyr   r>   r<   )
r@   r  r   r   CDr   EZexcinfos
             r0   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:& 	4'!'')qwwyk23	4;<:& 	4'!'')qwwyk23	4MN:& 	"'!Q!	"GH:& 	2'!'')QWWY/01	2MN:& 	2'!'')QWWY/01	2;<-	$ 	$	4 	4	4 	4	" 	"	2 	2	2 	2sH   /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 )	NrD   rJ   rK   rL   rP   rM   r   r   )r(   r  r
   r   r   )r@   blockFlGlFmGms         r0   test_block_return_typez)TestConstructUtils.test_block_return_typet  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Cr2   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 removedrD   rJ   rK   rL   rP   rM   r   r   Nr   )r(   bmatr
   r   r   r   r   r   )r@   r&  r   r!  r"  r#  FaGas           r0   test_bmat_return_typez(TestConstructUtils.test_bmat_return_type  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Cr2   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-   r   )r@   r*   r   r   r  s        r0   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.r2   c                 N   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        j                  |||f      }t	        |j                         |       |j                  d   j                  t        j                  k(  sJ y)z basic test for block_diag rD   rJ   rK   rL   rM   rO   rP   )rD   rJ   r   r   )rK   rL   r   r   )r   r   rM   r   )r   r   rO   r   )r   r   r   rP   r   N)
r   r   r(   
block_diagr   rp   r  r-   r$   r   )r@   r   r   r  r   ABCs         r0   test_block_diag_basicz(TestConstructUtils.test_block_diag_basic  s    !uaUm$sA3i se,&&&&	( ) ""Aq!9-S[[]H-zz!}""bhh...r2   c                     t        g dg dg dg      }t        d |j                  D              |_        t        j                  ||g      j                  d   j
                  t        j                  k(  sJ y )Nr   r   c              3   Z   K   | ]#  }|j                  t        j                         % y wr#   r   r   s     r0   r   z?TestConstructUtils.test_block_diag_idx_dtype.<locals>.<genexpr>  r   r   r   )r   r   r  r(   r6  r-   r$   r   r  s     r0   test_block_diag_idx_dtypez,TestConstructUtils.test_block_diag_idx_dtype  s[    y)Y78@qxx@@##QF+2215;;rxxGGGr2   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 rJ   rK   rL   )rJ   rK   r   )r   r   rL   )rD   r   rK   r   )rD   r   rK   r   r   )r   r   r   r   rL   N)r   r(   r6  rp   r   r  s      r0   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+_=	?r2   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 rD   r   N)r   r(   r6  rp   r   r   s    r0   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\	#r2   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   )rD   rK   rE   rL   rM   r{   )rD   rJ   rK   r   r   )r   r   r   rL   rM   rD   rJ   rK   )rK   rD   rz   r   N)r   r   r(   r6  rp   r   r  s      r0   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r2   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   )rJ   rK   rL   )r   r   r   r(   r6  r   r   r  s      r0   test_block_diag_return_typez.TestConstructUtils.test_block_diag_return_type  s    )%z9+'>1)..1v6@@@)..1v6@@@)..1v6@@@)..1v6AAAr2   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 )NrM   rS   皙?)r+   r-   )rM   rS     )r+   r.   )g        rE  r   g      ?r+   )r   r   r   r    r   c                        ddd      S )NrM   rS   g? fs   r0   <lambda>z9TestConstructUtils.test_random_sampling.<locals>.<lambda>  s    a2sm r2   c                        ddd      S )NrM   rS   grI  rJ  s   r0   rL  z9TestConstructUtils.test_random_sampling.<locals>.<lambda>  s    a2tn r2   )sprandr1   r$   r   float64
longdoubler   r   	complex64
complex128r   r-   rF   nnzr%   r&   r   datarowcolr   prodr,   r   r>   )r@   tr   x1x2r+   r   rK  s          @r0   test_random_samplingz'TestConstructUtils.test_random_sampling  s   ! 	>Ajj"**bmmhh",,G 'aS2QWWa(QWWg.QUUA&' 1b#40B2::.1b#299+@+@+FGBrww0rvvrvv.rvvrvv./ EaW-QUUC"''!''2B(B$CDE 4 ,aC(QXXs+, *&;<*&<=5	>r2   r.   NrF  c                 0   t        dddt        j                  |      }t        t        j                  t        j
                  d|j                                     t        t        j                  t        j
                  |j                  d                   y NrS      r   r+   r-   r.   r   rD   )rN  r$   rO  r   r1  
less_equalrT  r@   r.   r   s      r0   	test_randzTestConstructUtils.test_rand  sZ     2r3bjjcBr}}Q/01r}}QVVQ/01r2   c                 \   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                                     y r]  )r1   r$   rO  r   anylessrT  r6   ra  s      r0   
test_randnzTestConstructUtils.test_randn  s    
 RS

Drwwqvvq)*+rwwq!&&)*+2r3bjjcJrwwqvvq)*+rwwq!&&)*+r2   c                     t        j                  ddd       t        j                  dd       t        j                  dd       t        j                  dd       y )NrS   ru   r   rS   rS   rS   rS   rS   rS   rS   rS   rS   rS   )r(   r%   r5   r   s    r0   test_random_accept_str_dtypez/TestConstructUtils.test_random_accept_str_dtype&  sG     	Rs+xs3|3733?r2   c                    t        j                  ddt        d      }|j                  dk(  sJ t        j                  ddt        d      }|j                  dk(  sJ t        j                  ddt        d      }|j                  dk(  sJ y )N)r   rL   g333333?r   )r+   r-   random_stateri  r_  rj  )r(   r5   r   rF   )r@   r
  s     r0   'test_random_array_maintains_array_shapez:TestConstructUtils.test_random_array_maintains_array_shape.  s    $$VSRSTyyF"""$$\3cqQyyL((($$%93c)*,yy0000r2   c                     t        j                  d      }|j                  d   j                  t        j
                  k(  sJ y )Nrh  r   )r(   r5   r  r-   r$   r   )r@   r   s     r0   test_random_array_idx_dtypez.TestConstructUtils.test_random_array_idx_dtype:  s2    ""8,xx{  BHH,,,r2   c                 @   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       t        j                  d	d
      }t        |j                         d       t        |t              sJ d}t        j                  |d      }t        |j                         d       y )NrS   gx&1?rG  rW   rh  )        rr  g(Rs?<i  )rS   rS   rS   rS   gk) 3?i  )rr  rr  rr  gAy5:   )r(   r%   r   count_nonzeror5   r   r   )r@   sparse_matrixsparse_arrayrF   s       r0   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$7 !--.>P\//1$7,000% --eZH\//1#6r2   )J__name__
__module____qualname__r=   markparametrizer   r   r   r   r   r   r   rA   r   r
   r   r   r   r   rG   rx   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)  slowthread_unsafexfail_on_32bitr4  r8  r;  r=  r?  rA  rC  r[  r$   r%   r&   rb  rf  rk  rn  rp  rw  rI  r2   r0   r8   r8   )   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:D&V6. [[YY(?@! A!.V [[]Y^^Y=R=R,STK= UK=Z
D"DH [[[[[[ CD/ E  // H
	?
#FB>< [[UT41F1Ft1L$MN2 O2 [[UT41F1Ft1L$MN	, O	,@
1-7r2   r8   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.rD   rM   rJ   r   r   r   r   NrL   z.*out of boundsr;   rE   )r$   r   r   r(   r   rp   r   r=   r   r>   r   )r   s    r0   test_diags_arrayr  W  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.sparser
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   scipy.sparse._constructr   rN  r   r1   r6   r8   r  rI  r2   r0   <module>r     sb    /  < <  * 33 3 3 3 3 3<
IFk7 k7\:r2   