o
    i                     @   sJ   d dl Zd dlZd dlm  mZ d dlmZ dd Z	dd Z
dd ZdS )	    N)linear_sum_assignmentc                 C   sd   dd t | |D }tt|}tttdd |D tj| d j	}|| }|S )Nc                 S   s*   g | ]\}}t t||t| qS  )Fbinary_cross_entropytorchsigmoidlen).0ytr   r   S/home/ubuntu/.local/lib/python3.10/site-packages/funasr/models/eend/utils/losses.py
<listcomp>   s   * z!standard_loss.<locals>.<listcomp>c                 S      g | ]}|j d  qS r   shape)r	   r   r   r   r   r          r   
zipr   sumstack
from_numpynparraytofloat32device)ystslosseslossn_framesr   r   r   standard_loss   s   r"   c                 C   s   t  c t| }g }t|D ]P}| | dd}|| dd}|j\}}|d d d d d f d|d}|d d d d d f |dd}tjt 	||dd
d}	|	 }|t| qW d    n1 sjw   Y  dd t||D }
|
S )Nr      none)	reductionc                 S   s$   g | ]\}}|d d |d f qS )Nr#   r   )r	   r   idxr   r   r   r       s   $ z1fast_batch_pit_n_speaker_loss.<locals>.<listcomp>)r   no_gradr   range	transposer   repeatr   r   r   meancpuappendr   r   )r   r   bsindicesbr
   r   C_bce_losslabels_permr   r   r   fast_batch_pit_n_speaker_loss   s    

  r6   c                 C   sd   dd t | |D }tt|}tttdd |D tj|d j	}|| }|S )Nc                 S   s.   g | ]\}}t j||tjd t| qS ))inputtarget)r   cross_entropyr   r   longr   )r	   logitpower_tr   r   r   r   &   s    z"cal_power_loss.<locals>.<listcomp>c                 S   r   r   r   )r	   r<   r   r   r   r   ,   r   r   r   )logitspower_tsr   r    r!   r   r   r   cal_power_loss%   s   r?   )numpyr   r   torch.nn.functionalnn
functionalr   scipy.optimizer   r"   r6   r?   r   r   r   r   <module>   s    