U
    di                     @   s   d dl Z d dlmZ d dlmZmZ ddlmZmZ ddlm	Z	m
Z
 ddlmZ deedd	d
ZdeeedddZdd Zdd Zdd Zeeeee
e	eeeeedZdS )    N)BCEWithLogitsLossMSELoss   )$DeformableDetrForObjectDetectionLoss!DeformableDetrForSegmentationLoss)ForObjectDetectionLossForSegmentationLoss)RTDetrForObjectDetectionLoss)num_items_in_batchignore_indexc                 K   s8   |d k	rdnd}t jj| |||d}|dkr4|| }|S )NsumZmean)r   	reduction)nnZ
functionalZcross_entropy)sourcetargetr   r   kwargsr   loss r   @/tmp/pip-unpacked-wheel-bm_b0l5e/transformers/loss/loss_utils.pyfixed_cross_entropy   s
    r   )
vocab_sizer   r   c           	      K   sn   |   } | dd dd d f  }|ddd f  }|d|}|d}||j}t||||f|}|S )N.r   )float
contiguousviewtodevicer   )	logitslabelsr   r   r   r   Zshift_logitsZshift_labelsr   r   r   r   ForCausalLMLoss    s    
r    c                 K   s   |j }|jd krN|dkr d|_n.|dkrH| jtjks@| jtjkrHd|_nd|_|jdkrt }|dkrz|| |  }q||| }nB|jdkrt|	d|| 	df|}n|jdkrt
 }||| }|S )Nr   Z
regressionZsingle_label_classificationZmulti_label_classificationr   )
num_labelsZproblem_typeZdtypetorchlongintr   squeezer   r   r   )r   Zpooled_logitsconfigr   r!   Zloss_fctr   r   r   r   ForSequenceClassificationLoss2   s$    
 



r'   c           	      K   s   d }|d k	r|d k	rt | dkr6|d| j}t | dkrX|d|j}| d}|d|}|d|}t| |fd|i|}t||fd|i|}|| d }|S )Nr   r   r   r      )lensizer%   r   r   clampr   )	Zstart_logitsZ
end_logitsZstart_positionsZend_positionsr   Z
total_lossZignored_indexZ
start_lossZend_lossr   r   r   ForQuestionAnsweringLossJ   s    
r,   c                 K   s.   |  d|j} | d}|  } t| |f|S )Nr   )r   r!   r   r   )r   r   r&   r   r   r   r   ForTokenClassification]   s    
r-   )ZForCausalLMZForQuestionAnsweringZForSequenceClassificationr-   ZForSegmentationZForObjectDetectionZ DeformableDetrForObjectDetectionZ!ConditionalDetrForObjectDetectionZGroundingDinoForObjectDetectionZConditionalDetrForSegmentationZRTDetrForObjectDetection)Nr
   )Nr
   )r"   Ztorch.nnr   r   r   Zloss_deformable_detrr   r   Zloss_for_object_detectionr   r   Zloss_rt_detrr	   r$   r   r    r'   r,   r-   ZLOSS_MAPPINGr   r   r   r   <module>   s8   	     
