o
    tBhS_                     @   s   d Z ddlZddlmZ ddlmZmZmZmZ ddl	Z	ddl	m
Z ddlmZ ddlmZ ddlmZmZmZ dd	lmZ dd
lmZ g dZdddZG dd 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
_construct)rand)matrix)csrcsccoobsrdialildok{Gz?r   c              	   C   s$   t |}|j}t| ||||||S )N)r	   standard_normal	constructrandom)mndensityformatdtyperandom_statedata_rvs r!   x/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/scipy/sparse/tests/test_construct.py_sprandn   s
   r#   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zejjejd%d&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Z d6d7 Z!d8d9 Z"d:S );TestConstructUtilsc           
      C   s  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 |D ]\}}}}}	tt|||| |	 qgd S )-N                        	   
                  r   r&   r'   r(   r)   r&   r   r   r   r   r'   r   r   r   r   r(   r   )r   r   r   r)   r*   r   r   r(   r   r   )r   r   r   r)   r   )r   r   r   r   r*   )r&   r   r.   r   r'   r   r   r   r(   r,   r   r   r   r&   r-   r   r   r   r'   r.   r   r,   )r   r   r(   r   r   r   )r   r   r   r)   r   r   )r   r   r   r   r*   r   )r,   r   r   r   r   r   r   r-   r   r   r   r   r   r   r.   r   r   r   r7   r   r&   )r,   r3   r   r   r   r   )r&   r-   r4   r   r   r   )r   r'   r.   r5   r   r   )r   r   r(   r/   r6   r   )r   r   r   r)   r0   r   r'   r7   )r   r   r.   r   r   )r2   r   r   r/   r   )r   r3   r   r   r0   r   r   r4   r   r   r&   r   r   r5   r   r   r'   r   r   r6   )r   appendr   r   spdiagstoarray)
selfdiags1diags2diags3casesdor   r   resultr!   r!   r"   test_spdiags   s^   """(((**zTestConstructUtils.test_spdiagsc           
      C   s*  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 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 ]G\}}}}dQ||||f }	ttj|||dR ||	dS |d |d krt|d dTrt|d t	|krtt|| ||	dS qKd S )UNr%   r+   r1   r&   r   r&   r&   r'   r&   r&   r'   r'   r'   r'   r7   r(   )r(   r)   r8   r9   r:   )r   r&   r   r   )r   r   r'   r   )r   r   r   r(   r(   r*   )r   r   r   r   r   )r&   r   r   r   r   )r   r'   r   r   r   r;   )r   r&   r   r   r   )r   r   r'   r   r   )r   r   r   r(   r   )r   r   r&   r   r   )r   r   r   r'   r   )r   r   r   r   r(   )r   r   r   r&   r   )r   r   r   r   r'   r)   )r   r   r   r   r&   rF   )r*   r(   )r   r   r   r&   r   r   rA   r<   r=   r   r&   r   )r   r   r'   r   r   r&   )r(   r(   )r&   r   r,   r>   r?   r@   )r,   r,   )r   r   r&   r   r   r   )r   r   r   r'   r   r   )r   r   r   r   r(   r   )r,   r   r   r   r   r)   rB   rC   rD   r*   r*   )r,   r2   r   r   r   )r&   r-   r3   r   r   )r   r'   r.   r4   r   )r   r   r(   r/   r5   )r   r   r   r)   r0   rE   r,   r*   )r   r   r,   r   r   )r2   r   r   r-   r   )r   r3   r   r   r.   rG   rH   rI   r&   r'   r(   )r)   r*   r,   )r)   r'   r   )r   r*   r(   )r&   rZ   r&   )r&   r   r7   )rZ   r&   r   )r   r&   rZ   z%r %r %r %rshape)err_msg__len__)
r   rJ   npr   r   diagsrL   hasattrlenmax)
rM   abcrQ   rR   rS   rc   rT   rd   r!   r!   r"   
test_diagsN   s   "&$$**000000000<<<<<<<<<(**4:8zTestConstructUtils.test_diagsc                 C   s*   t g d}tt| t| d S )Nr%   )r   r   r   rg   rL   rf   diagrM   rk   r!   r!   r"   test_diags_default   s   z%TestConstructUtils.test_diags_defaultc                 C   s&   t g dg dg}tttj| d S )Nr%   )r'   r(   r)   r*   r,   )r   assert_raises
ValueErrorr   rg   rp   r!   r!   r"   test_diags_default_bad   s   z)TestConstructUtils.test_diags_default_badc                 C   s6  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||| qtttjd ggdg d S )Nr%   r+   r1   r   rV   r)   r(   rD   r_   r'   rE   r`   r&   )r)   r)   )r   rJ   rr   rs   r   rg   	TypeError)rM   rk   rl   rm   rQ   rR   rS   rc   r!   r!   r"   test_diags_bad   s   ***z!TestConstructUtils.test_diags_badc                    s   t jd dD ]i}d|d  t jdd  t   d  d }t j| |d | } fdd|D }t||}td	d t	||D }t
| | t|dkrqt|d |d }t |d |d }t
| | qd S )
Ni  )r&   r'   r(   r)   r*   r0   r&   r'   r   r0   c                    s    g | ]}t j t| qS r!   )rf   r   r   abs).0qr   r!   r"   
<listcomp>   s     z9TestConstructUtils.test_diags_vs_diag.<locals>.<listcomp>c                 S   s   g | ]
\}}t ||qS r!   )rf   ro   )ry   xjr!   r!   r"   r|      s    )rf   r   seedrandintarangeshuffler   rg   sumzipr   rL   ri   ro   )rM   n_diagsoffsets	diagonalsmat	dense_matr!   r{   r"   test_diags_vs_diag   s    z%TestConstructUtils.test_diags_vs_diagc                 C   s@   t jdgdgdtd}t|jt t| ddgddgg d S )Ng@r   rY   )rc   r   r'   )r   rg   intr   r   rL   rM   r}   r!   r!   r"   test_diags_dtype   s   z#TestConstructUtils.test_diags_dtypec                 C   sF   t td}tddD ]}tt|| t|g|g  qd S )Nr*   ru   r,   )listranger   r   rg   rL   )rM   rR   kr!   r!   r"   test_diags_one_diagonal   s   z*TestConstructUtils.test_diags_one_diagonalc                 C   s   t g }t|jd d S )Nr   r   )r   rg   r   rc   r   r!   r!   r"   test_diags_empty   s   
z#TestConstructUtils.test_diags_emptyc                 C      t td dgg t td ddgddgg tjdddd}t |jtd t |jd tD ]}tjd|d}t |j| t | g d	g d
g dg q5d S Nr&   r'   r   r(   int8r   )r   r   r   r\   r]   r^   )r   r   identityrL   r   rf   r   sparse_formatsrM   Ifmtr!   r!   r"   test_identity       "z TestConstructUtils.test_identityc              
   C   s$  t tdd dgg t tdd g dg dg t tdd ddgddgddgg t tdd g dg dg dg t tjdddd	jtd d
D ]8}d
D ]3}tddD ]+}t tj|||d tj|||d ||krt tj||d tj|||d qbq[qWd S )Nr&   r'   r(   r\   r]   r   r^   int16r   r[   ru   r,   )r   )r   r   eyerL   r   rf   r   )rM   r   r   r   r!   r!   r"   test_eye   s   "((&$zTestConstructUtils.test_eyec                 C   r   r   )r   r   r   rL   r   rf   r   r   r   r!   r!   r"   test_eye_one   r   zTestConstructUtils.test_eye_onec                 C   s  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 ]+}|D ]&}t||}tD ]}tjt|t||d}t|j| t	|
 | qqqd S )Nr   r7   r)   r0   r&   r'   r(   r*   r   r'   ir.   r   r5   r,   )r*   r)   r)   r\   )r,   r   r.   )r   r&   r   r'   r   r*   r.   )      ?g      ?r   g      
@)r   g      @r   r   r   )rJ   r   rf   kronr   r   r
   r   r   r   rL   )rM   rQ   rk   rl   expectedr   rT   r!   r!   r"   	test_kron  s0     zTestConstructUtils.test_kronc                 C   sD   d}t d||d }t |dd| }t || t || d S )Ni   r&   )r   r   r   )rM   r   rk   rl   r!   r!   r"   test_kron_large  s
   z"TestConstructUtils.test_kron_largec              
   C   s&  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t|t| }ttt	||t|tt	| }t
|| qfqbd S )Nr   r7   r)   r0   r&   r'   r(   r*   r   r   )r   r(   r   r\   )r   r*   r7   )r)   rZ   r.   )rJ   r   r   kronsumr
   rL   rf   r   r   ri   r   )rM   rQ   rk   rl   rT   r   r!   r!   r"   test_kronsum$  s,     zTestConstructUtils.test_kronsumc                 C   sJ  t ddgddgg}t ddgg}tddgddgddgg}tt||g | ttj||gtjdjtj tt|	 |	 g | tj|	 |	 gtjd}t|jtj t|j
jtj t|jjtj tt| | g | tj| | gtjd}t|jtj t|j
jtj t|jjtj d S )Nr&   r'   r(   r)   r*   r,   r   )r   r   r   r   vstackrL   rf   float32r   tocsrindicesint32indptrtocsc)rM   ABr   rT   r!   r!   r"   test_vstack8  s0   zTestConstructUtils.test_vstackc                 C   s   t ddgddgg}t dgdgg}tg dg dg}tt||g | ttj||gtjd	jtj tt|	 |	 g | ttj|	 |	 gtjd	jtj tt|
 |
 g | ttj|
 |
 gtjd	jtj d S )
Nr&   r'   r(   r)   r*   r,   r&   r'   r*   r(   r)   r,   r   )r   r   r   r   hstackrL   rf   r   r   r   r   )rM   r   r   r   r!   r!   r"   test_hstackR  s6   zTestConstructUtils.test_hstackc           	      C   sT  t ddgddgg}t dgdgg}t dgg}t d}tg d	g d
g dg}tt||gd |gg | tdtjd}tt|	 |	 g||	 gg | tt|
 |
 g|
 |
 gg | tg dg dg dg}tt|d gd |gg | tt|	 |j	 g||	 gg | tt|
 |j
 g|
 |
 gg | tdtjd}tddgddgddgg}ttd |g|d gg | tt|j	 |	 g|	 |gg | tt|j
 |
 g|
 |
 gg | ttd}ttd d gg | ttd |g|d gg | tdgg}ttd |g|d gg | tt}t|g|gg W d    n	1 sbw   Y  |d tt}t|	 g|	 gg W d    n	1 sw   Y  |d tt}t|
 g|
 gg W d    n	1 sw   Y  |d tt}t||gg W d    n	1 sw   Y  |d tt}t|	 |	 gg W d    n	1 sw   Y  |d tt}t|
 |
 gg W d    n	1 sw   Y  |d d S )Nr&   r'   r(   r)   r*   r,   r-   r   r   r   )r   r   r-   rX   r   )r&   r'   r   )r(   r)   r   rV   r   z.Got blocks\[1,0\]\.shape\[1\] == 1, expected 2z"incompatible dimensions for axis 1z+Mismatching dimensions along axis 1: {1, 2}z.Got blocks\[0,1\]\.shape\[0\] == 1, expected 2z+Mismatching dimensions along axis 0: {1, 2}z"incompatible dimensions for axis 0)r   r   r   r   bmatrL   r
   rf   r   r   r   Tr   emptyrr   rs   match)	rM   r   r   CDr   EZexcinfor!   r!   r"   	test_bmatg  s    













zTestConstructUtils.test_bmatz!Can't create large array for testc                 C   s|   t d d}ttj||ftd}| }t||fd}tt	t
t|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   N)r   r
   rf   onesboolcopyr   _compressed_sparse_stackr   allequaldiffr   r   r   r   int64)rM   r   r   r   r   r!   r!   r"   test_concatenate_int32_overflow  s   z2TestConstructUtils.test_concatenate_int32_overflowc                 C   st   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|||f | dS )z basic test for block_diag 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-   N)r   r   r   r   
block_diagrL   )rM   r   r   r   r   r!   r!   r"   test_block_diag_basic  s   z(TestConstructUtils.test_block_diag_basicc                 C   s,   t tddgdg g dg dg dS )z) block_diag with scalar and 1d arguments r'   r(   r)   )r'   r(   r   )r   r   r)   N)r   r   r   rL   rM   r!   r!   r"   test_block_diag_scalar_1d_args  s   z1TestConstructUtils.test_block_diag_scalar_1d_argsc                 C   s   t tddgg tddgg t tddggg tddgg t tdgdggg tdgdgg t tdg tdgg dS )z block_diag with one matrix r&   r   N)r   r   r   rL   r   r   r!   r!   r"   test_block_diag_1  s   
z$TestConstructUtils.test_block_diag_1c              	   C   s   t g dgddt ddggddg}t|}t| tg dg dg t d	gd
gdggddt dgdggddg}t|}t| td	dgd
dgddgddgddgg dS )z! block_diag with sparse matrices ra   )r&   r(   rb   r)   r*   rX   )r&   r'   r(   r   r   )r   r   r   r)   r*   r&   r'   r(   )r(   r&   rW   r   N)r   r   r   r   rL   r   )rM   sparse_col_matricesblock_sparse_cols_matricessparse_row_matricesblock_sparse_row_matricesr!   r!   r"   test_block_diag_sparse_matrices  s   

$z2TestConstructUtils.test_block_diag_sparse_matricesc              	      sH  t tfD ] tjtjtjtjtjtjtj	fD ]} ddd|d}t
|j| t
|jd t
|jd q ddddd}t
|jtj  dddtjdd}t|j|j t|j|j t|j|j dD ]} dd|d	}t
|jt|t|j  qed
D ]} dd|d}t
|j| qtt fdd tt fdd qd S )Nr*   r0   皙?)r   r   )r*   r0     )r   r   )g        r   r   g      ?r   )r   r   r   r   r   c                          dddS )Nr*   r0   g?r!   r!   fr!   r"   <lambda>      z9TestConstructUtils.test_random_sampling.<locals>.<lambda>c                      r   )Nr*   r0   gr!   r!   r   r!   r"   r     r   )sprandr#   rf   r   float64
longdoubler   r   	complex64
complex128r   r   rc   nnzdoubler   RandomStater   datarowcolr   prodr   rr   rs   )rM   tr}   x1x2r   r   r!   r   r"   test_random_sampling  s2   
z'TestConstructUtils.test_random_samplingc                 C   s   d dt j g}zt j }|| W n	 ty   Y nw |D ]$}tdddt j|d}tt 	t 
d|j tt 	t 
|jd q d S Nr   r0      r   )r   r   r   r   r&   )rf   r   r   default_rngrJ   AttributeErrorr   r   r   r   
less_equalr   rM   random_statesgenr   r}   r!   r!   r"   	test_rand  s   
zTestConstructUtils.test_randc                 C   s   d dt j g}zt j }|| W n	 ty   Y nw |D ]$}tdddt j|d}tt 	t 
|jd tt 	t 
d|j q d S r   )rf   r   r   r   rJ   r   r#   r   r   anylessr   r   r!   r!   r"   
test_randn"  s   
zTestConstructUtils.test_randnc                 C   s   t jdddd d S )Nr0   rR   r   )r   r   r   r!   r!   r"   test_random_accept_str_dtype3  s   z/TestConstructUtils.test_random_accept_str_dtypec                 C   s"   t jdddd}t| d d S )Nr0   gx&1?r   r4   )r   r   r   count_nonzero)rM   sparse_matrixr!   r!   r"   Etest_random_sparse_matrix_returns_correct_number_of_non_zero_elements8  s   zXTestConstructUtils.test_random_sparse_matrix_returns_correct_number_of_non_zero_elementsN)#__name__
__module____qualname__rU   rn   rq   rt   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   pytestmarkslowxfail_on_32bitr   r   r   r   r   r   r   r   r   r   r!   r!   r!   r"   r$      s>    /GO
r$   )r   r   NN)__doc__numpyrf   r   numpy.testingr   r   r   r   r  r   rr   scipy._lib._testutilsr   scipy._lib._utilr	   scipy.sparser
   r   r   r   scipy.sparse._constructr   r   scipy.sparse._sputilsr   r   r#   r$   r!   r!   r!   r"   <module>   s    
