o
    8wi5                     @   sl   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 G d	d
 d
eZdS )    N)Optional   )Pipeline)Uniform)cdist)
dist_range)l2_normalizec                       s>   e Zd ZdZ	d
dee dee f fddZdd	 Z  Z	S )ClosestAssignmentag  Assign each sample to the closest target

    Parameters
    ----------
    metric : `str`, optional
        Distance metric. Defaults to 'cosine'
    normalize : `bool`, optional
        L2 normalize vectors before clustering.

    Hyper-parameters
    ----------------
    threshold : `float`
        Do not assign if distance greater than `threshold`.
    cosineFmetric	normalizec                    s`   t    || _|| _t| j| jd\}}t|s(d}d|dd}t| t	||| _
d S )N)r   r   g    .Azbounding distance threshold to gz(: this might lead to suboptimal results.)super__init__r   r   r   npisfinitewarningswarnr   	threshold)selfr   r   min_distmax_distmsg	__class__ d/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/pyannote/pipeline/blocks/classification.pyr   8   s   


zClosestAssignment.__init__c                 C   sf   | j rt|}t|}t||| jd}tj|dd}t|D ]\}}|||f | jkr0| ||< q|S )a  Assign each sample to its closest class (if close enough)

        Parameters
        ----------
        X_target : `np.ndarray`
            (n_targets, n_dimensions) target embeddings
        X : `np.ndarray`
            (n_samples, n_dimensions) sample embeddings

        Returns
        -------
        assignments : `np.ndarray`
            (n_samples, ) sample assignments
        )r   r   )axis)r   r   r   r   r   argmin	enumerater   )r   X_targetXdistancetargetsikr   r   r   __call__K   s   
zClosestAssignment.__call__)r
   F)
__name__
__module____qualname____doc__r   strboolr   r&   __classcell__r   r   r   r   r	   (   s    r	   )r   numpyr   typingr   pipeliner   	parameterr   pyannote.core.utils.distancer   r   r   r	   r   r   r   r   <module>   s   