
    hC                     Z    S SK rS SKJr   " S S\5      r " S S\5      r " S S\5      rg)	    N)OpRunc                   J    \ rS rSrS rS rS rS r          S	S jrSr	g)
	CommonRNN   c                    [         R                  " XU5        U R                  S;   a  SU l        O2U R                  S:X  a  SU l        O[	        SU R                  < S35      eU R
                  b<  [        U R
                  5      U R                  :w  a  [	        SU R                   S35      eU R                  b<  [        U R                  5      U R                  :w  a  [	        SU R                   S35      eU R                  U R                  S	   U R
                  b(  [        U R
                  5      S	:  a  U R
                  S	   OS U R                  b(  [        U R                  5      S	:  a  U R                  S	   OS 5      U l
        [        U R                  5      S:  a  U R                  U R                  S   U R
                  b(  [        U R
                  5      S:  a  U R
                  S   OS U R                  b(  [        U R                  5      S:  a  U R                  S   OS 5      U l        [        UR                  5      U l        g )
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      S/var/www/fran/franai/venv/lib/python3.13/site-packages/onnx/reference/ops/op_rnn.pyr   CommonRNN.__init__   s   t
3>>33"#D^^."#D!3DNN3EQGHH !!-D))*d.A.AAMdNaNaMbbcd    ,D(()T-@-@@LTM`M`Laabc  //Q$$0S9N9N5ORS5S !!!$##/C8L8L4MPQ4Q   #
 t 1$oo  #((4T=R=R9SVW9W %%a(''3D<P<P8QTU8U $$Q'DG Y--.    c                 d   ^^ US;   a  U R                   $ US;   a  UU4S j$ [        SU< S35      e)N)Tanhtanh)Affineaffinec                    > U T-  T-   $ N )xalphabetas    r   <lambda>&CommonRNN.choose_act.<locals>.<lambda>>   s    QY-r    zUnknown activation function r   )_f_tanhr   )r   namer*   r+   s     ``r   r   CommonRNN.choose_act:   s:    ##<<''--9$CDDr    c                 .    [         R                  " U5      $ r'   )npr#   )r   r)   s     r   r.   CommonRNN._f_tanhA   s    wwqzr    c           
      (   / nUn[         R                  " XR                  S   SS9 H  nU R                  [         R                  " U[         R
                  " U5      5      [         R                  " U[         R
                  " U5      5      -   [         R                  " [         R                  " US5      6 -   5      n	UR                  U	5        U	nM     [         R                  " U5      n
U R                  S:X  a  [         R                  " U
S5      nWUS   4$ )Nr   axisr   r
   )r2   splitshaper   dot	transposeaddappendconcatenater   expand_dims)r   XRBWH_0h_listH_tr)   Hconcatenatedr   s               r   _stepCommonRNN._stepD   s    !WWQZa0Aq",,q/*&&bll1o./&&"((1a.)*A
 MM!C 1 ~~f-!#^^L!4Fvbz!!r    Nc                    UR                   S   U l        U R                  S:X  Ga  [        R                  " USS9n[        R                  " USS9nUb  [        R                  " USS9nUb  [        R                  " USS9nUb  [        R                  " USS9nUR                   S   nUR                   S   nUS:X  a  UO[        R                  " USS5      nUb  UO![        R
                  " SU-  UR                  S9nUb  UO[        R
                  " X4UR                  S9nUnUnO1[        SU R                   SU R                  R                  < S	35      eU R                  XXBU5      u  nnUS:X  a(  [        R                  " U/ S
Q5      nUS S 2S S 2SS S 24   nUR                  UR                  5      nU R                  S:X  a  U4$ UU4$ )Nr   r
   r5   r7   r   )dtypezUnsupported value z! for num_directions and operator r   )r   r   r
      )r9   r   r2   squeezeswapaxeszerosrL   NotImplementedError	__class____name__rI   r;   astyper   )r   r@   rC   rA   rB   sequence_lens	initial_hr   r   r   clipr   hidden_sizelayout
batch_sizebh_0rD   YY_hs                       r   _runCommonRNN._runT   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  A!,3Q;Q-AAq"aK.CHHQWW~~*t8C8r    )r   r   r   r   )
NNNNNNNNNN)
rS   
__module____qualname____firstlineno__r   r   r.   rI   r_   __static_attributes__r(   r    r   r   r      s=    ,/\E"* 59r    r   c                       \ rS rSrSrg)RNN_7   r(   NrS   ra   rb   rc   rd   r(   r    r   rf   rf          r    rf   c                       \ rS rSrSrg)RNN_14   r(   Nrh   r(   r    r   rk   rk      ri   r    rk   )numpyr2   onnx.reference.op_runr   r   rf   rk   r(   r    r   <module>ro      s4     '~9 ~9B	I 		Y 	r    