o
    ®Ÿ?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_opsZ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   Zcudnn_rnn_backpropÚinputsÚoutputs©ÚopZgradsr   r   úe/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/tensorflow/python/ops/cudnn_rnn_grad.pyÚ_cudnn_rnn_backward   sN   
ÿ

ÿ
þ
ý
ü
û
ú
ùø	÷
ö
õ
ô
ó
ò
ñ
ð
ïr!   Z
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   Zcudnn_rnn_backprop_v2r   r   )r   Zgradr   r   r    Ú_cudnn_rnn_backward_v2.   sR   
ÿ

ÿ
þ
ý
ü
û
ú
ùø	÷
ö
õ
ô
ó
ò
ñ
ð
ï
îr$   Z
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   Zsequence_lengthsr#   r   r   r   r   r   r   r   r"   r   r   r   Z
time_majorZnum_projr   r   r   )NNr   )r   r   r   Zcudnn_rnn_backprop_v3r   r   r   r   r   r    Ú_cudnn_rnn_backwardv3H   sb   
ÿ

ÿ
þ
ý
ü
û
ú
ù
ø	÷
öõ
ô
ó
ò
ñ
ð
ï
î
í
ì
ëër%   N)	Ú__doc__Ztensorflow.python.frameworkr   Ztensorflow.python.opsr   ZRegisterGradientr!   r$   r%   r   r   r   r    Ú<module>   s   

