
    UgŎ                         d Z ddlZddlmZ ddlmZmZmZmZ ddl	Z	ddl	m
Z ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z! dd	l"m#Z$ g d
Z%ddZ&ddZ' G d d          Z(d Z)dS )z)test sparse matrix construction functions    N)array)assert_equalassert_assert_array_equalassert_array_almost_equal_nulp)raises)check_free_memory)check_random_state)
csr_matrix
coo_matrix	csr_array	coo_array	csc_array	bsr_array	dia_array	dok_array	lil_array
csc_matrix
bsr_matrix
dia_matrix
lil_matrixsparrayspmatrix
_construct)rand)csrcsccoobsrdialildok{Gz?r   c           	      b    t          |          }|j        }t          j        | ||||||          S )N)r
   standard_normal	constructrandom)mndensityformatdtyperandom_statedata_rvss          `/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/sparse/tests/test_construct.py_sprandnr0      s;    %l33L+HAq'65((4 4 4    c                 f    t          |          }|j        }t          j        | |f|||||          S )N)r*   r+   r,   r-   data_sampler)r
   r%   r&   random_array)r(   r)   r*   r+   r,   r-   r3   s          r/   _sprandn_arrayr5   #   sG    %l33L/L!1a&'&PU/;,X X X Xr1   c            
          e Zd Zej                            deeee	e
eeg          d             Ze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                            dej        ej         g          d             Z!ej                            dej"        ej         g          d             Z#ej                            dej"        ej         g          d             Z$d Z%d Z&d Z'd Z(d Z)d Z*ej                            deeg          d             Z+d Z,d Z-ej                            deeg          d             Z.d Z/ej                            dej0        ej1        f          d             Z2d  Z3d! Z4ej        j5        ej        6                    d"          d#                         Z7d$ Z8d% Z9d& Z:d' Z;d( Z<d) Z=d* Z>d+ Z?d, Z@d- ZAd.S )/TestConstructUtilsclsc                     t          j        t          d          5   |d           d d d            d S # 1 swxY w Y   d S )NzEscipy sparse array classes do not support instantiation from a scalarmatchr   )pytestr   
ValueErrorselfr8   s     r/    test_singleton_array_constructorz3TestConstructUtils.test_singleton_array_constructor-   s    
 ].
 
 
 	 	 CFFF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   599c                 2     |d          j         dk    sJ dS )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      rC   Nshaper>   s     r/   !test_singleton_matrix_constructorz4TestConstructUtils.test_singleton_matrix_constructor;   s%     s1vv|v%%%%%%r1   c                 p   t          g dg          }t          g dg dg          }t          g dg dg dg          }g }|                    |ddddggf           |                    |dgdddggf           |                    |dgdddgdggf           |                    |dgddddggf           |                    |dgddddggf           |                    |dgddddggf           |                    |dgddddgddggf           |                    |dgddddgddggf           |                    |dgddddgddggf           |                    |dgdd	g d
g dg dgf           |                    |dgdd	g dg dg dgf           |                    |dgddg dg dg dgf           |                    |ddgddg dg dg dgf           |                    |ddgdd	g dg dg dgf           |                    |ddgddg dg dg dg dg dg dgf           |                    |g d ddg d!g d"g d#g d$g d%g dgf           |                    |g d&ddg d'g d(g d)g d*g d+g d,gf           |                    |g d-t          |d                   t          |d                   g d.g d/g d0g d1g dgf           |D ]\  }}}}}	t          |d                   |k    r;||k    r5t          t	          j        ||                                          |	           t          t	          j        ||||                                          |	           t          t	          j        ||||f                                          |	           d S )2NrC                        	   
                  r   rC   rI   rJ   rK   rC   r   r   r   r   rI   r   r   r   r   rJ   r   )r   r   r   rK   rL   r   r   rJ   r   r   )r   r   r   rK   r   )r   r   r   r   rL   )rC   r   rP   r   rI   r   r   r   rJ   rN   r   r   r   rC   rO   r   r   r   rI   rP   r   rN   )r   r   rJ   r   r   r   )r   r   r   rK   r   r   )r   r   r   r   rL   r   )rN   r   r   r   r   r   r   rO   r   r   r   r   r   r   rP   r   r   r   rY   r   rC   )rN   rU   r   r   r   r   )rC   rO   rV   r   r   r   )r   rI   rP   rW   r   r   )r   r   rJ   rQ   rX   r   )r   r   r   rK   rR   r   rI   rY   )r   r   rP   r   r   )rT   r   r   rQ   r   )r   rU   r   r   rR   r   r   rV   r   r   rC   r   r   rW   r   r   rI   r   r   rX   )rY   rC   rI   )r   rO   rV   r   r   )rC   r   rP   rW   r   )r   rI   r   rQ   rX   )r   r   rJ   r   rR   )r   appendlenr   r&   spdiagstoarray)
r?   diags1diags2diags3casesdor(   r)   results
             r/   test_spdiagszTestConstructUtils.test_spdiagsI   s   ())(* + +()))+ , , faAu-...fqc1a1#/000fqc1a1#qc3444fqc1a1Q%1222fqc1a1Q%1222fbT1a1Q%1222fqc1a1Q%17888fbT1a1Q%17888fqc1a1Q%17888fqc1a)))IIIiii)HIJJJfqc1a)))IIIiii)HIJJJfqc1a+++kkk+++)NOPPPfqeQGGGGGGGGG+DEFFFfr!faYYYyyy,KLMMMfqfa]]].;mm.;mm.;mm.;mm.;mm-= > 	? 	? 	? 	fhhh1/A/A/A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B/D E 	F 	F 	F 	fiiiA1A1A1A1@1@1@1@0B C 	D 	D 	D 	fjjj#fQi..#fQi..''''''''''''&	() 	* 	* 	* #( 	L 	LAq!Q1Q4yyA~~!q&&Y.q!44<<>>GGG*1aA66>>@@&III*1a!Q88@@BBFKKKK		L 	Lr1   c                    t          g d          }t          g d          }t          g d          }g }|                    |d d         dddggf           |                    |d d         gdgddggf           |                    |d d         gdgddgdggf           |                    |d d         gdgdddggf           |                    |d d         gdgdddggf           |                    |d d	         gdgd
ddgdd	ggf           |                    |d d         gdgd
ddgddggf           |                    |d d         gdgdg dg dg dgf           |                    |d d         gdgdg dg dg dgf           |                    |d d         gdgdg dg dg dgf           |                    |d d	         gdgdg dg dg dgf           |                    |d d         gdgdg dg dg dgf           |                    |d d         gdgdg dg dg dgf           |                    |d d         gd	gdg dg dg dgf           |                    |d d	         gdgdg d g d!g dgf           |                    |d d         gd"gdg d#g dg dgf           |                    |d d         gd$gd%g d&g d&g d&g d&g d'gf           |                    |d d	         gd(gd%g d&g d&g d&g d'g d)gf           |                    |d d         gdgd%g d&g d&g d'g d)g d*gf           |                    |d d         gdgd%g d&g d'g d)g d*g d&gf           |                    |d d         gdgd%g d'g d)g d*g d&g d&gf           |                    |d d	         gdgd%g d+g d,g d&g d&g d&gf           |                    |d d         gd	gd%g d-g d&g d&g d&g d&gf           |                    |d d         |d d         gdd	gd.g d/g d)g d*gf           |                    |d d	         |d d         gddgdg d0g d1g d2gf           |                    |d d"         |d d         gd	d(gd3g d4g d5g d6g d7g d8g d9gf           |                    |d d"         ||d d"         gg d:d;g d<g d=g d>g d?g d@gf           |                    |d d	         |d d         |gg dAdBg dCg dDg dEg dFg dGg dHgf           |                    |gdgddggf           |                    |d d         |gdd	gd.g d/g d)g d*gf           |                    t          j         g dIg dJg          ddgd.g d'g dKg dLgf           |                    g dMg dNd.g dOg dMg dPgf           |D ]\  }}}}|dQ|dQ|dQ|}	t          t	          j        |||R                                          ||	S           |d         |d         k    rtt          |d         dT          r^t          |d                   t          |          k    r8t          t	          j        ||U                                          ||	S           d S )VNrH   rM   rS   rC   r   rB   rI   rC   rC   rI   rI   rI   rI   rY   rJ   )rJ   rK   rZ   r[   r\   )r   rC   r   r   )r   r   rI   r   )r   r   r   rJ   rJ   rL   )r   r   r   r   r   )rC   r   r   r   r   )r   rI   r   r   r   r]   )r   rC   r   r   r   )r   r   rI   r   r   )r   r   r   rJ   r   )r   r   rC   r   r   )r   r   r   rI   r   )r   r   r   r   rJ   )r   r   r   rC   r   )r   r   r   r   rI   rK   )r   r   r   r   rC   rh   )rL   rJ   r   r   r   rC   r   r   rc   r^   r_   r   rC   r   )r   r   rI   r   r   rC   rJ   rJ   )rC   r   rN   r`   ra   rb   )rN   rN   )r   r   rC   r   r   r   )r   r   r   rI   r   r   )r   r   r   r   rJ   r   )rN   r   r   r   r   rK   rd   re   rf   rL   rL   )rN   rT   r   r   r   )rC   rO   rU   r   r   )r   rI   rP   rV   r   )r   r   rJ   rQ   rW   )r   r   r   rK   rR   rg   rN   rL   )r   r   rN   r   r   )rT   r   r   rO   r   )r   rU   r   r   rP   ri   rj   rk   rC   rI   rJ   )rK   rL   rN   )rK   rI   r   )r   rL   rJ   )rC   r|   rC   )rC   r   rY   )r|   rC   r   )r   rC   r|    offsetsrE   )err_msg__len__r   )
r   rl   npr   r&   diagsro   hasattrrm   max)
r?   abcrs   rt   ru   rE   rv   r   s
             r/   
test_diagszTestConstructUtils.test_diags   sK	   ///"""""##&&&''aeQ!.///q!ugsFaSE2333q!ugsFaS!I6777q!ugsFaUG4555q!ugsFaUG4555q!ugsFaUAa5M:;;;q!ugrdFaUAa5M:;;;q!ugsFYYYyyy,KLMMMq!ugsFYYYyyy,KLMMMq!ugtVkkk+++kkk-RSTTTq!ugtVkkk+++kkk-RSTTTq!ugsF[[[[[[,QRSSSq!ugsF[[[[[[,QRSSSq!ugsF[[[[[[,QRSSSq!ugsF[[[[[[,QRSSSq!ugsF[[[[[[,QRSSSq!ugtVggggggggggggggg-VWXXXq!ugtVggggggggggggggg-VWXXXq!ugtVggggggggggggggg-VWXXXq!ugtVggggggggggggggg-VWXXXq!ugsFWWWWWWWWWWWWWWW,UVWWWq!ugsFWWWWWWWWWWWWWWW,UVWWWq!ugsFWWWWWWWWWWWWWWW,UVWWWq!uQrrUmaUFWWWWWWWWW4MNOOOq!uQrrUmbVViii			)))5TUVVVq!uQrrUmaVVmmm5B]]5B]]5B]]5B]]5B]]6D E 	F 	F 	F 	q!uQq!uoxxx///<KOO<KOO<KOO<KOO	:M N 	O 	O 	O
 	q!uQrrU1oyyy&???:J:J:J:I//:I//:I//:I//;K L 	M 	M 	M 	qcA3!.///q!uQi!AIIIyyy0QRSSSHiii+,,rFYY			999-	
 	 	 	 	hhh&:::4>JJ4>JJ3@ A 	B 	B 	B $) 
	. 
	.Aq%99q99U99v99GAUCCCKKMM2 2 2 2 aE!H$$AaD),, %!IIU++Y_Q:::BBDDf%,. . . .
	. 
	.r1   c                     t          g d          }t          t          j        |                                          t          j        |                     d S )NrH   )r   r   r&   r   ro   r   diagr?   r   s     r/   test_diags_defaultz%TestConstructUtils.test_diags_default   sG    ///""Y_Q''//11271::>>>>>r1   c                 p    t          g dg dg          }t          t          t          j        |           d S )NrH   )rI   rJ   rK   rL   rN   )r   assert_raisesr=   r&   r   r   s     r/   test_diags_default_badz)TestConstructUtils.test_diags_default_bad   s6    ???OOO455j)/155555r1   c                    t          g d          }t          g d          }t          g d          }g }|                    |d d         gddf           |                    |d d         ||d d         gg dd	f           |                    |d d
         ||d d         gg ddf           |                    |d d
         ||d d         gg dd f           |                    g g dd f           |                    dgdgdf           |                    |gdd f           |D ])\  }}}t          t          t          j        |||           *t          t          t          j        d ggdg           d S )NrH   rM   rS   r   rB   rK   rJ   rf   r   rI   rg   r   rC   rK   rK   r   r   )r   rl   r   r=   r&   r   	TypeError)r?   r   r   r   rs   rt   ru   rE   s           r/   test_diags_badz!TestConstructUtils.test_diags_bad   s   ///"""""##&&&''q!ugq&)***q!uQq!uoxxx8999q!uQq!uoyyy&9:::q!uQq!uoyyy$7888b)))T*+++qcB4()))qc1d^$$$  	R 	RKAq%*ioq!5QQQQQiD6(QCHHHHHHr1   c                    t           j                            d           dD ]V}d|dz  z   t           j                            dd          z   t          j         dz   dz
            }t           j                            |           |d |         }fd|D             }t          j        ||          }t          d	 t          ||          D                       }t          |                                |           t          |          dk    ret          j        |d         |d                   }t          j        |d         |d                   }t          |                                |           Xd S )
Ni  )rC   rI   rJ   rK   rL   rR   rC   rI   r   rR   c                 n    g | ]1}t           j                            t          |          z
            2S  )r   r'   r   abs).0qr)   s     r/   
<listcomp>z9TestConstructUtils.test_diags_vs_diag.<locals>.<listcomp>   s1    EEECFF
33EEEr1   r   c                 >    g | ]\  }}t          j        ||          S r   )r   r   )r   xjs      r/   r   z9TestConstructUtils.test_diags_vs_diag.<locals>.<listcomp>   s&    OOOtq!RWQ]]OOOr1   )r   r'   seedrandintarangeshuffler&   r   sumzipr   ro   rm   r   )r?   n_diagsr   	diagonalsmat	dense_matr)   s         @r/   test_diags_vs_diagz%TestConstructUtils.test_diags_vs_diag   sc    		t* 	I 	IGGQJ!2!21b!9!99Ai1ac**GIg&&&hwh'GEEEEWEEEI/)W===COOs9g7N7NOOOPPI*3;;==)DDD7||q  oilGAJGGGGIaL'!*==	.s{{}}iHHH#	I 	Ir1   c                     t          j        dgdgdt                    }t          |j        t                     t          |                                ddgddgg           d S )Ng@r   r{   )r   rE   r,   rI   )r&   r   intr   r,   ro   r?   r   s     r/   test_diags_dtypez#TestConstructUtils.test_diags_dtype  s[    OSEA3fCHHHQWc"""QYY[[Aq6Aq6"233333r1   c                     t          t          d                    }t          dd          D ]`}t          t          j        ||                                          t          j        |g|g                                                     ad S )NrL   r   rN   r   )listranger   r&   r   ro   )r?   rt   ks      r/   test_diags_one_diagonalz*TestConstructUtils.test_diags_one_diagonal
  s    qNNr1 	F 	FAA666>>@@"!qc:::BBDDF F F F	F 	Fr1   c                 X    t          j        g           }t          |j        d           d S )Nr   r   )r&   r   r   rE   r   s     r/   test_diags_emptyz#TestConstructUtils.test_diags_empty  s)    OBQWf%%%%%r1   identityc                    t           |d                                          dgg           t           |d                                          ddgddgg            |ddd          }t          |j        t          j        d                     t          |j        d           t
          D ]O} |d|          }t          |j        |           t          |                                g d	g d
g dg           Pd S NrC   rI   r   rJ   int8r    )r,   r+   r+   r   r   r   r   ro   r,   r   r+   sparse_formats)r?   r   Ifmts       r/   test_identityz TestConstructUtils.test_identity  s   XXa[[((**aSE222XXa[[((**aUAa5M:::HQfU333QWbhv..///QXu%%%! 	A 	AC3'''A3'''wwwwwwwww&?@@@@	A 	Ar1   eyec                 &   t           |dd                                          dgg           t           |dd                                          g dg dg           t           |dd                                          ddgddgddgg           t           |dd                                          g dg dg dg           t           |ddd	          j        t          j        d                     d
D ]}d
D ]}t	          dd          D ]}|dk    r||k    s|dk     rUt          |          |k    rBt          j        t          d          5   ||||           d d d            n# 1 swxY w Y   it           ||||                                          t          j	        |||                     ||k    rBt           |||                                          t          j	        |||                     
d S )NrC   rI   rJ   r   r   r   r   int16r,   r}   r   rN   zOffset.*out of boundsr:   r   )
r   ro   r,   r   r   r   r<   r   r=   r   )r?   r   r(   r)   r   s        r/   test_eyezTestConstructUtils.test_eye"  s   SS1XX%%''1#///SS1XX%%''''''''):;;;SS1XX%%''1Q%1qe)<===SS1XX%%''''''''''')BCCCSS17+++128G3D3DEEE 	 	A  r!  A A!a%%QUUs1vvzz#]&.E   + +  C1NNNN+ + + + + + + + + + + + + + + %C1NNN2244F1a1---   66( #A 3 3 5 5 "q!q 1 1 1  )	 	s   E5	5E9<E9c                    t           |d                                          dgg           t           |d                                          ddgddgg            |ddd          }t          |j        t          j        d                     t          |j        d           t
          D ]O} |d|          }t          |j        |           t          |                                g d	g d
g dg           Pd S r   r   )r?   r   r   r   s       r/   test_eye_onezTestConstructUtils.test_eye_oneF  s   SSVV^^%%u---SSVV^^%%1qe}555C...QWbhv..///QXu%%%! 	A 	ACAc"""A3'''wwwwwwwww&?@@@@	A 	Ar1   c                     t          t          j        d          t                    sJ t          t          j        d          t                    rJ d S )NrJ   )
isinstancer&   	eye_arrayr   r   r?   s    r/   test_eye_array_vs_matrixz+TestConstructUtils.test_eye_array_vs_matrixT  sI    )-a00':::::imA..8888888r1   c                    g }|                     t          dgg                     |                     t          dgg                     |                     t          dgg                     |                     t          dgg                     |                     t          dgdgg                     |                     t          ddgg                     |                     t          ddgddgg                     |                     t          ddgddgg                     |                     t          g d	g d
g                     |                     t          ddgddgddgg                     |                     t          g dg dg dg                     |                     t          g dg                     |                     t          g dg dg                     |D ]}t          |          }|D ]}t          |          }t          j        ||          }t
          dd         D ]g}t          j        |||          }t          |j        |           t          |
                                |           t          |t                    sJ h|d         }|d         }t          |          }t          |          }t          j        ||          }t
          D ]g}t          j        |||          }t          |j        |           t          |
                                |           t          |t                    sJ ht          j        t          |          t          |          |          }t          |j        |           t          |
                                |           t          |t                    sJ d S )Nr   rY   rK   rR   rC   rI   rJ   rL   r   rI   irP   r   rW   rN   )rL   rK   rK   r   )rN   r   rP   )r   rC   r   rI   r   rL   rP   )      ?g      ?r   g      
@)r   g      @r   r   r   rc   )rl   r   r   r   kronr   r&   r   r+   r   ro   r   r   r   r   )	r?   rs   r   car   cbexpectedr   rv   s	            r/   	test_kronzTestConstructUtils.test_kronX  s   UQC5\\"""URD6]]###UQC5\\"""URD6]]###UQC9%%&&&UQqE7^^$$$UQqE1Q%=))***UQqE1Q%=))***UHHHXXX.//000UQqE1Q%1.//000UGGGGGGGGG455666UOOO,--...U...{{{;<<===  		7 		7A1B 7 7q\\71a==)!A#. 7 7C&^B3???F 444&v~~'7'7BBB%fg666666	77 "I"Iq\\q\\71a==! 	/ 	/C^B3777F,,,v~~//:::fg...... 
1z!}}SIIIV]C(((6>>++X666&(+++++++r1   c                    t          j        t          d          5  t          j        dgdggt          ddg                     d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        t          ddg          dgdgg           d d d            n# 1 swxY w Y   t          j        dgdggddg           d S )Nrequires 2D inputr:   r   rC   )r<   r   r=   r&   r   r   r   s    r/   test_kron_ndim_exceptionsz,TestConstructUtils.test_kron_ndim_exceptions  sJ   ]:-@AAA 	: 	:NQC!:y!Q'8'8999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:]:-@AAA 	: 	:N9aV,,sQCj999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	aSzAq6*****#   )AAA7)B,,B03B0c                     d}t          j        dgd|f|dz
            }t          j        dg|dfd|z
            }t          j        ||           t          j        ||           d S )Ni   rC   )rE   r   )r&   diags_arrayr   )r?   r)   r   r   s       r/   test_kron_largez"TestConstructUtils.test_kron_large  ss    !1#aVQqSAAA!1#aVQqSAAAq!q!r1   c           
         g }|                     t          dgg                     |                     t          dgg                     |                     t          dgg                     |                     t          dgg                     |                     t          ddgddgg                     |                     t          ddgddgg                     |                     t          g d	g d
g dg                     |                     t          g dg dg dg                     |D ]}|D ]}t          j        t	          |          t	          |                                                    }t          j        t          j        |j	        d                   |          t          j        |t          j        |j	        d                             z   }t          ||           t          j        t          |          t          |                                                    }t          ||           d S )Nr   rY   rK   rR   rC   rI   rJ   rL   r   r   )r   rJ   r   r   )r   rL   rY   )rK   r|   rP   )rl   r   r&   kronsumr   ro   r   r   r   rE   r   r   )r?   rs   r   r   rv   r   s         r/   test_kronsumzTestConstructUtils.test_kronsum  s   UQC5\\"""URD6]]###UQC5\\"""URD6]]###UQqE1Q%=))***UQqE1Q%=))***UHHHXXXggg677888UGGGHHHXXX677888  	5 	5A 5 5"*9Q<<1FFNNPPGBF171:$6$6:: ga
););<<="684444	5 ":a==*Q--@@HHJJ68,,,,,r1   c                    t          j        t          d          5  t          j        dgdggt          ddg                     d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        t          ddg          dgdgg           d d d            n# 1 swxY w Y   t          j        ddgddggdg           d S )Nr   r:   r   rC   rI   )r<   r   r=   r&   r   r   r   s    r/   test_kronsum_ndim_exceptionsz/TestConstructUtils.test_kronsum_ndim_exceptions  sP   ]:-@AAA 	= 	=sQCj)QF*;*;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=]:-@AAA 	= 	=iA//1#s<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	Aq6Aq6*QC00000r   coo_clsc                 2    |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                                          |           t          t          j        ||gt
          j                  j        t
          j                   t          t          j        |                                |                                g                                          |           t          t          j        |	                                |	                                g                                          |           t          j        |	                                |	                                gdt
          j        	          }t          |j        t
          j                   t          |j
        j        t
          j                   t          |j        j        t
          j                   t          t          j        |                                |                                g                                          |           t          j        |                                |                                gd
t
          j        	          }t          |j        t
          j                   t          |j
        j        t
          j                   t          |j        j        t
          j                   d S )NrC   rI   rJ   rK   rL   rN   r   r   )r+   r,   r   )r   r   r&   vstackro   r   float32r,   todoktocsrindicesint32indptrtocsc)r?   r   ABr   rv   s         r/   test_vstackzTestConstructUtils.test_vstack  sw   GaUAa5M""GaUG1a&a&a&" # # 	Y%q!f--5577BBBY%q!fBJ???EZ	! 	! 	! 	Y%qwwyy!''))&<==EEGGRRRY%qwwyy!''))&<==EEGG	 	 	!17799aggii"8).bjB B BV\2:...V^)28444V]("(333Y%qwwyy!''))&<==EEGG	 	 	!17799aggii"8).bjB B BV\2:...V^)28444V]("(33333r1   c                 H   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 d S NrC   rI   rJ   rK   rL   rN   )r   r&   r   r   r   r   r   r?   r   r   s      r/   test_vstack_matrix_or_arrayz.TestConstructUtils.test_vstack_matrix_or_array  s    UAa5MUG)*IaLL)A,,+GHH'RRRRR)*IaLL*Q--+HII7SSSSS)*JqMM9Q<<+HII7SSSSS)*JqMM:a==+IJJHUUUUUUUr1   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            n# 1 swxY w Y   t          j	        t          d          5  t          j        |t	          j        ddg          g           d d d            d S # 1 swxY w Y   d S )Nr   r   r~   r   r   )rC   rK   )rC   rN   )rI   rJ   )rI   rN   zincompatible row dimensionsr:   zincompatible column dimensions)r   r   r&   r   r   r   rE   hstackr<   r   r=   )r?   arrarr1darr1dcoos       r/   test_vstack_1d_with_2dz)TestConstructUtils.test_vstack_1d_with_2d  s   III.//)))$$YYY''bhyyy&9&9 :;;AVKKKK1# 899?6IIII//5????//5???? c
++1V;;;;//5???? 1228FBBBBh006&@@@@ 1228FBBBB]:-JKKK 	6 	6c28QF#3#34555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6]:-MNNN 	6 	6c28QF#3#34555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s$   $+GG"G+H99H= H=c                     |ddgddgg          } |dgdgg          }t          g dg dg          }t          t          j        ||g                                          |           t          t          j        ||gt
          j        	          j        t
          j                   t          t          j        |                                |                                g                                          |           t          t          j        |	                                |	                                g                                          |           t          t          j        |	                                |	                                gt
          j        	          j        t
          j                   t          t          j        |
                                |
                                g                                          |           t          t          j        |
                                |
                                gt
          j        	          j        t
          j                   d S )
NrC   rI   rJ   rK   rL   rN   rC   rI   rL   rJ   rK   rN   r   )r   r   r&   r   ro   r   r   r,   r   r   r   )r?   r   r   r   r   s        r/   test_hstackzTestConstructUtils.test_hstack  s   GaUAa5M""GaS!I)))#))% & &Y%q!f--5577BBBY%q!fBJ???EZ	! 	! 	! 	Y%qwwyy!''))&<==EEGGRRRY%qwwyy!''))&<==EEGG	 	 	Y%qwwyy!''))&<,.J8 8 88=Z	! 	! 	! 	Y%qwwyy!''))&<==EEGG	 	 	Y%qwwyy!''))&<,.J8 8 88=Z	! 	! 	! 	! 	!r1   c                 J   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 d S r   )r   r&   r   r   r   r   r   r   s      r/   test_hstack_matrix_or_arrayz.TestConstructUtils.test_hstack_matrix_or_array  s    UAa5MS!I)*IaLL)A,,+GHH'RRRRR)*IaLL*Q--+HII7SSSSS)*JqMM9Q<<+HII7SSSSS)*JqMM:a==+IJJHUUUUUUUr1   block_arrayc                 d   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                                          |           t	          dt
          j                  }t           ||                                |                                g||                                gg                                          |           t           ||                                |                                g|                                |                                gg                                          |           t          g dg dg dg          }t           ||d gd |gg                                          |           t           ||                                |j	                                        g||                                gg                                          |           t           ||                                |j	                                        g|                                |                                gg                                          |           t	          dt
          j                  }t          ddgddgddgg          }t           |d |g|d gg                                          |           t           ||j	                                        |                                g|                                |gg                                          |           t           ||j	                                        |                                g|                                |                                gg                                          |           t          j
        d          }t           |d d gg                                          |           t           |d |g|d gg                                          |           t          dgg          }t           |d |g|d gg                                          |           t          t                    5 }	 ||g|gg           d d d            n# 1 swxY w Y   |	                    d           t          t                    5 }	 ||                                g|                                gg           d d d            n# 1 swxY w Y   |	                    d           t          t                    5 }	 ||                                g|                                gg           d d d            n# 1 swxY w Y   |	                    d           t          t                    5 }	 |||gg           d d d            n# 1 swxY w Y   |	                    d           t          t                    5 }	 ||                                |                                gg           d d d            n# 1 swxY w Y   |	                    d           t          t                    5 }	 ||                                |                                gg           d d d            n# 1 swxY w Y   |	                    d           d S )NrC   rI   rJ   rK   rL   rN   rO   r   r  r  )r   r   rO   rz   r   )rC   rI   r   )rJ   rK   r   rB   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   ro   r   r   r   r   r   Temptyr   r=   r;   )
r?   r
  r   r   CDr   EZexcinfos
             r/   test_block_creationz&TestConstructUtils.test_block_creation  s    1v1v&''sA3i  sef)))#))#))% & & 	[[1a&4)!455==??JJJfBH---[[17799aggii"8#$aggii."2 3 33:799	 	 	 	[[17799aggii"8#$7799aggii"8": ; ;;B799	 	 	 )))#))#))% & & 	[[1d)dAY!788@@BBHMMM[[17799aciikk":#$aggii."2 3 33:799	 	 	 	[[17799aciikk":#$7799aggii"8": ; ;;B799	 	 	 fBH---1a&a&a&" # # 	[[4)aY!788@@BBHMMM[[1399;;		":#$7799a."2 3 33:799	 	 	 	[[1399;;		":#$7799aggii"8": ; ;;B799	 	 	 8F##[[4,0088::HEEE[[4)aY!788@@BB	 	 	 1#<<[[4)aY!788@@BB	 	 	 :&& 	$'K!qc
###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$GHHH:&& 	4'K!''))qwwyyk2333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4;<<<:&& 	4'K!''))qwwyyk2333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4MNNN:&& 	"'K!Q!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"GHHH:&& 	2'K!''))QWWYY/0111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2MNNN:&& 	2'K!''))QWWYY/0111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2;<<<<<sl   S33S7:S7'4U''U+.U+4WW"WX**X.1X.3ZZ!$Z!3\\\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 d S )	NrC   rI   rJ   rK   rO   rL   r   r   )r&   r
  r   r   r   )r?   blockFlGlFmGms         r/   test_block_return_typez)TestConstructUtils.test_block_return_typec  s    %
 a&!QA3*BBBB%%$b$Z 8GGGQQQQQ%%$b$Z 8GGGQQQQQ%%"b
59997CCCCCCCr1   c                    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	           ||                                |                                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	           |||ggd
          t                    sJ d	S )z2This can be removed after sparse matrix is removedrC   rI   rJ   rK   rO   rL   r   r   Nr   )r&   bmatr   r   r   r   r   r   )r?   r  r  r  r  r  FaGas           r/   test_bmat_return_typez(TestConstructUtils.test_bmat_return_typeo  s0   ~a&!QA3*BBBB2	"B$$Rz%888'BBBBB$$Rz%888(CCCCC$$r
RJ7FFFPPPPP$$r
RJ7FFFPPPPP$$r
RJ7FFFQQQQQ$$r
RJ7FFFQQQQQ $$Rz%888'BBBBB$$Rz%888'BBBBB$$Rz%888'BBBBB$$Rz%888(CCCCC$$Rz%888'BBBBB$$Rz%888(CCCCC $$RXXZZ 89%HHH'RRRRR$$RXXZZ 89%HHH(SSSSS$$RXXZZ 89%HHH'RRRRR$$RXXZZ 89%HHH(SSSSS $$Rz%888'BBBBB$$R 01%@@@'JJJJJ$$R 01%@@@(KKKKK$$Rz%888(CCCCCCCr1   z!Can't create large array for testc           	         t          d           d}t          t          j        ||ft                              }|                                }t          j        ||fdd          }t          t          j	        t          j
        t          j        |j                  |                               t          |j        j        t          j                   t          |j        j        t          j                   dS )z6 test for indptr overflow when concatenating matrices i0u  i  r   r   F)axisreturn_spmatrixN)r	   r   r   onesboolcopyr&   _compressed_sparse_stackr   allequaldiffr   r   r   r,   int64)r?   r)   r   r   r  s        r/   test_concatenate_int32_overflowz2TestConstructUtils.test_concatenate_int32_overflow  s     	%   bgq!fD11122FFHH.1vA?DF F F 	rx 1 115566777QY_bh///QX^RX.....r1   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                                          |           dS )z basic test for block_diag rC   rI   rJ   rK   rL   rN   rO   )rC   rI   r   r   )rJ   rK   r   r   )r   r   rL   r   )r   r   rN   r   )r   r   r   rO   N)r   r   r   r&   
block_diagro   )r?   r   r   r  r   s        r/   test_block_diag_basicz(TestConstructUtils.test_block_diag_basic  s    !uaUm$$sA3i  se,,,&,,&,,&,,&,,	( ) ) 	Y)1a)44<<>>IIIIIr1   c                 >   t          t          j        ddgdg                                          g dg dg           t	          g d          }t	          ddg          }t          t          j        ||g                                          g dg d	g           d
S )z) block_diag with scalar and 1d arguments rI   rJ   rK   )rI   rJ   r   )r   r   rK   )rC   r   rJ   r   )rC   r   rJ   r   r   )r   r   r   r   rK   N)r   r&   r-  ro   r   r   s      r/   test_block_diag_scalar_1d_argsz1TestConstructUtils.test_block_diag_scalar_1d_args  s     	9/!A
;;CCEE%IIyyy1	3 	3 	3 gggqe9/A77??AA+OO___=	? 	? 	? 	? 	?r1   c                 @   t          t          j        ddgg                                          t	          ddgg                     t          t          j        ddggg                                          t	          ddgg                     t          t          j        dgdggg                                          t	          dgdgg                     t          t          j        dg                                          t	          dgg                     dS )z block_diag with one matrix rC   r   N)r   r&   r-  ro   r   r   s    r/   test_block_diag_1z$TestConstructUtils.test_block_diag_1  s   Y)Aq6(33;;==QF8__	& 	& 	&Y)QF8*55==??QF8__	& 	& 	&Y)QC!:,77??AAQC!:&&	( 	( 	( 	Y)1#..6688QC5\\	# 	# 	# 	# 	#r1   c                    t          g dgd          }t          ddggd          }t          t          j        ||g                                          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                                          t          d	dgd
dgddgddgddgg                     dS )z block_diag with sparse arrays r   )rC   rJ   rD   rK   rL   rz   )rC   rI   rJ   r   r   )r   r   r   rK   rL   rC   rI   rJ   )rJ   rC   ry   r   N)r   r   r&   r-  ro   r   r   s      r/   test_block_diag_sparse_arraysz0TestConstructUtils.test_block_diag_sparse_arrays  s     yyyk0001vhf---Y)1a&1199;;OOO___=>>	@ 	@ 	@ sQC!oV444sQCj///Y)1a&1199;;QFQFQFQFQFCDD	F 	F 	F 	F 	Fr1   c                    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 d S )Nr   )rI   rJ   rK   )r   r   r   r&   r-  r   r   r   s      r/   test_block_diag_return_typez.TestConstructUtils.test_block_diag_return_type  s    )))%%z999+'>'>1).1v66@@@@@).1v66@@@@@).1v66@@@@@).1v66AAAAAAAr1   c                    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           Q dddd          }t          |j        t          j                    dddt          j                            d                    }t!          |j        |j                   t!          |j        |j                   t!          |j        |j                   dD ]L} dd|	          }t          |j        t)          |t          j        |j                  z                       Md
D ]%} dd|          }t          |j        |           &t/          t0          fd           t/          t0          fd           d S )NrL   rR   皙?)r*   r,   )rL   rR     )r*   r-   )g        r8  r   g      ?r*   )r   r   r   r!   r   c                        ddd          S )NrL   rR   g?r   fs   r/   <lambda>z9TestConstructUtils.test_random_sampling.<locals>.<lambda>  s    aa2smm r1   c                        ddd          S )NrL   rR   gr   r<  s   r/   r>  z9TestConstructUtils.test_random_sampling.<locals>.<lambda>  s    aa2tnn r1   )sprandr0   r   r   float64
longdoubler   r*  	complex64
complex128r   r,   rE   nnzr'   RandomStater   datarowcolr   prodr+   r   r=   )r?   tr   x1x2r*   r   r=  s          @r/   test_random_samplingz'TestConstructUtils.test_random_sampling  s   ! 	> 	>Aj"*bmh",G ' 'AaS222QWa(((QWg...QUA&&&&1b#D999B2:...1b# "	 5 5d ; ;= = =B rw000rvrv...rvrv.../ E EAaW---QUC"'!'2B2B(B$C$CDDDD3 , ,AaC(((QXs++++*&;&;&;&;<<<*&<&<&<&<====7	> 	>r1   c           	         d dt           j                                        g}	 t           j                                        }|                    |           n# t
          $ r Y nw xY w|D ]}t          dddt           j        |          }t          t          j	        t          j
        d|j                                       t          t          j	        t          j
        |j        d                               d S Nr9  rR      r   )r*   r,   r-   r   rC   )r   r'   rF  default_rngrl   AttributeErrorr@  rA  r   r'  
less_equalrG  )r?   random_statesgenr-   r   s        r/   	test_randzTestConstructUtils.test_rand  s    tRY%:%:%<%<=	)''))C  %%%% 	 	 	D	 * 	6 	6Lr2s"*$02 2 2ABF2=AF3344555BF2=33445555		6 	6   3A 
A$#A$c           	          d dt           j                                        g}	 t           j                                        }|                    |           n# t
          $ r Y nw xY w|D ]#}t          dddt           j        |          }t          t          j	        t          j
        |j        d                               t          t          j	        t          j
        d|j                                       t          dddt           j        |          }t          t          j	        t          j
        |j        d                               t          t          j	        t          j
        d|j                                       %d S rP  )r   r'   rF  rR  rl   rS  r0   rA  r   anylessrG  r5   )r?   rU  rV  rsr   s        r/   
test_randnzTestConstructUtils.test_randn  sX    tRY%:%:%<%<=	)''))C  %%%% 	 	 	D	   	0 	0BRBJRPPPABF27161--..///BF271af--..///r2s"*SUVVVABF27161--..///BF271af--..////	0 	0rX  c                 `    t          j        ddd           t          j        dd           d S )NrR   rt   r   rR   rR   )r&   r'   r4   r   s    r/   test_random_accept_str_dtypez/TestConstructUtils.test_random_accept_str_dtype  s8     	Rs++++xs333333r1   c                    t          j        ddd          }t          |                                d           t          j        dd          }t          |                                d           t          |t                    sJ d}t          j        |d          }t          |                                d           d S )	NrR   gx&1?r:  rV   r_  )        rb  g(Rs?<i  )r&   r'   r   count_nonzeror4   r   r   )r?   sparse_matrixsparse_arrayrE   s       r/   Etest_random_sparse_matrix_returns_correct_number_of_non_zero_elementszXTestConstructUtils.test_random_sparse_matrix_returns_correct_number_of_non_zero_elements$  s     "(R@@@]00222666 -hGGG\//11"555,00000 -eZHHH\//11$77777r1   N)B__name__
__module____qualname__r<   markparametrizer   r   r   r   r   r   r   r@   r   r   r   r   r   r   rF   rw   r   r   r   r   r   r   r   r   r&   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r
  r  r  r  slowxfail_on_32bitr+  r.  r0  r2  r4  r6  rN  rW  r]  r`  rf  r   r1   r/   r7   r7   +   s       [U9i9i%   	  [UJ
J
%  & &	 &6L 6L 6LpL. L. L.\? ? ?6 6 6I I I&I I I64 4 4
F F F& & & [Z)*<i>Q)RSSA A TSA [UY]I4G$HII! ! JI!F [UY]I4G$HIIA A JIA9 9 9., ., .,`+ + +  - - -01 1 1 [YY(?@@4 4 A@4:V V V6 6 6. [YY(?@@! ! A@!.V V V []Y^Y=R,STTK= K= UTK=Z
D 
D 
D"D "D "DH [[ CDD/ / ED /J J J	? 	? 	?
# 
# 
#F F FB B B> > >>6 6 60 0 0&4 4 48 8 8 8 8r1   r7   c                     t          j        dd          } t          t          j        |                                           t          j        |                      t          t          j        | d                                          t          j        | d                     t          t          j        | dd                                          t          j        | d          dd	dd	f                    t          j        t          d
          5  t          j
        t          j        dd          dd           ddd           dS # 1 swxY w Y   dS )z7Tests of diags_array that do not rely on diags wrapper.rC   rL   rI   r   r   r   r   NrK   z.*out of boundsr:   rD   )r   r   r   r&   r   ro   r   r<   r   r=   r   )r   s    r/   test_diags_arrayro  3  sw   9Q??Dy,T22::<<bgdmmLLLdA...6688"'$!:L:L:L   dAV<<<DDFF
2A2rr6"   
z):	;	;	; : :	!Q&9999: : : : : : : : : : : : : : : : : :s   +EEE)r#   r   NN)*__doc__numpyr   r   numpy.testingr   r   r   r   r<   r   r   scipy._lib._testutilsr	   scipy._lib._utilr
   scipy.sparser   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   scipy.sparse._constructr   r@  r   r0   r5   r7   ro  r   r1   r/   <module>rw     s   / /          < < < < < < < < < < < <  * * * * * * 3 3 3 3 3 3 / / / / / /3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2<<<
4 4 4 4X X X XE8 E8 E8 E8 E8 E8 E8 E8P: : : : :r1   