a
    h                     @   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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)check_random_state)
csr_matrix
coo_matrix	csr_array	coo_arraysparrayspmatrix
_construct)rand)csrcsccooZbsrdialilZdok{Gz?r   c              	   C   s$   t |}|j}t| ||||||S )N)r	   standard_normal	constructrandom)mndensityformatdtyperandom_stateZdata_rvs r!   ]/var/www/html/assistant/venv/lib/python3.9/site-packages/scipy/sparse/tests/test_construct.py_sprandn   s
    r#   c                 C   s(   t |}|j}tj| |f|||||dS )N)r   r   r   r    data_sampler)r	   r   r   random_array)r   r   r   r   r   r    r$   r!   r!   r"   _sprandn_array   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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ejd#eegd$d% Zd&d' Zejd#eegd(d) Zd*d+ Zejd,ej ej!fd-d. Z"d/d0 Z#d1d2 Z$ejj%ej&d3d4d5 Z'd6d7 Z(d8d9 Z)d:d; Z*d<d= Z+d>d? Z,d@dA Z-dBdC Z.dDdE Z/dFdG Z0dHdI Z1dJS )K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   r1   r   r*   r   r   r   r+   r/   r   r   r   r)   r0   r   r   r   r*   r1   r   r/   )r   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   r   r1   r   r   r   r:   r   r)   )r/   r6   r   r   r   r   )r)   r0   r7   r   r   r   )r   r*   r1   r8   r   r   )r   r   r+   r2   r9   r   )r   r   r   r,   r3   r   r*   r:   )r   r   r1   r   r   )r5   r   r   r2   r   )r   r6   r   r   r3   r   r   r7   r   r   r)   r   r   r8   r   r   r*   r   r   r9   )r:   r)   r*   )r   r0   r7   r   r   )r)   r   r1   r8   r   )r   r*   r   r2   r9   )r   r   r+   r   r3   )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   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 ]\}}}}|dQ|dQ|dQ|}	ttj|||dR ||	dS |d |d krt|d dTrt|d t	|krttj||dU ||	dS qd S )VNr(   r.   r4   r)   r   r)   r)   r*   r)   r)   r*   r*   r*   r*   r:   r+   )r+   r,   r;   r<   r=   )r   r)   r   r   )r   r   r*   r   )r   r   r   r+   r+   r-   )r   r   r   r   r   )r)   r   r   r   r   )r   r*   r   r   r   r>   )r   r)   r   r   r   )r   r   r*   r   r   )r   r   r   r+   r   )r   r   r)   r   r   )r   r   r   r*   r   )r   r   r   r   r+   )r   r   r   r)   r   )r   r   r   r   r*   r,   )r   r   r   r   r)   rI   )r-   r+   )r   r   r   r)   r   r   rD   r?   r@   r   r)   r   )r   r   r*   r   r   r)   )r+   r+   )r)   r   r/   rA   rB   rC   )r/   r/   )r   r   r)   r   r   r   )r   r   r   r*   r   r   )r   r   r   r   r+   r   )r/   r   r   r   r   r,   rE   rF   rG   r-   r-   )r/   r5   r   r   r   )r)   r0   r6   r   r   )r   r*   r1   r7   r   )r   r   r+   r2   r8   )r   r   r   r,   r3   rH   r/   r-   )r   r   r/   r   r   )r5   r   r   r0   r   )r   r6   r   r   r1   rJ   rK   rL   r)   r*   r+   )r,   r-   r/   )r,   r*   r   )r   r-   r+   )r)   rZ   r)   )r)   r   r:   )rZ   r)   r   )r   r)   rZ    offsetsshape)err_msg__len__rd   )
r   rM   npr   r   diagsrO   hasattrrN   max)
rP   abcrQ   rR   rS   re   rT   rf   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   rj   rO   ri   diagrP   rm   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   rj   rr   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 qtttjd ggdgd d S )Nr(   r.   r4   r   rV   r,   r+   rG   r_   r*   rH   r`   r)   r,   r,   rc   rh   )r   rM   rt   ru   r   rj   	TypeError)rP   rm   rn   ro   rQ   rR   rS   re   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j||d	}td
d t	||D }t
| | t|dkrtj|d |d d	}t |d |d }t
| | qd S )Ni  )r)   r*   r+   r,   r-   r3   r)   r*   r   r3   c                    s    g | ]}t j t| qS r!   )ri   r   r   abs).0qr   r!   r"   
<listcomp>       z9TestConstructUtils.test_diags_vs_diag.<locals>.<listcomp>rh   c                 S   s   g | ]\}}t ||qS r!   )ri   rq   )r|   xjr!   r!   r"   r      r   )ri   r   seedrandintarangeshuffler   rj   sumzipr   rO   rN   rq   )rP   Zn_diagsrd   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   rY   )rd   re   r   r*   )r   rj   intr   r   rO   rP   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 )Nr-   rw   r/   rh   )listranger   r   rj   rO   )rP   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   rj   r   re   r   r!   r!   r"   test_diags_empty   s    
z#TestConstructUtils.test_diags_emptyidentityc                 C   s   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 qdd S Nr)   r*   r   r+   Zint8r   )r   r   r   r\   r]   r^   r   rO   r   ri   r   sparse_formats)rP   r   Ifmtr!   r!   r"   test_identity   s    z TestConstructUtils.test_identityeyec                 C   s~  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 ]}d
D ]}tddD ]}|dkr||ks|dk r&t||kr&tjtdd ||||d W d    n1 s0    Y  qt ||||d tj	|||d ||krt |||d tj	|||d qqqd S )Nr)   r*   r+   r\   r]   r   r^   Zint16r   r[   rw   r/   zOffset.*out of boundsmatchr   )
r   rO   r   ri   r   r{   pytestr   ru   r   )rP   r   r   r   r   r!   r!   r"   test_eye  s,     &&(0zTestConstructUtils.test_eyec                 C   s   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 qdd S r   r   )rP   r   r   r   r!   r!   r"   test_eye_one%  s    zTestConstructUtils.test_eye_onec                 C   s,   t tdtsJ t tdtr(J d S )Nr+   )
isinstancer   	eye_arrayr   r   rP   r!   r!   r"   test_eye_array_vs_matrix3  s    z+TestConstructUtils.test_eye_array_vs_matrixc           	      C   sl  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 ]h}t|}t||}tdd D ]@}tj|||d}t|j| t	|
 | t|tsjJ qjqFq6|d }|d }t|}t|}t||}tD ]@}tj|||d}t|j| t	|
 | t|tsJ qtjt|t||d}t|j| t	|
 | t|tshJ d S )Nr   r:   r,   r3   r)   r*   r+   r-   r   r*   ir1   r   r8   r/   )r-   r,   r,   r\   )r/   r   r1   )r   r)   r   r*   r   r-   r1   )      ?g      ?r   g      
@)r   g      @r   r   r   rD   )rM   r   r   ri   kronr   r   r   r   r   rO   r   r   r
   r   )	rP   rQ   rm   carn   cbexpectedr   rT   r!   r!   r"   	test_kron7  sL      zTestConstructUtils.test_kronc                 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)   )re   rd   )r   diags_arrayr   )rP   r   rm   rn   r!   r!   r"   test_kron_largeg  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 ]`}|D ]V}tt|t| }tt|j	d |t|t|j	d  }t
|| qqtt|t| }t
|| d S )Nr   r:   r,   r3   r)   r*   r+   r-   r   r   )r   r+   r   r\   )r   r-   r:   )r,   rZ   r1   )rM   r   r   Zkronsumr   rO   ri   r   r   re   r   r
   )rP   rQ   rm   rn   rT   r   r!   r!   r"   test_kronsumo  s$      zTestConstructUtils.test_kronsum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)   r*   r+   r,   r-   r/   r   r   )r   r   r   )r   r   r   vstackrO   ri   float32r   todoktocsrindicesint32indptrtocsc)rP   r   ABr   rT   r!   r!   r"   test_vstack  s:     zTestConstructUtils.test_vstackc                 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sZJ t tt|t|gtszJ t tt|t|gtsJ d S Nr)   r*   r+   r,   r-   r/   )r   r   r   r   r   r   r   rP   r   r   r!   r!   r"   test_vstack_matrix_or_array  s    
   z.TestConstructUtils.test_vstack_matrix_or_arrayc                 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)   r*   r+   r,   r-   r/   r)   r*   r-   r+   r,   r/   r   )r   r   r   hstackrO   ri   r   r   r   r   r   )rP   r   r   r   r   r!   r!   r"   test_hstack  s4     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sJ 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 s0    Y  |	d tt(}	|| g| gg W d    n1 s0    Y  |	d tt(}	|| g| gg W d    n1 s>0    Y  |	d tt}	|||gg W d    n1 s0    Y  |	d tt&}	|| | gg W d    n1 s0    Y  |	d tt&}	|| | gg W d    n1 s0    Y  |	d d S )Nr)   r*   r+   r,   r-   r/   r0   r   r   r   )r   r   r0   rX   r   )r)   r*   r   )r+   r,   r   rV   r   z.Got blocks\[1,0\]\.shape\[1\] == 1, expected 2z"incompatible dimensions for axis 1z4Mismatching dimensions along axis 1: ({1, 2}|{2, 1})z.Got blocks\[0,1\]\.shape\[0\] == 1, expected 2z4Mismatching dimensions along axis 0: ({1, 2}|{2, 1})z"incompatible dimensions for axis 0)r   r   r   rO   r   ri   r   r   r   Temptyrt   ru   r   )
rP   r   r   r   CDr   EZexcinfor!   r!   r"   test_block_creation  s    




0

8

8

.

6

6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sXJ t|d |g|d ggddtszJ t|||ggddtsJ d S )	Nr)   r*   r+   r,   r0   r-   r   r   )r   r   r
   r   r   )rP   blockFlGlFmGmr!   r!   r"   test_block_return_type  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sdJ t|||ggddtsJ t|d	|g|d	ggddtsJ t|d	|g|d	ggddtsJ t|d	|g|d	ggddtsJ t|d	|g|d	ggddts
J t|||ggddts(J t|||ggddtsFJ t|||ggddtsdJ 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s0J t|| | ggddtsVJ t|||ggddtstJ t|| |ggddtsJ t|| |ggddtsJ t|||ggd
dtsJ d	S )z2This can be removed after sparse matrix is removedr)   r*   r+   r,   r0   r-   r   r   Nr   )r   bmatr
   r   r   r   r   r   )rP   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   ri   Zonesboolcopyr   Z_compressed_sparse_stackr   allequaldiffr   r   r   r   int64)rP   r   r   r   r   r!   r!   r"   test_concatenate_int32_overflowK  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/   r0   )r)   r*   r   r   )r+   r,   r   r   )r   r   r-   r   )r   r   r/   r   )r   r   r   r0   N)r   r   r   r   
block_diagrO   )rP   r   r   r   r   r!   r!   r"   test_block_diag_basic[  s    z(TestConstructUtils.test_block_diag_basicc                 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 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   rO   r   r   r!   r!   r"   test_block_diag_scalar_1d_argsi  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   rO   r   r   r!   r!   r"   test_block_diag_1u  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 ra   )r)   r+   re   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   rO   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s6J tt||gtsNJ tt||gtsfJ tt||gts~J d S )Nra   )r*   r+   r,   )r   r   r   r   r   r   r   r   r!   r!   r"   test_block_diag_return_type  s
    z.TestConstructUtils.test_block_diag_return_typec              	      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-   r3   皙?)r   r   )r-   r3     )r   r    )g        r   r   g      ?r   )r   r   r   r   r   c                      s    dddS )Nr-   r3   g?r!   r!   fr!   r"   <lambda>  r   z9TestConstructUtils.test_random_sampling.<locals>.<lambda>c                      s    dddS )Nr-   r3   gr!   r!   r   r!   r"   r     r   )sprandr#   ri   r   float64Z
longdoubler   r   Z	complex64Z
complex128r   r   re   Znnzr   RandomStater   datarowcolr   prodr   rt   ru   )rP   tr   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   r3      r   )r   r   r    r   r)   )ri   r   r   default_rngrM   AttributeErrorr   r   r   r   Z
less_equalr   )rP   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0 |D ]}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 q@d S r   )ri   r   r   r   rM   r   r#   r   r   anylessr   r&   )rP   r   r   rsr   r!   r!   r"   
test_randn  s    
zTestConstructUtils.test_randnc                 C   s"   t jdddd t jddd d S )Nr3   rR   r   r3   r3   )r   r   r%   r   r!   r!   r"   test_random_accept_str_dtype  s    z/TestConstructUtils.test_random_accept_str_dtypec                 C   sl   t jdddd}t| d t jddd}t| d t|tsHJ d}t j|dd}t| d d S )	Nr3   gx&1?r   r7   r   )        r  g(Rs?<i  )r   r   r   Zcount_nonzeror%   r   r   )rP   Zsparse_matrixZsparse_arrayre   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_elementsN)2__name__
__module____qualname__rU   rp   rs   rv   rz   r   r   r   r   r   markZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ZslowZxfail_on_32bitr   r   r   r   r   r   r   r   r   r  r  r!   r!   r!   r"   r'   '   sT   8N

#
0


M$
r'   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   n1 s0    Y  dS )z7Tests of diags_array that do not rely on diags wrapper.r)   r-   r*   rh   r   rx   rc   Nr,   z.*out of boundsr   r   )ri   r   r   r   r   rO   rq   r   r   ru   rj   )rq   r!   r!   r"   test_diags_array  s    r  )r   r   NN)r   r   NN)!__doc__numpyri   r   Znumpy.testingr   r   r   r   r   r   rt   Zscipy._lib._testutilsr   Zscipy._lib._utilr	   Zscipy.sparser
   r   r   r   r   r   r   r   Zscipy.sparse._constructr   r   r   r#   r&   r'   r  r!   r!   r!   r"   <module>   s&   $

     I