L i*ddlZddlZddlZddlZddlZddlmZmZm Z ddl m Z m Z m Z mZmZmZddlmZddlmZddlZddlmZdZej2j4dZd Zd Zej2j<ej2j4ej2j?d d Z ej2j4ej2jCejDjGd xr)ejHejJjLdk\ dGddZ'ej2j4ej2jQddZ)dZ*dZ+y)N) assert_equalassert_assert_allclose) _sparsetools coo_matrix csr_matrix csc_matrix bsr_matrix dia_matrix)supported_dtypes)check_free_memory)raisesc|dzdzdz S)z6 Wrap an integer to the interval [-128, 127]. )ns i/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/sparse/tests/test_sparsetools.py int_to_int8rs Gs?S  c@tttjyN) assert_raises MemoryErrorrtest_throw_errorrrrtest_exceptionrs+|<<=rc d}d dttjggG fddtj}t |Dcgc] }| }}|D]}|j |D]}|jD]1}ttj|jdk(3ycc}w)N dceZdZfdZy)test_threads..WorkercZj}tD]{}tjjj j jj j |j|j |j }j|yr)copyranger csr_plus_csrindptrindicesdataappend)selfbjabresrniters rrunz test_threads..Worker.run)s|A5\ G))!Q*+((AIIqvv*+((AIIqvv*+((AIIqvvG G KKNrN)__name__ __module__ __qualname__r1)r.r/rr0srWorkerr"(s   rr5) rnpones threadingThreadr%startjoinralltoarray) nthreadsr5_threadsthreadr,r.r/rr0s @@@@r test_threadsrCsH E A277Aq6?#A D!!"'x1Avx1G1  *qyy{a'()* 2sC ctD]k}tjddgddggj|}t ||}t |j dj|ddddfmy)Nr6dtyper)r r7arrayastyperrgetcolr>)rIadr.s r!test_regression_std_vector_dtypesrN<sn"7 XX1v1v& ' . .u 5 r ' QXXa[((*Bq"1"uI6 7rz!Can't create large array for testctjtjjdz}t d|zdz dztj |tj}tj |tj}tj |tj }d|d<t|||ffdd }|j}t|dggy) NrE .Ag?rHrG)rErEF)shaper$) r7iinfoint32maxr zerosint8rr>r)nnzrowcolr)sds rtest_nnz_overflowr^Gs ((288  1 $CyC'#-34 ((3bhh 'C ((3bhh 'C 88Crww 'DDHD3*%V%@A AAurlinuxztest requires 64-bit Linux)reasonc eZdZdZdZdZdZejjddZ ejjdZ ejjdZ ejd ejj ejd ejj d d dejdejj gZejjejj#dedZejjejj#dedZdZdZdZdZdZdZy)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. iPc0|jdztjtjjkDsJ t t jjdd}td|zy#t$rtj}Y*wxYw)Nr6PYTEST_XDIST_WORKER_COUNT1i ) rr7rTrUrVintosenvironget ValueErrorinfr )r+parallel_counts r setup_methodzTestInt32Overflow.setup_methodlssvvqy288BHH-11111 $ 0KS!QRN $/0 $VVN $s)A99BBc,tjyr)gccollect)r+s rteardown_methodz!TestInt32Overflow.teardown_methodxs  rr6cv|j}tjd|dz g}tjd|dz g}tjddgtj}t |||ff}|j }t |ddt |dd~tjyNrrEr6rHrr)rRrR) rr7rJrXrtodenserrprq)r+rir-r)mrs rtest_coo_todensez"TestInt32Overflow.test_coo_todense{s FF HHa1X  HHa1X xxAbgg. q!f~ & IIKQsVQQuXq!  rc,|j}tjd|dz g}tjd|dz g}tjddgtj}t |||ff}tj ||ftj}t ttfD]N}||}|j|} t| ddt| dd~ tjP~tjyrt) rr7rJrXrr8rr r dotrrprq) r+rrwr-r)rxr,sptypem2rys r test_matvecszTestInt32Overflow.test_matvecss FF HHa1X  HHa1X xxAbgg. q!f~ & GGQF"'' *!:z: FBq A 3 # 51 % JJL    rc|j}tj||ftj}tj|}t ||f||f}tj|j dtj}|j|}t|dt|~~~~~tjy)NrH)rSrEr) rr7r8rXaranger rSr|rrrprq)r+rr)offsetsrxvrys rtest_dia_matvecz!TestInt32Overflow.test_dia_matvecs FFww1vRWW-))A, gq!f 5 GGAGGAJbgg . EE!HQqT;q>* '1a rmatmat)marksmatvecsmatvecdiagonal sort_indices transposeopcfd}tj td|z|tjy#tjwxYw)Nc6j}tjd||ftj}tjddgtj }tjdgtj }t |||f||fd}~~~|SNrErHrF) blocksizer$)rr7r8rXrJrUr rr)r'r(rxr+s r get_matrixz6TestInt32Overflow.test_bsr_1_block..get_matrixsyA77Aq!9BGG4DXXq!fBHH5Fhhs"((3GD'62q!f5QAfgHr _check_bsr_rprqgetattrr+rrs` rtest_bsr_1_blockz"TestInt32Overflow.test_bsr_1_blocksA    -GD-", -j 9 JJLBJJL AAcfd}tj td|z|tjy#tjwxYw)Nc4j}tj||dftj}tjd|gtj }tj |tj }t|||f|dfd}~~~|Sr)rr7r8rXrJrUrr rs rrz6TestInt32Overflow.test_bsr_n_block..get_matrixswA77Aq!9BGG4DXXq!fBHH5Fii2GD'62q!f5QAfgHrrrrs` rtest_bsr_n_blockz"TestInt32Overflow.test_bsr_n_blocksA    -GD-", -j 9 JJLBJJLrc|}|j}|jtj|dftj}t |dt |y)Nr6rHrurr|r7r8rXrrr+rxrrys r_check_bsr_matvecsz$TestInt32Overflow._check_bsr_matvecssG C FF EE"''1a&0 1QtWk!n-rc|}|j}|jtj|ftj}t |dt |y)NrHrrrs r_check_bsr_matvecz#TestInt32Overflow._check_bsr_matvecsE C FF EE"''1$bgg. /QqT;q>*rc|}|j}|j}t|tj|yr)rrrr7r8rs r_check_bsr_diagonalz%TestInt32Overflow._check_bsr_diagonals1 C FF JJLQ #rc2|}|jyr)rr+rxs r_check_bsr_sort_indicesz)TestInt32Overflow._check_bsr_sort_indicess C rc2|}|jyr)rrs r_check_bsr_transposez&TestInt32Overflow._check_bsr_transposes C rct|}|j}ttj|dftj|j ddf}|j |~ttjd|ftjd|j df}|j |y)Nr6rHrE)rr)rr r7r8rXrr|)r+rxrr~s r_check_bsr_matmatz#TestInt32Overflow._check_bsr_matmats C FFAbgg61;;q>STBU V b Abgg61akkRSnBU V q rN)r2r3r4__doc__rrnrrpytestmark fail_slowrzslowrrparamxslow_bsr_ops parametrizerrrrrrrrrrrrcrc]sd  A 1 [[1$ [[* [[   XV[[->->? Yfkk.?.?@ [ 0A0AB DH [[ [[T8,-( [[ [[T8,-*.+$  rrcz/64-bit indices in sparse matrices not availablecd}|dztjtjjkDsJt |dzdzdz tj |ftj }tj|dztj}tj|tj}t|||f}|j}tt|j|y)Nl4s jr6rFrQrHrE)r7rTint64rVr r8rXrrWrTr RuntimeErrorr|)rr)r'r(r.r,s rtest_csr_matmat_int64_overflowrs A a4"((288$(( (( (a7ma'#-. 77A4rww 'D YYqs"(( +Fhhq)GD'6*+A A,q)rc 0ttjtjdzgddggt}tjddgt}t D],}t D]}d|d|d }tj |tjr |jj|}n)|jjj|}tj |tjr |jj|}nHtjd 5|jjj|}ddd|tjk(r|tjk(shtjd tj}ttt j"d d |j$|j&|j(| tj |tjr$tj |tjrHtj |tjstj |tjrhtjd tj*}ttt j"d d |j$|j&|j(| tjd tj,||}t!j"d d |j$|j&|j(|t/|tj0|j3||"/y#1swY+xYw)Ny?rFrGrHyp@?l(z, )ignore)invalid)r6r6)err_msg)rr7picomplexrJr issubdtypecomplexfloatingr$rKrealerrstatebool_rWrrkr csr_matvecr'r(r)float64 result_typerr|r>)a0b0a_dtypeb_dtypemsgr.r,cs r test_upcastr(sl beeRUU2X&A/w ?B 65/ 1B# D' DGg[7+Q/C}}Wb&8&89GGI$$W-GGLLN))'2}}Wb&8&89GGI$$W-[[27 --g6A7 rxx'Grxx,?HHT2j,*A*AAHHaiiAGw(:(:;]]7B,>,>?]]7B,>,>?w(:(:;HHT4j,*A*AAHHaiiAGR^^GW%EFA  # #Aq!((AIIqvvq! L Arvvaiik15s C? D D77s 8*N  N cHtjd}gd}t|jd|fd}t|jd|fd}tjd}t |j |gdt |j |gdy)N)rFrG)rRrrEzf8rG)rErF)r7r8r rKrrr|)r]rr.r,rs rtest_endiannessrOsw AGAHHUOW-v6AAHHUOW-v6A ! AAEE!Hl+AEE!Hl+r),sysrhrpr9numpyr7 numpy.testingrrr scipy.sparserrrr r r scipy.sparse._sputilsr scipy._lib._testutilsr rrrrr thread_unsaferrCrNrxfail_on_32bitr^skipifplatform startswithrIintpitemsizercskiprrrrrrrsf @@2223 *!>>*>7?@A&   ) Mhbhhrww.?.H.HA.MN 'pp  pfJK*L*"$DN ,r