o
    ?e                     @   s`   d Z ddlmZ ddlmZ ddlmZ ddlmZ dd Zdd	 Zd
d Z	dd Z
dd ZdS )z*Utilities for computing default gradients.    )dtypes)tensor_shape)	array_ops)resource_variable_opsc                 C   sT   | j tjkr't| }|du s|jrt|jdkr!tdt	|  |jd j S | j S )z7Return the dtype for the default gradient for a Tensor.N   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_data r   g/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/tensorflow/python/ops/default_gradient.pyget_zeros_dtype   s   
r   c                 C   sp   | j tjkr2t| }|du s|jrt|jdkr!tdt	|  |jd }t
|jt|j fS | j| j fS )zAReturn the shape and dtype for the default gradient for a Tensor.Nr   r   r   )r   r   r	   r   r
   r   r   r   r   r   r   ZTensorShapeshapeZas_dtype)r   r   r   r   r   r   shape_and_dtype"   s   



r   c                 C   $   | j tjkrtjt|  S t| S )z9Like array_ops.zeros_like, but respects resource handles.)r   r   r	   r   Zzerosr   
zeros_liker   r   r   r   r   0      
r   c                 C   r   )z8Like array_ops.ones_like, but respects resource handles.)r   r   r	   r   Zonesr   	ones_liker   r   r   r   r   8   r   r   c                 C   s:   | j tjkrt| }|du s|jrt|jdkrdS dS )zWhether tensor `t` supports creating a default gradient.

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

  Args:
    t: Tensor

  Returns:
    Bool
  Nr   FT)r   r   r	   r   r
   r   r   r   r   r   r   r   supports_default_grad@   s   
r   N)__doc__Ztensorflow.python.frameworkr   r   Ztensorflow.python.opsr   r   r   r   r   r   r   r   r   r   r   <module>   s   