o
    }oi
                     @   sb   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	e j
jej  ddd	d
 ZdS )    N)masked_cross_entropyc                  C   sx   d} d}t d t | |}t j|| fd}t||d d}t||}t ||s:J d| dd| dd S )	N      r   highsizemaskzLoss without mask expected .4f
, but got )	torchmanual_seedrandnrandintr   Fcross_entropyallcloseitem)
batch_sizenum_classeslogitstargetsloss_customloss_ref r   W/home/ubuntu/.local/lib/python3.10/site-packages/tests/automodel/loss/test_masked_ce.py!test_masked_cross_entropy_no_mask   s   
r   c                  C   s   d} d}t d t | |}t j|| fd}t g d}t|||d}| }d||dk< t||}t 	||sKJ d|
 d	d
|
 d	d S )Nr   r   r   r   )   r   r   r   r   izLoss with mask expected r
   r   )r   r   r   r   tensorr   cloner   r   r   r   )r   r   r   r   r	   r   targets_refr   r   r   r   #test_masked_cross_entropy_with_mask(   s   
r!   zCUDA not available)reasonc                  C   s~   t d} d}d}t d t j||| d}t j||f| d}t jg d| d}t|||d}|jt jks7J |d us=J d S )	Ncudar   r   r   )device)r   r   r$   )r   r   r   r   r   )	r   r$   r   r   r   r   r   dtypefloat32)r$   r   r   r   r   r	   loss_gpur   r   r   test_masked_cross_entropy_gpu>   s   

r(   )pytestr   torch.nn.functionalnn
functionalr   nemo.automodel.loss.masked_cer   r   r!   markskipifr#   is_availabler(   r   r   r   r   <module>   s   