
    _Mh/)                     0   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 Zd Zd	 Zd
 Zej        j        ej                            d          d                         Zej                             e j!        "                    d          o ej#        ej$                  j%        dk     d           G d d                      Z&ej        '                    d          d             Z(d Z)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                     | dz   dz  dz
  S )z6
    Wrap an integer to the interval [-128, 127].
           )ns    c/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/sparse/tests/test_sparsetools.pyint_to_int8r      s     Gs?S      c                  D    t          t          t          j                   d S N)assert_raisesMemoryErrorr   test_throw_errorr   r   r   test_exceptionr      s    +|<=====r   c                     d} ddt          t          j        g                    g  G fddt          j                  fdt          |           D             }|D ]}|                                 |D ]}|                                 D ]9}t          t          j	        |
                                dk                         :d S )N
   d      c                        e Zd Z fdZdS )test_threads.<locals>.Workerc                                                     }t                    D ]M}t          j        j        j        j        j        j        j        |j        |j        |j                   N                    |           d S r   )copyranger   csr_plus_csrindptrindicesdataappend)selfbjabresr   niters      r   runz test_threads.<locals>.Worker.run(   s    A5\\ G G)!Q*+(AIqv*+(AIqv*+(AIqvG G G G KKNNNNNr   N)__name__
__module____qualname__r1   )r.   r/   r   r0   s   r   Workerr"   '   s=        	 	 	 	 	 	 	 	 	 	r   r5   c                 $    g | ]}             S r   r   ).0_r5   s     r   
<listcomp>z test_threads.<locals>.<listcomp>1   s    111Avvxx111r      )r   npones	threadingThreadr%   startjoinr   alltoarray)	nthreadsthreadsthreadr,   r5   r.   r/   r   r0   s	       @@@@@r   test_threadsrF      s    HE
A27Aq6??##AD         !    2111x111G     * *qyy{{a'(())))* *r   c                     t           D ]} t          j        ddgddgg                              |           }t	          ||           }t          |                    d                                          |d d d df                    d S )N   r:         dtyper   )r   r;   arrayastyper   r   getcolrB   )rL   adr.   s      r   !test_regression_std_vector_dtypesrQ   ;   s     " 7 7X1v1v&''..u55r''' 	QXXa[[((**Bqqq"1"uI66667 7r   z!Can't create large array for testc                     t          j        t           j                  j        dz   } t	          d| z  dz  dz              t          j        | t           j                  }t          j        | t           j                  }t          j        | t           j                  }d|d<   t          |||ffdd	
          }|                                }t          |dgg           d S )NrH   	       .Ag      ?rK   rJ   )rH   rH   F)shaper$   )
r;   iinfoint32maxr   zerosint8r   rB   r   )nnzrowcolr)   sds         r   test_nnz_overflowra   F   s    
 (28


 1
$CyC'#-3444 (3bh
'
'
'C
(3bh
'
'
'C8Crw'''DDHD3*%V%@@@A			AAur   linux   ztest requires 64-bit Linux)reasonc            	       $   e Zd ZdZdZd Zd Zd Zej	        j
        d             Zej	        j
        d             Z ej        dej	        j        	           ej        d
ej	        j        	          ddd ej        dej	        j        	          gZej	        j
        ej	                            de          d                         Zej	        j
        ej	                            de          d                         Zd Zd Zd Zd Zd Z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                 "   | j         dz  t          j        t          j                  j        k    sJ 	 t          t          j                            dd                    }n# t          $ r t          j
        }Y nw xY wt          d|z             d S )Nr:   PYTEST_XDIST_WORKER_COUNT1i  )r   r;   rW   rX   rY   intosenvironget
ValueErrorinfr   )r+   parallel_counts     r   setup_methodzTestInt32Overflow.setup_methodi   s    vqy28BH--11111	$ 0KS!Q!QRRNN 	$ 	$ 	$VNNN	$ 	$/00000s   -A! !A:9A:c                 ,    t          j                     d S r   )gccollect)r+   s    r   teardown_methodz!TestInt32Overflow.teardown_methodu   s    

r   c                    | j         }t          j        d|dz
  g          }t          j        d|dz
  g          }t          j        ddgt          j                  }t	          |||ff          }|                                }t          |d         d           t          |d         d           ~t          j                     d S Nr   rH   r:   rK   r   r   )rU   rU   )	r   r;   rM   r[   r   todenser   rs   rt   )r+   r   ir-   r)   mrs          r   test_coo_todensez"TestInt32Overflow.test_coo_todensex   s    
 FHa1XHa1XxAbg...q!f~&&IIKKQsVQQuXq!!!

r   c                 <   | j         }t          j        d|dz
  g          }t          j        d|dz
  g          }t          j        ddgt          j                  }t	          |||ff          }t          j        ||ft          j                  }t          t          t          fD ]b} ||          }|	                    |          }	t          |	d         d           t          |	d         d           ~	t          j                     c~t          j                     d S rw   )r   r;   rM   r[   r   r<   r   r	   r
   dotr   rs   rt   )
r+   r   rz   r-   r)   r{   r,   sptypem2r|   s
             r   test_matvecszTestInt32Overflow.test_matvecs   s     FHa1XHa1XxAbg...q!f~&&GQF"'***!:z: 	 	FBq		A3###51%%%JLLLL

r   c                    | j         }t          j        ||ft          j                  }t          j        |          }t          ||f||f          }t          j        |j        d         t          j                  }|                    |          }t          |d         t          |                     ~~~~~t          j                     d S )NrK   )rV   rH   r   )r   r;   r<   r[   aranger   rV   r   r   r   rs   rt   )r+   r   r)   offsetsr{   vr|   s          r   test_dia_matvecz!TestInt32Overflow.test_dia_matvec   s     Fw1vRW---)A,,gq!f555GAGAJbg...EE!HHQqT;q>>***'1a

r   matmat)marksmatvecsmatvecdiagonalsort_indices	transposeopc                       fd}t          j                     	  t           d|z             |           t          j                     d S # t          j                     w xY w)Nc                     j         } t          j        d| | ft          j                  }t          j        ddgt          j                  }t          j        dgt          j                  }t          |||f| | fd          }~~~|S NrH   rK   r   F)	blocksizer$   )r   r;   r<   r[   rM   rX   r
   r   r)   r'   r(   r{   r+   s        r   
get_matrixz6TestInt32Overflow.test_bsr_1_block.<locals>.get_matrix   s    A7Aq!9BG444DXq!fBH555Fhs"(333GD'62q!f5QQQAfgHr   _check_bsr_rs   rt   getattrr+   r   r   s   `  r   test_bsr_1_blockz"TestInt32Overflow.test_bsr_1_block   sl    	 	 	 	 	 	
	-GD-",--j999JLLLLLBJLLLL   A A!c                       fd}t          j                     	  t           d|z             |           t          j                     d S # t          j                     w xY w)Nc                     j         } t          j        | | dft          j                  }t          j        d| gt          j                  }t          j        | t          j                  }t          |||f| dfd          }~~~|S r   )r   r;   r<   r[   rM   rX   r   r
   r   s        r   r   z6TestInt32Overflow.test_bsr_n_block.<locals>.get_matrix   s    A7Aq!9BG444DXq!fBH555Fi222GD'62q!f5QQQAfgHr   r   r   r   s   `  r   test_bsr_n_blockz"TestInt32Overflow.test_bsr_n_block   sl    	 	 	 	 	 	
	-GD-",--j999JLLLLLBJLLLLr   c                      |            }| j         }|                    t          j        |dft          j                            }t          |d         t          |                     d S )Nr:   rK   rx   r   r   r;   r<   r[   r   r   r+   r{   r   r|   s       r   _check_bsr_matvecsz$TestInt32Overflow._check_bsr_matvecs   s\    ACCF EE"'1a&00011QtWk!nn-----r   c                      |            }| j         }|                    t          j        |ft          j                            }t          |d         t          |                     d S )NrK   r   r   r   s       r   _check_bsr_matvecz#TestInt32Overflow._check_bsr_matvec   sZ    ACCF EE"'1$bg...//QqT;q>>*****r   c                      |            }| j         }|                                }t          |t          j        |                     d S r   )r   r   r   r;   r<   r   s       r   _check_bsr_diagonalz%TestInt32Overflow._check_bsr_diagonal   sA    ACCF JJLLQ

#####r   c                 B     |            }|                                  d S r   )r   r+   r{   s     r   _check_bsr_sort_indicesz)TestInt32Overflow._check_bsr_sort_indices   s#    ACC	r   c                 B     |            }|                                  d S r   )r   r   s     r   _check_bsr_transposez&TestInt32Overflow._check_bsr_transpose   s    ACC	r   c                 v    |            }| j         }t          t          j        |dft          j                  |j        d         df          }|                    |           ~t          t          j        d|ft          j                  d|j        d         f          }|                    |           d S )Nr:   rK   rH   )r   r   )r   r
   r;   r<   r[   r   r   )r+   r{   r   r   s       r   _check_bsr_matmatz#TestInt32Overflow._check_bsr_matmat  s    ACCF Abg6661;q>STBUVVV	b			 Abg6661akRSnBUVVV
q					r   N)r2   r3   r4   __doc__r   rq   ru   r}   pytestmarkslowr   r   paramxslow_bsr_opsparametrizer   r   r   r   r   r   r   r   r   r   r   rf   rf   [   s       
  	A
1 
1 
1    $ [  * [
 
 
 XV[->???Yfk.?@@@[0ABBBDH [[T8,,  -, ( [[T8,,  -, *. . .+ + +$ $ $  
  
    r   rf   z/64-bit indices in sparse matrices not availablec                     d} | dz  t          j        t           j                  j        k    sJ t	          | dz  dz  dz             t          j        | ft           j                  }t          j        | dz   t           j                  }t          j        | t           j                  }t          |||f          }|j
        }t          t          |j        |           d S )Nl   4s	j r:      rI   rT   rK   rH   )r;   rW   int64rY   r   r<   r[   r   rZ   r   Tr   RuntimeErrorr   )r   r)   r'   r(   r.   r,   s         r   test_csr_matmat_int64_overflowr     s    Aa4"(28$$((((( a7ma'#-... 7A4rw'''DYqs"(+++Fhq)))GD'6*++A	A,q)))))r   c                     t          t          j        t          j        dz  gddggt                    } t          j        ddgt                    }t
          D ]}t
          D ]}d|d|d	}t          j        |t          j                  r(|                                 	                    |          }n,| j
                                        	                    |          }t          j        |t          j                  r(|                                	                    |          }nYt          j        d
          5  |j
                                        	                    |          }d d d            n# 1 swxY w Y   |t          j        k    r|t          j        k    sUt          j        dt          j                  }t          t          t           j        dd|j        |j        |j        ||	  	         t          j        |t          j                  rt          j        |t          j                  r>t          j        |t          j                  stt          j        |t          j                  rUt          j        dt          j                  }t          t          t           j        dd|j        |j        |j        ||	  	         t          j        dt          j        ||                    }t!          j        dd|j        |j        |j        ||           t/          |t          j        |                                |          |           d S )Ny              ?rI   rJ   rK   y      p@      ?l        (z, )ignore)invalid)r:   r:   )err_msg)r   r;   picomplexrM   r   
issubdtypecomplexfloatingr$   rN   realerrstatebool_rZ   r   rn   r   
csr_matvecr'   r(   r)   float64result_typer   r   rB   )a0b0a_dtypeb_dtypemsgr.   r,   cs           r   test_upcastr   #  s   	beRU2X&A/w	?	?	?B	65/	1	1	1B#  D  D' 	D 	DG/g//7///C}Wb&899 3GGII$$W--GLLNN))'22}Wb&899 7GGII$$W--[222 7 7 --g66A7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
 rx''Grx,?,?HT222j,*AAHaiAG G G w(:;; G]7B,>??G]7B,>??G w(:;;G HT444j,*AAHaiAG G G R^GW%E%EFFFA#Aq!(AIqvq!LLLArvaiikk155sCCCCC?	D D  Ds   =-E66E:=E:c                     t          j        d          } g d}t          |                     d          |fd          }t          |                     d          |fd          }t          j        d          }t          |                    |          g d           t          |                    |          g d           d S )N)rI   rJ   )rU   r   rH   z<f8)rJ   rJ   z>f8rJ   )rH   rI         )r;   r<   r   rN   r   r   r   )r`   r   r.   r,   r   s        r   test_endiannessr   J  s    
AhhGAHHUOOW-v66AAHHUOOW-v66A
	!AAEE!HHlll+++AEE!HHlll+++++r   )+sysrk   rs   r=   numpyr;   numpy.testingr   r   r   scipy.sparser   r   r   r	   r
   r   scipy.sparse._sputilsr   scipy._lib._testutilsr   r   r   r   r   r   rF   rQ   r   r   xfail_on_32bitra   skipifplatform
startswithrL   intpitemsizerf   skipr   r   r   r   r   r   <module>r      sG   



 				 				         @ @ @ @ @ @ @ @ @ @2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3  * * * * * *! ! !> > >* * *>7 7 7 ?@@  A@ & 		 	 	)	)	Mhbhrw.?.?.HA.MN'   o o o o o o o	 od JKK* * LK*"$D $D $DN	, 	, 	, 	, 	,r   