// Generated by the protocol buffer compiler.  DO NOT EDIT!
// NO CHECKED-IN PROTOBUF GENCODE
// source: Problem.proto
// Protobuf C++ Version: 6.33.5

#ifndef Problem_2eproto_2epb_2eh
#define Problem_2eproto_2epb_2eh

#include <limits>
#include <string>
#include <type_traits>
#include <utility>

#include "google/protobuf/runtime_version.h"
#if PROTOBUF_VERSION != 6033005
#error "Protobuf C++ gencode is built with an incompatible version of"
#error "Protobuf C++ headers/runtime. See"
#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
#endif
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
#include "google/protobuf/arenastring.h"
#include "google/protobuf/generated_message_bases.h"
#include "google/protobuf/generated_message_tctable_decl.h"
#include "google/protobuf/generated_message_util.h"
#include "google/protobuf/metadata_lite.h"
#include "google/protobuf/generated_message_reflection.h"
#include "google/protobuf/message.h"
#include "google/protobuf/message_lite.h"
#include "google/protobuf/repeated_field.h"  // IWYU pragma: export
#include "google/protobuf/extension_set.h"  // IWYU pragma: export
#include "google/protobuf/unknown_field_set.h"
#include "Map.pb.h"
// @@protoc_insertion_point(includes)

// Must be included last.
#include "google/protobuf/port_def.inc"

#define PROTOBUF_INTERNAL_EXPORT_Problem_2eproto

namespace google {
namespace protobuf {
namespace internal {
template <typename T>
::absl::string_view GetAnyMessageName();
}  // namespace internal
}  // namespace protobuf
}  // namespace google

// Internal implementation detail -- do not use these members.
struct TableStruct_Problem_2eproto {
  static const ::uint32_t offsets[];
};
extern "C" {
extern const ::google::protobuf::internal::DescriptorTable descriptor_table_Problem_2eproto;
}  // extern "C"
namespace mojo {
namespace spec {
class BinomialProblemDetail;
struct BinomialProblemDetailDefaultTypeInternal;
extern BinomialProblemDetailDefaultTypeInternal _BinomialProblemDetail_default_instance_;
extern const ::google::protobuf::internal::ClassDataFull BinomialProblemDetail_class_data_;
class MultinomialProblemDetail;
struct MultinomialProblemDetailDefaultTypeInternal;
extern MultinomialProblemDetailDefaultTypeInternal _MultinomialProblemDetail_default_instance_;
extern const ::google::protobuf::internal::ClassDataFull MultinomialProblemDetail_class_data_;
class PredictionInterval;
struct PredictionIntervalDefaultTypeInternal;
extern PredictionIntervalDefaultTypeInternal _PredictionInterval_default_instance_;
extern const ::google::protobuf::internal::ClassDataFull PredictionInterval_class_data_;
class Problem;
struct ProblemDefaultTypeInternal;
extern ProblemDefaultTypeInternal _Problem_default_instance_;
extern const ::google::protobuf::internal::ClassDataFull Problem_class_data_;
class RegressionProblemDetail;
struct RegressionProblemDetailDefaultTypeInternal;
extern RegressionProblemDetailDefaultTypeInternal _RegressionProblemDetail_default_instance_;
extern const ::google::protobuf::internal::ClassDataFull RegressionProblemDetail_class_data_;
class SupervisedProblemDetail;
struct SupervisedProblemDetailDefaultTypeInternal;
extern SupervisedProblemDetailDefaultTypeInternal _SupervisedProblemDetail_default_instance_;
extern const ::google::protobuf::internal::ClassDataFull SupervisedProblemDetail_class_data_;
class Target;
struct TargetDefaultTypeInternal;
extern TargetDefaultTypeInternal _Target_default_instance_;
extern const ::google::protobuf::internal::ClassDataFull Target_class_data_;
class UnsupervisedProblemDetail;
struct UnsupervisedProblemDetailDefaultTypeInternal;
extern UnsupervisedProblemDetailDefaultTypeInternal _UnsupervisedProblemDetail_default_instance_;
extern const ::google::protobuf::internal::ClassDataFull UnsupervisedProblemDetail_class_data_;
}  // namespace spec
}  // namespace mojo
namespace google {
namespace protobuf {
}  // namespace protobuf
}  // namespace google

namespace mojo {
namespace spec {

// ===================================================================


// -------------------------------------------------------------------

class UnsupervisedProblemDetail final : public ::google::protobuf::internal::ZeroFieldsBase
/* @@protoc_insertion_point(class_definition:mojo.spec.UnsupervisedProblemDetail) */ {
 public:
  inline UnsupervisedProblemDetail() : UnsupervisedProblemDetail(nullptr) {}

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(UnsupervisedProblemDetail* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(UnsupervisedProblemDetail));
  }
#endif

  template <typename = void>
  explicit PROTOBUF_CONSTEXPR UnsupervisedProblemDetail(::google::protobuf::internal::ConstantInitialized);

  inline UnsupervisedProblemDetail(const UnsupervisedProblemDetail& from) : UnsupervisedProblemDetail(nullptr, from) {}
  inline UnsupervisedProblemDetail(UnsupervisedProblemDetail&& from) noexcept
      : UnsupervisedProblemDetail(nullptr, ::std::move(from)) {}
  inline UnsupervisedProblemDetail& operator=(const UnsupervisedProblemDetail& from) {
    CopyFrom(from);
    return *this;
  }
  inline UnsupervisedProblemDetail& operator=(UnsupervisedProblemDetail&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const UnsupervisedProblemDetail& default_instance() {
    return *reinterpret_cast<const UnsupervisedProblemDetail*>(
        &_UnsupervisedProblemDetail_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 6;
  friend void swap(UnsupervisedProblemDetail& a, UnsupervisedProblemDetail& b) { a.Swap(&b); }
  inline void Swap(UnsupervisedProblemDetail* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(UnsupervisedProblemDetail* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  UnsupervisedProblemDetail* PROTOBUF_NONNULL New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::internal::ZeroFieldsBase::DefaultConstruct<UnsupervisedProblemDetail>(arena);
  }
  using ::google::protobuf::internal::ZeroFieldsBase::CopyFrom;
  inline void CopyFrom(const UnsupervisedProblemDetail& from) {
    ::google::protobuf::internal::ZeroFieldsBase::CopyImpl(*this, from);
  }
  using ::google::protobuf::internal::ZeroFieldsBase::MergeFrom;
  void MergeFrom(const UnsupervisedProblemDetail& from) {
    ::google::protobuf::internal::ZeroFieldsBase::MergeImpl(*this, from);
  }

  public:
  bool IsInitialized() const {
    return true;
  }
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "mojo.spec.UnsupervisedProblemDetail"; }

  explicit UnsupervisedProblemDetail(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  UnsupervisedProblemDetail(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const UnsupervisedProblemDetail& from);
  UnsupervisedProblemDetail(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, UnsupervisedProblemDetail&& from) noexcept
      : UnsupervisedProblemDetail(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_();

  ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  // @@protoc_insertion_point(class_scope:mojo.spec.UnsupervisedProblemDetail)
 private:
  class _Internal;
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<0, 0,
                                   0, 0,
                                   2>
      _table_;

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  friend struct ::TableStruct_Problem_2eproto;
};

extern const ::google::protobuf::internal::ClassDataFull UnsupervisedProblemDetail_class_data_;
// -------------------------------------------------------------------

class Target final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:mojo.spec.Target) */ {
 public:
  inline Target() : Target(nullptr) {}
  ~Target() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(Target* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(Target));
  }
#endif

  template <typename = void>
  explicit PROTOBUF_CONSTEXPR Target(::google::protobuf::internal::ConstantInitialized);

  inline Target(const Target& from) : Target(nullptr, from) {}
  inline Target(Target&& from) noexcept
      : Target(nullptr, ::std::move(from)) {}
  inline Target& operator=(const Target& from) {
    CopyFrom(from);
    return *this;
  }
  inline Target& operator=(Target&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Target& default_instance() {
    return *reinterpret_cast<const Target*>(
        &_Target_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 7;
  friend void swap(Target& a, Target& b) { a.Swap(&b); }
  inline void Swap(Target* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Target* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Target* PROTOBUF_NONNULL New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<Target>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const Target& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const Target& from) { Target::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(Target* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "mojo.spec.Target"; }

  explicit Target(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  Target(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Target& from);
  Target(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, Target&& from) noexcept
      : Target(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_();

  ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kLabelsFieldNumber = 2,
    kNameFieldNumber = 1,
  };
  // repeated string labels = 2;
  int labels_size() const;
  private:
  int _internal_labels_size() const;

  public:
  void clear_labels() ;
  const ::std::string& labels(int index) const;
  ::std::string* PROTOBUF_NONNULL mutable_labels(int index);
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_labels(int index, Arg_&& value, Args_... args);
  ::std::string* PROTOBUF_NONNULL add_labels();
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void add_labels(Arg_&& value, Args_... args);
  const ::google::protobuf::RepeatedPtrField<::std::string>& labels() const;
  ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL mutable_labels();

  private:
  const ::google::protobuf::RepeatedPtrField<::std::string>& _internal_labels() const;
  ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL _internal_mutable_labels();

  public:
  // string name = 1;
  void clear_name() ;
  const ::std::string& name() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_name(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_name();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_name();
  void set_allocated_name(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_name() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_name(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_name();

  public:
  // @@protoc_insertion_point(class_scope:mojo.spec.Target)
 private:
  class _Internal;
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<1, 2,
                                   0, 35,
                                   2>
      _table_;

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const Target& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedPtrField<::std::string> labels_;
    ::google::protobuf::internal::ArenaStringPtr name_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_Problem_2eproto;
};

extern const ::google::protobuf::internal::ClassDataFull Target_class_data_;
// -------------------------------------------------------------------

class MultinomialProblemDetail final : public ::google::protobuf::internal::ZeroFieldsBase
/* @@protoc_insertion_point(class_definition:mojo.spec.MultinomialProblemDetail) */ {
 public:
  inline MultinomialProblemDetail() : MultinomialProblemDetail(nullptr) {}

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(MultinomialProblemDetail* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(MultinomialProblemDetail));
  }
#endif

  template <typename = void>
  explicit PROTOBUF_CONSTEXPR MultinomialProblemDetail(::google::protobuf::internal::ConstantInitialized);

  inline MultinomialProblemDetail(const MultinomialProblemDetail& from) : MultinomialProblemDetail(nullptr, from) {}
  inline MultinomialProblemDetail(MultinomialProblemDetail&& from) noexcept
      : MultinomialProblemDetail(nullptr, ::std::move(from)) {}
  inline MultinomialProblemDetail& operator=(const MultinomialProblemDetail& from) {
    CopyFrom(from);
    return *this;
  }
  inline MultinomialProblemDetail& operator=(MultinomialProblemDetail&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const MultinomialProblemDetail& default_instance() {
    return *reinterpret_cast<const MultinomialProblemDetail*>(
        &_MultinomialProblemDetail_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 5;
  friend void swap(MultinomialProblemDetail& a, MultinomialProblemDetail& b) { a.Swap(&b); }
  inline void Swap(MultinomialProblemDetail* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(MultinomialProblemDetail* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  MultinomialProblemDetail* PROTOBUF_NONNULL New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::internal::ZeroFieldsBase::DefaultConstruct<MultinomialProblemDetail>(arena);
  }
  using ::google::protobuf::internal::ZeroFieldsBase::CopyFrom;
  inline void CopyFrom(const MultinomialProblemDetail& from) {
    ::google::protobuf::internal::ZeroFieldsBase::CopyImpl(*this, from);
  }
  using ::google::protobuf::internal::ZeroFieldsBase::MergeFrom;
  void MergeFrom(const MultinomialProblemDetail& from) {
    ::google::protobuf::internal::ZeroFieldsBase::MergeImpl(*this, from);
  }

  public:
  bool IsInitialized() const {
    return true;
  }
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "mojo.spec.MultinomialProblemDetail"; }

  explicit MultinomialProblemDetail(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  MultinomialProblemDetail(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const MultinomialProblemDetail& from);
  MultinomialProblemDetail(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, MultinomialProblemDetail&& from) noexcept
      : MultinomialProblemDetail(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_();

  ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  // @@protoc_insertion_point(class_scope:mojo.spec.MultinomialProblemDetail)
 private:
  class _Internal;
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<0, 0,
                                   0, 0,
                                   2>
      _table_;

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  friend struct ::TableStruct_Problem_2eproto;
};

extern const ::google::protobuf::internal::ClassDataFull MultinomialProblemDetail_class_data_;
// -------------------------------------------------------------------

class BinomialProblemDetail final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:mojo.spec.BinomialProblemDetail) */ {
 public:
  inline BinomialProblemDetail() : BinomialProblemDetail(nullptr) {}
  ~BinomialProblemDetail() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(BinomialProblemDetail* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(BinomialProblemDetail));
  }
#endif

  template <typename = void>
  explicit PROTOBUF_CONSTEXPR BinomialProblemDetail(::google::protobuf::internal::ConstantInitialized);

  inline BinomialProblemDetail(const BinomialProblemDetail& from) : BinomialProblemDetail(nullptr, from) {}
  inline BinomialProblemDetail(BinomialProblemDetail&& from) noexcept
      : BinomialProblemDetail(nullptr, ::std::move(from)) {}
  inline BinomialProblemDetail& operator=(const BinomialProblemDetail& from) {
    CopyFrom(from);
    return *this;
  }
  inline BinomialProblemDetail& operator=(BinomialProblemDetail&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const BinomialProblemDetail& default_instance() {
    return *reinterpret_cast<const BinomialProblemDetail*>(
        &_BinomialProblemDetail_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 4;
  friend void swap(BinomialProblemDetail& a, BinomialProblemDetail& b) { a.Swap(&b); }
  inline void Swap(BinomialProblemDetail* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(BinomialProblemDetail* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  BinomialProblemDetail* PROTOBUF_NONNULL New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<BinomialProblemDetail>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const BinomialProblemDetail& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const BinomialProblemDetail& from) { BinomialProblemDetail::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(BinomialProblemDetail* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "mojo.spec.BinomialProblemDetail"; }

  explicit BinomialProblemDetail(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  BinomialProblemDetail(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const BinomialProblemDetail& from);
  BinomialProblemDetail(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, BinomialProblemDetail&& from) noexcept
      : BinomialProblemDetail(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_();

  ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kDefaultThresholdFieldNumber = 1,
  };
  // double default_threshold = 1;
  void clear_default_threshold() ;
  double default_threshold() const;
  void set_default_threshold(double value);

  private:
  double _internal_default_threshold() const;
  void _internal_set_default_threshold(double value);

  public:
  // @@protoc_insertion_point(class_scope:mojo.spec.BinomialProblemDetail)
 private:
  class _Internal;
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<0, 1,
                                   0, 0,
                                   2>
      _table_;

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const BinomialProblemDetail& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    double default_threshold_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_Problem_2eproto;
};

extern const ::google::protobuf::internal::ClassDataFull BinomialProblemDetail_class_data_;
// -------------------------------------------------------------------

class PredictionInterval final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:mojo.spec.PredictionInterval) */ {
 public:
  inline PredictionInterval() : PredictionInterval(nullptr) {}
  ~PredictionInterval() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(PredictionInterval* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(PredictionInterval));
  }
#endif

  template <typename = void>
  explicit PROTOBUF_CONSTEXPR PredictionInterval(::google::protobuf::internal::ConstantInitialized);

  inline PredictionInterval(const PredictionInterval& from) : PredictionInterval(nullptr, from) {}
  inline PredictionInterval(PredictionInterval&& from) noexcept
      : PredictionInterval(nullptr, ::std::move(from)) {}
  inline PredictionInterval& operator=(const PredictionInterval& from) {
    CopyFrom(from);
    return *this;
  }
  inline PredictionInterval& operator=(PredictionInterval&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const PredictionInterval& default_instance() {
    return *reinterpret_cast<const PredictionInterval*>(
        &_PredictionInterval_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 2;
  friend void swap(PredictionInterval& a, PredictionInterval& b) { a.Swap(&b); }
  inline void Swap(PredictionInterval* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(PredictionInterval* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  PredictionInterval* PROTOBUF_NONNULL New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<PredictionInterval>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const PredictionInterval& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const PredictionInterval& from) { PredictionInterval::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(PredictionInterval* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "mojo.spec.PredictionInterval"; }

  explicit PredictionInterval(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  PredictionInterval(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const PredictionInterval& from);
  PredictionInterval(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, PredictionInterval&& from) noexcept
      : PredictionInterval(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_();

  ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kTgcFieldNumber = 1,
    kBoundsByTgcFieldNumber = 2,
  };
  // repeated string tgc = 1;
  int tgc_size() const;
  private:
  int _internal_tgc_size() const;

  public:
  void clear_tgc() ;
  const ::std::string& tgc(int index) const;
  ::std::string* PROTOBUF_NONNULL mutable_tgc(int index);
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_tgc(int index, Arg_&& value, Args_... args);
  ::std::string* PROTOBUF_NONNULL add_tgc();
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void add_tgc(Arg_&& value, Args_... args);
  const ::google::protobuf::RepeatedPtrField<::std::string>& tgc() const;
  ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL mutable_tgc();

  private:
  const ::google::protobuf::RepeatedPtrField<::std::string>& _internal_tgc() const;
  ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL _internal_mutable_tgc();

  public:
  // .mojo.spec.MapOp bounds_by_tgc = 2;
  bool has_bounds_by_tgc() const;
  void clear_bounds_by_tgc() ;
  const ::mojo::spec::MapOp& bounds_by_tgc() const;
  [[nodiscard]] ::mojo::spec::MapOp* PROTOBUF_NULLABLE release_bounds_by_tgc();
  ::mojo::spec::MapOp* PROTOBUF_NONNULL mutable_bounds_by_tgc();
  void set_allocated_bounds_by_tgc(::mojo::spec::MapOp* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_bounds_by_tgc(::mojo::spec::MapOp* PROTOBUF_NULLABLE value);
  ::mojo::spec::MapOp* PROTOBUF_NULLABLE unsafe_arena_release_bounds_by_tgc();

  private:
  const ::mojo::spec::MapOp& _internal_bounds_by_tgc() const;
  ::mojo::spec::MapOp* PROTOBUF_NONNULL _internal_mutable_bounds_by_tgc();

  public:
  // @@protoc_insertion_point(class_scope:mojo.spec.PredictionInterval)
 private:
  class _Internal;
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<1, 2,
                                   1, 40,
                                   2>
      _table_;

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const PredictionInterval& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedPtrField<::std::string> tgc_;
    ::mojo::spec::MapOp* PROTOBUF_NULLABLE bounds_by_tgc_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_Problem_2eproto;
};

extern const ::google::protobuf::internal::ClassDataFull PredictionInterval_class_data_;
// -------------------------------------------------------------------

class RegressionProblemDetail final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:mojo.spec.RegressionProblemDetail) */ {
 public:
  inline RegressionProblemDetail() : RegressionProblemDetail(nullptr) {}
  ~RegressionProblemDetail() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(RegressionProblemDetail* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(RegressionProblemDetail));
  }
#endif

  template <typename = void>
  explicit PROTOBUF_CONSTEXPR RegressionProblemDetail(::google::protobuf::internal::ConstantInitialized);

  inline RegressionProblemDetail(const RegressionProblemDetail& from) : RegressionProblemDetail(nullptr, from) {}
  inline RegressionProblemDetail(RegressionProblemDetail&& from) noexcept
      : RegressionProblemDetail(nullptr, ::std::move(from)) {}
  inline RegressionProblemDetail& operator=(const RegressionProblemDetail& from) {
    CopyFrom(from);
    return *this;
  }
  inline RegressionProblemDetail& operator=(RegressionProblemDetail&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const RegressionProblemDetail& default_instance() {
    return *reinterpret_cast<const RegressionProblemDetail*>(
        &_RegressionProblemDetail_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 3;
  friend void swap(RegressionProblemDetail& a, RegressionProblemDetail& b) { a.Swap(&b); }
  inline void Swap(RegressionProblemDetail* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(RegressionProblemDetail* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  RegressionProblemDetail* PROTOBUF_NONNULL New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<RegressionProblemDetail>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const RegressionProblemDetail& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const RegressionProblemDetail& from) { RegressionProblemDetail::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(RegressionProblemDetail* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "mojo.spec.RegressionProblemDetail"; }

  explicit RegressionProblemDetail(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  RegressionProblemDetail(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const RegressionProblemDetail& from);
  RegressionProblemDetail(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, RegressionProblemDetail&& from) noexcept
      : RegressionProblemDetail(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_();

  ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kPredictionIntervalFieldNumber = 1,
  };
  // .mojo.spec.PredictionInterval prediction_interval = 1;
  bool has_prediction_interval() const;
  void clear_prediction_interval() ;
  const ::mojo::spec::PredictionInterval& prediction_interval() const;
  [[nodiscard]] ::mojo::spec::PredictionInterval* PROTOBUF_NULLABLE release_prediction_interval();
  ::mojo::spec::PredictionInterval* PROTOBUF_NONNULL mutable_prediction_interval();
  void set_allocated_prediction_interval(::mojo::spec::PredictionInterval* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_prediction_interval(::mojo::spec::PredictionInterval* PROTOBUF_NULLABLE value);
  ::mojo::spec::PredictionInterval* PROTOBUF_NULLABLE unsafe_arena_release_prediction_interval();

  private:
  const ::mojo::spec::PredictionInterval& _internal_prediction_interval() const;
  ::mojo::spec::PredictionInterval* PROTOBUF_NONNULL _internal_mutable_prediction_interval();

  public:
  // @@protoc_insertion_point(class_scope:mojo.spec.RegressionProblemDetail)
 private:
  class _Internal;
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<0, 1,
                                   1, 0,
                                   2>
      _table_;

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const RegressionProblemDetail& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::mojo::spec::PredictionInterval* PROTOBUF_NULLABLE prediction_interval_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_Problem_2eproto;
};

extern const ::google::protobuf::internal::ClassDataFull RegressionProblemDetail_class_data_;
// -------------------------------------------------------------------

class SupervisedProblemDetail final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:mojo.spec.SupervisedProblemDetail) */ {
 public:
  inline SupervisedProblemDetail() : SupervisedProblemDetail(nullptr) {}
  ~SupervisedProblemDetail() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(SupervisedProblemDetail* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(SupervisedProblemDetail));
  }
#endif

  template <typename = void>
  explicit PROTOBUF_CONSTEXPR SupervisedProblemDetail(::google::protobuf::internal::ConstantInitialized);

  inline SupervisedProblemDetail(const SupervisedProblemDetail& from) : SupervisedProblemDetail(nullptr, from) {}
  inline SupervisedProblemDetail(SupervisedProblemDetail&& from) noexcept
      : SupervisedProblemDetail(nullptr, ::std::move(from)) {}
  inline SupervisedProblemDetail& operator=(const SupervisedProblemDetail& from) {
    CopyFrom(from);
    return *this;
  }
  inline SupervisedProblemDetail& operator=(SupervisedProblemDetail&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const SupervisedProblemDetail& default_instance() {
    return *reinterpret_cast<const SupervisedProblemDetail*>(
        &_SupervisedProblemDetail_default_instance_);
  }
  enum ProblemFamilyCase {
    kRegressionProblemDetail = 2,
    kBinomialProblemDetail = 3,
    kMultinomialProblemDetail = 4,
    PROBLEM_FAMILY_NOT_SET = 0,
  };
  static constexpr int kIndexInFileMessages = 1;
  friend void swap(SupervisedProblemDetail& a, SupervisedProblemDetail& b) { a.Swap(&b); }
  inline void Swap(SupervisedProblemDetail* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SupervisedProblemDetail* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  SupervisedProblemDetail* PROTOBUF_NONNULL New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<SupervisedProblemDetail>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const SupervisedProblemDetail& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const SupervisedProblemDetail& from) { SupervisedProblemDetail::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(SupervisedProblemDetail* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "mojo.spec.SupervisedProblemDetail"; }

  explicit SupervisedProblemDetail(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  SupervisedProblemDetail(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const SupervisedProblemDetail& from);
  SupervisedProblemDetail(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, SupervisedProblemDetail&& from) noexcept
      : SupervisedProblemDetail(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_();

  ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kTargetFieldNumber = 1,
    kRegressionProblemDetailFieldNumber = 2,
    kBinomialProblemDetailFieldNumber = 3,
    kMultinomialProblemDetailFieldNumber = 4,
  };
  // .mojo.spec.Target target = 1;
  bool has_target() const;
  void clear_target() ;
  const ::mojo::spec::Target& target() const;
  [[nodiscard]] ::mojo::spec::Target* PROTOBUF_NULLABLE release_target();
  ::mojo::spec::Target* PROTOBUF_NONNULL mutable_target();
  void set_allocated_target(::mojo::spec::Target* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_target(::mojo::spec::Target* PROTOBUF_NULLABLE value);
  ::mojo::spec::Target* PROTOBUF_NULLABLE unsafe_arena_release_target();

  private:
  const ::mojo::spec::Target& _internal_target() const;
  ::mojo::spec::Target* PROTOBUF_NONNULL _internal_mutable_target();

  public:
  // .mojo.spec.RegressionProblemDetail regression_problem_detail = 2;
  bool has_regression_problem_detail() const;
  private:
  bool _internal_has_regression_problem_detail() const;

  public:
  void clear_regression_problem_detail() ;
  const ::mojo::spec::RegressionProblemDetail& regression_problem_detail() const;
  [[nodiscard]] ::mojo::spec::RegressionProblemDetail* PROTOBUF_NULLABLE release_regression_problem_detail();
  ::mojo::spec::RegressionProblemDetail* PROTOBUF_NONNULL mutable_regression_problem_detail();
  void set_allocated_regression_problem_detail(::mojo::spec::RegressionProblemDetail* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_regression_problem_detail(::mojo::spec::RegressionProblemDetail* PROTOBUF_NULLABLE value);
  ::mojo::spec::RegressionProblemDetail* PROTOBUF_NULLABLE unsafe_arena_release_regression_problem_detail();

  private:
  const ::mojo::spec::RegressionProblemDetail& _internal_regression_problem_detail() const;
  ::mojo::spec::RegressionProblemDetail* PROTOBUF_NONNULL _internal_mutable_regression_problem_detail();

  public:
  // .mojo.spec.BinomialProblemDetail binomial_problem_detail = 3;
  bool has_binomial_problem_detail() const;
  private:
  bool _internal_has_binomial_problem_detail() const;

  public:
  void clear_binomial_problem_detail() ;
  const ::mojo::spec::BinomialProblemDetail& binomial_problem_detail() const;
  [[nodiscard]] ::mojo::spec::BinomialProblemDetail* PROTOBUF_NULLABLE release_binomial_problem_detail();
  ::mojo::spec::BinomialProblemDetail* PROTOBUF_NONNULL mutable_binomial_problem_detail();
  void set_allocated_binomial_problem_detail(::mojo::spec::BinomialProblemDetail* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_binomial_problem_detail(::mojo::spec::BinomialProblemDetail* PROTOBUF_NULLABLE value);
  ::mojo::spec::BinomialProblemDetail* PROTOBUF_NULLABLE unsafe_arena_release_binomial_problem_detail();

  private:
  const ::mojo::spec::BinomialProblemDetail& _internal_binomial_problem_detail() const;
  ::mojo::spec::BinomialProblemDetail* PROTOBUF_NONNULL _internal_mutable_binomial_problem_detail();

  public:
  // .mojo.spec.MultinomialProblemDetail multinomial_problem_detail = 4;
  bool has_multinomial_problem_detail() const;
  private:
  bool _internal_has_multinomial_problem_detail() const;

  public:
  void clear_multinomial_problem_detail() ;
  const ::mojo::spec::MultinomialProblemDetail& multinomial_problem_detail() const;
  [[nodiscard]] ::mojo::spec::MultinomialProblemDetail* PROTOBUF_NULLABLE release_multinomial_problem_detail();
  ::mojo::spec::MultinomialProblemDetail* PROTOBUF_NONNULL mutable_multinomial_problem_detail();
  void set_allocated_multinomial_problem_detail(::mojo::spec::MultinomialProblemDetail* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_multinomial_problem_detail(::mojo::spec::MultinomialProblemDetail* PROTOBUF_NULLABLE value);
  ::mojo::spec::MultinomialProblemDetail* PROTOBUF_NULLABLE unsafe_arena_release_multinomial_problem_detail();

  private:
  const ::mojo::spec::MultinomialProblemDetail& _internal_multinomial_problem_detail() const;
  ::mojo::spec::MultinomialProblemDetail* PROTOBUF_NONNULL _internal_mutable_multinomial_problem_detail();

  public:
  void clear_problem_family();
  ProblemFamilyCase problem_family_case() const;
  // @@protoc_insertion_point(class_scope:mojo.spec.SupervisedProblemDetail)
 private:
  class _Internal;
  void set_has_regression_problem_detail();
  void set_has_binomial_problem_detail();
  void set_has_multinomial_problem_detail();
  inline bool has_problem_family() const;
  inline void clear_has_problem_family();
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<0, 4,
                                   4, 0,
                                   2>
      _table_;

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const SupervisedProblemDetail& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::mojo::spec::Target* PROTOBUF_NULLABLE target_;
    union ProblemFamilyUnion {
      constexpr ProblemFamilyUnion() : _constinit_{} {}
      ::google::protobuf::internal::ConstantInitialized _constinit_;
      ::google::protobuf::Message* PROTOBUF_NULLABLE regression_problem_detail_;
      ::google::protobuf::Message* PROTOBUF_NULLABLE binomial_problem_detail_;
      ::google::protobuf::Message* PROTOBUF_NULLABLE multinomial_problem_detail_;
    } problem_family_;
    ::uint32_t _oneof_case_[1];
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_Problem_2eproto;
};

extern const ::google::protobuf::internal::ClassDataFull SupervisedProblemDetail_class_data_;
// -------------------------------------------------------------------

class Problem final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:mojo.spec.Problem) */ {
 public:
  inline Problem() : Problem(nullptr) {}
  ~Problem() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(Problem* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(Problem));
  }
#endif

  template <typename = void>
  explicit PROTOBUF_CONSTEXPR Problem(::google::protobuf::internal::ConstantInitialized);

  inline Problem(const Problem& from) : Problem(nullptr, from) {}
  inline Problem(Problem&& from) noexcept
      : Problem(nullptr, ::std::move(from)) {}
  inline Problem& operator=(const Problem& from) {
    CopyFrom(from);
    return *this;
  }
  inline Problem& operator=(Problem&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Problem& default_instance() {
    return *reinterpret_cast<const Problem*>(
        &_Problem_default_instance_);
  }
  enum DetailCase {
    kSupervisedDetail = 1,
    kUnsupervisedDetail = 2,
    DETAIL_NOT_SET = 0,
  };
  static constexpr int kIndexInFileMessages = 0;
  friend void swap(Problem& a, Problem& b) { a.Swap(&b); }
  inline void Swap(Problem* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Problem* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Problem* PROTOBUF_NONNULL New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<Problem>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const Problem& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const Problem& from) { Problem::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(Problem* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "mojo.spec.Problem"; }

  explicit Problem(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  Problem(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Problem& from);
  Problem(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, Problem&& from) noexcept
      : Problem(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_();

  ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kSupervisedDetailFieldNumber = 1,
    kUnsupervisedDetailFieldNumber = 2,
  };
  // .mojo.spec.SupervisedProblemDetail supervised_detail = 1;
  bool has_supervised_detail() const;
  private:
  bool _internal_has_supervised_detail() const;

  public:
  void clear_supervised_detail() ;
  const ::mojo::spec::SupervisedProblemDetail& supervised_detail() const;
  [[nodiscard]] ::mojo::spec::SupervisedProblemDetail* PROTOBUF_NULLABLE release_supervised_detail();
  ::mojo::spec::SupervisedProblemDetail* PROTOBUF_NONNULL mutable_supervised_detail();
  void set_allocated_supervised_detail(::mojo::spec::SupervisedProblemDetail* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_supervised_detail(::mojo::spec::SupervisedProblemDetail* PROTOBUF_NULLABLE value);
  ::mojo::spec::SupervisedProblemDetail* PROTOBUF_NULLABLE unsafe_arena_release_supervised_detail();

  private:
  const ::mojo::spec::SupervisedProblemDetail& _internal_supervised_detail() const;
  ::mojo::spec::SupervisedProblemDetail* PROTOBUF_NONNULL _internal_mutable_supervised_detail();

  public:
  // .mojo.spec.UnsupervisedProblemDetail unsupervised_detail = 2;
  bool has_unsupervised_detail() const;
  private:
  bool _internal_has_unsupervised_detail() const;

  public:
  void clear_unsupervised_detail() ;
  const ::mojo::spec::UnsupervisedProblemDetail& unsupervised_detail() const;
  [[nodiscard]] ::mojo::spec::UnsupervisedProblemDetail* PROTOBUF_NULLABLE release_unsupervised_detail();
  ::mojo::spec::UnsupervisedProblemDetail* PROTOBUF_NONNULL mutable_unsupervised_detail();
  void set_allocated_unsupervised_detail(::mojo::spec::UnsupervisedProblemDetail* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_unsupervised_detail(::mojo::spec::UnsupervisedProblemDetail* PROTOBUF_NULLABLE value);
  ::mojo::spec::UnsupervisedProblemDetail* PROTOBUF_NULLABLE unsafe_arena_release_unsupervised_detail();

  private:
  const ::mojo::spec::UnsupervisedProblemDetail& _internal_unsupervised_detail() const;
  ::mojo::spec::UnsupervisedProblemDetail* PROTOBUF_NONNULL _internal_mutable_unsupervised_detail();

  public:
  void clear_detail();
  DetailCase detail_case() const;
  // @@protoc_insertion_point(class_scope:mojo.spec.Problem)
 private:
  class _Internal;
  void set_has_supervised_detail();
  void set_has_unsupervised_detail();
  inline bool has_detail() const;
  inline void clear_has_detail();
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<0, 2,
                                   2, 0,
                                   2>
      _table_;

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const Problem& from_msg);
    union DetailUnion {
      constexpr DetailUnion() : _constinit_{} {}
      ::google::protobuf::internal::ConstantInitialized _constinit_;
      ::mojo::spec::SupervisedProblemDetail* PROTOBUF_NULLABLE supervised_detail_;
      ::mojo::spec::UnsupervisedProblemDetail* PROTOBUF_NULLABLE unsupervised_detail_;
    } detail_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::uint32_t _oneof_case_[1];
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_Problem_2eproto;
};

extern const ::google::protobuf::internal::ClassDataFull Problem_class_data_;

// ===================================================================




// ===================================================================


#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif  // __GNUC__
// -------------------------------------------------------------------

// Problem

// .mojo.spec.SupervisedProblemDetail supervised_detail = 1;
inline bool Problem::has_supervised_detail() const {
  return detail_case() == kSupervisedDetail;
}
inline bool Problem::_internal_has_supervised_detail() const {
  return detail_case() == kSupervisedDetail;
}
inline void Problem::set_has_supervised_detail() {
  _impl_._oneof_case_[0] = kSupervisedDetail;
}
inline void Problem::clear_supervised_detail() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (detail_case() == kSupervisedDetail) {
    if (GetArena() == nullptr) {
      delete _impl_.detail_.supervised_detail_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.detail_.supervised_detail_);
    }
    clear_has_detail();
  }
}
inline ::mojo::spec::SupervisedProblemDetail* PROTOBUF_NULLABLE Problem::release_supervised_detail() {
  // @@protoc_insertion_point(field_release:mojo.spec.Problem.supervised_detail)
  if (detail_case() == kSupervisedDetail) {
    clear_has_detail();
    auto* temp = _impl_.detail_.supervised_detail_;
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.detail_.supervised_detail_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::mojo::spec::SupervisedProblemDetail& Problem::_internal_supervised_detail() const {
  return detail_case() == kSupervisedDetail ? static_cast<const ::mojo::spec::SupervisedProblemDetail&>(*_impl_.detail_.supervised_detail_)
                     : reinterpret_cast<const ::mojo::spec::SupervisedProblemDetail&>(::mojo::spec::_SupervisedProblemDetail_default_instance_);
}
inline const ::mojo::spec::SupervisedProblemDetail& Problem::supervised_detail() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:mojo.spec.Problem.supervised_detail)
  return _internal_supervised_detail();
}
inline ::mojo::spec::SupervisedProblemDetail* PROTOBUF_NULLABLE Problem::unsafe_arena_release_supervised_detail() {
  // @@protoc_insertion_point(field_unsafe_arena_release:mojo.spec.Problem.supervised_detail)
  if (detail_case() == kSupervisedDetail) {
    clear_has_detail();
    auto* temp = _impl_.detail_.supervised_detail_;
    _impl_.detail_.supervised_detail_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Problem::unsafe_arena_set_allocated_supervised_detail(
    ::mojo::spec::SupervisedProblemDetail* PROTOBUF_NULLABLE value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_detail();
  if (value) {
    set_has_supervised_detail();
    _impl_.detail_.supervised_detail_ = value;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:mojo.spec.Problem.supervised_detail)
}
inline ::mojo::spec::SupervisedProblemDetail* PROTOBUF_NONNULL Problem::_internal_mutable_supervised_detail() {
  if (detail_case() != kSupervisedDetail) {
    clear_detail();
    set_has_supervised_detail();
    _impl_.detail_.supervised_detail_ = 
        ::google::protobuf::Message::DefaultConstruct<::mojo::spec::SupervisedProblemDetail>(GetArena());
  }
  return _impl_.detail_.supervised_detail_;
}
inline ::mojo::spec::SupervisedProblemDetail* PROTOBUF_NONNULL Problem::mutable_supervised_detail()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::mojo::spec::SupervisedProblemDetail* _msg = _internal_mutable_supervised_detail();
  // @@protoc_insertion_point(field_mutable:mojo.spec.Problem.supervised_detail)
  return _msg;
}

// .mojo.spec.UnsupervisedProblemDetail unsupervised_detail = 2;
inline bool Problem::has_unsupervised_detail() const {
  return detail_case() == kUnsupervisedDetail;
}
inline bool Problem::_internal_has_unsupervised_detail() const {
  return detail_case() == kUnsupervisedDetail;
}
inline void Problem::set_has_unsupervised_detail() {
  _impl_._oneof_case_[0] = kUnsupervisedDetail;
}
inline void Problem::clear_unsupervised_detail() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (detail_case() == kUnsupervisedDetail) {
    if (GetArena() == nullptr) {
      delete _impl_.detail_.unsupervised_detail_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.detail_.unsupervised_detail_);
    }
    clear_has_detail();
  }
}
inline ::mojo::spec::UnsupervisedProblemDetail* PROTOBUF_NULLABLE Problem::release_unsupervised_detail() {
  // @@protoc_insertion_point(field_release:mojo.spec.Problem.unsupervised_detail)
  if (detail_case() == kUnsupervisedDetail) {
    clear_has_detail();
    auto* temp = _impl_.detail_.unsupervised_detail_;
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.detail_.unsupervised_detail_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::mojo::spec::UnsupervisedProblemDetail& Problem::_internal_unsupervised_detail() const {
  return detail_case() == kUnsupervisedDetail ? static_cast<const ::mojo::spec::UnsupervisedProblemDetail&>(*_impl_.detail_.unsupervised_detail_)
                     : reinterpret_cast<const ::mojo::spec::UnsupervisedProblemDetail&>(::mojo::spec::_UnsupervisedProblemDetail_default_instance_);
}
inline const ::mojo::spec::UnsupervisedProblemDetail& Problem::unsupervised_detail() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:mojo.spec.Problem.unsupervised_detail)
  return _internal_unsupervised_detail();
}
inline ::mojo::spec::UnsupervisedProblemDetail* PROTOBUF_NULLABLE Problem::unsafe_arena_release_unsupervised_detail() {
  // @@protoc_insertion_point(field_unsafe_arena_release:mojo.spec.Problem.unsupervised_detail)
  if (detail_case() == kUnsupervisedDetail) {
    clear_has_detail();
    auto* temp = _impl_.detail_.unsupervised_detail_;
    _impl_.detail_.unsupervised_detail_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Problem::unsafe_arena_set_allocated_unsupervised_detail(
    ::mojo::spec::UnsupervisedProblemDetail* PROTOBUF_NULLABLE value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_detail();
  if (value) {
    set_has_unsupervised_detail();
    _impl_.detail_.unsupervised_detail_ = value;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:mojo.spec.Problem.unsupervised_detail)
}
inline ::mojo::spec::UnsupervisedProblemDetail* PROTOBUF_NONNULL Problem::_internal_mutable_unsupervised_detail() {
  if (detail_case() != kUnsupervisedDetail) {
    clear_detail();
    set_has_unsupervised_detail();
    _impl_.detail_.unsupervised_detail_ = 
        ::google::protobuf::Message::DefaultConstruct<::mojo::spec::UnsupervisedProblemDetail>(GetArena());
  }
  return _impl_.detail_.unsupervised_detail_;
}
inline ::mojo::spec::UnsupervisedProblemDetail* PROTOBUF_NONNULL Problem::mutable_unsupervised_detail()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::mojo::spec::UnsupervisedProblemDetail* _msg = _internal_mutable_unsupervised_detail();
  // @@protoc_insertion_point(field_mutable:mojo.spec.Problem.unsupervised_detail)
  return _msg;
}

inline bool Problem::has_detail() const {
  return detail_case() != DETAIL_NOT_SET;
}
inline void Problem::clear_has_detail() {
  _impl_._oneof_case_[0] = DETAIL_NOT_SET;
}
inline Problem::DetailCase Problem::detail_case() const {
  return Problem::DetailCase(_impl_._oneof_case_[0]);
}
// -------------------------------------------------------------------

// SupervisedProblemDetail

// .mojo.spec.Target target = 1;
inline bool SupervisedProblemDetail::has_target() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  PROTOBUF_ASSUME(!value || _impl_.target_ != nullptr);
  return value;
}
inline void SupervisedProblemDetail::clear_target() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.target_ != nullptr) _impl_.target_->Clear();
  ClearHasBit(_impl_._has_bits_[0],
                  0x00000001U);
}
inline const ::mojo::spec::Target& SupervisedProblemDetail::_internal_target() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::mojo::spec::Target* p = _impl_.target_;
  return p != nullptr ? *p : reinterpret_cast<const ::mojo::spec::Target&>(::mojo::spec::_Target_default_instance_);
}
inline const ::mojo::spec::Target& SupervisedProblemDetail::target() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:mojo.spec.SupervisedProblemDetail.target)
  return _internal_target();
}
inline void SupervisedProblemDetail::unsafe_arena_set_allocated_target(
    ::mojo::spec::Target* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.target_);
  }
  _impl_.target_ = reinterpret_cast<::mojo::spec::Target*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:mojo.spec.SupervisedProblemDetail.target)
}
inline ::mojo::spec::Target* PROTOBUF_NULLABLE SupervisedProblemDetail::release_target() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::mojo::spec::Target* released = _impl_.target_;
  _impl_.target_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::mojo::spec::Target* PROTOBUF_NULLABLE SupervisedProblemDetail::unsafe_arena_release_target() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:mojo.spec.SupervisedProblemDetail.target)

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::mojo::spec::Target* temp = _impl_.target_;
  _impl_.target_ = nullptr;
  return temp;
}
inline ::mojo::spec::Target* PROTOBUF_NONNULL SupervisedProblemDetail::_internal_mutable_target() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.target_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::mojo::spec::Target>(GetArena());
    _impl_.target_ = reinterpret_cast<::mojo::spec::Target*>(p);
  }
  return _impl_.target_;
}
inline ::mojo::spec::Target* PROTOBUF_NONNULL SupervisedProblemDetail::mutable_target()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::mojo::spec::Target* _msg = _internal_mutable_target();
  // @@protoc_insertion_point(field_mutable:mojo.spec.SupervisedProblemDetail.target)
  return _msg;
}
inline void SupervisedProblemDetail::set_allocated_target(::mojo::spec::Target* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.target_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }

  _impl_.target_ = reinterpret_cast<::mojo::spec::Target*>(value);
  // @@protoc_insertion_point(field_set_allocated:mojo.spec.SupervisedProblemDetail.target)
}

// .mojo.spec.RegressionProblemDetail regression_problem_detail = 2;
inline bool SupervisedProblemDetail::has_regression_problem_detail() const {
  return problem_family_case() == kRegressionProblemDetail;
}
inline bool SupervisedProblemDetail::_internal_has_regression_problem_detail() const {
  return problem_family_case() == kRegressionProblemDetail;
}
inline void SupervisedProblemDetail::set_has_regression_problem_detail() {
  _impl_._oneof_case_[0] = kRegressionProblemDetail;
}
inline void SupervisedProblemDetail::clear_regression_problem_detail() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (problem_family_case() == kRegressionProblemDetail) {
    if (GetArena() == nullptr) {
      delete _impl_.problem_family_.regression_problem_detail_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.problem_family_.regression_problem_detail_);
    }
    clear_has_problem_family();
  }
}
inline ::mojo::spec::RegressionProblemDetail* PROTOBUF_NULLABLE SupervisedProblemDetail::release_regression_problem_detail() {
  // @@protoc_insertion_point(field_release:mojo.spec.SupervisedProblemDetail.regression_problem_detail)
  if (problem_family_case() == kRegressionProblemDetail) {
    clear_has_problem_family();
    auto* temp = reinterpret_cast<::mojo::spec::RegressionProblemDetail*>(_impl_.problem_family_.regression_problem_detail_);
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.problem_family_.regression_problem_detail_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::mojo::spec::RegressionProblemDetail& SupervisedProblemDetail::_internal_regression_problem_detail() const {
  return problem_family_case() == kRegressionProblemDetail ? static_cast<const ::mojo::spec::RegressionProblemDetail&>(*reinterpret_cast<::mojo::spec::RegressionProblemDetail*>(_impl_.problem_family_.regression_problem_detail_))
                     : reinterpret_cast<const ::mojo::spec::RegressionProblemDetail&>(::mojo::spec::_RegressionProblemDetail_default_instance_);
}
inline const ::mojo::spec::RegressionProblemDetail& SupervisedProblemDetail::regression_problem_detail() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:mojo.spec.SupervisedProblemDetail.regression_problem_detail)
  return _internal_regression_problem_detail();
}
inline ::mojo::spec::RegressionProblemDetail* PROTOBUF_NULLABLE SupervisedProblemDetail::unsafe_arena_release_regression_problem_detail() {
  // @@protoc_insertion_point(field_unsafe_arena_release:mojo.spec.SupervisedProblemDetail.regression_problem_detail)
  if (problem_family_case() == kRegressionProblemDetail) {
    clear_has_problem_family();
    auto* temp = reinterpret_cast<::mojo::spec::RegressionProblemDetail*>(_impl_.problem_family_.regression_problem_detail_);
    _impl_.problem_family_.regression_problem_detail_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void SupervisedProblemDetail::unsafe_arena_set_allocated_regression_problem_detail(
    ::mojo::spec::RegressionProblemDetail* PROTOBUF_NULLABLE value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_problem_family();
  if (value) {
    set_has_regression_problem_detail();
    _impl_.problem_family_.regression_problem_detail_ = reinterpret_cast<::google::protobuf::Message*>(value);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:mojo.spec.SupervisedProblemDetail.regression_problem_detail)
}
inline ::mojo::spec::RegressionProblemDetail* PROTOBUF_NONNULL SupervisedProblemDetail::_internal_mutable_regression_problem_detail() {
  if (problem_family_case() != kRegressionProblemDetail) {
    clear_problem_family();
    set_has_regression_problem_detail();
    _impl_.problem_family_.regression_problem_detail_ = reinterpret_cast<::google::protobuf::Message*>(
        ::google::protobuf::Message::DefaultConstruct<::mojo::spec::RegressionProblemDetail>(GetArena()));
  }
  return reinterpret_cast<::mojo::spec::RegressionProblemDetail*>(_impl_.problem_family_.regression_problem_detail_);
}
inline ::mojo::spec::RegressionProblemDetail* PROTOBUF_NONNULL SupervisedProblemDetail::mutable_regression_problem_detail()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::mojo::spec::RegressionProblemDetail* _msg = _internal_mutable_regression_problem_detail();
  // @@protoc_insertion_point(field_mutable:mojo.spec.SupervisedProblemDetail.regression_problem_detail)
  return _msg;
}

// .mojo.spec.BinomialProblemDetail binomial_problem_detail = 3;
inline bool SupervisedProblemDetail::has_binomial_problem_detail() const {
  return problem_family_case() == kBinomialProblemDetail;
}
inline bool SupervisedProblemDetail::_internal_has_binomial_problem_detail() const {
  return problem_family_case() == kBinomialProblemDetail;
}
inline void SupervisedProblemDetail::set_has_binomial_problem_detail() {
  _impl_._oneof_case_[0] = kBinomialProblemDetail;
}
inline void SupervisedProblemDetail::clear_binomial_problem_detail() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (problem_family_case() == kBinomialProblemDetail) {
    if (GetArena() == nullptr) {
      delete _impl_.problem_family_.binomial_problem_detail_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.problem_family_.binomial_problem_detail_);
    }
    clear_has_problem_family();
  }
}
inline ::mojo::spec::BinomialProblemDetail* PROTOBUF_NULLABLE SupervisedProblemDetail::release_binomial_problem_detail() {
  // @@protoc_insertion_point(field_release:mojo.spec.SupervisedProblemDetail.binomial_problem_detail)
  if (problem_family_case() == kBinomialProblemDetail) {
    clear_has_problem_family();
    auto* temp = reinterpret_cast<::mojo::spec::BinomialProblemDetail*>(_impl_.problem_family_.binomial_problem_detail_);
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.problem_family_.binomial_problem_detail_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::mojo::spec::BinomialProblemDetail& SupervisedProblemDetail::_internal_binomial_problem_detail() const {
  return problem_family_case() == kBinomialProblemDetail ? static_cast<const ::mojo::spec::BinomialProblemDetail&>(*reinterpret_cast<::mojo::spec::BinomialProblemDetail*>(_impl_.problem_family_.binomial_problem_detail_))
                     : reinterpret_cast<const ::mojo::spec::BinomialProblemDetail&>(::mojo::spec::_BinomialProblemDetail_default_instance_);
}
inline const ::mojo::spec::BinomialProblemDetail& SupervisedProblemDetail::binomial_problem_detail() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:mojo.spec.SupervisedProblemDetail.binomial_problem_detail)
  return _internal_binomial_problem_detail();
}
inline ::mojo::spec::BinomialProblemDetail* PROTOBUF_NULLABLE SupervisedProblemDetail::unsafe_arena_release_binomial_problem_detail() {
  // @@protoc_insertion_point(field_unsafe_arena_release:mojo.spec.SupervisedProblemDetail.binomial_problem_detail)
  if (problem_family_case() == kBinomialProblemDetail) {
    clear_has_problem_family();
    auto* temp = reinterpret_cast<::mojo::spec::BinomialProblemDetail*>(_impl_.problem_family_.binomial_problem_detail_);
    _impl_.problem_family_.binomial_problem_detail_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void SupervisedProblemDetail::unsafe_arena_set_allocated_binomial_problem_detail(
    ::mojo::spec::BinomialProblemDetail* PROTOBUF_NULLABLE value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_problem_family();
  if (value) {
    set_has_binomial_problem_detail();
    _impl_.problem_family_.binomial_problem_detail_ = reinterpret_cast<::google::protobuf::Message*>(value);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:mojo.spec.SupervisedProblemDetail.binomial_problem_detail)
}
inline ::mojo::spec::BinomialProblemDetail* PROTOBUF_NONNULL SupervisedProblemDetail::_internal_mutable_binomial_problem_detail() {
  if (problem_family_case() != kBinomialProblemDetail) {
    clear_problem_family();
    set_has_binomial_problem_detail();
    _impl_.problem_family_.binomial_problem_detail_ = reinterpret_cast<::google::protobuf::Message*>(
        ::google::protobuf::Message::DefaultConstruct<::mojo::spec::BinomialProblemDetail>(GetArena()));
  }
  return reinterpret_cast<::mojo::spec::BinomialProblemDetail*>(_impl_.problem_family_.binomial_problem_detail_);
}
inline ::mojo::spec::BinomialProblemDetail* PROTOBUF_NONNULL SupervisedProblemDetail::mutable_binomial_problem_detail()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::mojo::spec::BinomialProblemDetail* _msg = _internal_mutable_binomial_problem_detail();
  // @@protoc_insertion_point(field_mutable:mojo.spec.SupervisedProblemDetail.binomial_problem_detail)
  return _msg;
}

// .mojo.spec.MultinomialProblemDetail multinomial_problem_detail = 4;
inline bool SupervisedProblemDetail::has_multinomial_problem_detail() const {
  return problem_family_case() == kMultinomialProblemDetail;
}
inline bool SupervisedProblemDetail::_internal_has_multinomial_problem_detail() const {
  return problem_family_case() == kMultinomialProblemDetail;
}
inline void SupervisedProblemDetail::set_has_multinomial_problem_detail() {
  _impl_._oneof_case_[0] = kMultinomialProblemDetail;
}
inline void SupervisedProblemDetail::clear_multinomial_problem_detail() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (problem_family_case() == kMultinomialProblemDetail) {
    if (GetArena() == nullptr) {
      delete _impl_.problem_family_.multinomial_problem_detail_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.problem_family_.multinomial_problem_detail_);
    }
    clear_has_problem_family();
  }
}
inline ::mojo::spec::MultinomialProblemDetail* PROTOBUF_NULLABLE SupervisedProblemDetail::release_multinomial_problem_detail() {
  // @@protoc_insertion_point(field_release:mojo.spec.SupervisedProblemDetail.multinomial_problem_detail)
  if (problem_family_case() == kMultinomialProblemDetail) {
    clear_has_problem_family();
    auto* temp = reinterpret_cast<::mojo::spec::MultinomialProblemDetail*>(_impl_.problem_family_.multinomial_problem_detail_);
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.problem_family_.multinomial_problem_detail_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::mojo::spec::MultinomialProblemDetail& SupervisedProblemDetail::_internal_multinomial_problem_detail() const {
  return problem_family_case() == kMultinomialProblemDetail ? static_cast<const ::mojo::spec::MultinomialProblemDetail&>(*reinterpret_cast<::mojo::spec::MultinomialProblemDetail*>(_impl_.problem_family_.multinomial_problem_detail_))
                     : reinterpret_cast<const ::mojo::spec::MultinomialProblemDetail&>(::mojo::spec::_MultinomialProblemDetail_default_instance_);
}
inline const ::mojo::spec::MultinomialProblemDetail& SupervisedProblemDetail::multinomial_problem_detail() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:mojo.spec.SupervisedProblemDetail.multinomial_problem_detail)
  return _internal_multinomial_problem_detail();
}
inline ::mojo::spec::MultinomialProblemDetail* PROTOBUF_NULLABLE SupervisedProblemDetail::unsafe_arena_release_multinomial_problem_detail() {
  // @@protoc_insertion_point(field_unsafe_arena_release:mojo.spec.SupervisedProblemDetail.multinomial_problem_detail)
  if (problem_family_case() == kMultinomialProblemDetail) {
    clear_has_problem_family();
    auto* temp = reinterpret_cast<::mojo::spec::MultinomialProblemDetail*>(_impl_.problem_family_.multinomial_problem_detail_);
    _impl_.problem_family_.multinomial_problem_detail_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void SupervisedProblemDetail::unsafe_arena_set_allocated_multinomial_problem_detail(
    ::mojo::spec::MultinomialProblemDetail* PROTOBUF_NULLABLE value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_problem_family();
  if (value) {
    set_has_multinomial_problem_detail();
    _impl_.problem_family_.multinomial_problem_detail_ = reinterpret_cast<::google::protobuf::Message*>(value);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:mojo.spec.SupervisedProblemDetail.multinomial_problem_detail)
}
inline ::mojo::spec::MultinomialProblemDetail* PROTOBUF_NONNULL SupervisedProblemDetail::_internal_mutable_multinomial_problem_detail() {
  if (problem_family_case() != kMultinomialProblemDetail) {
    clear_problem_family();
    set_has_multinomial_problem_detail();
    _impl_.problem_family_.multinomial_problem_detail_ = reinterpret_cast<::google::protobuf::Message*>(
        ::google::protobuf::Message::DefaultConstruct<::mojo::spec::MultinomialProblemDetail>(GetArena()));
  }
  return reinterpret_cast<::mojo::spec::MultinomialProblemDetail*>(_impl_.problem_family_.multinomial_problem_detail_);
}
inline ::mojo::spec::MultinomialProblemDetail* PROTOBUF_NONNULL SupervisedProblemDetail::mutable_multinomial_problem_detail()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::mojo::spec::MultinomialProblemDetail* _msg = _internal_mutable_multinomial_problem_detail();
  // @@protoc_insertion_point(field_mutable:mojo.spec.SupervisedProblemDetail.multinomial_problem_detail)
  return _msg;
}

inline bool SupervisedProblemDetail::has_problem_family() const {
  return problem_family_case() != PROBLEM_FAMILY_NOT_SET;
}
inline void SupervisedProblemDetail::clear_has_problem_family() {
  _impl_._oneof_case_[0] = PROBLEM_FAMILY_NOT_SET;
}
inline SupervisedProblemDetail::ProblemFamilyCase SupervisedProblemDetail::problem_family_case() const {
  return SupervisedProblemDetail::ProblemFamilyCase(_impl_._oneof_case_[0]);
}
// -------------------------------------------------------------------

// PredictionInterval

// repeated string tgc = 1;
inline int PredictionInterval::_internal_tgc_size() const {
  return _internal_tgc().size();
}
inline int PredictionInterval::tgc_size() const {
  return _internal_tgc_size();
}
inline void PredictionInterval::clear_tgc() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.tgc_.Clear();
  ClearHasBitForRepeated(_impl_._has_bits_[0],
                  0x00000001U);
}
inline ::std::string* PROTOBUF_NONNULL PredictionInterval::add_tgc()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::std::string* _s =
      _internal_mutable_tgc()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBitForRepeated(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add_mutable:mojo.spec.PredictionInterval.tgc)
  return _s;
}
inline const ::std::string& PredictionInterval::tgc(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:mojo.spec.PredictionInterval.tgc)
  return _internal_tgc().Get(index);
}
inline ::std::string* PROTOBUF_NONNULL PredictionInterval::mutable_tgc(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:mojo.spec.PredictionInterval.tgc)
  return _internal_mutable_tgc()->Mutable(index);
}
template <typename Arg_, typename... Args_>
inline void PredictionInterval::set_tgc(int index, Arg_&& value, Args_... args) {
  ::google::protobuf::internal::AssignToString(*_internal_mutable_tgc()->Mutable(index), ::std::forward<Arg_>(value),
                        args... );
  // @@protoc_insertion_point(field_set:mojo.spec.PredictionInterval.tgc)
}
template <typename Arg_, typename... Args_>
inline void PredictionInterval::add_tgc(Arg_&& value, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::google::protobuf::internal::AddToRepeatedPtrField(
      ::google::protobuf::MessageLite::internal_visibility(), GetArena(),
      *_internal_mutable_tgc(), ::std::forward<Arg_>(value),
      args... );
  SetHasBitForRepeated(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:mojo.spec.PredictionInterval.tgc)
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>& PredictionInterval::tgc()
    const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:mojo.spec.PredictionInterval.tgc)
  return _internal_tgc();
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
PredictionInterval::mutable_tgc() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBitForRepeated(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:mojo.spec.PredictionInterval.tgc)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_tgc();
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>&
PredictionInterval::_internal_tgc() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.tgc_;
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
PredictionInterval::_internal_mutable_tgc() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.tgc_;
}

// .mojo.spec.MapOp bounds_by_tgc = 2;
inline bool PredictionInterval::has_bounds_by_tgc() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  PROTOBUF_ASSUME(!value || _impl_.bounds_by_tgc_ != nullptr);
  return value;
}
inline const ::mojo::spec::MapOp& PredictionInterval::_internal_bounds_by_tgc() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::mojo::spec::MapOp* p = _impl_.bounds_by_tgc_;
  return p != nullptr ? *p : reinterpret_cast<const ::mojo::spec::MapOp&>(::mojo::spec::_MapOp_default_instance_);
}
inline const ::mojo::spec::MapOp& PredictionInterval::bounds_by_tgc() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:mojo.spec.PredictionInterval.bounds_by_tgc)
  return _internal_bounds_by_tgc();
}
inline void PredictionInterval::unsafe_arena_set_allocated_bounds_by_tgc(
    ::mojo::spec::MapOp* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bounds_by_tgc_);
  }
  _impl_.bounds_by_tgc_ = reinterpret_cast<::mojo::spec::MapOp*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:mojo.spec.PredictionInterval.bounds_by_tgc)
}
inline ::mojo::spec::MapOp* PROTOBUF_NULLABLE PredictionInterval::release_bounds_by_tgc() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::mojo::spec::MapOp* released = _impl_.bounds_by_tgc_;
  _impl_.bounds_by_tgc_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::mojo::spec::MapOp* PROTOBUF_NULLABLE PredictionInterval::unsafe_arena_release_bounds_by_tgc() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:mojo.spec.PredictionInterval.bounds_by_tgc)

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::mojo::spec::MapOp* temp = _impl_.bounds_by_tgc_;
  _impl_.bounds_by_tgc_ = nullptr;
  return temp;
}
inline ::mojo::spec::MapOp* PROTOBUF_NONNULL PredictionInterval::_internal_mutable_bounds_by_tgc() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bounds_by_tgc_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::mojo::spec::MapOp>(GetArena());
    _impl_.bounds_by_tgc_ = reinterpret_cast<::mojo::spec::MapOp*>(p);
  }
  return _impl_.bounds_by_tgc_;
}
inline ::mojo::spec::MapOp* PROTOBUF_NONNULL PredictionInterval::mutable_bounds_by_tgc()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::mojo::spec::MapOp* _msg = _internal_mutable_bounds_by_tgc();
  // @@protoc_insertion_point(field_mutable:mojo.spec.PredictionInterval.bounds_by_tgc)
  return _msg;
}
inline void PredictionInterval::set_allocated_bounds_by_tgc(::mojo::spec::MapOp* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bounds_by_tgc_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(value)->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }

  _impl_.bounds_by_tgc_ = reinterpret_cast<::mojo::spec::MapOp*>(value);
  // @@protoc_insertion_point(field_set_allocated:mojo.spec.PredictionInterval.bounds_by_tgc)
}

// -------------------------------------------------------------------

// RegressionProblemDetail

// .mojo.spec.PredictionInterval prediction_interval = 1;
inline bool RegressionProblemDetail::has_prediction_interval() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  PROTOBUF_ASSUME(!value || _impl_.prediction_interval_ != nullptr);
  return value;
}
inline void RegressionProblemDetail::clear_prediction_interval() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.prediction_interval_ != nullptr) _impl_.prediction_interval_->Clear();
  ClearHasBit(_impl_._has_bits_[0],
                  0x00000001U);
}
inline const ::mojo::spec::PredictionInterval& RegressionProblemDetail::_internal_prediction_interval() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::mojo::spec::PredictionInterval* p = _impl_.prediction_interval_;
  return p != nullptr ? *p : reinterpret_cast<const ::mojo::spec::PredictionInterval&>(::mojo::spec::_PredictionInterval_default_instance_);
}
inline const ::mojo::spec::PredictionInterval& RegressionProblemDetail::prediction_interval() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:mojo.spec.RegressionProblemDetail.prediction_interval)
  return _internal_prediction_interval();
}
inline void RegressionProblemDetail::unsafe_arena_set_allocated_prediction_interval(
    ::mojo::spec::PredictionInterval* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.prediction_interval_);
  }
  _impl_.prediction_interval_ = reinterpret_cast<::mojo::spec::PredictionInterval*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:mojo.spec.RegressionProblemDetail.prediction_interval)
}
inline ::mojo::spec::PredictionInterval* PROTOBUF_NULLABLE RegressionProblemDetail::release_prediction_interval() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::mojo::spec::PredictionInterval* released = _impl_.prediction_interval_;
  _impl_.prediction_interval_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::mojo::spec::PredictionInterval* PROTOBUF_NULLABLE RegressionProblemDetail::unsafe_arena_release_prediction_interval() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:mojo.spec.RegressionProblemDetail.prediction_interval)

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::mojo::spec::PredictionInterval* temp = _impl_.prediction_interval_;
  _impl_.prediction_interval_ = nullptr;
  return temp;
}
inline ::mojo::spec::PredictionInterval* PROTOBUF_NONNULL RegressionProblemDetail::_internal_mutable_prediction_interval() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.prediction_interval_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::mojo::spec::PredictionInterval>(GetArena());
    _impl_.prediction_interval_ = reinterpret_cast<::mojo::spec::PredictionInterval*>(p);
  }
  return _impl_.prediction_interval_;
}
inline ::mojo::spec::PredictionInterval* PROTOBUF_NONNULL RegressionProblemDetail::mutable_prediction_interval()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::mojo::spec::PredictionInterval* _msg = _internal_mutable_prediction_interval();
  // @@protoc_insertion_point(field_mutable:mojo.spec.RegressionProblemDetail.prediction_interval)
  return _msg;
}
inline void RegressionProblemDetail::set_allocated_prediction_interval(::mojo::spec::PredictionInterval* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.prediction_interval_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }

  _impl_.prediction_interval_ = reinterpret_cast<::mojo::spec::PredictionInterval*>(value);
  // @@protoc_insertion_point(field_set_allocated:mojo.spec.RegressionProblemDetail.prediction_interval)
}

// -------------------------------------------------------------------

// BinomialProblemDetail

// double default_threshold = 1;
inline void BinomialProblemDetail::clear_default_threshold() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.default_threshold_ = 0;
  ClearHasBit(_impl_._has_bits_[0],
                  0x00000001U);
}
inline double BinomialProblemDetail::default_threshold() const {
  // @@protoc_insertion_point(field_get:mojo.spec.BinomialProblemDetail.default_threshold)
  return _internal_default_threshold();
}
inline void BinomialProblemDetail::set_default_threshold(double value) {
  _internal_set_default_threshold(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:mojo.spec.BinomialProblemDetail.default_threshold)
}
inline double BinomialProblemDetail::_internal_default_threshold() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.default_threshold_;
}
inline void BinomialProblemDetail::_internal_set_default_threshold(double value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.default_threshold_ = value;
}

// -------------------------------------------------------------------

// MultinomialProblemDetail

// -------------------------------------------------------------------

// UnsupervisedProblemDetail

// -------------------------------------------------------------------

// Target

// string name = 1;
inline void Target::clear_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0],
                  0x00000002U);
}
inline const ::std::string& Target::name() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:mojo.spec.Target.name)
  return _internal_name();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void Target::set_name(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  _impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:mojo.spec.Target.name)
}
inline ::std::string* PROTOBUF_NONNULL Target::mutable_name()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::std::string* _s = _internal_mutable_name();
  // @@protoc_insertion_point(field_mutable:mojo.spec.Target.name)
  return _s;
}
inline const ::std::string& Target::_internal_name() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.name_.Get();
}
inline void Target::_internal_set_name(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL Target::_internal_mutable_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.name_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE Target::release_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:mojo.spec.Target.name)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000002U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  auto* released = _impl_.name_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.name_.Set("", GetArena());
  }
  return released;
}
inline void Target::set_allocated_name(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  _impl_.name_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.name_.IsDefault()) {
    _impl_.name_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:mojo.spec.Target.name)
}

// repeated string labels = 2;
inline int Target::_internal_labels_size() const {
  return _internal_labels().size();
}
inline int Target::labels_size() const {
  return _internal_labels_size();
}
inline void Target::clear_labels() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.labels_.Clear();
  ClearHasBitForRepeated(_impl_._has_bits_[0],
                  0x00000001U);
}
inline ::std::string* PROTOBUF_NONNULL Target::add_labels()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::std::string* _s =
      _internal_mutable_labels()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBitForRepeated(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add_mutable:mojo.spec.Target.labels)
  return _s;
}
inline const ::std::string& Target::labels(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:mojo.spec.Target.labels)
  return _internal_labels().Get(index);
}
inline ::std::string* PROTOBUF_NONNULL Target::mutable_labels(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:mojo.spec.Target.labels)
  return _internal_mutable_labels()->Mutable(index);
}
template <typename Arg_, typename... Args_>
inline void Target::set_labels(int index, Arg_&& value, Args_... args) {
  ::google::protobuf::internal::AssignToString(*_internal_mutable_labels()->Mutable(index), ::std::forward<Arg_>(value),
                        args... );
  // @@protoc_insertion_point(field_set:mojo.spec.Target.labels)
}
template <typename Arg_, typename... Args_>
inline void Target::add_labels(Arg_&& value, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::google::protobuf::internal::AddToRepeatedPtrField(
      ::google::protobuf::MessageLite::internal_visibility(), GetArena(),
      *_internal_mutable_labels(), ::std::forward<Arg_>(value),
      args... );
  SetHasBitForRepeated(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:mojo.spec.Target.labels)
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>& Target::labels()
    const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:mojo.spec.Target.labels)
  return _internal_labels();
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
Target::mutable_labels() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBitForRepeated(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:mojo.spec.Target.labels)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_labels();
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>&
Target::_internal_labels() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.labels_;
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
Target::_internal_mutable_labels() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.labels_;
}

#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif  // __GNUC__

// @@protoc_insertion_point(namespace_scope)
}  // namespace spec
}  // namespace mojo


// @@protoc_insertion_point(global_scope)

#include "google/protobuf/port_undef.inc"

#endif  // Problem_2eproto_2epb_2eh
