U
    2d<,                     @   s   d dl 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 e jdd	 Ze jd
ddiedfddiedfgdd Zdd Zdd Ze jdddgdd Ze jdddd Zdd Zd d! Zd"d# ZdS )$    N)	load_iris)DecisionTreeClassifier)shuffle)assert_allcloseassert_array_equal)learning_curve)LearningCurveDisplayc                   C   s   t tddddiS )NT)Z
return_X_yrandom_stater   )r   r    r
   r
   K/tmp/pip-unpacked-wheel-zrfo1fqw/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:c           	   	   C   sT   |\}}t dd}dddg}tj||d  tj|||fd|i| W 5 Q R X dS )	zCCheck that we raise a proper error when passing invalid parameters.r   r	   333333?333333??)matchtrain_sizesN)r   pytestZraisesr   from_estimator)	pyplotr   paramsZerr_typeerr_msgXy	estimatorr   r
   r
   r   1test_learning_curve_display_parameters_validation   s    

  r   c                 C   s<  |\}}t dd}dddg}tj||||d}ddl}|jdksDtt|jtsTt|jD ]}t||j	j
sZtqZt|jtst|jD ]&}	t|	|jjst|	 dkstq|jd	kst|j d
kst|j d	kst|j \}
}|dgkstt||||d\}}}t|j| t|j| t|j| dS )z:Check the default usage of the LearningCurveDisplay class.r   r   r   r   r   r   Ng      ?Scorez%Number of samples in the training setTesting metric)r   r   r   
matplotlib	errorbar_AssertionError
isinstancelines_listlinesLine2Dfill_between_collectionsPolyCollectionZ	get_alpha
score_nameax_Z
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_Zlegend_labelstrain_sizes_absr1   r2   r
   r
   r   )test_learning_curve_display_default_usage&   s@    

   

   r9   c           
      C   s2  |\}}t ddd}dddg}d}tj|||||d}|jd  d }|dk sXt|j d	ksjtd
}tj|||||d}|jd  d }	|	dk stt	|	|  |j d	kstd}tj|||||d}|j d	kst|j
| d |j d	kst|jd  d dk  s.tdS )zaCheck the behaviour of the `negate_score` parameter calling `from_estimator` and
    `plot`.
       r   Z	max_depthr	   r   r   r   F)r   negate_scorer    T)r<   N)r   r   r   r&   get_dataallr$   r.   r/   r   Zplot)
r   r   r   r   r   r   r<   r3   Zpositive_scoresZnegative_scoresr
   r
   r   (test_learning_curve_display_negate_scoreM   sL    
    r?   zscore_name, ylabel)Nr    )Accuracyr@   c           	      C   s   |\}}t dd}dddg}tj|||||d}|j |ksBt|\}}t ddd}dddg}tj|||||d}|j|kstd	S )
zGCheck that we can overwrite the default score name shown on the y-axis.r   r   r   r   r   )r   r-   r:   r;   N)r   r   r   r.   r/   r$   r-   )	r   r   r-   Zylabelr   r   r   r   r3   r
   r
   r   &test_learning_curve_display_score_namez   s,    

    
    rA   )Nerrorbarc                 C   s  |\}}t dd}dddg}t||||d\}}}	d}
tj|||||
|d}|j \}}|d	gksht|d
krt|jdkst|j	d
kst|jd 
 \}}n8|jd
kstt|j	dkst|j	d jd 
 \}}t|| t||jdd d}
tj|||||
|d}|j \}}|dgks0t|d
krrt|jdksNt|j	d
ks^t|jd 
 \}}n<|jd
kstt|j	dkst|j	d jd 
 \}}t|| t||	jdd d}
tj|||||
|d}|j \}}|d	dgkst|d
krXt|jdks"t|j	d
ks2t|jd 
 \}}|jd 
 \}}nT|jd
kshtt|j	dks|t|j	d jd 
 \}}|j	d jd 
 \}}t|| t||jdd t|| t||	jdd d
S )z:Check the behaviour of setting the `score_type` parameter.r   r   r   r   r   r   Ztrain)r   r   r   zTraining metricNr:   )Zaxistestr!   Zboth   )r   r   r   r   r.   r0   r$   lenr&   r#   r=   r(   r   r   Zmean)r   r   r   r   r   r   r   r8   r1   r2   r   r3   r7   legend_labelZx_dataZy_dataZx_data_trainZy_data_trainZx_data_testZy_data_testr
   r
   r   &test_learning_curve_display_score_type   s    

   	
	

	


rG   c                 C   s   |\}}t dd}dddg}tj||||dd}|j dksBt|j d	ksTttj||||d
d}|j d	kszt|j d	kstdS )z1Check the behaviour of the parameter `log_scale`.r   r   r   r   r   T)r   Z	log_scalelogZlinearFN)r   r   r   r.   Z
get_xscaler$   Z
get_yscale)r   r   r   r   r   r   r3   r
   r
   r   %test_learning_curve_display_log_scale   s*    

        rI   c                 C   s  |\}}t dd}ddl}dddg}d}tj|||||d}t|jdksNtt|jd |jj	sft|j
dkstt|jdkst|j \}	}
t|
dkstd	}tj|||||d}t|jdkstt|jd |jj	st|j
dkstt|jdkstt|jd |jjst|j \}	}
t|
dks>td
}tj|||||d}|jdksftt|j
dksztt|j
d |jjst|jdkst|j \}	}
t|
dkstdS )z9Check the behaviour of the parameter `std_display_style`.r   r   Nr   r   r   )r   r   r:   fill_betweenrB   )r   r"   r   r   rE   r&   r$   r%   r(   r)   r#   r*   r.   r0   r+   r,   	containerZErrorbarContainer)r   r   r   r   r   r4   r   r   r3   r7   rF   r
   r
   r   -test_learning_curve_display_std_display_style  s^    

rL   c              	   C   s   |\}}t dd}dddg}d}ddi}dd	d
}tj|||||||d}	|	jd  dks`tt|	jd  d	ddd	gg d}ddi}
tj||||||
d}	|	j	d j
d  dkstdS )zuCheck the behaviour of the different plotting keyword arguments: `line_kw`,
    `fill_between_kw`, and `errorbar_kw`.r   r   r   r   r   rJ   colorZredg      ?)rM   alpha)r   r   line_kwfill_between_kwg        rB   )r   r   errorbar_kwN)r   r   r   r&   Z	get_colorr$   r   r*   Zget_facecolorr#   r(   )r   r   r   r   r   r   r   rO   rP   r3   rQ   r
   r
   r   'test_learning_curve_display_plot_kwargs=  s>    



	rR   )r   Zsklearn.datasetsr   Zsklearn.treer   Zsklearn.utilsr   Zsklearn.utils._testingr   r   Zsklearn.model_selectionr   r   Zfixturer   markZparametrize
ValueErrorr   r9   r?   rA   rG   rI   rL   rR   r
   r
   r
   r   <module>   s6   

'- 

Z: