# Copyright 2015 The TensorFlow Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== """ Top-level module of TensorFlow. By convention, we refer to this module as `tf` instead of `tensorflow`, following the common practice of importing TensorFlow via the command `import tensorflow as tf`. The primary function of this module is to import all of the public TensorFlow interfaces into a single place. The interfaces themselves are located in sub-modules, as described below. Note that the file `__init__.py` in the TensorFlow source code tree is actually only a placeholder to enable test cases to run. The TensorFlow build replaces this file with a file generated from [`api_template.__init__.py`](https://www.github.com/tensorflow/tensorflow/blob/master/tensorflow/api_template.__init__.py) """ import distutils as _distutils import inspect as _inspect import logging as _logging import os as _os import site as _site import sys as _sys import typing as _typing from tensorflow.python.tools import module_util as _module_util from tensorflow.python.util.lazy_loader import LazyLoader as _LazyLoader # Make sure code inside the TensorFlow codebase can use tf2.enabled() at import. _os.environ['TF2_BEHAVIOR'] = '1' from tensorflow.python import tf2 as _tf2 _tf2.enable() from ._api.v2 import __internal__ from ._api.v2 import __operators__ from ._api.v2 import audio from ._api.v2 import autodiff from ._api.v2 import autograph from ._api.v2 import bitwise from ._api.v2 import compat from ._api.v2 import config from ._api.v2 import data from ._api.v2 import debugging from ._api.v2 import distribute from ._api.v2 import dtypes from ._api.v2 import errors from ._api.v2 import experimental from ._api.v2 import feature_column from ._api.v2 import graph_util from ._api.v2 import image from ._api.v2 import io from ._api.v2 import linalg from ._api.v2 import lite from ._api.v2 import lookup from ._api.v2 import math from ._api.v2 import mlir from ._api.v2 import nest from ._api.v2 import nn from ._api.v2 import profiler from ._api.v2 import quantization from ._api.v2 import queue from ._api.v2 import ragged from ._api.v2 import random from ._api.v2 import raw_ops from ._api.v2 import saved_model from ._api.v2 import sets from ._api.v2 import signal from ._api.v2 import sparse from ._api.v2 import strings from ._api.v2 import summary from ._api.v2 import sysconfig from ._api.v2 import test from ._api.v2 import tpu from ._api.v2 import train from ._api.v2 import types from ._api.v2 import version from ._api.v2 import xla from tensorflow.python.data.ops.optional_ops import OptionalSpec from tensorflow.python.eager.backprop import GradientTape from tensorflow.python.eager.context import executing_eagerly from tensorflow.python.eager.polymorphic_function.polymorphic_function import function from tensorflow.python.framework.constant_op import constant from tensorflow.python.framework.device_spec import DeviceSpecV2 as DeviceSpec from tensorflow.python.framework.dtypes import DType from tensorflow.python.framework.dtypes import as_dtype from tensorflow.python.framework.dtypes import bfloat16 from tensorflow.python.framework.dtypes import bool from tensorflow.python.framework.dtypes import complex128 from tensorflow.python.framework.dtypes import complex64 from tensorflow.python.framework.dtypes import double from tensorflow.python.framework.dtypes import float16 from tensorflow.python.framework.dtypes import float32 from tensorflow.python.framework.dtypes import float64 from tensorflow.python.framework.dtypes import half from tensorflow.python.framework.dtypes import int16 from tensorflow.python.framework.dtypes import int32 from tensorflow.python.framework.dtypes import int64 from tensorflow.python.framework.dtypes import int8 from tensorflow.python.framework.dtypes import qint16 from tensorflow.python.framework.dtypes import qint32 from tensorflow.python.framework.dtypes import qint8 from tensorflow.python.framework.dtypes import quint16 from tensorflow.python.framework.dtypes import quint8 from tensorflow.python.framework.dtypes import resource from tensorflow.python.framework.dtypes import string from tensorflow.python.framework.dtypes import uint16 from tensorflow.python.framework.dtypes import uint32 from tensorflow.python.framework.dtypes import uint64 from tensorflow.python.framework.dtypes import uint8 from tensorflow.python.framework.dtypes import variant from tensorflow.python.framework.importer import import_graph_def from tensorflow.python.framework.indexed_slices import IndexedSlices from tensorflow.python.framework.indexed_slices import IndexedSlicesSpec from tensorflow.python.framework.load_library import load_library from tensorflow.python.framework.load_library import load_op_library from tensorflow.python.framework.ops import Graph from tensorflow.python.framework.ops import Operation from tensorflow.python.framework.ops import RegisterGradient from tensorflow.python.framework.ops import Tensor from tensorflow.python.framework.ops import control_dependencies from tensorflow.python.framework.ops import convert_to_tensor_v2_with_dispatch as convert_to_tensor from tensorflow.python.framework.ops import device_v2 as device from tensorflow.python.framework.ops import get_current_name_scope from tensorflow.python.framework.ops import init_scope from tensorflow.python.framework.ops import inside_function from tensorflow.python.framework.ops import name_scope_v2 as name_scope from tensorflow.python.framework.ops import no_gradient from tensorflow.python.framework.sparse_tensor import SparseTensor from tensorflow.python.framework.sparse_tensor import SparseTensorSpec from tensorflow.python.framework.tensor_conversion_registry import register_tensor_conversion_function from tensorflow.python.framework.tensor_shape import TensorShape from tensorflow.python.framework.tensor_spec import TensorSpec from tensorflow.python.framework.tensor_util import MakeNdarray as make_ndarray from tensorflow.python.framework.tensor_util import constant_value as get_static_value from tensorflow.python.framework.tensor_util import is_tf_type as is_tensor from tensorflow.python.framework.tensor_util import make_tensor_proto from tensorflow.python.framework.type_spec import TypeSpec from tensorflow.python.framework.type_spec import type_spec_from_value from tensorflow.python.framework.versions import COMPILER_VERSION as __compiler_version__ from tensorflow.python.framework.versions import CXX11_ABI_FLAG as __cxx11_abi_flag__ from tensorflow.python.framework.versions import CXX_VERSION as __cxx_version__ from tensorflow.python.framework.versions import GIT_VERSION as __git_version__ from tensorflow.python.framework.versions import MONOLITHIC_BUILD as __monolithic_build__ from tensorflow.python.framework.versions import VERSION as __version__ from tensorflow.python.module.module import Module from tensorflow.python.ops.array_ops import batch_to_space_v2 as batch_to_space from tensorflow.python.ops.array_ops import boolean_mask_v2 as boolean_mask from tensorflow.python.ops.array_ops import broadcast_dynamic_shape from tensorflow.python.ops.array_ops import broadcast_static_shape from tensorflow.python.ops.array_ops import concat from tensorflow.python.ops.array_ops import edit_distance from tensorflow.python.ops.array_ops import expand_dims_v2 as expand_dims from tensorflow.python.ops.array_ops import fill from tensorflow.python.ops.array_ops import fingerprint from tensorflow.python.ops.array_ops import gather_nd_v2 as gather_nd from tensorflow.python.ops.array_ops import gather_v2 as gather from tensorflow.python.ops.array_ops import guarantee_const from tensorflow.python.ops.array_ops import identity from tensorflow.python.ops.array_ops import meshgrid from tensorflow.python.ops.array_ops import newaxis from tensorflow.python.ops.array_ops import one_hot from tensorflow.python.ops.array_ops import ones from tensorflow.python.ops.array_ops import ones_like_v2 as ones_like from tensorflow.python.ops.array_ops import pad_v2 as pad from tensorflow.python.ops.array_ops import parallel_stack from tensorflow.python.ops.array_ops import rank from tensorflow.python.ops.array_ops import repeat from tensorflow.python.ops.array_ops import required_space_to_batch_paddings from tensorflow.python.ops.array_ops import reshape from tensorflow.python.ops.array_ops import reverse_sequence_v2 as reverse_sequence from tensorflow.python.ops.array_ops import searchsorted from tensorflow.python.ops.array_ops import sequence_mask from tensorflow.python.ops.array_ops import shape_n from tensorflow.python.ops.array_ops import shape_v2 as shape from tensorflow.python.ops.array_ops import size_v2 as size from tensorflow.python.ops.array_ops import slice from tensorflow.python.ops.array_ops import space_to_batch_v2 as space_to_batch from tensorflow.python.ops.array_ops import split from tensorflow.python.ops.array_ops import squeeze_v2 as squeeze from tensorflow.python.ops.array_ops import stack from tensorflow.python.ops.array_ops import stop_gradient from tensorflow.python.ops.array_ops import strided_slice from tensorflow.python.ops.array_ops import tensor_scatter_nd_update from tensorflow.python.ops.array_ops import transpose_v2 as transpose from tensorflow.python.ops.array_ops import unique from tensorflow.python.ops.array_ops import unique_with_counts from tensorflow.python.ops.array_ops import unstack from tensorflow.python.ops.array_ops import where_v2 as where from tensorflow.python.ops.array_ops import zeros from tensorflow.python.ops.array_ops import zeros_like_v2 as zeros_like from tensorflow.python.ops.batch_ops import batch_function as nondifferentiable_batch_function from tensorflow.python.ops.check_ops import assert_equal_v2 as assert_equal from tensorflow.python.ops.check_ops import assert_greater_v2 as assert_greater from tensorflow.python.ops.check_ops import assert_less_v2 as assert_less from tensorflow.python.ops.check_ops import assert_rank_v2 as assert_rank from tensorflow.python.ops.check_ops import ensure_shape from tensorflow.python.ops.clip_ops import clip_by_global_norm from tensorflow.python.ops.clip_ops import clip_by_norm from tensorflow.python.ops.clip_ops import clip_by_value from tensorflow.python.ops.control_flow_ops import Assert from tensorflow.python.ops.control_flow_ops import case_v2 as case from tensorflow.python.ops.control_flow_ops import cond_for_tf_v2 as cond from tensorflow.python.ops.control_flow_ops import group from tensorflow.python.ops.control_flow_ops import switch_case from tensorflow.python.ops.control_flow_ops import tuple_v2 as tuple from tensorflow.python.ops.control_flow_ops import while_loop_v2 as while_loop from tensorflow.python.ops.critical_section_ops import CriticalSection from tensorflow.python.ops.custom_gradient import custom_gradient from tensorflow.python.ops.custom_gradient import grad_pass_through from tensorflow.python.ops.custom_gradient import recompute_grad from tensorflow.python.ops.functional_ops import foldl_v2 as foldl from tensorflow.python.ops.functional_ops import foldr_v2 as foldr from tensorflow.python.ops.functional_ops import scan_v2 as scan from tensorflow.python.ops.gen_array_ops import bitcast from tensorflow.python.ops.gen_array_ops import broadcast_to from tensorflow.python.ops.gen_array_ops import extract_volume_patches from tensorflow.python.ops.gen_array_ops import identity_n from tensorflow.python.ops.gen_array_ops import reverse_v2 as reverse from tensorflow.python.ops.gen_array_ops import scatter_nd from tensorflow.python.ops.gen_array_ops import space_to_batch_nd from tensorflow.python.ops.gen_array_ops import tensor_scatter_add as tensor_scatter_nd_add from tensorflow.python.ops.gen_array_ops import tensor_scatter_max as tensor_scatter_nd_max from tensorflow.python.ops.gen_array_ops import tensor_scatter_min as tensor_scatter_nd_min from tensorflow.python.ops.gen_array_ops import tensor_scatter_sub as tensor_scatter_nd_sub from tensorflow.python.ops.gen_array_ops import tile from tensorflow.python.ops.gen_array_ops import unravel_index from tensorflow.python.ops.gen_control_flow_ops import no_op from tensorflow.python.ops.gen_data_flow_ops import dynamic_partition from tensorflow.python.ops.gen_data_flow_ops import dynamic_stitch from tensorflow.python.ops.gen_linalg_ops import matrix_square_root from tensorflow.python.ops.gen_logging_ops import timestamp from tensorflow.python.ops.gen_math_ops import acosh from tensorflow.python.ops.gen_math_ops import asin from tensorflow.python.ops.gen_math_ops import asinh from tensorflow.python.ops.gen_math_ops import atan from tensorflow.python.ops.gen_math_ops import atan2 from tensorflow.python.ops.gen_math_ops import atanh from tensorflow.python.ops.gen_math_ops import cos from tensorflow.python.ops.gen_math_ops import cosh from tensorflow.python.ops.gen_math_ops import greater from tensorflow.python.ops.gen_math_ops import greater_equal from tensorflow.python.ops.gen_math_ops import less from tensorflow.python.ops.gen_math_ops import less_equal from tensorflow.python.ops.gen_math_ops import logical_and from tensorflow.python.ops.gen_math_ops import logical_not from tensorflow.python.ops.gen_math_ops import logical_or from tensorflow.python.ops.gen_math_ops import maximum from tensorflow.python.ops.gen_math_ops import minimum from tensorflow.python.ops.gen_math_ops import neg as negative from tensorflow.python.ops.gen_math_ops import real_div as realdiv from tensorflow.python.ops.gen_math_ops import sin from tensorflow.python.ops.gen_math_ops import sinh from tensorflow.python.ops.gen_math_ops import square from tensorflow.python.ops.gen_math_ops import tan from tensorflow.python.ops.gen_math_ops import tanh from tensorflow.python.ops.gen_math_ops import truncate_div as truncatediv from tensorflow.python.ops.gen_math_ops import truncate_mod as truncatemod from tensorflow.python.ops.gen_nn_ops import approx_top_k from tensorflow.python.ops.gen_nn_ops import conv2d_backprop_filter_v2 from tensorflow.python.ops.gen_nn_ops import conv2d_backprop_input_v2 from tensorflow.python.ops.gen_random_index_shuffle_ops import random_index_shuffle from tensorflow.python.ops.gen_string_ops import as_string from tensorflow.python.ops.gen_tpu_partition_ops import tpu_partitioned_output_v2 from tensorflow.python.ops.gradients_impl import HessiansV2 as hessians from tensorflow.python.ops.gradients_impl import gradients_v2 as gradients from tensorflow.python.ops.gradients_util import AggregationMethod from tensorflow.python.ops.histogram_ops import histogram_fixed_width from tensorflow.python.ops.histogram_ops import histogram_fixed_width_bins from tensorflow.python.ops.init_ops_v2 import Constant as constant_initializer from tensorflow.python.ops.init_ops_v2 import Ones as ones_initializer from tensorflow.python.ops.init_ops_v2 import RandomNormal as random_normal_initializer from tensorflow.python.ops.init_ops_v2 import RandomUniform as random_uniform_initializer from tensorflow.python.ops.init_ops_v2 import Zeros as zeros_initializer from tensorflow.python.ops.linalg_ops import eig from tensorflow.python.ops.linalg_ops import eigvals from tensorflow.python.ops.linalg_ops import eye from tensorflow.python.ops.linalg_ops import norm_v2 as norm from tensorflow.python.ops.logging_ops import print_v2 as print from tensorflow.python.ops.manip_ops import roll from tensorflow.python.ops.map_fn import map_fn_v2 as map_fn from tensorflow.python.ops.math_ops import abs from tensorflow.python.ops.math_ops import acos from tensorflow.python.ops.math_ops import add from tensorflow.python.ops.math_ops import add_n from tensorflow.python.ops.math_ops import argmax_v2 as argmax from tensorflow.python.ops.math_ops import argmin_v2 as argmin from tensorflow.python.ops.math_ops import cast from tensorflow.python.ops.math_ops import complex from tensorflow.python.ops.math_ops import cumsum from tensorflow.python.ops.math_ops import divide from tensorflow.python.ops.math_ops import equal from tensorflow.python.ops.math_ops import exp from tensorflow.python.ops.math_ops import floor from tensorflow.python.ops.math_ops import linspace_nd as linspace from tensorflow.python.ops.math_ops import matmul from tensorflow.python.ops.math_ops import multiply from tensorflow.python.ops.math_ops import not_equal from tensorflow.python.ops.math_ops import pow from tensorflow.python.ops.math_ops import range from tensorflow.python.ops.math_ops import reduce_all from tensorflow.python.ops.math_ops import reduce_any from tensorflow.python.ops.math_ops import reduce_logsumexp from tensorflow.python.ops.math_ops import reduce_max from tensorflow.python.ops.math_ops import reduce_mean from tensorflow.python.ops.math_ops import reduce_min from tensorflow.python.ops.math_ops import reduce_prod from tensorflow.python.ops.math_ops import reduce_sum from tensorflow.python.ops.math_ops import round from tensorflow.python.ops.math_ops import saturate_cast from tensorflow.python.ops.math_ops import scalar_mul_v2 as scalar_mul from tensorflow.python.ops.math_ops import sigmoid from tensorflow.python.ops.math_ops import sign from tensorflow.python.ops.math_ops import sqrt from tensorflow.python.ops.math_ops import subtract from tensorflow.python.ops.math_ops import tensordot from tensorflow.python.ops.math_ops import truediv from tensorflow.python.ops.parallel_for.control_flow_ops import vectorized_map from tensorflow.python.ops.ragged.ragged_tensor import RaggedTensor from tensorflow.python.ops.ragged.ragged_tensor import RaggedTensorSpec from tensorflow.python.ops.script_ops import eager_py_func as py_function from tensorflow.python.ops.script_ops import numpy_function from tensorflow.python.ops.sort_ops import argsort from tensorflow.python.ops.sort_ops import sort from tensorflow.python.ops.special_math_ops import einsum from tensorflow.python.ops.tensor_array_ops import TensorArray from tensorflow.python.ops.tensor_array_ops import TensorArraySpec from tensorflow.python.ops.unconnected_gradients import UnconnectedGradients from tensorflow.python.ops.variable_scope import variable_creator_scope from tensorflow.python.ops.variables import Variable from tensorflow.python.ops.variables import VariableAggregationV2 as VariableAggregation from tensorflow.python.ops.variables import VariableSynchronization from tensorflow.python.platform.tf_logging import get_logger # WRAPPER_PLACEHOLDER # Make sure directory containing top level submodules is in # the __path__ so that "from tensorflow.foo import bar" works. # We're using bitwise, but there's nothing special about that. _API_MODULE = _sys.modules[__name__].bitwise _tf_api_dir = _os.path.dirname(_os.path.dirname(_API_MODULE.__file__)) _current_module = _sys.modules[__name__] if not hasattr(_current_module, '__path__'): __path__ = [_tf_api_dir] elif _tf_api_dir not in __path__: __path__.append(_tf_api_dir) # Hook external TensorFlow modules. # Import compat before trying to import summary from tensorboard, so that # reexport_tf_summary can get compat from sys.modules. Only needed if using # lazy loading. _current_module.compat.v2 # pylint: disable=pointless-statement try: from tensorboard.summary._tf import summary _current_module.__path__ = ( [_module_util.get_parent_dir(summary)] + _current_module.__path__) setattr(_current_module, "summary", summary) except ImportError: _logging.warning( "Limited tf.summary API due to missing TensorBoard installation.") # Load tensorflow-io-gcs-filesystem if enabled # pylint: disable=g-import-not-at-top if (_os.getenv('TF_USE_MODULAR_FILESYSTEM', '0') == 'true' or _os.getenv('TF_USE_MODULAR_FILESYSTEM', '0') == '1'): import tensorflow_io_gcs_filesystem as _tensorflow_io_gcs_filesystem # pylint: enable=g-import-not-at-top # Lazy-load estimator. _estimator_module = "tensorflow_estimator.python.estimator.api._v2.estimator" estimator = _LazyLoader("estimator", globals(), _estimator_module) _module_dir = _module_util.get_parent_dir_for_name(_estimator_module) if _module_dir: _current_module.__path__ = [_module_dir] + _current_module.__path__ setattr(_current_module, "estimator", estimator) _keras_module = "keras.api._v2.keras" _keras = _LazyLoader("keras", globals(), _keras_module) _module_dir = _module_util.get_parent_dir_for_name(_keras_module) if _module_dir: _current_module.__path__ = [_module_dir] + _current_module.__path__ setattr(_current_module, "keras", _keras) # Enable TF2 behaviors from tensorflow.python.compat import v2_compat as _compat # pylint: disable=g-import-not-at-top _compat.enable_v2_behavior() _major_api_version = 2 # Load all plugin libraries from site-packages/tensorflow-plugins if we are # running under pip. # TODO(gunan): Find a better location for this code snippet. from tensorflow.python.framework import load_library as _ll from tensorflow.python.lib.io import file_io as _fi # Get sitepackages directories for the python installation. _site_packages_dirs = [] if _site.ENABLE_USER_SITE and _site.USER_SITE is not None: _site_packages_dirs += [_site.USER_SITE] _site_packages_dirs += [_p for _p in _sys.path if 'site-packages' in _p] if 'getsitepackages' in dir(_site): _site_packages_dirs += _site.getsitepackages() if 'sysconfig' in dir(_distutils): _site_packages_dirs += [_distutils.sysconfig.get_python_lib()] _site_packages_dirs = list(set(_site_packages_dirs)) # Find the location of this exact file. _current_file_location = _inspect.getfile(_inspect.currentframe()) def _running_from_pip_package(): return any( _current_file_location.startswith(dir_) for dir_ in _site_packages_dirs) if _running_from_pip_package(): # TODO(gunan): Add sanity checks to loaded modules here. # Load first party dynamic kernels. _tf_dir = _os.path.dirname(_current_file_location) _kernel_dir = _os.path.join(_tf_dir, 'core', 'kernels') if _os.path.exists(_kernel_dir): _ll.load_library(_kernel_dir) # Load third party dynamic kernels. for _s in _site_packages_dirs: _plugin_dir = _os.path.join(_s, 'tensorflow-plugins') if _os.path.exists(_plugin_dir): _ll.load_library(_plugin_dir) # Load Pluggable Device Library _ll.load_pluggable_device_library(_plugin_dir) if _os.getenv("TF_PLUGGABLE_DEVICE_LIBRARY_PATH", ""): _ll.load_pluggable_device_library( _os.getenv("TF_PLUGGABLE_DEVICE_LIBRARY_PATH") ) # Add module aliases if hasattr(_current_module, 'keras'): # It is possible that keras is a lazily loaded module, which might break when # actually trying to import it. Have a Try-Catch to make sure it doesn't break # when it doing some very initial loading, like tf.compat.v2, etc. try: _keras_package = "keras.api._v2.keras." _losses = _LazyLoader("losses", globals(), _keras_package + "losses") _metrics = _LazyLoader("metrics", globals(), _keras_package + "metrics") _optimizers = _LazyLoader( "optimizers", globals(), _keras_package + "optimizers") _initializers = _LazyLoader( "initializers", globals(), _keras_package + "initializers") setattr(_current_module, "losses", _losses) setattr(_current_module, "metrics", _metrics) setattr(_current_module, "optimizers", _optimizers) setattr(_current_module, "initializers", _initializers) except ImportError: pass # Do an eager load for Keras' code so that any function/method that needs to # happen at load time will trigger, eg registration of optimizers in the # SavedModel registry. # See b/196254385 for more details. if hasattr(_current_module, "keras"): try: _keras._load() except ImportError: pass # Explicitly import lazy-loaded modules to support autocompletion. # pylint: disable=g-import-not-at-top if _typing.TYPE_CHECKING: from tensorflow_estimator.python.estimator.api._v2 import estimator as estimator from keras.api._v2 import keras from keras.api._v2.keras import losses from keras.api._v2.keras import metrics from keras.api._v2.keras import optimizers from keras.api._v2.keras import initializers # pylint: enable=g-import-not-at-top # pylint: enable=undefined-variable # Delete modules that should be hidden from dir(). # Don't fail if these modules are not available. # For e.g. this file will be originally placed under tensorflow/_api/v1 which # does not have 'python', 'core' directories. Then, it will be copied # to tensorflow/ which does have these two directories. # pylint: disable=undefined-variable try: del python except NameError: pass try: del core except NameError: pass try: del compiler except NameError: pass _names_with_underscore = ['__compiler_version__', '__cxx11_abi_flag__', '__cxx_version__', '__git_version__', '__internal__', '__monolithic_build__', '__operators__', '__version__'] __all__ = [_s for _s in dir() if not _s.startswith('_')] __all__.extend([_s for _s in _names_with_underscore])