
    
Ng                     R    d dl Zd dlmZ  G d de          Z G d de          ZdS )    N)OpRunc                   D    e Zd Zd Zd Zd Zd Z	 	 	 	 	 	 	 	 	 	 	 ddZdS )	CommonGRUc                 r    t          j        | ||           t          |j                  | _        d| _        d S )N   )r   __init__lenoutput	n_outputsnumber_of_gatesself	onnx_node
run_paramss      U/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnx/reference/ops/op_gru.pyr   zCommonGRU.__init__   s6    tY
333Y-..     c                 8    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    wqzzr   c                 N   |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 ]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        |          }$|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      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   WQZ
imWQZ
Hj.*kJKK(1a..c3(1a..c3/1x1~~,tT4t,r~sCj99::,r~sCj99::&t55r~tTl7S7STT!QWQZa000 	 	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
 !4C)AQ!a#g%AMM!CC~f--Q(AaaaAAAqqqjM;!B%CCQ--AAAAqqq"aaaK.C#vr   Nc                 $   |j         d         }|dk    rt          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          }||n%t          j        d| j        z  |z  |j                  }||nt          j        ||f|j                  }|}|}n t          d| d| j        j	        d	          | 
                    ||||||
          \  }}|                    |j                  }| j        dk    r|fn||                    |j                  fS )Nr   r   r!   r   r#   )dtypezUnsupported value z! for num_directions and operator .)r3   )r$   r   squeezeswapaxeszerosr   rT   NotImplementedError	__class____name__rR   astyper   )r   r.   r1   r/   r0   sequence_lens	initial_hactivation_alphaactivation_betaactivationsclip	directionr5   r-   r+   r3   r6   bh_0r2   r7   rQ   s                         r   _runzCommonGRU._runH   s   $ Q
11%%%A
11%%%A}Jqq)))( "
=q A A A$Jyq999	'"+KJq[[bk!Q&:&:A = Xa$"66DAGTTT  ( 	Xz;7qwGGG  ACC%0^ 0 0>*0 0 0  
 Aq!QNKK3HHQW~**ttCJJqw4G4G0HHr   )NNNNNNNNNNN)r[   
__module____qualname__r   r   r   rR   rf    r   r   r   r      s        ! ! !
$ $ $  / / /l  7I 7I 7I 7I 7I 7Ir   r   c                       e Zd Zd ZdS )GRUc                 >    t                               | ||           d S r   )r   r   r   s      r   r   zGRU.__init__   s     4J77777r   N)r[   rg   rh   r   ri   r   r   rk   rk      s#        8 8 8 8 8r   rk   )numpyr   onnx.reference.op_runr   r   rk   ri   r   r   <module>ro      s        ' ' ' ' ' 'tI tI tI tI tI tI tI tIn8 8 8 8 8) 8 8 8 8 8r   