#!/usr/bin/python
# -*- coding: utf-8 -*-
# ----------------------------------------------------------------------------------------------------------
# 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.
# ----------------------------------------------------------------------------------------------------------
"""
Op Info
"""
from typing import List
from typing import Optional


class OpInfo:
    """
    OpInfo
    """

    def __init__(self, op_name: str, op_type: str):
        """

        :param op_name:
        :param op_type:
        """
        self._op_name = op_name  # type: str
        self._op_type = op_type  # type: str
        self._pattern = None  # type: Optional[str]
        self._inputs = []  # type: List[dict]
        self._outputs = []  # type: List[dict]
        self._attrs = {}  # type: dict
        self._private_attrs = {} # type: dict
        self._kernel_name = None  # type: Optional[str]
        self._extra_params = {}  # type: dict
        self._precision_mode = None # type: Optional[str]

    @property
    def op_name(self):
        # type: () -> str
        """

        :return:
        """
        return self._op_name

    @property
    def op_type(self):
        # type: () -> str
        """

        :return:
        """
        return self._op_type

    @property
    def pattern(self):
        # type: () -> Optional[str]
        """

        :return:
        """
        return self._pattern

    @pattern.setter
    def pattern(self, pattern):
        # type: (str) -> None
        """

        :param pattern:
        :return:
        """
        self._pattern = pattern

    @property
    def inputs(self):
        # type: () -> List[dict]
        """

        :return:
        """
        return self._inputs

    @inputs.setter
    def inputs(self, inputs):
        # type: (List[dict]) -> None
        """

        :param inputs:
        :return:
        """
        self._inputs = inputs

    @property
    def outputs(self):
        # type: () -> List[dict]
        """

        :return:
        """
        return self._outputs

    @outputs.setter
    def outputs(self, outputs):
        # type: (List[dict]) -> None
        """

        :param outputs:
        :return:
        """
        self._outputs = outputs

    @property
    def attrs(self):
        # type: () -> dict
        """

        :return:
        """
        return self._attrs

    @attrs.setter
    def attrs(self, attrs):
        # type: (dict) -> None
        """

        :param attrs:
        :return:
        """
        self._attrs = attrs

    @property
    def private_attrs(self):
        # type: () -> dict
        """

        :return:
        """
        return self._private_attrs

    @private_attrs.setter
    def private_attrs(self, private_attrs):
        # type: (dict) -> None
        """

        :param private_attrs:
        :return:
        """
        self._private_attrs = private_attrs

    @property
    def kernel_name(self):
        # type: () -> Optional[str]
        """

        :return:
        """
        return self._kernel_name

    @kernel_name.setter
    def kernel_name(self, kernel_name):
        # type: (str) -> None
        """

        :param kernel_name:
        :return:
        """
        self._kernel_name = kernel_name

    @property
    def extra_params(self):
        # type: () -> dict
        """

        :return:
        """
        return self._extra_params

    @extra_params.setter
    def extra_params(self, extra_params):
        # type: (dict) -> None
        """

        :param extra_params:
        :return:
        """
        self._extra_params = extra_params

    @property
    def precision_mode(self):
        # type: () -> Optional[str]
        """

        :return:
        """
        return self._precision_mode

    @precision_mode.setter
    def precision_mode(self, precision_mode):
        # type: (str) -> None
        """

        :param precision_mode:
        :return:
        """
        self._precision_mode = precision_mode