aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow
diff options
context:
space:
mode:
authorGravatar Anna R <annarev@google.com>2018-04-02 15:51:21 -0700
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-04-02 15:54:53 -0700
commit0042e54608eedf1f10d761bc9ca68f030feeed04 (patch)
treef76360820d87efc6f2975ad88ca225dc7a074f01 /tensorflow
parentda92e74fcb28f31c2a4163c58e6e585f561b1c33 (diff)
Automated g4 rollback of changelist 191326767
PiperOrigin-RevId: 191360905
Diffstat (limited to 'tensorflow')
-rw-r--r--tensorflow/BUILD8
-rw-r--r--tensorflow/__init__.py7
-rw-r--r--tensorflow/contrib/cmake/python_modules.txt2
-rwxr-xr-xtensorflow/contrib/cmake/tf_python.cmake91
-rw-r--r--tensorflow/experimental_api.py38
-rw-r--r--tensorflow/python/framework/dtypes.py2
-rw-r--r--tensorflow/tools/api/generator/BUILD2
-rw-r--r--tensorflow/tools/api/generator/create_python_api.py21
-rw-r--r--tensorflow/tools/api/tests/BUILD1
-rw-r--r--tensorflow/tools/api/tests/api_compatibility_test.py48
-rw-r--r--tensorflow/tools/ci_build/windows/cpu/cmake/run_py.bat6
11 files changed, 121 insertions, 105 deletions
diff --git a/tensorflow/BUILD b/tensorflow/BUILD
index cfafffdd13..3d5737a9d7 100644
--- a/tensorflow/BUILD
+++ b/tensorflow/BUILD
@@ -540,6 +540,14 @@ py_library(
srcs = ["__init__.py"],
srcs_version = "PY2AND3",
visibility = ["//visibility:public"],
+ deps = ["//tensorflow/python"],
+)
+
+py_library(
+ name = "experimental_tensorflow_py",
+ srcs = ["experimental_api.py"],
+ srcs_version = "PY2AND3",
+ visibility = ["//tensorflow/tools/api/tests:__subpackages__"],
deps = [
"//tensorflow/python",
"//tensorflow/tools/api/generator:python_api",
diff --git a/tensorflow/__init__.py b/tensorflow/__init__.py
index c8683e3976..78ad6aec19 100644
--- a/tensorflow/__init__.py
+++ b/tensorflow/__init__.py
@@ -20,19 +20,14 @@ from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
-# pylint: disable=g-bad-import-order
-from tensorflow.python import pywrap_tensorflow # pylint: disable=unused-import
# pylint: disable=wildcard-import
-from tensorflow.tools.api.generator.api import * # pylint: disable=redefined-builtin
+from tensorflow.python import * # pylint: disable=redefined-builtin
# pylint: enable=wildcard-import
from tensorflow.python.util.lazy_loader import LazyLoader
contrib = LazyLoader('contrib', globals(), 'tensorflow.contrib')
del LazyLoader
-from tensorflow.python.platform import flags # pylint: disable=g-import-not-at-top
-app.flags = flags # pylint: disable=undefined-variable
-
del absolute_import
del division
del print_function
diff --git a/tensorflow/contrib/cmake/python_modules.txt b/tensorflow/contrib/cmake/python_modules.txt
index d5cf42b641..02c456c199 100644
--- a/tensorflow/contrib/cmake/python_modules.txt
+++ b/tensorflow/contrib/cmake/python_modules.txt
@@ -104,8 +104,6 @@ tensorflow/python/user_ops
tensorflow/python/util
tensorflow/python/util/protobuf
tensorflow/tools
-tensorflow/tools/api
-tensorflow/tools/api/generator
tensorflow/tools/graph_transforms
tensorflow/contrib
tensorflow/contrib/all_reduce
diff --git a/tensorflow/contrib/cmake/tf_python.cmake b/tensorflow/contrib/cmake/tf_python.cmake
index 20eeded8d3..fae45ead5c 100755
--- a/tensorflow/contrib/cmake/tf_python.cmake
+++ b/tensorflow/contrib/cmake/tf_python.cmake
@@ -686,77 +686,6 @@ AddUserOps(TARGET _beam_search_ops
DEPENDS pywrap_tensorflow_internal tf_python_ops
DISTCOPY ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/contrib/seq2seq/python/ops/)
-if(WIN32)
- if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*")
- add_custom_command(TARGET pywrap_tensorflow_internal POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/$(Configuration)/pywrap_tensorflow_internal.dll
- ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/python/_pywrap_tensorflow_internal.pyd
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/$(Configuration)/pywrap_tensorflow_internal.lib
- ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/python/)
- else()
- add_custom_command(TARGET pywrap_tensorflow_internal POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/pywrap_tensorflow_internal.dll
- ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/python/_pywrap_tensorflow_internal.pyd
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/pywrap_tensorflow_internal.lib
- ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/python/)
- endif()
-else()
- add_custom_command(TARGET pywrap_tensorflow_internal POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/libpywrap_tensorflow_internal.so
- ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/python/_pywrap_tensorflow_internal.so)
-endif()
-
-
-########################################################
-# Generate API __init__.py files.
-########################################################
-
-# Parse tensorflow/tools/api/generator/BUILD to get list of generated files.
-FILE(READ ${tensorflow_source_dir}/tensorflow/tools/api/generator/BUILD api_generator_BUILD_text)
-STRING(REGEX MATCH "# BEGIN GENERATED FILES.*# END GENERATED FILES" api_init_files_text ${api_generator_BUILD_text})
-string(REPLACE "# BEGIN GENERATED FILES" "" api_init_files_text ${api_init_files_text})
-string(REPLACE "# END GENERATED FILES" "" api_init_files_text ${api_init_files_text})
-string(REPLACE "," ";" api_init_files_list ${api_init_files_text})
-
-set(api_init_files "")
-foreach(api_init_file ${api_init_files_list})
- string(STRIP "${api_init_file}" api_init_file)
- if(api_init_file)
- string(REPLACE "\"" "" api_init_file "${api_init_file}") # Remove quotes
- list(APPEND api_init_files "${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/tools/api/generator/${api_init_file}")
- endif()
-endforeach(api_init_file)
-set(api_init_list_file "${tensorflow_source_dir}/api_init_files_list.txt")
-file(WRITE "${api_init_list_file}" "${api_init_files}")
-
-# Run create_python_api.py to generate __init__.py files.
-add_custom_command(
- OUTPUT ${api_init_files}
- DEPENDS tf_python_ops tf_python_copy_scripts_to_destination pywrap_tensorflow_internal tf_python_touchup_modules tf_extension_ops
-
- # tensorflow/__init__.py depends on files generated in this step. So, remove it while
- # this step is running since the files aren't there yet.
- COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/__init__.py
- ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/final.__init__.py
- COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/__init__.py
-
- # Run create_python_api.py to generate API init files.
- COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=${CMAKE_CURRENT_BINARY_DIR}/tf_python ${PYTHON_EXECUTABLE}
- "${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/tools/api/generator/create_python_api.py" "${api_init_list_file}"
-
- # Re-add tensorflow/__init__.py back.
- COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/__init__.py
- COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/final.__init__.py
- ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/__init__.py
-
- COMMENT "Generating __init__.py files for Python API."
- WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/tf_python"
-)
-
-add_custom_target(tf_python_api SOURCES ${api_init_files})
-add_dependencies(tf_python_api tf_python_ops)
-
-
############################################################
# Build a PIP package containing the TensorFlow runtime.
############################################################
@@ -766,7 +695,6 @@ add_dependencies(tf_python_build_pip_package
tf_python_copy_scripts_to_destination
tf_python_touchup_modules
tf_python_ops
- tf_python_api
tf_extension_ops)
# Fix-up Python files that were not included by the add_python_module() macros.
@@ -779,6 +707,25 @@ add_custom_command(TARGET tf_python_copy_scripts_to_destination PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${tensorflow_source_dir}/tensorflow/contrib/testing/python/framework/util_test.py
${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/contrib/testing/python/framework/)
+if(WIN32)
+ if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*")
+ add_custom_command(TARGET tf_python_build_pip_package POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/$(Configuration)/pywrap_tensorflow_internal.dll
+ ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/python/_pywrap_tensorflow_internal.pyd
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/$(Configuration)/pywrap_tensorflow_internal.lib
+ ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/python/)
+ else()
+ add_custom_command(TARGET tf_python_build_pip_package POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/pywrap_tensorflow_internal.dll
+ ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/python/_pywrap_tensorflow_internal.pyd
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/pywrap_tensorflow_internal.lib
+ ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/python/)
+ endif()
+else()
+ add_custom_command(TARGET tf_python_build_pip_package POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/libpywrap_tensorflow_internal.so
+ ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/python/_pywrap_tensorflow_internal.so)
+endif()
add_custom_command(TARGET tf_python_build_pip_package POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${tensorflow_source_dir}/tensorflow/tools/pip_package/README
${CMAKE_CURRENT_BINARY_DIR}/tf_python/)
diff --git a/tensorflow/experimental_api.py b/tensorflow/experimental_api.py
new file mode 100644
index 0000000000..63a8aa9cb1
--- /dev/null
+++ b/tensorflow/experimental_api.py
@@ -0,0 +1,38 @@
+# 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.
+# ==============================================================================
+
+# Bring in all of the public TensorFlow interface into this
+# module.
+
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
+# pylint: disable=g-bad-import-order
+from tensorflow.python import pywrap_tensorflow # pylint: disable=unused-import
+# pylint: disable=wildcard-import
+from tensorflow.tools.api.generator.api import * # pylint: disable=redefined-builtin
+# pylint: enable=wildcard-import
+
+from tensorflow.python.util.lazy_loader import LazyLoader
+contrib = LazyLoader('contrib', globals(), 'tensorflow.contrib')
+del LazyLoader
+
+from tensorflow.python.platform import flags # pylint: disable=g-import-not-at-top
+app.flags = flags # pylint: disable=undefined-variable
+
+del absolute_import
+del division
+del print_function
diff --git a/tensorflow/python/framework/dtypes.py b/tensorflow/python/framework/dtypes.py
index a31c424263..0edae92fd4 100644
--- a/tensorflow/python/framework/dtypes.py
+++ b/tensorflow/python/framework/dtypes.py
@@ -345,7 +345,7 @@ tf_export("uint16").export_constant(__name__, "uint16")
uint32 = DType(types_pb2.DT_UINT32)
tf_export("uint32").export_constant(__name__, "uint32")
uint64 = DType(types_pb2.DT_UINT64)
-tf_export("uint64").export_constant(__name__, "uint64")
+tf_export("uint64").export_constant(__name__, "uint32")
int16 = DType(types_pb2.DT_INT16)
tf_export("int16").export_constant(__name__, "int16")
int8 = DType(types_pb2.DT_INT8)
diff --git a/tensorflow/tools/api/generator/BUILD b/tensorflow/tools/api/generator/BUILD
index a1c569951e..9f1bdd8aae 100644
--- a/tensorflow/tools/api/generator/BUILD
+++ b/tensorflow/tools/api/generator/BUILD
@@ -32,7 +32,6 @@ genrule(
# api/module1/module2/__init__.py and api/module3/__init__.py.
# keep sorted
outs = [
- # BEGIN GENERATED FILES
"api/__init__.py",
"api/app/__init__.py",
"api/bitwise/__init__.py",
@@ -118,7 +117,6 @@ genrule(
"api/train/__init__.py",
"api/train/queue_runner/__init__.py",
"api/user_ops/__init__.py",
- # END GENERATED FILES
],
cmd = "$(location create_python_api) $(OUTS)",
tools = ["create_python_api"],
diff --git a/tensorflow/tools/api/generator/create_python_api.py b/tensorflow/tools/api/generator/create_python_api.py
index 1505dc69b9..183c4731b8 100644
--- a/tensorflow/tools/api/generator/create_python_api.py
+++ b/tensorflow/tools/api/generator/create_python_api.py
@@ -195,19 +195,16 @@ def create_api_files(output_files):
"""
module_name_to_file_path = {}
for output_file in output_files:
- # Convert path separators to '/' for easier parsing below.
- normalized_output_file = output_file.replace(os.sep, '/')
if _API_DIR not in output_file:
raise ValueError(
'Output files must be in api/ directory, found %s.' % output_file)
# Get the module name that corresponds to output_file.
# First get module directory under _API_DIR.
module_dir = os.path.dirname(
- normalized_output_file[
- normalized_output_file.rfind(_API_DIR)+len(_API_DIR):])
+ output_file[output_file.rfind(_API_DIR)+len(_API_DIR):])
# Convert / to .
module_name = module_dir.replace('/', '.').strip('.')
- module_name_to_file_path[module_name] = os.path.normpath(output_file)
+ module_name_to_file_path[module_name] = output_file
# Create file for each expected output in genrule.
for module, file_path in module_name_to_file_path.items():
@@ -244,16 +241,6 @@ if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument(
'outputs', metavar='O', type=str, nargs='+',
- help='If a single file is passed in, then we we assume it contains a '
- 'semicolon-separated list of Python files that we expect this script to '
- 'output. If multiple files are passed in, then we assume output files '
- 'are listed directly as arguments.')
+ help='Python files that we expect this script to output.')
args = parser.parse_args()
- if len(args.outputs) == 1:
- # If we only get a single argument, then it must be a file containing
- # list of outputs.
- with open(args.outputs[0]) as output_list_file:
- outputs = [line.strip() for line in output_list_file.read().split(';')]
- else:
- outputs = args.outputs
- main(outputs)
+ main(args.outputs)
diff --git a/tensorflow/tools/api/tests/BUILD b/tensorflow/tools/api/tests/BUILD
index 724b12cd47..0dc154b6d2 100644
--- a/tensorflow/tools/api/tests/BUILD
+++ b/tensorflow/tools/api/tests/BUILD
@@ -23,6 +23,7 @@ py_test(
],
srcs_version = "PY2AND3",
deps = [
+ "//tensorflow:experimental_tensorflow_py",
"//tensorflow:tensorflow_py",
"//tensorflow/python:client_testlib",
"//tensorflow/python:lib",
diff --git a/tensorflow/tools/api/tests/api_compatibility_test.py b/tensorflow/tools/api/tests/api_compatibility_test.py
index 26d5bca637..603b2a4327 100644
--- a/tensorflow/tools/api/tests/api_compatibility_test.py
+++ b/tensorflow/tools/api/tests/api_compatibility_test.py
@@ -34,6 +34,7 @@ import sys
import unittest
import tensorflow as tf
+from tensorflow import experimental_api as api
from google.protobuf import text_format
@@ -46,6 +47,8 @@ from tensorflow.tools.api.lib import python_object_to_proto_visitor
from tensorflow.tools.common import public_api
from tensorflow.tools.common import traverse
+if hasattr(tf, 'experimental_api'):
+ del tf.experimental_api
# FLAGS defined at the bottom:
FLAGS = None
@@ -205,8 +208,6 @@ class ApiCompatibilityTest(test.TestCase):
public_api_visitor = public_api.PublicAPIVisitor(visitor)
public_api_visitor.do_not_descend_map['tf'].append('contrib')
public_api_visitor.do_not_descend_map['tf.GPUOptions'] = ['Experimental']
- # TODO(annarev): Make slide_dataset available in API.
- public_api_visitor.private_map['tf'] = ['slide_dataset']
traverse.traverse(tf, public_api_visitor)
proto_dict = visitor.GetProtos()
@@ -236,6 +237,49 @@ class ApiCompatibilityTest(test.TestCase):
verbose=FLAGS.verbose_diffs,
update_goldens=FLAGS.update_goldens)
+ @unittest.skipUnless(
+ sys.version_info.major == 2,
+ 'API compabitility test goldens are generated using python2.')
+ def testNewAPIBackwardsCompatibility(self):
+ # Extract all API stuff.
+ visitor = python_object_to_proto_visitor.PythonObjectToProtoVisitor()
+
+ public_api_visitor = public_api.PublicAPIVisitor(visitor)
+ public_api_visitor.do_not_descend_map['tf'].append('contrib')
+ public_api_visitor.do_not_descend_map['tf.GPUOptions'] = ['Experimental']
+ # TODO(annarev): Make slide_dataset available in API.
+ public_api_visitor.private_map['tf'] = ['slide_dataset']
+ traverse.traverse(api, public_api_visitor)
+
+ proto_dict = visitor.GetProtos()
+
+ # Read all golden files.
+ expression = os.path.join(
+ resource_loader.get_root_dir_with_all_resources(),
+ _KeyToFilePath('*'))
+ golden_file_list = file_io.get_matching_files(expression)
+
+ def _ReadFileToProto(filename):
+ """Read a filename, create a protobuf from its contents."""
+ ret_val = api_objects_pb2.TFAPIObject()
+ text_format.Merge(file_io.read_file_to_string(filename), ret_val)
+ return ret_val
+
+ golden_proto_dict = {
+ _FileNameToKey(filename): _ReadFileToProto(filename)
+ for filename in golden_file_list
+ }
+
+ # Diff them. Do not fail if called with update.
+ # If the test is run to update goldens, only report diffs but do not fail.
+ self._AssertProtoDictEquals(
+ golden_proto_dict,
+ proto_dict,
+ verbose=FLAGS.verbose_diffs,
+ update_goldens=False,
+ additional_missing_object_message=
+ 'Check if tf_export decorator/call is missing for this symbol.')
+
if __name__ == '__main__':
parser = argparse.ArgumentParser()
diff --git a/tensorflow/tools/ci_build/windows/cpu/cmake/run_py.bat b/tensorflow/tools/ci_build/windows/cpu/cmake/run_py.bat
index 30554a084c..3c3b223a00 100644
--- a/tensorflow/tools/ci_build/windows/cpu/cmake/run_py.bat
+++ b/tensorflow/tools/ci_build/windows/cpu/cmake/run_py.bat
@@ -28,9 +28,6 @@ IF DEFINED TF_NIGHTLY (ECHO TF_NIGHTLY is set to %TF_NIGHTLY%) ELSE (SET TF_NIGH
:: Set pip binary location. Do not override if it is set already.
IF DEFINED PIP_EXE (ECHO PIP_EXE is set to %PIP_EXE%) ELSE (SET PIP_EXE="C:\Program Files\Anaconda3\Scripts\pip.exe")
-:: Install absl-py.
-%PIP_EXE% install --upgrade absl-py
-
:: Run the CMAKE build to build the pip package.
CALL %REPO_ROOT%\tensorflow\tools\ci_build\windows\cpu\cmake\run_build.bat
if %errorlevel% neq 0 exit /b %errorlevel%
@@ -40,6 +37,9 @@ DIR %REPO_ROOT%\%BUILD_DIR%\tf_python\dist\ /S /B > wheel_filename_file
set /p WHEEL_FILENAME=<wheel_filename_file
del wheel_filename_file
+:: Install absl-py.
+%PIP_EXE% install --upgrade absl-py
+
:: Install the pip package.
echo Installing PIP package...
%PIP_EXE% install --upgrade --no-deps %WHEEL_FILENAME% -v -v