Ë
    ÿÍ:jp6  ã                   óf  — d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
m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 d dlmZmZ d dlmZmZ d dlmZmZmZ d d	lmZ d dlmZmZmZ d d
lm Z  ddl!m"Z" ddlm#Z# ejH                  jK                  ejH                  jL                  «        G d„ d«      Z'y)é    N)ÚPath)ÚIterableÚOptionalÚCallableÚ	GeneratorÚMappingÚUnionÚDict)ÚExperimentalWarning)Ú
BasePruner)ÚBaseSamplerÚ
TPESampler)ÚTrialÚ
FixedTrial)Ú
RDBStorageÚJournalStorageÚJournalFileStorage)Útqdm)Ú	bayes_mvsé   )ÚPipeline)ÚPipelineInputc                   óX  — e Zd ZdZ	 	 	 	 	 	 ddedee   dee   deeee	f      deeee
f      dee   d	efd
„Zedefd„«       Zedefd„«       Zedefd„«       Z	 ddee   deeef   deegef   fd„Z	 	 	 ddee   dededeeef   def
d„Z	 	 ddee   dedeeef   deeddf   fd„Zy)Ú	Optimizerac  Pipeline optimizer

    Parameters
    ----------
    pipeline : `Pipeline`
        Pipeline.
    db : `Path`, optional
        Path to trial database on disk. Use ".sqlite" extension for SQLite
        backend, and ".journal" for Journal backend (prefered for parallel
        optimization).
    study_name : `str`, optional
        Name of study. In case it already exists, study will continue from
        there. # TODO -- generate this automatically
    sampler : `str` or sampler instance, optional
        Algorithm for value suggestion. Must be one of "RandomSampler" or
        "TPESampler", or a sampler instance. Defaults to "TPESampler".
    pruner : `str` or pruner instance, optional
        Algorithm for early pruning of trials. Must be one of "MedianPruner" or
        "SuccessiveHalvingPruner", or a pruner instance.
        Defaults to no pruning.
    seed : `int`, optional
        Seed value for the random number generator of the sampler.
        Defaults to no seed.
    average_case : `bool`, optional
        Optimize for average case (default).
        Set to False to optimize for worst case.
    NÚpipelineÚdbÚ
study_nameÚsamplerÚprunerÚseedÚaverage_casec           	      ó>  — || _         || _        |€d | _        n£t        | j                  «      j                  }|dk(  r3t        j                  d«       t        d| j                  › �«      | _        nL|dk(  rt        d| j                  › �«      | _        n)|dk(  r$t        t        | j                  › «      «      | _        || _
        t        |t        «      r|| _        nKt        |t        «      r(	  t        t         j"                  |«      |¬«      | _        n|€t)        |¬«      | _        t        |t*        «      r|| _        n=t        |t        «      r&	  t        t         j.                  |«      «       | _        nd | _        t!        j0                  | j                  d	| j                  | j                  | j,                  | j                   j3                  «       ¬
«      | _        || _        y # t$        $ r}	d}
t'        |
«      ‚d }	~	ww xY w# t$        $ r}	d}
t'        |
«      ‚d }	~	ww xY w)Nz.dbzHStorage with '.db' extension has been deprecated. Use '.sqlite' instead.z
sqlite:///z.sqlitez.journal)r    z8`sampler` must be one of "RandomSampler" or "TPESampler"zC`pruner` must be one of "MedianPruner" or "SuccessiveHalvingPruner"T)r   Úload_if_existsÚstorager   r   Ú	direction)r   r   Ústorage_r   ÚsuffixÚwarningsÚwarnr   r   r   r   Ú
isinstancer   r   ÚstrÚgetattrÚoptunaÚsamplersÚAttributeErrorÚ
ValueErrorr   r   r   ÚprunersÚcreate_studyÚget_directionÚstudy_r!   )Úselfr   r   r   r   r   r    r!   Ú	extensionÚeÚmsgs              úp/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/pyannote/pipeline/optimizer.pyÚ__init__zOptimizer.__init__S   sÁ  € ð !ˆŒàˆŒØˆ:Ø ˆD�Mä˜TŸW™W›×,Ñ,ˆIØ˜EÒ!Ü—‘Ø^ôô !+¨Z¸¿¹°yÐ+AÓ B�•Ø˜iÒ'Ü *¨Z¸¿¹°yÐ+AÓ B�•Ø˜jÒ(Ü .Ô/AÀTÇWÁWÀIÓ/OÓ P�”Ø$ˆŒä�gœ{Ô+Ø"ˆD�LÜ˜¤Ô%ð&Ø@œw¤v§¡¸Ó@ÀdÔK�•ð ˆ_Ü%¨4Ô0ˆDŒLä�fœjÔ)Ø ˆD�KÜ˜¤Ô$ð&Ø=œg¤f§n¡n°fÓ=Ó?�•ð
 ˆDŒKô ×)Ñ)Ø—‘ØØ—M‘MØ—L‘LØ—;‘;Ø—m‘m×1Ñ1Ó3ô
ˆŒð )ˆÕøô= "ò &ØP�Ü  “oÐ%ûð&ûô "ò &Ø[�Ü  “oÐ%ûð&ús0   Ã,&G# Å$H Ç#	G>Ç,G9Ç9G>È	HÈ
HÈHÚreturnc                 ó¼   — 	 | j                   j                  }|S # t        $ r8 | j                  j	                  «       dk(  rdnd}|t
        j                  z  }Y |S w xY w)zReturn best loss so farÚminimizer   éÿÿÿÿ)r4   Ú
best_valueÚ	Exceptionr   r3   ÚnpÚinf)r5   r?   r%   s      r9   Ú	best_losszOptimizer.best_loss”   s_   € ð	,ØŸ™×/Ñ/ˆJð Ðøô ò 	,Ø"&§-¡-×"=Ñ"=Ó"?À:Ò"M™QÐSUˆIØ"¤R§V¡VÑ+‰JØÐð	,ús   ‚ š=AÁAc                 óx   — t        | j                  j                  «      }| j                  j	                  |¬«      S )zReturn best parameters so far©Útrial)r   r4   Úbest_paramsr   Ú
parameters)r5   rF   s     r9   rG   zOptimizer.best_paramsž   s0   € ô ˜4Ÿ;™;×2Ñ2Ó3ˆØ�}‰}×'Ñ'¨eÐ'Ó4Ð4ó    c                 óL   — | j                   j                  | j                  «      S )z8Return pipeline instantiated with best parameters so far)r   ÚinstantiaterG   )r5   s    r9   Úbest_pipelinezOptimizer.best_pipeline¤   s   € ð �}‰}×(Ñ(¨×)9Ñ)9Ó:Ð:rI   ÚinputsÚshow_progressc                 óv   ‡ ‡‡— t        ‰«      Št        ‰«      }‰dk(  rddddœŠdt        dt        fˆˆ ˆfd„}|S )	aÐ  
        Create objective function used by optuna

        Parameters
        ----------
        inputs : `iterable`
            List of inputs to process.
        show_progress : bool or dict
            Show within-trial progress bar using tqdm progress bar.
            Can also be a **kwarg dict passed to tqdm.

        Returns
        -------
        objective : `callable`
            Callable that takes trial as input and returns correspond loss.
        TzCurrent trialFr   )ÚdescÚleaveÚpositionrF   r;   c                 óì  •— 	 ‰j                   j                  «       }g }g }‰j                   j                  ‰j                   j	                  | ¬«      «      }‰dk7  r't        ddt        ‰«      i‰¤Ž}|j                  d«       t        ‰«      D �]f  \  }}	t        j                  «       }
t        |	t        «      r|	j                  di «      }ni } ||	fi |¤Ž}t        j                  «       }|j                  ||
z
  «       t        j                  «       }|€$|j                  |	|«      }j                  |«       nddlm}  ||	d   | ||	«      ¬	«      }t        j                  «       }|j                  ||z
  «       ‰dk7  rj                  d
«       ‰j"                  €�Œ| j%                  |€t'        j(                  «      n
t+        |«      |«       | j-                  «       s�ŒUt/        j0                  «       ‚ ‰dk7  rj3                  «        | j5                  dt7        |«      «       | j5                  dt7        |«      «       |€Ct        t'        j8                  «      «      d
k(  r
|d   x}x}}n0t;        |d¬«      \  \  }\  }}}}n|j=                  d¬«      \  }\  }}‰j>                  r|€|S t+        |«      S ‰j                   jA                  «       dk(  r|S |S # t        $ r}d}g }Y d}~�ŒÑd}~ww xY w)zäCompute objective value

            Parameter
            ---------
            trial : `Trial`
                Current trial

            Returns
            -------
            loss : `float`
                Loss
            NrE   FÚtotalr   Úpipeline_kwargs)Úget_annotatedÚ
annotation)Úuemr   Úprocessing_timeÚevaluation_timegÍÌÌÌÌÌì?)Úalphar=   © )!r   Ú
get_metricÚNotImplementedErrorrK   rH   r   ÚlenÚupdateÚ	enumerateÚtimer*   r   ÚgetÚappendÚlossÚpyannote.databaserV   r   ÚreportrA   ÚmeanÚabsÚshould_pruner-   ÚTrialPrunedÚcloseÚset_user_attrÚsumÚuniquer   Úconfidence_intervalr!   r3   )rF   Úmetricr7   ÚlossesrY   rZ   r   Úprogress_barÚiÚinputÚbefore_processingrU   ÚoutputÚafter_processingÚbefore_evaluationre   rV   Ú_Úafter_evaluationrh   Úlower_boundÚupper_boundrM   r5   rN   s                         €€€r9   Ú	objectivez*Optimizer.get_objective.<locals>.objectiveÆ   sÞ  ø€ ðØŸ™×1Ñ1Ó3�ð
 !ˆOØ ˆOð —}‘}×0Ñ0°·±×1IÑ1IÐPUÐ1IÓ1VÓWˆHà Ò%Ü#ÑG¬#¨f«+ÐG¸ÑG�Ø×#Ñ# AÔ&ô & fÓ-ó +/‘��5ô %)§I¡I£KÐ!ô ˜e¤WÔ-Ø&+§i¡iÐ0AÀ2Ó&F‘Oà&(�OÙ! %Ñ;¨?Ñ;�Ü#'§9¡9£;Ð Ø×&Ñ&Ð'7Ð:KÑ'KÔLô %)§I¡I£KÐ!ð �>Ø#Ÿ=™=¨°Ó7�DØ—M‘M $Õ'õ
 @á˜u \Ñ2°FÁÈeÓ@TÔU�Aä#'§9¡9£;Ð Ø×&Ñ&Ð'7Ð:KÑ'KÔLà  EÒ)Ø ×'Ñ'¨Ô*à—;‘;Ð&Ùà—‘°°œRŸW™W Vœ_ÄCÈÃKÐQRÔSØ×%Ñ%Ö'Ü ×,Ñ,Ó.Ð.ðW+/ðZ  Ò%Ø×"Ñ"Ô$à×ÑÐ 1´3°Ó3GÔHØ×ÑÐ 1´3°Ó3GÔHàˆ~Ü”r—y‘y Ó(Ó)¨QÒ.Ø7=¸a±yÐ@�DÐ@˜;©ä?HØ cô@Ñ<Ñ6�TÑ5˜K¨¸¹1ð 4:×3MÑ3MÐTWÐ3MÓ3XÑ0�Ñ0�{ Kà× Ò Ø�>Ø�Kô ˜v›;Ð&ð —=‘=×.Ñ.Ó0°JÒ>ð ðð !ðøôg 'ò Ø�Ø–ûðús   ƒK Ë	K3Ë$K.Ë.K3)Úlistr_   r   Úfloat)r5   rM   rN   Ún_inputsr~   s   ```  r9   Úget_objectivezOptimizer.get_objective©   sK   ú€ ô. �f“ˆÜ�v“;ˆà˜DÒ Ø%4¸uÐRSÑTˆMðh	œUð h	¤u÷ h	ðT ÐrI   Ún_iterationsÚ
warm_startc                 óÔ  — d| j                   _        | j                  ||¬«      }|rn| j                   j                  |«      }t	        j
                  «       5  t	        j                  dt        ¬«       | j                  j                  |«       ddd«       | j                  j                  ||dd¬«       d| j                   _        | j                  | j                  d	œS # 1 sw Y   ŒRxY w)
aó  Tune pipeline

        Parameters
        ----------
        inputs : iterable
            List of inputs processed by the pipeline at each iteration.
        n_iterations : int, optional
            Number of iterations. Defaults to 10.
        warm_start : dict, optional
            Nested dictionary of initial parameters used to bootstrap tuning.

        Returns
        -------
        result : dict
            ['loss']
            ['params'] nested dictionary of optimal parameters
        T©rN   Úignore©ÚcategoryNr   ©Ún_trialsÚtimeoutÚn_jobsF©re   Úparams)r   Útrainingr‚   Ú_flattenr(   Úcatch_warningsÚfilterwarningsr   r4   Úenqueue_trialÚoptimizerC   rG   )r5   rM   rƒ   r„   rN   r~   Úflattened_paramss          r9   ÚtunezOptimizer.tune2  sÃ   € ð4 "&ˆ�‰Ôà×&Ñ& v¸]Ð&ÓKˆ	áØ#Ÿ}™}×5Ñ5°jÓAÐä×(Ñ(Ó*ñ <Ü×'Ñ'¨Ô;NÕOØ—‘×)Ñ)Ð*:Ô;÷<ð 	�‰×Ñ˜Y°ÀtÐTUÐÔVð "'ˆ�‰ÔàŸ™°$×2BÑ2BÑCÐC÷<ð <ús   Á7CÃC'c              #   ó€  K  — | j                  ||¬«      }	 | j                  }|rn| j
                  j                  |«      }t        j                  «       5  t        j                  dt        ¬«       | j                  j                  |«       ddd«       	 d| j
                  _        | j                  j                  |ddd¬«       	 | j                  }| j                  }d| j
                  _        ||d	œ–— Œb# t        $ r}t        j                  }Y d}~Œñd}~ww xY w# 1 sw Y   Œ’xY w# t        $ r
}Y d}~Œ£d}~ww xY w­w)
a�  

        Parameters
        ----------
        inputs : iterable
            List of inputs processed by the pipeline at each iteration.
        warm_start : dict, optional
            Nested dictionary of initial parameters used to bootstrap tuning.

        Yields
        ------
        result : dict
            ['loss']
            ['params'] nested dictionary of optimal parameters
        r†   Nr‡   rˆ   Tr   rŠ   FrŽ   )r‚   rC   r0   rA   rB   r   r‘   r(   r’   r“   r   r4   r”   r�   r•   rG   )	r5   rM   r„   rN   r~   rC   r7   r–   rG   s	            r9   Ú	tune_iterzOptimizer.tune_iter^  s  è ø€ ð, ×&Ñ& v¸]Ð&ÓKˆ	ð	ØŸ™ˆIñ Ø#Ÿ}™}×5Ñ5°jÓAÐÜ×(Ñ(Ó*ñ <Ü×'Ñ'¨Ô;NÕOØ—‘×)Ñ)Ð*:Ô;÷<ð à%)ˆD�M‰MÔ"ð �K‰K× Ñ  °QÀÈQÐ ÔOðØ ŸN™N�	Ø"×.Ñ.�ð
 &+ˆD�M‰MÔ"à$°Ñ<Ò<ð! øô ò 	ÜŸ™�Iûð	ú÷
<ð <ûô ò Üûðüsi   ‚D>—C6 £1D>Á7DÂ9D>ÃD( ÃD>Ã6	DÃ?DÄD>ÄDÄD>ÄD%Ä!D>Ä(	D;Ä1D>Ä6D;Ä;D>)NNNNNT)F)é
   NT)NT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r+   r	   r   r   ÚintÚboolr:   Úpropertyr€   rC   ÚdictrG   rL   r   r   r
   r   r   r‚   r—   r   r™   r\   rI   r9   r   r   6   sÅ  „ ñð> "Ø$(Ø59Ø37Ø"Ø!ñ?)àð?)ð �T‰Nð?)ð ˜S‘Mð	?)ð
 ˜%  [Ð 0Ñ1Ñ2ð?)ð ˜˜s J˜Ñ/Ñ0ð?)ð �s‰mð?)ð ó?)ðB ð˜5ò ó ðð ð5˜Tò 5ó ð5ð
 ð;˜xò ;ó ð;ð ,1ñGà˜Ñ'ðGð ˜T 4˜ZÑ(ðGð 
�5�'˜5�.Ñ	!ó	GðX ØØ+/ñ*Dà˜Ñ'ð*Dð ð*Dð ð	*Dð
 ˜T 4˜ZÑ(ð*Dð 
ó*Dð^  Ø+/ñ	3=à˜Ñ'ð3=ð ð3=ð ˜T 4˜ZÑ(ð	3=ð
 
�4˜˜tÐ#Ñ	$ô3=rI   r   )(rb   r(   Úpathlibr   Útypingr   r   r   r   r   r	   r
   ÚnumpyrA   Úoptuna.loggingr-   Úoptuna.prunersÚoptuna.samplersÚoptuna.exceptionsr   r   r   r   Úoptuna.trialr   r   Úoptuna.storagesr   r   r   r   Úscipy.statsr   r   r   r   ÚloggingÚset_verbosityÚWARNINGr   r\   rI   r9   ú<module>r°      sq   ðó< Û Ý ß P× PÑ Pã Û Û Û Ý 1Ý %ß 3ß *ß JÑ JÝ ß JÑ JÝ !å Ý !à ‡�× Ñ ˜VŸ^™^×3Ñ3Ô 4÷[=ò [=rI   