U
    rhL                     @  sR   d dl mZ d dlZd dlZd dlmZ d dlmZ d
ddZ	G dd	 d	eZ
dS )    )annotationsN)Base)expectmeanc                 C  s  | j }t|dkrtd|j }|d }|d }d }	|d k	r~tj|tj|tjddd}	|d k	rt||kd|	jtj	d}	n$|d k	rt||kddjtj	d}	t|dkr| 
||df} |
|df}| j d	 }
tj||
ftj	d}t|D ]D}t|
D ]6}|| | |kr| | || |  |  || |< qq|}t|dkrT|
|}|	d k	r|	| }|d
kr| |	  }|S |d
krt|}n|dkrt|}|S )N   zUnsupported shaper   )ZdtypeZclip)mode      r   sum)shapelenRuntimeErrornpZtakearrayZint32whereastypefloat32Zreshapezerosranger   r   )inputtargetweight	reductionignore_indexZinput_shapeZtarget_shapeNCZgather_weightDZneg_gather_element_inputidloss r!   Y/tmp/pip-unpacked-wheel-xnis5xre/onnx/backend/test/case/node/negativeloglikelihoodloss.py$compute_negative_log_likelihood_loss   sJ    
&





r#   c                   @  sP  e Zd ZeddddZeddddZeddddZeddd	d
ZeddddZeddddZ	eddddZ
eddddZeddddZeddddZeddddZeddddZeddddZeddddZedddd Zeddd!d"Zeddd#d$Zeddd%d&Zd'S )(NegativeLogLikelihoodLossNone)returnc                  C  s   d} t jjdddgdg| d}d\}}tjd tj||tj}tjj	d||fd	tj
}t||d | d
}t|||g|gdd d S )Nnoner$   r   r   r    inputsoutputsr   r      r   highsizer   r   Ztest_nllloss_NCr)   r*   nameonnxhelper	make_noder   randomseedrandr   r   randintint64r#   r   )r   noder   r   r   r   negative_log_likelihood_lossr!   r!   r"   export_input_shape_is_NCO   s.       z2NegativeLogLikelihoodLoss.export_input_shape_is_NCc            	      C  s   d} t jjdddgdg| d}d\}}}}tjd tj||||tj}tjj	d||||fd	tj
}t||d | d
}t|||g|gdd d S )Nr'   r$   r   r   r    r(   r   r,      r@   r   r-   r0   Ztest_nllloss_NCd1d2r1   r3   	r   r<   r   r   dim1dim2r   r   r=   r!   r!   r"   export_input_shape_is_NCd1d2i   s.        z6NegativeLogLikelihoodLoss.export_input_shape_is_NCd1d2c            	      C  s   d} t jjdddgdg| d}d\}}}}tjd tj||||tj}tjj	d||||fd	tj
}t||d | d
}t|||g|gdd d S )Nr   r$   r   r   r    r(   r?   r   r-   r0   Z"test_nllloss_NCd1d2_reduction_meanr1   r3   rA   r!   r!   r"   +export_input_shape_is_NCd1d2_reduction_mean   s.        zENegativeLogLikelihoodLoss.export_input_shape_is_NCd1d2_reduction_meanc            	      C  s   d} t jjdddgdg| d}d\}}}}tjd tj||||tj}tjj	d||||fd	tj
}t||d | d
}t|||g|gdd d S )Nr   r$   r   r   r    r(   r?   r   r-   r0   Z!test_nllloss_NCd1d2_reduction_sumr1   r3   rA   r!   r!   r"   *export_input_shape_is_NCd1d2_reduction_sum   s.        zDNegativeLogLikelihoodLoss.export_input_shape_is_NCd1d2_reduction_sumc            
      C  s   d} t jjddddgdg| d}d\}}}}tjd	 tj||||tj}tjj	d	||||fd
tj
}tj|tj}t|||| d}	t||||g|	gdd d S )Nr'   r$   r   r   r   r    r(   r?   r   r-   r0   Ztest_nllloss_NCd1d2_with_weightr1   r3   
r   r<   r   r   rB   rC   r   r   r   r=   r!   r!   r"   (export_input_shape_is_NCd1d2_with_weight   s0        zBNegativeLogLikelihoodLoss.export_input_shape_is_NCd1d2_with_weightc            
      C  s   d} t jjddddgdg| d}d\}}}}tjd	 tj||||tj}tjj	d	||||fd
tj
}tj|tj}t|||| d}	t||||g|	gdd d S )Nr   r$   r   r   r   r    r(   r?   r   r-   r0   Z.test_nllloss_NCd1d2_with_weight_reduction_meanr1   r3   rG   r!   r!   r"   7export_input_shape_is_NCd1d2_with_weight_reduction_mean   s0        zQNegativeLogLikelihoodLoss.export_input_shape_is_NCd1d2_with_weight_reduction_meanc            
      C  s   d} t jjddddgdg| d}d\}}}}tjd	 tj||||tj}tjj	d	||||fd
tj
}tj|tj}t|||| d}	t||||g|	gdd d S )Nr   r$   r   r   r   r    r(   r?   r   r-   r0   Z-test_nllloss_NCd1d2_with_weight_reduction_sumr1   r3   rG   r!   r!   r"   6export_input_shape_is_NCd1d2_with_weight_reduction_sum   s0        zPNegativeLogLikelihoodLoss.export_input_shape_is_NCd1d2_with_weight_reduction_sumc                  C  s   d} t d}tjjddddgdg| |d}d	\}}}}t jd t j||||t j	}t jj
d||||fd
t j}t d|d d d< t j|t j	}	t|||	| |d}
t||||	g|
gdd d S )Nr   r   r$   r   r   r   r    r)   r*   r   r   r?   r-   r   r   r   Z0test_nllloss_NCd1d2_with_weight_reduction_sum_iir1   r   r;   r4   r5   r6   r7   r8   r9   r   r   r:   r#   r   )r   r   r<   r   r   rB   rC   r   r   r   r=   r!   r!   r"   9export_input_shape_is_NCd1d2_with_weight_reduction_sum_ii  s8    
     zSNegativeLogLikelihoodLoss.export_input_shape_is_NCd1d2_with_weight_reduction_sum_iic            
      C  s   d} t d}tjjdddgdg| |d}d\}}}}t jd	 t j||||t j	}t jj
d	||||fd
t j}t d|d	 d	 d	< t||| |d}	t|||g|	gdd d S )Nr   r   r$   r   r   r    rK   r?   r   r-   r   r   Z/test_nllloss_NCd1d2_no_weight_reduction_mean_iir1   rM   )
r   r   r<   r   r   rB   rC   r   r   r=   r!   r!   r"   8export_input_shape_is_NCd1d2_no_weight_reduction_mean_ii&  s4    
    zRNegativeLogLikelihoodLoss.export_input_shape_is_NCd1d2_no_weight_reduction_mean_iic                  C  s   d} t jjdddgdg| d}d\}}}tjd tj|||tj}tjj	d|||fd	tj
}t||d | d
}t|||g|gdd d S )Nr   r$   r   r   r    r(   r   r,   r
   r   r-   r0   Ztest_nllloss_NCd1r1   r3   )r   r<   r   r   d1r   r   r=   r!   r!   r"   export_input_shape_is_NCd1C  s.    
   z4NegativeLogLikelihoodLoss.export_input_shape_is_NCd1c            	      C  s   d} t jjddddgdg| d}d\}}}tjd	 tj|||tj}tjj	d	|||fd
tj
}tj|tj}t|||| d}t||||g|gdd d S )Nr   r$   r   r   r   r    r(   rQ   r   r-   r0   Ztest_nllloss_NCd1_weightr1   r3   )	r   r<   r   r   rR   r   r   r   r=   r!   r!   r"   !export_input_shape_is_NCd1_weight]  s0    
   z;NegativeLogLikelihoodLoss.export_input_shape_is_NCd1_weightc            	      C  s   d} t d}tjjdddgdg| |d}d\}}}t jd	 t j|||t j	}t jj
d	|||fd
t j}t d|d	 d	< t||d | |d}t|||g|gdd d S )Nr   r   r$   r   r   r    rK   rQ   r   r-   rL   Ztest_nllloss_NCd1_iir1   rM   )	r   r   r<   r   r   rR   r   r   r=   r!   r!   r"   export_input_shape_is_NCd1_iix  s6    

    z7NegativeLogLikelihoodLoss.export_input_shape_is_NCd1_iic            
      C  s   d} t d}tjjddddgdg| |d}d	\}}}t jd
 t j|||t j	}t jj
d
|||fdt j}t d|d
 d
< t j|t j	}t|||| |d}	t||||g|	gdd d S )Nr   r   r$   r   r   r   r    rK   rQ   r   r-   rL   Ztest_nllloss_NCd1_weight_iir1   rM   )
r   r   r<   r   r   rR   r   r   r   r=   r!   r!   r"   $export_input_shape_is_NCd1_weight_ii  s8    

    z>NegativeLogLikelihoodLoss.export_input_shape_is_NCd1_weight_iic               	   C  s   d} t jjddddgdg| d}d\}}}}}}}tjd	 tj|||||||tj}	tjj	d	|||||||fd
tj
}
tj|tj}t|	|
|| d}t||	|
|g|gdd d S )Nr   r$   r   r   r   r    r(   r   r,   r@   r@   r,   r      r   r-   r0   Z%test_nllloss_NCd1d2d3d4d5_mean_weightr1   r3   )r   r<   r   r   rB   rC   dim3dim4dim5r   r   r   r=   r!   r!   r"   .export_input_shape_is_NCd1d2d3d4d5_mean_weight  s<          zHNegativeLogLikelihoodLoss.export_input_shape_is_NCd1d2d3d4d5_mean_weightc               	   C  s   d} t jjdddgdg| d}d\}}}}}}}tjd tj|||||||tj}	tjj	d|||||||fd	tj
}
t|	|
| d
}t||	|
g|gdd d S )Nr'   r$   r   r   r    r(   rW   r   r-   )r   Z(test_nllloss_NCd1d2d3d4d5_none_no_weightr1   r3   )r   r<   r   r   rB   rC   rY   rZ   r[   r   r   r=   r!   r!   r"   1export_input_shape_is_NCd1d2d3d4d5_none_no_weight  s8         zKNegativeLogLikelihoodLoss.export_input_shape_is_NCd1d2d3d4d5_none_no_weightc            
      C  s   d} t d}tjjddddgdg| |d}d	\}}}t jd
 t j|||t j	}t jj
d
|||fdt j}d|d
 d
< t j|t j	}t|||| |d}	t||||g|	gdd d S )Nr   r	   r$   r   r   r   r    rK   )r   r,   r@   r   r-   rL   Z)test_nllloss_NCd1_mean_weight_negative_iir1   rM   )
r   r   r<   r   r   rB   r   r   r   r=   r!   r!   r"   2export_input_shape_is_NCd1_mean_weight_negative_ii  s8    

    zLNegativeLogLikelihoodLoss.export_input_shape_is_NCd1_mean_weight_negative_iic                  C  s   d} t d}tjjdddgdg| |d}d\}}}}}t jd	 t j|||||t j	}t jj
d	|||||fd
t j}	d|	d	 d	 d	 d	< t||	| |d}
t|||	g|
gdd d S )Nr'   r$   r   r   r    rK   )r   r,   r@   r@   r,   r   r-   rO   Z0test_nllloss_NCd1d2d3_none_no_weight_negative_iir1   rM   )r   r   r<   r   r   rB   rC   rY   r   r   r=   r!   r!   r"   9export_input_shape_is_NCd1d2d3_none_no_weight_negative_ii  s8    
   zSNegativeLogLikelihoodLoss.export_input_shape_is_NCd1d2d3_none_no_weight_negative_iic            	      C  s   d} t d}tjjddddgdg| |d}d	\}}t jd
 t j||t j	}t jj
d
||dt j}d|d
< t j|t j	}t|||| |d}t||||g|gdd d S )Nr   
   r$   r   r   r   r    rK   r+   r   r-   rL   Z(test_nllloss_NCd1d2d3_sum_weight_high_iir1   rM   )	r   r   r<   r   r   r   r   r   r=   r!   r!   r"   1export_input_shape_is_NCd1d2d3_sum_weight_high_ii-  s8    
    zKNegativeLogLikelihoodLoss.export_input_shape_is_NCd1d2d3_sum_weight_high_iiN)__name__
__module____qualname__staticmethodr>   rD   rE   rF   rH   rI   rJ   rN   rP   rS   rT   rU   rV   r\   r]   r^   r`   rb   r!   r!   r!   r"   r$   N   sH   r$   )Nr   N)
__future__r   Znumpyr   r4   Zonnx.backend.test.case.baser   Zonnx.backend.test.case.noder   r#   r$   r!   r!   r!   r"   <module>   s        
A