o
    Ö­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¡ose #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   ú`/var/www/html/CropPilot/venv/lib/python3.10/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   Ú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 ]}| ¡  q,|D ]}| ¡  q5ˆ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 ]}t ˆˆˆ jˆ jˆ jˆ jˆ jˆ j|j|j|j¡ qˆ |¡ d S r   )ÚcopyÚranger   Ú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   s    z test_threads.<locals>.<listcomp>é   )r   ÚnpÚonesÚ	threadingÚThreadr   ÚstartÚjoinr   ÚallÚtoarray)ÚnthreadsÚthreadsÚthreadr$   r   )r.   r'   r(   r   r)   r   Útest_threads   s   


ÿr>   c                  C   sZ   t D ](} t ddgddgg¡ | ¡}t|| d�}t| d¡ ¡ |d d …d d…f ƒ qd S )Né   r2   é   é   ©Údtyper   )r   r3   ÚarrayÚastyper   r   Úgetcolr:   )rC   Úadr'   r   r   r   Ú!test_regression_std_vector_dtypes;   s
   &ûrH   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      à?rB   rA   éÿÿÿÿ)r?   r?   F)Úshaper   )
r3   ÚiinfoÚint32Úmaxr   ÚzerosÚint8r   r:   r   )ÚnnzÚrowÚcolr!   ÚsÚdr   r   r   Útest_nnz_overflowF   s   rW   Ú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	y%   tj
}Y nw td| ƒ d S )Nr2   ÚPYTEST_XDIST_WORKER_COUNTÚ1i¸  )r   r3   rM   rN   rO   ÚintÚosÚenvironÚgetÚ
ValueErrorÚinfr   )r#   Ú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?   r2   rB   ©r   r   )rK   rK   )	r   r3   rD   rQ   r   Útodenser   rf   rg   )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 ¡  q6~t ¡  d S rj   )r   r3   rD   rQ   r   r4   r   r   r	   Údotr   rf   rg   )
r#   r   rm   r%   r!   rn   r$   ÚsptypeÚm2ro   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 )NrB   )rL   r?   r   )r   r3   r4   rQ   Úaranger
   rL   rq   r   r   rf   rg   )r#   r   r!   Úoffsetsrn   Úvro   r   r   r   Útest_dia_matvec    s   


z!TestInt32Overflow.test_dia_matvecÚmatmat)ÚmarksÚmatvecsÚmatvecÚdiagonalÚsort_indicesÚ	transposeÚopc                    ó@   ‡ fdd„}t  ¡  ztˆ d| ƒ|ƒ W t  ¡  d S t  ¡  w )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?   rB   r   F)Ú	blocksizer   )r   r3   r4   rQ   rD   rN   r	   ©r   r!   r   r    rn   rh   r   r   Ú
get_matrix»   s   z6TestInt32Overflow.test_bsr_1_block.<locals>.get_matrixÚ_check_bsr_©rf   rg   Úgetattr©r#   r€   r…   r   rh   r   Útest_bsr_1_block´   s
   	z"TestInt32Overflow.test_bsr_1_blockc                    r�   )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 r‚   )r   r3   r4   rQ   rD   rN   ru   r	   r„   rh   r   r   r…   Ò   s   z6TestInt32Overflow.test_bsr_n_block.<locals>.get_matrixr†   r‡   r‰   r   rh   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 )Nr2   rB   rk   ©r   rq   r3   r4   rQ   r   r   ©r#   rn   r   ro   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 )NrB   r   rŒ   r�   r   r   r   Ú_check_bsr_matvecé   s   z#TestInt32Overflow._check_bsr_matvecc                 C   s(   |ƒ }| j }| ¡ }t|t |¡ƒ d S r   )r   r}   r   r3   r4   r�   r   r   r   Ú_check_bsr_diagonalñ   s   z%TestInt32Overflow._check_bsr_diagonalc                 C   ó   |ƒ }|  ¡  d S r   )r~   ©r#   rn   r   r   r   Ú_check_bsr_sort_indicesù   ó   z)TestInt32Overflow._check_bsr_sort_indicesc                 C   r‘   r   )r   r’   r   r   r   Ú_check_bsr_transposeþ   r”   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 )Nr2   rB   r?   )rƒ   r   )r   r	   r3   r4   rQ   rƒ   rq   )r#   rn   r   rs   r   r   r   Ú_check_bsr_matmat  s   &
&z#TestInt32Overflow._check_bsr_matmatN)r+   r,   r-   Ú__doc__r   re   ri   rp   ÚpytestÚmarkÚslowrt   rx   ÚparamÚxslowÚ_bsr_opsÚparametrizerŠ   r‹   rŽ   r�   r�   r“   r•   r–   r   r   r   r   r[   [   s:    

ûr[   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 r2   é   r@   rJ   rB   r?   )r3   rM   Úint64rO   r   r4   rQ   ru   rP   r   ÚTr   ÚRuntimeErrorrq   )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¡r9|  ¡  	|¡}n| j
 ¡  	|¡}t |tj¡rP| ¡  	|¡}ntjd
d�� |j
 ¡  	|¡}W d   ƒ n1 siw   Y  |tjkrx|tjks�tjdtjd�}tttjdd|j|j|j||ƒ	 t |tj¡ržt |tj¡r¬t |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qd S )Ny              ð?r@   rA   rB   y      p@      ð?l        ú(z, ú)Úignore)Úinvalid)r2   r2   )Úerr_msg)r   r3   ÚpiÚcomplexrD   r   Ú
issubdtypeÚcomplexfloatingr   rE   ÚrealÚerrstateÚbool_rP   r   rb   r   Ú
csr_matvecr   r    r!   Úfloat64Úresult_typer   rq   r:   )Úa0Úb0Úa_dtypeÚb_dtypeÚmsgr'   r$   Úcr   r   r   Útest_upcast#  sD    ýÿÿþýÿáÿ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@   rA   )rK   r   r?   z<f8)rA   rA   z>f8rA   )r?   r@   é   é   )r3   r4   r
   rE   ru   r   rq   )rV   rv   r'   r$   rw   r   r   r   Útest_endiannessJ  s   

r¼   )+Úsysr_   rf   r5   Únumpyr3   Únumpy.testingr   r   r   Úscipy.sparser   r   r   r   r	   r
   Úscipy.sparse._sputilsr   Úscipy._lib._testutilsr   r˜   r   r   r   r   r>   rH   r™   rš   Úxfail_on_32bitrW   ÚskipifÚplatformÚ
startswithrC   ÚintpÚitemsizer[   Úskipr£   r¹   r¼   r   r   r   r   Ú<module>   s8     
þ 3
'