
    bIg                    n    d dl mZ d dl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y)
    )annotations)AnyN)Base)expectc                  ,    e Zd ZddZddZddZddZy)		GRUHelperc                   d}d}d}d}d}d}d}d}	|||g}
|
D ]  }||v rJ d	|         ||   j                   d
   | _        | j                  dk(  r|D ]%  }||k7  s	t        j                  ||   d
      ||<   ' ||   j                   d   }||   j                   d   }|j	                  |d
      }||   }|d
k(  r|nt        j
                  |d
d      }||v r||   nt        j                  d|	z  |z        }||v r||   nt        j                  ||f      }|j	                  |d
      }|| _        ||   | _        ||   | _	        || _
        || _        || _        || _        y 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)selfparamsr
   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/answerous/venv/lib/python3.12/site-packages/onnx/backend/test/case/node/gru.py__init__zGRUHelper.__init__   s   #a)  	?A;>":1# >>;	? %Qiooa0!# >6 "

6!91 =F1I> !)//"-K+JZZ*Fq	Aq[bkk!Q&:A ; q	XXa/1K?@ 
 "%&+BHHj+=V4WC**S!$CDFAYDFAYDFDFDHDH DK &''    c                :    ddt        j                  |       z   z  S )Nr   )r   expr"   r*   s     r.   fzGRUHelper.f?   s    Ar
N##r0   c                ,    t        j                  |      S )N)r   tanhr3   s     r.   gzGRUHelper.gB   s    wwqzr0   c                R   | 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 ]v  }t        j                  ||      t        j                  ||      z   |z   }t        j                  |dd      \  }}| j                  |      }| j                  |      }| j                  t        j                  |t        j                  |            t        j                  ||z  t        j                  |            z   |z   |z         }| j                  t        j                  |t        j                  |            |t        j                  |t        j                  |            |z   z  z   |z         }| j                   r|n|}d|z
  |z  ||z  z   }|j#                  |       |}y t        j                  |      }| j
                  dk(  r||d d dd d d d f<   | j$                  dk(  r	|d   }||fS 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dotr4   r7   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.stepE   s   VV\\!_
hhnnR(VV\\!_
HHj$"5"5z;OP((4661-c3((4661-c3/1xx/B,tT4t,,r~~sCj9:,,r~~sCj9:&&t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r0   N)r#   r   returnNone)r*   
np.ndarrayr^   r`   )r^   ztuple[np.ndarray, np.ndarray])__name__
__module____qualname__r/   r4   r7   r]    r0   r.   r   r      s    -(^$/r0   r   c                  T    e Zd Zedd       Zedd       Zedd       Zedd       Zy)GRUc                 h   t        j                  ddgddgddggg      j                  t         j                        } d}d}d	}d
}t        j
                  j                  dg dddg|      }|t        j                  d||z  |f      j                  t         j                        z  }|t        j                  d||z  |f      j                  t         j                        z  }t        | ||      }|j                         \  }	}
t        || ||g|
j                  t         j                        gd       y )N      ?       @      @      @      @      @r      皙?r   rf   r
   r   r    r\   inputsoutputsr(   r   test_gru_defaultsrs   rt   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_defaultsx   s    C:SzC:>?@GG

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

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

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

+,$		
r0   c                    t        j                  g dg dg dgg      j                  t         j                        } d}d}d}d}d}t        j
                  j                  dg ddd	g|
      }|t        j                  d||z  |f      j                  t         j                        z  }|t        j                  d||z  |f      j                  t         j                        z  }|t        j                  d||z  f      j                  t         j                        z  }	t        j                  d||z  f      j                  t         j                        }
t        j                  |	|
fd      }t        | |||      }|j                         \  }}t        || |||g|j                  t         j                        gd       y )Nrh   ri   rj   rk   rl   rm   g      @g       @g      "@r   ro   rf   r
   r   r   r   rq   r\   rr   r   r   test_gru_with_initial_biasrv   )r   ry   rz   r{   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   ?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.%1Q/31a#ZZ

+,-		
r0   c                    t        j                  g dg dg dgg dg dg dgg      j                  t         j                        } d}d}d}t        j
                  j                  d	g d
ddg|      }t         j                  j                  d||z  |      j                  t         j                        }t         j                  j                  d||z  |      j                  t         j                        }t         j                  j                  d||z        j                  t         j                        }t         j                  j                  d||z        j                  t         j                        }t        j                  ||fd      }	t        | |||	
      }
|
j                         \  }}t        || |||	g|j                  t         j                        gd       y )Nr   r   r   )g      $@g      &@g      (@)g      *@g      ,@g      .@)g      0@g      1@g      2@r   rn   rf   r   rq   r\   rr   r   r   test_gru_seq_lengthrv   )r   ry   rz   r{   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#%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.%1Q/31a#ZZ

+,&		
r0   c                    t        j                  ddggddggddggg      j                  t         j                        } d}d}d	}d
}d}t        j
                  j                  dg dddg||      }|t        j                  d||z  |f      j                  t         j                        z  }|t        j                  d||z  |f      j                  t         j                        z  }t        | |||      }	|	j                         \  }
}t        || ||g|
j                  t         j                        |j                  t         j                        gd       y )Nrh   ri   rj   rk   rl   rm   r   r9   r   g?r   rf   rp   rB   r\   )rs   rt   r(   r   )r
   r   r   r   test_gru_batchwiserv   rx   )r   r   r(   r$   r   r   r   r   r   r   rB   r\   s               r.   export_batchwisezGRU.export_batchwise   s?   C:,#sSzlCDKKBJJW
{{$$"%L# % 
 277+-z:

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

&
 %1&931a=XXbjj)3::bjj+AB%		
r0   N)r^   r_   )ra   rb   rc   staticmethodr   r   r   r   rd   r0   r.   rf   rf   w   sR    
 
8 '
 '
R &
 &
P 
 
r0   rf   )
__future__r   typingr   numpyr   r|   onnx.backend.test.case.baser   onnx.backend.test.case.noder   r   rf   rd   r0   r.   <module>r      s4    #    , .e ePQ
$ Q
r0   