syntax = "proto3";

package tensorflow;
option cc_enable_arenas = true;
option java_outer_classname = "GraphTransferInfoProto";
option java_multiple_files = true;
option java_package = "org.tensorflow.framework";

import "tensorflow/core/framework/types.proto";

// Protocol buffer representing a handle to a tensorflow resource. Handles are
// not valid across executions, but can be serialized back and forth from within
// a single run.
message GraphTransferInfo {
  enum Destination {
    NOP = 0;
    HEXAGON = 1;
  }
  message NodeInput {
    int32 node_id = 1;
    int32 output_port = 2;
  }
  message NodeInfo {
    string name = 1;
    int32 node_id = 2;
    string type_name = 3;
    int32 soc_op_id = 4;
    int32 padding_id = 5;
    int32 input_count = 6;
    int32 output_count = 7;
  };
  message ConstNodeInfo {
    string name = 1;
    int32 node_id = 2;
    repeated int64 shape = 3;
    bytes data = 4;
    DataType dtype = 5;
  };
  message NodeInputInfo {
    int32 node_id = 1;
    repeated NodeInput node_input = 2;
  };
  message NodeOutputInfo {
    int32 node_id = 1;
    repeated int32 max_byte_size = 2;
  };
  message GraphInputNodeInfo {
    string name = 1;
    repeated int64 shape = 2;
    DataType dtype = 3;
  }

  message GraphOutputNodeInfo {
    string name = 1;
    repeated int64 shape = 2;
    DataType dtype = 3;
  }

  repeated NodeInfo node_info = 1;
  repeated ConstNodeInfo const_node_info = 2;
  repeated NodeInputInfo node_input_info = 3;
  repeated NodeOutputInfo node_output_info = 4;
  // Input Node parameters of transferred graph
  repeated GraphInputNodeInfo graph_input_node_info = 5;
  repeated GraphOutputNodeInfo graph_output_node_info = 6;
  // Destination of graph transfer
  Destination destination = 7;
};
