
    Pi                     d   d Z ddlZddlZddlZddlZddlZddlmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZmZmZ ddlmZ ddlmZmZmZmZmZ dd	lmZ dd
lmZ ddl m!Z! ddl"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z: ddl;m<Z< ddl=m>Z> ddgddgddgddgddgddggZ?g dZ@ edd          dfZA edddd          dfZB edd          dfZC eddd          dfZD e            ZEejF        G                    d ed!eAfed!eBfed"eAfed"eBfed!eCfed"eCfe5d"eCfe'd"eCfe'd"eDfe(d"eAfe(d"eBfe)d"eDfg          ejF        G                    d#d$          ejF        G                    d%dgddgf          ejF        G                    d&d'          ejF        G                    d(d)d*g          d+                                                             ZHd, ZIejF        G                    d#dd-g          d.             ZJejF        G                    d#dd-g          d/             ZKejF        G                    d0g d1          d2             ZLejF        G                    d3 eMd4                    ejF        G                    d5 e'            d"f ed6          d"f ed6          d7f ed6          d"f ed6          d7fg          d8                         ZNejF        G                    d9 eMd                    d:             ZOejF        G                    d; ed6           ed6          f          ejF        G                    d3d<          d=                         ZPejF        G                    d; e'             ed6           edddd>           e5d6          f          ejF        G                    d?d@          dA                         ZQejF        G                    dBejR        jS        ejR        jT        ejU        jV        ejW        jX        ejW        jY        ejU        jZ        f          dC             Z[ G dD dEe	e          Z\ejF        G                    dF edd!G          d%dgidHf e'            dgdIdJdKf ed6          dgdId7dLdMf ed6          dgdId!dLdMf e'            dgd7dNdOdPf e'            dgd7dQdOdPf e'            dgd7dRdSf e'            ddgg dT ej]        dU          dVdWdXfg          dY             Z^ejF        G                    dZ e'             ed6          g          ejF        G                    d%dd[g          d\                         Z_ejF        G                    dZ e'             ed6          g          d]             Z`ejF        G                    dZ e'             ed6          g          d^             Zad_ Zbd` Zcda Zddb ZeejF        G                    dcddgdedefddgddfg          df             ZfejF        G                    dgddgddg dhidifddgdddjdkgidfddgdddjgidfg          dl             ZgejF        G                    dgdmgdmdddmgidfdmgdmddgidfdddmgdjdkgdddmgdndifg          do             ZhejF        G                    dZ e(dpdq           edd4r          gdsdtgu          ejF        G                    dvd e e2            dw dxD             f e1            dy dzD             f           e e2            d{ dxD             fd|}          gg d~u          ejF        G                    d%ddgd dxD             gddgu          d                                     ZiejF        G                    ddddg didUfeEjj        d         ddfeEjj        d         eEjj        d          ejk        djdkg          idfddgddfddgdg didfd dxD             ddfd dxD             eEjj        d         g didfd dxD             dg didfd dD             eEjj        d         ddegidfg dddfgg du          d             ZlejF        G                    dZ e'             e(             e             e            g          d             ZmejF        G                    de'eDfe(eAfg          d             ZnejF        G                    de'eDfe(eAfg          d             ZoejF        G                    dZ e'             e(             e             e            g          ejF        G                    dg d          d                         ZpejF        G                    de'eDfe(eAfg          d             Zqd Zrd Zsd Ztd Zud Zvd ZwdS )z,
Testing for the partial dependence module.
    N)BaseEstimatorClassifierMixincloneis_regressor)KMeans)make_column_transformer)	load_irismake_classificationmake_regression)DummyClassifier)GradientBoostingClassifierGradientBoostingRegressorHistGradientBoostingClassifierHistGradientBoostingRegressorRandomForestRegressor)NotFittedError)SimpleImputer)partial_dependence)_grid_from_X_partial_dependence_brute_partial_dependence_recursion)LinearRegressionLogisticRegressionMultiTaskLasso)r2_score)make_pipeline)OneHotEncoderPolynomialFeaturesRobustScalerStandardScalerscale)DecisionTreeRegressor)assert_is_subtree)assert_allcloseassert_array_equal)	_IS_32BIT)check_random_state      )r)   r)   r)   r*   r*   r*   2   )	n_samplesrandom_state   )r-   	n_classesn_clusters_per_classr.   )r-   	n_targetsr.   zEstimator, method, dataautobrutegrid_resolution)   
   featureskind)average
individualbothuse_custom_valuesTFc           	          |             }t          |d          r|                    d           |\  \  }}	j        d         }
d }|rdfd|D             }|                    |           t	          |||||          }||d         }}|	gfd	t          t          |                    D             R }|	|
gfd
t          t          |                    D             R }|dk    r|j        j        |k    sJ n=|dk    r|j        j        |k    sJ n$|j        j        |k    sJ |j        j        |k    sJ t          |          f}|J t          j
        |          j        |k    sJ d S )Nn_estimatorsr+   )r?   r   r6   c                 *    i | ]}|d |f         S )N ).0fXr5   s     /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sklearn/inspection/tests/test_partial_dependence.py
<dictcomp>z%test_output_shape.<locals>.<dictcomp>r   s+    EEEqA..12EEE    )rD   r8   methodr9   r5   custom_valuesgrid_valuesc                     g | ]}S rA   rA   rB   _r5   s     rE   
<listcomp>z%test_output_shape.<locals>.<listcomp>   s    &U&U&U1&U&U&UrG   c                     g | ]}S rA   rA   rL   s     rE   rN   z%test_output_shape.<locals>.<listcomp>   s    	8	8	8a/	8	8	8rG   r:   r;   )hasattr
set_paramsshapefitr   rangelenr:   r;   npasarray)	EstimatorrH   datar5   r8   r9   r=   estyr2   n_instancesrI   resultpdpaxesexpected_pdp_shapeexpected_ice_shapeexpected_axes_shaperD   s      `              @rE   test_output_shaperc   G   s   < )++CsN## 'A&&&
 FQI'!*KM FEEEEEHEEEGGAqMMM
'#  F }-C#V&U&U&U&Uc(mm@T@T&U&U&UVV 
9	8	8	85X#7#7	8	8	8 
 y{ $666666			~#'999999{ $66666~#'99999x==/::d!%8888888rG   c            	         d} d}ddg}t          j        ddgddgg          }t          || ||i           \  }}t          |ddgddgddgddgg           t          ||j                   t           j                            d          }d	}|                    d
          }t          || ||i           \  }}|j        ||z  |j        d         fk    sJ t          j        |          j        d|fk    sJ |j	        |j	        k    sJ d}d||dz
  d df<   |
                    |           t          || ||i           \  }}|j        ||z  |j        d         fk    sJ |d         j        |fk    sJ |d         j        |fk    sJ |j	        |j	        k    sJ |                    d
          }d||dz
  d df<   g d}t          || ||d|i          \  }}|j        |t          |          z  |j        d         fk    sJ |d         j        |fk    sJ |d         j        t          |          fk    sJ |j	        |j	        k    sJ |                    d
          }g d}	d}t          || ||d|	i          \  }}|j        |t          |	          z  |j        d         fk    sJ |d         j        t          |	          fk    sJ |d         j        |fk    sJ |j	        t          j        |t          j        |	          j	                  k    sJ t          j        ddgddgddgg          }t          || ||dg di          \  }}|j	        t          k    sJ d S )N皙?ffffff?d   Fr*   r+   r/      r      )   r+   sizer5   rI      90  r   r+   r/   )is_categoricalr5   rI   )r   r+   r/   ri   r6      r6   abcrt   ru   rv   )rV   rW   r   r%   TrandomRandomStatenormalrR   dtypeshufflerU   result_typearrayobject)
percentilesr5   rr   rD   gridr_   rngn_unique_valuescol_1_rangecol_0_ranges
             rE   test_grid_from_Xr      s6   
 KOU^N

QFQF#$$AanorRRJD$tq!fq!fq!fq!f=>>>tQS!!! )


"
"CO 	


  A	'  JD$ :/O;QWQZHHHHH:d!a%99999:     O"'AoQKKNNN	'  JD$ :/O;QWQZHHHHH7=_.....7=_.....:     	


  A"'AoQ))K	%'+&  JD$ :/C,<,<<agajIIIII7=_.....7=S--/////:     	


  A$$$KO	%'+&  JD$ :/C,<,<<agajIIIII7=S--/////7=_.....:2:k+B+B+HIIIIII
1c(QHq#h/00A	%'///*  JD$ :rG   rh   c                     t          j        d          }d}dg}|                    dg di          }t          |||| i           \  }}|j        d|j        d         fk    sJ |d	         j        d
k    sJ dS )jCheck that `_grid_from_X` always sample from categories and does not
    depend from the percentiles.
    pandasre   Tcat_feature)ABCr   r   DErn   r6   r*   r   )r6   N)pytestimportorskip	DataFramer   rR   )r5   pdr   rr   rD   r   r_   s          rE   !test_grid_from_X_with_categoricalr      s     
	X	&	&BKVN
m%H%H%HIJJA	'  JD$ :!QWQZ((((7=D      rG   c                    t          j        d          }d}ddg}|                    g dg dd          }|                                }t	          |||| i           \  }}| d	k    rG|j        d
k    sJ |d         j        d         |d         k    sJ |d         j        d         | k    sJ dS |j        dk    sJ |d         j        d         |d         k    sJ |d         j        d         |d         k    sJ dS )r   r   re   TF)
r   r   r   r   r   r   r   r   r   r   )
r*   r*   r*   r+   r6   rs   rs   rs   rs      )catnumrn   r/   )rj   r+   r   r   r*   )   r+   r   N)r   r   r   nuniquer   rR   )r5   r   r   rr   rD   r   r   r_   s           rE   #test_grid_from_X_heterogeneous_typer     sB   
 
	X	&	&BKE]N
EEE111	
 	
	 	A iikkG	'  JD$ !zW$$$$Aw}Q75>1111Aw}Q?222222zW$$$$Aw}Q75>1111Aw}Q75>111111rG   z%grid_resolution, percentiles, err_msg))r+   )r   g-C6?zpercentiles are too close)rh   )r*   r+   r/   ri   .'percentiles' must be a sequence of 2 elements)rh   rp   r   )rh   )r)   rg   ('percentiles' values must be in \[0, 1\])rh   )rf   r+   r   )rh   )g?皙?z+percentiles\[0\] must be strictly less than)r*   re   z1'grid_resolution' must be strictly greater than 1c                     t          j        ddgddgg          }dg}t          j        t          |          5  t          |||| i            d d d            d S # 1 swxY w Y   d S )Nr*   r+   r/   ri   Fmatch)rI   )rV   rW   r   raises
ValueErrorr   )r5   r   err_msgrD   rr   s        rE   test_grid_from_X_errorr   ,  s     	
QFQF#$$AWN	z	1	1	1 X XQ^_TVWWWWX X X X X X X X X X X X X X X X X Xs   AA"Atarget_featurer6   zest, methodr.   	recursionc                    t          ddd          \  }}||                                z
  }t          |                               ||          } t	          j        |gt          j                  }t	          j        dgdgg          }|dk    rt          | |||d	          \  }}nt          | ||          }g }	d
D ]Y}
|	                                }|
|d d |f<   |	
                    |                     |                                                     Z|d         }|dk    rdnd}t	          j        ||	|          sJ d S )Nr   r6   )r.   
n_featuresn_informativer|         ?{   r4   r3   )response_method)r   r   r   r   gMbP?)rtol)r   meanr   rS   rV   r   intpr   r   copyappendpredictallclose)rZ   rH   r   rD   r[   r8   r   r^   predictionsmean_predictionsvalX_r   s                rE   test_partial_dependence_helpersr   ?  sd   0 aqIIIDAq 	
AFFHHA **..A

C x(888H8cUSEN##D4xF
 
 
[[ ,Cx@@ 8 8VVXX #111nB 4 4 6 67777
a&C [((44dD;s,488888888rG   seedc                    t           j                            |           }d}d}|                    ||          }|                    |          dz  }||                                z
  }d}d}t          dd d||          }t          |                              t          j        t           j	                  j
                  }	t          ddd||		          }
t          ||	
          }|                    ||           |
                    ||           |                    ||           	 t          |j        |
d         j                   t          |j        |d         j                   n"# t           $ r t"          s
J d            Y d S w xY w|                    d                              dd          }t'          |          D ]}t          j        |gt           j                  }t-          |||          }t-          |
||          }t-          |||          }t           j                            ||           t           j                            ||           d S )N  r6   r7   r   r*   F)r?   max_features	bootstrap	max_depthr.   squared_error)r?   learning_rate	criterionr   r.   )r   r.   )r   r   z)this should only fail on 32 bit platformsr,   r)   r   )rV   ry   rz   randnr   r   r'   randintiinfoint32maxr   r"   rS   r#   tree_AssertionErrorr&   reshaperT   r   r   r   testingr$   )r   r   r-   r   rD   r[   r   	tree_seedforestequiv_random_stategbdttreer   rC   r8   
pdp_forestpdp_gbdtpdp_trees                     rE   /test_recursion_decision_tree_vs_forest_and_gbdtr   x  s\    )


%
%C IJ		)Z((A		)r!A
 	
AFFHHA II"  F ,I66>>rx?Q?Q?UVV$!'  D !9CUVVVD
JJq!HHQNNNHHQNNN$*d4j&6777$*fQio6666    EEEEEy 99R==  Q''D: 9 98QCrw///264JJ
0tXFF0tXFF

""8X666

"":x88889 9s   ,A E- -FFrZ   )r   r*   r+   r/   ri   r6   c                 >   t          ddd          \  }}t          j        |          dk    sJ t          |                               ||          } t          | ||gddd          }t          | ||gdd	d          }t          |d         |d         d
           d S )Nr+   r*   r0   r1   r.   r   decision_functionr   r:   )r   rH   r9   r4   gHz>)atol)r
   rV   r   r   rS   r   r$   )rZ   r   rD   r[   preds_1preds_2s         rE    test_recursion_decision_functionr     s     QRSSSDAq71::
**..A

C 		+  G !		+  G GI&	(:FFFFFFrG   )r.   min_samples_leafmax_leaf_nodesmax_iterpower)r*   r+   c                 J   t           j                            d          }d}d}|                    |df          }|d d |f         |z  }t	          |                               ||          } t          | |g|dd          }|d	         d                             d
d          }|d         d         }	t          |          	                    |          }t                                          ||	          }
t          |	|
                    |                    }|dk    sJ d S )Nr      r+   r6   rl   r   r:   )r8   rD   r5   r9   rJ   r)   r*   )degreeGz?)rV   ry   rz   r{   r   rS   r   r   r   fit_transformr   r   r   )rZ   r   r   r-   target_variablerD   r[   r^   new_Xnew_ylrr2s               rE   #test_partial_dependence_easy_targetr     s!   ( )


"
"CIO

A
''A	!!!_
&A
**..A

C
'1d  C q!))"a00E	N1Ee,,,::5AAE					u	-	-B	%E**	+	+B999999rG   rX   c                 2   t          ddd          \  }}t          j        ||g          j        } |             }|                    ||           t          j        t          d          5  t          ||dg           d d d            d S # 1 swxY w Y   d S )Nr/   r*   r   r   z3Multiclass-multioutput estimators are not supportedr   )	r
   rV   r   rx   rS   r   r   r   r   )rX   rD   r[   rZ   s       rE   test_multiclass_multioutputr     s     QRSSSDAq
!QA
)++CGGAqMMM	O
 
 
 ( ( 	3A3'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   ,BBBc                       e Zd Zd ZdS ) NoPredictProbaNoDecisionFunctionc                     ddg| _         | S )Nr   r*   )classes_)selfrD   r[   s      rE   rS   z$NoPredictProbaNoDecisionFunction.fit,  s    ArG   N)__name__
__module____qualname__rS   rA   rG   rE   r   r   +  s#            rG   r   zestimator, params, err_msg)r.   n_initz4'estimator' must be a fitted regressor or classifierpredict_proba)r8   r   z7The response_method parameter is ignored for regressors)r8   r   rH   zC'recursion' method, the response_method must be 'decision_function'r;   )r8   rH   r9   zCThe 'recursion' method only applies when 'kind' is set to 'average'r<   )r8   rH   z=Only the following estimators support the 'recursion' method:r*   r+   r/   )r/   r/   r   r*   )r8   rI   zYThe custom grid for some features is not a one-dimensional array. Feature 1: 2 dimensionsc                     t          d          \  }}t          |                               ||          } t          j        t
          |          5  t          | |fi | d d d            d S # 1 swxY w Y   d S )Nr   r   r   r
   r   rS   r   r   r   r   )	estimatorparamsr   rD   r[   s        rE   test_partial_dependence_errorr   2  s    j A...DAqi  $$Q**I	z	1	1	1 3 39a2262223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3s   A..A25A2r   i'  c                    t          d          \  }}t          |                               ||          } d}t          j        t
          |          5  t          | ||g           d d d            d S # 1 swxY w Y   d S )Nr   r   zall features must be inr   r   )r   r8   rD   r[   r   s        rE   /test_partial_dependence_unknown_feature_indicesr  n  s    
 A...DAqi  $$Q**I'G	z	1	1	1 5 59a(4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   A44A8;A8c                 X   t          j        d          }t          d          \  }}|                    |          }t	          |                               ||          } dg}d}t          j        t          |          5  t          | ||           d d d            d S # 1 swxY w Y   d S )Nr   r   r   ry   z/A given column is not a column of the dataframer   )	r   r   r
   r   r   rS   r   r   r   )r   r   rD   r[   dfr8   r   s          rE   .test_partial_dependence_unknown_feature_stringr  {  s     
	X	&	&BA...DAq	aBi  $$R++IzH?G	z	1	1	1 4 49b(3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s    BB#&B#c                     t          d          \  }}t          |                               ||          } t          | t	          |          dgd           d S )Nr   r   r:   )r9   )r
   r   rS   r   list)r   rD   r[   s      rE   test_partial_dependence_X_listr    sZ    
 A...DAqi  $$Q**Iy$q''A3Y??????rG   c                     t          t                      d          } |                     t          t                     t          j        t          d          5  t          | t          dgdd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          | t          dgdd           d d d            d S # 1 swxY w Y   d S )Nr   )initr.   z9Using recursion method with a non-constant init predictorr   r   r:   )rH   r9   )	r   r   rS   rD   r[   r   warnsUserWarningr   )gbcs    rE   (test_warning_recursion_non_constant_initr    s    %/*;*;!
L
L
LCGGAqMMM	V
 
 
 L L 	3A3{KKKKL L L L L L L L L L L L L L L
 
V
 
 
 L L 	3A3{KKKKL L L L L L L L L L L L L L L L L Ls$   B  BB&CCCc                     d} t           j                            d          }|                    d| t                    }|                    |           }|                                }||           || <   t           j        ||f         }t          j        |           }d||<   t          dd          }|
                    |||	           t          ||dgd
          }t          j        |d
         |d                   d         dk    sJ d S )Nr   i@ r+   )rm   r|   g     @@r7   r*   )r?   r.   sample_weightr:   )r8   r9   rJ   r   r   )rV   ry   rz   r   boolrandr   c_onesr   rS   r   corrcoef)	Nr   maskxr[   rD   r  clfr^   s	            rE   9test_partial_dependence_sample_weight_of_fitted_estimatorr    s    
 	A
)


'
'C;;qq;--DA	A4%yAteH
dAgAGAJJM M$
#!
D
D
DCGGAqG...
S!qc	
B
B
BC;s9~s='9::4@4GGGGGGrG   c            	      J   t          d          } |                     t          t          t	          j        t          t                                         t          j        t          d          5  t          | t          dg           d d d            d S # 1 swxY w Y   d S )Nr*   r   r  z#does not support partial dependencer   r8   )r   rS   rD   r[   rV   r  rU   r   r   NotImplementedErrorr   r  s    rE   test_hist_gbdt_sw_not_supportedr     s    
'Q
7
7
7CGGAqAG000	#H
 
 
 1 1 	3QC00001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s   2BBBc                  v   t                      } t                      }t          d          }t          ||          }|                    |                    | j                  | j                   |                    | j        | j                   d}t          || j        |gdd          }t          ||	                    | j                  |gdd          }t          |d         |d                    t          |d         d         |d         d         |j        |         z  |j        |         z              d S )N*   r   r   r7   r:   r8   r5   r9   rJ   )r	   r    r   r   rS   r   rY   targetr   	transformr$   scale_mean_)irisscalerr  piper8   pdp_pipepdp_clfs          rE    test_partial_dependence_pipeliner-    s<   ;;DF
r
*
*
*C%%DGGF  ++T[999HHTY$$$H!di8*by  H !##  G HY');<<<"q!FM($;;fl8>TT    rG   z*features, grid_resolution, n_vals_expectedrt   r7   c                 T   t          j        d          }t                      }t          j                            d          }|                    |                    ddd                              t          j	                  |                    ddd                              t          j	                  d          }|
                    |                    ddd                    }|                    ||           t          ||| |d	          }|d         j        |k    sJ d S )
Nr   r   r7   rh   rl   rt   ru   r+   r:   r#  )r   r   r   rV   ry   rz   r   r   astypefloat64SeriesrS   r   rm   )	r8   r5   n_vals_expectedr   modelr   rD   r[   part_deps	            rE   4test_partial_dependence_binary_model_grid_resolutionr6    s    
	X	&	&BE
)


"
"C
Q--44RZ@@Q--44RZ@@	
 	
	 	A 			#++a+--..A	IIaOOO!	'  H I#666666rG   z(features, custom_values, n_vals_expected      ?       @      @g      @ri   r8  r9  c                 ,   t          j        d          }t                      }|                    g dg dd          }|                    g d          }|                    ||           t          ||| d|d          }|d         j        |k    sJ d S )	Nr   r7  )g      @g      @g       @g      "@r/  r   r*   r   r*   r/   r:   r8   r5   rI   r9   )r   r   r   r   r2  rS   r   rm   )r8   rI   r3  r   r4  rD   r[   r5  s           rE   2test_partial_dependence_binary_model_custom_valuesr>  	  s     
	X	&	&BE
///6J6J6JKKLLA
		,,,A	IIaOOO!	#  H I#666666rG   ru   r/  c                    t          j        d          }t          t          d          t	                      t                                }|                    g dg dd          }|                    g d          }|                    ||           |                    g dg dd          }t          ||| d	|d
          }|d
         j
        |k    sJ d S )Nr   most_frequent)strategyr7  )rt   ru   rt   ru   r/  r<  )rt   ru   rt   Nr/   r:   r=  )r   r   r   r   r   r   r   r2  rS   r   rm   )	r8   rI   r3  r   plrD   r[   	X_holdoutr5  s	            rE   .test_partial_dependence_pipeline_custom_valuesrD  &  s     
	X	&	&B	////BSBS
 
B 	///6J6J6JKKLLA
		,,,AFF1aLLL#7#7#7>S>S>STTUUI!
#  H I#666666rG   r   r   r.   )r.   r?   zestimator-brutezestimator-recursion)idspreprocessorc                 2    g | ]}t           j        |         S rA   r(  feature_namesrB   is     rE   rN   rN   S       FFF! 21 5FFFrG   r   r+   c                 2    g | ]}t           j        |         S rA   rI  rK  s     rE   rN   rN   T  s     DDDd03DDDrG   r*   r/   c                 2    g | ]}t           j        |         S rA   rI  rK  s     rE   rN   rN   W  rM  rG   passthrough)	remainder)Nonezcolumn-transformerzcolumn-transformer-passthroughc                 2    g | ]}t           j        |         S rA   rI  rK  s     rE   rN   rN   _  s     444d #444rG   zfeatures-integerzfeatures-stringc                 T   t          j        d          }|                    t          t          j                  t          j                  }t          |t          |                     }|	                    |t          j
                   t          |||dd          }|'t          |                              |          }ddg}n|}ddg}t          |           	                    |t          j
                  }	t          |	||d	dd
          }
t          |d         |
d                    |S|j        d         }t          |d         d         |
d         d         |j        d         z  |j        d         z              d S t          |d         d         |
d         d                    d S )Nr   columnsr7   r:   r#  r   r*   r+   r4   )r8   rH   r5   r9   standardscalerrJ   )r   r   r   r!   r(  rY   rJ  r   r   rS   r$  r   r   r$   named_transformers_r&  r'  )r   rG  r8   r   r  r*  r+  X_procfeatures_clfr  r,  r)  s               rE   !test_partial_dependence_dataframer]  F  s   > 
	X	&	&B	eDI&&0B	C	CBuY'7'788DHHR!b8Ri  H |$$222661v1v
	



vt{
3
3C   G HY');<<<12BC]#A&M"1%a(886<?J	
 	
 	
 	
 	

 	/2GM4J14MNNNNNrG   z*features, custom_values, expected_pd_shape)r   Nr/   r7   r8  r9  r:  r^  )r/   r+   )r/   r7   r7   )   r   	   r7   )r/   r7   ri   c                 2    g | ]}t           j        |         S rA   rI  rK  s     rE   rN   rN          	0	0	0A$
Q
	0	0	0rG   c                 2    g | ]}t           j        |         S rA   rI  rK  s     rE   rN   rN     s     333qT"333rG   )r*   r+   r/   r7   c                 2    g | ]}t           j        |         S rA   rI  rK  s     rE   rN   rN     rc  rG   c                 2    g | ]}t           j        |         S rA   rI  rK  s     rE   rN   rN     s     666qT"666rG   rq   )r/   r7   r+   r7   )TFTF)z
scalar-intzscalar-int-custom-valuesz
scalar-strzscalar-str-custom-valueszlist-intzlist-int-custom-valueszlist-strzlist-str-custom-valuesz list-str-custom-values-incorrectzlist-str-three-featuresr  c                 >   t          j        d          }|                    t          j        t          j                  }t          t                      d dD             ft                      d dD             f          }t          |t          dd	                    }|                    |t          j                   t          ||| d
d|          }|d         j        |k    sJ t          |d                   t          |d         j                  dz
  k    sJ d S )Nr   rW  c                 2    g | ]}t           j        |         S rA   rI  rK  s     rE   rN   z8test_partial_dependence_feature_type.<locals>.<listcomp>  s     BBBaD.q1BBBrG   rN  c                 2    g | ]}t           j        |         S rA   rI  rK  s     rE   rN   z8test_partial_dependence_feature_type.<locals>.<listcomp>  s     @@@A$,Q/@@@rG   rP  r   r   rE  r7   r:   )r8   r5   r9   rI   rJ   r*   )r   r   r   r(  rY   rJ  r   r    r   r   r   rS   r$  r   rR   rU   )r8   rI   expected_pd_shaper   r  rG  r*  r+  s           rE   $test_partial_dependence_feature_typerk    s-   N 
	X	&	&B	di);	<	<B*			BB6BBBC	@@@@@A L ($QGGG D 	HHR!
#  H I$(99999x&''3x	/B/H+I+IA+MMMMMMMrG   c                    t           j        }t          t                      ddgft	                      ddgf          }t          ||           }t          j        t          d          5  t          ||ddgd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          | |ddgd           d d d            d S # 1 swxY w Y   d S )	Nr   r+   r*   r/   zis not fitted yetr   r7   )r8   r5   )
r(  rY   r   r    r   r   r   r   r   r   )r   rD   rG  r*  s       rE    test_partial_dependence_unfittedrm    s    		A*			Aq6"\^^aV$< L y11D	~-@	A	A	A I I4aVRHHHHI I I I I I I I I I I I I I I	~-@	A	A	A N N9a1a&"MMMMN N N N N N N N N N N N N N N N N Ns$   (B

BB0CCCzEstimator, datac                     |             }|\  \  }}}|                     ||           t          ||ddgd          }t          ||ddgd          }t          j        |d         d          }t	          ||d                    d S )Nr*   r+   r:   rD   r8   r9   r;   )axis)rS   r   rV   r   r$   )	rX   rY   rZ   rD   r[   r2   pdp_avgpdp_indavg_inds	            rE   +test_kind_average_and_average_of_individualrt    s     )++CFQIGGAqMMM QFKKKG QFNNNGggl+!444GGWY/00000rG   c                 Z    |             }|\  \  }}}t          j        |j        d                   }|                    ||           t	          ||ddgd          }t	          ||ddgd|          }t          |d         |d                    t          |d         |d                    dS )	zDCheck that `sample_weight` does not have any effect on reported ICE.r   r*   r+   r;   ro  )rD   r8   r9   r  rJ   N)rV   arangerR   rS   r   r$   )	rX   rY   rZ   rD   r[   r2   r  pdp_nswpdp_sws	            rE   =test_partial_dependence_kind_individual_ignores_sample_weightry    s     )++CFQIIagaj))MGGAqMMM QFNNNGqAq6M  F GL)6,+?@@@GM*F=,ABBBBBrG   non_null_weight_idx)r   r*   r)   c                 h   t           j        t           j        }}t          t	                      ddgft                      ddgf          }t          |t          |                                         ||          }t          j
        |          }d||<   t          ||ddgd|d          }t          ||ddgdd	          }t          |          rdn t          t          j        |                    }	t          |	          D ]0}
t!          |d         |
         |         |d         |
                    1d
S )a   Check that if we pass a `sample_weight` of zeros with only one index with
    sample weight equals one, then the average `partial_dependence` with this
    `sample_weight` is equal to the individual `partial_dependence` of the
    corresponding index.
    r   r+   r*   r/   r:   r7   )r9   r  r5   r;   )r9   r5   N)r(  rY   r$  r   r    r   r   r   rS   rV   
zeros_liker   r   rU   uniquerT   r$   )r   rz  rD   r[   rG  r*  r  rx  rr  
output_dimrL  s              rE   +test_partial_dependence_non_null_weight_idxr    sK     9dkqA*			Aq6"\^^aV$< L uY'7'788<<QBBDM!$$M)*M%&		
A#  F !q1a&|UWXXXG"4((?c")A,,.?.?J: 
 
L!!$%899a 	
 	
 	
 	

 
rG   c                     |             }|\  \  }}}|                     ||           d|ddgdd}}t          |fi |d|i}t          j        t	          |                    }t          |fi |d|i}	t          |d         |	d                    dt          j        t	          |                    z  }t          |fi |d|i}
t          |d         |
d                    dS )zFCheck that `sample_weight=None` is equivalent to having equal weights.Nr*   r+   r:   ro  r  )rS   r   rV   r  rU   r$   )rX   rY   rZ   rD   r[   r2   r  r   pdp_sw_nonepdp_sw_unitpdp_sw_doublings              rE   7test_partial_dependence_equivalence_equal_sample_weightr  1  s
    )++CFQIGGAqMMM 1vy"Q"Q6M$SPPFPP-PPPKGCFFOOM$SPPFPP-PPPKK	*K	,BCCCA'M(TTTTmTTTOK	*OI,FGGGGGrG   c            	      2   t                      } t          \  \  }}}t          j        |          }|                     ||           t          j        t          d          5  t          | |dg|dd         d           ddd           dS # 1 swxY w Y   dS )zjCheck that we raise an error when the size of `sample_weight` is not
    consistent with `X` and `y`.
    zsample_weight.shape ==r   r   r*   Nr7   )r8   r  r5   )	r   binary_classification_datarV   	ones_likerS   r   r   r   r   rZ   rD   r[   r2   r  s        rE   0test_partial_dependence_sample_weight_size_errorr  I  s     

C2FQILOOMGGAqMMM	z)A	B	B	B 
 
aSabb0ASU	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   !BBBc                  &   t                      } t          \  \  }}}t          j        |          }|                     |||           t          j        t          d          5  t          | |dgd|           ddd           dS # 1 swxY w Y   dS )zaCheck that we raise an error when `sample_weight` is provided with
    `"recursion"` method.
    r  z+'recursion' method can only be applied whenr   r   r   )r8   rH   r  N)	r   regression_datarV   r  rS   r   r   r   r   r  s        rE   4test_partial_dependence_sample_weight_with_recursionr  X  s      
!
!C'FQILOOMGGAqG...	z)V	W	W	W 
 
aSM	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   #BB
B
c                     t          j        dddt           j        gt                                        dd          } t          j        g d          }dd	lm} t           |d
          t                                	                    | |          }t          j        t          d          5  t          || dg           ddd           dS # 1 swxY w Y   dS )znCheck that we raise a proper error when a column has mixed types and
    the sorting of `np.unique` will fail.r   r   r   r   r)   r*   r<  r   )OrdinalEncoder)encoded_missing_valuez'The column #0 contains mixed data typesr   r  N)rV   r   nanr   r   sklearn.preprocessingr  r   r   rS   r   r   r   r   )rD   r[   r  r  s       rE   test_mixed_type_categoricalr  g  s%    	#sC(777??AFFA
A444444
R000  
c!Qii  
z)R	S	S	S 1 13QC00001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s   /CCCc                     t          j        d                              dd          } t          j        g d          }t	                      }|                    | |           t          j        t          t          j
        d                    5  t          || d           d d d            n# 1 swxY w Y   t          j        t          t          j
        d	                    5  t          || d
gdg           d d d            n# 1 swxY w Y   t          j        t          t          j
        d                    5  t          || dd
g           d d d            n# 1 swxY w Y   t          j                    5  t          j        d           t          || d
d
g           d d d            d S # 1 swxY w Y   d S )Nr   ri   r+   r<  z#The column 0 contains integer data.r   r   r  z#The column 1 contains integer data.r*   r8   categorical_featureserror)rV   rv  r   r   r   rS   r   r  FutureWarningreescaper   warningscatch_warningssimplefilter)rD   r[   r  s      rE   $test_reject_array_with_integer_dtyper  w  s   
	!Q""A
A


CGGAqMMM	RY'LMM
 
 
 / / 	3A..../ / / / / / / / / / / / / / /
 
RY'LMM
 
 
 K K 	3QCqcJJJJK K K K K K K K K K K K K K K
 
RY'LMM
 
 
 4 4 	3QF33334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 
	 	"	" I Ig&&&3AQCHHHHI I I I I I I I I I I I I I I I I IsH   B//B36B3'D		DDE""E&)E& )F66F:=F:c                     t          j        d          } |                     g dg dg dd          }t          j        g d          }t                      }|                    ||           t          j        t          t          j
        d                    5  t          ||d	           d d d            n# 1 swxY w Y   t          j        t          t          j
        d                    5  t          ||d
dg	           d d d            n# 1 swxY w Y   t          j                    5  t          j        d           t          ||d
g	           t          ||dgdg           d d d            d S # 1 swxY w Y   d S )Nr   r_  r   rw   )r   r*   r   z%The column 'c' contains integer data.r   rv   r  rt   r  r  )r   r   r   rV   r   r   rS   r  r  r  r  r   r  r  r  )r   rD   r[   r  s       rE   %test_reject_pandas_with_integer_dtyper    sm   		X	&	&B
 	
 	
	 	A 	A


CGGAqMMM	RY'NOO
 
 
 1 1 	3C00001 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 
RY'NOO
 
 
 8 8 	3S#J77778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 
	 	"	" O Og&&&3SE22223SENNNNO O O O O O O O O O O O O O O O O Os6   B::B>B>2DDD1=E;;E?E?c                  r   t          t                      t                                } |                     t          j        t          j                   t          j        t          t          j        d                    5  t          | t          j        dgg            ddd           dS # 1 swxY w Y   dS )zYCheck that we raise the proper exception when `categorical_features`
    is an empty listzPassing an empty list (`[]`) to `categorical_features` is not supported. Use `None` instead to indicate that there are no categorical features.r   r   )r   rD   r8   r  N)r   r    r   rS   r(  rY   r$  r   r   r   r  r  r   r  s    rE   2test_partial_dependence_empty_categorical_featuresr    s     ((*<*>*>
?
?CGGDIt{###	i$
 

 
 
 

 

 	TY!2	
 	
 	
 	


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s    B,,B03B0)x__doc__r  r  numpyrV   r   sklearnsklearn.baser   r   r   r   sklearn.clusterr   sklearn.composer   sklearn.datasetsr	   r
   r   sklearn.dummyr   sklearn.ensembler   r   r   r   r   sklearn.exceptionsr   sklearn.imputer   sklearn.inspectionr   &sklearn.inspection._partial_dependencer   r   r   sklearn.linear_modelr   r   r   sklearn.metricsr   sklearn.pipeliner   r  r   r   r   r    r!   sklearn.treer"   sklearn.tree.tests.test_treer#   sklearn.utils._testingr$   r%   sklearn.utils.fixesr&   sklearn.utils.validationr'   rD   r[   r  multiclass_classification_datar  multioutput_regression_datar(  markparametrizerc   r   r   r   r   rT   r   r   r   r   r   DecisionTreeClassifierExtraTreeClassifierensembleExtraTreesClassifier	neighborsKNeighborsClassifierRadiusNeighborsClassifierRandomForestClassifierr   r   r  r   r  r  r  r  r  r   r-  r6  r>  rD  r]  rJ  r   rk  rm  rt  ry  r  r  r  r  r  r  r  r  rA   rG   rE   <module>r     sO    
			        L L L L L L L L L L L L " " " " " " 3 3 3 3 3 3 L L L L L L L L L L ) ) ) ) ) )              . - - - - - ( ( ( ( ( ( 1 1 1 1 1 1         
 V U U U U U U U U U $ $ $ $ $ $ * * * * * *              / . . . . . : : : : : : F F F F F F F F ) ) ) ) ) ) 7 7 7 7 7 7 	"XBx"bAq6Aq6Aq6: 21BQOOOQRS    	"  #?Ra@@@!DObAA>>>  y{{ 	#V-GH	#V-KL	#W.HI	#W.LM	"FO<	"G_=	9	7O4	7$?@	W&@A	W&DE	"=> " *G44qcAq6]33!BCC,tUm<<49 49 =< DC 43 54# *49n[  [  [ | 	 ! ! !& *QH552 2 652@ +   X X X )558844				W%	"	"	2	2	2G<	"	"	2	2	2K@	&	&A	6	6	6@	&	&A	6	6	6D	 	+9 +9	 	 54+9\ q**C9 C9 +*C9L 	""222&&A666  )+=>>G G ?> G< 	!!q111%%Qta	
 	
 	
 	1---
 
 &))  *)
 
> +(-.3/
 
( (
 
(           F&111!B	
 AAE	
 '&A666C#2% 
 R	
 '&A666FSSQ	
 \JJQ	
 VDDQ	
 44K	
 QiiiGBGFOO2T2TUU*		
Q03 3h3 3i3 3h3 ""$$&@&@a&P&P&PQ  b%[115 5 21 5 ""$$&@&@a&P&P&PQ 	4 	4 	4 ""$$&@&@a&P&P&PQ @ @ @L L L$H H H41 1 1  : 0
B
1 7 7 74 .
***+Q/
sCj!1%
sea  7 7 7* .
sCj!1%
sea 
sC:S#J77; 7 7 70 Dq999""BBB 
12    ^FFvFFFG\^^DDVDDDE	
 	
 	 ^FFvFFFG#	
 	
 	

 	IHH    V44V4445	./   
(O (O   8(OV 0	
Q &)		A	g.		A	!3A!6#s8L8L MvV
Q{#
Q!]]]#Z0	0	0	0	0	0$D33F333"MMM2	

 
1	0	0	0	01mmm2DkR66I666"QG,	

 
$	#	#T;7'*	 	 	/  $ $JN NK$ $JN2 !!##""$$	 	N 	N 	N 	67	78 1 1 1 	67	78 C C C ""$$	  .


;;
 
 <; 
> 	67	78 H H H"
 
 

 
 
1 1 1 I I I6O O O>
 
 
 
 
rG   