o
    ?Hh!                     @   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coobsrdialildok{Gz?r   c              	   C   s(   t j|}|j}t| ||||||S N)nprandomdefault_rngstandard_normal	construct)mndensityformatdtyperngdata_rvs r/   a/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/scipy/sparse/tests/test_construct.py_sprandn   s   r1   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-   r2   r/   r/   r0   _sprandn_array!   s
   r4   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selfr6   r/   r/   r0    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shaper;   r/   r/   r0   !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?   rD   rE   rF   r?   r   r   r   r   rD   r   r   r   r   rE   r   )r   r   r   rF   rG   r   r   rE   r   r   )r   r   r   rF   r   )r   r   r   r   rG   )r?   r   rK   r   rD   r   r   r   rE   rI   r   r   r   r?   rJ   r   r   r   rD   rK   r   rI   )r   r   rE   r   r   r   )r   r   r   rF   r   r   )r   r   r   r   rG   r   )rI   r   r   r   r   r   r   rJ   r   r   r   r   r   r   rK   r   r   r   rT   r   r?   )rI   rP   r   r   r   r   )r?   rJ   rQ   r   r   r   )r   rD   rK   rR   r   r   )r   r   rE   rL   rS   r   )r   r   r   rF   rM   r   rD   rT   )r   r   rK   r   r   )rO   r   r   rL   r   )r   rP   r   r   rM   r   r   rQ   r   r   r?   r   r   rR   r   r   rD   r   r   rS   )rT   r?   rD   )r   rJ   rQ   r   r   )r?   r   rK   rR   r   )r   rD   r   rL   rS   )r   r   rE   r   rM   )r   appendlenr   r'   spdiagstoarray)
r<   diags1diags2diags3casesdor(   r)   resultr/   r/   r0   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 )VNrC   rH   rN   r?   r   r>   rD   r?   r?   rD   rD   rD   rD   rT   rE   )rE   rF   rU   rV   rW   )r   r?   r   r   )r   r   rD   r   )r   r   r   rE   rE   rG   )r   r   r   r   r   )r?   r   r   r   r   )r   rD   r   r   r   rX   )r   r?   r   r   r   )r   r   rD   r   r   )r   r   r   rE   r   )r   r   r?   r   r   )r   r   r   rD   r   )r   r   r   r   rE   )r   r   r   r?   r   )r   r   r   r   rD   rF   )r   r   r   r   r?   rc   )rG   rE   r   r   r   r?   r   r   r^   rY   rZ   r   r?   r   )r   r   rD   r   r   r?   rE   rE   )r?   r   rI   r[   r\   r]   )rI   rI   )r   r   r?   r   r   r   )r   r   r   rD   r   r   )r   r   r   r   rE   r   )rI   r   r   r   r   rF   r_   r`   ra   rG   rG   )rI   rO   r   r   r   )r?   rJ   rP   r   r   )r   rD   rK   rQ   r   )r   r   rE   rL   rR   )r   r   r   rF   rM   rb   rI   rG   )r   r   rI   r   r   )rO   r   r   rJ   r   )r   rP   r   r   rK   rd   re   rf   r?   rD   rE   )rF   rG   rI   )rF   rD   r   )r   rG   rE   )r?   rv   r?   )r?   r   rT   )rv   r?   r   )r   r?   rv    offsetsrA   )err_msg__len__r   )
r   rg   r#   r   r'   diagsrj   hasattrrh   max)
r<   abcrn   ro   rp   rA   rq   r   r/   r/   r0   
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 )NrC   )r   r   r'   r   rj   r#   diagr<   r   r/   r/   r0   test_diags_default   s   z%TestConstructUtils.test_diags_defaultc                 C   s&   t g dg dg}tttj| d S )NrC   )rD   rE   rF   rG   rI   )r   assert_raisesr:   r'   r   r   r/   r/   r0   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 )NrC   rH   rN   r   r>   rF   rE   ra   r}   rD   rb   r~   r?   rF   rF   r   r   )r   rg   r   r:   r'   r   	TypeError)r<   r   r   r   rn   ro   rp   rA   r/   r/   r0   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?   rD   rE   rF   rG   rM   r?   rD   r   rM   c                    s   g | ]}  t| qS r/   )r   abs).0qr)   r-   r/   r0   
<listcomp>   s    z9TestConstructUtils.test_diags_vs_diag.<locals>.<listcomp>r   c                 S   s   g | ]
\}}t ||qS r/   )r#   r   )r   xjr/   r/   r0   r      s    )r#   r$   RandomStaterandintarangeshuffler'   r   sumzipr   rj   rh   r   )r<   n_diagsr   	diagonalsmat	dense_matr/   r   r0   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   ru   )r   rA   r,   rD   )r'   r   intr   r,   rj   r<   r   r/   r/   r0   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 )NrG   r   rI   r   )listranger   r'   r   rj   )r<   ro   kr/   r/   r0   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   rA   r   r/   r/   r0   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?   rD   r   rE   int8r   )r,   r+   r+   ry   rz   r{   r   rj   r,   r#   r+   sparse_formats)r<   r   Ifmtr/   r/   r0   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?   rD   rE   ry   rz   r   r{   int16r,   rw   r   rI   zOffset.*out of boundsr7   r   )
r   rj   r,   r#   r   r   r9   r   r:   r   )r<   r   r(   r)   r   r/   r/   r0   test_eye   s8    &&$zTestConstructUtils.test_eyec                 C   r   r   r   )r<   r   r   r   r/   r/   r0   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 )NrE   )
isinstancer'   	eye_arrayr   r   r<   r/   r/   r0   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   rT   rF   rM   r?   rD   rE   rG   r   rD   irK   r   rR   rI   )rG   rF   rF   ry   )rI   r   rK   )r   r?   r   rD   r   rG   rK   )      ?g      ?r   g      
@)r   g      @r   r   r   r^   )rg   r   r   r#   kronr   r'   r   r+   r   rj   r   r   r	   r   )	r<   rn   r   car   cbexpectedr   rq   r/   r/   r0   	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 inputr7   r   r?   )r9   r   r:   r'   r   r   r   r/   r/   r0   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?   )rA   r   )r'   diags_arrayr   )r<   r)   r   r   r/   r/   r0   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   rT   rF   rM   r?   rD   rE   rG   r   r   )r   rE   r   ry   )r   rG   rT   )rF   rv   rK   )rg   r   r'   kronsumr   rj   r#   r   r   rA   r   r	   )r<   rn   r   r   rq   r   r/   r/   r0   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   r7   r   r?   rD   )r9   r   r:   r'   r   r   r   r/   r/   r0   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?   rD   rE   rF   rG   rI   r   r   )r+   r,   r   )r   r   r'   vstackrj   r#   float32r,   todoktocsrindicesint32indptrtocsc)r<   r   ABr   rq   r/   r/   r0   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 )Nry   rz   c                 s       | ]	}| tjV  qd S r"   astyper#   int64r   cor/   r/   r0   	<genexpr>      zITestConstructUtils.test_vstack_maintain64bit_idx_dtype.<locals>.<genexpr>r   )r   r   r   r#   r   r   r'   r   r,   hstackr   r   tuplecoordsr<   Xr/   r/   r0   #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?   rD   rE   rF   rG   rI   )r   r'   r   r   r   r
   r   r<   r   r   r/   r/   r0   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 )Nry   rz   rx   r|   r   )r?   rF   )r?   rI   )rD   rE   )rD   rI   zincompatible row dimensionsr7   zincompatible column dimensions)r   r   r'   r   r#   r   rA   r   r9   r   r:   )r<   arrarr1darr1dcoor/   r/   r0   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?   rD   rE   rF   rG   rI   r?   rD   rG   rE   rF   rI   r   )r   r   r'   r   rj   r#   r   r,   r   r   r   )r<   r   r   r   r   r/   r/   r0   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/   r0   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?   rD   rE   rF   rG   rI   rJ   r   r   r   )r   r   rJ   rt   r   )r?   rD   r   )rE   rF   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   rj   r   r#   r   r   r   Temptyr   r:   r8   )
r<   r   r   r   CDr   EZexcinfor/   r/   r0   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?   rD   rE   rF   rJ   rG   r   r   )r'   r   r	   r   r   )r<   blockFlGlFmGmr/   r/   r0   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?   rD   rE   rF   rJ   rG   r   r   Nr   )r'   bmatr	   r   r   r   r   r   )r<   r	  r  r  r  r  FaGar/   r/   r0   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)axisreturn_spmatrixN)r   r   r#   onesboolcopyr'   _compressed_sparse_stackr   allequaldiffr   r   r   r,   r   )r<   r)   r   r   r   r/   r/   r0   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?   rD   rE   rF   rG   rI   rJ   )r?   rD   r   r   )rE   rF   r   r   )r   r   rG   r   )r   r   rI   r   )r   r   r   rJ   r   N)
r   r   r'   
block_diagr   rj   r   r,   r#   r   )r<   r   r   r   r   ABCr/   r/   r0   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 )Nry   rz   c                 s   r   r"   r   r   r/   r/   r0   r     r   z?TestConstructUtils.test_block_diag_idx_dtype.<locals>.<genexpr>r   )r   r   r   r'   r  r,   r#   r   r   r/   r/   r0   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 rD   rE   rF   )rD   rE   r   )r   r   rF   )r?   r   rE   r   )r?   r   rE   r   r   )r   r   r   r   rF   N)r   r'   r  rj   r   r   r/   r/   r0   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  rj   r   r   r/   r/   r0   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 r   )r?   rE   r@   rF   rG   rt   )r?   rD   rE   r   r   )r   r   r   rF   rG   r?   rD   rE   )rE   r?   rs   r   N)r   r   r'   r  rj   r   r   r/   r/   r0   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 )Nr   )rD   rE   rF   )r   r
   r   r'   r  r   r   r   r/   r/   r0   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 )NrG   rM   皙?)r*   r,   )rG   rM     )r*   r-   )g        r  r   g      ?r*   )r   r   r   r   r   c                          dddS )NrG   rM   g?r/   r/   fr/   r0   <lambda>      z9TestConstructUtils.test_random_sampling.<locals>.<lambda>c                      r"  )NrG   rM   gr/   r/   r#  r/   r0   r%    r&  )sprandr1   r#   r   float64
longdoubler   r   	complex64
complex128r   r,   rA   nnzr$   r%   r   datarowcolr   prodr+   r   r:   )r<   tr   x1x2r*   r   r/   r#  r0   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 NrM      r   r*   r,   r-   r   r?   )r'  r#   r(  r   r  
less_equalr-  r<   r-   r   r/   r/   r0   	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 r5  )r1   r#   r(  r   anylessr-  r4   r9  r/   r/   r0   
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 )NrM   ro   r   rM   rM   rM   rM   rM   rM   rM   rM   rM   rM   )r'   r$   r3   r   r/   r/   r0   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   rF   g333333?r   )r*   r,   random_stater?  r7  r@  )r'   r3   r   rA   )r<   r   r/   r/   r0   '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'   r3   r   r,   r#   r   )r<   r   r/   r/   r0   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 )NrM   gx&1?r!  rQ   r>  )        rE  g(Rs?<i  )rM   rM   rM   rM   gk) 3?i  )rE  rE  rE  gAy5:   )r'   r$   r   count_nonzeror3   r   r   )r<   sparse_matrixsparse_arrayrA   r/   r/   r0   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__r9   markparametrizer   r   r   r   r   r   r   r=   r   r	   r
   r   r   r   rB   rr   r   r   r   r   r   r   r   r   r'   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	  r   r  r  r  slowthread_unsafexfail_on_32bitr  r  r  r  r  r  r  r4  r#   r$   r%   r:  r=  rA  rC  rD  rJ  r/   r/   r/   r0   r5   )   s~    



8N

#
0


M$


r5   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?   rG   rD   r   r   r   r   NrF   z.*out of boundsr7   r@   )r#   r   r   r'   r   rj   r   r9   r   r:   r   )r   r/   r/   r0   test_diags_arrayW  s   "rS  )r!   r   NN)(__doc__numpyr#   r   numpy.testingr   r   r   r   r9   r   r   scipy._lib._testutilsr   scipy.sparser	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   scipy.sparse._constructr   r'  r   r1   r4   r5   rS  r/   r/   r/   r0   <module>   s(    H

      4