op {
  name: "Abort"
  attr {
    name: "error_msg"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "exit_without_error"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "Abs"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "AccumulateNV2"
  input_arg {
    name: "inputs"
    type_attr: "T"
    number_attr: "N"
  }
  output_arg {
    name: "sum"
    type_attr: "T"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "shape"
    type: "shape"
  }
  is_aggregate: true
  is_commutative: true
}
op {
  name: "AccumulatorApplyGradient"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "local_step"
    type: DT_INT64
  }
  input_arg {
    name: "gradient"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "AccumulatorNumAccumulated"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  output_arg {
    name: "num_accumulated"
    type: DT_INT32
  }
}
op {
  name: "AccumulatorSetGlobalStep"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "new_global_step"
    type: DT_INT64
  }
}
op {
  name: "AccumulatorTakeGradient"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "num_required"
    type: DT_INT32
  }
  output_arg {
    name: "average"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "Acos"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Acosh"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Add"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_UINT8
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
        type: DT_STRING
      }
    }
  }
}
op {
  name: "AddManySparseToTensorsMap"
  input_arg {
    name: "sparse_indices"
    type: DT_INT64
  }
  input_arg {
    name: "sparse_values"
    type_attr: "T"
  }
  input_arg {
    name: "sparse_shape"
    type: DT_INT64
  }
  output_arg {
    name: "sparse_handles"
    type: DT_INT64
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "AddN"
  input_arg {
    name: "inputs"
    type_attr: "T"
    number_attr: "N"
  }
  output_arg {
    name: "sum"
    type_attr: "T"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
        type: DT_VARIANT
      }
    }
  }
  is_aggregate: true
  is_commutative: true
}
op {
  name: "AddSparseToTensorsMap"
  input_arg {
    name: "sparse_indices"
    type: DT_INT64
  }
  input_arg {
    name: "sparse_values"
    type_attr: "T"
  }
  input_arg {
    name: "sparse_shape"
    type: DT_INT64
  }
  output_arg {
    name: "sparse_handle"
    type: DT_INT64
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "AddV2"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_UINT8
        type: DT_INT8
        type: DT_INT16
        type: DT_UINT32
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
  is_aggregate: true
  is_commutative: true
}
op {
  name: "AdjustContrast"
  input_arg {
    name: "images"
    type_attr: "T"
  }
  input_arg {
    name: "contrast_factor"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_value"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_value"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  deprecation {
    version: 2
    explanation: "Use AdjustContrastv2 instead"
  }
}
op {
  name: "AdjustContrastv2"
  input_arg {
    name: "images"
    type_attr: "T"
  }
  input_arg {
    name: "contrast_factor"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "AdjustHue"
  input_arg {
    name: "images"
    type_attr: "T"
  }
  input_arg {
    name: "delta"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "AdjustSaturation"
  input_arg {
    name: "images"
    type_attr: "T"
  }
  input_arg {
    name: "scale"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "All"
  input_arg {
    name: "input"
    type: DT_BOOL
  }
  input_arg {
    name: "reduction_indices"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type: DT_BOOL
  }
  attr {
    name: "keep_dims"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "AllCandidateSampler"
  input_arg {
    name: "true_classes"
    type: DT_INT64
  }
  output_arg {
    name: "sampled_candidates"
    type: DT_INT64
  }
  output_arg {
    name: "true_expected_count"
    type: DT_FLOAT
  }
  output_arg {
    name: "sampled_expected_count"
    type: DT_FLOAT
  }
  attr {
    name: "num_true"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "num_sampled"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "unique"
    type: "bool"
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  is_stateful: true
}
op {
  name: "AllToAll"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "group_assignment"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
        type: DT_BOOL
      }
    }
  }
  attr {
    name: "concat_dimension"
    type: "int"
  }
  attr {
    name: "split_dimension"
    type: "int"
  }
  attr {
    name: "split_count"
    type: "int"
  }
}
op {
  name: "Angle"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "Tout"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
  attr {
    name: "Tout"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "AnonymousIterator"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "AnonymousIteratorV2"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "deleter"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "AnonymousMemoryCache"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "deleter"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "AnonymousMultiDeviceIterator"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "deleter"
    type: DT_VARIANT
  }
  attr {
    name: "devices"
    type: "list(string)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "AnonymousRandomSeedGenerator"
  input_arg {
    name: "seed"
    type: DT_INT64
  }
  input_arg {
    name: "seed2"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "deleter"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "AnonymousSeedGenerator"
  input_arg {
    name: "seed"
    type: DT_INT64
  }
  input_arg {
    name: "seed2"
    type: DT_INT64
  }
  input_arg {
    name: "reshuffle"
    type: DT_BOOL
  }
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "deleter"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "Any"
  input_arg {
    name: "input"
    type: DT_BOOL
  }
  input_arg {
    name: "reduction_indices"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type: DT_BOOL
  }
  attr {
    name: "keep_dims"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "ApplyAdaMax"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "m"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "v"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "beta1_power"
    type_attr: "T"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "beta1"
    type_attr: "T"
  }
  input_arg {
    name: "beta2"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ApplyAdadelta"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "accum"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "accum_update"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "rho"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ApplyAdagrad"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "accum"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "update_slots"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "ApplyAdagradDA"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "gradient_accumulator"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "gradient_squared_accumulator"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "global_step"
    type: DT_INT64
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ApplyAdagradV2"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "accum"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "update_slots"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "ApplyAdam"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "m"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "v"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "beta1_power"
    type_attr: "T"
  }
  input_arg {
    name: "beta2_power"
    type_attr: "T"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "beta1"
    type_attr: "T"
  }
  input_arg {
    name: "beta2"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "use_nesterov"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ApplyAddSign"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "m"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "alpha"
    type_attr: "T"
  }
  input_arg {
    name: "sign_decay"
    type_attr: "T"
  }
  input_arg {
    name: "beta"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ApplyCenteredRMSProp"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "mg"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "ms"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "mom"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "rho"
    type_attr: "T"
  }
  input_arg {
    name: "momentum"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ApplyFtrl"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "accum"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "linear"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "lr_power"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "multiply_linear_by_lr"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ApplyFtrlV2"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "accum"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "linear"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "l2_shrinkage"
    type_attr: "T"
  }
  input_arg {
    name: "lr_power"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "multiply_linear_by_lr"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ApplyGradientDescent"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "alpha"
    type_attr: "T"
  }
  input_arg {
    name: "delta"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ApplyMomentum"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "accum"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "momentum"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "use_nesterov"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ApplyPowerSign"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "m"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "logbase"
    type_attr: "T"
  }
  input_arg {
    name: "sign_decay"
    type_attr: "T"
  }
  input_arg {
    name: "beta"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ApplyProximalAdagrad"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "accum"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ApplyProximalGradientDescent"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "alpha"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "delta"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ApplyRMSProp"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "ms"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "mom"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "rho"
    type_attr: "T"
  }
  input_arg {
    name: "momentum"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ApproximateEqual"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type: DT_BOOL
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "tolerance"
    type: "float"
    default_value {
      f: 1e-05
    }
  }
  is_commutative: true
}
op {
  name: "ArgMax"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "dimension"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "output_type"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
        type: DT_BOOL
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "output_type"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "ArgMin"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "dimension"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "output_type"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
        type: DT_BOOL
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "output_type"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "AsString"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type: DT_STRING
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_BOOL
        type: DT_VARIANT
      }
    }
  }
  attr {
    name: "precision"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "scientific"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "shortest"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "width"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "fill"
    type: "string"
    default_value {
      s: ""
    }
  }
}
op {
  name: "Asin"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Asinh"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Assert"
  input_arg {
    name: "condition"
    type: DT_BOOL
  }
  input_arg {
    name: "data"
    type_list_attr: "T"
  }
  attr {
    name: "T"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "summarize"
    type: "int"
    default_value {
      i: 3
    }
  }
  is_stateful: true
}
op {
  name: "AssertCardinalityDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "cardinality"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "AssertNextDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "transformations"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "Assign"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  output_arg {
    name: "output_ref"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "validate_shape"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: true
    }
  }
  allows_uninitialized_input: true
}
op {
  name: "AssignAdd"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  output_arg {
    name: "output_ref"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "AssignAddVariableOp"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "value"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "AssignSub"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  output_arg {
    name: "output_ref"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "AssignSubVariableOp"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "value"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "AssignVariableOp"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "value"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "Atan"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Atan2"
  input_arg {
    name: "y"
    type_attr: "T"
  }
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "Atanh"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "AudioSpectrogram"
  input_arg {
    name: "input"
    type: DT_FLOAT
  }
  output_arg {
    name: "spectrogram"
    type: DT_FLOAT
  }
  attr {
    name: "window_size"
    type: "int"
  }
  attr {
    name: "stride"
    type: "int"
  }
  attr {
    name: "magnitude_squared"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "AudioSummary"
  input_arg {
    name: "tag"
    type: DT_STRING
  }
  input_arg {
    name: "tensor"
    type: DT_FLOAT
  }
  output_arg {
    name: "summary"
    type: DT_STRING
  }
  attr {
    name: "sample_rate"
    type: "float"
  }
  attr {
    name: "max_outputs"
    type: "int"
    default_value {
      i: 3
    }
    has_minimum: true
    minimum: 1
  }
  deprecation {
    version: 15
    explanation: "Use AudioSummaryV2."
  }
}
op {
  name: "AudioSummaryV2"
  input_arg {
    name: "tag"
    type: DT_STRING
  }
  input_arg {
    name: "tensor"
    type: DT_FLOAT
  }
  input_arg {
    name: "sample_rate"
    type: DT_FLOAT
  }
  output_arg {
    name: "summary"
    type: DT_STRING
  }
  attr {
    name: "max_outputs"
    type: "int"
    default_value {
      i: 3
    }
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "AutoShardDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "num_workers"
    type: DT_INT64
  }
  input_arg {
    name: "index"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "auto_shard_policy"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "num_replicas"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "AvgPool"
  input_arg {
    name: "value"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "ksize"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "AvgPool3D"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "ksize"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NDHWC"
    }
    allowed_values {
      list {
        s: "NDHWC"
        s: "NCDHW"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "AvgPool3DGrad"
  input_arg {
    name: "orig_input_shape"
    type: DT_INT32
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "ksize"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NDHWC"
    }
    allowed_values {
      list {
        s: "NDHWC"
        s: "NCDHW"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "AvgPoolGrad"
  input_arg {
    name: "orig_input_shape"
    type: DT_INT32
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "ksize"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "BandedTriangularSolve"
  input_arg {
    name: "matrix"
    type_attr: "T"
  }
  input_arg {
    name: "rhs"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "lower"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "adjoint"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
        type: DT_HALF
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Barrier"
  output_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "component_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "BarrierClose"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "cancel_pending_enqueues"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "BarrierIncompleteSize"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  output_arg {
    name: "size"
    type: DT_INT32
  }
}
op {
  name: "BarrierInsertMany"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "keys"
    type: DT_STRING
  }
  input_arg {
    name: "values"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "component_index"
    type: "int"
  }
}
op {
  name: "BarrierReadySize"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  output_arg {
    name: "size"
    type: DT_INT32
  }
}
op {
  name: "BarrierTakeMany"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "num_elements"
    type: DT_INT32
  }
  output_arg {
    name: "indices"
    type: DT_INT64
  }
  output_arg {
    name: "keys"
    type: DT_STRING
  }
  output_arg {
    name: "values"
    type_list_attr: "component_types"
  }
  attr {
    name: "component_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "allow_small_batch"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "wait_for_incomplete"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "timeout_ms"
    type: "int"
    default_value {
      i: -1
    }
  }
}
op {
  name: "Batch"
  input_arg {
    name: "in_tensors"
    type_list_attr: "T"
  }
  output_arg {
    name: "batched_tensors"
    type_list_attr: "T"
  }
  output_arg {
    name: "batch_index"
    type: DT_INT64
  }
  output_arg {
    name: "id"
    type: DT_INT64
  }
  attr {
    name: "num_batch_threads"
    type: "int"
  }
  attr {
    name: "max_batch_size"
    type: "int"
  }
  attr {
    name: "max_enqueued_batches"
    type: "int"
    default_value {
      i: 10
    }
  }
  attr {
    name: "batch_timeout_micros"
    type: "int"
  }
  attr {
    name: "allowed_batch_sizes"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "grad_timeout_micros"
    type: "int"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "batching_queue"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "T"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "BatchCholesky"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
      }
    }
  }
  deprecation {
    version: 13
    explanation: "Use Cholesky instead."
  }
}
op {
  name: "BatchCholeskyGrad"
  input_arg {
    name: "l"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  deprecation {
    version: 13
    explanation: "Use CholeskyGrad instead."
  }
}
op {
  name: "BatchDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "batch_size"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "BatchDatasetV2"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "batch_size"
    type: DT_INT64
  }
  input_arg {
    name: "drop_remainder"
    type: DT_BOOL
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "parallel_copy"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "BatchFFT"
  input_arg {
    name: "input"
    type: DT_COMPLEX64
  }
  output_arg {
    name: "output"
    type: DT_COMPLEX64
  }
  deprecation {
    version: 15
    explanation: "Use FFT"
  }
}
op {
  name: "BatchFFT2D"
  input_arg {
    name: "input"
    type: DT_COMPLEX64
  }
  output_arg {
    name: "output"
    type: DT_COMPLEX64
  }
  deprecation {
    version: 15
    explanation: "Use FFT2D"
  }
}
op {
  name: "BatchFFT3D"
  input_arg {
    name: "input"
    type: DT_COMPLEX64
  }
  output_arg {
    name: "output"
    type: DT_COMPLEX64
  }
  deprecation {
    version: 15
    explanation: "Use FFT3D"
  }
}
op {
  name: "BatchFunction"
  input_arg {
    name: "in_tensors"
    type_list_attr: "Tin"
  }
  input_arg {
    name: "captured_tensors"
    type_list_attr: "Tcaptured"
  }
  output_arg {
    name: "out_tensors"
    type_list_attr: "Tout"
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "num_batch_threads"
    type: "int"
  }
  attr {
    name: "max_batch_size"
    type: "int"
  }
  attr {
    name: "batch_timeout_micros"
    type: "int"
  }
  attr {
    name: "max_enqueued_batches"
    type: "int"
    default_value {
      i: 10
    }
  }
  attr {
    name: "allowed_batch_sizes"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "batching_queue"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "Tin"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "Tcaptured"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tout"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "enable_large_batch_splitting"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "BatchIFFT"
  input_arg {
    name: "input"
    type: DT_COMPLEX64
  }
  output_arg {
    name: "output"
    type: DT_COMPLEX64
  }
  deprecation {
    version: 15
    explanation: "Use IFFT"
  }
}
op {
  name: "BatchIFFT2D"
  input_arg {
    name: "input"
    type: DT_COMPLEX64
  }
  output_arg {
    name: "output"
    type: DT_COMPLEX64
  }
  deprecation {
    version: 15
    explanation: "Use IFFT2D"
  }
}
op {
  name: "BatchIFFT3D"
  input_arg {
    name: "input"
    type: DT_COMPLEX64
  }
  output_arg {
    name: "output"
    type: DT_COMPLEX64
  }
  deprecation {
    version: 15
    explanation: "Use IFFT3D"
  }
}
op {
  name: "BatchMatMul"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
  attr {
    name: "adj_x"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "adj_y"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "BatchMatMulV2"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
  attr {
    name: "adj_x"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "adj_y"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "BatchMatrixBandPart"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "num_lower"
    type: DT_INT64
  }
  input_arg {
    name: "num_upper"
    type: DT_INT64
  }
  output_arg {
    name: "band"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  deprecation {
    version: 14
    explanation: "Use MatrixBandPart"
  }
}
op {
  name: "BatchMatrixDeterminant"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
  deprecation {
    version: 13
    explanation: "Use MatrixDeterminant instead."
  }
}
op {
  name: "BatchMatrixDiag"
  input_arg {
    name: "diagonal"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  deprecation {
    version: 14
    explanation: "Use MatrixDiag"
  }
}
op {
  name: "BatchMatrixDiagPart"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "diagonal"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  deprecation {
    version: 14
    explanation: "Use MatrixDiagPart"
  }
}
op {
  name: "BatchMatrixInverse"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "adjoint"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
      }
    }
  }
  deprecation {
    version: 13
    explanation: "Use MatrixInverse instead."
  }
}
op {
  name: "BatchMatrixSetDiag"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "diagonal"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  deprecation {
    version: 14
    explanation: "Use MatrixSetDiag"
  }
}
op {
  name: "BatchMatrixSolve"
  input_arg {
    name: "matrix"
    type_attr: "T"
  }
  input_arg {
    name: "rhs"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "adjoint"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
      }
    }
  }
  deprecation {
    version: 13
    explanation: "Use MatrixSolve instead."
  }
}
op {
  name: "BatchMatrixSolveLs"
  input_arg {
    name: "matrix"
    type_attr: "T"
  }
  input_arg {
    name: "rhs"
    type_attr: "T"
  }
  input_arg {
    name: "l2_regularizer"
    type: DT_DOUBLE
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "fast"
    type: "bool"
    default_value {
      b: true
    }
  }
  deprecation {
    version: 13
    explanation: "Use MatrixSolveLs instead."
  }
}
op {
  name: "BatchMatrixTriangularSolve"
  input_arg {
    name: "matrix"
    type_attr: "T"
  }
  input_arg {
    name: "rhs"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "lower"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "adjoint"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
      }
    }
  }
  deprecation {
    version: 13
    explanation: "Use MatrixTriangularSolve instead."
  }
}
op {
  name: "BatchNormWithGlobalNormalization"
  input_arg {
    name: "t"
    type_attr: "T"
  }
  input_arg {
    name: "m"
    type_attr: "T"
  }
  input_arg {
    name: "v"
    type_attr: "T"
  }
  input_arg {
    name: "beta"
    type_attr: "T"
  }
  input_arg {
    name: "gamma"
    type_attr: "T"
  }
  output_arg {
    name: "result"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "variance_epsilon"
    type: "float"
  }
  attr {
    name: "scale_after_normalization"
    type: "bool"
  }
  deprecation {
    version: 9
    explanation: "Use tf.nn.batch_normalization()"
  }
}
op {
  name: "BatchNormWithGlobalNormalizationGrad"
  input_arg {
    name: "t"
    type_attr: "T"
  }
  input_arg {
    name: "m"
    type_attr: "T"
  }
  input_arg {
    name: "v"
    type_attr: "T"
  }
  input_arg {
    name: "gamma"
    type_attr: "T"
  }
  input_arg {
    name: "backprop"
    type_attr: "T"
  }
  output_arg {
    name: "dx"
    type_attr: "T"
  }
  output_arg {
    name: "dm"
    type_attr: "T"
  }
  output_arg {
    name: "dv"
    type_attr: "T"
  }
  output_arg {
    name: "db"
    type_attr: "T"
  }
  output_arg {
    name: "dg"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "variance_epsilon"
    type: "float"
  }
  attr {
    name: "scale_after_normalization"
    type: "bool"
  }
  deprecation {
    version: 9
    explanation: "Use tf.nn.batch_normalization()"
  }
}
op {
  name: "BatchSelfAdjointEig"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
      }
    }
  }
  deprecation {
    version: 11
    explanation: "Use SelfAdjointEigV2 instead."
  }
}
op {
  name: "BatchSelfAdjointEigV2"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "e"
    type_attr: "T"
  }
  output_arg {
    name: "v"
    type_attr: "T"
  }
  attr {
    name: "compute_v"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
      }
    }
  }
  deprecation {
    version: 13
    explanation: "Use SelfAdjointEigV2 instead."
  }
}
op {
  name: "BatchSvd"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "s"
    type_attr: "T"
  }
  output_arg {
    name: "u"
    type_attr: "T"
  }
  output_arg {
    name: "v"
    type_attr: "T"
  }
  attr {
    name: "compute_uv"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "full_matrices"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
  deprecation {
    version: 13
    explanation: "Use Svd instead."
  }
}
op {
  name: "BatchToSpace"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "crops"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "block_size"
    type: "int"
    has_minimum: true
    minimum: 2
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "BatchToSpaceND"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "block_shape"
    type_attr: "Tblock_shape"
  }
  input_arg {
    name: "crops"
    type_attr: "Tcrops"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tblock_shape"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tcrops"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "BesselI0"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "BesselI0e"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "BesselI1"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "BesselI1e"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "BesselJ0"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "BesselJ1"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "BesselK0"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "BesselK0e"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "BesselK1"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "BesselK1e"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "BesselY0"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "BesselY1"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "Betainc"
  input_arg {
    name: "a"
    type_attr: "T"
  }
  input_arg {
    name: "b"
    type_attr: "T"
  }
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "BiasAdd"
  input_arg {
    name: "value"
    type_attr: "T"
  }
  input_arg {
    name: "bias"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
}
op {
  name: "BiasAddGrad"
  input_arg {
    name: "out_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
}
op {
  name: "BiasAddV1"
  input_arg {
    name: "value"
    type_attr: "T"
  }
  input_arg {
    name: "bias"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "Bincount"
  input_arg {
    name: "arr"
    type: DT_INT32
  }
  input_arg {
    name: "size"
    type: DT_INT32
  }
  input_arg {
    name: "weights"
    type_attr: "T"
  }
  output_arg {
    name: "bins"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "Bitcast"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "type"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT64
        type: DT_INT32
        type: DT_UINT8
        type: DT_UINT16
        type: DT_UINT32
        type: DT_UINT64
        type: DT_INT8
        type: DT_INT16
        type: DT_COMPLEX64
        type: DT_COMPLEX128
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT16
        type: DT_QUINT16
        type: DT_QINT32
      }
    }
  }
  attr {
    name: "type"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT64
        type: DT_INT32
        type: DT_UINT8
        type: DT_UINT16
        type: DT_UINT32
        type: DT_UINT64
        type: DT_INT8
        type: DT_INT16
        type: DT_COMPLEX64
        type: DT_COMPLEX128
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT16
        type: DT_QUINT16
        type: DT_QINT32
      }
    }
  }
}
op {
  name: "BitwiseAnd"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT8
        type: DT_UINT16
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  is_commutative: true
}
op {
  name: "BitwiseOr"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT8
        type: DT_UINT16
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  is_commutative: true
}
op {
  name: "BitwiseXor"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT8
        type: DT_UINT16
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  is_commutative: true
}
op {
  name: "BlockLSTM"
  input_arg {
    name: "seq_len_max"
    type: DT_INT64
  }
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "cs_prev"
    type_attr: "T"
  }
  input_arg {
    name: "h_prev"
    type_attr: "T"
  }
  input_arg {
    name: "w"
    type_attr: "T"
  }
  input_arg {
    name: "wci"
    type_attr: "T"
  }
  input_arg {
    name: "wcf"
    type_attr: "T"
  }
  input_arg {
    name: "wco"
    type_attr: "T"
  }
  input_arg {
    name: "b"
    type_attr: "T"
  }
  output_arg {
    name: "i"
    type_attr: "T"
  }
  output_arg {
    name: "cs"
    type_attr: "T"
  }
  output_arg {
    name: "f"
    type_attr: "T"
  }
  output_arg {
    name: "o"
    type_attr: "T"
  }
  output_arg {
    name: "ci"
    type_attr: "T"
  }
  output_arg {
    name: "co"
    type_attr: "T"
  }
  output_arg {
    name: "h"
    type_attr: "T"
  }
  attr {
    name: "forget_bias"
    type: "float"
    default_value {
      f: 1
    }
  }
  attr {
    name: "cell_clip"
    type: "float"
    default_value {
      f: 3
    }
  }
  attr {
    name: "use_peephole"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "BlockLSTMGrad"
  input_arg {
    name: "seq_len_max"
    type: DT_INT64
  }
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "cs_prev"
    type_attr: "T"
  }
  input_arg {
    name: "h_prev"
    type_attr: "T"
  }
  input_arg {
    name: "w"
    type_attr: "T"
  }
  input_arg {
    name: "wci"
    type_attr: "T"
  }
  input_arg {
    name: "wcf"
    type_attr: "T"
  }
  input_arg {
    name: "wco"
    type_attr: "T"
  }
  input_arg {
    name: "b"
    type_attr: "T"
  }
  input_arg {
    name: "i"
    type_attr: "T"
  }
  input_arg {
    name: "cs"
    type_attr: "T"
  }
  input_arg {
    name: "f"
    type_attr: "T"
  }
  input_arg {
    name: "o"
    type_attr: "T"
  }
  input_arg {
    name: "ci"
    type_attr: "T"
  }
  input_arg {
    name: "co"
    type_attr: "T"
  }
  input_arg {
    name: "h"
    type_attr: "T"
  }
  input_arg {
    name: "cs_grad"
    type_attr: "T"
  }
  input_arg {
    name: "h_grad"
    type_attr: "T"
  }
  output_arg {
    name: "x_grad"
    type_attr: "T"
  }
  output_arg {
    name: "cs_prev_grad"
    type_attr: "T"
  }
  output_arg {
    name: "h_prev_grad"
    type_attr: "T"
  }
  output_arg {
    name: "w_grad"
    type_attr: "T"
  }
  output_arg {
    name: "wci_grad"
    type_attr: "T"
  }
  output_arg {
    name: "wcf_grad"
    type_attr: "T"
  }
  output_arg {
    name: "wco_grad"
    type_attr: "T"
  }
  output_arg {
    name: "b_grad"
    type_attr: "T"
  }
  attr {
    name: "use_peephole"
    type: "bool"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "BlockLSTMGradV2"
  input_arg {
    name: "seq_len_max"
    type: DT_INT64
  }
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "cs_prev"
    type_attr: "T"
  }
  input_arg {
    name: "h_prev"
    type_attr: "T"
  }
  input_arg {
    name: "w"
    type_attr: "T"
  }
  input_arg {
    name: "wci"
    type_attr: "T"
  }
  input_arg {
    name: "wcf"
    type_attr: "T"
  }
  input_arg {
    name: "wco"
    type_attr: "T"
  }
  input_arg {
    name: "b"
    type_attr: "T"
  }
  input_arg {
    name: "i"
    type_attr: "T"
  }
  input_arg {
    name: "cs"
    type_attr: "T"
  }
  input_arg {
    name: "f"
    type_attr: "T"
  }
  input_arg {
    name: "o"
    type_attr: "T"
  }
  input_arg {
    name: "ci"
    type_attr: "T"
  }
  input_arg {
    name: "co"
    type_attr: "T"
  }
  input_arg {
    name: "h"
    type_attr: "T"
  }
  input_arg {
    name: "cs_grad"
    type_attr: "T"
  }
  input_arg {
    name: "h_grad"
    type_attr: "T"
  }
  output_arg {
    name: "x_grad"
    type_attr: "T"
  }
  output_arg {
    name: "cs_prev_grad"
    type_attr: "T"
  }
  output_arg {
    name: "h_prev_grad"
    type_attr: "T"
  }
  output_arg {
    name: "w_grad"
    type_attr: "T"
  }
  output_arg {
    name: "wci_grad"
    type_attr: "T"
  }
  output_arg {
    name: "wcf_grad"
    type_attr: "T"
  }
  output_arg {
    name: "wco_grad"
    type_attr: "T"
  }
  output_arg {
    name: "b_grad"
    type_attr: "T"
  }
  attr {
    name: "use_peephole"
    type: "bool"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "BlockLSTMV2"
  input_arg {
    name: "seq_len_max"
    type: DT_INT64
  }
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "cs_prev"
    type_attr: "T"
  }
  input_arg {
    name: "h_prev"
    type_attr: "T"
  }
  input_arg {
    name: "w"
    type_attr: "T"
  }
  input_arg {
    name: "wci"
    type_attr: "T"
  }
  input_arg {
    name: "wcf"
    type_attr: "T"
  }
  input_arg {
    name: "wco"
    type_attr: "T"
  }
  input_arg {
    name: "b"
    type_attr: "T"
  }
  output_arg {
    name: "i"
    type_attr: "T"
  }
  output_arg {
    name: "cs"
    type_attr: "T"
  }
  output_arg {
    name: "f"
    type_attr: "T"
  }
  output_arg {
    name: "o"
    type_attr: "T"
  }
  output_arg {
    name: "ci"
    type_attr: "T"
  }
  output_arg {
    name: "co"
    type_attr: "T"
  }
  output_arg {
    name: "h"
    type_attr: "T"
  }
  attr {
    name: "cell_clip"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "use_peephole"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "BoostedTreesAggregateStats"
  input_arg {
    name: "node_ids"
    type: DT_INT32
  }
  input_arg {
    name: "gradients"
    type: DT_FLOAT
  }
  input_arg {
    name: "hessians"
    type: DT_FLOAT
  }
  input_arg {
    name: "feature"
    type: DT_INT32
  }
  output_arg {
    name: "stats_summary"
    type: DT_FLOAT
  }
  attr {
    name: "max_splits"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "num_buckets"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "BoostedTreesBucketize"
  input_arg {
    name: "float_values"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  input_arg {
    name: "bucket_boundaries"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  output_arg {
    name: "buckets"
    type: DT_INT32
    number_attr: "num_features"
  }
  attr {
    name: "num_features"
    type: "int"
    has_minimum: true
  }
}
op {
  name: "BoostedTreesCalculateBestFeatureSplit"
  input_arg {
    name: "node_id_range"
    type: DT_INT32
  }
  input_arg {
    name: "stats_summary"
    type: DT_FLOAT
  }
  input_arg {
    name: "l1"
    type: DT_FLOAT
  }
  input_arg {
    name: "l2"
    type: DT_FLOAT
  }
  input_arg {
    name: "tree_complexity"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_node_weight"
    type: DT_FLOAT
  }
  output_arg {
    name: "node_ids"
    type: DT_INT32
  }
  output_arg {
    name: "gains"
    type: DT_FLOAT
  }
  output_arg {
    name: "feature_dimensions"
    type: DT_INT32
  }
  output_arg {
    name: "thresholds"
    type: DT_INT32
  }
  output_arg {
    name: "left_node_contribs"
    type: DT_FLOAT
  }
  output_arg {
    name: "right_node_contribs"
    type: DT_FLOAT
  }
  output_arg {
    name: "split_with_default_directions"
    type: DT_STRING
  }
  attr {
    name: "logits_dimension"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "split_type"
    type: "string"
    default_value {
      s: "inequality"
    }
    allowed_values {
      list {
        s: "inequality"
        s: "equality"
      }
    }
  }
}
op {
  name: "BoostedTreesCalculateBestFeatureSplitV2"
  input_arg {
    name: "node_id_range"
    type: DT_INT32
  }
  input_arg {
    name: "stats_summaries_list"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  input_arg {
    name: "split_types"
    type: DT_STRING
  }
  input_arg {
    name: "candidate_feature_ids"
    type: DT_INT32
  }
  input_arg {
    name: "l1"
    type: DT_FLOAT
  }
  input_arg {
    name: "l2"
    type: DT_FLOAT
  }
  input_arg {
    name: "tree_complexity"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_node_weight"
    type: DT_FLOAT
  }
  output_arg {
    name: "node_ids"
    type: DT_INT32
  }
  output_arg {
    name: "gains"
    type: DT_FLOAT
  }
  output_arg {
    name: "feature_ids"
    type: DT_INT32
  }
  output_arg {
    name: "feature_dimensions"
    type: DT_INT32
  }
  output_arg {
    name: "thresholds"
    type: DT_INT32
  }
  output_arg {
    name: "left_node_contribs"
    type: DT_FLOAT
  }
  output_arg {
    name: "right_node_contribs"
    type: DT_FLOAT
  }
  output_arg {
    name: "split_with_default_directions"
    type: DT_STRING
  }
  attr {
    name: "num_features"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "logits_dimension"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "BoostedTreesCalculateBestGainsPerFeature"
  input_arg {
    name: "node_id_range"
    type: DT_INT32
  }
  input_arg {
    name: "stats_summary_list"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  input_arg {
    name: "l1"
    type: DT_FLOAT
  }
  input_arg {
    name: "l2"
    type: DT_FLOAT
  }
  input_arg {
    name: "tree_complexity"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_node_weight"
    type: DT_FLOAT
  }
  output_arg {
    name: "node_ids_list"
    type: DT_INT32
    number_attr: "num_features"
  }
  output_arg {
    name: "gains_list"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  output_arg {
    name: "thresholds_list"
    type: DT_INT32
    number_attr: "num_features"
  }
  output_arg {
    name: "left_node_contribs_list"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  output_arg {
    name: "right_node_contribs_list"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  attr {
    name: "max_splits"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "num_features"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "BoostedTreesCenterBias"
  input_arg {
    name: "tree_ensemble_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "mean_gradients"
    type: DT_FLOAT
  }
  input_arg {
    name: "mean_hessians"
    type: DT_FLOAT
  }
  input_arg {
    name: "l1"
    type: DT_FLOAT
  }
  input_arg {
    name: "l2"
    type: DT_FLOAT
  }
  output_arg {
    name: "continue_centering"
    type: DT_BOOL
  }
  is_stateful: true
}
op {
  name: "BoostedTreesCreateEnsemble"
  input_arg {
    name: "tree_ensemble_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "stamp_token"
    type: DT_INT64
  }
  input_arg {
    name: "tree_ensemble_serialized"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "BoostedTreesCreateQuantileStreamResource"
  input_arg {
    name: "quantile_stream_resource_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "epsilon"
    type: DT_FLOAT
  }
  input_arg {
    name: "num_streams"
    type: DT_INT64
  }
  attr {
    name: "max_elements"
    type: "int"
    default_value {
      i: 1099511627776
    }
  }
  is_stateful: true
}
op {
  name: "BoostedTreesDeserializeEnsemble"
  input_arg {
    name: "tree_ensemble_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "stamp_token"
    type: DT_INT64
  }
  input_arg {
    name: "tree_ensemble_serialized"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "BoostedTreesEnsembleResourceHandleOp"
  output_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "BoostedTreesExampleDebugOutputs"
  input_arg {
    name: "tree_ensemble_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "bucketized_features"
    type: DT_INT32
    number_attr: "num_bucketized_features"
  }
  output_arg {
    name: "examples_debug_outputs_serialized"
    type: DT_STRING
  }
  attr {
    name: "num_bucketized_features"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "logits_dimension"
    type: "int"
  }
  is_stateful: true
}
op {
  name: "BoostedTreesFlushQuantileSummaries"
  input_arg {
    name: "quantile_stream_resource_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "summaries"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  attr {
    name: "num_features"
    type: "int"
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "BoostedTreesGetEnsembleStates"
  input_arg {
    name: "tree_ensemble_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "stamp_token"
    type: DT_INT64
  }
  output_arg {
    name: "num_trees"
    type: DT_INT32
  }
  output_arg {
    name: "num_finalized_trees"
    type: DT_INT32
  }
  output_arg {
    name: "num_attempted_layers"
    type: DT_INT32
  }
  output_arg {
    name: "last_layer_nodes_range"
    type: DT_INT32
  }
  is_stateful: true
}
op {
  name: "BoostedTreesMakeQuantileSummaries"
  input_arg {
    name: "float_values"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  input_arg {
    name: "example_weights"
    type: DT_FLOAT
  }
  input_arg {
    name: "epsilon"
    type: DT_FLOAT
  }
  output_arg {
    name: "summaries"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  attr {
    name: "num_features"
    type: "int"
    has_minimum: true
  }
}
op {
  name: "BoostedTreesMakeStatsSummary"
  input_arg {
    name: "node_ids"
    type: DT_INT32
  }
  input_arg {
    name: "gradients"
    type: DT_FLOAT
  }
  input_arg {
    name: "hessians"
    type: DT_FLOAT
  }
  input_arg {
    name: "bucketized_features_list"
    type: DT_INT32
    number_attr: "num_features"
  }
  output_arg {
    name: "stats_summary"
    type: DT_FLOAT
  }
  attr {
    name: "max_splits"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "num_buckets"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "num_features"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "BoostedTreesPredict"
  input_arg {
    name: "tree_ensemble_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "bucketized_features"
    type: DT_INT32
    number_attr: "num_bucketized_features"
  }
  output_arg {
    name: "logits"
    type: DT_FLOAT
  }
  attr {
    name: "num_bucketized_features"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "logits_dimension"
    type: "int"
  }
  is_stateful: true
}
op {
  name: "BoostedTreesQuantileStreamResourceAddSummaries"
  input_arg {
    name: "quantile_stream_resource_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "summaries"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  attr {
    name: "num_features"
    type: "int"
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "BoostedTreesQuantileStreamResourceDeserialize"
  input_arg {
    name: "quantile_stream_resource_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "bucket_boundaries"
    type: DT_FLOAT
    number_attr: "num_streams"
  }
  attr {
    name: "num_streams"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "BoostedTreesQuantileStreamResourceFlush"
  input_arg {
    name: "quantile_stream_resource_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "num_buckets"
    type: DT_INT64
  }
  attr {
    name: "generate_quantiles"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "BoostedTreesQuantileStreamResourceGetBucketBoundaries"
  input_arg {
    name: "quantile_stream_resource_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "bucket_boundaries"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  attr {
    name: "num_features"
    type: "int"
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "BoostedTreesQuantileStreamResourceHandleOp"
  output_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "BoostedTreesSerializeEnsemble"
  input_arg {
    name: "tree_ensemble_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "stamp_token"
    type: DT_INT64
  }
  output_arg {
    name: "tree_ensemble_serialized"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "BoostedTreesSparseAggregateStats"
  input_arg {
    name: "node_ids"
    type: DT_INT32
  }
  input_arg {
    name: "gradients"
    type: DT_FLOAT
  }
  input_arg {
    name: "hessians"
    type: DT_FLOAT
  }
  input_arg {
    name: "feature_indices"
    type: DT_INT32
  }
  input_arg {
    name: "feature_values"
    type: DT_INT32
  }
  input_arg {
    name: "feature_shape"
    type: DT_INT32
  }
  output_arg {
    name: "stats_summary_indices"
    type: DT_INT32
  }
  output_arg {
    name: "stats_summary_values"
    type: DT_FLOAT
  }
  output_arg {
    name: "stats_summary_shape"
    type: DT_INT32
  }
  attr {
    name: "max_splits"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "num_buckets"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "BoostedTreesSparseCalculateBestFeatureSplit"
  input_arg {
    name: "node_id_range"
    type: DT_INT32
  }
  input_arg {
    name: "stats_summary_indices"
    type: DT_INT32
  }
  input_arg {
    name: "stats_summary_values"
    type: DT_FLOAT
  }
  input_arg {
    name: "stats_summary_shape"
    type: DT_INT32
  }
  input_arg {
    name: "l1"
    type: DT_FLOAT
  }
  input_arg {
    name: "l2"
    type: DT_FLOAT
  }
  input_arg {
    name: "tree_complexity"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_node_weight"
    type: DT_FLOAT
  }
  output_arg {
    name: "node_ids"
    type: DT_INT32
  }
  output_arg {
    name: "gains"
    type: DT_FLOAT
  }
  output_arg {
    name: "feature_dimensions"
    type: DT_INT32
  }
  output_arg {
    name: "thresholds"
    type: DT_INT32
  }
  output_arg {
    name: "left_node_contribs"
    type: DT_FLOAT
  }
  output_arg {
    name: "right_node_contribs"
    type: DT_FLOAT
  }
  output_arg {
    name: "split_with_default_directions"
    type: DT_STRING
  }
  attr {
    name: "logits_dimension"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "split_type"
    type: "string"
    default_value {
      s: "inequality"
    }
    allowed_values {
      list {
        s: "inequality"
      }
    }
  }
}
op {
  name: "BoostedTreesTrainingPredict"
  input_arg {
    name: "tree_ensemble_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "cached_tree_ids"
    type: DT_INT32
  }
  input_arg {
    name: "cached_node_ids"
    type: DT_INT32
  }
  input_arg {
    name: "bucketized_features"
    type: DT_INT32
    number_attr: "num_bucketized_features"
  }
  output_arg {
    name: "partial_logits"
    type: DT_FLOAT
  }
  output_arg {
    name: "tree_ids"
    type: DT_INT32
  }
  output_arg {
    name: "node_ids"
    type: DT_INT32
  }
  attr {
    name: "num_bucketized_features"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "logits_dimension"
    type: "int"
  }
  is_stateful: true
}
op {
  name: "BoostedTreesUpdateEnsemble"
  input_arg {
    name: "tree_ensemble_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "feature_ids"
    type: DT_INT32
  }
  input_arg {
    name: "node_ids"
    type: DT_INT32
    number_attr: "num_features"
  }
  input_arg {
    name: "gains"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  input_arg {
    name: "thresholds"
    type: DT_INT32
    number_attr: "num_features"
  }
  input_arg {
    name: "left_node_contribs"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  input_arg {
    name: "right_node_contribs"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  input_arg {
    name: "max_depth"
    type: DT_INT32
  }
  input_arg {
    name: "learning_rate"
    type: DT_FLOAT
  }
  attr {
    name: "pruning_mode"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "num_features"
    type: "int"
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "BoostedTreesUpdateEnsembleV2"
  input_arg {
    name: "tree_ensemble_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "feature_ids"
    type: DT_INT32
    number_attr: "num_groups"
  }
  input_arg {
    name: "dimension_ids"
    type: DT_INT32
    number_attr: "num_features"
  }
  input_arg {
    name: "node_ids"
    type: DT_INT32
    number_attr: "num_features"
  }
  input_arg {
    name: "gains"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  input_arg {
    name: "thresholds"
    type: DT_INT32
    number_attr: "num_features"
  }
  input_arg {
    name: "left_node_contribs"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  input_arg {
    name: "right_node_contribs"
    type: DT_FLOAT
    number_attr: "num_features"
  }
  input_arg {
    name: "split_types"
    type: DT_STRING
    number_attr: "num_features"
  }
  input_arg {
    name: "max_depth"
    type: DT_INT32
  }
  input_arg {
    name: "learning_rate"
    type: DT_FLOAT
  }
  input_arg {
    name: "pruning_mode"
    type: DT_INT32
  }
  attr {
    name: "num_features"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "logits_dimension"
    type: "int"
    default_value {
      i: 1
    }
  }
  attr {
    name: "num_groups"
    type: "int"
    default_value {
      i: 1
    }
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "BroadcastArgs"
  input_arg {
    name: "s0"
    type_attr: "T"
  }
  input_arg {
    name: "s1"
    type_attr: "T"
  }
  output_arg {
    name: "r0"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "BroadcastGradientArgs"
  input_arg {
    name: "s0"
    type_attr: "T"
  }
  input_arg {
    name: "s1"
    type_attr: "T"
  }
  output_arg {
    name: "r0"
    type_attr: "T"
  }
  output_arg {
    name: "r1"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "BroadcastTo"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "shape"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "Bucketize"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type: DT_INT32
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "boundaries"
    type: "list(float)"
  }
}
op {
  name: "BytesProducedStatsDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "tag"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "CSRSparseMatrixComponents"
  input_arg {
    name: "csr_sparse_matrix"
    type: DT_VARIANT
  }
  input_arg {
    name: "index"
    type: DT_INT32
  }
  output_arg {
    name: "row_ptrs"
    type: DT_INT32
  }
  output_arg {
    name: "col_inds"
    type: DT_INT32
  }
  output_arg {
    name: "values"
    type_attr: "type"
  }
  attr {
    name: "type"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "CSRSparseMatrixToDense"
  input_arg {
    name: "sparse_input"
    type: DT_VARIANT
  }
  output_arg {
    name: "dense_output"
    type_attr: "type"
  }
  attr {
    name: "type"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "CSRSparseMatrixToSparseTensor"
  input_arg {
    name: "sparse_matrix"
    type: DT_VARIANT
  }
  output_arg {
    name: "indices"
    type: DT_INT64
  }
  output_arg {
    name: "values"
    type_attr: "type"
  }
  output_arg {
    name: "dense_shape"
    type: DT_INT64
  }
  attr {
    name: "type"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "CSVDataset"
  input_arg {
    name: "filenames"
    type: DT_STRING
  }
  input_arg {
    name: "compression_type"
    type: DT_STRING
  }
  input_arg {
    name: "buffer_size"
    type: DT_INT64
  }
  input_arg {
    name: "header"
    type: DT_BOOL
  }
  input_arg {
    name: "field_delim"
    type: DT_STRING
  }
  input_arg {
    name: "use_quote_delim"
    type: DT_BOOL
  }
  input_arg {
    name: "na_value"
    type: DT_STRING
  }
  input_arg {
    name: "select_cols"
    type: DT_INT64
  }
  input_arg {
    name: "record_defaults"
    type_list_attr: "output_types"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "CSVDatasetV2"
  input_arg {
    name: "filenames"
    type: DT_STRING
  }
  input_arg {
    name: "compression_type"
    type: DT_STRING
  }
  input_arg {
    name: "buffer_size"
    type: DT_INT64
  }
  input_arg {
    name: "header"
    type: DT_BOOL
  }
  input_arg {
    name: "field_delim"
    type: DT_STRING
  }
  input_arg {
    name: "use_quote_delim"
    type: DT_BOOL
  }
  input_arg {
    name: "na_value"
    type: DT_STRING
  }
  input_arg {
    name: "select_cols"
    type: DT_INT64
  }
  input_arg {
    name: "record_defaults"
    type_list_attr: "output_types"
  }
  input_arg {
    name: "exclude_cols"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "CTCBeamSearchDecoder"
  input_arg {
    name: "inputs"
    type_attr: "T"
  }
  input_arg {
    name: "sequence_length"
    type: DT_INT32
  }
  output_arg {
    name: "decoded_indices"
    type: DT_INT64
    number_attr: "top_paths"
  }
  output_arg {
    name: "decoded_values"
    type: DT_INT64
    number_attr: "top_paths"
  }
  output_arg {
    name: "decoded_shape"
    type: DT_INT64
    number_attr: "top_paths"
  }
  output_arg {
    name: "log_probability"
    type_attr: "T"
  }
  attr {
    name: "beam_width"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "top_paths"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "merge_repeated"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "CTCGreedyDecoder"
  input_arg {
    name: "inputs"
    type_attr: "T"
  }
  input_arg {
    name: "sequence_length"
    type: DT_INT32
  }
  output_arg {
    name: "decoded_indices"
    type: DT_INT64
  }
  output_arg {
    name: "decoded_values"
    type: DT_INT64
  }
  output_arg {
    name: "decoded_shape"
    type: DT_INT64
  }
  output_arg {
    name: "log_probability"
    type_attr: "T"
  }
  attr {
    name: "merge_repeated"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "CTCLoss"
  input_arg {
    name: "inputs"
    type_attr: "T"
  }
  input_arg {
    name: "labels_indices"
    type: DT_INT64
  }
  input_arg {
    name: "labels_values"
    type: DT_INT32
  }
  input_arg {
    name: "sequence_length"
    type: DT_INT32
  }
  output_arg {
    name: "loss"
    type_attr: "T"
  }
  output_arg {
    name: "gradient"
    type_attr: "T"
  }
  attr {
    name: "preprocess_collapse_repeated"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "ctc_merge_repeated"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "ignore_longer_outputs_than_inputs"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "CTCLossV2"
  input_arg {
    name: "inputs"
    type: DT_FLOAT
  }
  input_arg {
    name: "labels_indices"
    type: DT_INT64
  }
  input_arg {
    name: "labels_values"
    type: DT_INT32
  }
  input_arg {
    name: "sequence_length"
    type: DT_INT32
  }
  output_arg {
    name: "loss"
    type: DT_FLOAT
  }
  output_arg {
    name: "gradient"
    type: DT_FLOAT
  }
  attr {
    name: "preprocess_collapse_repeated"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "ctc_merge_repeated"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "ignore_longer_outputs_than_inputs"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "CacheDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "filename"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "CacheDatasetV2"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "filename"
    type: DT_STRING
  }
  input_arg {
    name: "cache"
    type: DT_RESOURCE
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "Case"
  input_arg {
    name: "branch_index"
    type: DT_INT32
  }
  input_arg {
    name: "input"
    type_list_attr: "Tin"
  }
  output_arg {
    name: "output"
    type_list_attr: "Tout"
  }
  attr {
    name: "Tin"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tout"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "branches"
    type: "list(func)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
  }
  is_stateful: true
}
op {
  name: "Cast"
  input_arg {
    name: "x"
    type_attr: "SrcT"
  }
  output_arg {
    name: "y"
    type_attr: "DstT"
  }
  attr {
    name: "SrcT"
    type: "type"
  }
  attr {
    name: "DstT"
    type: "type"
  }
  attr {
    name: "Truncate"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "Ceil"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "CheckNumerics"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "message"
    type: "string"
  }
  is_stateful: true
}
op {
  name: "CheckNumericsV2"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "message"
    type: "string"
  }
  is_stateful: true
}
op {
  name: "Cholesky"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
        type: DT_HALF
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "CholeskyGrad"
  input_arg {
    name: "l"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "ChooseFastestBranchDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "ratio_numerator"
    type: DT_INT64
  }
  input_arg {
    name: "ratio_denominator"
    type: DT_INT64
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "num_elements_per_branch"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "branches"
    type: "list(func)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "other_arguments_lengths"
    type: "list(int)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ChooseFastestDataset"
  input_arg {
    name: "input_datasets"
    type: DT_VARIANT
    number_attr: "N"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 2
  }
  attr {
    name: "num_experiments"
    type: "int"
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ClipByValue"
  input_arg {
    name: "t"
    type_attr: "T"
  }
  input_arg {
    name: "clip_value_min"
    type_attr: "T"
  }
  input_arg {
    name: "clip_value_max"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "CloseSummaryWriter"
  input_arg {
    name: "writer"
    type: DT_RESOURCE
  }
  is_stateful: true
}
op {
  name: "CollectiveBcastRecv"
  output_arg {
    name: "data"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BOOL
        type: DT_FLOAT
        type: DT_HALF
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "group_size"
    type: "int"
  }
  attr {
    name: "group_key"
    type: "int"
  }
  attr {
    name: "instance_key"
    type: "int"
  }
  attr {
    name: "shape"
    type: "shape"
  }
  attr {
    name: "communication_hint"
    type: "string"
    default_value {
      s: "auto"
    }
  }
  attr {
    name: "timeout_seconds"
    type: "float"
    default_value {
      f: 0
    }
  }
  is_stateful: true
}
op {
  name: "CollectiveBcastRecvV2"
  input_arg {
    name: "group_size"
    type: DT_INT32
  }
  input_arg {
    name: "group_key"
    type: DT_INT32
  }
  input_arg {
    name: "instance_key"
    type: DT_INT32
  }
  input_arg {
    name: "shape"
    type_attr: "Tshape"
  }
  output_arg {
    name: "data"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BOOL
        type: DT_FLOAT
        type: DT_HALF
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tshape"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "communication_hint"
    type: "string"
    default_value {
      s: "auto"
    }
  }
  attr {
    name: "timeout_seconds"
    type: "float"
    default_value {
      f: 0
    }
  }
  is_stateful: true
}
op {
  name: "CollectiveBcastSend"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "data"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BOOL
        type: DT_FLOAT
        type: DT_HALF
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "group_size"
    type: "int"
  }
  attr {
    name: "group_key"
    type: "int"
  }
  attr {
    name: "instance_key"
    type: "int"
  }
  attr {
    name: "shape"
    type: "shape"
  }
  attr {
    name: "communication_hint"
    type: "string"
    default_value {
      s: "auto"
    }
  }
  attr {
    name: "timeout_seconds"
    type: "float"
    default_value {
      f: 0
    }
  }
  is_stateful: true
}
op {
  name: "CollectiveBcastSendV2"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "group_size"
    type: DT_INT32
  }
  input_arg {
    name: "group_key"
    type: DT_INT32
  }
  input_arg {
    name: "instance_key"
    type: DT_INT32
  }
  output_arg {
    name: "data"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BOOL
        type: DT_FLOAT
        type: DT_HALF
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "communication_hint"
    type: "string"
    default_value {
      s: "auto"
    }
  }
  attr {
    name: "timeout_seconds"
    type: "float"
    default_value {
      f: 0
    }
  }
  is_stateful: true
}
op {
  name: "CollectiveGather"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "data"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_HALF
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "group_size"
    type: "int"
  }
  attr {
    name: "group_key"
    type: "int"
  }
  attr {
    name: "instance_key"
    type: "int"
  }
  attr {
    name: "shape"
    type: "shape"
  }
  attr {
    name: "communication_hint"
    type: "string"
    default_value {
      s: "auto"
    }
  }
  attr {
    name: "timeout_seconds"
    type: "float"
    default_value {
      f: 0
    }
  }
  is_stateful: true
}
op {
  name: "CollectiveGatherV2"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "group_size"
    type: DT_INT32
  }
  input_arg {
    name: "group_key"
    type: DT_INT32
  }
  input_arg {
    name: "instance_key"
    type: DT_INT32
  }
  input_arg {
    name: "ordering_token"
    type: DT_RESOURCE
    number_attr: "Nordering_token"
  }
  output_arg {
    name: "data"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_HALF
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "communication_hint"
    type: "string"
    default_value {
      s: "auto"
    }
  }
  attr {
    name: "timeout_seconds"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "Nordering_token"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "CollectivePermute"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "source_target_pairs"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "CollectiveReduce"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "data"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_HALF
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "group_size"
    type: "int"
  }
  attr {
    name: "group_key"
    type: "int"
  }
  attr {
    name: "instance_key"
    type: "int"
  }
  attr {
    name: "merge_op"
    type: "string"
    allowed_values {
      list {
        s: "Min"
        s: "Max"
        s: "Mul"
        s: "Add"
      }
    }
  }
  attr {
    name: "final_op"
    type: "string"
    allowed_values {
      list {
        s: "Id"
        s: "Div"
      }
    }
  }
  attr {
    name: "subdiv_offsets"
    type: "list(int)"
  }
  attr {
    name: "wait_for"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "communication_hint"
    type: "string"
    default_value {
      s: "auto"
    }
  }
  attr {
    name: "timeout_seconds"
    type: "float"
    default_value {
      f: 0
    }
  }
  is_stateful: true
}
op {
  name: "CollectiveReduceV2"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "group_size"
    type: DT_INT32
  }
  input_arg {
    name: "group_key"
    type: DT_INT32
  }
  input_arg {
    name: "instance_key"
    type: DT_INT32
  }
  input_arg {
    name: "ordering_token"
    type: DT_RESOURCE
    number_attr: "Nordering_token"
  }
  output_arg {
    name: "data"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_HALF
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "merge_op"
    type: "string"
    allowed_values {
      list {
        s: "Min"
        s: "Max"
        s: "Mul"
        s: "Add"
      }
    }
  }
  attr {
    name: "final_op"
    type: "string"
    allowed_values {
      list {
        s: "Id"
        s: "Div"
      }
    }
  }
  attr {
    name: "communication_hint"
    type: "string"
    default_value {
      s: "auto"
    }
  }
  attr {
    name: "timeout_seconds"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "Nordering_token"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "CombinedNonMaxSuppression"
  input_arg {
    name: "boxes"
    type: DT_FLOAT
  }
  input_arg {
    name: "scores"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_output_size_per_class"
    type: DT_INT32
  }
  input_arg {
    name: "max_total_size"
    type: DT_INT32
  }
  input_arg {
    name: "iou_threshold"
    type: DT_FLOAT
  }
  input_arg {
    name: "score_threshold"
    type: DT_FLOAT
  }
  output_arg {
    name: "nmsed_boxes"
    type: DT_FLOAT
  }
  output_arg {
    name: "nmsed_scores"
    type: DT_FLOAT
  }
  output_arg {
    name: "nmsed_classes"
    type: DT_FLOAT
  }
  output_arg {
    name: "valid_detections"
    type: DT_INT32
  }
  attr {
    name: "pad_per_class"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "clip_boxes"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "CompareAndBitpack"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "threshold"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type: DT_UINT8
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BOOL
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "Complex"
  input_arg {
    name: "real"
    type_attr: "T"
  }
  input_arg {
    name: "imag"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "Tout"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tout"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "ComplexAbs"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "Tout"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
  attr {
    name: "Tout"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "CompressElement"
  input_arg {
    name: "components"
    type_list_attr: "input_types"
  }
  output_arg {
    name: "compressed"
    type: DT_VARIANT
  }
  attr {
    name: "input_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ComputeAccidentalHits"
  input_arg {
    name: "true_classes"
    type: DT_INT64
  }
  input_arg {
    name: "sampled_candidates"
    type: DT_INT64
  }
  output_arg {
    name: "indices"
    type: DT_INT32
  }
  output_arg {
    name: "ids"
    type: DT_INT64
  }
  output_arg {
    name: "weights"
    type: DT_FLOAT
  }
  attr {
    name: "num_true"
    type: "int"
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "ComputeBatchSize"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "batch_size"
    type: DT_INT64
  }
}
op {
  name: "Concat"
  input_arg {
    name: "concat_dim"
    type: DT_INT32
  }
  input_arg {
    name: "values"
    type_attr: "T"
    number_attr: "N"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 2
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "ConcatOffset"
  input_arg {
    name: "concat_dim"
    type: DT_INT32
  }
  input_arg {
    name: "shape"
    type: DT_INT32
    number_attr: "N"
  }
  output_arg {
    name: "offset"
    type: DT_INT32
    number_attr: "N"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 2
  }
}
op {
  name: "ConcatV2"
  input_arg {
    name: "values"
    type_attr: "T"
    number_attr: "N"
  }
  input_arg {
    name: "axis"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 2
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "ConcatenateDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "another_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ConditionalAccumulator"
  output_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "shape"
    type: "shape"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "reduction_type"
    type: "string"
    default_value {
      s: "MEAN"
    }
    allowed_values {
      list {
        s: "MEAN"
        s: "SUM"
      }
    }
  }
  is_stateful: true
}
op {
  name: "ConfigureDistributedTPU"
  output_arg {
    name: "topology"
    type: DT_STRING
  }
  attr {
    name: "embedding_config"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "tpu_embedding_config"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "is_global_init"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "enable_whole_mesh_compilations"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "compilation_failure_closes_chips"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "ConfigureTPUEmbedding"
  attr {
    name: "config"
    type: "string"
  }
  is_stateful: true
}
op {
  name: "Conj"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
        type: DT_VARIANT
      }
    }
  }
}
op {
  name: "ConjugateTranspose"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "perm"
    type_attr: "Tperm"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tperm"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "Const"
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "value"
    type: "tensor"
  }
  attr {
    name: "dtype"
    type: "type"
  }
}
op {
  name: "ConsumeMutexLock"
  input_arg {
    name: "mutex_lock"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "ControlTrigger"
}
op {
  name: "Conv2D"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "filter"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "use_cudnn_on_gpu"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
        s: "EXPLICIT"
      }
    }
  }
  attr {
    name: "explicit_paddings"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
}
op {
  name: "Conv2DBackpropFilter"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "filter_sizes"
    type: DT_INT32
  }
  input_arg {
    name: "out_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "use_cudnn_on_gpu"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
        s: "EXPLICIT"
      }
    }
  }
  attr {
    name: "explicit_paddings"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
}
op {
  name: "Conv2DBackpropInput"
  input_arg {
    name: "input_sizes"
    type: DT_INT32
  }
  input_arg {
    name: "filter"
    type_attr: "T"
  }
  input_arg {
    name: "out_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "use_cudnn_on_gpu"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
        s: "EXPLICIT"
      }
    }
  }
  attr {
    name: "explicit_paddings"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
}
op {
  name: "Conv3D"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "filter"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NDHWC"
    }
    allowed_values {
      list {
        s: "NDHWC"
        s: "NCDHW"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
}
op {
  name: "Conv3DBackpropFilter"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "filter"
    type_attr: "T"
  }
  input_arg {
    name: "out_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  deprecation {
    version: 10
    explanation: "Use Conv3DBackpropFilterV2"
  }
}
op {
  name: "Conv3DBackpropFilterV2"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "filter_sizes"
    type: DT_INT32
  }
  input_arg {
    name: "out_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NDHWC"
    }
    allowed_values {
      list {
        s: "NDHWC"
        s: "NCDHW"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
}
op {
  name: "Conv3DBackpropInput"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "filter"
    type_attr: "T"
  }
  input_arg {
    name: "out_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  deprecation {
    version: 10
    explanation: "Use Conv3DBackpropInputV2"
  }
}
op {
  name: "Conv3DBackpropInputV2"
  input_arg {
    name: "input_sizes"
    type_attr: "Tshape"
  }
  input_arg {
    name: "filter"
    type_attr: "T"
  }
  input_arg {
    name: "out_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NDHWC"
    }
    allowed_values {
      list {
        s: "NDHWC"
        s: "NCDHW"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    name: "Tshape"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "Copy"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "tensor_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "debug_ops_spec"
    type: "list(string)"
    default_value {
      list {
      }
    }
  }
  allows_uninitialized_input: true
}
op {
  name: "CopyHost"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "tensor_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "debug_ops_spec"
    type: "list(string)"
    default_value {
      list {
      }
    }
  }
  allows_uninitialized_input: true
}
op {
  name: "Cos"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Cosh"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "CountUpTo"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "limit"
    type: "int"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "CreateSummaryDbWriter"
  input_arg {
    name: "writer"
    type: DT_RESOURCE
  }
  input_arg {
    name: "db_uri"
    type: DT_STRING
  }
  input_arg {
    name: "experiment_name"
    type: DT_STRING
  }
  input_arg {
    name: "run_name"
    type: DT_STRING
  }
  input_arg {
    name: "user_name"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "CreateSummaryFileWriter"
  input_arg {
    name: "writer"
    type: DT_RESOURCE
  }
  input_arg {
    name: "logdir"
    type: DT_STRING
  }
  input_arg {
    name: "max_queue"
    type: DT_INT32
  }
  input_arg {
    name: "flush_millis"
    type: DT_INT32
  }
  input_arg {
    name: "filename_suffix"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "CropAndResize"
  input_arg {
    name: "image"
    type_attr: "T"
  }
  input_arg {
    name: "boxes"
    type: DT_FLOAT
  }
  input_arg {
    name: "box_ind"
    type: DT_INT32
  }
  input_arg {
    name: "crop_size"
    type: DT_INT32
  }
  output_arg {
    name: "crops"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_UINT16
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "method"
    type: "string"
    default_value {
      s: "bilinear"
    }
    allowed_values {
      list {
        s: "bilinear"
        s: "nearest"
      }
    }
  }
  attr {
    name: "extrapolation_value"
    type: "float"
    default_value {
      f: 0
    }
  }
}
op {
  name: "CropAndResizeGradBoxes"
  input_arg {
    name: "grads"
    type: DT_FLOAT
  }
  input_arg {
    name: "image"
    type_attr: "T"
  }
  input_arg {
    name: "boxes"
    type: DT_FLOAT
  }
  input_arg {
    name: "box_ind"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_UINT16
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "method"
    type: "string"
    default_value {
      s: "bilinear"
    }
    allowed_values {
      list {
        s: "bilinear"
      }
    }
  }
}
op {
  name: "CropAndResizeGradImage"
  input_arg {
    name: "grads"
    type: DT_FLOAT
  }
  input_arg {
    name: "boxes"
    type: DT_FLOAT
  }
  input_arg {
    name: "box_ind"
    type: DT_INT32
  }
  input_arg {
    name: "image_size"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_HALF
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "method"
    type: "string"
    default_value {
      s: "bilinear"
    }
    allowed_values {
      list {
        s: "bilinear"
        s: "nearest"
      }
    }
  }
}
op {
  name: "Cross"
  input_arg {
    name: "a"
    type_attr: "T"
  }
  input_arg {
    name: "b"
    type_attr: "T"
  }
  output_arg {
    name: "product"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "CrossReplicaSum"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "group_assignment"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_INT32
        type: DT_UINT32
      }
    }
  }
}
op {
  name: "CudnnRNN"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "input_h"
    type_attr: "T"
  }
  input_arg {
    name: "input_c"
    type_attr: "T"
  }
  input_arg {
    name: "params"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  output_arg {
    name: "output_h"
    type_attr: "T"
  }
  output_arg {
    name: "output_c"
    type_attr: "T"
  }
  output_arg {
    name: "reserve_space"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "rnn_mode"
    type: "string"
    default_value {
      s: "lstm"
    }
    allowed_values {
      list {
        s: "rnn_relu"
        s: "rnn_tanh"
        s: "lstm"
        s: "gru"
      }
    }
  }
  attr {
    name: "input_mode"
    type: "string"
    default_value {
      s: "linear_input"
    }
    allowed_values {
      list {
        s: "linear_input"
        s: "skip_input"
        s: "auto_select"
      }
    }
  }
  attr {
    name: "direction"
    type: "string"
    default_value {
      s: "unidirectional"
    }
    allowed_values {
      list {
        s: "unidirectional"
        s: "bidirectional"
      }
    }
  }
  attr {
    name: "dropout"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "is_training"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "CudnnRNNBackprop"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "input_h"
    type_attr: "T"
  }
  input_arg {
    name: "input_c"
    type_attr: "T"
  }
  input_arg {
    name: "params"
    type_attr: "T"
  }
  input_arg {
    name: "output"
    type_attr: "T"
  }
  input_arg {
    name: "output_h"
    type_attr: "T"
  }
  input_arg {
    name: "output_c"
    type_attr: "T"
  }
  input_arg {
    name: "output_backprop"
    type_attr: "T"
  }
  input_arg {
    name: "output_h_backprop"
    type_attr: "T"
  }
  input_arg {
    name: "output_c_backprop"
    type_attr: "T"
  }
  input_arg {
    name: "reserve_space"
    type_attr: "T"
  }
  output_arg {
    name: "input_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "input_h_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "input_c_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "params_backprop"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "rnn_mode"
    type: "string"
    default_value {
      s: "lstm"
    }
    allowed_values {
      list {
        s: "rnn_relu"
        s: "rnn_tanh"
        s: "lstm"
        s: "gru"
      }
    }
  }
  attr {
    name: "input_mode"
    type: "string"
    default_value {
      s: "linear_input"
    }
    allowed_values {
      list {
        s: "linear_input"
        s: "skip_input"
        s: "auto_select"
      }
    }
  }
  attr {
    name: "direction"
    type: "string"
    default_value {
      s: "unidirectional"
    }
    allowed_values {
      list {
        s: "unidirectional"
        s: "bidirectional"
      }
    }
  }
  attr {
    name: "dropout"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  is_stateful: true
}
op {
  name: "CudnnRNNBackpropV2"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "input_h"
    type_attr: "T"
  }
  input_arg {
    name: "input_c"
    type_attr: "T"
  }
  input_arg {
    name: "params"
    type_attr: "T"
  }
  input_arg {
    name: "output"
    type_attr: "T"
  }
  input_arg {
    name: "output_h"
    type_attr: "T"
  }
  input_arg {
    name: "output_c"
    type_attr: "T"
  }
  input_arg {
    name: "output_backprop"
    type_attr: "T"
  }
  input_arg {
    name: "output_h_backprop"
    type_attr: "T"
  }
  input_arg {
    name: "output_c_backprop"
    type_attr: "T"
  }
  input_arg {
    name: "reserve_space"
    type_attr: "T"
  }
  input_arg {
    name: "host_reserved"
    type: DT_INT8
  }
  output_arg {
    name: "input_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "input_h_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "input_c_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "params_backprop"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "rnn_mode"
    type: "string"
    default_value {
      s: "lstm"
    }
    allowed_values {
      list {
        s: "rnn_relu"
        s: "rnn_tanh"
        s: "lstm"
        s: "gru"
      }
    }
  }
  attr {
    name: "input_mode"
    type: "string"
    default_value {
      s: "linear_input"
    }
    allowed_values {
      list {
        s: "linear_input"
        s: "skip_input"
        s: "auto_select"
      }
    }
  }
  attr {
    name: "direction"
    type: "string"
    default_value {
      s: "unidirectional"
    }
    allowed_values {
      list {
        s: "unidirectional"
        s: "bidirectional"
      }
    }
  }
  attr {
    name: "dropout"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  is_stateful: true
}
op {
  name: "CudnnRNNBackpropV3"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "input_h"
    type_attr: "T"
  }
  input_arg {
    name: "input_c"
    type_attr: "T"
  }
  input_arg {
    name: "params"
    type_attr: "T"
  }
  input_arg {
    name: "sequence_lengths"
    type: DT_INT32
  }
  input_arg {
    name: "output"
    type_attr: "T"
  }
  input_arg {
    name: "output_h"
    type_attr: "T"
  }
  input_arg {
    name: "output_c"
    type_attr: "T"
  }
  input_arg {
    name: "output_backprop"
    type_attr: "T"
  }
  input_arg {
    name: "output_h_backprop"
    type_attr: "T"
  }
  input_arg {
    name: "output_c_backprop"
    type_attr: "T"
  }
  input_arg {
    name: "reserve_space"
    type_attr: "T"
  }
  input_arg {
    name: "host_reserved"
    type: DT_INT8
  }
  output_arg {
    name: "input_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "input_h_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "input_c_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "params_backprop"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "rnn_mode"
    type: "string"
    default_value {
      s: "lstm"
    }
    allowed_values {
      list {
        s: "rnn_relu"
        s: "rnn_tanh"
        s: "lstm"
        s: "gru"
      }
    }
  }
  attr {
    name: "input_mode"
    type: "string"
    default_value {
      s: "linear_input"
    }
    allowed_values {
      list {
        s: "linear_input"
        s: "skip_input"
        s: "auto_select"
      }
    }
  }
  attr {
    name: "direction"
    type: "string"
    default_value {
      s: "unidirectional"
    }
    allowed_values {
      list {
        s: "unidirectional"
        s: "bidirectional"
      }
    }
  }
  attr {
    name: "dropout"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "num_proj"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "time_major"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "CudnnRNNCanonicalToParams"
  input_arg {
    name: "num_layers"
    type: DT_INT32
  }
  input_arg {
    name: "num_units"
    type: DT_INT32
  }
  input_arg {
    name: "input_size"
    type: DT_INT32
  }
  input_arg {
    name: "weights"
    type_attr: "T"
    number_attr: "num_params"
  }
  input_arg {
    name: "biases"
    type_attr: "T"
    number_attr: "num_params"
  }
  output_arg {
    name: "params"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "num_params"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "rnn_mode"
    type: "string"
    default_value {
      s: "lstm"
    }
    allowed_values {
      list {
        s: "rnn_relu"
        s: "rnn_tanh"
        s: "lstm"
        s: "gru"
      }
    }
  }
  attr {
    name: "input_mode"
    type: "string"
    default_value {
      s: "linear_input"
    }
    allowed_values {
      list {
        s: "linear_input"
        s: "skip_input"
        s: "auto_select"
      }
    }
  }
  attr {
    name: "direction"
    type: "string"
    default_value {
      s: "unidirectional"
    }
    allowed_values {
      list {
        s: "unidirectional"
        s: "bidirectional"
      }
    }
  }
  attr {
    name: "dropout"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "CudnnRNNCanonicalToParamsV2"
  input_arg {
    name: "num_layers"
    type: DT_INT32
  }
  input_arg {
    name: "num_units"
    type: DT_INT32
  }
  input_arg {
    name: "input_size"
    type: DT_INT32
  }
  input_arg {
    name: "weights"
    type_attr: "T"
    number_attr: "num_params_weights"
  }
  input_arg {
    name: "biases"
    type_attr: "T"
    number_attr: "num_params_biases"
  }
  output_arg {
    name: "params"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "num_params_weights"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "num_params_biases"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "rnn_mode"
    type: "string"
    default_value {
      s: "lstm"
    }
    allowed_values {
      list {
        s: "rnn_relu"
        s: "rnn_tanh"
        s: "lstm"
        s: "gru"
      }
    }
  }
  attr {
    name: "input_mode"
    type: "string"
    default_value {
      s: "linear_input"
    }
    allowed_values {
      list {
        s: "linear_input"
        s: "skip_input"
        s: "auto_select"
      }
    }
  }
  attr {
    name: "direction"
    type: "string"
    default_value {
      s: "unidirectional"
    }
    allowed_values {
      list {
        s: "unidirectional"
        s: "bidirectional"
      }
    }
  }
  attr {
    name: "dropout"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "num_proj"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "CudnnRNNParamsSize"
  input_arg {
    name: "num_layers"
    type: DT_INT32
  }
  input_arg {
    name: "num_units"
    type: DT_INT32
  }
  input_arg {
    name: "input_size"
    type: DT_INT32
  }
  output_arg {
    name: "params_size"
    type_attr: "S"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "S"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "rnn_mode"
    type: "string"
    default_value {
      s: "lstm"
    }
    allowed_values {
      list {
        s: "rnn_relu"
        s: "rnn_tanh"
        s: "lstm"
        s: "gru"
      }
    }
  }
  attr {
    name: "input_mode"
    type: "string"
    default_value {
      s: "linear_input"
    }
    allowed_values {
      list {
        s: "linear_input"
        s: "skip_input"
        s: "auto_select"
      }
    }
  }
  attr {
    name: "direction"
    type: "string"
    default_value {
      s: "unidirectional"
    }
    allowed_values {
      list {
        s: "unidirectional"
        s: "bidirectional"
      }
    }
  }
  attr {
    name: "dropout"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "num_proj"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "CudnnRNNParamsToCanonical"
  input_arg {
    name: "num_layers"
    type: DT_INT32
  }
  input_arg {
    name: "num_units"
    type: DT_INT32
  }
  input_arg {
    name: "input_size"
    type: DT_INT32
  }
  input_arg {
    name: "params"
    type_attr: "T"
  }
  output_arg {
    name: "weights"
    type_attr: "T"
    number_attr: "num_params"
  }
  output_arg {
    name: "biases"
    type_attr: "T"
    number_attr: "num_params"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "num_params"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "rnn_mode"
    type: "string"
    default_value {
      s: "lstm"
    }
    allowed_values {
      list {
        s: "rnn_relu"
        s: "rnn_tanh"
        s: "lstm"
        s: "gru"
      }
    }
  }
  attr {
    name: "input_mode"
    type: "string"
    default_value {
      s: "linear_input"
    }
    allowed_values {
      list {
        s: "linear_input"
        s: "skip_input"
        s: "auto_select"
      }
    }
  }
  attr {
    name: "direction"
    type: "string"
    default_value {
      s: "unidirectional"
    }
    allowed_values {
      list {
        s: "unidirectional"
        s: "bidirectional"
      }
    }
  }
  attr {
    name: "dropout"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "CudnnRNNParamsToCanonicalV2"
  input_arg {
    name: "num_layers"
    type: DT_INT32
  }
  input_arg {
    name: "num_units"
    type: DT_INT32
  }
  input_arg {
    name: "input_size"
    type: DT_INT32
  }
  input_arg {
    name: "params"
    type_attr: "T"
  }
  output_arg {
    name: "weights"
    type_attr: "T"
    number_attr: "num_params_weights"
  }
  output_arg {
    name: "biases"
    type_attr: "T"
    number_attr: "num_params_biases"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "num_params_weights"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "num_params_biases"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "rnn_mode"
    type: "string"
    default_value {
      s: "lstm"
    }
    allowed_values {
      list {
        s: "rnn_relu"
        s: "rnn_tanh"
        s: "lstm"
        s: "gru"
      }
    }
  }
  attr {
    name: "input_mode"
    type: "string"
    default_value {
      s: "linear_input"
    }
    allowed_values {
      list {
        s: "linear_input"
        s: "skip_input"
        s: "auto_select"
      }
    }
  }
  attr {
    name: "direction"
    type: "string"
    default_value {
      s: "unidirectional"
    }
    allowed_values {
      list {
        s: "unidirectional"
        s: "bidirectional"
      }
    }
  }
  attr {
    name: "dropout"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "num_proj"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "CudnnRNNV2"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "input_h"
    type_attr: "T"
  }
  input_arg {
    name: "input_c"
    type_attr: "T"
  }
  input_arg {
    name: "params"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  output_arg {
    name: "output_h"
    type_attr: "T"
  }
  output_arg {
    name: "output_c"
    type_attr: "T"
  }
  output_arg {
    name: "reserve_space"
    type_attr: "T"
  }
  output_arg {
    name: "host_reserved"
    type: DT_INT8
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "rnn_mode"
    type: "string"
    default_value {
      s: "lstm"
    }
    allowed_values {
      list {
        s: "rnn_relu"
        s: "rnn_tanh"
        s: "lstm"
        s: "gru"
      }
    }
  }
  attr {
    name: "input_mode"
    type: "string"
    default_value {
      s: "linear_input"
    }
    allowed_values {
      list {
        s: "linear_input"
        s: "skip_input"
        s: "auto_select"
      }
    }
  }
  attr {
    name: "direction"
    type: "string"
    default_value {
      s: "unidirectional"
    }
    allowed_values {
      list {
        s: "unidirectional"
        s: "bidirectional"
      }
    }
  }
  attr {
    name: "dropout"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "is_training"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "CudnnRNNV3"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "input_h"
    type_attr: "T"
  }
  input_arg {
    name: "input_c"
    type_attr: "T"
  }
  input_arg {
    name: "params"
    type_attr: "T"
  }
  input_arg {
    name: "sequence_lengths"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  output_arg {
    name: "output_h"
    type_attr: "T"
  }
  output_arg {
    name: "output_c"
    type_attr: "T"
  }
  output_arg {
    name: "reserve_space"
    type_attr: "T"
  }
  output_arg {
    name: "host_reserved"
    type: DT_INT8
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "rnn_mode"
    type: "string"
    default_value {
      s: "lstm"
    }
    allowed_values {
      list {
        s: "rnn_relu"
        s: "rnn_tanh"
        s: "lstm"
        s: "gru"
      }
    }
  }
  attr {
    name: "input_mode"
    type: "string"
    default_value {
      s: "linear_input"
    }
    allowed_values {
      list {
        s: "linear_input"
        s: "skip_input"
        s: "auto_select"
      }
    }
  }
  attr {
    name: "direction"
    type: "string"
    default_value {
      s: "unidirectional"
    }
    allowed_values {
      list {
        s: "unidirectional"
        s: "bidirectional"
      }
    }
  }
  attr {
    name: "dropout"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "num_proj"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "is_training"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "time_major"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "Cumprod"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "axis"
    type_attr: "Tidx"
  }
  output_arg {
    name: "out"
    type_attr: "T"
  }
  attr {
    name: "exclusive"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "reverse"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "Cumsum"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "axis"
    type_attr: "Tidx"
  }
  output_arg {
    name: "out"
    type_attr: "T"
  }
  attr {
    name: "exclusive"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "reverse"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "CumulativeLogsumexp"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "axis"
    type_attr: "Tidx"
  }
  output_arg {
    name: "out"
    type_attr: "T"
  }
  attr {
    name: "exclusive"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "reverse"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "DataFormatDimMap"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "src_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
  }
  attr {
    name: "dst_format"
    type: "string"
    default_value {
      s: "NCHW"
    }
  }
}
op {
  name: "DataFormatVecPermute"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "src_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
  }
  attr {
    name: "dst_format"
    type: "string"
    default_value {
      s: "NCHW"
    }
  }
}
op {
  name: "DataServiceDataset"
  input_arg {
    name: "dataset_id"
    type: DT_INT64
  }
  input_arg {
    name: "processing_mode"
    type: DT_STRING
  }
  input_arg {
    name: "address"
    type: DT_STRING
  }
  input_arg {
    name: "protocol"
    type: DT_STRING
  }
  input_arg {
    name: "job_name"
    type: DT_STRING
  }
  input_arg {
    name: "max_outstanding_requests"
    type: DT_INT64
  }
  input_arg {
    name: "iteration_counter"
    type: DT_RESOURCE
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "task_refresh_interval_hint_ms"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "DatasetCardinality"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "cardinality"
    type: DT_INT64
  }
}
op {
  name: "DatasetFromGraph"
  input_arg {
    name: "graph_def"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
}
op {
  name: "DatasetToGraph"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "graph"
    type: DT_STRING
  }
  attr {
    name: "stateful_whitelist"
    type: "list(string)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "allow_stateful"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "strip_device_assignment"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "DatasetToGraphV2"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "graph"
    type: DT_STRING
  }
  attr {
    name: "external_state_policy"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "strip_device_assignment"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "DatasetToSingleElement"
  input_arg {
    name: "dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "components"
    type_list_attr: "output_types"
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "DatasetToTFRecord"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "filename"
    type: DT_STRING
  }
  input_arg {
    name: "compression_type"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "Dawsn"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "DebugGradientIdentity"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  allows_uninitialized_input: true
}
op {
  name: "DebugGradientRefIdentity"
  input_arg {
    name: "input"
    type_attr: "T"
    is_ref: true
  }
  output_arg {
    name: "output"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
  }
  allows_uninitialized_input: true
}
op {
  name: "DebugIdentity"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "device_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "tensor_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "debug_urls"
    type: "list(string)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "gated_grpc"
    type: "bool"
    default_value {
      b: false
    }
  }
  allows_uninitialized_input: true
}
op {
  name: "DebugIdentityV2"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "tfdbg_context_id"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "op_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "output_slot"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "tensor_debug_mode"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "debug_urls"
    type: "list(string)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "circular_buffer_size"
    type: "int"
    default_value {
      i: 1000
    }
  }
  attr {
    name: "tfdbg_run_id"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "DebugNanCount"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type: DT_INT64
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "device_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "tensor_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "debug_urls"
    type: "list(string)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "gated_grpc"
    type: "bool"
    default_value {
      b: false
    }
  }
  allows_uninitialized_input: true
}
op {
  name: "DebugNumericSummary"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type: DT_DOUBLE
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "device_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "tensor_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "debug_urls"
    type: "list(string)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "lower_bound"
    type: "float"
    default_value {
      f: -inf
    }
  }
  attr {
    name: "upper_bound"
    type: "float"
    default_value {
      f: inf
    }
  }
  attr {
    name: "mute_if_healthy"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "gated_grpc"
    type: "bool"
    default_value {
      b: false
    }
  }
  allows_uninitialized_input: true
}
op {
  name: "DebugNumericSummaryV2"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "output_dtype"
  }
  attr {
    name: "output_dtype"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "tensor_debug_mode"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "tensor_id"
    type: "int"
    default_value {
      i: -1
    }
  }
}
op {
  name: "DecodeAndCropJpeg"
  input_arg {
    name: "contents"
    type: DT_STRING
  }
  input_arg {
    name: "crop_window"
    type: DT_INT32
  }
  output_arg {
    name: "image"
    type: DT_UINT8
  }
  attr {
    name: "channels"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "ratio"
    type: "int"
    default_value {
      i: 1
    }
  }
  attr {
    name: "fancy_upscaling"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "try_recover_truncated"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "acceptable_fraction"
    type: "float"
    default_value {
      f: 1
    }
  }
  attr {
    name: "dct_method"
    type: "string"
    default_value {
      s: ""
    }
  }
}
op {
  name: "DecodeBase64"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type: DT_STRING
  }
}
op {
  name: "DecodeBmp"
  input_arg {
    name: "contents"
    type: DT_STRING
  }
  output_arg {
    name: "image"
    type: DT_UINT8
  }
  attr {
    name: "channels"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "DecodeCSV"
  input_arg {
    name: "records"
    type: DT_STRING
  }
  input_arg {
    name: "record_defaults"
    type_list_attr: "OUT_TYPE"
  }
  output_arg {
    name: "output"
    type_list_attr: "OUT_TYPE"
  }
  attr {
    name: "OUT_TYPE"
    type: "list(type)"
    has_minimum: true
    minimum: 1
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "field_delim"
    type: "string"
    default_value {
      s: ","
    }
  }
  attr {
    name: "use_quote_delim"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "na_value"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "select_cols"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "DecodeCompressed"
  input_arg {
    name: "bytes"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type: DT_STRING
  }
  attr {
    name: "compression_type"
    type: "string"
    default_value {
      s: ""
    }
  }
}
op {
  name: "DecodeGif"
  input_arg {
    name: "contents"
    type: DT_STRING
  }
  output_arg {
    name: "image"
    type: DT_UINT8
  }
}
op {
  name: "DecodeImage"
  input_arg {
    name: "contents"
    type: DT_STRING
  }
  output_arg {
    name: "image"
    type_attr: "dtype"
  }
  attr {
    name: "channels"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_UINT8
    }
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_UINT16
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "expand_animations"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "DecodeJSONExample"
  input_arg {
    name: "json_examples"
    type: DT_STRING
  }
  output_arg {
    name: "binary_examples"
    type: DT_STRING
  }
}
op {
  name: "DecodeJpeg"
  input_arg {
    name: "contents"
    type: DT_STRING
  }
  output_arg {
    name: "image"
    type: DT_UINT8
  }
  attr {
    name: "channels"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "ratio"
    type: "int"
    default_value {
      i: 1
    }
  }
  attr {
    name: "fancy_upscaling"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "try_recover_truncated"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "acceptable_fraction"
    type: "float"
    default_value {
      f: 1
    }
  }
  attr {
    name: "dct_method"
    type: "string"
    default_value {
      s: ""
    }
  }
}
op {
  name: "DecodePaddedRaw"
  input_arg {
    name: "input_bytes"
    type: DT_STRING
  }
  input_arg {
    name: "fixed_length"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  attr {
    name: "out_type"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT16
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
      }
    }
  }
  attr {
    name: "little_endian"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "DecodePng"
  input_arg {
    name: "contents"
    type: DT_STRING
  }
  output_arg {
    name: "image"
    type_attr: "dtype"
  }
  attr {
    name: "channels"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_UINT8
    }
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_UINT16
      }
    }
  }
}
op {
  name: "DecodeProtoV2"
  input_arg {
    name: "bytes"
    type: DT_STRING
  }
  output_arg {
    name: "sizes"
    type: DT_INT32
  }
  output_arg {
    name: "values"
    type_list_attr: "output_types"
  }
  attr {
    name: "message_type"
    type: "string"
  }
  attr {
    name: "field_names"
    type: "list(string)"
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "descriptor_source"
    type: "string"
    default_value {
      s: "local://"
    }
  }
  attr {
    name: "message_format"
    type: "string"
    default_value {
      s: "binary"
    }
  }
  attr {
    name: "sanitize"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "DecodeRaw"
  input_arg {
    name: "bytes"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  attr {
    name: "out_type"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT16
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
        type: DT_BOOL
      }
    }
  }
  attr {
    name: "little_endian"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "DecodeWav"
  input_arg {
    name: "contents"
    type: DT_STRING
  }
  output_arg {
    name: "audio"
    type: DT_FLOAT
  }
  output_arg {
    name: "sample_rate"
    type: DT_INT32
  }
  attr {
    name: "desired_channels"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "desired_samples"
    type: "int"
    default_value {
      i: -1
    }
  }
}
op {
  name: "DeepCopy"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "DeleteIterator"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "deleter"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "DeleteMemoryCache"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "deleter"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "DeleteMultiDeviceIterator"
  input_arg {
    name: "multi_device_iterator"
    type: DT_RESOURCE
  }
  input_arg {
    name: "iterators"
    type: DT_RESOURCE
    number_attr: "N"
  }
  input_arg {
    name: "deleter"
    type: DT_VARIANT
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "DeleteRandomSeedGenerator"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "deleter"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "DeleteSeedGenerator"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "deleter"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "DeleteSessionTensor"
  input_arg {
    name: "handle"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "DenseBincount"
  input_arg {
    name: "input"
    type_attr: "Tidx"
  }
  input_arg {
    name: "size"
    type_attr: "Tidx"
  }
  input_arg {
    name: "weights"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "Tidx"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "binary_output"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "DenseCountSparseOutput"
  input_arg {
    name: "values"
    type_attr: "T"
  }
  input_arg {
    name: "weights"
    type_attr: "output_type"
  }
  output_arg {
    name: "output_indices"
    type: DT_INT64
  }
  output_arg {
    name: "output_values"
    type_attr: "output_type"
  }
  output_arg {
    name: "output_dense_shape"
    type: DT_INT64
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "minlength"
    type: "int"
    default_value {
      i: -1
    }
    has_minimum: true
    minimum: -1
  }
  attr {
    name: "maxlength"
    type: "int"
    default_value {
      i: -1
    }
    has_minimum: true
    minimum: -1
  }
  attr {
    name: "binary_output"
    type: "bool"
  }
  attr {
    name: "output_type"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "DenseToCSRSparseMatrix"
  input_arg {
    name: "dense_input"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type: DT_INT64
  }
  output_arg {
    name: "sparse_output"
    type: DT_VARIANT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "DenseToDenseSetOperation"
  input_arg {
    name: "set1"
    type_attr: "T"
  }
  input_arg {
    name: "set2"
    type_attr: "T"
  }
  output_arg {
    name: "result_indices"
    type: DT_INT64
  }
  output_arg {
    name: "result_values"
    type_attr: "T"
  }
  output_arg {
    name: "result_shape"
    type: DT_INT64
  }
  attr {
    name: "set_operation"
    type: "string"
  }
  attr {
    name: "validate_indices"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT8
        type: DT_UINT16
        type: DT_STRING
      }
    }
  }
}
op {
  name: "DenseToSparseBatchDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "batch_size"
    type: DT_INT64
  }
  input_arg {
    name: "row_shape"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "DenseToSparseSetOperation"
  input_arg {
    name: "set1"
    type_attr: "T"
  }
  input_arg {
    name: "set2_indices"
    type: DT_INT64
  }
  input_arg {
    name: "set2_values"
    type_attr: "T"
  }
  input_arg {
    name: "set2_shape"
    type: DT_INT64
  }
  output_arg {
    name: "result_indices"
    type: DT_INT64
  }
  output_arg {
    name: "result_values"
    type_attr: "T"
  }
  output_arg {
    name: "result_shape"
    type: DT_INT64
  }
  attr {
    name: "set_operation"
    type: "string"
  }
  attr {
    name: "validate_indices"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT8
        type: DT_UINT16
        type: DT_STRING
      }
    }
  }
}
op {
  name: "DepthToSpace"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "block_size"
    type: "int"
    has_minimum: true
    minimum: 2
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
        s: "NCHW_VECT_C"
      }
    }
  }
}
op {
  name: "DepthwiseConv2dNative"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "filter"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
        s: "EXPLICIT"
      }
    }
  }
  attr {
    name: "explicit_paddings"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
}
op {
  name: "DepthwiseConv2dNativeBackpropFilter"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "filter_sizes"
    type: DT_INT32
  }
  input_arg {
    name: "out_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
        s: "EXPLICIT"
      }
    }
  }
  attr {
    name: "explicit_paddings"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
}
op {
  name: "DepthwiseConv2dNativeBackpropInput"
  input_arg {
    name: "input_sizes"
    type: DT_INT32
  }
  input_arg {
    name: "filter"
    type_attr: "T"
  }
  input_arg {
    name: "out_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
        s: "EXPLICIT"
      }
    }
  }
  attr {
    name: "explicit_paddings"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
}
op {
  name: "Dequantize"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "min_range"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_range"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "mode"
    type: "string"
    default_value {
      s: "MIN_COMBINED"
    }
    allowed_values {
      list {
        s: "MIN_COMBINED"
        s: "MIN_FIRST"
        s: "SCALED"
      }
    }
  }
  attr {
    name: "narrow_range"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "axis"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "DeserializeIterator"
  input_arg {
    name: "resource_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "serialized"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "DeserializeManySparse"
  input_arg {
    name: "serialized_sparse"
    type: DT_STRING
  }
  output_arg {
    name: "sparse_indices"
    type: DT_INT64
  }
  output_arg {
    name: "sparse_values"
    type_attr: "dtype"
  }
  output_arg {
    name: "sparse_shape"
    type: DT_INT64
  }
  attr {
    name: "dtype"
    type: "type"
  }
}
op {
  name: "DeserializeSparse"
  input_arg {
    name: "serialized_sparse"
    type_attr: "Tserialized"
  }
  output_arg {
    name: "sparse_indices"
    type: DT_INT64
  }
  output_arg {
    name: "sparse_values"
    type_attr: "dtype"
  }
  output_arg {
    name: "sparse_shape"
    type: DT_INT64
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "Tserialized"
    type: "type"
    default_value {
      type: DT_STRING
    }
    allowed_values {
      list {
        type: DT_STRING
        type: DT_VARIANT
      }
    }
  }
}
op {
  name: "DestroyResourceOp"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  attr {
    name: "ignore_lookup_error"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "DestroyTemporaryVariable"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  output_arg {
    name: "value"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "var_name"
    type: "string"
  }
}
op {
  name: "DeviceIndex"
  output_arg {
    name: "index"
    type: DT_INT32
  }
  attr {
    name: "device_names"
    type: "list(string)"
  }
}
op {
  name: "Diag"
  input_arg {
    name: "diagonal"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "DiagPart"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "diagonal"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Digamma"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "Dilation2D"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "filter"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "rates"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
}
op {
  name: "Dilation2DBackpropFilter"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "filter"
    type_attr: "T"
  }
  input_arg {
    name: "out_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "filter_backprop"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "rates"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
}
op {
  name: "Dilation2DBackpropInput"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "filter"
    type_attr: "T"
  }
  input_arg {
    name: "out_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "in_backprop"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "rates"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
}
op {
  name: "DirectedInterleaveDataset"
  input_arg {
    name: "selector_input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "data_input_datasets"
    type: DT_VARIANT
    number_attr: "N"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "Div"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_UINT8
        type: DT_INT8
        type: DT_UINT16
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "DivNoNan"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "DrawBoundingBoxes"
  input_arg {
    name: "images"
    type_attr: "T"
  }
  input_arg {
    name: "boxes"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_HALF
      }
    }
  }
}
op {
  name: "DrawBoundingBoxesV2"
  input_arg {
    name: "images"
    type_attr: "T"
  }
  input_arg {
    name: "boxes"
    type: DT_FLOAT
  }
  input_arg {
    name: "colors"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_HALF
      }
    }
  }
}
op {
  name: "DummyIterationCounter"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  is_stateful: true
}
op {
  name: "DummyMemoryCache"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  is_stateful: true
}
op {
  name: "DummySeedGenerator"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  is_stateful: true
}
op {
  name: "DynamicPartition"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "partitions"
    type: DT_INT32
  }
  output_arg {
    name: "outputs"
    type_attr: "T"
    number_attr: "num_partitions"
  }
  attr {
    name: "num_partitions"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "DynamicStitch"
  input_arg {
    name: "indices"
    type: DT_INT32
    number_attr: "N"
  }
  input_arg {
    name: "data"
    type_attr: "T"
    number_attr: "N"
  }
  output_arg {
    name: "merged"
    type_attr: "T"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "EagerPyFunc"
  input_arg {
    name: "input"
    type_list_attr: "Tin"
  }
  output_arg {
    name: "output"
    type_list_attr: "Tout"
  }
  attr {
    name: "token"
    type: "string"
  }
  attr {
    name: "is_async"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "Tin"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tout"
    type: "list(type)"
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "EditDistance"
  input_arg {
    name: "hypothesis_indices"
    type: DT_INT64
  }
  input_arg {
    name: "hypothesis_values"
    type_attr: "T"
  }
  input_arg {
    name: "hypothesis_shape"
    type: DT_INT64
  }
  input_arg {
    name: "truth_indices"
    type: DT_INT64
  }
  input_arg {
    name: "truth_values"
    type_attr: "T"
  }
  input_arg {
    name: "truth_shape"
    type: DT_INT64
  }
  output_arg {
    name: "output"
    type: DT_FLOAT
  }
  attr {
    name: "normalize"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "Eig"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "e"
    type_attr: "Tout"
  }
  output_arg {
    name: "v"
    type_attr: "Tout"
  }
  attr {
    name: "compute_v"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
  attr {
    name: "Tout"
    type: "type"
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Einsum"
  input_arg {
    name: "inputs"
    type_attr: "T"
    number_attr: "N"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "equation"
    type: "string"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "Elu"
  input_arg {
    name: "features"
    type_attr: "T"
  }
  output_arg {
    name: "activations"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "EluGrad"
  input_arg {
    name: "gradients"
    type_attr: "T"
  }
  input_arg {
    name: "outputs"
    type_attr: "T"
  }
  output_arg {
    name: "backprops"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "Empty"
  input_arg {
    name: "shape"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "init"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "EmptyTensorList"
  input_arg {
    name: "element_shape"
    type_attr: "shape_type"
  }
  input_arg {
    name: "max_num_elements"
    type: DT_INT32
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
  attr {
    name: "shape_type"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "EmptyTensorMap"
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
}
op {
  name: "EncodeBase64"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type: DT_STRING
  }
  attr {
    name: "pad"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "EncodeJpeg"
  input_arg {
    name: "image"
    type: DT_UINT8
  }
  output_arg {
    name: "contents"
    type: DT_STRING
  }
  attr {
    name: "format"
    type: "string"
    default_value {
      s: ""
    }
    allowed_values {
      list {
        s: ""
        s: "grayscale"
        s: "rgb"
      }
    }
  }
  attr {
    name: "quality"
    type: "int"
    default_value {
      i: 95
    }
  }
  attr {
    name: "progressive"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "optimize_size"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "chroma_downsampling"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "density_unit"
    type: "string"
    default_value {
      s: "in"
    }
    allowed_values {
      list {
        s: "in"
        s: "cm"
      }
    }
  }
  attr {
    name: "x_density"
    type: "int"
    default_value {
      i: 300
    }
  }
  attr {
    name: "y_density"
    type: "int"
    default_value {
      i: 300
    }
  }
  attr {
    name: "xmp_metadata"
    type: "string"
    default_value {
      s: ""
    }
  }
}
op {
  name: "EncodeJpegVariableQuality"
  input_arg {
    name: "images"
    type: DT_UINT8
  }
  input_arg {
    name: "quality"
    type: DT_INT32
  }
  output_arg {
    name: "contents"
    type: DT_STRING
  }
}
op {
  name: "EncodePng"
  input_arg {
    name: "image"
    type_attr: "T"
  }
  output_arg {
    name: "contents"
    type: DT_STRING
  }
  attr {
    name: "compression"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_UINT8
    }
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_UINT16
      }
    }
  }
}
op {
  name: "EncodeProto"
  input_arg {
    name: "sizes"
    type: DT_INT32
  }
  input_arg {
    name: "values"
    type_list_attr: "Tinput_types"
  }
  output_arg {
    name: "bytes"
    type: DT_STRING
  }
  attr {
    name: "field_names"
    type: "list(string)"
  }
  attr {
    name: "message_type"
    type: "string"
  }
  attr {
    name: "descriptor_source"
    type: "string"
    default_value {
      s: "local://"
    }
  }
  attr {
    name: "Tinput_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "EncodeWav"
  input_arg {
    name: "audio"
    type: DT_FLOAT
  }
  input_arg {
    name: "sample_rate"
    type: DT_INT32
  }
  output_arg {
    name: "contents"
    type: DT_STRING
  }
}
op {
  name: "EnqueueTPUEmbeddingIntegerBatch"
  input_arg {
    name: "batch"
    type: DT_INT32
    number_attr: "N"
  }
  input_arg {
    name: "mode_override"
    type: DT_STRING
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "device_ordinal"
    type: "int"
    default_value {
      i: -1
    }
  }
  is_stateful: true
}
op {
  name: "EnqueueTPUEmbeddingRaggedTensorBatch"
  input_arg {
    name: "sample_splits"
    type_attr: "T1"
    number_attr: "N"
  }
  input_arg {
    name: "embedding_indices"
    type_attr: "T2"
    number_attr: "N"
  }
  input_arg {
    name: "aggregation_weights"
    type_attr: "T3"
    number_attr: "N"
  }
  input_arg {
    name: "mode_override"
    type: DT_STRING
  }
  attr {
    name: "T1"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T2"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T3"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "device_ordinal"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "combiners"
    type: "list(string)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "table_ids"
    type: "list(int)"
  }
  attr {
    name: "max_sequence_lengths"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  is_stateful: true
}
op {
  name: "EnqueueTPUEmbeddingSparseBatch"
  input_arg {
    name: "sample_indices"
    type_attr: "T1"
    number_attr: "N"
  }
  input_arg {
    name: "embedding_indices"
    type_attr: "T2"
    number_attr: "N"
  }
  input_arg {
    name: "aggregation_weights"
    type_attr: "T3"
    number_attr: "N"
  }
  input_arg {
    name: "mode_override"
    type: DT_STRING
  }
  attr {
    name: "T1"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T2"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T3"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "device_ordinal"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "combiners"
    type: "list(string)"
    default_value {
      list {
      }
    }
  }
  is_stateful: true
}
op {
  name: "EnqueueTPUEmbeddingSparseTensorBatch"
  input_arg {
    name: "sample_indices"
    type_attr: "T1"
    number_attr: "N"
  }
  input_arg {
    name: "embedding_indices"
    type_attr: "T2"
    number_attr: "N"
  }
  input_arg {
    name: "aggregation_weights"
    type_attr: "T3"
    number_attr: "N"
  }
  input_arg {
    name: "mode_override"
    type: DT_STRING
  }
  attr {
    name: "T1"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T2"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T3"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "device_ordinal"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "combiners"
    type: "list(string)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "table_ids"
    type: "list(int)"
  }
  attr {
    name: "max_sequence_lengths"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  is_stateful: true
}
op {
  name: "EnsureShape"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "shape"
    type: "shape"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "Enter"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "frame_name"
    type: "string"
  }
  attr {
    name: "is_constant"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "parallel_iterations"
    type: "int"
    default_value {
      i: 10
    }
  }
}
op {
  name: "Equal"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type: DT_BOOL
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "incompatible_shape_error"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_commutative: true
}
op {
  name: "Erf"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "Erfc"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "Erfinv"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "EuclideanNorm"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "reduction_indices"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "keep_dims"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "Exit"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "Exp"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "ExpandDims"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "dim"
    type_attr: "Tdim"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tdim"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "ExperimentalAssertNextDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "transformations"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ExperimentalAutoShardDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "num_workers"
    type: DT_INT64
  }
  input_arg {
    name: "index"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "auto_shard_policy"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ExperimentalBytesProducedStatsDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "tag"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ExperimentalCSVDataset"
  input_arg {
    name: "filenames"
    type: DT_STRING
  }
  input_arg {
    name: "compression_type"
    type: DT_STRING
  }
  input_arg {
    name: "buffer_size"
    type: DT_INT64
  }
  input_arg {
    name: "header"
    type: DT_BOOL
  }
  input_arg {
    name: "field_delim"
    type: DT_STRING
  }
  input_arg {
    name: "use_quote_delim"
    type: DT_BOOL
  }
  input_arg {
    name: "na_value"
    type: DT_STRING
  }
  input_arg {
    name: "select_cols"
    type: DT_INT64
  }
  input_arg {
    name: "record_defaults"
    type_list_attr: "output_types"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "ExperimentalChooseFastestDataset"
  input_arg {
    name: "input_datasets"
    type: DT_VARIANT
    number_attr: "N"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 2
  }
  attr {
    name: "num_experiments"
    type: "int"
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ExperimentalDatasetCardinality"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "cardinality"
    type: DT_INT64
  }
}
op {
  name: "ExperimentalDatasetToTFRecord"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "filename"
    type: DT_STRING
  }
  input_arg {
    name: "compression_type"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "ExperimentalDenseToSparseBatchDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "batch_size"
    type: DT_INT64
  }
  input_arg {
    name: "row_shape"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ExperimentalDirectedInterleaveDataset"
  input_arg {
    name: "selector_input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "data_input_datasets"
    type: DT_VARIANT
    number_attr: "N"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ExperimentalGroupByReducerDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "key_func_other_arguments"
    type_list_attr: "Tkey_func_other_arguments"
  }
  input_arg {
    name: "init_func_other_arguments"
    type_list_attr: "Tinit_func_other_arguments"
  }
  input_arg {
    name: "reduce_func_other_arguments"
    type_list_attr: "Treduce_func_other_arguments"
  }
  input_arg {
    name: "finalize_func_other_arguments"
    type_list_attr: "Tfinalize_func_other_arguments"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "key_func"
    type: "func"
  }
  attr {
    name: "init_func"
    type: "func"
  }
  attr {
    name: "reduce_func"
    type: "func"
  }
  attr {
    name: "finalize_func"
    type: "func"
  }
  attr {
    name: "Tkey_func_other_arguments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tinit_func_other_arguments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Treduce_func_other_arguments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tfinalize_func_other_arguments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "ExperimentalGroupByWindowDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "key_func_other_arguments"
    type_list_attr: "Tkey_func_other_arguments"
  }
  input_arg {
    name: "reduce_func_other_arguments"
    type_list_attr: "Treduce_func_other_arguments"
  }
  input_arg {
    name: "window_size_func_other_arguments"
    type_list_attr: "Twindow_size_func_other_arguments"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "key_func"
    type: "func"
  }
  attr {
    name: "reduce_func"
    type: "func"
  }
  attr {
    name: "window_size_func"
    type: "func"
  }
  attr {
    name: "Tkey_func_other_arguments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Treduce_func_other_arguments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Twindow_size_func_other_arguments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ExperimentalIgnoreErrorsDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "log_warning"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ExperimentalIteratorGetDevice"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  output_arg {
    name: "device"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "ExperimentalLMDBDataset"
  input_arg {
    name: "filenames"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "ExperimentalLatencyStatsDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "tag"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ExperimentalMapAndBatchDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  input_arg {
    name: "batch_size"
    type: DT_INT64
  }
  input_arg {
    name: "num_parallel_calls"
    type: DT_INT64
  }
  input_arg {
    name: "drop_remainder"
    type: DT_BOOL
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "preserve_cardinality"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ExperimentalMapDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "use_inter_op_parallelism"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "preserve_cardinality"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ExperimentalMatchingFilesDataset"
  input_arg {
    name: "patterns"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "ExperimentalMaxIntraOpParallelismDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "max_intra_op_parallelism"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ExperimentalNonSerializableDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ExperimentalParallelInterleaveDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  input_arg {
    name: "cycle_length"
    type: DT_INT64
  }
  input_arg {
    name: "block_length"
    type: DT_INT64
  }
  input_arg {
    name: "sloppy"
    type: DT_BOOL
  }
  input_arg {
    name: "buffer_output_elements"
    type: DT_INT64
  }
  input_arg {
    name: "prefetch_input_elements"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ExperimentalParseExampleDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "num_parallel_calls"
    type: DT_INT64
  }
  input_arg {
    name: "dense_defaults"
    type_list_attr: "Tdense"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "sparse_keys"
    type: "list(string)"
    has_minimum: true
  }
  attr {
    name: "dense_keys"
    type: "list(string)"
    has_minimum: true
  }
  attr {
    name: "sparse_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "Tdense"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "dense_shapes"
    type: "list(shape)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "sloppy"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ExperimentalPrivateThreadPoolDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "num_threads"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ExperimentalRandomDataset"
  input_arg {
    name: "seed"
    type: DT_INT64
  }
  input_arg {
    name: "seed2"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "ExperimentalRebatchDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "num_replicas"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "use_fallback"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "ExperimentalScanDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "initial_state"
    type_list_attr: "Tstate"
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "Tstate"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "preserve_cardinality"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ExperimentalSetStatsAggregatorDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "stats_aggregator"
    type: DT_RESOURCE
  }
  input_arg {
    name: "tag"
    type: DT_STRING
  }
  input_arg {
    name: "counter_prefix"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "ExperimentalSleepDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "sleep_microseconds"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ExperimentalSlidingWindowDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "window_size"
    type: DT_INT64
  }
  input_arg {
    name: "window_shift"
    type: DT_INT64
  }
  input_arg {
    name: "window_stride"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ExperimentalSqlDataset"
  input_arg {
    name: "driver_name"
    type: DT_STRING
  }
  input_arg {
    name: "data_source_name"
    type: DT_STRING
  }
  input_arg {
    name: "query"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "ExperimentalStatsAggregatorHandle"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "ExperimentalStatsAggregatorSummary"
  input_arg {
    name: "iterator"
    type: DT_RESOURCE
  }
  output_arg {
    name: "summary"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "ExperimentalTakeWhileDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "predicate"
    type: "func"
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ExperimentalThreadPoolDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "thread_pool"
    type: DT_RESOURCE
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "ExperimentalThreadPoolHandle"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "num_threads"
    type: "int"
  }
  attr {
    name: "max_intra_op_parallelism"
    type: "int"
    default_value {
      i: 1
    }
  }
  attr {
    name: "display_name"
    type: "string"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "ExperimentalUnbatchDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ExperimentalUniqueDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "Expint"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "Expm1"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "ExtractGlimpse"
  input_arg {
    name: "input"
    type: DT_FLOAT
  }
  input_arg {
    name: "size"
    type: DT_INT32
  }
  input_arg {
    name: "offsets"
    type: DT_FLOAT
  }
  output_arg {
    name: "glimpse"
    type: DT_FLOAT
  }
  attr {
    name: "centered"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "normalized"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "uniform_noise"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "noise"
    type: "string"
    default_value {
      s: "uniform"
    }
  }
}
op {
  name: "ExtractGlimpseV2"
  input_arg {
    name: "input"
    type: DT_FLOAT
  }
  input_arg {
    name: "size"
    type: DT_INT32
  }
  input_arg {
    name: "offsets"
    type: DT_FLOAT
  }
  output_arg {
    name: "glimpse"
    type: DT_FLOAT
  }
  attr {
    name: "centered"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "normalized"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "uniform_noise"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "noise"
    type: "string"
    default_value {
      s: "uniform"
    }
  }
}
op {
  name: "ExtractImagePatches"
  input_arg {
    name: "images"
    type_attr: "T"
  }
  output_arg {
    name: "patches"
    type_attr: "T"
  }
  attr {
    name: "ksizes"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "rates"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT8
        type: DT_UINT16
        type: DT_UINT32
        type: DT_UINT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
        type: DT_BOOL
      }
    }
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
}
op {
  name: "ExtractJpegShape"
  input_arg {
    name: "contents"
    type: DT_STRING
  }
  output_arg {
    name: "image_shape"
    type_attr: "output_type"
  }
  attr {
    name: "output_type"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "ExtractVolumePatches"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "patches"
    type_attr: "T"
  }
  attr {
    name: "ksizes"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
}
op {
  name: "FFT"
  input_arg {
    name: "input"
    type_attr: "Tcomplex"
  }
  output_arg {
    name: "output"
    type_attr: "Tcomplex"
  }
  attr {
    name: "Tcomplex"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "FFT2D"
  input_arg {
    name: "input"
    type_attr: "Tcomplex"
  }
  output_arg {
    name: "output"
    type_attr: "Tcomplex"
  }
  attr {
    name: "Tcomplex"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "FFT3D"
  input_arg {
    name: "input"
    type_attr: "Tcomplex"
  }
  output_arg {
    name: "output"
    type_attr: "Tcomplex"
  }
  attr {
    name: "Tcomplex"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "FIFOQueue"
  output_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "component_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "FIFOQueueV2"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "component_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "Fact"
  output_arg {
    name: "fact"
    type: DT_STRING
  }
}
op {
  name: "FakeParam"
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "shape"
    type: "shape"
  }
}
op {
  name: "FakeQuantWithMinMaxArgs"
  input_arg {
    name: "inputs"
    type: DT_FLOAT
  }
  output_arg {
    name: "outputs"
    type: DT_FLOAT
  }
  attr {
    name: "min"
    type: "float"
    default_value {
      f: -6
    }
  }
  attr {
    name: "max"
    type: "float"
    default_value {
      f: 6
    }
  }
  attr {
    name: "num_bits"
    type: "int"
    default_value {
      i: 8
    }
  }
  attr {
    name: "narrow_range"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "FakeQuantWithMinMaxArgsGradient"
  input_arg {
    name: "gradients"
    type: DT_FLOAT
  }
  input_arg {
    name: "inputs"
    type: DT_FLOAT
  }
  output_arg {
    name: "backprops"
    type: DT_FLOAT
  }
  attr {
    name: "min"
    type: "float"
    default_value {
      f: -6
    }
  }
  attr {
    name: "max"
    type: "float"
    default_value {
      f: 6
    }
  }
  attr {
    name: "num_bits"
    type: "int"
    default_value {
      i: 8
    }
  }
  attr {
    name: "narrow_range"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "FakeQuantWithMinMaxVars"
  input_arg {
    name: "inputs"
    type: DT_FLOAT
  }
  input_arg {
    name: "min"
    type: DT_FLOAT
  }
  input_arg {
    name: "max"
    type: DT_FLOAT
  }
  output_arg {
    name: "outputs"
    type: DT_FLOAT
  }
  attr {
    name: "num_bits"
    type: "int"
    default_value {
      i: 8
    }
  }
  attr {
    name: "narrow_range"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "FakeQuantWithMinMaxVarsGradient"
  input_arg {
    name: "gradients"
    type: DT_FLOAT
  }
  input_arg {
    name: "inputs"
    type: DT_FLOAT
  }
  input_arg {
    name: "min"
    type: DT_FLOAT
  }
  input_arg {
    name: "max"
    type: DT_FLOAT
  }
  output_arg {
    name: "backprops_wrt_input"
    type: DT_FLOAT
  }
  output_arg {
    name: "backprop_wrt_min"
    type: DT_FLOAT
  }
  output_arg {
    name: "backprop_wrt_max"
    type: DT_FLOAT
  }
  attr {
    name: "num_bits"
    type: "int"
    default_value {
      i: 8
    }
  }
  attr {
    name: "narrow_range"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "FakeQuantWithMinMaxVarsPerChannel"
  input_arg {
    name: "inputs"
    type: DT_FLOAT
  }
  input_arg {
    name: "min"
    type: DT_FLOAT
  }
  input_arg {
    name: "max"
    type: DT_FLOAT
  }
  output_arg {
    name: "outputs"
    type: DT_FLOAT
  }
  attr {
    name: "num_bits"
    type: "int"
    default_value {
      i: 8
    }
  }
  attr {
    name: "narrow_range"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "FakeQuantWithMinMaxVarsPerChannelGradient"
  input_arg {
    name: "gradients"
    type: DT_FLOAT
  }
  input_arg {
    name: "inputs"
    type: DT_FLOAT
  }
  input_arg {
    name: "min"
    type: DT_FLOAT
  }
  input_arg {
    name: "max"
    type: DT_FLOAT
  }
  output_arg {
    name: "backprops_wrt_input"
    type: DT_FLOAT
  }
  output_arg {
    name: "backprop_wrt_min"
    type: DT_FLOAT
  }
  output_arg {
    name: "backprop_wrt_max"
    type: DT_FLOAT
  }
  attr {
    name: "num_bits"
    type: "int"
    default_value {
      i: 8
    }
  }
  attr {
    name: "narrow_range"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "FakeQueue"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  output_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  is_stateful: true
}
op {
  name: "Fill"
  input_arg {
    name: "dims"
    type_attr: "index_type"
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "index_type"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "FilterByLastComponentDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "output"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "FilterDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "predicate"
    type: "func"
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "Fingerprint"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "method"
    type: DT_STRING
  }
  output_arg {
    name: "fingerprint"
    type: DT_UINT8
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "FixedLengthRecordDataset"
  input_arg {
    name: "filenames"
    type: DT_STRING
  }
  input_arg {
    name: "header_bytes"
    type: DT_INT64
  }
  input_arg {
    name: "record_bytes"
    type: DT_INT64
  }
  input_arg {
    name: "footer_bytes"
    type: DT_INT64
  }
  input_arg {
    name: "buffer_size"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "FixedLengthRecordDatasetV2"
  input_arg {
    name: "filenames"
    type: DT_STRING
  }
  input_arg {
    name: "header_bytes"
    type: DT_INT64
  }
  input_arg {
    name: "record_bytes"
    type: DT_INT64
  }
  input_arg {
    name: "footer_bytes"
    type: DT_INT64
  }
  input_arg {
    name: "buffer_size"
    type: DT_INT64
  }
  input_arg {
    name: "compression_type"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "FixedLengthRecordReader"
  output_arg {
    name: "reader_handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "header_bytes"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "record_bytes"
    type: "int"
  }
  attr {
    name: "footer_bytes"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "hop_bytes"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  deprecation {
    version: 26
    explanation: "Use FixedLengthRecordReaderV2"
  }
  is_stateful: true
}
op {
  name: "FixedLengthRecordReaderV2"
  output_arg {
    name: "reader_handle"
    type: DT_RESOURCE
  }
  attr {
    name: "header_bytes"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "record_bytes"
    type: "int"
  }
  attr {
    name: "footer_bytes"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "hop_bytes"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "encoding"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "FixedUnigramCandidateSampler"
  input_arg {
    name: "true_classes"
    type: DT_INT64
  }
  output_arg {
    name: "sampled_candidates"
    type: DT_INT64
  }
  output_arg {
    name: "true_expected_count"
    type: DT_FLOAT
  }
  output_arg {
    name: "sampled_expected_count"
    type: DT_FLOAT
  }
  attr {
    name: "num_true"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "num_sampled"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "unique"
    type: "bool"
  }
  attr {
    name: "range_max"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "vocab_file"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "distortion"
    type: "float"
    default_value {
      f: 1
    }
  }
  attr {
    name: "num_reserved_ids"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "num_shards"
    type: "int"
    default_value {
      i: 1
    }
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "shard"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "unigrams"
    type: "list(float)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  is_stateful: true
}
op {
  name: "FlatMapDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "Floor"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "FloorDiv"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_UINT8
        type: DT_INT8
        type: DT_UINT16
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "FloorMod"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT64
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "FlushSummaryWriter"
  input_arg {
    name: "writer"
    type: DT_RESOURCE
  }
  is_stateful: true
}
op {
  name: "For"
  input_arg {
    name: "start"
    type: DT_INT32
  }
  input_arg {
    name: "limit"
    type: DT_INT32
  }
  input_arg {
    name: "delta"
    type: DT_INT32
  }
  input_arg {
    name: "input"
    type_list_attr: "T"
  }
  output_arg {
    name: "output"
    type_list_attr: "T"
  }
  attr {
    name: "T"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "body"
    type: "func"
  }
}
op {
  name: "FractionalAvgPool"
  input_arg {
    name: "value"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  output_arg {
    name: "row_pooling_sequence"
    type: DT_INT64
  }
  output_arg {
    name: "col_pooling_sequence"
    type: DT_INT64
  }
  attr {
    name: "pooling_ratio"
    type: "list(float)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "pseudo_random"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "overlapping"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "deterministic"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "FractionalAvgPoolGrad"
  input_arg {
    name: "orig_input_tensor_shape"
    type: DT_INT64
  }
  input_arg {
    name: "out_backprop"
    type_attr: "T"
  }
  input_arg {
    name: "row_pooling_sequence"
    type: DT_INT64
  }
  input_arg {
    name: "col_pooling_sequence"
    type: DT_INT64
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "overlapping"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "FractionalMaxPool"
  input_arg {
    name: "value"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  output_arg {
    name: "row_pooling_sequence"
    type: DT_INT64
  }
  output_arg {
    name: "col_pooling_sequence"
    type: DT_INT64
  }
  attr {
    name: "pooling_ratio"
    type: "list(float)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "pseudo_random"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "overlapping"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "deterministic"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "FractionalMaxPoolGrad"
  input_arg {
    name: "orig_input"
    type_attr: "T"
  }
  input_arg {
    name: "orig_output"
    type_attr: "T"
  }
  input_arg {
    name: "out_backprop"
    type_attr: "T"
  }
  input_arg {
    name: "row_pooling_sequence"
    type: DT_INT64
  }
  input_arg {
    name: "col_pooling_sequence"
    type: DT_INT64
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "overlapping"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "FresnelCos"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "FresnelSin"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "FusedBatchNorm"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "scale"
    type_attr: "T"
  }
  input_arg {
    name: "offset"
    type_attr: "T"
  }
  input_arg {
    name: "mean"
    type_attr: "T"
  }
  input_arg {
    name: "variance"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "batch_mean"
    type_attr: "T"
  }
  output_arg {
    name: "batch_variance"
    type_attr: "T"
  }
  output_arg {
    name: "reserve_space_1"
    type_attr: "T"
  }
  output_arg {
    name: "reserve_space_2"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "epsilon"
    type: "float"
    default_value {
      f: 0.0001
    }
  }
  attr {
    name: "exponential_avg_factor"
    type: "float"
    default_value {
      f: 1
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "is_training"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "FusedBatchNormGrad"
  input_arg {
    name: "y_backprop"
    type_attr: "T"
  }
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "scale"
    type_attr: "T"
  }
  input_arg {
    name: "reserve_space_1"
    type_attr: "T"
  }
  input_arg {
    name: "reserve_space_2"
    type_attr: "T"
  }
  output_arg {
    name: "x_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "scale_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "offset_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "reserve_space_3"
    type_attr: "T"
  }
  output_arg {
    name: "reserve_space_4"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "epsilon"
    type: "float"
    default_value {
      f: 0.0001
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "is_training"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "FusedBatchNormGradV2"
  input_arg {
    name: "y_backprop"
    type_attr: "T"
  }
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "scale"
    type: DT_FLOAT
  }
  input_arg {
    name: "reserve_space_1"
    type_attr: "U"
  }
  input_arg {
    name: "reserve_space_2"
    type_attr: "U"
  }
  output_arg {
    name: "x_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "scale_backprop"
    type_attr: "U"
  }
  output_arg {
    name: "offset_backprop"
    type_attr: "U"
  }
  output_arg {
    name: "reserve_space_3"
    type_attr: "U"
  }
  output_arg {
    name: "reserve_space_4"
    type_attr: "U"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "U"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "epsilon"
    type: "float"
    default_value {
      f: 0.0001
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "is_training"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "FusedBatchNormGradV3"
  input_arg {
    name: "y_backprop"
    type_attr: "T"
  }
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "scale"
    type: DT_FLOAT
  }
  input_arg {
    name: "reserve_space_1"
    type_attr: "U"
  }
  input_arg {
    name: "reserve_space_2"
    type_attr: "U"
  }
  input_arg {
    name: "reserve_space_3"
    type_attr: "U"
  }
  output_arg {
    name: "x_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "scale_backprop"
    type_attr: "U"
  }
  output_arg {
    name: "offset_backprop"
    type_attr: "U"
  }
  output_arg {
    name: "reserve_space_4"
    type_attr: "U"
  }
  output_arg {
    name: "reserve_space_5"
    type_attr: "U"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "U"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "epsilon"
    type: "float"
    default_value {
      f: 0.0001
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
        s: "NDHWC"
        s: "NCDHW"
      }
    }
  }
  attr {
    name: "is_training"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "FusedBatchNormV2"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "scale"
    type_attr: "U"
  }
  input_arg {
    name: "offset"
    type_attr: "U"
  }
  input_arg {
    name: "mean"
    type_attr: "U"
  }
  input_arg {
    name: "variance"
    type_attr: "U"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "batch_mean"
    type_attr: "U"
  }
  output_arg {
    name: "batch_variance"
    type_attr: "U"
  }
  output_arg {
    name: "reserve_space_1"
    type_attr: "U"
  }
  output_arg {
    name: "reserve_space_2"
    type_attr: "U"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "U"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "epsilon"
    type: "float"
    default_value {
      f: 0.0001
    }
  }
  attr {
    name: "exponential_avg_factor"
    type: "float"
    default_value {
      f: 1
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "is_training"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "FusedBatchNormV3"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "scale"
    type_attr: "U"
  }
  input_arg {
    name: "offset"
    type_attr: "U"
  }
  input_arg {
    name: "mean"
    type_attr: "U"
  }
  input_arg {
    name: "variance"
    type_attr: "U"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "batch_mean"
    type_attr: "U"
  }
  output_arg {
    name: "batch_variance"
    type_attr: "U"
  }
  output_arg {
    name: "reserve_space_1"
    type_attr: "U"
  }
  output_arg {
    name: "reserve_space_2"
    type_attr: "U"
  }
  output_arg {
    name: "reserve_space_3"
    type_attr: "U"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "U"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "epsilon"
    type: "float"
    default_value {
      f: 0.0001
    }
  }
  attr {
    name: "exponential_avg_factor"
    type: "float"
    default_value {
      f: 1
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
        s: "NDHWC"
        s: "NCDHW"
      }
    }
  }
  attr {
    name: "is_training"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "FusedPadConv2D"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "paddings"
    type: DT_INT32
  }
  input_arg {
    name: "filter"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "mode"
    type: "string"
    allowed_values {
      list {
        s: "REFLECT"
        s: "SYMMETRIC"
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
}
op {
  name: "FusedResizeAndPadConv2D"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "size"
    type: DT_INT32
  }
  input_arg {
    name: "paddings"
    type: DT_INT32
  }
  input_arg {
    name: "filter"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "resize_align_corners"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "mode"
    type: "string"
    allowed_values {
      list {
        s: "REFLECT"
        s: "SYMMETRIC"
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
}
op {
  name: "GRUBlockCell"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "h_prev"
    type_attr: "T"
  }
  input_arg {
    name: "w_ru"
    type_attr: "T"
  }
  input_arg {
    name: "w_c"
    type_attr: "T"
  }
  input_arg {
    name: "b_ru"
    type_attr: "T"
  }
  input_arg {
    name: "b_c"
    type_attr: "T"
  }
  output_arg {
    name: "r"
    type_attr: "T"
  }
  output_arg {
    name: "u"
    type_attr: "T"
  }
  output_arg {
    name: "c"
    type_attr: "T"
  }
  output_arg {
    name: "h"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "GRUBlockCellGrad"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "h_prev"
    type_attr: "T"
  }
  input_arg {
    name: "w_ru"
    type_attr: "T"
  }
  input_arg {
    name: "w_c"
    type_attr: "T"
  }
  input_arg {
    name: "b_ru"
    type_attr: "T"
  }
  input_arg {
    name: "b_c"
    type_attr: "T"
  }
  input_arg {
    name: "r"
    type_attr: "T"
  }
  input_arg {
    name: "u"
    type_attr: "T"
  }
  input_arg {
    name: "c"
    type_attr: "T"
  }
  input_arg {
    name: "d_h"
    type_attr: "T"
  }
  output_arg {
    name: "d_x"
    type_attr: "T"
  }
  output_arg {
    name: "d_h_prev"
    type_attr: "T"
  }
  output_arg {
    name: "d_c_bar"
    type_attr: "T"
  }
  output_arg {
    name: "d_r_bar_u_bar"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "Gather"
  input_arg {
    name: "params"
    type_attr: "Tparams"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  output_arg {
    name: "output"
    type_attr: "Tparams"
  }
  attr {
    name: "validate_indices"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "Tparams"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "GatherNd"
  input_arg {
    name: "params"
    type_attr: "Tparams"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  output_arg {
    name: "output"
    type_attr: "Tparams"
  }
  attr {
    name: "Tparams"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "GatherV2"
  input_arg {
    name: "params"
    type_attr: "Tparams"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "axis"
    type_attr: "Taxis"
  }
  output_arg {
    name: "output"
    type_attr: "Tparams"
  }
  attr {
    name: "batch_dims"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "Tparams"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Taxis"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "GenerateBoundingBoxProposals"
  input_arg {
    name: "scores"
    type: DT_FLOAT
  }
  input_arg {
    name: "bbox_deltas"
    type: DT_FLOAT
  }
  input_arg {
    name: "image_info"
    type: DT_FLOAT
  }
  input_arg {
    name: "anchors"
    type: DT_FLOAT
  }
  input_arg {
    name: "nms_threshold"
    type: DT_FLOAT
  }
  input_arg {
    name: "pre_nms_topn"
    type: DT_INT32
  }
  input_arg {
    name: "min_size"
    type: DT_FLOAT
  }
  output_arg {
    name: "rois"
    type: DT_FLOAT
  }
  output_arg {
    name: "roi_probabilities"
    type: DT_FLOAT
  }
  attr {
    name: "post_nms_topn"
    type: "int"
    default_value {
      i: 300
    }
  }
}
op {
  name: "GenerateVocabRemapping"
  input_arg {
    name: "new_vocab_file"
    type: DT_STRING
  }
  input_arg {
    name: "old_vocab_file"
    type: DT_STRING
  }
  output_arg {
    name: "remapping"
    type: DT_INT64
  }
  output_arg {
    name: "num_present"
    type: DT_INT32
  }
  attr {
    name: "new_vocab_offset"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "num_new_vocab"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "old_vocab_size"
    type: "int"
    default_value {
      i: -1
    }
    has_minimum: true
    minimum: -1
  }
}
op {
  name: "GeneratorDataset"
  input_arg {
    name: "init_func_other_args"
    type_list_attr: "Tinit_func_args"
  }
  input_arg {
    name: "next_func_other_args"
    type_list_attr: "Tnext_func_args"
  }
  input_arg {
    name: "finalize_func_other_args"
    type_list_attr: "Tfinalize_func_args"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "init_func"
    type: "func"
  }
  attr {
    name: "next_func"
    type: "func"
  }
  attr {
    name: "finalize_func"
    type: "func"
  }
  attr {
    name: "Tinit_func_args"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tnext_func_args"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tfinalize_func_args"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "GetSessionHandle"
  input_arg {
    name: "value"
    type_attr: "T"
  }
  output_arg {
    name: "handle"
    type: DT_STRING
  }
  attr {
    name: "T"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "GetSessionHandleV2"
  input_arg {
    name: "value"
    type_attr: "T"
  }
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "T"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "GetSessionTensor"
  input_arg {
    name: "handle"
    type: DT_STRING
  }
  output_arg {
    name: "value"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "Greater"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type: DT_BOOL
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "GreaterEqual"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type: DT_BOOL
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "GroupByReducerDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "key_func_other_arguments"
    type_list_attr: "Tkey_func_other_arguments"
  }
  input_arg {
    name: "init_func_other_arguments"
    type_list_attr: "Tinit_func_other_arguments"
  }
  input_arg {
    name: "reduce_func_other_arguments"
    type_list_attr: "Treduce_func_other_arguments"
  }
  input_arg {
    name: "finalize_func_other_arguments"
    type_list_attr: "Tfinalize_func_other_arguments"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "key_func"
    type: "func"
  }
  attr {
    name: "init_func"
    type: "func"
  }
  attr {
    name: "reduce_func"
    type: "func"
  }
  attr {
    name: "finalize_func"
    type: "func"
  }
  attr {
    name: "Tkey_func_other_arguments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tinit_func_other_arguments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Treduce_func_other_arguments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tfinalize_func_other_arguments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "GroupByWindowDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "key_func_other_arguments"
    type_list_attr: "Tkey_func_other_arguments"
  }
  input_arg {
    name: "reduce_func_other_arguments"
    type_list_attr: "Treduce_func_other_arguments"
  }
  input_arg {
    name: "window_size_func_other_arguments"
    type_list_attr: "Twindow_size_func_other_arguments"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "key_func"
    type: "func"
  }
  attr {
    name: "reduce_func"
    type: "func"
  }
  attr {
    name: "window_size_func"
    type: "func"
  }
  attr {
    name: "Tkey_func_other_arguments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Treduce_func_other_arguments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Twindow_size_func_other_arguments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "GuaranteeConst"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "HSVToRGB"
  input_arg {
    name: "images"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "HashTable"
  output_arg {
    name: "table_handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "use_node_name_sharing"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "key_dtype"
    type: "type"
  }
  attr {
    name: "value_dtype"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "HashTableV2"
  output_arg {
    name: "table_handle"
    type: DT_RESOURCE
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "use_node_name_sharing"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "key_dtype"
    type: "type"
  }
  attr {
    name: "value_dtype"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "HistogramFixedWidth"
  input_arg {
    name: "values"
    type_attr: "T"
  }
  input_arg {
    name: "value_range"
    type_attr: "T"
  }
  input_arg {
    name: "nbins"
    type: DT_INT32
  }
  output_arg {
    name: "out"
    type_attr: "dtype"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "HistogramSummary"
  input_arg {
    name: "tag"
    type: DT_STRING
  }
  input_arg {
    name: "values"
    type_attr: "T"
  }
  output_arg {
    name: "summary"
    type: DT_STRING
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "HostConst"
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "value"
    type: "tensor"
  }
  attr {
    name: "dtype"
    type: "type"
  }
}
op {
  name: "IFFT"
  input_arg {
    name: "input"
    type_attr: "Tcomplex"
  }
  output_arg {
    name: "output"
    type_attr: "Tcomplex"
  }
  attr {
    name: "Tcomplex"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "IFFT2D"
  input_arg {
    name: "input"
    type_attr: "Tcomplex"
  }
  output_arg {
    name: "output"
    type_attr: "Tcomplex"
  }
  attr {
    name: "Tcomplex"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "IFFT3D"
  input_arg {
    name: "input"
    type_attr: "Tcomplex"
  }
  output_arg {
    name: "output"
    type_attr: "Tcomplex"
  }
  attr {
    name: "Tcomplex"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "IRFFT"
  input_arg {
    name: "input"
    type_attr: "Tcomplex"
  }
  input_arg {
    name: "fft_length"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "Treal"
  }
  attr {
    name: "Treal"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tcomplex"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "IRFFT2D"
  input_arg {
    name: "input"
    type_attr: "Tcomplex"
  }
  input_arg {
    name: "fft_length"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "Treal"
  }
  attr {
    name: "Treal"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tcomplex"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "IRFFT3D"
  input_arg {
    name: "input"
    type_attr: "Tcomplex"
  }
  input_arg {
    name: "fft_length"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "Treal"
  }
  attr {
    name: "Treal"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tcomplex"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Identity"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "IdentityN"
  input_arg {
    name: "input"
    type_list_attr: "T"
  }
  output_arg {
    name: "output"
    type_list_attr: "T"
  }
  attr {
    name: "T"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "IdentityReader"
  output_arg {
    name: "reader_handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  deprecation {
    version: 26
    explanation: "Use IdentityReaderV2"
  }
  is_stateful: true
}
op {
  name: "IdentityReaderV2"
  output_arg {
    name: "reader_handle"
    type: DT_RESOURCE
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "If"
  input_arg {
    name: "cond"
    type_attr: "Tcond"
  }
  input_arg {
    name: "input"
    type_list_attr: "Tin"
  }
  output_arg {
    name: "output"
    type_list_attr: "Tout"
  }
  attr {
    name: "Tcond"
    type: "type"
  }
  attr {
    name: "Tin"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tout"



  }
  is_stateful: true
}
op {
  name: "Igamma"
  input_arg {
    name: "a"
    type_attr: "T"
  }
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "IgammaGradA"
  input_arg {
    name: "a"
    type_attr: "T"
  }
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "Igammac"
  input_arg {
    name: "a"
    type_attr: "T"
  }
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "IgnoreErrorsDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "log_warning"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "Imag"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "Tout"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
  attr {
    name: "Tout"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "ImageProjectiveTransformV2"
  input_arg {
    name: "images"
    type_attr: "dtype"
  }
  input_arg {
    name: "transforms"
    type: DT_FLOAT
  }
  input_arg {
    name: "output_shape"
    type: DT_INT32
  }
  output_arg {
    name: "transformed_images"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_INT32
        type: DT_INT64
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "interpolation"
    type: "string"
  }
  attr {
    name: "fill_mode"
    type: "string"
    default_value {
      s: "CONSTANT"
    }
  }
}
op {
  name: "ImageProjectiveTransformV3"
  input_arg {
    name: "images"
    type_attr: "dtype"
  }
  input_arg {
    name: "transforms"
    type: DT_FLOAT
  }
  input_arg {
    name: "output_shape"
    type: DT_INT32
  }
  input_arg {
    name: "fill_value"
    type: DT_FLOAT
  }
  output_arg {
    name: "transformed_images"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_INT32
        type: DT_INT64
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "interpolation"
    type: "string"
  }
  attr {
    name: "fill_mode"
    type: "string"
    default_value {
      s: "CONSTANT"
    }
  }
}
op {
  name: "ImageSummary"
  input_arg {
    name: "tag"
    type: DT_STRING
  }
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  output_arg {
    name: "summary"
    type: DT_STRING
  }
  attr {
    name: "max_images"
    type: "int"
    default_value {
      i: 3
    }
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_FLOAT
        type: DT_HALF
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "bad_color"
    type: "tensor"
    default_value {
      tensor {
        dtype: DT_UINT8
        tensor_shape {
          dim {
            size: 4
          }
        }
        int_val: 255
        int_val: 0
        int_val: 0
        int_val: 255
      }
    }
  }
}
op {
  name: "ImmutableConst"
  output_arg {
    name: "tensor"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "shape"
    type: "shape"
  }
  attr {
    name: "memory_region_name"
    type: "string"
  }
}
op {
  name: "ImportEvent"
  input_arg {
    name: "writer"
    type: DT_RESOURCE
  }
  input_arg {
    name: "event"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "InTopK"
  input_arg {
    name: "predictions"
    type: DT_FLOAT
  }
  input_arg {
    name: "targets"
    type_attr: "T"
  }
  output_arg {
    name: "precision"
    type: DT_BOOL
  }
  attr {
    name: "k"
    type: "int"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "InTopKV2"
  input_arg {
    name: "predictions"
    type: DT_FLOAT
  }
  input_arg {
    name: "targets"
    type_attr: "T"
  }
  input_arg {
    name: "k"
    type_attr: "T"
  }
  output_arg {
    name: "precision"
    type: DT_BOOL
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "InfeedDequeue"
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "shape"
    type: "shape"
  }
  is_stateful: true
}
op {
  name: "InfeedDequeueTuple"
  output_arg {
    name: "outputs"
    type_list_attr: "dtypes"
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "shapes"
    type: "list(shape)"
  }
  is_stateful: true
}
op {
  name: "InfeedEnqueue"
  input_arg {
    name: "input"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "shape"
    type: "shape"
    default_value {
      shape {
      }
    }
  }
  attr {
    name: "layout"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "device_ordinal"
    type: "int"
    default_value {
      i: -1
    }
  }
  is_stateful: true
}
op {
  name: "InfeedEnqueuePrelinearizedBuffer"
  input_arg {
    name: "input"
    type: DT_VARIANT
  }
  attr {
    name: "device_ordinal"
    type: "int"
    default_value {
      i: -1
    }
  }
}
op {
  name: "InfeedEnqueueTuple"
  input_arg {
    name: "inputs"
    type_list_attr: "dtypes"
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "shapes"
    type: "list(shape)"
  }
  attr {
    name: "layouts"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "device_ordinal"
    type: "int"
    default_value {
      i: -1
    }
  }
  is_stateful: true
}
op {
  name: "InitializeTable"
  input_arg {
    name: "table_handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "keys"
    type_attr: "Tkey"
  }
  input_arg {
    name: "values"
    type_attr: "Tval"
  }
  attr {
    name: "Tkey"
    type: "type"
  }
  attr {
    name: "Tval"
    type: "type"
  }
}
op {
  name: "InitializeTableFromDataset"
  input_arg {
    name: "table_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "dataset"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "InitializeTableFromTextFile"
  input_arg {
    name: "table_handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "filename"
    type: DT_STRING
  }
  attr {
    name: "key_index"
    type: "int"
    has_minimum: true
    minimum: -2
  }
  attr {
    name: "value_index"
    type: "int"
    has_minimum: true
    minimum: -2
  }
  attr {
    name: "vocab_size"
    type: "int"
    default_value {
      i: -1
    }
    has_minimum: true
    minimum: -1
  }
  attr {
    name: "delimiter"
    type: "string"
    default_value {
      s: "\t"
    }
  }
}
op {
  name: "InitializeTableFromTextFileV2"
  input_arg {
    name: "table_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "filename"
    type: DT_STRING
  }
  attr {
    name: "key_index"
    type: "int"
    has_minimum: true
    minimum: -2
  }
  attr {
    name: "value_index"
    type: "int"
    has_minimum: true
    minimum: -2
  }
  attr {
    name: "vocab_size"
    type: "int"
    default_value {
      i: -1
    }
    has_minimum: true
    minimum: -1
  }
  attr {
    name: "delimiter"
    type: "string"
    default_value {
      s: "\t"
    }
  }
  is_stateful: true
}
op {
  name: "InitializeTableV2"
  input_arg {
    name: "table_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "keys"
    type_attr: "Tkey"
  }
  input_arg {
    name: "values"
    type_attr: "Tval"
  }
  attr {
    name: "Tkey"
    type: "type"
  }
  attr {
    name: "Tval"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "InplaceAdd"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "i"
    type: DT_INT32
  }
  input_arg {
    name: "v"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "InplaceSub"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "i"
    type: DT_INT32
  }
  input_arg {
    name: "v"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "InplaceUpdate"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "i"
    type: DT_INT32
  }
  input_arg {
    name: "v"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "InterleaveDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  input_arg {
    name: "cycle_length"
    type: DT_INT64
  }
  input_arg {
    name: "block_length"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "Inv"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "InvGrad"
  input_arg {
    name: "y"
    type_attr: "T"
  }
  input_arg {
    name: "dy"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Invert"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT8
        type: DT_UINT16
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "InvertPermutation"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "IsBoostedTreesEnsembleInitialized"
  input_arg {
    name: "tree_ensemble_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "is_initialized"
    type: DT_BOOL
  }
  is_stateful: true
}
op {
  name: "IsBoostedTreesQuantileStreamResourceInitialized"
  input_arg {
    name: "quantile_stream_resource_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "is_initialized"
    type: DT_BOOL
  }
  is_stateful: true
}
op {
  name: "IsFinite"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type: DT_BOOL
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "IsInf"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type: DT_BOOL
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "IsNan"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type: DT_BOOL
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "IsVariableInitialized"
  input_arg {
    name: "ref"
    type_attr: "dtype"
    is_ref: true
  }
  output_arg {
    name: "is_initialized"
    type: DT_BOOL
  }
  attr {
    name: "dtype"
    type: "type"
  }
  allows_uninitialized_input: true
}
op {
  name: "IsotonicRegression"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "output_dtype"
  }
  output_arg {
    name: "segments"
    type: DT_INT32
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "output_dtype"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "Iterator"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "shared_name"
    type: "string"
  }
  attr {
    name: "container"
    type: "string"
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "IteratorFromStringHandle"
  input_arg {
    name: "string_handle"
    type: DT_STRING
  }
  output_arg {
    name: "resource_handle"
    type: DT_RESOURCE
  }
  attr {
    name: "output_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "IteratorFromStringHandleV2"
  input_arg {
    name: "string_handle"
    type: DT_STRING
  }
  output_arg {
    name: "resource_handle"
    type: DT_RESOURCE
  }
  attr {
    name: "output_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "IteratorGetDevice"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  output_arg {
    name: "device"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "IteratorGetNext"
  input_arg {
    name: "iterator"
    type: DT_RESOURCE
  }
  output_arg {
    name: "components"
    type_list_attr: "output_types"
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "IteratorGetNextAsOptional"
  input_arg {
    name: "iterator"
    type: DT_RESOURCE
  }
  output_arg {
    name: "optional"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "IteratorGetNextSync"
  input_arg {
    name: "iterator"
    type: DT_RESOURCE
  }
  output_arg {
    name: "components"
    type_list_attr: "output_types"
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "IteratorToStringHandle"
  input_arg {
    name: "resource_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "string_handle"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "IteratorV2"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "shared_name"
    type: "string"
  }
  attr {
    name: "container"
    type: "string"
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "KMC2ChainInitialization"
  input_arg {
    name: "distances"
    type: DT_FLOAT
  }
  input_arg {
    name: "seed"
    type: DT_INT64
  }
  output_arg {
    name: "index"
    type: DT_INT64
  }
}
op {
  name: "KmeansPlusPlusInitialization"
  input_arg {
    name: "points"
    type: DT_FLOAT
  }
  input_arg {
    name: "num_to_sample"
    type: DT_INT64
  }
  input_arg {
    name: "seed"
    type: DT_INT64
  }
  input_arg {
    name: "num_retries_per_sample"
    type: DT_INT64
  }
  output_arg {
    name: "samples"
    type: DT_FLOAT
  }
}
op {
  name: "KthOrderStatistic"
  input_arg {
    name: "input"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type: DT_FLOAT
  }
  attr {
    name: "k"
    type: "int"
  }
}
op {
  name: "L2Loss"
  input_arg {
    name: "t"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "LMDBDataset"
  input_arg {
    name: "filenames"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "LMDBReader"
  output_arg {
    name: "reader_handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LRN"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "depth_radius"
    type: "int"
    default_value {
      i: 5
    }
  }
  attr {
    name: "bias"
    type: "float"
    default_value {
      f: 1
    }
  }
  attr {
    name: "alpha"
    type: "float"
    default_value {
      f: 1
    }
  }
  attr {
    name: "beta"
    type: "float"
    default_value {
      f: 0.5
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "LRNGrad"
  input_arg {
    name: "input_grads"
    type_attr: "T"
  }
  input_arg {
    name: "input_image"
    type_attr: "T"
  }
  input_arg {
    name: "output_image"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "depth_radius"
    type: "int"
    default_value {
      i: 5
    }
  }
  attr {
    name: "bias"
    type: "float"
    default_value {
      f: 1
    }
  }
  attr {
    name: "alpha"
    type: "float"
    default_value {
      f: 1
    }
  }
  attr {
    name: "beta"
    type: "float"
    default_value {
      f: 0.5
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "LSTMBlockCell"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "cs_prev"
    type_attr: "T"
  }
  input_arg {
    name: "h_prev"
    type_attr: "T"
  }
  input_arg {
    name: "w"
    type_attr: "T"
  }
  input_arg {
    name: "wci"
    type_attr: "T"
  }
  input_arg {
    name: "wcf"
    type_attr: "T"
  }
  input_arg {
    name: "wco"
    type_attr: "T"
  }
  input_arg {
    name: "b"
    type_attr: "T"
  }
  output_arg {
    name: "i"
    type_attr: "T"
  }
  output_arg {
    name: "cs"
    type_attr: "T"
  }
  output_arg {
    name: "f"
    type_attr: "T"
  }
  output_arg {
    name: "o"
    type_attr: "T"
  }
  output_arg {
    name: "ci"
    type_attr: "T"
  }
  output_arg {
    name: "co"
    type_attr: "T"
  }
  output_arg {
    name: "h"
    type_attr: "T"
  }
  attr {
    name: "forget_bias"
    type: "float"
    default_value {
      f: 1
    }
  }
  attr {
    name: "cell_clip"
    type: "float"
    default_value {
      f: 3
    }
  }
  attr {
    name: "use_peephole"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "LSTMBlockCellGrad"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "cs_prev"
    type_attr: "T"
  }
  input_arg {
    name: "h_prev"
    type_attr: "T"
  }
  input_arg {
    name: "w"
    type_attr: "T"
  }
  input_arg {
    name: "wci"
    type_attr: "T"
  }
  input_arg {
    name: "wcf"
    type_attr: "T"
  }
  input_arg {
    name: "wco"
    type_attr: "T"
  }
  input_arg {
    name: "b"
    type_attr: "T"
  }
  input_arg {
    name: "i"
    type_attr: "T"
  }
  input_arg {
    name: "cs"
    type_attr: "T"
  }
  input_arg {
    name: "f"
    type_attr: "T"
  }
  input_arg {
    name: "o"
    type_attr: "T"
  }
  input_arg {
    name: "ci"
    type_attr: "T"
  }
  input_arg {
    name: "co"
    type_attr: "T"
  }
  input_arg {
    name: "cs_grad"
    type_attr: "T"
  }
  input_arg {
    name: "h_grad"
    type_attr: "T"
  }
  output_arg {
    name: "cs_prev_grad"
    type_attr: "T"
  }
  output_arg {
    name: "dicfo"
    type_attr: "T"
  }
  output_arg {
    name: "wci_grad"
    type_attr: "T"
  }
  output_arg {
    name: "wcf_grad"
    type_attr: "T"
  }
  output_arg {
    name: "wco_grad"
    type_attr: "T"
  }
  attr {
    name: "use_peephole"
    type: "bool"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "LatencyStatsDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "tag"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "LeakyRelu"
  input_arg {
    name: "features"
    type_attr: "T"
  }
  output_arg {
    name: "activations"
    type_attr: "T"
  }
  attr {
    name: "alpha"
    type: "float"
    default_value {
      f: 0.2
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "LeakyReluGrad"
  input_arg {
    name: "gradients"
    type_attr: "T"
  }
  input_arg {
    name: "features"
    type_attr: "T"
  }
  output_arg {
    name: "backprops"
    type_attr: "T"
  }
  attr {
    name: "alpha"
    type: "float"
    default_value {
      f: 0.2
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "LearnedUnigramCandidateSampler"
  input_arg {
    name: "true_classes"
    type: DT_INT64
  }
  output_arg {
    name: "sampled_candidates"
    type: DT_INT64
  }
  output_arg {
    name: "true_expected_count"
    type: DT_FLOAT
  }
  output_arg {
    name: "sampled_expected_count"
    type: DT_FLOAT
  }
  attr {
    name: "num_true"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "num_sampled"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "unique"
    type: "bool"
  }
  attr {
    name: "range_max"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  is_stateful: true
}
op {
  name: "LeftShift"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT8
        type: DT_UINT16
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "LegacyParallelInterleaveDatasetV2"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  input_arg {
    name: "cycle_length"
    type: DT_INT64
  }
  input_arg {
    name: "block_length"
    type: DT_INT64
  }
  input_arg {
    name: "buffer_output_elements"
    type: DT_INT64
  }
  input_arg {
    name: "prefetch_input_elements"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "deterministic"
    type: "string"
    default_value {
      s: "default"
    }
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "Less"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type: DT_BOOL
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "LessEqual"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type: DT_BOOL
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "Lgamma"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "LinSpace"
  input_arg {
    name: "start"
    type_attr: "T"
  }
  input_arg {
    name: "stop"
    type_attr: "T"
  }
  input_arg {
    name: "num"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "ListDiff"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
  }
  output_arg {
    name: "idx"
    type_attr: "out_idx"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "out_idx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "LoadAndRemapMatrix"
  input_arg {
    name: "ckpt_path"
    type: DT_STRING
  }
  input_arg {
    name: "old_tensor_name"
    type: DT_STRING
  }
  input_arg {
    name: "row_remapping"
    type: DT_INT64
  }
  input_arg {
    name: "col_remapping"
    type: DT_INT64
  }
  input_arg {
    name: "initializing_values"
    type: DT_FLOAT
  }
  output_arg {
    name: "output_matrix"
    type: DT_FLOAT
  }
  attr {
    name: "num_rows"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "num_cols"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "max_rows_in_memory"
    type: "int"
    default_value {
      i: -1
    }
  }
  is_stateful: true
}
op {
  name: "LoadDataset"
  input_arg {
    name: "path"
    type: DT_STRING
  }
  input_arg {
    name: "reader_func_other_args"
    type_list_attr: "Treader_func_args"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "compression"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "reader_func"
    type: "func"
  }
  attr {
    name: "Treader_func_args"
    type: "list(type)"
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingADAMParameters"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "momenta"
    type: DT_FLOAT
  }
  input_arg {
    name: "velocities"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingADAMParametersGradAccumDebug"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "momenta"
    type: DT_FLOAT
  }
  input_arg {
    name: "velocities"
    type: DT_FLOAT
  }
  input_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingAdadeltaParameters"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  input_arg {
    name: "updates"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingAdadeltaParametersGradAccumDebug"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  input_arg {
    name: "updates"
    type: DT_FLOAT
  }
  input_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingAdagradParameters"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingAdagradParametersGradAccumDebug"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  input_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingCenteredRMSPropParameters"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "ms"
    type: DT_FLOAT
  }
  input_arg {
    name: "mom"
    type: DT_FLOAT
  }
  input_arg {
    name: "mg"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingFTRLParameters"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  input_arg {
    name: "linears"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingFTRLParametersGradAccumDebug"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  input_arg {
    name: "linears"
    type: DT_FLOAT
  }
  input_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingFrequencyEstimatorParameters"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "last_hit_step"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingFrequencyEstimatorParametersGradAccumDebug"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "last_hit_step"
    type: DT_FLOAT
  }
  input_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingMDLAdagradLightParameters"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  input_arg {
    name: "weights"
    type: DT_FLOAT
  }
  input_arg {
    name: "benefits"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingMomentumParameters"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "momenta"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingMomentumParametersGradAccumDebug"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "momenta"
    type: DT_FLOAT
  }
  input_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingProximalAdagradParameters"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  input_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingProximalYogiParameters"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "v"
    type: DT_FLOAT
  }
  input_arg {
    name: "m"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingProximalYogiParametersGradAccumDebug"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "v"
    type: DT_FLOAT
  }
  input_arg {
    name: "m"
    type: DT_FLOAT
  }
  input_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingRMSPropParameters"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "ms"
    type: DT_FLOAT
  }
  input_arg {
    name: "mom"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingRMSPropParametersGradAccumDebug"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "ms"
    type: DT_FLOAT
  }
  input_arg {
    name: "mom"
    type: DT_FLOAT
  }
  input_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingStochasticGradientDescentParameters"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "LoadTPUEmbeddingStochasticGradientDescentParametersGradAccumDebug"
  input_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  input_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "Log"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Log1p"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "LogMatrixDeterminant"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "sign"
    type_attr: "T"
  }
  output_arg {
    name: "log_abs_determinant"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "LogSoftmax"
  input_arg {
    name: "logits"
    type_attr: "T"
  }
  output_arg {
    name: "logsoftmax"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "LogUniformCandidateSampler"
  input_arg {
    name: "true_classes"
    type: DT_INT64
  }
  output_arg {
    name: "sampled_candidates"
    type: DT_INT64
  }
  output_arg {
    name: "true_expected_count"
    type: DT_FLOAT
  }
  output_arg {
    name: "sampled_expected_count"
    type: DT_FLOAT
  }
  attr {
    name: "num_true"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "num_sampled"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "unique"
    type: "bool"
  }
  attr {
    name: "range_max"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  is_stateful: true
}
op {
  name: "LogicalAnd"
  input_arg {
    name: "x"
    type: DT_BOOL
  }
  input_arg {
    name: "y"
    type: DT_BOOL
  }
  output_arg {
    name: "z"
    type: DT_BOOL
  }
  is_commutative: true
}
op {
  name: "LogicalNot"
  input_arg {
    name: "x"
    type: DT_BOOL
  }
  output_arg {
    name: "y"
    type: DT_BOOL
  }
}
op {
  name: "LogicalOr"
  input_arg {
    name: "x"
    type: DT_BOOL
  }
  input_arg {
    name: "y"
    type: DT_BOOL
  }
  output_arg {
    name: "z"
    type: DT_BOOL
  }
  is_commutative: true
}
op {
  name: "LookupTableExport"
  input_arg {
    name: "table_handle"
    type: DT_STRING
    is_ref: true
  }
  output_arg {
    name: "keys"
    type_attr: "Tkeys"
  }
  output_arg {
    name: "values"
    type_attr: "Tvalues"
  }
  attr {
    name: "Tkeys"
    type: "type"
  }
  attr {
    name: "Tvalues"
    type: "type"
  }
}
op {
  name: "LookupTableExportV2"
  input_arg {
    name: "table_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "keys"
    type_attr: "Tkeys"
  }
  output_arg {
    name: "values"
    type_attr: "Tvalues"
  }
  attr {
    name: "Tkeys"
    type: "type"
  }
  attr {
    name: "Tvalues"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "LookupTableFind"
  input_arg {
    name: "table_handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "keys"
    type_attr: "Tin"
  }
  input_arg {
    name: "default_value"
    type_attr: "Tout"
  }
  output_arg {
    name: "values"
    type_attr: "Tout"
  }
  attr {
    name: "Tin"
    type: "type"
  }
  attr {
    name: "Tout"
    type: "type"
  }
}
op {
  name: "LookupTableFindV2"
  input_arg {
    name: "table_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "keys"
    type_attr: "Tin"
  }
  input_arg {
    name: "default_value"
    type_attr: "Tout"
  }
  output_arg {
    name: "values"
    type_attr: "Tout"
  }
  attr {
    name: "Tin"
    type: "type"
  }
  attr {
    name: "Tout"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "LookupTableImport"
  input_arg {
    name: "table_handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "keys"
    type_attr: "Tin"
  }
  input_arg {
    name: "values"
    type_attr: "Tout"
  }
  attr {
    name: "Tin"
    type: "type"
  }
  attr {
    name: "Tout"
    type: "type"
  }
}
op {
  name: "LookupTableImportV2"
  input_arg {
    name: "table_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "keys"
    type_attr: "Tin"
  }
  input_arg {
    name: "values"
    type_attr: "Tout"
  }
  attr {
    name: "Tin"
    type: "type"
  }
  attr {
    name: "Tout"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "LookupTableInsert"
  input_arg {
    name: "table_handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "keys"
    type_attr: "Tin"
  }
  input_arg {
    name: "values"
    type_attr: "Tout"
  }
  attr {
    name: "Tin"
    type: "type"
  }
  attr {
    name: "Tout"
    type: "type"
  }
}
op {
  name: "LookupTableInsertV2"
  input_arg {
    name: "table_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "keys"
    type_attr: "Tin"
  }
  input_arg {
    name: "values"
    type_attr: "Tout"
  }
  attr {
    name: "Tin"
    type: "type"
  }
  attr {
    name: "Tout"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "LookupTableRemoveV2"
  input_arg {
    name: "table_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "keys"
    type_attr: "Tin"
  }
  attr {
    name: "Tin"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "LookupTableSize"
  input_arg {
    name: "table_handle"
    type: DT_STRING
    is_ref: true
  }
  output_arg {
    name: "size"
    type: DT_INT64
  }
}
op {
  name: "LookupTableSizeV2"
  input_arg {
    name: "table_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "size"
    type: DT_INT64
  }
  is_stateful: true
}
op {
  name: "LoopCond"
  input_arg {
    name: "input"
    type: DT_BOOL
  }
  output_arg {
    name: "output"
    type: DT_BOOL
  }
}
op {
  name: "LowerBound"
  input_arg {
    name: "sorted_inputs"
    type_attr: "T"
  }
  input_arg {
    name: "values"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "Lu"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "lu"
    type_attr: "T"
  }
  output_arg {
    name: "p"
    type_attr: "output_idx_type"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
        type: DT_HALF
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
  attr {
    name: "output_idx_type"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "MakeIterator"
  input_arg {
    name: "dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "iterator"
    type: DT_RESOURCE
  }
  is_stateful: true
}
op {
  name: "MakeUnique"
  input_arg {
    name: "input"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type: DT_FLOAT
  }
}
op {
  name: "MapAndBatchDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  input_arg {
    name: "batch_size"
    type: DT_INT64
  }
  input_arg {
    name: "num_parallel_calls"
    type: DT_INT64
  }
  input_arg {
    name: "drop_remainder"
    type: DT_BOOL
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "preserve_cardinality"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "MapClear"
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "MapDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "use_inter_op_parallelism"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "preserve_cardinality"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "MapDefun"
  input_arg {
    name: "arguments"
    type_list_attr: "Targuments"
  }
  input_arg {
    name: "captured_inputs"
    type_list_attr: "Tcaptured"
  }
  output_arg {
    name: "output"
    type_list_attr: "output_types"
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "Tcaptured"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "max_intra_op_parallelism"
    type: "int"
    default_value {
      i: 1
    }
  }
}
op {
  name: "MapIncompleteSize"
  output_arg {
    name: "size"
    type: DT_INT32
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "MapPeek"
  input_arg {
    name: "key"
    type: DT_INT64
  }
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  output_arg {
    name: "values"
    type_list_attr: "dtypes"
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "MapSize"
  output_arg {
    name: "size"
    type: DT_INT32
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "MapStage"
  input_arg {
    name: "key"
    type: DT_INT64
  }
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  input_arg {
    name: "values"
    type_list_attr: "fake_dtypes"
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
  }
  attr {
    name: "fake_dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "MapUnstage"
  input_arg {
    name: "key"
    type: DT_INT64
  }
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  output_arg {
    name: "values"
    type_list_attr: "dtypes"
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "MapUnstageNoKey"
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  output_arg {
    name: "key"
    type: DT_INT64
  }
  output_arg {
    name: "values"
    type_list_attr: "dtypes"
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "MatMul"
  input_arg {
    name: "a"
    type_attr: "T"
  }
  input_arg {
    name: "b"
    type_attr: "T"
  }
  output_arg {
    name: "product"
    type_attr: "T"
  }
  attr {
    name: "transpose_a"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "transpose_b"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "MatchingFiles"
  input_arg {
    name: "pattern"
    type: DT_STRING
  }
  output_arg {
    name: "filenames"
    type: DT_STRING
  }
}
op {
  name: "MatchingFilesDataset"
  input_arg {
    name: "patterns"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "MatrixBandPart"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "num_lower"
    type_attr: "Tindex"
  }
  input_arg {
    name: "num_upper"
    type_attr: "Tindex"
  }
  output_arg {
    name: "band"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindex"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "MatrixDeterminant"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "MatrixDiag"
  input_arg {
    name: "diagonal"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "MatrixDiagPart"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "diagonal"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "MatrixDiagPartV2"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "k"
    type: DT_INT32
  }
  input_arg {
    name: "padding_value"
    type_attr: "T"
  }
  output_arg {
    name: "diagonal"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "MatrixDiagPartV3"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "k"
    type: DT_INT32
  }
  input_arg {
    name: "padding_value"
    type_attr: "T"
  }
  output_arg {
    name: "diagonal"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "align"
    type: "string"
    default_value {
      s: "RIGHT_LEFT"
    }
    allowed_values {
      list {
        s: "LEFT_RIGHT"
        s: "RIGHT_LEFT"
        s: "LEFT_LEFT"
        s: "RIGHT_RIGHT"
      }
    }
  }
}
op {
  name: "MatrixDiagV2"
  input_arg {
    name: "diagonal"
    type_attr: "T"
  }
  input_arg {
    name: "k"
    type: DT_INT32
  }
  input_arg {
    name: "num_rows"
    type: DT_INT32
  }
  input_arg {
    name: "num_cols"
    type: DT_INT32
  }
  input_arg {
    name: "padding_value"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "MatrixDiagV3"
  input_arg {
    name: "diagonal"
    type_attr: "T"
  }
  input_arg {
    name: "k"
    type: DT_INT32
  }
  input_arg {
    name: "num_rows"
    type: DT_INT32
  }
  input_arg {
    name: "num_cols"
    type: DT_INT32
  }
  input_arg {
    name: "padding_value"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "align"
    type: "string"
    default_value {
      s: "RIGHT_LEFT"
    }
    allowed_values {
      list {
        s: "LEFT_RIGHT"
        s: "RIGHT_LEFT"
        s: "LEFT_LEFT"
        s: "RIGHT_RIGHT"
      }
    }
  }
}
op {
  name: "MatrixExponential"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
        type: DT_HALF
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
  deprecation {
    version: 27
    explanation: "Use Python implementation tf.linalg.matrix_exponential instead."
  }
}
op {
  name: "MatrixInverse"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "adjoint"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
        type: DT_HALF
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "MatrixLogarithm"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "MatrixSetDiag"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "diagonal"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "MatrixSetDiagV2"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "diagonal"
    type_attr: "T"
  }
  input_arg {
    name: "k"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "MatrixSetDiagV3"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "diagonal"
    type_attr: "T"
  }
  input_arg {
    name: "k"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "align"
    type: "string"
    default_value {
      s: "RIGHT_LEFT"
    }
    allowed_values {
      list {
        s: "LEFT_RIGHT"
        s: "RIGHT_LEFT"
        s: "LEFT_LEFT"
        s: "RIGHT_RIGHT"
      }
    }
  }
}
op {
  name: "MatrixSolve"
  input_arg {
    name: "matrix"
    type_attr: "T"
  }
  input_arg {
    name: "rhs"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "adjoint"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
        type: DT_HALF
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "MatrixSolveLs"
  input_arg {
    name: "matrix"
    type_attr: "T"
  }
  input_arg {
    name: "rhs"
    type_attr: "T"
  }
  input_arg {
    name: "l2_regularizer"
    type: DT_DOUBLE
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
        type: DT_HALF
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
  attr {
    name: "fast"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "MatrixSquareRoot"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
        type: DT_HALF
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "MatrixTriangularSolve"
  input_arg {
    name: "matrix"
    type_attr: "T"
  }
  input_arg {
    name: "rhs"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "lower"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "adjoint"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
        type: DT_HALF
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Max"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "reduction_indices"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "keep_dims"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "MaxIntraOpParallelismDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "max_intra_op_parallelism"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "MaxPool"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_UINT16
        type: DT_QINT8
      }
    }
  }
  attr {
    name: "ksize"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
        s: "EXPLICIT"
      }
    }
  }
  attr {
    name: "explicit_paddings"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
        s: "NCHW_VECT_C"
      }
    }
  }
}
op {
  name: "MaxPool3D"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "ksize"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NDHWC"
    }
    allowed_values {
      list {
        s: "NDHWC"
        s: "NCDHW"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "MaxPool3DGrad"
  input_arg {
    name: "orig_input"
    type_attr: "TInput"
  }
  input_arg {
    name: "orig_output"
    type_attr: "TInput"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "ksize"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NDHWC"
    }
    allowed_values {
      list {
        s: "NDHWC"
        s: "NCDHW"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "TInput"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "MaxPool3DGradGrad"
  input_arg {
    name: "orig_input"
    type_attr: "T"
  }
  input_arg {
    name: "orig_output"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "ksize"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 5
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NDHWC"
    }
    allowed_values {
      list {
        s: "NDHWC"
        s: "NCDHW"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "MaxPoolGrad"
  input_arg {
    name: "orig_input"
    type_attr: "T"
  }
  input_arg {
    name: "orig_output"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "ksize"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
        s: "EXPLICIT"
      }
    }
  }
  attr {
    name: "explicit_paddings"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "MaxPoolGradGrad"
  input_arg {
    name: "orig_input"
    type_attr: "T"
  }
  input_arg {
    name: "orig_output"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "ksize"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "MaxPoolGradGradV2"
  input_arg {
    name: "orig_input"
    type_attr: "T"
  }
  input_arg {
    name: "orig_output"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "ksize"
    type: DT_INT32
  }
  input_arg {
    name: "strides"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "MaxPoolGradGradWithArgmax"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "argmax"
    type_attr: "Targmax"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "ksize"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "include_batch_in_index"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "Targmax"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "MaxPoolGradV2"
  input_arg {
    name: "orig_input"
    type_attr: "T"
  }
  input_arg {
    name: "orig_output"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "ksize"
    type: DT_INT32
  }
  input_arg {
    name: "strides"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "MaxPoolGradWithArgmax"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "argmax"
    type_attr: "Targmax"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "ksize"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "include_batch_in_index"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "Targmax"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "MaxPoolV2"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "ksize"
    type: DT_INT32
  }
  input_arg {
    name: "strides"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_UINT16
        type: DT_QINT8
      }
    }
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
        s: "NCHW_VECT_C"
      }
    }
  }
}
op {
  name: "MaxPoolWithArgmax"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  output_arg {
    name: "argmax"
    type_attr: "Targmax"
  }
  attr {
    name: "ksize"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "Targmax"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "include_batch_in_index"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "Maximum"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "Mean"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "reduction_indices"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "keep_dims"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "Merge"
  input_arg {
    name: "inputs"
    type_attr: "T"
    number_attr: "N"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  output_arg {
    name: "value_index"
    type: DT_INT32
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "MergeSummary"
  input_arg {
    name: "inputs"
    type: DT_STRING
    number_attr: "N"
  }
  output_arg {
    name: "summary"
    type: DT_STRING
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "MergeV2Checkpoints"
  input_arg {
    name: "checkpoint_prefixes"
    type: DT_STRING
  }
  input_arg {
    name: "destination_prefix"
    type: DT_STRING
  }
  attr {
    name: "delete_old_dirs"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "Mfcc"
  input_arg {
    name: "spectrogram"
    type: DT_FLOAT
  }
  input_arg {
    name: "sample_rate"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type: DT_FLOAT
  }
  attr {
    name: "upper_frequency_limit"
    type: "float"
    default_value {
      f: 4000
    }
  }
  attr {
    name: "lower_frequency_limit"
    type: "float"
    default_value {
      f: 20
    }
  }
  attr {
    name: "filterbank_channel_count"
    type: "int"
    default_value {
      i: 40
    }
  }
  attr {
    name: "dct_coefficient_count"
    type: "int"
    default_value {
      i: 13
    }
  }
}
op {
  name: "Min"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "reduction_indices"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "keep_dims"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "Minimum"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "MirrorPad"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "paddings"
    type_attr: "Tpaddings"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tpaddings"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "mode"
    type: "string"
    allowed_values {
      list {
        s: "REFLECT"
        s: "SYMMETRIC"
      }
    }
  }
}
op {
  name: "MirrorPadGrad"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "paddings"
    type_attr: "Tpaddings"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tpaddings"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "mode"
    type: "string"
    allowed_values {
      list {
        s: "REFLECT"
        s: "SYMMETRIC"
      }
    }
  }
}
op {
  name: "MlirPassthroughOp"
  input_arg {
    name: "inputs"
    type_list_attr: "Tinputs"
  }
  output_arg {
    name: "outputs"
    type_list_attr: "Toutputs"
  }
  attr {
    name: "mlir_module"
    type: "string"
  }
  attr {
    name: "Tinputs"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Toutputs"
    type: "list(type)"
    has_minimum: true
  }
}
op {
  name: "Mod"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
        type: DT_HALF
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "ModelDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "algorithm"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "cpu_budget"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "ram_budget"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "Mul"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_UINT8
        type: DT_INT8
        type: DT_UINT16
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
  is_commutative: true
}
op {
  name: "MulNoNan"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "MultiDeviceIterator"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "devices"
    type: "list(string)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "shared_name"
    type: "string"
  }
  attr {
    name: "container"
    type: "string"
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "MultiDeviceIteratorFromStringHandle"
  input_arg {
    name: "string_handle"
    type: DT_STRING
  }
  output_arg {
    name: "multi_device_iterator"
    type: DT_RESOURCE
  }
  attr {
    name: "output_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "MultiDeviceIteratorGetNextFromShard"
  input_arg {
    name: "multi_device_iterator"
    type: DT_RESOURCE
  }
  input_arg {
    name: "shard_num"
    type: DT_INT32
  }
  input_arg {
    name: "incarnation_id"
    type: DT_INT64
  }
  output_arg {
    name: "components"
    type_list_attr: "output_types"
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "MultiDeviceIteratorInit"
  input_arg {
    name: "dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "multi_device_iterator"
    type: DT_RESOURCE
  }
  input_arg {
    name: "max_buffer_size"
    type: DT_INT64
  }
  output_arg {
    name: "incarnation_id"
    type: DT_INT64
  }
  is_stateful: true
}
op {
  name: "MultiDeviceIteratorToStringHandle"
  input_arg {
    name: "multi_device_iterator"
    type: DT_RESOURCE
  }
  output_arg {
    name: "string_handle"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "Multinomial"
  input_arg {
    name: "logits"
    type_attr: "T"
  }
  input_arg {
    name: "num_samples"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "output_dtype"
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "output_dtype"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "MutableDenseHashTable"
  input_arg {
    name: "empty_key"
    type_attr: "key_dtype"
  }
  output_arg {
    name: "table_handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "use_node_name_sharing"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "key_dtype"
    type: "type"
  }
  attr {
    name: "value_dtype"
    type: "type"
  }
  attr {
    name: "value_shape"
    type: "shape"
    default_value {
      shape {
      }
    }
  }
  attr {
    name: "initial_num_buckets"
    type: "int"
    default_value {
      i: 131072
    }
  }
  attr {
    name: "max_load_factor"
    type: "float"
    default_value {
      f: 0.8
    }
  }
  is_stateful: true
}
op {
  name: "MutableDenseHashTableV2"
  input_arg {
    name: "empty_key"
    type_attr: "key_dtype"
  }
  input_arg {
    name: "deleted_key"
    type_attr: "key_dtype"
  }
  output_arg {
    name: "table_handle"
    type: DT_RESOURCE
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "use_node_name_sharing"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "key_dtype"
    type: "type"
  }
  attr {
    name: "value_dtype"
    type: "type"
  }
  attr {
    name: "value_shape"
    type: "shape"
    default_value {
      shape {
      }
    }
  }
  attr {
    name: "initial_num_buckets"
    type: "int"
    default_value {
      i: 131072
    }
  }
  attr {
    name: "max_load_factor"
    type: "float"
    default_value {
      f: 0.8
    }
  }
  is_stateful: true
}
op {
  name: "MutableHashTable"
  output_arg {
    name: "table_handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "use_node_name_sharing"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "key_dtype"
    type: "type"
  }
  attr {
    name: "value_dtype"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "MutableHashTableOfTensors"
  output_arg {
    name: "table_handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "use_node_name_sharing"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "key_dtype"
    type: "type"
  }
  attr {
    name: "value_dtype"
    type: "type"
  }
  attr {
    name: "value_shape"
    type: "shape"
    default_value {
      shape {
      }
    }
  }
  is_stateful: true
}
op {
  name: "MutableHashTableOfTensorsV2"
  output_arg {
    name: "table_handle"
    type: DT_RESOURCE
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "use_node_name_sharing"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "key_dtype"
    type: "type"
  }
  attr {
    name: "value_dtype"
    type: "type"
  }
  attr {
    name: "value_shape"
    type: "shape"
    default_value {
      shape {
      }
    }
  }
  is_stateful: true
}
op {
  name: "MutableHashTableV2"
  output_arg {
    name: "table_handle"
    type: DT_RESOURCE
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "use_node_name_sharing"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "key_dtype"
    type: "type"
  }
  attr {
    name: "value_dtype"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "MutexLock"
  input_arg {
    name: "mutex"
    type: DT_RESOURCE
  }
  output_arg {
    name: "mutex_lock"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "MutexV2"
  output_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "NcclAllReduce"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "data"
    type_attr: "T"
  }
  attr {
    name: "reduction"
    type: "string"
    allowed_values {
      list {
        s: "min"
        s: "max"
        s: "prod"
        s: "sum"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "num_devices"
    type: "int"
  }
  attr {
    name: "shared_name"
    type: "string"
  }
  is_stateful: true
}
op {
  name: "NcclBroadcast"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "shape"
    type: "shape"
  }
  is_stateful: true
}
op {
  name: "NcclReduce"
  input_arg {
    name: "input"
    type_attr: "T"
    number_attr: "num_devices"
  }
  output_arg {
    name: "data"
    type_attr: "T"
  }
  attr {
    name: "reduction"
    type: "string"
    allowed_values {
      list {
        s: "min"
        s: "max"
        s: "prod"
        s: "sum"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "num_devices"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "Ndtri"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "NearestNeighbors"
  input_arg {
    name: "points"
    type: DT_FLOAT
  }
  input_arg {
    name: "centers"
    type: DT_FLOAT
  }
  input_arg {
    name: "k"
    type: DT_INT64
  }
  output_arg {
    name: "nearest_center_indices"
    type: DT_INT64
  }
  output_arg {
    name: "nearest_center_distances"
    type: DT_FLOAT
  }
}
op {
  name: "Neg"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "NegTrain"
  input_arg {
    name: "w_in"
    type: DT_FLOAT
    is_ref: true
  }
  input_arg {
    name: "w_out"
    type: DT_FLOAT
    is_ref: true
  }
  input_arg {
    name: "examples"
    type: DT_INT32
  }
  input_arg {
    name: "labels"
    type: DT_INT32
  }
  input_arg {
    name: "lr"
    type: DT_FLOAT
  }
  attr {
    name: "vocab_count"
    type: "list(int)"
  }
  attr {
    name: "num_negative_samples"
    type: "int"
  }
  deprecation {
    version: 19
    explanation: "Moving word2vec into tensorflow_models/tutorials and deprecating its ops here as a result"
  }
  is_stateful: true
}
op {
  name: "NextAfter"
  input_arg {
    name: "x1"
    type_attr: "T"
  }
  input_arg {
    name: "x2"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "NextIteration"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "NoOp"
}
op {
  name: "NonDeterministicInts"
  input_arg {
    name: "shape"
    type_attr: "shape_dtype"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_INT64
    }
  }
  attr {
    name: "shape_dtype"
    type: "type"
    default_value {
      type: DT_INT64
    }
  }
  is_stateful: true
}
op {
  name: "NonMaxSuppression"
  input_arg {
    name: "boxes"
    type: DT_FLOAT
  }
  input_arg {
    name: "scores"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_output_size"
    type: DT_INT32
  }
  output_arg {
    name: "selected_indices"
    type: DT_INT32
  }
  attr {
    name: "iou_threshold"
    type: "float"
    default_value {
      f: 0.5
    }
  }
}
op {
  name: "NonMaxSuppressionV2"
  input_arg {
    name: "boxes"
    type_attr: "T"
  }
  input_arg {
    name: "scores"
    type_attr: "T"
  }
  input_arg {
    name: "max_output_size"
    type: DT_INT32
  }
  input_arg {
    name: "iou_threshold"
    type_attr: "T_threshold"
  }
  output_arg {
    name: "selected_indices"
    type: DT_INT32
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "T_threshold"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "NonMaxSuppressionV3"
  input_arg {
    name: "boxes"
    type_attr: "T"
  }
  input_arg {
    name: "scores"
    type_attr: "T"
  }
  input_arg {
    name: "max_output_size"
    type: DT_INT32
  }
  input_arg {
    name: "iou_threshold"
    type_attr: "T_threshold"
  }
  input_arg {
    name: "score_threshold"
    type_attr: "T_threshold"
  }
  output_arg {
    name: "selected_indices"
    type: DT_INT32
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "T_threshold"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
      }
    }
  }
}
op {
  name: "NonMaxSuppressionV4"
  input_arg {
    name: "boxes"
    type_attr: "T"
  }
  input_arg {
    name: "scores"
    type_attr: "T"
  }
  input_arg {
    name: "max_output_size"
    type: DT_INT32
  }
  input_arg {
    name: "iou_threshold"
    type_attr: "T_threshold"
  }
  input_arg {
    name: "score_threshold"
    type_attr: "T_threshold"
  }
  output_arg {
    name: "selected_indices"
    type: DT_INT32
  }
  output_arg {
    name: "valid_outputs"
    type: DT_INT32
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "T_threshold"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "pad_to_max_output_size"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "NonMaxSuppressionV5"
  input_arg {
    name: "boxes"
    type_attr: "T"
  }
  input_arg {
    name: "scores"
    type_attr: "T"
  }
  input_arg {
    name: "max_output_size"
    type: DT_INT32
  }
  input_arg {
    name: "iou_threshold"
    type_attr: "T"
  }
  input_arg {
    name: "score_threshold"
    type_attr: "T"
  }
  input_arg {
    name: "soft_nms_sigma"
    type_attr: "T"
  }
  output_arg {
    name: "selected_indices"
    type: DT_INT32
  }
  output_arg {
    name: "selected_scores"
    type_attr: "T"
  }
  output_arg {
    name: "valid_outputs"
    type: DT_INT32
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "pad_to_max_output_size"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "NonMaxSuppressionWithOverlaps"
  input_arg {
    name: "overlaps"
    type: DT_FLOAT
  }
  input_arg {
    name: "scores"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_output_size"
    type: DT_INT32
  }
  input_arg {
    name: "overlap_threshold"
    type: DT_FLOAT
  }
  input_arg {
    name: "score_threshold"
    type: DT_FLOAT
  }
  output_arg {
    name: "selected_indices"
    type: DT_INT32
  }
}
op {
  name: "NonSerializableDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "NotEqual"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type: DT_BOOL
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "incompatible_shape_error"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_commutative: true
}
op {
  name: "NthElement"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "n"
    type: DT_INT32
  }
  output_arg {
    name: "values"
    type_attr: "T"
  }
  attr {
    name: "reverse"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "OneHot"
  input_arg {
    name: "indices"
    type_attr: "TI"
  }
  input_arg {
    name: "depth"
    type: DT_INT32
  }
  input_arg {
    name: "on_value"
    type_attr: "T"
  }
  input_arg {
    name: "off_value"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "axis"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "TI"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "OneShotIterator"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "dataset_factory"
    type: "func"
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "OnesLike"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT8
        type: DT_UINT8
        type: DT_INT16
        type: DT_UINT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
        type: DT_BOOL
      }
    }
  }
}
op {
  name: "OptimizeDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "optimizations"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "optimization_configs"
    type: "list(string)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "OptimizeDatasetV2"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "optimizations_enabled"
    type: DT_STRING
  }
  input_arg {
    name: "optimizations_disabled"
    type: DT_STRING
  }
  input_arg {
    name: "optimizations_default"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "optimization_configs"
    type: "list(string)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "OptionalFromValue"
  input_arg {
    name: "components"
    type_list_attr: "Toutput_types"
  }
  output_arg {
    name: "optional"
    type: DT_VARIANT
  }
  attr {
    name: "Toutput_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "OptionalGetValue"
  input_arg {
    name: "optional"
    type: DT_VARIANT
  }
  output_arg {
    name: "components"
    type_list_attr: "output_types"
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "OptionalHasValue"
  input_arg {
    name: "optional"
    type: DT_VARIANT
  }
  output_arg {
    name: "has_value"
    type: DT_BOOL
  }
}
op {
  name: "OptionalNone"
  output_arg {
    name: "optional"
    type: DT_VARIANT
  }
}
op {
  name: "OrderedMapClear"
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "OrderedMapIncompleteSize"
  output_arg {
    name: "size"
    type: DT_INT32
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "OrderedMapPeek"
  input_arg {
    name: "key"
    type: DT_INT64
  }
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  output_arg {
    name: "values"
    type_list_attr: "dtypes"
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "OrderedMapSize"
  output_arg {
    name: "size"
    type: DT_INT32
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "OrderedMapStage"
  input_arg {
    name: "key"
    type: DT_INT64
  }
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  input_arg {
    name: "values"
    type_list_attr: "fake_dtypes"
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
  }
  attr {
    name: "fake_dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "OrderedMapUnstage"
  input_arg {
    name: "key"
    type: DT_INT64
  }
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  output_arg {
    name: "values"
    type_list_attr: "dtypes"
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "OrderedMapUnstageNoKey"
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  output_arg {
    name: "key"
    type: DT_INT64
  }
  output_arg {
    name: "values"
    type_list_attr: "dtypes"
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "OutfeedDequeue"
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "shape"
    type: "shape"
  }
  attr {
    name: "device_ordinal"
    type: "int"
    default_value {
      i: -1
    }
  }
  is_stateful: true
}
op {
  name: "OutfeedDequeueTuple"
  output_arg {
    name: "outputs"
    type_list_attr: "dtypes"
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "shapes"
    type: "list(shape)"
  }
  attr {
    name: "device_ordinal"
    type: "int"
    default_value {
      i: -1
    }
  }
  is_stateful: true
}
op {
  name: "OutfeedDequeueTupleV2"
  input_arg {
    name: "device_ordinal"
    type: DT_INT32
  }
  output_arg {
    name: "outputs"
    type_list_attr: "dtypes"
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "shapes"
    type: "list(shape)"
  }
  is_stateful: true
}
op {
  name: "OutfeedDequeueV2"
  input_arg {
    name: "device_ordinal"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "shape"
    type: "shape"
  }
  is_stateful: true
}
op {
  name: "OutfeedEnqueue"
  input_arg {
    name: "input"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "OutfeedEnqueueTuple"
  input_arg {
    name: "inputs"
    type_list_attr: "dtypes"
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "Pack"
  input_arg {
    name: "values"
    type_attr: "T"
    number_attr: "N"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "axis"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "Pad"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "paddings"
    type_attr: "Tpaddings"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tpaddings"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "PadV2"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "paddings"
    type_attr: "Tpaddings"
  }
  input_arg {
    name: "constant_values"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tpaddings"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "PaddedBatchDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "batch_size"
    type: DT_INT64
  }
  input_arg {
    name: "padded_shapes"
    type: DT_INT64
    number_attr: "N"
  }
  input_arg {
    name: "padding_values"
    type_list_attr: "Toutput_types"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "Toutput_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "PaddedBatchDatasetV2"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "batch_size"
    type: DT_INT64
  }
  input_arg {
    name: "padded_shapes"
    type: DT_INT64
    number_attr: "N"
  }
  input_arg {
    name: "padding_values"
    type_list_attr: "Toutput_types"
  }
  input_arg {
    name: "drop_remainder"
    type: DT_BOOL
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "parallel_copy"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "Toutput_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "PaddingFIFOQueue"
  output_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "component_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "PaddingFIFOQueueV2"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "component_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "ParallelConcat"
  input_arg {
    name: "values"
    type_attr: "T"
    number_attr: "N"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "shape"
    type: "shape"
  }
}
op {
  name: "ParallelDynamicStitch"
  input_arg {
    name: "indices"
    type: DT_INT32
    number_attr: "N"
  }
  input_arg {
    name: "data"
    type_attr: "T"
    number_attr: "N"
  }
  output_arg {
    name: "merged"
    type_attr: "T"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "ParallelInterleaveDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  input_arg {
    name: "cycle_length"
    type: DT_INT64
  }
  input_arg {
    name: "block_length"
    type: DT_INT64
  }
  input_arg {
    name: "sloppy"
    type: DT_BOOL
  }
  input_arg {
    name: "buffer_output_elements"
    type: DT_INT64
  }
  input_arg {
    name: "prefetch_input_elements"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ParallelInterleaveDatasetV2"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  input_arg {
    name: "cycle_length"
    type: DT_INT64
  }
  input_arg {
    name: "block_length"
    type: DT_INT64
  }
  input_arg {
    name: "num_parallel_calls"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "sloppy"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ParallelInterleaveDatasetV3"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  input_arg {
    name: "cycle_length"
    type: DT_INT64
  }
  input_arg {
    name: "block_length"
    type: DT_INT64
  }
  input_arg {
    name: "num_parallel_calls"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "deterministic"
    type: "string"
    default_value {
      s: "default"
    }
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ParallelInterleaveDatasetV4"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  input_arg {
    name: "cycle_length"
    type: DT_INT64
  }
  input_arg {
    name: "block_length"
    type: DT_INT64
  }
  input_arg {
    name: "buffer_output_elements"
    type: DT_INT64
  }
  input_arg {
    name: "prefetch_input_elements"
    type: DT_INT64
  }
  input_arg {
    name: "num_parallel_calls"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "deterministic"
    type: "string"
    default_value {
      s: "default"
    }
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ParallelMapDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  input_arg {
    name: "num_parallel_calls"
    type: DT_INT32
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "use_inter_op_parallelism"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "sloppy"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "preserve_cardinality"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ParallelMapDatasetV2"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  input_arg {
    name: "num_parallel_calls"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "use_inter_op_parallelism"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "deterministic"
    type: "string"
    default_value {
      s: "default"
    }
  }
  attr {
    name: "preserve_cardinality"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ParameterizedTruncatedNormal"
  input_arg {
    name: "shape"
    type_attr: "T"
  }
  input_arg {
    name: "means"
    type_attr: "dtype"
  }
  input_arg {
    name: "stdevs"
    type_attr: "dtype"
  }
  input_arg {
    name: "minvals"
    type_attr: "dtype"
  }
  input_arg {
    name: "maxvals"
    type_attr: "dtype"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "ParseExample"
  input_arg {
    name: "serialized"
    type: DT_STRING
  }
  input_arg {
    name: "names"
    type: DT_STRING
  }
  input_arg {
    name: "sparse_keys"
    type: DT_STRING
    number_attr: "Nsparse"
  }
  input_arg {
    name: "dense_keys"
    type: DT_STRING
    number_attr: "Ndense"
  }
  input_arg {
    name: "dense_defaults"
    type_list_attr: "Tdense"
  }
  output_arg {
    name: "sparse_indices"
    type: DT_INT64
    number_attr: "Nsparse"
  }
  output_arg {
    name: "sparse_values"
    type_list_attr: "sparse_types"
  }
  output_arg {
    name: "sparse_shapes"
    type: DT_INT64
    number_attr: "Nsparse"
  }
  output_arg {
    name: "dense_values"
    type_list_attr: "Tdense"
  }
  attr {
    name: "Nsparse"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "Ndense"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "sparse_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "Tdense"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "dense_shapes"
    type: "list(shape)"
    has_minimum: true
  }
}
op {
  name: "ParseExampleDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "num_parallel_calls"
    type: DT_INT64
  }
  input_arg {
    name: "dense_defaults"
    type_list_attr: "Tdense"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "sparse_keys"
    type: "list(string)"
    has_minimum: true
  }
  attr {
    name: "dense_keys"
    type: "list(string)"
    has_minimum: true
  }
  attr {
    name: "sparse_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "Tdense"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "dense_shapes"
    type: "list(shape)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "sloppy"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "ragged_keys"
    type: "list(string)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "ragged_value_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "ragged_split_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "ParseExampleDatasetV2"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "num_parallel_calls"
    type: DT_INT64
  }
  input_arg {
    name: "dense_defaults"
    type_list_attr: "Tdense"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "sparse_keys"
    type: "list(string)"
    has_minimum: true
  }
  attr {
    name: "dense_keys"
    type: "list(string)"
    has_minimum: true
  }
  attr {
    name: "sparse_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "Tdense"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "dense_shapes"
    type: "list(shape)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "deterministic"
    type: "string"
    default_value {
      s: "default"
    }
  }
  attr {
    name: "ragged_keys"
    type: "list(string)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "ragged_value_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "ragged_split_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "ParseExampleV2"
  input_arg {
    name: "serialized"
    type: DT_STRING
  }
  input_arg {
    name: "names"
    type: DT_STRING
  }
  input_arg {
    name: "sparse_keys"
    type: DT_STRING
  }
  input_arg {
    name: "dense_keys"
    type: DT_STRING
  }
  input_arg {
    name: "ragged_keys"
    type: DT_STRING
  }
  input_arg {
    name: "dense_defaults"
    type_list_attr: "Tdense"
  }
  output_arg {
    name: "sparse_indices"
    type: DT_INT64
    number_attr: "num_sparse"
  }
  output_arg {
    name: "sparse_values"
    type_list_attr: "sparse_types"
  }
  output_arg {
    name: "sparse_shapes"
    type: DT_INT64
    number_attr: "num_sparse"
  }
  output_arg {
    name: "dense_values"
    type_list_attr: "Tdense"
  }
  output_arg {
    name: "ragged_values"
    type_list_attr: "ragged_value_types"
  }
  output_arg {
    name: "ragged_row_splits"
    type_list_attr: "ragged_split_types"
  }
  attr {
    name: "Tdense"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "num_sparse"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "sparse_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "ragged_value_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "ragged_split_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "dense_shapes"
    type: "list(shape)"
    has_minimum: true
  }
}
op {
  name: "ParseSequenceExample"
  input_arg {
    name: "serialized"
    type: DT_STRING
  }
  input_arg {
    name: "debug_name"
    type: DT_STRING
  }
  input_arg {
    name: "context_dense_defaults"
    type_list_attr: "Tcontext_dense"
  }
  output_arg {
    name: "context_sparse_indices"
    type: DT_INT64
    number_attr: "Ncontext_sparse"
  }
  output_arg {
    name: "context_sparse_values"
    type_list_attr: "context_sparse_types"
  }
  output_arg {
    name: "context_sparse_shapes"
    type: DT_INT64
    number_attr: "Ncontext_sparse"
  }
  output_arg {
    name: "context_dense_values"
    type_list_attr: "Tcontext_dense"
  }
  output_arg {
    name: "feature_list_sparse_indices"
    type: DT_INT64
    number_attr: "Nfeature_list_sparse"
  }
  output_arg {
    name: "feature_list_sparse_values"
    type_list_attr: "feature_list_sparse_types"
  }
  output_arg {
    name: "feature_list_sparse_shapes"
    type: DT_INT64
    number_attr: "Nfeature_list_sparse"
  }
  output_arg {
    name: "feature_list_dense_values"
    type_list_attr: "feature_list_dense_types"
  }
  output_arg {
    name: "feature_list_dense_lengths"
    type: DT_INT64
    number_attr: "Nfeature_list_dense"
  }
  attr {
    name: "feature_list_dense_missing_assumed_empty"
    type: "list(string)"
    has_minimum: true
  }
  attr {
    name: "context_sparse_keys"
    type: "list(string)"
    has_minimum: true
  }
  attr {
    name: "context_dense_keys"
    type: "list(string)"
    has_minimum: true
  }
  attr {
    name: "feature_list_sparse_keys"
    type: "list(string)"
    has_minimum: true
  }
  attr {
    name: "feature_list_dense_keys"
    type: "list(string)"
    has_minimum: true
  }
  attr {
    name: "Ncontext_sparse"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "Ncontext_dense"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "Nfeature_list_sparse"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "Nfeature_list_dense"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "context_sparse_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "Tcontext_dense"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "feature_list_dense_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "context_dense_shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "feature_list_sparse_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "feature_list_dense_shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
}
op {
  name: "ParseSequenceExampleV2"
  input_arg {
    name: "serialized"
    type: DT_STRING
  }
  input_arg {
    name: "debug_name"
    type: DT_STRING
  }
  input_arg {
    name: "context_sparse_keys"
    type: DT_STRING
  }
  input_arg {
    name: "context_dense_keys"
    type: DT_STRING
  }
  input_arg {
    name: "context_ragged_keys"
    type: DT_STRING
  }
  input_arg {
    name: "feature_list_sparse_keys"
    type: DT_STRING
  }
  input_arg {
    name: "feature_list_dense_keys"
    type: DT_STRING
  }
  input_arg {
    name: "feature_list_ragged_keys"
    type: DT_STRING
  }
  input_arg {
    name: "feature_list_dense_missing_assumed_empty"
    type: DT_BOOL
  }
  input_arg {
    name: "context_dense_defaults"
    type_list_attr: "Tcontext_dense"
  }
  output_arg {
    name: "context_sparse_indices"
    type: DT_INT64
    number_attr: "Ncontext_sparse"
  }
  output_arg {
    name: "context_sparse_values"
    type_list_attr: "context_sparse_types"
  }
  output_arg {
    name: "context_sparse_shapes"
    type: DT_INT64
    number_attr: "Ncontext_sparse"
  }
  output_arg {
    name: "context_dense_values"
    type_list_attr: "Tcontext_dense"
  }
  output_arg {
    name: "context_ragged_values"
    type_list_attr: "context_ragged_value_types"
  }
  output_arg {
    name: "context_ragged_row_splits"
    type_list_attr: "context_ragged_split_types"
  }
  output_arg {
    name: "feature_list_sparse_indices"
    type: DT_INT64
    number_attr: "Nfeature_list_sparse"
  }
  output_arg {
    name: "feature_list_sparse_values"
    type_list_attr: "feature_list_sparse_types"
  }
  output_arg {
    name: "feature_list_sparse_shapes"
    type: DT_INT64
    number_attr: "Nfeature_list_sparse"
  }
  output_arg {
    name: "feature_list_dense_values"
    type_list_attr: "feature_list_dense_types"
  }
  output_arg {
    name: "feature_list_dense_lengths"
    type: DT_INT64
    number_attr: "Nfeature_list_dense"
  }
  output_arg {
    name: "feature_list_ragged_values"
    type_list_attr: "feature_list_ragged_value_types"
  }
  output_arg {
    name: "feature_list_ragged_outer_splits"
    type_list_attr: "feature_list_ragged_split_types"
  }
  output_arg {
    name: "feature_list_ragged_inner_splits"
    type_list_attr: "feature_list_ragged_split_types"
  }
  attr {
    name: "Ncontext_sparse"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "Tcontext_dense"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "context_sparse_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "context_ragged_value_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "context_ragged_split_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "context_dense_shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "Nfeature_list_sparse"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "Nfeature_list_dense"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "feature_list_dense_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "feature_list_sparse_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "feature_list_ragged_value_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "feature_list_ragged_split_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "feature_list_dense_shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
}
op {
  name: "ParseSingleExample"
  input_arg {
    name: "serialized"
    type: DT_STRING
  }
  input_arg {
    name: "dense_defaults"
    type_list_attr: "Tdense"
  }
  output_arg {
    name: "sparse_indices"
    type: DT_INT64
    number_attr: "num_sparse"
  }
  output_arg {
    name: "sparse_values"
    type_list_attr: "sparse_types"
  }
  output_arg {
    name: "sparse_shapes"
    type: DT_INT64
    number_attr: "num_sparse"
  }
  output_arg {
    name: "dense_values"
    type_list_attr: "Tdense"
  }
  attr {
    name: "num_sparse"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "sparse_keys"
    type: "list(string)"
    has_minimum: true
  }
  attr {
    name: "dense_keys"
    type: "list(string)"
    has_minimum: true
  }
  attr {
    name: "sparse_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "Tdense"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "dense_shapes"
    type: "list(shape)"
    has_minimum: true
  }
}
op {
  name: "ParseSingleSequenceExample"
  input_arg {
    name: "serialized"
    type: DT_STRING
  }
  input_arg {
    name: "feature_list_dense_missing_assumed_empty"
    type: DT_STRING
  }
  input_arg {
    name: "context_sparse_keys"
    type: DT_STRING
    number_attr: "Ncontext_sparse"
  }
  input_arg {
    name: "context_dense_keys"
    type: DT_STRING
    number_attr: "Ncontext_dense"
  }
  input_arg {
    name: "feature_list_sparse_keys"
    type: DT_STRING
    number_attr: "Nfeature_list_sparse"
  }
  input_arg {
    name: "feature_list_dense_keys"
    type: DT_STRING
    number_attr: "Nfeature_list_dense"
  }
  input_arg {
    name: "context_dense_defaults"
    type_list_attr: "Tcontext_dense"
  }
  input_arg {
    name: "debug_name"
    type: DT_STRING
  }
  output_arg {
    name: "context_sparse_indices"
    type: DT_INT64
    number_attr: "Ncontext_sparse"
  }
  output_arg {
    name: "context_sparse_values"
    type_list_attr: "context_sparse_types"
  }
  output_arg {
    name: "context_sparse_shapes"
    type: DT_INT64
    number_attr: "Ncontext_sparse"
  }
  output_arg {
    name: "context_dense_values"
    type_list_attr: "Tcontext_dense"
  }
  output_arg {
    name: "feature_list_sparse_indices"
    type: DT_INT64
    number_attr: "Nfeature_list_sparse"
  }
  output_arg {
    name: "feature_list_sparse_values"
    type_list_attr: "feature_list_sparse_types"
  }
  output_arg {
    name: "feature_list_sparse_shapes"
    type: DT_INT64
    number_attr: "Nfeature_list_sparse"
  }
  output_arg {
    name: "feature_list_dense_values"
    type_list_attr: "feature_list_dense_types"
  }
  attr {
    name: "Ncontext_sparse"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "Ncontext_dense"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "Nfeature_list_sparse"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "Nfeature_list_dense"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "context_sparse_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "Tcontext_dense"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "feature_list_dense_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "context_dense_shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "feature_list_sparse_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "feature_list_dense_shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
}
op {
  name: "ParseTensor"
  input_arg {
    name: "serialized"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  attr {
    name: "out_type"
    type: "type"
  }
}
op {
  name: "PartitionedCall"
  input_arg {
    name: "args"
    type_list_attr: "Tin"
  }
  output_arg {
    name: "output"
    type_list_attr: "Tout"
  }
  attr {
    name: "Tin"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tout"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "config_proto"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "executor_type"
    type: "string"
    default_value {
      s: ""
    }
  }
}
op {
  name: "Placeholder"
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "shape"
    type: "shape"
    default_value {
      shape {
        unknown_rank: true
      }
    }
  }
}
op {
  name: "PlaceholderV2"
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "shape"
    type: "shape"
  }
  deprecation {
    version: 23
    explanation: "Placeholder now behaves the same as PlaceholderV2."
  }
}
op {
  name: "PlaceholderWithDefault"
  input_arg {
    name: "input"
    type_attr: "dtype"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "shape"
    type: "shape"
  }
}
op {
  name: "Polygamma"
  input_arg {
    name: "a"
    type_attr: "T"
  }
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "PopulationCount"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type: DT_UINT8
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT8
        type: DT_UINT16
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "Pow"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_HALF
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "PrefetchDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "buffer_size"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "slack_period"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "legacy_autotune"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "buffer_size_min"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "Prelinearize"
  input_arg {
    name: "input"
    type_attr: "dtype"
  }
  output_arg {
    name: "output"
    type: DT_VARIANT
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "shape"
    type: "shape"
    default_value {
      shape {
      }
    }
  }
  attr {
    name: "layout"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "PrelinearizeTuple"
  input_arg {
    name: "inputs"
    type_list_attr: "dtypes"
  }
  output_arg {
    name: "output"
    type: DT_VARIANT
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "shapes"
    type: "list(shape)"
  }
  attr {
    name: "layouts"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "PreventGradient"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "message"
    type: "string"
    default_value {
      s: ""
    }
  }
}
op {
  name: "Print"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "data"
    type_list_attr: "U"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "U"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "message"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "first_n"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "summarize"
    type: "int"
    default_value {
      i: 3
    }
  }
  is_stateful: true
}
op {
  name: "PrintV2"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  attr {
    name: "output_stream"
    type: "string"
    default_value {
      s: "stderr"
    }
  }
  attr {
    name: "end"
    type: "string"
    default_value {
      s: "\n"
    }
  }
  is_stateful: true
}
op {
  name: "PriorityQueue"
  output_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "component_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "shapes"
    type: "list(shape)"
    has_minimum: true
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "PriorityQueueV2"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "component_types"
    type: "list(type)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "shapes"
    type: "list(shape)"
    has_minimum: true
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "PrivateThreadPoolDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "num_threads"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "Prod"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "reduction_indices"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "keep_dims"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "PyFunc"
  input_arg {
    name: "input"
    type_list_attr: "Tin"
  }
  output_arg {
    name: "output"
    type_list_attr: "Tout"
  }
  attr {
    name: "token"
    type: "string"
  }
  attr {
    name: "Tin"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tout"
    type: "list(type)"
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "PyFuncStateless"
  input_arg {
    name: "input"
    type_list_attr: "Tin"
  }
  output_arg {
    name: "output"
    type_list_attr: "Tout"
  }
  attr {
    name: "token"
    type: "string"
  }
  attr {
    name: "Tin"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tout"
    type: "list(type)"
    has_minimum: true
  }
}
op {
  name: "Qr"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "q"
    type_attr: "T"
  }
  output_arg {
    name: "r"
    type_attr: "T"
  }
  attr {
    name: "full_matrices"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
        type: DT_HALF
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "QuantizeAndDequantize"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "signed_input"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "num_bits"
    type: "int"
    default_value {
      i: 8
    }
  }
  attr {
    name: "range_given"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "input_min"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "input_max"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  deprecation {
    version: 22
    explanation: "Replaced by QuantizeAndDequantizeV2"
  }
}
op {
  name: "QuantizeAndDequantizeV2"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "input_min"
    type_attr: "T"
  }
  input_arg {
    name: "input_max"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "signed_input"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "num_bits"
    type: "int"
    default_value {
      i: 8
    }
  }
  attr {
    name: "range_given"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "round_mode"
    type: "string"
    default_value {
      s: "HALF_TO_EVEN"
    }
    allowed_values {
      list {
        s: "HALF_TO_EVEN"
        s: "HALF_UP"
      }
    }
  }
  attr {
    name: "narrow_range"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "axis"
    type: "int"
    default_value {
      i: -1
    }
  }
}
op {
  name: "QuantizeAndDequantizeV3"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "input_min"
    type_attr: "T"
  }
  input_arg {
    name: "input_max"
    type_attr: "T"
  }
  input_arg {
    name: "num_bits"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "signed_input"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "range_given"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "narrow_range"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "axis"
    type: "int"
    default_value {
      i: -1
    }
  }
}
op {
  name: "QuantizeAndDequantizeV4"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "input_min"
    type_attr: "T"
  }
  input_arg {
    name: "input_max"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "signed_input"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "num_bits"
    type: "int"
    default_value {
      i: 8
    }
  }
  attr {
    name: "range_given"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "round_mode"
    type: "string"
    default_value {
      s: "HALF_TO_EVEN"
    }
    allowed_values {
      list {
        s: "HALF_TO_EVEN"
        s: "HALF_UP"
      }
    }
  }
  attr {
    name: "narrow_range"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "axis"
    type: "int"
    default_value {
      i: -1
    }
  }
}
op {
  name: "QuantizeAndDequantizeV4Grad"
  input_arg {
    name: "gradients"
    type_attr: "T"
  }
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "input_min"
    type_attr: "T"
  }
  input_arg {
    name: "input_max"
    type_attr: "T"
  }
  output_arg {
    name: "input_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "input_min_backprop"
    type_attr: "T"
  }
  output_arg {
    name: "input_max_backprop"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "axis"
    type: "int"
    default_value {
      i: -1
    }
  }
}
op {
  name: "QuantizeDownAndShrinkRange"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "input_min"
    type: DT_FLOAT
  }
  input_arg {
    name: "input_max"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "output_min"
    type: DT_FLOAT
  }
  output_arg {
    name: "output_max"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
}
op {
  name: "QuantizeV2"
  input_arg {
    name: "input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_range"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_range"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  output_arg {
    name: "output_min"
    type: DT_FLOAT
  }
  output_arg {
    name: "output_max"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "mode"
    type: "string"
    default_value {
      s: "MIN_COMBINED"
    }
    allowed_values {
      list {
        s: "MIN_COMBINED"
        s: "MIN_FIRST"
        s: "SCALED"
      }
    }
  }
  attr {
    name: "round_mode"
    type: "string"
    default_value {
      s: "HALF_AWAY_FROM_ZERO"
    }
    allowed_values {
      list {
        s: "HALF_AWAY_FROM_ZERO"
        s: "HALF_TO_EVEN"
      }
    }
  }
  attr {
    name: "narrow_range"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "axis"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "ensure_minimum_range"
    type: "float"
    default_value {
      f: 0.01
    }
  }
}
op {
  name: "QuantizedAdd"
  input_arg {
    name: "x"
    type_attr: "T1"
  }
  input_arg {
    name: "y"
    type_attr: "T2"
  }
  input_arg {
    name: "min_x"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_x"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_y"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_y"
    type: DT_FLOAT
  }
  output_arg {
    name: "z"
    type_attr: "Toutput"
  }
  output_arg {
    name: "min_z"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_z"
    type: DT_FLOAT
  }
  attr {
    name: "T1"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "T2"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Toutput"
    type: "type"
    default_value {
      type: DT_QINT32
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
}
op {
  name: "QuantizedAvgPool"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "ksize"
    type: "list(int)"
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
}
op {
  name: "QuantizedBatchNormWithGlobalNormalization"
  input_arg {
    name: "t"
    type_attr: "Tinput"
  }
  input_arg {
    name: "t_min"
    type: DT_FLOAT
  }
  input_arg {
    name: "t_max"
    type: DT_FLOAT
  }
  input_arg {
    name: "m"
    type_attr: "Tinput"
  }
  input_arg {
    name: "m_min"
    type: DT_FLOAT
  }
  input_arg {
    name: "m_max"
    type: DT_FLOAT
  }
  input_arg {
    name: "v"
    type_attr: "Tinput"
  }
  input_arg {
    name: "v_min"
    type: DT_FLOAT
  }
  input_arg {
    name: "v_max"
    type: DT_FLOAT
  }
  input_arg {
    name: "beta"
    type_attr: "Tinput"
  }
  input_arg {
    name: "beta_min"
    type: DT_FLOAT
  }
  input_arg {
    name: "beta_max"
    type: DT_FLOAT
  }
  input_arg {
    name: "gamma"
    type_attr: "Tinput"
  }
  input_arg {
    name: "gamma_min"
    type: DT_FLOAT
  }
  input_arg {
    name: "gamma_max"
    type: DT_FLOAT
  }
  output_arg {
    name: "result"
    type_attr: "out_type"
  }
  output_arg {
    name: "result_min"
    type: DT_FLOAT
  }
  output_arg {
    name: "result_max"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "variance_epsilon"
    type: "float"
  }
  attr {
    name: "scale_after_normalization"
    type: "bool"
  }
}
op {
  name: "QuantizedBiasAdd"
  input_arg {
    name: "input"
    type_attr: "T1"
  }
  input_arg {
    name: "bias"
    type_attr: "T2"
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_bias"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_bias"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_out"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_out"
    type: DT_FLOAT
  }
  attr {
    name: "T1"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "T2"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
}
op {
  name: "QuantizedConcat"
  input_arg {
    name: "concat_dim"
    type: DT_INT32
  }
  input_arg {
    name: "values"
    type_attr: "T"
    number_attr: "N"
  }
  input_arg {
    name: "input_mins"
    type: DT_FLOAT
    number_attr: "N"
  }
  input_arg {
    name: "input_maxes"
    type: DT_FLOAT
    number_attr: "N"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  output_arg {
    name: "output_min"
    type: DT_FLOAT
  }
  output_arg {
    name: "output_max"
    type: DT_FLOAT
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 2
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "QuantizedConv2D"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "filter"
    type_attr: "Tfilter"
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_filter"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tfilter"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QINT32
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
}
op {
  name: "QuantizedConv2DAndRelu"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "filter"
    type_attr: "Tfilter"
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_filter"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tfilter"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QINT32
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    name: "padding_list"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "QuantizedConv2DAndReluAndRequantize"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "filter"
    type_attr: "Tfilter"
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_freezed_output"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_freezed_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tfilter"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QUINT8
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    name: "padding_list"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "QuantizedConv2DAndRequantize"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "filter"
    type_attr: "Tfilter"
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_freezed_output"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_freezed_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tfilter"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QINT8
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    name: "padding_list"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "QuantizedConv2DPerChannel"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "filter"
    type_attr: "Tfilter"
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_filter"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tfilter"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QINT32
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
}
op {
  name: "QuantizedConv2DWithBias"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "filter"
    type_attr: "Tfilter"
  }
  input_arg {
    name: "bias"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_filter"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tfilter"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QINT32
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    name: "padding_list"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "QuantizedConv2DWithBiasAndRelu"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "filter"
    type_attr: "Tfilter"
  }
  input_arg {
    name: "bias"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_filter"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tfilter"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QINT32
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    name: "padding_list"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "QuantizedConv2DWithBiasAndReluAndRequantize"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "filter"
    type_attr: "Tfilter"
  }
  input_arg {
    name: "bias"
    type_attr: "Tbias"
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_freezed_output"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_freezed_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tfilter"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tbias"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_QINT32
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QUINT8
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    name: "padding_list"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "QuantizedConv2DWithBiasAndRequantize"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "filter"
    type_attr: "Tfilter"
  }
  input_arg {
    name: "bias"
    type_attr: "Tbias"
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_freezed_output"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_freezed_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tfilter"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tbias"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_QINT32
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QINT8
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    name: "padding_list"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "QuantizedConv2DWithBiasSignedSumAndReluAndRequantize"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "filter"
    type_attr: "Tfilter"
  }
  input_arg {
    name: "bias"
    type_attr: "Tbias"
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_freezed_output"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_freezed_output"
    type: DT_FLOAT
  }
  input_arg {
    name: "summand"
    type_attr: "Tsummand"
  }
  input_arg {
    name: "min_summand"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_summand"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tfilter"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tbias"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_QINT32
      }
    }
  }
  attr {
    name: "Tsummand"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QUINT8
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    name: "padding_list"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "QuantizedConv2DWithBiasSumAndRelu"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "filter"
    type_attr: "Tfilter"
  }
  input_arg {
    name: "bias"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "summand"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tfilter"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QINT32
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    name: "padding_list"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "QuantizedConv2DWithBiasSumAndReluAndRequantize"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "filter"
    type_attr: "Tfilter"
  }
  input_arg {
    name: "bias"
    type_attr: "Tbias"
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_freezed_output"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_freezed_output"
    type: DT_FLOAT
  }
  input_arg {
    name: "summand"
    type_attr: "Tsummand"
  }
  input_arg {
    name: "min_summand"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_summand"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tfilter"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tbias"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_QINT32
      }
    }
  }
  attr {
    name: "Tsummand"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QUINT8
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    name: "padding_list"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "QuantizedDepthwiseConv2D"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "filter"
    type_attr: "Tfilter"
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_filter"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tfilter"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QINT32
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
}
op {
  name: "QuantizedDepthwiseConv2DWithBias"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "filter"
    type_attr: "Tfilter"
  }
  input_arg {
    name: "bias"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_filter"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tfilter"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QINT32
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
}
op {
  name: "QuantizedDepthwiseConv2DWithBiasAndRelu"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "filter"
    type_attr: "Tfilter"
  }
  input_arg {
    name: "bias"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_filter"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tfilter"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QINT32
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    name: "padding_list"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "filter"
    type_attr: "Tfilter"
  }
  input_arg {
    name: "bias"
    type_attr: "Tbias"
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_filter"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_freezed_output"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_freezed_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tfilter"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tbias"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_QINT32
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QUINT8
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    name: "padding_list"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "QuantizedInstanceNorm"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "x_min"
    type: DT_FLOAT
  }
  input_arg {
    name: "x_max"
    type: DT_FLOAT
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "y_min"
    type: DT_FLOAT
  }
  output_arg {
    name: "y_max"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "output_range_given"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "given_y_min"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "given_y_max"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "variance_epsilon"
    type: "float"
    default_value {
      f: 1e-05
    }
  }
  attr {
    name: "min_separation"
    type: "float"
    default_value {
      f: 0.001
    }
  }
}
op {
  name: "QuantizedMatMul"
  input_arg {
    name: "a"
    type_attr: "T1"
  }
  input_arg {
    name: "b"
    type_attr: "T2"
  }
  input_arg {
    name: "min_a"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_a"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_b"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_b"
    type: DT_FLOAT
  }
  output_arg {
    name: "out"
    type_attr: "Toutput"
  }
  output_arg {
    name: "min_out"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_out"
    type: DT_FLOAT
  }
  attr {
    name: "T1"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "T2"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Toutput"
    type: "type"
    default_value {
      type: DT_QINT32
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "transpose_a"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "transpose_b"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "Tactivation"
    type: "type"
    default_value {
      type: DT_QUINT8
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
}
op {
  name: "QuantizedMatMulWithBias"
  input_arg {
    name: "a"
    type_attr: "T1"
  }
  input_arg {
    name: "b"
    type_attr: "T2"
  }
  input_arg {
    name: "bias"
    type_attr: "Tbias"
  }
  input_arg {
    name: "min_a"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_a"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_b"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_b"
    type: DT_FLOAT
  }
  output_arg {
    name: "out"
    type_attr: "Toutput"
  }
  output_arg {
    name: "min_out"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_out"
    type: DT_FLOAT
  }
  attr {
    name: "T1"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "T2"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tbias"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_QINT32
      }
    }
  }
  attr {
    name: "Toutput"
    type: "type"
    default_value {
      type: DT_QINT32
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "transpose_a"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "transpose_b"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "input_quant_mode"
    type: "string"
    default_value {
      s: "MIN_FIRST"
    }
    allowed_values {
      list {
        s: "MIN_FIRST"
        s: "SCALED"
      }
    }
  }
}
op {
  name: "QuantizedMatMulWithBiasAndDequantize"
  input_arg {
    name: "a"
    type_attr: "T1"
  }
  input_arg {
    name: "b"
    type_attr: "T2"
  }
  input_arg {
    name: "bias"
    type_attr: "Tbias"
  }
  input_arg {
    name: "min_a"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_a"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_b"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_b"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_freezed_output"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_freezed_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "out"
    type_attr: "Toutput"
  }
  attr {
    name: "T1"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "T2"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tbias"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_QINT32
      }
    }
  }
  attr {
    name: "Toutput"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "transpose_a"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "transpose_b"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "input_quant_mode"
    type: "string"
    default_value {
      s: "MIN_FIRST"
    }
    allowed_values {
      list {
        s: "MIN_FIRST"
        s: "SCALED"
      }
    }
  }
}
op {
  name: "QuantizedMatMulWithBiasAndRelu"
  input_arg {
    name: "a"
    type_attr: "T1"
  }
  input_arg {
    name: "b"
    type_attr: "T2"
  }
  input_arg {
    name: "bias"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_a"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_a"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_b"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_b"
    type: DT_FLOAT
  }
  output_arg {
    name: "out"
    type_attr: "Toutput"
  }
  output_arg {
    name: "min_out"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_out"
    type: DT_FLOAT
  }
  attr {
    name: "T1"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "T2"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Toutput"
    type: "type"
    default_value {
      type: DT_QINT32
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "transpose_a"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "transpose_b"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "input_quant_mode"
    type: "string"
    default_value {
      s: "MIN_FIRST"
    }
    allowed_values {
      list {
        s: "MIN_FIRST"
        s: "SCALED"
      }
    }
  }
}
op {
  name: "QuantizedMatMulWithBiasAndReluAndRequantize"
  input_arg {
    name: "a"
    type_attr: "T1"
  }
  input_arg {
    name: "b"
    type_attr: "T2"
  }
  input_arg {
    name: "bias"
    type_attr: "Tbias"
  }
  input_arg {
    name: "min_a"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_a"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_b"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_b"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_freezed_output"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_freezed_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "out"
    type_attr: "Toutput"
  }
  output_arg {
    name: "min_out"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_out"
    type: DT_FLOAT
  }
  attr {
    name: "T1"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "T2"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tbias"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_QINT32
      }
    }
  }
  attr {
    name: "Toutput"
    type: "type"
    default_value {
      type: DT_QUINT8
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "transpose_a"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "transpose_b"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "input_quant_mode"
    type: "string"
    default_value {
      s: "MIN_FIRST"
    }
    allowed_values {
      list {
        s: "MIN_FIRST"
        s: "SCALED"
      }
    }
  }
}
op {
  name: "QuantizedMatMulWithBiasAndRequantize"
  input_arg {
    name: "a"
    type_attr: "T1"
  }
  input_arg {
    name: "b"
    type_attr: "T2"
  }
  input_arg {
    name: "bias"
    type_attr: "Tbias"
  }
  input_arg {
    name: "min_a"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_a"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_b"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_b"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_freezed_output"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_freezed_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "out"
    type_attr: "Toutput"
  }
  output_arg {
    name: "min_out"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_out"
    type: DT_FLOAT
  }
  attr {
    name: "T1"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "T2"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Tbias"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_QINT32
      }
    }
  }
  attr {
    name: "Toutput"
    type: "type"
    default_value {
      type: DT_QUINT8
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "transpose_a"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "transpose_b"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "input_quant_mode"
    type: "string"
    default_value {
      s: "MIN_FIRST"
    }
    allowed_values {
      list {
        s: "MIN_FIRST"
        s: "SCALED"
      }
    }
  }
}
op {
  name: "QuantizedMaxPool"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "min_input"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_input"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  output_arg {
    name: "min_output"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_output"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "ksize"
    type: "list(int)"
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "padding"
    type: "string"
    allowed_values {
      list {
        s: "SAME"
        s: "VALID"
      }
    }
  }
}
op {
  name: "QuantizedMul"
  input_arg {
    name: "x"
    type_attr: "T1"
  }
  input_arg {
    name: "y"
    type_attr: "T2"
  }
  input_arg {
    name: "min_x"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_x"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_y"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_y"
    type: DT_FLOAT
  }
  output_arg {
    name: "z"
    type_attr: "Toutput"
  }
  output_arg {
    name: "min_z"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_z"
    type: DT_FLOAT
  }
  attr {
    name: "T1"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "T2"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "Toutput"
    type: "type"
    default_value {
      type: DT_QINT32
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
}
op {
  name: "QuantizedRelu"
  input_arg {
    name: "features"
    type_attr: "Tinput"
  }
  input_arg {
    name: "min_features"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_features"
    type: DT_FLOAT
  }
  output_arg {
    name: "activations"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_activations"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_activations"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QUINT8
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
}
op {
  name: "QuantizedRelu6"
  input_arg {
    name: "features"
    type_attr: "Tinput"
  }
  input_arg {
    name: "min_features"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_features"
    type: DT_FLOAT
  }
  output_arg {
    name: "activations"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_activations"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_activations"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QUINT8
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
}
op {
  name: "QuantizedReluX"
  input_arg {
    name: "features"
    type_attr: "Tinput"
  }
  input_arg {
    name: "max_value"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_features"
    type: DT_FLOAT
  }
  input_arg {
    name: "max_features"
    type: DT_FLOAT
  }
  output_arg {
    name: "activations"
    type_attr: "out_type"
  }
  output_arg {
    name: "min_activations"
    type: DT_FLOAT
  }
  output_arg {
    name: "max_activations"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QUINT8
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
}
op {
  name: "QuantizedReshape"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  input_arg {
    name: "shape"
    type_attr: "Tshape"
  }
  input_arg {
    name: "input_min"
    type: DT_FLOAT
  }
  input_arg {
    name: "input_max"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  output_arg {
    name: "output_min"
    type: DT_FLOAT
  }
  output_arg {
    name: "output_max"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tshape"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "QuantizedResizeBilinear"
  input_arg {
    name: "images"
    type_attr: "T"
  }
  input_arg {
    name: "size"
    type: DT_INT32
  }
  input_arg {
    name: "min"
    type: DT_FLOAT
  }
  input_arg {
    name: "max"
    type: DT_FLOAT
  }
  output_arg {
    name: "resized_images"
    type_attr: "T"
  }
  output_arg {
    name: "out_min"
    type: DT_FLOAT
  }
  output_arg {
    name: "out_max"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "align_corners"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "half_pixel_centers"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "QueueClose"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "cancel_pending_enqueues"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "QueueCloseV2"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "cancel_pending_enqueues"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "QueueDequeue"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  output_arg {
    name: "components"
    type_list_attr: "component_types"
  }
  attr {
    name: "component_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "timeout_ms"
    type: "int"
    default_value {
      i: -1
    }
  }
}
op {
  name: "QueueDequeueMany"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "n"
    type: DT_INT32
  }
  output_arg {
    name: "components"
    type_list_attr: "component_types"
  }
  attr {
    name: "component_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "timeout_ms"
    type: "int"
    default_value {
      i: -1
    }
  }
}
op {
  name: "QueueDequeueManyV2"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "n"
    type: DT_INT32
  }
  output_arg {
    name: "components"
    type_list_attr: "component_types"
  }
  attr {
    name: "component_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "timeout_ms"
    type: "int"
    default_value {
      i: -1
    }
  }
  is_stateful: true
}
op {
  name: "QueueDequeueUpTo"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "n"
    type: DT_INT32
  }
  output_arg {
    name: "components"
    type_list_attr: "component_types"
  }
  attr {
    name: "component_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "timeout_ms"
    type: "int"
    default_value {
      i: -1
    }
  }
}
op {
  name: "QueueDequeueUpToV2"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "n"
    type: DT_INT32
  }
  output_arg {
    name: "components"
    type_list_attr: "component_types"
  }
  attr {
    name: "component_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "timeout_ms"
    type: "int"
    default_value {
      i: -1
    }
  }
  is_stateful: true
}
op {
  name: "QueueDequeueV2"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "components"
    type_list_attr: "component_types"
  }
  attr {
    name: "component_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "timeout_ms"
    type: "int"
    default_value {
      i: -1
    }
  }
  is_stateful: true
}
op {
  name: "QueueEnqueue"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "components"
    type_list_attr: "Tcomponents"
  }
  attr {
    name: "Tcomponents"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "timeout_ms"
    type: "int"
    default_value {
      i: -1
    }
  }
}
op {
  name: "QueueEnqueueMany"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "components"
    type_list_attr: "Tcomponents"
  }
  attr {
    name: "Tcomponents"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "timeout_ms"
    type: "int"
    default_value {
      i: -1
    }
  }
}
op {
  name: "QueueEnqueueManyV2"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "components"
    type_list_attr: "Tcomponents"
  }
  attr {
    name: "Tcomponents"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "timeout_ms"
    type: "int"
    default_value {
      i: -1
    }
  }
  is_stateful: true
}
op {
  name: "QueueEnqueueV2"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "components"
    type_list_attr: "Tcomponents"
  }
  attr {
    name: "Tcomponents"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "timeout_ms"
    type: "int"
    default_value {
      i: -1
    }
  }
  is_stateful: true
}
op {
  name: "QueueIsClosed"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  output_arg {
    name: "is_closed"
    type: DT_BOOL
  }
}
op {
  name: "QueueIsClosedV2"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "is_closed"
    type: DT_BOOL
  }
  is_stateful: true
}
op {
  name: "QueueSize"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  output_arg {
    name: "size"
    type: DT_INT32
  }
}
op {
  name: "QueueSizeV2"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "size"
    type: DT_INT32
  }
  is_stateful: true
}
op {
  name: "RFFT"
  input_arg {
    name: "input"
    type_attr: "Treal"
  }
  input_arg {
    name: "fft_length"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "Tcomplex"
  }
  attr {
    name: "Treal"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tcomplex"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "RFFT2D"
  input_arg {
    name: "input"
    type_attr: "Treal"
  }
  input_arg {
    name: "fft_length"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "Tcomplex"
  }
  attr {
    name: "Treal"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tcomplex"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "RFFT3D"
  input_arg {
    name: "input"
    type_attr: "Treal"
  }
  input_arg {
    name: "fft_length"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "Tcomplex"
  }
  attr {
    name: "Treal"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tcomplex"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "RGBToHSV"
  input_arg {
    name: "images"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RaggedBincount"
  input_arg {
    name: "splits"
    type: DT_INT64
  }
  input_arg {
    name: "values"
    type_attr: "Tidx"
  }
  input_arg {
    name: "size"
    type_attr: "Tidx"
  }
  input_arg {
    name: "weights"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "Tidx"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "binary_output"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "RaggedCountSparseOutput"
  input_arg {
    name: "splits"
    type: DT_INT64
  }
  input_arg {
    name: "values"
    type_attr: "T"
  }
  input_arg {
    name: "weights"
    type_attr: "output_type"
  }
  output_arg {
    name: "output_indices"
    type: DT_INT64
  }
  output_arg {
    name: "output_values"
    type_attr: "output_type"
  }
  output_arg {
    name: "output_dense_shape"
    type: DT_INT64
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "minlength"
    type: "int"
    default_value {
      i: -1
    }
    has_minimum: true
    minimum: -1
  }
  attr {
    name: "maxlength"
    type: "int"
    default_value {
      i: -1
    }
    has_minimum: true
    minimum: -1
  }
  attr {
    name: "binary_output"
    type: "bool"
  }
  attr {
    name: "output_type"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RaggedCross"
  input_arg {
    name: "ragged_values"
    type_list_attr: "ragged_values_types"
  }
  input_arg {
    name: "ragged_row_splits"
    type_list_attr: "ragged_splits_types"
  }
  input_arg {
    name: "sparse_indices"
    type: DT_INT64
    number_attr: "Nsparse"
  }
  input_arg {
    name: "sparse_values"
    type_list_attr: "sparse_values_types"
  }
  input_arg {
    name: "sparse_shape"
    type: DT_INT64
    number_attr: "Nsparse"
  }
  input_arg {
    name: "dense_inputs"
    type_list_attr: "dense_types"
  }
  output_arg {
    name: "output_values"
    type_attr: "out_values_type"
  }
  output_arg {
    name: "output_row_splits"
    type_attr: "out_row_splits_type"
  }
  attr {
    name: "Nsparse"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "input_order"
    type: "string"
  }
  attr {
    name: "hashed_output"
    type: "bool"
  }
  attr {
    name: "num_buckets"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "hash_key"
    type: "int"
  }
  attr {
    name: "ragged_values_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "ragged_splits_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "sparse_values_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "dense_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "out_values_type"
    type: "type"
    allowed_values {
      list {
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "out_row_splits_type"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "RaggedGather"
  input_arg {
    name: "params_nested_splits"
    type_attr: "Tsplits"
    number_attr: "PARAMS_RAGGED_RANK"
  }
  input_arg {
    name: "params_dense_values"
    type_attr: "Tvalues"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  output_arg {
    name: "output_nested_splits"
    type_attr: "Tsplits"
    number_attr: "OUTPUT_RAGGED_RANK"
  }
  output_arg {
    name: "output_dense_values"
    type_attr: "Tvalues"
  }
  attr {
    name: "Tvalues"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tsplits"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "PARAMS_RAGGED_RANK"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "OUTPUT_RAGGED_RANK"
    type: "int"
    has_minimum: true
  }
}
op {
  name: "RaggedRange"
  input_arg {
    name: "starts"
    type_attr: "T"
  }
  input_arg {
    name: "limits"
    type_attr: "T"
  }
  input_arg {
    name: "deltas"
    type_attr: "T"
  }
  output_arg {
    name: "rt_nested_splits"
    type_attr: "Tsplits"
  }
  output_arg {
    name: "rt_dense_values"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tsplits"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "RaggedTensorFromVariant"
  input_arg {
    name: "encoded_ragged"
    type: DT_VARIANT
  }
  output_arg {
    name: "output_nested_splits"
    type_attr: "Tsplits"
    number_attr: "output_ragged_rank"
  }
  output_arg {
    name: "output_dense_values"
    type_attr: "Tvalues"
  }
  attr {
    name: "input_ragged_rank"
    type: "int"
    has_minimum: true
    minimum: -1
  }
  attr {
    name: "output_ragged_rank"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "Tvalues"
    type: "type"
  }
  attr {
    name: "Tsplits"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "RaggedTensorToSparse"
  input_arg {
    name: "rt_nested_splits"
    type_attr: "Tsplits"
    number_attr: "RAGGED_RANK"
  }
  input_arg {
    name: "rt_dense_values"
    type_attr: "T"
  }
  output_arg {
    name: "sparse_indices"
    type: DT_INT64
  }
  output_arg {
    name: "sparse_values"
    type_attr: "T"
  }
  output_arg {
    name: "sparse_dense_shape"
    type: DT_INT64
  }
  attr {
    name: "RAGGED_RANK"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tsplits"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "RaggedTensorToTensor"
  input_arg {
    name: "shape"
    type_attr: "Tshape"
  }
  input_arg {
    name: "values"
    type_attr: "T"
  }
  input_arg {
    name: "default_value"
    type_attr: "T"
  }
  input_arg {
    name: "row_partition_tensors"
    type_attr: "Tindex"
    number_attr: "num_row_partition_tensors"
  }
  output_arg {
    name: "result"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindex"
    type: "type"
    allowed_values {
      list {
        type: DT_INT64
        type: DT_INT32
      }
    }
  }
  attr {
    name: "Tshape"
    type: "type"
    allowed_values {
      list {
        type: DT_INT64
        type: DT_INT32
      }
    }
  }
  attr {
    name: "num_row_partition_tensors"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "row_partition_types"
    type: "list(string)"
  }
}
op {
  name: "RaggedTensorToVariant"
  input_arg {
    name: "rt_nested_splits"
    type_attr: "Tsplits"
    number_attr: "RAGGED_RANK"
  }
  input_arg {
    name: "rt_dense_values"
    type_attr: "Tvalues"
  }
  output_arg {
    name: "encoded_ragged"
    type: DT_VARIANT
  }
  attr {
    name: "RAGGED_RANK"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "Tvalues"
    type: "type"
  }
  attr {
    name: "Tsplits"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "batched_input"
    type: "bool"
  }
}
op {
  name: "RaggedTensorToVariantGradient"
  input_arg {
    name: "encoded_ragged_grad"
    type: DT_VARIANT
  }
  input_arg {
    name: "row_splits"
    type_attr: "Tsplits"
  }
  input_arg {
    name: "dense_values_shape"
    type: DT_INT32
  }
  output_arg {
    name: "dense_values_grad"
    type_attr: "Tvalues"
  }
  attr {
    name: "Tvalues"
    type: "type"
  }
  attr {
    name: "Tsplits"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "RandomCrop"
  input_arg {
    name: "image"
    type_attr: "T"
  }
  input_arg {
    name: "size"
    type: DT_INT64
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  deprecation {
    version: 8
    explanation: "Random crop is now pure Python"
  }
  is_stateful: true
}
op {
  name: "RandomDataset"
  input_arg {
    name: "seed"
    type: DT_INT64
  }
  input_arg {
    name: "seed2"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "RandomGamma"
  input_arg {
    name: "shape"
    type_attr: "S"
  }
  input_arg {
    name: "alpha"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "S"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  is_stateful: true
}
op {
  name: "RandomGammaGrad"
  input_arg {
    name: "alpha"
    type_attr: "T"
  }
  input_arg {
    name: "sample"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RandomPoisson"
  input_arg {
    name: "shape"
    type_attr: "S"
  }
  input_arg {
    name: "rate"
    type_attr: "dtype"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "S"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  deprecation {
    version: 25
    explanation: "Replaced by RandomPoissonV2"
  }
  is_stateful: true
}
op {
  name: "RandomPoissonV2"
  input_arg {
    name: "shape"
    type_attr: "S"
  }
  input_arg {
    name: "rate"
    type_attr: "R"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "S"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "R"
    type: "type"
    default_value {
      type: DT_DOUBLE
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "RandomShuffle"
  input_arg {
    name: "value"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "T"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "RandomShuffleQueue"
  output_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "component_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "min_after_dequeue"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RandomShuffleQueueV2"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "component_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "min_after_dequeue"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RandomStandardNormal"
  input_arg {
    name: "shape"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "RandomUniform"
  input_arg {
    name: "shape"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "RandomUniformInt"
  input_arg {
    name: "shape"
    type_attr: "T"
  }
  input_arg {
    name: "minval"
    type_attr: "Tout"
  }
  input_arg {
    name: "maxval"
    type_attr: "Tout"
  }
  output_arg {
    name: "output"
    type_attr: "Tout"
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "Tout"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "Range"
  input_arg {
    name: "start"
    type_attr: "Tidx"
  }
  input_arg {
    name: "limit"
    type_attr: "Tidx"
  }
  input_arg {
    name: "delta"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "Tidx"
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "RangeDataset"
  input_arg {
    name: "start"
    type: DT_INT64
  }
  input_arg {
    name: "stop"
    type: DT_INT64
  }
  input_arg {
    name: "step"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "Rank"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type: DT_INT32
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "ReadFile"
  input_arg {
    name: "filename"
    type: DT_STRING
  }
  output_arg {
    name: "contents"
    type: DT_STRING
  }
}
op {
  name: "ReadVariableOp"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  output_arg {
    name: "value"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "ReaderNumRecordsProduced"
  input_arg {
    name: "reader_handle"
    type: DT_STRING
    is_ref: true
  }
  output_arg {
    name: "records_produced"
    type: DT_INT64
  }
}
op {
  name: "ReaderNumRecordsProducedV2"
  input_arg {
    name: "reader_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "records_produced"
    type: DT_INT64
  }
  is_stateful: true
}
op {
  name: "ReaderNumWorkUnitsCompleted"
  input_arg {
    name: "reader_handle"
    type: DT_STRING
    is_ref: true
  }
  output_arg {
    name: "units_completed"
    type: DT_INT64
  }
}
op {
  name: "ReaderNumWorkUnitsCompletedV2"
  input_arg {
    name: "reader_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "units_completed"
    type: DT_INT64
  }
  is_stateful: true
}
op {
  name: "ReaderRead"
  input_arg {
    name: "reader_handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "queue_handle"
    type: DT_STRING
    is_ref: true
  }
  output_arg {
    name: "key"
    type: DT_STRING
  }
  output_arg {
    name: "value"
    type: DT_STRING
  }
}
op {
  name: "ReaderReadUpTo"
  input_arg {
    name: "reader_handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "queue_handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "num_records"
    type: DT_INT64
  }
  output_arg {
    name: "keys"
    type: DT_STRING
  }
  output_arg {
    name: "values"
    type: DT_STRING
  }
}
op {
  name: "ReaderReadUpToV2"
  input_arg {
    name: "reader_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "queue_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "num_records"
    type: DT_INT64
  }
  output_arg {
    name: "keys"
    type: DT_STRING
  }
  output_arg {
    name: "values"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "ReaderReadV2"
  input_arg {
    name: "reader_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "queue_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "key"
    type: DT_STRING
  }
  output_arg {
    name: "value"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "ReaderReset"
  input_arg {
    name: "reader_handle"
    type: DT_STRING
    is_ref: true
  }
}
op {
  name: "ReaderResetV2"
  input_arg {
    name: "reader_handle"
    type: DT_RESOURCE
  }
  is_stateful: true
}
op {
  name: "ReaderRestoreState"
  input_arg {
    name: "reader_handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "state"
    type: DT_STRING
  }
}
op {
  name: "ReaderRestoreStateV2"
  input_arg {
    name: "reader_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "state"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "ReaderSerializeState"
  input_arg {
    name: "reader_handle"
    type: DT_STRING
    is_ref: true
  }
  output_arg {
    name: "state"
    type: DT_STRING
  }
}
op {
  name: "ReaderSerializeStateV2"
  input_arg {
    name: "reader_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "state"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "Real"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "Tout"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
  attr {
    name: "Tout"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RealDiv"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_UINT8
        type: DT_INT8
        type: DT_UINT16
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "RebatchDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "num_replicas"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "use_fallback"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "RebatchDatasetV2"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "batch_sizes"
    type: DT_INT64
  }
  input_arg {
    name: "drop_remainder"
    type: DT_BOOL
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "Reciprocal"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "ReciprocalGrad"
  input_arg {
    name: "y"
    type_attr: "T"
  }
  input_arg {
    name: "dy"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "RecordInput"
  output_arg {
    name: "records"
    type: DT_STRING
  }
  attr {
    name: "file_pattern"
    type: "string"
  }
  attr {
    name: "file_random_seed"
    type: "int"
    default_value {
      i: 301
    }
  }
  attr {
    name: "file_shuffle_shift_ratio"
    type: "float"
    default_value {
      f: 0
    }
  }
  attr {
    name: "file_buffer_size"
    type: "int"
    default_value {
      i: 10000
    }
  }
  attr {
    name: "file_parallelism"
    type: "int"
    default_value {
      i: 16
    }
  }
  attr {
    name: "batch_size"
    type: "int"
    default_value {
      i: 32
    }
  }
  attr {
    name: "compression_type"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "Recv"
  output_arg {
    name: "tensor"
    type_attr: "tensor_type"
  }
  attr {
    name: "tensor_type"
    type: "type"
  }
  attr {
    name: "tensor_name"
    type: "string"
  }
  attr {
    name: "send_device"
    type: "string"
  }
  attr {
    name: "send_device_incarnation"
    type: "int"
  }
  attr {
    name: "recv_device"
    type: "string"
  }
  attr {
    name: "client_terminated"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "RecvTPUEmbeddingActivations"
  output_arg {
    name: "outputs"
    type: DT_FLOAT
    number_attr: "num_outputs"
  }
  attr {
    name: "num_outputs"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "config"
    type: "string"
  }
  is_stateful: true
}
op {
  name: "ReduceDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "initial_state"
    type_list_attr: "Tstate"
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  output_arg {
    name: "components"
    type_list_attr: "output_types"
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "Tstate"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "use_inter_op_parallelism"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "ReduceJoin"
  input_arg {
    name: "inputs"
    type: DT_STRING
  }
  input_arg {
    name: "reduction_indices"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type: DT_STRING
  }
  attr {
    name: "keep_dims"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "separator"
    type: "string"
    default_value {
      s: ""
    }
  }
}
op {
  name: "RefEnter"
  input_arg {
    name: "data"
    type_attr: "T"
    is_ref: true
  }
  output_arg {
    name: "output"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "frame_name"
    type: "string"
  }
  attr {
    name: "is_constant"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "parallel_iterations"
    type: "int"
    default_value {
      i: 10
    }
  }
}
op {
  name: "RefExit"
  input_arg {
    name: "data"
    type_attr: "T"
    is_ref: true
  }
  output_arg {
    name: "output"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "RefIdentity"
  input_arg {
    name: "input"
    type_attr: "T"
    is_ref: true
  }
  output_arg {
    name: "output"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
  }
  allows_uninitialized_input: true
}
op {
  name: "RefMerge"
  input_arg {
    name: "inputs"
    type_attr: "T"
    number_attr: "N"
    is_ref: true
  }
  output_arg {
    name: "output"
    type_attr: "T"
    is_ref: true
  }
  output_arg {
    name: "value_index"
    type: DT_INT32
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "RefNextIteration"
  input_arg {
    name: "data"
    type_attr: "T"
    is_ref: true
  }
  output_arg {
    name: "output"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "RefSelect"
  input_arg {
    name: "index"
    type: DT_INT32
  }
  input_arg {
    name: "inputs"
    type_attr: "T"
    number_attr: "N"
    is_ref: true
  }
  output_arg {
    name: "output"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "RefSwitch"
  input_arg {
    name: "data"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "pred"
    type: DT_BOOL
  }
  output_arg {
    name: "output_false"
    type_attr: "T"
    is_ref: true
  }
  output_arg {
    name: "output_true"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
  }
  allows_uninitialized_input: true
}
op {
  name: "RegexFullMatch"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  input_arg {
    name: "pattern"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type: DT_BOOL
  }
}
op {
  name: "RegexReplace"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  input_arg {
    name: "pattern"
    type: DT_STRING
  }
  input_arg {
    name: "rewrite"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type: DT_STRING
  }
  attr {
    name: "replace_global"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "RegisterDataset"
  input_arg {
    name: "dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "address"
    type: DT_STRING
  }
  input_arg {
    name: "protocol"
    type: DT_STRING
  }
  output_arg {
    name: "dataset_id"
    type: DT_INT64
  }
  attr {
    name: "external_state_policy"
    type: "int"
  }
}
op {
  name: "Relu"
  input_arg {
    name: "features"
    type_attr: "T"
  }
  output_arg {
    name: "activations"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
        type: DT_QINT8
      }
    }
  }
}
op {
  name: "Relu6"
  input_arg {
    name: "features"
    type_attr: "T"
  }
  output_arg {
    name: "activations"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "Relu6Grad"
  input_arg {
    name: "gradients"
    type_attr: "T"
  }
  input_arg {
    name: "features"
    type_attr: "T"
  }
  output_arg {
    name: "backprops"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "ReluGrad"
  input_arg {
    name: "gradients"
    type_attr: "T"
  }
  input_arg {
    name: "features"
    type_attr: "T"
  }
  output_arg {
    name: "backprops"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "RemoteCall"
  input_arg {
    name: "target"
    type: DT_STRING
  }
  input_arg {
    name: "args"
    type_list_attr: "Tin"
  }
  output_arg {
    name: "output"
    type_list_attr: "Tout"
  }
  attr {
    name: "Tin"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "Tout"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "f"
    type: "func"
  }
  is_stateful: true
}
op {
  name: "RemoteFusedGraphExecute"
  input_arg {
    name: "inputs"
    type_list_attr: "Tinputs"
  }
  output_arg {
    name: "outputs"
    type_list_attr: "Toutputs"
  }
  attr {
    name: "Tinputs"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Toutputs"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "serialized_remote_fused_graph_execute_info"
    type: "string"
  }
}
op {
  name: "RepeatDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "count"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "RequantizationRange"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "input_min"
    type: DT_FLOAT
  }
  input_arg {
    name: "input_max"
    type: DT_FLOAT
  }
  output_arg {
    name: "output_min"
    type: DT_FLOAT
  }
  output_arg {
    name: "output_max"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
}
op {
  name: "RequantizationRangePerChannel"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "input_min"
    type: DT_FLOAT
  }
  input_arg {
    name: "input_max"
    type: DT_FLOAT
  }
  output_arg {
    name: "output_min"
    type: DT_FLOAT
  }
  output_arg {
    name: "output_max"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_QINT32
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "clip_value_max"
    type: "float"
  }
}
op {
  name: "Requantize"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  input_arg {
    name: "input_min"
    type: DT_FLOAT
  }
  input_arg {
    name: "input_max"
    type: DT_FLOAT
  }
  input_arg {
    name: "requested_output_min"
    type: DT_FLOAT
  }
  input_arg {
    name: "requested_output_max"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "output_min"
    type: DT_FLOAT
  }
  output_arg {
    name: "output_max"
    type: DT_FLOAT
  }
  attr {
    name: "Tinput"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
}
op {
  name: "RequantizePerChannel"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "input_min"
    type: DT_FLOAT
  }
  input_arg {
    name: "input_max"
    type: DT_FLOAT
  }
  input_arg {
    name: "requested_output_min"
    type: DT_FLOAT
  }
  input_arg {
    name: "requested_output_max"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  output_arg {
    name: "output_min"
    type: DT_FLOAT
  }
  output_arg {
    name: "output_max"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_QINT32
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_QUINT8
    }
    allowed_values {
      list {
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_QINT16
        type: DT_QUINT16
      }
    }
  }
}
op {
  name: "Reshape"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  input_arg {
    name: "shape"
    type_attr: "Tshape"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tshape"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "ResizeArea"
  input_arg {
    name: "images"
    type_attr: "T"
  }
  input_arg {
    name: "size"
    type: DT_INT32
  }
  output_arg {
    name: "resized_images"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_UINT8
        type: DT_INT16
        type: DT_UINT16
        type: DT_INT32
        type: DT_INT64
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_BFLOAT16
      }
    }
  }
  attr {
    name: "align_corners"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ResizeBicubic"
  input_arg {
    name: "images"
    type_attr: "T"
  }
  input_arg {
    name: "size"
    type: DT_INT32
  }
  output_arg {
    name: "resized_images"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_UINT8
        type: DT_INT16
        type: DT_UINT16
        type: DT_INT32
        type: DT_INT64
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_BFLOAT16
      }
    }
  }
  attr {
    name: "align_corners"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "half_pixel_centers"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ResizeBicubicGrad"
  input_arg {
    name: "grads"
    type: DT_FLOAT
  }
  input_arg {
    name: "original_image"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "align_corners"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "half_pixel_centers"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ResizeBilinear"
  input_arg {
    name: "images"
    type_attr: "T"
  }
  input_arg {
    name: "size"
    type: DT_INT32
  }
  output_arg {
    name: "resized_images"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_UINT8
        type: DT_INT16
        type: DT_UINT16
        type: DT_INT32
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_BFLOAT16
      }
    }
  }
  attr {
    name: "align_corners"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "half_pixel_centers"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ResizeBilinearGrad"
  input_arg {
    name: "grads"
    type: DT_FLOAT
  }
  input_arg {
    name: "original_image"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "align_corners"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "half_pixel_centers"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ResizeNearestNeighbor"
  input_arg {
    name: "images"
    type_attr: "T"
  }
  input_arg {
    name: "size"
    type: DT_INT32
  }
  output_arg {
    name: "resized_images"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_UINT8
        type: DT_INT16
        type: DT_UINT16
        type: DT_INT32
        type: DT_INT64
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_BFLOAT16
      }
    }
  }
  attr {
    name: "align_corners"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "half_pixel_centers"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ResizeNearestNeighborGrad"
  input_arg {
    name: "grads"
    type_attr: "T"
  }
  input_arg {
    name: "size"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_INT8
        type: DT_INT32
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "align_corners"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "half_pixel_centers"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ResourceAccumulatorApplyGradient"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "local_step"
    type: DT_INT64
  }
  input_arg {
    name: "gradient"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "ResourceAccumulatorNumAccumulated"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "num_accumulated"
    type: DT_INT32
  }
  is_stateful: true
}
op {
  name: "ResourceAccumulatorSetGlobalStep"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "new_global_step"
    type: DT_INT64
  }
  is_stateful: true
}
op {
  name: "ResourceAccumulatorTakeGradient"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "num_required"
    type: DT_INT32
  }
  output_arg {
    name: "average"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyAdaMax"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "m"
    type: DT_RESOURCE
  }
  input_arg {
    name: "v"
    type: DT_RESOURCE
  }
  input_arg {
    name: "beta1_power"
    type_attr: "T"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "beta1"
    type_attr: "T"
  }
  input_arg {
    name: "beta2"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyAdadelta"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum_update"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "rho"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyAdagrad"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "update_slots"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyAdagradDA"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "gradient_accumulator"
    type: DT_RESOURCE
  }
  input_arg {
    name: "gradient_squared_accumulator"
    type: DT_RESOURCE
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "global_step"
    type: DT_INT64
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyAdagradV2"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "update_slots"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyAdam"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "m"
    type: DT_RESOURCE
  }
  input_arg {
    name: "v"
    type: DT_RESOURCE
  }
  input_arg {
    name: "beta1_power"
    type_attr: "T"
  }
  input_arg {
    name: "beta2_power"
    type_attr: "T"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "beta1"
    type_attr: "T"
  }
  input_arg {
    name: "beta2"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "use_nesterov"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyAdamWithAmsgrad"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "m"
    type: DT_RESOURCE
  }
  input_arg {
    name: "v"
    type: DT_RESOURCE
  }
  input_arg {
    name: "vhat"
    type: DT_RESOURCE
  }
  input_arg {
    name: "beta1_power"
    type_attr: "T"
  }
  input_arg {
    name: "beta2_power"
    type_attr: "T"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "beta1"
    type_attr: "T"
  }
  input_arg {
    name: "beta2"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyAddSign"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "m"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "alpha"
    type_attr: "T"
  }
  input_arg {
    name: "sign_decay"
    type_attr: "T"
  }
  input_arg {
    name: "beta"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyCenteredRMSProp"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "mg"
    type: DT_RESOURCE
  }
  input_arg {
    name: "ms"
    type: DT_RESOURCE
  }
  input_arg {
    name: "mom"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "rho"
    type_attr: "T"
  }
  input_arg {
    name: "momentum"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyFtrl"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum"
    type: DT_RESOURCE
  }
  input_arg {
    name: "linear"
    type: DT_RESOURCE
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "lr_power"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "multiply_linear_by_lr"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyFtrlV2"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum"
    type: DT_RESOURCE
  }
  input_arg {
    name: "linear"
    type: DT_RESOURCE
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "l2_shrinkage"
    type_attr: "T"
  }
  input_arg {
    name: "lr_power"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "multiply_linear_by_lr"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyGradientDescent"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "alpha"
    type_attr: "T"
  }
  input_arg {
    name: "delta"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyKerasMomentum"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "momentum"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "use_nesterov"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyMomentum"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "momentum"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "use_nesterov"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyPowerSign"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "m"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "logbase"
    type_attr: "T"
  }
  input_arg {
    name: "sign_decay"
    type_attr: "T"
  }
  input_arg {
    name: "beta"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyProximalAdagrad"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyProximalGradientDescent"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "alpha"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "delta"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceApplyRMSProp"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "ms"
    type: DT_RESOURCE
  }
  input_arg {
    name: "mom"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "rho"
    type_attr: "T"
  }
  input_arg {
    name: "momentum"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceConditionalAccumulator"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "shape"
    type: "shape"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "reduction_type"
    type: "string"
    default_value {
      s: "MEAN"
    }
    allowed_values {
      list {
        s: "MEAN"
        s: "SUM"
      }
    }
  }
  is_stateful: true
}
op {
  name: "ResourceCountUpTo"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "limit"
    type: "int"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "ResourceGather"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "batch_dims"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "validate_indices"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "ResourceGatherNd"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "ResourceScatterAdd"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "ResourceScatterDiv"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "ResourceScatterMax"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "ResourceScatterMin"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "ResourceScatterMul"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "ResourceScatterNdAdd"
  input_arg {
    name: "ref"
    type: DT_RESOURCE
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "ResourceScatterNdMax"
  input_arg {
    name: "ref"
    type: DT_RESOURCE
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "ResourceScatterNdMin"
  input_arg {
    name: "ref"
    type: DT_RESOURCE
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "ResourceScatterNdSub"
  input_arg {
    name: "ref"
    type: DT_RESOURCE
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "ResourceScatterNdUpdate"
  input_arg {
    name: "ref"
    type: DT_RESOURCE
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "ResourceScatterSub"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "ResourceScatterUpdate"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "ResourceSparseApplyAdadelta"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum_update"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "rho"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceSparseApplyAdagrad"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "update_slots"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "ResourceSparseApplyAdagradDA"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "gradient_accumulator"
    type: DT_RESOURCE
  }
  input_arg {
    name: "gradient_squared_accumulator"
    type: DT_RESOURCE
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "global_step"
    type: DT_INT64
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceSparseApplyAdagradV2"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "update_slots"
    type: "bool"
    default_value {
      b: true
    }
  }
  is_stateful: true
}
op {
  name: "ResourceSparseApplyCenteredRMSProp"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "mg"
    type: DT_RESOURCE
  }
  input_arg {
    name: "ms"
    type: DT_RESOURCE
  }
  input_arg {
    name: "mom"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "rho"
    type_attr: "T"
  }
  input_arg {
    name: "momentum"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceSparseApplyFtrl"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum"
    type: DT_RESOURCE
  }
  input_arg {
    name: "linear"
    type: DT_RESOURCE
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "lr_power"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "multiply_linear_by_lr"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceSparseApplyFtrlV2"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum"
    type: DT_RESOURCE
  }
  input_arg {
    name: "linear"
    type: DT_RESOURCE
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "l2_shrinkage"
    type_attr: "T"
  }
  input_arg {
    name: "lr_power"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "multiply_linear_by_lr"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceSparseApplyKerasMomentum"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "momentum"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "use_nesterov"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceSparseApplyMomentum"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "momentum"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "use_nesterov"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceSparseApplyProximalAdagrad"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "accum"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceSparseApplyProximalGradientDescent"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "alpha"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceSparseApplyRMSProp"
  input_arg {
    name: "var"
    type: DT_RESOURCE
  }
  input_arg {
    name: "ms"
    type: DT_RESOURCE
  }
  input_arg {
    name: "mom"
    type: DT_RESOURCE
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "rho"
    type_attr: "T"
  }
  input_arg {
    name: "momentum"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "ResourceStridedSliceAssign"
  input_arg {
    name: "ref"
    type: DT_RESOURCE
  }
  input_arg {
    name: "begin"
    type_attr: "Index"
  }
  input_arg {
    name: "end"
    type_attr: "Index"
  }
  input_arg {
    name: "strides"
    type_attr: "Index"
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Index"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "begin_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "end_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "ellipsis_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "new_axis_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "shrink_axis_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  is_stateful: true
}
op {
  name: "Restore"
  input_arg {
    name: "file_pattern"
    type: DT_STRING
  }
  input_arg {
    name: "tensor_name"
    type: DT_STRING
  }
  output_arg {
    name: "tensor"
    type_attr: "dt"
  }
  attr {
    name: "dt"
    type: "type"
  }
  attr {
    name: "preferred_shard"
    type: "int"
    default_value {
      i: -1
    }
  }
  is_stateful: true
}
op {
  name: "RestoreSlice"
  input_arg {
    name: "file_pattern"
    type: DT_STRING
  }
  input_arg {
    name: "tensor_name"
    type: DT_STRING
  }
  input_arg {
    name: "shape_and_slice"
    type: DT_STRING
  }
  output_arg {
    name: "tensor"
    type_attr: "dt"
  }
  attr {
    name: "dt"
    type: "type"
  }
  attr {
    name: "preferred_shard"
    type: "int"
    default_value {
      i: -1
    }
  }
  is_stateful: true
}
op {
  name: "RestoreV2"
  input_arg {
    name: "prefix"
    type: DT_STRING
  }
  input_arg {
    name: "tensor_names"
    type: DT_STRING
  }
  input_arg {
    name: "shape_and_slices"
    type: DT_STRING
  }
  output_arg {
    name: "tensors"
    type_list_attr: "dtypes"
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingADAMParameters"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "momenta"
    type: DT_FLOAT
  }
  output_arg {
    name: "velocities"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingADAMParametersGradAccumDebug"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "momenta"
    type: DT_FLOAT
  }
  output_arg {
    name: "velocities"
    type: DT_FLOAT
  }
  output_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingAdadeltaParameters"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  output_arg {
    name: "updates"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebug"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  output_arg {
    name: "updates"
    type: DT_FLOAT
  }
  output_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingAdagradParameters"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingAdagradParametersGradAccumDebug"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  output_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingCenteredRMSPropParameters"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "ms"
    type: DT_FLOAT
  }
  output_arg {
    name: "mom"
    type: DT_FLOAT
  }
  output_arg {
    name: "mg"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingFTRLParameters"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  output_arg {
    name: "linears"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingFTRLParametersGradAccumDebug"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  output_arg {
    name: "linears"
    type: DT_FLOAT
  }
  output_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingFrequencyEstimatorParameters"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "last_hit_step"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingFrequencyEstimatorParametersGradAccumDebug"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "last_hit_step"
    type: DT_FLOAT
  }
  output_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingMDLAdagradLightParameters"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  output_arg {
    name: "weights"
    type: DT_FLOAT
  }
  output_arg {
    name: "benefits"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingMomentumParameters"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "momenta"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingMomentumParametersGradAccumDebug"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "momenta"
    type: DT_FLOAT
  }
  output_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingProximalAdagradParameters"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebug"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "accumulators"
    type: DT_FLOAT
  }
  output_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingProximalYogiParameters"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "v"
    type: DT_FLOAT
  }
  output_arg {
    name: "m"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingProximalYogiParametersGradAccumDebug"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "v"
    type: DT_FLOAT
  }
  output_arg {
    name: "m"
    type: DT_FLOAT
  }
  output_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingRMSPropParameters"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "ms"
    type: DT_FLOAT
  }
  output_arg {
    name: "mom"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingRMSPropParametersGradAccumDebug"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "ms"
    type: DT_FLOAT
  }
  output_arg {
    name: "mom"
    type: DT_FLOAT
  }
  output_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingStochasticGradientDescentParameters"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "RetrieveTPUEmbeddingStochasticGradientDescentParametersGradAccumDebug"
  output_arg {
    name: "parameters"
    type: DT_FLOAT
  }
  output_arg {
    name: "gradient_accumulators"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "table_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "num_shards"
    type: "int"
  }
  attr {
    name: "shard_id"
    type: "int"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "Reverse"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  input_arg {
    name: "dims"
    type: DT_BOOL
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_INT8
        type: DT_UINT16
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_BOOL
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
        type: DT_STRING
      }
    }
  }
}
op {
  name: "ReverseSequence"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "seq_lengths"
    type_attr: "Tlen"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "seq_dim"
    type: "int"
  }
  attr {
    name: "batch_dim"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tlen"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "ReverseV2"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  input_arg {
    name: "axis"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_INT8
        type: DT_UINT16
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_BOOL
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
        type: DT_STRING
      }
    }
  }
}
op {
  name: "RightShift"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT8
        type: DT_UINT16
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "Rint"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RiscAdd"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  is_aggregate: true
  is_commutative: true
}
op {
  name: "RiscBinaryArithmetic"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "op_type"
    type: "string"
    allowed_values {
      list {
        s: "ADD"
        s: "SUB"
        s: "MUL"
        s: "DIV"
        s: "REM"
        s: "MIN"
        s: "POW"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RiscBinaryComparison"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type: DT_BOOL
  }
  attr {
    name: "op_type"
    type: "string"
    allowed_values {
      list {
        s: "EQ"
        s: "NE"
        s: "GE"
        s: "GT"
        s: "LE"
        s: "LT"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RiscBitcast"
  input_arg {
    name: "x"
    type_attr: "SrcT"
  }
  output_arg {
    name: "y"
    type_attr: "DstT"
  }
  attr {
    name: "SrcT"
    type: "type"
  }
  attr {
    name: "DstT"
    type: "type"
  }
}
op {
  name: "RiscBroadcast"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "shape"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "RiscCast"
  input_arg {
    name: "x"
    type_attr: "SrcT"
  }
  output_arg {
    name: "y"
    type_attr: "DstT"
  }
  attr {
    name: "SrcT"
    type: "type"
  }
  attr {
    name: "DstT"
    type: "type"
  }
}
op {
  name: "RiscCholesky"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RiscConcat"
  input_arg {
    name: "values"
    type_attr: "T"
    number_attr: "N"
  }
  input_arg {
    name: "axis"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 2
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "RiscCondition"
  input_arg {
    name: "pred"
    type: DT_BOOL
  }
  input_arg {
    name: "input_true"
    type_attr: "SrcT"
  }
  input_arg {
    name: "input_false"
    type_attr: "SrcT"
  }
  output_arg {
    name: "output"
    type_attr: "DstT"
  }
  attr {
    name: "func_true"
    type: "func"
  }
  attr {
    name: "func_false"
    type: "func"
  }
  attr {
    name: "SrcT"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "DstT"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RiscConv"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "filter"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "strides"
    type: "list(int)"
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "dilations"
    type: "list(int)"
    default_value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
}
op {
  name: "RiscDot"
  input_arg {
    name: "a"
    type_attr: "T"
  }
  input_arg {
    name: "b"
    type_attr: "T"
  }
  output_arg {
    name: "product"
    type_attr: "T"
  }
  attr {
    name: "transpose_a"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "transpose_b"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RiscFft"
  input_arg {
    name: "input"
    type_attr: "Tcomplex"
  }
  output_arg {
    name: "output"
    type_attr: "Tcomplex"
  }
  attr {
    name: "Tcomplex"
    type: "type"
    default_value {
      type: DT_COMPLEX64
    }
    allowed_values {
      list {
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "RiscGather"
  input_arg {
    name: "params"
    type_attr: "Tparams"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "axis"
    type_attr: "Taxis"
  }
  output_arg {
    name: "output"
    type_attr: "Tparams"
  }
  attr {
    name: "batch_dims"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "Tparams"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Taxis"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "RiscIsFinite"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type: DT_BOOL
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RiscLogicalAnd"
  input_arg {
    name: "x"
    type: DT_BOOL
  }
  input_arg {
    name: "y"
    type: DT_BOOL
  }
  output_arg {
    name: "z"
    type: DT_BOOL
  }
}
op {
  name: "RiscLogicalNot"
  input_arg {
    name: "x"
    type: DT_BOOL
  }
  output_arg {
    name: "z"
    type: DT_BOOL
  }
}
op {
  name: "RiscLogicalOr"
  input_arg {
    name: "x"
    type: DT_BOOL
  }
  input_arg {
    name: "y"
    type: DT_BOOL
  }
  output_arg {
    name: "z"
    type: DT_BOOL
  }
}
op {
  name: "RiscMax"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "max"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RiscPad"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "paddings"
    type_attr: "Tpaddings"
  }
  input_arg {
    name: "constant_values"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tpaddings"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "RiscPool"
  input_arg {
    name: "value"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "ksize"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "strides"
    type: "list(int)"
    has_minimum: true
    minimum: 4
  }
  attr {
    name: "pooling_type"
    type: "string"
    allowed_values {
      list {
        s: "AVG"
        s: "MAX"
      }
    }
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RiscRandomUniform"
  input_arg {
    name: "shape"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type: DT_FLOAT
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "RiscReduce"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  input_arg {
    name: "axis"
    type_attr: "Index"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "reduce_type"
    type: "string"
    allowed_values {
      list {
        s: "MEAN"
        s: "SUM"
      }
    }
  }
  attr {
    name: "Index"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RiscReshape"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  input_arg {
    name: "shape"
    type_attr: "Tshape"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tshape"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "RiscReverse"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  input_arg {
    name: "axis"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RiscScatter"
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  input_arg {
    name: "shape"
    type_attr: "Tindices"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "RiscShape"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "RiscSlice"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "begin"
    type_attr: "Index"
  }
  input_arg {
    name: "size"
    type_attr: "Index"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Index"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "RiscSort"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "axis"
    type_attr: "Index"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "Index"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "direction"
    type: "string"
    allowed_values {
      list {
        s: "ASCENDING"
        s: "DESCENDING"
      }
    }
  }
}
op {
  name: "RiscSqueeze"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "squeeze_dims"
    type: "list(int)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
}
op {
  name: "RiscTranspose"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "perm"
    type_attr: "Tperm"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tperm"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "RiscTriangularSolve"
  input_arg {
    name: "matrix"
    type_attr: "T"
  }
  input_arg {
    name: "rhs"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "lower"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "adjoint"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RiscUnary"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "op_type"
    type: "string"
    allowed_values {
      list {
        s: "ABL"
        s: "CEIL"
        s: "COS"
        s: "EXP"
        s: "FLOOR"
        s: "IMAG"
        s: "LOG"
        s: "NEG"
        s: "REAL"
        s: "SIGN"
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "RiscWhile"
  input_arg {
    name: "input"
    type_list_attr: "T"
  }
  output_arg {
    name: "output"
    type_list_attr: "T"
  }
  attr {
    name: "T"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "cond"
    type: "func"
  }
  attr {
    name: "body"
    type: "func"
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "parallel_iterations"
    type: "int"
    default_value {
      i: 10
    }
  }
  is_stateful: true
}
op {
  name: "RngReadAndSkip"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "alg"
    type: DT_INT32
  }
  input_arg {
    name: "delta"
    type: DT_UINT64
  }
  output_arg {
    name: "value"
    type: DT_INT64
  }
  is_stateful: true
}
op {
  name: "RngSkip"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "algorithm"
    type: DT_INT64
  }
  input_arg {
    name: "delta"
    type: DT_INT64
  }
  is_stateful: true
}
op {
  name: "Roll"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "shift"
    type_attr: "Tshift"
  }
  input_arg {
    name: "axis"
    type_attr: "Taxis"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tshift"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Taxis"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "Round"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Rpc"
  input_arg {
    name: "address"
    type: DT_STRING
  }
  input_arg {
    name: "method"
    type: DT_STRING
  }
  input_arg {
    name: "request"
    type: DT_STRING
  }
  output_arg {
    name: "response"
    type: DT_STRING
  }
  attr {
    name: "protocol"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "fail_fast"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "timeout_in_ms"
    type: "int"
    default_value {
      i: 0
    }
  }
  is_stateful: true
}
op {
  name: "Rsqrt"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "RsqrtGrad"
  input_arg {
    name: "y"
    type_attr: "T"
  }
  input_arg {
    name: "dy"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "SampleDistortedBoundingBox"
  input_arg {
    name: "image_size"
    type_attr: "T"
  }
  input_arg {
    name: "bounding_boxes"
    type: DT_FLOAT
  }
  output_arg {
    name: "begin"
    type_attr: "T"
  }
  output_arg {
    name: "size"
    type_attr: "T"
  }
  output_arg {
    name: "bboxes"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "min_object_covered"
    type: "float"
    default_value {
      f: 0.1
    }
  }
  attr {
    name: "aspect_ratio_range"
    type: "list(float)"
    default_value {
      list {
        f: 0.75
        f: 1.33
      }
    }
  }
  attr {
    name: "area_range"
    type: "list(float)"
    default_value {
      list {
        f: 0.05
        f: 1
      }
    }
  }
  attr {
    name: "max_attempts"
    type: "int"
    default_value {
      i: 100
    }
  }
  attr {
    name: "use_image_if_no_bounding_boxes"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "SampleDistortedBoundingBoxV2"
  input_arg {
    name: "image_size"
    type_attr: "T"
  }
  input_arg {
    name: "bounding_boxes"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_object_covered"
    type: DT_FLOAT
  }
  output_arg {
    name: "begin"
    type_attr: "T"
  }
  output_arg {
    name: "size"
    type_attr: "T"
  }
  output_arg {
    name: "bboxes"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "aspect_ratio_range"
    type: "list(float)"
    default_value {
      list {
        f: 0.75
        f: 1.33
      }
    }
  }
  attr {
    name: "area_range"
    type: "list(float)"
    default_value {
      list {
        f: 0.05
        f: 1
      }
    }
  }
  attr {
    name: "max_attempts"
    type: "int"
    default_value {
      i: 100
    }
  }
  attr {
    name: "use_image_if_no_bounding_boxes"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "SamplingDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "rate"
    type: DT_FLOAT
  }
  input_arg {
    name: "seed"
    type: DT_INT64
  }
  input_arg {
    name: "seed2"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "Save"
  input_arg {
    name: "filename"
    type: DT_STRING
  }
  input_arg {
    name: "tensor_names"
    type: DT_STRING
  }
  input_arg {
    name: "data"
    type_list_attr: "T"
  }
  attr {
    name: "T"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "SaveDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "path"
    type: DT_STRING
  }
  input_arg {
    name: "shard_func_other_args"
    type_list_attr: "Tshard_func_args"
  }
  attr {
    name: "compression"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shard_func"
    type: "func"
  }
  attr {
    name: "use_shard_func"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "Tshard_func_args"
    type: "list(type)"
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "SaveSlices"
  input_arg {
    name: "filename"
    type: DT_STRING
  }
  input_arg {
    name: "tensor_names"
    type: DT_STRING
  }
  input_arg {
    name: "shapes_and_slices"
    type: DT_STRING
  }
  input_arg {
    name: "data"
    type_list_attr: "T"
  }
  attr {
    name: "T"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "SaveV2"
  input_arg {
    name: "prefix"
    type: DT_STRING
  }
  input_arg {
    name: "tensor_names"
    type: DT_STRING
  }
  input_arg {
    name: "shape_and_slices"
    type: DT_STRING
  }
  input_arg {
    name: "tensors"
    type_list_attr: "dtypes"
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "ScalarSummary"
  input_arg {
    name: "tags"
    type: DT_STRING
  }
  input_arg {
    name: "values"
    type_attr: "T"
  }
  output_arg {
    name: "summary"
    type: DT_STRING
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "ScaleAndTranslate"
  input_arg {
    name: "images"
    type_attr: "T"
  }
  input_arg {
    name: "size"
    type: DT_INT32
  }
  input_arg {
    name: "scale"
    type: DT_FLOAT
  }
  input_arg {
    name: "translation"
    type: DT_FLOAT
  }
  output_arg {
    name: "resized_images"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_UINT8
        type: DT_INT16
        type: DT_UINT16
        type: DT_INT32
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "kernel_type"
    type: "string"
    default_value {
      s: "lanczos3"
    }
  }
  attr {
    name: "antialias"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "ScaleAndTranslateGrad"
  input_arg {
    name: "grads"
    type_attr: "T"
  }
  input_arg {
    name: "original_image"
    type_attr: "T"
  }
  input_arg {
    name: "scale"
    type: DT_FLOAT
  }
  input_arg {
    name: "translation"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
      }
    }
  }
  attr {
    name: "kernel_type"
    type: "string"
    default_value {
      s: "lanczos3"
    }
  }
  attr {
    name: "antialias"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "ScanDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "initial_state"
    type_list_attr: "Tstate"
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "Tstate"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "preserve_cardinality"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "use_default_device"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "ScatterAdd"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output_ref"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ScatterDiv"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output_ref"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ScatterMax"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output_ref"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ScatterMin"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output_ref"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ScatterMul"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output_ref"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ScatterNd"
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  input_arg {
    name: "shape"
    type_attr: "Tindices"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "ScatterNdAdd"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output_ref"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ScatterNdMax"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output_ref"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ScatterNdMin"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output_ref"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ScatterNdNonAliasingAdd"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
        type: DT_BOOL
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "ScatterNdSub"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output_ref"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ScatterNdUpdate"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output_ref"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "ScatterSub"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output_ref"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "ScatterUpdate"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output_ref"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "SdcaFprint"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type: DT_INT64
  }
}
op {
  name: "SdcaOptimizer"
  input_arg {
    name: "sparse_example_indices"
    type: DT_INT64
    number_attr: "num_sparse_features"
  }
  input_arg {
    name: "sparse_feature_indices"
    type: DT_INT64
    number_attr: "num_sparse_features"
  }
  input_arg {
    name: "sparse_feature_values"
    type: DT_FLOAT
    number_attr: "num_sparse_features_with_values"
  }
  input_arg {
    name: "dense_features"
    type: DT_FLOAT
    number_attr: "num_dense_features"
  }
  input_arg {
    name: "example_weights"
    type: DT_FLOAT
  }
  input_arg {
    name: "example_labels"
    type: DT_FLOAT
  }
  input_arg {
    name: "sparse_indices"
    type: DT_INT64
    number_attr: "num_sparse_features"
  }
  input_arg {
    name: "sparse_weights"
    type: DT_FLOAT
    number_attr: "num_sparse_features"
  }
  input_arg {
    name: "dense_weights"
    type: DT_FLOAT
    number_attr: "num_dense_features"
  }
  input_arg {
    name: "example_state_data"
    type: DT_FLOAT
  }
  output_arg {
    name: "out_example_state_data"
    type: DT_FLOAT
  }
  output_arg {
    name: "out_delta_sparse_weights"
    type: DT_FLOAT
    number_attr: "num_sparse_features"
  }
  output_arg {
    name: "out_delta_dense_weights"
    type: DT_FLOAT
    number_attr: "num_dense_features"
  }
  attr {
    name: "loss_type"
    type: "string"
    allowed_values {
      list {
        s: "logistic_loss"
        s: "squared_loss"
        s: "hinge_loss"
        s: "smooth_hinge_loss"
        s: "poisson_loss"
      }
    }
  }
  attr {
    name: "adaptative"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "num_sparse_features"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "num_sparse_features_with_values"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "num_dense_features"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "l1"
    type: "float"
  }
  attr {
    name: "l2"
    type: "float"
  }
  attr {
    name: "num_loss_partitions"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "num_inner_iterations"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "SdcaOptimizerV2"
  input_arg {
    name: "sparse_example_indices"
    type: DT_INT64
    number_attr: "num_sparse_features"
  }
  input_arg {
    name: "sparse_feature_indices"
    type: DT_INT64
    number_attr: "num_sparse_features"
  }
  input_arg {
    name: "sparse_feature_values"
    type: DT_FLOAT
    number_attr: "num_sparse_features_with_values"
  }
  input_arg {
    name: "dense_features"
    type: DT_FLOAT
    number_attr: "num_dense_features"
  }
  input_arg {
    name: "example_weights"
    type: DT_FLOAT
  }
  input_arg {
    name: "example_labels"
    type: DT_FLOAT
  }
  input_arg {
    name: "sparse_indices"
    type: DT_INT64
    number_attr: "num_sparse_features"
  }
  input_arg {
    name: "sparse_weights"
    type: DT_FLOAT
    number_attr: "num_sparse_features"
  }
  input_arg {
    name: "dense_weights"
    type: DT_FLOAT
    number_attr: "num_dense_features"
  }
  input_arg {
    name: "example_state_data"
    type: DT_FLOAT
  }
  output_arg {
    name: "out_example_state_data"
    type: DT_FLOAT
  }
  output_arg {
    name: "out_delta_sparse_weights"
    type: DT_FLOAT
    number_attr: "num_sparse_features"
  }
  output_arg {
    name: "out_delta_dense_weights"
    type: DT_FLOAT
    number_attr: "num_dense_features"
  }
  attr {
    name: "loss_type"
    type: "string"
    allowed_values {
      list {
        s: "logistic_loss"
        s: "squared_loss"
        s: "hinge_loss"
        s: "smooth_hinge_loss"
        s: "poisson_loss"
      }
    }
  }
  attr {
    name: "adaptive"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "num_sparse_features"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "num_sparse_features_with_values"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "num_dense_features"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "l1"
    type: "float"
  }
  attr {
    name: "l2"
    type: "float"
  }
  attr {
    name: "num_loss_partitions"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "num_inner_iterations"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "SdcaShrinkL1"
  input_arg {
    name: "weights"
    type: DT_FLOAT
    number_attr: "num_features"
    is_ref: true
  }
  attr {
    name: "num_features"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "l1"
    type: "float"
  }
  attr {
    name: "l2"
    type: "float"
  }
}
op {
  name: "SegmentMax"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tindices"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SegmentMean"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tindices"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SegmentMin"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tindices"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SegmentProd"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tindices"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SegmentSum"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tindices"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "Select"
  input_arg {
    name: "condition"
    type: DT_BOOL
  }
  input_arg {
    name: "t"
    type_attr: "T"
  }
  input_arg {
    name: "e"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "SelectV2"
  input_arg {
    name: "condition"
    type: DT_BOOL
  }
  input_arg {
    name: "t"
    type_attr: "T"
  }
  input_arg {
    name: "e"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "SelfAdjointEig"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
        type: DT_HALF
      }
    }
  }
  deprecation {
    version: 11
    explanation: "Use SelfAdjointEigV2 instead."
  }
}
op {
  name: "SelfAdjointEigV2"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "e"
    type_attr: "T"
  }
  output_arg {
    name: "v"
    type_attr: "T"
  }
  attr {
    name: "compute_v"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
        type: DT_HALF
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Selu"
  input_arg {
    name: "features"
    type_attr: "T"
  }
  output_arg {
    name: "activations"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "SeluGrad"
  input_arg {
    name: "gradients"
    type_attr: "T"
  }
  input_arg {
    name: "outputs"
    type_attr: "T"
  }
  output_arg {
    name: "backprops"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "Send"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "tensor_name"
    type: "string"
  }
  attr {
    name: "send_device"
    type: "string"
  }
  attr {
    name: "send_device_incarnation"
    type: "int"
  }
  attr {
    name: "recv_device"
    type: "string"
  }
  attr {
    name: "client_terminated"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "SendTPUEmbeddingGradients"
  input_arg {
    name: "inputs"
    type: DT_FLOAT
    number_attr: "N"
  }
  input_arg {
    name: "learning_rates"
    type: DT_FLOAT
    number_attr: "NN"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "NN"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "config"
    type: "string"
  }
  is_stateful: true
}
op {
  name: "SerializeIterator"
  input_arg {
    name: "resource_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "serialized"
    type: DT_VARIANT
  }
  attr {
    name: "external_state_policy"
    type: "int"
    default_value {
      i: 0
    }
  }
  is_stateful: true
}
op {
  name: "SerializeManySparse"
  input_arg {
    name: "sparse_indices"
    type: DT_INT64
  }
  input_arg {
    name: "sparse_values"
    type_attr: "T"
  }
  input_arg {
    name: "sparse_shape"
    type: DT_INT64
  }
  output_arg {
    name: "serialized_sparse"
    type_attr: "out_type"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_STRING
    }
    allowed_values {
      list {
        type: DT_STRING
        type: DT_VARIANT
      }
    }
  }
}
op {
  name: "SerializeSparse"
  input_arg {
    name: "sparse_indices"
    type: DT_INT64
  }
  input_arg {
    name: "sparse_values"
    type_attr: "T"
  }
  input_arg {
    name: "sparse_shape"
    type: DT_INT64
  }
  output_arg {
    name: "serialized_sparse"
    type_attr: "out_type"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_STRING
    }
    allowed_values {
      list {
        type: DT_STRING
        type: DT_VARIANT
      }
    }
  }
}
op {
  name: "SerializeTensor"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  output_arg {
    name: "serialized"
    type: DT_STRING
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "SetSize"
  input_arg {
    name: "set_indices"
    type: DT_INT64
  }
  input_arg {
    name: "set_values"
    type_attr: "T"
  }
  input_arg {
    name: "set_shape"
    type: DT_INT64
  }
  output_arg {
    name: "size"
    type: DT_INT32
  }
  attr {
    name: "validate_indices"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT8
        type: DT_UINT16
        type: DT_STRING
      }
    }
  }
}
op {
  name: "SetStatsAggregatorDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "stats_aggregator"
    type: DT_RESOURCE
  }
  input_arg {
    name: "tag"
    type: DT_STRING
  }
  input_arg {
    name: "counter_prefix"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "Shape"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "ShapeN"
  input_arg {
    name: "input"
    type_attr: "T"
    number_attr: "N"
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
    number_attr: "N"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "ShardDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "num_shards"
    type: DT_INT64
  }
  input_arg {
    name: "index"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "require_non_empty"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ShardedFilename"
  input_arg {
    name: "basename"
    type: DT_STRING
  }
  input_arg {
    name: "shard"
    type: DT_INT32
  }
  input_arg {
    name: "num_shards"
    type: DT_INT32
  }
  output_arg {
    name: "filename"
    type: DT_STRING
  }
}
op {
  name: "ShardedFilespec"
  input_arg {
    name: "basename"
    type: DT_STRING
  }
  input_arg {
    name: "num_shards"
    type: DT_INT32
  }
  output_arg {
    name: "filename"
    type: DT_STRING
  }
}
op {
  name: "ShuffleAndRepeatDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "buffer_size"
    type: DT_INT64
  }
  input_arg {
    name: "seed"
    type: DT_INT64
  }
  input_arg {
    name: "seed2"
    type: DT_INT64
  }
  input_arg {
    name: "count"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "reshuffle_each_iteration"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "ShuffleAndRepeatDatasetV2"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "buffer_size"
    type: DT_INT64
  }
  input_arg {
    name: "seed"
    type: DT_INT64
  }
  input_arg {
    name: "seed2"
    type: DT_INT64
  }
  input_arg {
    name: "count"
    type: DT_INT64
  }
  input_arg {
    name: "seed_generator"
    type: DT_RESOURCE
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "reshuffle_each_iteration"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "ShuffleDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "buffer_size"
    type: DT_INT64
  }
  input_arg {
    name: "seed"
    type: DT_INT64
  }
  input_arg {
    name: "seed2"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "reshuffle_each_iteration"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "ShuffleDatasetV2"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "buffer_size"
    type: DT_INT64
  }
  input_arg {
    name: "seed_generator"
    type: DT_RESOURCE
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "ShuffleDatasetV3"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "buffer_size"
    type: DT_INT64
  }
  input_arg {
    name: "seed"
    type: DT_INT64
  }
  input_arg {
    name: "seed2"
    type: DT_INT64
  }
  input_arg {
    name: "seed_generator"
    type: DT_RESOURCE
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "reshuffle_each_iteration"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "ShutdownDistributedTPU"
  is_stateful: true
}
op {
  name: "Sigmoid"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "SigmoidGrad"
  input_arg {
    name: "y"
    type_attr: "T"
  }
  input_arg {
    name: "dy"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Sign"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Sin"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Sinh"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Size"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SkipDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "count"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "Skipgram"
  output_arg {
    name: "vocab_word"
    type: DT_STRING
  }
  output_arg {
    name: "vocab_freq"
    type: DT_INT32
  }
  output_arg {
    name: "words_per_epoch"
    type: DT_INT64
  }
  output_arg {
    name: "current_epoch"
    type: DT_INT32
  }
  output_arg {
    name: "total_words_processed"
    type: DT_INT64
  }
  output_arg {
    name: "examples"
    type: DT_INT32
  }
  output_arg {
    name: "labels"
    type: DT_INT32
  }
  attr {
    name: "filename"
    type: "string"
  }
  attr {
    name: "batch_size"
    type: "int"
  }
  attr {
    name: "window_size"
    type: "int"
    default_value {
      i: 5
    }
  }
  attr {
    name: "min_count"
    type: "int"
    default_value {
      i: 5
    }
  }
  attr {
    name: "subsample"
    type: "float"
    default_value {
      f: 0.001
    }
  }
  deprecation {
    version: 19
    explanation: "Moving word2vec into tensorflow_models/tutorials and deprecating its ops here as a result"
  }
  is_stateful: true
}
op {
  name: "SleepDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "sleep_microseconds"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "Slice"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "begin"
    type_attr: "Index"
  }
  input_arg {
    name: "size"
    type_attr: "Index"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Index"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SlidingWindowDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "window_size"
    type: DT_INT64
  }
  input_arg {
    name: "window_shift"
    type: DT_INT64
  }
  input_arg {
    name: "window_stride"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "Snapshot"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "SnapshotDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "path"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "compression"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "reader_path_prefix"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "writer_path_prefix"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shard_size_bytes"
    type: "int"
    default_value {
      i: 10737418240
    }
  }
  attr {
    name: "pending_snapshot_expiry_seconds"
    type: "int"
    default_value {
      i: 86400
    }
  }
  attr {
    name: "num_reader_threads"
    type: "int"
    default_value {
      i: 1
    }
  }
  attr {
    name: "reader_buffer_size"
    type: "int"
    default_value {
      i: 1
    }
  }
  attr {
    name: "num_writer_threads"
    type: "int"
    default_value {
      i: 1
    }
  }
  attr {
    name: "writer_buffer_size"
    type: "int"
    default_value {
      i: 1
    }
  }
  attr {
    name: "shuffle_on_read"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "mode"
    type: "string"
    default_value {
      s: "auto"
    }
  }
  attr {
    name: "snapshot_name"
    type: "string"
    default_value {
      s: ""
    }
  }
}
op {
  name: "SnapshotDatasetV2"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "path"
    type: DT_STRING
  }
  input_arg {
    name: "reader_func_other_args"
    type_list_attr: "Treader_func_args"
  }
  input_arg {
    name: "shard_func_other_args"
    type_list_attr: "Tshard_func_args"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "compression"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "reader_prefix"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "writer_prefix"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "hash_valid"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "hash"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "reader_func"
    type: "func"
  }
  attr {
    name: "shard_func"
    type: "func"
  }
  attr {
    name: "Treader_func_args"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tshard_func_args"
    type: "list(type)"
    has_minimum: true
  }
}
op {
  name: "SobolSample"
  input_arg {
    name: "dim"
    type: DT_INT32
  }
  input_arg {
    name: "num_results"
    type: DT_INT32
  }
  input_arg {
    name: "skip"
    type: DT_INT32
  }
  output_arg {
    name: "samples"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "Softmax"
  input_arg {
    name: "logits"
    type_attr: "T"
  }
  output_arg {
    name: "softmax"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "SoftmaxCrossEntropyWithLogits"
  input_arg {
    name: "features"
    type_attr: "T"
  }
  input_arg {
    name: "labels"
    type_attr: "T"
  }
  output_arg {
    name: "loss"
    type_attr: "T"
  }
  output_arg {
    name: "backprop"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "Softplus"
  input_arg {
    name: "features"
    type_attr: "T"
  }
  output_arg {
    name: "activations"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "SoftplusGrad"
  input_arg {
    name: "gradients"
    type_attr: "T"
  }
  input_arg {
    name: "features"
    type_attr: "T"
  }
  output_arg {
    name: "backprops"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "Softsign"
  input_arg {
    name: "features"
    type_attr: "T"
  }
  output_arg {
    name: "activations"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "SoftsignGrad"
  input_arg {
    name: "gradients"
    type_attr: "T"
  }
  input_arg {
    name: "features"
    type_attr: "T"
  }
  output_arg {
    name: "backprops"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "SpaceToBatch"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "paddings"
    type_attr: "Tpaddings"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tpaddings"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "block_size"
    type: "int"
    has_minimum: true
    minimum: 2
  }
}
op {
  name: "SpaceToBatchND"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "block_shape"
    type_attr: "Tblock_shape"
  }
  input_arg {
    name: "paddings"
    type_attr: "Tpaddings"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tblock_shape"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tpaddings"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SpaceToDepth"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "block_size"
    type: "int"
    has_minimum: true
    minimum: 2
  }
  attr {
    name: "data_format"
    type: "string"
    default_value {
      s: "NHWC"
    }
    allowed_values {
      list {
        s: "NHWC"
        s: "NCHW"
        s: "NCHW_VECT_C"
      }
    }
  }
}
op {
  name: "SparseAccumulatorApplyGradient"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "local_step"
    type: DT_INT64
  }
  input_arg {
    name: "gradient_indices"
    type: DT_INT64
  }
  input_arg {
    name: "gradient_values"
    type_attr: "dtype"
  }
  input_arg {
    name: "gradient_shape"
    type: DT_INT64
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "has_known_shape"
    type: "bool"
  }
}
op {
  name: "SparseAccumulatorTakeGradient"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "num_required"
    type: DT_INT32
  }
  output_arg {
    name: "indices"
    type: DT_INT64
  }
  output_arg {
    name: "values"
    type_attr: "dtype"
  }
  output_arg {
    name: "shape"
    type: DT_INT64
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "SparseAdd"
  input_arg {
    name: "a_indices"
    type: DT_INT64
  }
  input_arg {
    name: "a_values"
    type_attr: "T"
  }
  input_arg {
    name: "a_shape"
    type: DT_INT64
  }
  input_arg {
    name: "b_indices"
    type: DT_INT64
  }
  input_arg {
    name: "b_values"
    type_attr: "T"
  }
  input_arg {
    name: "b_shape"
    type: DT_INT64
  }
  input_arg {
    name: "thresh"
    type_attr: "Treal"
  }
  output_arg {
    name: "sum_indices"
    type: DT_INT64
  }
  output_arg {
    name: "sum_values"
    type_attr: "T"
  }
  output_arg {
    name: "sum_shape"
    type: DT_INT64
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Treal"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "SparseAddGrad"
  input_arg {
    name: "backprop_val_grad"
    type_attr: "T"
  }
  input_arg {
    name: "a_indices"
    type: DT_INT64
  }
  input_arg {
    name: "b_indices"
    type: DT_INT64
  }
  input_arg {
    name: "sum_indices"
    type: DT_INT64
  }
  output_arg {
    name: "a_val_grad"
    type_attr: "T"
  }
  output_arg {
    name: "b_val_grad"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "SparseApplyAdadelta"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "accum"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "accum_update"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "rho"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "SparseApplyAdagrad"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "accum"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "update_slots"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "SparseApplyAdagradDA"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "gradient_accumulator"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "gradient_squared_accumulator"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "global_step"
    type: DT_INT64
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "SparseApplyAdagradV2"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "accum"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "update_slots"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "SparseApplyCenteredRMSProp"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "mg"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "ms"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "mom"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "rho"
    type_attr: "T"
  }
  input_arg {
    name: "momentum"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "SparseApplyFtrl"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "accum"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "linear"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "lr_power"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "multiply_linear_by_lr"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "SparseApplyFtrlV2"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "accum"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "linear"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "l2_shrinkage"
    type_attr: "T"
  }
  input_arg {
    name: "lr_power"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "multiply_linear_by_lr"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "SparseApplyMomentum"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "accum"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "momentum"
    type_attr: "T"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "use_nesterov"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "SparseApplyProximalAdagrad"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "accum"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "SparseApplyProximalGradientDescent"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "alpha"
    type_attr: "T"
  }
  input_arg {
    name: "l1"
    type_attr: "T"
  }
  input_arg {
    name: "l2"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "SparseApplyRMSProp"
  input_arg {
    name: "var"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "ms"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "mom"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "lr"
    type_attr: "T"
  }
  input_arg {
    name: "rho"
    type_attr: "T"
  }
  input_arg {
    name: "momentum"
    type_attr: "T"
  }
  input_arg {
    name: "epsilon"
    type_attr: "T"
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  output_arg {
    name: "out"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "use_locking"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "SparseBincount"
  input_arg {
    name: "indices"
    type: DT_INT64
  }
  input_arg {
    name: "values"
    type_attr: "Tidx"
  }
  input_arg {
    name: "dense_shape"
    type: DT_INT64
  }
  input_arg {
    name: "size"
    type_attr: "Tidx"
  }
  input_arg {
    name: "weights"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "Tidx"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "binary_output"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "SparseConcat"
  input_arg {
    name: "indices"
    type: DT_INT64
    number_attr: "N"
  }
  input_arg {
    name: "values"
    type_attr: "T"
    number_attr: "N"
  }
  input_arg {
    name: "shapes"
    type: DT_INT64
    number_attr: "N"
  }
  output_arg {
    name: "output_indices"
    type: DT_INT64
  }
  output_arg {
    name: "output_values"
    type_attr: "T"
  }
  output_arg {
    name: "output_shape"
    type: DT_INT64
  }
  attr {
    name: "concat_dim"
    type: "int"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 2
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "SparseConditionalAccumulator"
  output_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "shape"
    type: "shape"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "reduction_type"
    type: "string"
    default_value {
      s: "MEAN"
    }
    allowed_values {
      list {
        s: "MEAN"
        s: "SUM"
      }
    }
  }
  is_stateful: true
}
op {
  name: "SparseCountSparseOutput"
  input_arg {
    name: "indices"
    type: DT_INT64
  }
  input_arg {
    name: "values"
    type_attr: "T"
  }
  input_arg {
    name: "dense_shape"
    type: DT_INT64
  }
  input_arg {
    name: "weights"
    type_attr: "output_type"
  }
  output_arg {
    name: "output_indices"
    type: DT_INT64
  }
  output_arg {
    name: "output_values"
    type_attr: "output_type"
  }
  output_arg {
    name: "output_dense_shape"
    type: DT_INT64
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "minlength"
    type: "int"
    default_value {
      i: -1
    }
    has_minimum: true
    minimum: -1
  }
  attr {
    name: "maxlength"
    type: "int"
    default_value {
      i: -1
    }
    has_minimum: true
    minimum: -1
  }
  attr {
    name: "binary_output"
    type: "bool"
  }
  attr {
    name: "output_type"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "SparseCross"
  input_arg {
    name: "indices"
    type: DT_INT64
    number_attr: "N"
  }
  input_arg {
    name: "values"
    type_list_attr: "sparse_types"
  }
  input_arg {
    name: "shapes"
    type: DT_INT64
    number_attr: "N"
  }
  input_arg {
    name: "dense_inputs"
    type_list_attr: "dense_types"
  }
  output_arg {
    name: "output_indices"
    type: DT_INT64
  }
  output_arg {
    name: "output_values"
    type_attr: "out_type"
  }
  output_arg {
    name: "output_shape"
    type: DT_INT64
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "hashed_output"
    type: "bool"
  }
  attr {
    name: "num_buckets"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "hash_key"
    type: "int"
  }
  attr {
    name: "sparse_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "dense_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "out_type"
    type: "type"
    allowed_values {
      list {
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "internal_type"
    type: "type"
    allowed_values {
      list {
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
}
op {
  name: "SparseCrossHashed"
  input_arg {
    name: "indices"
    type: DT_INT64
    number_attr: "N"
  }
  input_arg {
    name: "values"
    type_list_attr: "sparse_types"
  }
  input_arg {
    name: "shapes"
    type: DT_INT64
    number_attr: "N"
  }
  input_arg {
    name: "dense_inputs"
    type_list_attr: "dense_types"
  }
  input_arg {
    name: "num_buckets"
    type: DT_INT64
  }
  input_arg {
    name: "strong_hash"
    type: DT_BOOL
  }
  input_arg {
    name: "salt"
    type: DT_INT64
  }
  output_arg {
    name: "output_indices"
    type: DT_INT64
  }
  output_arg {
    name: "output_values"
    type: DT_INT64
  }
  output_arg {
    name: "output_shape"
    type: DT_INT64
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "sparse_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "dense_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
}
op {
  name: "SparseCrossV2"
  input_arg {
    name: "indices"
    type: DT_INT64
    number_attr: "N"
  }
  input_arg {
    name: "values"
    type_list_attr: "sparse_types"
  }
  input_arg {
    name: "shapes"
    type: DT_INT64
    number_attr: "N"
  }
  input_arg {
    name: "dense_inputs"
    type_list_attr: "dense_types"
  }
  input_arg {
    name: "sep"
    type: DT_STRING
  }
  output_arg {
    name: "output_indices"
    type: DT_INT64
  }
  output_arg {
    name: "output_values"
    type: DT_STRING
  }
  output_arg {
    name: "output_shape"
    type: DT_INT64
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "sparse_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
  attr {
    name: "dense_types"
    type: "list(type)"
    has_minimum: true
    allowed_values {
      list {
        type: DT_INT64
        type: DT_STRING
      }
    }
  }
}
op {
  name: "SparseDenseCwiseAdd"
  input_arg {
    name: "sp_indices"
    type: DT_INT64
  }
  input_arg {
    name: "sp_values"
    type_attr: "T"
  }
  input_arg {
    name: "sp_shape"
    type: DT_INT64
  }
  input_arg {
    name: "dense"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "SparseDenseCwiseDiv"
  input_arg {
    name: "sp_indices"
    type: DT_INT64
  }
  input_arg {
    name: "sp_values"
    type_attr: "T"
  }
  input_arg {
    name: "sp_shape"
    type: DT_INT64
  }
  input_arg {
    name: "dense"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "SparseDenseCwiseMul"
  input_arg {
    name: "sp_indices"
    type: DT_INT64
  }
  input_arg {
    name: "sp_values"
    type_attr: "T"
  }
  input_arg {
    name: "sp_shape"
    type: DT_INT64
  }
  input_arg {
    name: "dense"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "SparseFillEmptyRows"
  input_arg {
    name: "indices"
    type: DT_INT64
  }
  input_arg {
    name: "values"
    type_attr: "T"
  }
  input_arg {
    name: "dense_shape"
    type: DT_INT64
  }
  input_arg {
    name: "default_value"
    type_attr: "T"
  }
  output_arg {
    name: "output_indices"
    type: DT_INT64
  }
  output_arg {
    name: "output_values"
    type_attr: "T"
  }
  output_arg {
    name: "empty_row_indicator"
    type: DT_BOOL
  }
  output_arg {
    name: "reverse_index_map"
    type: DT_INT64
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "SparseFillEmptyRowsGrad"
  input_arg {
    name: "reverse_index_map"
    type: DT_INT64
  }
  input_arg {
    name: "grad_values"
    type_attr: "T"
  }
  output_arg {
    name: "d_values"
    type_attr: "T"
  }
  output_arg {
    name: "d_default_value"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "SparseMatMul"
  input_arg {
    name: "a"
    type_attr: "Ta"
  }
  input_arg {
    name: "b"
    type_attr: "Tb"
  }
  output_arg {
    name: "product"
    type: DT_FLOAT
  }
  attr {
    name: "transpose_a"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "transpose_b"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "a_is_sparse"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "b_is_sparse"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "Ta"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_BFLOAT16
      }
    }
  }
  attr {
    name: "Tb"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_BFLOAT16
      }
    }
  }
}
op {
  name: "SparseMatrixAdd"
  input_arg {
    name: "a"
    type: DT_VARIANT
  }
  input_arg {
    name: "b"
    type: DT_VARIANT
  }
  input_arg {
    name: "alpha"
    type_attr: "T"
  }
  input_arg {
    name: "beta"
    type_attr: "T"
  }
  output_arg {
    name: "c"
    type: DT_VARIANT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "SparseMatrixMatMul"
  input_arg {
    name: "a"
    type: DT_VARIANT
  }
  input_arg {
    name: "b"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "transpose_a"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "transpose_b"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "adjoint_a"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "adjoint_b"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "transpose_output"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "conjugate_output"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "SparseMatrixMul"
  input_arg {
    name: "a"
    type: DT_VARIANT
  }
  input_arg {
    name: "b"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type: DT_VARIANT
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "SparseMatrixNNZ"
  input_arg {
    name: "sparse_matrix"
    type: DT_VARIANT
  }
  output_arg {
    name: "nnz"
    type: DT_INT32
  }
}
op {
  name: "SparseMatrixOrderingAMD"
  input_arg {
    name: "input"
    type: DT_VARIANT
  }
  output_arg {
    name: "output"
    type: DT_INT32
  }
}
op {
  name: "SparseMatrixSoftmax"
  input_arg {
    name: "logits"
    type: DT_VARIANT
  }
  output_arg {
    name: "softmax"
    type: DT_VARIANT
  }
  attr {
    name: "type"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "SparseMatrixSoftmaxGrad"
  input_arg {
    name: "softmax"
    type: DT_VARIANT
  }
  input_arg {
    name: "grad_softmax"
    type: DT_VARIANT
  }
  output_arg {
    name: "gradient"
    type: DT_VARIANT
  }
  attr {
    name: "type"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "SparseMatrixSparseCholesky"
  input_arg {
    name: "input"
    type: DT_VARIANT
  }
  input_arg {
    name: "permutation"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type: DT_VARIANT
  }
  attr {
    name: "type"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "SparseMatrixSparseMatMul"
  input_arg {
    name: "a"
    type: DT_VARIANT
  }
  input_arg {
    name: "b"
    type: DT_VARIANT
  }
  output_arg {
    name: "c"
    type: DT_VARIANT
  }
  attr {
    name: "type"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
  attr {
    name: "transpose_a"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "transpose_b"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "adjoint_a"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "adjoint_b"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "SparseMatrixTranspose"
  input_arg {
    name: "input"
    type: DT_VARIANT
  }
  output_arg {
    name: "output"
    type: DT_VARIANT
  }
  attr {
    name: "conjugate"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "type"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "SparseMatrixZeros"
  input_arg {
    name: "dense_shape"
    type: DT_INT64
  }
  output_arg {
    name: "sparse_matrix"
    type: DT_VARIANT
  }
  attr {
    name: "type"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "SparseReduceMax"
  input_arg {
    name: "input_indices"
    type: DT_INT64
  }
  input_arg {
    name: "input_values"
    type_attr: "T"
  }
  input_arg {
    name: "input_shape"
    type: DT_INT64
  }
  input_arg {
    name: "reduction_axes"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "keep_dims"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "SparseReduceMaxSparse"
  input_arg {
    name: "input_indices"
    type: DT_INT64
  }
  input_arg {
    name: "input_values"
    type_attr: "T"
  }
  input_arg {
    name: "input_shape"
    type: DT_INT64
  }
  input_arg {
    name: "reduction_axes"
    type: DT_INT32
  }
  output_arg {
    name: "output_indices"
    type: DT_INT64
  }
  output_arg {
    name: "output_values"
    type_attr: "T"
  }
  output_arg {
    name: "output_shape"
    type: DT_INT64
  }
  attr {
    name: "keep_dims"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "SparseReduceSum"
  input_arg {
    name: "input_indices"
    type: DT_INT64
  }
  input_arg {
    name: "input_values"
    type_attr: "T"
  }
  input_arg {
    name: "input_shape"
    type: DT_INT64
  }
  input_arg {
    name: "reduction_axes"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "keep_dims"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "SparseReduceSumSparse"
  input_arg {
    name: "input_indices"
    type: DT_INT64
  }
  input_arg {
    name: "input_values"
    type_attr: "T"
  }
  input_arg {
    name: "input_shape"
    type: DT_INT64
  }
  input_arg {
    name: "reduction_axes"
    type: DT_INT32
  }
  output_arg {
    name: "output_indices"
    type: DT_INT64
  }
  output_arg {
    name: "output_values"
    type_attr: "T"
  }
  output_arg {
    name: "output_shape"
    type: DT_INT64
  }
  attr {
    name: "keep_dims"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "SparseReorder"
  input_arg {
    name: "input_indices"
    type: DT_INT64
  }
  input_arg {
    name: "input_values"
    type_attr: "T"
  }
  input_arg {
    name: "input_shape"
    type: DT_INT64
  }
  output_arg {
    name: "output_indices"
    type: DT_INT64
  }
  output_arg {
    name: "output_values"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "SparseReshape"
  input_arg {
    name: "input_indices"
    type: DT_INT64
  }
  input_arg {
    name: "input_shape"
    type: DT_INT64
  }
  input_arg {
    name: "new_shape"
    type: DT_INT64
  }
  output_arg {
    name: "output_indices"
    type: DT_INT64
  }
  output_arg {
    name: "output_shape"
    type: DT_INT64
  }
}
op {
  name: "SparseSegmentMean"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tidx"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tsegmentids"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tsegmentids"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SparseSegmentMeanGrad"
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tidx"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tsegmentids"
  }
  input_arg {
    name: "output_dim0"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tsegmentids"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SparseSegmentMeanWithNumSegments"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tidx"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tsegmentids"
  }
  input_arg {
    name: "num_segments"
    type_attr: "Tnumsegments"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tnumsegments"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tsegmentids"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SparseSegmentSqrtN"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tidx"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tsegmentids"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tsegmentids"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SparseSegmentSqrtNGrad"
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tidx"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tsegmentids"
  }
  input_arg {
    name: "output_dim0"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tsegmentids"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SparseSegmentSqrtNWithNumSegments"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tidx"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tsegmentids"
  }
  input_arg {
    name: "num_segments"
    type_attr: "Tnumsegments"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tnumsegments"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tsegmentids"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SparseSegmentSum"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tidx"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tsegmentids"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tsegmentids"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SparseSegmentSumWithNumSegments"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tidx"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tsegmentids"
  }
  input_arg {
    name: "num_segments"
    type_attr: "Tnumsegments"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tnumsegments"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tsegmentids"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SparseSlice"
  input_arg {
    name: "indices"
    type: DT_INT64
  }
  input_arg {
    name: "values"
    type_attr: "T"
  }
  input_arg {
    name: "shape"
    type: DT_INT64
  }
  input_arg {
    name: "start"
    type: DT_INT64
  }
  input_arg {
    name: "size"
    type: DT_INT64
  }
  output_arg {
    name: "output_indices"
    type: DT_INT64
  }
  output_arg {
    name: "output_values"
    type_attr: "T"
  }
  output_arg {
    name: "output_shape"
    type: DT_INT64
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "SparseSliceGrad"
  input_arg {
    name: "backprop_val_grad"
    type_attr: "T"
  }
  input_arg {
    name: "input_indices"
    type: DT_INT64
  }
  input_arg {
    name: "input_start"
    type: DT_INT64
  }
  input_arg {
    name: "output_indices"
    type: DT_INT64
  }
  output_arg {
    name: "val_grad"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "SparseSoftmax"
  input_arg {
    name: "sp_indices"
    type: DT_INT64
  }
  input_arg {
    name: "sp_values"
    type_attr: "T"
  }
  input_arg {
    name: "sp_shape"
    type: DT_INT64
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "SparseSoftmaxCrossEntropyWithLogits"
  input_arg {
    name: "features"
    type_attr: "T"
  }
  input_arg {
    name: "labels"
    type_attr: "Tlabels"
  }
  output_arg {
    name: "loss"
    type_attr: "T"
  }
  output_arg {
    name: "backprop"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tlabels"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SparseSparseMaximum"
  input_arg {
    name: "a_indices"
    type: DT_INT64
  }
  input_arg {
    name: "a_values"
    type_attr: "T"
  }
  input_arg {
    name: "a_shape"
    type: DT_INT64
  }
  input_arg {
    name: "b_indices"
    type: DT_INT64
  }
  input_arg {
    name: "b_values"
    type_attr: "T"
  }
  input_arg {
    name: "b_shape"
    type: DT_INT64
  }
  output_arg {
    name: "output_indices"
    type: DT_INT64
  }
  output_arg {
    name: "output_values"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "SparseSparseMinimum"
  input_arg {
    name: "a_indices"
    type: DT_INT64
  }
  input_arg {
    name: "a_values"
    type_attr: "T"
  }
  input_arg {
    name: "a_shape"
    type: DT_INT64
  }
  input_arg {
    name: "b_indices"
    type: DT_INT64
  }
  input_arg {
    name: "b_values"
    type_attr: "T"
  }
  input_arg {
    name: "b_shape"
    type: DT_INT64
  }
  output_arg {
    name: "output_indices"
    type: DT_INT64
  }
  output_arg {
    name: "output_values"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "SparseSplit"
  input_arg {
    name: "split_dim"
    type: DT_INT64
  }
  input_arg {
    name: "indices"
    type: DT_INT64
  }
  input_arg {
    name: "values"
    type_attr: "T"
  }
  input_arg {
    name: "shape"
    type: DT_INT64
  }
  output_arg {
    name: "output_indices"
    type: DT_INT64
    number_attr: "num_split"
  }
  output_arg {
    name: "output_values"
    type_attr: "T"
    number_attr: "num_split"
  }
  output_arg {
    name: "output_shape"
    type: DT_INT64
    number_attr: "num_split"
  }
  attr {
    name: "num_split"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "SparseTensorDenseAdd"
  input_arg {
    name: "a_indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "a_values"
    type_attr: "T"
  }
  input_arg {
    name: "a_shape"
    type_attr: "Tindices"
  }
  input_arg {
    name: "b"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SparseTensorDenseMatMul"
  input_arg {
    name: "a_indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "a_values"
    type_attr: "T"
  }
  input_arg {
    name: "a_shape"
    type: DT_INT64
  }
  input_arg {
    name: "b"
    type_attr: "T"
  }
  output_arg {
    name: "product"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "adjoint_a"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "adjoint_b"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "SparseTensorSliceDataset"
  input_arg {
    name: "indices"
    type: DT_INT64
  }
  input_arg {
    name: "values"
    type_attr: "Tvalues"
  }
  input_arg {
    name: "dense_shape"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "Tvalues"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "SparseTensorToCSRSparseMatrix"
  input_arg {
    name: "indices"
    type: DT_INT64
  }
  input_arg {
    name: "values"
    type_attr: "T"
  }
  input_arg {
    name: "dense_shape"
    type: DT_INT64
  }
  output_arg {
    name: "sparse_matrix"
    type: DT_VARIANT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "SparseToDense"
  input_arg {
    name: "sparse_indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "output_shape"
    type_attr: "Tindices"
  }
  input_arg {
    name: "sparse_values"
    type_attr: "T"
  }
  input_arg {
    name: "default_value"
    type_attr: "T"
  }
  output_arg {
    name: "dense"
    type_attr: "T"
  }
  attr {
    name: "validate_indices"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SparseToSparseSetOperation"
  input_arg {
    name: "set1_indices"
    type: DT_INT64
  }
  input_arg {
    name: "set1_values"
    type_attr: "T"
  }
  input_arg {
    name: "set1_shape"
    type: DT_INT64
  }
  input_arg {
    name: "set2_indices"
    type: DT_INT64
  }
  input_arg {
    name: "set2_values"
    type_attr: "T"
  }
  input_arg {
    name: "set2_shape"
    type: DT_INT64
  }
  output_arg {
    name: "result_indices"
    type: DT_INT64
  }
  output_arg {
    name: "result_values"
    type_attr: "T"
  }
  output_arg {
    name: "result_shape"
    type: DT_INT64
  }
  attr {
    name: "set_operation"
    type: "string"
  }
  attr {
    name: "validate_indices"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT8
        type: DT_UINT16
        type: DT_STRING
      }
    }
  }
}
op {
  name: "Spence"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "Split"
  input_arg {
    name: "split_dim"
    type: DT_INT32
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
    number_attr: "num_split"
  }
  attr {
    name: "num_split"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "SplitV"
  input_arg {
    name: "value"
    type_attr: "T"
  }
  input_arg {
    name: "size_splits"
    type_attr: "Tlen"
  }
  input_arg {
    name: "split_dim"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
    number_attr: "num_split"
  }
  attr {
    name: "num_split"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tlen"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SqlDataset"
  input_arg {
    name: "driver_name"
    type: DT_STRING
  }
  input_arg {
    name: "data_source_name"
    type: DT_STRING
  }
  input_arg {
    name: "query"
    type: DT_STRING
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "Sqrt"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "SqrtGrad"
  input_arg {
    name: "y"
    type_attr: "T"
  }
  input_arg {
    name: "dy"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Square"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "SquaredDifference"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
  is_commutative: true
}
op {
  name: "Squeeze"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "squeeze_dims"
    type: "list(int)"
    default_value {
      list {
      }
    }
    has_minimum: true
  }
}
op {
  name: "Stack"
  output_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "elem_type"
    type: "type"
  }
  attr {
    name: "stack_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "StackClose"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
}
op {
  name: "StackCloseV2"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  is_stateful: true
}
op {
  name: "StackPop"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  output_arg {
    name: "elem"
    type_attr: "elem_type"
  }
  attr {
    name: "elem_type"
    type: "type"
  }
}
op {
  name: "StackPopV2"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "elem"
    type_attr: "elem_type"
  }
  attr {
    name: "elem_type"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "StackPush"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "elem"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "swap_memory"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "StackPushV2"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "elem"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "swap_memory"
    type: "bool"
    default_value {
      b: false
    }
  }
  is_stateful: true
}
op {
  name: "StackV2"
  input_arg {
    name: "max_size"
    type: DT_INT32
  }
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "elem_type"
    type: "type"
  }
  attr {
    name: "stack_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "Stage"
  input_arg {
    name: "values"
    type_list_attr: "dtypes"
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "StageClear"
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "StagePeek"
  input_arg {
    name: "index"
    type: DT_INT32
  }
  output_arg {
    name: "values"
    type_list_attr: "dtypes"
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "StageSize"
  output_arg {
    name: "size"
    type: DT_INT32
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "StatefulPartitionedCall"
  input_arg {
    name: "args"
    type_list_attr: "Tin"
  }
  output_arg {
    name: "output"
    type_list_attr: "Tout"
  }
  attr {
    name: "Tin"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tout"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "config"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "config_proto"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "executor_type"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "StatefulRandomBinomial"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "algorithm"
    type: DT_INT64
  }
  input_arg {
    name: "shape"
    type_attr: "S"
  }
  input_arg {
    name: "counts"
    type_attr: "T"
  }
  input_arg {
    name: "probs"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "S"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_DOUBLE
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "StatefulStandardNormal"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "shape"
    type_attr: "shape_dtype"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
  }
  attr {
    name: "shape_dtype"
    type: "type"
    default_value {
      type: DT_INT64
    }
  }
  deprecation {
    version: 29
    explanation: "Use StatefulStandardNormalV2 instead"
  }
  is_stateful: true
}
op {
  name: "StatefulStandardNormalV2"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "algorithm"
    type: DT_INT64
  }
  input_arg {
    name: "shape"
    type_attr: "shape_dtype"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
  }
  attr {
    name: "shape_dtype"
    type: "type"
    default_value {
      type: DT_INT64
    }
  }
  is_stateful: true
}
op {
  name: "StatefulTruncatedNormal"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "algorithm"
    type: DT_INT64
  }
  input_arg {
    name: "shape"
    type_attr: "shape_dtype"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
  }
  attr {
    name: "shape_dtype"
    type: "type"
    default_value {
      type: DT_INT64
    }
  }
  is_stateful: true
}
op {
  name: "StatefulUniform"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "algorithm"
    type: DT_INT64
  }
  input_arg {
    name: "shape"
    type_attr: "shape_dtype"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
  }
  attr {
    name: "shape_dtype"
    type: "type"
    default_value {
      type: DT_INT64
    }
  }
  is_stateful: true
}
op {
  name: "StatefulUniformFullInt"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "algorithm"
    type: DT_INT64
  }
  input_arg {
    name: "shape"
    type_attr: "shape_dtype"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_UINT64
    }
  }
  attr {
    name: "shape_dtype"
    type: "type"
    default_value {
      type: DT_INT64
    }
  }
  is_stateful: true
}
op {
  name: "StatefulUniformInt"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  input_arg {
    name: "algorithm"
    type: DT_INT64
  }
  input_arg {
    name: "shape"
    type_attr: "shape_dtype"
  }
  input_arg {
    name: "minval"
    type_attr: "dtype"
  }
  input_arg {
    name: "maxval"
    type_attr: "dtype"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_INT64
    }
  }
  attr {
    name: "shape_dtype"
    type: "type"
    default_value {
      type: DT_INT64
    }
  }
  is_stateful: true
}
op {
  name: "StatelessCase"
  input_arg {
    name: "branch_index"
    type: DT_INT32
  }
  input_arg {
    name: "input"
    type_list_attr: "Tin"
  }
  output_arg {
    name: "output"
    type_list_attr: "Tout"
  }
  attr {
    name: "Tin"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tout"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "branches"
    type: "list(func)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "StatelessIf"
  input_arg {
    name: "cond"
    type_attr: "Tcond"
  }
  input_arg {
    name: "input"
    type_list_attr: "Tin"
  }
  output_arg {
    name: "output"
    type_list_attr: "Tout"
  }
  attr {
    name: "Tcond"
    type: "type"
  }
  attr {
    name: "Tin"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tout"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "then_branch"
    type: "func"
  }
  attr {
    name: "else_branch"
    type: "func"
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
  }
}
op {
  name: "StatelessMultinomial"
  input_arg {
    name: "logits"
    type_attr: "T"
  }
  input_arg {
    name: "num_samples"
    type: DT_INT32
  }
  input_arg {
    name: "seed"
    type_attr: "Tseed"
  }
  output_arg {
    name: "output"
    type_attr: "output_dtype"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tseed"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "output_dtype"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StatelessParameterizedTruncatedNormal"
  input_arg {
    name: "shape"
    type_attr: "S"
  }
  input_arg {
    name: "seed"
    type_attr: "Tseed"
  }
  input_arg {
    name: "means"
    type_attr: "dtype"
  }
  input_arg {
    name: "stddevs"
    type_attr: "dtype"
  }
  input_arg {
    name: "minvals"
    type_attr: "dtype"
  }
  input_arg {
    name: "maxvals"
    type_attr: "dtype"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "S"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tseed"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "StatelessRandomBinomial"
  input_arg {
    name: "shape"
    type_attr: "S"
  }
  input_arg {
    name: "seed"
    type_attr: "Tseed"
  }
  input_arg {
    name: "counts"
    type_attr: "T"
  }
  input_arg {
    name: "probs"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "S"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tseed"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_DOUBLE
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StatelessRandomGammaV2"
  input_arg {
    name: "shape"
    type_attr: "T"
  }
  input_arg {
    name: "seed"
    type_attr: "Tseed"
  }
  input_arg {
    name: "alpha"
    type_attr: "dtype"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tseed"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StatelessRandomGetAlg"
  output_arg {
    name: "alg"
    type: DT_INT32
  }
}
op {
  name: "StatelessRandomGetKeyCounter"
  input_arg {
    name: "seed"
    type_attr: "Tseed"
  }
  output_arg {
    name: "key"
    type: DT_UINT64
  }
  output_arg {
    name: "counter"
    type: DT_UINT64
  }
  attr {
    name: "Tseed"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StatelessRandomGetKeyCounterAlg"
  input_arg {
    name: "seed"
    type_attr: "Tseed"
  }
  output_arg {
    name: "key"
    type: DT_UINT64
  }
  output_arg {
    name: "counter"
    type: DT_UINT64
  }
  output_arg {
    name: "alg"
    type: DT_INT32
  }
  attr {
    name: "Tseed"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StatelessRandomNormal"
  input_arg {
    name: "shape"
    type_attr: "T"
  }
  input_arg {
    name: "seed"
    type_attr: "Tseed"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tseed"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StatelessRandomNormalV2"
  input_arg {
    name: "shape"
    type_attr: "Tshape"
  }
  input_arg {
    name: "key"
    type: DT_UINT64
  }
  input_arg {
    name: "counter"
    type: DT_UINT64
  }
  input_arg {
    name: "alg"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tshape"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StatelessRandomPoisson"
  input_arg {
    name: "shape"
    type_attr: "T"
  }
  input_arg {
    name: "seed"
    type_attr: "Tseed"
  }
  input_arg {
    name: "lam"
    type_attr: "Rtype"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "Rtype"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tseed"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StatelessRandomUniform"
  input_arg {
    name: "shape"
    type_attr: "T"
  }
  input_arg {
    name: "seed"
    type_attr: "Tseed"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tseed"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StatelessRandomUniformFullInt"
  input_arg {
    name: "shape"
    type_attr: "T"
  }
  input_arg {
    name: "seed"
    type_attr: "Tseed"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_UINT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tseed"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "StatelessRandomUniformFullIntV2"
  input_arg {
    name: "shape"
    type_attr: "Tshape"
  }
  input_arg {
    name: "key"
    type: DT_UINT64
  }
  input_arg {
    name: "counter"
    type: DT_UINT64
  }
  input_arg {
    name: "alg"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_UINT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tshape"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StatelessRandomUniformInt"
  input_arg {
    name: "shape"
    type_attr: "T"
  }
  input_arg {
    name: "seed"
    type_attr: "Tseed"
  }
  input_arg {
    name: "minval"
    type_attr: "dtype"
  }
  input_arg {
    name: "maxval"
    type_attr: "dtype"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tseed"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StatelessRandomUniformIntV2"
  input_arg {
    name: "shape"
    type_attr: "Tshape"
  }
  input_arg {
    name: "key"
    type: DT_UINT64
  }
  input_arg {
    name: "counter"
    type: DT_UINT64
  }
  input_arg {
    name: "alg"
    type: DT_INT32
  }
  input_arg {
    name: "minval"
    type_attr: "dtype"
  }
  input_arg {
    name: "maxval"
    type_attr: "dtype"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tshape"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StatelessRandomUniformV2"
  input_arg {
    name: "shape"
    type_attr: "Tshape"
  }
  input_arg {
    name: "key"
    type: DT_UINT64
  }
  input_arg {
    name: "counter"
    type: DT_UINT64
  }
  input_arg {
    name: "alg"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tshape"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StatelessSampleDistortedBoundingBox"
  input_arg {
    name: "image_size"
    type_attr: "T"
  }
  input_arg {
    name: "bounding_boxes"
    type: DT_FLOAT
  }
  input_arg {
    name: "min_object_covered"
    type: DT_FLOAT
  }
  input_arg {
    name: "seed"
    type_attr: "Tseed"
  }
  output_arg {
    name: "begin"
    type_attr: "T"
  }
  output_arg {
    name: "size"
    type_attr: "T"
  }
  output_arg {
    name: "bboxes"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tseed"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "aspect_ratio_range"
    type: "list(float)"
    default_value {
      list {
        f: 0.75
        f: 1.33
      }
    }
  }
  attr {
    name: "area_range"
    type: "list(float)"
    default_value {
      list {
        f: 0.05
        f: 1
      }
    }
  }
  attr {
    name: "max_attempts"
    type: "int"
    default_value {
      i: 100
    }
  }
  attr {
    name: "use_image_if_no_bounding_boxes"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "StatelessTruncatedNormal"
  input_arg {
    name: "shape"
    type_attr: "T"
  }
  input_arg {
    name: "seed"
    type_attr: "Tseed"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tseed"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StatelessTruncatedNormalV2"
  input_arg {
    name: "shape"
    type_attr: "Tshape"
  }
  input_arg {
    name: "key"
    type: DT_UINT64
  }
  input_arg {
    name: "counter"
    type: DT_UINT64
  }
  input_arg {
    name: "alg"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "Tshape"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StatelessWhile"
  input_arg {
    name: "input"
    type_list_attr: "T"
  }
  output_arg {
    name: "output"
    type_list_attr: "T"
  }
  attr {
    name: "T"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "cond"
    type: "func"
  }
  attr {
    name: "body"
    type: "func"
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "parallel_iterations"
    type: "int"
    default_value {
      i: 10
    }
  }
}
op {
  name: "StaticRegexFullMatch"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type: DT_BOOL
  }
  attr {
    name: "pattern"
    type: "string"
  }
}
op {
  name: "StaticRegexReplace"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type: DT_STRING
  }
  attr {
    name: "pattern"
    type: "string"
  }
  attr {
    name: "rewrite"
    type: "string"
  }
  attr {
    name: "replace_global"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "StatsAggregatorHandle"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "StatsAggregatorHandleV2"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "StatsAggregatorSetSummaryWriter"
  input_arg {
    name: "stats_aggregator"
    type: DT_RESOURCE
  }
  input_arg {
    name: "summary"
    type: DT_RESOURCE
  }
  is_stateful: true
}
op {
  name: "StatsAggregatorSummary"
  input_arg {
    name: "iterator"
    type: DT_RESOURCE
  }
  output_arg {
    name: "summary"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "StopGradient"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "StridedSlice"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "begin"
    type_attr: "Index"
  }
  input_arg {
    name: "end"
    type_attr: "Index"
  }
  input_arg {
    name: "strides"
    type_attr: "Index"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Index"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "begin_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "end_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "ellipsis_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "new_axis_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "shrink_axis_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "StridedSliceAssign"
  input_arg {
    name: "ref"
    type_attr: "T"
    is_ref: true
  }
  input_arg {
    name: "begin"
    type_attr: "Index"
  }
  input_arg {
    name: "end"
    type_attr: "Index"
  }
  input_arg {
    name: "strides"
    type_attr: "Index"
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  output_arg {
    name: "output_ref"
    type_attr: "T"
    is_ref: true
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Index"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "begin_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "end_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "ellipsis_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "new_axis_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "shrink_axis_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "StridedSliceGrad"
  input_arg {
    name: "shape"
    type_attr: "Index"
  }
  input_arg {
    name: "begin"
    type_attr: "Index"
  }
  input_arg {
    name: "end"
    type_attr: "Index"
  }
  input_arg {
    name: "strides"
    type_attr: "Index"
  }
  input_arg {
    name: "dy"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Index"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "begin_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "end_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "ellipsis_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "new_axis_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "shrink_axis_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "StringFormat"
  input_arg {
    name: "inputs"
    type_list_attr: "T"
  }
  output_arg {
    name: "output"
    type: DT_STRING
  }
  attr {
    name: "T"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "template"
    type: "string"
    default_value {
      s: "%s"
    }
  }
  attr {
    name: "placeholder"
    type: "string"
    default_value {
      s: "%s"
    }
  }
  attr {
    name: "summarize"
    type: "int"
    default_value {
      i: 3
    }
  }
}
op {
  name: "StringJoin"
  input_arg {
    name: "inputs"
    type: DT_STRING
    number_attr: "N"
  }
  output_arg {
    name: "output"
    type: DT_STRING
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "separator"
    type: "string"
    default_value {
      s: ""
    }
  }
}
op {
  name: "StringLength"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type: DT_INT32
  }
  attr {
    name: "unit"
    type: "string"
    default_value {
      s: "BYTE"
    }
    allowed_values {
      list {
        s: "BYTE"
        s: "UTF8_CHAR"
      }
    }
  }
}
op {
  name: "StringLower"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type: DT_STRING
  }
  attr {
    name: "encoding"
    type: "string"
    default_value {
      s: ""
    }
  }
}
op {
  name: "StringNGrams"
  input_arg {
    name: "data"
    type: DT_STRING
  }
  input_arg {
    name: "data_splits"
    type_attr: "Tsplits"
  }
  output_arg {
    name: "ngrams"
    type: DT_STRING
  }
  output_arg {
    name: "ngrams_splits"
    type_attr: "Tsplits"
  }
  attr {
    name: "separator"
    type: "string"
  }
  attr {
    name: "ngram_widths"
    type: "list(int)"
    has_minimum: true
  }
  attr {
    name: "left_pad"
    type: "string"
  }
  attr {
    name: "right_pad"
    type: "string"
  }
  attr {
    name: "pad_width"
    type: "int"
  }
  attr {
    name: "preserve_short_sequences"
    type: "bool"
  }
  attr {
    name: "Tsplits"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StringSplit"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  input_arg {
    name: "delimiter"
    type: DT_STRING
  }
  output_arg {
    name: "indices"
    type: DT_INT64
  }
  output_arg {
    name: "values"
    type: DT_STRING
  }
  output_arg {
    name: "shape"
    type: DT_INT64
  }
  attr {
    name: "skip_empty"
    type: "bool"
    default_value {
      b: true
    }
  }
}
op {
  name: "StringSplitV2"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  input_arg {
    name: "sep"
    type: DT_STRING
  }
  output_arg {
    name: "indices"
    type: DT_INT64
  }
  output_arg {
    name: "values"
    type: DT_STRING
  }
  output_arg {
    name: "shape"
    type: DT_INT64
  }
  attr {
    name: "maxsplit"
    type: "int"
    default_value {
      i: -1
    }
  }
}
op {
  name: "StringStrip"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type: DT_STRING
  }
}
op {
  name: "StringToHashBucket"
  input_arg {
    name: "string_tensor"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type: DT_INT64
  }
  attr {
    name: "num_buckets"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "StringToHashBucketFast"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type: DT_INT64
  }
  attr {
    name: "num_buckets"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "StringToHashBucketStrong"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type: DT_INT64
  }
  attr {
    name: "num_buckets"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "key"
    type: "list(int)"
  }
}
op {
  name: "StringToNumber"
  input_arg {
    name: "string_tensor"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "StringUpper"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type: DT_STRING
  }
  attr {
    name: "encoding"
    type: "string"
    default_value {
      s: ""
    }
  }
}
op {
  name: "Sub"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_UINT8
        type: DT_INT8
        type: DT_UINT16
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
        type: DT_UINT32
      }
    }
  }
}
op {
  name: "Substr"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  input_arg {
    name: "pos"
    type_attr: "T"
  }
  input_arg {
    name: "len"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type: DT_STRING
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "unit"
    type: "string"
    default_value {
      s: "BYTE"
    }
    allowed_values {
      list {
        s: "BYTE"
        s: "UTF8_CHAR"
      }
    }
  }
}
op {
  name: "Sum"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "reduction_indices"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "keep_dims"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "SummaryWriter"
  output_arg {
    name: "writer"
    type: DT_RESOURCE
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "Svd"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "s"
    type_attr: "T"
  }
  output_arg {
    name: "u"
    type_attr: "T"
  }
  output_arg {
    name: "v"
    type_attr: "T"
  }
  attr {
    name: "compute_uv"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "full_matrices"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
        type: DT_HALF
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Switch"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "pred"
    type: DT_BOOL
  }
  output_arg {
    name: "output_false"
    type_attr: "T"
  }
  output_arg {
    name: "output_true"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "SymbolicGradient"
  input_arg {
    name: "input"
    type_list_attr: "Tin"
  }
  output_arg {
    name: "output"
    type_list_attr: "Tout"
  }
  attr {
    name: "Tin"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "Tout"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "f"
    type: "func"
  }
}
op {
  name: "TFRecordDataset"
  input_arg {
    name: "filenames"
    type: DT_STRING
  }
  input_arg {
    name: "compression_type"
    type: DT_STRING
  }
  input_arg {
    name: "buffer_size"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "TFRecordReader"
  output_arg {
    name: "reader_handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "compression_type"
    type: "string"
    default_value {
      s: ""
    }
  }
  deprecation {
    version: 26
    explanation: "Use TFRecordReaderV2"
  }
  is_stateful: true
}
op {
  name: "TFRecordReaderV2"
  output_arg {
    name: "reader_handle"
    type: DT_RESOURCE
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "compression_type"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "TPUCompilationResult"
  output_arg {
    name: "output"
    type: DT_STRING
  }
}
op {
  name: "TPUCompile"
  input_arg {
    name: "dynamic_shapes"
    type: DT_INT64
    number_attr: "NumDynamicShapes"
  }
  input_arg {
    name: "guaranteed_constants"
    type_list_attr: "Tguaranteed_constants"
  }
  output_arg {
    name: "compilation_status"
    type: DT_STRING
  }
  output_arg {
    name: "program"
    type: DT_STRING
    number_attr: "num_computations"
  }
  output_arg {
    name: "may_modify_variables"
    type: DT_BOOL
    number_attr: "num_computations"
  }
  attr {
    name: "num_computations"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "function"
    type: "func"
  }
  attr {
    name: "metadata"
    type: "string"
  }
  attr {
    name: "NumDynamicShapes"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "Tguaranteed_constants"
    type: "list(type)"
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "TPUCompileSucceededAssert"
  input_arg {
    name: "compilation_status"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "TPUEmbeddingActivations"
  input_arg {
    name: "embedding_variable"
    type: DT_FLOAT
  }
  input_arg {
    name: "sliced_activations"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type: DT_FLOAT
  }
  attr {
    name: "table_id"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "lookup_id"
    type: "int"
    has_minimum: true
  }
}
op {
  name: "TPUExecute"
  input_arg {
    name: "args"
    type_list_attr: "Targs"
  }
  input_arg {
    name: "key"
    type: DT_STRING
  }
  output_arg {
    name: "results"
    type_list_attr: "Tresults"
  }
  attr {
    name: "Targs"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tresults"
    type: "list(type)"
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "TPUExecuteAndUpdateVariables"
  input_arg {
    name: "args"
    type_list_attr: "Targs"
  }
  input_arg {
    name: "key"
    type: DT_STRING
  }
  output_arg {
    name: "results"
    type_list_attr: "Tresults"
  }
  attr {
    name: "Targs"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tresults"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "device_var_reads_indices"
    type: "list(int)"
    has_minimum: true
  }
  attr {
    name: "device_var_updates_indices"
    type: "list(int)"
    has_minimum: true
  }
  is_stateful: true
}
op {
  name: "TPUOrdinalSelector"
  output_arg {
    name: "device_ordinals"
    type: DT_INT32
  }
  is_stateful: true
}
op {
  name: "TPUPartitionedCall"
  input_arg {
    name: "args"
    type_list_attr: "Tin"
  }
  input_arg {
    name: "device_ordinal"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_list_attr: "Tout"
  }
  attr {
    name: "Tin"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Tout"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "f"
    type: "func"
  }
  attr {
    name: "autotuner_thresh"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "TPUPartitionedInput"
  input_arg {
    name: "inputs"
    type_attr: "T"
    number_attr: "N"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "partition_dim"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "TPUPartitionedOutput"
  input_arg {
    name: "inputs"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
    number_attr: "num_splits"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "num_splits"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "partition_dim"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "TPUReplicateMetadata"
  attr {
    name: "num_replicas"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "num_cores_per_replica"
    type: "int"
    default_value {
      i: 1
    }
  }
  attr {
    name: "topology"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "use_tpu"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "device_assignment"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "computation_shape"
    type: "list(int)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "host_compute_core"
    type: "list(string)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "padding_map"
    type: "list(string)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "step_marker_location"
    type: "string"
    default_value {
      s: "STEP_MARK_AT_ENTRY"
    }
  }
  attr {
    name: "allow_soft_placement"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "use_spmd_for_xla_partitioning"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "TPUReplicatedInput"
  input_arg {
    name: "inputs"
    type_attr: "T"
    number_attr: "N"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "is_mirrored_variable"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "index"
    type: "int"
    default_value {
      i: -1
    }
  }
  attr {
    name: "is_packed"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "TPUReplicatedOutput"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "outputs"
    type_attr: "T"
    number_attr: "num_replicas"
  }
  attr {
    name: "num_replicas"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "TakeDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "count"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "TakeManySparseFromTensorsMap"
  input_arg {
    name: "sparse_handles"
    type: DT_INT64
  }
  output_arg {
    name: "sparse_indices"
    type: DT_INT64
  }
  output_arg {
    name: "sparse_values"
    type_attr: "dtype"
  }
  output_arg {
    name: "sparse_shape"
    type: DT_INT64
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "TakeWhileDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "other_arguments"
    type_list_attr: "Targuments"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "predicate"
    type: "func"
  }
  attr {
    name: "Targuments"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "Tan"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT8
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Tanh"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "TanhGrad"
  input_arg {
    name: "y"
    type_attr: "T"
  }
  input_arg {
    name: "dy"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "TemporaryVariable"
  output_arg {
    name: "ref"
    type_attr: "dtype"
    is_ref: true
  }
  attr {
    name: "shape"
    type: "shape"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "var_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "TensorArray"
  input_arg {
    name: "size"
    type: DT_INT32
  }
  output_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "dynamic_size"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "clear_after_read"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "tensor_array_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "element_shape"
    type: "shape"
    default_value {
      shape {
        unknown_rank: true
      }
    }
  }
  deprecation {
    version: 16
    explanation: "Use TensorArrayV3"
  }
  is_stateful: true
}
op {
  name: "TensorArrayClose"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  deprecation {
    version: 16
    explanation: "Use TensorArrayCloseV3"
  }
}
op {
  name: "TensorArrayCloseV2"
  input_arg {
    name: "handle"
    type: DT_STRING
  }
  deprecation {
    version: 26
    explanation: "Use TensorArrayCloseV3"
  }
}
op {
  name: "TensorArrayCloseV3"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  is_stateful: true
}
op {
  name: "TensorArrayConcat"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "value"
    type_attr: "dtype"
  }
  output_arg {
    name: "lengths"
    type: DT_INT64
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "element_shape_except0"
    type: "shape"
    default_value {
      shape {
        unknown_rank: true
      }
    }
  }
  deprecation {
    version: 16
    explanation: "Use TensorArrayGradV3"
  }
}
op {
  name: "TensorArrayConcatV2"
  input_arg {
    name: "handle"
    type: DT_STRING
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "value"
    type_attr: "dtype"
  }
  output_arg {
    name: "lengths"
    type: DT_INT64
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "element_shape_except0"
    type: "shape"
    default_value {
      shape {
        unknown_rank: true
      }
    }
  }
}
op {
  name: "TensorArrayConcatV3"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "value"
    type_attr: "dtype"
  }
  output_arg {
    name: "lengths"
    type: DT_INT64
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "element_shape_except0"
    type: "shape"
    default_value {
      shape {
        unknown_rank: true
      }
    }
  }
  is_stateful: true
}
op {
  name: "TensorArrayGather"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "value"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "element_shape"
    type: "shape"
    default_value {
      shape {
        unknown_rank: true
      }
    }
  }
  deprecation {
    version: 16
    explanation: "Use TensorArrayGatherV3"
  }
}
op {
  name: "TensorArrayGatherV2"
  input_arg {
    name: "handle"
    type: DT_STRING
  }
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "value"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "element_shape"
    type: "shape"
    default_value {
      shape {
        unknown_rank: true
      }
    }
  }
  deprecation {
    version: 26
    explanation: "Use TensorArrayGatherV3"
  }
}
op {
  name: "TensorArrayGatherV3"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "value"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "element_shape"
    type: "shape"
    default_value {
      shape {
        unknown_rank: true
      }
    }
  }
  is_stateful: true
}
op {
  name: "TensorArrayGrad"
  input_arg {
    name: "handle"
    type: DT_STRING
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "grad_handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "source"
    type: "string"
  }
  deprecation {
    version: 16
    explanation: "Use TensorArrayGradV3"
  }
  is_stateful: true
}
op {
  name: "TensorArrayGradV2"
  input_arg {
    name: "handle"
    type: DT_STRING
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "grad_handle"
    type: DT_STRING
  }
  attr {
    name: "source"
    type: "string"
  }
  deprecation {
    version: 26
    explanation: "Use TensorArrayGradV3"
  }
  is_stateful: true
}
op {
  name: "TensorArrayGradV3"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "grad_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "flow_out"
    type: DT_FLOAT
  }
  attr {
    name: "source"
    type: "string"
  }
  is_stateful: true
}
op {
  name: "TensorArrayGradWithShape"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  input_arg {
    name: "shape_to_prepend"
    type: DT_INT32
  }
  output_arg {
    name: "grad_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "flow_out"
    type: DT_FLOAT
  }
  attr {
    name: "source"
    type: "string"
  }
  is_stateful: true
}
op {
  name: "TensorArrayPack"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "value"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "element_shape"
    type: "shape"
    default_value {
      shape {
        unknown_rank: true
      }
    }
  }
  deprecation {
    version: 16
    explanation: "Use TensorArrayGatherV3 with RangeOp"
  }
}
op {
  name: "TensorArrayRead"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "index"
    type: DT_INT32
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "value"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  deprecation {
    version: 16
    explanation: "Use TensorArrayReadV3"
  }
}
op {
  name: "TensorArrayReadV2"
  input_arg {
    name: "handle"
    type: DT_STRING
  }
  input_arg {
    name: "index"
    type: DT_INT32
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "value"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  deprecation {
    version: 26
    explanation: "Use TensorArrayReadV3"
  }
}
op {
  name: "TensorArrayReadV3"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "index"
    type: DT_INT32
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "value"
    type_attr: "dtype"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "TensorArrayScatter"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "flow_out"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
  }
  deprecation {
    version: 19
    explanation: "Use TensorArrayGradV3"
  }
}
op {
  name: "TensorArrayScatterV2"
  input_arg {
    name: "handle"
    type: DT_STRING
  }
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "flow_out"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
  }
  deprecation {
    version: 26
    explanation: "Use TensorArrayScatterV3"
  }
}
op {
  name: "TensorArrayScatterV3"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "flow_out"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "TensorArraySize"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "size"
    type: DT_INT32
  }
  deprecation {
    version: 16
    explanation: "Use TensorArraySizeV3"
  }
}
op {
  name: "TensorArraySizeV2"
  input_arg {
    name: "handle"
    type: DT_STRING
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "size"
    type: DT_INT32
  }
  deprecation {
    version: 26
    explanation: "Use TensorArraySizeV3"
  }
}
op {
  name: "TensorArraySizeV3"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "size"
    type: DT_INT32
  }
  is_stateful: true
}
op {
  name: "TensorArraySplit"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  input_arg {
    name: "lengths"
    type: DT_INT64
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "flow_out"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
  }
  deprecation {
    version: 16
    explanation: "Use TensorArraySplitV3"
  }
}
op {
  name: "TensorArraySplitV2"
  input_arg {
    name: "handle"
    type: DT_STRING
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  input_arg {
    name: "lengths"
    type: DT_INT64
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "flow_out"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
  }
  deprecation {
    version: 26
    explanation: "Use TensorArraySplitV3"
  }
}
op {
  name: "TensorArraySplitV3"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  input_arg {
    name: "lengths"
    type: DT_INT64
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "flow_out"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "TensorArrayUnpack"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "flow_out"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
  }
  deprecation {
    version: 20
    explanation: "Use TensorArrayScatterV3 with RangeOp"
  }
}
op {
  name: "TensorArrayV2"
  input_arg {
    name: "size"
    type: DT_INT32
  }
  output_arg {
    name: "handle"
    type: DT_STRING
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "element_shape"
    type: "shape"
    default_value {
      shape {
        unknown_rank: true
      }
    }
  }
  attr {
    name: "dynamic_size"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "clear_after_read"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "tensor_array_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  deprecation {
    version: 26
    explanation: "Use TensorArrayV3"
  }
  is_stateful: true
}
op {
  name: "TensorArrayV3"
  input_arg {
    name: "size"
    type: DT_INT32
  }
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "flow"
    type: DT_FLOAT
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "element_shape"
    type: "shape"
    default_value {
      shape {
        unknown_rank: true
      }
    }
  }
  attr {
    name: "dynamic_size"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "clear_after_read"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "identical_element_shapes"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "tensor_array_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "TensorArrayWrite"
  input_arg {
    name: "handle"
    type: DT_STRING
    is_ref: true
  }
  input_arg {
    name: "index"
    type: DT_INT32
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "flow_out"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
  }
  deprecation {
    version: 16
    explanation: "Use TensorArrayWriteV3"
  }
}
op {
  name: "TensorArrayWriteV2"
  input_arg {
    name: "handle"
    type: DT_STRING
  }
  input_arg {
    name: "index"
    type: DT_INT32
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "flow_out"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
  }
  deprecation {
    version: 26
    explanation: "Use TensorArrayWriteV3"
  }
}
op {
  name: "TensorArrayWriteV3"
  input_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "index"
    type: DT_INT32
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  input_arg {
    name: "flow_in"
    type: DT_FLOAT
  }
  output_arg {
    name: "flow_out"
    type: DT_FLOAT
  }
  attr {
    name: "T"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "TensorDataset"
  input_arg {
    name: "components"
    type_list_attr: "Toutput_types"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "Toutput_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "TensorForestCreateTreeVariable"
  input_arg {
    name: "tree_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "tree_config"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "TensorForestTreeDeserialize"
  input_arg {
    name: "tree_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "tree_config"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "TensorForestTreeIsInitializedOp"
  input_arg {
    name: "tree_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "is_initialized"
    type: DT_BOOL
  }
  is_stateful: true
}
op {
  name: "TensorForestTreePredict"
  input_arg {
    name: "tree_handle"
    type: DT_RESOURCE
  }
  input_arg {
    name: "dense_features"
    type: DT_FLOAT
  }
  output_arg {
    name: "logits"
    type: DT_FLOAT
  }
  attr {
    name: "logits_dimension"
    type: "int"
  }
  is_stateful: true
}
op {
  name: "TensorForestTreeResourceHandleOp"
  output_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "TensorForestTreeSerialize"
  input_arg {
    name: "tree_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "tree_config"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "TensorForestTreeSize"
  input_arg {
    name: "tree_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "tree_size"
    type: DT_INT32
  }
  is_stateful: true
}
op {
  name: "TensorListConcat"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  output_arg {
    name: "tensor"
    type_attr: "element_dtype"
  }
  output_arg {
    name: "lengths"
    type: DT_INT64
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
  attr {
    name: "element_shape"
    type: "shape"
    default_value {
      shape {
        unknown_rank: true
      }
    }
  }
}
op {
  name: "TensorListConcatLists"
  input_arg {
    name: "input_a"
    type: DT_VARIANT
  }
  input_arg {
    name: "input_b"
    type: DT_VARIANT
  }
  output_arg {
    name: "output"
    type: DT_VARIANT
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
}
op {
  name: "TensorListConcatV2"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  input_arg {
    name: "element_shape"
    type_attr: "shape_type"
  }
  input_arg {
    name: "leading_dims"
    type: DT_INT64
  }
  output_arg {
    name: "tensor"
    type_attr: "element_dtype"
  }
  output_arg {
    name: "lengths"
    type: DT_INT64
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
  attr {
    name: "shape_type"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "TensorListElementShape"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  output_arg {
    name: "element_shape"
    type_attr: "shape_type"
  }
  attr {
    name: "shape_type"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "TensorListFromTensor"
  input_arg {
    name: "tensor"
    type_attr: "element_dtype"
  }
  input_arg {
    name: "element_shape"
    type_attr: "shape_type"
  }
  output_arg {
    name: "output_handle"
    type: DT_VARIANT
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
  attr {
    name: "shape_type"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "TensorListGather"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  input_arg {
    name: "element_shape"
    type: DT_INT32
  }
  output_arg {
    name: "values"
    type_attr: "element_dtype"
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
}
op {
  name: "TensorListGetItem"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  input_arg {
    name: "index"
    type: DT_INT32
  }
  input_arg {
    name: "element_shape"
    type: DT_INT32
  }
  output_arg {
    name: "item"
    type_attr: "element_dtype"
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
}
op {
  name: "TensorListLength"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  output_arg {
    name: "length"
    type: DT_INT32
  }
}
op {
  name: "TensorListPopBack"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  input_arg {
    name: "element_shape"
    type: DT_INT32
  }
  output_arg {
    name: "output_handle"
    type: DT_VARIANT
  }
  output_arg {
    name: "tensor"
    type_attr: "element_dtype"
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
}
op {
  name: "TensorListPushBack"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  input_arg {
    name: "tensor"
    type_attr: "element_dtype"
  }
  output_arg {
    name: "output_handle"
    type: DT_VARIANT
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
}
op {
  name: "TensorListPushBackBatch"
  input_arg {
    name: "input_handles"
    type: DT_VARIANT
  }
  input_arg {
    name: "tensor"
    type_attr: "element_dtype"
  }
  output_arg {
    name: "output_handles"
    type: DT_VARIANT
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
}
op {
  name: "TensorListReserve"
  input_arg {
    name: "element_shape"
    type_attr: "shape_type"
  }
  input_arg {
    name: "num_elements"
    type: DT_INT32
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
  attr {
    name: "shape_type"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "TensorListResize"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  input_arg {
    name: "size"
    type: DT_INT32
  }
  output_arg {
    name: "output_handle"
    type: DT_VARIANT
  }
}
op {
  name: "TensorListScatter"
  input_arg {
    name: "tensor"
    type_attr: "element_dtype"
  }
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  input_arg {
    name: "element_shape"
    type_attr: "shape_type"
  }
  output_arg {
    name: "output_handle"
    type: DT_VARIANT
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
  attr {
    name: "shape_type"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "TensorListScatterIntoExistingList"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  input_arg {
    name: "tensor"
    type_attr: "element_dtype"
  }
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  output_arg {
    name: "output_handle"
    type: DT_VARIANT
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
}
op {
  name: "TensorListScatterV2"
  input_arg {
    name: "tensor"
    type_attr: "element_dtype"
  }
  input_arg {
    name: "indices"
    type: DT_INT32
  }
  input_arg {
    name: "element_shape"
    type_attr: "shape_type"
  }
  input_arg {
    name: "num_elements"
    type: DT_INT32
  }
  output_arg {
    name: "output_handle"
    type: DT_VARIANT
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
  attr {
    name: "shape_type"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "TensorListSetItem"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  input_arg {
    name: "index"
    type: DT_INT32
  }
  input_arg {
    name: "item"
    type_attr: "element_dtype"
  }
  output_arg {
    name: "output_handle"
    type: DT_VARIANT
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
}
op {
  name: "TensorListSplit"
  input_arg {
    name: "tensor"
    type_attr: "element_dtype"
  }
  input_arg {
    name: "element_shape"
    type_attr: "shape_type"
  }
  input_arg {
    name: "lengths"
    type: DT_INT64
  }
  output_arg {
    name: "output_handle"
    type: DT_VARIANT
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
  attr {
    name: "shape_type"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "TensorListStack"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  input_arg {
    name: "element_shape"
    type: DT_INT32
  }
  output_arg {
    name: "tensor"
    type_attr: "element_dtype"
  }
  attr {
    name: "element_dtype"
    type: "type"
  }
  attr {
    name: "num_elements"
    type: "int"
    default_value {
      i: -1
    }
  }
}
op {
  name: "TensorMapErase"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  input_arg {
    name: "key"
    type_attr: "key_dtype"
  }
  output_arg {
    name: "output_handle"
    type: DT_VARIANT
  }
  attr {
    name: "key_dtype"
    type: "type"
  }
  attr {
    name: "value_dtype"
    type: "type"
  }
}
op {
  name: "TensorMapHasKey"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  input_arg {
    name: "key"
    type_attr: "key_dtype"
  }
  output_arg {
    name: "has_key"
    type: DT_BOOL
  }
  attr {
    name: "key_dtype"
    type: "type"
  }
}
op {
  name: "TensorMapInsert"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  input_arg {
    name: "key"
    type_attr: "key_dtype"
  }
  input_arg {
    name: "value"
    type_attr: "value_dtype"
  }
  output_arg {
    name: "output_handle"
    type: DT_VARIANT
  }
  attr {
    name: "key_dtype"
    type: "type"
  }
  attr {
    name: "value_dtype"
    type: "type"
  }
}
op {
  name: "TensorMapLookup"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  input_arg {
    name: "key"
    type_attr: "key_dtype"
  }
  output_arg {
    name: "value"
    type_attr: "value_dtype"
  }
  attr {
    name: "key_dtype"
    type: "type"
  }
  attr {
    name: "value_dtype"
    type: "type"
  }
}
op {
  name: "TensorMapSize"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  output_arg {
    name: "size"
    type: DT_INT32
  }
}
op {
  name: "TensorMapStackKeys"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  output_arg {
    name: "keys"
    type_attr: "key_dtype"
  }
  attr {
    name: "key_dtype"
    type: "type"
  }
}
op {
  name: "TensorScatterAdd"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "TensorScatterMax"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "TensorScatterMin"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "TensorScatterSub"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "TensorScatterUpdate"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tindices"
  }
  input_arg {
    name: "updates"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "TensorSliceDataset"
  input_arg {
    name: "components"
    type_list_attr: "Toutput_types"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "Toutput_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "TensorStridedSliceUpdate"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "begin"
    type_attr: "Index"
  }
  input_arg {
    name: "end"
    type_attr: "Index"
  }
  input_arg {
    name: "strides"
    type_attr: "Index"
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Index"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "begin_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "end_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "ellipsis_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "new_axis_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "shrink_axis_mask"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "TensorSummary"
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  output_arg {
    name: "summary"
    type: DT_STRING
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "description"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "labels"
    type: "list(string)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "display_name"
    type: "string"
    default_value {
      s: ""
    }
  }
}
op {
  name: "TensorSummaryV2"
  input_arg {
    name: "tag"
    type: DT_STRING
  }
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  input_arg {
    name: "serialized_summary_metadata"
    type: DT_STRING
  }
  output_arg {
    name: "summary"
    type: DT_STRING
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "TextLineDataset"
  input_arg {
    name: "filenames"
    type: DT_STRING
  }
  input_arg {
    name: "compression_type"
    type: DT_STRING
  }
  input_arg {
    name: "buffer_size"
    type: DT_INT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  is_stateful: true
}
op {
  name: "TextLineReader"
  output_arg {
    name: "reader_handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "skip_header_lines"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  deprecation {
    version: 26
    explanation: "Use TextLineReaderV2"
  }
  is_stateful: true
}
op {
  name: "TextLineReaderV2"
  output_arg {
    name: "reader_handle"
    type: DT_RESOURCE
  }
  attr {
    name: "skip_header_lines"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "ThreadPoolDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "thread_pool"
    type: DT_RESOURCE
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "ThreadPoolHandle"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "num_threads"
    type: "int"
  }
  attr {
    name: "max_intra_op_parallelism"
    type: "int"
    default_value {
      i: 1
    }
  }
  attr {
    name: "display_name"
    type: "string"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "ThreadUnsafeUnigramCandidateSampler"
  input_arg {
    name: "true_classes"
    type: DT_INT64
  }
  output_arg {
    name: "sampled_candidates"
    type: DT_INT64
  }
  output_arg {
    name: "true_expected_count"
    type: DT_FLOAT
  }
  output_arg {
    name: "sampled_expected_count"
    type: DT_FLOAT
  }
  attr {
    name: "num_true"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "num_sampled"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "unique"
    type: "bool"
  }
  attr {
    name: "range_max"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  is_stateful: true
}
op {
  name: "Tile"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "multiples"
    type_attr: "Tmultiples"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tmultiples"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "TileGrad"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "multiples"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  deprecation {
    version: 3
    explanation: "TileGrad has been replaced with reduce_sum"
  }
}
op {
  name: "Timestamp"
  output_arg {
    name: "ts"
    type: DT_DOUBLE
  }
  is_stateful: true
}
op {
  name: "ToBool"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type: DT_BOOL
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "TopK"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "values"
    type_attr: "T"
  }
  output_arg {
    name: "indices"
    type: DT_INT32
  }
  attr {
    name: "k"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "sorted"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  deprecation {
    version: 7
    explanation: "Use TopKV2 instead"
  }
}
op {
  name: "TopKUnique"
  input_arg {
    name: "input"
    type: DT_FLOAT
  }
  output_arg {
    name: "topk"
    type: DT_FLOAT
  }
  output_arg {
    name: "topk_indices"
    type: DT_INT32
  }
  attr {
    name: "k"
    type: "int"
  }
}
op {
  name: "TopKV2"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  input_arg {
    name: "k"
    type: DT_INT32
  }
  output_arg {
    name: "values"
    type_attr: "T"
  }
  output_arg {
    name: "indices"
    type: DT_INT32
  }
  attr {
    name: "sorted"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
}
op {
  name: "TopKWithUnique"
  input_arg {
    name: "input"
    type: DT_FLOAT
  }
  output_arg {
    name: "topk"
    type: DT_FLOAT
  }
  output_arg {
    name: "topk_indices"
    type: DT_INT32
  }
  attr {
    name: "k"
    type: "int"
  }
}
op {
  name: "Transpose"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "perm"
    type_attr: "Tperm"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Tperm"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "TridiagonalMatMul"
  input_arg {
    name: "superdiag"
    type_attr: "T"
  }
  input_arg {
    name: "maindiag"
    type_attr: "T"
  }
  input_arg {
    name: "subdiag"
    type_attr: "T"
  }
  input_arg {
    name: "rhs"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "TridiagonalSolve"
  input_arg {
    name: "diagonals"
    type_attr: "T"
  }
  input_arg {
    name: "rhs"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "partial_pivoting"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_DOUBLE
        type: DT_FLOAT
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "TruncateDiv"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_UINT8
        type: DT_INT8
        type: DT_UINT16
        type: DT_INT16
        type: DT_INT32
        type: DT_INT64
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "TruncateMod"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "TruncatedNormal"
  input_arg {
    name: "shape"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "dtype"
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "dtype"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_BFLOAT16
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "TryRpc"
  input_arg {
    name: "address"
    type: DT_STRING
  }
  input_arg {
    name: "method"
    type: DT_STRING
  }
  input_arg {
    name: "request"
    type: DT_STRING
  }
  output_arg {
    name: "response"
    type: DT_STRING
  }
  output_arg {
    name: "status_code"
    type: DT_INT32
  }
  output_arg {
    name: "status_message"
    type: DT_STRING
  }
  attr {
    name: "protocol"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "fail_fast"
    type: "bool"
    default_value {
      b: true
    }
  }
  attr {
    name: "timeout_in_ms"
    type: "int"
    default_value {
      i: 0
    }
  }
  is_stateful: true
}
op {
  name: "Unbatch"
  input_arg {
    name: "batched_tensor"
    type_attr: "T"
  }
  input_arg {
    name: "batch_index"
    type: DT_INT64
  }
  input_arg {
    name: "id"
    type: DT_INT64
  }
  output_arg {
    name: "unbatched_tensor"
    type_attr: "T"
  }
  attr {
    name: "timeout_micros"
    type: "int"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "UnbatchDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "UnbatchGrad"
  input_arg {
    name: "original_input"
    type_attr: "T"
  }
  input_arg {
    name: "batch_index"
    type: DT_INT64
  }
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "id"
    type: DT_INT64
  }
  output_arg {
    name: "batched_grad"
    type_attr: "T"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "UncompressElement"
  input_arg {
    name: "compressed"
    type: DT_VARIANT
  }
  output_arg {
    name: "components"
    type_list_attr: "output_types"
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "UnicodeDecode"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  output_arg {
    name: "row_splits"
    type_attr: "Tsplits"
  }
  output_arg {
    name: "char_values"
    type: DT_INT32
  }
  attr {
    name: "input_encoding"
    type: "string"
  }
  attr {
    name: "errors"
    type: "string"
    default_value {
      s: "replace"
    }
    allowed_values {
      list {
        s: "strict"
        s: "replace"
        s: "ignore"
      }
    }
  }
  attr {
    name: "replacement_char"
    type: "int"
    default_value {
      i: 65533
    }
  }
  attr {
    name: "replace_control_characters"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "Tsplits"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "UnicodeDecodeWithOffsets"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  output_arg {
    name: "row_splits"
    type_attr: "Tsplits"
  }
  output_arg {
    name: "char_values"
    type: DT_INT32
  }
  output_arg {
    name: "char_to_byte_starts"
    type: DT_INT64
  }
  attr {
    name: "input_encoding"
    type: "string"
  }
  attr {
    name: "errors"
    type: "string"
    default_value {
      s: "replace"
    }
    allowed_values {
      list {
        s: "strict"
        s: "replace"
        s: "ignore"
      }
    }
  }
  attr {
    name: "replacement_char"
    type: "int"
    default_value {
      i: 65533
    }
  }
  attr {
    name: "replace_control_characters"
    type: "bool"
    default_value {
      b: false
    }
  }
  attr {
    name: "Tsplits"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "UnicodeEncode"
  input_arg {
    name: "input_values"
    type: DT_INT32
  }
  input_arg {
    name: "input_splits"
    type_attr: "Tsplits"
  }
  output_arg {
    name: "output"
    type: DT_STRING
  }
  attr {
    name: "errors"
    type: "string"
    default_value {
      s: "replace"
    }
    allowed_values {
      list {
        s: "ignore"
        s: "replace"
        s: "strict"
      }
    }
  }
  attr {
    name: "output_encoding"
    type: "string"
    allowed_values {
      list {
        s: "UTF-8"
        s: "UTF-16-BE"
        s: "UTF-32-BE"
      }
    }
  }
  attr {
    name: "replacement_char"
    type: "int"
    default_value {
      i: 65533
    }
  }
  attr {
    name: "Tsplits"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "UnicodeScript"
  input_arg {
    name: "input"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type: DT_INT32
  }
}
op {
  name: "UnicodeTranscode"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  output_arg {
    name: "output"
    type: DT_STRING
  }
  attr {
    name: "input_encoding"
    type: "string"
  }
  attr {
    name: "output_encoding"
    type: "string"
    allowed_values {
      list {
        s: "UTF-8"
        s: "UTF-16-BE"
        s: "UTF-32-BE"
      }
    }
  }
  attr {
    name: "errors"
    type: "string"
    default_value {
      s: "replace"
    }
    allowed_values {
      list {
        s: "strict"
        s: "replace"
        s: "ignore"
      }
    }
  }
  attr {
    name: "replacement_char"
    type: "int"
    default_value {
      i: 65533
    }
  }
  attr {
    name: "replace_control_characters"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "UniformCandidateSampler"
  input_arg {
    name: "true_classes"
    type: DT_INT64
  }
  output_arg {
    name: "sampled_candidates"
    type: DT_INT64
  }
  output_arg {
    name: "true_expected_count"
    type: DT_FLOAT
  }
  output_arg {
    name: "sampled_expected_count"
    type: DT_FLOAT
  }
  attr {
    name: "num_true"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "num_sampled"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "unique"
    type: "bool"
  }
  attr {
    name: "range_max"
    type: "int"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "seed"
    type: "int"
    default_value {
      i: 0
    }
  }
  attr {
    name: "seed2"
    type: "int"
    default_value {
      i: 0
    }
  }
  is_stateful: true
}
op {
  name: "Unique"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "idx"
    type_attr: "out_idx"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "out_idx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "UniqueDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "UniqueV2"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "axis"
    type_attr: "Taxis"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "idx"
    type_attr: "out_idx"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Taxis"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "out_idx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "UniqueWithCounts"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "idx"
    type_attr: "out_idx"
  }
  output_arg {
    name: "count"
    type_attr: "out_idx"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "out_idx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "UniqueWithCountsV2"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "axis"
    type_attr: "Taxis"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "idx"
    type_attr: "out_idx"
  }
  output_arg {
    name: "count"
    type_attr: "out_idx"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "Taxis"
    type: "type"
    default_value {
      type: DT_INT64
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "out_idx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "Unpack"
  input_arg {
    name: "value"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
    number_attr: "num"
  }
  attr {
    name: "num"
    type: "int"
    has_minimum: true
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "axis"
    type: "int"
    default_value {
      i: 0
    }
  }
}
op {
  name: "UnravelIndex"
  input_arg {
    name: "indices"
    type_attr: "Tidx"
  }
  input_arg {
    name: "dims"
    type_attr: "Tidx"
  }
  output_arg {
    name: "output"
    type_attr: "Tidx"
  }
  attr {
    name: "Tidx"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "UnsortedSegmentJoin"
  input_arg {
    name: "inputs"
    type: DT_STRING
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tindices"
  }
  input_arg {
    name: "num_segments"
    type_attr: "Tnumsegments"
  }
  output_arg {
    name: "output"
    type: DT_STRING
  }
  attr {
    name: "separator"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tnumsegments"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "UnsortedSegmentMax"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tindices"
  }
  input_arg {
    name: "num_segments"
    type_attr: "Tnumsegments"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tnumsegments"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "UnsortedSegmentMin"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tindices"
  }
  input_arg {
    name: "num_segments"
    type_attr: "Tnumsegments"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tnumsegments"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "UnsortedSegmentProd"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tindices"
  }
  input_arg {
    name: "num_segments"
    type_attr: "Tnumsegments"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tnumsegments"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "UnsortedSegmentSum"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "segment_ids"
    type_attr: "Tindices"
  }
  input_arg {
    name: "num_segments"
    type_attr: "Tnumsegments"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  attr {
    name: "Tindices"
    type: "type"
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  attr {
    name: "Tnumsegments"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "Unstage"
  output_arg {
    name: "values"
    type_list_attr: "dtypes"
  }
  attr {
    name: "capacity"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "memory_limit"
    type: "int"
    default_value {
      i: 0
    }
    has_minimum: true
  }
  attr {
    name: "dtypes"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "UnwrapDatasetVariant"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  output_arg {
    name: "output_handle"
    type: DT_VARIANT
  }
}
op {
  name: "UpperBound"
  input_arg {
    name: "sorted_inputs"
    type_attr: "T"
  }
  input_arg {
    name: "values"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
}
op {
  name: "VarHandleOp"
  output_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "shape"
    type: "shape"
  }
  attr {
    name: "allowed_devices"
    type: "list(string)"
    default_value {
      list {
      }
    }
  }
  is_stateful: true
}
op {
  name: "VarIsInitializedOp"
  input_arg {
    name: "resource"
    type: DT_RESOURCE
  }
  output_arg {
    name: "is_initialized"
    type: DT_BOOL
  }
  is_stateful: true
}
op {
  name: "Variable"
  output_arg {
    name: "ref"
    type_attr: "dtype"
    is_ref: true
  }
  attr {
    name: "shape"
    type: "shape"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "VariableShape"
  input_arg {
    name: "input"
    type: DT_RESOURCE
  }
  output_arg {
    name: "output"
    type_attr: "out_type"
  }
  attr {
    name: "out_type"
    type: "type"
    default_value {
      type: DT_INT32
    }
    allowed_values {
      list {
        type: DT_INT32
        type: DT_INT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "VariableV2"
  output_arg {
    name: "ref"
    type_attr: "dtype"
    is_ref: true
  }
  attr {
    name: "shape"
    type: "shape"
  }
  attr {
    name: "dtype"
    type: "type"
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "Where"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "index"
    type: DT_INT64
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_BOOL
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_COMPLEX64
        type: DT_INT64
        type: DT_QINT8
        type: DT_QUINT8
        type: DT_QINT32
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_COMPLEX128
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
        type: DT_BOOL
      }
    }
  }
}
op {
  name: "While"
  input_arg {
    name: "input"
    type_list_attr: "T"
  }
  output_arg {
    name: "output"
    type_list_attr: "T"
  }
  attr {
    name: "T"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "cond"
    type: "func"
  }
  attr {
    name: "body"
    type: "func"
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    default_value {
      list {
      }
    }
  }
  attr {
    name: "parallel_iterations"
    type: "int"
    default_value {
      i: 10
    }
  }
  is_stateful: true
}
op {
  name: "WholeFileReader"
  output_arg {
    name: "reader_handle"
    type: DT_STRING
    is_ref: true
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "WholeFileReaderV2"
  output_arg {
    name: "reader_handle"
    type: DT_RESOURCE
  }
  attr {
    name: "container"
    type: "string"
    default_value {
      s: ""
    }
  }
  attr {
    name: "shared_name"
    type: "string"
    default_value {
      s: ""
    }
  }
  is_stateful: true
}
op {
  name: "WindowDataset"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "size"
    type: DT_INT64
  }
  input_arg {
    name: "shift"
    type: DT_INT64
  }
  input_arg {
    name: "stride"
    type: DT_INT64
  }
  input_arg {
    name: "drop_remainder"
    type: DT_BOOL
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
}
op {
  name: "WorkerHeartbeat"
  input_arg {
    name: "request"
    type: DT_STRING
  }
  output_arg {
    name: "response"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "WrapDatasetVariant"
  input_arg {
    name: "input_handle"
    type: DT_VARIANT
  }
  output_arg {
    name: "output_handle"
    type: DT_VARIANT
  }
}
op {
  name: "WriteAudioSummary"
  input_arg {
    name: "writer"
    type: DT_RESOURCE
  }
  input_arg {
    name: "step"
    type: DT_INT64
  }
  input_arg {
    name: "tag"
    type: DT_STRING
  }
  input_arg {
    name: "tensor"
    type: DT_FLOAT
  }
  input_arg {
    name: "sample_rate"
    type: DT_FLOAT
  }
  attr {
    name: "max_outputs"
    type: "int"
    default_value {
      i: 3
    }
    has_minimum: true
    minimum: 1
  }
  is_stateful: true
}
op {
  name: "WriteFile"
  input_arg {
    name: "filename"
    type: DT_STRING
  }
  input_arg {
    name: "contents"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "WriteGraphSummary"
  input_arg {
    name: "writer"
    type: DT_RESOURCE
  }
  input_arg {
    name: "step"
    type: DT_INT64
  }
  input_arg {
    name: "tensor"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "WriteHistogramSummary"
  input_arg {
    name: "writer"
    type: DT_RESOURCE
  }
  input_arg {
    name: "step"
    type: DT_INT64
  }
  input_arg {
    name: "tag"
    type: DT_STRING
  }
  input_arg {
    name: "values"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "WriteImageSummary"
  input_arg {
    name: "writer"
    type: DT_RESOURCE
  }
  input_arg {
    name: "step"
    type: DT_INT64
  }
  input_arg {
    name: "tag"
    type: DT_STRING
  }
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  input_arg {
    name: "bad_color"
    type: DT_UINT8
  }
  attr {
    name: "max_images"
    type: "int"
    default_value {
      i: 3
    }
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "T"
    type: "type"
    default_value {
      type: DT_FLOAT
    }
    allowed_values {
      list {
        type: DT_UINT8
        type: DT_FLOAT
        type: DT_HALF
      }
    }
  }
  is_stateful: true
}
op {
  name: "WriteRawProtoSummary"
  input_arg {
    name: "writer"
    type: DT_RESOURCE
  }
  input_arg {
    name: "step"
    type: DT_INT64
  }
  input_arg {
    name: "tensor"
    type: DT_STRING
  }
  is_stateful: true
}
op {
  name: "WriteScalarSummary"
  input_arg {
    name: "writer"
    type: DT_RESOURCE
  }
  input_arg {
    name: "step"
    type: DT_INT64
  }
  input_arg {
    name: "tag"
    type: DT_STRING
  }
  input_arg {
    name: "value"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_INT32
        type: DT_UINT8
        type: DT_INT16
        type: DT_INT8
        type: DT_INT64
        type: DT_BFLOAT16
        type: DT_UINT16
        type: DT_HALF
        type: DT_UINT32
        type: DT_UINT64
      }
    }
  }
  is_stateful: true
}
op {
  name: "WriteSummary"
  input_arg {
    name: "writer"
    type: DT_RESOURCE
  }
  input_arg {
    name: "step"
    type: DT_INT64
  }
  input_arg {
    name: "tensor"
    type_attr: "T"
  }
  input_arg {
    name: "tag"
    type: DT_STRING
  }
  input_arg {
    name: "summary_metadata"
    type: DT_STRING
  }
  attr {
    name: "T"
    type: "type"
  }
  is_stateful: true
}
op {
  name: "Xdivy"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "XlaHostCompute"
  input_arg {
    name: "inputs"
    type_list_attr: "Tinputs"
  }
  output_arg {
    name: "outputs"
    type_list_attr: "Toutputs"
  }
  attr {
    name: "Tinputs"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "Toutputs"
    type: "list(type)"
    has_minimum: true
  }
  attr {
    name: "ancestors"
    type: "list(string)"
    has_minimum: true
  }
  attr {
    name: "shapes"
    type: "list(shape)"
    has_minimum: true
  }
  attr {
    name: "shape_inference_graph"
    type: "func"
  }
  attr {
    name: "key"
    type: "string"
  }
  attr {
    name: "cost_estimate_ns"
    type: "int"
    default_value {
      i: 1000000
    }
  }
  attr {
    name: "tpu_core"
    type: "int"
    default_value {
      i: 0
    }
  }
  is_stateful: true
}
op {
  name: "XlaRecvFromHost"
  output_arg {
    name: "output"
    type_attr: "Toutput"
  }
  attr {
    name: "Toutput"
    type: "type"
  }
  attr {
    name: "shape"
    type: "shape"
  }
  attr {
    name: "key"
    type: "string"
  }
  is_stateful: true
}
op {
  name: "XlaSendToHost"
  input_arg {
    name: "input"
    type_attr: "Tinput"
  }
  attr {
    name: "Tinput"
    type: "type"
  }
  attr {
    name: "key"
    type: "string"
  }
  is_stateful: true
}
op {
  name: "Xlog1py"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "Xlogy"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "y"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_HALF
        type: DT_FLOAT
        type: DT_DOUBLE
        type: DT_COMPLEX64
        type: DT_COMPLEX128
      }
    }
  }
}
op {
  name: "ZerosLike"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  output_arg {
    name: "y"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
op {
  name: "Zeta"
  input_arg {
    name: "x"
    type_attr: "T"
  }
  input_arg {
    name: "q"
    type_attr: "T"
  }
  output_arg {
    name: "z"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
    allowed_values {
      list {
        type: DT_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
op {
  name: "ZipDataset"
  input_arg {
    name: "input_datasets"
    type: DT_VARIANT
    number_attr: "N"
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  attr {
    name: "output_types"
    type: "list(type)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "output_shapes"
    type: "list(shape)"
    has_minimum: true
    minimum: 1
  }
  attr {
    name: "N"
    type: "int"
    has_minimum: true
    minimum: 1
  }
}
