o
    wi                     @  sT   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 }	tj| ddd}
t| |
 }|tj|ddd }t|}d }|du rAt|}d }|d urhtj	|tj
|tjddd}|d urgt||kd|jtjd}n|d urzt||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 ]"}t|D ]}|| | |kr|| || |  |  || |< qq|}t|d	kr||}|d ur|| }|dkr| |  }|du r||fS |S |dkrt|}n
|dkrt|}|r||fS |S )N   zUnsupported shaper   T)axiskeepdimsdtypeclip)mode      r   sum)shapelenRuntimeErrornpmaxexpr   logcopytakearrayint32whereastypefloat32reshapezerosranger   )xtargetweight	reductionignore_indexget_log_probinput_shapetarget_shapeNCmax_xexp_xpinplog_probgather_weightDneg_gather_element_inputidloss r7   l/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/onnx/backend/test/case/node/softmaxcrossentropy.pysoftmaxcrossentropy   sf   


"


r9   c                   @  s  e Zd ZedHddZedHddZedHddZedHd	d
ZedHddZedHddZ	edHddZ
edHddZedHddZedHddZedHddZedHddZedHddZedHddZedHdd ZedHd!d"ZedHd#d$ZedHd%d&ZedHd'd(ZedHd)d*ZedHd+d,ZedHd-d.ZedHd/d0ZedHd1d2ZedHd3d4ZedHd5d6ZedHd7d8ZedHd9d:ZedHd;d<Z edHd=d>Z!edHd?d@Z"edHdAdBZ#edHdCdDZ$edHdEdFZ%dGS )ISoftmaxCrossEntropyLossreturnNonec                  C     d} t jjdddgdg| d}tjd tjdd	tj}tjj	dd	d
dtj
}t||dd}t|||g|gdd d S )Nnoner:   r"   yzinputsoutputsr%   r   r      r   highsizer%   test_sce_nonerB   rC   nameonnxhelper	make_noder   randomseedrandr   r   randintint64r9   r   r%   noder"   labelsscer7   r7   r8   export_softmaxcrossentropy_none^      z7SoftmaxCrossEntropyLoss.export_softmaxcrossentropy_nonec                  C     d} t jjdddgddg| d}tjd tjd	d
tj}tjj	dd
ddtj
}t||ddd\}}t|||g||gdd d S )Nr>   r:   r"   r?   r@   r0   rA   r   r   rD   rE   rF   Tr%   r'   test_sce_none_log_probrK   rM   r%   rW   r"   rX   r6   r0   r7   r7   r8   (export_softmaxcrossentropy_none_log_probv   &   

z@SoftmaxCrossEntropyLoss.export_softmaxcrossentropy_none_log_probc                  C  s   d} t jjdg ddg| d}tjd tjddtj}tjj	ddd	d
tj
}tjg dtjd}t|||dd}t||||g|gdd d S )Nr>   r:   r"   r?   wr@   rA   r   r   rD   rE   rF   ?gffffff?g?re   re   r	   r$   r%   test_sce_none_weightsrK   rN   rO   rP   r   rQ   rR   rS   r   r   rT   rU   r   r9   r   r%   rW   r"   rX   weightsrY   r7   r7   r8   'export_softmaxcrossentropy_none_weights   s$   
z?SoftmaxCrossEntropyLoss.export_softmaxcrossentropy_none_weightsc                  C  s   d} t jjdg dddg| d}tjd tjdd	tj}tjj	dd	d
dtj
}tjg dtjd}t|||ddd\}}t||||g||gdd d S )Nr>   r:   rb   r@   r0   rA   r   r   rD   rE   rF   rd   r	   Tr$   r%   r'   test_sce_none_weights_log_probrK   rh   r%   rW   r"   rX   rj   r6   r0   r7   r7   r8   0export_softmaxcrossentropy_none_weights_log_prob   s(   


zHSoftmaxCrossEntropyLoss.export_softmaxcrossentropy_none_weights_log_probc                  C  r=   )Nr   r:   r"   r?   r@   rA   r   r   rD   rE   rF   rI   test_sce_sumrK   rM   rV   r7   r7   r8   export_softmaxcrossentropy_sum   r[   z6SoftmaxCrossEntropyLoss.export_softmaxcrossentropy_sumc                  C  r\   )Nr   r:   r"   r?   r@   r0   rA   r   r   rD   rE   rF   Tr]   test_sce_sum_log_probrK   rM   r_   r7   r7   r8   'export_softmaxcrossentropy_sum_log_prob   ra   z?SoftmaxCrossEntropyLoss.export_softmaxcrossentropy_sum_log_probc                  C  s~   d} t jjdddgdg| d}tjd tjdd	tj}tjj	dd	d
dtj
}t||}t|||g|gdd d S )Nr   r:   r"   r?   r@   rA   r   r   rD   rE   rF   test_sce_meanrK   rM   rV   r7   r7   r8   export_softmaxcrossentropy_mean
  s   
z7SoftmaxCrossEntropyLoss.export_softmaxcrossentropy_meanc                  C  s   d} t jjdddgddg| d}tjd tjd	d
tj}tjj	dd
ddtj
}t||dd\}}t|||g||gdd d S )Nr   r:   r"   r?   r@   r0   rA   r   r   rD   rE   rF   Tr'   test_sce_mean_log_probrK   rM   r_   r7   r7   r8   (export_softmaxcrossentropy_mean_log_prob"  s"   
z@SoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_log_probc                  C  s   d} t jjdddgdg| d}tjd tjdd	d
tj}tjj	dd	ddtj
}t||}t|||g|gdd d S )Nr   r:   r"   r?   r@   rA   r   r   rD   r   r   r   rF   test_sce_mean_3drK   rM   )r%   rW   r"   r?   rY   r7   r7   r8   "export_softmaxcrossentropy_mean_3d?  s   
z:SoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_3dc                  C  s   d} t jjdddgddg| d}tjd tjd	d
dtj}tjj	dd
ddtj
}t||dd\}}t|||g||gdd d S )Nr   r:   r"   r?   r@   r0   rA   r   r   rD   r   ry   rF   Trv   test_sce_mean_3d_log_probrK   rM   )r%   rW   r"   r?   r6   r0   r7   r7   r8   +export_softmaxcrossentropy_mean_3d_log_probW  s"   
zCSoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_3d_log_probc                  C  s   d} t jjdg ddg| d}tjd tjddtj}tjj	ddd	d
tj
}tjg dtjd}t|||d}t||||g|gdd d S )Nr   r:   rb   r@   rA   r   r   rD   rE   rF   rd   r	   )r$   test_sce_mean_weightrK   rh   ri   r7   r7   r8   'export_softmaxcrossentropy_mean_weightst  s$   
z?SoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_weightsc                  C  s   d} t jjdg dddg| d}tjd tjdd	tj}tjj	dd	d
dtj
}tjg dtjd}t|||dd\}}t||||g||gdd d S )Nr   r:   rb   r@   r0   rA   r   r   rD   rE   rF   rd   r	   T)r$   r'   test_sce_mean_weight_log_probrK   rh   rn   r7   r7   r8   0export_softmaxcrossentropy_mean_weights_log_prob  s(   

zHSoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_weights_log_probc                  C  s   d} t d}tjjdg ddg| |d}t jd t jddt j	}t jj
ddd	d
t j}t d|d< t jg dt j	d}t||||d}t||||g|gdd d S )Nr   r   r:   rb   r@   rB   rC   r%   r&   r   rD   rE   rF   rd   r	   r$   r&   test_sce_mean_weight_iirK   r   rU   rN   rO   rP   rQ   rR   rS   r   r   rT   r   r9   r   r%   r&   rW   r"   rX   rj   rY   r7   r7   r8   *export_softmaxcrossentropy_mean_weights_ii  s*   
	
zBSoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_weights_iic                  C  s   d} t d}tjjdg dddg| |d}t jd t jdd	t j	}t jj
dd	d
dt j}t d|d< t jg dt j	d}t||||dd\}}t||||g||gdd d S )Nr   r   r:   rb   r@   r0   r   r   rD   rE   rF   rd   r	   Tr$   r&   r'    test_sce_mean_weight_ii_log_probrK   r   r%   r&   rW   r"   rX   rj   r6   r0   r7   r7   r8   3export_softmaxcrossentropy_mean_weights_ii_log_prob  s.   
	


zKSoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_weights_ii_log_probc                  C  s   d} t d}tjjdddgdg| |d}t jd t jd	d
t j	}t jj
dd
ddt j}t d|d< t|||d}t|||g|gdd d S )Nr   r   r:   r"   r?   r@   r   r   r   rD   rE   rF   r&   test_sce_mean_no_weight_iirK   r   rU   rN   rO   rP   rQ   rR   rS   r   r   rT   r9   r   r%   r&   rW   r"   rX   rY   r7   r7   r8   -export_softmaxcrossentropy_mean_no_weights_ii  s"   
	
zESoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_no_weights_iic                  C  s   d} t d}tjjdddgddg| |d}t jd	 t jd
dt j	}t jj
d	dddt j}t d|d	< t|||dd\}}t|||g||gdd d S )Nr   r   r:   r"   r?   r@   r0   r   r   r   rD   rE   rF   Tr&   r'   #test_sce_mean_no_weight_ii_log_probrK   r   r%   r&   rW   r"   rX   r6   r0   r7   r7   r8   6export_softmaxcrossentropy_mean_no_weights_ii_log_prob  s,   
	

zNSoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_no_weights_ii_log_probc                  C  s   d} t d}tjjdg ddg| |d}t jd t jdd	d
t j	}t jj
dd	ddt j}t d|d d< t jg dt j	d}t||||d}t||||g|gdd d S )Nr   r   r:   rb   r@   r   r   r   rD   r   ry   rF   g?g333333?g333333?g?g      ?r	   r   test_sce_mean_weight_ii_3drK   r   r   r7   r7   r8   -export_softmaxcrossentropy_mean_weights_ii_3d5  s*   
	
zESoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_weights_ii_3dc                  C  s   d} t d}tjjdg dddg| |d}t jd t jd	d
dt j	}t jj
dd
ddt j}t d|d d< t jg dt j	d}t||||dd\}}t||||g||gdd d S )Nr   r   r:   rb   r@   r0   r   r   r   rD   r   ry   rF   r   r	   Tr   #test_sce_mean_weight_ii_3d_log_probrK   r   r   r7   r7   r8   6export_softmaxcrossentropy_mean_weights_ii_3d_log_probV  s.   
	


zNSoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_weights_ii_3d_log_probc                  C  s   d} t d}tjjdddgdg| |d}t jd t jd	d
dt j	}t jj
dd
ddt j}t d|d d< t|||d}t|||g|gdd d S )Nr   r   r:   r"   r?   r@   r   r   r   rD   ry   rF   r   test_sce_mean_no_weight_ii_3drK   r   r   r7   r7   r8   0export_softmaxcrossentropy_mean_no_weights_ii_3dy  s(   
	
zHSoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_no_weights_ii_3dc                  C  s   d} t d}tjjdddgddg| |d}t jd	 t jd
ddt j	}t jj
d	dddt j}t d|d	 d	< t|||dd\}}t|||g||gdd d S )Nr   r   r:   r"   r?   r@   r0   r   r   r   rD   ry   rF   Tr   &test_sce_mean_no_weight_ii_3d_log_probrK   r   r   r7   r7   r8   9export_softmaxcrossentropy_mean_no_weights_ii_3d_log_prob  s,   
	

zQSoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_no_weights_ii_3d_log_probc                  C  s   d} t d}tjjdg ddg| |d}t jd t jdd	dd
t j	}t jj
dd	ddt j}t d|d d d< t jg dt j	d}t||| ||d}t||||g|gdd d S )Nr   r   r:   rb   r@   r   r   r   rD      r   r   r   rF   r   r	   )r%   r$   r&   test_sce_mean_weight_ii_4drK   r   r   r7   r7   r8   -export_softmaxcrossentropy_mean_weights_ii_4d  s.   
	

zESoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_weights_ii_4dc                  C  s   d} t d}tjjdg dddg| |d}t jd t jd	d
ddt j	}t jj
dd
ddt j}t d|d d d< t jg dt j	d}t||| ||dd\}}t||||g||gdd d S )Nr   r   r:   rb   r@   r0   r   r   r   rD   r   r   rF   r   r	   T)r%   r$   r&   r'   #test_sce_mean_weight_ii_4d_log_probrK   r   r   r7   r7   r8   6export_softmaxcrossentropy_mean_weights_ii_4d_log_prob  s8   
	


zNSoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_weights_ii_4d_log_probc                  C  s   d} t d}tjjdddgdg| |d}t jd t jd	d
ddt j	}t jj
dd
ddt j}t d|d d d< t||| |d}t|||g|gdd d S )Nr   r   r:   r"   r?   r@   r   r   r   rD   r   r   rF   r%   r&   test_sce_mean_no_weight_ii_4drK   r   r   r7   r7   r8   0export_softmaxcrossentropy_mean_no_weights_ii_4d  s,   
	
zHSoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_no_weights_ii_4dc                  C  s   d} t d}tjjdddgddg| |d}t jd	 t jd
dddt j	}t jj
d	dddt j}t d|d	 d	 d	< t||| |dd\}}t|||g||gdd d S )Nr   r   r:   r"   r?   r@   r0   r   r   r   rD   r   r   rF   Tr%   r&   r'   &test_sce_mean_no_weight_ii_4d_log_probrK   r   r   r7   r7   r8   9export_softmaxcrossentropy_mean_no_weights_ii_4d_log_prob(  s,   
	


zQSoftmaxCrossEntropyLoss.export_softmaxcrossentropy_mean_no_weights_ii_4d_log_probc               	   C  s   d} t jjdg d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:   rb   r@   rA   r   rD      r   rD   r      r   rF   rf   !test_sce_NCd1d2d3d4d5_mean_weightrK   rM   )r%   rW   r*   r+   dim1dim2dim3dim4dim5r"   rX   r$   rY   r7   r7   r8   .export_input_shape_is_NCd1d2d3d4d5_mean_weightJ  s.    
zFSoftmaxCrossEntropyLoss.export_input_shape_is_NCd1d2d3d4d5_mean_weightc               	   C  s   d} t jjdg dd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
d\}}t||	|
|g||gdd d S )Nr   r:   rb   r@   r0   rA   r   r   rF   Trl   *test_sce_NCd1d2d3d4d5_mean_weight_log_probrK   rM   )r%   rW   r*   r+   r   r   r   r   r   r"   rX   r$   r6   r0   r7   r7   r8   7export_input_shape_is_NCd1d2d3d4d5_mean_weight_log_probf  s2    


zOSoftmaxCrossEntropyLoss.export_input_shape_is_NCd1d2d3d4d5_mean_weight_log_probc               	   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@   rA   r   r   rF   rI   $test_sce_NCd1d2d3d4d5_none_no_weightrK   rM   )r%   rW   r*   r+   r   r   r   r   r   r"   rX   rY   r7   r7   r8   1export_input_shape_is_NCd1d2d3d4d5_none_no_weight  s,    
zISoftmaxCrossEntropyLoss.export_input_shape_is_NCd1d2d3d4d5_none_no_weightc               	   C  s   d} t jjdddgd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@   r0   rA   r   r   rF   Tr]   -test_sce_NCd1d2d3d4d5_none_no_weight_log_probrK   rM   )r%   rW   r*   r+   r   r   r   r   r   r"   rX   r6   r0   r7   r7   r8   :export_input_shape_is_NCd1d2d3d4d5_none_no_weight_log_prob  s0    

zRSoftmaxCrossEntropyLoss.export_input_shape_is_NCd1d2d3d4d5_none_no_weight_log_probc            
      C  s   d} t d}tjjdg d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:   rb   r@   r   r   rD   r   r   rF   r$   r%   r&   %test_sce_NCd1_mean_weight_negative_iirK   r   )
r%   r&   rW   r*   r+   r   r"   rX   r$   rY   r7   r7   r8   2export_input_shape_is_NCd1_mean_weight_negative_ii  s0   



zJSoftmaxCrossEntropyLoss.export_input_shape_is_NCd1_mean_weight_negative_iic                  C  s   d} t d}tjjdg dd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d\}	}
t||||g|	|
gdd d S )Nr   r   r:   rb   r@   r0   r   r   r   rF   Tr$   r%   r&   r'   .test_sce_NCd1_mean_weight_negative_ii_log_probrK   r   )r%   r&   rW   r*   r+   r   r"   rX   r$   r6   r0   r7   r7   r8   ;export_input_shape_is_NCd1_mean_weight_negative_ii_log_prob  s:   


	
zSSoftmaxCrossEntropyLoss.export_input_shape_is_NCd1_mean_weight_negative_ii_log_probc                  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@   r   r   rD   r   r   rD   r   rF   r   ,test_sce_NCd1d2d3_none_no_weight_negative_iirK   r   )r%   r&   rW   r*   r+   r   r   r   r"   rX   rY   r7   r7   r8   9export_input_shape_is_NCd1d2d3_none_no_weight_negative_ii  s2   

zQSoftmaxCrossEntropyLoss.export_input_shape_is_NCd1d2d3_none_no_weight_negative_iic                  C  s   d} t d}tjjdddgd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d\}
}t|||	g|
|gdd d S )Nr>   r   r:   r"   r?   r@   r0   r   r   r   rF   Tr   5test_sce_NCd1d2d3_none_no_weight_negative_ii_log_probrK   r   )r%   r&   rW   r*   r+   r   r   r   r"   rX   r6   r0   r7   r7   r8   Bexport_input_shape_is_NCd1d2d3_none_no_weight_negative_ii_log_prob  s2   



zZSoftmaxCrossEntropyLoss.export_input_shape_is_NCd1d2d3_none_no_weight_negative_ii_log_probc            	      C  s   d} t d}tjjdg d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:   rb   r@   r   r   rD   r   rF   r   $test_sce_NCd1d2d3_sum_weight_high_iirK   r   )	r%   r&   rW   r*   r+   r"   rX   r$   rY   r7   r7   r8   1export_input_shape_is_NCd1d2d3_sum_weight_high_ii?  s0   


zISoftmaxCrossEntropyLoss.export_input_shape_is_NCd1d2d3_sum_weight_high_iic            
      C  s   d} t d}tjjdg dd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d\}}	t||||g||	gdd d S )Nr   r   r:   rb   r@   r0   r   r   r   rF   Tr   -test_sce_NCd1d2d3_sum_weight_high_ii_log_probrK   r   )
r%   r&   rW   r*   r+   r"   rX   r$   r6   r0   r7   r7   r8   :export_input_shape_is_NCd1d2d3_sum_weight_high_ii_log_prob^  s:   

	
zRSoftmaxCrossEntropyLoss.export_input_shape_is_NCd1d2d3_sum_weight_high_ii_log_probN)r;   r<   )&__name__
__module____qualname__staticmethodrZ   r`   rk   ro   rq   rs   ru   rx   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r7   r7   r8   r:   ]   s     "! "!"'!!#r:   )Nr   NN)
__future__r   numpyr   rN   onnx.backend.test.case.baser   onnx.backend.test.case.noder   r9   r:   r7   r7   r7   r8   <module>   s   
P