a
    Re9a                     @   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cooZbsrdialilZdok{Gz?r   c              	   C   s$   t |}|j}t| ||||||S )N)r	   Zstandard_normal	constructrandom)mndensityformatdtyperandom_stateZdata_rvs r   U/var/www/sunrise/env/lib/python3.9/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 ||g d-t|d t|d g d.g d/g d0g d1g dgf |D ]x\}}}}}	t|d |krT||krTtt|| |	 tt|||| |	 tt||||f |	 qd S )2N                        	   
                  r   r"   r#   r$   r%   r"   r   r   r   r   r#   r   r   r   r   r$   r   )r   r   r   r%   r&   r   r   r$   r   r   )r   r   r   r%   r   )r   r   r   r   r&   )r"   r   r*   r   r#   r   r   r   r$   r(   r   r   r   r"   r)   r   r   r   r#   r*   r   r(   )r   r   r$   r   r   r   )r   r   r   r%   r   r   )r   r   r   r   r&   r   )r(   r   r   r   r   r   r   r)   r   r   r   r   r   r   r*   r   r   r   r3   r   r"   )r(   r/   r   r   r   r   )r"   r)   r0   r   r   r   )r   r#   r*   r1   r   r   )r   r   r$   r+   r2   r   )r   r   r   r%   r,   r   r#   r3   )r   r   r*   r   r   )r.   r   r   r+   r   )r   r/   r   r   r,   r   r   r0   r   r   r"   r   r   r1   r   r   r#   r   r   r2   )r3   r"   r#   )r   r)   r0   r   r   )r"   r   r*   r1   r   )r   r#   r   r+   r2   )r   r   r$   r   r,   )r   appendlenr   r   Zspdiagstoarray)
selfZdiags1Zdiags2Zdiags3casesdor   r   resultr   r   r   test_spdiags   sr    """(((** zTestConstructUtils.test_spdiagsc           
      C   s4  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 ]\}}}}|dQ|dQ|dQ|}	ttj|||dR ||	dS |d |d krt|d dTrt|d t	|krtt|| ||	dS qd S )UNr!   r'   r-   r"   r   r"   r"   r#   r"   r"   r#   r#   r#   r#   r3   r$   )r$   r%   r4   r5   r6   )r   r"   r   r   )r   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   r   r   )r   r   r#   r   r   )r   r   r   r$   r   )r   r   r"   r   r   )r   r   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   )r&   r$   )r   r   r   r"   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*   r0   r   )r   r   r$   r+   r1   )r   r   r   r%   r,   rA   r(   r&   )r   r   r(   r   r   )r.   r   r   r)   r   )r   r/   r   r   r*   rC   rD   rE   r"   r#   r$   )r%   r&   r(   )r%   r#   r   )r   r&   r$   )r"   rS   r"   )r"   r   r3   )rS   r"   r   )r   r"   rS    shape)err_msg__len__)
r   rF   npr   r   diagsrH   hasattrrG   max)
rI   abcrJ   rK   rL   r]   rM   r^   r   r   r   
test_diagsW   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   ra   rH   r`   diagrI   rd   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   ra   ri   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||| qtttjd ggdg d S )Nr!   r'   r-   r   rO   r%   r$   r@   rX   r#   rA   rY   r"   )r%   r%   )r   rF   rk   rl   r   ra   	TypeError)rI   rd   re   rf   rJ   rK   rL   r]   r   r   r   test_diags_bad   s    ***z!TestConstructUtils.test_diags_badc                    s   t jd dD ]}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rt|d |d }t |d |d }t
| | qd S )
Ni  )r"   r#   r$   r%   r&   r,   r"   r#   r   r,   c                    s    g | ]}t j t| qS r   )r`   r   r   abs).0qr   r   r   
<listcomp>       z9TestConstructUtils.test_diags_vs_diag.<locals>.<listcomp>c                 S   s   g | ]\}}t ||qS r   )r`   rh   )rr   xjr   r   r   ru      rv   )r`   r   seedrandintZarangeshuffler   ra   sumzipr   rH   rG   rh   )rI   Zn_diagsoffsetsZ	diagonalsmatZ	dense_matr   rt   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   rR   )r]   r   r#   )r   ra   intr   r   rH   rI   rw   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&   rn   r(   )listranger   r   ra   rH   )rI   rK   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   ra   r   r]   r   r   r   r   test_diags_empty   s    
z#TestConstructUtils.test_diags_emptyc                 C   s   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 qjd S Nr"   r#   r   r$   Zint8r   )r   r   r   rU   rV   rW   )r   r   identityrH   r   r`   r   sparse_formatsrI   Ifmtr   r   r   test_identity   s     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 ]p}d
D ]f}tddD ]V}t tj|||d tj|||d ||krt tj||d tj|||d qqqd S )Nr"   r#   r$   rU   rV   r   rW   int16r   rT   rn   r(   )r   )r   r   eyerH   r   r`   r   )rI   r   r   r   r   r   r   test_eye   s    "((&zTestConstructUtils.test_eyec                 C   s   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 qjd S r   )r   r   r   rH   r   r`   r   r   r   r   r   r   test_eye_one   s     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 ]P}t||}tD ]8}tjt|t||d}t|j| t	|
 | qRq>q6d S )Nr   r3   r%   r,   r"   r#   r$   r&   r   r#   ir*   r   r1   r(   )r&   r%   r%   rU   )r(   r   r*   )r   r"   r   r#   r   r&   r*   )      ?g      ?r   g      
@)r   g      @r   r   r   )rF   r   r`   kronr   r   r
   r   r   r   rH   )rI   rJ   rd   re   expectedr   rM   r   r   r   	test_kron  s*      zTestConstructUtils.test_kronc                 C   sD   d}t d||d }t |dd| }t || t || d S )Ni   r"   )r   r   r   )rI   r   rd   re   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 ]R}tt|t| }ttt	||t|tt	| }t
|| qqd S )Nr   r3   r%   r,   r"   r#   r$   r&   r   r   )r   r$   r   rU   )r   r&   r3   )r%   rS   r*   )rF   r   r   Zkronsumr
   rH   r`   r   r   rG   r   )rI   rJ   rd   re   rM   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   ZvstackrH   r`   float32r   tocsrindicesint32indptrtocsc)rI   ABr   rM   r   r   r   test_vstackA  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   ZhstackrH   r`   r   r   r   r   )rI   r   r   r   r   r   r   test_hstack[  s2    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 s0    Y  |d tt*}t|	 g|	 gg W d    n1 s0    Y  |d tt*}t|
 g|
 gg W d    n1 s`0    Y  |d tt }t||gg W d    n1 s0    Y  |d tt(}t|	 |	 gg W d    n1 s0    Y  |d tt(}t|
 |
 gg W d    n1 s<0    Y  |d d S )Nr"   r#   r$   r%   r&   r(   r)   r   r   r   )r   r   r)   rQ   r   )r"   r#   r   )r$   r%   r   rO   r   z.Got blocks\[1,0\]\.shape\[1\] == 1, expected 2z"incompatible dimensions for axis 1z4Mismatching dimensions along axis 1: ({1, 2}|{2, 1})z.Got blocks\[0,1\]\.shape\[0\] == 1, expected 2z4Mismatching dimensions along axis 0: ({1, 2}|{2, 1})z"incompatible dimensions for axis 0)r   r   r   r   ZbmatrH   r
   r`   r   r   r   Tr   emptyrk   rl   match)	rI   r   r   CDr   EZexcinfor   r   r   	test_bmatp  s     



2

:

:

0

8

8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
   r`   Zonesboolcopyr   Z_compressed_sparse_stackr   allequaldiffr   r   r   r   int64)rI   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_diagrH   )rI   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   rH   rI   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   rH   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 rZ   )r"   r$   r\   r%   r&   rQ   )r"   r#   r$   r   r   )r   r   r   r%   r&   r"   r#   r$   )r$   r"   rP   r   N)r   r   r   r   rH   r   )rI   Zsparse_col_matricesZblock_sparse_cols_matricesZsparse_row_matricesZblock_sparse_row_matricesr   r   r   test_block_diag_sparse_matrices  s    

$z2TestConstructUtils.test_block_diag_sparse_matricesc              	      sL  t tfD ]< tjtjtjtjtjtjtj	fD ]8} 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  qd
D ] } dd|d}t
|j| q tt fdd tt fdd qd S )Nr&   r,   皙?)r   r   )r&   r,     )r   r   )g        r   r   g      ?r   )r   r   r   r   r   c                      s    dddS )Nr&   r,   g?r   r   fr   r   <lambda>  rv   z9TestConstructUtils.test_random_sampling.<locals>.<lambda>c                      s    dddS )Nr&   r,   gr   r   r   r   r   r     rv   )sprandr   r`   r   float64Z
longdoubler   r   Z	complex64Z
complex128r   r   r]   Znnzdoubler   RandomStater   datarowcolr   prodr   rk   rl   )rI   trw   x1Zx2r   r   r   r   r   test_random_sampling  s0    
z'TestConstructUtils.test_random_samplingc                 C   s   d dt j g}zt j }|| W n ty:   Y n0 |D ]H}tdddt j|d}tt 	t 
d|j tt 	t 
|jd q@d S Nr   r,      r   )r   r   r   r   r"   )r`   r   r   default_rngrF   AttributeErrorr   r   r   r   Z
less_equalr   rI   Zrandom_statesgenr   rw   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0 |D ]H}tdddt j|d}tt 	t 
|jd tt 	t 
d|j q@d S r   )r`   r   r   r   rF   r   r   r   r   anyZlessr   r   r   r   r   
test_randn+  s    
zTestConstructUtils.test_randnc                 C   s   t jdddd d S )Nr,   rK   r   )r   r   r   r   r   r   test_random_accept_str_dtype<  s    z/TestConstructUtils.test_random_accept_str_dtypec                 C   s"   t jdddd}t| d d S )Nr,   gx&1?r   r0   )r   r   r   Zcount_nonzero)rI   Zsparse_matrixr   r   r   Etest_random_sparse_matrix_returns_correct_number_of_non_zero_elementsA  s    zXTestConstructUtils.test_random_sparse_matrix_returns_correct_number_of_non_zero_elementsN)#__name__
__module____qualname__rN   rg   rj   rm   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   pytestmarkZslowZxfail_on_32bitr   r   r   r   r   r   r   r   r   r   r   r   r   r   r       s<   8GO
r    )r   r   NN)__doc__numpyr`   r   Znumpy.testingr   r   r   r   r   r   rk   Zscipy._lib._testutilsr   Zscipy._lib._utilr	   Zscipy.sparser
   r   r   r   Zscipy.sparse._constructr   r   Zscipy.sparse._sputilsr   r   r   r    r   r   r   r   <module>   s   
