§
    ÷óÉjV3  ã                   ó0  — d dl mZmZmZ d dlZd dl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 ddlmZ d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZ  G d„ de¦  «        Z! G d„ de!¦  «        Z" G d„ de!¦  «        Z# G d„ dee¦  «        Z$ G d„ de$¦  «        Z%dS ) é    )ÚTupleÚUnionÚOptionalN)ÚSegmentÚTimelineÚ
Annotation)Úpairwiseé   )Ú
BaseMetricÚ	f_measure)ÚMetricComponentsÚDetails)ÚUEMSupportMixinzsegmentation purityzsegmentation coveragezsegmentation F[purity|coverage]ztotal durationzintersection durationzpty total durationzpty intersection durationzcvg total durationzcvg intersection durationzsegmentation precisionzsegmentation recallznumber of boundariesznumber of matchesc                   óè   ‡ — e Zd ZdZddefˆ fd„Zdededefd„Zd	ed
e	eef         de
eef         fd„Zd	ed
edefd„Zed„ ¦   «         Zedefd„¦   «         Zd	ed
e	eef         fd„Zdedefd„Zˆ xZS )ÚSegmentationCoveragezÑSegmentation coverage

    Parameters
    ----------
    tolerance : float, optional
        When provided, preprocess reference by filling intra-label gaps shorter
        than `tolerance` (in seconds).

    ç      à?Ú	tolerancec                 óH   •—  t          ¦   «         j        di |¤Ž || _        d S ©N© ©ÚsuperÚ__init__r   ©Úselfr   ÚkwargsÚ	__class__s      €ú€/home/lighthouse/badge-speaker-benchmark/.benchmark-venv-community/lib/python3.11/site-packages/pyannote/metrics/segmentation.pyr   zSegmentationCoverage.__init__G   s+   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø"ˆŒˆˆó    ÚtimelineÚcoverageÚreturnc                 ón  — t          g ¦  «        }|D ]6}|                     |j        ¦  «         |                     |j        ¦  «         Œ7t	          ¦   «         }t          t          |¦  «        ¦  «        D ]\  }}t          ||¦  «        }d||<   Œ|                     |d¬¦  «         	                    ¦   «         S )NÚ_Úintersection)Úmode)
ÚsetÚaddÚstartÚendr   r	   Úsortedr   ÚcropÚrelabel_tracks)r   r    r!   Ú
boundariesÚsegmentÚ	partitionr)   r*   s           r   Ú
_partitionzSegmentationCoverage._partitionK   sµ   € õ
 ˜‘W”Wˆ
Øð 	(ð 	(ˆGØ�NŠN˜7œ=Ñ)Ô)Ð)Ø�NŠN˜7œ;Ñ'Ô'Ð'Ð'õ ‘L”Lˆ	Ý"¥6¨*Ñ#5Ô#5Ñ6Ô6ð 	%ð 	%‰JˆE�3Ý˜e SÑ)Ô)ˆGØ!$ˆI�gÑÐà�~Š~˜h¨^ˆ~Ñ<Ô<×KÒKÑMÔMÐMr   Ú	referenceÚ
hypothesisc                 óh  — t          |t          ¦  «        st          d¦  «        ‚t          |t          ¦  «        r|                     ¦   «         }t	          ¦   «         }|                     ¦   «         D ]}|                     |¦  «        }|                     ¦   «         D ]'}|j        | j	        k     r| 
                    |¦  «         Œ(|                     ¦   «         D ]}| 
                    |¦  «         ŒŒ€|                     ¦   «         }|                      ||¦  «        }	|                      ||¦  «        }
|	|
fS )Nz-reference must be an instance of `Annotation`)Ú
isinstancer   Ú	TypeErrorÚget_timeliner   ÚlabelsÚlabel_timelineÚgapsÚdurationr   r(   Úsupportr1   )r   r2   r3   ÚfilledÚlabelr9   Úgapr/   r!   Úreference_partitionÚhypothesis_partitions              r   Ú_preprocessz SegmentationCoverage._preprocess]   s;  € õ ˜)¥ZÑ0Ô0ð 	MÝÐKÑLÔLÐLå�j¥*Ñ-Ô-ð 	=Ø#-×#:Ò#:Ñ#<Ô#<ˆJõ ‘”ˆØ×%Ò%Ñ'Ô'ð 	$ð 	$ˆEØ&×5Ò5°eÑ<Ô<ˆNØ%×*Ò*Ñ,Ô,ð ,ð ,�Ø”< $¤.Ò0Ð0Ø"×&Ò& sÑ+Ô+Ð+øà)×1Ò1Ñ3Ô3ð $ð $�Ø—
’
˜7Ñ#Ô#Ð#Ð#ð$ð —>’>Ñ#Ô#ˆà"Ÿošo¨f°hÑ?Ô?ÐØ#Ÿš¨z¸8ÑDÔDÐà"Ð$8Ð8Ð8r   c                 ó  — |                       ¦   «         }||z  }t          j        |¦  «                             ¦   «         |t          <   t          j        t          j        |d¬¦  «        ¦  «                             ¦   «         |t          <   |S )Nr
   ©Úaxis)Úinit_componentsÚnpÚsumÚitemÚPTY_CVG_TOTALÚmaxÚPTY_CVG_INTER©r   r2   r3   ÚdetailÚKs        r   Ú_processzSegmentationCoverage._processz   so   € à×%Ò%Ñ'Ô'ˆð ˜
Ñ"ˆÝ "¤ q¡	¤	§¢Ñ 0Ô 0ˆ�}ÑÝ "¤¥r¤v¨a°aÐ'8Ñ'8Ô'8Ñ 9Ô 9× >Ò >Ñ @Ô @ˆ�}Ñàˆr   c                 ó   — t           S ©N)ÚCOVERAGE_NAME©Úclss    r   Úmetric_namez SegmentationCoverage.metric_name…   s   € åÐr   c                 ó   — t           t          gS rR   )rJ   rL   rT   s    r   Úmetric_componentsz&SegmentationCoverage.metric_components‰   s   € å�}Ð-Ð-r   c                 ó`   — |                       ||¦  «        \  }}|                      ||¦  «        S rR   ©rB   rP   ©r   r2   r3   r   s       r   Úcompute_componentsz'SegmentationCoverage.compute_components�   s0   € à $× 0Ò 0°¸JÑ GÔ GÑˆ	�:Ø�}Š}˜Y¨
Ñ3Ô3Ð3r   rN   c                 ó8   — |t                    |t                   z  S rR   )rL   rJ   )r   rN   s     r   Úcompute_metricz#SegmentationCoverage.compute_metric’   s   € Ø•mÔ$ v­mÔ'<Ñ<Ð<r   )r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úfloatr   r   r   r1   r   r   rB   r   rP   ÚclassmethodrV   r   rX   r\   r^   Ú__classcell__©r   s   @r   r   r   <   s€  ø€ € € € € ðð ð#ð # %ð #ð #ð #ð #ð #ð #ðNØ%ðNà%ðNà*4ðNð Nð Nð Nð$9 Zð 9Ø % j°(Ð&:Ô ;ð9à�Z Ð+Ô,ð9ð 9ð 9ð 9ð:	 *ð 	¸*ð 	Èð 	ð 	ð 	ð 	ð ðð ñ „[ðð ð.Ð"2ð .ð .ð .ñ „[ð.ð4¨Jð 4Ø',¨Z¸Ð-AÔ'Bð4ð 4ð 4ð 4ð
= Wð =°ð =ð =ð =ð =ð =ð =ð =ð =r   r   c                   óR   — e Zd ZdZedefd„¦   «         Zdedeee	f         de
fd„ZdS )ÚSegmentationPurityzÏSegmentation purity

    Parameters
    ----------
    tolerance : float, optional
        When provided, preprocess reference by filling intra-label gaps shorter
        than `tolerance` (in seconds).

    r"   c                 ó   — t           S rR   )ÚPURITY_NAMErT   s    r   rV   zSegmentationPurity.metric_name¡   ó   € åÐr   r2   r3   c                 ó`   — |                       ||¦  «        \  }}|                      ||¦  «        S rR   rZ   r[   s       r   r\   z%SegmentationPurity.compute_components¦   s2   € ð !%× 0Ò 0°¸JÑ GÔ GÑˆ	�:Ø�}Š}˜Z¨Ñ3Ô3Ð3r   N)r_   r`   ra   rb   rd   ÚstrrV   r   r   r   r   r\   r   r   r   rh   rh   –   sz   € € € € € ðð ð ð˜Cð ð ð ñ „[ðð4¨Jð 4Ø',¨Z¸Ð-AÔ'Bð4à(/ð4ð 4ð 4ð 4ð 4ð 4r   rh   c                   óä   ‡ — e Zd ZdZdˆ fd„	Zdedeeef         defd„Z	dedeeef         defd	„Z
d
edefd„Zdd
ee         deeeef         fd„Zedefd„¦   «         Zedefd„¦   «         Zˆ xZS )Ú"SegmentationPurityCoverageFMeasureal  
    Compute segmentation purity and coverage, and return their F-score.


    Parameters
    ----------
    tolerance : float, optional
        When provided, preprocess reference by filling intra-label gaps shorter
        than `tolerance` (in seconds).

    beta : float, optional
            When beta > 1, greater importance is given to coverage.
            When beta < 1, greater importance is given to purity.
            Defaults to 1.

    See also
    --------
    pyannote.metrics.segmentation.SegmentationPurity
    pyannote.metrics.segmentation.SegmentationCoverage
    pyannote.metrics.base.f_measure
    r   r
   c                 óZ   •—  t          t          | ¦  «        j        dd|i|¤Ž || _        d S )Nr   r   )r   ro   r   Úbeta)r   r   rq   r   r   s       €r   r   z+SegmentationPurityCoverageFMeasure.__init__Ä   s8   ø€ Ø@�Õ0°$Ñ7Ô7Ô@Ð_Ð_È9Ð_ÐX^Ð_Ð_Ð_ØˆŒ	ˆ	ˆ	r   r2   r3   r"   c                 óø  — |                       ||¦  «        \  }}|                      ¦   «         }||z  }t          j        |¦  «                             ¦   «         |t
          <   t          j        t          j        |d¬¦  «        ¦  «                             ¦   «         |t          <   |t
                   |t          <   t          j        t          j        |d¬¦  «        ¦  «                             ¦   «         |t          <   |S )Nr
   rD   r   )
rB   rF   rG   rH   rI   Ú	CVG_TOTALrK   Ú	CVG_INTERÚ	PTY_TOTALÚ	PTY_INTERrM   s        r   rP   z+SegmentationPurityCoverageFMeasure._processÈ   sÉ   € à $× 0Ò 0°¸JÑ GÔ GÑˆ	�:à×%Ò%Ñ'Ô'ˆð ˜
Ñ"ˆÝœF 1™IœIŸNšNÑ,Ô,ˆ�yÑÝœF¥2¤6¨!°!Ð#4Ñ#4Ô#4Ñ5Ô5×:Ò:Ñ<Ô<ˆ�yÑð #¥9Ô-ˆ�yÑÝœF¥2¤6¨!°!Ð#4Ñ#4Ô#4Ñ5Ô5×:Ò:Ñ<Ô<ˆ�yÑàˆr   c                 ó.   — |                       ||¦  «        S rR   )rP   r[   s       r   r\   z5SegmentationPurityCoverageFMeasure.compute_componentsÙ   s   € ð �}Š}˜Y¨
Ñ3Ô3Ð3r   rN   c                 ó:   — |                       |¬¦  «        \  }}}|S )N)rN   )Úcompute_metrics)r   rN   r$   Úvalues       r   r^   z1SegmentationPurityCoverageFMeasure.compute_metricÞ   s#   € Ø×*Ò*°&Ð*Ñ9Ô9‰ˆˆ1ˆeØˆr   Nc                 ó  — |€| j         n|}|t                   dk    rdn|t                   |t                   z  }|t                   dk    rdn|t                   |t                   z  }||t          ||| j        ¬¦  «        fS )Nç        ç      ð?)rq   )Úaccumulated_ru   rv   rs   rt   r   rq   )r   rN   Úpurityr!   s       r   ry   z2SegmentationPurityCoverageFMeasure.compute_metricsâ   s�   € à&, n�Ô"Ð"¸&ˆð �Ô# rÒ)Ð)ˆBˆBØ�IÔ&¨µ	Ô):Ñ:ð 	ð
 �Ô# rÒ)Ð)ˆBˆBØ�IÔ&¨µ	Ô):Ñ:ð 	ð �x¥¨6°8À$Ä)Ð!LÑ!LÔ!LÐLÐLr   c                 ó   — t           S rR   )ÚPURITY_COVERAGE_NAMErT   s    r   rV   z.SegmentationPurityCoverageFMeasure.metric_nameð   s   € å#Ð#r   c                 ó6   — t           t          t          t          gS rR   )ru   rv   rs   rt   rT   s    r   rX   z4SegmentationPurityCoverageFMeasure.metric_componentsô   s   € å�9¥iµÐ;Ð;r   )r   r
   rR   )r_   r`   ra   rb   r   r   r   r   r   rP   r\   rc   r^   r   r   ry   rd   rm   rV   r   rX   re   rf   s   @r   ro   ro   ­   sb  ø€ € € € € ðð ð,ð ð ð ð ð ð *ð Ø" :¨xÐ#7Ô8ðØ=Dðð ð ð ð"4¨Jð 4Ø',¨Z¸Ð-AÔ'Bð4à(/ð4ð 4ð 4ð 4ð
 Wð °ð ð ð ð ðMð M h¨wÔ&7ð MØ�U˜E 5Ð(Ô)ðMð Mð Mð Mð ð$˜Cð $ð $ð $ñ „[ð$ð ð<Ð"2ð <ð <ð <ñ „[ð<ð <ð <ð <ð <r   ro   c                   ó”   ‡ — e Zd ZdZed„ ¦   «         Zed„ ¦   «         Zdˆ fd„	Zdee	e
f         dee	e
f         defd	„Zd
edefd„Zˆ xZS )ÚSegmentationPrecisionaÅ  Segmentation precision

    >>> from pyannote.core import Timeline, Segment
    >>> from pyannote.metrics.segmentation import SegmentationPrecision
    >>> precision = SegmentationPrecision()

    >>> reference = Timeline()
    >>> reference.add(Segment(0, 1))
    >>> reference.add(Segment(1, 2))
    >>> reference.add(Segment(2, 4))

    >>> hypothesis = Timeline()
    >>> hypothesis.add(Segment(0, 1))
    >>> hypothesis.add(Segment(1, 2))
    >>> hypothesis.add(Segment(2, 3))
    >>> hypothesis.add(Segment(3, 4))
    >>> precision(reference, hypothesis)
    0.6666666666666666

    >>> hypothesis = Timeline()
    >>> hypothesis.add(Segment(0, 4))
    >>> precision(reference, hypothesis)
    1.0

    c                 ó   — t           S rR   )ÚPRECISION_NAMErT   s    r   rV   z!SegmentationPrecision.metric_name  s   € åÐr   c                 ó   — t           t          gS rR   )Ú
PR_MATCHESÚPR_BOUNDARIESrT   s    r   rX   z'SegmentationPrecision.metric_components  s   € å�MÐ*Ð*r   r|   c                 óH   •—  t          ¦   «         j        di |¤Ž || _        d S r   r   r   s      €r   r   zSegmentationPrecision.__init__  s+   ø€ à�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø"ˆŒˆˆr   r2   r3   r"   c                 óê  — t          |t          ¦  «        r|                     ¦   «         }t          |t          ¦  «        r|                     ¦   «         }|                      ¦   «         }d}t	          |¦  «        dz
  }t	          |¦  «        dz
  }||t
          <   |dk    s|dk    rd|t          <   |S d„ |D ¦   «         d d…         }d„ |D ¦   «         d d…         }	t          j        ||f¦  «        }
t          |¦  «        D ]1\  }}t          |	¦  «        D ]\  }}t          ||z
  ¦  «        |
||f<   ŒŒ2t          j        |
t          j        |
| j        k    ¦  «        <   t          j        |
¦  «        }|t          j        k     rm|dz  }t          j        |
¦  «        }||z  }||z  }t          j        |
|d d …f<   t          j        |
d d …|f<   t          j        |
¦  «        }|t          j        k     °m||t          <   |S )Nr|   r
   r   c                 ó   — g | ]	}|j         ‘Œ
S r   ©r*   ©Ú.0r/   s     r   ú
<listcomp>z<SegmentationPrecision.compute_components.<locals>.<listcomp>>  s   € Ð?Ð?Ð?¨'˜'œ+Ð?Ð?Ð?r   éÿÿÿÿc                 ó   — g | ]	}|j         ‘Œ
S r   r�   rŽ   s     r   r�   z<SegmentationPrecision.compute_components.<locals>.<listcomp>?  s   € Ð@Ð@Ð@¨'˜'œ+Ð@Ð@Ð@r   )r5   r   r7   rF   Úlenr‰   rˆ   rG   ÚzerosÚ	enumerateÚabsÚinfÚwherer   ÚaminÚargmin)r   r2   r3   r   rN   Ú	n_matchesÚNÚMÚref_boundariesÚhyp_boundariesÚdeltaÚrÚrefBoundaryÚhÚhypBoundaryÚkÚiÚjs                     r   r\   z(SegmentationPrecision.compute_components!  s  € õ �i¥Ñ,Ô,ð 	1Ø!×.Ò.Ñ0Ô0ˆIÝ�j¥*Ñ-Ô-ð 	3Ø#×0Ò0Ñ2Ô2ˆJà×%Ò%Ñ'Ô'ˆð ˆ	õ �	‰NŒN˜QÑˆÝ�
‰OŒO˜aÑˆð !"ˆ�}Ñð �Š6ˆ6�Q˜!’V�VØ!#ˆF•:ÑØˆMð @Ð?°YÐ?Ñ?Ô?ÀÀÀÔDˆØ@Ð@°ZÐ@Ñ@Ô@ÀÀ"ÀÔEˆõ ”˜!˜Q˜Ñ Ô ˆÝ'¨Ñ7Ô7ð 	=ð 	=‰NˆAˆ{Ý"+¨NÑ";Ô";ð =ð =‘��;Ý! +°Ñ";Ñ<Ô<��a˜�d‘�ð=õ
 35´&ˆ�bŒh�u˜tœ~Ò-Ñ.Ô.Ñ/õ ŒG�E‰NŒNˆð •"”&Šjˆjà˜‰NˆIõ ”	˜%Ñ Ô ˆAØ�Q‘ˆAØ�A‘ˆAõ œ&ˆE�!�Q�Q�Q�$‰KÝœ&ˆE�!�!�!�Q�$‰Kõ ”˜‘”ˆAð •"”&Šjˆjð  'ˆ�zÑØˆr   rN   c                 óz   — |t                    }|t                   }|dk    r|dk    rdS t          d¦  «        ‚||z  S )Nr|   r   r}   Ú )rˆ   r‰   Ú
ValueError)r   rN   Ú	numeratorÚdenominators       r   r^   z$SegmentationPrecision.compute_metricc  sF   € à�:Ô&ˆ	Ø�]Ô+ˆà˜"ÒÐØ˜AŠ~ˆ~Ø�rå  ‘n”nÐ$à˜{Ñ*Ð*r   )r|   )r_   r`   ra   rb   rd   rV   rX   r   r   r   r   r   r\   rc   r^   re   rf   s   @r   r„   r„   ù   sé   ø€ € € € € ðð ð4 ðð ñ „[ðð ð+ð +ñ „[ð+ð#ð #ð #ð #ð #ð #ð
@Ø&+¨J¸Ð,@Ô&Að@à',¨Z¸Ð-AÔ'Bð@ð )0ð@ð @ð @ð @ðD+ Wð +°ð +ð +ð +ð +ð +ð +ð +ð +r   r„   c                   óf   ‡ — e Zd ZdZed„ ¦   «         Zdeeef         deeef         de	fˆ fd„Z
ˆ xZS )ÚSegmentationRecalla¤  Segmentation recall

    >>> from pyannote.core import Timeline, Segment
    >>> from pyannote.metrics.segmentation import SegmentationRecall
    >>> recall = SegmentationRecall()

    >>> reference = Timeline()
    >>> reference.add(Segment(0, 1))
    >>> reference.add(Segment(1, 2))
    >>> reference.add(Segment(2, 4))

    >>> hypothesis = Timeline()
    >>> hypothesis.add(Segment(0, 1))
    >>> hypothesis.add(Segment(1, 2))
    >>> hypothesis.add(Segment(2, 3))
    >>> hypothesis.add(Segment(3, 4))
    >>> recall(reference, hypothesis)
    1.0

    >>> hypothesis = Timeline()
    >>> hypothesis.add(Segment(0, 4))
    >>> recall(reference, hypothesis)
    0.0

    c                 ó   — t           S rR   )ÚRECALL_NAMErT   s    r   rV   zSegmentationRecall.metric_nameŒ  rk   r   r2   r3   r"   c                 óV   •— t          t          | ¦  «                             ||¦  «        S rR   )r   r®   r\   )r   r2   r3   r   r   s       €r   r\   z%SegmentationRecall.compute_components�  s-   ø€ õ Õ'¨Ñ.Ô.×AÒAØ˜	ñ#ô #ð 	#r   )r_   r`   ra   rb   rd   rV   r   r   r   r   r\   re   rf   s   @r   r®   r®   q  s�   ø€ € € € € ðð ð4 ðð ñ „[ðð#¨E°*¸hÐ2FÔ,Gð #Ø',¨Z¸Ð-AÔ'Bð#à(/ð#ð #ð #ð #ð #ð #ð #ð #ð #ð #r   r®   )&Útypingr   r   r   ÚnumpyrG   Úpyannote.corer   r   r   Úpyannote.core.utils.generatorsr	   Úbaser   r   Útypesr   r   Úutilsr   rj   rS   r�   rJ   rL   ru   rv   rs   rt   r†   r°   r‰   rˆ   r   rh   ro   r„   r®   r   r   r   ú<module>r¹      sã  ðð> *Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )à Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø "Ð "Ð "Ð "Ð "Ð "ð $€Ø'€Ø8Ð Ø €Ø'€à €	Ø'€	Ø €	Ø'€	à)€Ø#€à&€Ø €
ðW=ð W=ð W=ð W=ð W=˜:ñ W=ô W=ð W=ðt4ð 4ð 4ð 4ð 4Ð-ñ 4ô 4ð 4ð.I<ð I<ð I<ð I<ð I<Ð)=ñ I<ô I<ð I<ðXu+ð u+ð u+ð u+ð u+˜O¨Zñ u+ô u+ð u+ðp##ð ##ð ##ð ##ð ##Ð.ñ ##ô ##ð ##ð ##ð ##r   