• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
2 
3 Licensed under the Apache License, Version 2.0 (the "License");
4 you may not use this file except in compliance with the License.
5 You may obtain a copy of the License at
6 
7     http://www.apache.org/licenses/LICENSE-2.0
8 
9 Unless required by applicable law or agreed to in writing, software
10 distributed under the License is distributed on an "AS IS" BASIS,
11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 See the License for the specific language governing permissions and
13 limitations under the License.
14 ==============================================================================*/
15 #ifndef TENSORFLOW_CORE_GRAPH_GRAPH_NODE_UTIL_H_
16 #define TENSORFLOW_CORE_GRAPH_GRAPH_NODE_UTIL_H_
17 
18 #include "tensorflow/core/framework/node_def_util.h"
19 #include "tensorflow/core/lib/core/stringpiece.h"
20 #include "tensorflow/core/platform/status.h"
21 
22 namespace tensorflow {
23 class Node;
24 struct NodeDebugInfo;
25 
26 // We forward declare protos so that kernels don't need to depend on them
27 class NodeDef;
28 class OpDef;
29 
30 // Produce a human-readable version of a Node or NodeDef that is more concise
31 // than a text-format proto.
32 string SummarizeNode(const Node& node);
33 
34 // Produces a formatted string pattern from the node which can uniquely identify
35 // this node upstream to produce an informative error message. The pattern
36 // followed is: {{node <node_name>}}
37 string FormatNodeForError(const Node& node);
38 
39 // Merges the original node names from the debug information of 'from' to the
40 // debug information of 'to'.
41 void MergeDebugInfo(const NodeDebugInfo& from, Node* to);
42 void MergeDebugInfo(const NodeDebugInfo& from, NodeDef* to);
43 void MergeDebugInfo(const NodeDef& from, NodeDef* to);
44 
45 // Computes the mapping from input/output argument name to the
46 // corresponding input/output index range.  For example,
47 // input "foo" corresponds to input indices
48 //   [ (*inputs)["foo"].first, (*inputs)["foo"].second ).
49 // NOTE(mrry): To reduce allocations when the map is used and save
50 // space, the returned `NameRangeMap` objects borrow the input/output
51 // argument names from `op_def`. The `op_def` must outlive the
52 // returned `NameRangeMap` objects.
53 Status NameRangesForNode(const Node& node, const OpDef& op_def,
54                          NameRangeMap* inputs, NameRangeMap* outputs);
55 
56 // Returns "status" with formatted Node attached as additional text
57 // in the error message. If 'allow_multiple_formatted_node' is false and there
58 // is already a formatted Node present in 'status', we simply attach the name
59 // of the Node instead of the formatted string.
60 Status AttachDef(const Status& status, const Node& node,
61                  bool allow_multiple_formatted_node = false);
62 }  // namespace tensorflow
63 
64 #endif  // TENSORFLOW_CORE_GRAPH_GRAPH_NODE_UTIL_H_
65