aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--tensorflow/c/eager/c_api.h136
-rw-r--r--tensorflow/c/version_script.lds1
-rw-r--r--tensorflow/contrib/cmake/tf_tests.cmake1
-rw-r--r--tensorflow/contrib/data/python/kernel_tests/map_dataset_op_test.py1
-rw-r--r--tensorflow/core/kernels/parse_tensor_op.cc1
-rw-r--r--tensorflow/core/ops/ops.pbtxt19
-rw-r--r--tensorflow/core/platform/default/logging.cc4
-rw-r--r--tensorflow/python/feature_column/feature_column_test.py2
-rw-r--r--tensorflow/tf_exported_symbols.lds1
-rw-r--r--tensorflow/tf_version_script.lds1
-rw-r--r--tensorflow/workspace.bzl3
11 files changed, 109 insertions, 61 deletions
diff --git a/tensorflow/c/eager/c_api.h b/tensorflow/c/eager/c_api.h
index 88a0dd343f..a54d206a30 100644
--- a/tensorflow/c/eager/c_api.h
+++ b/tensorflow/c/eager/c_api.h
@@ -20,6 +20,25 @@ limitations under the License.
#include "tensorflow/c/c_api.h"
+// Macro to control visibility of exported symbols in the shared library (.so,
+// .dylib, .dll).
+// This duplicates the TF_EXPORT macro definition in
+// tensorflow/core/platform/macros.h in order to keep this .h file independent
+// of any other includes.$a
+#ifdef SWIG
+#define TF_CAPI_EXPORT
+#else
+#if defined(COMPILER_MSVC)
+#ifdef TF_COMPILE_LIBRARY
+#define TF_CAPI_EXPORT __declspec(dllexport)
+#else
+#define TF_CAPI_EXPORT __declspec(dllimport)
+#endif // TF_COMPILE_LIBRARY
+#else
+#define TF_CAPI_EXPORT __attribute__((visibility("default")))
+#endif // COMPILER_MSVC
+#endif // SWIG
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -30,11 +49,11 @@ extern "C" {
// TODO(ashankar): Merge with TF_Session?
typedef struct TFE_Context TFE_Context;
-extern TFE_Context* TFE_NewContext(const TF_SessionOptions* opts,
- TF_Status* status);
-extern void TFE_DeleteContext(TFE_Context* ctx, TF_Status* status);
-extern TF_DeviceList* TFE_ContextListDevices(TFE_Context* ctx,
- TF_Status* status);
+TF_CAPI_EXPORT extern TFE_Context* TFE_NewContext(const TF_SessionOptions* opts,
+ TF_Status* status);
+TF_CAPI_EXPORT extern void TFE_DeleteContext(TFE_Context* ctx, TF_Status* status);
+TF_CAPI_EXPORT extern TF_DeviceList* TFE_ContextListDevices(TFE_Context* ctx,
+ TF_Status* status);
// A handle to a tensor on a device.
//
@@ -43,14 +62,15 @@ extern TF_DeviceList* TFE_ContextListDevices(TFE_Context* ctx,
// placed in memory of different devices or remote address spaces.
typedef struct TFE_TensorHandle TFE_TensorHandle;
-extern TFE_TensorHandle* TFE_NewTensorHandle(TF_Tensor* t, TF_Status* status);
-extern void TFE_DeleteTensorHandle(TFE_TensorHandle* h);
-extern TF_DataType TFE_TensorHandleDataType(TFE_TensorHandle* h);
-extern int TFE_TensorHandleNumDims(TFE_TensorHandle* h);
-extern int64_t TFE_TensorHandleDim(TFE_TensorHandle* h, int dim_index);
-extern const char* TFE_TensorHandleDeviceName(TFE_TensorHandle* h);
-extern TF_Tensor* TFE_TensorHandleResolve(TFE_TensorHandle* h,
- TF_Status* status);
+TF_CAPI_EXPORT extern TFE_TensorHandle* TFE_NewTensorHandle(TF_Tensor* t,
+ TF_Status* status);
+TF_CAPI_EXPORT extern void TFE_DeleteTensorHandle(TFE_TensorHandle* h);
+TF_CAPI_EXPORT extern TF_DataType TFE_TensorHandleDataType(TFE_TensorHandle* h);
+TF_CAPI_EXPORT extern int TFE_TensorHandleNumDims(TFE_TensorHandle* h);
+TF_CAPI_EXPORT extern int64_t TFE_TensorHandleDim(TFE_TensorHandle* h, int dim_index);
+TF_CAPI_EXPORT extern const char* TFE_TensorHandleDeviceName(TFE_TensorHandle* h);
+TF_CAPI_EXPORT extern TF_Tensor* TFE_TensorHandleResolve(TFE_TensorHandle* h,
+ TF_Status* status);
// Create a new TFE_TensorHandle with the same contents as 'h' but placed
// in the memory of the device name 'device_name'.
@@ -58,10 +78,10 @@ extern TF_Tensor* TFE_TensorHandleResolve(TFE_TensorHandle* h,
// that shares the underlying buffer. Otherwise, it currently requires at least
// one of the source or destination devices to be CPU (i.e., for the source or
// destination tensor to be placed in host memory).
-extern TFE_TensorHandle* TFE_TensorHandleCopyToDevice(TFE_TensorHandle* h,
- TFE_Context* ctx,
- const char* device_name,
- TF_Status* status);
+TF_CAPI_EXPORT extern TFE_TensorHandle* TFE_TensorHandleCopyToDevice(TFE_TensorHandle* h,
+ TFE_Context* ctx,
+ const char* device_name,
+ TF_Status* status);
// Description of the TensorFlow op to execute.
//
@@ -76,49 +96,49 @@ extern TFE_TensorHandle* TFE_TensorHandleCopyToDevice(TFE_TensorHandle* h,
// the additional sanity checks there seem unnecessary;
typedef struct TFE_Op TFE_Op;
-extern TFE_Op* TFE_NewOp(TFE_Context* ctx, const char* op_or_function_name,
- TF_Status* status);
-extern void TFE_DeleteOp(TFE_Op* op);
+TF_CAPI_EXPORT extern TFE_Op* TFE_NewOp(TFE_Context* ctx, const char* op_or_function_name,
+ TF_Status* status);
+TF_CAPI_EXPORT extern void TFE_DeleteOp(TFE_Op* op);
// TODO(ashankar): TFE_OpSetDevice and TFE_Execute should not have a TFE_Context
// parameter. Instead, the TFE_Context should be captured when creating the
// TFE_Op.
-extern void TFE_OpSetDevice(TFE_Op* op, TFE_Context* ctx,
- const char* device_name, TF_Status* status);
-
-extern void TFE_OpAddInput(TFE_Op* op, TFE_TensorHandle* h, TF_Status* status);
-
-extern TF_AttrType TFE_OpGetAttrType(TFE_Op* op, const char* attr_name,
- unsigned char* is_list, TF_Status* status);
-
-extern void TFE_OpSetAttrString(TFE_Op* op, const char* attr_name,
- const char* value);
-extern void TFE_OpSetAttrInt(TFE_Op* op, const char* attr_name, int64_t value);
-extern void TFE_OpSetAttrFloat(TFE_Op* op, const char* attr_name, float value);
-extern void TFE_OpSetAttrBool(TFE_Op* op, const char* attr_name,
- unsigned char value);
-extern void TFE_OpSetAttrType(TFE_Op* op, const char* attr_name,
- TF_DataType value);
+TF_CAPI_EXPORT extern void TFE_OpSetDevice(TFE_Op* op, TFE_Context* ctx,
+ const char* device_name, TF_Status* status);
+
+TF_CAPI_EXPORT extern void TFE_OpAddInput(TFE_Op* op, TFE_TensorHandle* h, TF_Status* status);
+
+TF_CAPI_EXPORT extern TF_AttrType TFE_OpGetAttrType(TFE_Op* op, const char* attr_name,
+ unsigned char* is_list, TF_Status* status);
+
+TF_CAPI_EXPORT extern void TFE_OpSetAttrString(TFE_Op* op, const char* attr_name,
+ const char* value);
+TF_CAPI_EXPORT extern void TFE_OpSetAttrInt(TFE_Op* op, const char* attr_name, int64_t value);
+TF_CAPI_EXPORT extern void TFE_OpSetAttrFloat(TFE_Op* op, const char* attr_name, float value);
+TF_CAPI_EXPORT extern void TFE_OpSetAttrBool(TFE_Op* op, const char* attr_name,
+ unsigned char value);
+TF_CAPI_EXPORT extern void TFE_OpSetAttrType(TFE_Op* op, const char* attr_name,
+ TF_DataType value);
// If the number of dimensions is unknown, `num_dims` must be set to
// -1 and `dims` can be null. If a dimension is unknown, the
// corresponding entry in the `dims` array must be -1.
-extern void TFE_OpSetAttrShape(TFE_Op* op, const char* attr_name,
- const int64_t* dims, const int num_dims,
- TF_Status* out_status);
-
-extern void TFE_OpSetAttrStringList(TFE_Op* op, const char* attr_name,
- const char** value, int num_values);
-extern void TFE_OpSetAttrIntList(TFE_Op* op, const char* attr_name,
- const int64_t* values, int num_values);
-extern void TFE_OpSetAttrFloatList(TFE_Op* op, const char* attr_name,
- const float* values, int num_values);
-extern void TFE_OpSetAttrBoolList(TFE_Op* op, const char* attr_name,
- const unsigned char* values, int num_values);
-extern void TFE_OpSetAttrTypeList(TFE_Op* op, const char* attr_name,
- const TF_DataType* values, int num_values);
-extern void TFE_OpSetAttrShapeList(TFE_Op* op, const char* attr_name,
- const int64_t** dims, const int* num_dims,
- int num_values, TF_Status* out_status);
+TF_CAPI_EXPORT extern void TFE_OpSetAttrShape(TFE_Op* op, const char* attr_name,
+ const int64_t* dims, const int num_dims,
+ TF_Status* out_status);
+
+TF_CAPI_EXPORT extern void TFE_OpSetAttrStringList(TFE_Op* op, const char* attr_name,
+ const char** value, int num_values);
+TF_CAPI_EXPORT extern void TFE_OpSetAttrIntList(TFE_Op* op, const char* attr_name,
+ const int64_t* values, int num_values);
+TF_CAPI_EXPORT extern void TFE_OpSetAttrFloatList(TFE_Op* op, const char* attr_name,
+ const float* values, int num_values);
+TF_CAPI_EXPORT extern void TFE_OpSetAttrBoolList(TFE_Op* op, const char* attr_name,
+ const unsigned char* values, int num_values);
+TF_CAPI_EXPORT extern void TFE_OpSetAttrTypeList(TFE_Op* op, const char* attr_name,
+ const TF_DataType* values, int num_values);
+TF_CAPI_EXPORT extern void TFE_OpSetAttrShapeList(TFE_Op* op, const char* attr_name,
+ const int64_t** dims, const int* num_dims,
+ int num_values, TF_Status* out_status);
// Execute the operation defined by 'op' and return handles to computed
// tensors in 'retvals'.
@@ -128,14 +148,14 @@ extern void TFE_OpSetAttrShapeList(TFE_Op* op, const char* attr_name,
//
// On return, 'num_retvals' will be set to the actual number of outputs
// returned by the operation.
-extern void TFE_Execute(TFE_Op* op, TFE_TensorHandle** retvals,
- int* num_retvals, TF_Status* status);
+TF_CAPI_EXPORT extern void TFE_Execute(TFE_Op* op, TFE_TensorHandle** retvals,
+ int* num_retvals, TF_Status* status);
// Add a function (serialized FunctionDef protocol buffer) to ctx so
// that it can be invoked using TFE_Execute.
-extern void TFE_ContextAddFunctionDef(TFE_Context* ctx,
- const char* serialized_function_def,
- size_t size, TF_Status* status);
+TF_CAPI_EXPORT extern void TFE_ContextAddFunctionDef(TFE_Context* ctx,
+ const char* serialized_function_def,
+ size_t size, TF_Status* status);
#ifdef __cplusplus
} /* end extern "C" */
diff --git a/tensorflow/c/version_script.lds b/tensorflow/c/version_script.lds
index 455bd7362b..5855782003 100644
--- a/tensorflow/c/version_script.lds
+++ b/tensorflow/c/version_script.lds
@@ -2,6 +2,7 @@ VERS_1.0 {
# Export symbols in c_api.h.
global:
TF_*;
+ TFE_*;
# Hide everything else.
local:
diff --git a/tensorflow/contrib/cmake/tf_tests.cmake b/tensorflow/contrib/cmake/tf_tests.cmake
index 9606f0afec..9dff888155 100644
--- a/tensorflow/contrib/cmake/tf_tests.cmake
+++ b/tensorflow/contrib/cmake/tf_tests.cmake
@@ -247,6 +247,7 @@ if (tensorflow_BUILD_PYTHON_TESTS)
# Broken tensorboard test due to cmake issues.
"${tensorflow_source_dir}/tensorflow/contrib/data/python/kernel_tests/dataset_constructor_op_test.py"
"${tensorflow_source_dir}/tensorflow/contrib/data/python/kernel_tests/iterator_ops_cluster_test.py" # Needs portpicker
+ "${tensorflow_source_dir}/tensorflow/contrib/data/python/kernel_tests/sloppy_transformation_dataset_op_test.py" # b/65430561
# tensor_forest tests (also note that we exclude the hybrid tests for now)
"${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/python/kernel_tests/count_extremely_random_stats_op_test.py" # Results in wrong order.
"${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/python/kernel_tests/sample_inputs_op_test.py" # Results in wrong order.
diff --git a/tensorflow/contrib/data/python/kernel_tests/map_dataset_op_test.py b/tensorflow/contrib/data/python/kernel_tests/map_dataset_op_test.py
index 7240fc7422..4c1496ccf9 100644
--- a/tensorflow/contrib/data/python/kernel_tests/map_dataset_op_test.py
+++ b/tensorflow/contrib/data/python/kernel_tests/map_dataset_op_test.py
@@ -20,6 +20,7 @@ from collections import namedtuple
import os
import threading
+from collections import namedtuple
import numpy as np
diff --git a/tensorflow/core/kernels/parse_tensor_op.cc b/tensorflow/core/kernels/parse_tensor_op.cc
index 8e175fe8d4..ab91a6ef67 100644
--- a/tensorflow/core/kernels/parse_tensor_op.cc
+++ b/tensorflow/core/kernels/parse_tensor_op.cc
@@ -22,6 +22,7 @@ limitations under the License.
#include "tensorflow/core/framework/tensor_shape.h"
#include "tensorflow/core/framework/types.h"
#include "tensorflow/core/lib/core/errors.h"
+#include "tensorflow/core/framework/register_types.h"
namespace tensorflow {
diff --git a/tensorflow/core/ops/ops.pbtxt b/tensorflow/core/ops/ops.pbtxt
index fb9b9278ed..cfd3869d05 100644
--- a/tensorflow/core/ops/ops.pbtxt
+++ b/tensorflow/core/ops/ops.pbtxt
@@ -15805,6 +15805,25 @@ op {
summary: "Transforms a serialized tensorflow.TensorProto proto into a Tensor."
}
op {
+ name: "SerializeTensor"
+ input_arg {
+ name: "tensor"
+ description: "A Tensor of type `T`."
+ type: "T"
+ }
+ output_arg {
+ name: "serialized"
+ description: "A serialized TensorProto proto of the input tensor."
+ type_attr: DT_STRING
+ }
+ attr {
+ name: "T"
+ type: "type"
+ description: "The type of the input tensor."
+ }
+ summary: "Transforms a Tensor into a serialized TensorProto proto."
+}
+op {
name: "Placeholder"
output_arg {
name: "output"
diff --git a/tensorflow/core/platform/default/logging.cc b/tensorflow/core/platform/default/logging.cc
index 7127db3929..ebdd4b624a 100644
--- a/tensorflow/core/platform/default/logging.cc
+++ b/tensorflow/core/platform/default/logging.cc
@@ -83,11 +83,11 @@ void LogMessage::GenerateLogMessage() {
const size_t time_buffer_size = 30;
char time_buffer[time_buffer_size];
strftime(time_buffer, time_buffer_size, "%Y-%m-%d %H:%M:%S",
- localtime(&now_seconds));
+ localtime(&now_seconds));
// TODO(jeff,sanjay): Replace this with something that logs through the env.
fprintf(stderr, "%s.%06d: %c %s:%d] %s\n", time_buffer, micros_remainder,
- "IWEF"[severity_], fname_, line_, str().c_str());
+ "IWEF"[severity_], fname_, line_, str().c_str());
}
#endif
diff --git a/tensorflow/python/feature_column/feature_column_test.py b/tensorflow/python/feature_column/feature_column_test.py
index 626879f76a..926e78acee 100644
--- a/tensorflow/python/feature_column/feature_column_test.py
+++ b/tensorflow/python/feature_column/feature_column_test.py
@@ -3209,7 +3209,7 @@ class IndicatorColumnTest(test.TestCase):
def test_transform_with_weighted_column(self):
# Github issue 12557
ids = fc.categorical_column_with_vocabulary_list(
- key='ids', vocabulary_list=('a', 'b', 'c'))
+ key='ids', vocabulary_list=('a', 'b', 'c'))
weights = fc.weighted_categorical_column(ids, 'weights')
indicator = fc.indicator_column(weights)
features = {
diff --git a/tensorflow/tf_exported_symbols.lds b/tensorflow/tf_exported_symbols.lds
index 4597d929a1..850f0edd94 100644
--- a/tensorflow/tf_exported_symbols.lds
+++ b/tensorflow/tf_exported_symbols.lds
@@ -2,4 +2,5 @@
*perftools*gputools*
*tf_*
TF_*
+TFE_*
*nsync_*
diff --git a/tensorflow/tf_version_script.lds b/tensorflow/tf_version_script.lds
index 88b64eb1f0..73d4c0cae4 100644
--- a/tensorflow/tf_version_script.lds
+++ b/tensorflow/tf_version_script.lds
@@ -3,6 +3,7 @@ tensorflow {
*tensorflow*;
*perftools*gputools*;
TF_*;
+ TFE_*;
*nsync_*;
local:
*;
diff --git a/tensorflow/workspace.bzl b/tensorflow/workspace.bzl
index ef342fe127..e86aebe3b3 100644
--- a/tensorflow/workspace.bzl
+++ b/tensorflow/workspace.bzl
@@ -99,6 +99,9 @@ def _execute_and_check_ret_code(repo_ctx, cmd_and_args):
# Apply a patch_file to the repository root directory
# Runs 'patch -p1'
def _apply_patch(repo_ctx, patch_file):
+ if not repo_ctx.which("patch"):
+ fail("patch command is not found, please install it")
+
cmd = [
"patch", "-p1", "-d", repo_ctx.path("."), "-i", repo_ctx.path(patch_file)
]