a
    �ù»j|  ã                   @   sÊ  d dl Z d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
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 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l"m#Z#m$Z$ d dl%m&Z& d dl'm(Z( ej)dd„ ƒZ*ej)dd„ ƒZ+ej, -deƒ dfeƒ dfe!e$ƒ eƒ ƒdfe!e$ƒ eƒ ƒdfe$ƒ dfeƒ dfeƒ dfee$ƒ d gfe#ƒ dgfƒdfg¡ej, -dg d¢¡dd„ ƒƒZ.edd�dd„ ƒZ/dd„ Z0d d!„ Z1d"d#„ Z2d$d%„ Z3d&d'„ Z4dS )(é    N)Úassert_array_equal)Úconfig_context)ÚBaseEstimatorÚcloneÚis_classifierÚis_clustererÚis_outlier_detectorÚis_regressor)ÚKMeans)Úmake_column_transformer)Úmake_classificationÚmake_regression)ÚNotFittedErrorÚUnsetMetadataPassedError)ÚFrozenEstimator)ÚLinearRegressionÚLogisticRegression)ÚLocalOutlierFactor)Úmake_pipeline)ÚRobustScalerÚStandardScaler)Úset_random_state)Úcheck_is_fittedc                   C   s   t ƒ S ©N)r   © r   r   úFE:\soccer\ml_env\Lib\site-packages\sklearn/frozen/tests/test_frozen.pyÚregression_dataset    s    r   c                   C   s   t ƒ S r   )r   r   r   r   r   Úclassification_dataset%   s    r   zestimator, dataseté   Úmethod)ÚpredictZpredict_probaZpredict_log_probaZdecision_functionZ	transformc                 C   s¸   |  |¡\}}t| ƒ |  ||¡ t| ƒ}| dggdg¡ t| |ƒrdtt| |ƒ|ƒt||ƒ|ƒƒ t| ƒt|ƒksxJ ‚t| ƒt|ƒksŒJ ‚t	| ƒt	|ƒks J ‚t
| ƒt
|ƒks´J ‚dS )zžTest that frozen.fit doesn't do anything, and that all other methods are
    exposed by the frozen estimator and return the same values as the estimator.
    r   N)Zgetfixturevaluer   Úfitr   Úhasattrr   Úgetattrr   r	   r   r   )Ú	estimatorZdatasetÚrequestr   ÚXÚyÚfrozenr   r   r   Útest_frozen_methods*   s    
r)   T)Zenable_metadata_routingc                 C   s
  G dd„ dt ƒ}| \}}t|ddd�jdd�jdd�ƒ}|j||dd� t|ƒ}|j|dd� |j|dd� |d jdd� tjt	t
 d	¡d
�� |j|dd� W d  ƒ n1 s´0    Y  |d jdd� t t¡� |j|dd� W d  ƒ n1 sü0    Y  dS )z8Test that metadata routing works with frozen estimators.c                   @   s*   e Zd Zddd„Zd	dd„Zd
dd„ZdS )z6test_frozen_metadata_routing.<locals>.ConsumesMetadataNc                 S   s   || _ || _d S r   ©Úon_fitÚ
on_predict)Úselfr+   r,   r   r   r   Ú__init__]   s    z?test_frozen_metadata_routing.<locals>.ConsumesMetadata.__init__c                 S   s   | j r|d usJ ‚d| _| S ©NT)r+   Zfitted_)r-   r&   r'   Úmetadatar   r   r   r!   a   s    z:test_frozen_metadata_routing.<locals>.ConsumesMetadata.fitc                 S   s    | j r|d usJ ‚t t|ƒ¡S r   )r,   ÚnpZonesÚlen)r-   r&   r0   r   r   r   r    g   s    z>test_frozen_metadata_routing.<locals>.ConsumesMetadata.predict)NN)N)N)Ú__name__Ú
__module__Ú__qualname__r.   r!   r    r   r   r   r   ÚConsumesMetadata\   s   

r6   Tr*   )r0   ÚtestZconsumesmetadataFz]Pipeline.predict got unexpected argument(s) {'metadata'}, which are not routed to any object.©ÚmatchN)r   r   Zset_fit_requestZset_predict_requestr!   r   r    ÚpytestÚraisesÚ	TypeErrorÚreÚescaper   )r   r6   r&   r'   Zpipeliner(   r   r   r   Útest_frozen_metadata_routingX   s0    ÿþÿÿþ,r?   c                 C   s¬   G dd„ dt ƒ}| \}}|ƒ  ||¡}t|ƒ}t t¡� | ||¡ W d  ƒ n1 sZ0    Y  t t¡� | ||¡ W d  ƒ n1 s�0    Y  |jdks¨J ‚dS )zATest that calling fit_transform and fit_predict doesn't call fit.c                   @   s(   e Zd Zdd„ Zddd„Zd	dd„ZdS )
z%test_composite_fit.<locals>.Estimatorc                 S   s0   z|  j d7  _ W n ty*   d| _ Y n0 | S )Nr   )Ú_fit_counterÚAttributeError©r-   r&   r'   r   r   r   r!   ‹   s
    z)test_composite_fit.<locals>.Estimator.fitNc                 S   s   d S r   r   rB   r   r   r   Úfit_transform’   s    z3test_composite_fit.<locals>.Estimator.fit_transformc                 S   s   d S r   r   rB   r   r   r   Úfit_predict–   s    z1test_composite_fit.<locals>.Estimator.fit_predict)N)N)r3   r4   r5   r!   rC   rD   r   r   r   r   Ú	EstimatorŠ   s   
rE   Nr   )	r   r!   r   r:   r;   rA   rD   rC   r@   )r   rE   r&   r'   Úestr(   r   r   r   Útest_composite_fit‡   s    **rG   c                 C   s8   | \}}t ƒ  ||¡}t|ƒ}t|ƒ}|j|u s4J ‚dS )z<Test that cloning a frozen estimator keeps the frozen state.N)r   r!   r   r   r$   )r   r&   r'   r$   r(   Zclonedr   r   r   Útest_clone_frozen¦   s
    rH   c                 C   sj   | \}}t ƒ }t|ƒ}t t¡� t|ƒ W d  ƒ n1 s>0    Y  t ƒ  ||¡}t|ƒ}t|ƒ dS )z5Test that check_is_fitted works on frozen estimators.N)r   r   r:   r;   r   r   r!   )r   r&   r'   r$   r(   r   r   r   Útest_check_is_fitted¯   s    &rI   c                  C   sn   G dd„ dt ƒ} | ƒ }t|ƒ}| ¡ }| ¡ }|jdu s<J ‚|jdu sJJ ‚|jjdu sZJ ‚|jjdu sjJ ‚dS )zjTest that frozen estimators have the same tags as the original estimator
    except for the skip_test tag.c                       s   e Zd Z‡ fdd„Z‡  ZS )z#test_frozen_tags.<locals>.Estimatorc                    s   t ƒ  ¡ }d|j_|S r/   )ÚsuperÚ__sklearn_tags__Ú
input_tagsÚcategorical)r-   Útags©Ú	__class__r   r   rK   Â   s    
z4test_frozen_tags.<locals>.Estimator.__sklearn_tags__)r3   r4   r5   rK   Ú__classcell__r   r   rO   r   rE   Á   s   rE   TFN)r   r   rK   Z
_skip_testrL   rM   )rE   r$   r(   Zfrozen_tagsZestimator_tagsr   r   r   Útest_frozen_tags½   s    rR   c                  C   s†   t ƒ } t| ƒ}tjtdd�� |jdd� W d  ƒ n1 s>0    Y  | ¡ d| iks\J ‚tƒ }|j|d� | ¡ d|iks‚J ‚dS )z?Test that FrozenEstimator only exposes the estimator parameter.z&You cannot set parameters of the innerr8   r   )Zestimator__CNr$   )r$   )r   r   r:   r;   Ú
ValueErrorZ
set_paramsÚ
get_paramsr   )rF   r(   Z	other_estr   r   r   Útest_frozen_paramsÓ   s    *rU   )5r=   Únumpyr1   r:   Znumpy.testingr   Zsklearnr   Zsklearn.baser   r   r   r   r   r	   Zsklearn.clusterr
   Zsklearn.composer   Zsklearn.datasetsr   r   Zsklearn.exceptionsr   r   Zsklearn.frozenr   Zsklearn.linear_modelr   r   Zsklearn.neighborsr   Zsklearn.pipeliner   Zsklearn.preprocessingr   r   Zsklearn.utils._testingr   Zsklearn.utils.validationr   Zfixturer   r   ÚmarkZparametrizer)   r?   rG   rH   rI   rR   rU   r   r   r   r   Ú<module>   sf    

þ

þûõþþ
.	