/**
 * Copyright (c) 2025 Huawei Technologies Co., Ltd.
 * This program is free software, you can redistribute it and/or modify it under the terms and conditions of 
 * CANN Open Software License Agreement Version 2.0 (the "License").
 * Please refer to the License for details. You may not use this file except in compliance with the License.
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, 
 * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
 * See LICENSE in the root of the software repository for the full text of the License.
 */

#include "option_supportion_checker.h"

#include "external/ge_common/ge_api_types.h"
#include "common/ge_common/ge_types.h"
#include "framework/common/debug/ge_log.h"
#include "graph/tuning_utils.h"
#include "graph_metadef/graph/ge_context.h"

namespace ge {
// todo llm的option不應該傳給GE,後續刪除
const std::string LLM_OPTION_CLUSTER_INFO = "llm.ClusterInfo";
const std::string LLM_OPTION_ROLE = "llm.Role";
const std::string LLM_OPTION_SYNC_KV_CACHE_WAIT_TIME = "llm.SyncKvCacheWaitTime";
const std::string LLM_OPTION_OUTPUT_MAX_SIZE = "llm.OutputMaxSize";

// 目前有5个白名单,有4个在这个CC文件,还有1个是ir_builder_suppported_options(for aclgrphBuildModel)
namespace ir_option {
// for interface: aclgrphBuildInitialize
const std::set<std::string> ir_builder_global_options = {CORE_TYPE,
  SOC_VERSION,
  VIRTUAL_TYPE,
  BUFFER_OPTIMIZE,
  ENABLE_COMPRESS_WEIGHT,
  COMPRESS_WEIGHT_CONF,
  SPARSITY,
  PRECISION_MODE,
  PRECISION_MODE_V2,
  ALLOW_HF32,
  TUNE_DEVICE_IDS,
  EXEC_DISABLE_REUSED_MEMORY,
  AUTO_TUNE_MODE,
  ENABLE_SINGLE_STREAM,
  AC_PARALLEL_ENABLE,
  AICORE_NUM,
  FUSION_SWITCH_FILE,
  ENABLE_SMALL_CHANNEL,
  OP_SELECT_IMPL_MODE,
  OPTYPELIST_FOR_IMPLMODE,
  OP_DEBUG_LEVEL,
  DEBUG_DIR,
  OP_COMPILER_CACHE_DIR,
  OP_COMPILER_CACHE_MODE,
  MODIFY_MIXLIST,
  COMPRESSION_OPTIMIZE_CONF,
  OP_DEBUG_CONFIG,
  "op_debug_option",
  DETERMINISTIC,
  "ge.deterministicLevel",
  CLUSTER_CONFIG,
  OPTION_HOST_ENV_OS,
  OPTION_HOST_ENV_CPU,
  OPTION_SCREEN_PRINT_MODE,
  TILING_SCHEDULE_OPTIMIZE,
  GRAPH_MAX_PARALLEL_MODEL_NUM,
  // UT
  OPTION_BUILD_GRAPH_MODE,
  OPTION_EXEC_HCCL_FLAG,
  JIT_COMPILE,
  OP_PRECISION_MODE,
  VARIABLE_MEMORY_MAX_SIZE,
  // 不清楚場景
  OPTION_EXEC_IS_USEHCOM,
  OPTION_EXEC_IS_USEHVD,
  OPTION_EXEC_POD_NAME,
  OPTION_EXEC_DEPLOY_MODE,
  GE_AICPU_FLAG,
  OPTION_EXEC_EXTERN_PLUGIN_PATH,
  OPTION_EXEC_ENABLE_INCRE_BUILD,
  OPTION_EXEC_PROFILING_FPPONIT_OPTIONS,
  OPTION_EXEC_PROFILING_BPPONIT_OPTIONS,
  OPTION_EXEC_ATOMIC_FLAG,
  OPTION_EXEC_OPTIMIZE_SHAPE,
  OPTION_EXEC_REUSE_ZERO_COPY_MEMORY,
  OPTION_EXEC_CM_CHIEF_IP,
  OPTION_EXEC_CM_CHIEF_PORT,
  OPTION_EXEC_CM_CHIEF_DEVICE,
  OPTION_EXEC_CM_WORKER_IP,
  OPTION_EXEC_CM_WORKER_SIZE,
  OPTION_NAME_MAP,
  OPTION_EXEC_PS_ID,
  OPTION_EXEC_CLUSTER_SPEC,
  OPTION_EXEC_RANK_TABLE_ADDR,
  OPTION_EXEC_ROLE_TABLE_ADDR,
  OPTION_EXEC_RANK_TABLE_LEN,
  OPTION_EXEC_ROLE_TABLE_LEN,
  OPTION_EXEC_WORKER_NUM,
  OPTION_EXECUTE_TIMES,
  OPTION_ES_MAX_REMOTEOP_NUM_PER_STREAM,
  OPTION_EXEC_RANK_MAP,
  OPTION_HCCL_COMPILER_OFFLINE,
  STREAM_NUM,
  HEAD_STREAM,
  PERF_LEVEL,
  ENCRYPT_MODE,
  EK_FILE,
  CERT_FILE,
  HW_KEY_FILE,
  PRIVATE_KEY_FILE,
  FRAMEWORK_TYPE,
  CALIBRATION_CONF_FILE,
  COMPRESS_FLAG,
  SINGLE_OP_FLAG,
  TRAIN_FLAG,
  RUN_FLAG,
  LOCAL_FMKOP_FLAG,
  TBE_PLUGIN_PATH_FLAG,
  DDK_VERSION_FLAG,
  GE_FE_FLAG,
  FUSION_TENSOR_SIZE,
  L1_FUSION,
  SAVE_ORIGINAL_MODEL,
  ORIGINAL_MODEL_FILE,
  OPTION_GE_MAX_DUMP_FILE_NUM,
  OPTION_GE_MAX_DUMP_FILE_SIZE,
  OPTION_GE_MAX_DUMP_OP_NUM,
  ENABLE_PRINT_OP_PASS,
  STATUS_CHECK,
  DISPLAY_MODEL_INFO,
  FILE_CONSTANT_PATH,
  EVENT,
  "ge.exec.isInShardGraph",
  BUILD_STEP,
  "ge.opsProtoLibPath",
  "ge.exec.static_model_addr_fixed",
  "ge.fpCeilingMode",
  "ge.func_bin_path",
  "ge.swapSpaceNodes",
  "ge.shape_generalized",
  "ge.satuateMode",
  "ge.hardwareInfo",
  "opt_module.fe",
  "ge.exec.float_overflow_mode",
  "saturation",
  "inf_nan",
  "ge.exec.hccl_tailing_optimize",
  RESOURCE_CONFIG_PATH,
  RECOMPUTE,
  GRAPH_SLICE_MODE,
  OPTION_EXEC_RANK_TABLE,
  OPTION_EXEC_HCOM_GROUPLIST,
  OPTION_EXEC_HCOM_RANK_MAPPING,
  OPTION_NUMA_CONFIG,
  OPTION_EXEC_FORMAT_MODEL,
  OPTION_STATIC_MODEL_OPS_LOWER_LIMIT,
  OPTION_EXEC_INPUT_FUSION_SIZE,
  OO_LEVEL,
  OO_CONSTANT_FOLDING,
  OO_DEAD_CODE_ELIMINATION,
  OPTION_EXPORT_COMPILE_STAT,
  OPTION_VARIABLE_USE_1G_HUGE_PAGE,
  configure_option::INPUT_BATCH_CPY,
  OPTIMIZATION_SWITCH,
  OPTION_OUTPUT_REUSE_INPUT_MEM_INDEXES
};
}  // namespace ir_option

// for GEInitialize
const std::set<std::string> ge_init_global_options = {OPTION_GRAPH_RUN_MODE,
  OPTION_EXEC_DEVICE_ID,
  PRECISION_MODE,
  PRECISION_MODE_V2,
  MODIFY_MIXLIST,
  SOC_VERSION,
  OPTION_EXEC_PROFILING_MODE,
  OPTION_EXEC_PROFILING_OPTIONS,
  OPTION_EXEC_JOB_ID,
  AUTO_TUNE_MODE,
  OPTION_EXEC_ENABLE_DUMP,
  OPTION_EXEC_DUMP_PATH,
  OPTION_EXEC_DUMP_STEP,
  OPTION_EXEC_DUMP_MODE,
  OPTION_EXEC_DUMP_DATA,
  OPTION_EXEC_DUMP_LAYER,
  OPTION_EXEC_ENABLE_DUMP_DEBUG,
  OPTION_EXEC_DUMP_DEBUG_MODE,
  OPTION_EXEC_DISABLE_REUSED_MEMORY,
  GRAPH_MEMORY_MAX_SIZE,
  VARIABLE_MEMORY_MAX_SIZE,
  OPTION_EXEC_VARIABLE_ACC,
  OPTION_EXEC_RANK_TABLE_FILE,
  OPTION_EXEC_RANK_ID,
  OP_DEBUG_LEVEL,
  OPTION_EXEC_OP_DEBUG_CONFIG,
  OP_COMPILER_CACHE_MODE,
  OP_COMPILER_CACHE_DIR,
  DEBUG_DIR,
  MDL_BANK_PATH_FLAG,
  OP_BANK_PATH_FLAG,
  OP_PRECISION_MODE,
  OP_SELECT_IMPL_MODE,
  OPTYPELIST_FOR_IMPLMODE,
  ENABLE_SPARSE_MATRIX_WEIGHT,
  JIT_COMPILE,
  OPTION_EXEC_STREAM_SYNC_TIMEOUT,
  OPTION_EXEC_EVENT_SYNC_TIMEOUT,
  OPTION_EXECUTE_TIMES,
  STATIC_MEMORY_POLICY,
  OPTION_FEATURE_BASE_REFRESHABLE,
  OPTION_CONST_LIFECYCLE,
  OPTION_DISABLE_OPTIMIZATIONS,
  AC_PARALLEL_ENABLE,
  TILING_SCHEDULE_OPTIMIZE,
  GRAPH_MAX_PARALLEL_MODEL_NUM,
  ENABLE_SINGLE_STREAM,
  OPTION_HOST_SCHEDULING_MAX_THRESHOLD,
  OPTION_EXEC_GRAPH_EXEC_TIMEOUT,
  OP_WAIT_TIMEOUT,
  OP_EXECUTE_TIMEOUT,
  OPTION_EXEC_ENABLE_ENGINE_PARALLEL,
  "ge.exec.engineParallelConfigPath",
  OPTION_MOMORY_POOL_THRESHOLD,
  ALLOW_HF32,
  // TFA2.x
  DETERMINISTIC,
  "ge.deterministicLevel",
  ATOMIC_CLEAN_POLICY,
  OP_DEBUG_CONFIG,
  "op_debug_option",
  OPTION_EXEC_ENABLE_EXCEPTION_DUMP,
  CUSTOMIZE_DTYPES,
  FUSION_SWITCH_FILE,
  HCOM_PARALLEL,
  ENABLE_SMALL_CHANNEL,
  STREAM_MAX_PARALLEL_NUM,
  OPTION_EXEC_ENABLE_TAILING_OPTIMIZATION,
  "enable_scope_fusion_passes",
  OPTION_JOB_TYPE,
  OPTION_TUNINGPATH,
  OPTION_AOE_CONFIG_FILE,
  OPTION_EXEC_CM_CHIEF_IP,
  OPTION_EXEC_CM_CHIEF_PORT,
  OPTION_EXEC_CM_CHIEF_DEVICE,
  OPTION_EXEC_CM_WORKER_IP,
  OPTION_EXEC_CM_WORKER_SIZE,
  INSERT_OP_FILE,
  DYNAMIC_NODE_TYPE,
  kDynamicDims,
  INPUT_SHAPE_RANGE,
  JIT_COMPILE,
  EXTERNAL_WEIGHT,
  OPTION_EXEC_OVERFLOW,
  GRAPH_SLICE_MODE,
  "ge.evaluateGraphResourceMode",
  // TF1.x
  OPTION_DEVICE_TYPE,
  OPTION_DISTRIBUTE_CONFIG,
  OPTION_EXEC_ENABLE_SCOPE_FUSION_PASSES,
  OPTION_EXEC_HCCL_EXECUTE_TIMEOUT,
  OP_WAIT_TIMEOUT,
  OP_EXECUTE_TIMEOUT,
  OPTION_EXEC_LOGICAL_DEVICE_CLUSTER_DEPLOY_MODE,
  OPTION_EXEC_LOGICAL_DEVICE_ID,
  OPTION_EXEC_MODEL_DEPLOY_MODE,
  HCOM_MULTI_MODE,
  OPTION_HCCL_ALGORITHM,
  OPTION_EXEC_MODEL_DEPLOY_DEVICELIST,
  OPTION_ES_CLUSTER_CONFIG,
  // ST
  OPTION_HOST_ENV_OS,
  OPTION_HOST_ENV_CPU,
  OPTION_EXEC_DEPLOY_MODE,
  OUTPUT_NODE_NAME,
  OPTION_EXEC_IS_USEHCOM,
  RUN_FLAG,
  OPTION_EXEC_IS_USEHVD,
  OPTION_EXEC_POD_NAME,
  // 兼容TFA1.x,後續刪除
  "dump_data",
  "static_memory_policy",
  "ge.exec.customizeDdtypes",
  "aoe_config_file",
  OPTION_EXEC_SESSION_ID,
  "op_debug_level",
  "precision_mode",
  "precision_mode_v2",
  "profiling_mode",
  "profiling_options",
  "graph_run_mode",
  "enable_exception_dump",
  "aoe_mode",
  "work_path",
  "op_compiler_cache_mode",
  "op_compiler_cache_dir",
  "debug_dir",
  "device_type",
  "soc_config",
  "op_wait_timeout",
  "op_execute_timeout",
  "customize_dtypes",
  "op_debug_config",
  "graph_exec_timeout",
  "logical_device_cluster_deploy_mode",
  "logical_device_id",
  "model_deploy_mode",
  "model_deploy_devicelist",
  "es_cluster_config",
  // rdv
  BUILD_MODE,
  MEMORY_OPTIMIZATION_POLICY,
  OPTION_TOPOSORTING_MODE,
  "rank_table_file",
  "graphType",
  "device_id",
  // llm engine
  LLM_OPTION_CLUSTER_INFO,
  LLM_OPTION_ROLE,
  LLM_OPTION_SYNC_KV_CACHE_WAIT_TIME,
  LLM_OPTION_OUTPUT_MAX_SIZE,
  // 不清楚使用場景
  GE_AICPU_FLAG,
  OPTION_EXEC_EXTERN_PLUGIN_PATH,
  OPTION_EXEC_ENABLE_INCRE_BUILD,
  OPTION_EXEC_PROFILING_FPPONIT_OPTIONS,
  OPTION_EXEC_PROFILING_BPPONIT_OPTIONS,
  OPTION_EXEC_HCCL_FLAG,
  OPTION_EXEC_ATOMIC_FLAG,
  OPTION_EXEC_OPTIMIZE_SHAPE,
  OPTION_EXEC_REUSE_ZERO_COPY_MEMORY,
  OPTION_NAME_MAP,
  OPTION_EXEC_PS_ID,
  OPTION_EXEC_CLUSTER_SPEC,
  OPTION_EXEC_RANK_TABLE_ADDR,
  OPTION_EXEC_ROLE_TABLE_ADDR,
  OPTION_EXEC_RANK_TABLE_LEN,
  OPTION_EXEC_ROLE_TABLE_LEN,
  OPTION_EXEC_WORKER_NUM,
  OPTION_EXECUTE_TIMES,
  OPTION_ES_MAX_REMOTEOP_NUM_PER_STREAM,
  OPTION_EXEC_RANK_MAP,
  OPTION_HCCL_COMPILER_OFFLINE,
  STREAM_NUM,
  HEAD_STREAM,
  PERF_LEVEL,
  ENCRYPT_MODE,
  EK_FILE,
  CERT_FILE,
  HW_KEY_FILE,
  PRIVATE_KEY_FILE,
  FRAMEWORK_TYPE,
  CALIBRATION_CONF_FILE,
  COMPRESS_FLAG,
  SINGLE_OP_FLAG,
  TRAIN_FLAG,
  LOCAL_FMKOP_FLAG,
  TBE_PLUGIN_PATH_FLAG,
  DDK_VERSION_FLAG,
  GE_FE_FLAG,
  FUSION_TENSOR_SIZE,
  L1_FUSION,
  SAVE_ORIGINAL_MODEL,
  ORIGINAL_MODEL_FILE,
  OPTION_GE_MAX_DUMP_FILE_NUM,
  OPTION_GE_MAX_DUMP_FILE_SIZE,
  OPTION_GE_MAX_DUMP_OP_NUM,
  ENABLE_PRINT_OP_PASS,
  STATUS_CHECK,
  DISPLAY_MODEL_INFO,
  FILE_CONSTANT_PATH,
  EVENT,
  "ge.exec.isInShardGraph",
  BUILD_STEP,
  "ge.opsProtoLibPath",
  "ge.exec.static_model_addr_fixed",
  "ge.fpCeilingMode",
  "ge.func_bin_path",
  "ge.swapSpaceNodes",
  "ge.shape_generalized",
  "ge.satuateMode",
  "ge.hardwareInfo",
  "opt_module.fe",
  "ge.exec.float_overflow_mode",
  "saturation",
  "inf_nan",
  "ge.exec.hccl_tailing_optimize",
  RESOURCE_CONFIG_PATH,
  RECOMPUTE,
  OPTION_EXEC_RANK_TABLE,
  OPTION_EXEC_HCOM_GROUPLIST,
  OPTION_EXEC_HCOM_RANK_MAPPING,
  OPTION_NUMA_CONFIG,
  OPTION_EXEC_FORMAT_MODEL,
  OPTION_BUILD_GRAPH_MODE,
  OPTION_STATIC_MODEL_OPS_LOWER_LIMIT,
  AICORE_NUM,
  OPTION_EXEC_INPUT_FUSION_SIZE,
  OPTION_EXEC_DYNAMIC_GRAPH_PARALLEL_MODE,
  OO_LEVEL,
  OO_CONSTANT_FOLDING,
  OO_DEAD_CODE_ELIMINATION,
  OPTION_EXPORT_COMPILE_STAT,
  OPTION_VARIABLE_USE_1G_HUGE_PAGE,
  configure_option::INPUT_BATCH_CPY,
  OPTION_ALLOW_MULTI_GRAPH_PARALLEL_COMPILE,
  OPTIMIZATION_SWITCH
};

const std::set<std::string> session_options = {OPTION_GRAPH_RUN_MODE,
  OPTION_EXEC_DEVICE_ID,
  INPUT_SHAPE,
  kDynamicDims,
  DYNAMIC_NODE_TYPE,
  PRECISION_MODE,
  PRECISION_MODE_V2,
  MODIFY_MIXLIST,
  SOC_VERSION,
  OPTION_EXEC_PROFILING_MODE,
  OPTION_EXEC_PROFILING_OPTIONS,
  OPTION_EXEC_JOB_ID,
  AUTO_TUNE_MODE,
  OPTION_EXEC_DISABLE_REUSED_MEMORY,
  GRAPH_MEMORY_MAX_SIZE,
  VARIABLE_MEMORY_MAX_SIZE,
  OPTION_EXEC_VARIABLE_ACC,
  OPTION_EXEC_RANK_TABLE_FILE,
  OPTION_EXEC_RANK_ID,
  OP_DEBUG_LEVEL,
  "op_debug_option",
  OP_COMPILER_CACHE_MODE,
  OP_COMPILER_CACHE_DIR,
  DEBUG_DIR,
  MDL_BANK_PATH_FLAG,
  OP_BANK_PATH_FLAG,
  ENABLE_SPARSE_MATRIX_WEIGHT,
  CUSTOMIZE_DTYPES,
  ATOMIC_CLEAN_POLICY,
  JIT_COMPILE,
  EXTERNAL_WEIGHT,
  OPTION_EXEC_STREAM_SYNC_TIMEOUT,
  OPTION_EXEC_EVENT_SYNC_TIMEOUT,
  OPTION_EXECUTE_TIMES,
  OPTION_GRAPH_COMPILER_CACHE_DIR,
  OPTION_FEATURE_BASE_REFRESHABLE,
  OPTION_CONST_LIFECYCLE,
  OPTION_DISABLE_OPTIMIZATIONS,
  OPTION_HOST_SCHEDULING_MAX_THRESHOLD,
  OP_WAIT_TIMEOUT,
  OP_EXECUTE_TIMEOUT,
  OPTION_FLOW_GRAPH_MEMORY_MAX_SIZE,
  OPTION_EXEC_ENABLE_ENGINE_PARALLEL,
  "ge.exec.engineParallelConfigPath",
  "ge.compile_dynamic_mode",
  GRAPH_MAX_PARALLEL_MODEL_NUM,
  // TF1.x
  OPTION_SESSION_DEVICE_ID,
  FUSION_SWITCH_FILE,
  BUFFER_OPTIMIZE,
  HCOM_PARALLEL,
  OP_PRECISION_MODE,
  STREAM_MAX_PARALLEL_NUM,
  OPTION_EXEC_ENABLE_TAILING_OPTIMIZATION,
  ENABLE_SMALL_CHANNEL,
  OPTION_EXEC_HCCL_EXECUTE_TIMEOUT,
  ENABLE_COMPRESS_WEIGHT,
  COMPRESS_WEIGHT_CONF,
  OPTION_EXEC_VARIABLE_ACC,
  OP_SELECT_IMPL_MODE,
  OPTYPELIST_FOR_IMPLMODE,
  MEMORY_OPTIMIZATION_POLICY,
  AC_PARALLEL_ENABLE,
  INSERT_OP_FILE,
  GRAPH_SLICE_MODE,
  OPTION_HCCL_ALGORITHM,
  "ge.evaluateGraphResourceMode",
  OPTION_TOPOSORTING_MODE,
  // 兼容TFA1.x,後續刪除
  "dump_layer",
  "atomic_clean_policy",
  "memory_optimization_policy",
  "insert_op_file",
  "jit_compile",
  "external_weight",
  "topo_sorting_mode",
  // UT
  OPTION_EXEC_DEPLOY_MODE,
  OPTION_EXEC_GRAPH_EXEC_TIMEOUT,
  OPTION_EXEC_MODEL_DEPLOY_MODE,
  OPTION_EXEC_MODEL_DEPLOY_DEVICELIST,
  RECOMPUTE,
  BUILD_MODE,
  BUILD_STEP,
  "ge.hardwareInfo",
  OPTION_EXEC_ENABLE_FUSION,
  OPTION_EXEC_CLUSTER_SPEC,
  RESOURCE_CONFIG_PATH,
  ENABLE_SINGLE_STREAM,
  RUN_FLAG,
  FILE_CONSTANT_PATH,
  OPTION_EXEC_LOGICAL_DEVICE_CLUSTER_DEPLOY_MODE,
  OPTION_EXEC_PLACEMENT,
  OPTION_EXEC_LOGICAL_DEVICE_ID,
  OUTPUT_MAX_SIZE,
  EVENT,
  "ge.swapSpaceNodes",
  OPTION_GRAPH_KEY,
  OPTION_INPUT_REUSE_MEM_INDEXES,
  OPTION_OUTPUT_REUSE_MEM_INDEXES,
  OPTION_GRAPH_IO_MEM_ALLOC_MODE,
  OPTION_EXEC_IS_USEHCOM,
  OPTION_EXEC_IS_USEHVD,
  OPTION_EXEC_POD_NAME,
  OPTION_EXEC_SESSION_ID,
  // rdv
  ENABLE_PRINT_OP_PASS,
  STATIC_MEMORY_POLICY,
  // llm engine
  LLM_OPTION_CLUSTER_INFO,
  LLM_OPTION_ROLE,
  LLM_OPTION_SYNC_KV_CACHE_WAIT_TIME,
  LLM_OPTION_OUTPUT_MAX_SIZE,
  // 不清楚使用場景
  GE_AICPU_FLAG,
  OPTION_EXEC_EXTERN_PLUGIN_PATH,
  OPTION_EXEC_ENABLE_INCRE_BUILD,
  OPTION_EXEC_PROFILING_FPPONIT_OPTIONS,
  OPTION_EXEC_PROFILING_BPPONIT_OPTIONS,
  OPTION_EXEC_HCCL_FLAG,
  OPTION_EXEC_ATOMIC_FLAG,
  OPTION_EXEC_OPTIMIZE_SHAPE,
  OPTION_EXEC_REUSE_ZERO_COPY_MEMORY,
  OPTION_EXEC_CM_CHIEF_IP,
  OPTION_EXEC_CM_CHIEF_PORT,
  OPTION_EXEC_CM_CHIEF_DEVICE,
  OPTION_EXEC_CM_WORKER_IP,
  OPTION_EXEC_CM_WORKER_SIZE,
  OPTION_NAME_MAP,
  OPTION_EXEC_PS_ID,
  OPTION_EXEC_RANK_TABLE_ADDR,
  OPTION_EXEC_ROLE_TABLE_ADDR,
  OPTION_EXEC_RANK_TABLE_LEN,
  OPTION_EXEC_ROLE_TABLE_LEN,
  OPTION_EXEC_WORKER_NUM,
  OPTION_EXECUTE_TIMES,
  OPTION_ES_MAX_REMOTEOP_NUM_PER_STREAM,
  OPTION_EXEC_RANK_MAP,
  OPTION_HCCL_COMPILER_OFFLINE,
  STREAM_NUM,
  HEAD_STREAM,
  PERF_LEVEL,
  ENCRYPT_MODE,
  EK_FILE,
  CERT_FILE,
  HW_KEY_FILE,
  PRIVATE_KEY_FILE,
  FRAMEWORK_TYPE,
  CALIBRATION_CONF_FILE,
  COMPRESS_FLAG,
  SINGLE_OP_FLAG,
  TRAIN_FLAG,
  LOCAL_FMKOP_FLAG,
  TBE_PLUGIN_PATH_FLAG,
  DDK_VERSION_FLAG,
  GE_FE_FLAG,
  FUSION_TENSOR_SIZE,
  L1_FUSION,
  SAVE_ORIGINAL_MODEL,
  ORIGINAL_MODEL_FILE,
  OPTION_GE_MAX_DUMP_FILE_NUM,
  OPTION_GE_MAX_DUMP_FILE_SIZE,
  OPTION_GE_MAX_DUMP_OP_NUM,
  STATUS_CHECK,
  DISPLAY_MODEL_INFO,
  FILE_CONSTANT_PATH,
  "ge.exec.isInShardGraph",
  "ge.opsProtoLibPath",
  "ge.exec.static_model_addr_fixed",
  "ge.fpCeilingMode",
  "ge.func_bin_path",
  "ge.shape_generalized",
  "ge.satuateMode",
  "opt_module.fe",
  "ge.exec.float_overflow_mode",
  "saturation",
  "inf_nan",
  "ge.exec.hccl_tailing_optimize",
  "ge.autoMultistreamParallelMode",
  "ge.inputPlacement",
  OPTION_EXEC_RANK_TABLE,
  OPTION_EXEC_HCOM_GROUPLIST,
  OPTION_EXEC_HCOM_RANK_MAPPING,
  OPTION_NUMA_CONFIG,
  OPTION_EXEC_FORMAT_MODEL,
  OPTION_BUILD_GRAPH_MODE,
  OPTION_STATIC_MODEL_OPS_LOWER_LIMIT,
  AICORE_NUM,
  OPTION_EXEC_INPUT_FUSION_SIZE,
  OPTION_EXEC_DYNAMIC_GRAPH_PARALLEL_MODE,
  OPTION_ALL_TENSOR_NOT_EMPTY,
  OO_LEVEL,
  OO_CONSTANT_FOLDING,
  OO_DEAD_CODE_ELIMINATION,
  OPTION_EXPORT_COMPILE_STAT,
  OPTION_VARIABLE_USE_1G_HUGE_PAGE,
  configure_option::INPUT_BATCH_CPY,
  OPTION_ALLOW_MULTI_GRAPH_PARALLEL_COMPILE,
  OPTIMIZATION_SWITCH,
  OUTPUT_DATATYPE,
  TILING_SCHEDULE_OPTIMIZE
};

const std::set<std::string> graph_options = {OPTION_EXEC_DEVICE_ID,
  INPUT_SHAPE,
  kDynamicDims,
  DYNAMIC_NODE_TYPE,
  PRECISION_MODE,
  PRECISION_MODE_V2,
  MODIFY_MIXLIST,
  SOC_VERSION,
  OPTION_EXEC_PROFILING_MODE,
  OPTION_EXEC_PROFILING_OPTIONS,
  OPTION_EXEC_JOB_ID,
  AUTO_TUNE_MODE,
  OPTION_EXEC_DISABLE_REUSED_MEMORY,
  GRAPH_MEMORY_MAX_SIZE,
  VARIABLE_MEMORY_MAX_SIZE,
  OPTION_EXEC_VARIABLE_ACC,
  OPTION_EXEC_RANK_TABLE_FILE,
  OPTION_EXEC_RANK_ID,
  OP_DEBUG_LEVEL,
  "op_debug_option",
  OP_COMPILER_CACHE_MODE,
  OP_COMPILER_CACHE_DIR,
  DEBUG_DIR,
  MDL_BANK_PATH_FLAG,
  OP_BANK_PATH_FLAG,
  OPTION_EXEC_DYNAMIC_EXECUTE_MODE,
  OPTION_EXEC_DATA_INPUTS_SHAPE_RANGE,
  SHAPE_GENERALIZED_BUILD_MODE,
  ENABLE_SPARSE_MATRIX_WEIGHT,
  OPTION_GRAPH_KEY,
  OPTION_FEATURE_BASE_REFRESHABLE,
  OPTION_CONST_LIFECYCLE,
  OPTION_INPUT_REUSE_MEM_INDEXES,
  OPTION_OUTPUT_REUSE_MEM_INDEXES,
  OPTION_DISABLE_OPTIMIZATIONS,
  OPTION_HOST_SCHEDULING_MAX_THRESHOLD,
  OPTION_EXEC_MODEL_DEPLOY_MODE,
  OPTION_EXEC_MODEL_DEPLOY_DEVICELIST,
  OPTION_EXEC_GRAPH_EXEC_TIMEOUT,
  OP_WAIT_TIMEOUT,
  OP_EXECUTE_TIMEOUT,
  OPTION_EXEC_LOGICAL_DEVICE_CLUSTER_DEPLOY_MODE,
  OPTION_EXEC_LOGICAL_DEVICE_ID,
  OPTION_EXEC_ENABLE_FUSION,
  OPTION_DATAFLOW_DEPLOY_INFO_PATH,
  OUTPUT_MAX_SIZE,
  GRAPH_MAX_PARALLEL_MODEL_NUM,
  // TF1.x
  "ge.graphLevelSat",
  "iterations_per_loop",
  JIT_COMPILE,
  OPTION_EXEC_DYNAMIC_INPUT,
  OPTION_EXEC_PLACEMENT,
  RECOMPUTE,
  OPTION_MAX_KEY_NUM,
  OPTION_EMBEDDING_DIM,
  "ge.use_counter_filter",
  OPTION_IS_VAR_INIT_GRAPH,
  OPTION_EXEC_OVERFLOW,
  OPTION_EXEC_ENABLE_COPY_OUTPUT_ADDR,
  INPUT_FORMAT,
  OPTION_GRAPH_IO_MEM_ALLOC_MODE,
  BUILD_MODE,
  // 兼容TFA1.x,後續刪除
  "jit_compile",
  // UT
  OPTION_GRAPH_RUN_MODE,
  OUTPUT_NODE_NAME,
  ATOMIC_CLEAN_POLICY,
  BUFFER_OPTIMIZE,
  CORE_TYPE,
  OPTION_EXEC_ENABLE_TAILING_OPTIMIZATION,
  RUN_FLAG,
  MEMORY_OPTIMIZATION_POLICY,
  EXCLUDE_ENGINES,
  OPTION_TUNINGPATH,
  "ge.hardwareInfo",
  OPTION_TOPOSORTING_MODE,
  STREAM_MAX_PARALLEL_NUM,
  BUILD_STEP,
  OPTION_EXEC_CLUSTER_SPEC,
  ENABLE_SINGLE_STREAM,
  HCOM_PARALLEL,
  RESOURCE_CONFIG_PATH,
  EVENT,
  FILE_CONSTANT_PATH,
  "ge.swapSpaceNodes",
  OPTION_STATIC_MODEL_OPS_LOWER_LIMIT,
  AC_PARALLEL_ENABLE,
  // llm engine
  LLM_OPTION_CLUSTER_INFO,
  LLM_OPTION_ROLE,
  LLM_OPTION_SYNC_KV_CACHE_WAIT_TIME,
  LLM_OPTION_OUTPUT_MAX_SIZE,
  // 不清楚場景
  OPTION_EXEC_IS_USEHCOM,
  OPTION_EXEC_IS_USEHVD,
  OPTION_EXEC_POD_NAME,
  OPTION_EXEC_DEPLOY_MODE,
  GE_AICPU_FLAG,
  OPTION_EXEC_EXTERN_PLUGIN_PATH,
  OPTION_EXEC_ENABLE_INCRE_BUILD,
  OPTION_EXEC_PROFILING_FPPONIT_OPTIONS,
  OPTION_EXEC_PROFILING_BPPONIT_OPTIONS,
  OPTION_EXEC_HCCL_FLAG,
  OPTION_EXEC_ATOMIC_FLAG,
  OPTION_EXEC_OPTIMIZE_SHAPE,
  OPTION_EXEC_REUSE_ZERO_COPY_MEMORY,
  OPTION_EXEC_CM_CHIEF_IP,
  OPTION_EXEC_CM_CHIEF_PORT,
  OPTION_EXEC_CM_CHIEF_DEVICE,
  OPTION_EXEC_CM_WORKER_IP,
  OPTION_EXEC_CM_WORKER_SIZE,
  OPTION_NAME_MAP,
  OPTION_EXEC_PS_ID,
  OPTION_EXEC_RANK_TABLE_ADDR,
  OPTION_EXEC_ROLE_TABLE_ADDR,
  OPTION_EXEC_RANK_TABLE_LEN,
  OPTION_EXEC_ROLE_TABLE_LEN,
  OPTION_EXEC_WORKER_NUM,
  OPTION_EXECUTE_TIMES,
  OPTION_ES_MAX_REMOTEOP_NUM_PER_STREAM,
  OPTION_EXEC_RANK_MAP,
  OPTION_HCCL_COMPILER_OFFLINE,
  STREAM_NUM,
  HEAD_STREAM,
  PERF_LEVEL,
  ENCRYPT_MODE,
  EK_FILE,
  CERT_FILE,
  HW_KEY_FILE,
  PRIVATE_KEY_FILE,
  FRAMEWORK_TYPE,
  CALIBRATION_CONF_FILE,
  COMPRESS_FLAG,
  SINGLE_OP_FLAG,
  TRAIN_FLAG,
  LOCAL_FMKOP_FLAG,
  TBE_PLUGIN_PATH_FLAG,
  DDK_VERSION_FLAG,
  GE_FE_FLAG,
  FUSION_TENSOR_SIZE,
  L1_FUSION,
  SAVE_ORIGINAL_MODEL,
  ORIGINAL_MODEL_FILE,
  OPTION_GE_MAX_DUMP_FILE_NUM,
  OPTION_GE_MAX_DUMP_FILE_SIZE,
  OPTION_GE_MAX_DUMP_OP_NUM,
  ENABLE_PRINT_OP_PASS,
  STATUS_CHECK,
  DISPLAY_MODEL_INFO,
  FILE_CONSTANT_PATH,
  "ge.exec.isInShardGraph",
  "ge.opsProtoLibPath",
  "ge.exec.static_model_addr_fixed",
  "ge.fpCeilingMode",
  "ge.func_bin_path",
  "ge.shape_generalized",
  "ge.satuateMode",
  "opt_module.fe",
  "ge.exec.float_overflow_mode",
  "saturation",
  "inf_nan",
  "ge.exec.hccl_tailing_optimize",
  "ge.autoMultistreamParallelMode",
  GRAPH_SLICE_MODE,
  OPTION_EXEC_RANK_TABLE,
  OPTION_EXEC_HCOM_GROUPLIST,
  OPTION_EXEC_HCOM_RANK_MAPPING,
  OPTION_NUMA_CONFIG,
  OPTION_BUILD_GRAPH_MODE,
  OPTION_EXEC_FORMAT_MODEL,
  AICORE_NUM,
  OPTION_EXEC_INPUT_FUSION_SIZE,
  OPTION_EXEC_DYNAMIC_GRAPH_PARALLEL_MODE,
  OO_LEVEL,
  OO_CONSTANT_FOLDING,
  OO_DEAD_CODE_ELIMINATION,
  OPTION_EXPORT_COMPILE_STAT,
  OPTION_ALL_TENSOR_NOT_EMPTY,
  OPTION_EXEC_HOST_INPUT_INDEXES,
  "ge.inputHintShape",
  configure_option::INPUT_BATCH_CPY,
  OPTIMIZATION_SWITCH,
  OUTPUT_DATATYPE,
  OPTION_OUTPUT_REUSE_INPUT_MEM_INDEXES,
  TILING_SCHEDULE_OPTIMIZE
};

static Status CheckSupportedOptions(const std::map<std::string, std::string> &input_options,
  const std::set<std::string> &supported_options, const std::string &level) {
  bool find = false;
  for (const auto &element : input_options) {
    if (supported_options.count(element.first) <= 0) {
        GELOGW("[Check][Options] unsupported option(%s) by %s level, Please check!",
          element.first.c_str(), level.c_str());
        find = true;
    }
  }
  return find ? FAILED : SUCCESS;
}
Status IrbuildCheckSupportedGlobalOptions(const std::map<std::string, std::string> &input_options) {
    return CheckSupportedOptions(input_options, ir_option::ir_builder_global_options, "global");
}

Status GEAPICheckSupportedGlobalOptions(const std::map<std::string, std::string> &input_options) {
    return CheckSupportedOptions(input_options, ge_init_global_options, "global");
}

Status GEAPICheckSupportedSessionOptions(const std::map<std::string, std::string> &input_options) {
    return CheckSupportedOptions(input_options, session_options, "session");
}

Status GEAPICheckSupportedGraphOptions(const std::map<std::string, std::string> &input_options) {
    return CheckSupportedOptions(input_options, graph_options, "graph");
}

// 获取所有ge option参数名
const std::unordered_set<std::string> &GetAllGeOptionNames() {
  static const std::unordered_set<std::string> ge_option_set = []{
    std::unordered_set<std::string> tmp_set(graph_options.cbegin(), graph_options.cend());
    tmp_set.insert(session_options.cbegin(), session_options.cend());
    tmp_set.insert(ge_init_global_options.cbegin(), ge_init_global_options.cend());
    tmp_set.insert(ir_option::ir_builder_global_options.cbegin(),
             ir_option::ir_builder_global_options.cend());
    return tmp_set;
  }();
  return ge_option_set;
}

Status CheckAllowParallelCompile(const std::map<std::string, std::string> &options) {
  const auto &value_iter = options.find(OPTION_ALLOW_MULTI_GRAPH_PARALLEL_COMPILE);
  std::string parallel_option;
  (void)ge::GetContext().GetOption(OPTION_ALLOW_MULTI_GRAPH_PARALLEL_COMPILE, parallel_option);
  const bool parallel_compile = ((value_iter != options.end()) && (value_iter->second == "1")) ||
                                (parallel_option == "1");
  const auto &var_iter = options.find(ge::OPTION_EXEC_VARIABLE_ACC);
  std::string var_acc_option;
  (void)ge::GetContext().GetOption(ge::OPTION_EXEC_VARIABLE_ACC, var_acc_option);
  const bool variable_acc = (((var_iter != options.end()) && (var_iter->second == "True"))) ||
                            (var_acc_option == "True");
  if (parallel_compile && variable_acc) {
    (void)REPORT_PREDEFINED_ERR_MSG(
        "E10001", std::vector<const char *>({"parameter", "value", "reason"}),
        std::vector<const char *>({ge::OPTION_EXEC_VARIABLE_ACC, "True",
        "The options ge.AllowMultiGraphParallelCompile and ge.exec.variable_acc cannot both enabled simultaneously."}));
    GELOGE(UNSUPPORTED, "The options ge.AllowMultiGraphParallelCompile and ge.exec.variable_acc cannot both enabled"
        " simultaneously.");
    return ge::UNSUPPORTED;
  }
  return ge::SUCCESS;
}
}