Ë
    ÿÍ:j?,  ã                   óÆ   — d dl Z d dlmZmZmZ d dlZd dlmc 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 d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ  G d„ d«      Zy)é    N)ÚDictÚSequenceÚUnion)ÚProblemÚ
ResolutionÚSpecifications)ÚEqualErrorRate)Úcreate_rng_for_worker)ÚSegment)ÚSpeakerDiarizationProtocolÚSpeakerVerificationProtocol)Údefault_collate)ÚMetric)ÚBinaryAUROC)Útqdmc                   óD  — e Zd ZdZedefd„«       Zej                  defd„«       Zedefd„«       Zej                  defd„«       Zedefd	„«       Z	e	j                  d
efd„«       Z	dd„Z
deeee   eeef   f   fd„Zd„ Zd„ Zdd„Zdefd„Zdefd„Zd„ Zd„ Zdefd„Zy)Ú)SupervisedRepresentationLearningTaskMixinz6Methods common to most supervised representation tasksÚreturnc                 ód   — t        | d«      r| j                  S | j                  | j                  z  S )NÚnum_classes_per_batch_)Úhasattrr   Ú
batch_sizeÚnum_chunks_per_class©Úselfs    úz/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/pyannote/audio/tasks/embedding/mixins.pyÚnum_classes_per_batchz?SupervisedRepresentationLearningTaskMixin.num_classes_per_batch0   s.   € ä�4Ð1Ô2Ø×.Ñ.Ð.Ø�‰ $×";Ñ";Ñ;Ð;ó    r   c                 ó   — || _         y ©N)r   )r   r   s     r   r   z?SupervisedRepresentationLearningTaskMixin.num_classes_per_batch6   s
   € à&;ˆÕ#r   c                 ód   — t        | d«      r| j                  S | j                  | j                  z  S )NÚnum_chunks_per_class_)r   r"   r   r   r   s    r   r   z>SupervisedRepresentationLearningTaskMixin.num_chunks_per_class:   s.   € ä�4Ð0Ô1Ø×-Ñ-Ð-Ø�‰ $×"<Ñ"<Ñ<Ð<r   r   c                 ó   — || _         y r    )r"   )r   r   s     r   r   z>SupervisedRepresentationLearningTaskMixin.num_chunks_per_class@   s
   € à%9ˆÕ"r   c                 ód   — t        | d«      r| j                  S | j                  | j                  z  S )NÚbatch_size_)r   r%   r   r   r   s    r   r   z4SupervisedRepresentationLearningTaskMixin.batch_sizeD   s/   € ä�4˜Ô'Ø×#Ñ#Ð#Ø×(Ñ(¨4×+EÑ+EÑEÐEr   r   c                 ó   — || _         y r    )r%   )r   r   s     r   r   z4SupervisedRepresentationLearningTaskMixin.batch_sizeJ   s
   € à%ˆÕr   Nc           	      óÐ  — t        «       | _        d| j                  j                  › d�}t	        | j                  j                  «       |d¬«      D ]·  }|d   j                  «       D ]Ÿ  }|d   j                  |«      D �cg c]  }|j                  | j                  kD  r|‘Œ }}|sŒ@t        d„ |D «       «      }|| j                  vrt        «       | j                  |<   | j                  |   j                  |d   |d   ||d	œ«       Œ¡ Œ¹ t        t        j                  t         j"                  | j                  | j                  t%        | j                  «      ¬
«      | _        y c c}w )NzLoading z training labelsÚfile)ÚiterableÚdescÚunitÚ
annotationc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr    )Úduration)Ú.0Úsegments     r   ú	<genexpr>zBSupervisedRepresentationLearningTaskMixin.setup.<locals>.<genexpr>c   s   è ø€ ÒL°G˜w×/Õ/ÑLùó   ‚ÚuriÚaudio)r3   r4   r.   Úspeech_turns)ÚproblemÚ
resolutionr.   Úmin_durationÚclasses)ÚdictÚ_trainÚprotocolÚnamer   ÚtrainÚlabelsÚlabel_timeliner.   r8   ÚsumÚlistÚappendr   r   ÚREPRESENTATIONr   ÚCHUNKÚsortedÚspecifications)r   Ústager*   ÚfÚklassr0   r5   r.   s           r   Úsetupz/SupervisedRepresentationLearningTaskMixin.setupN   sT  € ô “fˆŒà˜$Ÿ-™-×,Ñ,Ð-Ð-=Ð>ˆÜ˜tŸ}™}×2Ñ2Ó4¸4ÀfÔMò 	ˆAØ˜<™×/Ñ/Ó1ò �ð $% \¡?×#AÑ#AÀ%Ó#Hö àØ×'Ñ'¨$×*;Ñ*;Ò;ò ð �ð  ñ $Øô ÑL¸|ÔLÓL�ð  §¡Ñ+Ü)-«�D—K‘K Ñ&à—‘˜EÑ"×)Ñ)à  ™xØ!" 7¡Ø$,Ø(4ñ	õñ'ð	ô: -Ü×*Ñ*Ü!×'Ñ'Ø—]‘]Ø×*Ñ*Ü˜4Ÿ;™;Ó'ô
ˆÕùò5 s   Á?"E#c                 ó4   — t        dd¬«      t        d¬«      gS )NTF)Úcompute_on_cpuÚ	distances)rM   )r	   r   r   s    r   Údefault_metricz8SupervisedRepresentationLearningTaskMixin.default_metricz   s    € ô ¨$¸%Ô@Ü tÔ,ð
ð 	
r   c           
   #   ó   K  — t        | j                  «      }t        | j                  j                  «      }|j                  | j                  | j                  «      }d}	 |j                  |«       |D �]  }| j                  j                  j                  |«      }t        | j                  «      D �]Ê  }|j                  | j                  |   | j                  |   D �cg c]  }|d   ‘Œ	 c}d¬«      ^}	}|j                  |	d   |	d   D �
cg c]  }
|
j                  ‘Œ c}
d¬«      ^}}|j                  |k  r�| j                  j                  j                  |	|«      \  }}t!        j"                  || j                  j                  j$                  z  «      |j&                  d   z
  }|j)                  d|«      }t+        j,                  ||||z
  f«      }na|j                  |j.                  |j0                  |z
  «      }t3        |||z   «      }| j                  j                  j                  |	|«      \  }}||dœ–— |dz  }|| j4                  k(  s�Œ£|j                  | j                  | j                  «      }d}�ŒÍ �Œ �Œ$c c}w c c}
w ­w)z¤Iterate over training samples

        Yields
        ------
        X: (time, channel)
            Audio chunks.
        y: int
            Speaker index.
        r   r.   é   )ÚweightsÚkr5   )ÚXÚy)r
   ÚmodelrB   rG   r9   Úuniformr8   r.   ÚshuffleÚindexÚranger   Úchoicesr;   r4   ÚcropÚmathÚfloorÚsample_rateÚshapeÚrandintÚFÚpadÚstartÚendr   r   )r   Úrngr9   Úbatch_durationÚnum_samplesrJ   rU   Ú_rI   r(   ÚsÚspeech_turnrT   Únum_missing_framesÚleft_padÚ
start_timeÚchunks                    r   Útrain__iter__z7SupervisedRepresentationLearningTaskMixin.train__iter__‚   sd  è ø€ ô $ D§J¡JÓ/ˆä�t×*Ñ*×2Ñ2Ó3ˆð Ÿ™ T×%6Ñ%6¸¿¹ÓFˆØˆàð
 �K‰K˜Ô à ó 0(�à×'Ñ'×/Ñ/×5Ñ5°eÓ<�ô ˜t×8Ñ8Ó9ó +(�Aà"Ÿ{™{ØŸ™ EÑ*Ø8<¿¹ÀEÑ8JÖ K°1  :£Ò KØð  +ó  �H�D˜1ð '*§k¡kØ˜^Ñ,Ø59¸.Ñ5IÖ J° §£Ò JØð '2ó '�O�K !ð #×+Ñ+¨nÒ<Ø#Ÿz™z×/Ñ/×4Ñ4°T¸;ÓG™˜˜1ä ŸJ™J ~¸¿
¹
×8HÑ8H×8TÑ8TÑ'TÓUØŸg™g a™jñ)ð +ð $'§;¡;¨qÐ2DÓ#E˜ÜŸE™E ! hÐ0BÀXÑ0MÐ%NÓO™ð &)§[¡[Ø'×-Ñ-¨{¯©ÀÑ/Oó&˜
ô !(¨
°JÀÑ4OÓ P˜à#Ÿz™z×/Ñ/×4Ñ4Ø Ø!ó ™˜˜1ð
 !"¨Ñ*Ò*à 1Ñ$�KØ" d§o¡oÔ5Ø),¯©°T×5FÑ5FÈÏÉÓ)V˜Ø&'šòW+(ð0(ñ ùò  !Lùò !Kùs%   ‚CJÃJÃ+!JÄJ	ÄD3JÉ:Jc                 óæ   — t        d„ | j                  j                  «       D «       «      }d| j                  | j                  z   z  }t        | j                  t        j                  ||z  «      «      S )Nc              3   ó4   K  — | ]  }|D ]	  }|d    –— Œ Œ y­w)r.   N© )r/   ÚdataÚdatums      r   r1   zISupervisedRepresentationLearningTaskMixin.train__len__.<locals>.<genexpr>Ð   s,   è ø€ ò 
Ø"&ÈDò
ØCHˆE�*Õð
Øñ
ùr2   ç      à?)	rA   r;   Úvaluesr8   r.   Úmaxr   r]   Úceil)r   r.   Úavg_chunk_durations      r   Útrain__len__z6SupervisedRepresentationLearningTaskMixin.train__len__Ï   sb   € Üñ 
Ø*.¯+©+×*<Ñ*<Ó*>ô
ó 
ˆð ! D×$5Ñ$5¸¿¹Ñ$EÑFÐÜ�4—?‘?¤D§I¡I¨hÐ9KÑ.KÓ$LÓMÐMr   c                 óä   — t        |«      }|dk(  r_| j                  j                  d¬«       | j                  |d   | j                  j                  j
                  ¬«      }|j                  |d<   |S )Nr>   T)ÚmoderT   )Úsamplesr_   )r   Úaugmentationr>   rV   Úhparamsr_   r~   )r   ÚbatchrH   ÚcollatedÚ	augmenteds        r   Ú
collate_fnz4SupervisedRepresentationLearningTaskMixin.collate_fnÖ   sp   € Ü" 5Ó)ˆà�GÒØ×Ñ×#Ñ#¨Ð#Ô.Ø×)Ñ)Ø  ™Ø ŸJ™J×.Ñ.×:Ñ:ð *ó ˆIð &×-Ñ-ˆH�S‰Màˆr   Ú	batch_idxc                 óâ   — |d   |d   }}| j                   j                  | j                  |«      |«      }t        j                  |«      ry | j                   j	                  d|dddd¬«       d|iS )NrT   rU   z
loss/trainFT©Úon_stepÚon_epochÚprog_barÚloggerÚloss)rV   Ú	loss_funcÚtorchÚisnanÚlog)r   r�   r…   rT   rU   rŒ   s         r   Útraining_stepz7SupervisedRepresentationLearningTaskMixin.training_stepã   su   € Ø�S‰z˜5 ™:ˆ1ˆØ�z‰z×#Ñ# D§J¡J¨q£M°1Ó5ˆô �;‰;�tÔØà�
‰
�‰ØØØØØØð 	ô 	
ð ˜ˆ~Ðr   Úprepared_dictc                 ó†   — t        | j                  t        «      r't        | j                  j	                  «       «      |d<   y y )NÚ
validation)Ú
isinstancer<   r   rB   Údevelopment_trial)r   r’   s     r   Úprepare_validationz<SupervisedRepresentationLearningTaskMixin.prepare_validationö   s3   € Ü�d—m‘mÔ%@ÔAÜ*.¨t¯}©}×/NÑ/NÓ/PÓ*QˆM˜,Ò'ð Br   c                 ó  — t        | j                  t        «      �rW| j                  d   |   }t	        «       }dD �]+  }|d|d›�   }| j
                  j                  j                  |«      }|| j                  kD  r\t        d|z  d| j                  z  z
  d|z  d| j                  z  z   «      }| j
                  j                  j                  ||«      \  }}n†| j
                  j                  |«      \  }}t        j                  | j                  | j
                  j                  j                  z  «      |j                  d   z
  }	t        j                   |d|	f«      }||d|d›�<   �Œ. |d	   |d
<   |S t        | j                  t"        «      ry y )Nr”   )rQ   é   r(   Údrv   rQ   r   rT   Ú	referencerU   )r•   r<   r   Úprepared_datar:   rV   r4   Úget_durationr.   r   r\   r]   r^   r_   r`   rb   rc   r   )
r   ÚidxÚtrialrt   r(   r.   ÚmiddlerT   ri   rl   s
             r   Úval__getitem__z8SupervisedRepresentationLearningTaskMixin.val__getitem__ú   ss  € Ü�d—m‘mÔ%@ÕAØ×&Ñ& |Ñ4°SÑ9ˆEä“6ˆDØó &�Ø˜t C¨ 7˜^Ñ,�ØŸ:™:×+Ñ+×8Ñ8¸Ó>�Ø˜dŸm™mÒ+Ü$Ø˜h™¨¨t¯}©}Ñ)<Ñ<Ø˜h™¨¨t¯}©}Ñ)<Ñ<ó�Fð  Ÿ:™:×+Ñ+×0Ñ0°°vÓ>‘D�A‘qàŸ:™:×+Ñ+¨DÓ1‘D�A�qäŸ
™
 4§=¡=°4·:±:×3CÑ3C×3OÑ3OÑ#OÓPØŸ'™' !™*ñ%ð 'ô Ÿ™˜a !Ð%7Ð!8Ó9�AØ$%��q˜˜Q˜�[Ó!ð!&ð" ˜kÑ*ˆD�‰IàˆKä˜Ÿ™Ô'AÔBØð Cr   c                 óž   — t        | j                  t        «      rt        | j                  d   «      S t        | j                  t
        «      ryy )Nr”   r   )r•   r<   r   Úlenrœ   r   r   s    r   Ú
val__len__z4SupervisedRepresentationLearningTaskMixin.val__len__  s?   € Ü�d—m‘mÔ%@ÔAÜ�t×)Ñ)¨,Ñ7Ó8Ð8ä˜Ÿ™Ô'AÔBØð Cr   c                 óê  — t        | j                  t        «      rÍt        j                  «       5  | j                  |d   «      j                  «       }| j                  |d   «      j                  «       }t        j                  ||«      }d d d «       |d   }| j
                  j                  |«       | j
                  j                  | j
                  j                  dddd¬«       y y # 1 sw Y   Œ`xY w)NÚX1ÚX2rU   FTr‡   )r•   r<   r   rŽ   Úno_gradrV   Údetachrb   Úcosine_similarityÚvalidation_metricÚlog_dict)r   r�   r…   Úemb1Úemb2Úy_predÚy_trues          r   Úvalidation_stepz9SupervisedRepresentationLearningTaskMixin.validation_step  sÌ   € Ü�d—m‘mÔ%@ÔAÜ—‘“ñ 9Ø—z‘z %¨¡+Ó.×5Ñ5Ó7�Ø—z‘z %¨¡+Ó.×5Ñ5Ó7�Ü×,Ñ,¨T°4Ó8�÷9ð
 ˜3‘ZˆFØ�J‰J×(Ñ(¨°Ô8à�J‰J×ÑØ—
‘
×,Ñ,ØØØØð  õ ð B÷9ð 9ús   ¯AC)Ã)C2r    )r>   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚpropertyÚintr   Úsetterr   r   rK   r   r   r   r   ÚstrrO   rp   r{   r„   r‘   r—   r¡   r¤   r±   rs   r   r   r   r   +   s+  „ Ù@ð ð< sò <ó ð<ð
 ×!Ñ!ð<¸3ò <ó "ð<ð ð= cò =ó ð=ð
 × Ñ ð:¸ò :ó !ð:ð ðF˜Cò Fó ðFð
 ×Ñð& Sò &ó ð&ó*
ðX
à	ˆv�x Ñ'¨¨c°6¨kÑ):Ð:Ñ	;ó
òK(òZNóð¨có ð&R°ó Ròò:ð°ô r   r   )r]   Útypingr   r   r   rŽ   Útorch.nn.functionalÚnnÚ
functionalrb   Úpyannote.audio.core.taskr   r   r   Ú*pyannote.audio.torchmetrics.classificationr	   Úpyannote.audio.utils.randomr
   Úpyannote.corer   Úpyannote.database.protocolr   r   Útorch.utils.data._utils.collater   Útorchmetricsr   Útorchmetrics.classificationr   r   r   rs   r   r   ú<module>rÆ      sG   ðó0 ß (Ñ (ã ß Ð ß HÑ HÝ EÝ =Ý !÷õ <Ý Ý 3Ý ÷Cò Cr   