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

11 5FI ' !)//"-K+JZZ*F	Aq[bkk!Q&:A ; 	XXa/1K?@ 
 "%&+BHHj=V4WC**S!$CDFYDFYDFDFDHDH DK &''    c                <    SS[         R                  " U* 5      -   -  $ )Nr   )r   expr$   r-   s     r1   fGRUHelper.f?   s    Ar
N##r4   c                .    [         R                  " U5      $ )N)r   tanhr7   s     r1   gGRUHelper.gB   s    wwqzr4   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dotr8   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                                    r1   stepGRUHelper.stepE   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r4   )r   r    r"   r!   r   r   r   r   N)r%   r   returnNone)r-   
np.ndarrayre   rg   )re   ztuple[np.ndarray, np.ndarray])	__name__
__module____qualname____firstlineno__r2   r8   r<   rc   __static_attributes__ r4   r1   r   r      s    -(^$/r4   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)	GRUw   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   ro   r   r   r    rb   inputsoutputsr+   r   test_gru_defaultsr}   r~   namer   arrayastypefloat32onnxhelper	make_nodeonesr   rc   r   )input
input_sizer+   weight_scaler&   noder   r   gru_rb   s              r1   export_defaultsGRU.export_defaultsx   s   C:SzC:>?@GG

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

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

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

+,$		
r4   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rr   rs   rt   ru   rv   rw   g      @g       @g      "@r   ry   ro   r   r   r   r   r{   rb   r|   r   r   test_gru_with_initial_biasr   )r   r   r   r   r   r   r   r   r   rC   r   rc   r   )r   r   r+   r   custom_biasr&   r   r   r   W_BR_Br   r   r   rb   s                  r1   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

+,-		
r4   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   rx   ro   r   r{   rb   r|   r   r   test_gru_seq_lengthr   )r   r   r   r   r   r   r   randomrandnrC   r   rc   r   )r   r   r+   r&   r   r   r   r   r   r   r   r   rb   s                r1   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

+,&		
r4   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 )Nrr   rs   rt   ru   rv   rw   r   r?   r   g?r   ro   rz   rH   rb   )r}   r~   r+   r   )r   r   r   r   test_gru_batchwiser   r   )r   r   r+   r&   r   r   r   r   r   r   rH   rb   s               r1   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%		
r4   rm   N)re   rf   )
rh   ri   rj   rk   staticmethodr   r   r   r   rl   rm   r4   r1   ro   ro   w   sR    
 
8 '
 '
R &
 &
P 
 
r4   ro   )
__future__r   typingr   numpyr   r   onnx.backend.test.case.baser   onnx.backend.test.case.noder   r   ro   rm   r4   r1   <module>r      s4    #    , .e ePQ
$ Q
r4   