
    SiO                     n    S SK Jr  S SK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)
    )annotations)AnyN)Base)expectc                  F    \ rS rSrS	S jrS
S jrS
S jrS
S jrSS jrSr	g)
LSTMHelper   c                   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a  UR                  5        H#  u  pX:w  d  M  [        R                  " USS9X'   M%     X   R                   S   nX   R                   S   nUR                  U	S5      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                  " UU-  [        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itemsnpsqueezegetswapaxeszerosfloat32r   r   r   r   r   H_0C_0LAYOUTNotImplementedError)selfparamsr   r   r   r   r$   r%   r   r&   number_of_gatesnumber_of_peepholesrequired_inputsikvhidden_size
batch_sizer   xbph_0c_0s                           _/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/onnx/backend/test/case/node/lstm.py__init__LSTMHelper.__init__   s   ) A;>":1# >>; ! %iooa0!#6 "

11 5FI ' !)//"-K+JZZ*F	Aq[bkk!Q&:A ; 	XXa/1K?rzzR  ; 	XX1K?rzzR  = XXz;7rzzJ  = XXz;7rzzJ  DFYDFYDFDFDFDHDH DK &''    c                <    SS[         R                  " U* 5      -   -  $ )Nr   )r   expr(   r2   s     r7   fLSTMHelper.fO   s    Ar
N##r:   c                .    [         R                  " U5      $ Nr   tanhr=   s     r7   gLSTMHelper.gR       wwqzr:   c                .    [         R                  " U5      $ rA   rB   r=   s     r7   hLSTMHelper.hU   rF   r:   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>   rD   rH   appendconcatenater&   )r(   
seq_lengthr0   r1   Yh_listp_ip_op_fH_tC_tr2   gatesr-   or>   cCHconcatenatedY_hs                        r7   stepLSTMHelper.stepX   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r:   )	r   r%   r$   r&   r   r   r   r   r   N)r)   r   returnNone)r2   
np.ndarrayrc   re   )rc   ztuple[np.ndarray, np.ndarray])
__name__
__module____qualname____firstlineno__r8   r>   rD   rH   ra   __static_attributes__ r:   r7   r   r      s    =(~$&r:   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   c                 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   rm   r   r   r    r`   inputsoutputsr0   r   test_lstm_defaultsrz   r{   namer   arrayastyper#   onnxhelper	make_nodeonesr   ra   r   )input
input_sizer0   weight_scaler*   noder   r   lstm_r`   s              r7   export_defaultsLSTM.export_defaults   s   C:SzC:>?@GG

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

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

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

+,%		
r:   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)rp   rq   rr   )rs   rt   ru   )      @       @g      "@r   r   rv   rm   )r   r   r   r   rx   r`   ry   r   test_lstm_with_initial_biasr}   )r   r   r   r#   r   r   r   r   r"   rQ   r   ra   r   )r   r   r0   r   custom_biasr*   r   r   r   W_BR_Br   r   r   r`   s                  r7   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

+,.		
r:   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)rp   rq   rr   rs   )rt   ru   r   r   r   r   rv   rm   )r   r   r   r   sequence_lensr   r   r   rx   r`   ry   r   r   r   )r   r   r   r   r   r   r   test_lstm_with_peepholesr}   )r   r   r   r#   r   r   r   r   r"   repeatr   int32r   ra   r   )r   r   r0   r   r*   r+   r   r   r   r   seq_lensinit_hinit_cr   r   r   r`   s                    r7   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

+,+		
r:   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 )Nrp   rq   rr   rs   rt   ru   r      g333333?r   r   rm   rw   rS   r`   )rz   r{   r0   r   )r   r   r   r   test_lstm_batchwiser}   r   )r   r   r0   r   r*   r   r   r   r   r   rS   r`   s               r7   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&		
r:   rk   N)rc   rd   )
rf   rg   rh   ri   staticmethodr   r   r   r   rj   rk   r:   r7   rm   rm      sR    
 
8 '
 '
R *
 *
X 
 
r:   rm   )
__future__r   typingr   numpyr   r   onnx.backend.test.case.baser   onnx.backend.test.case.noder   r   rm   rk   r:   r7   <module>r      s4    #    , .o odU
4 U
r:   