
    Q3j\                     0   d dl Z d dlmZ d dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZmZ d dlmZmZmZmZmZmZ d d	lmZ d d
lmZmZmZm Z m!Z! d dl"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*  ejV                  d dgdd gg      Z,d e,ddd f<    e-eez   ez   e z   e!z         e.e/ej`                  ejb                  e2ejf                  ffdZ4g  e4ejj                  jm                  d      jo                  dd      ee/f      d dgdd ggd dgg e4e,ee/f       e4d dgdd gg       e4d d gd d gg       e4d dgg      ddgddgg ejV                  ddgddgg       ejV                  ddgddgg       e ejV                  ddgddgg            g d ejV                  g d       ejV                  g dej`                         ejV                  g dejb                         ejV                  g de2       ejV                  g dejf                         ejV                  dgd gdgg       e ejV                  g d            g dg d ejV                  g d       ejV                  g de8       ejV                  g de8      gg dg dgddgd d!gg ejV                  g dg dg       ejV                  g dg dgej`                         ejV                  g dg dgejb                         ejV                  g dg dge2       ejV                  g dg dgejf                        g e4g dg dgeez   e/ej`                  ejb                  e2ejf                  f       ejV                  ddgd d!gg       ejV                  ddgd d!gg       ejV                  ddgd d!gge8       ejV                  g dg       e ejV                  g dg            d dgddgg d g ejV                  g d"       ejV                  g d"e.       ejV                  g d"ej`                         ejV                  g d"ejb                         ejV                  g d"e2       ejV                  g d"ejf                         ejV                  d gdgg       e ejV                  d gdgg            ddgdd#gdgddgd$d%g ejV                  d$d%g      ddg ejV                  d$d%ge8      gd&gd d'g ejV                  d gd'gg       ejV                  d gd'ggejf                        g ejV                  d d'gd'd gg       ejV                  d d'gd'd ggejf                         ejV                  d d'gg      g e4d d'gd'd ggeez   e2ejf                  f       e4d d'ggeez   e2ejf                  f      g g ejV                  g ge8      d(g ejV                   ejV                  g        ejV                  g d)      ge8       ejV                  g        ejV                  g d)      gh d*ddhg e9g d)       e9ddg      gddd+d dig ejV                  d        ejV                  g g g       ejV                  d dgddggd,d#gd-d.ggg      gd/Z:ejj                  jm                  d      jo                  dd      d dgdd ggd dgge,d d gd d ggddgddgg ejV                  ddgddgg       ejV                  ddgddgg       e ejV                  ddgddgg            g	g d ejV                  g d       ejV                  g dej`                         ejV                  g dejb                         ejV                  g de2       ejV                  g dejf                         ejV                  dgd gdgg       e ejV                  g d            g dg	g dg dg ejV                  g dg dg       ejV                  g dg dgej`                         ejV                  g dg dgejb                         ejV                  g dg dge2       ejV                  g dg dgejf                         ejV                  g dg       e ejV                  g dg            gd dgddgg d g ejV                  g d"       ejV                  g d"e.       ejV                  g d"ej`                         ejV                  g d"ejb                         ejV                  g d"e2       ejV                  g d"ejf                         ejV                  d gdgg       e ejV                  d gdgg            ddgdd#ggd&gd d'g ejV                  d gd'gg       ejV                  d gd'ggejf                        g ejV                  d d'gd'd gg       ejV                  d d'gd'd ggejf                         ejV                  d d'gg      gg gd(g ejV                  d        ejV                  d dgddggd,d#gd-d.ggg      gd/Z;h d*ddd+d#gd#gd+d$ e9g d)      dgZ<dgdgd dggg d0 ejV                  g ddggd1       e ejV                  g ddggd1            gZ=d2 Z>ed3        Z?ej                  j                  d4 e             d5        ZBd6 ZCd7 ZDd8 ZEd9 ZFej                  j                  d: e             d;        ZGd< ZHd= ZId> ZJd? ZKej                  j                  d@g dA      dB        ZLej                  j                  dCe      dD        ZMdE ZNdF ZOej                  j                  dGdHdIg      dJ        ZPy)K    N)product)issparse)config_contextdatasets)ShuffleSplit)SVC)_atol_for_typemove_to)yield_namespace_device_dtype_combinations)_array_api_for_tests_convert_containerassert_allcloseassert_array_almost_equalassert_array_equal'skip_if_array_api_compat_not_configured)_NotAnArray)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS)_safe_split)_ovr_decision_functioncheck_classification_targetsclass_distributionis_multilabeltype_of_targetunique_labels   c           	      P    |D cg c]  }|D ]  } || |        c}}S c c}}w )Ndtype )datasparse_containersdtypessparse_containerr"   s        P/DATA/.local/lib/python3.12/site-packages/sklearn/utils/tests/test_multiclass.py_generate_sparser)   .   s>     !2 1E 	U+ 	, 1  s   "*      )
   r,   )size)r%   r&      )
r   r   r+   r+   r      r+   r1   r1   r1   r   r   r+   r!   r   r   r+   abc)r   r   r+   r+   )r   r1   r+   r1   r5   r6   r7   d)
r   r   r   r   r   r   r   r   r   r      abcdefgh㈵>      ?r#   r   r+   r0   >   r   r+   r0   r   r   r1         )multilabel-indicator
multiclassmulticlass-multioutputbinary
continuouscontinuous-multioutputunknown)r#   r+   r>   objectc            
         t        j                  t        d      5  t                d d d        t	        t        t        d            t        j                  d             t	        t        t        j                  d            t        j                  d             t	        t        g d      t        j                  g d             t	        t        t        j                  g dg dg dg            t        j                  d	             t	        t        t        j                  g dg dg            t        j                  d	             t	        t        g dt        d
            t        j                  d
             t	        t        ddd      t        j                  d	             t        j                  t        d      5  t        g dt        j                  d             d d d        t        j                  t        d      5  t        t        j                  d      t        j                  d             d d d        t	        t        t        j                  d      t        j                  d            t        j                  d
             t        j                  t        d      5  t        g dg d       d d d        t        j                  t        d      5  t        t        j                  g d      t        j                  g d             d d d        y # 1 sw Y   xY w# 1 sw Y   KxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NzNo argument has been passedmatchr,   )r1   r   r+   )r   r+   r1   )r   r   r   )r   r   r   )r   r   r   r0   r9   r3   )r   )r+   r   zMix type of y not allowed)r9   r9   z'Multi-label binary indicator input with)r9   r1   )r1   r9   z.Mix of label input types \(string and number\)r4   )
pytestraises
ValueErrorr   r   rangenparangearrayonesr#       r(   test_unique_labelsrU     s   	z)F	G 
H }U2Y/2?}RYYr]3RYYr]C}Y/)1DE bhh	9i@ABBIIaL }RXXy).D%EF		RSU }Ya9299Q<H}Yf=ryy|L 
z)D	Ei1 
F	z)R	Sbggforwwv7 
T }RWWV_bggfoF		RSU 
K
 	i1
 
K
 	bhhy)288O+DE	
 
A 
H	G( 
F	E	S	S
 

 
s;   L#"L0
3L=/M
#7M#L-0L:=M
MMc                     t        j                  g d      } t        j                  g dt              }t        j                  g d      }t        d      5  t	        j
                  t        d      5  t        | |       ddd       t	        j
                  t        d      5  t        ||       ddd       ddd       y# 1 sw Y   BxY w# 1 sw Y   xY w# 1 sw Y   yxY w)	zTest error is raised for mixed string and numerical input and dispatch enabled.

    Mixed string and numerical NumPy input with array API dispatch enabled should raise
    the correct error.
    )r5   r6   r5   r5   r!   r   r   r   r   Tarray_api_dispatchzMix of label input typesrJ   N)rP   rR   rH   r   rL   rM   rN   r   )y_stringy_objecty_numericals      r(   0test_unique_labels_mixed_str_numerical_array_apir]   7  s     xx,-Hxx,F;H((<(K	4	0]]:-GH(K0 I]]:-GH(K0 I 
1	0HHHH 
1	0s<   C4C#C$C1CC	CC	CC#z#array_namespace, device, dtype_namec                    t        | |      \  }}t        j                  g d|      }t        j                  g d|      }|j                  ||      }|j                  ||      }t	        ||      }	t        d      5  t	        ||      }
t        |
t        d      }t        |	|t        |      	       d
d
d
       y
# 1 sw Y   y
xY w)z/Check `unique_labels` compliance for array API.r=   r!   )r+   r0   r1   deviceTrX   cpu)xpr`   atolN)	r   rP   rR   asarrayr   r   r
   r   r	   )array_namespacer`   
dtype_namerb   device_y1_npy2_npy1_xpy2_xp	labels_np	labels_xplabels_xp_nps               r(   test_unique_labels_array_apirp   I  s     '?KBHHYj1EHHYj1EJJuWJ-EJJuWJ-EeU+I	4	0!%/	yR>	<nZ6PQ 
1	0	0s    6B??Cc                  d   t        j                  d      } d}t        j                  t        |      5  t        |        ddd       t        j                  d      } t        j                         5  t        j                  d       t        |        ddd       y# 1 sw Y   \xY w# 1 sw Y   yxY w)zCheck that we raise a warning when the number of unique classes is greater than
    50% of the number of samples.

    We need to check that we don't raise if we have less than 20 samples.
       zJThe number of unique classes is greater than 50% of the number of samples.rJ   Nr,   error)	rP   rQ   rL   warnsUserWarningr   warningscatch_warningssimplefilter)ymsgs     r(   9test_check_classification_targets_too_many_unique_classesr{   ]  s|     			"A
WC	k	-$Q' 
. 			"A		 	 	"g&$Q' 
#	" 
.	-
 
#	"s   B0!B&B#&B/c                  h   dD ]  } t         |    D ]  }t        |         t        D ]/  }t        j                  t
              5  t        |       d d d        1 dD ]=  }t         |   D ]/  }t        j                  t
              5  t        |       d d d        1 ? y # 1 sw Y   ~xY w# 1 sw Y   JxY w)N)rD   rB   rA   )rG   rE   rF   rC   )EXAMPLESr   NON_ARRAY_LIKE_EXAMPLESrL   rM   rN   )formatry   exampley_types       r(   test_unique_labels_non_specificr   q  s     C&!A! " C
 +]]:&'" '& +  'Gz*g& +* ( '& +*s   BB(B%	(B1c                  >   t        t        d   t        d   t        d   z         } | D ]a  \  }}t        j                  t              5  t        ||       d d d        t        j                  t              5  t        ||       d d d        c t        j                  t              5  t        ddggddgg       d d d        t        j                  t              5  t        ddg       d d d        t        j                  t              5  t        ddgdd	gg       d d d        t        j                  t              5  t        dd
gdd	gg       d d d        y # 1 sw Y   xY w# 1 sw Y   ExY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   oxY w# 1 sw Y   y xY w)NrA   rB   rD   r   r+   r5   r8   1r0   2)r   r}   rL   rM   rN   r   )mix_clf_formaty_multilabely_multiclasss      r(   test_unique_labels_mixed_typesr     s?   '((<*@8HCU*UN '5"l]]:&,5 ']]:&,5 '& '5 
z	"1vh#s- 
# 
z	"sAh 
# 
z	"Qx!Q() 
# 
z	"SzAq6*+ 
#	" '&&& 
#	" 
#	" 
#	" 
#	"sH   E4E"$E/E;F:FE	"E,	/E8;FFFc                     t         j                         D ]9  \  } }| dk(  }|D ](  }|xr t        |      }t        |      s~t        |d      rt	        j
                  |      j                  dk(  rt	        j
                  |      j                  j                  dv r|t	        j
                  |      j                  d   dkD  rWt        t        z   t        z   t        z   t        z   D cg c]
  } ||       }}|D ]  }|t        |      k(  rJ d|d|         t        |      r|j!                         }|t        |      k(  rJ d|d|         < y c c}w )	NrA   	__array__r+   biufr   r   is_multilabel() should be )r}   itemsr   hasattrrP   re   ndimr"   kindshaper   r   r   r   r   r   toarray)groupgroup_examples	dense_expr   
sparse_expr'   examples_sparseexmpl_sparses           r(   test_is_multilabelr     sn   !)!1~33	%G #8x'8J -JJw',,1JJw'--22f<JJw'--a014
 '()() )) )	)	#) ) %W-)   	# %4L%|)DD ((8ZLQD %4  !//+g 66  <	{C6= & "2	#s   #Ez(array_namespace, device_name, dtype_namec                    t        | ||      \  }}t        j                         D ]  \  }}|dk(  }|D ]  }t        j                  |      j
                  j                  dk(  rt        j                  ||      }nt        j                  |      }|j	                  ||      }t        d      5  |t        |      k(  sJ d|d|        	 d d d          y # 1 sw Y   xY w)	NrA   fr!   r_   TrX   r   r   )	r   ARRAY_API_EXAMPLESr   rP   re   r"   r   r   r   )	rf   device_namerg   rb   r`   r   r   r   r   s	            r(   'test_is_multilabel_array_api_compliancer     s    
 &o{JOJB!3!9!9!;~33	%Gzz'"((--4**WJ?**W-jjj8G48 M'$:: $WK|I;G: 98 & "< 98s   -CC c                     t         j                         D ]_  } | dv r@t         |    D ]3  }d}t        j                  t        |      5  t        |       d d d        5 Gt         |    D ]  }t        |        a y # 1 sw Y   \xY w)N)rG   rE   rF   zUnknown label type: rJ   )r}   keysrL   rM   rN   r   )r   r   rz   s      r(   !test_check_classification_targetsr     so    --/HH#F+,]]:S909 :9 ,
 $F+,W5 , " :9s   A88Bc                     t         j                         D ]3  \  } }|D ])  }t        |      | k(  rJ d|d| dt        |              5 t        D ]3  }d}t	        j
                  t        |      5  t        |       d d d        5 t        D ]3  }d}t	        j
                  t        |      5  t        |       d d d        5 y # 1 sw Y   |xY w# 1 sw Y   LxY w)Nztype_of_target(r   z, got z6Expected array-like \(array or non-string sequence\).*rJ   zYou appear to be using a legacy multi-label data representation. Sequence of sequences are no longer supported; use a binary array or sparse matrix instead.)r}   r   r   r~   rL   rM   rN   MULTILABEL_SEQUENCES)r   r   r   	msg_regexrz   s        r(   test_type_of_targetr     s    !)!1~%G!'*e3  "7+	3 & "2 +M	]]:Y77# 87 +
 (< 	
 ]]:S17# 21 ( 87 21s   1C-CC	C	c                  <   t        j                  d      } | j                  j                  dt        j
                  t        j
                  dt        j
                  g      }d}t        j                  t        |      5  t        |       d d d        y # 1 sw Y   y xY w)Npandasr   z1y cannot be class 'SparseSeries' or 'SparseArray'rJ   )	rL   importorskiparraysSparseArrayrP   nanrM   rN   r   )pdry   rz   s      r(   !test_type_of_target_pandas_sparser     sd    			X	&B
		q"&&"&&!RVV<=A
=C	z	-q 
.	-	-s   =BBc                     t        j                  d      } dD ]L  }| j                  g d|      }t        |      dk(  sJ | j                  g d|      }t        |      dk(  rLJ  | j	                  dd	gd	dggd
      }t        |      dk(  sJ | j	                  ddgddggd      }t        |      dk(  sJ | j	                  ddgddggd      }t        |      dk(  sJ y)z<Check that type_of_target works with pandas nullable dtypes.r   )Int32Float32)r   r   r+   r0   r1   r!   rB   )r   r   r   r   rD   gffffff?g@r   rF   r   r   r   rA   r+   r0   rC   N)rL   r   Seriesr   	DataFrame)r   r"   y_trues      r(   #test_type_of_target_pandas_nullabler     s   			X	&B%?%8f%555<u5f%111 & \\C:Sz2)\DF&!%====\\Aq6Aq6*'\:F&!%;;;;\\Aq6Aq6*'\:F&!%====rT   r"   )Int64Float64booleanc                     t        j                  d      }|j                  g d|       }|j                  g dd      }t        ||      }t	        |ddg       y)	zgChecks that unique_labels work with pandas nullable dtypes.

    Non-regression test for gh-25634.
    r   )	r   r   r   r   r   r   r   r   r   r!   )	r   r   r   r   r   r   r   r   r   int64r   r   N)rL   r   r   r   r   )r"   r   r   y_predictedlabelss        r(   "test_unique_labels_pandas_nullabler   $  sT     
		X	&BYY2%Y@F))7w)GK6;/Fv1v&rT   csc_containerc           	         t        j                  g dg dg dg dg dg dg      }t        j                  g d      }t        j                  g d      }t        j                  g d      } | |||fd	
      }t        |      \  }}}t        |      \  }	}
}g dg ddgdgg}g d}g dg ddgdgg}t        |j                  d         D ]n  }t        ||   ||          t        ||   ||          t        ||   ||          t        |	|   ||          t        |
|   ||          t        ||   ||          p t        |g d      \  }}}t        |g d      \  }	}
}g dg ddgdgg}t        |j                  d         D ]n  }t        ||   ||          t        ||   ||          t        ||   ||          t        |	|   ||          t        |
|   ||          t        ||   ||          p y )NrW   )r+   r+   r   r   )r   r0   r   r   )r1   r+   r   r   )r+   r   r   r   )r   r+   r   r1   r+   r   r   r+   r0   r+   r0   r   r   r   r   r   r   )r   r   r+   r0   r1   r9   r   r   r+   r0   r9   r   r   r+   r0   r1   r9   )r   r?      r      )r?   r1   )r   )r   r+   r1   )r   r+   r0   r   r   )r0   r0   r   r   )r<   UUUUUU?gUUUUUU?)r   r   r         ?)r          @r   r   r   r   )qq?r   qq?)r   r   r   )rP   rR   r   rO   r   r   )r   ry   r$   indicesindptry_spclasses	n_classesclass_prior
classes_spn_classes_spclass_prior_spclasses_expectedn_classes_expectedclass_prior_expectedks                   r(   test_class_distributionr   3  s%   
	
		A 88GHDhhJKGXX()F$0?D&8&;#GY/A$/G,Jn!9qcA37%13H3%RUQVW1771:!'!*.>q.AB!)A,0B10EF!+a.2Fq2IJ!*Q-1A!1DE!,q/3Ea3HI!."35I!5LM  );	))%Wi 2D	)2.Z~ 23H3%RUQVW1771:!'!*.>q.AB!)A,0B10EF!+a.2Fq2IJ!*Q-1A!1DE!,q/3Ea3HI!."35I!5LM rT   c                     t               } t        d      }t        j                         }|j                  |j                  }}t        j                  ||j                        }t        dd      }t        t        |j                  |                  \  }}t        | |||      \  }	}
t        ||||      \  }}t        |t        j                  |	|	j                               t        |
|       t        | ||||      \  }}t        |||||      \  }}t        |t        j                  ||	j                               t        ||       y )Nprecomputed)kernelg      ?r   )	test_sizerandom_state)r   r   	load_irisr$   targetrP   dotTr   nextitersplitr   r   )clfclfpirisXry   KcvtraintestX_trainy_trainK_trainy_train2X_testy_testK_testy_test2s                    r(   'test_safe_split_with_precomputed_kernelr   g  s   
%Cm$DD99dkkqA
q!##A	1	5BtBHHQK()KE4"31e4GW#D!Q6GXgrvvgwyy'ABgx0 aD%8NFF!$1dE:OFGfbffVWYY&?@fg.rT   c            
      \   t        j                  g dg dg dg dg      } t        j                  g dg dg dg dg      }d}t        | ||      }t        j                  g dg d	g dg dg      }t        ||d
       t        j                  g d      }t	        t        j
                  |d      |       |d   |d   kD  sJ t        d      D cg c]@  }t        t        j                  | |   g      t        j                  ||   g      |      d   B }}t        ||d       y c c}w )N)r   r   r   )r   r   r   ) 7yAr   r   )r   r   g      )g      r   g      @)g      g?r<   r0   r2   )r   r   r   r<   rc   )r+   r   r+   r+   r   )axis)r+   r+   )r0   r+   r1   r   gư>)rP   rR   r   r   r   argmaxrO   )predictionsconfidencesr   
dec_valuesvotesexpected_predictionidec_values_ones           r(   test_ovr_decision_functionr   }  s$    ((Iy)YGHK((	,.>@PQK I'[)LJ HHiIyABEE:C0
 ((<0ryy!46IJ dj.... q	 A 	HHk!n%&+a.1A(BI	

	 	   JT:s   AD)
input_typelistrR   c                     t        ddg|       }d}t        j                  t        |      5  t	        |       d d d        y # 1 sw Y   y xY w)N   a   bz8Support for labels represented as bytes is not supportedrJ   )r   rL   rM   	TypeErrorr   )r   r   err_msgs      r(   !test_labels_in_bytes_format_errorr    s;    
  tj9FHG	y	0v 
1	0	0s   AA
)Qrv   	itertoolsr   numpyrP   rL   scipy.sparser   sklearnr   r   sklearn.model_selectionr   sklearn.svmr   sklearn.utils._array_apir	   r
   r   sklearn.utils._testingr   r   r   r   r   r   sklearn.utils.estimator_checksr   sklearn.utils.fixesr   r   r   r   r   sklearn.utils.metaestimatorsr   sklearn.utils.multiclassr   r   r   r   r   r   rR   multilabel_explicit_zerotupleboolintint8uint8floatfloat32r)   randomRandomStaterandintrH   	frozensetr}   r   r~   r   rU   r]   markparametrizerp   r{   r   r   r   r   r   r   r   r   r   r   r   r   r  r#   rT   r(   <module>r!     s       ! , 0  
  7  5  $288aVaV$45 !" A 
 
	
	 	 		 #rww%<& 
II!!"%--ah-?,6

 Q!Q Q 
$PSv

 
Aq6Aq6*	+ 
Aq6Aq6*	+ 
Aq6(	#" a1b'#$ 	2q'Ar7#$%& 	2q'Ar7#$'( 	HBHHr1g2w/01). 	'"''*"((+%("**-1#sQC!HBHHY'(!//  
|$
sc3Z ,-.,-RWW=,-RXX>,-U;,-RZZ@ 
<(,~="((E2::>

 	3*sCj)* 	3*sCj)* 	3*sCj)8  	)!" 	HBHHi[)*#( 
A	
A
	
/0/t</rww?/rxx@/u=/rzzB1#sHBHHqcA3Z()	
B	
A		c
	% 	c
%v.). 
	
C1#u1#uRZZ0	 	1c(S!H%&1c(S!H%RZZ81c( 
XQx ,~=2::&

	 
XJ,~=2::&

  
"V$	("((2, 34FC	"xrxx	*+	QF	9	y!Q01S	As8$"bAq6Aq6"aVaV$456!Ivt 			b!))!();
Q!Q
Q 
Q!Q
a1b'2q'Ar7#$2q'Ar7#$HBHHr1g2w/01
 	'"''*"((+%("**-1#sQC!HBHHY'(
 
|$,-.,-RWW=,-RXX>,-U;,-RZZ@)HBHHi[)*	 
A	
A
	
/0/t</rww?/rxx@/u=/rzzB1#sHBHHqcA3Z()	
B	
A" 
	
C1#u1#uRZZ0	 	1c(S!H%&1c(S!H%RZZ81c( 
	Aq6Aq6"aVaV$456	yB L 	
	i  S1#1vBHHb1a&\*"q!fX67	 &FR )1 )1" )-/R	R (('0,2$N .-/	$	6$6>* "AB' C' .90N :0Nf/,$;N '89 :rT   