B
    	\N                 @   s  d dl mZ d dlZd dl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 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'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l0m1Z1 d dlm2Z2 d dl3m4Z4 d d! Z5ej67d"d#d$ Z8d%d& Z9d'd( Z:d)d* Z;ej67d"d+d, Z<d-d. Z=e> Z?e?j@ZAe?jBZCe4eCd/d0ZDe4eCd1d0ZEeFeCeDeEfZGeAjH\ZIZJeGjHd/ ZKeLeMeCZNeOePejMeCeDeEfZQd2d3 ZRej67d"d4d5 ZSej67d"d6d7 ZTd8d9 ZUd:d; ZVd<d= ZWd>d? ZXej67d"d@dA ZYdBdC ZZdDdE Z[dFdG Z\ej67dHej67dIdJdK Z]ej67dHej67dIdLdM Z^ej67dHej67dIdNdO Z_ej67dHej67dIdPdQ Z`ej67dHej67dIdRdS Zaej67dHej67dIdTdU ZbdS )V    )divisionN)assert_almost_equal)assert_raises)assert_false)assert_raises_regex)assert_raise_message)assert_array_equal)assert_equal)assert_greater)assert_not_equal)assert_array_almost_equal)datasets)clone)make_classification)GradientBoostingRegressorRandomForestClassifier)NotFittedError)	cpu_count)Lasso)LogisticRegression)Ridge)SGDClassifier)SGDRegressor)jaccard_similarity_scoremean_squared_error)OneVsRestClassifier)ClassifierChainRegressorChain)MultiOutputClassifier)MultiOutputRegressor)	LinearSVC)ClassifierMixin)shufflec        
      C   s   t jdd\} }| d d |d d  }}| dd  |dd   }}t|}xHtdD ]<}tdd}|||d d |f  |||d d |f< qXW ttdd}||| ||}	t	||	 d S )N   )	n_targets2   r   )random_state)
r   make_regressionnp
zeros_likeranger   fitpredictr   r   )
XyX_trainy_trainX_testy_test
referencesnrgry_pred r7   =lib/python3.7/site-packages/sklearn/tests/test_multioutput.pytest_multi_target_regression&   s    


r9   z,ignore:max_iter and tol parameters have beenc              C   s8  t jdd\} }| d d |d d  }}| dd  |dd   }}t|}d}xrtdD ]f}tddd}	|	|d | |d ||f  |	||d  ||d |f  |	||d d |f< q\W ttddd}	|	|d | |d |  |	||d  ||d   |	|}
t	||
 t
tttd d S )	Nr#   )r$   r%      r      )r&   max_iterpartial_fit)r   r'   r(   r)   r*   r   r=   r,   r   r   r   hasattrr   )r-   r.   r/   r0   r1   r2   r3   
half_indexr4   Zsgrr6   r7   r7   r8   (test_multi_target_regression_partial_fit9   s     
  

r@   c              C   s2   t jdd\} }ttdd}tt|j| | d S )N   )r$   r   )r&   )r   r'   r   r   r   
ValueErrorr+   )r-   r.   r5   r7   r7   r8   'test_multi_target_regression_one_targetQ   s    rC   c              C   s   t jdd\} }| d d |d d  }}| dd  }xrtjtjtjtjtjgD ]V}tt	dd}tt	dd}|
|| |
||| t||||| qPW d S )Nr#   )r$   r%   r   )r&   )r   r'   sp
csr_matrixZ
csc_matrixZ
coo_matrixZ
dok_matrixZ
lil_matrixr   r   r+   r   r,   )r-   r.   r/   r0   r1   sparser5   Z
rgr_sparser7   r7   r8   #test_multi_target_sparse_regressionX   s    
rG   c              C   sj   dddgdddgg} ddgddgg}d	d
g}t t }ttd|j| || t tdd}|| || d S )NrA      r#      r;      gT㥛 	@gX9v@g?g333333?zdoes not support sample weightsr   )r&   )r   r   r   rB   r+   r   )r-   r.   wr5   r7   r7   r8   $test_multi_target_sample_weights_apii   s    
rL   c              C   s   dddgdddgg} ddgddgg}d	d
g}t tddd}|| || d	d	g}t tddd}|| || t|| d d || d d  d S )NrA   rH   r#   rI   r;   rJ   gT㥛 	@gX9v@g       @g      ?r   )r&   r<   )r   r   r=   r   r,   )r-   r.   rK   rgr_wr5   r7   r7   r8   +test_multi_target_sample_weight_partial_fitx   s    rN   c              C   s   dddgdddgg} ddgddgg}d	d
g}t tdd}|| || dddgdddgdddgg}ddgddgddgg}t tdd}||| dddgdddgg}t|||| d S )NrA   rH   r#   rI   r;   rJ   gT㥛 	@gX9v@g       @g      ?r   )r&   g      ?g      @g      @g      @g      @)r   r   r+   r   r,   )XwywrK   rM   r-   r.   r5   r1   r7   r7   r8    test_multi_target_sample_weights   s    rQ   rA   )r&   rH   c              C   sb   t dddd} t| dd}|ttt |jd }|tt |jd }t dkr^t||k d S )NlogrA   r;   )lossr&   r<   )Zn_jobsr   )	r   r   r=   r-   r.   classesestimators_r   r   )sgd_linear_clfZmorest1est2r7   r7   r8   8test_multi_output_classification_partial_fit_parallelism   s    


rZ   c              C   s2  t dddd} t| }tjd d }|jtd | td | td |t}tt	t
f|j |t|d  t|d   |t}tt	t
f|j xtdD ]}t| } | jtd | td ||f t| d t| t|d d |f  | t|d  t|d |f  t| t|d d |f  qW d S )	NrR   rA   r;   )rS   r&   r<   r   rH   )rU   r#   )r   r   r-   shaper=   r.   rU   r,   r	   	n_samples	n_outputsr*   r   r   )rW   multi_target_linearr?   Zfirst_predictionsZsecond_predictionsir7   r7   r8   ,test_multi_output_classification_partial_fit   s"    

$ r`   c              C   s,   t dddd} t| }ttd|jtt d S )NrR   rA   r;   )rS   r&   r<   z8classes must be passed on the first call to partial_fit.)r   r   r   rB   r=   r-   r.   )rW   r^   r7   r7   r8   Gtest_multi_output_classification_partial_fit_no_first_classes_exception   s    ra   c              C   s  t ddd} t| }|tt |t}tttf|j	 |
t}t|tksTtx|D ]}tttf|j	 qZW ttjt|dd| xptdD ]d}t| }|ttd d |f  tt|tt|d d |f  tt|
tt||  qW d S )N
   rA   )n_estimatorsr&   )axisr#   )r   r   r+   r-   r.   r,   r	   r\   r]   r[   predict_probalenAssertionError	n_classesr   r(   ZargmaxZdstackr*   r   list)forestZmulti_target_forestpredictionsre   Zclass_probabilitiesr_   Zforest_r7   r7   r8    test_multi_output_classification   s"    


$rl   c              C   s   t dd} t| }t|}|tt |t}ttt	f|j
 xTtdD ]H}t|}|ttd d |f  tt|tt|d d |f  qJW d S )Nr   )r&   r#   )r    r   r   r+   r-   r.   r,   r	   r\   r]   r[   r*   r   ri   )ZsvcZmulti_class_svcZmulti_target_svcrk   r_   Zmulti_class_svc_r7   r7   r8   %test_multiclass_multioutput_estimator   s    

rm   c        
   
   C   s  d} t j| }|jdd}t dddddgdd}t dd	d
d	dgdd}t j||gdd}ttdd| d}|	|| |
|}t ddgddgddgddgddggt dddgdddgdd d!gd"d#d$gd%d&d'ggg}x&tt|D ]}	t||	 ||	  qW d S )(Ni  )r;   r;   )sizebar;   rA   def)rd   ovrZ	liblinear)Zmulti_classZsolverr&   gu)"?gu_|?gtĳ?gv?g/?g ?gK[aS?g[rO?ga]q?g?kDQ?g 8칌?g?go|̋<?gOW?gڔ#K?gz~?gP1s&q?gf^?g]=!?g{Y;?ghJ?gL$$S?gXA	?g 7%?g?)r(   randomZRandomStateZnormalarrayZreshapeZconcatenater   r   r+   re   r*   rf   r   )
Zseedrngr-   y1y2YclfZy_resultZy_actualr_   r7   r7   r8   3test_multiclass_multioutput_estimator_predict_proba  s,    


r|   c        	      C   s   dddgdddgg} ddgddgg}t ddg}td	dd
}t|}|| || dddgdddgdddgg}ddgddgddgg}td	dd
}t|}||| dddgdddgg}t|||| d S )NrA   rH   r#   rI   r;   rJ   g       @g      ?rb   )rc   r&   g      ?g      @g      @g      @g      @)r(   asarrayr   r   r+   r   r,   )	rO   rP   rK   rj   clf_wr-   r.   r{   r1   r7   r7   r8   /test_multi_output_classification_sample_weights6  s    r   c        	      C   s   dddgdddgddd	gg} ddgddgddgg}t d
ddg}tddd}t|}|| || dddgdddgdddgddd	gg}ddgddgddgddgg}tddd}t|}||| ddd	gg}t|||| d S )NrA   rH   r#   rI   r;   rJ   g      ?g      @g      @g       @g      ?)r&   r<   )r(   r}   r   r   r+   r   r,   )	rO   rP   rK   rW   r~   r-   r.   r{   r1   r7   r7   r8   ;test_multi_output_classification_partial_fit_sample_weightsK  s    $r   c              C   s   t tdd} tt| jt tt| jt tt| jtt t	
ttf}| tt tt| jt| ttd| jttd d df  d S )Nr   )r&   zUnknown label typerA   )r   r    r   r   r,   r.   re   Zscorer-   r(   column_stackrx   ry   r+   rB   r   )ZmocZy_newr7   r7   r8   test_multi_output_exceptions_  s    r   c              C   s2   t dddddd\} }tdd |D }| |fS )	Ni  d      rb   r   )r\   
n_featuresrh   Zn_informativer&   c             S   s(   g | ] }d d t |ddd D qS )c             S   s   g | ]}t |qS r7   )int).0Zyyyr7   r7   r8   
<listcomp>y  s    zLgenerate_multilabel_dataset_with_correlations.<locals>.<listcomp>.<listcomp>z#06brH   N)format)r   Zyyr7   r7   r8   r   y  s   zAgenerate_multilabel_dataset_with_correlations.<locals>.<listcomp>)r   r(   rv   )r-   r.   ZY_multir7   r7   r8   -generate_multilabel_dataset_with_correlationso  s    

r   c              C   sf   t  \} }tt }|| | || }t|j|j || }|dk}t|| t	|drbt
d S )Nr   re   )r   r   r    r+   r,   r	   r[   Zdecision_functionr   r>   rg   )r-   rz   classifier_chainY_predZ
Y_decisionY_binaryr7   r7   r8   5test_classifier_chain_fit_and_predict_with_linear_svc~  s    




r   z&ignore: Default solver will be changedz ignore: Default multi_class willc              C   sb   t  \} }t| }tt }||| ||}tt }|| | || }t|| d S )N)r   rD   rE   r   r   r+   r,   r   )r-   rz   X_sparser   ZY_pred_sparseZY_pred_denser7   r7   r8   6test_classifier_chain_fit_and_predict_with_sparse_data  s    





r   c        
      C   s   t  \} }| d dd d f }| dd d d f }|d dd d f }|dd d d f }tt }||| ||}tt }||| ||}	tt||	t|| d S )NiX  )r   r   r   r+   r,   r   r
   r   )
r-   rz   r/   r1   ZY_trainZY_testrt   Z
Y_pred_ovrchainZY_pred_chainr7   r7   r8   +test_classifier_chain_vs_independent_models  s    





r   c           	   C   s   t  \} }tt tt g}xf|D ]^}|| | || }t|j|j tdd |j	D t
t| jd | jd |jd   q$W |d | }|dk}t|| t|d tstd S )Nc             S   s   g | ]}|j jqS r7   )coef_rn   )r   cr7   r7   r8   r     s    z3test_base_chain_fit_and_predict.<locals>.<listcomp>rA   g      ?)r   r   r   r   r   r+   r,   r	   r[   rV   ri   r*   re   r   
isinstancer!   rg   )r-   rz   Zchainsr   r   ZY_probr   r7   r7   r8   test_base_chain_fit_and_predict  s    


*
r   c              C   sf   t  \} }t| }tt ddtt ddg}x0|D ](}||| ||}t	|j
|j
 q6W d S )Nr#   )cv)r   rD   rE   r   r   r   r   r+   r,   r	   r[   )r-   rz   r   Zbase_chainsr   r   r7   r7   r8   7test_base_chain_fit_and_predict_with_sparse_data_and_cv  s    



r   c              C   s   t  \} }xtt tt gD ]}t|jddd}|| | t|j|jd}|| | t	|j|j t
t|jttd tt|jd ttt|jd x(t|j|jD ]\}}t|j|j qW q W d S )Nru   *   )orderr&   )r   rI   )r   r   r   r   r   r   
set_paramsr+   Zorder_r   r   ri   r   r*   r	   rf   setziprV   r   r   )r-   rz   r   Zchain_randomZchain_fixedrX   rY   r7   r7   r8   test_base_chain_random_order  s    

r   c              C   s   t  \} }xtt tt gD ]}|| | t|jdd}|| | || }|| }|j	|j	kspt
t||krt
t|trt||dkst
q t||dk s t
q W d S )Nr#   )r   g?g      ?)r   r   r   r   r   r+   r   r   r,   r[   rg   r(   allr   r   r   )r-   rz   r   Zchain_cvZ	Y_pred_cvr   r7   r7   r8   (test_base_chain_crossval_fit_and_predict  s    




r   )cZ
__future__r   ZpytestZnumpyr(   Zscipy.sparserF   rD   Zsklearn.utils.testingr   r   r   r   r   r   r	   r
   r   r   Zsklearnr   Zsklearn.baser   Zsklearn.datasetsr   Zsklearn.ensembler   r   Zsklearn.exceptionsr   Zsklearn.utils._joblibr   Zsklearn.linear_modelr   r   r   r   r   Zsklearn.metricsr   r   Zsklearn.multiclassr   Zsklearn.multioutputr   r   r   r   Zsklearn.svmr    r!   Zsklearn.utilsr"   r9   Zmarkfilterwarningsr@   rC   rG   rL   rN   rQ   Z	load_irisZirisdatar-   targetrx   ry   Zy3r   r.   r[   r\   r   r]   rf   uniquerh   ri   maprU   rZ   r`   ra   rl   rm   r|   r   r   r   r   r   r   r   r   r   r   r   r7   r7   r7   r8   <module>   s   

!	$





