
    wi                    z    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dS )
    )annotationsN)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      i/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/onnx/reference/ops/op_rnn.pyr   zCommonRNN.__init__   s7   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 # ,8D122Q66 )!,,  +7D011A55 (++  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>H   s    QY- r   zUnknown activation function r   )_f_tanhr   )r   namer)   r*   s     ``r   r   zCommonRNN.choose_actD   sP    ###<'''------C$CCCDDDr   c                *    t          j        |          S r&   )npr"   )r   r(   s     r   r,   zCommonRNN._f_tanhK   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._stepN   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
   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   "  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)rN   
__module____qualname__r   r   r,   rE   rZ   r'   r   r   r   r      s        6/ 6/ 6/p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rN   r[   r\   r'   r   r   r^   r^              Dr   r^   c                      e Zd ZdS )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      s    # " " " " "     ' ' ' ' ' 'H9 H9 H9 H9 H9 H9 H9 H9V	 	 	 	 	I 	 	 		 	 	 	 	Y 	 	 	 	 	r   