o
    Ne                     @   s   d Z ddlm  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ZG dd dZG dd dZdd Zdd Zdd Zdd ZdS )z4Utilities for Keras classes with v1 and v2 versions.    N)
LazyLoadertrainingzkeras.engine.trainingtraining_v1zkeras.engine.training_v1
base_layerzkeras.engine.base_layerbase_layer_v1zkeras.engine.base_layer_v1	callbackszkeras.callbackscallbacks_v1zkeras.callbacks_v1c                           e Zd ZdZ fddZ  ZS )ModelVersionSelectorz,Chooses between Keras v1 and v2 Model class.c                    (   t  }t| tjtj|} tt| | S N)should_use_v2
swap_classr   Modelr   superr
   __new__clsargskwargsuse_v2	__class__ ID:\Projects\ConvertPro\env\Lib\site-packages\keras/utils/version_utils.pyr   &      zModelVersionSelector.__new____name__
__module____qualname____doc__r   __classcell__r   r   r   r   r
   #       r
   c                       r	   )LayerVersionSelectorz,Chooses between Keras v1 and v2 Layer class.c                    r   r   )r   r   r   Layerr   r   r#   r   r   r   r   r   r   /   r   zLayerVersionSelector.__new__r   r   r   r   r   r#   ,   r"   r#   c                       r	   )TensorBoardVersionSelectorz;Chooses between Keras v1 and v2 TensorBoard callback class.c                    sN   t  }| }t|tjtj|} |tjkr| tjkr| |i |S tt| | S r   )r   r   r   ZTensorBoardr   r   r%   r   )r   r   r   r   Z	start_clsr   r   r   r   8   s   

z"TensorBoardVersionSelector.__new__r   r   r   r   r   r%   5   r"   r%   c                  C   sH   t  rdS t jj r"t jj } t| ddr | jdr dS dS dS )z-Determine if v1 or v2 version should be used.TnameFZwrapped_function)	tfZexecuting_eagerlycompatv1#executing_eagerly_outside_functionsZget_default_graphgetattrr&   
startswith)graphr   r   r   r   H   s   r   c                 C   s|   | t kr| S | ||fv r|r|S |S g }| jD ]}|r t||s'|s/t||r/t||||}n|}|| q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   Y   s&   


r   c                 C   sB   t jj sd|  d| d|  d|  d|  d| d}t|d S )Nz	Calling `.z+` in graph mode is not supported when the `zK` instance was constructed with eager mode enabled. Please construct your `z"` instance in graph mode or call `z` with eager mode enabled.)r'   r(   r)   r*   
ValueError)cls_namemethod_name	error_msgr   r   r   disallow_legacy_graphu   s   r;   c                 C   s   t | tjtjfS r   )
isinstancer   r$   r   r   )objr   r   r   is_v1_layer_or_model   s   r>   )r    Ztensorflow.compat.v2r(   v2r'   Zkeras.utils.generic_utilsr   globalsr   r   r   r   r   r   r
   r#   r%   r   r   r;   r>   r   r   r   r   <module>   s$   		