a
    h                     @   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   \/var/www/html/assistant/venv/lib/python3.9/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sJ t	| t	|ksJ t
| t
|ksJ dS )zTest 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 s0    Y  |d jdd tt |j|dd W d   n1 s0    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 s0    Y  |jdksJ 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sJ 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    




.	