Ë
    êÿæi¥  ã                   óR  — d dl Z d dlZd dlZ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 d dlmZ d dlmZmZ d„ Z ejB                  jE                  dddg«      ejB                  jE                  dg d¢«      d„ «       «       Z#d„ Z$ejB                  jE                  dddg«      d„ «       Z%d„ Z&d„ Z'ejB                  jE                  d e'«       «      d„ «       Z(d„ Z)d„ Z*ejB                  jW                  ed¬«      d„ «       Z,y)é    N)Úassert_array_equal)Úconfig_contextÚ
get_config)Úmake_column_transformer)Ú	load_iris)ÚRandomForestClassifier)ÚConvergenceWarning)ÚGridSearchCV)Úmake_pipeline)ÚStandardScaler)Ú_IS_WASM)ÚParallelÚdelayedc                  ó   — t        «       d   S )NÚworking_memory)r   © ó    úv/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/sklearn/utils/tests/test_parallel.pyÚget_working_memoryr      s   € Ü‹<Ð(Ñ)Ð)r   Ún_jobsé   é   Úbackend©ÚlokyÚ	threadingÚmultiprocessingc                 ó¬   — t        d¬«      5   t        | |¬«      d„ t        d«      D «       «      }d d d «       t        dgdz  «       y # 1 sw Y   ŒxY w)Né{   )r   ©r   r   c              3   óD   K  — | ]  } t        t        «      «       –— Œ y ­w©N)r   r   ©Ú.0Ú_s     r   Ú	<genexpr>z>test_configuration_passes_through_to_joblib.<locals>.<genexpr>!   s    è ø€ ð ;
Ù3;¨aÐ'ŒGÔ&Ó'×)±8ùó   ‚ r   )r   r   Úranger   )r   r   Úresultss      r   Ú+test_configuration_passes_through_to_joblibr*      sP   € ô
 
 sÖ	+Ø:”( &°'Ô:ñ ;
Ü38¸´8ó;
ó 
ˆ÷ 
,ô
 �w  ¨¡	Õ*÷ 
,Ð	+ús   �$A
Á
Ac                  ó   — d} t        j                  t        | ¬«      5 } t        «       d„ t	        d«      D «       «       ddd«       t        «      dk(  sJ ‚d} t        j                  t        | ¬«      5 } t        j                  «       d„ t	        d«      D «       «       ddd«       t        |«      dk(  sJ ‚y# 1 sw Y   ŒzxY w# 1 sw Y   Œ&xY w)zHInformative warnings should be raised when mixing sklearn and joblib APIzA`sklearn.utils.parallel.Parallel` needs to be used in conjunction©Úmatchc              3   ón   K  — | ]-  } t        j                  t        j                  «      d «      –— Œ/ y­w©r   N)Újoblibr   ÚtimeÚsleepr#   s     r   r&   z1test_parallel_delayed_warnings.<locals>.<genexpr>.   s&   è ø€ ÐD¹)°QÐ-”6—>‘>¤$§*¡*Ó-¨a×0¹)ùs   ‚35é
   Nzw`sklearn.utils.parallel.delayed` should be used with `sklearn.utils.parallel.Parallel` to make it possible to propagatec              3   óZ   K  — | ]#  } t        t        j                  «      d «      –— Œ% y­wr/   ©r   r1   r2   r#   s     r   r&   z1test_parallel_delayed_warnings.<locals>.<genexpr>8   s"   è ø€ ÐD¹)°QÐ-œ'¤$§*¡*Ó-¨a×0¹)ùó   ‚)+)ÚpytestÚwarnsÚUserWarningr   r(   Úlenr0   )Úwarn_msgÚrecordss     r   Útest_parallel_delayed_warningsr=   (   s¨   € ð S€HÜ	�‰”k¨Õ	2°gØŒ‹
ÑD¼%À¼)ÓDÔD÷ 
3äˆw‹<˜2ÒÐÐð
	Mð ô 
�‰”k¨Õ	2°gØŒ�‰ÓÑD¼%À¼)ÓDÔD÷ 
3äˆw‹<˜2ÒÐÑ÷ 
3Ð	2ú÷ 
3Ð	2ús   ž!B8Á4+CÂ8CÃCc           
      óŒ  ‡— t        j                  d«      Št        d¬«      } G ˆfd„dt        «      }t	        ddgfd| ¬	«      }d
g d¢i}t        t        | |«       t        d| ¬«      «      |d| d¬«      }t        j                  t        d¬«      5  |j                  |j                  |j                  «       ddd«       t        d¬«      5  |j                  |j                  |j                  «       ddd«       t        j                  |j                   d   «      j#                  «       rJ ‚y# 1 sw Y   ŒwxY w# 1 sw Y   ŒHxY w)zªCheck that we properly dispatch the configuration in parallel processing.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/25239
    ÚpandasT)Úas_framec                   ó2   •‡ — e Zd Zdˆ ˆfd„	Zdˆ ˆfd„	Zˆ xZS )úCtest_dispatch_config_parallel.<locals>.TransformerRequiredDataFramec                 ó^   •— t        |‰j                  «      sJ d«       ‚t        ‰| �  ||«      S ©NúX should be a DataFrame)Ú
isinstanceÚ	DataFrameÚsuperÚfit©ÚselfÚXÚyÚ	__class__Úpds      €€r   rI   zGtest_dispatch_config_parallel.<locals>.TransformerRequiredDataFrame.fitG   s.   ø€ Ü˜a §¡Ô.ÐIÐ0IÓIÐ.Ü‘7‘;˜q !Ó$Ð$r   c                 ó^   •— t        |‰j                  «      sJ d«       ‚t        ‰| �  ||«      S rD   )rF   rG   rH   Ú	transformrJ   s      €€r   rQ   zMtest_dispatch_config_parallel.<locals>.TransformerRequiredDataFrame.transformK   s/   ø€ Ü˜a §¡Ô.ÐIÐ0IÓIÐ.Ü‘7Ñ$ Q¨Ó*Ð*r   r"   )Ú__name__Ú
__module__Ú__qualname__rI   rQ   Ú__classcell__)rN   rO   s   @€r   ÚTransformerRequiredDataFramerB   F   s   ù„ ö	%÷	+ò 	+r   rV   Údropr   Úpassthrough)Ú	remainderr   Ú!randomforestclassifier__max_depth)r   r   é   é   )Ún_estimatorsr   Úraise)Úcvr   Úerror_scorerE   r,   N)Útransform_outputÚmean_test_score)r7   Úimportorskipr   r   r   r
   r   r   ÚraisesÚAssertionErrorrI   ÚdataÚtargetr   ÚnpÚisnanÚcv_results_Úany)r   ÚirisrV   ÚdropperÚ
param_gridÚ	search_cvrO   s         @r   Útest_dispatch_config_parallelrp   <   s  ø€ ô 
×	Ñ	˜XÓ	&€BÜ˜dÔ#€Dö+¤~ô +ô &Ø	�!�ˆØØô€Gð
 6²yÐA€JÜÜØÙ(Ó*Ü"°¸&ÔAó	
ð
 	ØØØô
€Iô 
�‰”~Ð-FÖ	GØ�‰�d—i‘i §¡Ô-÷ 
Hô 
¨Ö	2à�‰�d—i‘i §¡Ô-÷ 
3ô �x‰x˜	×-Ñ-Ð.?Ñ@ÓA×EÑEÔGÐGÐGÐG÷ 
HÐ	Gú÷ 
3Ð	2ús   Â'D.Ã'D:Ä.D7Ä:Ec                  ó8   — t        j                  dt        «       y )NúConvergence warning)ÚwarningsÚwarnr	   r   r   r   Úraise_warningru   l   s   € Ü‡M�MÐ'Ô);Õ<r   c               #   óÞ   K  — ddg} g d¢}t        j                  | |«      D ]H  \  }}|dk(  r8|dk(  r3t        j                  ||t        j                  j
                  ¬«      –— ŒC||f–— ŒJ y ­w)Nr   r   r   r   )Úmarks)Ú	itertoolsÚproductr7   ÚparamÚmarkÚthread_unsafe)Ún_jobs_valuesÚbackend_valuesr   r   s       r   Ú"_yield_n_jobs_backend_combinationsr   p   sg   è ø€ Ø˜�F€MÚ=€NÜ$×,Ñ,¨]¸NÖK‰ˆ�Ø�QŠ;˜7 fÒ,ô —,‘,˜v w´f·k±k×6OÑ6OÔPÓPà˜'�/Ó!ñ Lùs   ‚A+A-zn_jobs, backendc                 ó.  — t        j                  «       5  t        j                  dt        ¬«       t	        j
                  t        «      5   t        | |¬«      d„ t        d«      D «       «       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z$Check warning propagates to the job.Úerror©Úcategoryr    c              3   óD   K  — | ]  } t        t        «      «       –— Œ y ­wr"   )r   ru   r#   s     r   r&   z1test_filter_warning_propagates.<locals>.<genexpr>„   s   è ø€ ð 5Ù2:¨QÐ&”œÓ&×(±(ùr'   r   N)rs   Úcatch_warningsÚsimplefilterr	   r7   rd   r   r(   r    s     r   Útest_filter_warning_propagatesr‡   }   so   € ô 
×	 Ñ	 Õ	"Ü×Ñ˜gÔ0BÕCä�]‰]Ô-Õ.Ø4ŒH˜F¨GÔ4ñ 5Ü27¸´(ó5ô ÷ /÷ 
#Ð	"÷ /Ð.ú÷ 
#Ð	"ús#   •5BÁ
$A?Á.BÁ?B	ÂBÂBc                  óV   — t        t        dd «      } | � | «       S t        j                  S )NÚ_get_filters)Úgetattrrs   Úfilters)Úfilters_funcs    r   Úget_warning_filtersr�   ‰   s*   € ô œ8 ^°TÓ:€LØ)Ð5‰<‹>ÐK¼8×;KÑ;KÐKr   c                  óF  ‡— t        j                  «       5  t        j                  dt        ¬«       t	        «       Šddt        ddf‰v sJ ‚ t        dd¬«      d„ t        d«      D «       «      } ˆfd	„}| D ]  } ||«       |‰«      k(  rŒJ ‚ 	 ddd«       y# 1 sw Y   yxY w)
zGCheck that warnings filters are set correctly in the threading backend.r�   r‚   Nr   r   r   r    c              3   óD   K  — | ]  } t        t        «      «       –— Œ y ­wr"   )r   r�   r#   s     r   r&   z0test_check_warnings_threading.<locals>.<genexpr>œ   s!   è ø€ ð M
Ù4<¨qÐ(ŒGÔ'Ó(×*±Hùr'   c                 óÂ   •— ‰D �����cg c]B  \  }}}}}|||dt        |«      vst        |t        j                  «      s|n|j                  |f‘ŒD c}}}}}S c c}}}}}w )NÚ__main__)ÚstrrF   ÚreÚPatternÚpattern)r‹   ÚactionÚmessageÚtype_ÚmoduleÚlinenoÚmain_warning_filterss         €r   Únormalize_main_modulez<test_check_warnings_threading.<locals>.normalize_main_module    sr   ø€ ñ ?S÷ñ ?SÑ:�F˜G U¨F°Fð ØØà!¬¨V«Ñ4Ü% f¬b¯j©jÔ9ñ ð  Ÿ™Øò	ð ?Sõð ùö s   ŠAA)rs   r…   r†   r	   r�   r   r(   )Úall_worker_warning_filtersrœ   Úworker_warning_filterr›   s      @r   Útest_check_warnings_threadingrŸ   “   s®   ø€ ä	×	 Ñ	 Õ	"Ü×Ñ˜gÔ0BÕCä2Ó4Ðà˜Ô1°4¸Ð;Ð?SÑSÐSÐSà%L¤X°QÀÔ%Lñ M
Ü49¸!´HóM
ó &
Ð"ô	ó$ &@Ð!Ù(Ø%óá&Ð';Ó<ó=ð =ð =ñ &@÷; 
#×	"Ñ	"ús   –A3BÂ
BÂB z)Pyodide always use the sequential backend)Úreasonc                  ó,  — t        j                  «       5  t        j                  dt        ¬«        t	        dd¬«      d„ t        d«      D «       «        t        j                  dd¬«      d„ t        d«      D «       «       d d d «       y # 1 sw Y   y xY w)	Nr�   r‚   r   r   r    c              3   óZ   K  — | ]#  } t        t        j                  «      d «      –— Œ% y­wr/   r5   r#   s     r   r&   zRtest_filter_warning_propagates_no_side_effect_with_loky_backend.<locals>.<genexpr>½   s"   è ø€ Ð*UÉ9ÀaÐ+>¬7´4·:±:Ó+>¸q×+AÉ9ùr6   r3   c              3   óx   K  — | ]2  } t        j                  t        j                  «      d t        «      –— Œ4 y­w)rr   N)r0   r   rs   rt   r	   r#   s     r   r&   zRtest_filter_warning_propagates_no_side_effect_with_loky_backend.<locals>.<genexpr>Â   s0   è ø€ ð 2
á�ð *ŒF�N‰Nœ8Ÿ=™=Ó)Ð*?ÔAS×TÙùs   ‚8:)rs   r…   r†   r	   r   r(   r0   r   r   r   Ú?test_filter_warning_propagates_no_side_effect_with_loky_backendr¤   ¸   so   € ä	×	 Ñ	 Õ	"Ü×Ñ˜gÔ0BÕCà*Œ˜ 6Ô*Ñ*UÌ5ÐQSÌ9Ó*UÔUð
 	2Œ�‰˜q¨&Ô1ñ 2
ä˜2”Yó2
ô 	
÷ 
#×	"Ñ	"ús   •A,B
Â
B)-rx   r“   r1   rs   r0   Únumpyrh   r7   Únumpy.testingr   Úsklearnr   r   Úsklearn.composer   Úsklearn.datasetsr   Úsklearn.ensembler   Úsklearn.exceptionsr	   Úsklearn.model_selectionr
   Úsklearn.pipeliner   Úsklearn.preprocessingr   Úsklearn.utils.fixesr   Úsklearn.utils.parallelr   r   r   r{   Úparametrizer*   r=   rp   ru   r   r‡   r�   rŸ   Úxfailr¤   r   r   r   Ú<module>r³      s   ðÛ Û 	Û Û ã Û Û Ý ,ç .Ý 3Ý &Ý 3Ý 1Ý 0Ý *Ý 0Ý (ß 4ò*ð ‡�×Ñ˜ A q 6Ó*Ø‡�×Ñ˜Ò$LÓMñ+ó Nó +ð+òð( ‡�×Ñ˜ A q 6Ó*ñ,Hó +ð,Hò^=ò
"ð ‡�×ÑÐ*Ñ,NÓ,PÓQñó RðòLò"=ðJ ‡�×Ñ�8Ð$OÐÓPñ
ó Qñ
r   