
    bIg                    P    d dl mZ d dlZd dlmZ  G d de      Z G d de      Zy)    )annotationsN)OpRunc                  x    e Zd Zd ZddZddZddZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	dZ	 	 	 	 	 	 	 	 	 	 	 	 	 d
dZy)
CommonLSTMc                t    t        j                  | ||       t        |j                        | _        d| _        y )N   )r   __init__lenoutput	n_outputsn_gatesself	onnx_node
run_paramss      W/var/www/html/answerous/venv/lib/python3.12/site-packages/onnx/reference/ops/op_lstm.pyr	   zCommonLSTM.__init__   s+    tY
3Y--.    c                :    ddt        j                  |       z   z  S )N   )npexpr   xs     r   fzCommonLSTM.f   s    Ar
N##r   c                ,    t        j                  |      S Nr   tanhr   s     r   gzCommonLSTM.g       wwqzr   c                ,    t        j                  |      S r   r   r   s     r   hzCommonLSTM.h   r    r   c	                >   |j                   d   }	|j                   d   }
|j                   d   }t        j                  |	|||
g      }g }t        j                  |d      \  }}}|}|}t        j                  ||j                   d   d      D ]#  }t        j                  |t        j
                  |            t        j                  |t        j
                  |            z   t        j                  t        j                  |d       z   }t        j                  |dd      \  }}}}| j                  |||z  z         }| j                  |||z  z         }| j                  |      }||z  ||z  z   }| j                  |||z  z         }|| j                  |      z  }|j                  |       |}|}& t        j                  |      }|dk(  r||d d dd d d d f<   | j                  dk(  r	|d   }||fS t        j
                  |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   XRBWH_0C_0Pnum_directions
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_hs                                r   _stepzCommonLSTM._step   s    WWQZ
iimWWQZ
HHj.*kJK((1a.c3!QWWQZa0 	Aq",,q/*&&bll1o./&&"((1a.)* 
 %B/JAq!Qq39}%Aq39}%Aq	AC!a%Aq37{#ADFF1IAMM!CC	" ~~f-Q(AaAqjM;;!B%C
 #v Q-AAq"aK.C#vr   Nc           
     "   d}d}|j                   d   }|dk(  rkt        j                  |d      }t        j                  |d      }|At        |j                         dkD  r)|j                   d   dk(  rt        j                  |d      }|At        |j                         dkD  r)|j                   d   dk(  rt        j                  |d      }|At        |j                         dkD  r)|j                   d   dk(  rt        j                  |d      }|At        |j                         dkD  r)|j                   d   dk(  rt        j                  |d      }|At        |j                         dkD  r)|j                   d   dk(  rt        j                  |d      }|j                   d   }|j                   d   }| j                  dk7  rt        j
                  |dd      }|+t        j                  d|z  |z  t        j                        }|(t        j                  ||z  t        j                        }|'t        j                  ||ft        j                        }|Nt        j                  ||ft        j                        }n&t        d	|d
| j                  j                  d      | j                  ||||||||      \  }}|j                  |j                        }| j                  dk(  r|fS ||j                  |j                        fS )Nr(   r   r   r   r%   r$   r'   )dtypezUnsupported value z! for num_directions and operator .)r9   )r)   r   squeezer
   r1   swapaxeszerosfloat32NotImplementedError	__class____name__rL   astyperN   r   )r   r2   r5   r3   r4   sequence_lens	initial_h	initial_cr8   activation_alphaactivation_betaactivationsclip	directionr;   input_forgetr1   r   number_of_peepholesr9   r<   r=   rK   s                          r   _runzCommonLSTM._runL   s   ( Q

11%A

11%A}QWW!1aggajAoJJqq))++,q0!''*a/ "

=q A%	(1,OOA&!+JJyq9	%	(1,OOA&!+JJyq9	}QWW!1aggajAoJJqq)''"+KJ{{aKK1a(yHHQ[;6bjjIyHH0;>bjjQ HHj+%>bjjQ	 HHj+%>bjjQ	%$^$6 7  $ 7 7:!= 
 q!Q	9a  
3 HHQWW~~*tHCJJqww4G0HHr   )r   
np.ndarrayreturnrc   )r2   rc   r3   rc   r4   rc   r5   rc   r6   rc   r7   rc   r8   rc   r9   intrd   ztuple[np.ndarray, np.ndarray])NNNNNNNNNNNNN)	rV   
__module____qualname__r	   r   r   r"   rL   rb    r   r   r   r      s    
$00 0 	0
 0 0 0 0 0 
'0n 
#JIr   r   c                      e Zd Zd Zy)LSTMc                2    t         j                  | ||       y r   )r   r	   r   s      r   r	   zLSTM.__init__   s    D)Z8r   N)rV   rf   rg   r	   rh   r   r   rj   rj      s    9r   rj   )
__future__r   numpyr   onnx.reference.op_runr   r   rj   rh   r   r   <module>ro      s-    #  'KI KI\9: 9r   