o
    »i eï  ã                   @   sV   d Z ddlmZ ddlmZ e d¡dd„ ƒZe d¡dd	„ ƒZe d
¡dd„ ƒZdS )z"Gradients for CuudnnRNN operators.é    )Úops)Úgen_cudnn_rnn_opsÚCudnnRNNc                 G   sä   |   d¡s	tdƒ‚tjdi d| jd “d| jd “d| jd “d	| jd
 “d| jd “d| jd “d| jd “d|d “d|d “d|d “d| jd
 “d|   d¡“d|   d¡“d|   d¡“d|   d¡“d|   d¡“d|   d¡“ŽS )zGradients for the CudnnRNN op.Úis_trainingz>To use CudnnRNN in gradients, is_training must be set to True.Úinputr   Úinput_hé   Úinput_cé   Úparamsé   ÚoutputÚoutput_hÚoutput_cÚoutput_backpropÚoutput_h_backpropÚoutput_c_backpropÚreserve_spaceÚdropoutÚseedÚseed2Úrnn_modeÚ
input_modeÚ	directionN© )Úget_attrÚ
ValueErrorr   Úcudnn_rnn_backpropÚinputsÚoutputs©ÚopÚgradsr   r   úS/var/www/myenv/lib/python3.10/site-packages/tensorflow/python/ops/cudnn_rnn_grad.pyÚ_cudnn_rnn_backward   sN   
ÿ

ÿ
þ
ý
ü
û
ú
ùø	÷
ö
õ
ô
ó
ò
ñ
ð
ïr$   Ú
CudnnRNNV2c                 G   sð   |   d¡s	tdƒ‚tjdi d| jd “d| jd “d| jd “d	| jd
 “d| jd “d| jd “d| jd “d|d “d|d “d|d “d| jd
 “d| jd “d|   d¡“d|   d¡“d|   d¡“d|   d¡“d|   d¡“d|   d¡“ŽS )Nr   z@To use CudnnRNNV2 in gradients, is_training must be set to True.r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Úhost_reservedé   r   r   r   r   r   r   r   )r   r   r   Úcudnn_rnn_backprop_v2r   r   )r!   Úgradr   r   r#   Ú_cudnn_rnn_backward_v2.   sR   
ÿ

ÿ
þ
ý
ü
û
ú
ùø	÷
ö
õ
ô
ó
ò
ñ
ð
ï
îr*   Ú
CudnnRNNV3c                 G   s  |   d¡s	tdƒ‚tjdi d| jd “d| jd “d| jd “d	| jd
 “d| jd “d| jd “d| jd “d| jd “d|d “d|d “d|d “d| jd
 “d| jd “d|   d¡“d|   d¡“d|   d¡“d|   d¡“d|   d¡“d|   d¡“d|   d¡“d|   d¡“Žd S ) z Gradients for the CudnnRNNV3 op.r   z@To use CudnnRNNV3 in gradients, is_training must be set to True.r   r   r   r   r	   r
   r   r   Úsequence_lengthsr'   r   r   r   r   r   r   r   r&   r   r   r   Ú
time_majorÚnum_projr   r   r   )NNr   )r   r   r   Úcudnn_rnn_backprop_v3r   r   r    r   r   r#   Ú_cudnn_rnn_backwardv3H   sb   
ÿ

ÿ
þ
ý
ü
û
ú
ù
ø	÷
öõ
ô
ó
ò
ñ
ð
ï
î
í
ì
ëër0   N)	Ú__doc__Útensorflow.python.frameworkr   Útensorflow.python.opsr   ÚRegisterGradientr$   r*   r0   r   r   r   r#   Ú<module>   s   

