a
    h                     @   s   d dl Z d dlZd dlmZ d dlZd dlZd dlmZmZmZ d dl	m
Z
 d dlmZmZ dd Zdd	 Zd
d Zdd Zejdg ddd Zejje
dddd Zdd Zdd ZdS )    N)ThreadPoolExecutor)config_context
get_config
set_config)_IS_WASM)Paralleldelayedc                   C   sz  t  ddddddddddd
ks$J tdd t  d	 du s@J tdd4 t  ddddddddddd
kspJ W d    n1 s0    Y  t  d	 du sJ tdd$ td d" t  d	 du sJ W d    n1 s0    Y  t  d	 du sJ tdd t  d	 du sJ td dB t  d	 du s<J tdd t  d	 du sZJ W d    n1 sp0    Y  t  d	 du sJ W d    n1 s0    Y  t  d	 du sJ W d    n1 s0    Y  t  ddddddddddd
ksJ tt td W d    n1 s20    Y  tt tdd
  W d    n1 sl0    Y  d S )NFi   TZdiagram   default)
assume_finiteZworking_memoryZprint_changed_onlydisplayarray_api_dispatchZpairwise_dist_chunk_sizeZenable_cython_pairwise_distZtransform_outputZenable_metadata_routingZskip_parameter_validationr   r   Zdo_something_else)r   r   r   pytestraises	TypeError	__enter__ r   r   U/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/tests/test_config.pytest_config_context   sp    
*0
444(r   c                   C   s   t  d du sJ zFtdd( t  d du s2J t W d    n1 sL0    Y  W n tyj   Y n0 t  d du s~J d S )Nr   FTr   )r   r   
ValueErrorr   r   r   r   test_config_context_exceptionY   s    (r   c                   C   s   t  d du sJ td d t  d du s.J tdd t  d du sJJ td d t  d du sfJ tdd t  d du sJ tt tdd W d    n1 s0    Y  d S )Nr   Fr   Tr   )r   r   r   r   r   r   r   r   r   test_set_configd   s    



r   c                 C   sB   t | d$ t| t d W  d   S 1 s40    Y  dS )zAReturn the value of assume_finite after waiting `sleep_duration`.r   r   N)r   timesleepr   )r   Zsleep_durationr   r   r   set_assume_finitet   s    
r   backend)Zlokymultiprocessing	threadingc                 C   sD   g d}g d}t | dddd t||D }|g dks@J dS )ao  Test that the global config is threadsafe with all joblib backends.
    Two jobs are spawned and sets assume_finite to two different values.
    When the job with a duration 0.1s completes, the assume_finite value
    should be the same as the value passed to the function. In other words,
    it is not influenced by the other job setting assume_finite to True.
    FTFT皙?皙?r"   r#      )r   Zn_jobsc                 s   s    | ]\}}t t||V  qd S )N)r   r   ).0r   Z	sleep_durr   r   r   	<genexpr>   s   z0test_config_threadsafe_joblib.<locals>.<genexpr>N)r   zip)r   assume_finitessleep_durationsitemsr   r   r   test_config_threadsafe_joblib{   s    r+   zcannot start threads)reasonc                  C   sf   g d} g d}t dd(}dd |t| |D }W d   n1 sH0    Y  |g dksbJ dS )zUses threads directly to test that the global config does not change
    between threads. Same test as `test_config_threadsafe_joblib` but with
    `ThreadPoolExecutor`.r    r!   r$   )max_workersc                 S   s   g | ]}|qS r   r   )r%   outputr   r   r   
<listcomp>   s   z*test_config_threadsafe.<locals>.<listcomp>N)r   mapr   )r(   r)   er*   r   r   r   test_config_threadsafe   s    $r2   c              	      s   t j  fdd}| t d| tjtdd: tdd W d   n1 sP0    Y  W d   n1 sn0    Y  tjtdd tdd W d   n1 s0    Y  dS )	z=Check error is raised when array_api_compat is not installed.c                    s"   | dkrt  | g|R i |S NZarray_api_compat)ImportErrornameargskwargsZorig_importr   r   mocked_import   s    z;test_config_array_api_dispatch_error.<locals>.mocked_import
__import__zarray_api_compat is requiredmatchTr   N)builtinsr;   setattrr   r   r4   r   r   Zmonkeypatchr:   r   r9   r   $test_config_array_api_dispatch_error   s    <rB   c              	      s   t j  fdd}| t d| | tjjjdd tjt	dd: t
dd	 W d
   n1 sd0    Y  W d
   n1 s0    Y  tjt	dd tdd	 W d
   n1 s0    Y  d
S )z!Check error when NumPy is too oldc                    s$   | dkrt  S  | g|R i |S r3   )objectr5   r9   r   r   r:      s    zAtest_config_array_api_dispatch_error_numpy.<locals>.mocked_importr;   __version__z1.20zNumPy must be 1.21 or newerr<   Tr>   N)r?   r;   r@   sklearnutilsZ
_array_apinumpyr   r   r4   r   r   rA   r   r9   r   *test_config_array_api_dispatch_error_numpy   s    <rH   )r?   r   concurrent.futuresr   r   rE   r   r   r   Zsklearn.utils.fixesr   Zsklearn.utils.parallelr   r   r   r   r   r   markZparametrizer+   Zxfailr2   rB   rH   r   r   r   r   <module>   s"   L

