
    
Ng                     n    d dl Zd dlmZ  G d de          Z G d de          Z G d de          ZdS )	    N)OpRunc                   B    e Zd Zd Zd Zd Zd Z	 	 	 	 	 	 	 	 	 	 ddZdS )	CommonRNNc                    t          j        | ||           | j        dv rd| _        n+| j        dk    rd| _        nt	          d| j        d          | j        5t          | j                  | j        k    rt	          d| j         d          | j        5t          | j                  | j        k    rt	          d| j         d          |                     | j	        d	         | j        %t          | j                  d	k    r| j        d	         nd | j        %t          | j                  d	k    r| j        d	         nd           | _
        t          | j	                  dk    r|                     | j	        d         | j        %t          | j                  dk    r| j        d         nd | j        %t          | j                  dk    r| j        d         nd           | _        t          |j                  | _        d S )
N)forwardreverse   bidirectional   zUnknown direction .z;activation_alpha must have the same size as num_directions=z:activation_beta must have the same size as num_directions=r   )r   __init__	directionnum_directionsRuntimeErroractivation_alphalenactivation_beta
choose_actactivationsf1f2output	n_outputs)self	onnx_node
run_paramss      U/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnx/reference/ops/op_rnn.pyr   zCommonRNN.__init__   s3   tY
333>333"#D^.."#DGDNGGGHHH !-D)**d.AAAddNaddd    ,D())T-@@@cTM`ccc   //Q (4T=R9S9SVW9W9W %a(( '3D<P8Q8QTU8U8U $Q''
 
 t  1$$oo # ,8SAV=W=WZ[=[=[ )!,, +7C@T<U<UXY<Y<Y (++ DG Y-..    c                 V    |dv r| j         S |dv rfdS t          d|d          )N)Tanhtanh)Affineaffinec                     | z  z   S N )xalphabetas    r   <lambda>z&CommonRNN.choose_act.<locals>.<lambda>F   s    QY- r   zUnknown activation function r   )_f_tanhr   )r   namer(   r)   s     ``r   r   zCommonRNN.choose_actB   sP    ###<'''------C$CCCDDDr   c                 *    t          j        |          S r%   )npr!   )r   r'   s     r   r+   zCommonRNN._f_tanhI   s    wqzzr   c           
         g }|}t          j        ||j        d         d          D ]}|                     t          j        |t          j        |                    t          j        |t          j        |                    z   t          j        t          j        |d           z             }	|                    |	           |	}t          j        |          }
| j	        dk    rt          j
        |
d          }||d         fS )Nr   axisr   r	   )r.   splitshaper   dot	transposeaddappendconcatenater   expand_dims)r   XRBWH_0h_listH_tr'   Hconcatenatedr   s               r   _stepzCommonRNN._stepL   s    !QWQZa000 	 	Aq",q//**&bl1oo../&"(1a..)* A
 MM!CC~f--!##^L!44Fvbz!!r   Nc                 \   |j         d         | _        | j        dk    rt          j        |d          }t          j        |d          }|t          j        |d          }|t          j        |d          }|t          j        |d          }|j         d         }|j         d         }|dk    r|nt          j        |dd          }||nt          j        d|z  |j                  }||nt          j        ||f|j                  }|}|}n%t          d| j         d| j        j	        d	          | 
                    |||||          \  }}|dk    r)t          j        |g d
          }|d d d d dd d f         }|                    |j                  }| j        dk    r|fn||fS )Nr   r	   r0   r2   r   )dtypezUnsupported value z! for num_directions and operator r   )r   r   r	      )r4   r   r.   squeezeswapaxeszerosrF   NotImplementedError	__class____name__rD   r6   astyper   )r   r;   r>   r<   r=   sequence_lens	initial_hr   r   r   clipr   hidden_sizelayout
batch_sizebh_0r?   YY_hs                       r   _runzCommonRNN._run\   s   "  gaj!##
11%%%A
11%%%A}Jqq)))( "
=q A A A$Jyq999	'"+KJq[[bk!Q&:&:A][(P(P(PA ( 	Xz;7qwGGG  ACC%wT%8ww[_[i[rwww   Aq!Q,,3Q;;Q--AAAAqqq"aaaK.CHHQW~**ttC8r   )
NNNNNNNNNN)rM   
__module____qualname__r   r   r+   rD   rY   r&   r   r   r   r      s        4/ 4/ 4/lE E E  " " "* 59 59 59 59 59 59r   r   c                       e Zd ZdS )RNN_7NrM   rZ   r[   r&   r   r   r]   r]              Dr   r]   c                       e Zd ZdS )RNN_14Nr^   r&   r   r   ra   ra      r_   r   ra   )numpyr.   onnx.reference.op_runr   r   r]   ra   r&   r   r   <module>rd      s        ' ' ' ' ' 'F9 F9 F9 F9 F9 F9 F9 F9R	 	 	 	 	I 	 	 		 	 	 	 	Y 	 	 	 	 	r   