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_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_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_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: DT_FLOAT
  }
  input_arg {
    name: "contrast_factor"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type: DT_FLOAT
  }
}
op {
  name: "AdjustHue"
  input_arg {
    name: "images"
    type: DT_FLOAT
  }
  input_arg {
    name: "delta"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    type: DT_FLOAT
  }
}
op {
  name: "AdjustSaturation"
  input_arg {
    name: "images"
    type: DT_FLOAT
  }
  input_arg {
    name: "scale"
    type: DT_FLOAT
  }
  output_arg {
    name: "output"
    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: "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: "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: "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
    }
  }
}
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
    }
  }
}
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
      }
    }
  }
  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
      }
    }
  }
  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
      }
    }
  }
  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_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: "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_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: "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: "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: "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
  }
}
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: "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: "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: "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: "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: "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: "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: "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: "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: "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: "CTCBeamSearchDecoder"
  input_arg {
    name: "inputs"
    type: DT_FLOAT
  }
  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: DT_FLOAT
  }
  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
    }
  }
}
op {
  name: "CTCGreedyDecoder"
  input_arg {
    name: "inputs"
    type: DT_FLOAT
  }
  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: DT_FLOAT
  }
  attr {
    name: "merge_repeated"
    type: "bool"
    default_value {
      b: false
    }
  }
}
op {
  name: "CTCLoss"
  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: "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"
  }
}
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_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_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
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_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"
  }
  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_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"
  }
  is_stateful: true
}
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)"
  }
  is_stateful: 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: "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: "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: "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
      }
    }
  }
  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"
      }
    }
  }
  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"
      }
    }
  }
  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
      }
    }
  }
  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"
      }
    }
  }
  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"
    description: "Input tensor."
    type_attr: "T"
  }
  output_arg {
    name: "output"
    description: "Output tensor, deep-copied from input."
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "tensor_name"
    type: "string"
    default_value {
      s: ""
    }
    description: "The name of the input tensor."
  }
  attr {
    name: "debug_ops_spec"
    type: "list(string)"
    default_value {
      list {
      }
    }
    description: "A list of debug op spec (op, url, gated_grpc) for attached debug\nops. Each element of the list has the format\n<debug_op>;<grpc_url>;<gated_grpc>, wherein gated_grpc is boolean represented\nas 0/1. E.g., \"DebugIdentity;grpc://foo:3333;1\",\n\"DebugIdentity;file:///tmp/tfdbg_1;0\"."
  }
  summary: "Copy Op."
  description: "Performs CPU-to-CPU or GPU-to-GPU deep-copying of tensor, depending on the\ndevice on which the tensor is allocated.\nN.B.: If the all downstream attached debug ops are disabled given the current\ngRPC gating status, the output will simply forward the input tensor without\ndeep-copying. See the documentation of Debug* ops for more details.\n\nUnlike the CopyHost Op, this op does not have HostMemory constraint on its\ninput or output."
  allows_uninitialized_input: true
}
op {
  name: "CopyHost"
  input_arg {
    name: "input"
    description: "Input tensor."
    type_attr: "T"
  }
  output_arg {
    name: "output"
    description: "Output tensor, deep-copied from input."
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
  attr {
    name: "tensor_name"
    type: "string"
    default_value {
      s: ""
    }
    description: "The name of the input tensor."
  }
  attr {
    name: "debug_ops_spec"
    type: "list(string)"
    default_value {
      list {
      }
    }
    description: "A list of debug op spec (op, url, gated_grpc) for attached debug\nops. Each element of the list has the format\n<debug_op>;<grpc_url>;<gated_grpc>, wherein gated_grpc is boolean represented\nas 0/1. E.g., \"DebugIdentity;grpc://foo:3333;1\",\n\"DebugIdentity;file:///tmp/tfdbg_1;0\"."
  }
  summary: "Copy Host Op."
  description: "Performs CPU-to-CPU deep-copying of tensor.\nN.B.: If the all downstream attached debug ops are disabled given the current\ngRPC gating status, the output will simply forward the input tensor without\ndeep-copying. See the documentation of Debug* ops for more details.\n\nUnlike the Copy Op, this op has HostMemory constraint on its input or output."
  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: "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
    }
  }
  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: "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
    }
  }
}
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: "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: "is_training"
    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: "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: "DatasetToGraph"
  input_arg {
    name: "input_dataset"
    type: DT_VARIANT
  }
  output_arg {
    name: "graph"
    type: DT_STRING
  }
}
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
  }
}
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"
    description: "Input tensor, non-Reference type."
    type_attr: "T"
  }
  output_arg {
    name: "output"
    description: "Output tensor that equals the input tensor."
    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: ""
    }
    description: "Name of the input tensor."
  }
  attr {
    name: "debug_urls"
    type: "list(string)"
    default_value {
      list {
      }
    }
    description: "List of URLs to debug targets, e.g.,\nfile:///foo/tfdbg_dump, grpc:://localhost:11011"
  }
  attr {
    name: "gated_grpc"
    type: "bool"
    default_value {
      b: false
    }
    description: "Whether this op will be gated. If any of the debug_urls of this\ndebug node is of the grpc:// scheme, when the value of this attribute is set\nto True, the data will not actually be sent via the grpc stream unless this\ndebug op has been enabled at the debug_url. If all of the debug_urls of this\ndebug node are of the grpc:// scheme and the debug op is enabled at none of\nthem, the output will be an empty Tensor."
  }
  summary: "Debug Identity Op."
  description: "Provides an identity mapping of the non-Ref type input tensor for debugging."
  allows_uninitialized_input: true
}
op {
  name: "DebugNanCount"
  input_arg {
    name: "input"
    description: "Input tensor, non-Reference type."
    type_attr: "T"
  }
  output_arg {
    name: "output"
    description: "An integer output tensor that is the number of NaNs in the input."
    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: ""
    }
    description: "Name of the input tensor."
  }
  attr {
    name: "debug_urls"
    type: "list(string)"
    default_value {
      list {
      }
    }
    description: "List of URLs to debug targets, e.g.,\nfile:///foo/tfdbg_dump, grpc:://localhost:11011."
  }
  attr {
    name: "gated_grpc"
    type: "bool"
    default_value {
      b: false
    }
    description: "Whether this op will be gated. If any of the debug_urls of this\ndebug node is of the grpc:// scheme, when the value of this attribute is set\nto True, the data will not actually be sent via the grpc stream unless this\ndebug op has been enabled at the debug_url. If all of the debug_urls of this\ndebug node are of the grpc:// scheme and the debug op is enabled at none of\nthem, the output will be an empty Tensor."
  }
  summary: "Debug NaN Value Counter Op"
  description: "Counts number of NaNs in the input tensor, for debugging."
  allows_uninitialized_input: true
}
op {
  name: "DebugNumericSummary"
  input_arg {
    name: "input"
    description: "Input tensor, non-Reference type, float or double."
    type_attr: "T"
  }
  output_arg {
    name: "output"
    description: "A double tensor of shape [14 + nDimensions], where nDimensions is the\n  the number of dimensions of the tensor\'s shape. The elements of output are:\n  [0]: is initialized (1.0) or not (0.0).\n  [1]: total number of elements\n  [2]: NaN element count\n  [3]: generalized -inf count: elements <= lower_bound. lower_bound is -inf by\n    default.\n  [4]: negative element count (excluding -inf), if lower_bound is the default\n    -inf. Otherwise, this is the count of elements > lower_bound and < 0.\n  [5]: zero element count\n  [6]: positive element count (excluding +inf), if upper_bound is the default\n    -inf. Otherwise, this is the count of elements < upper_bound and > 0.\n  [7]: generalized +inf count, elements >= upper_bound. upper_bound is +inf by\n    default.\nOutput elements [1:8] are all zero, if the tensor is uninitialized.\n  [8]: minimum of all non-inf and non-NaN elements.\n       If uninitialized or no such element exists: +inf.\n  [9]: maximum of all non-inf and non-NaN elements.\n       If uninitialized or no such element exists: -inf.\n  [10]: mean of all non-inf and non-NaN elements.\n        If uninitialized or no such element exists: NaN.\n  [11]: variance of all non-inf and non-NaN elements.\n        If uninitialized or no such element exists: NaN.\n  [12]: Data type of the tensor encoded as an enum integer. See the DataType\n        proto for more details.\n  [13]: Number of dimensions of the tensor (ndims).\n  [14+]: Sizes of the dimensions."
    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: ""
    }
    description: "Name of the input tensor."
  }
  attr {
    name: "debug_urls"
    type: "list(string)"
    default_value {
      list {
      }
    }
    description: "List of URLs to debug targets, e.g.,\nfile:///foo/tfdbg_dump, grpc:://localhost:11011"
  }
  attr {
    name: "lower_bound"
    type: "float"
    default_value {
      f: -inf
    }
    description: "(float) The lower bound <= which values will be included in the\ngeneralized -inf count. Default: -inf."
  }
  attr {
    name: "upper_bound"
    type: "float"
    default_value {
      f: inf
    }
    description: "(float) The upper bound >= which values will be included in the\ngeneralized +inf count. Default: +inf."
  }
  attr {
    name: "mute_if_healthy"
    type: "bool"
    default_value {
      b: false
    }
    description: "(bool) Do not send data to the debug URLs unless at least one\nof elements [2], [3] and [7] (i.e., the nan count and the generalized -inf and\ninf counts) is non-zero."
  }
  attr {
    name: "gated_grpc"
    type: "bool"
    default_value {
      b: false
    }
    description: "Whether this op will be gated. If any of the debug_urls of this\ndebug node is of the grpc:// scheme, when the value of this attribute is set\nto True, the data will not actually be sent via the grpc stream unless this\ndebug op has been enabled at the debug_url. If all of the debug_urls of this\ndebug node are of the grpc:// scheme and the debug op is enabled at none of\nthem, the output will be an empty Tensor."
  }
  summary: "Debug Numeric Summary Op."
  description: "Provide a basic summary of numeric value types, range and distribution."
  allows_uninitialized_input: true
}
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: "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: "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
      }
    }
  }
  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: "DeleteSessionTensor"
  input_arg {
    name: "handle"
    type: DT_STRING
  }
  is_stateful: true
}
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: "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"
      }
    }
  }
  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"
      }
    }
  }
  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"
      }
    }
  }
  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: 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"
      }
    }
  }
}
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: "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: "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_FLOAT
        type: DT_DOUBLE
      }
    }
  }
}
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: "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: "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: "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: "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: "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: "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"
    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_QUINT8
        type: DT_QINT8
        type: DT_QINT32
        type: DT_STRING
        type: DT_BOOL
        type: DT_COMPLEX128
      }
    }
  }
  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: "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: "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: "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
  }
}
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: "ExperimentalIdentityIndexedDataset"
  input_arg {
    name: "size"
    type: DT_UINT64
  }
  output_arg {
    name: "handle"
    type: DT_VARIANT
  }
  is_stateful: true
}
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
  }
}
op {
  name: "ExperimentalIndexedDatasetGet"
  input_arg {
    name: "materialized"
    type: DT_RESOURCE
  }
  input_arg {
    name: "index"
    type: DT_UINT64
  }
  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: "ExperimentalIndexedDatasetMaterialize"
  input_arg {
    name: "dataset"
    type: DT_VARIANT
  }
  input_arg {
    name: "materialized"
    type: DT_RESOURCE
  }
  is_stateful: true
}
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: "ExperimentalMaterializedIndexDatasetHandle"
  output_arg {
    name: "handle"
    type: DT_RESOURCE
  }
  attr {
    name: "container"
    type: "string"
  }
  attr {
    name: "shared_name"
    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: "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: "ExperimentalNumaMapAndBatchDataset"
  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: "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: "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: "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: "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
    }
  }
}
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_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: "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: "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_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: "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: "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: "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: "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: "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: "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: "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: "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: "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: DT_COMPLEX64
  }
  input_arg {
    name: "fft_length"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type: DT_FLOAT
  }
}
op {
  name: "IRFFT2D"
  input_arg {
    name: "input"
    type: DT_COMPLEX64
  }
  input_arg {
    name: "fft_length"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type: DT_FLOAT
  }
}
op {
  name: "IRFFT3D"
  input_arg {
    name: "input"
    type: DT_COMPLEX64
  }
  input_arg {
    name: "fft_length"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type: DT_FLOAT
  }
}
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"
    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 {
      }
    }
  }
  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: "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: "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: "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: "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_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: "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: "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: "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: "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: "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
      }
    }
  }
  is_commutative: true
}
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_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: "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_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_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: "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"
  }
}
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: "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_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: "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_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_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: "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_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_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_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_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_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: "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"
      }
    }
  }
  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"
      }
    }
  }
  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: "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: "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: "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_INT32
        type: DT_INT64
      }
    }
  }
  is_commutative: true
}
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_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: "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_INT32
        type: DT_INT64
      }
    }
  }
  is_commutative: true
}
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: "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: "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: "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: "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_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: "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: "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: DT_FLOAT
  }
  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
      }
    }
  }
}
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: DT_FLOAT
  }
  input_arg {
    name: "score_threshold"
    type: DT_FLOAT
  }
  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
      }
    }
  }
}
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: DT_FLOAT
  }
  input_arg {
    name: "score_threshold"
    type: DT_FLOAT
  }
  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: "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: "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"
    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_QUINT8
        type: DT_QINT8
        type: DT_QINT32
        type: DT_STRING
        type: DT_BOOL
        type: DT_COMPLEX128
      }
    }
  }
  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
  }
}
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: "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: "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: "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: "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: "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: "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: "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
  }
}
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"
    }
  }
  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: "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_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"
      }
    }
  }
}
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
      }
    }
  }
}
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"
      }
    }
  }
}
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
      }
    }
  }
  is_commutative: true
}
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: "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: "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
      }
    }
  }
  is_commutative: true
}
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
    }
  }
}
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: DT_FLOAT
  }
  input_arg {
    name: "fft_length"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type: DT_COMPLEX64
  }
}
op {
  name: "RFFT2D"
  input_arg {
    name: "input"
    type: DT_FLOAT
  }
  input_arg {
    name: "fft_length"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type: DT_COMPLEX64
  }
}
op {
  name: "RFFT3D"
  input_arg {
    name: "input"
    type: DT_FLOAT
  }
  input_arg {
    name: "fft_length"
    type: DT_INT32
  }
  output_arg {
    name: "output"
    type: DT_COMPLEX64
  }
}
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: "RaggedGather"
  input_arg {
    name: "params_nested_splits"
    type: DT_INT64
    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: DT_INT64
    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: "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: DT_INT64
  }
  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
      }
    }
  }
}
op {
  name: "RaggedTensorToSparse"
  input_arg {
    name: "rt_nested_splits"
    type: DT_INT64
    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"
  }
}
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: "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_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: "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_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: "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
    }
  }
}
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: "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: "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: "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
      }
    }
  }
  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
      }
    }
  }
  attr {
    name: "align_corners"
    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
    }
  }
}
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
      }
    }
  }
  attr {
    name: "align_corners"
    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
    }
  }
}
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
      }
    }
  }
  attr {
    name: "align_corners"
    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
    }
  }
}
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: "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
    }
  }
  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
    }
  }
  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: "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: "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: "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: "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: "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
    }
  }
  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
    }
  }
  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: "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
      }
    }
  }
  is_commutative: true
}
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: "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_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: "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: "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"
    }
  }
}
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"
    }
  }
}
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: "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: "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
      }
    }
  }
  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_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: "SerializeIterator"
  input_arg {
    name: "resource_handle"
    type: DT_RESOURCE
  }
  output_arg {
    name: "serialized"
    type: DT_VARIANT
  }
  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: "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: "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
  }
}
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: "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: "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: "Snapshot"
  input_arg {
    name: "input"
    type_attr: "T"
  }
  output_arg {
    name: "output"
    type_attr: "T"
  }
  attr {
    name: "T"
    type: "type"
  }
}
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: "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
    }
  }
}
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
    }
  }
}
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: "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: "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: "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: "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: 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
      }
    }
  }
}
op {
  name: "SparseSegmentMeanGrad"
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tidx"
  }
  input_arg {
    name: "segment_ids"
    type: DT_INT32
  }
  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
      }
    }
  }
}
op {
  name: "SparseSegmentMeanWithNumSegments"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tidx"
  }
  input_arg {
    name: "segment_ids"
    type: DT_INT32
  }
  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
      }
    }
  }
  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
      }
    }
  }
}
op {
  name: "SparseSegmentSqrtN"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tidx"
  }
  input_arg {
    name: "segment_ids"
    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
      }
    }
  }
}
op {
  name: "SparseSegmentSqrtNGrad"
  input_arg {
    name: "grad"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tidx"
  }
  input_arg {
    name: "segment_ids"
    type: DT_INT32
  }
  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
      }
    }
  }
}
op {
  name: "SparseSegmentSqrtNWithNumSegments"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tidx"
  }
  input_arg {
    name: "segment_ids"
    type: DT_INT32
  }
  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
      }
    }
  }
  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
      }
    }
  }
}
op {
  name: "SparseSegmentSum"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tidx"
  }
  input_arg {
    name: "segment_ids"
    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_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
      }
    }
  }
}
op {
  name: "SparseSegmentSumWithNumSegments"
  input_arg {
    name: "data"
    type_attr: "T"
  }
  input_arg {
    name: "indices"
    type_attr: "Tidx"
  }
  input_arg {
    name: "segment_ids"
    type: DT_INT32
  }
  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
      }
    }
  }
}
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: "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: "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: "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_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: "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"
  }
}
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: "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: "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: "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: "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: "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"
  }
}
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: "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: "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: "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
      }
    }
  }
}
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_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: "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: "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_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"
  }
}
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: "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
  }
  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
  }
  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
  }
  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: "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: "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
  }
  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: "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: "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: "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: "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: "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: "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: "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: "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: "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: "UnicodeDecode"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  output_arg {
    name: "row_splits"
    type: DT_INT64
  }
  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
    }
  }
}
op {
  name: "UnicodeDecodeWithOffsets"
  input_arg {
    name: "input"
    type: DT_STRING
  }
  output_arg {
    name: "row_splits"
    type: DT_INT64
  }
  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
    }
  }
}
op {
  name: "UnicodeEncode"
  input_arg {
    name: "input_values"
    type: DT_INT32
  }
  input_arg {
    name: "input_splits"
    type: DT_INT64
  }
  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
    }
  }
}
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: "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: "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"
  }
  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 {
      }
    }
  }
  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: "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
  }
}
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: "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: "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
  }
}