
    bIg                    f    d dl mZ d dlZd dlmZ  G d de      Z G d de      Z G d d	e      Zy)
    )annotationsN)OpRunc                  @    e Zd Zd Zd Zd Zd Z	 	 	 	 	 	 	 	 	 	 ddZy)	CommonRNNc                j   t        j                  | ||       | j                  dv rd| _        n0| j                  dk(  rd| _        nt	        d| j                  d      | j
                  ;t        | j
                        | j                  k7  rt	        d| j                   d      | j                  ;t        | j                        | j                  k7  rt	        d| j                   d      | j                  | j                  d	   | j
                  't        | j
                        d	kD  r| j
                  d	   nd | j                  't        | j                        d	kD  r| j                  d	   nd       | _
        t        | j                        dkD  r| j                  | j                  d   | j
                  't        | j
                        dkD  r| j
                  d   nd | j                  't        | j                        dkD  r| j                  d   nd       | _        t        |j                        | _        y )
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      V/var/www/html/answerous/venv/lib/python3.12/site-packages/onnx/reference/ops/op_rnn.pyr   zCommonRNN.__init__   s    tY
3>>33"#D^^."#D!3DNN3EQGHH !!-D))*d.A.AAMdNaNaMbbcd    ,D(()T-@-@@LTM`M`Laabc  //Q ((4T=R=R9SVW9W %%a( ''3D<P<P8QTU8U $$Q'
 t 1$oo  # ,,8D112Q6 ))!,  ++7D001A5 ((+ DG Y--.    c                X    |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>H   s    QY- r   zUnknown activation function r   )_f_tanhr   )r   namer)   r*   s     ``r   r   zCommonRNN.choose_actD   s:    ##<<''--9$CDDr   c                ,    t        j                  |      S r&   )npr"   )r   r(   s     r   r,   zCommonRNN._f_tanhK   s    wwqzr   c           
        g }|}t        j                  ||j                  d   d      D ]  }| j                  t        j                  |t        j
                  |            t        j                  |t        j
                  |            z   t        j                  t        j                  |d       z         }	|j                  |	       |	} 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._stepN   s    !QWWQZa0 	Aq",,q/*&&bll1o./&&"((1a.)*A
 MM!C	 ~~f-!#^^L!4Fvbz!!r   Nc                   |j                   d   | _        | j                  dk(  r	t        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                        }|}|}n0t        d| j                   d| j                  j                  d	      | j                  |||||      \  }}|dk(  r't        j                  |g d
      }|d d d d dd d f   }|j                  |j                        }| j                  dk(  r|fS ||fS )Nr   r
   r1   r3   r   )dtypezUnsupported value z! for num_directions and operator r   )r   r   r
      )r5   r   r/   squeezeswapaxeszerosrG   NotImplementedError	__class____name__rE   r7   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   "  ggaj!#

11%A

11%A}JJqq)( "

=q A$JJyq9	''"+KJq[bkk!Q&:A][(PA ( XXz;7qwwG  AC%$T%8%8$99Z[_[i[i[r[rZuuvw  Aq!Q,3Q;Q-AAq"aK.CHHQWW~~*t8C8r   )
NNNNNNNNNN)rN   
__module____qualname__r   r   r,   rE   rZ   r'   r   r   r   r      s=    6/pE"* 59r   r   c                      e Zd Zy)RNN_7NrN   r[   r\   r'   r   r   r^   r^          r   r^   c                      e Zd Zy)RNN_14Nr_   r'   r   r   rb   rb      r`   r   rb   )	
__future__r   numpyr/   onnx.reference.op_runr   r   r^   rb   r'   r   r   <module>rf      s7    #  'H9 H9V	I 		Y 	r   