
    (ph!                         S r SSKrSSKJr  SSKJrJrJrJr  SSK	r	SSK	J
r  SSKJr  SSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SSK J!r"  / S	Qr#SS
 jr$SS jr% " S S5      r&S r'g)z)test sparse matrix construction functions    N)array)assert_equalassert_assert_array_equalassert_array_almost_equal_nulp)raises)check_free_memory)
csr_matrix
coo_matrix	csr_array	coo_array	csc_array	bsr_array	dia_array	dok_array	lil_array
csc_matrix
bsr_matrix
dia_matrix
lil_matrixsparrayspmatrix
_construct)rand)csrcsccoobsrdialildokc           	          [         R                  R                  U5      nUR                  n[        R                  " XX#XEU5      $ N)nprandomdefault_rngstandard_normal	construct)mndensityformatdtyperngdata_rvss          T/var/www/html/venv/lib/python3.13/site-packages/scipy/sparse/tests/test_construct.py_sprandnr1      s8    
))


$C""HA'5xHH    c           	          [         R                  R                  U5      nUR                  n[        R
                  " X4X#UXVS9$ )N)r+   r,   r-   r.   data_sampler)r$   r%   r&   r'   r(   random_array)r)   r*   r+   r,   r-   r.   r4   s          r0   _sprandn_arrayr6   !   sB    
))


$C&&L!!1&'PU&)F Fr2   c            
       d   \ rS rSr\R
                  R                  S\\\	\
\\\/5      S 5       r\R
                  R                  S\\\\\\/5      S 5       rS rS rS rS rS	 rS
 rS rS rS r\R
                  R                  S\R@                  \RB                  /5      S 5       r"\R
                  R                  S\RF                  \RB                  /5      S 5       r$\R
                  R                  S\RF                  \RB                  /5      S 5       r%S r&S r'S r(S r)S r*S r+\R
                  R                  S\\	/5      S 5       r,S r-S r.S r/\R
                  R                  S\\	/5      S 5       r0S r1\R
                  R                  S \Rd                  \Rf                  45      S! 5       r4S" r5S# r6\R
                  Rn                  \R
                  Rp                  \R
                  Rs                  S$5      S% 5       5       5       r:S& r;S' r<S( r=S) r>S* r?S+ r@S, rA\R
                  R                  S-S.S/\BR                  R                  S/5      /5      S0 5       rE\R
                  R                  S-S.S/\BR                  R                  S/5      /5      S1 5       rFS2 rGS3 rHS4 rIS5 rJS6rKg.)7TestConstructUtils)   clsc                 z    [         R                  " [        SS9   U" S5        S S S 5        g ! , (       d  f       g = f)NzEscipy sparse array classes do not support instantiation from a scalarmatchr   )pytestr   
ValueErrorselfr:   s     r0    test_singleton_array_constructor3TestConstructUtils.test_singleton_array_constructor+   s1    
 ]].
 F
 
 
s   	,
:c                 4    U" S5      R                   S:X  d   eg)a  
This test is for backwards compatibility post scipy 1.13.
The behavior observed here is what is to be expected
with the older matrix classes. This test comes with the
exception of dok_matrix, which was not working pre scipy1.12
(unlike the rest of these).
r      rF   Nshaper@   s     r0   !test_singleton_matrix_constructor4TestConstructUtils.test_singleton_matrix_constructor9   s     1v||v%%%r2   c                 p   [        / SQ/5      n[        / SQ/ SQ/5      n[        / SQ/ SQ/ SQ/5      n/ nUR                  USSSS//45        UR                  US/SSS//45        UR                  US/SSS/S//45        UR                  US/SSSS//45        UR                  US/SSSS//45        UR                  US/SSSS//45        UR                  US/SSSS/SS//45        UR                  US/SSSS/SS//45        UR                  US/SSSS/SS//45        UR                  US/SS	/ S
Q/ SQ/ SQ/45        UR                  US/SS	/ SQ/ SQ/ SQ/45        UR                  US/SS/ SQ/ SQ/ SQ/45        UR                  USS/SS/ SQ/ SQ/ SQ/45        UR                  USS/SS	/ SQ/ SQ/ SQ/45        UR                  USS/SS/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/45        UR                  U/ S QSS/ S!Q/ S"Q/ S#Q/ S$Q/ S%Q/ SQ/45        UR                  U/ S&QSS/ S'Q/ S(Q/ S)Q/ S*Q/ S+Q/ S,Q/45        UR                  U/ S-Q[        US   5      [        US   5      / S.Q/ S/Q/ S0Q/ S1Q/ SQ/45        U H  u  pVpxn	[        US   5      U:X  a3  Xx:X  a.  [        [        R
                  " XV5      R                  5       U	5        [        [        R
                  " XVXx5      R                  5       U	5        [        [        R
                  " XVXx45      R                  5       U	5        M     g )2NrF                        	   
                  r   rF   rM   rN   rO   rF   r   r   r   r   rM   r   r   r   r   rN   r   )r   r   r   rO   rP   r   r   rN   r   r   )r   r   r   rO   r   )r   r   r   r   rP   )rF   r   rT   r   rM   r   r   r   rN   rR   r   r   r   rF   rS   r   r   r   rM   rT   r   rR   )r   r   rN   r   r   r   )r   r   r   rO   r   r   )r   r   r   r   rP   r   )rR   r   r   r   r   r   r   rS   r   r   r   r   r   r   rT   r   r   r   r]   r   rF   )rR   rY   r   r   r   r   )rF   rS   rZ   r   r   r   )r   rM   rT   r[   r   r   )r   r   rN   rU   r\   r   )r   r   r   rO   rV   r   rM   r]   )r   r   rT   r   r   )rX   r   r   rU   r   )r   rY   r   r   rV   r   r   rZ   r   r   rF   r   r   r[   r   r   rM   r   r   r\   )r]   rF   rM   )r   rS   rZ   r   r   )rF   r   rT   r[   r   )r   rM   r   rU   r\   )r   r   rN   r   rV   )r   appendlenr   r(   spdiagstoarray)
rA   diags1diags2diags3casesdor)   r*   results
             r0   test_spdiagsTestConstructUtils.test_spdiagsG   sk   ()(* +()+ , faAu-.fqc1a1#/0fqc1a1#qc34fqc1a1Q%12fqc1a1Q%12fbT1a1Q%12fqc1a1Q%178fbT1a1Q%178fqc1a1Q%178fqc1a)Ii)HIJfqc1a)Ii)HIJfqc1a+k+)NOPfqeQGGG+DEFfr!faYy,KLMfqfa].;.;.;.;.;-= > 	? 	fh1/A0B0B0B0B0B/D E 	F 	fiA1A1@1@1@1@0B C 	D 	fj#fQi.#fQi.''''&	() 	* #(A!1Q4yA~!&Y..q4<<>G**16>>@&I**1!8@@BFK	 #(r2   c                    [        / SQ5      n[        / SQ5      n[        / SQ5      n/ nUR                  US S SSS//45        UR                  US S /S/SS//45        UR                  US S /S/SS/S//45        UR                  US S /S/SSS//45        UR                  US S /S/SSS//45        UR                  US S	 /S/S
SS/SS	//45        UR                  US S /S/S
SS/SS//45        UR                  US S /S/S/ SQ/ SQ/ SQ/45        UR                  US S /S/S/ SQ/ SQ/ SQ/45        UR                  US S /S/S/ SQ/ SQ/ SQ/45        UR                  US S	 /S/S/ SQ/ SQ/ SQ/45        UR                  US S /S/S/ SQ/ SQ/ SQ/45        UR                  US S /S/S/ SQ/ SQ/ SQ/45        UR                  US S /S	/S/ SQ/ SQ/ SQ/45        UR                  US S	 /S/S/ S Q/ S!Q/ SQ/45        UR                  US S /S"/S/ S#Q/ SQ/ SQ/45        UR                  US S /S$/S%/ S&Q/ S&Q/ S&Q/ S&Q/ S'Q/45        UR                  US S	 /S(/S%/ S&Q/ S&Q/ S&Q/ S'Q/ S)Q/45        UR                  US S /S/S%/ S&Q/ S&Q/ S'Q/ S)Q/ S*Q/45        UR                  US S /S/S%/ S&Q/ S'Q/ S)Q/ S*Q/ S&Q/45        UR                  US S /S/S%/ S'Q/ S)Q/ S*Q/ S&Q/ S&Q/45        UR                  US S	 /S/S%/ S+Q/ S,Q/ S&Q/ S&Q/ S&Q/45        UR                  US S /S	/S%/ S-Q/ S&Q/ S&Q/ S&Q/ S&Q/45        UR                  US S US S /SS	/S./ S/Q/ S)Q/ S*Q/45        UR                  US S	 US S /SS/S/ S0Q/ S1Q/ S2Q/45        UR                  US S" US S /S	S(/S3/ S4Q/ S5Q/ S6Q/ S7Q/ S8Q/ S9Q/45        UR                  US S" X#S S" // S:QS;/ S<Q/ S=Q/ S>Q/ S?Q/ S@Q/45        UR                  US S	 US S U// SAQSB/ SCQ/ SDQ/ SEQ/ SFQ/ SGQ/ SHQ/45        UR                  U/S/SS//45        UR                  US S U/SS	/S./ S/Q/ S)Q/ S*Q/45        UR                  [        R                   " / SIQ/ SJQ/5      SS/S./ S'Q/ SKQ/ SLQ/45        UR                  / SMQ/ SNQS./ SOQ/ SMQ/ SPQ/45        U H  u  pVpxU< SQU< SQU< SQU< 3n	[        [        R
                  " XVUSR9R                  5       XSS9  US   US   :X  d  MP  [        US   ST5      (       d  Mf  [        US   5      [        U5      ::  d  M  [        [        R
                  " XVSU9R                  5       UU	SS9  M     g )VNrL   rQ   rW   rF   r   rE   rM   rF   rF   rM   rM   rM   rM   r]   rN   )rN   rO   r^   r_   r`   )r   rF   r   r   )r   r   rM   r   )r   r   r   rN   rN   rP   )r   r   r   r   r   )rF   r   r   r   r   )r   rM   r   r   r   ra   )r   rF   r   r   r   )r   r   rM   r   r   )r   r   r   rN   r   )r   r   rF   r   r   )r   r   r   rM   r   )r   r   r   r   rN   )r   r   r   rF   r   )r   r   r   r   rM   rO   )r   r   r   r   rF   rl   )rP   rN   r   r   r   rF   r   r   rg   rb   rc   r   rF   r   )r   r   rM   r   r   rF   rN   rN   )rF   r   rR   rd   re   rf   )rR   rR   )r   r   rF   r   r   r   )r   r   r   rM   r   r   )r   r   r   r   rN   r   )rR   r   r   r   r   rO   rh   ri   rj   rP   rP   )rR   rX   r   r   r   )rF   rS   rY   r   r   )r   rM   rT   rZ   r   )r   r   rN   rU   r[   )r   r   r   rO   rV   rk   rR   rP   )r   r   rR   r   r   )rX   r   r   rS   r   )r   rY   r   r   rT   rm   rn   ro   rF   rM   rN   )rO   rP   rR   )rO   rM   r   )r   rP   rN   )rF   r   rF   )rF   r   r]   )r   rF   r   )r   rF   r    offsetsrH   )err_msg__len__r   )
r   rp   r$   r   r(   diagsrs   hasattrrq   max)
rA   abcrw   rx   ry   rH   rz   r   s
             r0   
test_diagsTestConstructUtils.test_diags   s!   /""#&'aeQ!./q!ugsFaSE23q!ugsFaS!I67q!ugsFaUG45q!ugsFaUG45q!ugsFaUAa5M:;q!ugrdFaUAa5M:;q!ugsFYy,KLMq!ugsFYy,KLMq!ugtVk+k-RSTq!ugtVk+k-RSTq!ugsF[[,QRSq!ugsF[[,QRSq!ugsF[[,QRSq!ugsF[[,QRSq!ugsF[[,QRSq!ugtVggggg-VWXq!ugtVggggg-VWXq!ugtVggggg-VWXq!ugtVggggg-VWXq!ugsFWWWWW,UVWq!ugsFWWWWW,UVWq!ugsFWWWWW,UVWq!uQrUmaUFWWW4MNOq!uQrUmbVVi	)5TUVq!uQrUmaVVm5B5B5B5B5B6D E 	F 	q!uQ!uox/<K<K<K<K	:M N 	O
 	q!uQrU1oy&?:J:I:I:I:I;K L 	M 	qcA3!./q!uQi!AIy0QRSHHi+,rF	9-	
 	 	h&:4>4>3@ A 	B $)A%Qqe1UIQvj9GUCKKM2 aE!H$AaD),,!IU+Y__Q:BBDf%,. $)r2   c                     [        / SQ5      n[        [        R                  " U5      R	                  5       [
        R                  " U5      5        g )NrL   )r   r   r(   r   rs   r$   diagrA   r   s     r0   test_diags_default%TestConstructUtils.test_diags_default   s0    /"Y__Q'//12771:>r2   c                 d    [        / SQ/ SQ/5      n[        [        [        R                  U5        g )NrL   )rM   rN   rO   rP   rR   )r   assert_raisesr?   r(   r   r   s     r0   test_diags_default_bad)TestConstructUtils.test_diags_default_bad   s!    ?O45j)//15r2   c           	      R   [        / SQ5      n[        / SQ5      n[        / SQ5      n/ nUR                  US S /SS45        UR                  US S X#S S // SQS	45        UR                  US S
 X2S S // SQS45        UR                  US S
 X2S S // SQS 45        UR                  / / SQS 45        UR                  S/S/S45        UR                  U/SS 45        U H$  u  pVn[        [        [        R
                  XVUS9  M&     [        [        [        R
                  S //S/S9  g )NrL   rQ   rW   r   rE   rO   rN   rj   r   rM   rk   r   rF   rO   rO   r   r   )r   rp   r   r?   r(   r   	TypeError)rA   r   r   r   rw   rx   ry   rH   s           r0   test_diags_bad!TestConstructUtils.test_diags_bad   s#   /""#&'q!ugq&)*q!uQ!uox89q!uQ!uoy&9:q!uQ!uoy$78b)T*+qcB4()qc1d^$ KA%*iooq5Q ! 	iD6(QCHr2   c                     [         R                  R                  S5      nS GHM  nSUS-  -   UR                  SS5      -   n[         R                  " U* S-   US-
  5      nUR                  U5        US U nU Vs/ s H  oQR                  U[        U5      -
  5      PM!     nn[        R                  " XdS9n[        [        Xd5       VV	s/ s H  u  p[         R                  " X5      PM     sn	n5      n
[        UR                  5       U
5        [        U5      S:X  d  M  [        R                  " US   US   S9n[         R                  " US   US   5      n
[        UR                  5       U
5        GMP     g s  snf s  sn	nf )Ni  )rF   rM   rN   rO   rP   rV   rF   rM   r   rV   r   )r$   r%   RandomStaterandintarangeshuffler   absr(   r   sumzipr   r   rs   rq   )rA   r.   n_diagsr*   r   q	diagonalsmatxj	dense_mats              r0   test_diags_vs_diag%TestConstructUtils.test_diags_vs_diag   s4    ii##D)*GGQJQ!33Aii1ac*GKK hw'G7>?w!!c!f*-wI?//)=Cs97NO7NtqRWWQ]7NOPI*3;;=)D7|q ooilGAJGGGIaL'!*=	.s{{}iH# + @ Ps   9&E5"E:c                     [         R                  " S/S/S[        S9n[        UR                  [        5        [        UR                  5       SS/SS//5        g )Ng@r   r   )r   rH   r-   rM   )r(   r   intr   r-   rs   rA   r   s     r0   test_diags_dtype#TestConstructUtils.test_diags_dtype  sE    OOSEA3fCHQWWc"QYY[Aq6Aq6"23r2   c           	          [        [        S5      5      n[        SS5       HR  n[        [        R                  " XS9R                  5       [        R                  " U/U/S9R                  5       5        MT     g )NrP   r   rR   r   )listranger   r(   r   rs   )rA   rx   ks      r0   test_diags_one_diagonal*TestConstructUtils.test_diags_one_diagonal  sW    qNr1A6>>@"!qc:BBDF r2   c                 \    [         R                  " / 5      n[        UR                  S5        g )Nr   r   )r(   r   r   rH   r   s     r0   test_diags_empty#TestConstructUtils.test_diags_empty  s    OOBQWWf%r2   identityc                    [        U" S5      R                  5       S//5        [        U" S5      R                  5       SS/SS//5        U" SSSS9n[        UR                  [        R                  " S5      5        [        UR                  S5        [
         HC  nU" SUS9n[        UR                  U5        [        UR                  5       / S	Q/ S
Q/ SQ/5        ME     g NrF   rM   r   rN   int8r   )r-   r,   r,   r   r   r   r   rs   r-   r$   r,   sparse_formats)rA   r   Ifmts       r0   test_identity TestConstructUtils.test_identity  s    Xa[((*aSE2Xa[((*aUAa5M:QfU3QWWbhhv./QXXu%!C3'A3'www&?@ "r2   eyec                 x   [        U" SS5      R                  5       S//5        [        U" SS5      R                  5       / SQ/ SQ/5        [        U" SS5      R                  5       SS/SS/SS//5        [        U" SS5      R                  5       / SQ/ SQ/ SQ/5        [        U" SSSS	9R                  [        R                  " S5      5        S
 H  nS
 H  n[	        SS5       H  nUS:  a  XC:  d  US:  a:  [        U5      U:  a+  [        R                  " [        SS9   U" X#US9  S S S 5        MN  [        U" X#US9R                  5       [        R                  " X#US95        X#:X  d  M  [        U" X$S9R                  5       [        R                  " X#US95        M     M     M     g ! , (       d  f       M  = f)NrF   rM   rN   r   r   r   r   int16r-   r   r   rR   zOffset.*out of boundsr<   r   )
r   rs   r-   r$   r   r   r>   r   r?   r   )rA   r   r)   r*   r   s        r0   test_eyeTestConstructUtils.test_eye   su   S1X%%'1#/S1X%%'''):;S1X%%'1Q%1qe)<=S1X%%'''')BCS17+11288G3DEAr!A A!%QUs1vz#]]&.E  N  %N224FF11- 6( #A 3 3 5 "qq 1) %   s   !F*	*
F9c                    [        U" S5      R                  5       S//5        [        U" S5      R                  5       SS/SS//5        U" SSSS9n[        UR                  [        R                  " S5      5        [        UR                  S5        [
         HC  nU" SUS9n[        UR                  U5        [        UR                  5       / S	Q/ S
Q/ SQ/5        ME     g r   r   )rA   r   r   r   s       r0   test_eye_oneTestConstructUtils.test_eye_oneD  s    SV^^%u-SV^^%1qe}5.QWWbhhv./QXXu%!CAc"A3'www&?@ "r2   c                     [        [        R                  " S5      [        5      (       d   e[        [        R                  " S5      [        5      (       a   eg )NrN   )
isinstancer(   	eye_arrayr   r   rA   s    r0   test_eye_array_vs_matrix+TestConstructUtils.test_eye_array_vs_matrixR  s?    )--a0'::::immA.88888r2   c           	         / nUR                  [        S//5      5        UR                  [        S//5      5        UR                  [        S//5      5        UR                  [        S//5      5        UR                  [        S/S//5      5        UR                  [        SS//5      5        UR                  [        SS/SS//5      5        UR                  [        SS/SS//5      5        UR                  [        / S	Q/ S
Q/5      5        UR                  [        SS/SS/SS//5      5        UR                  [        / SQ/ SQ/ SQ/5      5        UR                  [        / SQ/5      5        UR                  [        / SQ/ SQ/5      5        U H  n[        U5      nU H  n[        U5      n[        R                  " X$5      n[
        SS  H_  n[        R                  " X5US9n[        UR                  U5        [        UR                  5       U5        [        U[        5      (       a  M_   e   M     M     US   nUS   n[        U5      n[        U5      n[        R                  " X$5      n[
         H_  n[        R                  " X5US9n[        UR                  U5        [        UR                  5       U5        [        U[        5      (       a  M_   e   [        R                  " [        U5      [        U5      WS9n[        UR                  U5        [        UR                  5       U5        [        U[        5      (       d   eg )Nr   r]   rO   rV   rF   rM   rN   rP   r   rM   irT   r   r[   rR   )rP   rO   rO   r   )rR   r   rT   )r   rF   r   rM   r   rP   rT   )      ?g      ?r   g      
@)r   g      @r   r   r   rg   )rp   r   r   r$   kronr   r(   r   r,   r   rs   r   r   r
   r   )	rA   rw   r   car   cbexpectedr   rz   s	            r0   	test_kronTestConstructUtils.test_kronV  s   UQC5\"URD6]#UQC5\"URD6]#UQC9%&UQqE7^$UQqE1Q%=)*UQqE1Q%=)*UHX./0UQqE1Q%1./0UGGG456UO,-.U.{;<= A1Bq\771=)!A.C&^^B3?F 4&v~~'7B%fg6666	 /   "I"Iq\q\771=!C^^B37F,v~~/:fg....	 " 
1z!}SIV]]C(6>>+X6&(++++r2   c                    [         R                  " [        SS9   [        R                  " S/S//[        SS/5      5        S S S 5        [         R                  " [        SS9   [        R                  " [        SS/5      S/S//5        S S S 5        [        R                  " S/S//SS/5        g ! , (       d  f       Nt= f! , (       d  f       N== f)Nrequires 2D inputr<   r   rF   )r>   r   r?   r(   r   r   r   s    r0   test_kron_ndim_exceptions,TestConstructUtils.test_kron_ndim_exceptions  s    ]]:-@ANNQC!:y!Q'89 B]]:-@ANN9aV,sQCj9 B 	aSzAq6* BAAAs   'B/"'C /
B= 
Cc                     Sn[         R                  " S/SU4US-
  S9n[         R                  " S/US4SU-
  S9n[         R                  " X"5        [         R                  " X35        g )Ni   rF   )rH   r   )r(   diags_arrayr   )rA   r*   r   r   s       r0   test_kron_large"TestConstructUtils.test_kron_large  s[    !!1#aVQqSA!!1#aVQqSAqqr2   c           
         / nUR                  [        S//5      5        UR                  [        S//5      5        UR                  [        S//5      5        UR                  [        S//5      5        UR                  [        SS/SS//5      5        UR                  [        SS/SS//5      5        UR                  [        / S	Q/ S
Q/ SQ/5      5        UR                  [        / SQ/ SQ/ SQ/5      5        U H  nU H  n[        R                  " [	        U5      [	        U5      5      R                  5       n[        R                  " [        R                  " UR                  S   5      U5      [        R                  " U[        R                  " UR                  S   5      5      -   n[        XE5        M     M     [        R                  " [        W5      [        W5      5      R                  5       n[        UW5        g )Nr   r]   rO   rV   rF   rM   rN   rP   r   r   )r   rN   r   r   )r   rP   r]   )rO   r   rT   )rp   r   r(   kronsumr   rs   r$   r   r   rH   r   r
   )rA   rw   r   r   rz   r   s         r0   test_kronsumTestConstructUtils.test_kronsum  sv   UQC5\"URD6]#UQC5\"URD6]#UQqE1Q%=)*UQqE1Q%=)*UHXg678UGHX678 A"**9Q<1FNNPGGBFF1771:$6: gga
);<="64	   "":a=*Q-@HHJ68,r2   c                    [         R                  " [        SS9   [        R                  " S/S//[        SS/5      5        S S S 5        [         R                  " [        SS9   [        R                  " [        SS/5      S/S//5        S S S 5        [        R                  " SS/SS//S/5        g ! , (       d  f       Nu= f! , (       d  f       N>= f)Nr   r<   r   rF   rM   )r>   r   r?   r(   r   r   r   s    r0   test_kronsum_ndim_exceptions/TestConstructUtils.test_kronsum_ndim_exceptions  s    ]]:-@AsQCj)QF*;< B]]:-@AiA/1#s< B 	Aq6Aq6*QC0 BAAAs   'B0"'C0
B>
Ccoo_clsc                    U" SS/SS//5      nU" SS//5      n[        SS/SS/SS//5      n[        [        R                  " X#/5      R	                  5       U5        [        [        R                  " X#/[
        R                  S9R                  [
        R                  5        [        [        R                  " UR                  5       UR                  5       /5      R	                  5       U5        [        [        R                  " UR                  5       UR                  5       /5      R	                  5       U5        [        R                  " UR                  5       UR                  5       /S[
        R                  S	9n[        UR                  [
        R                  5        [        UR                  R                  [
        R                  5        [        UR                  R                  [
        R                  5        [        [        R                  " UR                  5       UR                  5       /5      R	                  5       U5        [        R                  " UR                  5       UR                  5       /S
[
        R                  S	9n[        UR                  [
        R                  5        [        UR                  R                  [
        R                  5        [        UR                  R                  [
        R                  5        g )NrF   rM   rN   rO   rP   rR   r   r   )r,   r-   r   )r   r   r(   vstackrs   r$   float32r-   todoktocsrindicesint32indptrtocsc)rA   r   ABr   rz   s         r0   test_vstackTestConstructUtils.test_vstack  s
   aUAa5M"aUG1a&a&a&" # 	Y%%qf-557BY%%qfBJJ?EEZZ	! 	Y%%qwwy!'')&<=EEGRY%%qwwy!'')&<=EEG	!!1779aggi"8).bjjBV\\2::.V^^))2884V]](("((3Y%%qwwy!'')&<=EEG	!!1779aggi"8).bjjBV\\2::.V^^))2884V]](("((3r2   c                 .   [        / SQ/ SQ/ SQ/5      nUR                  R                  [        R                  5      Ul        UR
                  R                  [        R                  5      Ul        [        R                  " X/5      R                  R                  [        R                  :X  d   e[        R                  " X/5      R                  R                  [        R                  :X  d   e[        / SQ/ SQ/ SQ/5      nUR                  R                  [        R                  5      Ul        UR
                  R                  [        R                  5      Ul        [        R                  " X/5      R                  R                  [        R                  :X  d   e[        R                  " X/5      R                  R                  [        R                  :X  d   e[        / SQ/ SQ/ SQ/5      n[        S UR                   5       5      Ul        [        R                  " X/5      R                  S   R                  [        R                  :X  d   e[        R                  " X/5      R                  S   R                  [        R                  :X  d   eg )Nr   r   c              3   ^   #    U  H#  oR                  [        R                  5      v   M%     g 7fr#   astyper$   int64.0cos     r0   	<genexpr>ITestConstructUtils.test_vstack_maintain64bit_idx_dtype.<locals>.<genexpr>       @x288,,x   +-r   )r   r  r  r$   r  r  r(   r   r-   hstackr   r   tuplecoordsrA   Xs     r0   #test_vstack_maintain64bit_idx_dtype6TestConstructUtils.test_vstack_maintain64bit_idx_dtype  s   y)Y7888??288,II$$RXX.	'..44@@@'..44@@@y)Y7888??288,II$$RXX.	'..44@@@'..44@@@y)Y78@qxx@@'..q177288CCC'..q177288CCCr2   c                    SS/SS//nSS//n[        [        R                  " [        U5      [        U5      /5      [        5      (       d   e[        [        R                  " [        U5      [        U5      /5      [        5      (       d   e[        [        R                  " [        U5      [        U5      /5      [        5      (       d   e[        [        R                  " [        U5      [        U5      /5      [        5      (       d   eg NrF   rM   rN   rO   rP   rR   )r   r(   r   r   r   r   r   rA   r  r  s      r0   test_vstack_matrix_or_array.TestConstructUtils.test_vstack_matrix_or_array  s    UAa5MUG)**IaL)A,+GH'RRRR)**IaL*Q-+HI7SSSS)**JqM9Q<+HI7SSSS)**JqM:a=+IJHUUUUr2   c                    [        / SQ/ SQ/5      n[        / SQ5      n[        / SQ5      n[        R                  " U[        R
                  " / SQ5      /5      R                  S:X  d   e[        R                  " U[        R
                  " S//5      /5      R                  S:X  d   e[        R                  " X"/5      R                  S:X  d   e[        R                  " X"/5      R                  S:X  d   e[        R                  " X/5      R                  S	:X  d   e[        R                  " X"/5      R                  S:X  d   e[        R                  " X#/5      R                  S:X  d   e[        R                  " X/5      R                  S:X  d   e[        R                  " X#/5      R                  S:X  d   e[        R                  " [        S
S9   [        R                  " U[        R
                  " SS/5      /5        S S S 5        [        R                  " [        SS9   [        R                  " U[        R
                  " SS/5      /5        S S S 5        g ! , (       d  f       N_= f! , (       d  f       g = f)Nr   r   r   r   r   )rF   rO   )rF   rR   )rM   rN   )rM   rR   zincompatible row dimensionsr<   zincompatible column dimensions)r   r   r(   r   r$   r   rH   r  r>   r   r?   )rA   arrarr1darr1dcoos       r0   test_vstack_1d_with_2d)TestConstructUtils.test_vstack_1d_with_2d  s   I./)$Y'bhhy&9 :;AAVKKK1# 89??6III/55???/55??? 
+11V;;;/55??? 1288FBBB066&@@@ 1288FBBB]]:-JKc288QF#345 L]]:-MNc288QF#345 ON LKNNs   /I"/I+
I(+
I9c                    U" SS/SS//5      nU" S/S//5      n[        / SQ/ SQ/5      n[        [        R                  " X#/5      R	                  5       U5        [        [        R                  " X#/[
        R                  S	9R                  [
        R                  5        [        [        R                  " UR                  5       UR                  5       /5      R	                  5       U5        [        [        R                  " UR                  5       UR                  5       /5      R	                  5       U5        [        [        R                  " UR                  5       UR                  5       /[
        R                  S	9R                  [
        R                  5        [        [        R                  " UR                  5       UR                  5       /5      R	                  5       U5        [        [        R                  " UR                  5       UR                  5       /[
        R                  S	9R                  [
        R                  5        g )
NrF   rM   rN   rO   rP   rR   rF   rM   rP   rN   rO   rR   r   )r   r   r(   r  rs   r$   r   r-   r   r  r  )rA   r   r  r  r   s        r0   test_hstackTestConstructUtils.test_hstack  s   aUAa5M"aS!I)#% &Y%%qf-557BY%%qfBJJ?EEZZ	! 	Y%%qwwy!'')&<=EEGRY%%qwwy!'')&<=EEG	Y%%qwwy!'')&<,.JJ88=ZZ	! 	Y%%qwwy!'')&<=EEG	Y%%qwwy!'')&<,.JJ88=ZZ	!r2   c                    SS/SS//nS/S//n[        [        R                  " [        U5      [        U5      /5      [        5      (       d   e[        [        R                  " [        U5      [        U5      /5      [        5      (       d   e[        [        R                  " [        U5      [        U5      /5      [        5      (       d   e[        [        R                  " [        U5      [        U5      /5      [        5      (       d   eg r  )r   r(   r  r   r   r   r   r  s      r0   test_hstack_matrix_or_array.TestConstructUtils.test_hstack_matrix_or_array  s    UAa5MS!I)**IaL)A,+GH'RRRR)**IaL*Q-+HI7SSSS)**JqM9Q<+HI7SSSS)**JqM:a=+IJHUUUUr2   block_arrayc                    [        SS/SS//5      n[        S/S//5      n[        S//5      n[        S5      n[        / S	Q/ S
Q/ SQ/5      n[        U" X#/S U//5      R                  5       U5        [	        S[
        R                  S9n[        U" UR                  5       UR                  5       /XtR                  5       //5      R                  5       U5        [        U" UR                  5       UR                  5       /UR                  5       UR                  5       //5      R                  5       U5        [        / SQ/ SQ/ SQ/5      n[        U" US /S U//5      R                  5       U5        [        U" UR                  5       UR                  R                  5       /XtR                  5       //5      R                  5       U5        [        U" UR                  5       UR                  R                  5       /UR                  5       UR                  5       //5      R                  5       U5        [	        S[
        R                  S9n[        SS/SS/SS//5      n[        U" S U/US //5      R                  5       U5        [        U" UR                  R                  5       UR                  5       /UR                  5       U//5      R                  5       U5        [        U" UR                  R                  5       UR                  5       /UR                  5       UR                  5       //5      R                  5       U5        [
        R                  " S5      n[        U" S S //5      R                  5       U5        [        U" S U/US //5      R                  5       U5        [        S//5      n[        U" S U/US //5      R                  5       U5        [        [        5       n	U" U/U//5        S S S 5        W	R                  S5        [        [        5       n	U" UR                  5       /UR                  5       //5        S S S 5        U	R                  S5        [        [        5       n	U" UR                  5       /UR                  5       //5        S S S 5        U	R                  S5        [        [        5       n	U" X$//5        S S S 5        U	R                  S5        [        [        5       n	U" UR                  5       UR                  5       //5        S S S 5        U	R                  S5        [        [        5       n	U" UR                  5       UR                  5       //5        S S S 5        U	R                  S5        g ! , (       d  f       GN= f! , (       d  f       GNW= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nx= f)NrF   rM   rN   rO   rP   rR   rS   r   r)  r*  )r   r   rS   r   r   )rF   rM   r   )rN   rO   r   rE   r   z.Got blocks\[1,0\]\.shape\[1\] == 1, expected 2z"incompatible dimensions for axis 1z4Mismatching dimensions along axis 1: ({1, 2}|{2, 1})z.Got blocks\[0,1\]\.shape\[0\] == 1, expected 2z4Mismatching dimensions along axis 0: ({1, 2}|{2, 1})z"incompatible dimensions for axis 0)r   r   r   rs   r   r$   r  r  r  Temptyr   r?   r=   )
rA   r0  r  r  CDr   EZexcinfos
             r0   test_block_creation&TestConstructUtils.test_block_creation&  s    1v1v&'sA3i sef)##% & 	[1&4)!45==?JfBHH-[1779aggi"8#$ggi."2 33:79	 	[1779aggi"8#$779aggi"8": ;;B79	 )##% & 	[1d)dAY!78@@BHM[1779acciik":#$ggi."2 33:79	 	[1779acciik":#$779aggi"8": ;;B79	 fBHH-1a&a&a&" # 	[4)aY!78@@BHM[13399;	":#$779a."2 33:79	 	[13399;	":#$779aggi"8": ;;B79	 88F#[4,088:HE[4)aY!78@@B	 1#<[4)aY!78@@B	 :&'!qc
# 'GH:&'!'')qwwyk23 ';<:&'!'')qwwyk23 'MN:&'!! 'GH:&'!'')QWWY/01 'MN:&'!'')QWWY/01 ';<- '& '& '& '& '& '&sH   'V)V-)V'>V91(W
(W
V
V$'
V69
W

W
W)c                 ,   [         R                  nSS/SS//S/S//p2[        U5      [        U5      pT[        U" S U/US //SS9[        5      (       d   e[        U" S U/US //SS9[        5      (       d   e[        U" XE//SS9[        5      (       d   eg )	NrF   rM   rN   rO   rS   rP   r   r   )r(   r0  r
   r   r   )rA   blockFlGlFmGms         r0   test_block_return_type)TestConstructUtils.test_block_return_typet  s    %%
 a&!QA3*BBBB%$b$Z 8GQQQQ%$b$Z 8GQQQQ%"
597CCCCr2   c                    [         R                  nSS/SS//S/S//p2[        U5      [        U5      pT[        U5      [        U5      pv[	        U" Xg//SS9[
        5      (       d   e[	        U" XE//SS9[        5      (       d   e[	        U" S	U/US	//SS9[
        5      (       d   e[	        U" S	U/US	//SS9[
        5      (       d   e[	        U" S	U/US	//SS9[        5      (       d   e[	        U" S	U/US	//SS9[        5      (       d   e[	        U" Xw//SS9[
        5      (       d   e[	        U" XW//SS9[
        5      (       d   e[	        U" Xu//SS9[
        5      (       d   e[	        U" XU//SS9[        5      (       d   e[	        U" Xd//SS9[
        5      (       d   e[	        U" XD//SS9[        5      (       d   e[	        U" UR                  5       UR                  5       //S
S9[
        5      (       d   e[	        U" UR                  5       UR                  5       //S
S9[        5      (       d   e[	        U" UR                  5       UR                  5       //SS9[
        5      (       d   e[	        U" UR                  5       UR                  5       //SS9[        5      (       d   e[	        U" X7//SS9[
        5      (       d   e[	        U" UR                  5       U//SS9[
        5      (       d   e[	        U" UR                  5       U//SS9[        5      (       d   e[	        U" XU//S
S9[        5      (       d   eg	)z2This can be removed after sparse matrix is removedrF   rM   rN   rO   rS   rP   r   r   Nr   )r(   bmatr
   r   r   r   r   r  )rA   rD  r=  r>  r?  r@  FaGas           r0   test_bmat_return_type(TestConstructUtils.test_bmat_return_type  s   ~~a&!QA3*BBBB2	"B$z%8'BBBB$z%8(CCCC$r
RJ7FPPPP$r
RJ7FPPPP$r
RJ7FQQQQ$r
RJ7FQQQQ $z%8'BBBB$z%8'BBBB$z%8'BBBB$z%8(CCCC$z%8'BBBB$z%8(CCCC $RXXZ 89%H'RRRR$RXXZ 89%H(SSSS$RXXZ 89%H'RRRR$RXXZ 89%H(SSSS $z%8'BBBB$R 01%@'JJJJ$R 01%@(KKKK$z%8(CCCCr2   z!Can't create large array for testc           	         [        S5        Sn[        [        R                  " X4[        S95      nUR                  5       n[        R                  " X#4SSS9n[        [        R                  " [        R                  " [        R                  " UR                  5      U5      5      5        [        UR                  R                  [        R                   5        [        UR                  R                  [        R                   5        g)z5test for indptr overflow when concatenating matrices i0u  i  r   r   F)axisreturn_spmatrixN)r	   r   r$   onesboolcopyr(   _compressed_sparse_stackr   allequaldiffr  r   r  r-   r  )rA   r*   r  r  r4  s        r0   test_concatenate_int32_overflow2TestConstructUtils.test_concatenate_int32_overflow  s    
 	% bggqfD12FFH..vA?DF 	rxx 11567QYY__bhh/QXX^^RXX.r2   c                 P   [        SS/SS//5      n[        S/S//5      n[        S//5      n[        / SQ/ S	Q/ S
Q/ SQ/ SQ/5      n[        R                  " XU45      n[	        UR                  5       U5        UR                  S   R                  [        R                  :X  d   eg)zbasic test for block_diag rF   rM   rN   rO   rP   rR   rS   )rF   rM   r   r   )rN   rO   r   r   )r   r   rP   r   )r   r   rR   r   )r   r   r   rS   r   N)
r   r   r(   
block_diagr   rs   r  r-   r$   r  )rA   r  r  r4  r   ABCs         r0   test_block_diag_basic(TestConstructUtils.test_block_diag_basic  s    !uaUm$sA3i se,&&&&	( ) ""A!9-S[[]H-zz!}""bhh...r2   c                     [        / SQ/ SQ/ SQ/5      n[        S UR                   5       5      Ul        [        R                  " X/5      R                  S   R
                  [        R                  :X  d   eg )Nr   r   c              3   ^   #    U  H#  oR                  [        R                  5      v   M%     g 7fr#   r  r  s     r0   r  ?TestConstructUtils.test_block_diag_idx_dtype.<locals>.<genexpr>  r  r  r   )r   r  r  r(   rV  r-   r$   r  r  s     r0   test_block_diag_idx_dtype,TestConstructUtils.test_block_diag_idx_dtype  sY    y)Y78@qxx@@##QF+2215;;rxxGGGr2   c                    [        [        R                  " SS/S/5      R                  5       / SQ/ SQ/5        [	        / SQ5      n[	        SS/5      n[        [        R                  " X/5      R                  5       / SQ/ S	Q/5        g
)z(block_diag with scalar and 1d arguments rM   rN   rO   )rM   rN   r   )r   r   rO   )rF   r   rN   r   )rF   r   rN   r   r   )r   r   r   r   rO   N)r   r(   rV  rs   r   r  s      r0   test_block_diag_scalar_1d_args1TestConstructUtils.test_block_diag_scalar_1d_args  st     	9//!A
;CCE%y1	3 gqe9//7??A+_=	?r2   c                    [        [        R                  " SS//5      R                  5       [	        SS//5      5        [        [        R                  " SS///5      R                  5       [	        SS//5      5        [        [        R                  " S/S///5      R                  5       [	        S/S//5      5        [        [        R                  " S/5      R                  5       [	        S//5      5        g)zblock_diag with one matrix rF   r   N)r   r(   rV  rs   r   r   s    r0   test_block_diag_1$TestConstructUtils.test_block_diag_1  s    Y))Aq6(3;;=QF8_	&Y))QF8*5==?QF8_	&Y))QC!:,7??AQC!:&	( 	Y))1#.668QC5\	#r2   c                 ~   [        / SQ/SS9n[        SS//SS9n[        [        R                  " X/5      R	                  5       [        / SQ/ SQ/5      5        [        S	/S
/S//SS9n[        S/S//SS9n[        [        R                  " X/5      R	                  5       [        S	S/S
S/SS/SS/SS//5      5        g)zblock_diag with sparse arrays r   )rF   rN   rG   rO   rP   r   )rF   rM   rN   r   r   )r   r   r   rO   rP   rF   rM   rN   )rN   rF   r~   r   N)r   r   r(   rV  rs   r   r  s      r0   test_block_diag_sparse_arrays0TestConstructUtils.test_block_diag_sparse_arrays  s     yk01vhf-Y))1&199;O_=>	@ sQC!oV4sQCj/Y))1&199;QFQFQFQFQFCD	Fr2   c                    [        / SQ/5      [        / SQ/5      p![        [        R                  " X/5      [
        5      (       d   e[        [        R                  " X/5      [
        5      (       d   e[        [        R                  " X!/5      [
        5      (       d   e[        [        R                  " X"/5      [        5      (       d   eg )Nr   )rM   rN   rO   )r   r   r   r(   rV  r   r   r  s      r0   test_block_diag_return_type.TestConstructUtils.test_block_diag_return_type  s    )%z9+'>1)..v6@@@@)..v6@@@@)..v6@@@@)..v6AAAAr2   c                 P  ^ [         [        4 GH  m[        R                  [        R                  [        R
                  [        R                  [        R                  [        R                  [        R                  4 HN  nT" SSSUS9n[        UR                  U5        [        UR                  S5        [        UR                  S5        MP     T" SSSSS9n[        UR                  [        R                  5        T" SSS[        R                  R                  S5      S9n[!        UR"                  UR"                  5        [!        UR$                  UR$                  5        [!        UR&                  UR&                  5        S HK  nT" SSUS	9n[        UR                  [)        U[        R*                  " UR                  5      -  5      5        MM     S
 H!  nT" SSUS9n[        UR,                  U5        M#     [/        [0        U4S j5        [/        [0        U4S j5        GM     g )NrP   rV   皙?)r+   r-   )rP   rV     )r+   r.   )g        rl  r   g      ?r+   )r   r   r   r    r   c                     > T " SSS5      $ )NrP   rV   g? fs   r0   <lambda>9TestConstructUtils.test_random_sampling.<locals>.<lambda>  s    a2smr2   c                     > T " SSS5      $ )NrP   rV   grp  rq  s   r0   rs  rt    s    a2tnr2   )sprandr1   r$   r   float64
longdoubler  r  	complex64
complex128r   r-   rH   nnzr%   r&   r   datarowcolr   prodr,   r   r?   )rA   tr   x1x2r+   r   rr  s          @r0   test_random_sampling'TestConstructUtils.test_random_sampling  s|   !Ajj"**bmmhh",,GaS2QWWa(QWWg.QUUA&G 1b#40B2::.1b#299+@+@+FGBrww0rvvrvv.rvvrvv./aW-QUUC"''!''2B(B$CD 0 4aC(QXXs+ 4 *&;<*&<=5 "r2   r.   Nrm  c                 2   [        SSS[        R                  US9n[        [        R                  " [        R
                  " SUR                  5      5      5        [        [        R                  " [        R
                  " UR                  S5      5      5        g NrV      r   r+   r-   r.   r   rF   )rv  r$   rw  r   rP  
less_equalr|  rA   r.   r   s      r0   	test_randTestConstructUtils.test_rand  sZ     2r3bjjcBr}}Q/01r}}QVVQ/01r2   c                 `   [        SSS[        R                  US9n[        [        R                  " [        R
                  " UR                  S5      5      5        [        [        R                  " [        R
                  " SUR                  5      5      5        [        SSS[        R                  US9n[        [        R                  " [        R
                  " UR                  S5      5      5        [        [        R                  " [        R
                  " SUR                  5      5      5        g r  )r1   r$   rw  r   anylessr|  r6   r  s      r0   
test_randnTestConstructUtils.test_randn  s    
 RS

Drwwqvvq)*+rwwq!&&)*+2r3bjjcJrwwqvvq)*+rwwq!&&)*+r2   c                     [         R                  " SSSS9  [         R                  " SSS9  [         R                  " SSS9  [         R                  " SSS9  g )NrV   rx   r   rV   rV   rV   rV   rV   rV   rV   rV   rV   rV   )r(   r%   r5   r   s    r0   test_random_accept_str_dtype/TestConstructUtils.test_random_accept_str_dtype&  sG     	Rs+xs3|3733?r2   c                    [         R                  " SS[        SS9nUR                  S:X  d   e[         R                  " SS[        SS9nUR                  S:X  d   e[         R                  " SS[        SS9nUR                  S:X  d   eg )N)r   rO   g333333?r   )r+   r-   random_stater  r  r  )r(   r5   r   rH   )rA   r#  s     r0   'test_random_array_maintains_array_shape:TestConstructUtils.test_random_array_maintains_array_shape.  s    $$VSRSTyyF"""$$\3cqQyyL((($$%93c)*,yy0000r2   c                     [         R                  " S5      nUR                  S   R                  [        R
                  :X  d   eg )Nr  r   )r(   r5   r  r-   r$   r  )rA   r  s     r0   test_random_array_idx_dtype.TestConstructUtils.test_random_array_idx_dtype:  s2    ""8,xx{  BHH,,,r2   c                 @   [         R                  " SSSS9n[        UR                  5       S5        [         R                  " SSS9n[        UR                  5       S5        [        U[        5      (       d   eSn[         R                  " USS9n[        UR                  5       S5        [         R                  " S	S
S9n[        UR                  5       S5        [        U[        5      (       d   eSn[         R                  " USS9n[        UR                  5       S5        g )NrV   gx&1?rn  rZ   r  )        r  g(Rs?<i  )rV   rV   rV   rV   gk) 3?i  )r  r  r  gAy5:   )r(   r%   r   count_nonzeror5   r   r   )rA   sparse_matrixsparse_arrayrH   s       r0   Etest_random_sparse_matrix_returns_correct_number_of_non_zero_elementsXTestConstructUtils.test_random_sparse_matrix_returns_correct_number_of_non_zero_elements>  s     "((R@]00226 --hG\//1"5,0000 --eZH\//1$7 !--.>P\//1$7,0000% --eZH\//1#6r2   rp  )L__name__
__module____qualname____firstlineno__r>   markparametrizer   r   r   r   r   r   r   rB   r   r
   r   r   r   r   rI   r{   r   r   r   r   r   r   r   r   r(   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r&  r+  r.  rD  r0  r9  rA  rG  slowthread_unsafexfail_on_32bitrS  rX  r]  r`  rc  rf  ri  r  r$   r%   r&   r  r  r  r  r  r  __static_attributes__rp  r2   r0   r8   r8   )   s   [[U9i9i% 	 [[UJ
J
% &	&6LpL.\?6I&I64
F& [[Z)*<*<i>Q>Q)RSA TA [[UY]]I4G4G$HI! J!F [[UY]]I4G4G$HIA JA9.,`+-01 [[YY(?@4 A4:D&V6. [[YY(?@! A!.V [[]Y^^Y=R=R,STK= UK=Z
D"DH [[[[[[ CD/ E  // H
	?
#FB>< [[UT41F1Ft1L$MN2 O2 [[UT41F1Ft1L$MN	, O	,@
1-7r2   r8   c                     [         R                  " SS5      n [        [        R                  " U 5      R                  5       [         R                  " U 5      5        [        [        R                  " U SS9R                  5       [         R                  " U SS95        [        [        R                  " U SSS9R                  5       [         R                  " U SS9SS	2SS	24   5        [        R                  " [        S
S9   [        R                  " [         R                  " SS5      SSS9  SSS5        g! , (       d  f       g= f)z7Tests of diags_array that do not rely on diags wrapper.rF   rP   rM   r   r   r   r   NrO   z.*out of boundsr<   rG   )r$   r   r   r(   r   rs   r   r>   r   r?   r   )r   s    r0   test_diags_arrayr  W  s    99Q?Dy,,T2::<bggdmLdA.668"''$!:L dAV<DDF
2A2rr6" 
z):	;		!Q&9 
<	;	;s   =,D22
E )g{Gz?r   NN)(__doc__numpyr$   r   numpy.testingr   r   r   r   r>   r   r   scipy._lib._testutilsr	   scipy.sparser
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   scipy.sparse._constructr   rv  r   r1   r6   r8   r  rp  r2   r0   <module>r     sb    /  < <  * 33 3 3 3 3 3<
IFk7 k7\:r2   