Adding TensorHandleList as the returned type for TF_ConcreteFunctionGetCaptures.
PiperOrigin-RevId: 311360593 Change-Id: Ic292aef980339e5bd5e360eea391bbee4751caf9
This commit is contained in:
parent
840e8b64a1
commit
88c4ee0102
@ -31,9 +31,6 @@ cc_library(
|
|||||||
"//tensorflow/c/experimental/saved_model/public:concrete_function.h",
|
"//tensorflow/c/experimental/saved_model/public:concrete_function.h",
|
||||||
],
|
],
|
||||||
copts = tf_copts(),
|
copts = tf_copts(),
|
||||||
# TODO(bmzhao): Remove this as we refactor C API to granular targets,
|
|
||||||
# so that we can depend on c/eager/c_api_unified_experimental.h.
|
|
||||||
features = ["-layering_check"],
|
|
||||||
visibility = [
|
visibility = [
|
||||||
"//tensorflow/c/experimental/saved_model/public:__pkg__",
|
"//tensorflow/c/experimental/saved_model/public:__pkg__",
|
||||||
],
|
],
|
||||||
@ -41,6 +38,8 @@ cc_library(
|
|||||||
":concrete_function_type",
|
":concrete_function_type",
|
||||||
":function_metadata",
|
":function_metadata",
|
||||||
":function_metadata_type",
|
":function_metadata_type",
|
||||||
|
":tensorhandle_list",
|
||||||
|
":tensorhandle_list_type",
|
||||||
"//tensorflow/c:c_api_macros",
|
"//tensorflow/c:c_api_macros",
|
||||||
"//tensorflow/c/eager:c_api",
|
"//tensorflow/c/eager:c_api",
|
||||||
"//tensorflow/c/eager:c_api_internal",
|
"//tensorflow/c/eager:c_api_internal",
|
||||||
@ -160,6 +159,38 @@ cc_library(
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
cc_library(
|
||||||
|
name = "tensorhandle_list",
|
||||||
|
srcs = [
|
||||||
|
"tensorhandle_list.cc",
|
||||||
|
],
|
||||||
|
hdrs = [
|
||||||
|
"//tensorflow/c/experimental/saved_model/public:tensorhandle_list.h",
|
||||||
|
],
|
||||||
|
copts = tf_copts(),
|
||||||
|
visibility = [
|
||||||
|
"//tensorflow/c/experimental/saved_model/public:__pkg__",
|
||||||
|
],
|
||||||
|
deps = [
|
||||||
|
":tensorhandle_list_type",
|
||||||
|
"//tensorflow/c:c_api_macros",
|
||||||
|
"//tensorflow/c/eager:c_api",
|
||||||
|
"//tensorflow/c/eager:tensor_handle_interface",
|
||||||
|
"//tensorflow/c/eager:tfe_tensorhandle_internal",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_library(
|
||||||
|
name = "tensorhandle_list_type",
|
||||||
|
hdrs = [
|
||||||
|
"tensorhandle_list_type.h",
|
||||||
|
],
|
||||||
|
deps = [
|
||||||
|
"//tensorflow/c:conversion_macros",
|
||||||
|
"//tensorflow/c/eager:tensor_handle_interface",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
tf_cc_test(
|
tf_cc_test(
|
||||||
name = "saved_model_api_test",
|
name = "saved_model_api_test",
|
||||||
size = "small",
|
size = "small",
|
||||||
|
@ -15,12 +15,12 @@ limitations under the License.
|
|||||||
|
|
||||||
#include "tensorflow/c/experimental/saved_model/public/concrete_function.h"
|
#include "tensorflow/c/experimental/saved_model/public/concrete_function.h"
|
||||||
|
|
||||||
#include "tensorflow/c/eager/c_api_unified_experimental.h"
|
|
||||||
#include "tensorflow/c/eager/tfe_op_internal.h"
|
#include "tensorflow/c/eager/tfe_op_internal.h"
|
||||||
#include "tensorflow/c/experimental/saved_model/core/concrete_function.h"
|
#include "tensorflow/c/experimental/saved_model/core/concrete_function.h"
|
||||||
#include "tensorflow/c/experimental/saved_model/core/function_metadata.h"
|
#include "tensorflow/c/experimental/saved_model/core/function_metadata.h"
|
||||||
#include "tensorflow/c/experimental/saved_model/internal/concrete_function_type.h"
|
#include "tensorflow/c/experimental/saved_model/internal/concrete_function_type.h"
|
||||||
#include "tensorflow/c/experimental/saved_model/internal/function_metadata_type.h"
|
#include "tensorflow/c/experimental/saved_model/internal/function_metadata_type.h"
|
||||||
|
#include "tensorflow/c/experimental/saved_model/internal/tensorhandle_list_type.h"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
@ -29,10 +29,9 @@ TF_FunctionMetadata* TF_ConcreteFunctionGetMetadata(TF_ConcreteFunction* func) {
|
|||||||
&tensorflow::unwrap(func)->GetFunctionMetadata()));
|
&tensorflow::unwrap(func)->GetFunctionMetadata()));
|
||||||
}
|
}
|
||||||
|
|
||||||
TF_OutputList* TF_ConcreteFunctionGetCaptures(TF_ConcreteFunction* func) {
|
const TF_TensorHandleList* TF_ConcreteFunctionGetCaptures(
|
||||||
// TODO(bmzhao): Refactor TF_OutputList struct definition into a separate
|
TF_ConcreteFunction* func) {
|
||||||
// internal header, and implement this function.
|
return tensorflow::wrap(&tensorflow::unwrap(func)->GetCaptures());
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TFE_Op* TF_ConcreteFunctionGetCallOp(TF_ConcreteFunction* func) {
|
TFE_Op* TF_ConcreteFunctionGetCallOp(TF_ConcreteFunction* func) {
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
/* Copyright 2020 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.
|
||||||
|
==============================================================================*/
|
||||||
|
|
||||||
|
#include "tensorflow/c/experimental/saved_model/public/tensorhandle_list.h"
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#include "tensorflow/c/eager/tensor_handle_interface.h"
|
||||||
|
#include "tensorflow/c/eager/tfe_tensorhandle_internal.h"
|
||||||
|
#include "tensorflow/c/experimental/saved_model/internal/tensorhandle_list_type.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
size_t TF_TensorHandleListSize(const TF_TensorHandleList* list) {
|
||||||
|
return tensorflow::unwrap(list)->size();
|
||||||
|
}
|
||||||
|
|
||||||
|
TFE_TensorHandle* TF_TensorHandleListGet(const TF_TensorHandleList* list,
|
||||||
|
int i) {
|
||||||
|
return tensorflow::wrap((*tensorflow::unwrap(list))[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TF_DeleteTensorHandleList(const TF_TensorHandleList* list) {
|
||||||
|
delete tensorflow::unwrap(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // end extern "C"
|
@ -0,0 +1,37 @@
|
|||||||
|
/* Copyright 2020 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.
|
||||||
|
==============================================================================*/
|
||||||
|
|
||||||
|
#ifndef TENSORFLOW_C_EXPERIMENTAL_SAVED_MODEL_INTERNAL_CONCRETE_FUNCTION_LIST_TYPE_H_
|
||||||
|
#define TENSORFLOW_C_EXPERIMENTAL_SAVED_MODEL_INTERNAL_CONCRETE_FUNCTION_LIST_TYPE_H_
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "tensorflow/c/conversion_macros.h"
|
||||||
|
#include "tensorflow/c/eager/tensor_handle_interface.h"
|
||||||
|
|
||||||
|
// Internal structures used by the SavedModel C API. These are likely to
|
||||||
|
// change and should not be depended on.
|
||||||
|
|
||||||
|
typedef struct TF_TensorHandleList TF_TensorHandleList;
|
||||||
|
|
||||||
|
namespace tensorflow {
|
||||||
|
|
||||||
|
DEFINE_CONVERSION_FUNCTIONS(
|
||||||
|
std::vector<tensorflow::AbstractTensorHandleInterface*>,
|
||||||
|
TF_TensorHandleList)
|
||||||
|
|
||||||
|
} // namespace tensorflow
|
||||||
|
|
||||||
|
#endif // TENSORFLOW_C_EXPERIMENTAL_SAVED_MODEL_INTERNAL_CONCRETE_FUNCTION_LIST_TYPE_H_
|
@ -24,6 +24,7 @@ exports_files(
|
|||||||
"concrete_function_list.h",
|
"concrete_function_list.h",
|
||||||
"function_metadata.h",
|
"function_metadata.h",
|
||||||
"saved_model_api.h",
|
"saved_model_api.h",
|
||||||
|
"tensorhandle_list.h",
|
||||||
],
|
],
|
||||||
visibility = ["//tensorflow/c/experimental/saved_model/internal:__pkg__"],
|
visibility = ["//tensorflow/c/experimental/saved_model/internal:__pkg__"],
|
||||||
)
|
)
|
||||||
@ -39,6 +40,7 @@ cc_library(
|
|||||||
":concrete_function_list",
|
":concrete_function_list",
|
||||||
":function_metadata",
|
":function_metadata",
|
||||||
":saved_model_api",
|
":saved_model_api",
|
||||||
|
":tensorhandle_list",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -61,3 +63,8 @@ alias(
|
|||||||
name = "saved_model_api",
|
name = "saved_model_api",
|
||||||
actual = "//tensorflow/c/experimental/saved_model/internal:saved_model_api",
|
actual = "//tensorflow/c/experimental/saved_model/internal:saved_model_api",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
alias(
|
||||||
|
name = "tensorhandle_list",
|
||||||
|
actual = "//tensorflow/c/experimental/saved_model/internal:tensorhandle_list",
|
||||||
|
)
|
||||||
|
@ -21,6 +21,7 @@ limitations under the License.
|
|||||||
#include "tensorflow/c/experimental/saved_model/public/concrete_function_list.h"
|
#include "tensorflow/c/experimental/saved_model/public/concrete_function_list.h"
|
||||||
#include "tensorflow/c/experimental/saved_model/public/function_metadata.h"
|
#include "tensorflow/c/experimental/saved_model/public/function_metadata.h"
|
||||||
#include "tensorflow/c/experimental/saved_model/public/saved_model_api.h"
|
#include "tensorflow/c/experimental/saved_model/public/saved_model_api.h"
|
||||||
|
#include "tensorflow/c/experimental/saved_model/public/tensorhandle_list.h"
|
||||||
// IWYU pragma: end_exports
|
// IWYU pragma: end_exports
|
||||||
|
|
||||||
#endif // TENSORFLOW_C_EXPERIMENTAL_SAVED_MODEL_PUBLIC_C_SAVED_MODEL_API_H_
|
#endif // TENSORFLOW_C_EXPERIMENTAL_SAVED_MODEL_PUBLIC_C_SAVED_MODEL_API_H_
|
||||||
|
@ -17,9 +17,9 @@ limitations under the License.
|
|||||||
#define TENSORFLOW_C_EXPERIMENTAL_SAVED_MODEL_PUBLIC_CONCRETE_FUNCTION_H_
|
#define TENSORFLOW_C_EXPERIMENTAL_SAVED_MODEL_PUBLIC_CONCRETE_FUNCTION_H_
|
||||||
|
|
||||||
#include "tensorflow/c/c_api_macros.h"
|
#include "tensorflow/c/c_api_macros.h"
|
||||||
#include "tensorflow/c/eager/c_api_internal.h"
|
#include "tensorflow/c/eager/c_api.h"
|
||||||
#include "tensorflow/c/eager/c_api_unified_experimental.h"
|
|
||||||
#include "tensorflow/c/experimental/saved_model/public/function_metadata.h"
|
#include "tensorflow/c/experimental/saved_model/public/function_metadata.h"
|
||||||
|
#include "tensorflow/c/experimental/saved_model/public/tensorhandle_list.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -36,7 +36,7 @@ TF_CAPI_EXPORT extern TF_FunctionMetadata* TF_ConcreteFunctionGetMetadata(
|
|||||||
TF_ConcreteFunction* func);
|
TF_ConcreteFunction* func);
|
||||||
|
|
||||||
// Returns a list of TensorHandles implicitly captured by this function.
|
// Returns a list of TensorHandles implicitly captured by this function.
|
||||||
TF_CAPI_EXPORT extern TF_OutputList* TF_ConcreteFunctionGetCaptures(
|
TF_CAPI_EXPORT extern const TF_TensorHandleList* TF_ConcreteFunctionGetCaptures(
|
||||||
TF_ConcreteFunction* func);
|
TF_ConcreteFunction* func);
|
||||||
|
|
||||||
// Returns a TFE_Op suitable for executing this function.
|
// Returns a TFE_Op suitable for executing this function.
|
||||||
|
@ -21,19 +21,27 @@ limitations under the License.
|
|||||||
#include "tensorflow/c/c_api_macros.h"
|
#include "tensorflow/c/c_api_macros.h"
|
||||||
#include "tensorflow/c/experimental/saved_model/public/concrete_function.h"
|
#include "tensorflow/c/experimental/saved_model/public/concrete_function.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
// An opaque type that is acts like a list of TF_ConcreteFunction pointers.
|
// An opaque type that is acts like a list of TF_ConcreteFunction pointers.
|
||||||
typedef struct TF_ConcreteFunctionList TF_ConcreteFunctionList;
|
typedef struct TF_ConcreteFunctionList TF_ConcreteFunctionList;
|
||||||
|
|
||||||
// Returns the size of `list`.
|
// Returns the size of `list`.
|
||||||
TF_CAPI_EXPORT size_t
|
TF_CAPI_EXPORT extern size_t TF_ConcreteFunctionListSize(
|
||||||
TF_ConcreteFunctionListSize(TF_ConcreteFunctionList* list);
|
TF_ConcreteFunctionList* list);
|
||||||
|
|
||||||
// Returns the `i`th TF_ConcreteFunction in the list.
|
// Returns the `i`th TF_ConcreteFunction in the list.
|
||||||
TF_CAPI_EXPORT TF_ConcreteFunction* TF_ConcreteFunctionListGet(
|
TF_CAPI_EXPORT extern TF_ConcreteFunction* TF_ConcreteFunctionListGet(
|
||||||
TF_ConcreteFunctionList* list, int i);
|
TF_ConcreteFunctionList* list, int i);
|
||||||
|
|
||||||
// Deletes `list`.
|
// Deletes `list`.
|
||||||
TF_CAPI_EXPORT void TF_DeleteConcreteFunctionList(
|
TF_CAPI_EXPORT extern void TF_DeleteConcreteFunctionList(
|
||||||
TF_ConcreteFunctionList* list);
|
TF_ConcreteFunctionList* list);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} // end extern "C"
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
#endif // TENSORFLOW_C_EXPERIMENTAL_SAVED_MODEL_PUBLIC_CONCRETE_FUNCTION_LIST_H_
|
#endif // TENSORFLOW_C_EXPERIMENTAL_SAVED_MODEL_PUBLIC_CONCRETE_FUNCTION_LIST_H_
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
/* Copyright 2020 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.
|
||||||
|
==============================================================================*/
|
||||||
|
|
||||||
|
#ifndef TENSORFLOW_C_EXPERIMENTAL_SAVED_MODEL_PUBLIC_TENSORHANDLE_LIST_H_
|
||||||
|
#define TENSORFLOW_C_EXPERIMENTAL_SAVED_MODEL_PUBLIC_TENSORHANDLE_LIST_H_
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#include "tensorflow/c/c_api_macros.h"
|
||||||
|
#include "tensorflow/c/eager/c_api.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
// An opaque type that is acts like a list of TF_ConcreteFunction pointers.
|
||||||
|
typedef struct TF_TensorHandleList TF_TensorHandleList;
|
||||||
|
|
||||||
|
// Returns the size of `list`.
|
||||||
|
TF_CAPI_EXPORT extern size_t TF_TensorHandleListSize(
|
||||||
|
const TF_TensorHandleList* list);
|
||||||
|
|
||||||
|
// Returns the `i`th TFE_TensorHandle in the list.
|
||||||
|
TF_CAPI_EXPORT extern TFE_TensorHandle* TF_TensorHandleListGet(
|
||||||
|
const TF_TensorHandleList* list, int i);
|
||||||
|
|
||||||
|
// Deletes `list`.
|
||||||
|
TF_CAPI_EXPORT extern void TF_DeleteTensorHandleList(
|
||||||
|
const TF_TensorHandleList* list);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} // end extern "C"
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
#endif // TENSORFLOW_C_EXPERIMENTAL_SAVED_MODEL_PUBLIC_TENSORHANDLE_LIST_H_
|
Loading…
Reference in New Issue
Block a user