
    Mpjw                     D   S r SSKrSSKrSSKrSSKrSSKrSSKrSSKJrJ	r	  SSK
Jr  SSKJr  S rS r\R                   " \SS	9\R                   " \S
S	9/r\R$                  R'                  S\5      S 5       r\R$                  R'                  S\5      S 5       rS rS rg)zCommon pickle round-trip tests for callbacks.

These tests guard the contract that callbacks (and estimators they are attached to)
must be picklable, and that an estimator pickled after a successful fit can be
unpickled in a fresh Python interpreter.
    N)ProgressBarScoringMonitor)MaxIterEstimator)make_regressionc                  B    [         R                  " S5        [        5       $ )Nrich)pytestimportorskipr        ^/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/sklearn/callback/tests/test_pickle.py_pbr      s    
=r   c                      [        SS9$ )Nr2scoring)r   r   r   r   _smr      s    $''r   r   )idr   factoryc                     [        5       R                  U " 5       5      n[        R                  " [        R                  " U5      5      n[        U5      [        U5      L d   e[        UR                  5      S:X  d   eg)zJAn estimator with the callback registered but not yet fitted is picklable.   N)r   set_callbackspickleloadsdumpstypelen_skl_callbacks)r   	estimatorrestoreds      r   5test_estimator_with_callback_pickle_roundtrip_pre_fitr!   '   s_     !"00;I||FLL34H>T)_,,,x&&'1,,,r   c                    U " 5       n[        SS9R                  U5      nUR                  5         [        R                  " [        R
                  " U5      5      n[        U5      [        U5      L d   e[        UR                  5      S:X  d   eg)zBAn estimator with the callback registered and fitted is picklable.   max_iterr   N)	r   r   fitr   r   r   r   r   r   )r   callbackr   r    s       r   6test_estimator_with_callback_pickle_roundtrip_post_fitr(   0   so     yH !,::8DIMMO||FLL34H>T)_,,,x&&'1,,,r   c                    [         R                  " S5        [        SSSS9u  p[        SS9n[	        SS	9R                  [        5       U5      nUR                  XS
9  U R                  5       n[        R                  " SUR                  5      (       d   e[        R                  " SUR                  5      (       d   eUR                  SS9n[        U5      S:X  d   e[        R                  " [        R                   " U5      5      nUR                  XS
9  U R                  5       n[        R                  " SUR                  5      (       d   e[        R                  " SUR                  5      (       d   eUR"                  S   R                  SS9n[        U5      S:X  d   eUS   R$                  US   R$                  :X  d   eg)zAn estimator with callbacks survives an in-process pickle round-trip.

It also supports re-fitting after being unpickled and the callbacks accumulate new
data from the re-fit.
r         r   	n_samples
n_featuresrandom_stater   r   r#   r$   XyMaxIterEstimator - fit100%allselectr   N)r	   r
   r   r   r   r   r   r&   
readouterrresearchoutget_logsr   r   r   r   r   data)	capsysr1   r2   smr   capturedoriginal_logsr    restored_logss	            r   1test_callbacks_refit_after_pickle_in_same_processrC   ;   sz    RAAFDA		%B !,::;="MIMMAM  "H99.====99Whll++++KKuK-M}"""||FLL34HLL1L  "H99.====99Whll++++++A.77u7EM}"""  M!$4$9$9999r   c                    [         R                  " S5        [        SSSS9u  p#[        SS9n[	        SS9R                  [        5       U5      nUR                  X#S	9  UR                  5       n[        R                  " S
UR                  5      (       d   e[        R                  " SUR                  5      (       d   eUR                  SS9n[        U5      S:X  d   eU S-  n[        US5       n	[        R                   " XY5        SSS5        ["        R$                  " S['        U5      < SUS   R(                   S35      n
[*        R,                  " [.        R0                  SU
/SSS9nUR2                  R5                  5       n[        R                  " S
U5      (       d   e[        R                  " SU5      (       d   eg! , (       d  f       N= f)zAn estimator with callbacks survives unpickling in a fresh interpreter.

It also supports re-fitting after being unpickled and the callbacks accumulate new
data from the re-fit.
r      r#   r   r,   r   r   r$   r0   r3   r4   r5   r6   r   zest.pklwbNz
        import pickle
        from sklearn.callback import ScoringMonitor
        from sklearn.datasets import make_regression

        with open(a*  , "rb") as f:
            est = pickle.load(f)

        X, y = make_regression(n_samples=20, n_features=3, random_state=1)
        est.fit(X=X, y=y)

        restored_logs = est._skl_callbacks[1].get_logs(select="all")
        assert len(restored_logs) == 2
        assert restored_logs[0].data == z	
        z-cTx   )capture_outputtimeout)r	   r
   r   r   r   r   r   r&   r8   r9   r:   r;   r<   r   openr   dumptextwrapdedentstrr=   
subprocessrunsys
executablestdoutdecode)tmp_pathr>   r1   r2   r?   r   r@   rA   pkl_pathfload_scriptresultrS   s                r   0test_callbacks_refit_after_load_in_fresh_processrZ   \   s    RAAFDA		%B !,::;="MIMMAM  "H99.====99Whll++++KKuK-M}""")#H	h	I! 
 //
 x=# $) *7q)9)>)>(? @		K$ ^^	{+D#F ]]!!#F99.777799Wf%%%%7 
	s   .F??
G)__doc__r   r9   rO   rQ   rL   r	   sklearn.callbackr   r   sklearn.callback.tests._utilsr   sklearn.datasetsr   r   r   paramCALLBACK_FACTORIESmarkparametrizer!   r(   rC   rZ   r   r   r   <module>rc      s     	  
   8 : ,
(
 LL'
LL)*  $67- 8- $67- 8-:B1&r   