
    h$,f                       d Z 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ZddlmZ ddlmZ dd	lmZ dd
lm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& ddl'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< ddl=m>Z> ddl?m@Z@mAZAmBZBmCZCmDZDmEZE ddlFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\ d Z]ej                  j                  dej                  j                  d       ej                  dd      j                         g      d        Zcd Zdd Zed  Zfej                  j                  d!ej                  d"fej                  d#fej                  d"fg      ej                  j                  d$ej                  ej                  g      d%               Zkej                  j                  d&ej                  d'd(d)fej                  dd(d*fej                  d+d(d,fej                  dd#d*fej                  d'd(d-fej                  dd(d.fej                  d/d(d0fej                  d'd1d2fej                  d'd3d-fg	      ej                  j                  d$ej                  ej                  g      d4               Zlej                  j                  d5g d6      ej                  j                  d$ej                  ej                  g      d7               Zmd8 Znej                  j                  d9 ej                  d3ej                  gg      d:f ej                  d3ej                  gg      d:f ej                  d3ej                  gg      d;f ej                  d3ej                  ggep<      d=fg      ej                  j                  d>d(d"g      d?               Zqd@ Zre;dA        Zsej                  j                  ddBdCgdDdEgg ej                  dBdCgdDdEggdF<       ej                  dBdCgdDdEggdG<      dHdIgdJdKgg ej                  dHdIgdJdKggdL<      g      dM        Ztej                  j                  dNg dO      ej                  j                  dPej                  ej                  gej                  fej                  ej                  fdQej                  fg      dR               ZwdS ZxdT ZydU ZzdV Z{dW Z|dX Z}dY Z~ ej                  g dZ[      d\        Zd] Zd^ Zd_ Zd` Zda Zdb Zdc Zdd Zde Zej                  j                  df ed      eegg dgh      di        Zdj Zdk Zdl Zdm Zej                  j                  dnej                  ej                  fej                  ddQf      ej                  j                  dodp      dq               Zdr Zds Z G dt du      Z G dv dw      Zdx Zej                  j                  dyd(d"g      dz        Zej                  j                  d$ej                  ej                  ej0                  ej2                  ej4                  ej6                  ej8                  ej:                  g      d{        Zd| Zd} Zej                  j                  d~g d      d        Zej                  j                  dd3deddd ed      fddejH                  ddd ed      fddejJ                  ddd ed      fd3deefddd ed      fd3deddd ed      fddeddd ed      fddeddd ed      fddeddd ed      fddeddd ed      fddeddd ed      fddeddd ed      fg      d        Zd ej                  d3dg      dd'f ej                  d3dg       ej                  d3dg      dd'fd ej                  ddg      edfd ej                  ddg      ed'f ej                  d3dgej                  <       ej                  d3dgej                  <      edf ej                  d3dgej                  <       ej                  d3dgej                  <      edfd ej                  ddg      edfdZej                  j                  d eejW                                eejY                               h      ej                  j                  dd(d"g      d               Zdedfdedfdedf ej                  ddgej                  <      edf ej                  ddgej                  <      edfdZej                  j                  d eejW                                eejY                               h      d        Zd Zej                  j                  dej                  ej                  ej0                  g      d        Zej                  j                  dej                  ej                  ej0                  g      d        Zej                  j                  dej                  ej0                  g      d        Zd Zd Zd Zej                  j                  ddd3dgg      d        Zej                  j                  dg dâ      dĄ        Zej                  j                  dg dƢ      dǄ        Zej                  j                  dddejt                  fddejt                  fddejt                  fddejv                  fddejv                  fddejv                  fddejv                  fddejv                  fddejv                  fddejv                  fddejx                  fddejx                  fddejx                  fddejx                  fddejx                  fg      d        Zej                  j                  dg d      d        Zej                  j                  dg dg dg dg ddd3iddiddiggg dh      ej                  j                  dg d      d               Zej                  j                  dg dg dh      d        Zej                  j                  d e ed             ed      dddgddgggg dh      d        Zd Zej                  j                  dg d      d        Zej                  j                  dg d      d        Zd ZƐd  Zej                  j                  dded   d   fded   d   fded   d   fg      d        ZȐd Zɐd Zej                  j                  ddd3gd	fd
ddggdfgddgh      d        Z G d de      Z̐d Z͐d Zΐd Zej                  j                  dg d      d        ZАd Zѐd Zej                  j                  ddd3dd3dej                  gg dg      d        Ze<ej                  j                  dddg      d               Zej                  j                  d g d!      ej                  j                  d"d(d"g      d#               ZՐd$ Zej                  j                  d%eBeAz   e@z   eCz         ej                  j                  d&g d'      d(               Zy()  z$Tests for input validation functions    N)product)
itemgetter)NamedTemporaryFile)importorskip)config_context)dependent_packages)BaseEstimator)
make_blobs)RandomForestRegressor)NotFittedErrorPositiveSpectrumWarning)ARDRegression)EstimatorWithFit)KNeighborsClassifier)_sparse_random_matrix)SVR)_safe_indexingas_float_arraycheck_arraycheck_symmetric	check_X_y
deprecated)MockDataFrame_MockEstimatorOnOffPrediction)	SkipTest
TempMemmap_convert_containerassert_allcloseassert_allclose_dense_sparseassert_array_equalassert_no_warningsignore_warnings'skip_if_array_api_compat_not_configured)_NotAnArray)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDIA_CONTAINERSDOK_CONTAINERSparse_version)FLOAT_DTYPES_allclose_dense_sparse_check_feature_names_in_check_method_params_check_psd_eigenvalues_check_response_method_check_sample_weight_check_y_deprecate_positional_args_get_feature_names
_is_fitted_is_pandas_df_is_polars_df_num_features_num_samplesassert_all_finitecheck_consistent_lengthcheck_is_fittedcheck_memorycheck_non_negativecheck_scalarhas_fit_parameterc                     t        j                  dt         j                        } | t        j                  dt         j                        z   } t	        | d      }|j
                  t         j                  k(  sJ | j                  t         j                        } t	        | d      }t	        | d      | usJ |j
                  t         j                  k(  sJ t        t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  g}|D ]=  }| j                  |      } t	        |       }|j
                  t         j                  k(  r=J  | j                  t               } t	        | d      }|j
                  t         j                  k(  sJ t        j                  dt         j                        } t	        | d      | u sJ t        j"                  |       } t        j$                  t	        | d            sJ t'        j(                  t        j                  d            j+                         t-        ddd	
      j+                         g}|D ]G  }t	        |d      }t         j.                  |d<   t        j0                  |      j3                         sGJ  y )N)   
   dtyperC   FcopyT)rB         皙?)densityr   r   )nponesint32aranger   rE   float32astypeint64float64boolint8int16uint8uint16uint32objectasfortranarray	isfortransp
csc_matrixtoarrayr   nanisnanany)XX2tested_dtypesrE   matricesMNs          Clib/python3.12/site-packages/sklearn/utils/tests/test_validation.pytest_as_float_arrayrk   W   s   
rxx(A	BIIb))A		&B88rzz!!!	A		%B!%(11188rzz!!!277BHHbhh"))RYYWM &HHUOAxx2::%%%& 	
A		%B88rzz!!! 	bjj)A!%(A---
!A<<qt4555 	biil#++-b"d3;;=H  %14(&&$88A;??$$$%    rd   rC   rH   rC   rH   c                     t         j                  | d<   t         j                  | d<   t        | d      }t        ||        y )N)rI   r   )      	allow-nanforce_all_finite)rM   ra   r   r   )rd   X_converteds     rj   test_as_float_array_nanru      s2    ffAdGffAdG [AK a0rl   c                     t        j                  d      j                  dd      } t        t	        |       t         j
                        rJ t        t	        t        j                  |             t         j
                        rJ y )N   rB      )rM   rP   reshape
isinstancer   matrixr^   r_   rd   s    rj   test_np_matrixr}      sZ    
		"a#A.+RYY777.q)9:BIIFFFFrl   c                  P   d } t        d      5 }t        j                  |dt        j                        }d|d d  t        t        j
                  | fD ]<  } ||      }d|d d  t        |j                         |j                                d|d d  > 	 d d d        y # 1 sw Y   y xY w)Nc                     t        | d      S )NFrF   )r   )xs    rj   <lambda>ztest_memmap.<locals>.<lambda>   s    nQU3 rl   zsklearn-test)prefix)rC   rC   )shaperE   r   rp   )r   rM   memmaprQ   r   asarrayr    ravel)asflttmprh   frd   s        rj   test_memmapr      s     4E	>	2 cIIc<!rzz51 	A!AAaDqwwy!'')4AaD			  s   BBB%c                  ~   t        j                  d      } | | j                  fD ]P  }dD ]I  }t        |d|      }|j                  d   sJ t        |d|      }|j                  d   sJ |sD||urIJ  R t        j                  |       } | j                  d d d   | _        | j                  j                  d   rJ y )	N)rC   rI   )TFC)orderrG   C_CONTIGUOUSFF_CONTIGUOUS)rM   rN   Tr   flagsr^   
csr_matrixdata)rd   ArG   Bs       rj   test_orderingr      s     	AV "! 	"DASt4A77>***ASt4A77>***z!z	"" 	aAVVDbD\AFvv||N++++rl   zvalue, force_all_finiteFrq   retypec                      |t        j                  d      j                  dd      j                  t                    }| |d<   t        ||d      }t        ||       y )Nrx   rH   rL   T)rs   accept_sparse)rM   rP   ry   rR   floatr   r   )valuers   r   rd   	X_checkeds        rj   'test_check_array_force_all_finite_validr      sQ    
 	ryy|##Aq)0078AAdGA0@PTUI I.rl   z.value, input_name, force_all_finite, match_msg TzInput contains infinityzInput X contains infinitysample_weightz%Input sample_weight contains infinityInput contains NaNzInput X contains NaNyzInput y contains NaNz	allow-infz0force_all_finite should be a bool or "allow-nan"rp   c                     |t        j                  d      j                  dd      j                  t         j                              }| |d<   t        j                  t        |      5  t        |||d       d d d        y # 1 sw Y   y xY w)Nrx   rH   rL   matchT)
input_namers   r   )	rM   rP   ry   rR   rT   pytestraises
ValueErrorr   )r   r   rs   	match_msgr   rd   s         rj   (test_check_array_force_all_finiteinvalidr      sr    . 	ryy|##Aq)00<=AAdG	z	3 
!-		

 
 
s   )BBr   )rd   r   r   c                 (    |t        j                  d      j                  dd      j                  t         j                              }t         j
                  |d<   t               }d|j                  j                   d}t        j                  t        d|  d      5 }t        ||| d	
       d d d        | dk(  r|j                  j                  d   v sJ |j                  j                  d   vsJ | dk(  rt        j                  t        d|  d      5 }t               j                  |t        j                   |j"                  d                d d d        ||j                  j                  d   v sJ y y # 1 sw Y   xY w# 1 sw Y   4xY w)Nrx   rH   rL   
aX   does not accept missing values encoded as NaN natively. For supervised learning, you might want to consider sklearn.ensemble.HistGradientBoostingClassifier and Regressor which accept missing values encoded as NaNs natively. Alternatively, it is possible to preprocess the data, for instance by using an imputer transformer in a pipeline or drop samples with missing values. See https://scikit-learn.org/stable/modules/impute.html You can find a list of all estimators that handle NaN values at the following page: https://scikit-learn.org/stable/modules/impute.html#estimators-that-handle-nan-valueszInput z contains NaNr   T)	estimatorr   r   rd   r   )rM   rP   ry   rR   rT   ra   r   	__class____name__r   r   r   r   r   argsfitrN   r   )r   r   r   r   extended_msgctxs         rj   0test_check_array_links_to_imputer_doc_only_for_Xr      sh    "))A,&&q!,33BJJ?@DDJI
Y  ))* +- 	-  
z6*])K	L 
PS!		

 Ssyy~~a0000399>>!#4444S ]]:vj\-OP 	4TWEIIdBGGDJJqM23	4syy~~a0000 
 
 	4 	4s   E<;F<FFc                  >   t        j                  ddt         j                  ggt              j                  } t        | d d      }| |u sJ t        | d d      }| |u sJ t        j                  t        d      5  t        | d d	       d d d        y # 1 sw Y   y xY w)
NabrD   rq   rE   rs   Fr   r   T)	rM   arrayra   r[   r   r   r   r   r   )rd   r   s     rj   (test_check_array_force_all_finite_objectr     s    
3RVV$%V466AATKHI	>>ATEBI	>>	z)=	> :ATD9: : :s   ;BBz
X, err_msgInput contains NaN.z5Input contains infinity or a value too large for.*intrD   z#cannot convert float NaN to integerrs   c                     t        j                  t        |      5  t        | t        |       d d d        y # 1 sw Y   y xY w)Nr   r   )r   r   r   r   int)rd   err_msgrs   s      rj   7test_check_array_force_all_finite_object_unsafe_castingr     s8    0 
z	1 EAS3CDE E Es	   8Ac                      t        j                  d      } | j                  g d      }dt        |       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 proper error message when passing a Series and we expect a
    2-dimensional container.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/27498
    pandasrp   rH   rB   z+Expected a 2-dimensional container but got z	 instead.r   T	ensure_2dN)r   r   Seriestyper   r   r   )pdsermsgs      rj   test_check_array_series_err_msgr   4  sa     
		X	&B
))I
C7S	{)
LC	z	- )C4() ) )s   A**A3c                  
   ddgddgg} t        j                  |       }t        j                  t              5  t        |       d d d        t        g dd      }|j                  dk(  sJ t        j                  t        d	      5  t        g dd
       d d d        t        j                  t        d	      5  t        dd
       d d d        t        j                  d      j                  ddd      }t        j                  t              5  t        |       d d d        t        |d
       t        j                  d      j                  dd      j                  d      }|j                  d      }|j                  t              }|j                  t              }||||g}t        j                  t        t        t        j                   d t"        t$        g}	g d}
d
dg}t'        ||	|
|      D ]  \  } }}}t        | |||      }||j(                  |k(  sJ |j(                  | j(                  k(  sJ |dk(  r"|j*                  d   sJ |j*                  d   r)J |dk(  r"|j*                  d   sJ |j*                  d   rJ |r| |urJ | j(                  |j(                  k(  s|j*                  d   | j*                  d   k(  s|j*                  d   | j*                  d   k(  s| |u rJ  g }|j-                  t.        t0        z   t2        z   t4        z   D cg c]
  } ||       c}       |j-                  |d   j                  t        j6                        |d   j                  t        j8                        g       ddgddgg}|	D cg c]  }|t$        us| }}t'        ||||      D ]  \  } }}}t        | |||      }||j(                  |k(  sJ |j(                  | j(                  k(  sJ | j:                  |v r| j:                  |j:                  k(  sJ |j:                  |d   k(  sJ |r| |urJ | j(                  |j(                  k(  s| j:                  |j:                  k(  s| |u rJ  t        ddgddgg      }t=        |t        j>                        sJ t        j                  t              5  t        |jA                                d d d        t        |jA                         d
       tC        |      }t        |      }t=        |t        j>                        sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   :xY wc c}w c c}w # 1 sw Y   xY w)Nrp   rH   rB   rx   )r   rp   rH   Fr   z'Expected 2D array, got 1D array insteadr   Tz+Expected 2D array, got scalar array insteadrC      allow_ndr   r   )r   r   N)rE   r   rG   r   r   r   csrcoodokrE   r   rG   )"r^   r   r   r   	TypeErrorr   ndimr   rM   rP   ry   rG   rR   r   r   rO   rQ   rU   r[   r   rE   r   extendr'   r&   r%   r)   rS   rT   formatrz   ndarraytolistr$   )rd   X_csrX_arrayX_ndimX_CX_FX_intX_floatXsdtypesorderscopysrE   r   rG   r   sparse_containeraccept_sparsesdtnon_object_dtypesr   X_dense
X_no_arrayresults                           rj   test_check_arrayr   C  s    Q!QAMM!E	y	! E )u5G<<1	z)R	S /I./ 
z)V	W (B$'( YYq\!!!Q*F	z	" F& ))A,

q!
$
)
)#
.C
((3-CJJsOEjjG
sE7	#BhhUBJJdFCFF5ME!(VVU!C &5%e$G	??e+++??agg---C<??>222 ~666c\??>222 ~666I%%% 9??*OON3qww~7NNOON3qww~7NNI~%~+&4 
BII %3%% %	
  S!	
 IIr!u||BHH%r!u||BJJ'?@Aenuen5N '-A&0@AA)0
~u* &%5-  mRVW	??e+++??agg---88}$88y///// ##}Q'7777I%%% ww)//)ahh):J:J.JI~%~'&. Aq6Aq6*+Ggrzz***	z	" %FMMO$%$/ W%J$Ffbjj)))S / /( (
 T	
 B6% %sM   T+T89UUUU$U$;U)+T58UUU)U21234US   1   2   3   4V1c                     d}t        j                  t        |      5  t        | d       ddd       y# 1 sw Y   yxY w)zmTest that check_array errors when it receives an array of bytes/string
    while a numeric dtype is required.z>dtype='numeric' is not compatible with arrays of bytes/stringsr   numericrD   Nr   r   r   r   )rd   expected_msgs     rj   test_check_array_numeric_errorr     s7     UL	z	6 (AY'( ( (s   5>pd_dtype)Int8Int16UInt8UInt16Float32Float64zdtype, expected_dtyper   c                    t        j                  d      }| dv rt        j                  dd      }t        j                  dddt        j                  t        j                  gt        j                  t        j                  dd	d
gg dg      j
                  }|j                  || g d      }|d   j                  d      |d<   t        |d|      }t        ||       |j                  |k(  sJ t        |d|      }t        ||       |j                  |k(  sJ d}t        j                  t        |      5  t        |d       d d d        y # 1 sw Y   y xY w)Nr   >   r  r  z1.2
minversionrp   rH   rB   r   rx   ro   )rp   rH   rB   rx   rI   r   r   c)rE   columnsr	  r   rq   )rs   rE   Fr   r   Trr   )r   r   rM   r   ra   r   	DataFramerR   r   r   rE   r   r   )r   rE   expected_dtyper   X_nprd   r   r   s           rj   "test_check_array_pandas_na_supportr    s'    
		X	&B))  e<88
Q266266	"RVVRVVQ1$=Oa 	
 	T?CAsV]]7#AcFA5IIIt$??n,,,AUCIIt$??n,,,
C	z	- .A-. . .s   7EEc                  4   t        j                  d      } | j                  dd| j                  gd      }d}t        j                  t
        |      5  t        |dd	
       ddd       t        |d	d	
      }t        |ddt        j                  g       |j                  t        j                  k(  sJ t        |d	d	t        j                        }t        |ddt        j                  g       |j                  t        j                  k(  sJ y# 1 sw Y   xY w)z4Check check_array is correct with pd.NA in a series.r   rp   rH   Int64rD   r   r   TF)rs   r   N)rs   r   rE   )r   r   r   NAr   r   r   r   rM   ra   rE   rT   rQ   )r   X_int64r   X_outs       rj   *test_check_array_panadas_na_support_seriesr    s    			X	&BiiAruuWi5G
C	z	- EGdeDE %5IEEAq"&&>*;;"**$$$%5

E EAq"&&>*;;"**$$$E Es   DDc                     t        j                  d      } t        j                  g dg dg dgt        j                        }| j                  |      }t        |      j                  t        j                  k(  sJ t        |t              j                  t        j                  k(  sJ |j                  dt        j                  i      }t        |j                  t        j                  t        j                  t        j                  f       t        |      j                  t        j                  k(  sJ t        |t              j                  t        j                  k(  sJ |j                  dt        j                  i      }t        |      j                  t        j                  k(  sJ t        |t              j                  t        j                  k(  sJ |j                  dt        j                  i      }t        |      j                  t        j                  k(  sJ t        |t              j                  t        j                  k(  sJ |j                  t        j                        }t        |      j                  t        j                  k(  sJ t        |t              j                  t        j                  k(  sJ | j                  d| j                  g d      i      }t        |      j                  t        j                   k(  sJ t        |t              j                  t        j                  k(  sJ y )	Nr   r   rx   rI   ro      r   	   rD   r   rH   cat_col)r   r   rM   r   rQ   r  r   rE   r+   rR   float16r    r   rW   rT   CategoricalrS   )r   rd   X_dfcat_dfs       rj   %test_check_array_pandas_dtype_castingr    s7   			X	&B
)Y	2"**EA<<?Dt""bjj000t<066"**DDD;;2::'Dt{{RZZRZZ$HIt""bjj000t<066"**DDD;;288}%Dt""bjj000t<066"**DDD;;2::'Dt""bjj000t<066"**DDD;;rxx Dt""bhh... t<066"**DDD
 \\9bnnY&?@AFv$$000v\288BJJFFFrl   c                  B   t        j                  ddgddgddgddgg      } t        |       }t        |      }|j                  | j                  k(  sJ t        |t         j
                        }|j                  t        j                  t         j
                        k(  sJ y )Ng?gffffff?g333333?g      ?g?rJ   rD   )rM   r   r   r   rE   rQ   )arrmock_dfchecked_arrs      rj   "test_check_array_on_mock_dataframer$  )  s    
((S#Jc
S#Jc
C
DCC Gg&K		)))gRZZ8K 4444rl   c                      g dg dg dg} t        |       j                  j                  dk(  sJ t        | d      j                  j                  dk(  sJ y )Nr   r  r  iFr   )r   rE   kindr|   s    rj    test_check_array_dtype_stabilityr(  2  sM    	Iy)Aq>$$+++qE*0055<<<rl   c                  ,   g dg dg dg} t        j                  | t         j                        }t        j                  | t         j                        }t	        j
                  |      }t	        j                  |      }t	        j                  |t         j                        }||g}|||g}|D ]B  }t        t        |t         j                  d      }	|	j                  t         j                  k(  rBJ  |D ]  }t        t        |t         j                  t         j                  gd      }	|	j                  t         j                  k(  sJ |	|u sJ t        t        |t         j                  t         j                  gddgd	      }	|	j                  t         j                  k(  sJ |	|urJ  t        t        |t         j                  t         j                  gddgd
	      }	|	j                  t         j                  k(  sJ |	|usJ |	j                  dk(  sJ y )Nr   r  r  rD   T)rE   r   r   r   r   F)rM   r   rQ   rS   r^   r   r_   rO   r!   r   rT   rE   r   )

X_int_list	X_float32r  X_csr_float32X_csc_float32X_csc_int32integer_datafloat32_datard   r   s
             rj   test_check_array_dtype_warningr1  9  s   Y	2J

:RZZ8Ijj2884GMM),MMM),M--rxx8K[)L}m<L -&"**D
	 "**,,,	-  "&2::rzz":$
	 "**,,,A~~&::rzz* %.
	 "**,,,!!!"" #zz2::&enI ??bjj(((M)))u$$$rl   c                     ddgddgg} t        j                  |       }t               }d}t        j                  t
        |      5  t        |d       d d d        d	}t        j                  t        |      5  t        ||       d d d        d
}t        j                  t        |      5  t        |g        d d d        t        j                  t        |      5  t        |d       d d d        t        j                  t
        d      5  t        ||g       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   `xY w# 1 sw Y   y xY w)Nrp   rH   rB   rx   ziSparse data was passed, but dense data is required. Use '.toarray\(\)' to convert to a dense numpy array.r   Fr   zjParameter 'accept_sparse' should be a string, boolean or list of strings. You provided 'accept_sparse=.*'.z]When providing 'accept_sparse' as a tuple or list, it must contain at least one string value. r   )r^   r   r   r   r   r   r   r   )rd   r   invalid_typer   s       rj   -test_check_array_accept_sparse_type_exceptionr6  e  s7   
Q!QAMM!E5L	A  
y	, 0E/0	G  
z	- 7E67	5  
z	- -E,-	z	- -E,-	y	. 9E,89 9%0 07 7- -- -9 9s<   D%8D1+D=E	E%D.1D:=E	EEc                      ddgddgg} t        j                  |       }t        |d       t        |d       t        |dg       t        |d       y )	Nrp   rH   rB   rx   Tr3  r   )r   )r^   r   r   )rd   r   s     rj   +test_check_array_accept_sparse_no_exceptionr8    sL    
Q!QAMM!ET*U+eW-X.rl   )r   cscr   bsr)paramsc              #     K   t        j                  dd| j                        }| j                  dk(  rot        |d      r"t	        d |j
                  D              |_        n|j                  j                  d      |_        |j                  j                  d      |_        n@|j                  j                  d      |_	        |j                  j                  d      |_
        | y w)N   rC   )r   r   coordsc              3   >   K   | ]  }|j                  d         yw)rS   N)rR   ).0vs     rj   	<genexpr>zX_64bit.<locals>.<genexpr>  s     A1QXXg.As   rS   )r^   randparamhasattrtupler>  rowrR   colindicesindptr)requestrd   s     rj   X_64bitrL    s     
Bw}}-A}}1h AAAAH EELL)AEEELL)AEII$$W-	88??7+
Gs   C&C(c                      t        | dd       y )NT)accept_large_sparser   )r   )rL  s    rj   1test_check_array_accept_large_sparse_no_exceptionrO    s    TFrl   c                     d}t        j                  t        |      5  t        | dd       d d d        y # 1 sw Y   y xY w)NzbOnly sparse matrices with 32-bit integer indices are accepted. Got int64 indices. Please do reportr   TF)r   rN  r   )rL  r   s     rj   4test_check_array_accept_large_sparse_raise_exceptionrQ    sA    	<  
z	- LG4UKL L Ls   6?c                     d} t        j                  t        |       5  t        g g       d d d        d} t        j                  t        |       5  t        g d       d d d        d} t        j                  t        |       5  t        dd       d d d        t        j                  d      }t        j                  d	      }d
} t        j                  t        |       5  t        ||d       d d d        t        j                  t        |       5  t        ||dd       d d d        t        j                  d      }t        j                  d      }d} t        j                  t        |       5  t        ||d       d d d        t        j                  t        |       5  t        ||dd       d d d        t        j                  d      j                  dd      }t        j                  d      }d} t        j                  t        |       5  t        ||       d d d        t        j                  d      }t        j                  d      }t        ||d      \  }}t        ||       t        ||       y # 1 sw Y   RxY w# 1 sw Y   ,xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   >xY w# 1 sw Y   xY w# 1 sw Y   xY w)NzC0 feature\(s\) \(shape=\(1, 0\)\) while a minimum of 1 is required.r   z@0 sample\(s\) \(shape=\(0,\)\) while a minimum of 1 is required.Fr   zDSingleton array array\(42\) cannot be considered a valid collection.*   )rp   rC   rp   zC1 sample\(s\) \(shape=\(1, 10\)\) while a minimum of 2 is required.rH   )ensure_min_samples)rT  r   rm   zD2 feature\(s\) \(shape=\(10, 2\)\) while a minimum of 3 is required.rB   )ensure_min_featuresT)rU  r   r   rC   zD0 feature\(s\) \(shape=\(10, 0\)\) while a minimum of 1 is required.)rC   r      rV  r   )r   r   r   r   r   rM   rN   r   emptyry   r    )r   rd   r   r   	y_checkeds        rj   2test_check_array_min_samples_and_features_messagesrY    sE   
SC	z	- RD
 NC	z	- )B%() UC	y	, )B%() 	A

A
SC	z	- .!Q1-.
 
z	- ?!Q1>?
 	A

A
TC	z	- /!QA./
 
z	- >!QA=>
 	B"A
A
TC	z	- !Q 	 A
A$QD9Iyq)$q)$i ) )
) ). .
? ?/ /
> > s_   I;JJ J"J/1J<#K	K;JJJ"J,/J9<K	KKc                  l   t        j                  g dg dg      } t        j                  t        d      5  t        |        d d d        g dg dg} t        j                  t        d      5  t        |        d d d        d} t        j                  t        d      5  t        |        d d d        t        j                  g d      t        j                  g d      g} t        j                  t        d      5  t        |        d d d        t        j                  g d      t        j                  g d      f} t        j                  t        d      5  t        |        d d d        t        t        j                  g dg dg            } t        j                  t        d      5  t        |        d d d        t        j                  ddgddgg      } t        j                  t        d      5  t        |        d d d        t        j                  g d      }t        j                  t        d      5  t        |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   rxY w# 1 sw Y   "xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)	N      ?       @      @      @      @      @       @      @      @      @      @      @zComplex data not supportedr   )r[  r_  r   r\  )r\  r]  r^  r`  ra  rb  )
rM   r   r   r   r   r   r   r^   
coo_matrixr2   )rd   r   s     rj   #test_check_array_complex_data_errorrd    s   
*,DEFA	z)E	F A 
"#;<A	z)E	F A 	=A	z)E	F A 
*	+RXX6N-OPA	z)E	F A 
*	+RXX6N-OPA	z)E	F A 	bhh 8:RSTUA	z)E	F A 	6{QF+,A	z)E	F A
 	ABA	z)E	F  I 
 
 
 
 
 
  s_   I.II+<I8J,J6J<J*II(+I58JJJJ'*J3c                      t        t        d      rJ t        t        d      sJ t        t        d      sJ t        t               d      sJ  G d d      } t        | d      sJ d       y )Nr   c                   *    e Zd Z ed      dd       Zy)@test_has_fit_parameter.<locals>.TestClassWithDeprecatedFitMethodz7Deprecated for the purpose of testing has_fit_parameterNc                      y Nr4  )selfrd   r   r   s       rj   r   zDtest_has_fit_parameter.<locals>.TestClassWithDeprecatedFitMethod.fit      rl   ri  )r   
__module____qualname__r   r   r4  rl   rj    TestClassWithDeprecatedFitMethodrg    s    	M	N	 
O	rl   rn  z=has_fit_parameter fails for class with deprecated fit method.)r@   r   r   r   )rn  s    rj   test_has_fit_parameterro    ss     !5GGG2ODDDS/222SUO444 
 (/ GFG rl   c            	         t        j                  ddgddgg      } t        j                  d      }t        j                  ddgddgg      }|t        j                  |      t        j
                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      d}t        j                  t              5  t        |       d d d        |j                         D ]  \  }}t        j                  t               5  t        |       d d d        t        j                  t              5  t        |d       d d d        t        |d      }t        j"                  |      r,|j$                  |k(  sJ t'        |j)                         |        t'        ||         y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ~xY w)	Nr   rp   rH   )denser   r   r9  r   lilr:  T)raise_exceptionF)raise_warning)rM   r   rN   r^   
dok_matrixr   r_   rc  
lil_matrix
bsr_matrixr   r   r   r   itemswarnsUserWarningissparser   r    r`   )arr_symarr_badarr_asymtest_arrays
arr_formatr!  outputs          rj   test_check_symmetricr  (  s}   hhAA'(GggajGxx!Q!Q()H }}X&}}X&}}X&}}X&}}X&}}X&K 
z	" ! ! ',,. 0
C\\+& 	!C 	!]]:& 	7C6	7 !E:;;v==J...v~~/9vw/0	! !	! 	!	7 	7s$   !G$GGGG	G%	c                       G d dt               } t        j                  t              5  t	         |               d d d        t	         |        j                                y # 1 sw Y   (xY w)Nc                       e Zd Zd Zd Zy)6test_check_is_fitted_with_is_fitted.<locals>.Estimatorc                     d| _         | S )NT)r5   )rj  kwargss     rj   r   z:test_check_is_fitted_with_is_fitted.<locals>.Estimator.fitM  s    "DOKrl   c                 6    t        | d      xr | j                  S )Nr5   )rE  r5   rj  s    rj   __sklearn_is_fitted__zLtest_check_is_fitted_with_is_fitted.<locals>.Estimator.__sklearn_is_fitted__Q  s    4.B4??Brl   N)r   rl  rm  r   r  r4  rl   rj   	Estimatorr  L  s    		Crl   r  )r	   r   r   r   r<   r   )r  s    rj   #test_check_is_fitted_with_is_fittedr  K  sN    CM C 
~	& %	$%IKOO%&% %s   A!!A*c                     t        j                  t              5  t        t               d d d        t        j                  t              5  t        d       d d d        t	               } t               }	 t        j                  t              5  t        |        d d d        t        j                  t              5  t        |       d d d        d}d}t        j                  t        |      5  t        | |       d d d        d}d}t        j                  t        |      5  t        ||       d d d         | j                  t                  |j                  t                 t        |       J t        |      J y # 1 sw Y   YxY w# 1 sw Y   9xY w# 1 sw Y   xY w# 1 sw Y   xY w# t        $ r J d       w xY w# 1 sw Y   xY w# 1 sw Y   xY w)	Nr   z&check_is_fitted failed with ValueErrorz!Random message %(name)s, %(name)sz+Random message ARDRegression, ARDRegressionr   )r   z"Another message %(name)s, %(name)szAnother message SVR, SVR)r   r   r   r<   r   r   r   r   AttributeErrorr   r
   )ardsvrr   r   s       rj   test_check_is_fittedr  Y  s   	y	! '&'	y	!  /C
%C?]]>* 	!C 	!]]>* 	!C 	! .C9E	z	/ &%& /C&E	~U	3 &%& CGGZ\CGGZ\3'''3'''?' ' 	! 	!	! 	! ?>>>u?& &
& &sk   FF4F4 F!F4 :F(F4 -G"GFFF% F4 (F1-F4 4GGGc                      G d d      } d} |        }t        |ddg      rJ t        j                  t        |      5  t	        |ddg       d d d        t        |ddgt
              rJ t        j                  t        |      5  t	        |ddgt
               d d d        t        |ddgt              rJ t        j                  t        |      5  t	        |ddgt               d d d        d	|_        t        |ddg      rJ t        j                  t        |      5  t	        |ddg       d d d        t        |ddgt
              rJ t        j                  t        |      5  t	        |ddgt
               d d d        t        |ddgt              sJ t	        |ddgt               d
|_        t        |ddg      sJ t	        |ddg       t        |ddgt
              sJ t	        |ddgt
               t        |ddgt              sJ t	        |ddgt               y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   cxY w# 1 sw Y   %xY w# 1 sw Y   xY w)Nc                       e Zd Zd Zy)4test_check_is_fitted_attributes.<locals>.MyEstimatorc                     | S ri  r4  rj  rd   r   s      rj   r   z8test_check_is_fitted_attributes.<locals>.MyEstimator.fit  s    Krl   N)r   rl  rm  r   r4  rl   rj   MyEstimatorr  ~  s    	rl   r  z
not fitteda_b_)
attributesr   )r  
all_or_anyr   r   )	r5   r   r   r   r<   allrc   r  r  )r  r   ests      rj   test_check_is_fitted_attributesr  }  s/     C
-C#4,777	~S	1 6t56#4,3GGG	~S	1 FtEF#4,3GGG	~S	1 FtEF CF#4,777	~S	1 6t56#4,3GGG	~S	1 FtEFctTlsCCCCT4LSACFctTl333CT4L1ctTlsCCCCT4LSActTlsCCCCT4LSA36 6F FF F
6 6F Fs<    H3	I I'I0I'3H= I
II$'I0wrap)singlelistrF  )idsc                 x   t               }t        j                  t        d      5  t	        | | dg             d d d         |j
                  t                 t	        | | dg             t        j                  t        d      5  t	        | | dg             d d d        y # 1 sw Y   kxY w# 1 sw Y   y xY w)Nzis not fitted yetr   coef_	coef_bad_)r   r   r   r   r<   r   r
   )r  r  s     rj   $test_check_is_fitted_with_attributesr    s     /C	~-@	A .T7)_-. CGGZ\ Cwi) 
~-@	A 2T;-012 2. .2 2s   B$B0$B-0B9c                  x   t        dgdgdgdgdg       t        ddgddgggddgddg       t        dgdt        j                  dg      t        j                  d	             t        j                  t        d
      5  t        ddgdg       d d d        t        j                  t        d      5  t        ddgd       d d d        t        j                  t        d      5  t        ddgt                      d d d        t        j                  t              5  t        ddgt        j                  d             d d d        t        j                  t        d      5  t        ddgt                      d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   hxY w# 1 sw Y   y xY w)Nrp   rH   rB   rx   rI   r   r   )rH   rp   rH   zinconsistent numbers of samplesr   zgot <\w+ 'int'>zgot <\w+ 'object'>Expected sequence or array-like)r;   rM   r   r^   r   r   r   r   r   r[   r   r4  rl   rj   test_check_consistent_lengthr    sw   QC!qcA34aVq!fX.Ac
CQCrxx}bmmF6KL	z)J	K -A,-	y(:	; +A*+	y(=	> 2A12 
y	! 5A45 
y(I	J AA(=(?@A A- -+ +2 25 5A As<   >F 1F#F"F$ F0 F	FF!$F-0F9c                      	 dd l } t        j                  g dg dg dg      }| j                  |g d      }t	        |       y # t
        $ r t        d      w xY w)Nr   r   r  r  )r   r   r   r
  zPandas not found)r   rM   r   r  r;   ImportErrorr   )r   rd   r  s      rj   "test_check_dataframe_fit_attributer    sU    +HHiI67||A'8|9% +)**+s   AA Ac                     t        j                  dt         j                  g      } t        j                  t
              5  t        |        d d d        t        j                  d       t        |        t        j                  d       t        j                  t
              5  t        |        d d d        y # 1 sw Y   nxY w# 1 sw Y   y xY w)Nr   T)assume_finiteF)	rM   r   infr   r   r   r:   sklearn
set_configr|   s    rj   test_suppress_validationr    s    
!RVVA	z	" !T*aU+	z	" !  
 s   B8#C8CCc                  F   t        d      } t        | j                  g d      d      }t        |t	        j
                  g d             | j                  g d      j                  d      }t        |d d      }t        |t	        j
                  g dt                     y )	Nr   r   Fr   r  category)rE   r   rD   )r   r   r   r    rM   r   rR   r[   )r   resss      rj   test_check_array_seriesr    sr    	h	B
bii	*e
<CsBHHY/0 			/"))*5A
atu
5CsBHH_FCDrl   rE   
bool_dtype)rU   booleanc                 X   |dk(  rt        dd      }nt        d      }|j                  g dg d|j                  g d|      d	g d	
      }t        ||       }|j                  t
        j                  k(  sJ t        j                  g dg dg dgt              }t        ||       y )Nr  r   1.0r  r   )r   rJ    @TFTrD   )r   r   rU   r  )      ?        r  )       @rJ   r  )      @r  r  )
r   r  r   r   rE   rM   rT   r   r   r   )rE   r  r   dfr   expected_arrays         rj   'test_check_dataframe_mixed_float_dtypesr    s     Y(u5(#	"II1ID	

 ) 
 
B %(E;;"**$$$XX	/?;5N !7rl   c                  z   t        d      } | j                  dg di      }t        |d      }|j                  t        j
                  k(  sJ t        |dgdgdgg       | j                  g dg dd	dd
g      }t        |d      }|j                  t        j                  k(  sJ t        |ddgddgddgg       y)z7Check that dataframe with bool return a boolean arrays.r   rU   r  NrD   TFr   )rU   r   r   r  r   rp   r   rH   rB   )r   r  r   rE   rM   bool_r    rS   r   r  r   s      rj   #test_check_dataframe_with_only_boolr    s    	h	B	v23	4B$'E;;"(("""uvw78 
$Y7 
 
B ),E;;"(("""u1v1v1v67rl   c                      t        dd      } | j                  d| j                  g dd      i      }t        |d      }|j                  t
        j                  k(  sJ t        |d	gd
gd	gg       y)zFCheck that dataframe with boolean return a float array with dtype=Noner   r  r  rU   r  r  rD   NTF)r   r  r   r   rE   rM   rT   r    r  s      rj   &test_check_dataframe_with_only_booleanr  !  sh    	h5	1B	vryy)<IyNO	PB$'E;;"**$$$uvw78rl   c                       e Zd Zd Zy)DummyMemoryc                     |S ri  r4  )rj  funcs     rj   cachezDummyMemory.cache,  s    rl   N)r   rl  rm  r  r4  rl   rj   r  r  +  s    rl   r  c                       e Zd Zy)WrongDummyMemoryN)r   rl  rm  r4  rl   rj   r  r  0  s    rl   r  c                     t        d      } | j                  dk(  sJ t        d       } | j                  J t               }t        |      } | |u sJ d}t        j                  t
        |      5  t        d       d d d        t               }dj                  |      }t        j                  t
        |      5  t        |       d d d        y # 1 sw Y   TxY w# 1 sw Y   y xY w)Ncache_directoryzf'memory' should be None, a string or have the same interface as joblib.Memory. Got memory='1' instead.r   rp   zg'memory' should be None, a string or have the same interface as joblib.Memory. Got memory='{}' instead.)r=   locationr  r   r   r   r  r   )memorydummyr   s      rj   test_check_memoryr  4  s    +,F??////$F??"""ME% FU??	2  
z	- QE	3396%=  
z	- U   s   .C8CCC"rG   c                     t        j                  d      }t        |d      5 }t        ||       }t        j                  ||      |  k(  sJ |j
                  d   | k(  sJ 	 d d d        y # 1 sw Y   y xY w)N)rx   rx   r)	mmap_moderF   	WRITEABLE)rM   rN   r   r   may_share_memoryr   )rG   rd   X_memmapr   s       rj   test_check_array_memmapr  N  sp    
A	A	% 4t4	""8Y7HEEE{+t3334 4 4s   >A++A4c                 4   t        j                  g dg dg dg dg      } | |      }t        |d        | ddgddgg      }t        |d       d|d<    | |      }t        j                  t
        d      5  t        |d       d d d        y # 1 sw Y   y xY w)	N)rp   rp   r   r   )r   r   r   r   r   r   r   rL   z	Negative r   )rM   r   r>   r   r   r   )r   r   rd   s      rj   test_check_non_negativer  W  s     	,lLIJAq	Aq"AA Aq"AdGq	A	z	5 "1b!" " "s   8BBc                  >   t        j                  d      } d }d}t        j                  t        |      5  t        | |       d d d        d}t        j                  t        |      5  t        | |t                      d d d        y # 1 sw Y   FxY w# 1 sw Y   y xY w)NrH   rH   z;estimator requires y to be passed, but the target y is Noner   zGRandomForestRegressor requires y to be passed, but the target y is None)r   )rM   rN   r   r   r   r   r   )rd   r   r   s      rj    test_check_X_y_informative_errorr  q  s    
AA
GC	z	- !Q TC	z	- ;!Q"7"9:; ;	 ; ;s   B'BBBc                       G d d      }  |        }t        |      t        |      k(  sJ  G d d      }t        j                  t        d      5  t         |              d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zd Zy)Jtest_retrieve_samples_from_non_standard_shape.<locals>.TestNonNumericShapec                     d| _         y N)znot numericr   r  s    rj   __init__zStest_retrieve_samples_from_non_standard_shape.<locals>.TestNonNumericShape.__init__  	    )DJrl   c                     t        g d      S )Nr   )lenr  s    rj   __len__zRtest_retrieve_samples_from_non_standard_shape.<locals>.TestNonNumericShape.__len__  s    y>!rl   N)r   rl  rm  r  r  r4  rl   rj   TestNonNumericShaper  ~  s    	*	"rl   r  c                       e Zd Zd Zy)Jtest_retrieve_samples_from_non_standard_shape.<locals>.TestNoLenWeirdShapec                     d| _         y r  r  r  s    rj   r  zStest_retrieve_samples_from_non_standard_shape.<locals>.TestNoLenWeirdShape.__init__  r  rl   Nr   rl  rm  r  r4  rl   rj   TestNoLenWeirdShaper    s    	*rl   r  r  r   )r9   r  r   r   r   )r  rd   r  s      rj   -test_retrieve_samples_from_non_standard_shaper  }  sh    " " 	A?c!f$$$* * 
y(I	J ,(*+, , ,s   A**A3r   )rH   rB   g      @rI   c           	          t        j                         5  t        j                  d       t        | dt        j
                  ddd      }ddd       | k(  sJ y# 1 sw Y   xY w)zPTest that check_scalar returns no error/warning if valid inputs are
    providederror	test_namerH   rI   bothtarget_typemin_valmax_valinclude_boundariesN)warningscatch_warningssimplefilterr?   numbersReal)r   scalars     rj   test_check_scalar_validr    sa     
	 	 	" 	
g&%
	
 Q;;	
 	
s   5AA#zJx, target_name, target_type, min_val, max_val, include_boundaries, err_msg
test_name1rx   neitherz1test_name1 must be an instance of float, not int.z6test_name1 must be an instance of float, not NoneType.z4test_name1 must be an instance of int, not NoneType.z9test_name1 must be an instance of {float, bool}, not int.
test_name2ztest_name2 == 1, must be > 2.rI   
test_name3ztest_name3 == 5, must be < 4.
test_name4rightztest_name4 == 2, must be > 2.
test_name5leftztest_name5 == 4, must be < 4.
test_name6zbad parameter valuezyUnknown value for `include_boundaries`: 'bad parameter value'. Possible values are: ('left', 'right', 'both', 'neither').
test_name7zT`include_boundaries`='left' without specifying explicitly `min_val` is inconsistent.
test_name8zU`include_boundaries`='right' without specifying explicitly `max_val` is inconsistent.c           	         t        j                  t              5 }t        | |||||       ddd       t	        j
                        t	        |      k(  sJ t        |j
                        t        |      k(  sJ y# 1 sw Y   PxY w)zLTest that check_scalar returns the right error if a wrong input is
    givenr  N)r   r   	Exceptionr?   strr   r   )r   target_namer  r  r  r   r   raised_errors           rj   test_check_scalar_invalidr    s~    l 
y	! 
\#1	

 |!!"c'l222""#tG}444
 
s   A;;Br  )rI   y        -C6
?zJThere are imaginary parts in eigenvalues \(1e\-05 of the maximum real part)rI   g-C6
gưz?There are negative eigenvalues \(1e\-06 of the maximum positiveg|۽z?There are negative eigenvalues \(1e\-10 of the maximum positive)rI   g-=z=the largest eigenvalue is more than 1e\+12 times the smallest)nominalnominal_np_arrayinsignificant_imagzinsignificant negzinsignificant neg float32zinsignificant neg float64zinsignificant posz(lambdas, expected_lambdas, w_type, w_msgenable_warningsc                 <   |sd }|Et        j                         5  t        j                  dt               t	        | |      }d d d        n-t        j                  ||      5  t	        | |      }d d d        t        |       y # 1 sw Y   xY w# 1 sw Y   "xY w)Nr  )r  r   )r  r  r  r   r/   r   ry  r   )lambdasexpected_lambdasw_typew_msgr  lambdas_fixeds         rj    test_check_psd_eigenvalues_validr#  D  s     ~$$& 	!!'+BC2M	 	 \\&. 	2M	
 $m4	 		 	s   (B#BBB)rI   y              @z/There are significant imaginary parts in eigenv)r   z,All eigenvalues are negative \(maximum is -1)rI   r   z*There are significant negative eigenvaluesga2U0*3?ggh㈵>g|)significant_imagzall negativezsignificant negzsignificant neg float32zsignificant neg float64zlambdas, err_type, err_msgc                 r    t        j                  ||      5  t        |        d d d        y # 1 sw Y   y xY w)Nr   )r   r   r/   )r  err_typer   s      rj   "test_check_psd_eigenvalues_invalidr(    s/     
xw	/ (w'( ( (s   -6c                     t        j                  d      d d d   } | j                  d   rJ t        | t        j                  d            } | j                  d   sJ t        d t        j                  d            } t	        | t        j                  d             t        dt        j                  d            } t	        | dt        j                  d      z         t        j                  t        d	
      5  t        t        j                  d      t        j                  d             d d d        d}t        j                  t        |
      5  t        t        j                  d      t        j                  d             d d d        t        j                  d      }t        j                  dt         j                        } t        | |      } | j                  t         j                  k(  sJ t        j                  dt              }t        d ||j                        } | j                  t         j                  k(  sJ t        j                  d      }t        j                  t        |            } d| d<   d}t        j                  t        |
      5  t        | |d       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)NrC   rH   r   )rI   rp   r|   )rI   rH   rI   r  z)Sample weights must be 1D array or scalarr   )rH   rx   r  z/sample_weight.shape == \(4,\), expected \(2,\)!rx   rD   ir   z1Negative values in data passed to `sample_weight`T)only_non_negative)rM   rN   r   r1   r   r   r   r   rQ   rE   r   rT   r9   )r   r   rd   r   s       rj   test_check_sample_weightr+    s   GGBK!$M"">222("''&/JM~... )AMM2771:. )@MM1rwwqz>2 
z)T	U ARWWV_@A =C	z	- <RWWQZ2776?;< 	AGGARZZ0M(:M"**,,, 	c"A(q@M"**,,, 	AGGLO,MM"AG	z	1 G]AFG G1A A
< <&G Gs$   :4J34K K3J= K
Kr`   c                     t        j                  d      j                  dd      } | |       | |      }}t        ||      sJ y )Nr  rB   rM   rP   ry   r,   r`   baser   r   s       rj   !test_allclose_dense_sparse_equalsr0    s=    99Q<1%D4='$-qA!!Q'''rl   c                     t        j                  d      j                  dd      } | |       | |dz         }}t        ||      rJ y )Nr  rB   rp   r-  r.  s       rj   %test_allclose_dense_sparse_not_equalsr2    sE    99Q<1%D4='$(+qA%a++++rl   c                     t        j                  d      j                  dd      } | |dz         }d}t        j                  t
        |      5  t        ||       d d d        y # 1 sw Y   y xY w)Nr  rB   rp   zFCan only compare two sparse matrices, not a sparse matrix and an arrayr   )rM   rP   ry   r   r   r   r,   )r`   r   r   r   s       rj    test_allclose_dense_sparse_raiser4    s[    
		!Q"AAA
RC	z	- %q!$% % %s   A$$A-c                  6   t         dddd       } t        j                  t        d      5   | ddd       d d d        t        j                  t        d      5   | dddd	       d d d        t         ddddd
d       }t        j                  t        d      5   |dd       d d d        t         dddd       }t        j                  t        d      5   |dd       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   _xY w# 1 sw Y   y xY w)Nrp   r	  dc                     y ri  r4  r   r   r	  r7  s       rj   f1z=test_deprecate_positional_args_warns_for_function.<locals>.f1      rl   Pass c=3 as keyword argsr   rH   rB   Pass c=3, d=4 as keyword argsrx   )r   r	  r7  c                     y ri  r4  r9  s       rj   f2z=test_deprecate_positional_args_warns_for_function.<locals>.f2  r;  rl   zPass b=2 as keyword argsc                     y ri  r4  r9  s       rj   f3z=test_deprecate_positional_args_warns_for_function.<locals>.f3  r;  rl   )rp   r3   r   ry  FutureWarning)r:  r?  rA  s      rj   1test_deprecate_positional_args_warns_for_functionrD    s   1    
m+F	G 
1a 
m+K	L 
1aA  Q!q    
m+F	G 
1a  1    
m+F	G 
1a %    s/   C+C7
D
D+C47D DDc                      t        d      d        } t        j                  t        d      5   | dd       d d d        y # 1 sw Y   y xY w)N1.1)versionc                     y ri  r4  r   r   s     rj   r:  zEtest_deprecate_positional_args_warns_for_function_version.<locals>.f1  r;  rl   z,From version 1.1 passing these as positionalr   rp   rH   rB  )r:  s    rj   9test_deprecate_positional_args_warns_for_function_versionrJ    sM    . / 
L
  	1a  s   
AA
c                       G d d      } t        j                  t        d      5   | ddd       d d d        t        j                  t        d      5   | dddd	       d d d         G d
 d      }t        j                  t        d      5   |ddd       d d d        t        j                  t        d      5   |dddd	       d d d        y # 1 sw Y   xY w# 1 sw Y   }xY w# 1 sw Y   QxY w# 1 sw Y   y xY w)Nc                   $    e Zd Zedddd       Zy):test_deprecate_positional_args_warns_for_class.<locals>.A1rp   r6  c                     y ri  r4  rj  r   r   r	  r7  s        rj   r  zCtest_deprecate_positional_args_warns_for_class.<locals>.A1.__init__  rk  rl   Nr   rl  rm  r3   r  r4  rl   rj   A1rM    s    	#&'1 	 
$	rl   rQ  r<  r   rp   rH   rB   r=  rx   c                   &    e Zd Zeddddd       Zy):test_deprecate_positional_args_warns_for_class.<locals>.A2rp   r6  c                     y ri  r4  rO  s        rj   r  zCtest_deprecate_positional_args_warns_for_class.<locals>.A2.__init__  rk  rl   N)rp   rp   rP  r4  rl   rj   A2rS    s    	#	!q 	 
$	rl   rU  )r   ry  rC  )rQ  rU  s     rj   .test_deprecate_positional_args_warns_for_classrV    s     
 
m+F	G 
1a 
m+K	L 
1aA 
 
m+F	G 
1a 
m+K	L 
1aA     s/   CCC(;C4CC%(C14C=rI  rB   c                    t         j                  j                  dd      }g dt        j                  g d      t	        j
                  g d      j                  t	        j
                  g d      ddd d}t        |||       }| | n t        t        |j                  d               }d	D ]  }||   ||   u rJ  |d
   t        |d
   |      k(  sJ t        |d   t        |d   |             t        |d   t        |d   |             y )Nrx   rH   )rp   rH   rB   rx   rp   xxx)r  r   
sparse-col
sparse-row
scalar-int
scalar-strNone)r;  rI  r   )rZ  r[  r\  r]  r  r   rY  )rM   randomrandnr   r^   r_   r   r.   r  ranger   r   r    r   )rI  rd   _paramsr   indices_keys         rj   test_check_method_paramsrd    s    
		1A,'mmL133mmL1G "!GWEF!-w4aggaj8I3JHA +c{gcl***+ &>^GFOXFFFFvgww7G(RS |nW\-BHMrl   	sp_format)Tr   r9  r   r:  c                    t        j                  d      }t        dd      }|j                  j                  j                  |      }t        ||       }| du rd} t        j                  |      sJ |j                  | k(  sJ t        ||       y )Nr   rC   rB   r3  Tr   )r   r   r   r  sparsefrom_spmatrixr   r^   r{  r   r   )re  r   sp_matsdfr   s        rj   "test_check_sparse_pandas_sp_formatrk  '  s     
		X	&B"2q)F
,,


+
+F
3CI6FD	;;v==I%%% 0rl   zntype1, ntype2)	)
longdoubler  )r  rQ   )rQ   double)rW   rO   )rO   long)byterY   )ushortrZ   )rZ   uint64)rX   rV   c                    t        j                  d      }|j                  |j                  j	                  g d| d      |j                  j	                  g d|d      d      }t        |j                        t        d      k  r6d}t        j                  t        |	      5  t        |d
dg       ddd       yt        |d
dg       y# 1 sw Y   yxY w)zcheck that we raise an error with dataframe having
    sparse extension arrays with unsupported mixed dtype
    and pandas version below 1.1. pandas versions 1.1 and
    above fixed this issue so no error will be raised.r   r   rp   r   r   rE   
fill_valuerp   r   rp   col1col2rF  z3Pandas DataFrame with mixed sparse extension arraysr   r   r9  r3  N)
r   r   r  arraysSparseArrayr*   __version__r   r   r   )ntype1ntype2r   r  r   s        rj    test_check_pandas_sparse_invalidr  :  s    & 
		X	&B	II)))6a)PII)))6a)P	

B R^^$}U';;G]]:W5 	:5%.9	: 	:
 	Buen5	: 	:s   $CCz ntype1, ntype2, expected_subtyperm  rl  r  rQ   rT   rV   ro  shortrW   intcrO   intprn  r   rS   longlongint_ubyterX   rY   rp  uintcrZ   uintrq  uintp	ulonglongc                 0   t        j                  d      }|j                  |j                  j	                  g d| d      |j                  j	                  g d|d      d      }t        |ddg	      }t        j                  |j                  |      sJ y )
Nr   rs  r   rt  rv  rw  r   r9  r3  )	r   r   r  rz  r{  r   rM   
issubdtyperE   )r}  r~  expected_subtyper   r  r!  s         rj   test_check_pandas_sparse_validr  _  s    . 
		X	&B	II)))6a)PII)))6a)P	

B b
7C==$4555rl   constructor_name)r  rF  r   	dataframe
sparse_csr
sparse_cscc                 L    g dg dg}t        ||       }t        |      dk(  sJ y)z$Check _num_features for array-likes.r   r  rB   N)r   r8   )r  rd   s     rj   test_num_featuresr    s.     
IA1./Aq   rl   r   r  )FTF)r  g333333@g      @r   r   r	  )r   r  rU   r   dict)r  rF  r   seriesc                 l   t        | |      } |dk(  rd}n
|dk(  rd}n|}d| }t        | d      r|dz  }n1t        | d   t              r|d	z  }nt        | d   t              r|d
z  }t        j                  t        t        j                  |            5  t        |        d d d        y # 1 sw Y   y xY w)Nr   znumpy.ndarrayr  zpandas.core.series.Series5Unable to find the number of features from X of type r   z with shape (3,)r   z" where the samples are of type strz# where the samples are of type dictr   )r   rE  rz   r  r  r   r   r   reescaper8   )rd   r  expected_type_namemessages       rj   &test_num_features_errors_1d_containersr    s     	1./A7",	X	%8-
?@R?ST  q'%%	AaD#	77	AaD$	88	y		'(:	; a  s   B**B3)rp   r   Fr  )r   r  rU   r   c                     dt        |       j                   }t        j                  t        |      5  t        |        d d d        y # 1 sw Y   y xY w)Nr  r   )r   rm  r   r   r   r8   )rd   r   s     rj    test_num_features_errors_scalarsr    sD    A$q'BVBVAW
XC	y	, a  s   A		Anamesr7  )zlist-intr`  default
MultiIndexc                 
   t        j                  d      }|j                  ddgddgddgg|       }t        j                         5  t        j
                  dt               t        |      } d	d	d	       | J y	# 1 sw Y   xY w)
zGet feature names with pandas dataframes without warning.

    Column names with consistent dtypes will not warn, such as int or MultiIndex.
    r   rp   rH   rx   rI   ro   r  r  N)r   r   r  r  r  r  rC  r4   )r  r   rd   s      rj   2test_get_feature_names_pandas_with_ints_no_warningr    s     
		X	&B
q!fq!fq!f-u=A		 	 	" &g}5"1%& ==& &s   &A99Bc                      t        j                  d      } t        d      D cg c]  }d| 	 }}| j                  g dg dg|      }t	        |      }t        ||       yc c}w )z)Get feature names with pandas dataframes.r   rB   col_r   r  r  N)r   r   r`  r  r4   r    )r   r&  r
  rd   feature_namess        rj   test_get_feature_names_pandasr    s_    			X	&B#(8,aaSz,G,
i+W=A&q)M}g.	 -s   A"zconstructor_name, minversion))pyarrowz12.0.0)r  z1.5.0)polarsz0.18.2c                 h    g dg dg}g d}t        || ||      }t        |      }t        ||       y)z:Uses the dataframe exchange protocol to get feature names.rp   rx   rH   rB   rB   ro   )col_0col_1col_2)columns_namer  N)r   r4   r    )r  r  r   r
  r  r  s         rj   )test_get_feature_names_dataframe_protocolr    s=     y!D)G	W
B 'r*M}g.rl   )r  r  r  c                 f    t        g dg dg|       }| dv rt        |      rJ y t        |      sJ y )Nr  r  )r  r  )r   r6   )r  r  s     rj   !test_is_pandas_df_other_librariesr    s<    	Y	24D	EB00 $$$$R   rl   c                      t        j                  d      } | j                  g dg      }t        |      sJ t        t	        j
                  g d            rJ t        d      rJ y)z8Check behavior of is_pandas_df when pandas is installed.r   r   rp   N)r   r   r  r6   rM   r   )r   r  s     rj   test_is_pandas_dfr    sX    			X	&B	yk	"BRZZ	2333Qrl   c                 b    t        t        j                  g d            rJ t        d      rJ y)z1Check _is_pandas_df when pandas is not installed.r   rp   N)r6   rM   r   )hide_available_pandass    rj   &test_is_pandas_df_pandas_not_installedr    s,     RZZ	2333Qrl   r  r  r   r  c                 j    t        g dg dg| |      }| dv rt        |      rJ y t        |      sJ y )Nr  r  r  )r  r  )r   r7   )r  r  r  s      rj   !test_is_polars_df_other_librariesr    sF     
	I
B
 33 $$$$R   rl   c                  @     G d d      }  |        }t        |      rJ y)zACheck _is_polars_df for object that looks like a polars dataframec                       e Zd Zd Zy)Ntest_is_polars_df_for_duck_typed_polars_dataframe.<locals>.NotAPolarsDataFramec                 $    g d| _         d| _        y )Nr   	my_schema)r
  schemar  s    rj   r  zWtest_is_polars_df_for_duck_typed_polars_dataframe.<locals>.NotAPolarsDataFrame.__init__  s    $DL%DKrl   Nr  r4  rl   rj   NotAPolarsDataFramer    s    	&rl   r  N)r7   )r  not_a_polars_dfs     rj   1test_is_polars_df_for_duck_typed_polars_dataframer    s'    & &
 *+O_----rl   c                  X    t        j                  g dg dg      } t        |       }|J y)z/Get feature names return None for numpy arrays.r   r  N)rM   r   r4   )rd   r  s     rj   test_get_feature_names_numpyr    s)    
)Y'(Aq!E==rl   znames, dtypesz['int', 'str']pizzaz['list', 'str']zint-strzlist-strc                    t        j                  d      }|j                  ddgddgddgg|       }t        j                  d| d	      }t        j
                  t        |
      5  t        |      } ddd       y# 1 sw Y   yxY w)zAGet feature names errors when the feature names have mixed dtypesr   rp   rH   rx   rI   ro   r  z]Feature names are only supported if all input features have string names, but your input has a.   as feature name / column name types. If you want feature names to be stored and validated, you must convert them all to strings, by using X.columns = X.columns.astype(str) for example. Otherwise you can remove feature / column names from your input data, or convert them all to a non-string data type.r   N)r   r   r  r  r  r   r   r4   )r  r   r   rd   r   s        rj   %test_get_feature_names_invalid_dtypesr  !  s     
		X	&B
q!fq!fq!f-u=A
))	$X &?	?C 
y	, &"1%& & &s   &A;;Bc                   "    e Zd ZddZd ZddZy)PassthroughTransformerNc                 ,    | j                  |d       | S )NT)reset)_validate_datar  s      rj   r   zPassthroughTransformer.fit;  s    AT*rl   c                     |S ri  r4  )rj  rd   s     rj   	transformz PassthroughTransformer.transform?  s    rl   c                     t        | |      S ri  )r-   )rj  input_featuress     rj   get_feature_names_outz,PassthroughTransformer.get_feature_names_outB  s    &t^<<rl   ri  )r   rl  rm  r   r  r  r4  rl   rj   r  r  :  s    =rl   r  c                     t        j                  g dg      } t               j                  |       }|j	                         }t        |g d       ddg}t        j                  t        d      5  |j	                  |       ddd       |`	t        j                  t        d      5  |j	                          ddd       y# 1 sw Y   @xY w# 1 sw Y   yxY w)	z4Check behavior of check_feature_names_in for arrays.r  r  r  )x0x1x2x10r  z*input_features should have length equal tor   Nz Unable to generate feature names)
rM   r   r  r   r  r    r   r   r   n_features_in_)rd   r  r  incorrect_len_namess       rj   test_check_feature_names_inr  F  s    
/"#A
 
"
&
&q
)C%%'Eu01 $-	z)U	V 7!!"567 		z)K	L $!!#$ $7 7
$ $s   /C &C C	Cc                  V   t        j                  d      } g d}| j                  g dg|      }t               j	                  |      }|j                         }t        |g d       t        j                  t        d      5  |j                  g d       ddd       y# 1 sw Y   yxY w)	z?Check behavior of check_feature_names_in for pandas dataframes.r   r  r  r  zinput_features is not equal tor   )r  r  x3N)	r   r   r  r  r   r  r    r   r   )r   r  r  r  s       rj   "test_check_feature_names_in_pandasr  X  s    			X	&BE	'	7B
 
"
&
&r
*C%%'Euo.	z)I	J 6!!"456 6 6s   BB(c                      d} t        j                  t        |       5  t        t	               d       ddd       y# 1 sw Y   yxY w)z@Check the error message when passing an unknown response method.zKRandomForestRegressor has none of the following attributes: unknown_method.r   unknown_methodN)r   r   r  r0   r   )r   s    rj   )test_check_response_method_unknown_methodr  f  sE     	V  
~W	5 J468HIJ J Js	   <Aresponse_method)decision_functionpredict_probapredictc                     d|  d}t        j                  t        |      5  t        t	               |        ddd       y# 1 sw Y   yxY w)zUCheck the error message when a response method is not supported by the
    estimator.z7EstimatorWithFit has none of the following attributes: .r   N)r   r   r  r0   r   )r  r   s     rj   8test_check_response_method_not_supported_response_methodr  o  sO     B/ARRST  
~W	5 D/1?CD D Ds   A  A	c                  l   dg} t        |       }d}ddg}ddj                  |       d}t        j                  t        |      5   t        ||      |       d	d	d	       ddg} t        ||      |      }|dk(  sJ ddg} t        |       }g d
} t        ||      |      }|dk(  sJ y	# 1 sw Y   SxY w)z0Check that we can pass a list of ordered method.r  mocking_datar  r  zD_MockEstimatorOnOffPrediction has none of the following attributes: z, r  r   N)r  r  r  )r   joinr   r   r  r0   )method_implementedmy_estimatorrd   r  r   method_name_predictings         rj   #test_check_response_method_list_strr  |  s    )*01CDLA +I6ON99_%
&a	)  
~W	5 A=|_=a@A +O<OR3L/RSTU!_444 *9501CDLGOR3L/RSTU!Y...A As   B**B3c                      t        d      } t        | j                  ddg      d      }t        j                  ddg      }|j
                  |j
                  k(  sJ t        ||       y)zRegression test for gh-25145r   TFr   N)r   r   r   rM   r   rE   r    )r   r  expecteds      rj   #test_boolean_series_remains_booleanr    sW    	h	B
biiu.%
@Cxxu&H99&&&sH%rl   input_values)r   rp   r   rp   r   rp   c                     t        d      }|j                  | d      }t        |dddd      }t        j                  |j
                  j                  t        j                        sJ t        ||        y)zpCheck pandas array with extensions dtypes returns a numeric ndarray.

    Non-regression test for gh-25637.
    r   Int32rD   NF)rE   r   r   rs   )	r   r   r   rM   r  rE   r'  floatingr   )r  r   input_seriesr   s       rj   !test_pandas_array_returns_ndarrayr    sg     
h	B88L88LF ==**BKK888FL)rl   array_namespaceznumpy.array_apizcupy.array_apic                    t        j                  |       }|j                  |j                  ddgd|j                  dgg|j                        }t        d      5  t        j                  t        d      5  t        |       d	d	d	       d	d	d	       |j                  |j                  ddgd|j                  dgg|j                        }t        d      5  t        j                  t        d
      5  t        |       d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   y	xY w)z9Checks that Array API arrays checks non-finite correctly.rp   r   rB   rD   T)array_api_dispatchr   r   Nzinfinity or a value too large)
r   r   r   ra   rQ   r   r   r   r   r  )r  xpX_nanX_infs       rj   )test_check_array_array_api_has_non_finiter    s    
		_	-BJJABFFA7rzzJJE	4	0 ]]:-BC 		 JJABFFA7rzzJJE	4	0 ]]:-LM 		 		 	 	 	 sH   D7DDD54D) D5D	DD&)D2	.D55D>zextension_dtype, regular_dtype))r  rU   )r  rS   )r  rT   )r  r[   include_objectc                 j   t        j                  d      }|j                  |j                  g d|      |j                  g dd      d      }|r|j                  g dd      |d	<   |j	                  |d
   j                  |             }t        |d      }t        |d      }t        ||       y)zKCheck pandas extension arrays give the same result as non-extension arrays.r   )rp   r   rp   r   rD   )r  r   r  ro   rS   )r   r	  r9  r[   r   r   )r   N)r   r   r  r   assignrR   r   r    )extension_dtyperegular_dtyper   r   	X_regularX_extensionX_regular_checkedX_extension_checkeds           rj   $test_check_array_multiple_extensionsr	    s     
		X	&B<}=<w7	
I #7xH	#""Ys^%:%:?%K"LK#IT:%k>(*=>rl   c                  ~    t        j                  d      } | j                  g dg dd      }t        |      dk(  sJ y)zDUse the DataFrame interchange protocol to get n_samples from polars.r  r   r  rI  rB   N)r   r   r  r9   )plr  s     rj   #test_num_samples_dataframe_protocolr    s8    			X	&B	II6	7Bq   rl   r   output_format)r   r9  r   c                     | ddgddggt         j                        }t        |d      r/|j                  j	                  t         j
                        |_        nt        |d      r;t        |d      r/|j                  j	                  t         j
                        |_        ntt        |d      rht        |d      r\|j                  j	                  t         j
                        |_        |j                  j	                  t         j
                        |_        t        ||	      }|d
k(  rS|j                  j                  t         j
                  k(  sJ |j                  j                  t         j
                  k(  sJ y|j                  j                  t         j
                  k(  sJ |j                  j                  t         j
                  k(  sJ y)zGCheck the consistency of the indices dtype with sparse matrices/arrays.r   rp   rD   offsetsrG  rH  rI  rJ  r3  r   N)rM   rT   rE  r  rR   rO   rG  rI  rJ  r   rE   rH  )r   r  rd   r   s       rj   1test_check_array_dia_to_int32_indexed_csr_csc_coor    s?    	1a&1a&)<A q)II$$RXX.		E	wq%0RXX&	I	71h#7II$$RXX.	88??288,A];I}}""bhh...}}""bhh...  &&"((222%%111rl   )__doc__r  r  r  	itertoolsr   operatorr   tempfiler   numpyrM   r   scipy.sparserg  r^   r   r  sklearn._configr   sklearn._min_dependenciesr   sklearn.baser	   sklearn.datasetsr
   sklearn.ensembler   sklearn.exceptionsr   r   sklearn.linear_modelr   (sklearn.metrics.tests.test_score_objectsr   sklearn.neighborsr   sklearn.random_projectionr   sklearn.svmr   sklearn.utilsr   r   r   r   r   r   sklearn.utils._mockingr   r   sklearn.utils._testingr   r   r   r   r   r    r!   r"   r#   sklearn.utils.estimator_checksr$   sklearn.utils.fixesr%   r&   r'   r(   r)   r*   sklearn.utils.validationr+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rk   markparametrizer^  rC  tocsrru   r}   r   r   r  ra   r   r   r   r   r   r   r   r[   r   r   r   r   rQ   rT   r  r  r  r$  r(  r1  r6  r8  fixturerL  rO  rQ  rY  rd  ro  r  r  r  r  r  rF  r  r  r  r  r  r  r  r  r  r  r  r  r_   rc  rv  rw  ru  
dia_matrixr  r  r  r  r   r   r  IntegralrU   r   r   r  _psd_cases_validvalueskeysr#  _psd_cases_invalidr(  r+  r0  r2  r4  rD  rJ  rV  rd  rk  r  r  integerunsignedintegerr  r  r  r  r`  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r4  rl   rj   <module>r4     s   *  	    '      * 8 & ' 2 F . F 2 ;  
 
 
 7      4'%T 		 0 0 9WRWWR^=Q=Q=SUV1 W1G ,& "&&+1FQVX BJJ#>?/ @/ 4	T45	d78	$(OP	k#>?	T/0	d23	d23FF>		
 
Q,-& BJJ#>?
 @'(
 'BCBJJ#>?%1 @ D%1P
:  BHHq"&&k]#!	

 BHHq"&&k]#!	

 BHHq"&&k]#C	
 
Arvv;-v	.0UV$ +dE];E <%&E) n* n*b 
sc3Z 3*sCj)53*sCj)5
d|$4,t-T:	(	( J 
**bjj	!2::.	RZZ 	BJJ..:%*"GJ5=)%X9>/ 34 5,G
L7%t'TG  0F'!(H"BJ 
Z]D%(.I  22A(
+	E rzz2::&

D)D ':;8 <8<8&9 
	 	4 $/4 04 









	
"
"	;,( n- .  P IJ	
 LLNO	
 LM	
 DMQR	
 67	
 67	
 67	
 67	
 !M	
 #	
 #	
Cmpb5cpb5& !Q($3!1a&)8288QF+;T2F!QV	 %hbhh1v&68OQST!U2::.!Qrzz*K	" 	!VBJJ/!Qrzz*K	" 	!QH	- > .		 	 	"#""$%  
 *T5M:5 ;54 	9 	7 	4 	$bjj14  	$rzz24 + :  		"	"	$%$$&'  
(
()GX RXXr}}bmm$LM( N( RXXr}}bmm$LM, N, R]]BMM$BC% D%60 TAq6N3 40 &HI1 J1$ 
66. &	<-	9bkk*	9bkk*	$	'2::&	"**%	$	

#	*bjj)	$	'2--.	8R//0	(B../	2--.	+r112(6)(6 G!	! 
qC8c1X& 	0  
 +-QR S
* 28WX Y 	%(^U1XtsCj3*%=>6  

/ "I	/		/ +-OP! Q!   "	&y1!45	(2156	%h/23	!	!	. 
q#$
C:	 12 
J  &&"	=] 	=$$6J HDD/:& 1aAq"&&*ACU)VW* X*$ )*->@P,QR S ) $ )D%=9? :?*! ^#n4~E *?@2 A	
2rl   