§
    qŠtjÐ  ã                   ó‚  — d dl Z d dlZd dlm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 d dlmZ d dlmZmZ d dlmZmZ ej                             d	d
dg¦  «        ej                             dddg¦  «        ej                             deeeg¦  «        ej                             dg d¢¦  «        d„ ¦   «         ¦   «         ¦   «         ¦   «         Zd„ Zd„ Zej        j        ej                             dddg¦  «        d„ ¦   «         ¦   «         Zej                             dddg¦  «        d„ ¦   «         Zd„ Zej                             d e ed¬¦  «        d¬¦  «         e
 ed¬¦  «        dddg¦  «         e
dd ed¬¦  «        dg¦  «         e
ddd ed¬¦  «        g¦  «        g¦  «        d „ ¦   «         Z d!„ Z!dS )"é    N)Úmock)Úclone)ÚProgressBar)ÚHeterogeneousMetaEstimatorÚMaxIterEstimatorÚMetaEstimatorÚNoSubtaskEstimatorÚWhileEstimator)Úcheck_rich_support)Úassert_allcloseÚ'assert_run_python_script_without_output)ÚParallelÚdelayedÚn_jobsé   é   ÚpreferÚthreadsÚ	processesÚInnerEstimatorÚmax_propagation_depth)r   r   Nc                 óž  — t          j        d¦  «         d}d} |¦   «         }t          |||| |¬¦  «        }|                     t	          |¬¦  «        ¦  «         |                     ¦   «          |                     ¦   «         }	t          j        d|	j	        ¦  «        sJ ‚t          |¦  «        D ]!}
t          j        d|
› �|	j	        ¦  «        sJ ‚Œ"|�|d	k    r>t          |¦  «        D ].}
t          j        d
|j        j        › d|
› �|	j	        ¦  «        sJ ‚Œ/t          j        d|	j	        ¦  «        sJ ‚t          j        d|	j	        ¦  «        rJ ‚dS )z;Check the output of the progress bars and their completion.Úrichr   é   )Ún_outerÚn_innerr   r   )r   zMetaEstimator - fitzMetaEstimator - outer #Nr   zMetaEstimator - inner \| z - fit #ú100%z\b[0-9]{1,2}%)ÚpytestÚimportorskipr   Úset_callbacksr   ÚfitÚ
readouterrÚreÚsearchÚoutÚrangeÚ	__class__Ú__name__)r   r   r   r   Úcapsysr   r   ÚestÚmeta_estÚcapturedÚis              úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sklearn/callback/tests/test_progressbar.pyÚtest_progressbarr/      sˆ  € õ Ô˜ÑÔÐà€GØ€Gà
ˆ.Ñ
Ô
€CÝØ�W g°fÀVðñ ô €Hð ×Ò�;Ð=RÐSÑSÔSÑTÔTÐTØ‡L‚L�N„N€Nà× Ò Ñ"Ô"€HåŒ9Ð+¨X¬\Ñ:Ô:Ð:Ð:Ð:Ý�7‰^Œ^ð Gð GˆÝŒyÐ7°AÐ7Ð7¸¼ÑFÔFÐFÐFÐFÐFð Ð$Ð(=ÀÒ(AÐ(AÝ�w‘”ð 	ð 	ˆAÝ”9ØP¨S¬]Ô-CÐPÐPÈQÐPÐPØ”ñô ð ð ð ð õ Œ9�W˜hœlÑ+Ô+Ð+Ð+Ð+ÝŒyÐ)¨8¬<Ñ8Ô8Ð8Ð8Ð8Ð8Ð8ó    c                  óú   — 	 t          d¦  «         t          j        d¦  «         dS # t          $ rI d} t          j        t          | ¬¦  «        5  t          ¦   «          ddd¦  «         Y dS # 1 swxY w Y   Y dS w xY w)zDCheck that we raise an informative error when rich is not installed.Ú$test_progressbar_requires_rich_errorz,This test requires rich to not be installed.zProgressbar requires rich)ÚmatchN)r   r   ÚskipÚImportErrorÚraisesr   )Úerr_msgs    r.   r2   r2   C   sÙ   € ðÝÐAÑBÔBÐBÝŒÐBÑCÔCÐCÐCÐCøÝð ð ð Ø-ˆÝŒ]�;¨gÐ6Ñ6Ô6ð 	ð 	Ý‰MŒMˆMð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ðøøøs3   ‚#' §'A:ÁA+ÁA:Á+A/	Á/A:Á2A/	Á3A:Á9A:c                  óð   — t          j        d¦  «         t          ¦   «         } t          ¦   «                              | ¦  «                             ¦   «         }t          |¦  «        }|j        d         | u sJ ‚dS )zºCloning an estimator with a ProgressBar preserves the callback reference.

    clone copies _skl_callbacks by reference so that a single callback instance can
    track every clone.
    r   r   N)r   r   r   r   r    r!   r   Ú_skl_callbacks)Úpbr*   Úcloneds      r.   Útest_clone_after_fitr<   N   sm   € õ Ô˜ÑÔÐÝ	‰Œ€BÝ
Ñ
Ô
×
*Ò
*¨2Ñ
.Ô
.×
2Ò
2Ñ
4Ô
4€CÝ�3‰ZŒZ€FØÔ  Ô# rÐ)Ð)Ð)Ð)Ð)Ð)r0   ÚbackendÚ	threadingÚlokyc                 ó  ‡ ‡— t          j        d¦  «         d„ Šˆ ˆfd„}t          ¦   «         }d} |t          ¦   «                              |¦  «        |¬¦  «         ddlm}m} |j        i k    sJ ‚|i k    sJ ‚|i k    sJ ‚dS )	zäSanity check for ProgressBar within function not supporting callbacks.

    It's hard to check the output from sub-processes so this test only checks that it
    doesn't crash and that there are no threads leftover running.
    r   c                 óH   — t          | ¦  «                             ¦   «          d S ©N)r   r!   )Ú	estimators    r.   Úclone_and_fitz;test_progressbar_no_callback_support.<locals>.clone_and_fitf   s"   € ÝˆiÑÔ×ÒÑÔÐÐÐr0   c                 ór   •‡ —  t          d‰¬¦  «        ˆˆ fd„t          |¦  «        D ¦   «         ¦  «         d S )Nr   )r   r=   c              3   óH   •K  — | ]} t          ‰¦  «        ‰¦  «        V — Œd S rB   )r   )Ú.0Ú_rD   rC   s     €€r.   ú	<genexpr>zEtest_progressbar_no_callback_support.<locals>.func.<locals>.<genexpr>j   sG   øè è € ð ,
ð ,
Ø23Ð"�G�MÑ"Ô" 9Ñ-Ô-ð,
ð ,
ð ,
ð ,
ð ,
ð ,
r0   )r   r&   )rC   Ún_fitsr=   rD   s   ` €€r.   Úfuncz2test_progressbar_no_callback_support.<locals>.funci   s`   øø€ Ø+�˜ 7Ð+Ñ+Ô+ð ,
ð ,
ð ,
ð ,
ð ,
Ý7<¸V±}´}ð,
ñ ,
ô ,
ñ 	
ô 	
ð 	
ð 	
ð 	
r0   é   )rJ   r   )Ú_run_monitorsÚ_run_queuesN)	r   r   r   r   r    Úsklearn.callback._progressbarrM   rN   Ú_listener_handles)r=   rK   ÚprogressbarrJ   rM   rN   rD   s   `     @r.   Ú$test_progressbar_no_callback_supportrR   \   sÔ   øø€ õ Ô˜ÑÔÐðð ð ð
ð 
ð 
ð 
ð 
ð 
õ
 ‘-”-€KØ€FØ€DÕ	Ñ	Ô	×	)Ò	)¨+Ñ	6Ô	6¸vÐFÑFÔFÐFàHÐHÐHÐHÐHÐHÐHÐHð Ô(¨BÒ.Ð.Ð.Ð.Ø˜"ÒÐÐÐØ˜BÒÐÐÐÐÐr0   c                 ó†   — t          j        d¦  «         d| › d�}d}t          t          j        |¦  «        |d¬¦  «         dS )zHCheck that ProgressBar does not trigger spawn errors outside `__main__`.r   zí
    from sklearn.callback import ProgressBar
    from sklearn.callback.tests._utils import MaxIterEstimator, MetaEstimator

    est = MaxIterEstimator()
    meta_est = MetaEstimator(
        est, n_outer=2, n_inner=1, n_jobs=2, prefer='zI'
    )
    meta_est.set_callbacks(ProgressBar())
    meta_est.fit()
    z/An attempt has been made to start a new processéx   )ÚpatternÚtimeoutN)r   r   r   ÚtextwrapÚdedent)r   ÚcoderU   s      r.   Ú$test_progressbar_outside_main_modulerZ   {   sj   € õ Ô˜ÑÔÐð
ð 7=ð
ð 
ð 
€Dð @€GÝ+ÝŒ˜ÑÔ w¸ðñ ô ð ð ð r0   c                  ó¼  ‡‡‡— t          j        d¦  «         ddlm}  g Š| j        Šˆˆfd„}dŠt
          j                             | d|¦  «        5  t          ‰¬¦  «         	                    t          ¦   «         ¦  «                             ¦   «          ddd¦  «         n# 1 swxY w Y   ˆfd	„t          d
‰d
z   ¦  «        D ¦   «         dgz   }t          ‰|¦  «         dS )zLCheck that the completion of a bottom-level progressbar increments linearly.r   r   ©ÚRichProgressMonitorc                 ó^   •—  ‰| |¦  «         ‰                      | j        j        ¦  «         d S rB   ©ÚappendÚroot_rich_taskÚprogress)ÚselfÚ	task_infoÚorig_on_task_endÚrecordss     €€r.   Úrecording_on_task_endz7test_progress_during_fit.<locals>.recording_on_task_end™   s4   ø€ ØÐ˜˜yÑ)Ô)Ð)Ø�Š�tÔ*Ô3Ñ4Ô4Ð4Ð4Ð4r0   é   Ú_on_task_end©Úmax_iterNc                 ó   •— g | ]}|‰z  ‘ŒS © rm   )rG   r-   rk   s     €r.   ú
<listcomp>z,test_progress_during_fit.<locals>.<listcomp>¢   s   ø€ Ð=Ð=Ð= ��H‘Ð=Ð=Ð=r0   r   ç      ð?)r   r   rO   r]   ri   r   ÚpatchÚobjectr   r    r   r!   r&   r   )r]   rg   Úexpectedrk   re   rf   s      @@@r.   Útest_progress_during_fitrs   ‘   sR  øøø€ å
Ô˜ÑÔÐØAÐAÐAÐAÐAÐAà€GØ*Ô7Ðð5ð 5ð 5ð 5ð 5ð 5ð €HÝ	Œ×	Ò	Ð.°Ð@UÑ	VÔ	Vð Oð OÝ (Ð+Ñ+Ô+×9Ò9½+¹-¼-ÑHÔH×LÒLÑNÔNÐNðOð Oð Oñ Oô Oð Oð Oð Oð Oð Oð Oøøøð Oð Oð Oð Oð >Ð=Ð=Ð=¥e¨A¨x¸!©|Ñ&<Ô&<Ð=Ñ=Ô=ÀÀÑE€HÝ�G˜XÑ&Ô&Ð&Ð&Ð&s   ÁABÂB"Â%B"Úmeta_estimatoré   rj   rL   )r   c                 ó†  ‡‡‡— t          j        d¦  «         ddlm} g Š|j        Šˆfd„Šˆˆˆfd„}t
          j                             |d|¦  «        5  |                      t          ¦   «         ¦  «        }| 
                    ¦   «          ddd¦  «         n# 1 swxY w Y   d„ ‰D ¦   «         }g d	¢}t          ||¦  «         dS )
zECheck the recursive computation of the progress of nested estimators.r   r   r\   c                 ó  •— | j         sd}n_t          d„ | j                              ¦   «         D ¦   «         ¦  «        | j        z  }| j                              ¦   «         D ]} ‰|¦  «         Œt	          | j        |¦  «         d S )Nro   c              3   ó$   K  — | ]}|j         V — Œd S rB   )rb   )rG   Úcs     r.   rI   zOtest_progress_during_fit_composition.<locals>.check_progress.<locals>.<genexpr>½   s$   è è € ÐFÐF¨!˜1œ:ÐFÐFÐFÐFÐFÐFr0   )ÚchildrenÚsumÚvaluesÚtotalr   rb   )Útaskrr   ÚchildÚcheck_progresss      €r.   r€   z<test_progress_during_fit_composition.<locals>.check_progress·   s�   ø€ ð Œ}ð 	&ØˆHˆHåÐFÐF¨t¬}×/CÒ/CÑ/EÔ/EÐFÑFÔFÑFÔFÈÌÑSˆHØœ×-Ò-Ñ/Ô/ð &ð &�Ø�˜uÑ%Ô%Ð%Ð%Ý˜œ xÑ0Ô0Ð0Ð0Ð0r0   c                 ó’   •— |d         } ‰| |¦  «         ‰                      || j        j        g¦  «          ‰| j        ¦  «         d S )NÚpathr_   )rc   rd   r‚   r€   re   rf   s      €€€r.   rg   zCtest_progress_during_fit_composition.<locals>.recording_on_task_endÂ   sV   ø€ Ø˜Ô ˆØÐ˜˜yÑ)Ô)Ð)Ø�Š˜˜dÔ1Ô:Ð;Ñ<Ô<Ð<Øˆ�tÔ*Ñ+Ô+Ð+Ð+Ð+r0   ri   Nc                 ó>   — g | ]\  }}t          |¦  «        d k    ¯|‘ŒS )r   )Úlen)rG   r‚   rb   s      r.   rn   z8test_progress_during_fit_composition.<locals>.<listcomp>Î   s(   € ÐVÐVÐV©.¨$°ÅsÈ4ÁyÄyÐTUÂ~À~˜XÀ~À~À~r0   )g      Ð?g      à?g      è?ro   )r   r   rO   r]   ri   r   rp   rq   r    r   r!   r   )	rt   r]   rg   ÚmetaÚend_of_outer_subtasksÚexpected_progressr€   re   rf   s	         @@@r.   Ú$test_progress_during_fit_compositionrˆ   ¦   sF  øøø€ õ Ô˜ÑÔÐØAÐAÐAÐAÐAÐAà€GØ*Ô7Ðð	1ð 	1ð 	1ð 	1ð 	1ð,ð ,ð ,ð ,ð ,ð ,ð ,õ 
Œ×	Ò	Ð.°Ð@UÑ	VÔ	Vð ð Ø×+Ò+­K©M¬MÑ:Ô:ˆØ�Š‰
Œ
ˆ
ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð WÐV¸GÐVÑVÔVÐØ.Ð.Ð.ÐÝÐ)Ð+<Ñ=Ô=Ð=Ð=Ð=s   Á6BÂBÂBc                 óD  — t          j        d¦  «         t          ¦   «                              t	          ¦   «         ¦  «                             ¦   «          |                      ¦   «         }t          j        d|j	        ¦  «        sJ ‚t          j        d|j	        ¦  «        sJ ‚dS )zICheck that a progress bar is displayed for an estimator without subtasks.r   zNoSubtaskEstimator - fitr   N)
r   r   r	   r    r   r!   r"   r#   r$   r%   )r)   r,   s     r.   Útest_estimator_without_subtasksrŠ   Ó   s‰   € å
Ô˜ÑÔÐåÑÔ×&Ò&¥{¡}¤}Ñ5Ô5×9Ò9Ñ;Ô;Ð;Ø× Ò Ñ"Ô"€HÝŒ9Ð0°(´,Ñ?Ô?Ð?Ð?Ð?ÝŒ9�W˜hœlÑ+Ô+Ð+Ð+Ð+Ð+Ð+r0   )"r#   rW   Úunittestr   r   Úsklearn.baser   Úsklearn.callbackr   Úsklearn.callback.tests._utilsr   r   r   r	   r
   Ú$sklearn.utils._optional_dependenciesr   Úsklearn.utils._testingr   r   Úsklearn.utils.parallelr   r   ÚmarkÚparametrizer/   r2   r<   Úthread_unsaferR   rZ   rs   rˆ   rŠ   rm   r0   r.   ú<module>r•      s%  ðð 
€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð à €€€à Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð ð ð ð ð ð ð DÐ CÐ CÐ CÐ CÐ Cðð ð ð ð ð ð ð ð 5Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4ð „×Ò˜ A q 6Ñ*Ô*Ø„×Ò˜ I¨{Ð#;Ñ<Ô<Ø„×ÒØÐ'¨Ð9KÐLñô ð „×ÒÐ0°,°,°,Ñ?Ô?ð9ð 9ñ @Ô?ñô ñ =Ô<ñ +Ô*ð9ðDð ð ð
*ð 
*ð 
*ð „ÔØ„×Ò˜ [°&Ð$9Ñ:Ô:ðð ñ ;Ô:ñ Ôðð: „×Ò˜ I¨{Ð#;Ñ<Ô<ðð ñ =Ô<ðð*'ð 'ð 'ð* „×ÒØàˆÐ&Ð&°Ð2Ñ2Ô2¸AÐ>Ñ>Ô>Ø"Ð"Ð$4Ð$4¸aÐ$@Ñ$@Ô$@À$ÈÈdÐ#SÑTÔTØ"Ð" D¨$Ð0@Ð0@È!Ð0LÑ0LÔ0LÈdÐ#SÑTÔTØ"Ð" D¨$°Ð6FÐ6FÐPQÐ6RÑ6RÔ6RÐ#SÑTÔTð	ñô ð!>ð !>ñô ð!>ðH,ð ,ð ,ð ,ð ,r0   