B
    ӻd                 @   s   d Z ddlmZ ddlmZ ddlmZ ede dZede dZ	ed	e d
Z
ede dZede dZede dZG dd deZG dd deZG dd deZdd Zdd Zdd Zdd ZdS ) z4Utilities for Keras classes with v1 and v2 versions.    )context)ops)
LazyLoadertrainingz'tensorflow.python.keras.engine.trainingtraining_v1z*tensorflow.python.keras.engine.training_v1
base_layerz)tensorflow.python.keras.engine.base_layerbase_layer_v1z,tensorflow.python.keras.engine.base_layer_v1	callbacksz!tensorflow.python.keras.callbackscallbacks_v1z$tensorflow.python.keras.callbacks_v1c                   s    e Zd ZdZ fddZ  ZS )ModelVersionSelectorz,Chooses between Keras v1 and v2 Model class.c                s(   t  }t| tjtj|} tt| | S )N)should_use_v2
swap_classr   Modelr   superr   __new__)clsargskwargsuse_v2)	__class__ ]/var/www/html/venv/lib/python3.7/site-packages/tensorflow/python/keras/utils/version_utils.pyr   3   s    zModelVersionSelector.__new__)__name__
__module____qualname____doc__r   __classcell__r   r   )r   r   r   0   s   r   c                   s    e Zd ZdZ fddZ  ZS )LayerVersionSelectorz,Chooses between Keras v1 and v2 Layer class.c                s(   t  }t| tjtj|} tt| | S )N)r   r   r   Layerr   r   r   r   )r   r   r   r   )r   r   r   r   <   s    zLayerVersionSelector.__new__)r   r   r   r   r   r   r   r   )r   r   r   9   s   r   c                   s    e Zd ZdZ fddZ  ZS )TensorBoardVersionSelectorz;Chooses between Keras v1 and v2 TensorBoard callback class.c                sJ   t  }| }t|tjtj|} |tjkr:| tjkr:| ||S tt| | S )N)r   r   r	   ZTensorBoardr
   r   r   r   )r   r   r   r   Z	start_cls)r   r   r   r   E   s    
z"TensorBoardVersionSelector.__new__)r   r   r   r   r   r   r   r   )r   r   r   B   s   r   c              C   sD   t  rdS t r<t } t| ddr8| jdr8dS dS dS dS )z-Determine if v1 or v2 version should be used.TnameFZwrapped_functionN)r   Zexecuting_eagerlyr   #executing_eagerly_outside_functionsZget_default_graphgetattrr    
startswith)graphr   r   r   r   Q   s    r   c             C   s   | t kr| S | ||fkr$|r |S |S g }xH| jD ]>}|rBt||sP|s`t||r`t||||}n|}|| q0W t|| _| S )z2Swaps in v2_cls or v1_cls depending on graph mode.)object	__bases__
issubclassr   appendtuple)r   Zv2_clsZv1_clsr   	new_basesbasenew_baser   r   r   r   a   s    
r   c             C   s&   t  s"d}|j| |d}t|d S )NzCalling `{cls_name}.{method_name}` in graph mode is not supported when the `{cls_name}` instance was constructed with eager mode enabled. Please construct your `{cls_name}` instance in graph mode or call `{cls_name}.{method_name}` with eager mode enabled.)cls_namemethod_name)r   r!   format
ValueError)r-   r.   	error_msgr   r   r   disallow_legacy_graphz   s    r2   c             C   s   t | tjtjfS )N)
isinstancer   r   r   r   )objr   r   r   is_v1_layer_or_model   s    r5   N)r   Ztensorflow.python.eagerr   Ztensorflow.python.frameworkr   Z+tensorflow.python.keras.utils.generic_utilsr   globalsr   r   r   r   r	   r
   r%   r   r   r   r   r   r2   r5   r   r   r   r   <module>   s8   		