syntax = "proto2";

package seq2species.protos;

// Summarizes metadata information for a dataset that can be used for running
// training or inference.
message Seq2LabelDatasetInfo {
  // Summarizes all possible values for a given label in the dataset.
  message LabelInfo {
    optional string name = 1;
    repeated string values = 2;
    // Per-value weights used to normalize the classes in a dataset.
    repeated float weights = 3;
  }
  repeated LabelInfo labels = 3;
  // Length (in basepairs) of the reads in the dataset.
  optional int32 read_length = 4;
  // Stride (in number of basepairs) in the moving window.
  optional int32 read_stride = 7;
  // Total number of examples in the dataset.
  optional int64 num_examples = 5;
  // Full path to the dataset.
  optional string dataset_path = 6;
}

// Summarizes metadata information about a model trained on a Seq2Label dataset.
message Seq2LabelModelInfo {
  optional string hparams_string = 1;
  optional string model_type = 2;
  repeated string targets = 3;
  optional int32 num_filters = 4;
  optional int32 batch_size = 5;
  optional string metadata_path = 6;
  optional float training_noise_rate = 7;
}

// Summarizes resulting measures of modelling experiments.
message Seq2LabelExperimentMeasures {
  optional string checkpoint_path = 1;
  optional int64 steps = 2;
  optional float wall_time = 3;
  optional bool experiment_infeasible = 4;

  message Measure {
    optional string name = 1;
    optional float value = 2;
  }
  repeated Measure measures = 5;
}
