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                   @  s`   e Zd Zdd ZdddZddd	Zdd
dZdddZ													dddZdS )
CommonLSTMc                 C  s$   t | || t|j| _d| _d S )N   )r   __init__lenoutput	n_outputsn_gatesself	onnx_node
run_params r   N/home/ubuntu/.local/lib/python3.10/site-packages/onnx/reference/ops/op_lstm.pyr      s   
zCommonLSTM.__init__x
np.ndarrayreturnc                 C  s   ddt |   S )N   )npexpr   r   r   r   r   f   s   zCommonLSTM.fc                 C  
   t |S Nr   tanhr   r   r   r   g      
zCommonLSTM.gc                 C  r   r   r   r   r   r   r   h   r   zCommonLSTM.hXRBWH_0C_0Pnum_directionsinttuple[np.ndarray, np.ndarray]c	                 C  s  |j d }	|j d }
|j d }t|	|||
g}g }t|d\}}}|}|}tj||j d ddD ]`}t|t|t|t| tjt|d  }t|dd\}}}}| |||  }| |||  }| |}|| ||  }| |||  }|| 	| }|
| |}|}q2t|}|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dot	transposeaddr   r   r   appendconcatenatelayout)r   r    r!   r"   r#   r$   r%   r&   r'   
seq_lengthhidden_size
batch_sizeYh_listp_ip_op_fH_tC_tr   gatesior   cCHconcatenatedY_hr   r   r   _step   sD   






zCommonLSTM._stepNc              
   C  s8  d}d}|j d }|dkrtj|dd}tj|dd}|d ur4t|j dkr4|j d dkr4tj|dd}|d urMt|j dkrM|j d dkrMtj|dd}|d urft|j dkrf|j d dkrftj|dd}|d urt|j dkr|j d dkrtj|dd}|d urt|j dkr|j d dkrtj|dd}|j d }|j d }| jdkrt|dd}|d u rtjd| | tjd}|d u rtj|| tjd}|d u rtj||ftjd}|d u rtj||ft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+   r*   r-   )dtypezUnsupported value z! for num_directions and operator .)r'   )r/   r   squeezer   r7   swapaxeszerosfloat32NotImplementedError	__class____name__rJ   astyperK   r	   )r   r    r#   r!   r"   sequence_lens	initial_h	initial_cr&   activation_alphaactivation_betaactivationsclip	directionr9   input_forgetr7   r
   number_of_peepholesr'   r:   r;   rI   r   r   r   _runL   sZ   
$$



"zCommonLSTM._run)r   r   r   r   )r    r   r!   r   r"   r   r#   r   r$   r   r%   r   r&   r   r'   r(   r   r)   )NNNNNNNNNNNNN)	rS   
__module____qualname__r   r   r   r   rJ   r_   r   r   r   r   r      s(    



7r   c                   @  s   e Zd Zdd ZdS )LSTMc                 C  s   t | || d S r   )r   r   r   r   r   r   r      s   zLSTM.__init__N)rS   r`   ra   r   r   r   r   r   rb      s    rb   )
__future__r   numpyr   onnx.reference.op_runr   r   rb   r   r   r   r   <module>   s    