o
    yi                     @   sT   d dl mZmZmZ d dlmZmZ d dlmZm	Z	 d dl
mZ G dd deZdS )    )AnyListUnion)Tensortensor)_wil_compute_wil_update)Metricc                       s   e Zd ZU dZdZeed< dZeed< dZeed< e	ed< e	ed< e	ed< d	e
f fd
dZdeeee f deeee f ddfddZde	fddZ  ZS )WordInfoLosta  Word Information Lost (`WIL`_) is a metric of the performance of an automatic speech recognition system.
    This value indicates the percentage of words that were incorrectly predicted between a set of ground-truth
    sentences and a set of hypothesis sentences. The lower the value, the better the performance of the ASR system
    with a WordInfoLost of 0 being a perfect score. Word Information Lost rate can then be computed as:

    .. math::
        wil = 1 - \frac{C}{N} + \frac{C}{P}

    where:

        - :math:`C` is the number of correct words,
        - :math:`N` is the number of words in the reference
        - :math:`P` is the number of words in the prediction

    As input to ``forward`` and ``update`` the metric accepts the following input:

    - ``preds`` (:class:`~List`): Transcription(s) to score as a string or list of strings
    - ``target`` (:class:`~List`): Reference(s) for each speech input as a string or list of strings

    As output of ``forward`` and ``compute`` the metric returns the following output:

    - ``wil`` (:class:`~torch.Tensor`): A tensor with the Word Information Lost score

    Args:
        kwargs: Additional keyword arguments, see :ref:`Metric kwargs` for more info.

    Examples:
        >>> from torchmetrics import WordInfoLost
        >>> preds = ["this is the prediction", "there is an other sample"]
        >>> target = ["this is the reference", "there is another one"]
        >>> wil = WordInfoLost()
        >>> wil(preds, target)
        tensor(0.6528)
    Fis_differentiablehigher_is_betterfull_state_updateerrorstarget_totalpreds_totalkwargsc                    sR   t  jdi | | jdtddd | jdtddd | jdtddd d S )Nr   g        sum)dist_reduce_fxr   r    )super__init__	add_stater   )selfr   	__class__r   I/home/ubuntu/.local/lib/python3.10/site-packages/torchmetrics/text/wil.pyr   B   s   zWordInfoLost.__init__predstargetreturnNc                 C   s>   t ||\}}}|  j|7  _|  j|7  _|  j|7  _dS )z*Update state with predictions and targets.N)r   r   r   r   )r   r   r   r   r   r   r   r   r   updateK   s   zWordInfoLost.updatec                 C   s   t | j| j| jS )z$Calculate the Word Information Lost.)r   r   r   r   )r   r   r   r   computeR   s   zWordInfoLost.compute)__name__
__module____qualname____doc__r   bool__annotations__r   r   r   r   r   r   strr   r   r    __classcell__r   r   r   r   r
      s   
 ".	r
   N)typingr   r   r   torchr   r    torchmetrics.functional.text.wilr   r   torchmetrics.metricr	   r
   r   r   r   r   <module>   s
   