o
    tBh'                     @   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ejjejddd Zejje j !dooe"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   t ttj d S N)assert_raisesMemoryErrorr   test_throw_error r   r   z/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/scipy/sparse/tests/test_sparsetools.py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bresn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>*   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   r/         dtyper   )r   r0   arrayastyper   r   getcolr7   )r@   adr#   r   r   r   !test_regression_std_vector_dtypes4   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   )
r0   iinfoint32maxr   zerosint8r   r7   r   )nnzrowcolr   sdr   r   r   test_nnz_overflow?   s   rT   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 )Nr/   PYTEST_XDIST_WORKER_COUNT1i  )r%   r0   rJ   rK   rL   intosenvironget
ValueErrorinfr   )r   parallel_countr   r   r   setup_method`   s   
zTestInt32Overflow.setup_methodc                 C   s   t   d S r   )gccollectr   r   r   r   teardown_methodl   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<   r/   r?   r   r   )rH   rH   )	r%   r0   rA   rN   r   todenser   rc   rd   )r   r%   ir!   r   mrr   r   r   test_coo_todenseo   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 rg   )r%   r0   rA   rN   r   r1   r   r   r	   dotr   rc   rd   )
r   r%   rj   r!   r   rk   r    sptypem2rl   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%   r0   r1   rN   aranger
   rI   rn   r   rc   rd   )r   r%   r   offsetsrk   vrl   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<   r?   r   F)	blocksizer   )r%   r0   r1   rN   rA   rK   r	   r%   r   r   r   rk   re   r   r   
get_matrix   s   z6TestInt32Overflow.test_bsr_1_block.<locals>.get_matrix_check_bsr_rc   rd   getattrr   r}   r   r   re   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%   r0   r1   rN   rA   rK   rr   r	   r   re   r   r   r      s   z6TestInt32Overflow.test_bsr_n_block.<locals>.get_matrixr   r   r   r   re   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 )Nr/   r?   rh   r%   rn   r0   r1   rN   r   r   rk   r%   rl   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%   rz   r   r0   r1   r   r   r   r   _check_bsr_diagonal   s   z%TestInt32Overflow._check_bsr_diagonalc                 C      | }|   d S r   )r{   r   rk   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 )Nr/   r?   r<   )r   r   )r%   r	   r0   r1   rN   r   rn   )r   rk   r%   rp   r   r   r   _check_bsr_matmat   s   &
&z#TestInt32Overflow._check_bsr_matmatN)r(   r)   r*   __doc__r%   rb   rf   rm   pytestmarkslowrq   ru   paramxslow_bsr_opsparametrizer   r   r   r   r   r   r   r   r   r   r   r   rX   T   s:    

rX   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 r/      r=   rG   r?   r<   )r0   rJ   int64rL   r   r1   rN   rr   rM   r   Tr   RuntimeErrorrn   )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||f }t|tjr6|  	|}n| j
 	|}t|tjrM| 	|}n|j
 	|}|tjkr_|tjkswtjdtjd}tttjd	d	|j|j|j||	 t|tjrt|tjrt|tjst|tjrt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=   r>   r?   y      p@      ?l        z(%r, %r))r/   r/   )err_msg)r   r0   picomplexrA   r   
issubdtypecomplexfloatingr   rB   realbool_rM   r   r_   r   
csr_matvecr   r   r   float64result_typer   rn   r7   )a0b0a_dtype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=         )r0   r1   r
   rB   rr   r   rn   )rS   rs   r#   r    rt   r   r   r   test_endianness>  s   

r   )*sysr\   rc   r2   numpyr0   numpy.testingr   r   r   scipy.sparser   r   r   r   r	   r
   scipy.sparse._sputilsr   scipy._lib._testutilsr   r   r   r   r   r;   rE   r   r   xfail_on_32bitrT   skipifplatform
startswithr@   intpitemsizerX   skipr   r   r   r   r   r   r   <module>   s4     
$ 3
$