U
    dK                     @   s`   d dl Zd dlmZ d dlmZmZmZmZ e	d e
dg dd ZG dd	 d	ejZdS )
    N)
caffe2_pb2)core	workspacedyndep	test_utilz'@/caffe2/caffe2/contrib/warpctc:ctc_opspythonc                 C   s6   t j| ddd}t | | }|t j|ddd }|S )NT)ZaxisZkeepdims)npZamaxexpsum)wZmaxesedist r   G/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/contrib/warpctc/ctc_ops_test.pysoftmax   s    r   c                   @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )
CTCOpsTestFc                 C   s  d}d}d}t dddddggdddddggg|||t j}t ddgt j|}t dgt j|}	t |gt j}
td}ddd	g}|s|d
 |rddgndddg}|j	||||d |s|
dg | jdj||d | jd| | jd	|	 |s:| jd
|
 | j| t|}|d |d  }| | jjd  j|f | | jjd  jt j | jjd  d }t| | t | | |st | jjd  | jjd  std S )N         g?g333333?ztest-netinputslabelslabel_lengthsinput_lengthsZcostsr   Zinputs_grad_to_be_copied)is_testdevice_option)r   )r   r   r   )r   r   r   r   Zinputs_grad)r	   ZasarrayZreshapeZastypeZfloat32Zint32r   ZNetappendZCTCZAddGradientOperatorswsZcreate_blobfeedrunr   assertEqualZblobsfetchshapeZdtypeprintZassertAlmostEqualr
   Zarray_equalAssertionError)selfr   r   skip_input_lengthsZalphabet_sizeNTr   r   r   r   netZinput_blobsZoutput_blobsZprobsexpectedZcostr   r   r   verify_cost   sb      


zCTCOpsTest.verify_costc                 C   s6   | j tjtjddd | j tjtjdddd d S )Ndevice_typeFr   Tr   r&   r+   r   DeviceOptionZCPUr%   r   r   r   test_ctc_cost_cpuG   s     zCTCOpsTest.test_ctc_cost_cpuc                 C   s:   | j tjtjdddd | j tjtjddddd d S )Nr   r-   Z	device_idFr.   Tr/   r+   r   r1   ZCUDAr2   r   r   r   test_ctc_cost_gpuO   s    zCTCOpsTest.test_ctc_cost_gpuc                 C   s6   | j tjtjddd | j tjtjdddd d S )Nr,   Tr.   r/   r0   r2   r   r   r   test_ctc_forward_only_cpuZ   s    z$CTCOpsTest.test_ctc_forward_only_cpuc                 C   s:   | j tjtjdddd | j tjtjddddd d S )Nr   r4   Tr.   r/   r5   r2   r   r   r   test_ctc_forward_only_gpuc   s    z$CTCOpsTest.test_ctc_forward_only_gpuN)F)__name__
__module____qualname__r+   r3   r6   r7   r8   r   r   r   r   r      s
   
1	r   )Znumpyr	   Zcaffe2.protor   Zcaffe2.pythonr   r   r   r   ZInitOpsLibraryZ
GlobalInitr   ZTestCaser   r   r   r   r   <module>   s   
