
    Ng0                      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j        dej        fdZ	de
ej        ej        f         fd	ZdS )

LSTMHelperparamsreturnNc                    d}d}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  t          j                  }||v r||         n"t          j        ||z  t          j                  }||v r||         n!t          j        ||ft          j                  }||v r||         n!t          j        ||ft          j                  }|| _        ||         | _	        ||         | _
        || _        || _        || _        || _        || _        d S t!                      )NXWRB	initial_h	initial_cPlayout      zMissing Required Input: r      axis   )dtype)shapenum_directionsnpsqueezegetswapaxeszerosfloat32r   r   r   r   r   H_0C_0LAYOUTNotImplementedError)selfr	   r   r   r   r   r$   r%   r   r&   number_of_gatesnumber_of_peepholesrequired_inputsikhidden_size
batch_sizer   xbph_0c_0s                          \/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnx/backend/test/case/node/lstm.py__init__zLSTMHelper.__init__   sH   a)  	? 	?A;;; >1 > >;;;;$Qioa0!## > >66 "
6!91 = = =F1I )/"-K+JZZ**Fq	Aq[[bk!Q&:&:A ;; q		Xa/1K?rzRRR  ;; q		X1K?rzRRR  &== sXz;7rzJJJ  &== sXz;7rzJJJ  DFAYDFAYDFDFDFDHDH DKKK &'''    r0   c                 8    ddt          j        |           z   z  S )Nr   )r   expr(   r0   s     r5   fzLSTMHelper.fN   s    Ar

N##r7   c                 *    t          j        |          S Nr   tanhr:   s     r5   gzLSTMHelper.gQ       wqzzr7   c                 *    t          j        |          S r=   r>   r:   s     r5   hzLSTMHelper.hT   rA   r7   c                    | j         j        d         }| j        j        d         }| j         j        d         }t          j        || j        ||g          }g }t          j        | j        d          \  }}}| j        }	| j        }
t          j        | j         | j         j        d         d          D ]@}t          j	        |t          j
        | j                            t          j	        |	t          j
        | j                            z   t          j        t          j        | j        d           z   }t          j        |dd          \  }}}}|                     |||
z  z             }|                     |||
z  z             }|                     |          }||
z  ||z  z   }|                     |||z  z             }||                     |          z  }|                    |           |}	|}
Bt          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$   r   emptyr   splitr   r%   dot	transposer   r   addr   r;   r@   rC   appendconcatenater&   )r(   
seq_lengthr.   r/   Yh_listp_ip_op_fH_tC_tr0   gatesr,   or;   cCHconcatenatedY_hs                        r5   stepzLSTMHelper.stepW   s>   V\!_
hnR(V\!_
Hj$"5z;OPP(461--c3hh$&$&,q/::: 	 	Aq",tv..//&bl4622334&"(461--./ 
 %B//JAq!Qq39}%%Aq39}%%Aq		AC!a%Aq37{##ADFF1IIAMM!CCC~f--!##(AaaaAAAqqqjM;!B%CCQ--AAAAqqq"aaaK.C#vr7   )__name__
__module____qualname__r   r6   r   ndarrayr;   r@   rC   r   r[    r7   r5   r   r      s        =( =( =( =( =( =(~$2: $"* $ $ $ $2: "*    2: "*    &eBJ
23 & & & & & &r7   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 )LSTMr
   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   皙?r   rb   r   r   r    rZ   inputsoutputsr.   r   test_lstm_defaultsrn   ro   namer   arrayastyper#   onnxhelper	make_nodeonesr   r[   r   )input
input_sizer.   weight_scaler)   noder   r   lstm_rZ   s              r5   export_defaultszLSTM.export_defaults   sS   C:SzC:>?@@GG
SS
{$$???RK[ % 
 
 27+-z:
 

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

&

 EQ!,,,31a=ZZ
++,%		
 	
 	
 	
 	
 	
r7   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)rd   re   rf   )rg   rh   ri   )      @       @g      "@r   r   rj   rb   )r   r   r   r   rl   rZ   rm   r   test_lstm_with_initial_biasrq   )r   rt   ru   r#   rv   rw   rx   ry   r"   rK   r   r[   r   )rz   r{   r.   r|   custom_biasr)   r}   r   r   W_BR_Br   r~   r   rZ   s                  r5   export_initial_biaszLSTM.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:q))EQ!q11131a#ZZ
++,.		
 	
 	
 	
 	
 	
r7   c                     t          j        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d|z  |z  f                              t           j                  }	t          j	        | j
        d         | j
        d                                       t           j                  }
t          j        d| j
        d         |f                              t           j                  }t          j        d| j
        d         |f                              t           j                  }|t          j        d||z  f                              t           j                  z  }t          | |||	|||          }|                                \  }}t          || |||	|
|||g|                    t           j                  gd           d S )N)rd   re   rf   rg   )rh   ri   r   r   r   r   rj   rb   )r   r   r   r   sequence_lensr   r   r   rl   rZ   rm   r   r   r   )r   r   r   r   r   r   r   test_lstm_with_peepholesrq   )r   rt   ru   r#   rv   rw   rx   ry   r"   repeatr   int32r   r[   r   )rz   r{   r.   r|   r)   r*   r}   r   r   r   seq_lensinit_hinit_cr   r~   r   rZ   s                    r5   export_peepholeszLSTM.export_peepholes   sl   ///1E1E1EFGHHOOJ
 
 
{$$WWWK#	 % 
 
 27+-z:
 

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

&

 Ha_,{:;<<CCBJOO9U[^U[^<<CCBHMM1ek!nk:;;BB2:NN1ek!nk:;;BB2:NN27A':['H#IJJQQJ
 
 
 qAa6V
 
 
 31aHffa@ZZ
++,+		
 	
 	
 	
 	
 	
r7   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 )Nrd   re   rf   rg   rh   ri   r      g333333?r   r   rb   rk   rM   rZ   )rn   ro   r.   r   )r   r   r   r   test_lstm_batchwiserq   rs   )rz   r{   r.   r|   r)   r   r}   r   r   r~   rM   rZ   s               r5   export_batchwisezLSTM.export_batchwise   ss   C:,#sSzlCDDKKBJWW
{$$"??%L# % 
 
 27+-z:
 

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

&

 EQ!F;;;31a=XXbj))3::bj+A+AB&		
 	
 	
 	
 	
 	
r7   )r
   N)r\   r]   r^   staticmethodr   r   r   r   r`   r7   r5   rb   rb      s        
 
 
 \
8 '
 '
 '
 \'
R *
 *
 *
 \*
X 
 
 
 \
 
 
r7   rb   )typingr   r   numpyr   rv   onnx.backend.test.case.baser   onnx.backend.test.case.noder   r   rb   r`   r7   r5   <module>r      s   
              , , , , , , . . . . . .o o o o o o o odU
 U
 U
 U
 U
4 U
 U
 U
 U
 U
r7   