
    {KgQ                        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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jN                  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jX                  ejZ                  e.ej^                  ffdZ0g  e0ejb                  je                  d      jg                  dd      ee+f      d dgdd ggd dgg e0e(ee+f       e0d dgdd gg       e0d d gd d gg       e0d dgg      ddgddgg ejN                  ddgddgg       ejN                  ddgddgg       e ejN                  ddgddgg            g d ejN                  g d       ejN                  g dejX                         ejN                  g dejZ                         ejN                  g de.       ejN                  g dej^                         ejN                  dgd gdgg       e ejN                  g d            g dg d ejN                  g d       ejN                  g de4       ejN                  g de4      gg dg dgddgd d!gg ejN                  g dg dg       ejN                  g dg dgejX                         ejN                  g dg dgejZ                         ejN                  g dg dge.       ejN                  g dg dgej^                        g e0g dg dgeez   e+ejX                  ejZ                  e.ej^                  f       ejN                  ddgd d!gg       ejN                  ddgd d!gg       ejN                  ddgd d!gge4       ejN                  g dg       e ejN                  g dg            d dgddgg d g ejN                  g d"       ejN                  g d"e*       ejN                  g d"ejX                         ejN                  g d"ejZ                         ejN                  g d"e.       ejN                  g d"ej^                         ejN                  d gdgg       e ejN                  d gdgg            ddgdd#gdgddgd$d%g ejN                  d$d%g      ddg ejN                  d$d%ge4      gd&gd d'g ejN                  d gd'gg       ejN                  d gd'ggej^                        g ejN                  d d'gd'd gg       ejN                  d d'gd'd ggej^                         ejN                  d d'gg      g e0d d'gd'd ggeez   e.ej^                  f       e0d d'ggeez   e.ej^                  f      g g ejN                  g ge4      d(g ejN                   ejN                  g        ejN                  g d)      ge4       ejN                  g        ejN                  g d)      gh d*ddhg e5g d)       e5ddg      gddd+d dig ejN                  d        ejN                  g g g       ejN                  d dgddggd,d#gd-d.ggg      gd/Z6ejb                  je                  d      jg                  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jN                  ddgddgg       ejN                  ddgddgg       e ejN                  ddgddgg            g	g d ejN                  g d       ejN                  g dejX                         ejN                  g dejZ                         ejN                  g de.       ejN                  g dej^                         ejN                  dgd gdgg       e ejN                  g d            g dg	g dg dg ejN                  g dg dg       ejN                  g dg dgejX                         ejN                  g dg dgejZ                         ejN                  g dg dge.       ejN                  g dg dgej^                         ejN                  g dg       e ejN                  g dg            gd dgddgg d g ejN                  g d"       ejN                  g d"e*       ejN                  g d"ejX                         ejN                  g d"ejZ                         ejN                  g d"e.       ejN                  g d"ej^                         ejN                  d gdgg       e ejN                  d gdgg            ddgdd#ggd&gd d'g ejN                  d gd'gg       ejN                  d gd'ggej^                        g ejN                  d d'gd'd gg       ejN                  d d'gd'd ggej^                         ejN                  d d'gg      gg gd(g ejN                  d        ejN                  d dgddggd,d#gd-d.ggg      gd/Z7h d*ddd+d#gd#gd+d$ e5g d)      dgZ8dgdgd dggg d0 ejN                  g ddggd1       e ejN                  g ddggd1            gZ9d2 Z:d3 Z;d4 Z<d5 Z=ej|                  j                  d6 e             d7        Z@d8 ZAd9 ZBd: ZCd; ZDej|                  j                  d<g d=      d>        ZEej|                  j                  d?e      d@        ZFdA ZGdB ZHej|                  j                  dCdDdEg      dF        ZIy)G    )productN)issparse)config_contextdatasets)ShuffleSplit)SVC))yield_namespace_device_dtype_combinations)_array_api_for_tests_convert_container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        g/home/alanp/www/video.onchill/myenv/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(   r.   r.   r.   r   r   r(   r   r   r   r(   )abc)r   r   r(   r(   )r   r.   r(   r.   r1   r2   r3   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(   r9   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-   r5   r0   )r   )r(   r   )r5   r5   )r5   r.   )r.   r5   )
pytestraises
ValueErrorr   r   rangenparangearrayonesr        r%   test_unique_labelsrN     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	"i1 
#	z	"bggforwwv7 
# }RWWV_bggfoF		RSU3 
#	"( 
#	"	"	"s#   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<   )rB   r@   rA   r>   )EXAMPLESr   NON_ARRAY_LIKE_EXAMPLESrE   rF   rG   )formatyexampley_types       r%   test_unique_labels_non_specificrV   &  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)Nr<   r=   r?   r   r(   r1   r4   1r-   2)r   rP   rE   rF   rG   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 )	Nr<   	__array__r(   biufr   r   is_multilabel() should be )rP   itemsr   hasattrrI   asarrayndimr   kindshaper   r   r   r   r   r   toarray)groupgroup_examples	dense_exprT   
sparse_expr$   examples_sparseexmpl_sparses           r%   test_is_multilabelrp   W  s   !)!1~33	%G #8x'8J -JJw',,1JJw'--22f<JJw'--a014
 '()() )) )	)	#) ) %W-)   	# %4L%$*  Q''7|J<PQ  %4  !//+!  C{,ykBC = & "2	#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_dispatchra   rb   )	r
   ARRAY_API_EXAMPLESrc   rI   re   r   rg   r   r   )array_namespacers   
dtype_namexprj   rk   rl   rT   s           r%   'test_is_multilabel_array_api_compliancery   ~  s    
 
ov	6B!3!9!9!;~33	%Gzz'"((--4**WJ?**W-jjj8G48 M%  G#G;l9+F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)rB   r@   rA   zUnknown label type: match)rP   keysrE   rF   rG   r   )rU   rT   msgs      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(rb   z, got z6Expected array-like \(array or non-string sequence\).*r{   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.)rP   rc   r   rQ   rE   rF   rG   MULTILABEL_SEQUENCES)rj   rk   rT   	msg_regexr~   s        r%   test_type_of_targetr     s    !)!1~%Gw'50 w'0 & "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'r{   )	rE   importorskiparraysSparseArrayrI   nanrF   rG   r   )pdrS   r~   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(   r-   r.   r   r=   )r   r   r   r   r?   gffffff?g@r   rA   r   r   r   r<   r(   r-   r>   N)rE   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&!%====rM   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)rE   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&rM   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.   r5   r   r   r(   r-   r5   r   r   r(   r-   r.   r5   )r   r:      r      )r:   r.   )rh   )r   r(   r.   )r   r(   r-   r   r   )r-   r-   r   r   )r8   UUUUUU?gUUUUUU?)r   r   r         ?)r          @r   r   r   r   )qq?r   qq?)r   r   r   )rI   rK   r   rH   rh   r   )r   rS   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     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 rM   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!   targetrI   dotTr   listsplitr   r   )clfclfpirisXrS   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.rM   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?r8   r-   r/   )r   r   r   r8   )atol)r(   r   r(   r(   r   )axis)r(   r(   )r-   r(   r.   r   gư>)rI   rK   r   r   r   argmaxrH   )predictionsconfidencesr   
dec_valuesvotesexpected_predictionidec_values_ones           r%   test_ovr_decision_functionr   2  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_typer   rK   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   bzSupport for labels represented as bytes is deprecated in v1.5 and will error in v1.7. Convert the labels to a string or integer format.r{   )r   rE   warnsFutureWarningr   )r   r   err_msgs      r%   test_labels_in_bytes_formatr   Z  sC    
  tj9F	L  
m7	3v 
4	3	3s   AA
)J	itertoolsr   numpyrI   rE   scipy.sparser   sklearnr   r   sklearn.model_selectionr   sklearn.svmr   sklearn.utils._array_apir	   sklearn.utils._testingr
   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   rK   multilabel_explicit_zerotupleboolintint8uint8floatfloat32r&   randomRandomStaterandintrC   	frozensetrP   ru   rQ   r   rN   rV   r]   rp   markparametrizery   r   r   r   r   r   r   r   r   r   r    rM   r%   <module>r      sN      ! , 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/,$;P '89
 :
rM   