Skip to content

Abc

Attribute dataclass

Attribute()

Bases: ABC, Printable


              flowchart TD
              kirin.ir.attrs.abc.Attribute[Attribute]
              kirin.print.printable.Printable[Printable]

                              kirin.print.printable.Printable --> kirin.ir.attrs.abc.Attribute
                


              click kirin.ir.attrs.abc.Attribute href "" "kirin.ir.attrs.abc.Attribute"
              click kirin.print.printable.Printable href "" "kirin.print.printable.Printable"
            

ABC for compile-time values. All attributes are hashable and thus need to implement the __hash__ method.

Pretty Printing

This object is pretty printable via .print() method.

dialect class-attribute

dialect: Optional[Dialect] = field(
    default=None, init=False, repr=False
)

Dialect of the attribute. (default: None)

name class-attribute

name: str = field(init=False, repr=False)

Name of the attribute in printing and other text format.

traits class-attribute

traits: frozenset[Trait[Attribute]] = field(
    default=frozenset(), init=False, repr=False
)

Set of Attribute traits.

get_trait

get_trait(trait: type[TraitType]) -> Optional[TraitType]

Get the trait of the attribute.

Parameters:

Name Type Description Default
trait type[Trait]

the trait to get

required

Returns:

Type Description
Optional[TraitType]

Optional[Trait]: the trait if found, None otherwise

Source code in src/kirin/ir/attrs/abc.py
78
79
80
81
82
83
84
85
86
87
88
89
90
91
def get_trait(self, trait: type[TraitType]) -> Optional[TraitType]:
    """Get the trait of the attribute.

    Args:
        trait (type[Trait]): the trait to get

    Returns:
        Optional[Trait]: the trait if found, None otherwise
    """
    for t in self.traits:
        if isinstance(t, trait):
            return t

    return None

has_trait classmethod

has_trait(trait_type: type[Trait[Attribute]]) -> bool

Check if the Statement has a specific trait.

Parameters:

Name Type Description Default
trait_type type[Trait]

The type of trait to check for.

required

Returns:

Name Type Description
bool bool

True if the class has the specified trait, False otherwise.

Source code in src/kirin/ir/attrs/abc.py
61
62
63
64
65
66
67
68
69
70
71
72
73
74
@classmethod
def has_trait(cls, trait_type: type[Trait["Attribute"]]) -> bool:
    """Check if the Statement has a specific trait.

    Args:
        trait_type (type[Trait]): The type of trait to check for.

    Returns:
        bool: True if the class has the specified trait, False otherwise.
    """
    for trait in cls.traits:
        if isinstance(trait, trait_type):
            return True
    return False

AttributeMeta

Bases: ABCMeta


              flowchart TD
              kirin.ir.attrs.abc.AttributeMeta[AttributeMeta]

              

              click kirin.ir.attrs.abc.AttributeMeta href "" "kirin.ir.attrs.abc.AttributeMeta"
            

Metaclass for attributes.

LatticeAttributeMeta

Bases: LatticeMeta, AttributeMeta


              flowchart TD
              kirin.ir.attrs.abc.LatticeAttributeMeta[LatticeAttributeMeta]
              kirin.lattice.abc.LatticeMeta[LatticeMeta]
              kirin.ir.attrs.abc.AttributeMeta[AttributeMeta]

                              kirin.lattice.abc.LatticeMeta --> kirin.ir.attrs.abc.LatticeAttributeMeta
                
                kirin.ir.attrs.abc.AttributeMeta --> kirin.ir.attrs.abc.LatticeAttributeMeta
                


              click kirin.ir.attrs.abc.LatticeAttributeMeta href "" "kirin.ir.attrs.abc.LatticeAttributeMeta"
              click kirin.lattice.abc.LatticeMeta href "" "kirin.lattice.abc.LatticeMeta"
              click kirin.ir.attrs.abc.AttributeMeta href "" "kirin.ir.attrs.abc.AttributeMeta"
            

Metaclass for lattice attributes.

SingletonLatticeAttributeMeta

SingletonLatticeAttributeMeta(name, bases, attrs)

Bases: LatticeAttributeMeta, SingletonMeta


              flowchart TD
              kirin.ir.attrs.abc.SingletonLatticeAttributeMeta[SingletonLatticeAttributeMeta]
              kirin.ir.attrs.abc.LatticeAttributeMeta[LatticeAttributeMeta]
              kirin.lattice.abc.SingletonMeta[SingletonMeta]
              kirin.lattice.abc.LatticeMeta[LatticeMeta]
              kirin.ir.attrs.abc.AttributeMeta[AttributeMeta]

                              kirin.ir.attrs.abc.LatticeAttributeMeta --> kirin.ir.attrs.abc.SingletonLatticeAttributeMeta
                                kirin.lattice.abc.LatticeMeta --> kirin.ir.attrs.abc.LatticeAttributeMeta
                
                kirin.ir.attrs.abc.AttributeMeta --> kirin.ir.attrs.abc.LatticeAttributeMeta
                

                kirin.lattice.abc.SingletonMeta --> kirin.ir.attrs.abc.SingletonLatticeAttributeMeta
                                kirin.lattice.abc.LatticeMeta --> kirin.lattice.abc.SingletonMeta
                



              click kirin.ir.attrs.abc.SingletonLatticeAttributeMeta href "" "kirin.ir.attrs.abc.SingletonLatticeAttributeMeta"
              click kirin.ir.attrs.abc.LatticeAttributeMeta href "" "kirin.ir.attrs.abc.LatticeAttributeMeta"
              click kirin.lattice.abc.SingletonMeta href "" "kirin.lattice.abc.SingletonMeta"
              click kirin.lattice.abc.LatticeMeta href "" "kirin.lattice.abc.LatticeMeta"
              click kirin.ir.attrs.abc.AttributeMeta href "" "kirin.ir.attrs.abc.AttributeMeta"
            

Metaclass for singleton lattice attributes.

Source code in src/kirin/lattice/abc.py
16
17
18
def __init__(cls, name, bases, attrs):
    super().__init__(name, bases, attrs)
    cls._instance = None