Ë
    ÜÍ:jw  ã                   óP  — d 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m	Z	 ddl
mZ ddlmZ d„ Zd„ Z ej                   ed¬	«       ej                   ed
¬	«      gZej$                  j'                  de«      d„ «       Zej$                  j'                  de«      d„ «       Zd„ Zd„ Zy)zûCommon 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                  ó@   — t        j                  d«       t        «       S )NÚrich)ÚpytestÚimportorskipr   © ó    úw/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/sklearn/callback/tests/test_pickle.pyÚ_pbr      s   € Ü
×Ñ˜ÔÜ‹=Ðr   c                  ó   — t        d¬«      S )NÚr2©Úscoring)r   r   r   r   Ú_smr      s   € Ü $Ô'Ð'r   r   )Úidr   Úfactoryc                 óô   — t        «       j                   | «       «      }t        j                  t        j                  |«      «      }t        |«      t        |«      u sJ ‚t        |j                  «      dk(  sJ ‚y)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Ü�|‰|œFŸL™L¨Ó3Ó4€HÜ�‹>œT )›_Ñ,Ð,Ð,Üˆx×&Ñ&Ó'¨1Ò,Ð,Ñ,r   c                 ó  —  | «       }t        d¬«      j                  |«      }|j                  «        t        j                  t        j
                  |«      «      }t        |«      t        |«      u sJ ‚t        |j                  «      dk(  sJ ‚y)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   € ñ ‹y€HÜ ¨!Ô,×:Ñ:¸8ÓD€IØ‡M�M„OÜ�|‰|œFŸL™L¨Ó3Ó4€HÜ�‹>œT )›_Ñ,Ð,Ð,Üˆx×&Ñ&Ó'¨1Ò,Ð,Ñ,r   c                 ó€  — t        j                  d«       t        ddd¬«      \  }}t        d¬«      }t	        d¬	«      j                  t        «       |«      }|j                  ||¬
«       | j                  «       }t        j                  d|j                  «      sJ ‚t        j                  d|j                  «      sJ ‚|j                  d¬«      }t        |«      dk(  sJ ‚t        j                  t        j                   |«      «      }|j                  ||¬
«       | j                  «       }t        j                  d|j                  «      sJ ‚t        j                  d|j                  «      sJ ‚|j"                  d   j                  d¬«      }t        |«      dk(  sJ ‚|d   j$                  |d   j$                  k(  sJ ‚y)z¼An 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   ;   st  € ô ×Ñ˜Ôä R°AÀAÔF�D€A€qä	 Ô	%€BÜ ¨!Ô,×:Ñ:¼;»=È"ÓM€IØ‡M�M�A˜€MÔà× Ñ Ó"€HÜ�9‰9Ð.°·±Ô=Ð=Ð=Ü�9‰9�W˜hŸl™lÔ+Ð+Ð+à—K‘K u�KÓ-€MÜˆ}Ó Ò"Ð"Ð"ä�|‰|œFŸL™L¨Ó3Ó4€HØ‡L�L�1˜€LÔà× Ñ Ó"€HÜ�9‰9Ð.°·±Ô=Ð=Ð=Ü�9‰9�W˜hŸl™lÔ+Ð+Ð+à×+Ñ+¨AÑ.×7Ñ7¸uÐ7ÓE€MÜˆ}Ó Ò"Ð"Ð"Ø˜Ñ× Ñ  M°!Ñ$4×$9Ñ$9Ò9Ð9Ñ9r   c                 ó„  — t        j                  d«       t        ddd¬«      \  }}t        d¬«      }t	        d¬«      j                  t        «       |«      }|j                  ||¬	«       |j                  «       }t        j                  d
|j                  «      sJ ‚t        j                  d|j                  «      sJ ‚|j                  d¬«      }t        |«      dk(  sJ ‚| dz  }t        |d«      5 }	t        j                   ||	«       ddd«       t#        j$                  dt'        |«      ›d|d   j(                  › d�«      }
t+        j,                  t.        j0                  d|
gdd¬«      }|j2                  j5                  «       }t        j                  d
|«      sJ ‚t        j                  d|«      sJ ‚y# 1 sw Y   Œ¯xY w)z¾An 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-cTéx   )Ú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•  € ô ×Ñ˜Ôä R°AÀAÔF�D€A€qä	 Ô	%€BÜ ¨!Ô,×:Ñ:¼;»=È"ÓM€IØ‡M�M�A˜€MÔà× Ñ Ó"€HÜ�9‰9Ð.°·±Ô=Ð=Ð=Ü�9‰9�W˜hŸl™lÔ+Ð+Ð+à—K‘K u�KÓ-€MÜˆ}Ó Ò"Ð"Ð"à˜)Ñ#€HÜ	ˆh˜Ó	ð " Ü�‰�I˜qÔ!÷"ô —/‘/ðô
 �x“=Ð#ð $)ð *7°qÑ)9×)>Ñ)>Ð(?ð @	ð	ó€Kô$ �^‰^Ü	�‰˜˜{Ð+¸DÈ#ô€Fð �]‰]×!Ñ!Ó#€FÜ�9‰9Ð.°Ô7Ð7Ð7Ü�9‰9�W˜fÔ%Ð%Ñ%÷7"ð "ús   Ã1F6Æ6F?)Ú__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Ý :Ý ,òò
(ð
 €F‡L�L�˜Ô'Ø€F‡L�L�Ð)Ô*ðÐ ð ‡�×Ñ˜Ð$6Ó7ñ-ó 8ð-ð ‡�×Ñ˜Ð$6Ó7ñ-ó 8ð-ò:óB1&r   