
    h                     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                  \R                  4   4S	 jrS
rg)	GRUHelper   paramsreturnNc                    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  a  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-  5      nXa;   a  X   O[        R
                  " X45      nXq;   a  X   OS
nUU l        X   U l        X   U l        UU l	        UU l
        UU l        Xl        g [        5       e)NXWRB	initial_hlinear_before_resetlayout   zMissing Required Input: r      axis   )shapenum_directionsnpsqueezeswapaxeszerosr   r   r   r   H_0LBRLAYOUTNotImplementedError)selfr
   r   r   r   r   r    r!   r"   number_of_gatesrequired_inputsikhidden_size
batch_sizer   xbh_0lbrs                       Y/var/www/fran/franai/venv/lib/python3.13/site-packages/onnx/backend/test/case/node/gru.py__init__GRUHelper.__init__   sz   #) A;>":1# >>; ! %iooa0!#6 "

691 =FI  !)//"-K+J'-'7V^QF	Aq[bkk!Q&:A ; 	XXa/1K?@ 
 "%&+BHHj=V4WC!$&+ACDFYDFYDFDFDHDH K &''    r+   c                 <    SS[         R                  " U* 5      -   -  $ )Nr   )r   expr$   r+   s     r/   fGRUHelper.f>   s    Ar
N##r2   c                 .    [         R                  " U5      $ )N)r   tanhr5   s     r/   gGRUHelper.gA   s    wwqzr2   c                 ~   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[        R                  " U R                  S5      u  pn[        R                  " U R                  S5      u  ppnn[        R                  " [        R                  " Xg45      5      n[        R                  " [        R                  " X45      5      n[        R                  " [        R                  " X45      [        R                  " UU45      5      nU R                  n[        R                  " U R                   U R                   R                  S   SS9 GH  n[        R                  " UU5      [        R                  " UU5      -   U-   n[        R                  " USS5      u  nnU R                  U5      nU R                  U5      nU R                  [        R                  " U[        R                  " U5      5      [        R                  " UU-  [        R                  " U5      5      -   U-   U-   5      nU R                  [        R                  " U[        R                  " U5      5      U[        R                  " U[        R                  " U5      5      U-   -  -   U-   5      nU R                   (       a  UOUnSU-
  U-  UU-  -   nUR#                  U5        UnGM     [        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   emptyr   splitr   r   r   	transposeconcatenateadddotr6   r:   r!   appendr"   ) r$   
seq_lengthr)   r*   Yh_listw_zw_rw_hr_zr_rr_hw_bzw_brw_bhr_bzr_brr_bhgates_wgates_rgates_bH_tr+   gateszr	h_defaulth_linearhHconcatenatedY_hs                                    r/   stepGRUHelper.stepD   s   VV\\!_
hhnnR(VV\\!_
HHj"5"5zOP((4661-3((4661-3/1xx/B,Tt,,r~~sj9:,,r~~sj9:&&5r~~tTl7SThh$&&$&&,,q/:AFF1g&W)==GE88E1b)DAqq	Aq	Aq",,s+,&&S",,s"345 I vvq",,s+,rvvc2<<#45<=>H
 !HH)AQ!a#g%AMM!C' ;* ~~f-!#(AaAqjM;;!B%C
 #v Q-AAq"aK.C#vr2   )r   r    r"   r!   r   r   r   r   )__name__
__module____qualname____firstlineno__r   r0   r   ndarrayr6   r:   r   ra   __static_attributes__ r2   r/   r   r      sj    -( -( -(^$2:: $"** $2:: "** /eBJJ

23 /r2   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)	GRUv   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   rk   r   r   r    r`   inputsoutputsr)   r   test_gru_defaultsry   rz   namer   arrayastypefloat32onnxhelper	make_nodeonesr   ra   r   )input
input_sizer)   weight_scaler%   noder   r   gru_r`   s              r/   export_defaultsGRU.export_defaultsw   s   C:SzC:>?@GG

S
{{$$/B;K % 
 277-z:

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

&
 %*a=ZZ

+,$		
r2   c                  d   [         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S9n[        XXS9nUR                  5       u  p[        UXX/UR                  [         R                  5      /SS9  g )Nrn   ro   rp   rq   rr   rs   g      @g       @g      "@r   ru   rk   r   r   r   r   rw   r`   rx   r   r   test_gru_with_initial_biasr|   )r   r   r   r   r   r   r   r   r   rA   r   ra   r   )r   r   r)   r   custom_biasr%   r   r   r   W_BR_Br   r   r   r`   s                  r/   export_initial_biasGRU.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:A.%/a#ZZ

+,-		
r2   c                     [         R                  " / SQ/ SQ/ SQ// SQ/ SQ/ SQ//5      R                  [         R                  5      n SnSnSn[        R
                  R                  S	/ S
QSS/US9n[         R                  R                  SX2-  U5      R                  [         R                  5      n[         R                  R                  SX2-  U5      R                  [         R                  5      n[         R                  R                  SX2-  5      R                  [         R                  5      n[         R                  R                  SX2-  5      R                  [         R                  5      n[         R                  " Xx4SS9n	[        XXiS
9n
U
R                  5       u  p[        UXXi/UR                  [         R                  5      /SS9  g )Nr   r   r   )g      $@g      &@g      (@)g      *@g      ,@g      .@)g      0@g      1@g      2@r   rt   rk   r   rw   r`   rx   r   r   test_gru_seq_lengthr|   )r   r   r   r   r   r   r   randomrandnrA   r   ra   r   )r   r   r)   r%   r   r   r   r   r   r   r   r   r`   s                r/   export_seq_lengthGRU.export_seq_length   st    /?C#%79KL

 &
 	 
{{$$'K#	 % 
 IIOOA<jIPPJJ
 IIOOA<kJQQJJ

 iiooa!>?FFrzzRiiooa!>?FFrzzRNNC:A.%/a#ZZ

+,&		
r2   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X2-  U45      R                  [         R                  5      -  nU[         R                  " SX2-  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 )Nrn   ro   rp   rq   rr   rs   r   r=   r   g?r   rk   rv   rF   r`   )ry   rz   r)   r   )r   r   r   r   test_gru_batchwiser|   r~   )r   r   r)   r%   r   r   r   r   r   r   rF   r`   s               r/   export_batchwiseGRU.export_batchwise   s3   C:,#sSzlCDKKBJJW
{{$$"%L# % 
 277-z:

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

&
 %9a=XXbjj)3::bjj+AB%		
r2   ri   )r   N)
rc   rd   re   rf   staticmethodr   r   r   r   rh   ri   r2   r/   rk   rk   v   sR    
 
8 '
 '
R &
 &
P 
 
r2   rk   )typingr   r   numpyr   r   onnx.backend.test.case.baser   onnx.backend.test.case.noder   r   rk   ri   r2   r/   <module>r      s1   
    , .e ePQ
$ Q
r2   