syntax = "proto3";
package org.nd4j.ir;
option java_outer_classname = "MapperNamespace";

import "op.proto";

message MappingRule {
  string ruleName = 1;
  string functionName = 2;
  repeated string inputStringAttrName = 3;
  repeated string outputStringAttrName = 4;
  repeated string inputIntName = 5;
  repeated  string outputIntName = 6;
  repeated string  inputFloatName = 7;
  repeated string outputFloatName = 8;
  repeated string  inputDoubleName = 9;
  repeated string outputDoubleName = 10;
  repeated string  inputBooleanName = 11;
  repeated string outputBooleanName = 12;
  repeated string inputTensorName = 13;
  repeated string outputTensorName = 14;
  repeated string inputDataTypeName = 15;
  repeated string outputDataTypeName = 16;
  map<string,string> inputToOutput = 17;
  string ruleType = 18;
  repeated TransformerArgs transformerArgs = 19;
  string inputFrameworkOpName = 20;

}


message TransformerArgs {
  string key = 1;
  repeated ArgDescriptor transformerArgs = 2;
}

message MappingDefinitionSet {
  repeated MapperDeclaration mappings = 1;
  repeated string name = 2;
}



message MapperDeclaration {
  string frameworkName = 1;
  string opName = 2;
  string inputFrameworkOpName = 3;
  //the rules to apply for attributes
  repeated MappingRule rule = 4;
  map<int64,int64> indexOverrides = 5;
  VariableResolutionType variableResolutionType = 6;

}

enum OpListType {
  TARG = 0;
  IARG = 1;
  BARG = 2;
  DTYPEARG = 3;
  INPUTARG = 4;
  OUTPUTARG = 5;
  AXISARG = 6;
}

enum VariableResolutionType {
 DIRECT = 0;
 OVERRIDE = 1;
 ERROR_ON_NOT_EQUAL = 2;
}
