    def __init__(
        self,
        values: List[int],
        name: str = None,
        symbolic_value: Optional[sympy.Basic] = None,
    ) -> None:
        """Initializes an IntVar.

        Parameters
        ----------
        values : List[int]
            A list of possible values of this dynamic dimension.
            len(values) must be >= 2.

            When len(values) == 2, the values are treated as a lower bound and an upper bound.
            Both upper bound and lower bound are inclusive.
            This is the default use case.

            When len(values) > 2, the first / last values are treated as lower / upper bounds,
            and the other values are used for internal profiling purpose.
            This is a legacy use case.

        name : str, optional
            Name of this dimension, by default None.
            This field must be set for dims which are used by input tensors.

        symbolic_value: sympy.Basic, optional
            The symbolic value for this IntVar. If None is provided, we will generate a symbol for this IntVar.
        """
        super().__init__()
        self._attrs["name"] = name

        if values is None or len(values) < 2:
            raise RuntimeError(
                "IntVar 'values' field must have at least 2 values! values: {}, name: {}".format(
                    values, name
                )
            )
        if min(values) < 0:
            raise RuntimeError(
                "IntVar has < 0 value! values: {}, name: {}".format(values, name)
            )
        self._attrs["values"] = sorted(set(values))
        if len(self._attrs["values"]) == 1:
            self._attrs["symbolic_value"] = self._attrs["values"][0]
            self._attrs["values"] = self._attrs["values"] * 2
        else:
            if symbolic_value is None:
                symbolic_value = symbolic.create_new_symbol(name, values)
                symbolic.store_intvar(symbolic_value.name, self)
            self._attrs["symbolic_value"] = symbolic_value
Initializes an IntVar.

Parameters
----------
values : List[int]
A list of possible values of this dynamic dimension.
len(values) must be >= 2.

When len(values) == 2, the values are treated as a lower bound and an upper bound.
Both upper bound and lower bound are inclusive.
This is the default use case.

When len(values) > 2, the first / last values are treated as lower / upper bounds,
and the other values are used for internal profiling purpose.
This is a legacy use case.

name : str, optional
Name of this dimension, by default None.
This field must be set for dims which are used by input tensors.

symbolic_value: sympy.Basic, optional
The symbolic value for this IntVar. If None is provided, we will generate a symbol for this IntVar.
python/aitemplate/compiler/base.py