
    -iN                        S SK r S SKrS SKrS SKJr  S SKJr  S SKJr  S SK	J
r
  S SKrS SKrS SKJr  S SKrS SKJrJrJr  S SKJrJrJrJr  S SKJr  S	rS
rSrSr Sr!S r"S r#S r$S r%S r&S r'S r(S r)S r*S r+S r,S r-S r.S r/\R`                  Rc                  S5      S 5       r2S r3S r4S  r5\R`                  Rm                  S!\5      S" 5       r7\R`                  Rm                  S!\5      S# 5       r8S$ r9S% r:S& r;S' r<S( r=\R`                  Rm                  S!\5      S) 5       r>\R`                  Rm                  S*/ S+Q5      \R`                  Rm                  S,S-S./5      \R`                  Rm                  S// S0Q5      \R`                  Rm                  S!\5      S1 5       5       5       5       r?\R`                  Rm                  S!\5      S2 5       r@S3 rA\R`                  Rm                  S!\5      S4 5       rBS5 rCg)6    N)BZ2File)	resources)BytesIO)NamedTemporaryFile)dump_svmlight_fileload_svmlight_fileload_svmlight_files)assert_allcloseassert_array_almost_equalassert_array_equalcreate_memmap_backed_data)CSR_CONTAINERSzsklearn.datasets.tests.datazsvmlight_classification.txtzsvmlight_multilabel.txtzsvmlight_invalid.txtzsvmlight_invalid_order.txtc                 <    [         R                  " [        5      U -  $ N)r   filesTEST_DATA_MODULE)filenames    ^/var/www/html/venv/lib/python3.13/site-packages/sklearn/datasets/tests/test_svmlight_format.py_svmlight_local_test_file_pathr      s    ??+,x77    c                     [        U 5      nUR                  S5       n[        U40 UD6sSSS5        $ ! , (       d  f       g= f)z?
Helper to load resource `filename` with `importlib.resources`
rbN)r   openr   )r   kwargs	data_pathfs       r   _load_svmlight_local_test_filer   "   s5     /x8I		!!.v. 
		s	   3
Ac                     [        [        5      u  pU R                  R                  S   S:X  d   eU R                  S   S:X  d   eU R                  S   S:X  d   eUR                  S   S:X  d   eS H  u  p#nXU4   U:X  a  M   e   U S   S:X  d   eU S   S:X  d   eU S	   S:X  d   eU S
   S:X  d   eU S   S:X  d   eU S==   S-  ss'   U S   S:X  d   e[	        U/ SQ5        g )Nr               )r      g      @r   
   g)r      g      ?r!            ?r!      )r$         )r      )r   r)   )r!      )r!      )r$      )r   r$   r$   r)   )r!   r$   r0      r!   r$   )r   datafileindptrshaper   Xyijvals        r   test_load_svmlight_filer>   +   s   )(3DA 88>>!!!!771:??771:771:??	c Aw#~~ T7a<<T7a<<T7a<<U8q==U8q== dGqLGT7a<< q,-r   c                     [         R                  " [        5      [        -  n [	        U 5      n [        U 5      u  p[        R                  " U [        R                  5      n [        U5      u  pE[        UR                  UR                  5        [        X%5        [        R                  " U5        g ! [        R                  " U5        f = fr   )r   r   r   r5   strr   osr   O_RDONLYr   dataclose)r   X1y1fdX2y2s         r   test_load_svmlight_file_fdrJ   N   s      01H<III	*FB	BKK	(B#B'!"''2773!")
s    8B/ /Cc                      [        [        5      n [        [        U 5      5      u  p[        U 5      u  p4[	        UR
                  UR
                  5        [	        X$5        g r   )r   r5   r   r@   r
   rC   )r   rE   rF   rH   rI   s        r   test_load_svmlight_pathlibrL   a   sB    .x8II/FB	*FBBGGRWW%Br   c                  8    [        [        SS9u  pU/ SQ:X  d   eg )NT
multilabel))r   r!   )r$    )r!   r$   )r   	multifile)r9   r:   s     r   "test_load_svmlight_file_multilabelrR   k   s    ))EDA****r   c                  Z   [        [        5      n [        [        U 5      /S-  [        R
                  S9u  pp4[        UR                  5       UR                  5       5        [        X$5        UR                  [        R
                  :X  d   eUR                  [        R
                  :X  d   e[        [        U 5      /S-  [        R                  S9u  pVpxpUR                  UR                  :X  d   eUR                  U	R                  :X  d   eU	R                  [        R                  :X  d   eg )Nr$   )dtyper0   )r   r5   r	   r@   npfloat32r   toarrayr   rT   float64)r   X_trainy_trainX_testy_testrE   rF   rH   rI   X3y3s              r   test_load_svmlight_filesr_   p   s    .x8I':	Y1BJJ($Gf w(&..*:;g.==BJJ&&&<<2::%%%0#i.1AA1ERZZXBBB88rxx88rxx88rzz!!!r   c                  j   [        [        SS9u  pU R                  R                  S   S:X  d   eU R                  S   S:X  d   eU R                  S   S:X  d   eS H  u  p#nXU4   U:X  a  M   e   [        R
                  " [        5         [        [        SS9  S S S 5        g ! , (       d  f       g = f)	N   )
n_featuresr   r   r    r!   )r#   r%   r(   r+   r.   )r   r5   r6   r7   pytestraises
ValueErrorr8   s        r   "test_load_svmlight_file_n_featuresrf      s    )(rBDA 88>>!!!!771:??771: L	cAw#~~ L 
z	"&xB? 
#	"	"s   B$$
B2c                     [        [        5      u  p[        SSS9 nUR                  5         [	        [        5      R                  S5       n[        R
                  " UR                  S5       n[        R                  " X45        S S S 5        S S S 5        [        UR                  5      u  pV[        R                  " UR                  5        S S S 5        [        U R                  5       WR                  5       5        [        UW5        [        SSS9 nUR                  5         [	        [        5      R                  S5       n[        UR                  S5       n[        R                  " X45        S S S 5        S S S 5        [        UR                  5      u  px[        R                  " UR                  5        S S S 5        [        U R                  5       WR                  5       5        [        UW5        g ! , (       d  f       GNu= f! , (       d  f       GN= f! , (       d  f       GNR= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f)Nzsklearn-testz.gz)prefixsuffixr   wbz.bz2)r   r5   r   rD   r   r   gzipnameshutilcopyfileobjr   rA   remover   rW   r   )	r9   r:   tmpr   fh_outXgzygzXbzybzs	            r   test_load_compressedrv      s   )(3DA	>%	@C		+H5::4@A388T*f""1- + A &chh/ 			#(( 
A aiik3;;=9a%	>&	AS		+H5::4@A4(F""1- ) A &chh/ 			#(( 
B aiik3;;=9a%' +* A@ 
A	@ )( A@ 
B	Asw   /H"H-G2H?H/I
 H9H(.H96?I
2
H<H
H	H
H%(
H62H99
I	I


Ic                      [         R                  " [        5         [        [        5        S S S 5        g ! , (       d  f       g = fr   )rc   rd   re   r   invalidfilerP   r   r   test_load_invalid_filery      s"    	z	"&{3 
#	"	"	   4
Ac                      [         R                  " [        5         [        [        5        S S S 5        g ! , (       d  f       g = fr   )rc   rd   re   r   invalidfile2rP   r   r   test_load_invalid_order_filer}      s"    	z	"&|4 
#	"	"rz   c                      [        S5      n [        R                  " [        5         [	        U SS9  S S S 5        g ! , (       d  f       g = f)Ns   -1 4:1.
1 0:1
F
zero_based)r   rc   rd   re   r   )r   s    r   test_load_zero_basedr      s/    #$A	z	"1/ 
#	"	"s	   :
Ac                      Sn Sn[        U 5      n[        USS9u  p4UR                  S:X  d   e[        U 5      n[        U5      n[        X%/SS9u  pgpUR                  S:X  d   eUR                  S:X  d   eg )Ns   -1 1:1 2:2 3:3
s   -1 0:0 1:1
autor   )r!   r0   )r!   r4   )r   r   r7   r	   )
data1data2f1r9   r:   f2rE   rF   rH   rI   s
             r   test_load_zero_based_autor      s}    EE	BbV4DA77f	B	B("fENBB88v88vr   c                  z   Sn [        [        U 5      SS9u  p[        U/ SQ5        [        UR                  5       SS/SS/S	S//5        [	        [        U 5      /S
S9n[        [        U 5      S
S9nX44 HE  u  pn[        U/ SQ5        [        U/ SQ5        [        UR                  5       SS/SS/S	S//5        MG     g )NsM   
    3 qid:1 1:0.53 2:0.12
    2 qid:1 1:0.13 2:0.1
    7 qid:2 1:0.87 2:0.12Fquery_id)r0   r$   r   g(\?gQ?gp=
ף?皙?gףp=
?T)r!   r!   r$   )r   r   r   rW   r	   )rC   r9   r:   res1res2qids         r   test_load_with_qidr      s    D gdme<DAq)$qyy{dD\D#;t$MN>Dgdmd;D\	c1i(3	*199;$c{T4L(QR "r   zPtesting the overflow of 32 bit sparse indexing requires a large amount of memoryc                      SR                  S [        SS5       5       5      n [        [        U 5      SS9u  pn[	        USS / S	Q5        [	        [
        R                  " U5      [
        R                  " SS5      5        g)
zM
load large libsvm / svmlight file with qid attribute. Tests 64-bit query ID
   
c              3   `   #    U  H$  nS R                  U5      R                  5       v   M&     g7f)z.3 qid:{0} 1:0.53 2:0.12
2 qid:{0} 1:0.13 2:0.1N)formatencode).0r;   s     r   	<genexpr>&test_load_large_qid.<locals>.<genexpr>   s.      	
/ >DDQGNNPP/s   ,.r!   i ZbTr   N)r0   r$   r0   r$   )joinranger   r   r   rU   uniquearange)rC   r9   r:   r   s       r   test_load_large_qidr      sk     ::	
1./	
D #74=4@IA#qv|,ryy~ryy4D'EFr   c                      [         R                  " [        5         [        [        5      n [        [
        5      n[        [        U 5      [        U5      [        U 5      /5        S S S 5        g ! , (       d  f       g = fr   )rc   rd   re   r   r5   rx   r	   r@   )r   invalid_paths     r   test_load_invalid_file2r      sJ    	z	"28<	5kBS^S->IOP 
#	"	"s   AA,,
A:c                      [         R                  " [        5         [        S5        S S S 5        g ! , (       d  f       g = f)NgzG?)rc   rd   	TypeErrorr   rP   r   r   test_not_a_filenamer      s$     
y	!4  
"	!	!   0
>c                      [         R                  " [        5         [        S5        S S S 5        g ! , (       d  f       g = f)Nztrou pic nic douille)rc   rd   OSErrorr   rP   r   r   test_invalid_filenamer      s#    	w	12 
 		r   csr_containerc                 v   [        [        5      u  pUR                  5       nU " [        R                  " U5      5      nU[        R
                  " UR                  S   5         nU[        R
                  " UR                  S   5         nXU4 GH'  nXBU4 GH  nS GH  n	[        R                  [        R                  [        R                  [        R                  4 GH  n
[        5       n[        R                  " U5      (       a  UR                  S   S:X  a  UR                  nUR                  U
5      n[!        XUSU	S9  UR#                  S5        UR%                  5       n['        US5      nS[(        R*                  -  U;   d   eUR%                  5       n['        US5      nSS	/U	   S
-   U;   d   e[-        XU	S9u  pUR.                  U
:X  d   e[1        UR3                  5       R4                  UR4                  5        UR                  5       n[        R                  " U5      (       a  UR                  5       nOUnU
[        R                  :X  a+  [7        UUS5        [7        UR                  U
SS9US5        GM  [7        UUS5        [7        UR                  U
SS9US5        GM     GM     GM     GM*     g )Nr   )TFr!   testcommentr   utf-8zscikit-learn %sonezeroz-based)rT   r   r4   F)copyr'   )r   r5   rW   rU   
atleast_2dr   r7   rV   rX   int32int64r   spissparseTastyper   seekreadliner@   sklearn__version__r   rT   r   sorted_indicesindicesr   )r   X_sparsey_denseX_densey_sparseX_slicedy_slicedr9   r:   r   rT   r   X_inputr   rH   rI   X2_denseX_input_denses                     r   	test_dumpr     s<   6x@H GR]]734H 		(.."345H		(.."345H*X.A+
 jj"**bhhIE	A
 {{1~~!''!*/ CC  hhuoG&Av* FF1IjjlG!'73G,w/B/BBgMMMjjlG!'73G!6?:6AWLLL/:VFB88u,,,&r'8'8':'B'BBJJO!zz|H{{7++(/(9(/

*1-1M1#NN5uN=r1
 2-2N1#NN5uN=r2g J , / +r   c                 $   / SQ/ SQ/ SQ/n/ SQ/ SQ/ SQ/nU " U5      nX#4 Hk  n[        5       n[        XUSS9  UR                  S	5        UR                  5       S
:X  d   eUR                  5       S:X  d   eUR                  5       S:X  a  Mk   e   g )N)r!   r   r0   r   r)   r   r   r   r   r   )r   r)   r   r!   r   r   r!   r   )r!   r   r!   )r!   r!   r   TrN   r   s   1 0:1 2:3 4:5
s   0,2 
s   0,1 1:5 3:1
)r   r   r   r   )r   r9   r   r   r:   r   s         r   test_dump_multilabelr   H  s    	/?;A)Y/GW%H I1t4	q	zz|1111zz|y(((zz|//// !r   c                     Sn SnSnSnSnXX#U// SQ/ SQ/ SQ/ SQ/nXX#U/n[        5       n[        XVU5        UR                  S5        UR                  5       S	:X  d   eUR                  5       S
:X  d   eUR                  5       S:X  d   eUR                  5       S:X  d   eUR                  5       S:X  d   eUR                  S5        [	        U5      u  p[        XXR                  5       5        [        Xi5        g )Nr!   g @gGz@g     ?r*   )g    eAg NgmCgkcEr   r   r   r   s+   1 0:1 1:2.1 2:3.01 3:1.000000000000001 4:1
s!   2.1 0:1000000000 1:2e+18 2:3e+27
s   3.01 
s   1.000000000000001 
s   1 
)r   r   r   r   r   r   rW   )
r   twothreeexactalmostr9   r:   r   rH   rI   s
             r   test_dump_conciser   W  s    
C
CEEF	5(	A 
5(A	AqQFF1I::<JJJJ::<@@@@::<:%%%::<2222::<7"""FF1I"FBa.a$r   c                     [        [        5      u  pU R                  5       n [        5       nSn[	        XX#SS9  UR                  S5        [        USS9u  pE[        XR                  5       5        [        X5        Sn[        5       n[        R                  " [        5         [	        XX&S9  S S S 5        UR                  S5      n[        5       n[	        XX'SS9  UR                  S5        [        USS9u  pE[        XR                  5       5        [        X5        [        5       n[        R                  " [        5         [	        XUS	S9  S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)
Nz*This is a comment
spanning multiple lines.Fr   r   r   s   It is true that
½² = ¼)r   r   zI've got a  .)r   r5   rW   r   r   r   r   r   rc   rd   UnicodeDecodeErrordecodere   )r9   r:   r   ascii_commentrH   rI   utf8_commentunicode_comments           r   test_dump_commentr   v  s   )(3DA			A	AAMqQ%HFF1Ie4FBa.a$ CL	A	)	*19 
+ #))'2O	AqQEJFF1Ie4FBa.a$	A	z	"1,<= 
#	" 
+	* 
#	"s    E>E$
E!$
E2c                  Z   [        [        5      u  p[        5       nU/n[        R                  " [
        5         [        XU5        S S S 5        [        5       n[        R                  " [
        5         [        XS S U5        S S S 5        g ! , (       d  f       NK= f! , (       d  f       g = f)N)r   r5   r   rc   rd   re   r   )r9   r:   r   y2ds       r   test_dump_invalidr     sv    )(3DA	A#C	z	"11% 
# 		A	z	"1fa( 
#	"	 
#	" 
#	"s   B2B
B
B*c                  X   [        [        5      u  pU R                  5       n [        R                  " U R
                  S   5      S-  n[        5       n[        XX2SS9  UR                  S5        [        USSS9u  pEn[        XR                  5       5        [        X5        [        X&5        g )Nr   r$   Tr   r   )r   r5   rW   rU   r   r7   r   r   r   r   r   )r9   r:   r   r   rE   rF   	query_id1s          r   test_dump_query_idr     s    )(3DA			Ayy$)H	AqQdCFF1I*1tMBIa.a$h2r   c                     Sn [        [        U 5      SS9u  pn/ SQ/ SQ/ SQ/ SQ/n/ SQn/ SQn[        X%5        [        UR                  5       U5        [        X65        [        5       n[	        XXsSS9  UR                  S	5        [        USSS9u  pn[        X%5        [        UR                  5       U5        [        X65        UR                  S	5        [        US
SS9u  p[        X%5        [        UR                  5       U5        g )Ns   
    1 qid:0 0:1 1:2 2:3
    0 qid:72048431380967004 0:1440446648 1:72048431380967004 2:236784985
    0 qid:-9223372036854775807 0:1440446648 1:72048431380967004 2:236784985
    3 qid:9223372036854775807  0:1440446648 1:72048431380967004 2:236784985Tr   )r!   r$   r0   )ixU   \.,N^iY)r!   r   r   r0   )r   r   l l    r   r   F)r   r   r   rW   r   r   )rC   r9   r:   r   true_Xtrue_ytrueQIDr   s           r   test_load_with_long_qidr     s    OD
 #74=4@IA# 	222	F FOGq!qyy{F+s$	AqQ>FF1I"1tEIA#q!qyy{F+s$FF1Ia%DADAq!qyy{F+r   c                 H   [        5       nU " [        R                  " SS95      n[        R                  " / SQ5      n[	        X#U5        S HT  nUR                  S5        [        USUS9u  pV[        Xc5        [        UR                  5       UR                  5       5        MV     g )N)r0   r4   r7   r   )r   TFr   r4   )rb   r   )	r   rU   zerosarrayr   r   r   r   rW   )r   r   r   r   r   r9   r:   s          r   test_load_zerosr     sx    	A288&12FXXi Fvq)+
	q	!!jI!!,!!))+v~~/?@	 ,r   sparsity)r   r   g      ?gGz?r!   	n_samples   e   rb   )r$   r   )   c                 z   [         R                  R                  S5      nUR                  SSX4S9nU (       a  SXUU :  '   U" U5      nUR	                  SSUS9n[        5       n[        XVU5        UR                  S5        [        UR                  5       5      nSn	US-  n
X-
  nSU-  S-  nX-
  n[        XrXS	9u  p[        XrXS	9u  nn[        XrUS
9u  nn[         R                  " UUU/5      n[        R                  " UUU/5      n[        UU5        [        UR                  5       UR                  5       5        g )Nr           r*   lowhighsizer$   r0   r4   r)   )rb   offsetlength)rb   r   )rU   randomRandomStateuniformrandintr   r   r   lengetvaluer   concatenater   vstackr   rW   )r   r   rb   r   rngr9   r:   r   r   mark_0mark_1length_0mark_2length_1X_0y_0X_1y_1X_2y_2y_concatX_concats                         r   test_load_with_offsetsr    s7   
 ))


"C#Y,CDAh,aA	2A	AqQFF1Iqzz|D FQYFHX]FH "	HC "	HC "!6JHC~~sCo.Hyy#sC)Ha*aiik8+;+;+=>r   c           
          [         R                  R                  S5      n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      nU " U5      nUR                  u  p4UR                  SSUS9n[         R                  " U5      S-  n[        5       n[        X%XvS	9  UR                  S5        [        UR                  5       5      n[        U5       H  n	UR                  S5        [        XtS
SU	S9u  pn[        XtS
U	SS9u  pn[         R                  " X/5      n[         R                  " X/5      n[        R                   " X/5      n[#        UU5        [%        UU5        [#        UR'                  5       UR'                  5       5        M     g )Nr   )r   r   r   r   r   r   )r!   r$   r0   r4   r   r    )r!   r   r0   r   r   r   )r   r   r   r   r   r!   )r!   r   r   r   r   r   r$   r   r   T)rb   r   r   r   r   )rU   r   r   r   r7   r   r   r   r   r   r   r   r   r   r   r   r  r   r   rW   )r   r  r9   r   rb   r:   r   r   r   markr  r	  q_0r
  r  q_1q_concatr  r  s                      r   "test_load_offset_exhaustive_splitsr    sS   
))


"C
	

	A 	aAGGI	2Ayy#q(H	AqQ2FF1Iqzz|D d	q	*tAd
# +tD
# >>3*->>3*-99cZ(!!X.8X.!!))+x/?/?/AB r   c                      [         R                  " [        SS9   [        [        SSS9  S S S 5        g ! , (       d  f       g = f)Nzn_features is required)matchr0   )r   r   )rc   rd   re   r   r5   rP   r   r   test_load_with_offsets_errorr  8  s*    	z)A	B&x!D 
C	B	Bs	   3
Ac                    [        U S-  5      n[        R                  R                  S5      nUR	                  SS5      R                  [        R                  5      n[        R                  " / SQ5      n[        R                  " / SQ5      n[        R                  " / SQ5      nU" XvU4SS	9n[        XHUS
S9  [        US
S9u  p/ SQnX:X  d   eg)zz
Ensure that if y contains explicit zeros (i.e. elements of y.data equal to
0) then those explicit zeros are not encoded.
svm_explicit_zero*   r0   r)   )r   r$   r0   r    )r   r$   r$   r   r!   r$   )r   r!   r!   r!   r!   r   )r0   r0   r   TrN   )g       @r  )r   r*   N)
r@   rU   r   r   randnr   rX   r   r   r   )tmp_pathr   	save_pathr  r9   r6   r   rC   r:   _y_loady_trues               r    test_multilabel_y_explicit_zerosr$  =  s     H223I
))


#C		!Qrzz*AXXl#Fhh)*G88&'Dtf-V<A qY48"9>IA)Fr   c                     [         R                  R                  S5      nUR                  SS5      nUR                  S5      n[	        X#/5      u  p#[        U S-  5      n[        X#U5        g)zEnsure that there is no ValueError when dumping a read-only `X`.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/28026
r  r)   r$   svm_read_onlyN)rU   r   r   r  r   r@   r   )r  r  r9   r:   r   s        r   test_dump_read_onlyr'  W  s]     ))


#C		!QA		!A %aV,DAH./IqY'r   )Drk   rA   rm   bz2r   	importlibr   ior   tempfiler   numpyrU   rc   scipy.sparsesparser   r   sklearn.datasetsr   r   r	   sklearn.utils._testingr
   r   r   r   sklearn.utils.fixesr   r   r5   rQ   rx   r|   r   r   r>   rJ   rL   rR   r_   rf   rv   ry   r}   r   r   r   r  skipr   r   r   r   parametrizer   r   r   r   r   r   r   r   r  r  r  r$  r'  rP   r   r   <module>r4     s3    	     '     X X  /0 (%	$+8/ .F&+
" @"&84
5
0S" VGGQ!3
 .9B :BJ .90 :0%>>B
)3!,H .9
A :
A %;<r3i0z2.9!? : 3 1 =!?H .9'C :'CTE
 .9 :2(r   