o
    i!                     @   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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dZ$dddZ%G dd dZ&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)
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cooZbsrdialilZdok{Gz?r   c              	   C   s(   t j|}|j}t| ||||||S N)nprandomdefault_rngstandard_normal	construct)mndensityformatdtyperngZdata_rvs r,   [/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/sparse/tests/test_construct.py_sprandn   s   r.   c                 C   s,   t j|}|j}tj| |f|||||dS )N)r(   r)   r*   r+   data_sampler)r!   r"   r#   r$   r%   random_array)r&   r'   r(   r)   r*   r+   r/   r,   r,   r-   _sprandn_array!   s
   r1   c                
   @   sj  e Zd Zejdeeee	e
eegdd Zejdeeeeeeg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dejej gdd Z!ejdej"ej gdd Z#ejdej"ej gdd Z$d d! Z%d"d# Z&d$d% Z'd&d' Z(d(d) Z)d*d+ Z*ejd,eegd-d. Z+d/d0 Z,d1d2 Z-d3d4 Z.ejd,eegd5d6 Z/d7d8 Z0ejd9ej1ej2fd:d; Z3d<d= Z4d>d? Z5ejj6ejj7ej8d@dAdB Z9dCdD Z:dEdF Z;dGdH Z<dIdJ Z=dKdL Z>dMdN Z?dOdP Z@ejdQdRdSeAjBCdSgdTdU ZDejdQdRdSeAjBCdSgdVdW ZEdXdY ZFdZd[ ZGd\d] ZHd^d_ ZIdRS )`TestConstructUtilsclsc                 C   s<   t jtdd |d W d    d S 1 sw   Y  d S )NzEscipy sparse array classes do not support instantiation from a scalarmatchr   )pytestr   
ValueErrorselfr3   r,   r,   r-    test_singleton_array_constructor+   s   
"z3TestConstructUtils.test_singleton_array_constructorc                 C   s   |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      r<   Nshaper8   r,   r,   r-   !test_singleton_matrix_constructor9   s   z4TestConstructUtils.test_singleton_matrix_constructorc           
      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 ]<\}}}}}	t|d |kr||krtt|| |	 tt|||| |	 tt||||f |	 qd S )2Nr<                        	   
                  r   r<   rA   rB   rC   r<   r   r   r   r   rA   r   r   r   r   rB   r   )r   r   r   rC   rD   r   r   rB   r   r   )r   r   r   rC   r   )r   r   r   r   rD   )r<   r   rH   r   rA   r   r   r   rB   rF   r   r   r   r<   rG   r   r   r   rA   rH   r   rF   )r   r   rB   r   r   r   )r   r   r   rC   r   r   )r   r   r   r   rD   r   )rF   r   r   r   r   r   r   rG   r   r   r   r   r   r   rH   r   r   r   rQ   r   r<   )rF   rM   r   r   r   r   )r<   rG   rN   r   r   r   )r   rA   rH   rO   r   r   )r   r   rB   rI   rP   r   )r   r   r   rC   rJ   r   rA   rQ   )r   r   rH   r   r   )rL   r   r   rI   r   )r   rM   r   r   rJ   r   r   rN   r   r   r<   r   r   rO   r   r   rA   r   r   rP   )rQ   r<   rA   )r   rG   rN   r   r   )r<   r   rH   rO   r   )r   rA   r   rI   rP   )r   r   rB   r   rJ   )r   appendlenr   r%   Zspdiagstoarray)
r9   Zdiags1Zdiags2Zdiags3casesdor&   r'   resultr,   r,   r-   test_spdiagsG   st   """(((**  zTestConstructUtils.test_spdiagsc           
      C   s6  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 ]M\}}}}|dQ|dQ|dQ|}	ttj|||dR ||	dS |d |d krt|d dTrt|d t	|krttj||dU ||	dS qKd S )VNr@   rE   rK   r<   r   r;   rA   r<   r<   rA   rA   rA   rA   rQ   rB   )rB   rC   rR   rS   rT   )r   r<   r   r   )r   r   rA   r   )r   r   r   rB   rB   rD   )r   r   r   r   r   )r<   r   r   r   r   )r   rA   r   r   r   rU   )r   r<   r   r   r   )r   r   rA   r   r   )r   r   r   rB   r   )r   r   r<   r   r   )r   r   r   rA   r   )r   r   r   r   rB   )r   r   r   r<   r   )r   r   r   r   rA   rC   )r   r   r   r   r<   r`   )rD   rB   r   r   r   r<   r   r   r[   rV   rW   r   r<   r   )r   r   rA   r   r   r<   rB   rB   )r<   r   rF   rX   rY   rZ   )rF   rF   )r   r   r<   r   r   r   )r   r   r   rA   r   r   )r   r   r   r   rB   r   )rF   r   r   r   r   rC   r\   r]   r^   rD   rD   )rF   rL   r   r   r   )r<   rG   rM   r   r   )r   rA   rH   rN   r   )r   r   rB   rI   rO   )r   r   r   rC   rJ   r_   rF   rD   )r   r   rF   r   r   )rL   r   r   rG   r   )r   rM   r   r   rH   ra   rb   rc   r<   rA   rB   )rC   rD   rF   )rC   rA   r   )r   rD   rB   )r<   ro   r<   )r<   r   rQ   )ro   r<   r   )r   r<   ro    offsetsr>   )err_msg__len__r{   )
r   rd   r!   r   r%   diagsrf   hasattrre   max)
r9   abcrg   rh   ri   r>   rj   r|   r,   r,   r-   
test_diags   s   "&$$**000000000<<<<<<<<<(**4zTestConstructUtils.test_diagsc                 C   s*   t g d}tt| t| d S )Nr@   )r   r   r%   r   rf   r!   diagr9   r   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@   )rA   rB   rC   rD   rF   )r   assert_raisesr7   r%   r   r   r,   r,   r-   test_diags_default_bad   s   z)TestConstructUtils.test_diags_default_badc                 C   s:  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|||d qtttjd ggdgd d S )Nr@   rE   rK   r   r;   rC   rB   r^   rv   rA   r_   rw   r<   rC   rC   rz   r~   )r   rd   r   r7   r%   r   	TypeError)r9   r   r   r   rg   rh   ri   r>   r,   r,   r-   test_diags_bad   s   ***z!TestConstructUtils.test_diags_badc                    s   t jddD ]j}d|d  dd  t   d  d }| |d | } fdd|D }tj||d	}td
d t	||D }t
| | t|dkrrtj|d |d d	}t |d |d }t
| | qd S )Ni  )r<   rA   rB   rC   rD   rJ   r<   rA   r   rJ   c                    s   g | ]}  t| qS r,   )r   abs).0qr'   r+   r,   r-   
<listcomp>   s    z9TestConstructUtils.test_diags_vs_diag.<locals>.<listcomp>r~   c                 S   s   g | ]
\}}t ||qS r,   )r!   r   )r   xjr,   r,   r-   r      s    )r!   r"   ZRandomStaterandintarangeshuffler%   r   sumzipr   rf   re   r   )r9   Zn_diagsr{   Z	diagonalsZmatZ	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   rn   )r{   r>   r*   rA   )r%   r   intr   r*   rf   r9   r   r,   r,   r-   test_diags_dtype  s   z#TestConstructUtils.test_diags_dtypec                 C   sJ   t td}tddD ]}ttj||d tj|g|gd  qd S )NrD   r   rF   r~   )listranger   r%   r   rf   )r9   rh   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%   r   r   r>   r   r,   r,   r-   test_diags_empty  s   
z#TestConstructUtils.test_diags_emptyidentityc                 C      t |d dgg t |d ddgddgg |dddd}t |jtd t |jd tD ]}|d|d}t |j| t | g d	g d
g dg q2d S Nr<   rA   r   rB   Zint8r   )r*   r)   r)   rr   rs   rt   r   rf   r*   r!   r)   sparse_formats)r9   r   Ifmtr,   r,   r-   test_identity     "z TestConstructUtils.test_identityeyec                 C   sx  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d	jtd d
D ]g}d
D ]b}tddD ]Z}|dkrg||ksq|dk rt||krtjtdd ||||d W d    n1 sw   Y  q]t ||||d tj	|||d ||krt |||d tj	|||d q]qVqRd S )Nr<   rA   rB   rr   rs   r   rt   Zint16r*   rp   r   rF   zOffset.*out of boundsr4   r   )
r   rf   r*   r!   r   r   r6   r   r7   r   )r9   r   r&   r'   r   r,   r,   r-   test_eye   s8    &&$zTestConstructUtils.test_eyec                 C   r   r   r   )r9   r   r   r   r,   r,   r-   test_eye_oneD  r   zTestConstructUtils.test_eye_onec                 C   s,   t tdts
J t tdtrJ d S )NrB   )
isinstancer%   	eye_arrayr   r   r9   r,   r,   r-   test_eye_array_vs_matrixR  s   z+TestConstructUtils.test_eye_array_vs_matrixc           	      C   sb  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 ]1}t|}t||}tdd D ]}tj|||d}t|j| t	|
 | t|tsJ qqq|d }|d }t|}t|}t||}tD ]}tj|||d}t|j| t	|
 | t|tsJ qtjt|t||d}t|j| t	|
 | t|ts/J d S )Nr   rQ   rC   rJ   r<   rA   rB   rD   r   rA   irH   r   rO   rF   )rD   rC   rC   rr   )rF   r   rH   )r   r<   r   rA   r   rD   rH   )      ?g      ?r   g      
@)r   g      @r   r   r   r[   )rd   r   r   r!   kronr   r%   r   r)   r   rf   r   r   r	   r   )	r9   rg   r   car   cbexpectedr   rj   r,   r,   r-   	test_kronV  sP     
zTestConstructUtils.test_kronc                 C   s   t jtdd tdgdggtddg W d    n1 s w   Y  t jtdd ttddgdgdgg W d    n1 sEw   Y  tdgdggddg d S )Nrequires 2D inputr4   r   r<   )r6   r   r7   r%   r   r   r   r,   r,   r-   test_kron_ndim_exceptions  s   z,TestConstructUtils.test_kron_ndim_exceptionsc                 C   sT   d}t jdgd|f|d d}t jdg|dfd| d}t || t || d S )Ni   r<   )r>   r{   )r%   diags_arrayr   )r9   r'   r   r   r,   r,   r-   test_kron_large  s
   z"TestConstructUtils.test_kron_largec              
   C   sL  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 ]0}|D ]+}tt|t| }tt|j	d |t|t|j	d  }t
|| qfqbtt|t| }t
|| d S )Nr   rQ   rC   rJ   r<   rA   rB   rD   r   r   )r   rB   r   rr   )r   rD   rQ   )rC   ro   rH   )rd   r   r%   kronsumr   rf   r!   r   r   r>   r   r	   )r9   rg   r   r   rj   r   r,   r,   r-   test_kronsum  s&     zTestConstructUtils.test_kronsumc                 C   s   t jtdd tdgdggtddg W d    n1 s w   Y  t jtdd ttddgdgdgg W d    n1 sEw   Y  tddgddggdg d S )Nr   r4   r   r<   rA   )r6   r   r7   r%   r   r   r   r,   r,   r-   test_kronsum_ndim_exceptions  s   z/TestConstructUtils.test_kronsum_ndim_exceptionscoo_clsc                 C   sn  |ddgddgg}|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t|	 |	 g | tj|	 |	 gdtjd	}t|jtj t|j
jtj t|jjtj tt| | g | tj| | gd
tjd	}t|jtj t|j
jtj t|jjtj d S )Nr<   rA   rB   rC   rD   rF   r   r   )r)   r*   r   )r   r   r%   vstackrf   r!   float32r*   todoktocsrindicesint32indptrtocsc)r9   r   ABr   rj   r,   r,   r-   test_vstack  s:    zTestConstructUtils.test_vstackc                 C   sX  t g dg dg dg}|jtj|_|jtj|_t||gjjtjks+J t	||gjjtjks9J t
g dg dg dg}|jtj|_|jtj|_t||gjjtjksdJ t	||gjjtjksrJ tg dg dg dg}tdd |jD |_t||gjd jtjksJ t	||gjd jtjksJ d S )Nrr   rs   c                 s       | ]	}| tjV  qd S r    astyper!   int64r   cor,   r,   r-   	<genexpr>      zITestConstructUtils.test_vstack_maintain64bit_idx_dtype.<locals>.<genexpr>r   )r   r   r   r!   r   r   r%   r   r*   hstackr   r   tuplecoordsr9   Xr,   r,   r-   #test_vstack_maintain64bit_idx_dtype  s    $z6TestConstructUtils.test_vstack_maintain64bit_idx_dtypec                 C   s   ddgddgg}ddgg}t tt|t|gtsJ t tt|t|gts-J t tt|t|gts=J t tt|t|gtsMJ d S Nr<   rA   rB   rC   rD   rF   )r   r%   r   r   r   r
   r   r9   r   r   r,   r,   r-   test_vstack_matrix_or_array  s   
   $z.TestConstructUtils.test_vstack_matrix_or_arrayc                 C   s  t g dg dg}t g d}tg d}t|tg dgjdks'J t|tdgggjdks8J t||gjdksDJ t||gjdksPJ t||gjd	ks\J t||gjdkshJ t||gjdkstJ t||gjdksJ t||gjdksJ tj	t
d
d t|tddgg W d    n1 sw   Y  tj	t
dd t|tddgg W d    d S 1 sw   Y  d S )Nrr   rs   rq   ru   r   )r<   rC   )r<   rF   )rA   rB   )rA   rF   zincompatible row dimensionsr4   zincompatible column dimensions)r   r   r%   r   r!   r   r>   r   r6   r   r7   )r9   arrZarr1dZarr1dcoor,   r,   r-   test_vstack_1d_with_2d  s$   """z)TestConstructUtils.test_vstack_1d_with_2dc                 C   s  |ddgddgg}|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|	 |	 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<   rA   rB   rC   rD   rF   r<   rA   rD   rB   rC   rF   r   )r   r   r%   r   rf   r!   r   r*   r   r   r   )r9   r   r   r   r   r,   r,   r-   test_hstack  s8    zTestConstructUtils.test_hstackc                 C   s   ddgddgg}dgdgg}t tt|t|gtsJ t tt|t|gts.J t tt|t|gts>J t tt|t|gtsNJ d S r   )r   r%   r   r   r   r
   r   r   r,   r,   r-   test_hstack_matrix_or_array  s      $z.TestConstructUtils.test_hstack_matrix_or_arrayblock_arrayc           
      C   s,  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d}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d}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
d}t|d d gg | t|d |g|d gg | tdgg}t|d |g|d gg | tt}	||g|gg W d    n	1 sSw   Y  |	d tt}	|| g| gg W d    n	1 syw   Y  |	d tt}	|| g| gg W d    n	1 sw   Y  |	d tt}	|||gg W d    n	1 sw   Y  |	d tt}	|| | gg W d    n	1 sw   Y  |	d tt}	|| | gg W d    n	1 s
w   Y  |	d d S )Nr<   rA   rB   rC   rD   rF   rG   r   r   r   )r   r   rG   rm   r   )r<   rA   r   )rB   rC   r   r;   r   z.Got blocks\[1,0\]\.shape\[1\] == 1, expected 2z"incompatible dimensions for axis 1z4Mismatching dimensions along axis 1: ({1, 2}|{2, 1})z.Got blocks\[0,1\]\.shape\[0\] == 1, expected 2z4Mismatching dimensions along axis 0: ({1, 2}|{2, 1})z"incompatible dimensions for axis 0)r   r   r   rf   r   r!   r   r   r   Temptyr   r7   r5   )
r9   r   r   r   CDr   EZexcinfor,   r,   r-   test_block_creation&  s   














z&TestConstructUtils.test_block_creationc                 C   s   t j}ddgddggdgdgg}}t|t|}}t|d |g|d ggddts,J t|d |g|d ggddts=J t|||ggddtsKJ d S )	Nr<   rA   rB   rC   rG   rD   r   r   )r%   r   r	   r   r   )r9   blockFlGlFmGmr,   r,   r-   test_block_return_typet  s   "" z)TestConstructUtils.test_block_return_typec                 C   s  t j}ddgddggdgdgg}}t|t|}}t|t|}}t|||ggddts2J t|||ggddts@J t|d	|g|d	ggddtsQJ t|d	|g|d	ggddtsbJ t|d	|g|d	ggddtssJ t|d	|g|d	ggddtsJ t|||ggddtsJ t|||ggddtsJ t|||ggddtsJ t|||ggddtsJ t|||ggddtsJ t|||ggddtsJ t|| | ggd
dtsJ t|| | ggd
dtsJ t|| | ggddtsJ t|| | ggddts"J t|||ggddts1J t|| |ggddtsBJ t|| |ggddtsSJ t|||ggd
dtsbJ d	S )z2This can be removed after sparse matrix is removedr<   rA   rB   rC   rG   rD   r   r   Nr   )r%   bmatr	   r   r   r   r   r   )r9   r   r   r   r   r   ZFaZGar,   r,   r-   test_bmat_return_type  s0   """"$$&&"""z(TestConstructUtils.test_bmat_return_typez!Can't create large array for testc                 C   s   t d d}ttj||ftd}| }tj||fdd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   F)ZaxisZreturn_spmatrixN)r   r   r!   Zonesboolcopyr%   Z_compressed_sparse_stackr   allequaldiffr   r   r   r*   r   )r9   r'   r   r   r   r,   r,   r-   test_concatenate_int32_overflow  s   z2TestConstructUtils.test_concatenate_int32_overflowc                 C   s   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|||f}t| | |jd jtj	ksEJ dS )z basic test for block_diag r<   rA   rB   rC   rD   rF   rG   )r<   rA   r   r   )rB   rC   r   r   )r   r   rD   r   )r   r   rF   r   )r   r   r   rG   r   N)
r   r   r%   
block_diagr   rf   r   r*   r!   r   )r9   r   r   r   r   ABCr,   r,   r-   test_block_diag_basic  s   z(TestConstructUtils.test_block_diag_basicc                 C   sT   t g dg dg dg}tdd |jD |_t||gjd jtjks(J d S )Nrr   rs   c                 s   r   r    r   r   r,   r,   r-   r     r   z?TestConstructUtils.test_block_diag_idx_dtype.<locals>.<genexpr>r   )r   r   r   r%   r  r*   r!   r   r   r,   r,   r-   test_block_diag_idx_dtype  s   $z,TestConstructUtils.test_block_diag_idx_dtypec                 C   sh   t tddgdg g dg dg tg d}tddg}t t||g g dg d	g d
S )z) block_diag with scalar and 1d arguments rA   rB   rC   )rA   rB   r   )r   r   rC   )r<   r   rB   r   )r<   r   rB   r   r   )r   r   r   r   rC   N)r   r%   r  rf   r   r   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  rf   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}tt||g tg dg dg t d	gd
gdggdd}t dgdggdd}tt||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 rx   )r<   rB   r=   rC   rD   rm   )r<   rA   rB   r   r   )r   r   r   rC   rD   r<   rA   rB   )rB   r<   rl   r   N)r   r   r%   r  rf   r   r   r,   r,   r-   test_block_diag_sparse_arrays  s   $z0TestConstructUtils.test_block_diag_sparse_arraysc                 C   s   t g dgtg dg}}tt||gtsJ tt||gts'J tt||gts3J tt||gts?J d S )Nrx   )rA   rB   rC   )r   r
   r   r%   r  r   r   r   r,   r,   r-   test_block_diag_return_type  s
   z.TestConstructUtils.test_block_diag_return_typec              	      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 )NrD   rJ   皙?)r(   r*   )rD   rJ     )r(   r+   )g        r	  r   g      ?r(   )r   r   r   r   r   c                          dddS )NrD   rJ   g?r,   r,   fr,   r-   <lambda>      z9TestConstructUtils.test_random_sampling.<locals>.<lambda>c                      r  )NrD   rJ   gr,   r,   r  r,   r-   r    r  )sprandr.   r!   r   float64Z
longdoubler   r   Z	complex64Z
complex128r   r*   r>   Znnzr"   r#   r   datarowcolr   prodr)   r   r7   )r9   tr   x1Zx2r(   r   r,   r  r-   test_random_sampling  s.   z'TestConstructUtils.test_random_samplingr+   Nr
  c                 C   sH   t dddtj|d}tttd|j ttt|jd d S NrJ      r   r(   r*   r+   r   r<   )r  r!   r  r   r   Z
less_equalr  r9   r+   r   r,   r,   r-   	test_rand  s   zTestConstructUtils.test_randc                 C   s   t dddtj|d}ttt|jd tttd|j tdddtj|d}ttt|jd tttd|j d S r  )r.   r!   r  r   anylessr  r1   r  r,   r,   r-   
test_randn  s   zTestConstructUtils.test_randnc                 C   s>   t jdddd t jddd t jddd t jddd d S )NrJ   rh   r   rJ   rJ   rJ   rJ   rJ   rJ   rJ   rJ   rJ   rJ   )r%   r"   r0   r   r,   r,   r-   test_random_accept_str_dtype&  s   z/TestConstructUtils.test_random_accept_str_dtypec                 C   sd   t jddtdd}|jdksJ t jddtdd}|jdks J t jddtdd}|jdks0J d S )N)r   rC   g333333?r   )r(   r*   Zrandom_stater#  r  r$  )r%   r0   r   r>   )r9   r   r,   r,   r-   'test_random_array_maintains_array_shape.  s   
z:TestConstructUtils.test_random_array_maintains_array_shapec                 C   s$   t d}|jd jtjksJ d S )Nr"  r   )r%   r0   r   r*   r!   r   )r9   r   r,   r,   r-   test_random_array_idx_dtype:  s   
z.TestConstructUtils.test_random_array_idx_dtypec                 C   s   t jdddd}t| d t jddd}t| d t|ts$J d}t j|dd}t| d t jd	d
d}t| d t|tsIJ d}t j|dd}t| d d S )NrJ   gx&1?r  rN   r"  )        r(  g(Rs?<i  )rJ   rJ   rJ   rJ   gk) 3?i  )r(  r(  r(  gAy5:   )r%   r"   r   Zcount_nonzeror0   r   r   )r9   Zsparse_matrixZsparse_arrayr>   r,   r,   r-   Etest_random_sparse_matrix_returns_correct_number_of_non_zero_elements>  s   zXTestConstructUtils.test_random_sparse_matrix_returns_correct_number_of_non_zero_elements)J__name__
__module____qualname__r6   markZparametrizer   r   r   r   r   r   r   r:   r   r	   r
   r   r   r   r?   rk   r   r   r   r   r   r   r   r   r%   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ZslowZthread_unsafeZxfail_on_32bitr   r  r  r  r  r  r  r  r!   r"   r#   r  r!  r%  r&  r'  r*  r,   r,   r,   r-   r2   )   s~    



8N

#
0


M$


r2   c                  C   s   t dd} tt|  t |  ttj| dd t j| dd ttj| ddd t j| dddd	dd	f  tjt	d
d tj
t ddddd W d   dS 1 s]w   Y  dS )z7Tests of diags_array that do not rely on diags wrapper.r<   rD   rA   r~   r   r   rz   NrC   z.*out of boundsr4   r=   )r!   r   r   r%   r   rf   r   r6   r   r7   r   )r   r,   r,   r-   test_diags_arrayW  s   "r/  )r   r   NN)(__doc__numpyr!   r   Znumpy.testingr   r   r   r   r6   r   r   Zscipy._lib._testutilsr   Zscipy.sparser	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   Zscipy.sparse._constructr   r  r   r.   r1   r2   r/  r,   r,   r,   r-   <module>   s(    H

      4