o
    toi                     @  sD   d dl mZ d dlZd dlmZ G dd deZG dd deZdS )    )annotationsN)OpRunc                   @  sL   e Zd Zdd Zdd Zdd Zdd Z																						dd
dZd	S )	CommonGRUc                 C  s$   t | || t|j| _d| _d S )N   )r   __init__lenoutput	n_outputsnumber_of_gatesself	onnx_node
run_params r   M/home/ubuntu/.local/lib/python3.10/site-packages/onnx/reference/ops/op_gru.pyr      s   
zCommonGRU.__init__c                 C  s   ddt |   S )N   )npexpr   xr   r   r   f   s   zCommonGRU.fc                 C  s
   t |S N)r   tanhr   r   r   r   g   s   
zCommonGRU.gc           &      C  s2  |j d }|j d }|j d }	t|||	|g}
g }t|d\}}}t|d\}}}t|d\}}}}}}tt||f}tt||f}tt||ft||f}|}tj||j d ddD ]q}t||t|| | }t|dd\}}| |}| |}| 	t|t|t|| t| | | } | 	t|t||t|t||   | }!| j
r|!n| }"d| |" ||  }#||# |#}qit|}$|dkr|$|
d d dd d d d f< | jdkr|
d }%|
|%fS t|
g d}
|
d d d d dd d f }%|
|%fS )	Nr   r   r      axis   )r   r   r   r   )shaper   emptysplit	transposeconcatenateadddotr   r   linear_before_resetappendlayout)&r   XRBWH_0num_directions
seq_lengthhidden_size
batch_sizeYh_listw_zw_rw_hr_zr_rr_hw_bzw_brw_bhr_bzr_brr_bhgates_wgates_rgates_bH_tr   gateszr	h_defaulth_linearhHconcatenatedY_hr   r   r   _step   s\   


 




zCommonGRU._stepNc                 C  sN  |j d }|dkrwtj|dd}tj|dd}|d ur"tj|dd}|d ur-tj|dd}|d ur8tj|dd}|j d }|j d }|dkrH|nt|dd}|d urU|ntjd| j | |jd}|d urh|n	tj||f|jd}|}|}ntd| d| jj	d	| j
||||||d
\}}||j}| jdkr|fS |||jfS )Nr   r   r   r   r   )dtypezUnsupported value z! for num_directions and operator .)r.   )r   r   squeezeswapaxeszerosr
   rN   NotImplementedError	__class____name__rM   astyper	   )r   r)   r,   r*   r+   sequence_lens	initial_hactivation_alphaactivation_betaactivationsclip	directionr0   r(   r&   r.   r1   bh_0r-   r2   rL   r   r   r   _runH   s>   


 zCommonGRU._run)NNNNNNNNNNN)rU   
__module____qualname__r   r   r   rM   r`   r   r   r   r   r      s"    6r   c                   @  s   e Zd Zdd ZdS )GRUc                 C  s   t | || d S r   )r   r   r   r   r   r   r      s   zGRU.__init__N)rU   ra   rb   r   r   r   r   r   rc      s    rc   )
__future__r   numpyr   onnx.reference.op_runr   r   rc   r   r   r   r   <module>   s
   w