a
    ˆù»j‚*  ã                   @   s(  d dl Z d dlZd dlZd dlZd dlZd dlmZmZm	Z	 d dl
mZmZmZmZmZmZ d dlmZ d dlmZ d dlZd dlmZ dd„ Zd	d
„ Zdd„ Zdd„ Zejjej d¡dd„ ƒƒZejj e j! "d¡oæe #ej$¡j%dk dd�G dd„ dƒƒZ&ejj'dd�dd„ ƒZ(dd„ Z)dd„ Z*dS )é    N)Úassert_equalÚassert_Úassert_allclose)Ú_sparsetoolsÚ
coo_matrixÚ
csr_matrixÚ
csc_matrixÚ
bsr_matrixÚ
dia_matrix)Úsupported_dtypes)Úcheck_free_memory)Úraisesc                 C   s   | d d d S )z6
    Wrap an integer to the interval [-128, 127].
    é€   é   © )Únr   r   úIE:\soccer\ml_env\Lib\site-packages\scipy/sparse/tests/test_sparsetools.pyÚint_to_int8   s    r   c                   C   s   t ttjƒ d S ©N)Úassert_raisesÚMemoryErrorr   Ztest_throw_errorr   r   r   r   Útest_exception   s    r   c                     sœ   d} d‰d‰t t ˆˆg¡ƒ‰g ‰G ‡‡‡‡fdd„dtjƒ‰ ‡ fdd„t| ƒD ƒ}|D ]}| ¡  qX|D ]}| ¡  qjˆD ]}tt 	| 
¡ dk¡ƒ q|d S )	Né
   éd   é   c                       s   e Zd Z‡ ‡‡‡fdd„ZdS )ztest_threads.<locals>.Workerc                    sT   ˆ   ¡ }tˆƒD ]4}t ˆˆˆ jˆ jˆ jˆ jˆ jˆ j|j|j|j¡ qˆ |¡ d S r   )ÚcopyÚranger   Zcsr_plus_csrÚindptrÚindicesÚdataÚappend)ÚselfÚbÚj©ÚaÚbresr   Úniterr   r   Úrun(   s    ýz test_threads.<locals>.Worker.runN)Ú__name__Ú
__module__Ú__qualname__r(   r   r$   r   r   ÚWorker'   s   r,   c                    s   g | ]
}ˆ ƒ ‘qS r   r   )Ú.0Ú_)r,   r   r   Ú
<listcomp>1   ó    z test_threads.<locals>.<listcomp>é   )r   ÚnpÚonesÚ	threadingÚThreadr   ÚstartÚjoinr   ÚallÚtoarray)ZnthreadsÚthreadsÚthreadr"   r   )r,   r%   r&   r   r'   r   Útest_threads   s    


r<   c                  C   sZ   t D ]P} t ddgddgg¡ | ¡}t|| d�}t| d¡ ¡ |d d …d d…f ƒ qd S )Né   r1   é   é   ©Údtyper   )r   r2   ÚarrayÚastyper   r   Zgetcolr9   )rA   Úadr%   r   r   r   Ú!test_regression_std_vector_dtypes;   s    rE   z!Can't create large array for testc                  C   sŽ   t  t j¡jd } td|  d d ƒ t j| t jd�}t j| t jd�}t j| t jd�}d|d< t|||ffdd	d
�}| ¡ }t	|dggƒ d S )Nr=   é	   ç    €„.Ag      à?r@   r?   éÿÿÿÿ)r=   r=   F)Úshaper   )
r2   ÚiinfoÚint32Úmaxr   ÚzerosÚint8r   r9   r   )ZnnzÚrowÚcolr   ÚsÚdr   r   r   Útest_nnz_overflowF   s    rS   Úlinuxé   ztest requires 64-bit Linux)Úreasonc                	   @   sò   e Zd ZdZdZdd„ Zdd„ Zdd„ Zej	j
d	d
„ ƒZej	j
dd„ ƒZejdej	jd�ejdej	jd�dddejdej	jd�gZej	j
ej	 de¡dd„ ƒƒZej	j
ej	 de¡dd„ ƒƒZdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%S )&ÚTestInt32Overflowa  
    Some of the sparsetools routines use dense 2D matrices whose
    total size is not bounded by the nnz of the sparse matrix. These
    routines used to suffer from int32 wraparounds; here, we try to
    check that the wraparounds don't occur any more.
    iPÃ  c                 C   s\   | j d t tj¡jksJ ‚zttj dd¡ƒ}W n t	yJ   tj
}Y n0 td| ƒ d S )Nr1   ZPYTEST_XDIST_WORKER_COUNTÚ1i¸  )r   r2   rJ   rK   rL   ÚintÚosÚenvironÚgetÚ
ValueErrorÚinfr   )r!   Zparallel_countr   r   r   Úsetup_methodi   s    zTestInt32Overflow.setup_methodc                 C   s   t  ¡  d S r   )ÚgcÚcollect©r!   r   r   r   Úteardown_methodu   s    z!TestInt32Overflow.teardown_methodc                 C   s€   | j }t d|d g¡}t d|d g¡}tjddgtjd�}t|||ffƒ}| ¡ }t|d dƒ t|d dƒ ~t ¡  d S ©Nr   r=   r1   r@   ©r   r   )rH   rH   )	r   r2   rB   rN   r   Ztodenser   r`   ra   )r!   r   Úir#   r   ÚmÚrr   r   r   Útest_coo_todensex   s    z"TestInt32Overflow.test_coo_todensec           
      C   s¸   | j }t d|d g¡}t d|d g¡}tjddgtjd�}t|||ffƒ}tj||ftjd�}tttfD ]<}||ƒ}| 	|¡}	t
|	d dƒ t
|	d dƒ ~	t ¡  ql~t ¡  d S rd   )r   r2   rB   rN   r   r3   r   r   r	   Údotr   r`   ra   )
r!   r   rf   r#   r   rg   r"   ZsptypeÚm2rh   r   r   r   Útest_matvecsŠ   s    

zTestInt32Overflow.test_matvecsc                 C   s€   | j }tj||ftjd�}t |¡}t||f||fd�}tj|jd tjd�}| |¡}t|d t	|ƒƒ ~~~~~t
 ¡  d S )Nr@   )rI   r=   r   )r   r2   r3   rN   Úaranger
   rI   rj   r   r   r`   ra   )r!   r   r   Úoffsetsrg   Úvrh   r   r   r   Útest_dia_matvec    s    


z!TestInt32Overflow.test_dia_matvecZmatmat)ZmarksZmatvecsZmatvecÚdiagonalÚsort_indicesÚ	transposeÚopc                    sB   ‡ fdd„}t  ¡  ztˆ d| ƒ|ƒ W t  ¡  n
t  ¡  0 d S )Nc                     sd   ˆ j } tjd| | ftjd�}tjddgtjd�}tjdgtjd�}t|||f| | fdd�}~~~|S ©Nr=   r@   r   F)Ú	blocksizer   )r   r2   r3   rN   rB   rK   r	   ©r   r   r   r   rg   rb   r   r   Ú
get_matrix»   s    z6TestInt32Overflow.test_bsr_1_block.<locals>.get_matrixÚ_check_bsr_©r`   ra   Úgetattr©r!   rt   rx   r   rb   r   Útest_bsr_1_block´   s
    	z"TestInt32Overflow.test_bsr_1_blockc                    sB   ‡ fdd„}t  ¡  ztˆ d| ƒ|ƒ W t  ¡  n
t  ¡  0 d S )Nc                     sb   ˆ j } tj| | dftjd�}tjd| gtjd�}tj| tjd�}t|||f| dfdd�}~~~|S ru   )r   r2   r3   rN   rB   rK   rm   r	   rw   rb   r   r   rx   Ò   s    z6TestInt32Overflow.test_bsr_n_block.<locals>.get_matrixry   rz   r|   r   rb   r   Útest_bsr_n_blockÊ   s
    	z"TestInt32Overflow.test_bsr_n_blockc                 C   s<   |ƒ }| j }| tj|dftjd�¡}t|d t|ƒƒ d S )Nr1   r@   re   ©r   rj   r2   r3   rN   r   r   ©r!   rg   r   rh   r   r   r   Ú_check_bsr_matvecsá   s    z$TestInt32Overflow._check_bsr_matvecsc                 C   s:   |ƒ }| j }| tj|ftjd�¡}t|d t|ƒƒ d S )Nr@   r   r   r€   r   r   r   Ú_check_bsr_matvecé   s    z#TestInt32Overflow._check_bsr_matvecc                 C   s(   |ƒ }| j }| ¡ }t|t |¡ƒ d S r   )r   rq   r   r2   r3   r€   r   r   r   Ú_check_bsr_diagonalñ   s    z%TestInt32Overflow._check_bsr_diagonalc                 C   s   |ƒ }|  ¡  d S r   )rr   ©r!   rg   r   r   r   Ú_check_bsr_sort_indicesù   s    z)TestInt32Overflow._check_bsr_sort_indicesc                 C   s   |ƒ }|  ¡  d S r   )rs   r„   r   r   r   Ú_check_bsr_transposeþ   s    z&TestInt32Overflow._check_bsr_transposec                 C   sr   |ƒ }| j }ttj|dftjd�|jd dfd�}| |¡ ~ttjd|ftjd�d|jd fd�}| |¡ d S )Nr1   r@   r=   )rv   r   )r   r	   r2   r3   rN   rv   rj   )r!   rg   r   rk   r   r   r   Ú_check_bsr_matmat  s    &
&z#TestInt32Overflow._check_bsr_matmatN)r)   r*   r+   Ú__doc__r   r_   rc   ri   ÚpytestÚmarkÚslowrl   rp   ÚparamZxslowZ_bsr_opsZparametrizer}   r~   r�   r‚   rƒ   r…   r†   r‡   r   r   r   r   rW   [   s8   

ûrW   z/64-bit indices in sparse matrices not availablec                  C   sŽ   d} | d t  t j¡jksJ ‚t| d d d ƒ t j| ft jd�}t j| d t jd�}t j| t jd�}t	|||fƒ}|j
}tt|j|ƒ d S )Nl   4s	j r1   é   r>   rG   r@   r=   )r2   rJ   Zint64rL   r   r3   rN   rm   rM   r   ÚTr   ÚRuntimeErrorrj   )r   r   r   r   r%   r"   r   r   r   Útest_csr_matmat_int64_overflow  s    r�   c                  C   sê  t tjtjd gddggtd�} tjddgtd�}tD �]¬}tD �] }d|›d|›d	�}t |tj¡rv|  ¡  	|¡}n| j
 ¡  	|¡}t |tj¡r¤| ¡  	|¡}n<tjd
d��  |j
 ¡  	|¡}W d   ƒ n1 sÖ0    Y  |tjkrö|tjk�s&tjdtjd�}tttjdd|j|j|j||ƒ	 t |tj¡�rFt |tj¡�rft |tj¡�s–t |tj¡�r–tjdtjd�}tttjdd|j|j|j||ƒ	 tjdt ||¡d�}t dd|j|j|j||¡ t|t | ¡ |¡|d� q@q6d S )Ny              ð?r>   r?   r@   y      p@      ð?l        ú(z, ú)Úignore)Úinvalid)r1   r1   )Úerr_msg)r   r2   ÚpiÚcomplexrB   r   Z
issubdtypeZcomplexfloatingr   rC   ÚrealZerrstateZbool_rM   r   r]   r   Z
csr_matvecr   r   r   Zfloat64Zresult_typer   rj   r9   )Za0Zb0Za_dtypeZb_dtypeÚmsgr%   r"   Úcr   r   r   Útest_upcast#  s>     

.ÿÿþýÿr›   c                  C   sp   t  d¡} g d¢}t|  d¡|fdƒ}t|  d¡|fdƒ}t  d¡}t| |¡g d¢ƒ t| |¡g d¢ƒ d S )N)r>   r?   )rH   r   r=   z<f8)r?   r?   z>f8r?   )r=   r>   é   é   )r2   r3   r
   rC   rm   r   rj   )rR   rn   r%   r"   ro   r   r   r   Útest_endiannessJ  s    

rž   )+ÚsysrZ   r`   r4   Únumpyr2   Znumpy.testingr   r   r   Zscipy.sparser   r   r   r   r	   r
   Zscipy.sparse._sputilsr   Zscipy._lib._testutilsr   r‰   r   r   r   r   r<   rE   rŠ   r‹   Zxfail_on_32bitrS   ZskipifÚplatformÚ
startswithrA   ZintpÚitemsizerW   Úskipr�   r›   rž   r   r   r   r   Ú<module>   s6    
þ 3
'