
    bi2              	          d Z ddlZddlZddlmZmZmZmZm	Z	m
Z
mZmZmZmZ ddlmZmZmZmZmZmZmZmZm Z!m"Z#m$Z%m&Z'm(Z)m*Z+m,Z, ddddd	d
dd
dZ-d Z.ej^                  ja                  d       G d d             Z1 G d de1      Z2 G d de1      Z3 G d de1      Z4ej^                  jj                   G d de1             Z6ej^                  jj                   G d de1             Z7ej^                  ja                  d       G d d             Z8y)z2 Test functions involving 64bit or 32bit indexing     N)
	bsr_array	coo_array	csc_array	csr_array	dia_array
bsr_matrix
coo_matrix
csc_matrix
csr_matrix
dia_matrix   )TestBSRTestCOOTestCSCTestCSRTestDIATestDOKTestLILTestBSRMatrixTestCOOMatrixTestCSCMatrixTestCSRMatrixTestDIAMatrixTestDOKMatrixTestLILMatrixwith_64bit_maxval_limitz%expm for 64-bit indices not availablez)linsolve for 64-bit indices not availableztest implemented in base classz%test actually requires 64-bit to workztest verifies int32 indexesztest verifies int64 indexes)	test_expmtest_inv
test_solvetest_scalar_idx_dtypetest_large_dimensions_reshapetest_constructor_smallcoltest_constructor_largecoltest_tocoo_tocsr_tocsc_gh19245c              #     K   | dk(  rt         t        t        t        t        g}nT| dk(  rt
        t        g}nB| dk(  rt        t        t        t        t        g}n!| dk(  rt        t        g}nt        d| d      |D ]  }t        t!        |            D ]  }t#        ||      }|j%                  d      s!t#        |dd	      r/g }t&        j)                  |      }|r/|j+                  t,        j.                  j1                  |
             t#        |dg       }|D ]"  }|j2                  dv s|j+                  |       $ t-        j4                  |||         yw)a  Yield all tests for all formats

    This is more than testing get_index_dtype. It allows checking whether upcasting
    or downcasting the index dtypes affects test results. The approach used here
    does not try to figure out which tests might fail due to 32/64-bit issues.
    We just run them all.
    So, each test method in that uses cases_64bit reruns most of the test suite!
    sparraysparray-extraspmatrixspmatrix-extrazparameter sp_api=z is not validtest_slowFreason
pytestmark)skipifskipxfailxslow)marksN)_TestBSR_TestCOO_TestCSC_TestCSR_TestDIA_TestDOK_TestLIL_TestBSRMatrix_TestCOOMatrix_TestCSCMatrix_TestCSRMatrix_TestDIAMatrix_TestDOKMatrix_TestLILMatrix
ValueErrorsorteddirgetattr
startswith
SKIP_TESTSgetappendpytestmarkr0   nameparam)	sp_apiTEST_CLASSESclsmethod_namemethodr3   msgmarkersrK   s	            X/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/sparse/tests/test_64bit.pycases_64bitrV   *   sG      (HhI	?	"
 !(+	:	&&8	#	#&7-fYm<== B!#c(+ 	BKS+.F&&w/6 nn[1LL!1!1!1!=>!&,;# +Dyy$HHT*+ ll35AA	BBs   B/E2E A(E)2Ezfails in parallelr,   c                       e Zd Zd Zy)RunAll64Bitc                 8    t        di |d        } |||       y )Nc                      |        }t        |d      r|j                          	  t        ||              t        |d      r|j                          y y # t        |d      r|j                          w w xY w)Nsetup_methodteardown_method)hasattrr[   rE   r\   )rP   rQ   instances      rU   checkz,RunAll64Bit._check_resiliency.<locals>.check]   sl    uHx0%%'/.+.08%67,,. 878%67,,. 8s   A A3 )r   )selfrP   rQ   kwr_   s        rU   _check_resiliencyzRunAll64Bit._check_resiliencyY   s*     
!	&2	&	/ 
'	/ 	c;    N)__name__
__module____qualname__rc   r`   rd   rU   rX   rX   W   s     rd   rX   c                      e Zd Zej                  j                  d ed            d        Zej                  j                  d ed            d        Zej                  j                  d ed            d        Z	ej                  j                  d      ej                  j                  d ed            d               Zy)	Test64BitArraycls,method_namer&   c                 ,    | j                  ||d       y N
   maxval_limitrc   ra   rP   rQ   s      rU   test_resiliency_limit_10z'Test64BitArray.test_resiliency_limit_10n       sKbArd   c                 H    | j                  ||t        j                         y Nfixed_dtyperc   npint32rq   s      rU   test_resiliency_all_32z%Test64BitArray.test_resiliency_all_32r       sKRXXFrd   c                 H    | j                  ||t        j                         y ru   rc   ry   int64rq   s      rU   test_resiliency_all_64z%Test64BitArray.test_resiliency_all_64v   r|   rd      c                 (    | j                  ||       y Nrp   rq   s      rU   test_resiliency_randomz%Test64BitArray.test_resiliency_randomz   s     	sK0rd   Nre   rf   rg   rJ   rK   parametrizerV   rr   r{   r   	fail_slowr   r`   rd   rU   ri   ri   k   s     [[.I0FGB HB [[.I0FGG HG [[.I0FGG HG [[1[[.I0FG1 H 1rd   ri   c                       e Zd Zej                  j                  d      ej                  j                  d ed            d               Zy)Test64BitMatrix   rj   r(   c                 ,    | j                  ||d       y NT)assert_32bitrp   rq   s      rU   
test_no_64zTest64BitMatrix.test_no_64        	sKdCrd   N)	re   rf   rg   rJ   rK   r   r   rV   r   r`   rd   rU   r   r      sE    [[1[[.J0GHD I Drd   r   c                      e Zd Zej                  j                  d ed            d        Zej                  j                  d ed            d        Zej                  j                  d ed            d        Z	ej                  j                  d      ej                  j                  d ed            d               Zy)	Test64BitMatrixSameAsArrayrj   r(   c                 ,    | j                  ||d       y rl   rp   rq   s      rU   rr   z3Test64BitMatrixSameAsArray.test_resiliency_limit_10   rs   rd   c                 H    | j                  ||t        j                         y ru   rx   rq   s      rU   r{   z1Test64BitMatrixSameAsArray.test_resiliency_all_32   r|   rd   c                 H    | j                  ||t        j                         y ru   r~   rq   s      rU   r   z1Test64BitMatrixSameAsArray.test_resiliency_all_64   r|   rd   r   c                 (    | j                  ||       y r   rp   rq   s      rU   r   z1Test64BitMatrixSameAsArray.test_resiliency_random        	sK0rd   Nr   r`   rd   rU   r   r      s     [[.J0GHB IB [[.J0GHG IG [[.J0GHG IG [[1[[.J0GH1 I 1rd   r   c                      e Zd Zej                  j                  d ed            d        Zej                  j                  d ed            d        Zej                  j                  d ed            d        Z	ej                  j                  d      ej                  j                  d ed            d               Zy)	Test64BitArrayExtrarj   r'   c                 ,    | j                  ||d       y rl   rp   rq   s      rU   rr   z,Test64BitArrayExtra.test_resiliency_limit_10   rs   rd   c                 H    | j                  ||t        j                         y ru   rx   rq   s      rU   r{   z*Test64BitArrayExtra.test_resiliency_all_32   r|   rd   c                 H    | j                  ||t        j                         y ru   r~   rq   s      rU   r   z*Test64BitArrayExtra.test_resiliency_all_64   r|   rd   r   c                 (    | j                  ||       y r   rp   rq   s      rU   r   z*Test64BitArrayExtra.test_resiliency_random   r   rd   Nr   r`   rd   rU   r   r      s     [[.O0LMB NB [[.O0LMG NG [[.O0LMG NG [[1[[.O0LM1 N 1rd   r   c                      e Zd Zej                  j                  d      ej                  j                  d ed            d               Zej                  j                  d ed            d        Z	ej                  j                  d ed            d        Z
ej                  j                  d ed            d        Zej                  j                  d      ej                  j                  d ed            d	               Zy
)Test64BitMatrixExtrar   rj   r)   c                 ,    | j                  ||d       y r   rp   rq   s      rU   r   zTest64BitMatrixExtra.test_no_64   r   rd   c                 ,    | j                  ||d       y rl   rp   rq   s      rU   rr   z-Test64BitMatrixExtra.test_resiliency_limit_10   rs   rd   c                 H    | j                  ||t        j                         y ru   rx   rq   s      rU   r{   z+Test64BitMatrixExtra.test_resiliency_all_32   r|   rd   c                 H    | j                  ||t        j                         y ru   r~   rq   s      rU   r   z+Test64BitMatrixExtra.test_resiliency_all_64   r|   rd   r   c                 (    | j                  ||       y r   rp   rq   s      rU   r   z+Test64BitMatrixExtra.test_resiliency_random   r   rd   N)re   rf   rg   rJ   rK   r   r   rV   r   rr   r{   r   r   r`   rd   rU   r   r      s    [[1[[.<L0MND O D
 [[.<L0MNB OB [[.<L0MNG OG [[.<L0MNG OG [[1[[.<L0MN1 O 1rd   r   z%Fails in parallel for unknown reasonsc            
       <    e Zd Zeeeeeee	e
eeg
Zd Zd Zd Zd Zy)Test64BitToolsc                    t        j                  |      }|j                  dv r4|j                  j                  |k(  xr |j                  j                  |k(  S |j                  dk(  r4|j
                  j                  |k(  xr |j                  j                  |k(  S |j                  dk(  r|j                  j                  |k(  S t        d|d      )N)csccsrbsrcoodiazmatrix z has no integer indices)	ry   dtypeformatindicesindptrrowcoloffsetsrB   )ra   mr   s      rU   _compare_index_dtypez#Test64BitTools._compare_index_dtype   s    88,,IIOOu,K188>>U3JKXXEEKK5(Dquu{{e/CDXXIIOOu,-wqe+BCDDrd   c                 `     t        d       fd       } j                  D ]
  } ||        y )Nrm   rn   c                 &    | t         j                  j                  dd            }j                  |t         j                        sJ  | t         j                  j                  dd            }j                  |t         j
                        sJ y )Nrm   r      )ry   randomrandr   rz   r   )mat_clsr   ra   s     rU   r_   z9Test64BitTools.test_decorator_maxval_limit.<locals>.check   si    		r1-.A,,Q999		r1-.A,,Q999rd   r   MAT_CLASSESra   r_   r   s   `  rU   test_decorator_maxval_limitz*Test64BitTools.test_decorator_maxval_limit   s:     
!b	1	: 
2	: '' 	G'N	rd   c                 `     t        d       fd       } j                  D ]
  } ||        y )NT)r   c                 ,   d}d}t        d      D ]w  } | t        j                  j                  dd            }|xs  j	                  |t        j
                        }|xs  j	                  |t        j                        }|st|sw y  t        d      )NFd   	   z#both 32 and 64 bit indices not seen)rangery   r   r   r   rz   r   AssertionError)r   seen_32seen_64kr   ra   s        rU   r_   z:Test64BitTools.test_decorator_maxval_random.<locals>.check   s    GG3Z LBIINN1a01!KT%>%>q"((%K!KT%>%>q"((%KwL %%JKKrd   r   r   s   `  rU   test_decorator_maxval_randomz+Test64BitTools.test_decorator_maxval_random   s<     
!	-
	L 
.
	L '' 	G'N	rd   c                 6   t        t        j                  d      d        }t        t        j                        d        } |t        t        t
                |t        t        t
                |t        t        t                |t        t        t               y )Nr   )rw   downcast_maxvalc                 0    | ddgddgddgg      }t        j                  t        |j                  d       t        j                  t        |j                  d        |g d	g d
g      }t        j                  t        |j                  d       t        j                  t        |j                  d        |g d	g dg      }t        j                  t        |j                  d       d|_        t        j                  t        |j                         y Nr   r         r      )axisr   )r   r   r   )r   r   r   )r   r   r   F)rJ   raisesr   count_nonzerosumhas_canonical_formatsum_duplicatescsc_containercsr_containercoo_containeras       rU   check_limitedz8Test64BitTools.test_downcast_intp.<locals>.check_limited  s     1v1v1v67AMM.!//BMM.!%%a8y)45AMM.!//BMM.!%%a8y)45AMM.!//B%*A"MM.!*:*:;rd   rv   c                 @    | ddgddgddgg      }|j                  d       |j                  d        |g d	g d
g      }|j                  d       |j                  d        |g d	g dg      }|j                  d       d|_        |j                          y r   )r   r   r   r   r   s       rU   check_unlimitedz:Test64BitTools.test_downcast_intp.<locals>.check_unlimited  s     1v1v1v67AOOO#EEqEMy)45AOOO#EEqEMy)45AOOO#%*A"rd   )	r   ry   r   r   r   r   r
   r   r	   )ra   r   r   s      rU   test_downcast_intpz!Test64BitTools.test_downcast_intp  sq     
!RXXq	I	< 
J	< 
!RXX	6	 
7	 	iI6	9i8j*j9
J
;rd   N)re   rf   rg   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r`   rd   rU   r   r      s6     	J
J
9iIK
	E&)<rd   r   )9__doc__rJ   numpyry   scipy.sparser   r   r   r   r   r   r	   r
   r   r   	test_baser   r4   r   r5   r   r6   r   r7   r   r8   r   r9   r   r:   r   r;   r   r<   r   r=   r   r>   r   r?   r   r@   r   rA   r   rG   rV   rK   thread_unsaferX   ri   r   r   r2   r   r   r   r`   rd   rU   <module>r      s*   8        * 9;==%L!>!>&C	
*BZ "56    7 &1[ 1*Dk D1 1, 1+ 1 1. 1; 1 18 "IJ[< [< K[<rd   