a
    hH                     @   s  d dl Zd dlZd dlm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 ejdd Zejd	d
diedfddiedfgejdedg ddfedg difgdd Zdd Zdd Zejdedg ddfedg difgdd Zejdddgejdedg ddfedg difgd d! Zejd
d"d#d$ Zejd
d"d%d& Zejd'eded(d)dd*fedejd+d,d)d-id*fedeej d d.d)d-!ej"dd/fedej d0d d)d-id/fgd1d2 Z#ejdedg ddfedg difgd3d4 Z$ejdedg ddfedg difgd5d6 Z%ejd7g d8d*fg d9d:fg d;d/fgd<d= Z&ejd>ei fedg ddfgd?d@ Z'dS )A    N)	load_iris)LearningCurveDisplayValidationCurveDisplaylearning_curvevalidation_curve)DecisionTreeClassifier)shuffle)assert_allcloseassert_array_equalc                   C   s   t tddddiS )NT)Z
return_X_yrandom_stater   )r   r    r   r   c/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/model_selection/tests/test_plot.pydata   s    r   zparams, err_type, err_msgstd_display_styleinvalidzUnknown std_display_style:
score_typezUnknown score_type:zCurveDisplay, specific_params	max_depth         
param_nameparam_rangetrain_sizesg333333?g333333??c           
      C   s^   |\}}t dd}	tj||d* |j|	||fi || W d   n1 sP0    Y  dS )zCCheck that we raise a proper error when passing invalid parameters.r   r   )matchN)r   pytestZraisesfrom_estimator)
pyplotr   paramsZerr_typeerr_msgCurveDisplayspecific_paramsXy	estimatorr   r   r   (test_curve_display_parameters_validation   s    
r)   c                 C   s<  |\}}t dd}g d}tj||||d}ddl}|jdu sBJ t|jtsRJ |jD ]}t||jj	sXJ qXt|j
tsJ |j
D ]&}	t|	|jjsJ |	 dksJ q|jdksJ |j dksJ |j dksJ |j \}
}|d	d
gksJ t||||d\}}}t|j| t|j| t|j| dS )z:Check the default usage of the LearningCurveDisplay class.r   r   r   r   N      ?Scorez%Number of samples in the training setTrainTest)r   r   r    
matplotlib	errorbar_
isinstancelines_listlinesLine2Dfill_between_collectionsPolyCollection	get_alpha
score_nameax_
get_xlabel
get_ylabelget_legend_handles_labelsr   r
   r   r	   train_scorestest_scores)r!   r   r&   r'   r(   r   displaympllinefill_legend_labelstrain_sizes_absr?   r@   r   r   r   )test_learning_curve_display_default_usage.   s4    


rH   c                 C   sH  |\}}t dd}dg d }}tj|||||d}ddl}|jdu sJJ t|jtsZJ |jD ]}	t|	|jj	s`J q`t|j
tsJ |j
D ]&}
t|
|jjsJ |
 dksJ q|jdksJ |j | ksJ |j dksJ |j \}}|d	d
gks
J t|||||d\}}t|j| t|j| t|j| dS )z<Check the default usage of the ValidationCurveDisplay class.r   r   r   r   r   Nr+   r,   r-   r.   )r   r   r    r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r   r
   r   r	   r?   r@   )r!   r   r&   r'   r(   r   r   rA   rB   rC   rD   rE   rF   r?   r@   r   r   r   +test_validation_curve_display_default_usageU   s4    





rI   c                 C   sH  |\}}t ddd}d}|j|||fi |d|i}|jd  d }	|	dk sXJ |j dksjJ d}|j|||fi |d|i}|jd  d }
|
dk sJ t|
|	  |j dksJ d}|j|||fi |d|i}|j dksJ |j| d	 |j dks$J |jd  d dk  sDJ d
S )zaCheck the behaviour of the `negate_score` parameter calling `from_estimator` and
    `plot`.
    r   r   r   r   Fnegate_scorer,   TzNegative score)rK   N)	r   r    r2   get_dataallr;   r=   r	   Zplot)r!   r   r$   r%   r&   r'   r(   rK   rA   Zpositive_scoresZnegative_scoresr   r   r   test_curve_display_negate_score|   sJ    rN   zscore_name, ylabel)Nr,   )AccuracyrO   c           
      C   s   |\}}t dd}|j|||fi |d|i}	|	j |ksBJ |\}}t ddd}|j|||fi |d|i}	|	j|ksJ dS )zGCheck that we can overwrite the default score name shown on the y-axis.r   r   r:   r   rJ   N)r   r    r;   r=   r:   )
r!   r   r:   Zylabelr$   r%   r&   r'   r(   rA   r   r   r   test_curve_display_score_name   s(    
rP   )Nerrorbarc                 C   s  |\}}t dd}g d}t||||d\}}}	d}
tj|||||
|d}|j \}}|dgksfJ |du rt|jd	ksJ |jdu sJ |jd 	 \}}n8|jdu sJ t|jd	ksJ |jd j
d 	 \}}t|| t||jd	d
 d}
tj|||||
|d}|j \}}|dgks.J |du rpt|jd	ksLJ |jdu s\J |jd 	 \}}n<|jdu sJ t|jd	ksJ |jd j
d 	 \}}t|| t||	jd	d
 d}
tj|||||
|d}|j \}}|ddgksJ |du rVt|jdks J |jdu s0J |jd 	 \}}|jd	 	 \}}nT|jdu sfJ t|jdkszJ |jd j
d 	 \}}|jd	 j
d 	 \}}t|| t||jd	d
 t|| t||	jd	d
 dS ):Check the behaviour of setting the `score_type` parameter.r   r   r   r*   train)r   r   r   r-   Nr   Zaxistestr.   both   )r   r   r   r    r;   r>   lenr2   r0   rL   r4   r
   r	   mean)r!   r   r   r&   r'   r(   r   rG   r?   r@   r   rA   rE   legend_labelx_datay_datax_data_trainy_data_trainx_data_testy_data_testr   r   r   &test_learning_curve_display_score_type   s    
	
	

	


ra   c              	   C   s  |\}}t dd}dg d }}t|||||d\}}	d}
tj||||||
|d}|j \}}|dgksnJ |d	u rt|jd
ksJ |jd	u sJ |jd 	 \}}n8|jd	u sJ t|jd
ksJ |jd j
d 	 \}}t|| t||jd
d d}
tj||||||
|d}|j \}}|dgks8J |d	u rzt|jd
ksVJ |jd	u sfJ |jd 	 \}}n<|jd	u sJ t|jd
ksJ |jd j
d 	 \}}t|| t||	jd
d d}
tj||||||
|d}|j \}}|ddgksJ |d	u rbt|jdks,J |jd	u s<J |jd 	 \}}|jd
 	 \}}nT|jd	u srJ t|jdksJ |jd j
d 	 \}}|jd
 j
d 	 \}}t|| t||jd
d t|| t||	jd
d d	S )rR   r   r   r   r   r   rS   )r   r   r   r   r-   Nr   rT   rU   r.   rV   rW   )r   r   r   r    r;   r>   rX   r2   r0   rL   r4   r
   r	   rY   )r!   r   r   r&   r'   r(   r   r   r?   r@   r   rA   rE   rZ   r[   r\   r]   r^   r_   r`   r   r   r   (test_validation_curve_display_score_type"  s    











rb   z.CurveDisplay, specific_params, expected_xscaler   r   Zlinearg?r   )numrW   logc           	      C   s>   |\}}t dd}|j|||fi |}|j |ks:J dS )zICheck the behaviour of the x-axis scaling depending on the data provided.r   r   N)r   r    r;   
get_xscale)	r!   r   r$   r%   Zexpected_xscaler&   r'   r(   rA   r   r   r   test_curve_display_xscale_auto  s    
rg   c                 C   s  |\}}t dd}ddl}d}|j|||fi |d|i}	t|	jdksNJ |	jD ]}
t|
|jjsTJ qT|	jdu szJ |	j	du sJ |	j
 \}}t|dksJ d}|j|||fi |d|i}	t|	jdksJ |	jD ]}
t|
|jjsJ q|	jdu sJ t|	j	dksJ |	j	D ]}t||jjs"J q"|	j
 \}}t|dks^J d}|j|||fi |d|i}	|	jdu sJ t|	jdksJ |	jD ]}t||jjsJ q|	j	du sJ |	j
 \}}t|dksJ dS )z9Check the behaviour of the parameter `std_display_style`.r   r   Nr   rW   fill_betweenrQ   )r   r/   r    rX   r2   r1   r4   r5   r0   r6   r;   r>   r7   r8   	containerZErrorbarContainer)r!   r   r$   r%   r&   r'   r(   rB   r   rA   rC   rE   rZ   rh   rQ   r   r   r   $test_curve_display_std_display_style  sp    	




rj   c                 C   s   |\}}t dd}d}ddi}ddd}	|j|||fi ||||	d}
|
jd  dks`J t|
jd  g d	g d
}ddi}|j|||fi |||d}
|
jd jd  dksJ dS )zuCheck the behaviour of the different plotting keyword arguments: `line_kw`,
    `fill_between_kw`, and `errorbar_kw`.r   r   rh   colorred      ?)rk   alpha)r   line_kwfill_between_kw)rm           rq   rm   rQ   )r   errorbar_kwN)	r   r    r2   	get_colorr	   r6   Zget_facecolorr0   r4   )r!   r   r$   r%   r&   r'   r(   r   ro   rp   rA   rr   r   r   r   test_curve_display_plot_kwargs  sD    





	rt   zparam_range, xscale)r   
      )ir   2     Zsymlog)r   rw   rx   c           	      C   s@   |\}}t dd}d}tj|||||d}|j |ks<J dS )z>Check the induced xscale from the provided param_range values.r   r   r   r   N)r   r   r    r;   rf   )	r!   r   r   Zxscaler&   r'   r(   r   rA   r   r   r   @test_validation_curve_xscale_from_param_range_provided_as_a_list  s    
ry   zDisplay, paramsc           	      C   sJ   |\}}t dd}G dd d|}|j|||fi |}t||sFJ dS )zCheck that named constructors return the correct type when subclassed.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/pull/27675
    r   r   c                   @   s   e Zd ZdS )z4test_subclassing_displays.<locals>.SubclassOfDisplayN)__name__
__module____qualname__r   r   r   r   SubclassOfDisplay8  s   r}   N)r   r    r1   )	r!   r   ZDisplayr"   r&   r'   r(   r}   rA   r   r   r   test_subclassing_displays(  s
    
r~   )(numpynpr   Zsklearn.datasetsr   Zsklearn.model_selectionr   r   r   r   Zsklearn.treer   Zsklearn.utilsr   Zsklearn.utils._testingr	   r
   Zfixturer   markZparametrize
ValueErrorr)   rH   rI   rN   rP   ra   rb   ZarangeZlinspaceroundZlogspaceZastypeZint64rg   rj   rt   ry   r~   r   r   r   r   <module>   s   
''
$
Z
]

=
' 
