
    Ng                     t    d dl mZmZ d dlZd dlZd dlmZ d dlm	Z	  G d d          Z
 G d de          ZdS )	    )AnyTupleN)Base)expectc                       e Zd ZdeddfdZdej        dej        fdZdej        dej        fdZde	ej        ej        f         fdZ
dS )		GRUHelperparamsreturnNc                    d}d}d}d}d}d}d}d}	|||g}
|
D ]}||v sJ d	|             ||         j         d
         | _        | j        dk    r)|D ]'}||k    rt          j        ||         d
          ||<   (||         j         d         }||         j         d         }|                    |d
          }||         }|d
k    r|nt          j        |d
d          }||v r||         nt          j        d|	z  |z            }||v r||         nt          j        ||f          }|                    |d
          }|| _        ||         | _        ||         | _	        || _
        || _        || _        || _        d S t                      )NXWRB	initial_hlinear_before_resetlayout   zMissing Required Input: r      axis   )shapenum_directionsnpsqueezeget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                       [/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnx/backend/test/case/node/gru.py__init__zGRUHelper.__init__   s   #a)  	? 	?A;;; >1 > >;;;;$Qioa0!## > >66 "
6!91 = = =F1I )/"-K+JZZ**Fq	Aq[[bk!Q&:&:A ;; q		Xa/1K?@@ 
 "%&++BHj+=V4W4WC**S!$$CDFAYDFAYDFDFDHDH DKKK &'''    r+   c                 8    ddt          j        |           z   z  S )Nr   )r   expr$   r+   s     r/   fzGRUHelper.f>   s    Ar

N##r1   c                 *    t          j        |          S )N)r   tanhr4   s     r/   gzGRUHelper.gA   s    wqzzr1   c                    | j         j        d         }| j        j        d         }| j         j        d         }t          j        || j        ||g          }g }t          j        | j        d          \  }}}t          j        | j        d          \  }	}
}t          j        | j	        d          \  }}}}}}t          j
        t          j        ||f                    }t          j
        t          j        |	|
f                    }t          j        t          j        ||f          t          j        ||f                    }| j        }t          j        | j         | j         j        d         d          D ]z}t          j        ||          t          j        ||          z   |z   }t          j        |dd          \  }}|                     |          }|                     |          }|                     t          j        |t          j
        |                    t          j        ||z  t          j
        |                    z   |z   |z             }|                     t          j        |t          j
        |                    |t          j        |t          j
        |                    |z   z  z   |z             }| j        r|n|}d|z
  |z  ||z  z   }|                    |           |}|t          j        |          }| j        dk    r||d d dd d d d f<   | j        dk    r	|d         }n)t          j
        |g d          }|d d d d dd d f         }||fS )	Nr   r   r   r      r   r   )r   r   r   r   )r   r   r    r   emptyr   splitr   r   r   	transposeconcatenateadddotr5   r8   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/   stepzGRUHelper.stepD   s   V\!_
hnR(V\!_
Hj$"5z;OPP(461--c3(461--c3/1x/B/B,tT4t,r~sCj99::,r~sCj99::&t55r~tTl7S7STTh$&$&,q/::: 	 	AF1g&&W)=)==GE8E1b))DAqq		Aq		Aq",s++,,&S",s"3"3445  I vvq",s++,,rvc2<#4#455<=> H
 !H3)AQ!a#g%AMM!CC~f--!##(AaaaAAAqqqjM;!B%CCQ--AAAAqqq"aaaK.C#vr1   )__name__
__module____qualname__r   r0   r   ndarrayr5   r8   r   r^    r1   r/   r   r      s        -( -( -( -( -( -(^$2: $"* $ $ $ $2: "*    /eBJ
23 / / / / / /r1   r   c                   n    e Zd Zedd            Zedd            Zedd            Zedd            ZdS )GRUr
   Nc                  |   t          j        ddgddgddggg                              t           j                  } d}d}d	}d
}t          j                            dg dddg|          }|t          j        d||z  |f                              t           j                  z  }|t          j        d||z  |f                              t           j                  z  }t          | ||          }|	                                \  }	}
t          || ||g|
                    t           j                  gd           d S )N      ?       @      @      @      @      @r      皙?r   re   r   r   r    r]   inputsoutputsr)   r   test_gru_defaultsrr   rs   namer   arrayastypefloat32onnxhelper	make_nodeonesr   r^   r   )input
input_sizer)   weight_scaler%   noder   r   gru_r]   s              r/   export_defaultszGRU.export_defaultsw   sS   C:SzC:>?@@GG
SS
{$$///B;K % 
 
 27+-z:
 

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

&

 %1***31a=ZZ
++,$		
 	
 	
 	
 	
 	
r1   c                     t          j        g dg dg dgg                              t           j                  } d}d}d}d}d}t          j                            dg ddd	g|
          }|t          j        d||z  |f                              t           j                  z  }|t          j        d||z  |f                              t           j                  z  }|t          j        d||z  f                              t           j                  z  }	t          j        d||z  f                              t           j                  }
t          j	        |	|
fd          }t          | |||          }|                                \  }}t          || |||g|                    t           j                  gd           d S )Nrg   rh   ri   rj   rk   rl   g      @g       @g      "@r   rn   re   r   r   r   r   rp   r]   rq   r   r   test_gru_with_initial_biasru   )r   rx   ry   rz   r{   r|   r}   r~   r   r>   r   r^   r   )r   r   r)   r   custom_biasr%   r   r   r   W_BR_Br   r   r   r]   s                  r/   export_initial_biaszGRU.export_initial_bias   s   ???OOO___MNOOVVJ
 
 
{$$'''K#	 % 
 
 27+-z:
 

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

&


 BGQ+(E$FGGNNJ
 
 
 h?[89::AA"*MMNC:A...%1Q///31a#ZZ
++,-		
 	
 	
 	
 	
 	
r1   c                     t          j        g dg dg dgg dg dg dgg                              t           j                  } d}d}d}t          j                            d	g d
ddg|          }t           j                            d||z  |                              t           j                  }t           j                            d||z  |                              t           j                  }t           j                            d||z                                t           j                  }t           j                            d||z                                t           j                  }t          j	        ||fd          }	t          | |||	
          }
|
                                \  }}t          || |||	g|                    t           j                  gd           d S )Nr   r   r   )g      $@g      &@g      (@)g      *@g      ,@g      .@)g      0@g      1@g      2@r   rm   re   r   rp   r]   rq   r   r   test_gru_seq_lengthru   )r   rx   ry   rz   r{   r|   r}   randomrandnr>   r   r^   r   )r   r   r)   r%   r   r   r   r   r   r   r   r   r]   s                r/   export_seq_lengthzGRU.export_seq_length   s    ///???C###%7%7%79K9K9KL
 

 &

 	 
{$$'''K#	 % 
 
 IOOA<jIIPPJ
 
 IOOA<kJJQQJ
 

 iooa;!>??FFrzRRiooa;!>??FFrzRRNC:A...%1Q///31a#ZZ
++,&		
 	
 	
 	
 	
 	
r1   c                     t          j        ddggddggddggg                              t           j                  } d}d}d	}d
}d}t          j                            dg dddg||          }|t          j        d||z  |f                              t           j                  z  }|t          j        d||z  |f                              t           j                  z  }t          | |||          }	|		                                \  }
}t          || ||g|
                    t           j                  |                    t           j                  gd           d S )Nrg   rh   ri   rj   rk   rl   r   r:   r   g?r   re   ro   rC   r]   )rr   rs   r)   r   )r   r   r   r   test_gru_batchwiseru   rw   )r   r   r)   r%   r   r   r   r   r   r   rC   r]   s               r/   export_batchwisezGRU.export_batchwise   ss   C:,#sSzlCDDKKBJWW
{$$"??%L# % 
 
 27+-z:
 

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

&

 %1&99931a=XXbj))3::bj+A+AB%		
 	
 	
 	
 	
 	
r1   )r
   N)r_   r`   ra   staticmethodr   r   r   r   rc   r1   r/   re   re   v   s        
 
 
 \
8 '
 '
 '
 \'
R &
 &
 &
 \&
P 
 
 
 \
 
 
r1   re   )typingr   r   numpyr   r{   onnx.backend.test.case.baser   onnx.backend.test.case.noder   r   re   rc   r1   r/   <module>r      s   
              , , , , , , . . . . . .e e e e e e e ePQ
 Q
 Q
 Q
 Q
$ Q
 Q
 Q
 Q
 Q
r1   