B
    d                 @   s   d Z ddlZddlZddlZddlZddlZddlm  mZ	 ej
ej
eddej
ddfZdd Zdd	 Zd
d ZdddZdd ZdS )z=Utilities related to Keras exception stack trace prettifying.    Nz..Z
tensorflowpythonc             C   s   xt D ]}|| krdS qW dS )NFT)_EXCLUDED_PATHS)fnameZ	exclusion r   M/var/www/html/venv/lib/python3.7/site-packages/keras/utils/traceback_utils.pyinclude_frame   s    
r   c             C   st   d}t t| }x2t|D ]&\}}t|jjrt|||j	|}qW |dkrp|rp|d \}}t|||j	|}|S )zFIterate through traceback frames and return a new, filtered traceback.N)
list	tracebackwalk_tbreversedr   f_codeco_filenametypesTracebackTypef_lasti)tbZlast_tbZtb_listfline_nor   r   r   _process_traceback_frames&   s    r   c                s8   t jjdkst jjdk r S  fdd}tjj |S )zLFilter out Keras-internal stack trace frames in exceptions raised by
    fn.      c           
      sj   t j s | |S d }zHy
 | |S  tk
r\ } zt|j}||d W d d }~X Y nX W d ~X d S )N)tf	debuggingZis_traceback_filtering_enabled	Exceptionr   __traceback__with_traceback)argskwargsZfiltered_tbe)fnr   r   error_handler;   s    



"z'filter_traceback.<locals>.error_handler)sysversion_infomajorminorr   __internal__	decoratormake_decorator)r    r!   r   )r    r   filter_traceback5   s    r)   c                s    fdd}t jj |S )a  Add information about call argument values to an error message.

    Arguments:
      fn: Function to wrap. Exceptions raised by the this function will be
        re-raised with additional information added to the error message,
        displaying the values of the different arguments that the function
        was called with.
      object_name: String, display name of the class/function being called,
        e.g. `'layer "layer_name" (LayerClass)'`.

    Returns:
      A wrapped version of `fn`.
    c                 s  d }d }zy
 | |S  t k
r } zt|dr:|t }y|j| |}W n tk
rl   |Y nX g }xXt|j D ]F}|j	|j
krtjt|j
|j	 }n|j}|d|j	 d|  qW |rd|}t|tjjr|j}n|jr|jd }nd}rn j }	d|	 d| d	|	 d
| }t|tjjr`||j|j||j}
n.y||}
W n tk
r   t|}
Y nX d|
_n|}
|
|jd W d d }~X Y nX W d ~~X d S )N_keras_call_info_injectedu     • =
r    z#Exception encountered when calling z.

z

Call arguments received by z:
T) r   hasattrinspect	signaturebind	TypeErrorr	   
parametersvaluesname	argumentsr   nestZmap_structureformat_argument_valuedefaultappendjoin
isinstanceerrorsZOpErrormessager   __name__	__class__Znode_defopZ
error_codeRuntimeErrorr*   r   r   )r   r   r0   Zbound_signaturer   Zarguments_contextargvaluer>   Zdisplay_nameZnew_e)r    object_namer   r   r!   \   sP    




$z8inject_argument_info_in_traceback.<locals>.error_handler)r   r&   r'   r(   )r    rE   r!   r   )r    rE   r   !inject_argument_info_in_tracebackM   s    DrF   c             C   s,   t | tjr$d| j d| jj dS t| S )Nztf.Tensor(shape=z, dtype=))r<   r   ZTensorshapeZdtyper5   repr)rD   r   r   r   r8      s    r8   )N)__doc__r/   osr"   r
   r   Ztensorflow.compat.v2compatZv2r   pathabspathr;   __file__r   r   r   r)   rF   r8   r   r   r   r   <module>   s   
V