code: def __init__(self, fn, signature, constants=None, attrs=None) -> None:
      self.fn = fn
      self.ext = "ttir"
      self.name = fn.__name__
      self.signature = signature
      self.constants = constants
      self.attrs = attrs
      if isinstance(self.signature, str):
          self.signature = {
              k: v.strip()
              for k, v in enumerate(self.signature.split(","))
          }
      if self.constants is None:
          self.constants = dict()
      if self.attrs is None:
          self.attrs = AttrsDescriptor()
  
imports: from __future__ import annotations
  import hashlib
  import json
  from .._C.libtriton import get_env_vars, ir
  from ..backends import backends
  from ..None import __version__
  from ..runtime.autotuner import OutOfResources
  from ..runtime.cache import get_cache_manager
  from ..runtime.driver import driver
  from ..backends.nvidia.compiler import InfoFromBackendForTensorMap
  from dataclasses import dataclass
  from .code_generator import ast_to_ttir
  from pathlib import Path
  import re
  import functools
  import os
label_desc: Use image node_id 1 to create a new ASTSource object  with example: obj = ASTSource(fn, signature, constants, attrs)