§
    ÷óÉjp6  ã                   óX  — 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j$         %                    ej$        j&        ¦  «          G d„ d¦  «        Z'dS )é    N)ÚPath)ÚIterableÚOptionalÚCallableÚ	GeneratorÚMappingÚUnionÚDict)ÚExperimentalWarning)Ú
BasePruner)ÚBaseSamplerÚ
TPESampler)ÚTrialÚ
FixedTrial)Ú
RDBStorageÚJournalStorageÚJournalFileStorage)Útqdm)Ú	bayes_mvsé   )ÚPipeline)ÚPipelineInputc                   óÆ  — 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dS )Ú	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.
    NTÚpipelineÚdbÚ
study_nameÚsamplerÚprunerÚseedÚaverage_casec           	      ó^  — || _         || _        |€d | _        n t          | j        ¦  «        j        }|dk    r1t          j        d¦  «         t          d| j        › �¦  «        | _        nP|dk    rt          d| j        › �¦  «        | _        n-|dk    r't          t          | j        › ¦  «        ¦  «        | _        || _
        t          |t          ¦  «        r|| _        nzt          |t          ¦  «        rN	  t          t           j        |¦  «        |¬¦  «        | _        n:# t$          $ r}	d}
t'          |
¦  «        ‚d }	~	ww xY w|€t)          |¬¦  «        | _        t          |t*          ¦  «        r|| _        nht          |t          ¦  «        rL	  t          t           j        |¦  «        ¦   «         | _        n*# t$          $ r}	d}
t'          |
¦  «        ‚d }	~	ww xY wd | _        t!          j        | j
        d	| j        | j        | j        | j                              ¦   «         ¬
¦  «        | _        || _        d S )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              ú~/home/lighthouse/badge-speaker-benchmark/.benchmark-venv-community/lib/python3.11/site-packages/pyannote/pipeline/optimizer.pyÚ__init__zOptimizer.__init__S   s=  € ð !ˆŒàˆŒØˆ:Ø ˆDŒMˆMå˜TœW™œÔ,ˆIØ˜EÒ!Ð!Ý”Ø^ñô ð õ !+Ð+A¸¼Ð+AÐ+AÑ BÔ B�”�Ø˜iÒ'Ð'Ý *Ð+A¸¼Ð+AÐ+AÑ BÔ B�”�Ø˜jÒ(Ð(Ý .Õ/AÀTÄWÀ,Ñ/OÔ/OÑ PÔ P�”Ø$ˆŒå�g�{Ñ+Ô+ð 		1Ø"ˆDŒLˆLÝ˜¥Ñ%Ô%ð 	1ð&Ø@�w¥v¤¸Ñ@Ô@ÀdÐKÑKÔK�”�øÝ!ð &ð &ð &ØP�Ý  ‘o”oÐ%øøøøð&øøøð ˆ_Ý%¨4Ð0Ñ0Ô0ˆDŒLå�f�jÑ)Ô)ð 		Ø ˆDŒKˆKÝ˜¥Ñ$Ô$ð 	ð&Ø=�g¥f¤n°fÑ=Ô=Ñ?Ô?�”�øÝ!ð &ð &ð &Ø[�Ý  ‘o”oÐ%øøøøð&øøøð ˆDŒKõ Ô)Ø”ØØ”MØ”LØ”;Ø”m×1Ò1Ñ3Ô3ð
ñ 
ô 
ˆŒð )ˆÔÐÐs0   Ã3)D Ä
D=Ä'D8Ä8D=Æ
'F2 Æ2
GÆ<GÇGÚreturnc                 ó¢   — 	 | j         j        }n@# t          $ r3 | j                             ¦   «         dk    rdnd}|t
          j        z  }Y nw xY w|S )zReturn best loss so farÚminimizer   éÿÿÿÿ)r4   Ú
best_valueÚ	Exceptionr   r3   ÚnpÚinf)r5   r?   r%   s      r9   Ú	best_losszOptimizer.best_loss”   sh   € ð	,ØœÔ/ˆJˆJøÝð 	,ð 	,ð 	,Ø"&¤-×"=Ò"=Ñ"?Ô"?À:Ò"MÐ"M˜Q˜QÐSUˆIØ"¥R¤VÑ+ˆJˆJˆJð	,øøøð Ðs   ‚ �:AÁAc                 ój   — t          | 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ž   s/   € õ ˜4œ;Ô2Ñ3Ô3ˆØŒ}×'Ò'¨eÐ'Ñ4Ô4Ð4ó    c                 ó@   — | j                              | j        ¦  «        S )z8Return pipeline instantiated with best parameters so far)r   ÚinstantiaterG   )r5   s    r9   Úbest_pipelinezOptimizer.best_pipeline¤   s   € ð Œ}×(Ò(¨Ô)9Ñ:Ô:Ð:rI   FÚinputsÚshow_progressc                 óŒ   ‡ ‡‡— 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                              ¦   «         }n# t          $ r}d}g }Y d}~nd}~ww xY wg }g }‰j                              ‰j                              | ¬¦  «        ¦  «        }‰dk    r0t          ddt          ‰¦  «        i‰¤Ž}|                     d¦  «         t          ‰¦  «        D �]Ž\  }}	t          j	        ¦   «         }
t          |	t          ¦  «        r|	                     di ¦  «        }ni } ||	fi |¤Ž}t          j	        ¦   «         }|                     ||
z
  ¦  «         t          j	        ¦   «         }|€,|                     |	|¦  «        }|                     |¦  «         n#ddlm}  ||	d         | ||	¦  «        ¬	¦  «        }t          j	        ¦   «         }|                     ||z
  ¦  «         ‰dk    r|                     d
¦  «         ‰j        €�Œ.|                      |€t'          j        |¦  «        nt+          |¦  «        |¦  «         |                      ¦   «         rt/          j        ¦   «         ‚�Œ�‰dk    r|                     ¦   «          |                      dt7          |¦  «        ¦  «         |                      dt7          |¦  «        ¦  «         |€Nt          t'          j        |¦  «        ¦  «        d
k    r|d         x}x}}n8t;          |d¬¦  «        \  \  }\  }}}}n|                     d¬¦  «        \  }\  }}‰j        r|€|S t+          |¦  «        S ‰j                               ¦   «         dk    r|n|S )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Ô3��øÝ&ð ð ð Ø�Ø������øøøøðøøøð !ˆOØ ˆOð ”}×0Ò0°´×1IÒ1IÐPUÐ1IÑ1VÔ1VÑWÔWˆHà Ò%Ð%Ý#ÐGÐG­#¨f©+¬+ÐG¸ÐGÐG�Ø×#Ò# AÑ&Ô&Ð&õ & fÑ-Ô-ð +/ñ +/‘��5õ %)¤I¡K¤KÐ!õ ˜e¥WÑ-Ô-ð )Ø&+§i¢iÐ0AÀ2Ñ&FÔ&F�O�Oà&(�OØ!˜ %Ð;Ð;¨?Ð;Ð;�Ý#'¤9¡;¤;Ð Ø×&Ò&Ð'7Ð:KÑ'KÑLÔLÐLõ %)¤I¡K¤KÐ!ð �>Ø#Ÿ=š=¨°Ñ7Ô7�DØ—M’M $Ñ'Ô'Ð'Ð'ð
 @Ð?Ð?Ð?Ð?Ð?à˜˜u \Ô2°FÀÀÈeÑ@TÔ@TÐUÑUÔU�Aå#'¤9¡;¤;Ð Ø×&Ò&Ð'7Ð:KÑ'KÑLÔLÐLà  EÒ)Ð)Ø ×'Ò'¨Ñ*Ô*Ð*à”;Ð&Ùà—’°°�RœW V™_œ_˜_ÅCÈÁKÄKÐQRÑSÔSÐSØ×%Ò%Ñ'Ô'ð /Ý Ô,Ñ.Ô.Ð.ñ/ð  Ò%Ð%Ø×"Ò"Ñ$Ô$Ð$à×ÒÐ 1µ3°Ñ3GÔ3GÑHÔHÐHØ×ÒÐ 1µ3°Ñ3GÔ3GÑHÔHÐHàˆ~Ý•r”y Ñ(Ô(Ñ)Ô)¨QÒ.Ð.Ø7=¸a´yÐ@�DÐ@˜;¨¨å?HØ cð@ñ @ô @Ñ<Ñ6�TÑ5˜K¨¸¸1¸1ð 4:×3MÒ3MÐTWÐ3MÑ3XÔ3XÑ0�Ñ0�{ KàÔ ð 'Ø�>Ø�Kõ ˜v™;œ;Ð&ð ”=×.Ò.Ñ0Ô0°JÒ>Ð>ð �à ðs   ƒ �
5§0°5)Úlistr_   r   Úfloat)r5   rM   rN   Ún_inputsr~   s   ```  r9   Úget_objectivezOptimizer.get_objective©   s�   øøø€ õ. �f‘”ˆÝ�v‘;”;ˆà˜DÒ Ð Ø%4¸uÐRSÐTÐTˆMðh	�Uð h	¥uð h	ð h	ð h	ð h	ð h	ð h	ð h	ð h	ðT ÐrI   é
   Ún_iterationsÚ
warm_startc                 ó²  — d| j         _        |                      ||¬¦  «        }|rz| j                              |¦  «        }t	          j        ¦   «         5  t	          j        dt          ¬¦  «         | j         	                    |¦  «         ddd¦  «         n# 1 swxY w Y   | j         
                    ||dd¬¦  «         d| j         _        | j        | j        d	œS )
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ÔKˆ	àð 	<Ø#œ}×5Ò5°jÑAÔAÐåÔ(Ñ*Ô*ð <ð <ÝÔ'¨Õ;NÐOÑOÔOÐOØ”×)Ò)Ð*:Ñ;Ô;Ð;ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <ð 	Œ×Ò˜Y°ÀtÐTUÐÑVÔVÐVð "'ˆŒÔàœ°$Ô2BÐCÐCÐCs   Á6BÂBÂBc              #   óP  K  — |                       ||¬¦  «        }	 | j        }n## t          $ r}t          j        }Y d}~nd}~ww xY w|rz| j                             |¦  «        }t          j        ¦   «         5  t          j	        dt          ¬¦  «         | j                             |¦  «         ddd¦  «         n# 1 swxY w Y   	 d| j        _        | j                             |ddd¬¦  «         	 | j        }| j        }n# t          $ r
}Y d}~ŒJd}~ww xY wd| j        _        ||d	œV — Œe)
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ÔKˆ	ð	ØœˆIˆIøÝð 	ð 	ð 	ÝœˆIˆIˆIˆIˆIˆIøøøøð	øøøð ð 	<Ø#œ}×5Ò5°jÑAÔAÐÝÔ(Ñ*Ô*ð <ð <ÝÔ'¨Õ;NÐOÑOÔOÐOØ”×)Ò)Ð*:Ñ;Ô;Ð;ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <ð	=à%)ˆDŒMÔ"ð ŒK× Ò  °QÀÈQÐ ÑOÔOÐOðØ œN�	Ø"Ô.��øÝð ð ð Ø����øøøøðøøøð &+ˆDŒMÔ"à$°Ð<Ð<Ð<Ð<Ð<ð!	=s6   ›# £
A­>¾AÁ56B7Â7B;Â>B;Ã.C= Ã=
DÄD)NNNNNT)F)rƒ   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   sX  € € € € € ðð ð> "Ø$(Ø59Ø37Ø"Ø!ð?)ð ?)àð?)ð �TŒNð?)ð ˜S”Mð	?)ð
 ˜%  [Ð 0Ô1Ô2ð?)ð ˜˜s J˜Ô/Ô0ð?)ð �sŒmð?)ð ð?)ð ?)ð ?)ð ?)ðB ð˜5ð ð ð ñ „Xðð ð5˜Tð 5ð 5ð 5ñ „Xð5ð
 ð;˜xð ;ð ;ð ;ñ „Xð;ð ,1ðGð Gà˜Ô'ðGð ˜T 4˜ZÔ(ðGð 
�5�'˜5�.Ô	!ð	Gð Gð Gð GðX ØØ+/ð*Dð *Dà˜Ô'ð*Dð ð*Dð ð	*Dð
 ˜T 4˜ZÔ(ð*Dð 
ð*Dð *Dð *Dð *Dð^  Ø+/ð	3=ð 3=à˜Ô'ð3=ð ð3=ð ˜T 4˜ZÔ(ð	3=ð
 
�4˜˜tÐ#Ô	$ð3=ð 3=ð 3=ð 3=ð 3=ð 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°      sÀ  ðð< €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ Pà Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø %Ð %Ð %Ð %Ð %Ð %Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ Ð Ð Ð Ð Ð Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !à „× Ò ˜Vœ^Ô3Ñ 4Ô 4Ð 4ð[=ð [=ð [=ð [=ð [=ñ [=ô [=ð [=ð [=ð [=rI   