
    bIgL                     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                  4    e Zd ZddZddZddZddZd	dZy)

LSTMHelperc                   d}d}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  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                        }|| _        ||   | _	        ||   | _
        || _        || _        || _        || _        || _        y 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)selfparamsr
   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/answerous/venv/lib/python3.12/site-packages/onnx/backend/test/case/node/lstm.py__init__zLSTMHelper.__init__   s   a)  	?A;>":1# >>;	? %Qiooa0!# >6 "

6!91 =F1I> !)//"-K+JZZ*Fq	Aq[bkk!Q&:A ; q	XXa/1K?rzzR  ; q	XX1K?rzzR  &= sXXz;7rzzJ  &= sXXz;7rzzJ  DFAYDFAYDFDFDFDHDH DK &''    c                :    ddt        j                  |       z   z  S )Nr   )r   expr&   r/   s     r4   fzLSTMHelper.fO   s    Ar
N##r6   c                ,    t        j                  |      S Nr   tanhr9   s     r4   gzLSTMHelper.gR       wwqzr6   c                ,    t        j                  |      S r<   r=   r9   s     r4   hzLSTMHelper.hU   r@   r6   c                B   | 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 ]A  }t        j                  |t        j                  | j                              t        j                  |	t        j                  | j                              z   t        j                  t        j                  | j                  d       z   }t        j                  |dd      \  }}}}| j                  |||
z  z         }| j                  |||
z  z         }| j!                  |      }||
z  ||z  z   }| j                  |||z  z         }|| j#                  |      z  }|j%                  |       |}	|}
D 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"   r   emptyr   splitr   r#   dot	transposer   r   addr   r:   r?   rB   appendconcatenater$   )r&   
seq_lengthr-   r.   Yh_listp_ip_op_fH_tC_tr/   gatesr+   or:   cCHconcatenatedY_hs                        r4   stepzLSTMHelper.stepX   s.   VV\\!_
hhnnR(VV\\!_
HHj$"5"5z;OP((4661-c3hhhh$&&$&&,,q/: 	Aq",,tvv./&&bll466234&&"((4661-./ 
 %B/JAq!Qq39}%Aq39}%Aq	AC!a%Aq37{#ADFF1IAMM!CC	" ~~f-!#(AaAqjM;;!B%C
 #v Q-AAq"aK.C#vr6   N)r'   r   returnNone)r/   
np.ndarrayr[   r]   )r[   ztuple[np.ndarray, np.ndarray])__name__
__module____qualname__r5   r:   r?   rB   rZ    r6   r4   r   r      s    =(~$&r6   r   c                  T    e Zd Zedd       Zedd       Zedd       Zedd       Zy)LSTMc                 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   皙?r   rc   r
   r   r    rY   inputsoutputsr-   r   test_lstm_defaultsro   rp   namer   arrayastyper!   onnxhelper	make_nodeonesr   rZ   r   )input
input_sizer-   weight_scaler(   noder   r   lstm_rY   s              r4   export_defaultszLSTM.export_defaults   s    C:SzC:>?@GG

S
{{$$?RK[ % 
 277+-z:

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

&
 EQ!,31a=ZZ

+,%		
r6   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)re   rf   rg   )rh   ri   rj   )      @       @g      "@r   r   rk   rc   )r
   r   r   r   rm   rY   rn   r   test_lstm_with_initial_biasrr   )r   ru   rv   r!   rw   rx   ry   rz   r    rJ   r   rZ   r   )r{   r|   r-   r}   custom_biasr(   r~   r   r   W_BR_Br   r   r   rY   s                  r4   export_initial_biaszLSTM.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:q)EQ!q131a#ZZ

+,.		
r6   c                    t        j                  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d|z  |z  f      j                  t         j                        }	t        j                  | j                  d   | j                  d         j                  t         j                        }
t        j                  d| j                  d   |f      j                  t         j                        }t        j                  d| j                  d   |f      j                  t         j                        }|t        j                  d||z  f      j                  t         j                        z  }t        | |||	|||      }|j                         \  }}t        || |||	|
|||g|j                  t         j                        gd       y )N)re   rf   rg   rh   )ri   rj   r   r   r   r   rk   rc   )r
   r   r   r   sequence_lensr   r   r   rm   rY   rn   r   r   r   )r
   r   r   r   r   r   r   test_lstm_with_peepholesrr   )r   ru   rv   r!   rw   rx   ry   rz   r    repeatr   int32r   rZ   r   )r{   r|   r-   r}   r(   r)   r~   r   r   r   seq_lensinit_hinit_cr   r   r   rY   s                    r4   export_peepholeszLSTM.export_peepholes   s!   /1EFGHOOJJ
 
{{$$WK#	 % 
 277+-z:

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

&
 HHa_,{:;<CCBJJO99U[[^U[[^<CCBHHM1ekk!nk:;BB2::N1ekk!nk:;BB2::N277A':['H#IJQQJJ
 
 qAa6V
 31aHffa@ZZ

+,+		
r6   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 )Nre   rf   rg   rh   ri   rj   r      g333333?r   r   rc   rl   rL   rY   )ro   rp   r-   r   )r
   r   r   r   test_lstm_batchwiserr   rt   )r{   r|   r-   r}   r(   r   r~   r   r   r   rL   rY   s               r4   export_batchwisezLSTM.export_batchwise   s?   C:,#sSzlCDKKBJJW
{{$$"%L# % 
 277+-z:

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

&
 EQ!F;31a=XXbjj)3::bjj+AB&		
r6   N)r[   r\   )r^   r_   r`   staticmethodr   r   r   r   ra   r6   r4   rc   rc      sR    
 
8 '
 '
R *
 *
X 
 
r6   rc   )
__future__r   typingr   numpyr   rw   onnx.backend.test.case.baser   onnx.backend.test.case.noder   r   rc   ra   r6   r4   <module>r      s4    #    , .o odU
4 U
r6   