U
    9%eKa                     @   sn  d Z ddlZddlZddlZddlmZmZmZm	Z	m
Z
 ddlmZ ddlmZmZ ddlmZmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZmZ ddl m!Z!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+ ej,-dZ.ddgddgddgddgddgddggZ/ddddddgZ0ddddddgZ1ddgddgddggZ2dddgZ3dddgZ4e5 Z6e.7e6j8j9Z:e$e6j;e6j8e.d\e6_;e6_8e< Z=e$e=j;e=j8e.d\e=_;e=_8dd Z>dd Z?ej@Adddgdd ZBd d! ZCd"d# ZDej@Ad$d%d&d'gd(d) ZEej@Adddgd*d+ ZFd,d- ZGd.d/ ZHd0d1 ZId2d3 ZJd4d5 ZKd6d7 ZLd8d9 ZMd:d; ZNd<d= ZOd>d? ZPej@Adddgd@dA ZQdBdC ZRej@AdddgdDdE ZSej@AdFe e6j;e6j8fe e=j;e=j8fgdGdH ZTdIdJ ZUej@AdKee!fee"fgdLdM ZVej@AdNeegdOdP ZWej@AdNeegdQdR ZXdSdT ZYej@AdddgdUdV ZZdS )Wz6Testing for the boost module (sklearn.ensemble.boost).    N)
coo_matrix
csc_matrix
csr_matrix
dok_matrix
lil_matrix)datasets)BaseEstimatorclone)DummyClassifierDummyRegressor)AdaBoostClassifierAdaBoostRegressor)_samme_proba)LinearRegression)GridSearchCVtrain_test_split)SVCSVR)DecisionTreeClassifierDecisionTreeRegressor)shuffle)NoSampleWeightWrapper)assert_allcloseassert_array_almost_equalassert_array_equalassert_array_less      foo   random_statec                     s   t dddgdddgddd	gddd
gg  t  jddd d t jf   G  fddd} |  }t|dt  }t|j j t 	|
 sttt j|ddddddg tt j|ddddddg d S )Nr   gư>r   gRQ?g333333?皙?igRQ?g      ?g&.>Zaxisc                       s   e Zd Z fddZdS )z'test_samme_proba.<locals>.MockEstimatorc                    s   t |j j  S N)r   shapeselfXZprobs j/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sklearn/ensemble/tests/test_weight_boosting.pypredict_proba>   s    z5test_samme_proba.<locals>.MockEstimator.predict_probaN)__name__
__module____qualname__r.   r,   r+   r,   r-   MockEstimator=   s   r2   r!   r   )nparrayabssumnewaxisr   	ones_liker   r'   isfiniteallAssertionErrorZargminargmax)r2   ZmockZsamme_probar,   r+   r-   test_samme_proba2   s    "$r=   c                  C   s>   t tt} t t| }t|tt ttdf d S )Nr   )r3   Zoneslenr*   r   fitr   r.   )Zy_tclfr,   r,   r-   test_oneclass_adaboost_probaO   s    rA   	algorithmSAMMESAMME.Rc                 C   sz   t | dd}|tt t|tt tt	t
t|j |tjttdfks\t|tjttfksvtd S )Nr   rB   r#   r   )r   r?   r*   y_classr   predictT	y_t_classr3   uniqueasarrayclasses_r.   r'   r>   r;   decision_function)rB   r@   r,   r,   r-   test_classification_toyX   s    rN   c                  C   s*   t dd} | tt t| tt d S )Nr   r"   )r   r?   r*   y_regrr   rG   rH   y_t_regrr@   r,   r,   r-   test_regression_toyc   s    
rR   c                  C   s  t tj} d  }}dD ]}t|d}|tjtj t| |j |	tj}|dkr^|}|}|j
d t| kstt|tjj
d t| kst|tjtj}|dkstd||f t|jdkstttdd |jD t|jkstqd	|_td
t |	tj|  d S )NrC   rD   rB   rC   r   g?z'Failed with algorithm %s and score = %fc                 s   s   | ]}|j V  qd S r&   r"   .0Zestr,   r,   r-   	<genexpr>   s     ztest_iris.<locals>.<genexpr>rD   r   )r3   rJ   iristargetr   r?   datar   rL   r.   r'   r>   r;   rM   scoreestimators_setrB   r   r5   )classesZ	clf_sammeZ
prob_sammealgr@   probar[   r,   r,   r-   	test_irisj   s(    
ra   lossZlinearZsquareZexponentialc                 C   st   t | dd}|tjtj |tjtj}|dks8tt|jdksJttt	dd |jD t|jksptd S )Nr   )rb   r#   g?r   c                 s   s   | ]}|j V  qd S r&   r"   rU   r,   r,   r-   rW      s     z test_diabetes.<locals>.<genexpr>)
r   r?   diabetesrZ   rY   r[   r;   r>   r\   r]   )rb   regr[   r,   r,   r-   test_diabetes   s    re   c                 C   s  t jd}|jdtjjd}|jdtjjd}t| dd}|j	tj
tj|d |tj
}dd |tj
D }|tj
}dd |tj
D }|jtj
tj|d}	d	d |jtj
tj|dD }
t|dkstt||d
  t|dkstt||d
  t|
dkstt|	|
d
  tddd}|j	tj
tj|d |tj
}dd |tj
D }|jtj
tj|d}	dd |jtj
tj|dD }
t|dkstt||d
  t|
dkstt|	|
d
  d S )Nr   
   size)rB   n_estimatorssample_weightc                 S   s   g | ]}|qS r,   r,   rV   pr,   r,   r-   
<listcomp>   s     z'test_staged_predict.<locals>.<listcomp>c                 S   s   g | ]}|qS r,   r,   rl   r,   r,   r-   rn      s     c                 S   s   g | ]}|qS r,   r,   rV   sr,   r,   r-   rn      s    r   )ri   r#   c                 S   s   g | ]}|qS r,   r,   rl   r,   r,   r-   rn      s     c                 S   s   g | ]}|qS r,   r,   ro   r,   r,   r-   rn      s   )r3   randomRandomStaterandintrX   rY   r'   rc   r   r?   rZ   rG   staged_predictr.   staged_predict_probar[   staged_scorer>   r;   r   r   )rB   rngZiris_weightsZdiabetes_weightsr@   ZpredictionsZstaged_predictionsr`   Zstaged_probasr[   Zstaged_scoresr,   r,   r-   test_staged_predict   sF      rx   c                  C   sh   t t d} dddd}t| |}|tjtj tt dd} ddd}t| |}|t	jt	j d S )N)	estimator)r   r   rS   )ri   estimator__max_depthrB   r   ry   r#   )ri   rz   )
r   r   r   r?   rX   rZ   rY   r   r   rc   )boost
parametersr@   r,   r,   r-   test_gridsearch   s    


r~   c                  C   s   dd l } dD ]p}t|d}|tjtj |tjtj}| |}| |}t	||j
ks`t|tjtj}||kstqtdd}|tjtj |tjtj}| |}| |}t	||j
kst|tjtj}||kstd S )Nr   rS   rT   r"   )pickler   r?   rX   rZ   rY   r[   dumpsloadstype	__class__r;   r   rc   )r   r_   objr[   rp   obj2Zscore2r,   r,   r-   test_pickle   s$    





r   c               	   C   s~   t jdddddddd\} }dD ]X}t|d	}|| | |j}|jd dksRt|d dtjf |dd  k	 s tq d S )
Ni  rf   r!   r   Fr   )	n_samples
n_featuresZn_informativeZn_redundantZ
n_repeatedr   r#   rS   rT   )
r   make_classificationr   r?   feature_importances_r'   r;   r3   r7   r:   )r*   yr_   r@   Zimportancesr,   r,   r-   test_importances   s    


r   c               	   C   sF   t  } td}tjt|d | jttt	
dgd W 5 Q R X d S )Nz*sample_weight.shape == (1,), expected (6,)matchr   rj   )r   reescapepytestraises
ValueErrorr?   r*   rF   r3   rK   )r@   msgr,   r,   r-   ,test_adaboost_classifier_sample_weight_error  s    
r   c               	   C   s   ddl m}  t|  }|tt tt dd}|tt ddl m} t	| dd}|tt t	t
 dd}|tt ddgddgddgddgg}dd	dd
g}tt dd}tjtdd ||| W 5 Q R X d S )Nr   )RandomForestClassifierrC   rT   )RandomForestRegressorr"   r   r    barr   zworse than randomr   )sklearn.ensembler   r   r?   r*   rO   r   rF   r   r   r   r   r   r   )r   r@   r   ZX_failZy_failr,   r,   r-   test_estimator  s    
r   c               	   C   s@   d} t dddd}tjt| d |tjtj W 5 Q R X d S )Nz+Sample weights have reached infinite values   g      7@rC   )ri   Zlearning_raterB   r   )r   r   warnsUserWarningr?   rX   rZ   rY   )r   r@   r,   r,   r-   test_sample_weights_infinite1  s    r   c                  C   s<  G dd dt } tjddddd\}}t|}t||dd	\}}}}tttt	t
fD ]}||}||}	t| d
dddd||}
t| d
dddd||}|
|	}||}t|| |
|	}||}t|| |
|	}||}t|| |
|	}||}t|| |
|	|}|||}t|| |
|	}||}t||D ]\}}t|| qZ|
|	}||}t||D ]\}}t|| q|
|	}||}t||D ]\}}t|| q|
|	|}|||}t||D ]\}}t|| qdd |
jD }tdd |D sTtqTd S )Nc                       s"   e Zd ZdZd fdd	Z  ZS )z-test_sparse_classification.<locals>.CustomSVCz8SVC variant that records the nature of the training set.Nc                    s    t  j|||d t|| _| S z<Modification on fit caries data type for later verification.rj   superr?   r   
data_type_r)   r*   r   rk   r   r,   r-   r?   >  s    
z1test_sparse_classification.<locals>.CustomSVC.fit)Nr/   r0   r1   __doc__r?   __classcell__r,   r,   r   r-   	CustomSVC;  s   r   r         *   )	n_classesr   r   r#   r   r"   T)ZprobabilityrC   )ry   r#   rB   c                 S   s   g | ]
}|j qS r,   r   rV   ir,   r,   r-   rn     s     z.test_sparse_classification.<locals>.<listcomp>c                 S   s   g | ]}|t kp|tkqS r,   r   r   rV   tr,   r,   r-   rn     s     )r   r   Zmake_multilabel_classificationr3   Zravelr   r   r   r   r   r   r   r?   rG   r   rM   r   Zpredict_log_probar.   r[   staged_decision_functionziprt   ru   rv   r\   r:   r;   )r   r*   r   X_trainX_testy_trainy_testsparse_formatX_train_sparseX_test_sparsesparse_classifierdense_classifiersparse_resultsdense_results
sprase_res	dense_restypesr,   r,   r-   test_sparse_classification8  sz    	   

  


















r   c                  C   s
  G dd dt } tjddddd\}}t||dd	\}}}}tttttfD ]}||}||}	t	|  dd

||}
t	|  dd

|| }}|
|	}||}t|| |
|	}||}t||D ]\}}t|| qdd |
jD }tdd |D sJtqJd S )Nc                       s"   e Zd ZdZd fdd	Z  ZS )z)test_sparse_regression.<locals>.CustomSVRz8SVR variant that records the nature of the training set.Nc                    s    t  j|||d t|| _| S r   r   r   r   r,   r-   r?     s    
z-test_sparse_regression.<locals>.CustomSVR.fit)Nr   r,   r,   r   r-   	CustomSVR  s   r   r   2   r   r   )r   r   	n_targetsr#   r   r"   r{   c                 S   s   g | ]
}|j qS r,   r   r   r,   r,   r-   rn     s     z*test_sparse_regression.<locals>.<listcomp>c                 S   s   g | ]}|t kp|tkqS r,   r   r   r,   r,   r-   rn     s     )r   r   Zmake_regressionr   r   r   r   r   r   r   r?   rG   r   rt   r   r\   r:   r;   )r   r*   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   r,   r-   test_sparse_regression  sD    	   
    




r   c                  C   sF   G dd dt } t|  dd}|tt t|jt|jksBtdS )z
    AdaBoostRegressor should work without sample_weights in the base estimator
    The random weighted sampling is done internally in the _boost method in
    AdaBoostRegressor.
    c                   @   s   e Zd Zdd Zdd ZdS )z=test_sample_weight_adaboost_regressor.<locals>.DummyEstimatorc                 S   s   d S r&   r,   )r)   r*   r   r,   r,   r-   r?     s    zAtest_sample_weight_adaboost_regressor.<locals>.DummyEstimator.fitc                 S   s   t |jd S )Nr   )r3   Zzerosr'   r(   r,   r,   r-   rG     s    zEtest_sample_weight_adaboost_regressor.<locals>.DummyEstimator.predictN)r/   r0   r1   r?   rG   r,   r,   r,   r-   DummyEstimator  s   r   r!   ri   N)	r   r   r?   r*   rO   r>   Zestimator_weights_Zestimator_errors_r;   )r   r|   r,   r,   r-   %test_sample_weight_adaboost_regressor  s    r   c                  C   s   t jd} | ddd}| ddgd}| d}ttdd}||| || |	| t
t }||| || dS )zX
    Check that the AdaBoost estimators can work with n-dimensional
    data matrix
    r   3   r!   r   Zmost_frequent)ZstrategyN)r3   rq   rr   Zrandnchoicer   r
   r?   rG   r.   r   r   )rw   r*   Zycyrr|   r,   r,   r-   test_multidimensional_X  s    



r   c              	   C   s\   t jt j }}tt }t|| d}d|jj}t	j
t|d ||| W 5 Q R X d S )N)ry   rB   z {} doesn't support sample_weightr   )rX   rZ   rY   r   r
   r   formatr   r/   r   r   r   r?   )rB   r*   r   ry   r@   err_msgr,   r,   r-   -test_adaboostclassifier_without_sample_weight  s    
r   c            
      C   sR  t jd} t jdddd}d| d | |jd d  }|d	d
}|d	  d9  < d|d	< tt d
dd}t	|}t	|}|
|| |
|d d	 |d d	  t |}d|d	< |j
|||d ||d d	 |d d	 }||d d	 |d d	 }||d d	 |d d	 }	||k s,t||	k s:t|t|	ksNtd S )Nr   r   d     )numg?r$   g-C6?r   r   rf   i'  ry   ri   r#   rj   )r3   rq   rr   ZlinspaceZrandr'   Zreshaper   r   r	   r?   r8   r[   r;   r   Zapprox)
rw   r*   r   Zregr_no_outlierZregr_with_weightZregr_with_outlierrk   Zscore_with_outlierZscore_no_outlierZscore_with_weightr,   r,   r-   $test_adaboostregressor_sample_weight  s0       
r   c                 C   sZ   t tjddddi\}}}}t| dd}||| ttj||dd|	| d S )NT)Z
return_X_yr#   r   rE   r   r%   )
r   r   Zload_digitsr   r?   r   r3   r<   r.   rG   )rB   r   r   r   r   modelr,   r,   r-    test_adaboost_consistent_predict  s    
 r   zmodel, X, yc              	   C   sD   t |}d|d< d}tjt|d | j|||d W 5 Q R X d S )Nir   z1Negative values in data passed to `sample_weight`r   rj   )r3   r8   r   r   r   r?   )r   r*   r   rk   r   r,   r,   r-   #test_adaboost_negative_weight_error-  s
    
r   c                  C   s~   t jd} | jdd}| jddgdd}t |d }tdd	d
}t|dd	d}|j|||d t 	|j
 dksztdS )zCheck that we don't create NaN feature importance with numerically
    instable inputs.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/20320
    r   )r   rf   rg   r   r   r   gtDS 'T	rf      )	max_depthr#      r   rj   N)r3   rq   rr   normalr   r8   r   r   r?   isnanr   r6   r;   )rw   r*   r   rk   treeZ	ada_modelr,   r,   r-   Ftest_adaboost_numerically_stable_feature_importance_with_small_weights=  s    r   zAdaBoost, Estimatorc              	   C   s^   t ddgddgg}t ddg}| | d}d}tjt|d ||| W 5 Q R X d S 	Nr   r   r!      r   )Zbase_estimatorzV`base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.r   r3   r4   r   r   FutureWarningr?   )AdaBoostZ	Estimatorr*   r   r   warn_msgr,   r,   r-   'test_base_estimator_argument_deprecatedO  s    r   r   c              	   C   s\   t ddgddgg}t ddg}| d d}d}tjt|d ||| W 5 Q R X d S r   r   r   r*   r   r   r   r,   r,   r-   ,test_base_estimator_argument_deprecated_noned  s    
r   c              	   C   s^   t ddgddgg}t ddg}|  }||| d}tjt|d |j W 5 Q R X d S )Nr   r   r!   r   r   zoAttribute `base_estimator_` was deprecated in version 1.2 and will be removed in 1.4. Use `estimator_` instead.r   )r3   r4   r?   r   r   r   Zbase_estimator_r   r,   r,   r-   'test_base_estimator_property_deprecatedy  s    r   c               	   C   s4   t t } tjtdd | jdd W 5 Q R X dS )zCheck that setting base_estimator parameters works.

    During the deprecation cycle setting "base_estimator__*" params should
    work.

    Non-regression test for https://github.com/scikit-learn/scikit-learn/issues/25470
    zParameter 'base_estimator' ofr   r   )Zbase_estimator__max_depthN)r   r   r   r   r   
set_paramsrQ   r,   r,   r-   4test_deprecated_base_estimator_parameters_can_be_set  s    
r   c                 C   s(  d}t j|d|d\}}td|| d||}||}t|jddddd | d	krxtt	|dd
|d  hksxt
||D ]D}t|jddddd | d	krtt	|dd
|d  hkst
q|jdd|| ||}t|jddddd ||D ]}t|jddddd qdS )zCheck that the decision function respects the symmetric constraint for weak
    learners.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/26520
    r!   r   )r   Zn_clusters_per_classr#   )ri   r#   rB   r%   r   g:0yE>)ZatolrC   r   r   r   N)r   r   r   r?   rM   r   r6   r]   r3   rJ   r;   r   r   )rB   Zglobal_random_seedr   r*   r   r@   Zy_scorer,   r,   r-   test_adaboost_decision_function  s6      
   
"$
r   )[r   r   numpyr3   r   Zscipy.sparser   r   r   r   r   Zsklearnr   Zsklearn.baser   r	   Zsklearn.dummyr
   r   r   r   r   Z!sklearn.ensemble._weight_boostingr   Zsklearn.linear_modelr   Zsklearn.model_selectionr   r   Zsklearn.svmr   r   Zsklearn.treer   r   Zsklearn.utilsr   Zsklearn.utils._mockingr   Zsklearn.utils._testingr   r   r   r   rq   rr   rw   r*   rF   rO   rH   rI   rP   Z	load_irisrX   ZpermutationrY   rh   permrZ   Zload_diabetesrc   r=   rA   markZparametrizerN   rR   ra   re   rx   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   r,   r,   r-   <module>   s   (

  	

"

-]0
	&

	


