o
    tBhk                     @   s"  d Z ddlZddlZddl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 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 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$ 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/ ddl0m1Z1 ddl0m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 d d!gd!d!gd!d gd"d"gd"d#gd#d"ggZ9g d$Z:ed%dd&d"fZ;ed%d'd"dd(d'fZ<ed%dd&d"fZ=ed%d#dd)d#fZ>e Z?ej@Ad*ed+e;fed+e<fed,e;fed,e<fed+e=fed,e=fed,e=fed,e=fed,e>fed,e;fed,e<fed,e>fgej@Ad-d.ej@Ad/d"gd"d#gfej@Ad0d1d2d3 ZBd4d5 ZCej@Ad6g d7d8d9 ZDej@Ad:eEd;ej@Ad<e d,fedd=d,fedd=d>fedd=d,fedd=d>fgd?d@ ZFej@AdAeEd"dBdC ZGej@AdDedd=edd=fej@Ad:dEdFdG ZHej@AdDe edd=edd"dd"dHedd=fej@AdIdJdKdL ZIej@AdMejJjKejJjLejMjNejOjPejOjQejMjRfdNdO ZSG dPdQ dQe,e+ZTej@UdRej@AdSe d/dgidTfe dgdUdVdWfedd=dgdUd>dXdYfedd=dgdUd+dXdYfedd=dgdZdVd[feT dgd+dVd\feT dgdUdVd]feT dgd^dVd_fe dgdZd`dafe dgd>dbdcddfe dgd>dedcddfe dgd>d`dffgdgdh ZVej@Adidjdkgdldm ZWej@Adne edd=gej@Ad/d!dogdpdq ZXej@Adne edd=gdrds ZYej@Adne edd=gdtdu ZZdvdw Z[dxdy Z\dzd{ Z]d|d} Z^ej@jAdned~ddedd;dgddgdej@jAddee# dd dD fe$ dd dD fee# dd dD fddgg ddej@jAd/dd#gdd dD gddgddd Z_ej@jAdde?j`d dfdd#gdfdd dD dfg ddfgg dddd Zaej@Adne e e e gdd Zbej@Adee>fee;fgdd ZcdS )z,
Testing for the partial dependence module.
    N)partial_dependence)_grid_from_X_partial_dependence_brute_partial_dependence_recursion)GradientBoostingClassifier)GradientBoostingRegressor)RandomForestRegressor)HistGradientBoostingClassifier)HistGradientBoostingRegressor)LinearRegression)LogisticRegression)MultiTaskLasso)DecisionTreeRegressor)	load_iris)make_classificationmake_regression)KMeans)make_column_transformer)r2_score)PolynomialFeatures)StandardScaler)RobustScaler)scale)make_pipeline)DummyClassifier)BaseEstimatorClassifierMixinclone)NotFittedError)assert_allclose)assert_array_equal)	_IS_32BIT)check_random_state)assert_is_subtree      )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bothc                    s  |  }|\\}}}	|j d }
||| t||||| d}||d }}|	g fddtt|D R }|	|
g fddtt|D R }|dkrU|jj |ksTJ n|dkrb|jj |ksaJ n|jj |ksjJ |jj |ksrJ t| f}|d us~J t|j |ksJ d S )	Nr   )Xr4   methodr5   r1   valuesc                       g | ]} qS  r=   .0_r1   r=   /var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/inspection/tests/test_partial_dependence.py
<listcomp>q       z%test_output_shape.<locals>.<listcomp>c                    r<   r=   r=   r>   rA   r=   rB   rC   u   rD   r6   r7   )	shapefitr   rangelenr6   r7   npasarray)	Estimatorr:   datar1   r4   r5   estr9   yr.   n_instancesresultpdpaxesexpected_pdp_shapeexpected_ice_shapeexpected_axes_shaper=   rA   rB   test_output_shapeC   s8   
"rV   c                  C   s:  d} d}t ddgddgg}t|| |\}}t|ddgddgddgddgg t||j t jd}d}|jd	d
}t|| |d\}}|j|| |jd fksSJ t |jd|fks_J d}d||d d df< |	| t|| |d\}}|j|| |jd fksJ |d j|fksJ |d j|fksJ d S )N皙?ffffff?d   r&   r'   r+      r      )   r'   sizerA      90  )
rI   rJ   r   r    TrandomRandomStatenormalrE   shuffle)percentilesr1   r9   gridrR   rngn_unique_valuesr=   r=   rB   test_grid_from_X   s&   "
rk   z%grid_resolution, percentiles, err_msg))r'   )r   g-C6?zpercentiles are too close)rZ   )r&   r'   r+   r[   .'percentiles' must be a sequence of 2 elements)rZ   ra   rl   )rZ   )r%   rY   ('percentiles' values must be in \[0, 1\])rZ   )rX   r'   rm   )rZ   )g?皙?z+percentiles\[0\] must be strictly less than)r&   rW   z1'grid_resolution' must be strictly greater than 1c                 C   sX   t ddgddgg}tjt|d t|| |d W d    d S 1 s%w   Y  d S )Nr&   r'   r+   r[   match)r1   rg   )rI   rJ   pytestraises
ValueErrorr   )r1   rg   err_msgr9   r=   r=   rB   test_grid_from_X_error   s   "ru   target_featurer2   zest, methodr*   	recursionc                 C   s   t dddd\}}||  }| || tj|gtjd}tdgdgg}|dkr7t| |||dd	\}}nt| ||}g }	d
D ]}
| }|
|d d |f< |		| 
|  qA|d }|dkrddnd}tj||	|dspJ d S )Nr   r2   )r*   
n_featuresn_informativedtype      ?{   r0   r/   )response_method)r}   r~   rx   rn   gMbP?)rtol)r   meanrF   rI   arrayint32r   r   copyappendpredictallclose)rM   r:   rv   r9   rN   r4   rh   rQ   predictionsmean_predictionsvalX_r   r=   r=   rB   test_partial_dependence_helpers   s$   
r   seedc                 C   sn  t j| }d}d}|||}||d }||  }d}d}tdd d||d}t|t t j	j
}	tddd||	d	}
t||	d
}||| |
|| ||| zt|j|
d j t|j|d j W n ty{   tsxJ dY d S w |ddd}t|D ]+}t j|gt j	d}t|||}t|
||}t|||}t j|| t j|| qd S )N  r2   r3   r   r&   F)n_estimators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{   )rI   rc   rd   randnr   r   r"   randintiinfor   maxr   r   rF   r#   tree_AssertionErrorr!   reshaperG   r   r   testingr   )r   ri   r)   ry   r9   rN   r   	tree_seedforestequiv_random_stategbdttreerh   fr4   
pdp_forestpdp_gbdtpdp_treer=   r=   rB   /test_recursion_decision_tree_vs_forest_and_gbdt   sV   
r   rM   )r   r&   r'   r+   r[   r2   c                 C   sv   t dddd\}}t|dksJ | || t| ||gdddd}t| ||gdd	dd}t|d |d d
d d S )Nr'   r&   r,   r-   r*   r}   decision_functionrx   r6   )r   r:   r5   r0   gHz>)atol)r   rI   r   rF   r   r   )rM   rv   r9   rN   preds_1preds_2r=   r=   rB    test_recursion_decision_function6  s(   	r   )r*   min_samples_leafmax_leaf_nodesmax_iterpower)r&   r'   c                 C   s   t jd}d}d}|j|dfd}|d d |f | }| || t| |g|ddd}|d	 d d
d}|d d }	t|d|}t	 ||	}
t
|	|
|}|dksYJ d S )Nr      r'   r2   r^   r   r6   )r4   r9   r1   r5   r;   r%   r&   )degreeGz?)rI   rc   rd   re   rF   r   r   r   fit_transformr   r   r   )rM   r   ri   r)   target_variabler9   rN   rQ   new_Xnew_ylrr2r=   r=   rB   #test_partial_dependence_easy_target\  s   r   rK   c                 C   sv   t dddd\}}t||gj}|  }||| tjtdd t||dg W d    d S 1 s4w   Y  d S )Nr+   r&   r   r   z3Multiclass-multioutput estimators are not supportedro   )	r   rI   r   rb   rF   rq   rr   rs   r   )rK   r9   rN   rM   r=   r=   rB   test_multiclass_multioutput  s   "r   c                   @   s   e Zd Zdd ZdS ) NoPredictProbaNoDecisionFunctionc                 C   s   ddg| _ | S )Nr   r&   )classes_)selfr9   rN   r=   r=   rB   rF     s   
z$NoPredictProbaNoDecisionFunction.fitN)__name__
__module____qualname__rF   r=   r=   r=   rB   r     s    r   zignore:A Bunch will be returnedzestimator, params, err_msgz4'estimator' must be a fitted regressor or classifierpredict_proba)r4   r   z7The response_method parameter is ignored for regressors)r4   r   r:   zC'recursion' method, the response_method must be 'decision_function'blahblahz=response_method blahblah is invalid. Accepted response_methodzBThe estimator has no predict_proba and no decision_function methodz*The estimator has no predict_proba method.r   z.The estimator has no decision_function method.)r4   r:   zEblahblah is invalid. Accepted method names are brute, recursion, autor7   )r4   r:   r5   zCThe 'recursion' method only applies when 'kind' is set to 'average'r8   z=Only the following estimators support the 'recursion' method:c                 C   s`   t dd\}}| || tjt|d t| |fi | W d    d S 1 s)w   Y  d S )Nr   rw   ro   r   rF   rq   rr   rs   r   )	estimatorparamsrt   r9   rN   r=   r=   rB   test_partial_dependence_error  s
   G"r   zwith_dataframe, err_msg)T'Only array-like or scalar are supported)Fr   c                 C   s~   t dd\}}| rtd}||}t ||}tjt|d t||t	dddd W d    d S 1 s8w   Y  d S )Nr   rw   pandasro   r'   r&   r4   )
r   rq   importorskip	DataFramer   rF   rr   	TypeErrorr   slice)with_dataframert   r9   rN   pdr   r=   r=   rB   #test_partial_dependence_slice_error  s   

"r   r   i'  c                 C   s`   t dd\}}| || d}tjt|d t| ||g W d    d S 1 s)w   Y  d S )Nr   rw   zall features must be inro   r   )r   r4   r9   rN   rt   r=   r=   rB   /test_partial_dependence_unknown_feature_indices	  s   "r   c                 C   sx   t d}tdd\}}||}| || dg}d}t jt|d t| || W d    d S 1 s5w   Y  d S )Nr   r   rw   rc   z/A given column is not a column of the dataframero   )rq   r   r   r   rF   rr   rs   r   )r   r   r9   rN   dfr4   rt   r=   r=   rB   .test_partial_dependence_unknown_feature_string  s   

"r   c                 C   s4   t dd\}}| || t| t|dgdd d S )Nr   rw   r6   )r5   )r   rF   r   list)r   r9   rN   r=   r=   rB   test_partial_dependence_X_list%  s   r   c                  C   s   t t dd} | tt tjtdd t| tdgddd W d    n1 s)w   Y  tjtdd t| tdgddd W d    d S 1 sKw   Y  d S )Nr   )initr*   z9Using recursion method with a non-constant init predictorro   rx   r6   )r:   r5   )	r   r   rF   r9   rN   rq   warnsUserWarningr   )gbcr=   r=   rB   (test_warning_recursion_non_constant_init/  s   "r   c            	      C   s   d} t jd}|jd| td}|| }| }||   || < t j||f }t | }d||< t	ddd}|j
|||d	 t||dgd
d}t |d
 |d d dksYJ d S )Nr   i@ r'   )r_   r|   g     @@r3   r&   )r   r*   sample_weightr6   )r4   r5   r;   )r   r&   r   )rI   rc   rd   r   boolrandr   c_onesr   rF   r   corrcoef)	Nri   maskxrN   r9   r   clfrQ   r=   r=   rB   %test_partial_dependence_sample_weightA  s   

$r   c                  C   sh   t dd} | jtttttd tjt	dd t
| tdgd W d    d S 1 s-w   Y  d S )Nr&   rw   r   z#does not support partial dependencero   r   )r
   rF   r9   rN   rI   r   rH   rq   rr   NotImplementedErrorr   )r   r=   r=   rB   test_hist_gbdt_sw_not_supported[  s   
"r   c                  C   s   t  } t }tdd}t||}||| j| j || j| j d}t|| j|gddd}t||	| j|gddd}t
|d |d  t
|d d |d d |j|  |j|   d S )N*   rw   r   r3   r6   r4   r1   r5   r;   )r   r   r   r   rF   r   rL   targetr   	transformr   scale_mean_)irisscalerr   piper4   pdp_pipepdp_clfr=   r=   rB    test_partial_dependence_pipelinef  s,   



r   r   r   r*   )r*   r   zestimator-brutezestimator-recursion)idspreprocessorc                 C      g | ]}t j| qS r=   r   feature_namesr?   ir=   r=   rB   rC         rC   r   r'   c                 C   r   r=   r   r   r=   r=   rB   rC     r   r&   r+   c                 C   r   r=   r   r   r=   r=   rB   rC     r   passthrough)	remainder)Nonezcolumn-transformerzcolumn-transformer-passthroughc                 C   r   r=   r   r   r=   r=   rB   rC     r   zfeatures-integerzfeatures-stringc                 C   s  t d}|jttjtjd}t|| }||tj	 t
|||ddd}|d ur5t||}ddg}n|}ddg}t| |tj	}	t
|	||d	ddd
}
t|d |
d  |d ury|jd }t|d d |
d d |jd  |jd   d S t|d d |
d d  d S )Nr   columnsr3   r6   r   r   r&   r'   r0   )r4   r:   r1   r5   standardscalerr;   )rq   r   r   r   r   rL   r   r   rF   r   r   r   r   r   named_transformers_r   r   )r   r   r4   r   r   r   r   X_procfeatures_clfr   r   r   r=   r=   rB   !test_partial_dependence_dataframe  s:   



	

r  zfeatures, expected_pd_shape)r   r+   r3   r  )r+   r3   r3   c                 C   r   r=   r   r   r=   r=   rB   rC     r   )TFTF)z
scalar-intz
scalar-strzlist-intzlist-strr   c                 C   s   t d}|jtjtjd}tt dd dD ft dd dD f}t	|t
dd	d
}||tj t||| ddd}|d j|ksEJ t|d t|d jd ksVJ d S )Nr   r  c                 S   r   r=   r   r   r=   r=   rB   rC     r   z8test_partial_dependence_feature_type.<locals>.<listcomp>r   c                 S   r   r=   r   r   r=   r=   rB   rC     r   r  r   r   r   r3   r6   r   r;   r&   )rq   r   r   r   rL   r   r   r   r   r   r   rF   r   r   rE   rH   )r4   expected_pd_shaper   r   r   r   r   r=   r=   rB   $test_partial_dependence_feature_type  s   

&r  c                 C   s   t j}tt ddgft ddgf}t|| }tjtdd t	||ddgdd W d    n1 s3w   Y  tjtdd t	| |ddgdd W d    d S 1 sUw   Y  d S )	Nr   r'   r&   r+   zis not fitted yetro   r3   )r4   r1   )
r   rL   r   r   r   r   rq   rr   r   r   )r   r9   r   r   r=   r=   rB    test_partial_dependence_unfitted  s   

"r  zEstimator, datac           	      C   sj   |  }|\\}}}| || t||ddgdd}t||ddgdd}tj|d dd}t||d  d S )Nr&   r'   r6   )r9   r4   r5   r7   )axis)rF   r   rI   r   r   )	rK   rL   rM   r9   rN   r.   pdp_avgpdp_indavg_indr=   r=   rB   +test_kind_average_and_average_of_individual  s   r  )d__doc__numpyrI   rq   sklearnsklearn.inspectionr   &sklearn.inspection._partial_dependencer   r   r   sklearn.ensembler   r   r   r	   r
   sklearn.linear_modelr   r   r   sklearn.treer   sklearn.datasetsr   r   r   sklearn.clusterr   sklearn.composer   sklearn.metricsr   sklearn.preprocessingr   r   r   r   sklearn.pipeliner   sklearn.dummyr   sklearn.baser   r   r   sklearn.exceptionsr   sklearn.utils._testingr   r    sklearn.utilsr!   sklearn.utils.validationr"   sklearn.tree.tests.test_treer#   r9   rN   binary_classification_datamulticlass_classification_dataregression_datamultioutput_regression_datar   markparametrizerV   rk   ru   rG   r   r   r   r   r   DecisionTreeClassifierExtraTreeClassifierensembleExtraTreesClassifier	neighborsKNeighborsClassifierRadiusNeighborsClassifierRandomForestClassifierr   r   filterwarningsr   r   r   r   r   r   r   r   r   r  r   r  r  r  r=   r=   r=   rB   <module>   s   (-"

,
F









E
	



+



	