
    Wh                        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j                  j                  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j                  j                  d#d$      ej                  j                  d%dgddgf      ej                  j                  d&d'      ej                  j                  d(d)d*g      d+                                    ZHd, ZIej                  j                  d#dd-g      d.        ZJej                  j                  d#dd-g      d/        ZKej                  j                  d0g d1      d2        ZLej                  j                  d3 eMd4            ej                  j                  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j                  j                  d9 eMd            d:        ZOej                  j                  d; ed6       ed6      f      ej                  j                  d3d<      d=               ZPej                  j                  d; e'        ed6       edddd>       e5d6      f      ej                  j                  d?d@      dA               ZQej                  j                  dBej                  j                  ej                  j                  ej                  j                  ej                  j                  ej                  j                  ej                  j                  f      dC        Z[ G dD dEe	e      Z\ej                  j                  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j                  j                  dZ e'        ed6      g      ej                  j                  d%dd[g      d\               Z_ej                  j                  dZ e'        ed6      g      d]        Z`ej                  j                  dZ e'        ed6      g      d^        Zad_ Zbd` Zcda Zddb Zeej                  j                  dcddgdedefddgddfg      df        Zfej                  j                  dgddgddg dhidifddgdddjdkgidfddgdddjgidfg      dl        Zgej                  j                  dgdmgdmdddmgidfdmgdmddgidfdddmgdjdkgdddmgdndifg      do        Zhej                  j                  dZ e(dpdq       edd4r      gdsdtgu      ej                  j                  dvd e e2       dwD  cg c]  } eEj                  |     c} f e1       dxD  cg c]  } eEj                  |     c} f       e e2       dwD  cg c]  } eEj                  |     c} fdyz      gg d{u      ej                  j                  d%ddgdwD  cg c]  } eEj                  |     c} gd|d}gu      d~                      Zjej                  j                  ddddg didUfeEj                  d   ddfeEj                  d   eEj                  d    ej                  djdkg      idfddgddfddgdg didfdwD  cg c]  } eEj                  |     c} ddfdwD  cg c]  } eEj                  |     c} eEj                  d   g didfdwD  cg c]  } eEj                  |     c} dg didfdD  cg c]  } eEj                  |     c} eEj                  d   ddegidfg dddfgg du      d        Zlej                  j                  dZ e'        e(        e        e       g      d        Zmej                  j                  de'eDfe(eAfg      d        Znej                  j                  de'eDfe(eAfg      d        Zoej                  j                  dZ e'        e(        e        e       g      ej                  j                  dg d      d               Zpej                  j                  de'eDfe(eAfg      d        Zqd Zrd Zsd Ztd Zud Zvd Zwyc c} w c c} w c c} w c c} w c c} w c c} w c c} w c c} w )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|j                  d       |\  \  }}	}
|j                  d   }d }|rd}|D ci c]  }||d ||f    }}|j                  ||	       t	        |||||||      }||d   }}|
gt        t        |            D cg c]  }| c}}|
|gt        t        |            D cg c]  }| c}}|dk(  r|j                  j                  |k(  sXJ |d	k(  r|j                  j                  |k(  s8J |j                  j                  |k(  sJ |j                  j                  |k(  sJ t        |      |f}|J t        j                  |      j                  |k(  sJ y c c}w c c}w c c}w )
Nn_estimatorsr+   )r?   r   r6   )Xr8   methodr9   r5   custom_valuesgrid_valuesr:   r;   )hasattr
set_paramsshapefitr   rangelenr:   r;   npasarray)	EstimatorrA   datar5   r8   r9   r=   estr@   yr2   n_instancesrB   fresultpdpaxes_expected_pdp_shapeexpected_ice_shapeexpected_axes_shapes                        j/var/www/html/jupyter_env/lib/python3.12/site-packages/sklearn/inspection/tests/test_partial_dependence.pytest_output_shaperZ   G   s   < +CsN#A&
 FQI''!*KM<DEqA..122EEGGAqM
'#F }-C#Vc(m@T&U1&UV $)X#7	8a/	8
 y{{  $6666		~~##'9999{{  $6666~~##'9999x=/:::d!!%8888= F 'V 
9s   E>	F	F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
                  j                  d      }d	}|j                  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<   |j                  |       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 |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 |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 y )N皙?ffffff?d   Fr*   r+   r/      r      )   r+   sizer5   rB      90  r   r+   r/   )is_categoricalr5   rB   )r   r+   r/   r`   r6      r6   abcrk   rl   rm   )rJ   rK   r   r%   TrandomRandomStatenormalrF   dtypeshufflerI   result_typearrayobject)
percentilesr5   ri   r@   gridrT   rngn_unique_valuescol_1_rangecol_0_ranges
             rY   test_grid_from_Xr~      s   
 KOU^N


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

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

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


 A$KO	%'+&JD$ ::/C,<<aggajIIII7==S-////7==_....::2::k+B+H+HIIII
1c(QHq#h/0A	%'/*JD$ ::    r_   c                     t        j                  d      }d}dg}|j                  dg di      }t        |||| i       \  }}|j                  d|j                  d   fk(  sJ |d	   j                  d
k(  sJ y)jCheck that `_grid_from_X` always sample from categories and does not
    depend from the percentiles.
    pandasr\   Tcat_feature)ABCr   r   DEre   r6   r*   r   )r6   N)pytestimportorskip	DataFramer   rF   )r5   pdrx   ri   r@   ry   rT   s          rY   !test_grid_from_X_with_categoricalr      s     
		X	&BKVN
m%HIJA	'JD$ ::!QWWQZ(((7==D   r   c                    t        j                  d      }d}ddg}|j                  g dg dd      }|j                         }t	        |||| i       \  }}| d	k(  rC|j
                  d
k(  sJ |d   j
                  d   |d   k(  sJ |d   j
                  d   | k(  sJ y|j
                  dk(  sJ |d   j
                  d   |d   k(  sJ |d   j
                  d   |d   k(  sJ y)r   r   r\   TF)
r   r   r   r   r   r   r   r   r   r   )
r*   r*   r*   r+   r6   rj   rj   rj   rj      )catnumre   r/   )ra   r+   r   r   r*   )   r+   r   N)r   r   r   nuniquer   rF   )r5   r   rx   ri   r@   r   ry   rT   s           rY   #test_grid_from_X_heterogeneous_typer     s   
 
		X	&BKE]N
E1	
	A iikG	'JD$ !zzW$$$Aw}}Q75>111Aw}}Q?222zzW$$$Aw}}Q75>111Aw}}Q75>111r   z%grid_resolution, percentiles, err_msg))r+   )r   g-C6?zpercentiles are too close)r_   )r*   r+   r/   r`   .'percentiles' must be a sequence of 2 elements)r_   rg   r   )r_   )r)   r^   ('percentiles' values must be in \[0, 1\])r_   )r]   r+   r   )r_   )g?皙?z+percentiles\[0\] must be strictly less than)r*   r\   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        y # 1 sw Y   y xY w)Nr*   r+   r/   r`   Fmatch)rB   )rJ   rK   r   raises
ValueErrorr   )r5   rx   err_msgr@   ri   s        rY   test_grid_from_X_errorr   ,  s^     	

QFQF#$AWN	z	1 XQ^_TVWX X Xs   AAtarget_featurer6   zest, methodr.   	recursionc                 <   t        ddd      \  }}||j                         z
  }t        |       j                  ||      } t	        j
                  |gt        j                        }t	        j
                  dgdgg      }|dk(  rt        | |||d	      \  }}nt        | ||      }g }	d
D ]I  }
|j                         }|
|d d |f<   |	j                  | j                  |      j                                K |d   }|dk(  rdnd}t	        j                  ||	|      sJ y )Nr   r6   )r.   
n_featuresn_informativers         ?{   r4   r3   )response_method)r   r   r   r   gMbP?)rtol)r   meanr   rG   rJ   rv   intpr   r   copyappendpredictallclose)rN   rA   r   r@   rO   r8   ry   rS   predictionsmean_predictionsvalX_r   s                rY   test_partial_dependence_helpersr   ?  s   0 aqIDAq 	
AFFHA *..A
C xx(8H88cUSEN#D4xF
[ ,Cx@ 8VVX #1nB 4 4 678
 a&C [(4dD;;s,4888r   seedc                 V   t         j                  j                  |       }d}d}|j                  ||      }|j                  |      dz  }||j	                         z
  }d}d}t        dd d||      }t        |      j                  t        j                  t         j                        j                        }	t        ddd||		      }
t        ||	
      }|j                  ||       |
j                  ||       |j                  ||       	 t        |j                  |
d   j                         t        |j                  |d   j                         |j                  d      j%                  dd      }t'        |      D ]  }t        j(                  |gt         j*                        }t-        |||      }t-        |
||      }t-        |||      }t         j.                  j1                  ||       t         j.                  j1                  ||        y # t         $ r t"        sJ d       Y y w xY w)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   )rJ   rp   rq   randnr   r   r'   randintiinfoint32maxr   r"   rG   r#   tree_AssertionErrorr&   reshaperH   rv   r   r   testingr$   )r   rz   r-   r   r@   rO   r   	tree_seedforestequiv_random_stategbdttreery   rQ   r8   
pdp_forestpdp_gbdtpdp_trees                     rY   /test_recursion_decision_tree_vs_forest_and_gbdtr   x  s    ))


%C IJ		)Z(A		)r!A
 	
AFFHA II"F ,I6>>rxx?Q?U?UV$!'D !9CUVD
JJq!HHQNHHQN$**d4j&6&67$**fQioo6 99R=  Q'D: 988QCrww/264J
0tXF0tXF


""8X6


"":x89   EEEys   
AH H('H(rN   )r   r*   r+   r/   r`   r6   c                     t        ddd      \  }}t        j                  |      dk(  sJ t        |       j	                  ||      } t        | ||gddd      }t        | ||gdd	d      }t        |d   |d   d
       y )Nr+   r*   r0   r1   r.   r   decision_functionr   r:   )r   rA   r9   r4   gHz>)atol)r
   rJ   r   r   rG   r   r$   )rN   r   r@   rO   preds_1preds_2s         rY    test_recursion_decision_functionr     s     QRSDAq771:
*..A
C 		+G !		+G GI&	(:Fr   )r.   min_samples_leafmax_leaf_nodesmax_iterpower)r*   r+   c                    t         j                  j                  d      }d}d}|j                  |df      }|d d |f   |z  }t	        |       j                  ||      } t        | |g|dd      }|d	   d   j                  d
d      }|d   d   }	t        |      j                  |      }t               j                  ||	      }
t        |	|
j                  |            }|dkD  sJ y )Nr      r+   r6   rc   r   r:   )r8   r@   r5   r9   rC   r)   r*   )degreeGz?)rJ   rp   rq   rr   r   rG   r   r   r   fit_transformr   r   r   )rN   r   rz   r-   target_variabler@   rO   rS   new_Xnew_ylrr2s               rY   #test_partial_dependence_easy_targetr     s    ( ))


"CIO

A
'A	!_
&A
*..A
C
'1dC q!))"a0E	N1Ee,::5AE				u	-B	%E*	+B99r   rL   c                    t        ddd      \  }}t        j                  ||g      j                  } |        }|j	                  ||       t        j                  t        d      5  t        ||dg       d d d        y # 1 sw Y   y xY w)Nr/   r*   r   r   z3Multiclass-multioutput estimators are not supportedr   )	r
   rJ   rv   ro   rG   r   r   r   r   )rL   r@   rO   rN   s       rY   test_multiclass_multioutputr     sz     QRSDAq
!QA
+CGGAqM	O
 ( 	3A3'( ( (s   'A??Bc                       e Zd Zd Zy) NoPredictProbaNoDecisionFunctionc                     ddg| _         | S )Nr   r*   )classes_)selfr@   rO   s      rY   rG   z$NoPredictProbaNoDecisionFunction.fit,  s    Ar   N)__name__
__module____qualname__rG    r   rY   r   r   +  s    r   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   rA   zC'recursion' method, the response_method must be 'decision_function'r;   )r8   rA   r9   zCThe 'recursion' method only applies when 'kind' is set to 'average'r<   )r8   rA   z=Only the following estimators support the 'recursion' method:r*   r+   r/   )r/   r/   r   r*   )r8   rB   zYThe custom grid for some features is not a one-dimensional array. Feature 1: 2 dimensionsc                     t        d      \  }}t        |       j                  ||      } t        j                  t
        |      5  t        | |fi | d d d        y # 1 sw Y   y xY w)Nr   r   r   r
   r   rG   r   r   r   r   )	estimatorparamsr   r@   rO   s        rY   test_partial_dependence_errorr   2  s\    j A.DAqi $$Q*I	z	1 39a2623 3 3s   AA&r   i'  c                     t        d      \  }}t        |       j                  ||      } d}t        j                  t
        |      5  t        | ||g       d d d        y # 1 sw Y   y xY w)Nr   r   zall features must be inr   r   )r   r8   r@   rO   r   s        rY   /test_partial_dependence_unknown_feature_indicesr   n  s_    
 A.DAqi $$Q*I'G	z	1 59a(45 5 5s   A  A)c                 (   t        j                  d      }t        d      \  }}|j                  |      }t	        |       j                  ||      } dg}d}t        j                  t        |      5  t        | ||       d d d        y # 1 sw Y   y xY w)Nr   r   r   rp   z/A given column is not a column of the dataframer   )	r   r   r
   r   r   rG   r   r   r   )r   r   r@   rO   dfr8   r   s          rY   .test_partial_dependence_unknown_feature_stringr   {  s     
		X	&BA.DAq	aBi $$R+IzH?G	z	1 49b(34 4 4s   1BBc                     t        d      \  }}t        |       j                  ||      } t        | t	        |      dgd       y )Nr   r   r:   )r9   )r
   r   rG   r   list)r   r@   rO   s      rY   test_partial_dependence_X_listr    s=    
 A.DAqi $$Q*Iy$q'A3Y?r   c                  v   t        t               d      } | j                  t        t               t        j                  t        d      5  t        | t        dgdd       d d d        t        j                  t        d      5  t        | t        dgdd       d d d        y # 1 sw Y   CxY w# 1 sw Y   y xY w)Nr   )initr.   z9Using recursion method with a non-constant init predictorr   r   r:   )rA   r9   )	r   r   rG   r@   rO   r   warnsUserWarningr   )gbcs    rY   (test_warning_recursion_non_constant_initr    s     %/*;!
LCGGAqM	V
 L 	3A3{KL
 
V
 L 	3A3{KL LL L
L Ls   B#B/#B,/B8c                     d} t         j                  j                  d      }|j                  d| t              }|j                  |       }|j                         }||     || <   t         j                  ||f   }t        j                  |       }d||<   t        dd      }|j                  |||	       t        ||dgd
      }t        j                  |d
   |d         d   dkD  sJ y )Nr   i@ r+   )rd   rs   g     @@r7   r*   )r?   r.   sample_weightr:   )r8   r9   rC   r   r   )rJ   rp   rq   r   boolrandr   c_onesr   rG   r   corrcoef)	Nrz   maskxrO   r@   r
  clfrS   s	            rY   9test_partial_dependence_sample_weight_of_fitted_estimatorr    s    
 	A
))


'C;;qq;-DA	A4%yAteH
dAgAGGAJM M$
#!
DCGGAqG.
S!qc	
BC;;s9~s='9:4@4GGGr   c            	         t        d      } | j                  t        t        t	        j
                  t        t                           t        j                  t        d      5  t        | t        dg       d d d        y # 1 sw Y   y xY w)Nr*   r   r	  z#does not support partial dependencer   r8   )r   rG   r@   rO   rJ   r  rI   r   r   NotImplementedErrorr   r  s    rY   test_hist_gbdt_sw_not_supportedr    sa    
'Q
7CGGAqAG0	#H
 1 	3QC01 1 1s   $BB
c                  4   t               } t               }t        d      }t        ||      }|j	                  |j                  | j                        | j                         |j	                  | j                  | j                         d}t        || j                  |gdd      }t        ||j                  | j                        |gdd      }t        |d   |d          t        |d   d   |d   d   |j                  |   z  |j                  |   z          y )N*   r   r   r7   r:   r8   r5   r9   rC   )r	   r    r   r   rG   r   rM   targetr   	transformr$   scale_mean_)irisscalerr  piper8   pdp_pipepdp_clfs          rY    test_partial_dependence_pipeliner&    s    ;DF
r
*C%DGGF  +T[[9HHTYY$H!dii8*byH !#G HY');<"q!FMM($;;fll8>TTr   z*features, grid_resolution, n_vals_expectedrk   r7   c                    t        j                  d      }t               }t        j                  j                  d      }|j                  |j                  ddd      j                  t        j                        |j                  ddd      j                  t        j                        d      }|j                  |j                  ddd            }|j                  ||       t        ||| |d	      }|d   j                  |k(  sJ y )
Nr   r   r7   r_   rc   rk   rl   r+   r:   r  )r   r   r   rJ   rp   rq   r   r   astypefloat64SeriesrG   r   rd   )	r8   r5   n_vals_expectedr   modelrz   r@   rO   part_deps	            rY   4test_partial_dependence_binary_model_grid_resolutionr/    s     
		X	&BE
))


"C
Q-44RZZ@Q-44RZZ@	
	A 			#++a+-.A	IIaO!	'H I##666r   z(features, custom_values, n_vals_expected      ?       @      @g      @r`   r1  r2  c                    t        j                  d      }t               }|j                  g dg dd      }|j	                  g d      }|j                  ||       t        ||| d|d      }|d   j                  |k(  sJ y )	Nr   r0  )g      @g      @g       @g      "@r(  r   r*   r   r*   r/   r:   r8   r5   rB   r9   )r   r   r   r   r+  rG   r   rd   )r8   rB   r,  r   r-  r@   rO   r.  s           rY   2test_partial_dependence_binary_model_custom_valuesr7  	  s     
		X	&BE
/6JKLA
		,A	IIaO!	#H I##666r   rl   r(  c                 p   t        j                  d      }t        t        d      t	               t                     }|j                  g dg dd      }|j                  g d      }|j                  ||       |j                  g dg dd      }t        ||| d	|d
      }|d
   j                  |k(  sJ y )Nr   most_frequent)strategyr0  )rk   rl   rk   rl   r(  r5  )rk   rl   rk   Nr/   r:   r6  )r   r   r   r   r   r   r   r+  rG   r   rd   )	r8   rB   r,  r   plr@   rO   	X_holdoutr.  s	            rY   .test_partial_dependence_pipeline_custom_valuesr=  &  s     
		X	&B	//BS
B 	/6JKLA
		,AFF1aL#7>STUI!
#H I##666r   r   r   r.   )r.   r?   zestimator-brutezestimator-recursion)idspreprocessorr   r+   r*   r/   passthrough)	remainder)Nonezcolumn-transformerzcolumn-transformer-passthroughzfeatures-integerzfeatures-stringc                    t        j                  d      }|j                  t        t        j
                        t        j                        }t        |t        |             }|j                  |t        j                         t        |||dd      }|t        |      j                  |      }ddg}n|}ddg}t        |       j                  |t        j                        }	t        |	||d	dd
      }
t        |d   |
d          |H|j                  d   }t        |d   d   |
d   d   |j                  d   z  |j                   d   z          y t        |d   d   |
d   d          y )Nr   columnsr7   r:   r  r   r*   r+   r4   )r8   rA   r5   r9   standardscalerrC   )r   r   r   r!   r!  rM   feature_namesr   r   rG   r  r   r   r$   named_transformers_r  r   )r   r@  r8   r   r   r#  r$  X_procfeatures_clfr  r%  r"  s               rY   !test_partial_dependence_dataframerN  F  sb   > 
		X	&B	eDII&0B0B	CBuY'78DHHR!b8RiH |$22261v1v
	


vt{{
3C G HY');<112BC]#A&M"1%a(886<<?J	

 	/2GM4J14MNr   z*features, custom_values, expected_pd_shape)r   Nr/   r7   r1  r2  r3  rO  )r/   r+   )r/   r7   r7   )   r   	   r7   )r/   r7   r`   )r*   r+   r/   r7   rh   )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           	      l   t        j                  d      }|j                  t        j                  t        j
                        }t        t               dD cg c]  }t        j
                  |    c}ft               dD cg c]  }t        j
                  |    c}f      }t        |t        dd            }|j                  |t        j                         t        ||| dd	|
      }|d	   j                  |k(  sJ t        |d         t        |d	   j                        dz
  k(  sJ y c c}w c c}w )Nr   rG  rA  rB  r   r   r>  r7   r:   )r8   r5   r9   rB   rC   r*   )r   r   r   r!  rM   rJ  r   r    r   r   r   rG   r  r   rF   rI   )	r8   rB   expected_pd_shaper   r   ir@  r#  r$  s	            rY   $test_partial_dependence_feature_typerV    s   N 
		X	&B	dii););	<B*		6BaD..q1BC	@A$,,Q/@AL ($QGD 	HHR!
#H I$$(9999x&'3x	/B/H/H+IA+MMMM! C@s   D,
D1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        t        j                  t        d      5  t        | |ddgd       d d d        y # 1 sw Y   ?xY w# 1 sw Y   y xY w)	Nr   r+   r*   r/   zis not fitted yetr   r7   )r8   r5   )
r!  rM   r   r    r   r   r   r   r   r   )r   r@   r@  r#  s       rY    test_partial_dependence_unfittedrX    s     			A*		Aq6"\^aV$<L y1D	~-@	A I4aVRHI	~-@	A N9a1a&"MN NI IN Ns   B,B8,B58CzEstimator, datac                      |        }|\  \  }}}|j                  ||       t        ||ddgd      }t        ||ddgd      }t        j                  |d   d      }t	        ||d          y )Nr*   r+   r:   r@   r8   r9   r;   )axis)rG   r   rJ   r   r$   )	rL   rM   rN   r@   rO   r2   pdp_avgpdp_indavg_inds	            rY   +test_kind_average_and_average_of_individualr_    sr     +CFQIGGAqM QFKG QFNGgggl+!4GGWY/0r   c                     |        }|\  \  }}}t        j                  |j                  d         }|j                  ||       t	        ||ddgd      }t	        ||ddgd|      }t        |d   |d          t        |d   |d          y)	zDCheck that `sample_weight` does not have any effect on reported ICE.r   r*   r+   r;   rZ  )r@   r8   r9   r
  rC   N)rJ   arangerF   rG   r   r$   )	rL   rM   rN   r@   rO   r2   r
  pdp_nswpdp_sws	            rY   =test_partial_dependence_kind_individual_ignores_sample_weightrd    s     +CFQIIIaggaj)MGGAqM QFNGqAq6MF GL)6,+?@GM*F=,ABr   non_null_weight_idx)r   r*   r)   c                     t         j                  t         j                  }}t        t	               ddgft               ddgf      }t        |t        |             j                  ||      }t        j                  |      }d||<   t        ||ddgd|d      }t        ||ddgdd	      }t        |      rdnt        t        j                  |            }	t        |	      D ]  }
t!        |d   |
   |   |d   |
           y
)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!  rM   r  r   r    r   r   r   rG   rJ   
zeros_liker   r   rI   uniquerH   r$   )r   re  r@   rO   r@  r#  r
  rc  r]  
output_dimrU  s              rY   +test_partial_dependence_non_null_weight_idxrj    s     99dkkqA*		Aq6"\^aV$<L uY'78<<QBDMM!$M)*M%&		
A#F !q1a&|UWXG"4(c"))A,.?J: 
L!!$%899a 	

r   c                     |        }|\  \  }}}|j                  ||       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          y)zFCheck that `sample_weight=None` is equivalent to having equal weights.Nr*   r+   r:   rZ  r
  )rG   r   rJ   r  rI   r$   )rL   rM   rN   r@   rO   r2   r
  r   pdp_sw_nonepdp_sw_unitpdp_sw_doublings              rY   7test_partial_dependence_equivalence_equal_sample_weightro  1  s     +CFQIGGAqM 1vy"Q6M$SPFP-PKGGCFOM$SPFP-PKK	*K	,BCA'M(TTmTOK	*OI,FGr   c            	         t               } t        \  \  }}}t        j                  |      }| j	                  ||       t        j                  t        d      5  t        | |dg|dd d       ddd       y# 1 sw Y   yxY w)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_datarJ   	ones_likerG   r   r   r   r   rN   r@   rO   r2   r
  s        rY   0test_partial_dependence_sample_weight_size_errorrt  I  su     
C2FQILLOMGGAqM	z)A	B 
aSab0ASU	

 
 
s   A77B c                     t               } t        \  \  }}}t        j                  |      }| j	                  |||       t        j                  t        d      5  t        | |dgd|       ddd       y# 1 sw Y   yxY w)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   rA   r
  N)	r   regression_datarJ   rr  rG   r   r   r   r   rs  s        rY   4test_partial_dependence_sample_weight_with_recursionrw  X  sr      
!C'FQILLOMGGAqG.	z)V	W 
aSM	

 
 
s   A66A?c                     t        j                  dddt         j                  gt              j	                  dd      } t        j                  g d      }dd	lm} t         |d
      t                     j                  | |      }t        j                  t        d      5  t        || dg       ddd       y# 1 sw Y   yxY w)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*   r5  r   )OrdinalEncoder)encoded_missing_valuez'The column #0 contains mixed data typesr   r  N)rJ   rv   nanrw   r   sklearn.preprocessingry  r   r   rG   r   r   r   r   )r@   rO   ry  r  s       rY   test_mixed_type_categoricalr}  g  s     	#sC(7??AFA
A4
R0 
c!Qi  
z)R	S 13QC01 1 1s   !B::Cc                  @   t        j                  d      j                  dd      } t        j                  g d      }t	               }|j                  | |       t        j                  t        t        j                  d            5  t        || d       d d d        t        j                  t        t        j                  d	            5  t        || d
gdg       d d d        t        j                  t        t        j                  d            5  t        || dd
g       d d d        t        j                         5  t        j                  d       t        || d
d
g       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   dxY w# 1 sw Y   y xY w)Nr   r`   r+   r5  z#The column 0 contains integer data.r   r   r  z#The column 1 contains integer data.r*   r8   categorical_featureserror)rJ   ra  r   rv   r   rG   r   r  FutureWarningreescaper   warningscatch_warningssimplefilter)r@   rO   r  s      rY   $test_reject_array_with_integer_dtyper  w  sV   
		!Q"A
A

CGGAqM	RYY'LM
 / 	3A./
 
RYY'LM
 K 	3QCqcJK
 
RYY'LM
 4 	3QF34 
	 	 	" Ig&3AQCHI I#/ /
K K
4 4I Is0   E0E<F&F0E9<FFFc                     t        j                  d      } | j                  g dg dg dd      }t        j                  g d      }t               }|j                  ||       t        j                  t        t        j                  d            5  t        ||d	       d d d        t        j                  t        t        j                  d            5  t        ||d
dg	       d d d        t        j                         5  t        j                  d       t        ||d
g	       t        ||dgdg       d d d        y # 1 sw Y   xY w# 1 sw Y   hxY w# 1 sw Y   y xY w)Nr   rP  r   rn   )r   r*   r   z%The column 'c' contains integer data.r   rm   r  rk   r  r  )r   r   r   rJ   rv   r   rG   r  r  r  r  r   r  r  r  )r   r@   rO   r  s       rY   %test_reject_pandas_with_integer_dtyper    s0   			X	&B
 	
	A 	A

CGGAqM	RYY'NO
 1 	3C01
 
RYY'NO
 8 	3S#J78 
	 	 	" Og&3SE23SENO O1 1
8 8O Os$   EE6EEEE$c                  Z   t        t               t                     } | j                  t        j
                  t        j                         t        j                  t        t        j                  d            5  t        | t        j
                  dgg        ddd       y# 1 sw Y   yxY w)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   r@   r8   r  N)r   r    r   rG   r!  rM   r  r   r   r   r  r  r   r  s    rY   2test_partial_dependence_empty_categorical_featuresr    s{     (*<*>
?CGGDIIt{{#	ii$

 

 	TYY!2	


 

 

s   9B!!B*)x__doc__r  r  numpyrJ   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'   r@   rO   rq  multiclass_classification_datarv  multioutput_regression_datar!  markparametrizerZ   r~   r   r   r   rH   r   r   r   r   r   DecisionTreeClassifierExtraTreeClassifierensembleExtraTreesClassifier	neighborsKNeighborsClassifierRadiusNeighborsClassifierRandomForestClassifierr   r   r  r   r   r   r  r  r  r  r&  r/  r7  r=  rJ  rN  rv   rV  rX  r_  rd  rj  ro  rt  rw  r}  r  r  r  )rU  s   0rY   <module>r     sF   
     L L " 3 L L )  . ( 1 
 V U $ *  / : F ) 7 	"XBx"bAq6Aq6Aq6: 2BQOQRS  	"  #Ra@!DbAA>  { 	#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qcAq6]3!BC,tUm<49 = D 4 5#*49n[ | 	!!& *QH52 62@ +XX )584		W%	"	2G<	"	2K@	&A	6@	&A	6D	+9	 5+9\ q*C9 +C9L 	"2&A6 )+=>G ?G< 	!q1%Qta	
 	1-
 &) *
> ++((--..33//
(
(     &1!B	
 AE	
 'A6C#2%
 R	
 'A6FSQ	
 \JQ	
 VDQ	
 4K	
 QiGBGGFO2TU*		
Q03h3i3h3 "$&@a&PQ b%[15 25 "$&@a&PQ	4	4 "$&@a&PQ@@L$H41: 0
B
1774 .
*+Q/
sCj!1%
sea 77* .
sCj!1%
sea 
sC:S#J7;770 Dq9"B 
12   vF! 2 21 5FG^VDd003DE	
 	 vF! 2 21 5FG#	

 	I   VV4d  #45	./  
(O8(OV 0	
Q &)			A	g.			A	!3!3A!6#s8L MvV
Q{#
Q!]#Z0)/	0A$

Q
	0$D,23qT"3"M2	

 *0	0A$

Q
	01m2DkR,56qT"6"QG,	

 
$T;7'*	/  $JNK$JN2 !#"$		N	N 	67	7811 	67	78CC "$	 .
;
 <
> 	67	78HH"

1 I6O>
}
  GD  G 5n 
13 
16s0   $f/f40f95f>g:g*gg