
    h$,fO                     l   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 d dl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jL                  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jV                  ejX                  e-ej\                  ffdZ/g  e/ej`                  jc                  d      je                  dd      ee*f      d dgdd ggd dgg e/e'ee*f       e/d dgdd gg       e/d d gd d gg       e/d dgg      ddgddgg ejL                  ddgddgg       ejL                  ddgddgg       e ejL                  ddgddgg            g d ejL                  g d       ejL                  g dejV                         ejL                  g dejX                         ejL                  g de-       ejL                  g dej\                         ejL                  dgd gdgg       e ejL                  g d            g dg d ejL                  g d       ejL                  g de3       ejL                  g de3      gg dg dgddgd d!gg ejL                  g dg dg       ejL                  g dg dgejV                         ejL                  g dg dgejX                         ejL                  g dg dge-       ejL                  g dg dgej\                        g e/g dg dgeez   e*ejV                  ejX                  e-ej\                  f       ejL                  ddgd d!gg       ejL                  ddgd d!gg       ejL                  ddgd d!gge3       ejL                  g dg       e ejL                  g dg            d dgddgg d g ejL                  g d"       ejL                  g d"e)       ejL                  g d"ejV                         ejL                  g d"ejX                         ejL                  g d"e-       ejL                  g d"ej\                         ejL                  d gdgg       e ejL                  d gdgg            ddgdd#gdgddgd$d%g ejL                  d$d%g      ddg ejL                  d$d%ge3      gd&gd d'g ejL                  d gd'gg       ejL                  d gd'ggej\                        g ejL                  d d'gd'd gg       ejL                  d d'gd'd ggej\                         ejL                  d d'gg      g e/d d'gd'd ggeez   e-ej\                  f       e/d d'ggeez   e-ej\                  f      g g ejL                  g ge3      d(g ejL                   ejL                  g        ejL                  g d)      ge3       ejL                  g        ejL                  g d)      gh d*ddhg e4g d)       e4ddg      gddd+d dig ejL                  d        ejL                  g g g       ejL                  d dgddggd,d#gd-d.ggg      gd/Z5ej`                  jc                  d      je                  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jL                  ddgddgg       ejL                  ddgddgg       e ejL                  ddgddgg            g	g d ejL                  g d       ejL                  g dejV                         ejL                  g dejX                         ejL                  g de-       ejL                  g dej\                         ejL                  dgd gdgg       e ejL                  g d            g dg	g dg dg ejL                  g dg dg       ejL                  g dg dgejV                         ejL                  g dg dgejX                         ejL                  g dg dge-       ejL                  g dg dgej\                         ejL                  g dg       e ejL                  g dg            gd dgddgg d g ejL                  g d"       ejL                  g d"e)       ejL                  g d"ejV                         ejL                  g d"ejX                         ejL                  g d"e-       ejL                  g d"ej\                         ejL                  d gdgg       e ejL                  d gdgg            ddgdd#ggd&gd d'g ejL                  d gd'gg       ejL                  d gd'ggej\                        g ejL                  d d'gd'd gg       ejL                  d d'gd'd ggej\                         ejL                  d d'gg      gg gd(g ejL                  d        ejL                  d dgddggd,d#gd-d.ggg      gd/Z6h d*ddd+d#gd#gd+d$ e4g d)      dgZ7dgdgd dggg d0 ejL                  g ddggd1       e ejL                  g ddggd1            gZ8d2 Z9d3 Z:d4 Z;d5 Z<ejz                  j}                  d6 e             d7        Z?d8 Z@d9 ZAd: ZBd; ZCejz                  j}                  d<g d=      d>        ZDejz                  j}                  d?e      d@        ZEdA ZFdB ZGy)C    )productN)issparse)config_contextdatasets)ShuffleSplit)SVC))yield_namespace_device_dtype_combinations)_array_api_for_testsassert_allcloseassert_array_almost_equalassert_array_equal)_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        Clib/python3.12/site-packages/sklearn/utils/tests/test_multiclass.py_generate_sparser%   '   s@     !2  	U++  s   "*      )
   r(   )size)r!   r"      )
r   r   r'   r'   r      r'   r-   r-   r-   r   r   r'   r   r   r   r'   )abc)r   r   r'   r'   )r   r-   r'   r-   r0   r1   r2   d)
r   r   r   r   r   r   r   r   r   r      abcdefgh㈵>      ?r   )r   r'   r,   >   r   r'   r,   r   r   r-         )multilabel-indicator
multiclassmulticlass-multioutputbinary
continuouscontinuous-multioutputunknown)r   r'   r8   objectc            
      h   t        j                  t              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              5  t        g dt        j                  d             d d d        t        j                  t              5  t        t        j                  d      t        j                  d             d d d        t	        t        t        j                  d      t        j                  d            t        j                  d             y # 1 sw Y   lxY w# 1 sw Y   xY w# 1 sw Y   rxY w)Nr(   )r-   r   r'   )r   r'   r-   )r   r   r   )r   r   r   )r   r   r   r,   r4   r/   )r   )r'   r   )r4   r4   )r4   r-   )r-   r4   )
pytestraises
ValueErrorr   r   rangenparangearrayonesr       r$   test_unique_labelsrM     s   	z	"  }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	" 2i12	z	" 8bggforwwv78 }RWWV_bggfoF		RSU3 (2 28 8s#   J"J3J(JJ%(J1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)r>   r<   r;   )rA   r?   r@   r=   )EXAMPLESr   NON_ARRAY_LIKE_EXAMPLESrD   rE   rF   )formatyexampley_types       r$   test_unique_labels_non_specificrU   %  s     C &! 	A!	
 + #]]:& 	#'"	# 	## '  ' 	'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)Nr;   r<   r>   r   r'   r0   r3   1r,   2)r   rO   rD   rE   rF   r   )mix_clf_formaty_multilabely_multiclasss      r$   test_unique_labels_mixed_typesr\   =  st   '((<*@8HCU*UN '5 6"l]]:& 	6,5	6]]:& 	6,5	6 	66 
z	" .1vh#s-. 
z	"  sAh  
z	" *Qx!Q()* 
z	" ,SzAq6*+, ,	6 	6	6 	6. .   * *, ,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 )	Nr;   	__array__r'   biufr   r   is_multilabel() should be )rO   itemsr   hasattrrH   asarrayndimr   kindshaper   r   r   r   r   r   toarray)groupgroup_examples	dense_exprS   
sparse_expr#   examples_sparseexmpl_sparses           r$   test_is_multilabelro   V  s   !)!1 #C~33	%  	CG #8x'8J -JJw',,1JJw'--22f<JJw'--a014
 '()() )) )	)	#( %W-	# 	# %4 QL%$*  Q''7|J<PQ Q  !//+!  C{,ykBC = 	C#C	#s   #Ez#array_namespace, device, 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)	Nr;   fr   )deviceT)array_api_dispatchr`   ra   )	r
   ARRAY_API_EXAMPLESrb   rH   rd   r   rf   r   r   )array_namespacerr   
dtype_namexpri   rj   rk   rS   s           r$   'test_is_multilabel_array_api_compliancerx   }  s    
 
ov	6B!3!9!9!; G~33	% 
	GGzz'"((--4**WJ?**W-jjj8G48 G M%  G#G;l9+FG G G
	GGG Gs   )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)rA   r?   r@   zUnknown label type: match)rO   keysrD   rE   rF   r   )rT   rS   msgs      r$   !test_check_classification_targetsr~     s    --/ 6HH#F+ :,]]:S9 :09: ::
 $F+ 6,W566: :s   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(ra   z, got z6Expected array-like \(array or non-string sequence\).*rz   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.)rO   rb   r   rP   rD   rE   rF   MULTILABEL_SEQUENCES)ri   rj   rS   	msg_regexr}   s        r$   test_type_of_targetr     s    !)!1 ~% 	Gw'50 w'0	 + $M	]]:Y7 	$7#	$ 	$$
 ( $< 	
 ]]:S1 	$7#	$ 	$$	$ 	$	$ 	$s   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'rz   )	rD   importorskiparraysSparseArrayrH   nanrE   rF   r   )pdrR   r}   s      r$   !test_type_of_target_pandas_sparser     sm    			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'   r,   r-   r   r<   )r   r   r   r   r>   gffffff?g@r   r@   r   r   r   r;   r'   r,   r=   N)rD   r   Seriesr   	DataFrame)r   r   y_trues      r$   #test_type_of_target_pandas_nullabler     s   			X	&B% 2?%8f%555<u5f%1112 \\C:Sz2)\DF&!%====\\Aq6Aq6*'\:F&!%;;;;\\Aq6Aq6*'\:F&!%====rL   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)rD   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&rL   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 )N)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'   r,   r'   r,   r   r   r   r   r   r   )r   r   r'   r,   r-   r4   r   r   r'   r,   r4   r   r   r'   r,   r-   r4   )r   r9      r      )r9   r-   )rg   )r   r'   r-   )r   r'   r,   r   r   )r,   r,   r   r   )r7   UUUUUU?gUUUUUU?)r   r   r         ?)r          @r   r   r   r   )qq?r   qq?)r   r   r   )rH   rJ   r   rG   rg   r   )r   rR   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     s3   
	
		A 88GHDhhJKGXX()F$0?D&8&;#GY/A$/G,Jn!9qcA37%13H3%RUQVW1771: N!'!*.>q.AB!)A,0B10EF!+a.2Fq2IJ!*Q-1A!1DE!,q/3Ea3HI!."35I!5LMN );	))%Wi 2D	)2.Z~ 23H3%RUQVW1771: N!'!*.>q.AB!)A,0B10EF!+a.2Fq2IJ!*Q-1A!1DE!,q/3Ea3HI!."35I!5LMNrL   c                     t               } t        d      }t        j                         }|j                  |j                  }}t        j                  ||j                        }t        dd      }t        |j                  |            d   \  }}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    targetrH   dotTr   listsplitr   r   )clfclfpirisXrR   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     s   
%Cm$DD99dkkqA
q!##A	1	5Brxx{#A&KE4"31e4GW#D!Q6GXgrvvgwyy'ABgx0 aD%8NFF!$1dE:OFGfbffVWYY&?@fg.rL   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?r7   r,   r.   )r   r   r   r7   )atol)r'   r   r'   r'   r   )axis)r'   r'   )r,   r'   r-   r   gư>)rH   rJ   r   r   r   argmaxrG   )predictionsconfidencesr   
dec_valuesvotesexpected_predictionidec_values_ones           r$   test_ovr_decision_functionr   1  s    ((Iy)YGHK((	,.>@PQK I'[)LJ HHiIyABEE:C0
 ((<0ryy!46IJ dj.... q	  	HHk!n%&+a.1A(BI	

	N  JT:s   AD))H	itertoolsr   numpyrH   rD   scipy.sparser   sklearnr   r   sklearn.model_selectionr   sklearn.svmr   sklearn.utils._array_apir	   sklearn.utils._testingr
   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   rJ   multilabel_explicit_zerotupleboolintint8uint8floatfloat32r%   randomRandomStaterandintrB   	frozensetrO   rt   rP   r   rM   rU   r\   ro   markparametrizerx   r~   r   r   r   r   r   r   r   r   rL   r$   <module>r      s#      ! , 0  N  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	 V<'0,2$CN )-/G	G$	6$4>* "AB' C' .90N :0Nf/,$;rL   