syntax = "proto2";
package oneflow;

import "oneflow/core/register/logical_blob_id.proto";
import "oneflow/core/register/blob_desc.proto";
import "oneflow/core/operator/op_conf.proto";
import "oneflow/core/operator/arg_modifier_signature.proto";
import "oneflow/core/job/sbp_parallel.proto";
import "oneflow/core/job/mirrored_parallel.proto";
import "oneflow/core/job/blob_lifetime_signature.proto";
import "oneflow/core/job/parallel_signature.proto";
import "oneflow/core/job/parallel_conf_signature.proto";

message OpAttribute {
  repeated string input_bns = 1;
  repeated string output_bns = 2;
  repeated string tmp_bns = 3;

  required OperatorConf op_conf = 50;

  // inter-node signature
  required ArgSignature arg_signature = 100;
  required ArgModifierSignature arg_modifier_signature = 101;
  optional BlobLastUsedSignature blob_last_used_signature = 102;
  optional BlobBackwardUsedSignature blob_backward_used_signature = 103;

  // op node signature
  optional SbpSignature sbp_signature = 104;
  optional MirroredSignature mirrored_signature = 105;
  optional BlobDescSignature logical_blob_desc_signature = 106;
  optional ParallelSignature parallel_signature = 108;
  optional ParallelConfSignature parallel_conf_signature = 109;
  optional NdSbpSignature nd_sbp_signature = 110;
}

message OpAttributeList {
  repeated OpAttribute op_attribute = 1;
}
