// automatically generated by the FlatBuffers compiler, do not modify


#ifndef FLATBUFFERS_GENERATED_SDPAATTRIBUTES_HIPDNN_FLATBUFFERS_SDK_DATA_OBJECTS_H_
#define FLATBUFFERS_GENERATED_SDPAATTRIBUTES_HIPDNN_FLATBUFFERS_SDK_DATA_OBJECTS_H_

#include "flatbuffers/flatbuffers.h"

// Ensure the included flatbuffers.h is the same version as when this file was
// generated, otherwise it may not be compatible.
static_assert(FLATBUFFERS_VERSION_MAJOR == 24 &&
              FLATBUFFERS_VERSION_MINOR == 12 &&
              FLATBUFFERS_VERSION_REVISION == 23,
             "Non-compatible flatbuffers version included");

#include "data_types_generated.h"

namespace hipdnn_flatbuffers_sdk {
namespace data_objects {

struct SdpaAttributes;
struct SdpaAttributesBuilder;
struct SdpaAttributesT;

bool operator==(const SdpaAttributesT &lhs, const SdpaAttributesT &rhs);
bool operator!=(const SdpaAttributesT &lhs, const SdpaAttributesT &rhs);

enum class DiagonalAlignment : int8_t {
  TOP_LEFT = 0,
  BOTTOM_RIGHT = 1,
  MIN = TOP_LEFT,
  MAX = BOTTOM_RIGHT
};

inline const DiagonalAlignment (&EnumValuesDiagonalAlignment())[2] {
  static const DiagonalAlignment values[] = {
    DiagonalAlignment::TOP_LEFT,
    DiagonalAlignment::BOTTOM_RIGHT
  };
  return values;
}

inline const char * const *EnumNamesDiagonalAlignment() {
  static const char * const names[3] = {
    "TOP_LEFT",
    "BOTTOM_RIGHT",
    nullptr
  };
  return names;
}

inline const char *EnumNameDiagonalAlignment(DiagonalAlignment e) {
  if (::flatbuffers::IsOutRange(e, DiagonalAlignment::TOP_LEFT, DiagonalAlignment::BOTTOM_RIGHT)) return "";
  const size_t index = static_cast<size_t>(e);
  return EnumNamesDiagonalAlignment()[index];
}

enum class AttentionImplementation : int8_t {
  AUTO = 0,
  COMPOSITE = 1,
  UNIFIED = 2,
  MIN = AUTO,
  MAX = UNIFIED
};

inline const AttentionImplementation (&EnumValuesAttentionImplementation())[3] {
  static const AttentionImplementation values[] = {
    AttentionImplementation::AUTO,
    AttentionImplementation::COMPOSITE,
    AttentionImplementation::UNIFIED
  };
  return values;
}

inline const char * const *EnumNamesAttentionImplementation() {
  static const char * const names[4] = {
    "AUTO",
    "COMPOSITE",
    "UNIFIED",
    nullptr
  };
  return names;
}

inline const char *EnumNameAttentionImplementation(AttentionImplementation e) {
  if (::flatbuffers::IsOutRange(e, AttentionImplementation::AUTO, AttentionImplementation::UNIFIED)) return "";
  const size_t index = static_cast<size_t>(e);
  return EnumNamesAttentionImplementation()[index];
}

struct SdpaAttributesT : public ::flatbuffers::NativeTable {
  typedef SdpaAttributes TableType;
  int64_t q_tensor_uid = 0;
  int64_t k_tensor_uid = 0;
  int64_t v_tensor_uid = 0;
  int64_t o_tensor_uid = 0;
  ::flatbuffers::Optional<int64_t> attn_mask_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> scale_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> seq_len_q_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> seq_len_kv_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> seed_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> offset_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> dropout_mask_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> dropout_scale_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> page_table_k_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> page_table_v_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> block_mask_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> sink_token_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> descale_q_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> descale_k_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> descale_v_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> descale_s_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> scale_s_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> scale_o_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> stats_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> max_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> sum_exp_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> rng_dump_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> amax_s_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> amax_o_tensor_uid = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<bool> generate_stats = ::flatbuffers::nullopt;
  bool alibi_mask = false;
  bool padding_mask = false;
  bool causal_mask = false;
  bool causal_mask_bottom_right = false;
  ::flatbuffers::Optional<float> dropout_probability = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<float> attn_scale_value = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> left_bound = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int64_t> right_bound = ::flatbuffers::nullopt;
  ::flatbuffers::Optional<int32_t> max_seq_len_kv = ::flatbuffers::nullopt;
  hipdnn_flatbuffers_sdk::data_objects::DiagonalAlignment diagonal_alignment = hipdnn_flatbuffers_sdk::data_objects::DiagonalAlignment::TOP_LEFT;
  hipdnn_flatbuffers_sdk::data_objects::DataType mma_core_mode = hipdnn_flatbuffers_sdk::data_objects::DataType::UNSET;
  hipdnn_flatbuffers_sdk::data_objects::AttentionImplementation implementation = hipdnn_flatbuffers_sdk::data_objects::AttentionImplementation::AUTO;
};

struct SdpaAttributes FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
  typedef SdpaAttributesT NativeTableType;
  typedef SdpaAttributesBuilder Builder;
  enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
    VT_Q_TENSOR_UID = 4,
    VT_K_TENSOR_UID = 6,
    VT_V_TENSOR_UID = 8,
    VT_O_TENSOR_UID = 10,
    VT_ATTN_MASK_TENSOR_UID = 12,
    VT_SCALE_TENSOR_UID = 14,
    VT_SEQ_LEN_Q_TENSOR_UID = 16,
    VT_SEQ_LEN_KV_TENSOR_UID = 18,
    VT_SEED_TENSOR_UID = 20,
    VT_OFFSET_TENSOR_UID = 22,
    VT_DROPOUT_MASK_TENSOR_UID = 24,
    VT_DROPOUT_SCALE_TENSOR_UID = 26,
    VT_PAGE_TABLE_K_TENSOR_UID = 28,
    VT_PAGE_TABLE_V_TENSOR_UID = 30,
    VT_BLOCK_MASK_TENSOR_UID = 32,
    VT_SINK_TOKEN_TENSOR_UID = 34,
    VT_DESCALE_Q_TENSOR_UID = 36,
    VT_DESCALE_K_TENSOR_UID = 38,
    VT_DESCALE_V_TENSOR_UID = 40,
    VT_DESCALE_S_TENSOR_UID = 42,
    VT_SCALE_S_TENSOR_UID = 44,
    VT_SCALE_O_TENSOR_UID = 46,
    VT_STATS_TENSOR_UID = 48,
    VT_MAX_TENSOR_UID = 50,
    VT_SUM_EXP_TENSOR_UID = 52,
    VT_RNG_DUMP_TENSOR_UID = 54,
    VT_AMAX_S_TENSOR_UID = 56,
    VT_AMAX_O_TENSOR_UID = 58,
    VT_GENERATE_STATS = 60,
    VT_ALIBI_MASK = 62,
    VT_PADDING_MASK = 64,
    VT_CAUSAL_MASK = 66,
    VT_CAUSAL_MASK_BOTTOM_RIGHT = 68,
    VT_DROPOUT_PROBABILITY = 70,
    VT_ATTN_SCALE_VALUE = 72,
    VT_LEFT_BOUND = 74,
    VT_RIGHT_BOUND = 76,
    VT_MAX_SEQ_LEN_KV = 78,
    VT_DIAGONAL_ALIGNMENT = 80,
    VT_MMA_CORE_MODE = 82,
    VT_IMPLEMENTATION = 84
  };
  int64_t q_tensor_uid() const {
    return GetField<int64_t>(VT_Q_TENSOR_UID, 0);
  }
  bool mutate_q_tensor_uid(int64_t _q_tensor_uid = 0) {
    return SetField<int64_t>(VT_Q_TENSOR_UID, _q_tensor_uid, 0);
  }
  int64_t k_tensor_uid() const {
    return GetField<int64_t>(VT_K_TENSOR_UID, 0);
  }
  bool mutate_k_tensor_uid(int64_t _k_tensor_uid = 0) {
    return SetField<int64_t>(VT_K_TENSOR_UID, _k_tensor_uid, 0);
  }
  int64_t v_tensor_uid() const {
    return GetField<int64_t>(VT_V_TENSOR_UID, 0);
  }
  bool mutate_v_tensor_uid(int64_t _v_tensor_uid = 0) {
    return SetField<int64_t>(VT_V_TENSOR_UID, _v_tensor_uid, 0);
  }
  int64_t o_tensor_uid() const {
    return GetField<int64_t>(VT_O_TENSOR_UID, 0);
  }
  bool mutate_o_tensor_uid(int64_t _o_tensor_uid = 0) {
    return SetField<int64_t>(VT_O_TENSOR_UID, _o_tensor_uid, 0);
  }
  ::flatbuffers::Optional<int64_t> attn_mask_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_ATTN_MASK_TENSOR_UID);
  }
  bool mutate_attn_mask_tensor_uid(int64_t _attn_mask_tensor_uid) {
    return SetField<int64_t>(VT_ATTN_MASK_TENSOR_UID, _attn_mask_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> scale_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_SCALE_TENSOR_UID);
  }
  bool mutate_scale_tensor_uid(int64_t _scale_tensor_uid) {
    return SetField<int64_t>(VT_SCALE_TENSOR_UID, _scale_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> seq_len_q_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_SEQ_LEN_Q_TENSOR_UID);
  }
  bool mutate_seq_len_q_tensor_uid(int64_t _seq_len_q_tensor_uid) {
    return SetField<int64_t>(VT_SEQ_LEN_Q_TENSOR_UID, _seq_len_q_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> seq_len_kv_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_SEQ_LEN_KV_TENSOR_UID);
  }
  bool mutate_seq_len_kv_tensor_uid(int64_t _seq_len_kv_tensor_uid) {
    return SetField<int64_t>(VT_SEQ_LEN_KV_TENSOR_UID, _seq_len_kv_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> seed_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_SEED_TENSOR_UID);
  }
  bool mutate_seed_tensor_uid(int64_t _seed_tensor_uid) {
    return SetField<int64_t>(VT_SEED_TENSOR_UID, _seed_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> offset_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_OFFSET_TENSOR_UID);
  }
  bool mutate_offset_tensor_uid(int64_t _offset_tensor_uid) {
    return SetField<int64_t>(VT_OFFSET_TENSOR_UID, _offset_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> dropout_mask_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_DROPOUT_MASK_TENSOR_UID);
  }
  bool mutate_dropout_mask_tensor_uid(int64_t _dropout_mask_tensor_uid) {
    return SetField<int64_t>(VT_DROPOUT_MASK_TENSOR_UID, _dropout_mask_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> dropout_scale_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_DROPOUT_SCALE_TENSOR_UID);
  }
  bool mutate_dropout_scale_tensor_uid(int64_t _dropout_scale_tensor_uid) {
    return SetField<int64_t>(VT_DROPOUT_SCALE_TENSOR_UID, _dropout_scale_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> page_table_k_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_PAGE_TABLE_K_TENSOR_UID);
  }
  bool mutate_page_table_k_tensor_uid(int64_t _page_table_k_tensor_uid) {
    return SetField<int64_t>(VT_PAGE_TABLE_K_TENSOR_UID, _page_table_k_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> page_table_v_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_PAGE_TABLE_V_TENSOR_UID);
  }
  bool mutate_page_table_v_tensor_uid(int64_t _page_table_v_tensor_uid) {
    return SetField<int64_t>(VT_PAGE_TABLE_V_TENSOR_UID, _page_table_v_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> block_mask_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_BLOCK_MASK_TENSOR_UID);
  }
  bool mutate_block_mask_tensor_uid(int64_t _block_mask_tensor_uid) {
    return SetField<int64_t>(VT_BLOCK_MASK_TENSOR_UID, _block_mask_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> sink_token_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_SINK_TOKEN_TENSOR_UID);
  }
  bool mutate_sink_token_tensor_uid(int64_t _sink_token_tensor_uid) {
    return SetField<int64_t>(VT_SINK_TOKEN_TENSOR_UID, _sink_token_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> descale_q_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_DESCALE_Q_TENSOR_UID);
  }
  bool mutate_descale_q_tensor_uid(int64_t _descale_q_tensor_uid) {
    return SetField<int64_t>(VT_DESCALE_Q_TENSOR_UID, _descale_q_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> descale_k_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_DESCALE_K_TENSOR_UID);
  }
  bool mutate_descale_k_tensor_uid(int64_t _descale_k_tensor_uid) {
    return SetField<int64_t>(VT_DESCALE_K_TENSOR_UID, _descale_k_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> descale_v_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_DESCALE_V_TENSOR_UID);
  }
  bool mutate_descale_v_tensor_uid(int64_t _descale_v_tensor_uid) {
    return SetField<int64_t>(VT_DESCALE_V_TENSOR_UID, _descale_v_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> descale_s_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_DESCALE_S_TENSOR_UID);
  }
  bool mutate_descale_s_tensor_uid(int64_t _descale_s_tensor_uid) {
    return SetField<int64_t>(VT_DESCALE_S_TENSOR_UID, _descale_s_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> scale_s_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_SCALE_S_TENSOR_UID);
  }
  bool mutate_scale_s_tensor_uid(int64_t _scale_s_tensor_uid) {
    return SetField<int64_t>(VT_SCALE_S_TENSOR_UID, _scale_s_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> scale_o_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_SCALE_O_TENSOR_UID);
  }
  bool mutate_scale_o_tensor_uid(int64_t _scale_o_tensor_uid) {
    return SetField<int64_t>(VT_SCALE_O_TENSOR_UID, _scale_o_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> stats_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_STATS_TENSOR_UID);
  }
  bool mutate_stats_tensor_uid(int64_t _stats_tensor_uid) {
    return SetField<int64_t>(VT_STATS_TENSOR_UID, _stats_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> max_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_MAX_TENSOR_UID);
  }
  bool mutate_max_tensor_uid(int64_t _max_tensor_uid) {
    return SetField<int64_t>(VT_MAX_TENSOR_UID, _max_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> sum_exp_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_SUM_EXP_TENSOR_UID);
  }
  bool mutate_sum_exp_tensor_uid(int64_t _sum_exp_tensor_uid) {
    return SetField<int64_t>(VT_SUM_EXP_TENSOR_UID, _sum_exp_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> rng_dump_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_RNG_DUMP_TENSOR_UID);
  }
  bool mutate_rng_dump_tensor_uid(int64_t _rng_dump_tensor_uid) {
    return SetField<int64_t>(VT_RNG_DUMP_TENSOR_UID, _rng_dump_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> amax_s_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_AMAX_S_TENSOR_UID);
  }
  bool mutate_amax_s_tensor_uid(int64_t _amax_s_tensor_uid) {
    return SetField<int64_t>(VT_AMAX_S_TENSOR_UID, _amax_s_tensor_uid);
  }
  ::flatbuffers::Optional<int64_t> amax_o_tensor_uid() const {
    return GetOptional<int64_t, int64_t>(VT_AMAX_O_TENSOR_UID);
  }
  bool mutate_amax_o_tensor_uid(int64_t _amax_o_tensor_uid) {
    return SetField<int64_t>(VT_AMAX_O_TENSOR_UID, _amax_o_tensor_uid);
  }
  ::flatbuffers::Optional<bool> generate_stats() const {
    return GetOptional<uint8_t, bool>(VT_GENERATE_STATS);
  }
  bool mutate_generate_stats(bool _generate_stats) {
    return SetField<uint8_t>(VT_GENERATE_STATS, static_cast<uint8_t>(_generate_stats));
  }
  bool alibi_mask() const {
    return GetField<uint8_t>(VT_ALIBI_MASK, 0) != 0;
  }
  bool mutate_alibi_mask(bool _alibi_mask = 0) {
    return SetField<uint8_t>(VT_ALIBI_MASK, static_cast<uint8_t>(_alibi_mask), 0);
  }
  bool padding_mask() const {
    return GetField<uint8_t>(VT_PADDING_MASK, 0) != 0;
  }
  bool mutate_padding_mask(bool _padding_mask = 0) {
    return SetField<uint8_t>(VT_PADDING_MASK, static_cast<uint8_t>(_padding_mask), 0);
  }
  bool causal_mask() const {
    return GetField<uint8_t>(VT_CAUSAL_MASK, 0) != 0;
  }
  bool mutate_causal_mask(bool _causal_mask = 0) {
    return SetField<uint8_t>(VT_CAUSAL_MASK, static_cast<uint8_t>(_causal_mask), 0);
  }
  bool causal_mask_bottom_right() const {
    return GetField<uint8_t>(VT_CAUSAL_MASK_BOTTOM_RIGHT, 0) != 0;
  }
  bool mutate_causal_mask_bottom_right(bool _causal_mask_bottom_right = 0) {
    return SetField<uint8_t>(VT_CAUSAL_MASK_BOTTOM_RIGHT, static_cast<uint8_t>(_causal_mask_bottom_right), 0);
  }
  ::flatbuffers::Optional<float> dropout_probability() const {
    return GetOptional<float, float>(VT_DROPOUT_PROBABILITY);
  }
  bool mutate_dropout_probability(float _dropout_probability) {
    return SetField<float>(VT_DROPOUT_PROBABILITY, _dropout_probability);
  }
  ::flatbuffers::Optional<float> attn_scale_value() const {
    return GetOptional<float, float>(VT_ATTN_SCALE_VALUE);
  }
  bool mutate_attn_scale_value(float _attn_scale_value) {
    return SetField<float>(VT_ATTN_SCALE_VALUE, _attn_scale_value);
  }
  ::flatbuffers::Optional<int64_t> left_bound() const {
    return GetOptional<int64_t, int64_t>(VT_LEFT_BOUND);
  }
  bool mutate_left_bound(int64_t _left_bound) {
    return SetField<int64_t>(VT_LEFT_BOUND, _left_bound);
  }
  ::flatbuffers::Optional<int64_t> right_bound() const {
    return GetOptional<int64_t, int64_t>(VT_RIGHT_BOUND);
  }
  bool mutate_right_bound(int64_t _right_bound) {
    return SetField<int64_t>(VT_RIGHT_BOUND, _right_bound);
  }
  ::flatbuffers::Optional<int32_t> max_seq_len_kv() const {
    return GetOptional<int32_t, int32_t>(VT_MAX_SEQ_LEN_KV);
  }
  bool mutate_max_seq_len_kv(int32_t _max_seq_len_kv) {
    return SetField<int32_t>(VT_MAX_SEQ_LEN_KV, _max_seq_len_kv);
  }
  hipdnn_flatbuffers_sdk::data_objects::DiagonalAlignment diagonal_alignment() const {
    return static_cast<hipdnn_flatbuffers_sdk::data_objects::DiagonalAlignment>(GetField<int8_t>(VT_DIAGONAL_ALIGNMENT, 0));
  }
  bool mutate_diagonal_alignment(hipdnn_flatbuffers_sdk::data_objects::DiagonalAlignment _diagonal_alignment = static_cast<hipdnn_flatbuffers_sdk::data_objects::DiagonalAlignment>(0)) {
    return SetField<int8_t>(VT_DIAGONAL_ALIGNMENT, static_cast<int8_t>(_diagonal_alignment), 0);
  }
  hipdnn_flatbuffers_sdk::data_objects::DataType mma_core_mode() const {
    return static_cast<hipdnn_flatbuffers_sdk::data_objects::DataType>(GetField<int8_t>(VT_MMA_CORE_MODE, 0));
  }
  bool mutate_mma_core_mode(hipdnn_flatbuffers_sdk::data_objects::DataType _mma_core_mode = static_cast<hipdnn_flatbuffers_sdk::data_objects::DataType>(0)) {
    return SetField<int8_t>(VT_MMA_CORE_MODE, static_cast<int8_t>(_mma_core_mode), 0);
  }
  hipdnn_flatbuffers_sdk::data_objects::AttentionImplementation implementation() const {
    return static_cast<hipdnn_flatbuffers_sdk::data_objects::AttentionImplementation>(GetField<int8_t>(VT_IMPLEMENTATION, 0));
  }
  bool mutate_implementation(hipdnn_flatbuffers_sdk::data_objects::AttentionImplementation _implementation = static_cast<hipdnn_flatbuffers_sdk::data_objects::AttentionImplementation>(0)) {
    return SetField<int8_t>(VT_IMPLEMENTATION, static_cast<int8_t>(_implementation), 0);
  }
  bool Verify(::flatbuffers::Verifier &verifier) const {
    return VerifyTableStart(verifier) &&
           VerifyField<int64_t>(verifier, VT_Q_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_K_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_V_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_O_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_ATTN_MASK_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_SCALE_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_SEQ_LEN_Q_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_SEQ_LEN_KV_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_SEED_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_OFFSET_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_DROPOUT_MASK_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_DROPOUT_SCALE_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_PAGE_TABLE_K_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_PAGE_TABLE_V_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_BLOCK_MASK_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_SINK_TOKEN_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_DESCALE_Q_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_DESCALE_K_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_DESCALE_V_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_DESCALE_S_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_SCALE_S_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_SCALE_O_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_STATS_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_MAX_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_SUM_EXP_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_RNG_DUMP_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_AMAX_S_TENSOR_UID, 8) &&
           VerifyField<int64_t>(verifier, VT_AMAX_O_TENSOR_UID, 8) &&
           VerifyField<uint8_t>(verifier, VT_GENERATE_STATS, 1) &&
           VerifyField<uint8_t>(verifier, VT_ALIBI_MASK, 1) &&
           VerifyField<uint8_t>(verifier, VT_PADDING_MASK, 1) &&
           VerifyField<uint8_t>(verifier, VT_CAUSAL_MASK, 1) &&
           VerifyField<uint8_t>(verifier, VT_CAUSAL_MASK_BOTTOM_RIGHT, 1) &&
           VerifyField<float>(verifier, VT_DROPOUT_PROBABILITY, 4) &&
           VerifyField<float>(verifier, VT_ATTN_SCALE_VALUE, 4) &&
           VerifyField<int64_t>(verifier, VT_LEFT_BOUND, 8) &&
           VerifyField<int64_t>(verifier, VT_RIGHT_BOUND, 8) &&
           VerifyField<int32_t>(verifier, VT_MAX_SEQ_LEN_KV, 4) &&
           VerifyField<int8_t>(verifier, VT_DIAGONAL_ALIGNMENT, 1) &&
           VerifyField<int8_t>(verifier, VT_MMA_CORE_MODE, 1) &&
           VerifyField<int8_t>(verifier, VT_IMPLEMENTATION, 1) &&
           verifier.EndTable();
  }
  SdpaAttributesT *UnPack(const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
  void UnPackTo(SdpaAttributesT *_o, const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
  static ::flatbuffers::Offset<SdpaAttributes> Pack(::flatbuffers::FlatBufferBuilder &_fbb, const SdpaAttributesT* _o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);
};

struct SdpaAttributesBuilder {
  typedef SdpaAttributes Table;
  ::flatbuffers::FlatBufferBuilder &fbb_;
  ::flatbuffers::uoffset_t start_;
  void add_q_tensor_uid(int64_t q_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_Q_TENSOR_UID, q_tensor_uid, 0);
  }
  void add_k_tensor_uid(int64_t k_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_K_TENSOR_UID, k_tensor_uid, 0);
  }
  void add_v_tensor_uid(int64_t v_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_V_TENSOR_UID, v_tensor_uid, 0);
  }
  void add_o_tensor_uid(int64_t o_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_O_TENSOR_UID, o_tensor_uid, 0);
  }
  void add_attn_mask_tensor_uid(int64_t attn_mask_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_ATTN_MASK_TENSOR_UID, attn_mask_tensor_uid);
  }
  void add_scale_tensor_uid(int64_t scale_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_SCALE_TENSOR_UID, scale_tensor_uid);
  }
  void add_seq_len_q_tensor_uid(int64_t seq_len_q_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_SEQ_LEN_Q_TENSOR_UID, seq_len_q_tensor_uid);
  }
  void add_seq_len_kv_tensor_uid(int64_t seq_len_kv_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_SEQ_LEN_KV_TENSOR_UID, seq_len_kv_tensor_uid);
  }
  void add_seed_tensor_uid(int64_t seed_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_SEED_TENSOR_UID, seed_tensor_uid);
  }
  void add_offset_tensor_uid(int64_t offset_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_OFFSET_TENSOR_UID, offset_tensor_uid);
  }
  void add_dropout_mask_tensor_uid(int64_t dropout_mask_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_DROPOUT_MASK_TENSOR_UID, dropout_mask_tensor_uid);
  }
  void add_dropout_scale_tensor_uid(int64_t dropout_scale_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_DROPOUT_SCALE_TENSOR_UID, dropout_scale_tensor_uid);
  }
  void add_page_table_k_tensor_uid(int64_t page_table_k_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_PAGE_TABLE_K_TENSOR_UID, page_table_k_tensor_uid);
  }
  void add_page_table_v_tensor_uid(int64_t page_table_v_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_PAGE_TABLE_V_TENSOR_UID, page_table_v_tensor_uid);
  }
  void add_block_mask_tensor_uid(int64_t block_mask_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_BLOCK_MASK_TENSOR_UID, block_mask_tensor_uid);
  }
  void add_sink_token_tensor_uid(int64_t sink_token_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_SINK_TOKEN_TENSOR_UID, sink_token_tensor_uid);
  }
  void add_descale_q_tensor_uid(int64_t descale_q_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_DESCALE_Q_TENSOR_UID, descale_q_tensor_uid);
  }
  void add_descale_k_tensor_uid(int64_t descale_k_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_DESCALE_K_TENSOR_UID, descale_k_tensor_uid);
  }
  void add_descale_v_tensor_uid(int64_t descale_v_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_DESCALE_V_TENSOR_UID, descale_v_tensor_uid);
  }
  void add_descale_s_tensor_uid(int64_t descale_s_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_DESCALE_S_TENSOR_UID, descale_s_tensor_uid);
  }
  void add_scale_s_tensor_uid(int64_t scale_s_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_SCALE_S_TENSOR_UID, scale_s_tensor_uid);
  }
  void add_scale_o_tensor_uid(int64_t scale_o_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_SCALE_O_TENSOR_UID, scale_o_tensor_uid);
  }
  void add_stats_tensor_uid(int64_t stats_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_STATS_TENSOR_UID, stats_tensor_uid);
  }
  void add_max_tensor_uid(int64_t max_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_MAX_TENSOR_UID, max_tensor_uid);
  }
  void add_sum_exp_tensor_uid(int64_t sum_exp_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_SUM_EXP_TENSOR_UID, sum_exp_tensor_uid);
  }
  void add_rng_dump_tensor_uid(int64_t rng_dump_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_RNG_DUMP_TENSOR_UID, rng_dump_tensor_uid);
  }
  void add_amax_s_tensor_uid(int64_t amax_s_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_AMAX_S_TENSOR_UID, amax_s_tensor_uid);
  }
  void add_amax_o_tensor_uid(int64_t amax_o_tensor_uid) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_AMAX_O_TENSOR_UID, amax_o_tensor_uid);
  }
  void add_generate_stats(bool generate_stats) {
    fbb_.AddElement<uint8_t>(SdpaAttributes::VT_GENERATE_STATS, static_cast<uint8_t>(generate_stats));
  }
  void add_alibi_mask(bool alibi_mask) {
    fbb_.AddElement<uint8_t>(SdpaAttributes::VT_ALIBI_MASK, static_cast<uint8_t>(alibi_mask), 0);
  }
  void add_padding_mask(bool padding_mask) {
    fbb_.AddElement<uint8_t>(SdpaAttributes::VT_PADDING_MASK, static_cast<uint8_t>(padding_mask), 0);
  }
  void add_causal_mask(bool causal_mask) {
    fbb_.AddElement<uint8_t>(SdpaAttributes::VT_CAUSAL_MASK, static_cast<uint8_t>(causal_mask), 0);
  }
  void add_causal_mask_bottom_right(bool causal_mask_bottom_right) {
    fbb_.AddElement<uint8_t>(SdpaAttributes::VT_CAUSAL_MASK_BOTTOM_RIGHT, static_cast<uint8_t>(causal_mask_bottom_right), 0);
  }
  void add_dropout_probability(float dropout_probability) {
    fbb_.AddElement<float>(SdpaAttributes::VT_DROPOUT_PROBABILITY, dropout_probability);
  }
  void add_attn_scale_value(float attn_scale_value) {
    fbb_.AddElement<float>(SdpaAttributes::VT_ATTN_SCALE_VALUE, attn_scale_value);
  }
  void add_left_bound(int64_t left_bound) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_LEFT_BOUND, left_bound);
  }
  void add_right_bound(int64_t right_bound) {
    fbb_.AddElement<int64_t>(SdpaAttributes::VT_RIGHT_BOUND, right_bound);
  }
  void add_max_seq_len_kv(int32_t max_seq_len_kv) {
    fbb_.AddElement<int32_t>(SdpaAttributes::VT_MAX_SEQ_LEN_KV, max_seq_len_kv);
  }
  void add_diagonal_alignment(hipdnn_flatbuffers_sdk::data_objects::DiagonalAlignment diagonal_alignment) {
    fbb_.AddElement<int8_t>(SdpaAttributes::VT_DIAGONAL_ALIGNMENT, static_cast<int8_t>(diagonal_alignment), 0);
  }
  void add_mma_core_mode(hipdnn_flatbuffers_sdk::data_objects::DataType mma_core_mode) {
    fbb_.AddElement<int8_t>(SdpaAttributes::VT_MMA_CORE_MODE, static_cast<int8_t>(mma_core_mode), 0);
  }
  void add_implementation(hipdnn_flatbuffers_sdk::data_objects::AttentionImplementation implementation) {
    fbb_.AddElement<int8_t>(SdpaAttributes::VT_IMPLEMENTATION, static_cast<int8_t>(implementation), 0);
  }
  explicit SdpaAttributesBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
        : fbb_(_fbb) {
    start_ = fbb_.StartTable();
  }
  ::flatbuffers::Offset<SdpaAttributes> Finish() {
    const auto end = fbb_.EndTable(start_);
    auto o = ::flatbuffers::Offset<SdpaAttributes>(end);
    return o;
  }
};

inline ::flatbuffers::Offset<SdpaAttributes> CreateSdpaAttributes(
    ::flatbuffers::FlatBufferBuilder &_fbb,
    int64_t q_tensor_uid = 0,
    int64_t k_tensor_uid = 0,
    int64_t v_tensor_uid = 0,
    int64_t o_tensor_uid = 0,
    ::flatbuffers::Optional<int64_t> attn_mask_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> scale_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> seq_len_q_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> seq_len_kv_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> seed_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> offset_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> dropout_mask_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> dropout_scale_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> page_table_k_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> page_table_v_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> block_mask_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> sink_token_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> descale_q_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> descale_k_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> descale_v_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> descale_s_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> scale_s_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> scale_o_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> stats_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> max_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> sum_exp_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> rng_dump_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> amax_s_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> amax_o_tensor_uid = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<bool> generate_stats = ::flatbuffers::nullopt,
    bool alibi_mask = false,
    bool padding_mask = false,
    bool causal_mask = false,
    bool causal_mask_bottom_right = false,
    ::flatbuffers::Optional<float> dropout_probability = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<float> attn_scale_value = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> left_bound = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int64_t> right_bound = ::flatbuffers::nullopt,
    ::flatbuffers::Optional<int32_t> max_seq_len_kv = ::flatbuffers::nullopt,
    hipdnn_flatbuffers_sdk::data_objects::DiagonalAlignment diagonal_alignment = hipdnn_flatbuffers_sdk::data_objects::DiagonalAlignment::TOP_LEFT,
    hipdnn_flatbuffers_sdk::data_objects::DataType mma_core_mode = hipdnn_flatbuffers_sdk::data_objects::DataType::UNSET,
    hipdnn_flatbuffers_sdk::data_objects::AttentionImplementation implementation = hipdnn_flatbuffers_sdk::data_objects::AttentionImplementation::AUTO) {
  SdpaAttributesBuilder builder_(_fbb);
  if(right_bound) { builder_.add_right_bound(*right_bound); }
  if(left_bound) { builder_.add_left_bound(*left_bound); }
  if(amax_o_tensor_uid) { builder_.add_amax_o_tensor_uid(*amax_o_tensor_uid); }
  if(amax_s_tensor_uid) { builder_.add_amax_s_tensor_uid(*amax_s_tensor_uid); }
  if(rng_dump_tensor_uid) { builder_.add_rng_dump_tensor_uid(*rng_dump_tensor_uid); }
  if(sum_exp_tensor_uid) { builder_.add_sum_exp_tensor_uid(*sum_exp_tensor_uid); }
  if(max_tensor_uid) { builder_.add_max_tensor_uid(*max_tensor_uid); }
  if(stats_tensor_uid) { builder_.add_stats_tensor_uid(*stats_tensor_uid); }
  if(scale_o_tensor_uid) { builder_.add_scale_o_tensor_uid(*scale_o_tensor_uid); }
  if(scale_s_tensor_uid) { builder_.add_scale_s_tensor_uid(*scale_s_tensor_uid); }
  if(descale_s_tensor_uid) { builder_.add_descale_s_tensor_uid(*descale_s_tensor_uid); }
  if(descale_v_tensor_uid) { builder_.add_descale_v_tensor_uid(*descale_v_tensor_uid); }
  if(descale_k_tensor_uid) { builder_.add_descale_k_tensor_uid(*descale_k_tensor_uid); }
  if(descale_q_tensor_uid) { builder_.add_descale_q_tensor_uid(*descale_q_tensor_uid); }
  if(sink_token_tensor_uid) { builder_.add_sink_token_tensor_uid(*sink_token_tensor_uid); }
  if(block_mask_tensor_uid) { builder_.add_block_mask_tensor_uid(*block_mask_tensor_uid); }
  if(page_table_v_tensor_uid) { builder_.add_page_table_v_tensor_uid(*page_table_v_tensor_uid); }
  if(page_table_k_tensor_uid) { builder_.add_page_table_k_tensor_uid(*page_table_k_tensor_uid); }
  if(dropout_scale_tensor_uid) { builder_.add_dropout_scale_tensor_uid(*dropout_scale_tensor_uid); }
  if(dropout_mask_tensor_uid) { builder_.add_dropout_mask_tensor_uid(*dropout_mask_tensor_uid); }
  if(offset_tensor_uid) { builder_.add_offset_tensor_uid(*offset_tensor_uid); }
  if(seed_tensor_uid) { builder_.add_seed_tensor_uid(*seed_tensor_uid); }
  if(seq_len_kv_tensor_uid) { builder_.add_seq_len_kv_tensor_uid(*seq_len_kv_tensor_uid); }
  if(seq_len_q_tensor_uid) { builder_.add_seq_len_q_tensor_uid(*seq_len_q_tensor_uid); }
  if(scale_tensor_uid) { builder_.add_scale_tensor_uid(*scale_tensor_uid); }
  if(attn_mask_tensor_uid) { builder_.add_attn_mask_tensor_uid(*attn_mask_tensor_uid); }
  builder_.add_o_tensor_uid(o_tensor_uid);
  builder_.add_v_tensor_uid(v_tensor_uid);
  builder_.add_k_tensor_uid(k_tensor_uid);
  builder_.add_q_tensor_uid(q_tensor_uid);
  if(max_seq_len_kv) { builder_.add_max_seq_len_kv(*max_seq_len_kv); }
  if(attn_scale_value) { builder_.add_attn_scale_value(*attn_scale_value); }
  if(dropout_probability) { builder_.add_dropout_probability(*dropout_probability); }
  builder_.add_implementation(implementation);
  builder_.add_mma_core_mode(mma_core_mode);
  builder_.add_diagonal_alignment(diagonal_alignment);
  builder_.add_causal_mask_bottom_right(causal_mask_bottom_right);
  builder_.add_causal_mask(causal_mask);
  builder_.add_padding_mask(padding_mask);
  builder_.add_alibi_mask(alibi_mask);
  if(generate_stats) { builder_.add_generate_stats(*generate_stats); }
  return builder_.Finish();
}

::flatbuffers::Offset<SdpaAttributes> CreateSdpaAttributes(::flatbuffers::FlatBufferBuilder &_fbb, const SdpaAttributesT *_o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);


inline bool operator==(const SdpaAttributesT &lhs, const SdpaAttributesT &rhs) {
  return
      (lhs.q_tensor_uid == rhs.q_tensor_uid) &&
      (lhs.k_tensor_uid == rhs.k_tensor_uid) &&
      (lhs.v_tensor_uid == rhs.v_tensor_uid) &&
      (lhs.o_tensor_uid == rhs.o_tensor_uid) &&
      (lhs.attn_mask_tensor_uid == rhs.attn_mask_tensor_uid) &&
      (lhs.scale_tensor_uid == rhs.scale_tensor_uid) &&
      (lhs.seq_len_q_tensor_uid == rhs.seq_len_q_tensor_uid) &&
      (lhs.seq_len_kv_tensor_uid == rhs.seq_len_kv_tensor_uid) &&
      (lhs.seed_tensor_uid == rhs.seed_tensor_uid) &&
      (lhs.offset_tensor_uid == rhs.offset_tensor_uid) &&
      (lhs.dropout_mask_tensor_uid == rhs.dropout_mask_tensor_uid) &&
      (lhs.dropout_scale_tensor_uid == rhs.dropout_scale_tensor_uid) &&
      (lhs.page_table_k_tensor_uid == rhs.page_table_k_tensor_uid) &&
      (lhs.page_table_v_tensor_uid == rhs.page_table_v_tensor_uid) &&
      (lhs.block_mask_tensor_uid == rhs.block_mask_tensor_uid) &&
      (lhs.sink_token_tensor_uid == rhs.sink_token_tensor_uid) &&
      (lhs.descale_q_tensor_uid == rhs.descale_q_tensor_uid) &&
      (lhs.descale_k_tensor_uid == rhs.descale_k_tensor_uid) &&
      (lhs.descale_v_tensor_uid == rhs.descale_v_tensor_uid) &&
      (lhs.descale_s_tensor_uid == rhs.descale_s_tensor_uid) &&
      (lhs.scale_s_tensor_uid == rhs.scale_s_tensor_uid) &&
      (lhs.scale_o_tensor_uid == rhs.scale_o_tensor_uid) &&
      (lhs.stats_tensor_uid == rhs.stats_tensor_uid) &&
      (lhs.max_tensor_uid == rhs.max_tensor_uid) &&
      (lhs.sum_exp_tensor_uid == rhs.sum_exp_tensor_uid) &&
      (lhs.rng_dump_tensor_uid == rhs.rng_dump_tensor_uid) &&
      (lhs.amax_s_tensor_uid == rhs.amax_s_tensor_uid) &&
      (lhs.amax_o_tensor_uid == rhs.amax_o_tensor_uid) &&
      (lhs.generate_stats == rhs.generate_stats) &&
      (lhs.alibi_mask == rhs.alibi_mask) &&
      (lhs.padding_mask == rhs.padding_mask) &&
      (lhs.causal_mask == rhs.causal_mask) &&
      (lhs.causal_mask_bottom_right == rhs.causal_mask_bottom_right) &&
      (lhs.dropout_probability == rhs.dropout_probability) &&
      (lhs.attn_scale_value == rhs.attn_scale_value) &&
      (lhs.left_bound == rhs.left_bound) &&
      (lhs.right_bound == rhs.right_bound) &&
      (lhs.max_seq_len_kv == rhs.max_seq_len_kv) &&
      (lhs.diagonal_alignment == rhs.diagonal_alignment) &&
      (lhs.mma_core_mode == rhs.mma_core_mode) &&
      (lhs.implementation == rhs.implementation);
}

inline bool operator!=(const SdpaAttributesT &lhs, const SdpaAttributesT &rhs) {
    return !(lhs == rhs);
}


inline SdpaAttributesT *SdpaAttributes::UnPack(const ::flatbuffers::resolver_function_t *_resolver) const {
  auto _o = std::unique_ptr<SdpaAttributesT>(new SdpaAttributesT());
  UnPackTo(_o.get(), _resolver);
  return _o.release();
}

inline void SdpaAttributes::UnPackTo(SdpaAttributesT *_o, const ::flatbuffers::resolver_function_t *_resolver) const {
  (void)_o;
  (void)_resolver;
  { auto _e = q_tensor_uid(); _o->q_tensor_uid = _e; }
  { auto _e = k_tensor_uid(); _o->k_tensor_uid = _e; }
  { auto _e = v_tensor_uid(); _o->v_tensor_uid = _e; }
  { auto _e = o_tensor_uid(); _o->o_tensor_uid = _e; }
  { auto _e = attn_mask_tensor_uid(); _o->attn_mask_tensor_uid = _e; }
  { auto _e = scale_tensor_uid(); _o->scale_tensor_uid = _e; }
  { auto _e = seq_len_q_tensor_uid(); _o->seq_len_q_tensor_uid = _e; }
  { auto _e = seq_len_kv_tensor_uid(); _o->seq_len_kv_tensor_uid = _e; }
  { auto _e = seed_tensor_uid(); _o->seed_tensor_uid = _e; }
  { auto _e = offset_tensor_uid(); _o->offset_tensor_uid = _e; }
  { auto _e = dropout_mask_tensor_uid(); _o->dropout_mask_tensor_uid = _e; }
  { auto _e = dropout_scale_tensor_uid(); _o->dropout_scale_tensor_uid = _e; }
  { auto _e = page_table_k_tensor_uid(); _o->page_table_k_tensor_uid = _e; }
  { auto _e = page_table_v_tensor_uid(); _o->page_table_v_tensor_uid = _e; }
  { auto _e = block_mask_tensor_uid(); _o->block_mask_tensor_uid = _e; }
  { auto _e = sink_token_tensor_uid(); _o->sink_token_tensor_uid = _e; }
  { auto _e = descale_q_tensor_uid(); _o->descale_q_tensor_uid = _e; }
  { auto _e = descale_k_tensor_uid(); _o->descale_k_tensor_uid = _e; }
  { auto _e = descale_v_tensor_uid(); _o->descale_v_tensor_uid = _e; }
  { auto _e = descale_s_tensor_uid(); _o->descale_s_tensor_uid = _e; }
  { auto _e = scale_s_tensor_uid(); _o->scale_s_tensor_uid = _e; }
  { auto _e = scale_o_tensor_uid(); _o->scale_o_tensor_uid = _e; }
  { auto _e = stats_tensor_uid(); _o->stats_tensor_uid = _e; }
  { auto _e = max_tensor_uid(); _o->max_tensor_uid = _e; }
  { auto _e = sum_exp_tensor_uid(); _o->sum_exp_tensor_uid = _e; }
  { auto _e = rng_dump_tensor_uid(); _o->rng_dump_tensor_uid = _e; }
  { auto _e = amax_s_tensor_uid(); _o->amax_s_tensor_uid = _e; }
  { auto _e = amax_o_tensor_uid(); _o->amax_o_tensor_uid = _e; }
  { auto _e = generate_stats(); _o->generate_stats = _e; }
  { auto _e = alibi_mask(); _o->alibi_mask = _e; }
  { auto _e = padding_mask(); _o->padding_mask = _e; }
  { auto _e = causal_mask(); _o->causal_mask = _e; }
  { auto _e = causal_mask_bottom_right(); _o->causal_mask_bottom_right = _e; }
  { auto _e = dropout_probability(); _o->dropout_probability = _e; }
  { auto _e = attn_scale_value(); _o->attn_scale_value = _e; }
  { auto _e = left_bound(); _o->left_bound = _e; }
  { auto _e = right_bound(); _o->right_bound = _e; }
  { auto _e = max_seq_len_kv(); _o->max_seq_len_kv = _e; }
  { auto _e = diagonal_alignment(); _o->diagonal_alignment = _e; }
  { auto _e = mma_core_mode(); _o->mma_core_mode = _e; }
  { auto _e = implementation(); _o->implementation = _e; }
}

inline ::flatbuffers::Offset<SdpaAttributes> SdpaAttributes::Pack(::flatbuffers::FlatBufferBuilder &_fbb, const SdpaAttributesT* _o, const ::flatbuffers::rehasher_function_t *_rehasher) {
  return CreateSdpaAttributes(_fbb, _o, _rehasher);
}

inline ::flatbuffers::Offset<SdpaAttributes> CreateSdpaAttributes(::flatbuffers::FlatBufferBuilder &_fbb, const SdpaAttributesT *_o, const ::flatbuffers::rehasher_function_t *_rehasher) {
  (void)_rehasher;
  (void)_o;
  struct _VectorArgs { ::flatbuffers::FlatBufferBuilder *__fbb; const SdpaAttributesT* __o; const ::flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
  auto _q_tensor_uid = _o->q_tensor_uid;
  auto _k_tensor_uid = _o->k_tensor_uid;
  auto _v_tensor_uid = _o->v_tensor_uid;
  auto _o_tensor_uid = _o->o_tensor_uid;
  auto _attn_mask_tensor_uid = _o->attn_mask_tensor_uid;
  auto _scale_tensor_uid = _o->scale_tensor_uid;
  auto _seq_len_q_tensor_uid = _o->seq_len_q_tensor_uid;
  auto _seq_len_kv_tensor_uid = _o->seq_len_kv_tensor_uid;
  auto _seed_tensor_uid = _o->seed_tensor_uid;
  auto _offset_tensor_uid = _o->offset_tensor_uid;
  auto _dropout_mask_tensor_uid = _o->dropout_mask_tensor_uid;
  auto _dropout_scale_tensor_uid = _o->dropout_scale_tensor_uid;
  auto _page_table_k_tensor_uid = _o->page_table_k_tensor_uid;
  auto _page_table_v_tensor_uid = _o->page_table_v_tensor_uid;
  auto _block_mask_tensor_uid = _o->block_mask_tensor_uid;
  auto _sink_token_tensor_uid = _o->sink_token_tensor_uid;
  auto _descale_q_tensor_uid = _o->descale_q_tensor_uid;
  auto _descale_k_tensor_uid = _o->descale_k_tensor_uid;
  auto _descale_v_tensor_uid = _o->descale_v_tensor_uid;
  auto _descale_s_tensor_uid = _o->descale_s_tensor_uid;
  auto _scale_s_tensor_uid = _o->scale_s_tensor_uid;
  auto _scale_o_tensor_uid = _o->scale_o_tensor_uid;
  auto _stats_tensor_uid = _o->stats_tensor_uid;
  auto _max_tensor_uid = _o->max_tensor_uid;
  auto _sum_exp_tensor_uid = _o->sum_exp_tensor_uid;
  auto _rng_dump_tensor_uid = _o->rng_dump_tensor_uid;
  auto _amax_s_tensor_uid = _o->amax_s_tensor_uid;
  auto _amax_o_tensor_uid = _o->amax_o_tensor_uid;
  auto _generate_stats = _o->generate_stats;
  auto _alibi_mask = _o->alibi_mask;
  auto _padding_mask = _o->padding_mask;
  auto _causal_mask = _o->causal_mask;
  auto _causal_mask_bottom_right = _o->causal_mask_bottom_right;
  auto _dropout_probability = _o->dropout_probability;
  auto _attn_scale_value = _o->attn_scale_value;
  auto _left_bound = _o->left_bound;
  auto _right_bound = _o->right_bound;
  auto _max_seq_len_kv = _o->max_seq_len_kv;
  auto _diagonal_alignment = _o->diagonal_alignment;
  auto _mma_core_mode = _o->mma_core_mode;
  auto _implementation = _o->implementation;
  return hipdnn_flatbuffers_sdk::data_objects::CreateSdpaAttributes(
      _fbb,
      _q_tensor_uid,
      _k_tensor_uid,
      _v_tensor_uid,
      _o_tensor_uid,
      _attn_mask_tensor_uid,
      _scale_tensor_uid,
      _seq_len_q_tensor_uid,
      _seq_len_kv_tensor_uid,
      _seed_tensor_uid,
      _offset_tensor_uid,
      _dropout_mask_tensor_uid,
      _dropout_scale_tensor_uid,
      _page_table_k_tensor_uid,
      _page_table_v_tensor_uid,
      _block_mask_tensor_uid,
      _sink_token_tensor_uid,
      _descale_q_tensor_uid,
      _descale_k_tensor_uid,
      _descale_v_tensor_uid,
      _descale_s_tensor_uid,
      _scale_s_tensor_uid,
      _scale_o_tensor_uid,
      _stats_tensor_uid,
      _max_tensor_uid,
      _sum_exp_tensor_uid,
      _rng_dump_tensor_uid,
      _amax_s_tensor_uid,
      _amax_o_tensor_uid,
      _generate_stats,
      _alibi_mask,
      _padding_mask,
      _causal_mask,
      _causal_mask_bottom_right,
      _dropout_probability,
      _attn_scale_value,
      _left_bound,
      _right_bound,
      _max_seq_len_kv,
      _diagonal_alignment,
      _mma_core_mode,
      _implementation);
}

}  // namespace data_objects
}  // namespace hipdnn_flatbuffers_sdk

#endif  // FLATBUFFERS_GENERATED_SDPAATTRIBUTES_HIPDNN_FLATBUFFERS_SDK_DATA_OBJECTS_H_
