# -------------------------------------------------------------------------
# Copyright (c) 2025 Huawei Technologies Co., Ltd.
# This file is part of the MindStudio project.
#
# MindStudio is licensed under Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#
#    http://license.coscl.org.cn/MulanPSL2
#
# 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 FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.
# -------------------------------------------------------------------------

from msconfig.meta_config import MetaConfig


class ProfConditionConfig(MetaConfig):
    DATA = [
        {
            "id": "condition_common_1",
            "type": "formula",
            "left": ["channel"],
            "right": 0,
            "formula": "{0}%16",
            "cmp": "!="
        },
        {
            "id": "condition_common_2",
            "type": "formula",
            "left": ["channel"],
            "right": 0,
            "formula": "{0}%32",
            "cmp": "!="
        },
        {
            "id": "condition_common_3",
            "type": "formula",
            "left": ["height", "width"],
            "right": 0,
            "formula": "({0}*{1})%16",
            "cmp": "!="
        },
        {
            "id": "condition_common_6",
            "type": "formula",
            "left": ["batch"],
            "right": 0,
            "formula": "{0}%16",
            "cmp": "!="
        },
        {
            "id": "condition_block_dim_1",
            "type": "formula",
            "left": ["block_dim", "core_num"],
            "right": 1,
            "formula": "{0}/{1}",
            "cmp": "<"
        },
        {
            "id": "condition_block_dim_2",
            "type": "formula",
            "left": ["block_dim"],
            "right": 0,
            "formula": "{0}&({0}-1)",
            "cmp": "!="
        },
        {
            "id": "condition_block_dim_3",
            "type": "formula",
            "left": ["block_dim", "core_num"],
            "right": 0,
            "formula": "{0}%{1}",
            "cmp": "!="
        },
        {
            "id": "condition_transData_1",
            "type": "normal",
            "left": "op_type",
            "right": "TransData",
            "cmp": "=="
        },
        {
            "id": "condition_transData_2",
            "dependency": "condition_transData_1",
            "type": "count",
            "threshold": 2,
            "cmp": ">"
        },
        {
            "id": "condition_memory_workspace_1",
            "type": "normal",
            "left": "memory_workspace",
            "right": 0,
            "cmp": ">"
        },
        {
            "id": "condition_wait_time_1",
            "type": "normal",
            "left": "task_wait_time",
            "right": 10,
            "cmp": ">"
        },
        {
            "id": "condition_wait_time_2",
            "dependency": "condition_wait_time_1",
            "type": "accumulate",
            "accumulate": ["task_wait_time"],
            "compare": ["task_duration", "task_wait_time"],
            "threshold": 0.03,
            "cmp": ">"
        },
        {
            "id": "condition_aicpu_1",
            "type": "normal",
            "left": "task_type",
            "right": "AI_CPU",
            "cmp": "=="
        },
        {
            "id": "condition_memory_bound_1",
            "type": "normal",
            "left": "memory_bound",
            "right": 1,
            "cmp": ">"
        },
        {
            "id": "condition_memory_bound_2",
            "dependency": "condition_memory_bound_1",
            "type": "accumulate",
            "accumulate": ["task_duration"],
            "compare": ["task_duration"],
            "threshold": 0.5,
            "cmp": ">"
        },
        {
            "id": "condition_vector_bound_1",
            "type": "normal",
            "left": "vector_bound",
            "right": 1,
            "cmp": ">"
        },
        {
            "id": "condition_vector_ratio_1",
            "type": "normal",
            "left": "vec_ratio",
            "right": 0.8,
            "cmp": "<"
        },
        {
            "id": "condition_vector_ratio_2",
            "type": "normal",
            "left": "vec_ratio",
            "right": 0.8,
            "cmp": ">"
        },
        {
            "id": "condition_cube_ratio_1",
            "type": "normal",
            "left": "mac_ratio",
            "right": 0.8,
            "cmp": "<"
        },
        {
            "id": "condition_cube_ratio_2",
            "type": "normal",
            "left": "mac_ratio",
            "right": 0,
            "cmp": ">"
        },
        {
            "id": "condition_scalar_ratio_1",
            "type": "normal",
            "left": "scalar_ratio",
            "right": 0.8,
            "cmp": ">"
        },
        {
            "id": "condition_vec_bankgroup_cflt_ratio_1",
            "type": "normal",
            "left": "vec_bankgroup_cflt_ratio",
            "right": 0.04,
            "cmp": ">"
        },
        {
            "id": "condition_vec_bank_cflt_ratio_1",
            "type": "normal",
            "left": "vec_bank_cflt_ratio",
            "right": 0.04,
            "cmp": ">"
        },
        {
            "id": "condition_task_duration_1",
            "type": "normal",
            "left": "task_duration",
            "right": 20,
            "cmp": ">"
        },
        {
            "id": "condition_int64_1",
            "type": "normal",
            "left": "input_data_types",
            "right": "INT64",
            "cmp": "contain"
        },
        {
            "id": "condition_strided_slice_grad_1",
            "type": "normal",
            "left": "op_name",
            "right": "StridedSliceGrad",
            "cmp": "contain"
        },
        {
            "id": "condition_ai_cpu_parallelism_1",
            "type": "formula",
            "left": ["AI CPU Execution Time(us)", "AI Core Execution Time(us)",
                     "Concurrent AI Core and AI CPU Execution Time(us)"],
            "right": 0.05,
            "formula": "{0}/({0}+{1}+{2})",
            "cmp": ">"
        },
        {
            "id": "condition_cube_affinity_1",
            "type": "formula",
            "left": ["Cube Utilization", "Vector Utilization", "Scalar Utilization", "MTE Utilization"],
            "right": 0.5,
            "formula": "{0}/({0}+{1}+{2}+{3})",
            "cmp": ">="
        },
        {
            "id": "condition_cube_affinity_2",
            "type": "formula",
            "left": ["Cube Utilization", "Vector Utilization", "Scalar Utilization", "MTE Utilization"],
            "right": 0.5,
            "formula": "{0}/({0}+{1}+{2}+{3})",
            "cmp": "<"
        }
    ]

    def __init__(self):
        self.support_parser = False