a
    hB                     @   s   d dl Z d dlZd dlZd dl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mZ dd Zejdddgejdg ddd Zdd Zejdddgdd ZdS )    N)assert_array_equal)config_context
get_config)make_column_transformer)	load_iris)RandomForestClassifier)GridSearchCV)make_pipeline)StandardScaler)Paralleldelayedc                   C   s
   t  d S )Nworking_memory)r    r   r   ]/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/utils/tests/test_parallel.pyget_working_memory   s    r   n_jobs      backend)Zloky	threadingmultiprocessingc                 C   s\   t dd. t| |ddd tdD }W d    n1 s>0    Y  t|dgd  d S )N{   )r   )r   r   c                 s   s   | ]}t t V  qd S )N)r   r   .0_r   r   r   	<genexpr>   s   z>test_configuration_passes_through_to_joblib.<locals>.<genexpr>r   )r   r   ranger   )r   r   resultsr   r   r   +test_configuration_passes_through_to_joblib   s
    &r   c                  C   s   d} t jt| d(}t dd tdD  W d   n1 s@0    Y  t|dksZJ d} t jt| d*}t dd tdD  W d   n1 s0    Y  t|dksJ dS )	zHInformative warnings should be raised when mixing sklearn and joblib APIzA`sklearn.utils.parallel.Parallel` needs to be used in conjunctionmatchc                 s   s   | ]}t tjd V  qdS r   N)joblibr   timesleepr   r   r   r   r   )       z1test_parallel_delayed_warnings.<locals>.<genexpr>
   Nzw`sklearn.utils.parallel.delayed` should be used with `sklearn.utils.parallel.Parallel` to make it possible to propagatec                 s   s   | ]}t tjd V  qdS r!   )r   r#   r$   r   r   r   r   r   3   r%   )pytestZwarnsUserWarningr   r   lenr"   )Zwarn_msgrecordsr   r   r   test_parallel_delayed_warnings#   s    68r+   c                    s   t d tdd}G  fdddt}tddgfd| d	}d
g di}tt|| td| d|d| dd}t jt	dd  |
|j|j W d   n1 s0    Y  tdd  |
|j|j W d   n1 s0    Y  t|jd  rJ dS )zCheck that we properly dispatch the configuration in parallel processing.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/25239
    ZpandasT)Zas_framec                       s0   e Zd Zd fdd	Zd fdd	Z  ZS )zCtest_dispatch_config_parallel.<locals>.TransformerRequiredDataFrameNc                    s"   t |jsJ dt ||S NX should be a DataFrame)
isinstance	DataFramesuperfitselfXy	__class__pdr   r   r1   B   s    zGtest_dispatch_config_parallel.<locals>.TransformerRequiredDataFrame.fitc                    s"   t |jsJ dt ||S r,   )r.   r/   r0   	transformr2   r6   r   r   r9   F   s    zMtest_dispatch_config_parallel.<locals>.TransformerRequiredDataFrame.transform)N)N)__name__
__module____qualname__r1   r9   __classcell__r   r8   )r7   r   TransformerRequiredDataFrameA   s   r?   Zdropr   Zpassthrough)	remainderr   Z!randomforestclassifier__max_depth)r   r         )Zn_estimatorsr   raise)Zcvr   Zerror_scorer-   r   N)Ztransform_outputZmean_test_score)r'   Zimportorskipr   r
   r   r   r	   r   ZraisesAssertionErrorr1   datatargetr   npisnanZcv_results_any)r   Zirisr?   ZdropperZ
param_gridZ	search_cvr   r>   r   test_dispatch_config_parallel7   s2    

	
..rJ   )r#   r"   numpyrG   r'   Znumpy.testingr   Zsklearnr   r   Zsklearn.composer   Zsklearn.datasetsr   Zsklearn.ensembler   Zsklearn.model_selectionr   Zsklearn.pipeliner	   Zsklearn.preprocessingr
   Zsklearn.utils.parallelr   r   r   markZparametrizer   r+   rJ   r   r   r   r   <module>   s&   