o
    }oi                     @   sN   d dl mZ d dlZd dlZd dlmZ d dlmZ G dd dZdd Z	dS )	    )defaultdictN)EnglishTextNormalizer)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 )BLEUz
    Computes BLEU scores 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   a/home/ubuntu/.local/lib/python3.10/site-packages/nemo/collections/speechlm2/parts/metrics/bleu.py__init__   s   

zBLEU.__init__c                 C      | S r   r   )r   r   r   r   reset*      z
BLEU.resetnamerefshypsreturnc              
   C   sz   t ||D ]5\}}| j| | | | j| | | | jr:t||gj}t	
d| d| d|dd qd S )Nz[REF]	z
[HYP]	z [z.2f])zipr   appendr	   r   r   	sacrebleusentence_bleuscorer   info)r   r   r   r   refhypasrbr   r   r   update-   s    zBLEU.updatec                 C   sv   i }| j  D ]}tt| j| | j | gj}||d| < qtt	|
  |d< | j   | j  |S )N	txt_bleu_txt_bleu)r   keystorchtensorr   corpus_bleur   r   stackr   valuesmeanclear)r   corpus_metricr   metricr   r   r   compute5   s   "

zBLEU.compute)TNT)__name__
__module____qualname____doc__boolr   r   strr   r#   dictr'   Tensorr0   r   r   r   r   r      s    "r   c                 C   r   r   r   )xr   r   r   r
   @   r   r
   )
collectionsr   r   r'   whisper_normalizer.englishr   
nemo.utilsr   r   r
   r   r   r   r   <module>   s   )