o
    wi                     @   sR   d dl mZ d dlZd dlmZ d dlmZ d dlmZ G dd dZ	dd	 Z
dS )
    )defaultdictN)EnglishTextNormalizer)word_error_rate)loggingc                   @   sf   e Zd ZdZddedefddZdd	 Zd
edee dee ddfddZ	de
eejf fddZdS )WERz~
    Computes WER on text predictions.
    By default, uses Whisper's EnglishTextNormalizer on hypotheses and references.
    TN	normalizeverbosec                 C   sB   || _ |r|d u rt | _n|| _nt| _tt| _tt| _d S N)r   r   
normalizer	_identityr   list_refs_hyps)selfr   r
   r    r   i/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/nemo/collections/speechlm2/parts/metrics/wer.py__init__   s   

zWER.__init__c                 C   s   | j   | j  | S r	   )r   clearr   )r   r   r   r   reset*   s   

z	WER.resetnamerefshypsreturnc                 C   s|   t ||D ]\}}| j| | | | j| | | q| jr8|r:|r<td|d  d|d   d S d S d S d S )Nz[REF]	r   z
[HYP]	)zipr   appendr
   r   r   r   info)r   r   r   r   refhypr   r   r   update/   s   "z
WER.updatec                 C   sd   i }| j  D ]}tt| j| | j | }||d| < qtt| 	 |d< | 
  |S )Nwer_wer)r   keystorchtensorr   r   stackr   valuesmeanr   )r   corpus_metricr   metricr   r   r   compute6   s   zWER.compute)TNT)__name__
__module____qualname____doc__boolr   r   strr   r   dictr"   Tensorr)   r   r   r   r   r      s    "r   c                 C   s   | S r	   r   )xr   r   r   r   @   s   r   )collectionsr   r"   whisper_normalizer.englishr    nemo.collections.asr.metrics.werr   
nemo.utilsr   r   r   r   r   r   r   <module>   s   )