Split out node_def_util, op_def_builder, op_def_util and attr_value_util targets in tensorflow/core/framework/BUILD. Split out
node_def_util.cc/.h into node_def_util.cc/.h and graph_node_util.cc/.h, where only the latter depends on graph.h. PiperOrigin-RevId: 288340739 Change-Id: I66932bab042bda4bd707f866514b18b80efa805b
This commit is contained in:
parent
c6c81bc173
commit
31c3789692
|
@ -26,6 +26,7 @@ limitations under the License.
|
|||
#include "tensorflow/core/framework/tensor.pb.h"
|
||||
#include "tensorflow/core/graph/algorithm.h"
|
||||
#include "tensorflow/core/graph/control_flow.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
#include "tensorflow/core/graph/tensor_id.h"
|
||||
#include "tensorflow/core/lib/hash/hash.h"
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ limitations under the License.
|
|||
#include "tensorflow/compiler/xla/status_macros.h"
|
||||
#include "tensorflow/core/framework/node_def.pb.h"
|
||||
#include "tensorflow/core/framework/types.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
#include "tensorflow/core/lib/core/stringpiece.h"
|
||||
#include "tensorflow/core/lib/hash/hash.h"
|
||||
#include "tensorflow/core/lib/strings/proto_serialization.h"
|
||||
|
|
|
@ -16,6 +16,7 @@ limitations under the License.
|
|||
#include "tensorflow/compiler/jit/node_matchers.h"
|
||||
|
||||
#include <utility>
|
||||
|
||||
#include "absl/algorithm/container.h"
|
||||
#include "absl/strings/str_cat.h"
|
||||
#include "absl/strings/str_join.h"
|
||||
|
@ -24,6 +25,7 @@ limitations under the License.
|
|||
#include "tensorflow/core/framework/attr_value_util.h"
|
||||
#include "tensorflow/core/framework/node_def.pb.h"
|
||||
#include "tensorflow/core/framework/tensor.pb.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
|
||||
namespace tensorflow {
|
||||
namespace testing {
|
||||
|
|
|
@ -27,6 +27,7 @@ limitations under the License.
|
|||
#include "tensorflow/core/framework/memory_types.h"
|
||||
#include "tensorflow/core/framework/node_def.pb.h"
|
||||
#include "tensorflow/core/framework/op_kernel.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
#include "tensorflow/core/lib/core/errors.h"
|
||||
#include "tensorflow/core/public/version.h"
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@ limitations under the License.
|
|||
#include "tensorflow/compiler/tf2xla/functionalize_control_flow_util.h"
|
||||
|
||||
#include "tensorflow/core/framework/node_def.pb.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
|
||||
namespace tensorflow {
|
||||
|
||||
|
|
|
@ -1138,6 +1138,7 @@ tf_cuda_library(
|
|||
"graph/graph_constructor.h",
|
||||
"graph/graph_def_builder.h",
|
||||
"graph/graph_def_builder_util.h",
|
||||
"graph/graph_node_util.h",
|
||||
"graph/node_builder.h",
|
||||
"graph/validate.h",
|
||||
"graph/while_context.h",
|
||||
|
@ -2384,6 +2385,7 @@ FRAMEWORK_INTERNAL_PRIVATE_HEADERS = [
|
|||
"graph/edgeset.h",
|
||||
"graph/graph.h",
|
||||
"graph/graph_def_builder.h",
|
||||
"graph/graph_node_util.h",
|
||||
"graph/node_builder.h",
|
||||
"graph/tensor_id.h",
|
||||
"//tensorflow/core/util/sparse:framework_internal_private_headers_group",
|
||||
|
@ -2477,6 +2479,7 @@ tf_cuda_library(
|
|||
"graph/edgeset.cc",
|
||||
"graph/graph.cc",
|
||||
"graph/graph_def_builder.cc",
|
||||
"graph/graph_node_util.cc",
|
||||
"graph/node_builder.cc",
|
||||
"graph/tensor_id.cc",
|
||||
"graph/while_context.h",
|
||||
|
@ -2520,8 +2523,12 @@ tf_cuda_library(
|
|||
"//tensorflow/core/framework:allocator",
|
||||
"//tensorflow/core/framework:allocator_registry_impl",
|
||||
"//tensorflow/core/framework:attr_value_proto_text",
|
||||
"//tensorflow/core/framework:attr_value_util",
|
||||
"//tensorflow/core/framework:bfloat16",
|
||||
"//tensorflow/core/framework:node_def_util",
|
||||
"//tensorflow/core/framework:numeric_types",
|
||||
"//tensorflow/core/framework:op_def_builder",
|
||||
"//tensorflow/core/framework:op_def_util",
|
||||
"//tensorflow/core/framework:resource_handle",
|
||||
"//tensorflow/core/framework:tensor",
|
||||
"//tensorflow/core/framework:tensor_shape",
|
||||
|
@ -2620,6 +2627,7 @@ GRAPH_HDRS = [
|
|||
"graph/graph_constructor.h", # NOTE(mrry): Don't include the .cc since it depends on common_runtime.
|
||||
"graph/graph_def_builder.h",
|
||||
"graph/graph_def_builder_util.h",
|
||||
"graph/graph_node_util.h",
|
||||
"graph/graph_partition.h",
|
||||
"graph/mkl_layout_pass.h",
|
||||
"graph/mkl_tfconversion_pass.h",
|
||||
|
|
|
@ -38,6 +38,7 @@ limitations under the License.
|
|||
#include "tensorflow/core/framework/op_kernel.h"
|
||||
#include "tensorflow/core/framework/types.h"
|
||||
#include "tensorflow/core/framework/types.pb.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
#include "tensorflow/core/lib/core/errors.h"
|
||||
#include "tensorflow/core/lib/core/stringpiece.h"
|
||||
#include "tensorflow/core/lib/strings/str_util.h"
|
||||
|
|
|
@ -45,6 +45,7 @@ limitations under the License.
|
|||
#include "tensorflow/core/framework/types.pb.h"
|
||||
#include "tensorflow/core/graph/edgeset.h"
|
||||
#include "tensorflow/core/graph/graph.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
#include "tensorflow/core/lib/core/errors.h"
|
||||
#include "tensorflow/core/lib/core/notification.h"
|
||||
#include "tensorflow/core/lib/core/status.h"
|
||||
|
|
|
@ -26,6 +26,7 @@ limitations under the License.
|
|||
#include "tensorflow/core/framework/function.h"
|
||||
#include "tensorflow/core/framework/node_def_util.h"
|
||||
#include "tensorflow/core/framework/types.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
#include "tensorflow/core/lib/core/errors.h"
|
||||
|
||||
namespace tensorflow {
|
||||
|
|
|
@ -18,7 +18,9 @@ limitations under the License.
|
|||
#include "absl/algorithm/container.h"
|
||||
#include "tensorflow/core/common_runtime/function.h"
|
||||
#include "tensorflow/core/common_runtime/lower_functional_ops.h"
|
||||
#include "tensorflow/core/framework/node_def_util.h"
|
||||
#include "tensorflow/core/graph/graph.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
|
||||
namespace tensorflow {
|
||||
namespace {
|
||||
|
|
|
@ -20,7 +20,9 @@ limitations under the License.
|
|||
#include "tensorflow/core/common_runtime/lower_function_call_op.h"
|
||||
#include "tensorflow/core/common_runtime/lower_if_op.h"
|
||||
#include "tensorflow/core/common_runtime/lower_while_op.h"
|
||||
#include "tensorflow/core/framework/node_def_util.h"
|
||||
#include "tensorflow/core/graph/graph.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
#include "tensorflow/core/public/session_options.h"
|
||||
|
||||
namespace tensorflow {
|
||||
|
|
|
@ -24,9 +24,9 @@ limitations under the License.
|
|||
#include "tensorflow/core/framework/device_attributes.pb.h"
|
||||
#include "tensorflow/core/framework/function.h"
|
||||
#include "tensorflow/core/framework/graph.pb.h"
|
||||
#include "tensorflow/core/framework/node_def_util.h"
|
||||
#include "tensorflow/core/framework/types.h"
|
||||
#include "tensorflow/core/framework/types.pb.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
#include "tensorflow/core/lib/core/errors.h"
|
||||
#include "tensorflow/core/util/dump_graph.h"
|
||||
#include "tensorflow/core/util/port.h"
|
||||
|
|
|
@ -35,6 +35,7 @@ limitations under the License.
|
|||
#include "tensorflow/core/framework/types.pb.h"
|
||||
#include "tensorflow/core/graph/graph.h"
|
||||
#include "tensorflow/core/graph/graph_constructor.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
#include "tensorflow/core/graph/graph_partition.h"
|
||||
#include "tensorflow/core/lib/core/blocking_counter.h"
|
||||
#include "tensorflow/core/lib/core/errors.h"
|
||||
|
|
|
@ -28,7 +28,6 @@ package(
|
|||
exports_files(
|
||||
srcs = [
|
||||
"allocator_registry.h",
|
||||
"attr_value_util.h",
|
||||
"cancellation.h",
|
||||
"collective.h",
|
||||
"common_shape_fns.h",
|
||||
|
@ -47,11 +46,8 @@ exports_files(
|
|||
"memory_types.h",
|
||||
"model.h",
|
||||
"node_def_builder.h",
|
||||
"node_def_util.h",
|
||||
"numeric_op.h",
|
||||
"op.h",
|
||||
"op_def_builder.h",
|
||||
"op_def_util.h",
|
||||
"op_kernel.h",
|
||||
"op_segment.h",
|
||||
"ops_util.h",
|
||||
|
@ -212,7 +208,6 @@ filegroup(
|
|||
filegroup(
|
||||
name = "framework_internal_impl_srcs",
|
||||
srcs = [
|
||||
"attr_value_util.cc",
|
||||
"cancellation.cc",
|
||||
"collective.cc",
|
||||
"common_shape_fns.cc",
|
||||
|
@ -231,10 +226,7 @@ filegroup(
|
|||
"memory_types.cc",
|
||||
"model.cc",
|
||||
"node_def_builder.cc",
|
||||
"node_def_util.cc",
|
||||
"op.cc",
|
||||
"op_def_builder.cc",
|
||||
"op_def_util.cc",
|
||||
"op_kernel.cc",
|
||||
"op_segment.cc",
|
||||
"ops_util.cc",
|
||||
|
@ -611,7 +603,10 @@ cc_library(
|
|||
cc_library(
|
||||
name = "tensor_shape",
|
||||
srcs = ["tensor_shape.cc"],
|
||||
hdrs = ["tensor_shape.h"],
|
||||
hdrs = [
|
||||
"partial_tensor_shape.h",
|
||||
"tensor_shape.h",
|
||||
],
|
||||
visibility = ["//tensorflow/core:__pkg__"],
|
||||
deps = [
|
||||
":bounds_check",
|
||||
|
@ -736,6 +731,106 @@ tf_cuda_library(
|
|||
alwayslink = 1,
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "attr_value_util",
|
||||
srcs = ["attr_value_util.cc"],
|
||||
hdrs = ["attr_value_util.h"],
|
||||
deps = [
|
||||
":attr_value_proto_text",
|
||||
":tensor",
|
||||
":tensor_shape",
|
||||
":tensor_shape_proto_cc",
|
||||
"//tensorflow/core/lib/core:errors",
|
||||
"//tensorflow/core/lib/core:status",
|
||||
"//tensorflow/core/lib/core:stringpiece",
|
||||
"//tensorflow/core/lib/gtl:array_slice",
|
||||
"//tensorflow/core/lib/hash",
|
||||
"//tensorflow/core/lib/strings:proto_serialization",
|
||||
"//tensorflow/core/lib/strings:str_util",
|
||||
"//tensorflow/core/platform:protobuf",
|
||||
"@com_google_absl//absl/strings",
|
||||
],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "op_def_util",
|
||||
srcs = ["op_def_util.cc"],
|
||||
hdrs = ["op_def_util.h"],
|
||||
deps = [
|
||||
":api_def_proto_cc",
|
||||
":attr_value_proto_cc",
|
||||
":attr_value_util",
|
||||
":op_def_proto_cc",
|
||||
":tensor",
|
||||
"//tensorflow/core/lib/core:errors",
|
||||
"//tensorflow/core/lib/core:status",
|
||||
"//tensorflow/core/lib/core:stringpiece",
|
||||
"//tensorflow/core/lib/gtl:map_util",
|
||||
"//tensorflow/core/lib/hash",
|
||||
"//tensorflow/core/lib/strings:proto_serialization",
|
||||
"//tensorflow/core/lib/strings:scanner",
|
||||
"//tensorflow/core/lib/strings:str_util",
|
||||
"//tensorflow/core/lib/strings:strcat",
|
||||
"//tensorflow/core/platform:mutex",
|
||||
"//tensorflow/core/platform:protobuf",
|
||||
"//tensorflow/core/platform:types",
|
||||
],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "node_def_util",
|
||||
srcs = ["node_def_util.cc"],
|
||||
hdrs = ["node_def_util.h"],
|
||||
deps = [
|
||||
":attr_value_proto_cc",
|
||||
":attr_value_util",
|
||||
":node_def_proto_cc",
|
||||
":op_def_proto_cc",
|
||||
":op_def_util",
|
||||
":tensor",
|
||||
":tensor_proto_cc",
|
||||
":tensor_shape",
|
||||
":tensor_shape_proto_cc",
|
||||
":types_proto_cc",
|
||||
"//tensorflow/core/lib/core:stringpiece",
|
||||
"//tensorflow/core/lib/gtl:array_slice",
|
||||
"//tensorflow/core/lib/gtl:flatmap",
|
||||
"//tensorflow/core/lib/gtl:map_util",
|
||||
"//tensorflow/core/lib/hash",
|
||||
"//tensorflow/core/platform:errors",
|
||||
"//tensorflow/core/platform:hash",
|
||||
"//tensorflow/core/platform:protobuf",
|
||||
"//tensorflow/core/platform:scanner",
|
||||
"//tensorflow/core/platform:status",
|
||||
"//tensorflow/core/platform:strcat",
|
||||
"//tensorflow/core/platform:stringpiece",
|
||||
"//tensorflow/core/platform:types",
|
||||
"@com_google_absl//absl/strings",
|
||||
],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "op_def_builder",
|
||||
srcs = ["op_def_builder.cc"],
|
||||
hdrs = ["op_def_builder.h"],
|
||||
deps = [
|
||||
":attr_value_proto_cc",
|
||||
":attr_value_util",
|
||||
":op_def_proto_cc",
|
||||
":op_def_util",
|
||||
":tensor",
|
||||
"//tensorflow/core/lib/core:errors",
|
||||
"//tensorflow/core/lib/core:status",
|
||||
"//tensorflow/core/lib/core:stringpiece",
|
||||
"//tensorflow/core/lib/gtl:array_slice",
|
||||
"//tensorflow/core/lib/strings:scanner",
|
||||
"//tensorflow/core/lib/strings:str_util",
|
||||
"//tensorflow/core/lib/strings:strcat",
|
||||
"//tensorflow/core/platform:macros",
|
||||
"@com_google_absl//absl/strings",
|
||||
],
|
||||
)
|
||||
|
||||
# Files whose users still need to be migrated from core:framework to the
|
||||
# above targets.
|
||||
# TODO(gonnet): Remove these files once targets depending on them have
|
||||
|
|
|
@ -24,6 +24,7 @@ limitations under the License.
|
|||
#include "tensorflow/core/framework/node_def_util.h"
|
||||
#include "tensorflow/core/framework/types.h"
|
||||
#include "tensorflow/core/graph/graph.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
#include "tensorflow/core/graph/tensor_id.h"
|
||||
#include "tensorflow/core/lib/core/errors.h"
|
||||
#include "tensorflow/core/lib/core/status.h"
|
||||
|
|
|
@ -18,6 +18,7 @@ limitations under the License.
|
|||
|
||||
#include <functional>
|
||||
#include <vector>
|
||||
|
||||
#include "tensorflow/core/framework/attr_value_util.h"
|
||||
#include "tensorflow/core/framework/node_def.pb.h"
|
||||
#include "tensorflow/core/framework/node_def_util.h"
|
||||
|
@ -25,6 +26,7 @@ limitations under the License.
|
|||
#include "tensorflow/core/framework/op_def.pb.h"
|
||||
#include "tensorflow/core/framework/types.h"
|
||||
#include "tensorflow/core/graph/graph.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
#include "tensorflow/core/lib/core/status.h"
|
||||
#include "tensorflow/core/lib/gtl/array_slice.h"
|
||||
#include "tensorflow/core/lib/strings/strcat.h"
|
||||
|
|
|
@ -23,19 +23,22 @@ limitations under the License.
|
|||
#include "absl/strings/str_join.h"
|
||||
#include "tensorflow/core/framework/attr_value.pb.h"
|
||||
#include "tensorflow/core/framework/attr_value_util.h"
|
||||
#include "tensorflow/core/framework/graph.pb.h"
|
||||
#include "tensorflow/core/framework/op.h"
|
||||
#include "tensorflow/core/framework/node_def.pb.h"
|
||||
#include "tensorflow/core/framework/op_def.pb.h"
|
||||
#include "tensorflow/core/framework/op_def_util.h"
|
||||
#include "tensorflow/core/framework/tensor.h"
|
||||
#include "tensorflow/core/framework/tensor.pb.h"
|
||||
#include "tensorflow/core/framework/tensor_shape.h"
|
||||
#include "tensorflow/core/framework/tensor_shape.pb.h"
|
||||
#include "tensorflow/core/graph/graph.h"
|
||||
#include "tensorflow/core/lib/core/errors.h"
|
||||
#include "tensorflow/core/framework/types.h"
|
||||
#include "tensorflow/core/framework/types.pb.h"
|
||||
#include "tensorflow/core/lib/gtl/map_util.h"
|
||||
#include "tensorflow/core/lib/strings/scanner.h"
|
||||
#include "tensorflow/core/lib/strings/str_util.h"
|
||||
#include "tensorflow/core/lib/strings/strcat.h"
|
||||
#include "tensorflow/core/platform/protobuf.h"
|
||||
#include "tensorflow/core/platform/errors.h"
|
||||
#include "tensorflow/core/platform/scanner.h"
|
||||
#include "tensorflow/core/platform/status.h"
|
||||
#include "tensorflow/core/platform/strcat.h"
|
||||
#include "tensorflow/core/platform/stringpiece.h"
|
||||
#include "tensorflow/core/platform/types.h"
|
||||
|
||||
namespace tensorflow {
|
||||
|
||||
|
@ -97,8 +100,6 @@ string AttrSlice::DebugString() const {
|
|||
return absl::StrJoin(attr_key_vals, ", ");
|
||||
}
|
||||
|
||||
string SummarizeNode(const Node& node) { return SummarizeNodeDef(node.def()); }
|
||||
|
||||
string SummarizeNodeDef(const NodeDef& node_def) {
|
||||
string ret = strings::StrCat(errors::FormatNodeNameForError(node_def.name()),
|
||||
" = ", node_def.op(), "[");
|
||||
|
@ -120,57 +121,20 @@ string SummarizeAttrs(const NodeDef& node_def) {
|
|||
return SummarizeAttrsHelper(node_def, node_def.device());
|
||||
}
|
||||
|
||||
string FormatNodeForError(const NodeDebugInfo& debug_info) {
|
||||
return debug_info.original_node_names.empty()
|
||||
? errors::FormatNodeNameForError(debug_info.name)
|
||||
: errors::FormatNodeNamesForError(debug_info.original_node_names);
|
||||
}
|
||||
|
||||
string FormatNodeForError(const Node& node) {
|
||||
return FormatNodeForError(NodeDebugInfo(node));
|
||||
}
|
||||
|
||||
string FormatNodeDefForError(const NodeDef& node_def) {
|
||||
return FormatNodeForError(NodeDebugInfo(node_def));
|
||||
}
|
||||
|
||||
string FormatNodeDefForError(
|
||||
StringPiece node_name, bool has_experimental_debug_info,
|
||||
const NodeDef_ExperimentalDebugInfo& experimental_debug_info) {
|
||||
return FormatNodeForError(NodeDebugInfo(
|
||||
node_name, has_experimental_debug_info, experimental_debug_info));
|
||||
return !has_experimental_debug_info ||
|
||||
experimental_debug_info.original_node_names().empty()
|
||||
? errors::FormatNodeNameForError(string(node_name))
|
||||
: errors::FormatNodeNamesForError(
|
||||
experimental_debug_info.original_node_names());
|
||||
}
|
||||
|
||||
void GetMergedOriginalNodeNames(const NodeDebugInfo& from,
|
||||
const NodeDebugInfo& to,
|
||||
std::set<string>* names) {
|
||||
if (!from.original_node_names.empty()) {
|
||||
names->insert(from.original_node_names.begin(),
|
||||
from.original_node_names.end());
|
||||
} else {
|
||||
names->insert(from.name);
|
||||
}
|
||||
names->insert(to.original_node_names.begin(), to.original_node_names.end());
|
||||
}
|
||||
|
||||
void MergeDebugInfo(const NodeDebugInfo& from, Node* to) {
|
||||
std::set<string> names;
|
||||
GetMergedOriginalNodeNames(from, NodeDebugInfo(*to), &names);
|
||||
to->set_original_node_names({names.begin(), names.end()});
|
||||
}
|
||||
|
||||
void MergeDebugInfo(const NodeDebugInfo& from, NodeDef* to) {
|
||||
std::set<string> names;
|
||||
GetMergedOriginalNodeNames(from, NodeDebugInfo(*to), &names);
|
||||
to->mutable_experimental_debug_info()->clear_original_node_names();
|
||||
if (!names.empty()) {
|
||||
*to->mutable_experimental_debug_info()->mutable_original_node_names() = {
|
||||
names.begin(), names.end()};
|
||||
}
|
||||
}
|
||||
|
||||
void MergeDebugInfo(const NodeDef& from, NodeDef* to) {
|
||||
MergeDebugInfo(NodeDebugInfo(from), to);
|
||||
string FormatNodeDefForError(const NodeDef& node_def) {
|
||||
return FormatNodeDefForError(node_def.name(),
|
||||
node_def.has_experimental_debug_info(),
|
||||
node_def.experimental_debug_info());
|
||||
}
|
||||
|
||||
const AttrValue* AttrSlice::Find(StringPiece attr_name) const {
|
||||
|
@ -727,11 +691,6 @@ Status NameRangesForNode(const AttrSlice& attrs, const OpDef& op_def,
|
|||
return Status::OK();
|
||||
}
|
||||
|
||||
Status NameRangesForNode(const Node& node, const OpDef& op_def,
|
||||
NameRangeMap* inputs, NameRangeMap* outputs) {
|
||||
return NameRangesForNode(node.def(), op_def, inputs, outputs);
|
||||
}
|
||||
|
||||
void AddDefaultsToNodeDef(const OpDef& op_def, NodeDef* node_def) {
|
||||
for (const auto& attr_def : op_def.attr()) {
|
||||
AttrSlice attrs(*node_def);
|
||||
|
@ -850,11 +809,6 @@ Status AttachDef(const Status& status, const NodeDef& node_def,
|
|||
return ret;
|
||||
}
|
||||
|
||||
Status AttachDef(const Status& status, const Node& node,
|
||||
bool allow_multiple_formatted_node) {
|
||||
return AttachDef(status, node.def(), allow_multiple_formatted_node);
|
||||
}
|
||||
|
||||
void AddNodeAttr(StringPiece name, const AttrValue& value, NodeDef* node_def) {
|
||||
node_def->mutable_attr()->insert(
|
||||
AttrValueMap::value_type(string(name), value));
|
||||
|
|
|
@ -21,21 +21,29 @@ limitations under the License.
|
|||
|
||||
#include "tensorflow/core/framework/attr_value_util.h"
|
||||
#include "tensorflow/core/framework/node_def.pb.h"
|
||||
#include "tensorflow/core/framework/tensor.h"
|
||||
#include "tensorflow/core/framework/tensor_shape.h"
|
||||
#include "tensorflow/core/framework/types.h"
|
||||
#include "tensorflow/core/framework/types.pb.h"
|
||||
#include "tensorflow/core/lib/core/stringpiece.h"
|
||||
#include "tensorflow/core/lib/gtl/array_slice.h"
|
||||
#include "tensorflow/core/lib/gtl/flatmap.h"
|
||||
#include "tensorflow/core/lib/hash/hash.h"
|
||||
#include "tensorflow/core/platform/hash.h"
|
||||
#include "tensorflow/core/platform/protobuf.h"
|
||||
#include "tensorflow/core/platform/status.h"
|
||||
#include "tensorflow/core/platform/stringpiece.h"
|
||||
#include "tensorflow/core/platform/types.h"
|
||||
|
||||
namespace tensorflow {
|
||||
|
||||
class Node;
|
||||
struct NodeDebugInfo;
|
||||
|
||||
// We forward declare protos so that kernels don't need to depend on them
|
||||
class NodeDef;
|
||||
class OpDef;
|
||||
class AttrSlice;
|
||||
// We forward declare protos so that kernels don't need to depend on them
|
||||
class OpDef;
|
||||
class AttrValue;
|
||||
class NameAttrList;
|
||||
class TensorProto;
|
||||
class TensorShapeProto;
|
||||
|
||||
// Name of the attribute used to encode node colocation constraints.
|
||||
//
|
||||
|
@ -49,7 +57,6 @@ extern const char* const kColocationGroupPrefix;
|
|||
|
||||
// Produce a human-readable version of a Node or NodeDef that is more concise
|
||||
// than a text-format proto.
|
||||
string SummarizeNode(const Node& node);
|
||||
string SummarizeNodeDef(const NodeDef& node_def);
|
||||
string SummarizeAttrs(const NodeDef& node_def);
|
||||
string SummarizeAttrsHelper(AttrSlice attrs, StringPiece device);
|
||||
|
@ -57,18 +64,11 @@ string SummarizeAttrsHelper(AttrSlice attrs, StringPiece device);
|
|||
// Produces a formatted string pattern from the node which can uniquely identify
|
||||
// this node upstream to produce an informative error message. The pattern
|
||||
// followed is: {{node <node_name>}}
|
||||
string FormatNodeForError(const Node& node);
|
||||
string FormatNodeDefForError(const NodeDef& node_def);
|
||||
string FormatNodeDefForError(
|
||||
StringPiece node_name, bool has_experimental_debug_info,
|
||||
const NodeDef_ExperimentalDebugInfo& experimental_debug_info);
|
||||
|
||||
// Merges the original node names from the debug information of 'from' to the
|
||||
// debug information of 'to'.
|
||||
void MergeDebugInfo(const NodeDebugInfo& from, Node* to);
|
||||
void MergeDebugInfo(const NodeDebugInfo& from, NodeDef* to);
|
||||
void MergeDebugInfo(const NodeDef& from, NodeDef* to);
|
||||
|
||||
typedef protobuf::Map<string, AttrValue> AttrValueMap;
|
||||
|
||||
// Adds an attr with name <name> and value <value> to *node_def.
|
||||
|
@ -351,9 +351,6 @@ typedef gtl::FlatMap<StringPiece, std::pair<int, int>, hash<StringPiece>>
|
|||
NameRangeMap;
|
||||
Status NameRangesForNode(const AttrSlice& attrs, const OpDef& op_def,
|
||||
NameRangeMap* inputs, NameRangeMap* outputs);
|
||||
Status NameRangesForNode(const Node& node, const OpDef& op_def,
|
||||
NameRangeMap* inputs, NameRangeMap* outputs);
|
||||
|
||||
// Adds default values to *node_def for unspecified attrs from op_def.
|
||||
void AddDefaultsToNodeDef(const OpDef& op_def, NodeDef* node_def);
|
||||
|
||||
|
@ -376,9 +373,6 @@ Status ValidateExternalNodeDefSyntax(const NodeDef& node_def);
|
|||
// of the NodeDef instead of the formatted string.
|
||||
Status AttachDef(const Status& status, const NodeDef& node_def,
|
||||
bool allow_multiple_formatted_node = false);
|
||||
Status AttachDef(const Status& status, const Node& node,
|
||||
bool allow_multiple_formatted_node = false);
|
||||
|
||||
// Appends the given prefix and suffix to the original node name in order to
|
||||
// make the name unique. If it's an "Enter" node and uniquify_frame_name is
|
||||
// true, use the same way to reset attribute "frame_name".
|
||||
|
|
|
@ -23,6 +23,7 @@ limitations under the License.
|
|||
#include "tensorflow/core/framework/op_def_builder.h"
|
||||
#include "tensorflow/core/framework/op_kernel.h"
|
||||
#include "tensorflow/core/framework/versions.pb.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
#include "tensorflow/core/graph/while_context.h"
|
||||
#include "tensorflow/core/lib/core/errors.h"
|
||||
#include "tensorflow/core/lib/gtl/map_util.h"
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
/* 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/core/graph/graph_node_util.h"
|
||||
|
||||
#include "tensorflow/core/framework/node_def.pb.h"
|
||||
#include "tensorflow/core/framework/node_def_util.h"
|
||||
#include "tensorflow/core/graph/graph.h"
|
||||
#include "tensorflow/core/lib/core/errors.h"
|
||||
#include "tensorflow/core/lib/core/stringpiece.h"
|
||||
|
||||
namespace tensorflow {
|
||||
|
||||
string SummarizeNode(const Node& node) { return SummarizeNodeDef(node.def()); }
|
||||
|
||||
string FormatNodeForError(const NodeDebugInfo& debug_info) {
|
||||
return debug_info.original_node_names.empty()
|
||||
? errors::FormatNodeNameForError(debug_info.name)
|
||||
: errors::FormatNodeNamesForError(debug_info.original_node_names);
|
||||
}
|
||||
|
||||
string FormatNodeForError(const Node& node) {
|
||||
return FormatNodeForError(NodeDebugInfo(node));
|
||||
}
|
||||
|
||||
Status NameRangesForNode(const Node& node, const OpDef& op_def,
|
||||
NameRangeMap* inputs, NameRangeMap* outputs) {
|
||||
return NameRangesForNode(node.def(), op_def, inputs, outputs);
|
||||
}
|
||||
|
||||
Status AttachDef(const Status& status, const Node& node,
|
||||
bool allow_multiple_formatted_node) {
|
||||
return AttachDef(status, node.def(), allow_multiple_formatted_node);
|
||||
}
|
||||
|
||||
void GetMergedOriginalNodeNames(const NodeDebugInfo& from,
|
||||
const NodeDebugInfo& to,
|
||||
std::set<string>* names) {
|
||||
if (!from.original_node_names.empty()) {
|
||||
names->insert(from.original_node_names.begin(),
|
||||
from.original_node_names.end());
|
||||
} else {
|
||||
names->insert(from.name);
|
||||
}
|
||||
names->insert(to.original_node_names.begin(), to.original_node_names.end());
|
||||
}
|
||||
|
||||
void MergeDebugInfo(const NodeDebugInfo& from, Node* to) {
|
||||
std::set<string> names;
|
||||
GetMergedOriginalNodeNames(from, NodeDebugInfo(*to), &names);
|
||||
to->set_original_node_names({names.begin(), names.end()});
|
||||
}
|
||||
|
||||
void MergeDebugInfo(const NodeDebugInfo& from, NodeDef* to) {
|
||||
std::set<string> names;
|
||||
GetMergedOriginalNodeNames(from, NodeDebugInfo(*to), &names);
|
||||
to->mutable_experimental_debug_info()->clear_original_node_names();
|
||||
if (!names.empty()) {
|
||||
*to->mutable_experimental_debug_info()->mutable_original_node_names() = {
|
||||
names.begin(), names.end()};
|
||||
}
|
||||
}
|
||||
|
||||
void MergeDebugInfo(const NodeDef& from, NodeDef* to) {
|
||||
MergeDebugInfo(NodeDebugInfo(from), to);
|
||||
}
|
||||
} // namespace tensorflow
|
|
@ -0,0 +1,64 @@
|
|||
/* 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_CORE_GRAPH_GRAPH_NODE_UTIL_H_
|
||||
#define TENSORFLOW_CORE_GRAPH_GRAPH_NODE_UTIL_H_
|
||||
|
||||
#include "tensorflow/core/framework/node_def_util.h"
|
||||
#include "tensorflow/core/lib/core/stringpiece.h"
|
||||
#include "tensorflow/core/platform/status.h"
|
||||
|
||||
namespace tensorflow {
|
||||
class Node;
|
||||
struct NodeDebugInfo;
|
||||
|
||||
// We forward declare protos so that kernels don't need to depend on them
|
||||
class NodeDef;
|
||||
class OpDef;
|
||||
|
||||
// Produce a human-readable version of a Node or NodeDef that is more concise
|
||||
// than a text-format proto.
|
||||
string SummarizeNode(const Node& node);
|
||||
|
||||
// Produces a formatted string pattern from the node which can uniquely identify
|
||||
// this node upstream to produce an informative error message. The pattern
|
||||
// followed is: {{node <node_name>}}
|
||||
string FormatNodeForError(const Node& node);
|
||||
|
||||
// Merges the original node names from the debug information of 'from' to the
|
||||
// debug information of 'to'.
|
||||
void MergeDebugInfo(const NodeDebugInfo& from, Node* to);
|
||||
void MergeDebugInfo(const NodeDebugInfo& from, NodeDef* to);
|
||||
void MergeDebugInfo(const NodeDef& from, NodeDef* to);
|
||||
|
||||
// Computes the mapping from input/output argument name to the
|
||||
// corresponding input/output index range. For example,
|
||||
// input "foo" corresponds to input indices
|
||||
// [ (*inputs)["foo"].first, (*inputs)["foo"].second ).
|
||||
// NOTE(mrry): To reduce allocations when the map is used and save
|
||||
// space, the returned `NameRangeMap` objects borrow the input/output
|
||||
// argument names from `op_def`. The `op_def` must outlive the
|
||||
// returned `NameRangeMap` objects.
|
||||
Status NameRangesForNode(const Node& node, const OpDef& op_def,
|
||||
NameRangeMap* inputs, NameRangeMap* outputs);
|
||||
|
||||
// Returns "status" with formatted Node attached as additional text
|
||||
// in the error message. If 'allow_multiple_formatted_node' is false and there
|
||||
// is already a formatted Node present in 'status', we simply attach the name
|
||||
// of the Node instead of the formatted string.
|
||||
Status AttachDef(const Status& status, const Node& node,
|
||||
bool allow_multiple_formatted_node = false);
|
||||
} // namespace tensorflow
|
||||
|
||||
#endif // TENSORFLOW_CORE_GRAPH_GRAPH_NODE_UTIL_H_
|
|
@ -45,6 +45,7 @@ limitations under the License.
|
|||
#include "tensorflow/core/framework/node_def.pb.h"
|
||||
#include "tensorflow/core/framework/node_def_util.h"
|
||||
#include "tensorflow/core/graph/algorithm.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
#include "tensorflow/core/lib/gtl/map_util.h"
|
||||
#include "tensorflow/core/lib/hash/hash.h"
|
||||
#include "tensorflow/core/platform/logging.h"
|
||||
|
|
|
@ -43,6 +43,7 @@ limitations under the License.
|
|||
#include "tensorflow/core/graph/algorithm.h"
|
||||
#include "tensorflow/core/graph/control_flow.h"
|
||||
#include "tensorflow/core/graph/graph_constructor.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
#include "tensorflow/core/graph/tensor_id.h"
|
||||
#include "tensorflow/core/grappler/graph_view.h"
|
||||
#include "tensorflow/core/grappler/grappler_item.h"
|
||||
|
|
|
@ -35,6 +35,7 @@ limitations under the License.
|
|||
#include "tensorflow/core/framework/tensor_types.h"
|
||||
#include "tensorflow/core/framework/types.h"
|
||||
#include "tensorflow/core/framework/variant_op_registry.h"
|
||||
#include "tensorflow/core/graph/graph_node_util.h"
|
||||
#include "tensorflow/core/kernels/fill_functor.h"
|
||||
#include "tensorflow/core/platform/macros.h"
|
||||
|
||||
|
|
Loading…
Reference in New Issue