
    bIgu                    P    d dl mZ d dlZd dlmZ  G d de      Z G d de      Zy)    )annotationsN)OpRunc                  B    e Zd Zd Zd Zd Zd Z	 	 	 	 	 	 	 	 	 	 	 ddZy)	CommonGRUc                t    t        j                  | ||       t        |j                        | _        d| _        y )N   )r   __init__lenoutput	n_outputsnumber_of_gatesself	onnx_node
run_paramss      V/var/www/html/answerous/venv/lib/python3.12/site-packages/onnx/reference/ops/op_gru.pyr	   zCommonGRU.__init__   s,    tY
3Y--.     c                :    ddt        j                  |       z   z  S )N   )npexpr   xs     r   fzCommonGRU.f   s    Ar
N##r   c                ,    t        j                  |      S N)r   tanhr   s     r   gzCommonGRU.g   s    wwqzr   c                v   |j                   d   }|j                   d   }|j                   d   }	t        j                  |||	|g      }
g }t        j                  |d      \  }}}t        j                  |d      \  }}}t        j                  |d      \  }}}}}}t        j                  t        j
                  ||f            }t        j                  t        j
                  ||f            }t        j                  t        j
                  ||f      t        j
                  ||f            }|}t        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
                  |      }$|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      axis   )r$   r   r   r   )shaper   emptysplit	transposeconcatenateadddotr   r   linear_before_resetappendlayout)&r   XRBWH_0num_directions
seq_lengthhidden_size
batch_size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CommonGRU._step   s   WWQZ
iimWWQZ
HHj.*kJK((1a.c3((1a.c3/1xx1~,tT4t,,r~~sCj9:,,r~~sCj9:&&t5r~~tTl7ST!QWWQZa0 	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
 !44)AQ!a#g%AMM!C'	* ~~f-Q(AaAqjM;;!B%C
 #v Q-AAq"aK.C#vr   Nc                l   |j                   d   }|dk(  rt        j                  |d      }t        j                  |d      }|t        j                  |d      }|t        j                  |d      }|t        j                  |d      }|j                   d   }|j                   d   }|dk(  r|nt        j                  |dd      }||n0t        j                  d| j
                  z  |z  |j                        }||n"t        j                  ||f|j                        }|}|}n&t        d| d| j                  j                  d	      | j                  ||||||
      \  }}|j                  |j                        }| j                  dk(  r|fS ||j                  |j                        fS )Nr   r   r"   r    r$   )dtypezUnsupported value z! for num_directions and operator .)r4   )r%   r   squeezeswapaxeszerosr   rU   NotImplementedError	__class____name__rS   astyper   )r   r/   r2   r0   r1   sequence_lens	initial_hactivation_alphaactivation_betaactivationsclip	directionr6   r.   r,   r4   r7   bh_0r3   r8   rR   s                         r   _runzCommonGRU._runH   s   $ Q

11%A

11%A}JJqq)( "

=q A$JJyq9	''"+KJq[bkk!Q&:A = XXa$"6"66DAGGT  ( XXz;7qwwG  AC%$^$44U>>**-Q0 
 Aq!QNK3HHQWW~~*tHCJJqww4G0HHr   )NNNNNNNNNNN)r\   
__module____qualname__r	   r   r   rS   rg    r   r   r   r      s@    !
$/l  7Ir   r   c                      e Zd Zd Zy)GRUc                2    t         j                  | ||       y r   )r   r	   r   s      r   r	   zGRU.__init__   s    4J7r   N)r\   rh   ri   r	   rj   r   r   rl   rl      s    8r   rl   )
__future__r   numpyr   onnx.reference.op_runr   r   rl   rj   r   r   <module>rq      s-    #  'tI tIn8) 8r   