
    h$,fzs                        d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dlZ	d dl
Z
d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z" d dl#m$Z$ d d	l%m&Z&m'Z'm(Z(m)Z) d d
l*m+Z+m,Z,  e	jZ                  d      j]                  d      Z/d Z0d Z1d Z2d Z3d Z4d Z5e
jl                  jo                  de,      d        Z8e
jl                  jo                  de,      d        Z9d Z:e
jl                  jo                  dddd e	jv                  d      dfg ddfg dd fd!d" e<dd      df e<d d#      df e	jz                  g de	j|                  $      df e	jz                  g de	j~                  $      df e	jz                  g de	j                  $      dfdd%gdfd& e	jz                  dd%g      dfd'g d(d fd) e<d*d+      d f e	jz                  g d(      d f e	jz                  g d(eA$      d fg      d,        ZBd- ZCd. ZDe
jl                  jo                  d/g d0      e
jl                  jo                  d1g d2      d3               ZEe
jl                  jo                  d/g d4      e
jl                  jo                  d1g d2      d5               ZFe
jl                  jo                  d/g d6      e
jl                  jo                  d1g d2      e
jl                  jo                  d7d8d#gd9d:gg      d;                      ZGe
jl                  jo                  d<dd%g      e
jl                  jo                  d=dd%g      e
jl                  jo                  d/g d6      e
jl                  jo                  d1d>d?g      e
jl                  jo                  d@d g dAg dBgfd8d#dCgdDdEgdFdggfg      dG                                    ZHe
jl                  jo                  d/g d4      e
jl                  jo                  d1g dH      dI               ZIe
jl                  jo                  d/g d6      e
jl                  jo                  d1g dH      e
jl                  jo                  dJd g dAg dBgfd8d#dCgdDdEgdFdggfg      dK                      ZJe
jl                  jo                  dLg dM      dN        ZKe
jl                  jo                  d/g d4      dO        ZLe
jl                  jo                  dLg dP      e
jl                  jo                  d7d#d:g      dQ               ZMe
jl                  jo                  d/g dR      dS        ZNdT ZOe
jl                  jo                  dUddCg      dV        ZPe
jl                  jo                  dWd>d?g      dX        ZQdY ZRdZ ZSe
jl                  jo                  d7d d d8g e<d d#       e	jz                  d d8g      g      d[        ZTe
jl                  jo                  d\d]d^ eA       d_fg      d`        ZUe
jl                  jo                  dadbgdcgdbdcgdbddgdcddgg      de        ZVdf ZWe
jl                  jo                  dge+      dh        ZXdi ZYe
jl                  jo                  djg dk      dl        ZZdm Z[e
jl                  jo                  g dndoe j                  d%fdpe j                  d%fdoe j                  dCz  dfdqe j                  dfdoe j                  drz   d%fg      e
jl                  jo                  dsdtgg du      dv               Z]e
jl                  jo                  dwdxgdy edodydz      d{z   fd| edod|dz      d{z   fd}g      d~        Z^e
jl                  jo                  d e_d      dfe	j                  df e_e	j                        df e	j                  e	j                        df e	j                  e	j                        dfddddde	j                  gd%fdg      d        Zcd Zdd Zed Zfe
jl                  jo                  d e	jz                  d8       e	jz                  d#      gd8d#gdCdggg      d        Zge
jl                  jo                  d/g d6      d        Zhd Zid Zjd Zky)    N)copy)chain)SkipTest)config_context)parse)_approximate_mode_determine_key_type_get_column_indices_is_polars_df_message_with_time_print_elapsed_time_safe_assign_safe_indexing_to_object_arraycheck_random_statecolumn_or_1d
deprecatedgen_even_slicesget_chunk_n_rowsis_scalar_nanresample	safe_maskshuffle)MockDataFrame)_convert_containerassert_allclose_dense_sparseassert_array_equalassert_no_warnings)CSC_CONTAINERSCSR_CONTAINERS	   )   r"   c                     t        d       t        j                  j                  j                  u sJ t        t        j                        t        j                  j                  j                  u sJ t        j                  j                  d      } t        d      j                  d      | j                  d      k(  sJ t        j                  j                  d      } t        |       | u sJ t        j                  j                  d      } t        d      j                  d      | j                  d      k7  sJ t        j                  t              5  t        d       d d d        y # 1 sw Y   y xY w)N*   d   +   zsome invalid seed)
r   nprandommtrand_randRandomStaterandintpytestraises
ValueError)rng_42s    >lib/python3.12/site-packages/sklearn/utils/tests/test_utils.pytest_make_rngr2   .   s   d#ryy'7'7'='====bii(BII,<,<,B,BBBBYY""2&Fb!))#.&..2EEEEYY""2&Ff%///YY""2&Fb!))#.&..2EEEE	z	" 0./0 0 0s   E''E0c                     t        j                  d      5 } t        j                  d       t               d        } |       }|dk(  sJ t	        |       dk(  sJ t        | d   j                  t              sJ dt        | d   j                        j                         v sJ 	 d d d        t        j                  d      5 } t        j                  d       t        d	       G d
 d             } |       }t        |d      sJ t	        |       dk(  sJ t        | d   j                  t              sJ dt        | d   j                        j                         v sJ 	 d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NT)recordalwaysc                       y)Nspam r8       r1   hamztest_deprecated.<locals>.hamH   s    r9   r7      r   r   zdon't use thisc                       e Zd ZdZy)test_deprecated.<locals>.Hamr;   N)__name__
__module____qualname__SPAMr8   r9   r1   Hamr=   X   s    Dr9   rB   rA   )warningscatch_warningssimplefilterr   len
issubclasscategoryFutureWarningstrmessagelowerhasattr)wr:   r7   rB   s       r1   test_deprecatedrO   @   sh   
 
	 	 	- 9h'		 
	 uv~~1v{{!A$--777s1Q4<<06688889  
	 	 	- 9h'	$	%	 	 
&	 esF###1v{{!A$--777s1Q4<<06688889 9!9 9 9 9s   BE)BE5)E25E>c                  R   t               J t        j                  t              5  t        dgddg       d d d        t        j                  t              5  t        ddgddgdd       d d d        t	        t        ddgd            dk(  sJ y # 1 sw Y   \xY w# 1 sw Y   3xY w)	Nr   r;   Fr"   )replace	n_samples      )rR   )r   r-   r.   r/   rF   r8   r9   r1   test_resamplerU   e   s    : 
z	" !q!f	z	" =!Q!Q!<= xA!,-222 = =s   BBBB&c                     t         j                  j                  d      } d}d}| j                  |df      }| j	                  d||      }t        ||ddd       \  }}t        j                  |dk(        sJ t        ||dd|      \  }}t        j                  |dk(        rJ t        j                  |      dk(  sJ y )	Nr   r%   g?r;   size
   rR   random_statestratifyr!   )r'   r(   r+   normalbinomialr   allsum)rngrR   pXy_y_not_stratifiedy_stratifieds           r1   test_resample_stratifiedrh   s   s    
))


"CIA

A
'AQ	*A"1a2APTUA66"a'(((q!rANOA|vvla'(((66,1$$$r9   c                      t         j                  j                  d      } d}| j                  |df      }| j	                  dd|      }t        ||dd| |      \  }}t        ||d	d| |      \  }}t        j                  |      j                  d   dk  sJ t        j                  |      j                  d   dk(  sJ t        ||dd
| |      \  }}|j                  d   d
k(  sJ t        j                  |      j                  d   dk(  sJ y )Nr   r%   r;   rW   rS   T2   )rQ   rR   r[   r\   F  )r'   r(   r+   r]   r,   r   uniqueshape)ra   rR   rc   rd   	X_replacere   X_no_replaces          r1    test_resample_stratified_replacerp      s   
))


"CI

A
'AAqy)A	1dbsQLIq 	1eraOL! 99Y%%a(2---99\"((+r111 	1ddqLIq ??1%%%99Y%%a(C///r9   c                      t         j                  j                  d      } d}| j                  |df      }| j	                  dd|df      }t        ||d| |      \  }}|j                  dk(  sJ y )Nr   r%   r;   rW   rS   rj   rZ   )r'   r(   r+   r]   r,   r   ndim)ra   rR   rc   rd   s       r1   test_resample_stratify_2dyrs      sm    
))


"CI

A
'AAq	1~.AAqBS1EDAq66Q;;r9   csr_containerc                 L   t         j                  j                  d      }d}|j                  |df      }|j	                  dd|      } | |j                  dd            }t        j                  t        d      5  t        ||d	||
      \  }}d d d        y # 1 sw Y   y xY w)Nr   r%   rS   rW   r;   zSparse data was passedmatchrj   rZ   )
r'   r(   r+   r]   r,   reshaper-   r.   	TypeErrorr   )rt   ra   rR   rc   rd   r\   s         r1   #test_resample_stratify_sparse_errorr{      s     ))


"CI

A
'AAqy)AQYYr1-.H	y(@	A Q1xP1Q Q Qs   =BB#c                     t        d      }|j                  dd      } | |      }g d}t        ||      }||   j                  d   dk(  sJ t        ||      }||   j                  d   dk(  sJ y )Nr   rT      )FFTTTr"   )r   randr   rm   )rt   r[   rc   X_csrmasks        r1   test_safe_maskr      s}    %a(L!QA!E+DQDT7==q   UD!D;Q1$$$r9   c                     dg dfdg dfdt        j                  d      dz  fdg dfdg d	fdd
gdgdggfdg dg dgfdg dgfdd
d
gddgdd
ggfddd
gddgdd
ggfdg dgfdt        j                  d      j                  d      fg} | D ]_  \  }}|dv r)t        t	        |      t        j
                  |             3t        j                  t              5  t	        |       d d d        a y # 1 sw Y   lxY w)Nbinary)r7   eggr7   )r   r;   r   r;   
continuousrY   g      4@
multiclassr;   rS   r"   )r   r;   rS   rS   r   r;   rS   r"   zmultilabel-indicator)r   r;   r   )r   r   r;   zmulticlass-multioutputrT   r}   zcontinuous-multioutput   )rv   r"   )r   r   r   )	r'   arangery   r   r   ravelr-   r.   r/   )EXAMPLESy_typerd   s      r1   test_column_or_1dr      s&   	*+	< 	ryy}t+,	y!	'	aS1#'	)Y!78	!I;/	!QFQFQF#;<	!QFQFQF#;<	!I;/	!299R=#8#8#ABH   	;;|A<z*  Q   	    s   C00C9	z
key, dtype)r   int)0rJ   )TboolTr   r   r;   rS   r   r   12rJ   )r   r   )r   rJ   rS   dtypeF))TFr   )col_0rJ   r   col_1col_2)r   rJ   beginendc                 $    t        |       |k(  sJ y N)r	   )keyr   s     r1   test_determine_key_typer      s    8 s#u,,,r9   c                  z    t        j                  t        d      5  t        d       d d d        y # 1 sw Y   y xY w)NzNo valid specification of therw         ?)r-   r.   r/   r	   r8   r9   r1   test_determine_key_type_errorr      s.    	z)H	I !C ! ! !s   1:c                      t        j                  t        d      5  t        t	        ddd      d       d d d        y # 1 sw Y   y xY w)NzOnly array-like or scalar arerw   r   rS   r;   F)accept_slice)r-   r.   rz   r	   slicer8   r9   r1   #test_determine_key_type_slice_errorr      s<    	y(G	H @E!QN?@ @ @s	   >A
array_type)listarraysparse	dataframeindices_type)r   tupler   seriesr   c                     ddg}|dk(  r t        |d   t              r|dxx   dz  cc<   t        g dg dg dg|       }t        ||      }t        ||d      }t	        |t        g dg dg|              y )	Nr;   rS   r   r   r}   rT            r!   r   axis
isinstancer   r   r   r   r   r   indicesr   subsets        r1   &test_safe_indexing_2d_container_axis_0r     sv     !fGw:gaj##>
a
	9i@*ME ,7GE73F "Iy#9:Fr9   )r   r   r   c                     ddg}|dk(  r t        |d   t              r|dxx   dz  cc<   t        g d|       }t        ||      }t        ||d      }t	        |t        ddg|              y )Nr;   rS   r   	r;   rS   r"   r}   rT   r   r   r   r!   r   r   r"   r   r   s        r1   test_safe_indexing_1d_containerr     sl     !fGw:gaj##>
a
:JGE ,7GE73F );QFJ)OPr9   )r   r   r   r   r;   r   r   c           	         t        |      }|dk(  r t        |d   t              r|dxx   dz  cc<   g d}t        g dg dg dg| |      }t        ||      }t        |d   t              r:| dk7  r5d	}t        j                  t        |
      5  t        ||d       d d d        y t        ||d      }t        |t        ddgddgddgg|              y # 1 sw Y   y xY w)Nr   r;   r   r   r   r   r   r   ESpecifying the columns using strings is only supported for dataframesrw   r   rS   r"   rT   r   r   r!   )
r   r   r   r   rJ   r-   r.   r/   r   r   )r   r   r   indices_convertedcolumns_namer   err_msgr   s           r1   &test_safe_indexing_2d_container_axis_1r     s     Ww:gaj##>!!.L	Iy):|E ++<lK'!*c"z['@S 	 ]]:W5 	=5"3!<	= 	=  '8qA$&AAA'?L	
		= 	=s   CCarray_read_onlyindices_read_onlyr   r   zaxis, expected_arrayr   r   r"   rT   r   r   c                 6   t        j                  g dg dg dg      }| r|j                  d       t        ||      }t        j                  ddg      }|r|j                  d       t        ||      }t	        |||      }t        |t        ||             y )	Nr   r   r   F)writer;   rS   r   )r'   r   setflagsr   r   r   )	r   r   r   r   r   expected_arrayr   r   r   s	            r1   &test_safe_indexing_2d_read_only_axis_1r   8  s     HHiI67EU#uj1Ehh1vGu% ,7GE76F );NJ)WXr9   )r   r   r   r   c                     dgdgdz  z   dgdz  z   }t        g d|       }t        ||      }t        ||d      }t        |t        ddg|              y )	NFTrS   r   r   r   r   r"   r   r   r   r   s        r1   $test_safe_indexing_1d_container_maskr   N  s^     g
"eWq[0G:JGE ,7GE73F );QFJ)OPr9   zaxis, expected_subsetc                     g d}t        g dg dg dg| |      }g d}t        ||      }t        |||      }t        |t        ||              y )Nr   r   r   r   )FTTr   r   )r   r   r   expected_subsetr   r   r   r   s           r1   test_safe_indexing_2d_maskr   X  sW     /L	Iy):|E "G ,7GE76F "?J?r9   z array_type, expected_output_type))r   r   r   r   r   r   r   r   c                     t        g dg dg dg|       }d}t        ||d      }t        g d|      }t        ||       y )Nr   r   r   rS   r   r   r   )r   expected_output_typer   r   r   r   s         r1   #test_safe_indexing_2d_scalar_axis_0r   l  sA     	9i@*MEGE73F'	3GHN 8r9   c                 N    t        g d|       }d}t        ||d      }|dk(  sJ y )Nr   rS   r   r   r"   )r   r   )r   r   r   r   s       r1   test_safe_indexing_1d_scalarr   }  s.    :JGEGE73FQ;;r9   )r   r   r   c                 R   g d}t        g dg dg dg| |      }t        |t              r:| dk7  r5d}t        j                  t
        |      5  t        ||d	       d d d        y t        ||d	      }g d
}|dk(  rdgdgdgg}t        ||      }t        ||       y # 1 sw Y   y xY w)Nr   r   r   r   r   r   rw   r;   r   )r"   r   r!   r   r"   r   r!   )r   r   rJ   r-   r.   r/   r   r   )	r   r   r   r   r   r   r   expected_outputr   s	            r1   #test_safe_indexing_2d_scalar_axis_1r     s     /L	Iy):|E '3J+$=S 	 ]]:W5 	35'2	3 	3  wQ7#8+ !sQC!oO+O=QR$V^<	3 	3s   BB&)r   r   r   c                 b    t        g dg dg dg|       }t        |d d      }t        ||       y )Nr   r   r   r   r   r   )r   rc   X_subsets      r1   test_safe_indexing_None_axis_0r     s-    Iy)<jIAaA.H 1-r9   c                      t        j                  d      } d}| j                  t              }t        j                  t
        |      5  t        |dgd       d d d        y # 1 sw Y   y xY w)Npandasz&No valid specification of the columns.rw   r   r;   r   )r-   importorskip	DataFrameX_toyr.   r/   r   )pdr   rc   s      r1   0test_safe_indexing_pandas_no_matching_cols_errorr     sV    			X	&B6G
UA	z	1 )q3%a() ) )s   A!!A*r   c                     t        j                  t        d      5  t        t        ddg|        d d d        y # 1 sw Y   y xY w)Nz'axis' should be either 0rw   r   r;   r   )r-   r.   r/   r   r   r   s    r1   test_safe_indexing_error_axisr     s6    	z)D	E 1uq!f401 1 1s	   :AX_constructorc                 <   t        t        d            }| dk(  rt        j                  |      } n+| dk(  r&t	        j
                  d      }|j                  |      } d}t	        j                  t        |      5  t        | ddgd	       d d d        y # 1 sw Y   y xY w)
NrT   r   r   r   z:'X' should be a 2D NumPy array, 2D sparse matrix or pandasrw   r   r;   r   )
r   ranger'   asarrayr-   r   Seriesr.   r/   r   )r   rc   r   r   s       r1   !test_safe_indexing_1d_array_errorr     s     	U1XA

1	(	"  *		!JG	z	1 6}q!f156 6 6s   8BBc                      ddg} g dg dg dg}d}t        j                  t        |      5  t        || d	       d d d        y # 1 sw Y   y xY w)
Nr   r   r   r   r   z.String indexing is not supported with 'axis=0'rw   r   r   r-   r.   r/   r   )r   r   r   s      r1   4test_safe_indexing_container_axis_0_unsupported_typer     sL     G	9-E>G	z	1 /ugA./ / /s   AAc                  b   t        j                  d      } t        | j                        }t        |j                        }|t        d      k\  rt        d      | j                  g dg dd      }t        |ddgd	      }t        | j                  d
      r| j                  j                  }n | j                  j                  j                  }t        j                         5  t        j                  d|       d|j                   d<   d d d        |j                   d   dk(  sJ y # 1 sw Y   xY w)Nr   3z;SettingWithCopyWarning has been removed in pandas 3.0.0.devr   )r"   r}   rT   )abr   r;   r   SettingWithCopyWarningerrorrY   )r   r   )r-   r   parse_version__version__base_versionr   r   r   rM   errorsr   corecommonrC   rD   rE   iloc)r   
pd_versionpd_base_versionrc   r   r   s         r1   4test_safe_indexing_pandas_no_settingwithcopy_warningr    s     
		X	&Br~~.J#J$;$;<O-,,TUU
9956AA1vA.Fryy23!#!A!A "$!F!F		 	 	" g'=>D 66$<1	 s   "&D%%D.c                     ddgddgddgg}d}t        j                  t        |      5  t        || d	       d
d
d
       y
# 1 sw Y   y
xY w)z@Check that we raise a ValueError when axis=1 with input as list.r;   rS   r}   rT   r   r   z!axis=1 is not supported for listsrw   r   Nr   )r   rc   r   s      r1   *test_safe_indexing_list_axis_1_unsupportedr    sP     Q!Q!Q A1G	z	1 +q'*+ + +s   AA
zkey, err_msg)rY   z all features must be in \[0, 2\])whatever/A given column is not a column of the dataframez%No valid specification of the columnsc                     t        j                  d      }|j                  t        g d      }t        j                  t
        |      5  t        ||        d d d        y # 1 sw Y   y xY w)Nr   r   columnsrw   )r-   r   r   r   r.   r/   r
   )r   r   r   X_dfs       r1   test_get_column_indices_errorr    sT     
		X	&B<<'B<CD	z	1 'D#&' ' 's   
A  A)r   col1col2col3c                 \   t        j                  d      }t        j                  dt              }g d}|j                  ||      }dj                  |       }t        j                  t              5 }t        ||        d d d        t        j                        |k(  sJ y # 1 sw Y   $xY w)Nr   )r;   rT   r   )r  r  r  r  r  r	  z1Selected columns, {}, are not unique in dataframe)r-   r   r'   zerosr   r   formatr.   r/   r
   rJ   value)r   r   toyr
  rc   r   exc_infos          r1   6test_get_column_indices_pandas_nonunique_columns_errorr    s     
		X	&B
((6
%C6G
S'*AAHHMG	z	" $hAs#$x~~')))$ $s   2B""B+c                      d } t        j                  ddgddggddgdd	ggg      }t         | |            }t        |       t         | |            |k(  sJ y )
Nc                 &    t        d | D              S )Nc              3   @   K   | ]  }t        d  |D                yw)c              3   2   K   | ]  }t        |        y wr   r   ).0Cs     r1   	<genexpr>zPtest_shuffle_on_ndim_equals_three.<locals>.to_tuple.<locals>.<genexpr>.<genexpr>  s     /58/s   Nr  )r  Bs     r1   r  zFtest_shuffle_on_ndim_equals_three.<locals>.to_tuple.<locals>.<genexpr>  s     ;AU/Q//;s   r  )As    r1   to_tuplez3test_shuffle_on_ndim_equals_three.<locals>.to_tuple  s    ;;;;r9   r;   rS   r"   r}   rT   r   r   r   )r'   r   setr   )r!  r   Ss      r1   !test_shuffle_on_ndim_equals_threer$    sb    < 	Aq6Aq6"aVaV$456AHQKAAJx{q   r9   csc_containerc           	         g d}t        j                  g dt              }g d}t        t        j                  ddgddgdd	ggt                    } | t        j                  d
      j                  dd	            }t        |||||d      \  }}}}	}
|g dk(  sJ t        |      t        k(  sJ t        |g d       |j                  t        k(  sJ |g dk(  sJ t        |      t        k(  sJ t        |	t        j                  dd	gddgddggt                     t        |	      t        k(  sJ t        |
j                         t        j                  ddgd	dgddgg             y )Nr   r   cr   r   r   r   r   r;   r(  rS   r   r"   )r[   )r(  r   r   )r"   rS   r;   r}   rT   )r'   r   objectr   r   ry   r   typer   r   r   toarray)r%  r   r   r(  dea_sb_sc_sd_se_ss              r1   "test_shuffle_dont_convert_to_arrayr3    sF    	A
/AAbhha3(S!H=VLMAbiil**1a01A%aAq!!DCc3/!!!9sO,99)9sBHHsAha3(%C6RS9%%%s{{}bhhAAA/G&HIr9   c            	          t        d      } t        t        t        dd      D cg c]  }| |   	 c}       }t	        | |       y c c}w )NrY   r"   )r   r   r   r   r   )
some_ranger   joined_ranges      r1   test_gen_even_slicesr7  2  sB    rJrST?UVe
5 1VWXLz<0  Ws   A)	row_bytes
max_n_rowsworking_memoryexpected))   Nr;   r<  )r<  NgG?  )r=  Nr;     )r>  Nr;   r=  )r<  NrS   i   )r<  r   r;   r   )i   Nr;   r;   c                    t        j                         5  t        j                  dt               t	        | ||      }d d d        |k(  sJ t        |      t        |      u sJ t        |      5  t        j                         5  t        j                  dt               t	        | |      }d d d        ||k(  sJ t        |      t        |      u sJ 	 d d d        y # 1 sw Y   xY w# 1 sw Y   >xY w# 1 sw Y   y xY w)Nr   r8  r9  r:  r:  r8  r9  )rC   rD   rE   UserWarningr   r*  r   )r8  r9  r:  r;  actuals        r1   test_get_chunk_n_rowsrE  9  s     
	 	 	" 
g{3!!)

 X<4>)))	~	6 .$$& 	R!!';7%	jQF	R !!!F|tH~---. .
 
	R 	R. .s/   )C1C7(C+.'C7C(+C4	0C77D c                     d} d}d}d}d}t        j                  t        |      5  t        | ||      }ddd       |k(  sJ t	        |      t	        |      u sJ t        |      5  t        j                  t        |      5  t        | |      }ddd       ||k(  sJ t	        |      t	        |      u sJ 	 ddd       y# 1 sw Y   xY w# 1 sw Y   >xY w# 1 sw Y   yxY w)	z<Check that warning is raised when working_memory is too low.i  Nr;   zICould not adhere to working_memory config. Currently 1MiB, 2MiB required.rw   r@  rA  rB  )r-   warnsrC  r   r*  r   )r8  r9  r:  r;  warn_msgrD  s         r1   test_get_chunk_n_rows_warnsrI  X  s    IJNH 	T  
k	2 
!!)

 X<4>)))	~	6 .\\+X6 	R%	jQF	R!!!F|tH~---	. .
 
	R 	R. .s/   C(CC'CCC	CC$)sourcerK   is_longABCABCDEFABCABCABCABCABCABCABCABCABCABCu   ၈timetime_str))g?z   0.2s)   z  20.0s)i  z33.3min)i N  z333.3minc                    t        | ||      }|rt        |      dkD  sJ t        |      dk(  sJ |j                  d| z   dz         sJ |t        |       dz   d  }|j                  |      sJ |d t        |        }|j                  d      sJ |d t        d        }|j                  |      sJ |d t        |        }|j                  d      sJ |d d }|r|rJ y t	        t        |            dgk(  sJ y )	NF   [z] r"   z, total= rv   .)r   rF   
startswithendswithr   r"  )rJ  rK   rK  rO  rP  outs         r1   test_message_with_timerZ  s  s   ( VWd
3C3x"}}3x2~~>>#,-...
c&kAo
 C<<!!!
X
C<<
###
 Z 
!C<<   
oW
C<<
cr(Cw3CH~#&&&r9   rK   r;  hello皙?
 )Nr^  c                     |j                  t        dd        t        d|       5  |j                  t        dd        d d d        |j                         j                  |k(  sJ y # 1 sw Y   )xY w)Ndefault_timerc                       y)Nr   r8   r8   r9   r1   <lambda>z)test_print_elapsed_time.<locals>.<lambda>      r9   rL  c                       y)Nr\  r8   r8   r9   r1   rb  z)test_print_elapsed_time.<locals>.<lambda>  rc  r9   )setattrtimeitr   
readouterrrY  )rK   r;  capsysmonkeypatchs       r1   test_print_elapsed_timerj    sh     ;	UG	, BFO[AB""h...B Bs   A&&A/zvalue, resultnan)r   F)g        F)NF)r^  F)rk  F)l   	H]vieFc                 X    t        |       |u sJ t        t        |       t              sJ y r   )r   r   r   )r  results     r1   test_is_scalar_nanrn    s,    $ 6)))mE*D111r9   c                      t        j                  ddgt         j                        } t        | dd      }t	        |ddg       y	)
zMake sure sklearn.utils._approximate_mode returns valid
    results for cases where "class_counts * n_draws" is enough
    to overflow 32-bit signed integer.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/20774
    i rk   r   ia  r   )class_countsn_drawsra   i`     N)r'   r   int32r   r   )rc   rets     r1   test_approximate_moderu    s:     	%bhh/A
Eq
AC
 sUCL)r9   c                       y r   r8   r8   r9   r1   
dummy_funcrw    s    r9   c                     ddl m}m} t        |dd        t        |dd        ddlm} |j                  j                  d= y )Nr   )parallel_backendregister_parallel_backendlokyfailing)joblib)sklearn.utilsry  rz  r   sklearn.utils._joblibr}  parallelBACKENDS)tmpdirry  rz  r}  s       r1   test_deprecation_joblib_apir    s7     J'60)TB,  +r9   sequencer}   c                     t        |       }t        |t        j                        sJ |j                  j
                  dk(  sJ |j                  dk(  sJ y )NOr;   )r   r   r'   ndarrayr   kindrr   )r  rY  s     r1   test_to_object_arrayr    sF    
8
$Cc2::&&&99>>S   88q==r9   c                    t         j                  j                  d      }|j                  dd      }ddg}|j                  t	        |      |j
                  d         }t        ||       }t        |||       t        ||d      }t        |t        ||              ddg}|j                  |j
                  d   t	        |            }t        ||       }t        |||       t        ||d      }t        |t        ||              d	\  }} |j                  |j
                   }t        ||       }t        |||       t        |t        ||              y
)z,Check that `_safe_assign` works as expected.r   rY   rT   r;   rS   )row_indexerr   )column_indexer)NNN)
r'   r(   r+   randnrF   rm   r   r   r   r   )r   ra   X_arrayr  valuesrc   assigned_portionr  s           r1   test_safe_assignr    s:    ))


"CiiAGa&KYYs;'q)9:F7J/AF4%a1= ,VZ@ VNYYw}}Q'^)<=F7J/AF>:%aa@ ,VZ@ #-KSYY F7J/AF>: $6vz$JKr9   c            
         t        j                  dd      } | j                  g dg dgg d      } G d d	      } ||      }t        d
d      d
dgft        dd      dd
gft        d
d      d
gfddgd
dgft        dd      dd
gft        dd      g dft        dd      dgfddgddgfg g fg	}|D ]  \  }}t	        ||      |k(  rJ  d}t        j
                  t        |      5  t	        |dg       ddd       d}t        j
                  t        |      5  t	        |t        ddd             ddd       y# 1 sw Y   GxY w# 1 sw Y   yxY w)z=Check _get_column_indices for edge cases with the interchanger   z1.5
minversionr   r   r'  r	  c                       e Zd Zd Zd Zy):test_get_column_indices_interchange.<locals>.MockDataFramec                     || _         y r   )_df)selfdfs     r1   __init__zCtest_get_column_indices_interchange.<locals>.MockDataFrame.__init__  s	    DHr9   c                 .    t        | j                  |      S r   )getattrr  )r  names     r1   __getattr__zFtest_get_column_indices_interchange.<locals>.MockDataFrame.__getattr__  s    488T**r9   N)r>   r?   r@   r  r  r8   r9   r1   r   r    s    		+r9   r   r;   NrS   r   r   r(  r   r   r  rw   not_a_columnzkey.step must be 1 or None)r-   r   r   r   r
   r.   r/   NotImplementedError)r   r  r   	df_mockedkey_resultsr   rm  msgs           r1   #test_get_column_indices_interchanger    s{   			X%	8B	y),o	FB+ + b!I 
q$!Q 	tQ!Q 	q!qc
saV	sC1a&!	sD	9%	tS	A3
saV	R
K # =V"9c2f<<<= <C	z	- 9I'789 'C	*#	6 <IuS$':;< <	9 9< <s   (D<E<EEc                     t        j                  dd      } | j                  g dg dg ddd	      }d
dlm} dgddgg ddgdgg}|D ]  }t        ||d      } |||   |        g dddgfg ddgfg}|D ]#  \  }}t        ||d      } ||dd|f   |       % d
dgddgfdgdgfg}	|	D ]#  \  }
}t        ||
d      } ||dd|f   |       % d
dgddgddgg}|D ]  }t        ||d
      } |||   |        y)z,Check _safe_indexing for polars as expected.polarsz0.18.2r  )r;   rS   r"   r}   )r}   rT   r   r   )r;   r}   r;   rY   r'  row)orientr   )assert_frame_equalr   r   )r   r   r(  r(  r;   r   )TFT)FFTNrS   r"   )r-   r   r   polars.testingr  r   )plr  r  str_keysr   rY  	bool_keysbool_keystr_keyint_keysint_keyaxis_0_keyss               r1   test_polars_indexingr  9  sh   			X(	;B	MB5 
 
B 2Sz?SEC5AH )R1-2c7C() &Sz25IC54QRI& 0'R22aj>3/0 Q#s$sSEl3H$ 0Rq12aj>3/0 q6Aq6Aq6*K )R1-2c7C()r9   c                  <     G d d      } t         |              rJ y)z@Check that _is_polars_df return False for non-dataframe objects.c                       e Zd Zd Zy)+test__is_polars_df.<locals>.LooksLikePolarsc                 (    ddg| _         ddg| _        y )Nr   r   )r
  schema)r  s    r1   r  z4test__is_polars_df.<locals>.LooksLikePolars.__init__^  s    :DL*DKr9   N)r>   r?   r@   r  r8   r9   r1   LooksLikePolarsr  ]  s    	%r9   r  N)r   )r  s    r1   test__is_polars_dfr  Z  s"    % %
 _.////r9   )lstringrf  rC   r   	itertoolsr   unittestr   numpyr'   r-   sklearnr   $sklearn.externals._packaging.versionr   r   r~  r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   sklearn.utils._mockingr   sklearn.utils._testingr   r   r   r   sklearn.utils.fixesr   r    r   ry   r   r2   rO   rU   rh   rp   rs   markparametrizer{   r   r   bool_r   r   rs  int64uint8r)  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r$  r3  r7  rE  rI  ascii_lowercaserZ  rj  floatrk  float32float64rn  ru  rw  r  r  r  r  r  r  r8   r9   r1   <module>r     s/	           " G    ( 1  ? 			!V$0$"9J3% 02 .9Q :Q .9
% :
% 0 	$ 	E	%  	tT	D!	q!e	)288	,e4	)288	,e4	)288	,e4
	4-	 &)	$e,,	w	&	-	.6	-V	<eD-6-76-!
@
 'OP)VW	 X Q	 'BC)VWQ X DQ 'GH)VWaVgw-?$@A
 B X I
4 *T5M:,tUm<'GH'8)<=a)Y!7811v1vPQSTv>V:WXY > I = ;Y 'BC)MNQ O DQ 'GH)MN)Y	 11v1v1v&>"?@	 O I &99 'BC D &G QL1= 2	
=, 'BC. D.) $+1 ,1
 7H*=>6 ?6/2 QAaXRXXq!f=M$NO+ P+ 1G	:;'' 	VHvh 0662BVVDTU	*	*! .9J :J21 =..&.6 $	&&.	6))51	&&*D1	V++T2	&&159	 Z'	&'2 
	$UGS9D@A	r3/$67// 	ut		rvv	BFF	T"	BFF	T"
&&5*"2#"2*"	
, xrxx{HBHHQK&@Aq6Aq6BR%ST U 'GHL ILB%<P)B0r9   