
    tKg/)                     F   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j8                  j:                  ej8                  j=                  d      d               Zej8                  jA                  e jB                  jE                  d      xr)  ejF                  ejH                        jJ                  dk\   d       G d d             Z&ej8                  jO                  d      d        Z(d Z)d Z*y)    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    g/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/sparse/tests/test_sparsetools.pyint_to_int8r      s     Gs?S      c                  @    t        t        t        j                         y 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                        }t        |       D cg c]	  } |        }}|D ]  }|j                           |D ]  }|j                           D ]1  }t        t        j                  |j                         dk(               3 y c c}w )N
   d      c                       e Zd Z fdZy)test_threads.<locals>.Workerc                 Z   j                         }t              D ]{  }t        j                  j                  j
                  j                  j                  j
                  j                  |j                  |j
                  |j                         } j                  |       y r   )copyranger   csr_plus_csrindptrindicesdataappend)selfbjabresr   niters      r   runz test_threads.<locals>.Worker.run(   su    A5\))!Q*+((AIIqvv*+((AIIqvv*+((AIIqvvG "
 KKNr   N)__name__
__module____qualname__r1   )r.   r/   r   r0   s   r   Workerr"   '   s    	 	r   r5      )r   npones	threadingThreadr%   startjoinr   alltoarray)
nthreadsr5   _threadsthreadr,   r.   r/   r   r0   s
         @@@@r   test_threadsrC      s     HE
A277Aq6?#AD !!  "'x1AvxG1   qyy{a'()  2s   Cc                      t         D ]k  } t        j                  ddgddgg      j                  |       }t	        ||       }t        |j                  d      j                         |d d d df          m y )N   r6         dtyper   )r   r7   arrayastyper   r   getcolr>   )rI   adr.   s      r   !test_regression_std_vector_dtypesrN   ;   si     "XX1v1v&'..u5r' 	QXXa[((*Bq"1"uI6 "r   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	
      }|j                         }t        |dgg       y )NrE   	       .Ag      ?rH   rG   )rE   rE   F)shaper$   )
r7   iinfoint32maxr   zerosint8r   r>   r   )nnzrowcolr)   sds         r   test_nnz_overflowr^   F   s    
 ((288

 
 1
$CyC'#-34 ((3bhh
'C
((3bhh
'C88Crww'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                  j!                  de      d               Zej                  j                  ej                  j!                  de      d               Zd Zd Zd Zd Zd Zd Zy)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                 0   | j                   dz  t        j                  t        j                        j                  kD  sJ 	 t        t        j                  j                  dd            }t        d|z         y # t        $ r t        j                  }Y *w xY w)Nr6   PYTEST_XDIST_WORKER_COUNT1i  )r   r7   rT   rU   rV   intosenvironget
ValueErrorinfr   )r+   parallel_counts     r   setup_methodzTestInt32Overflow.setup_methodi   ss    vvqy288BHH-11111	$ 0KS!QRN 	$/0  	$VVN	$s   )A9 9BBc                 ,    t        j                          y r   )gccollect)r+   s    r   teardown_methodz!TestInt32Overflow.teardown_methodu   s    


r   c                 v   | j                   }t        j                  d|dz
  g      }t        j                  d|dz
  g      }t        j                  ddgt        j                        }t	        |||ff      }|j                         }t        |d   d       t        |d   d       ~t        j                          y Nr   rE   r6   rH   r   r   )rR   rR   )	r   r7   rJ   rX   r   todenser   rp   rq   )r+   r   ir-   r)   mrs          r   test_coo_todensez"TestInt32Overflow.test_coo_todensex   s    
 FFHHa1XHHa1XxxAbgg.q!f~&IIK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 ]N  } ||      }|j                  |      }	t        |	d   d       t        |	d   d       ~	t        j                          P ~t        j                          y rt   )r   r7   rJ   rX   r   r8   r   r	   r
   dotr   rp   rq   )
r+   r   rw   r-   r)   rx   r,   sptypem2ry   s
             r   test_matvecszTestInt32Overflow.test_matvecs   s     FFHHa1XHHa1XxxAbgg.q!f~&GGQF"''*!:z:FBq	A3#51%JJL ; 


r   c                    | j                   }t        j                  ||ft        j                        }t        j                  |      }t        ||f||f      }t        j                  |j                  d   t        j                        }|j                  |      }t        |d   t        |             ~~~~~t        j                          y )NrH   )rS   rE   r   )r   r7   r8   rX   aranger   rS   r|   r   r   rp   rq   )r+   r   r)   offsetsrx   vry   s          r   test_dia_matvecz!TestInt32Overflow.test_dia_matvec   s     FFww1vRWW-))A,gq!f5GGAGGAJbgg.EE!HQqT;q>*'1a


r   matmat)marksmatvecsmatvecdiagonalsort_indices	transposeopc                       fd}t        j                          	  t         d|z         |       t        j                          y # t        j                          w xY w)Nc                  6   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 NrE   rH   r   F)	blocksizer$   )r   r7   r8   rX   rJ   rU   r
   r   r)   r'   r(   rx   r+   s        r   
get_matrixz6TestInt32Overflow.test_bsr_1_block.<locals>.get_matrix   sy    A77Aq!9BGG4DXXq!fBHH5Fhhs"((3GD'62q!f5QAfgHr   _check_bsr_rp   rq   getattrr+   r   r   s   `  r   test_bsr_1_blockz"TestInt32Overflow.test_bsr_1_block   sA    	 	

	-GD-",-j9JJLBJJL   A Ac                       fd}t        j                          	  t         d|z         |       t        j                          y # t        j                          w xY w)Nc                  4   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   r7   r8   rX   rJ   rU   r   r
   r   s        r   r   z6TestInt32Overflow.test_bsr_n_block.<locals>.get_matrix   sw    A77Aq!9BGG4DXXq!fBHH5Fii2GD'62q!f5QAfgHr   r   r   r   s   `  r   test_bsr_n_blockz"TestInt32Overflow.test_bsr_n_block   sA    	 	

	-GD-",-j9JJLBJJLr   c                      |       }| j                   }|j                  t        j                  |dft        j                              }t        |d   t        |             y )Nr6   rH   ru   r   r|   r7   r8   rX   r   r   r+   rx   r   ry   s       r   _check_bsr_matvecsz$TestInt32Overflow._check_bsr_matvecs   sG    CFF EE"''1a&01QtWk!n-r   c                      |       }| j                   }|j                  t        j                  |ft        j                              }t        |d   t        |             y )NrH   r   r   r   s       r   _check_bsr_matvecz#TestInt32Overflow._check_bsr_matvec   sE    CFF EE"''1$bgg./QqT;q>*r   c                      |       }| j                   }|j                         }t        |t        j                  |             y r   )r   r   r   r7   r8   r   s       r   _check_bsr_diagonalz%TestInt32Overflow._check_bsr_diagonal   s1    CFF JJLQ
#r   c                 2     |       }|j                          y r   )r   r+   rx   s     r   _check_bsr_sort_indicesz)TestInt32Overflow._check_bsr_sort_indices   s    C	r   c                 2     |       }|j                          y r   )r   r   s     r   _check_bsr_transposez&TestInt32Overflow._check_bsr_transpose   s    C	r   c                 t    |       }| j                   }t        t        j                  |dft        j                        |j
                  d   df      }|j                  |       ~t        t        j                  d|ft        j                        d|j
                  d   f      }|j                  |       y )Nr6   rH   rE   )r   r   )r   r
   r7   r8   rX   r   r|   )r+   rx   r   r~   s       r   _check_bsr_matmatz#TestInt32Overflow._check_bsr_matmat  s    CFF Abgg61;;q>STBUV	b	 Abgg61akkRSnBUV
q	r   N)r2   r3   r4   __doc__r   rn   rr   rz   pytestmarkslowr   r   paramxslow_bsr_opsparametrizer   r   r   r   r   r   r   r   r   r   r   rc   rc   [   sF   
 	A
1$ [[ * [[
 
 XV[[->->?Yfkk.?.?@[0A0ABDH [[[[T8, - ( [[[[T8, - *.+$

r   rc   z/64-bit indices in sparse matrices not availablec                     d} | dz  t        j                  t         j                        j                  kD  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                  |       y )Nl   4s	j r6      rF   rQ   rH   rE   )r7   rT   int64rV   r   r8   rX   r   rW   r   Tr   RuntimeErrorr|   )r   r)   r'   r(   r.   r,   s         r   test_csr_matmat_int64_overflowr     s    Aa4"((288$((((( a7ma'#-. 77A4rww'DYYqs"((+Fhhq)GD'6*+A	A,q)r   c                  0   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 | j                         j                  |      }n)| j                  j                         j                  |      }t        j                  |t        j                        r |j                         j                  |      }nHt        j                  d
      5  |j                  j                         j                  |      }d d d        |t        j                  k(  r|t        j                  k(  sht        j                  dt        j                        }t        t        t         j"                  dd|j$                  |j&                  |j(                  |	       t        j                  |t        j                        r$t        j                  |t        j                        rHt        j                  |t        j                        st        j                  |t        j                        rht        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        j0                  |j3                         |      |       " / y # 1 sw Y   +xY w)Ny              ?rF   rG   rH   y      p@      ?l        (z, )ignore)invalid)r6   r6   )err_msg)r   r7   picomplexrJ   r   
issubdtypecomplexfloatingr$   rK   realerrstatebool_rW   r   rk   r   
csr_matvecr'   r(   r)   float64result_typer   r|   r>   )a0b0a_dtypeb_dtypemsgr.   r,   cs           r   test_upcastr   #  s]   	beeRUU2X&A/w	?B	65/	1B##''Gg[7+Q/C}}Wb&8&89GGI$$W-GGLLN))'2}}Wb&8&89GGI$$W-[[2 --g6A 3
 rxx'Grxx,?HHT2j,*A*AAHHaiiAG w(:(:;]]7B,>,>?]]7B,>,>?w(:(:;HHT4j,*A*AAHHaiiAG R^^GW%EFA##Aq!((AIIqvvq!LArvvaiik15sC? ( $ 32s   8*NNc                  H   t        j                  d      } g d}t        | j                  d      |fd      }t        | j                  d      |fd      }t        j                  d      }t        |j                  |      g d       t        |j                  |      g d       y )N)rF   rG   )rR   r   rE   z<f8)rG   rG   z>f8rG   )rE   rF         )r7   r8   r   rK   r   r   r|   )r]   r   r.   r,   r   s        r   test_endiannessr   J  sw    
AGAHHUOW-v6AAHHUOW-v6A
		!AAEE!Hl+AEE!Hl+r   )+sysrh   rp   r9   numpyr7   numpy.testingr   r   r   scipy.sparser   r   r   r	   r
   r   scipy.sparse._sputilsr   scipy._lib._testutilsr   r   r   r   r   r   rC   rN   r   r   xfail_on_32bitr^   skipifplatform
startswithrI   intpitemsizerc   skipr   r   r   r   r   r   <module>r      s   
 	 	   @ @2 2 2 3  *!>*>7 ?@ A & 		 	 	)	Mhbhhrww.?.H.HA.MN'  o o	od JK* L*"$DN	,r   