a
    ˆù»j‚…  ã                   @   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ç{®Gáz„?r   c              	   C   s$   t |ƒ}|j}t | ||||||¡S )N)r	   Ústandard_normalÚ	constructÚrandom)ÚmÚnÚdensityÚformatÚdtypeÚrandom_stateZdata_rvs© r!   úGE:\soccer\ml_env\Lib\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�r–t|d dTƒ�r–t|d ƒt	|ƒk�r–ttj||dU� ¡ ||	dS� �q–d 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� qþt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  qºt ||||d� ¡ tj	|||d�ƒ ||krºt |||d� ¡ tj	|||d�ƒ qºq¬q¤d 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ƒ�säJ ‚�qät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
||ƒ qÌqÄt 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ƒsšJ ‚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ƒsœJ ‚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 �s¦0    Y  |	 d¡ ttƒ�(}	|| ¡ g| ¡ ggƒ W d   ƒ n1 �sò0    Y  |	 d¡ ttƒ�(}	|| ¡ g| ¡ ggƒ W d   ƒ n1 �s>0    Y  |	 d¡ ttƒ�}	|||ggƒ W d   ƒ n1 �s€0    Y  |	 d¡ ttƒ�&}	|| ¡ | ¡ ggƒ W d   ƒ n1 �sÊ0    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ƒs–J ‚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ƒs€J ‚t|d	|g|d	ggdd�tƒs¢J ‚t|d	|g|d	ggdd�tƒsÄJ ‚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ƒ�s(J ‚t|||ggdd�tƒ�sFJ ‚t|||ggdd�tƒ�sdJ ‚t|||ggdd�tƒ�s‚J ‚t|||ggdd�tƒ�s J ‚t|||ggdd�tƒ�s¾J ‚t|| ¡ | ¡ ggd
d�tƒ�säJ ‚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ƒ�s–J ‚t|| ¡ |ggdd�tƒ�s¸J ‚t|||ggd
d�tƒ�sÖJ ‚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¡ ƒƒ qÌd
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   gš™™™™™¹¿r!   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   gþÔxé&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 s¸0    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