
    AVh                     V    d Z ddlmZ ddlmZ ddlmZ ddlmZ d Zd Zd Z	d	 Z
d
 Zy)z*Utilities for computing default gradients.    )dtypes)tensor_shape)	array_ops)resource_variable_opsc                 *   | j                   t        j                  k(  rkt        j                  |       }|$|j
                  rt        |j                        dk7  rt        dt        |       z        |j                  d   j                   S | j                   S )z7Return the dtype for the default gradient for a Tensor.   ZInternal error: Tried to take gradients (or similar) of a variable without handle data:
%sr   )
dtyper   resourcer   get_eager_safe_handle_datais_setlenshape_and_type
ValueErrorstrthandle_datas     V/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/ops/default_gradient.pyget_zeros_dtyper      s    WW'BB1EK;#5#5K&&'1, @BEa&I J J%%a(...	
.    c                    | j                   t        j                  k(  rt        j                  |       }|$|j
                  rt        |j                        dk7  rt        dt        |       z        |j                  d   }t        j                  |j                        t        j                  |j                         fS | j                  | j                   fS )zAReturn the shape and dtype for the default gradient for a Tensor.r   r	   r   )r
   r   r   r   r   r   r   r   r   r   r   TensorShapeshapeas_dtype)r   r   r   s      r   shape_and_dtyper   "   s    WW'BB1EK;#5#5K&&'1, @BEa&I J J //2N$$^%9%9:OON0013 3	
!''	r   c                     | j                   t        j                  k(  rt        j                  t        |        S t        j                  |       S )z9Like array_ops.zeros_like, but respects resource handles.)r
   r   r   r   zerosr   
zeros_liker   s    r   r   r   0   s7    WW??OA.//""r   c                     | j                   t        j                  k(  rt        j                  t        |        S t        j                  |       S )z8Like array_ops.ones_like, but respects resource handles.)r
   r   r   r   onesr   	ones_liker    s    r   r#   r#   8   s7    WW>>?1-..q!!r   c                     | j                   t        j                  k(  r<t        j                  |       }|$|j
                  rt        |j                        dk7  ryy)zWhether tensor `t` supports creating a default gradient.

  This function assumes that `t` is of a trainable type.

  Args:
    t: Tensor

  Returns:
    Bool
  r   FT)r
   r   r   r   r   r   r   r   r   s     r   supports_default_gradr%   @   sK     WW'BB1EK;#5#5K&&'1,	r   N)__doc__tensorflow.python.frameworkr   r   tensorflow.python.opsr   r   r   r   r   r#   r%    r   r   <module>r*      s/    1 . 4 + 7	#"r   