
    hD                      f    S SK JrJr  S SKrS SKrS SKJr  S SKJ	r	   " S S5      r
 " S S\5      rg)	    )AnyTupleN)Base)expectc                      \ rS rSrS\SS4S jrS\R                  S\R                  4S jrS\R                  S\R                  4S jr	S\R                  S\R                  4S	 jr
S\\R                  \R                  4   4S
 jrSrg)
LSTMHelper   paramsreturnNc                    SnSnSnSnSnSnSnSn	S	n
S
nX#U/nU H  nX;   a  M
   SU 35       e   X   R                   S   U l        U R                  S:X  Gas  U H#  nX:w  d  M
  [        R                  " X   SS9X'   M%     X   R                   S   nX   R                   S   nX;   a  X   OSnX   nUS:X  a  UO[        R                  " USS5      nXQ;   a  X   O([        R
                  " SU
-  U-  [        R                  S9nX;   a  X   O$[        R
                  " X-  [        R                  S9nXa;   a  X   O$[        R
                  " UU4[        R                  S9nXq;   a  X   O$[        R
                  " UU4[        R                  S9nUU l        X   U l        X   U l	        UU l
        UU l        UU l        UU l        UU l        g [        5       e)NXWRB	initial_h	initial_cPlayout      zMissing Required Input: r      axis   )dtype)shapenum_directionsnpsqueezeswapaxeszerosfloat32r   r   r   r   r   H_0C_0LAYOUTNotImplementedError)selfr
   r   r   r   r   r$   r%   r   r&   number_of_gatesnumber_of_peepholesrequired_inputsikhidden_size
batch_sizer   xbph_0c_0s                          Z/var/www/fran/franai/venv/lib/python3.13/site-packages/onnx/backend/test/case/node/lstm.py__init__LSTMHelper.__init__   s   ) A;>":1# >>; ! %iooa0!#6 "

691 =FI  !)//"-K+J'-'7V^QF	Aq[bkk!Q&:A ; 	XXa/1K?rzzR  ; 	XX1?rzzR  = XXz;7rzzJ  = XXz;7rzzJ  DFYDFYDFDFDFDHDH DK &''    r0   c                 <    SS[         R                  " U* 5      -   -  $ )Nr   )r   expr(   r0   s     r5   fLSTMHelper.fN   s    Ar
N##r8   c                 .    [         R                  " U5      $ Nr   tanhr;   s     r5   gLSTMHelper.gQ       wwqzr8   c                 .    [         R                  " U5      $ r?   r@   r;   s     r5   hLSTMHelper.hT   rD   r8   c                 J   U R                   R                  S   nU R                  R                  S   nU R                   R                  S   n[        R                  " XR
                  X2/5      n/ n[        R                  " U R                  S5      u  pgnU R                  n	U R                  n
[        R                  " U R                   U R                   R                  S   SS9 GHC  n[        R                  " U[        R                  " U R                  5      5      [        R                  " U	[        R                  " U R                  5      5      -   [        R                  " [        R                  " U R                  S5      6 -   n[        R                  " USS5      u  pnnU R                  XU
-  -   5      nU R                  XU
-  -   5      nU R!                  U5      nX-  UU-  -   nU R                  XU-  -   5      nXR#                  U5      -  nUR%                  U5        Un	Un
GMF     [        R&                  " U5      nU R
                  S:X  a  UUS S 2SS S 2S S 24'   U R(                  S:X  a	  US   nUU4$ [        R                  " U/ SQ5      nUS S 2S S 2SS S 24   nUU4$ )	Nr   r   r   r   r   r   r   )r   r   r   r   )r   r   r$   r   emptyr   splitr   r%   dot	transposer   r   addr   r<   rB   rF   appendconcatenater&   )r(   
seq_lengthr.   r/   Yh_listp_ip_op_fH_tC_tr0   gatesr,   or<   cCHconcatenatedY_hs                        r5   stepLSTMHelper.stepW   s   VV\\!_
hhnnR(VV\\!_
HHj"5"5zOP((4661-3hhhh$&&$&&,,q/:Aq",,tvv./&&bll466234&&"((4661-./ 
 %B/JA!Qq9}%Aq9}%Aq	A!a%Aq7{#AFF1IAMM!CC ;" ~~f-!#(AaAqjM;;!B%C
 #v Q-AAq"aK.C#vr8   )	r   r%   r$   r&   r   r   r   r   r   )__name__
__module____qualname____firstlineno__r   r6   r   ndarrayr<   rB   rF   r   r_   __static_attributes__ r8   r5   r   r      s    =( =( =(~$2:: $"** $2:: "** 2:: "** &eBJJ

23 &r8   r   c                   d    \ rS rSr\SS j5       r\SS j5       r\SS j5       r\SS j5       rSr	g)	LSTM   Nc                  R   [         R                  " SS/SS/SS///5      R                  [         R                  5      n SnSnS	nS
n[        R
                  R                  S/ SQSS/US9nU[         R                  " SXB-  U45      R                  [         R                  5      -  nU[         R                  " SXB-  U45      R                  [         R                  5      -  n[        XUS9nUR                  5       u  p[        UXU/U
R                  [         R                  5      /SS9  g )N      ?       @      @      @      @      @r   r   皙?r   ri   r   r   r    r^   inputsoutputsr.   r   test_lstm_defaultsrv   rw   namer   arrayastyper#   onnxhelper	make_nodeonesr   r_   r   )input
input_sizer.   weight_scaler)   noder   r   lstm_r^   s              r5   export_defaultsLSTM.export_defaults   s   C:SzC:>?@GG

S
{{$$?RK[ % 
 277-z:

&
 277-{;

&
 E!,a=ZZ

+,%		
r8   c                  h   [         R                  " / SQ/ SQ/ SQ//5      R                  [         R                  5      n SnSnSnSnSn[        R
                  R                  S/ SQS	S
/US9nU[         R                  " SXR-  U45      R                  [         R                  5      -  nU[         R                  " SXR-  U45      R                  [         R                  5      -  nU[         R                  " SXR-  45      R                  [         R                  5      -  n	[         R                  " SXR-  45      R                  [         R                  5      n
[         R                  " X4S5      n[        XXS9nUR                  5       u  p[        UXX/UR                  [         R                  5      /SS9  g )N)rl   rm   rn   )ro   rp   rq   )      @       @g      "@r   r   rr   ri   )r   r   r   r   rt   r^   ru   r   test_lstm_with_initial_biasry   )r   r|   r}   r#   r~   r   r   r   r"   rO   r   r_   r   )r   r   r.   r   custom_biasr)   r   r   r   W_BR_Br   r   r   r^   s                  r5   export_initial_biasLSTM.export_initial_bias   s   ?O_MNOVVJJ
 
{{$$'K#	 % 
 277-z:

&
 277-{;

&

 BGGQ(E$FGNNJJ
 
 hh?89:AA"**MNNC:q)E!1a#ZZ

+,.		
r8   c                     [         R                  " / SQ/ SQ//5      R                  [         R                  5      n SnSnSnSnSn[        R
                  R                  S/ SQSS	/US
9nU[         R                  " SXB-  U45      R                  [         R                  5      -  nU[         R                  " SXB-  U45      R                  [         R                  5      -  n[         R                  " SSU-  U-  45      R                  [         R                  5      n	[         R                  " U R                  S   U R                  S   5      R                  [         R                  5      n
[         R                  " SU R                  S   U45      R                  [         R                  5      n[         R                  " SU R                  S   U45      R                  [         R                  5      nU[         R                  " SXR-  45      R                  [         R                  5      -  n[        XXXUS9nUR                  5       u  nn[        UXXXX/UR                  [         R                  5      /SS9  g )N)rl   rm   rn   ro   )rp   rq   r   r   r   r   rr   ri   )r   r   r   r   sequence_lensr   r   r   rt   r^   ru   r   r   r   )r   r   r   r   r   r   r   test_lstm_with_peepholesry   )r   r|   r}   r#   r~   r   r   r   r"   repeatr   int32r   r_   r   )r   r   r.   r   r)   r*   r   r   r   r   seq_lensinit_hinit_cr   r   r   r^   s                    r5   export_peepholesLSTM.export_peepholes   s   /1EFGHOOJJ
 
{{$$WK#	 % 
 277-z:

&
 277-{;

&
 HHa_,{:;<CCBJJO99U[[^U[[^<CCBHHM1ekk!nk:;BB2::N1ekk!nk:;BB2::N277A':'H#IJQQJJ
 
 AaV
 3aHf@ZZ

+,+		
r8   c                     [         R                  " SS//SS//SS///5      R                  [         R                  5      n SnSnS	nS
nSn[        R
                  R                  S/ SQSS/UUS9nU[         R                  " SXB-  U45      R                  [         R                  5      -  nU[         R                  " SXB-  U45      R                  [         R                  5      -  n[        XXS9n	U	R                  5       u  p[        UXU/U
R                  [         R                  5      UR                  [         R                  5      /SS9  g )Nrl   rm   rn   ro   rp   rq   r      g333333?r   r   ri   rs   rQ   r^   )rv   rw   r.   r   )r   r   r   r   test_lstm_batchwisery   r{   )r   r   r.   r   r)   r   r   r   r   r   rQ   r^   s               r5   export_batchwiseLSTM.export_batchwise   s3   C:,#sSzlCDKKBJJW
{{$$"%L# % 
 277-z:

&
 277-{;

&
 E!;a=XXbjj)3::bjj+AB&		
r8   rg   )r   N)
ra   rb   rc   rd   staticmethodr   r   r   r   rf   rg   r8   r5   ri   ri      sR    
 
8 '
 '
R *
 *
X 
 
r8   ri   )typingr   r   numpyr   r~   onnx.backend.test.case.baser   onnx.backend.test.case.noder   r   ri   rg   r8   r5   <module>r      s1   
    , .o odU
4 U
r8   