
    Wh+V                        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 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jR                  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j^                  e0ejb                  ffdZ2g  e2ejf                  ji                  d      jk                  dd      ee-f      d dgdd ggd dgg e2e*ee-f       e2d dgdd gg       e2d d gd d gg       e2d dgg      ddgddgg ejR                  ddgddgg       ejR                  ddgddgg       e ejR                  ddgddgg            g d ejR                  g d       ejR                  g dej\                         ejR                  g dej^                         ejR                  g de0       ejR                  g dejb                         ejR                  dgd gdgg       e ejR                  g d            g dg d ejR                  g d       ejR                  g de6       ejR                  g de6      gg dg dgddgd d!gg ejR                  g dg dg       ejR                  g dg dgej\                         ejR                  g dg dgej^                         ejR                  g dg dge0       ejR                  g dg dgejb                        g e2g dg dgeez   e-ej\                  ej^                  e0ejb                  f       ejR                  ddgd d!gg       ejR                  ddgd d!gg       ejR                  ddgd d!gge6       ejR                  g dg       e ejR                  g dg            d dgddgg d g ejR                  g d"       ejR                  g d"e,       ejR                  g d"ej\                         ejR                  g d"ej^                         ejR                  g d"e0       ejR                  g d"ejb                         ejR                  d gdgg       e ejR                  d gdgg            ddgdd#gdgddgd$d%g ejR                  d$d%g      ddg ejR                  d$d%ge6      gd&gd d'g ejR                  d gd'gg       ejR                  d gd'ggejb                        g ejR                  d d'gd'd gg       ejR                  d d'gd'd ggejb                         ejR                  d d'gg      g e2d d'gd'd ggeez   e0ejb                  f       e2d d'ggeez   e0ejb                  f      g g ejR                  g ge6      d(g ejR                   ejR                  g        ejR                  g d)      ge6       ejR                  g        ejR                  g d)      gh d*ddhg e7g d)       e7ddg      gddd+d dig ejR                  d        ejR                  g g g       ejR                  d dgddggd,d#gd-d.ggg      gd/Z8ejf                  ji                  d      jk                  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jR                  ddgddgg       ejR                  ddgddgg       e ejR                  ddgddgg            g	g d ejR                  g d       ejR                  g dej\                         ejR                  g dej^                         ejR                  g de0       ejR                  g dejb                         ejR                  dgd gdgg       e ejR                  g d            g dg	g dg dg ejR                  g dg dg       ejR                  g dg dgej\                         ejR                  g dg dgej^                         ejR                  g dg dge0       ejR                  g dg dgejb                         ejR                  g dg       e ejR                  g dg            gd dgddgg d g ejR                  g d"       ejR                  g d"e,       ejR                  g d"ej\                         ejR                  g d"ej^                         ejR                  g d"e0       ejR                  g d"ejb                         ejR                  d gdgg       e ejR                  d gdgg            ddgdd#ggd&gd d'g ejR                  d gd'gg       ejR                  d gd'ggejb                        g ejR                  d d'gd'd gg       ejR                  d d'gd'd ggejb                         ejR                  d d'gg      gg gd(g ejR                  d        ejR                  d dgddggd,d#gd-d.ggg      gd/Z9h d*ddd+d#gd#gd+d$ e7g d)      dgZ:dgdgd dggg d0 ejR                  g ddggd1       e ejR                  g ddggd1            gZ;d2 Z<d3 Z=d4 Z>d5 Z?d6 Z@ej                  j                  d7 e       e8      d9        ZCd: ZDd; ZEd< ZFd= ZGej                  j                  d>g d?      d@        ZHej                  j                  dAe      dB        ZIdC ZJdD ZKej                  j                  dEdFdGg      dH        ZLy)I    N)product)issparse)config_contextdatasets)ShuffleSplit)SVC)_get_namespace_device_dtype_ids)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        ]/var/www/html/jupyter_env/lib/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/   r2   r3   r4   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)   r:   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.   r6   r1   )r   )r)   r   )r6   r6   )r6   r/   )r/   r6   )
pytestraises
ValueErrorr   r   rangenparangearrayonesr!       r&   test_unique_labelsrO     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                  V   t        j                  t        j                  d      dgf      } d}t        j                  t
        |      5  t        |        ddd       t        j                  d      } t        j                         5  t        j                  d       t        |        ddd       t        j                  d      } t        j                         5  t        j                  d	t
               t        |        ddd       y# 1 sw Y   xY w# 1 sw Y   mx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.
       r   zJThe number of unique classes is greater than 50% of the number of samples.matchNr*   error   ignore)
rJ   hstackrK   rF   warnsUserWarningr   warningscatch_warningssimplefilter)ymsgs     r&   +test_type_of_target_too_many_unique_classesr_   *  s     			299R=1#&'A
WC	k	- q 			"A		 	 	" g&q 			"A		 	 	" h4q  
  s$   	D!D&DDDD(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=   )rC   rA   rB   r?   )EXAMPLESr   NON_ARRAY_LIKE_EXAMPLESrF   rG   rH   )formatr]   exampley_types       r&   test_unique_labels_non_specificrf   I  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)   r2   r5   1r.   2)r   ra   rF   rG   rH   r   )mix_clf_formaty_multilabely_multiclasss      r&   test_unique_labels_mixed_typesrm   a  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 )ra   itemsr   hasattrrJ   asarrayndimr    kindshaper   r   r   r   r   r   toarray)groupgroup_examples	dense_exprd   
sparse_expr%   examples_sparseexmpl_sparses           r&   test_is_multilabelr   z  ss   !)!1 #~33	%  	G #8x'8J -JJw',,1JJw'--22f<JJw'--a014
 '()() )) )	)	#( %W-	# 	# %4 L%|)DD ((8ZLQD  !//+g 66  <	{C6= 	#	#s   #Ez#array_namespace, device, dtype_name)idsc                    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_dispatchrq   rr   )	r   ARRAY_API_EXAMPLESrs   rJ   ru   r    rw   r   r   )array_namespacer   
dtype_namexprz   r{   r|   rd   s           r&   'test_is_multilabel_array_api_compliancer     s     
ov	6B!3!9!9!; ~33	% 
	Gzz'"((--4**WJ?**W-jjj8G48  M'$:: $WK|I;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)rC   rA   rB   zUnknown label type: rR   )ra   keysrF   rG   rH   r   )re   rd   r^   s      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(rr   z, got z6Expected array-like \(array or non-string sequence\).*rR   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.)ra   rs   r   rb   rF   rG   rH   MULTILABEL_SEQUENCES)rz   r{   rd   	msg_regexr^   s        r&   test_type_of_targetr     s    !)!1 	~% 	G!'*e3  "7+	3		 + $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'rR   )	rF   importorskiparraysSparseArrayrJ   nanrG   rH   r   )pdr]   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   rB   r   r   r   r=   r)   r.   r?   N)rF   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&!%====rN   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)rF   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&rN   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/   r6   r   r   r)   r.   r6   r   r   r)   r.   r/   r6   )r   r;      r      )r;   r/   )rx   )r   r)   r/   )r   r)   r.   r   r   )r.   r.   r   r   )r9   UUUUUU?gUUUUUU?)r   r   r         ?)r          @r   r   r   r   )qq?r   qq?)r   r   r   )rJ   rL   r   rI   rx   r   )r   r]   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rN   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"   targetrJ   dotTr   nextitersplitr   r   )clfclfpirisXr]   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tBHHQK()KE4"31e4GW#D!Q6GXgrvvgwyy'ABgx0 aD%8NFF!$1dE:OFGfbffVWYY&?@fg.rN   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?r9   r.   r0   )r   r   r   r9   )atol)r)   r   r)   r)   r   )axis)r)   r)   )r.   r)   r/   r   gư>)rJ   rL   r   r   r   argmaxrI   )predictionsconfidencesr   
dec_valuesvotesexpected_predictionidec_values_ones           r&   test_ovr_decision_functionr   V  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)
input_typelistrL   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 supportedrR   )r   rF   rG   	TypeErrorr   )r   r   err_msgs      r&   !test_labels_in_bytes_format_errorr   }  sD    
  tj9FHG	y	0 v  s   AA
)MrZ   	itertoolsr   numpyrJ   rF   scipy.sparser   sklearnr   r   sklearn.model_selectionr   sklearn.svmr   sklearn.utils._array_apir	   r
   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   rL   multilabel_explicit_zerotupleboolintint8uint8floatfloat32r'   randomRandomStaterandintrD   	frozensetra   r   rb   r   rO   r_   rf   rm   r   markparametrizer   r   r   r   r   r   r   r   r   r   r!   rN   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	 V<>'0,2$N )-/'  

$	6$6>* "AB' C' .90N :0Nf/,$;N '89 :rN   