
    /iiYT                        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j)        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j1        ffdZ2g  e2ej3        4                    d          5                    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j)        ddgddgg           ej)        ddgddgg           e ej)        ddgddgg                    g d ej)        g d           ej)        g dej.                   ej)        g dej/                   ej)        g de0           ej)        g dej1                   ej)        dgd gdgg           e ej)        g d                    g dg d ej)        g d           ej)        g de6           ej)        g de6          gg dg dgddgd d!gg ej)        g dg dg           ej)        g dg dgej.                   ej)        g dg dgej/                   ej)        g dg dge0           ej)        g dg dgej1                  g e2g dg dgeez   e-ej.        ej/        e0ej1        f           ej)        ddgd d!gg           ej)        ddgd d!gg           ej)        ddgd d!gge6           ej)        g dg           e ej)        g dg                    d dgddgg d g ej)        g d"           ej)        g d"e,           ej)        g d"ej.                   ej)        g d"ej/                   ej)        g d"e0           ej)        g d"ej1                   ej)        d gdgg           e ej)        d gdgg                    ddgdd#gdgddgd$d%g ej)        d$d%g          ddg ej)        d$d%ge6          gd&gd d'g ej)        d gd'gg           ej)        d gd'ggej1                  g ej)        d d'gd'd gg           ej)        d d'gd'd ggej1                   ej)        d d'gg          g e2d d'gd'd ggeez   e0ej1        f           e2d d'ggeez   e0ej1        f          g g ej)        g ge6          d(g ej)         ej)        g            ej)        g d)          ge6           ej)        g            ej)        g d)          gh d*ddhg e7g d)           e7ddg          gddd+d dig ej)        d            ej)        g g g           ej)        d dgddggd,d#gd-d.ggg          gd/Z8ej3        4                    d          5                    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j)        ddgddgg           ej)        ddgddgg           e ej)        ddgddgg                    g	g d ej)        g d           ej)        g dej.                   ej)        g dej/                   ej)        g de0           ej)        g dej1                   ej)        dgd gdgg           e ej)        g d                    g dg	g dg dg ej)        g dg dg           ej)        g dg dgej.                   ej)        g dg dgej/                   ej)        g dg dge0           ej)        g dg dgej1                   ej)        g dg           e ej)        g dg                    gd dgddgg d g ej)        g d"           ej)        g d"e,           ej)        g d"ej.                   ej)        g d"ej/                   ej)        g d"e0           ej)        g d"ej1                   ej)        d gdgg           e ej)        d gdgg                    ddgdd#ggd&gd d'g ej)        d gd'gg           ej)        d gd'ggej1                  g ej)        d d'gd'd gg           ej)        d d'gd'd ggej1                   ej)        d d'gg          gg gd(g ej)        d            ej)        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j)        g ddggd1           e ej)        g ddggd1                    gZ;d2 Z<d3 Z=d4 Z>d5 Z?d6 Z@ejA        B                    d7 e            e8          d9             ZCd: ZDd; ZEd< ZFd= ZGejA        B                    d>g d?          d@             ZHejA        B                    dAe          dB             ZIdC ZJdD ZKejA        B                    dEdFdGg          dH             ZLdS )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                 $      fd|D             S )Nc                 4    g | ]}D ]} ||           S )dtype ).0sparse_containerr!   datadtypess      i/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/sklearn/utils/tests/test_multiclass.py
<listcomp>z$_generate_sparse.<locals>.<listcomp>7   sP          	U+++       r"   )r%   sparse_containersr&   s   ` `r'   _generate_sparser+   ,   s4         1   r)   *      )
   r.   )size)r*   r&      )
r   r   r-   r-   r      r-   r3   r3   r3   r   r   r-   r    r   r   r-   )abc)r   r   r-   r-   )r   r3   r-   r3   r6   r7   r8   d)
r   r   r   r   r   r   r   r   r   r      abcdefgh㈵>      ?r"   )r   r-   r2   >   r   r-   r2   r   r   r3         )multilabel-indicator
multiclassmulticlass-multioutputbinary
continuouscontinuous-multioutputunknown)r"   r-   r>   objectc            
         t          j        t                    5  t                       d d d            n# 1 swxY w Y   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            n# 1 swxY w Y   t          j        t                    5  t          t          j	        d          t          j	        d                     d d d            n# 1 swxY w Y   t	          t          t          j	        d          t          j	        d                    t          j        d                     d S )Nr.   )r3   r   r-   )r   r-   r3   )r   r   r   )r   r   r   )r   r   r   r2   r:   r5   r   )r-   r   )r:   r:   )r:   r3   )r3   r:   )
pytestraises
ValueErrorr   r   rangenparangearrayonesr"   r)   r'   test_unique_labelsrS     s   	z	"	"                 }U2YY//2???}RYr]]33RYr]]CCC}YYY//)))1D1DEEE bh			999iii@AABBBIaLL   }RXyyy))).D%E%EFF	RSUUU }YYYa9929Q<<HHH}Yf==ry||LLL 
z	"	" 2 2iii1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2	z	"	" 8 8bgfoorwv7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 }RWV__bgfooFF	RSUUUUUs0   599
%H;;H?H?5J  J$'J$c                  |   t          j        d          } d}t          j        t          |          5  t          |            ddd           n# 1 swxY w Y   t          j        d          } t          j                    5  t          j        d           t          |            ddd           dS # 1 swxY w Y   dS )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.matchNr.   error)	rO   rP   rK   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#   AAA $B11B58B5c                     dD ]!} t           |          D ]}t          |           "t          D ]B}t          j        t
                    5  t          |           d d d            n# 1 swxY w Y   CdD ]R}t           |         D ]B}t          j        t
                    5  t          |           d d d            n# 1 swxY w Y   CSd S )N)rD   rB   rA   )rG   rE   rF   rC   )EXAMPLESr   NON_ARRAY_LIKE_EXAMPLESrK   rL   rM   )formatr^   exampley_types       r'   test_unique_labels_non_specificrg   >  sm    C  &! 	 	A!	 + # #]:&& 	# 	#'"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# ' '  ' 	' 	'Gz** ' 'g&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '	'' 's$   A##A'	*A'	B77B;>B;c                     t          t          d         t          d         t          d         z             } | D ]\  }}t          j        t                    5  t          ||           d d d            n# 1 swxY w Y   t          j        t                    5  t          ||           d d d            n# 1 swxY w Y   t          j        t                    5  t          ddggddgg           d d d            n# 1 swxY w Y   t          j        t                    5  t          ddg           d d d            n# 1 swxY w Y   t          j        t                    5  t          ddgdd	gg           d d d            n# 1 swxY w Y   t          j        t                    5  t          dd
gdd	gg           d d d            d S # 1 swxY w Y   d S )NrA   rB   rD   r   r-   r6   r9   1r2   2)r   rb   rK   rL   rM   r   )mix_clf_formaty_multilabely_multiclasss      r'   test_unique_labels_mixed_typesrn   V  s;   '((<*@8HCU*U N '5 6 6"l]:&& 	6 	6,555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6]:&& 	6 	6,555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 
z	"	" . .1vh#s---. . . . . . . . . . . . . . . 
z	"	"    sAh                              
z	"	" * *Qx!Q()))* * * * * * * * * * * * * * * 
z	"	" , ,SzAq6*+++, , , , , , , , , , , , , , , , , ,sl   A22A6	9A6	B33B7	:B7	C;;C?C?D==EE!FF
F'G

GGc                     t                                           D ]D\  } }| dk    }|D ]4|ot                    }t                    spt          d          rt	          j                  j        dk    rt	          j                  j        j        dv r~t	          j                  j	        d         dk    r[fdt          t          z   t          z   t          z   t          z   D             }|D ]%}|t          |          k    sJ d|d	|             &t                    r                                |t                    k    sJ dd	|             6Fd S )
NrA   	__array__r-   biufr   r   c                 &    g | ]} |          S r"   r"   )r#   r$   re   s     r'   r(   z&test_is_multilabel.<locals>.<listcomp>~  s4     	# 	# 	#( %$W--	# 	# 	#r)   is_multilabel() should be )rb   itemsr   hasattrrO   asarrayndimr!   kindshaper   r   r   r   r   r   toarray)groupgroup_examples	dense_exp
sparse_expexamples_sparseexmpl_sparsere   s         @r'   test_is_multilabelr   o  s   !)!1!1 # #~33	%  	  	G #8x'8'8J   --Jw'',11Jw''-2f<<Jw''-a0144	# 	# 	# 	# '()() )) )	)	# 	# 	# %4  L%|)D)DDDDQQQZQQ EDDD
    ,!//++g 6 6666CCC	CC 7666= 	# #r)   z#array_namespace, device, dtype_name)idsc                    t          | |          }t                                          D ]\  }}|dk    }|D ]}t          j        |          j        j        dk    rt          j        ||          }nt          j        |          }|                    ||          }t          d          5  |t          |          k    sJ d|d|             	 d d d            n# 1 swxY w Y   d S )	NrA   fr    )deviceT)array_api_dispatchrs   rt   )	r   ARRAY_API_EXAMPLESru   rO   rw   r!   ry   r   r   )array_namespacer   
dtype_namexpr|   r}   r~   re   s           r'   'test_is_multilabel_array_api_compliancer     sO    
ov	6	6B!3!9!9!;!;  ~33	% 
	 
	Gz'""(-44*WJ???*W--jjj88G4888   M'$:$::::GWGGIGG ;:::              
	 s   -$CC"%C"c                  .   t                                           D ]z} | dv rUt           |          D ]F}d}t          j        t          |          5  t          |           d d d            n# 1 swxY w Y   G[t           |          D ]}t          |           {d S )N)rG   rE   rF   zUnknown label type: rV   )rb   keysrK   rL   rM   r   )rf   re   r_   s      r'   !test_check_classification_targetsr     s    --// 6 6HHH#F+ : :,]:S999 : :0999: : : : : : : : : : : : : : ::
 $F+ 6 6,W555566 6s   A((A,/A,c                     t                                           D ]=\  } }|D ]5}t          |          | k    s J d|d| dt          |                      6>t          D ]F}d}t	          j        t          |          5  t          |           d d d            n# 1 swxY w Y   Gt          D ]F}d}t	          j        t          |          5  t          |           d d d            n# 1 swxY w Y   Gd S )Nztype_of_target(rt   z, got z6Expected array-like \(array or non-string sequence\).*rV   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.)rb   ru   r   rc   rK   rL   rM   MULTILABEL_SEQUENCES)r|   r}   re   	msg_regexr_   s        r'   test_type_of_targetr     s   !)!1!1 	 	~% 	 	G!'**e3333 GGEE"7+++	 4333	 + $ $M	]:Y777 	$ 	$7###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ ( $ $< 	
 ]:S111 	$ 	$7###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$$ $s$   >BB	!B	C((C,	/C,	c                  2   t          j        d          } | j                            dt          j        t          j        dt          j        g          }d}t          j        t          |          5  t          |           d d d            d S # 1 swxY w Y   d S )Npandasr   z1y cannot be class 'SparseSeries' or 'SparseArray'rV   )	rK   importorskiparraysSparseArrayrO   nanrL   rM   r   )pdr^   r_   s      r'   !test_type_of_target_pandas_sparser     s    		X	&	&B
	q"&"&!RV<==A
=C	z	-	-	-  q                 s   /BBBc                     t          j        d          } dD ]^}|                     g d|          }t          |          dk    sJ |                     g d|          }t          |          dk    sJ _|                     dd	gd	dggd
          }t          |          dk    sJ |                     ddgddggd          }t          |          dk    sJ |                     ddgddggd          }t          |          dk    sJ dS )z<Check that type_of_target works with pandas nullable dtypes.r   )Int32Float32)r   r   r-   r2   r3   r    rB   )r   r   r   r   rD   gffffff?g@r   rF   r   r   r   rA   r-   r2   rC   N)rK   r   Seriesr   	DataFrame)r   r!   y_trues      r'   #test_type_of_target_pandas_nullabler     sB   		X	&	&B% 2 2???%88f%%5555<<<u55f%%11111\\C:Sz2)\DDF&!!%=====\\Aq6Aq6*'\::F&!!%;;;;;\\Aq6Aq6*'\::F&!!%=======r)   r!   )Int64Float64booleanc                     t          j        d          }|                    g d|           }|                    g dd          }t          ||          }t	          |ddg           dS )	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)rK   r   r   r   r   )r!   r   r   y_predictedlabelss        r'   "test_unique_labels_pandas_nullabler     su     
	X	&	&BYY222%Y@@F))777w)GGK6;//Fv1v&&&&&r)   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 ]}t          ||         ||                    t          ||         ||                    t          ||         ||                    t          |	|         ||                    t          |
|         ||                    t          ||         ||                    t          |g d          \  }}}t          |g d          \  }	}
}g dg ddgdgg}t          |j        d                   D ]}t          ||         ||                    t          ||         ||                    t          ||         ||                    t          |	|         ||                    t          |
|         ||                    t          ||         ||                    d S )N)r   r   r   r   )r-   r-   r   r   )r   r2   r   r   )r3   r-   r   r   )r-   r   r   r   )r   r-   r   r3   r-   r   r   r-   r2   r-   r2   r   r   r   r   r   r   )r   r   r-   r2   r3   r:   r   r   r-   r2   r:   r   r   r-   r2   r3   r:   )r   r?      r      )r?   r3   )rz   )r   r-   r3   )r   r-   r2   r   r   )r2   r2   r   r   )r=   UUUUUU?gUUUUUU?)r   r   r         ?)r          @r   r   r   r   )qq?r   qq?)r   r   r   )rO   rQ   r   rN   rz   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     s   
LLLLLLLLLLLL	
		 		A 8GGGHHDhJJJKKGX((())F=$0???D&8&;&;#GY/A$/G/G,Jn!		999qcA37%1113H3H3H3%RUQVW171: N N!'!*.>q.ABBB!)A,0B10EFFF!+a.2Fq2IJJJ!*Q-1A!1DEEE!,q/3Ea3HIII!."35I!5LMMMM );	)))) )%Wi 2D	)))2 2.Z~ 2113H3H3H3%RUQVW171: N N!'!*.>q.ABBB!)A,0B10EFFF!+a.2Fq2IJJJ!*Q-1A!1DEEE!,q/3Ea3HIII!."35I!5LMMMMN Nr)   c                     t                      } t          d          }t          j                    }|j        |j        }}t          j        ||j                  }t          dd          }t          t          |                    |                              \  }}t          | |||          \  }	}
t          ||||          \  }}t          |t          j        |	|	j                             t          |
|           t          | ||||          \  }}t          |||||          \  }}t          |t          j        ||	j                             t          ||           d S )Nprecomputed)kernelg      ?r   )	test_sizerandom_state)r   r   	load_irisr%   targetrO   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   5  s@   
%%Cm$$$DD9dkqA
q!#A	1	5	5	5BtBHHQKK(())KE4"31e44GW#D!Q66GXgrvgwy'A'ABBBgx000 aD%88NFF!$1dE::OFGfbfVWY&?&?@@@fg.....r)   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         k    sJ fdt          d          D             }t          | |d           d S )N)r   r   r   )r   r   r   ) 7yAr   r   )r   r   g      )g      r   g      @)g      g?r=   r2   r4   )r   r   r   r=   )atol)r-   r   r-   r-   r   )axis)r-   r-   )r2   r-   c           	          g | ]K}t          t          j        |         g          t          j        |         g                    d          LS rJ   )r   rO   rQ   )r#   iconfidencesr   predictionss     r'   r(   z.test_ovr_decision_function.<locals>.<listcomp>h  sf         	Hk!n%&&+a.1A(B(BI	
 	

	  r)   r3   gư>)rO   rQ   r   r   r   argmaxrN   )
dec_valuesvotesexpected_predictiondec_values_oner   r   r   s       @@@r'   test_ovr_decision_functionr   K  sh    (IIIyyy)))YYYGHHK(			,,,.>.>.>@P@P@PQ K I'[)LLJ HiiiIIIyyyABBEE:C0000
 (<<<00ry!4446IJJJ dj.....      q	  N JT::::::r)   
input_typelistrQ   c                     t          ddg|           }d}t          j        t          |          5  t	          |           d d d            d S # 1 swxY w Y   d S )N   a   bz8Support for labels represented as bytes is not supportedrV   )r   rK   rL   	TypeErrorr   )r   r   err_msgs      r'   !test_labels_in_bytes_format_errorr   r  s    
  tj99FHG	y	0	0	0  v                 s   AAA)Mr[   	itertoolsr   numpyrO   rK   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   rQ   multilabel_explicit_zerotupleboolintint8uint8floatfloat32r+   randomRandomStaterandintrH   	frozensetrb   r   rc   r   rS   r`   rg   rn   r   markparametrizer   r   r   r   r   r   r   r   r   r   r"   r)   r'   <module>r     s               ! ! ! ! ! ! , , , , , , , , 0 0 0 0 0 0                           7 6 6 6 6 6              5 4 4 4 4 4                $28aVaV$455 !" A 
 e
	
	 	 		  #rw%<   & 
	I!!"%%--ah-??,6

 

 

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

 

 

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

 

 

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

 

 

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

 

 

  
"V$$$	("(2,, 3 34FCCC	"xrx			**+	QF	999		yy!Q001S		As8$"bAq6Aq6"aVaV$4566!Iv vt 		b!!))!();;
Q!Q
Q 
Q!Q
a1b'2q'Ar7#$$2q'Ar7#$$HBHr1g2w/0011
 	'&&"'***"(+++%((("*---1#sQC!!HBHYYY''((		
 
|||$,,,-..,,,-RW===,,,-RX>>>,,,-U;;;,,,-RZ@@@)))HBHiii[))**	 
A	
A
	
///00///t<<<///rw???///rx@@@///u===///rzBBB1#sHBHqcA3Z(())	
B	
A" 
	
C1#u1#uRZ000	 	1c(S!H%&&1c(S!H%RZ8881c( 
	Aq6Aq6"aVaV$4566	yB B L II	
	Iiii  S1#1vBHb1a&\***K"q!fX66677	 V V V<( ( ((' ' '0, , ,2$ $ $N )--//'   
  
$	6 	6 	6$ $ $6  > > >* "A"A"ABB' ' CB' .990N 0N :90Nf/ / /,$; $; $;N '899  :9  r)   