§
    ÷óÉjú^  ã                   óî  — 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	 ddl
mZ ddl
mZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl!m#Z# ddl!m$Z$ ddl!m%Z% ddl&m'Z' ej(        Z)d„ Z(e(e_(        de*defd„Z+d„ Z,d,d„Z-d „ Z.d!„ Z/d-d$„Z0d.d&„Z1	 d/d'„Z2d-d(„Z3d0d)„Z4d*„ Z5e6d+k    r e5¦   «          dS dS )1aq  
Evaluation

Usage:
  pyannote-metrics detection [--subset=<subset> --collar=<seconds> --skip-overlap] <database.task.protocol> <hypothesis.rttm>
  pyannote-metrics segmentation [--subset=<subset> --tolerance=<seconds>] <database.task.protocol> <hypothesis.rttm>
  pyannote-metrics overlap [--subset=<subset> --collar=<seconds>] <database.task.protocol> <hypothesis.rttm>
  pyannote-metrics diarization [--subset=<subset> --greedy --collar=<seconds> --skip-overlap] <database.task.protocol> <hypothesis.rttm>
  pyannote-metrics identification [--subset=<subset> --collar=<seconds> --skip-overlap] <database.task.protocol> <hypothesis.rttm>
  pyannote-metrics spotting [--subset=<subset> --latency=<seconds>... --filter=<expression>...] <database.task.protocol> <hypothesis.json>
  pyannote-metrics -h | --help
  pyannote-metrics --version

Options:
  <database.task.protocol>   Set evaluation protocol (e.g. "Etape.SpeakerDiarization.TV")
  --subset=<subset>          Evaluated subset (train|developement|test) [default: test]
  --collar=<seconds>         Collar, in seconds [default: 0.0].
  --skip-overlap             Do not evaluate overlap regions.
  --tolerance=<seconds>      Tolerance, in seconds [default: 0.5].
  --greedy                   Use greedy diarization error rate.
  --latency=<seconds>        Evaluate with fixed latency.
  --filter=<expression>      Filter out target trials that do not match the
                             expression; e.g. use --filter="speech>10" to skip
                             target trials with less than 10s of speech from
                             the target.
  -h --help                  Show this screen.
  --version                  Show version.

All modes but "spotting" expect hypothesis using the RTTM file format.
RTTM files contain one line per speech turn, using the following convention:

SPEAKER {uri} 1 {start_time} {duration} <NA> <NA> {speaker_id} <NA> <NA>

    * uri: file identifier (as given by pyannote.database protocols)
    * start_time: speech turn start time in seconds
    * duration: speech turn duration in seconds
    * speaker_id: speaker identifier

"spotting" mode expects hypothesis using the following JSON file format.
It should contain a list of trial hypothesis, using the same trial order as
pyannote.database speaker spotting protocols (e.g. protocol.test_trial())

[
    {'uri': '<uri>', 'model_id': '<model_id>', 'scores': [[<t1>, <v1>], [<t2>, <v2>], ... [<tn>, <vn>]]},
    {'uri': '<uri>', 'model_id': '<model_id>', 'scores': [[<t1>, <v1>], [<t2>, <v2>], ... [<tn>, <vn>]]},
    {'uri': '<uri>', 'model_id': '<model_id>', 'scores': [[<t1>, <v1>], [<t2>, <v2>], ... [<tn>, <vn>]]},
    ...
    {'uri': '<uri>', 'model_id': '<model_id>', 'scores': [[<t1>, <v1>], [<t2>, <v2>], ... [<tn>, <vn>]]},
]

    * uri: file identifier (as given by pyannote.database protocols)
    * model_id: target identifier (as given by pyannote.database protocols)
    * [ti, vi]: [time, value] pair indicating that the system has output the
                score vi at time ti (e.g. [10.2, 0.2] means that the system
                gave a score of 0.2 at time 10.2s).

Calling "spotting" mode will create a bunch of files.
* <hypothesis.det.txt> contains DET curve using the following raw file format:
    <threshold> <fpr> <fnr>
* <hypothesis.lcy.txt> contains latency curves using this format:
    <threshold> <fpr> <fnr> <speaker_latency> <absolute_latency>

é    N)Údocopt)Ú
Annotation)ÚTimeline)Úget_protocol)Úget_annotated)Ú	load_rttm)Útabulate)ÚDetectionAccuracy)ÚDetectionErrorRate)ÚDetectionPrecision)ÚDetectionRecall)ÚDiarizationCoverage)ÚDiarizationErrorRate)ÚDiarizationPurity)ÚGreedyDiarizationErrorRate)ÚIdentificationErrorRate)ÚIdentificationPrecision)ÚIdentificationRecall)ÚSegmentationCoverage)ÚSegmentationPrecision)ÚSegmentationPurity)ÚSegmentationRecall)ÚLowLatencySpeakerSpottingc                 óP   — t          |j        dz   t          | ¦  «        ¦  «         d S )Nú:)ÚprintÚ__name__Ústr)ÚmessageÚcategoryÚargsÚkwargss       úw/home/lighthouse/badge-speaker-benchmark/.benchmark-venv-community/lib/python3.11/site-packages/pyannote/metrics/cli.pyÚshowwarningr$   ‚   s&   € Ý	ˆ(Ô
˜cÑ
!¥3 w¡<¤<Ñ0Ô0Ð0Ð0Ð0ó    Úcurrent_fileÚreturnc                 ó0  — | d         }t          |j        ¬¦  «        }|                     |¦  «        D ]>\  \  }}\  }}|||f         }|||f         }||k    rŒ&|                     ||z  ¦  «         Œ?|                     ¦   «                              ¦   «         S )a  Get overlapped speech reference annotation

    Parameters
    ----------
    current_file : `dict`
        File yielded by pyannote.database protocols.

    Returns
    -------
    overlap : `pyannote.core.Annotation`
        Overlapped speech reference.
    Ú
annotation)Úuri)r   r*   Úco_iterÚaddÚsupportÚto_annotation)	r&   Ú	referenceÚoverlapÚs1Út1Ús2Út2Úl1Úl2s	            r#   Ú
to_overlapr7   ‰   s§   € ð ˜\Ô*€IÝ˜9œ=Ð)Ñ)Ô)€GØ'×/Ò/°	Ñ:Ô:ð ð Ñ‰ˆˆR‘(�2�rØ�r˜2�vÔˆØ�r˜2�vÔˆØ�Š8ˆ8ØØ�Š�B˜‘GÑÔÐÐØ�?Š?ÑÔ×*Ò*Ñ,Ô,Ð,r%   c                 ór  ‡— |d         Š‰| v r| ‰         S ˆfd„| D ¦   «         }t          |¦  «        dk    r+d‰› d�}t          j        |¦  «         t          ‰d¬¦  «        S t          |¦  «        dk    r| |d                  }‰|_        |S d	‰› d
|› d�}t          |                     ‰|¬¦  «        ¦  «        ‚)an  Get hypothesis for given file

    Parameters
    ----------
    hypotheses : `dict`
        Speaker diarization hypothesis provided by `load_rttm`.
    current_file : `dict`
        File description as given by pyannote.database protocols.

    Returns
    -------
    hypothesis : `pyannote.core.Annotation`
        Hypothesis corresponding to `current_file`.
    r*   c                 ó   •— g | ]}|‰v ¯|‘Œ	S © r:   )Ú.0Úur*   s     €r#   ú
<listcomp>z"get_hypothesis.<locals>.<listcomp>¹   s   ø€ Ð1Ð1Ð1�Q¨¨S¨¨ˆq¨¨¨r%   r   z$Could not find hypothesis for file "z"; assuming empty file.Úspeaker)r*   Úmodalityé   z)Found too many hypotheses matching file "z" (z).)r*   Úuris)ÚlenÚwarningsÚwarnr   r*   Ú
ValueErrorÚformat)Ú
hypothesesr&   Útmp_uriÚmsgÚ
hypothesisr*   s        @r#   Úget_hypothesisrK   ¢   sì   ø€ ð  �uÔ
€Cà
ˆjÐÐØ˜#ŒÐð 2Ð1Ð1Ð1˜*Ð1Ñ1Ô1€Gõ ˆ7�|„|�qÒÐØQ°SÐQÐQÐQˆÝŒ�cÑÔÐÝ˜c¨IÐ6Ñ6Ô6Ð6õ ˆ7�|„|�qÒÐØ ¨¤
Ô+ˆ
Øˆ
ŒØÐð J°cÐ
IÐ
I¸gÐ
IÐ
IÐ
I€CÝ
�S—Z’Z C¨g�ZÑ6Ô6Ñ
7Ô
7Ð7r%   c                 óš   ‡‡‡— | d         Št          || ¦  «        Št          | ¦  «        Šˆˆˆfd„|                     ¦   «         D ¦   «         S )Nr)   c                 ó4   •— i | ]\  }}| |‰‰‰¬ ¦  «        “ŒS ))Úuemr:   )r;   ÚkeyÚmetricrJ   r/   rN   s      €€€r#   ú
<dictcomp>zprocess_one.<locals>.<dictcomp>Ð   s=   ø€ ð ð ð Ù8C¸¸VˆˆVˆV�I˜z¨sÐ3Ñ3Ô3ðð ð r%   )rK   r   Úitems)ÚitemrG   ÚmetricsrJ   r/   rN   s      @@@r#   Úprocess_onerU   Ì   sh   øøø€ Ø�\Ô"€IÝ 
¨DÑ1Ô1€JÝ
˜Ñ
Ô
€Cðð ð ð ð ð ØGNÇ}Â}ÁÄðñ ô ð r%   c                 óÂ   — t          j        t          ||¬¦  «        } t          | |¦  «        ¦   «         D ]} ||¦  «         Œd„ |                     ¦   «         D ¦   «         S )N)rG   rT   c                 óB   — i | ]\  }}||                      d ¬¦  «        “ŒS )F©Údisplay)Úreport)r;   rO   rP   s      r#   rQ   zget_reports.<locals>.<dictcomp>Û   s,   € ÐQÐQÐQ±+°#°vˆC�—’ u�Ñ-Ô-ÐQÐQÐQr%   )Ú	functoolsÚpartialrU   ÚgetattrrR   )ÚprotocolÚsubsetrG   rT   ÚprocessrS   s         r#   Úget_reportsra   Õ   se   € ÝÔ¥¸
ÈGÐTÑTÔT€Gà)•˜ &Ñ)Ô)Ñ+Ô+ð ð ˆØˆ�‰ŒˆˆàQÐQÀÇÂÁÄÐQÑQÔQÐQr%   c                 ó²   — t          | j        ¦  «        }|                     d¦  «        }|                      |d|…         ||dz   d…         z   dgz   ¦  «        S )z.Reindex report so that 'TOTAL' is the last rowÚTOTALNr@   )ÚlistÚindexÚreindex)rZ   re   Úis      r#   rf   rf   Þ   sT   € å�”ÑÔ€EØ�Š�GÑÔ€AØ�>Š>˜%   œ) e¨A°©E¨G¨G¤nÑ4¸°yÑ@ÑAÔAÐAr%   ç        Fc                 óŠ  ‡— ||dœ}t          di |¤Žt          di |¤Žt          di |¤Žt          di |¤Ždœ}t	          | |||¦  «        }|d                              d¬¦  «        Š|d                              d¬¦  «        }|d                              d¬¦  «        }	|d                              d¬¦  «        }
||d         j        d	f         ‰d
<   |	|d         j        d	f         ‰d<   |
|d         j        d	f         ‰d<   t          ‰¦  «        Št          ‰j	        ¦  «        }‰|d         g|dd …         z   |dd…         z            Šd 
                    d|z  |rdnd¦  «        }|gˆfd„t          d¦  «        D ¦   «         z   d„ ‰j	        dd …         D ¦   «         z   }t          t          ‰|ddddddd¬¦	  «	        ¦  «         d S )N©ÚcollarÚskip_overlap)ÚerrorÚaccuracyÚ	precisionÚrecallrm   FrX   rn   ro   rp   ú%)rn   rq   ©ro   rq   ©rp   rq   r   éýÿÿÿr@   z Detection (collar = {0:g} ms{1})éè  ú, no overlapÚ c                 ó6   •— g | ]}‰j         |         d          ‘ŒS ©r   ©Úcolumns©r;   rg   rZ   s     €r#   r=   zdetection.<locals>.<listcomp>  ó%   ø€ Ð
2Ð
2Ð
2 Aˆ6Œ>˜!Ô˜QÔÐ
2Ð
2Ð
2r%   é   c                 ó:   — g | ]}|d          dk    rdn|d         ‘ŒS ©r@   rq   r   r:   ©r;   Úcs     r#   r=   zdetection.<locals>.<listcomp>  ó,   € Ð
DÐ
DÐ
D¨A�!�A”$˜#’+�+ˆ3ˆ3 1 Q¤4Ð
DÐ
DÐ
Dr%   Úsimpleú.2fÚdecimalÚleftÚdefault©ÚheadersÚtablefmtÚfloatfmtÚnumalignÚstralignÚ
missingvalÚ	showindexÚdisable_numparser:   )r   r
   r   r   ra   rZ   Únamerf   rd   r{   rF   Úranger   r	   )r^   r_   rG   rk   rl   ÚoptionsrT   Úreportsrn   ro   rp   r{   ÚsummaryrŠ   rZ   s                 @r#   Ú	detectionr—   å   s>  ø€ Ø°Ð>Ð>€Gõ $Ð.Ð. gÐ.Ð.Ý%Ð0Ð0¨Ð0Ð0Ý'Ð2Ð2¨'Ð2Ð2Ý!Ð,Ð, GÐ,Ð,ð	ð €Gõ ˜( F¨J¸Ñ@Ô@€Gà�WÔ×$Ò$¨UÐ$Ñ3Ô3€FØ�zÔ"×)Ò)°%Ð)Ñ8Ô8€HØ˜Ô$×+Ò+°EÐ+Ñ:Ô:€IØ�XÔ×%Ò%¨eÐ%Ñ4Ô4€Fà& w¨zÔ':Ô'?ÀÐ'DÔE€Fˆ?ÑØ(¨°Ô)=Ô)BÀCÐ)GÔH€FÐÑØ" 7¨8Ô#4Ô#9¸3Ð#>Ô?€Fˆ=Ñå�V‰_Œ_€Få�6”>Ñ"Ô"€GØ�W˜Q”Z�L 7¨2¨3¨3¤<Ñ/°'¸!¸B¸$´-Ñ?Ô@€Fà0×7Ò7Øˆv‰¨Ð=�~�~¸2ñô €Gð
 
ˆ	Ø
2Ð
2Ð
2Ð
2­¨q©¬Ð
2Ñ
2Ô
2ñ	3à
DÐ
D°´ÀÀÀÔ1CÐ
DÑ
DÔ
Dñ	Eð õ 
ÝØØØØØØØØØ"ð
	
ñ 
	
ô 
	
ñô ð ð ð r%   ç      à?c                 óÞ  — d|i}t          di |¤Žt          di |¤Žt          di |¤Žt          di |¤Ždœ}t	          | |||¦  «        }|d                              d¬¦  «        }|d                              d¬¦  «        }|d                              d¬¦  «        }	|d                              d¬¦  «        }
||d         j                 }||d         j                 }|	|d         j                 }	|
|d         j                 }
t          j        |||	|
gd	¬
¦  «        }t          |¦  «        }d 
                    d|z  ¦  «        ddddg}t          t          ||ddddddd¬¦	  «	        ¦  «         d S )NÚ	tolerance)ÚcoverageÚpurityro   rp   r›   FrX   rœ   ro   rp   r@   )Úaxisz#Segmentation (tolerance = {0:g} ms)ru   r„   r…   r†   r‡   rw   rˆ   r‰   r:   )r   r   r   r   ra   rZ   r’   ÚpdÚconcatrf   rF   r   r	   )r^   r_   rG   rš   r”   rT   r•   r›   rœ   ro   rp   rZ   rŠ   s                r#   Úsegmentationr      sÅ  € Ø˜IÐ&€Gõ )Ð3Ð3¨7Ð3Ð3Ý$Ð/Ð/ wÐ/Ð/Ý*Ð5Ð5¨WÐ5Ð5Ý$Ð/Ð/ wÐ/Ð/ð	ð €Gõ ˜( F¨J¸Ñ@Ô@€Gà�zÔ"×)Ò)°%Ð)Ñ8Ô8€HØ�XÔ×%Ò%¨eÐ%Ñ4Ô4€FØ˜Ô$×+Ò+°EÐ+Ñ:Ô:€IØ�XÔ×%Ò%¨eÐ%Ñ4Ô4€Fà˜ 
Ô+Ô0Ô1€HØ�G˜HÔ%Ô*Ô+€FØ˜' +Ô.Ô3Ô4€IØ�G˜HÔ%Ô*Ô+€FåŒY˜ &¨)°VÐ<À1ÐEÑEÔE€FÝ�V‰_Œ_€Fð 	.×4Ò4°T¸IÑ5EÑFÔFØØØØð€Gõ 
ÝØØØØØØØØØ"ð
	
ñ 
	
ô 
	
ñô ð ð ð r%   c                 óB  ‡— ||dœ}t          di |¤Žt          di |¤Ždœ}|rt          di |¤Ž|d<   nt          di |¤Ž|d<   t	          | |||¦  «        }|d                              d¬¦  «        Š|d                              d¬¦  «        }	|d                              d¬¦  «        }
|	|d         j        df         ‰d	<   |
|d         j        df         ‰d
<   t          ‰j        ¦  «        }‰|d         g|dd …         z   |dd…         z            Št          ‰¦  «        Šd 
                    |rdndd|z  |rdnd¦  «        }|gˆfd„t          d¦  «        D ¦   «         z   d„ ‰j        dd …         D ¦   «         z   }t          t          ‰|ddddddd¬¦	  «	        ¦  «         d S )Nrj   )rœ   r›   rm   FrX   rœ   r›   rq   )rœ   rq   )r›   rq   r   éþÿÿÿr@   z'Diarization ({0:s}collar = {1:g} ms{2})zgreedy, rw   ru   rv   c                 ó6   •— g | ]}‰j         |         d          ‘ŒS ry   rz   r|   s     €r#   r=   zdiarization.<locals>.<listcomp>l  r}   r%   é   c                 ó:   — g | ]}|d          dk    rdn|d         ‘ŒS r€   r:   r�   s     r#   r=   zdiarization.<locals>.<listcomp>m  rƒ   r%   r„   r…   r†   r‡   rˆ   r‰   r:   )r   r   r   r   ra   rZ   r’   rd   r{   rf   rF   r“   r   r	   )r^   r_   rG   Úgreedyrk   rl   r”   rT   r•   rœ   r›   r{   r–   rŠ   rZ   s                 @r#   Údiarizationr§   G  s.  ø€ ð  °Ð>Ð>€Gõ $Ð.Ð. gÐ.Ð.Ý'Ð2Ð2¨'Ð2Ð2ðð €Gð
 ð ;Ý5Ð@Ð@¸Ð@Ð@ˆ�ÑÐå/Ð:Ð:°'Ð:Ð:ˆ�Ñå˜( F¨J¸Ñ@Ô@€Gà�WÔ×$Ò$¨UÐ$Ñ3Ô3€FØ�XÔ×%Ò%¨eÐ%Ñ4Ô4€FØ�zÔ"×)Ò)°%Ð)Ñ8Ô8€Hà" 7¨8Ô#4Ô#9¸3Ð#>Ô?€Fˆ=ÑØ& w¨zÔ':Ô'?ÀÐ'DÔE€Fˆ?Ñå�6”>Ñ"Ô"€GØ�W˜Q”Z�L 7¨2¨3¨3¤<Ñ/°'¸!¸B¸$´-Ñ?Ô@€Få�V‰_Œ_€Fà7×>Ò>ØÐ$ˆ
ˆ
 "Øˆv‰Ø&Ð.ˆˆ¨Bñô €Gð 
ˆ	Ø
2Ð
2Ð
2Ð
2­¨q©¬Ð
2Ñ
2Ô
2ñ	3à
DÐ
D°´ÀÀÀÔ1CÐ
DÑ
DÔ
Dñ	Eð õ 
ÝØØØØØØØØØ"ð
	
ñ 
	
ô 
	
ñô ð ð ð r%   c                 ó  ‡— ||dœ}t          di |¤Žt          di |¤Žt          di |¤Ždœ}t          | |||¦  «        }|d                              d¬¦  «        Š|d                              d¬¦  «        }|d                              d¬¦  «        }	||d         j        df         ‰d	<   |	|d         j        df         ‰d
<   t          ‰j        ¦  «        }
‰|
d         g|
dd …         z   |
dd…         z            Št          ‰¦  «        Šd 	                    d|z  |rdnd¦  «        }|gˆfd„t          d¦  «        D ¦   «         z   d„ ‰j        dd …         D ¦   «         z   }t          t          ‰|ddddddd¬¦	  «	        ¦  «         d S )Nrj   )rm   ro   rp   rm   FrX   ro   rp   rq   rr   rs   r   r¢   r@   z%Identification (collar = {0:g} ms{1})ru   rv   rw   c                 ó6   •— g | ]}‰j         |         d          ‘ŒS ry   rz   r|   s     €r#   r=   z"identification.<locals>.<listcomp>œ  r}   r%   r¤   c                 ó:   — g | ]}|d          dk    rdn|d         ‘ŒS r€   r:   r�   s     r#   r=   z"identification.<locals>.<listcomp>�  rƒ   r%   r„   r…   r†   r‡   rˆ   r‰   r:   )r   r   r   ra   rZ   r’   rd   r{   rf   rF   r“   r   r	   )r^   r_   rG   rk   rl   r”   rT   r•   ro   rp   r{   r–   rŠ   rZ   s                @r#   Úidentificationr«     sö  ø€ Ø°Ð>Ð>€Gõ )Ð3Ð3¨7Ð3Ð3Ý,Ð7Ð7¨wÐ7Ð7Ý&Ð1Ð1¨Ð1Ð1ðð €Gõ ˜( F¨J¸Ñ@Ô@€Gà�WÔ×$Ò$¨UÐ$Ñ3Ô3€FØ˜Ô$×+Ò+°EÐ+Ñ:Ô:€IØ�XÔ×%Ò%¨eÐ%Ñ4Ô4€Fà(¨°Ô)=Ô)BÀCÐ)GÔH€FÐÑØ" 7¨8Ô#4Ô#9¸3Ð#>Ô?€Fˆ=Ñå�6”>Ñ"Ô"€GØ�W˜Q”Z�L 7¨2¨3¨3¤<Ñ/°'¸!¸B¸$´-Ñ?Ô@€Få�V‰_Œ_€Fà5×<Ò<Øˆv‰¨Ð=�~�~¸2ñô €Gð
 
ˆ	Ø
2Ð
2Ð
2Ð
2­¨q©¬Ð
2Ñ
2Ô
2ñ	3à
DÐ
D°´ÀÀÀÔ1CÐ
DÑ
DÔ
Dñ	Eð õ 
ÝØØØØØØØØØ"ð
	
ñ 
	
ô 
	
ñô ð ð ð r%   c                 ó6  — |sg }d| _          t          | d                     |¬¦  «        ¦  «        ¦   «         }t          t	          ||¦  «        ¦  «        D �]ª\  }\  }	}
	 |	d         |
d         k    sJ ‚nE# t
          $ r8}d}t          |                     ||
d         |	d         ¬¦  «        ¦  «        ‚d }~ww xY w	 |	d         |
d         k    sJ ‚nE# t
          $ r8}d}t          |                     ||
d         |	d         ¬¦  «        ¦  «        ‚d }~ww xY w	 t          |
d	         ¦  «        d
k    sJ ‚n7# t
          $ r*}d}t          |                     |¬¦  «        ¦  «        ‚d }~ww xY wt	          |
d	         Ž \  }}|s|                     |¦  «         |	d         }	 t          |¦  «        |j
        k    sJ ‚�Œa# t
          $ r>}d}t          |                     |t          |¦  «        |j
        ¬¦  «        ¦  «        ‚d }~ww xY w|s�t          j        |¦  «        }t          j        d„ t          ddd¦  «        D ¦   «         ¦  «        }t          j        |t          j        ddd¦  «        d|d d d…         z
  g¦  «        }t          j        ||¦  «        }|st#          |¬¦  «        }nt#          |¬¦  «        } t          | d                     |¬¦  «        ¦  «        ¦   «         }t          t	          ||¦  «        ¦  «        D ]R\  }\  }	}
|�.|	d                              ¦   «         }|d
k    }|r ||¦  «        rŒ8|	d         } |||
d	         ¦  «         ŒS|�s|                     d¬¦  «        \  }}}}}d                     |¬¦  «        }d}t)          |d¬¦  «        5 }|                     d¦  «         t	          |||¦  «        D ]3\  }}} |                     ||| ¬ ¦  «        }!|                     |!¦  «         Œ4	 d d d ¦  «         n# 1 swxY w Y   t-          d!                     |¬"¦  «        ¦  «         |                     d#¬¦  «        \  }}}}}}"}#d$                     |¬¦  «        }$d%}%t)          |$d¬¦  «        5 }|                     d&¦  «         t	          ||||"|#¦  «        D ]S\  }}} }&}'|dk    rŒt          j        |&¦  «        rŒ$|%                     ||| |&|'¬'¦  «        }!|                     |!¦  «         ŒT	 d d d ¦  «         n# 1 swxY w Y   t-          d(                     |$¬)¦  «        ¦  «         t-          ¦   «          t-          d*                     d|z  ¬+¦  «        ¦  «         d S |                     ¦   «         }(g })t1          |(¦  «        D �]}*|(|*         }+d,|*i},|D ]³}-|+|-         \  }}}}}||,|-<   d-                     ||*|-¬.¦  «        }d}t)          |d¬¦  «        5 }|                     d¦  «         t	          |||¦  «        D ]3\  }}} |                     ||| ¬ ¦  «        }!|                     |!¦  «         Œ4	 d d d ¦  «         n# 1 swxY w Y   Œ´|)                     |,¦  «         d/                     ||*¬0¦  «        }t-          d!                     |¬"¦  «        ¦  «         �Œt-          ¦   «          dt2          j                             |)¦  «                             d,¦  «        |         z  }.t-          t;          |.d1d,gd2„ |D ¦   «         z   d3d4d5d6d7d¬8¦	  «	        ¦  «         d S )9NFz{subset}_trial)r_   Úmodel_idzFtarget mismatch in trial #{i} (found: {found}, should be: {should_be}))rg   ÚfoundÚ	should_ber*   zDfile mismatch in trial #{i} (found: {found}, should be: {should_be})Úscoresr   z#empty list of scores in trial #{i}.)rg   Útry_withzQincorrect timestamp in trial #{i} (found: {found:g}, should be: >= {should_be:g})c                 óF   — g | ]}t          d d¦  «        D ]}|d| z  z  ‘ŒŒS )r@   é
   )r“   )r;   ÚeÚns      r#   r=   zspotting.<locals>.<listcomp>ñ  s7   € ÐKÐKÐK ½eÀAÀr¹l¼lÐKÐK¸ˆQ�˜˜‘‰^ÐKÐKÐKÐKr%   r~   r@   éÿÿÿÿgš™™™™™¹?g      Y@éd   )Ú
thresholds)Ú	latenciesr/   )Úreturn_latencyz{output_prefix}.det.txt)Úoutput_prefixz{t:.9f} {p:.9f} {n:.9f}
Úw©Úmodez4# threshold false_positive_rate false_negative_rate
)ÚtÚprµ   z> {det_path})Údet_pathTz{output_prefix}.lcy.txtz({t:.9f} {p:.9f} {n:.9f} {s:.6f} {a:.6f}
zU# threshold false_positive_rate false_negative_rate speaker_latency absolute_latency
)r¿   rÀ   rµ   ÚsÚaz> {lcy_path})Úlcy_pathzEER% = {eer:.2f})ÚeerÚlatencyz*{output_prefix}.det.{key}.{latency:g}s.txt)r»   rO   rÆ   z!{output_prefix}.det.{key}.XXs.txt)r»   rO   r„   c                 ó:   — g | ]}d                       |¬¦  «        ‘ŒS )zEER% @ {l:g}s)Úl)rF   ©r;   rÈ   s     r#   r=   zspotting.<locals>.<listcomp>T  s)   € Ð&VÐ&VÐ&VÀq ×'=Ò'=ÀÐ'=Ñ'BÔ'BÐ&VÐ&VÐ&Vr%   r…   r†   r‡   rw   rˆ   )r‹   rŠ   rŒ   r�   rŽ   r�   r�   r‘   )r§   r]   rF   Ú	enumerateÚzipÚAssertionErrorrE   rB   ÚappendÚminÚstartÚnpÚconcatenateÚarrayr“   ÚarangeÚ
percentiler   ÚdurationÚ	det_curveÚopenÚwriter   ÚisnanÚsortedrž   Ú	DataFrameÚ	from_dictÚ	set_indexr	   )/r^   r_   r¹   rG   r»   Úfilter_funcÚScoresÚtrialsrg   Úcurrent_trialrJ   r´   rI   Ú
timestampsr°   r±   ÚepsilonsrÔ   r¸   rP   ÚspeechÚtarget_trialr/   ÚfprÚfnrrÅ   Ú_rÁ   Údet_tmplÚfpr¿   rÀ   rµ   ÚlineÚspeaker_lcyÚabsolute_lcyrÄ   Úlcy_tmplrÂ   rÃ   ÚresultsÚlogsrO   ÚresultÚlogrÆ   Údfs/                                                  r#   Úspottingrô   ¯  s	  € Øð Øˆà €HÔàF�W�XÐ/×6Ò6¸fÐ6ÑEÔEÑFÔFÑHÔH€FÝ*3µC¸À
Ñ4KÔ4KÑ*LÔ*Lð 5ñ 5Ñ&ˆÑ&ˆM˜:ð	Ø  Ô,°
¸:Ô0FÒFÐFÐFÐFÐFøÝð 	ð 	ð 	ð;ð õ Ø—
’
ØØ$ ZÔ0Ø+¨JÔ7ð ñ ô ñô ð øøøøð	øøøð		Ø  Ô'¨:°eÔ+<Ò<Ð<Ð<Ð<Ð<øÝð 	ð 	ð 	ð;ð õ Ø—
’
˜Q j°Ô&7À=ÐQVÔCW�
ÑXÔXñô ð øøøøð	øøøð	.Ý�z (Ô+Ñ,Ô,¨qÒ0Ð0Ð0Ð0Ð0øÝð 	.ð 	.ð 	.Ø7ˆCÝ˜SŸZšZ¨!˜Z™_œ_Ñ-Ô-Ð-øøøøð	.øøøõ ! *¨XÔ"6Ð7Ñˆ
�Fàð 	"Ø�MŠM˜&Ñ!Ô!Ð!ð ! Ô,ˆð		Ý�z‘?”? h¤nÒ4Ð4Ð4Ð4Ñ4øÝð 	ð 	ð 	ðBð õ Ø—
’
˜Q¥c¨*¡o¤oÀÄ�
ÑPÔPñô ð øøøøð	øøøð ð 	7å” Ñ'Ô'ˆÝ”8ØKÐK¥U¨1¨a°¡_¤_ÐKÑKÔKñ
ô 
ˆõ ”^Ø•r”y  e¨SÑ1Ô1°3¸À$À$ÀBÀ$¼Ñ3GÐHñ
ô 
ˆ
õ ”] 6¨:Ñ6Ô6ˆ
àð @Ý*°jÐAÑAÔAˆˆõ +°YÐ?Ñ?Ô?ˆàF�W�XÐ/×6Ò6¸fÐ6ÑEÔEÑFÔFÑHÔH€FÝ*3µC¸À
Ñ4KÔ4KÑ*LÔ*Lð 	0ð 	0Ñ&ˆÑ&ˆM˜:àÐ"Ø" ;Ô/×8Ò8Ñ:Ô:ˆFØ! Aš:ˆLØð   ¨FÑ 3Ô 3ð Øà! +Ô.ˆ	Øˆˆy˜* XÔ.Ñ/Ô/Ð/Ð/àñ R
à'-×'7Ò'7ÀuÐ'7Ñ'MÔ'MÑ$ˆ
�C˜˜c 1ð -×3Ò3À-Ð3ÑPÔPˆØ.ˆÝ�( Ð%Ñ%Ô%ð 	¨Ø�HŠHÐLÑMÔMÐMÝ˜z¨3°Ñ4Ô4ð ð ‘��1�aØ—’¨¨a°1�Ñ5Ô5�Ø—’˜‘”��ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ 	ˆn×#Ò#¨XÐ#Ñ6Ô6Ñ7Ô7Ð7à@F×@PÒ@PØð AQñ A
ô A
Ñ=ˆ
�C˜˜a  K°ð
 -×3Ò3À-Ð3ÑPÔPˆØ>ˆÝ�( Ð%Ñ%Ô%ð 
	¨Ø�HŠHØhñô ð õ "% Z°°c¸;ÈÑ!UÔ!Uð ð ‘��1�a˜˜AØ˜’6�6ØÝ”8˜A‘;”;ð ØØ—’¨¨a°1¸¸Q�Ñ?Ô?�Ø—’˜‘”��ðð	
	ð 
	ð 
	ñ 
	ô 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	øøøð 
	ð 
	ð 
	ð 
	õ 	ˆn×#Ò#¨XÐ#Ñ6Ô6Ñ7Ô7Ð7å‰ŒˆÝÐ ×'Ò'¨C°#©IÐ'Ñ6Ô6Ñ7Ô7Ð7Ð7Ð7ð ×"Ò"Ñ$Ô$ˆØˆÝ˜'‘?”?ð 	<ñ 	<ˆCà˜S”\ˆFØ˜cÐ"ˆCØ$ð 'ð '�Ø/5°g¬Ñ,�
˜C  c¨1ð  #��G‘àG×NÒNØ"/°SÀ'ð Oñ ô �ð 7�Ý˜(¨Ð-Ñ-Ô-ð '°Ø—H’HÐTÑUÔUÐUÝ#& z°3¸Ñ#<Ô#<ð 'ð '™˜˜1˜aØ'Ÿš°°a¸1˜Ñ=Ô=˜ØŸš ™œ˜˜ð'ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'øð
 �KŠK˜ÑÔÐØ:×AÒAØ+°ð Bñ ô ˆHõ �.×'Ò'°Ð'Ñ:Ô:Ñ;Ô;Ð;Ñ;å‰ŒˆØ•2”<×)Ò)¨$Ñ/Ô/×9Ò9¸)ÑDÔDÀYÔOÑOˆÝÝØØ!Ø"˜Ð&VÐ&VÈIÐ&VÑ&VÔ&VÑVØØ"ØØØ#Ø!&ð
ñ 
ô 
ñ	
ô 	
ð 	
ð 	
ð 	
s™   ÁA4Á4
B6Á>3B1Â1B6Â:CÃ
DÃ3DÄDÄD1Ä1
E%Ä;%E Å E%ÆF6Æ6
G>Ç 9G9Ç9G>ÎAO?Ï?PÐPÑ4A=S>Ó>TÔT×AY Ù YÙYc                  óÎ  ‡‡‡‡— t          t          d¬¦  «        } t          | d         ¦  «        }| d         }t          | d         ¦  «        }| d         }t          ¦   «         }| d         r!|rd}t	          j        |¦  «         d	t          i}t          ||¬
¦  «        }| d         }| d         rÃ| d         }	t          |	d¬¦  «        5 }
t          j
        |
¦  «        }d d d ¦  «         n# 1 swxY w Y   |	d d…         }d„ | d         D ¦   «         }| d         }|r-ddlmŠmŠm}  |d¦  «        Šg Šˆˆˆfd„|D ¦   «         Šˆfd„}nd }t          ||||||¬¦  «         t	          j        d¦  «         | d         }	 t!          |¦  «        }nF# t"          $ r d|› d�}t	          j        |¦  «         Y n  d|› d�}t	          j        |¦  «         Y nxY w| d         rt%          |||||¬ ¦  «         | d         rt%          |||||¬ ¦  «         | d!         rt'          ||||¬"¦  «         | d#         r| d$         }t)          ||||||¬%¦  «         | d&         rt+          |||||¬ ¦  «         d S d S )'NÚ
Evaluation)Úversionz--collarz--skip-overlapz--tolerancez<database.task.protocol>r0   zSOption --skip-overlap is not supported when evaluating overlapped speech detection.r)   )Úpreprocessorsz--subsetrô   z<hypothesis.json>Úrr½   éûÿÿÿc                 ó,   — g | ]}t          |¦  «        ‘ŒS r:   )ÚfloatrÉ   s     r#   r=   zmain.<locals>.<listcomp>€  s   € Ð>Ð>Ð> !•U˜1‘X”XÐ>Ð>Ð>r%   z	--latencyz--filterr   )ÚsympifyÚlambdifyÚsymbolsrä   c                 ó<   •— g | ]} ‰‰g ‰|¦  «        ¦  «        ‘ŒS r:   r:   )r;   Ú
expressionrþ   rä   rý   s     €€€r#   r=   zmain.<locals>.<listcomp>ˆ  s>   ø€ ð ð ð Ø<F��˜&˜ 7 7¨:Ñ#6Ô#6Ñ7Ô7ðð ð r%   c                 ó<   •‡ — t          ˆ fd„‰D ¦   «         ¦  «        S )Nc              3   ó0   •K  — | ]} |‰¦  «         V — Œd S ©Nr:   )r;   Úfuncrä   s     €r#   ú	<genexpr>z)main.<locals>.<lambda>.<locals>.<genexpr>‹  s-   øè è € Ð,TÐ,T¸t¨d¨d°6©l¬l¨]Ð,TÐ,TÐ,TÐ,TÐ,TÐ,Tr%   )Úany)rä   Úfilter_funcss   `€r#   ú<lambda>zmain.<locals>.<lambda>‹  s%   øø€ ­Ð,TÐ,TÐ,TÐ,TÀ|Ð,TÑ,TÔ,TÑ)TÔ)T€ r%   )rÞ   z<hypothesis.rttm>zCould not find file ú.zFailed to load z:, please check its format (only RTTM files are supported).r—   rj   r    )rš   r§   z--greedy)r¦   rk   rl   r«   )r   Ú__doc__rü   ÚdictÚsysÚexitr7   r   r×   ÚjsonÚloadÚsympyrý   rþ   rÿ   rô   r   ÚFileNotFoundErrorr—   r    r§   r«   )Ú	argumentsrk   rl   rš   Úprotocol_namerø   rI   r^   r_   Úhypothesis_jsonrê   rG   r»   r¹   Úfiltersrÿ   rÞ   Úhypothesis_rttmr¦   r  rþ   rä   rý   s                      @@@@r#   Úmainr  _  sÁ  øøøø€ Ý•w¨Ð5Ñ5Ô5€Iå�9˜ZÔ(Ñ)Ô)€FØÐ-Ô.€LÝ�i Ô.Ñ/Ô/€Ið Ð8Ô9€Må‘F”F€MØ�Ôð 3Øð 	ð?ð õ ŒH�S‰MŒMˆMØ%¥zÐ2ˆå˜M¸ÐGÑGÔG€Hð �zÔ"€Fà�Ôð  à#Ð$7Ô8ˆÝ�/¨Ð,Ñ,Ô,ð 	'°Ýœ 2™œˆJð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð (¨¨¨Ô,ˆà>Ð> y°Ô'=Ð>Ñ>Ô>ˆ	à˜JÔ'ˆØð 
	Ø8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8à�W˜XÑ&Ô&ˆFØˆLðð ð ð ð ð ØJQðñ ô ˆLð UÐTÐTÐTˆKˆKàˆKåØØØØØØ#ð	
ñ 	
ô 	
ð 	
õ 	Œ�‰ŒˆàÐ 3Ô4€OðÝ˜Ñ/Ô/ˆ
ˆ
øåð ð ð Ø7 _Ð7Ð7Ð7ˆÝŒ�‰Œˆˆˆðð0˜oð 0ð 0ð 0ð 	õ 	Œ�‰Œˆˆˆøøøà�Ôð 
ÝØ�f˜j°Àlð	
ñ 	
ô 	
ð 	
ð �Ôð 
ÝØ�f˜j°Àlð	
ñ 	
ô 	
ð 	
ð �Ô ð HÝ�X˜v z¸YÐGÑGÔGÐGà�Ôð 	
Ø˜:Ô&ˆÝØØØØØØ%ð	
ñ 	
ô 	
ð 	
ð Ð!Ô"ð 
ÝØ�f˜j°Àlð	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð
ð 
s$   ÃC'Ã'C+Ã.C+Å9F	 Æ	$GÆ/GÚ__main__)NN)rh   F)r˜   )Frh   Fr  )7r  r[   r  r  rC   ÚnumpyrÐ   Úpandasrž   r   Úpyannote.corer   r   Úpyannote.databaser   Úpyannote.database.utilr   r   r	   Úpyannote.metrics.detectionr
   r   r   r   Úpyannote.metrics.diarizationr   r   r   r   Úpyannote.metrics.identificationr   r   r   Úpyannote.metrics.segmentationr   r   r   r   Úpyannote.metrics.spottingr   r$   Úshowwarning_origr  r7   rK   rU   ra   rf   r—   r    r§   r«   rô   r  r   r:   r%   r#   ú<module>r%     s&  ðð:>ð >ð@ Ð Ð Ð Ø €€€Ø 
€
€
€
Ø €€€à Ð Ð Ð Ø Ð Ð Ð à Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø "Ð "Ð "Ð "Ð "Ð "à *Ð *Ð *Ð *Ð *Ð *Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð à 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø <Ð <Ð <Ð <Ð <Ð <Ø =Ð =Ð =Ð =Ð =Ð =Ø :Ð :Ð :Ð :Ð :Ð :Ø CÐ CÐ CÐ CÐ CÐ CØ CÐ CÐ CÐ CÐ CÐ CØ CÐ CÐ CÐ CÐ CÐ CØ @Ð @Ð @Ð @Ð @Ð @Ø >Ð >Ð >Ð >Ð >Ð >Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø <Ð <Ð <Ð <Ð <Ð <Ø <Ð <Ð <Ð <Ð <Ð <Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?àÔ'Ð ð1ð 1ð 1ð #€Ô ð-˜Tð - jð -ð -ð -ð -ð2'8ð '8ð '8ðTð ð ð ðRð Rð RðBð Bð Bð0ð 0ð 0ð 0ðf,ð ,ð ,ð ,ð` JOð5ð 5ð 5ð 5ðp-ð -ð -ð -ð`m
ð m
ð m
ð m
ð`f
ð f
ð f
ðR ˆzÒÐØ€D�F„F€F€F€Fð Ðr%   