    def __init__(
        self,
        shape: List[IntVar],
        name: Optional[str] = None,
        src_ops: Iterable[Node] = None,
        dst_ops: Iterable[Node] = None,
        dtype: str = "float16",
        is_input: bool = False,
        is_output: bool = False,
        value: Any = None,
        is_view_of: Any = None,
        is_internal_constant: bool = False,
        skip_constant_folding: bool = False,
        check_nan_and_inf: bool = False,
        check_outputs: bool = False,
        original_name: str = None,
    ) -> None:
        """Initializes a Tensor.

        Parameters
        ----------
        shape : List[IntVar]
            Shape of this Tensor.
        name : str, optional
            Name of this Tensor. By default, it's None.
        src_ops : Iterable[Node], optional
            Source operators of this Tensor which write to this Tensor.
            By default, it's an empty set.
        dst_ops : Iterable[Node], optional
            Destination operators of this Tensor which take this Tensor as
            one of their inputs.
            By default, it's an empty set.
        dtype : str, optional
            Date type of this Tensor. By default, it's "float16".
        is_input : bool, optional
            Whether this Tensor is an input Tensor of a graph.
            Note that constant Tensors (e.g. weights) are NOT input Tensors.
        is_output : bool, optional
            Whether this Tensor is an output Tensor of a graph.
        value : Any, optional
            The value of this Tensor. When value is set and shape is an
            empty list, this Tensor is used to represent a number.
        is_view_of : Any, optional
            Whether this Tensor is a view of another Tensor.
        is_internal_constant: bool, optional
            Whether this constant tensor could be modified.
        skip_constant_folding: bool, optional
            Whether this tensor participates in constant folding.
        check_nan_and_inf : bool, optional
            Whether or not to check this tensor is nan or inf during runtime.
        check_outputs : bool, optional
            Whether or not to print this tensor's value out during runtime.
        original_name : str, optional
            Original name of this tensor before making it AIT friendly
        """
        super().__init__()
        self._attrs["shape"] = self._convert_shape(shape)
        self._attrs["name"] = name
        self._attrs["src_ops"] = StableSet(src_ops)
        self._attrs["dst_ops"] = StableSet(dst_ops)
        self._attrs["dtype"] = dtype
        self._attrs["is_output"] = is_output
        self._attrs["is_input"] = is_input
        self._attrs["is_param"] = False
        self._attrs["is_internal_constant"] = is_internal_constant
        self._attrs["skip_constant_folding"] = skip_constant_folding

        # True if this is an internal tensor that aliases an output through
        # a view. Set up in mark_param_tensor
        self._attrs["has_output_aliases"] = False

        # For special views. When an output is a view of an input/constant/other
        # output, this attribute points to that view. Note that this is not the
        # same as is_view_of if the output is a view of a view. This is set up
        # in the mark_param_tensor graph pass.
        self._attrs["external_tensor"] = None

        # link to original tensor if this tensor is a view
        self._attrs["is_view_of"] = is_view_of

        if is_view_of:
            self._attrs["dtype"] = is_view_of._attrs["dtype"]

        self._attrs["value"] = value
        src_deps = [src_op._attrs["depth"] for src_op in self._attrs["src_ops"]]
        self._attrs["depth"] = max(src_deps) + 1 if len(src_deps) > 0 else 0

        # Offset into internal memory slab, set by memory planning
        self._attrs["offset"] = None

        # Data to be bound for constant folding. See _bind_data.
        self._attrs["data"] = None

        self._attrs["constant_folding_output_idx"] = None

        self._attrs["check_nan_and_inf"] = check_nan_and_inf
        self._attrs["check_outputs"] = check_outputs
        self._attrs["original_name"] = original_name
Initializes a Tensor.

Parameters
----------
shape : List[IntVar]
Shape of this Tensor.
name : str, optional
Name of this Tensor. By default, it's None.
src_ops : Iterable[Node], optional
Source operators of this Tensor which write to this Tensor.
By default, it's an empty set.
dst_ops : Iterable[Node], optional
Destination operators of this Tensor which take this Tensor as
one of their inputs.
By default, it's an empty set.
dtype : str, optional
Date type of this Tensor. By default, it's "float16".
is_input : bool, optional
Whether this Tensor is an input Tensor of a graph.
Note that constant Tensors (e.g. weights) are NOT input Tensors.
is_output : bool, optional
Whether this Tensor is an output Tensor of a graph.
value : Any, optional
The value of this Tensor. When value is set and shape is an
empty list, this Tensor is used to represent a number.
is_view_of : Any, optional
Whether this Tensor is a view of another Tensor.
is_internal_constant: bool, optional
Whether this constant tensor could be modified.
skip_constant_folding: bool, optional
Whether this tensor participates in constant folding.
check_nan_and_inf : bool, optional
Whether or not to check this tensor is nan or inf during runtime.
check_outputs : bool, optional
Whether or not to print this tensor's value out during runtime.
original_name : str, optional
Original name of this tensor before making it AIT friendly
python/aitemplate/compiler/base.py