Skip to content

Lattice

Lattice for constant analysis.

Bottom dataclass

Bottom()

Bases: Result


              flowchart TD
              kirin.analysis.const.lattice.Bottom[Bottom]
              kirin.analysis.const.lattice.Result[Result]
              kirin.ir.attrs.abc.Attribute[Attribute]
              kirin.print.printable.Printable[Printable]
              kirin.lattice.mixin.IsSubsetEqMixin[IsSubsetEqMixin]
              kirin.lattice.mixin.SimpleJoinMixin[SimpleJoinMixin]
              kirin.lattice.mixin.SimpleMeetMixin[SimpleMeetMixin]
              kirin.lattice.abc.BoundedLattice[BoundedLattice]
              kirin.lattice.abc.Lattice[Lattice]
              kirin.analysis.const._visitor._ElemVisitor[_ElemVisitor]

                              kirin.analysis.const.lattice.Result --> kirin.analysis.const.lattice.Bottom
                                kirin.ir.attrs.abc.Attribute --> kirin.analysis.const.lattice.Result
                                kirin.print.printable.Printable --> kirin.ir.attrs.abc.Attribute
                

                kirin.lattice.mixin.IsSubsetEqMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.IsSubsetEqMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.mixin.SimpleJoinMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.SimpleJoinMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.mixin.SimpleMeetMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.SimpleMeetMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.abc.BoundedLattice --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                

                kirin.analysis.const._visitor._ElemVisitor --> kirin.analysis.const.lattice.Result
                



              click kirin.analysis.const.lattice.Bottom href "" "kirin.analysis.const.lattice.Bottom"
              click kirin.analysis.const.lattice.Result href "" "kirin.analysis.const.lattice.Result"
              click kirin.ir.attrs.abc.Attribute href "" "kirin.ir.attrs.abc.Attribute"
              click kirin.print.printable.Printable href "" "kirin.print.printable.Printable"
              click kirin.lattice.mixin.IsSubsetEqMixin href "" "kirin.lattice.mixin.IsSubsetEqMixin"
              click kirin.lattice.mixin.SimpleJoinMixin href "" "kirin.lattice.mixin.SimpleJoinMixin"
              click kirin.lattice.mixin.SimpleMeetMixin href "" "kirin.lattice.mixin.SimpleMeetMixin"
              click kirin.lattice.abc.BoundedLattice href "" "kirin.lattice.abc.BoundedLattice"
              click kirin.lattice.abc.Lattice href "" "kirin.lattice.abc.Lattice"
              click kirin.analysis.const._visitor._ElemVisitor href "" "kirin.analysis.const._visitor._ElemVisitor"
            

Bottom element of the lattice.

is_subseteq

is_subseteq(other: Result) -> bool

Subseteq operation.

Source code in src/kirin/analysis/const/lattice.py
68
69
def is_subseteq(self, other: Result) -> bool:
    return True

PartialConst dataclass

PartialConst()

Bases: Result


              flowchart TD
              kirin.analysis.const.lattice.PartialConst[PartialConst]
              kirin.analysis.const.lattice.Result[Result]
              kirin.ir.attrs.abc.Attribute[Attribute]
              kirin.print.printable.Printable[Printable]
              kirin.lattice.mixin.IsSubsetEqMixin[IsSubsetEqMixin]
              kirin.lattice.mixin.SimpleJoinMixin[SimpleJoinMixin]
              kirin.lattice.mixin.SimpleMeetMixin[SimpleMeetMixin]
              kirin.lattice.abc.BoundedLattice[BoundedLattice]
              kirin.lattice.abc.Lattice[Lattice]
              kirin.analysis.const._visitor._ElemVisitor[_ElemVisitor]

                              kirin.analysis.const.lattice.Result --> kirin.analysis.const.lattice.PartialConst
                                kirin.ir.attrs.abc.Attribute --> kirin.analysis.const.lattice.Result
                                kirin.print.printable.Printable --> kirin.ir.attrs.abc.Attribute
                

                kirin.lattice.mixin.IsSubsetEqMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.IsSubsetEqMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.mixin.SimpleJoinMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.SimpleJoinMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.mixin.SimpleMeetMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.SimpleMeetMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.abc.BoundedLattice --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                

                kirin.analysis.const._visitor._ElemVisitor --> kirin.analysis.const.lattice.Result
                



              click kirin.analysis.const.lattice.PartialConst href "" "kirin.analysis.const.lattice.PartialConst"
              click kirin.analysis.const.lattice.Result href "" "kirin.analysis.const.lattice.Result"
              click kirin.ir.attrs.abc.Attribute href "" "kirin.ir.attrs.abc.Attribute"
              click kirin.print.printable.Printable href "" "kirin.print.printable.Printable"
              click kirin.lattice.mixin.IsSubsetEqMixin href "" "kirin.lattice.mixin.IsSubsetEqMixin"
              click kirin.lattice.mixin.SimpleJoinMixin href "" "kirin.lattice.mixin.SimpleJoinMixin"
              click kirin.lattice.mixin.SimpleMeetMixin href "" "kirin.lattice.mixin.SimpleMeetMixin"
              click kirin.lattice.abc.BoundedLattice href "" "kirin.lattice.abc.BoundedLattice"
              click kirin.lattice.abc.Lattice href "" "kirin.lattice.abc.Lattice"
              click kirin.analysis.const._visitor._ElemVisitor href "" "kirin.analysis.const._visitor._ElemVisitor"
            

Base class for partial constant values.

PartialLambda dataclass

PartialLambda(
    code: Statement,
    captured: tuple[Result, ...],
    argnames: list[str] | None = None,
)

Bases: PartialConst


              flowchart TD
              kirin.analysis.const.lattice.PartialLambda[PartialLambda]
              kirin.analysis.const.lattice.PartialConst[PartialConst]
              kirin.analysis.const.lattice.Result[Result]
              kirin.ir.attrs.abc.Attribute[Attribute]
              kirin.print.printable.Printable[Printable]
              kirin.lattice.mixin.IsSubsetEqMixin[IsSubsetEqMixin]
              kirin.lattice.mixin.SimpleJoinMixin[SimpleJoinMixin]
              kirin.lattice.mixin.SimpleMeetMixin[SimpleMeetMixin]
              kirin.lattice.abc.BoundedLattice[BoundedLattice]
              kirin.lattice.abc.Lattice[Lattice]
              kirin.analysis.const._visitor._ElemVisitor[_ElemVisitor]

                              kirin.analysis.const.lattice.PartialConst --> kirin.analysis.const.lattice.PartialLambda
                                kirin.analysis.const.lattice.Result --> kirin.analysis.const.lattice.PartialConst
                                kirin.ir.attrs.abc.Attribute --> kirin.analysis.const.lattice.Result
                                kirin.print.printable.Printable --> kirin.ir.attrs.abc.Attribute
                

                kirin.lattice.mixin.IsSubsetEqMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.IsSubsetEqMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.mixin.SimpleJoinMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.SimpleJoinMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.mixin.SimpleMeetMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.SimpleMeetMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.abc.BoundedLattice --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                

                kirin.analysis.const._visitor._ElemVisitor --> kirin.analysis.const.lattice.Result
                




              click kirin.analysis.const.lattice.PartialLambda href "" "kirin.analysis.const.lattice.PartialLambda"
              click kirin.analysis.const.lattice.PartialConst href "" "kirin.analysis.const.lattice.PartialConst"
              click kirin.analysis.const.lattice.Result href "" "kirin.analysis.const.lattice.Result"
              click kirin.ir.attrs.abc.Attribute href "" "kirin.ir.attrs.abc.Attribute"
              click kirin.print.printable.Printable href "" "kirin.print.printable.Printable"
              click kirin.lattice.mixin.IsSubsetEqMixin href "" "kirin.lattice.mixin.IsSubsetEqMixin"
              click kirin.lattice.mixin.SimpleJoinMixin href "" "kirin.lattice.mixin.SimpleJoinMixin"
              click kirin.lattice.mixin.SimpleMeetMixin href "" "kirin.lattice.mixin.SimpleMeetMixin"
              click kirin.lattice.abc.BoundedLattice href "" "kirin.lattice.abc.BoundedLattice"
              click kirin.lattice.abc.Lattice href "" "kirin.lattice.abc.Lattice"
              click kirin.analysis.const._visitor._ElemVisitor href "" "kirin.analysis.const._visitor._ElemVisitor"
            

Partial lambda constant value.

This represents a closure with captured variables.

Source code in src/kirin/analysis/const/lattice.py
206
207
208
209
210
211
212
213
214
215
216
217
218
def __init__(
    self,
    code: ir.Statement,
    captured: tuple[Result, ...],
    argnames: list[str] | None = None,
):
    trait = code.get_present_trait(ir.CallableStmtInterface)
    region = trait.get_callable_region(code)
    self.argnames = argnames or [
        arg.name or f"arg_{idx}" for idx, arg in enumerate(region.blocks[0].args)
    ]
    self.code = code
    self.captured = captured

join

join(other: Result) -> Result

Join operation.

Source code in src/kirin/analysis/const/lattice.py
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
def join(self, other: Result) -> Result:
    if other is other.bottom():
        return self

    if not isinstance(other, PartialLambda):
        return Unknown().join(other)  # widen self

    if self.code is not other.code:
        return Unknown()  # lambda stmt is pure

    if len(self.captured) != len(other.captured):
        return self.bottom()  # err

    return PartialLambda(
        self.code,
        tuple(x.join(y) for x, y in zip(self.captured, other.captured)),
        self.argnames,
    )

meet

meet(other: Result) -> Result

Meet operation.

Source code in src/kirin/analysis/const/lattice.py
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
def meet(self, other: Result) -> Result:
    if not isinstance(other, PartialLambda):
        return Unknown().meet(other)

    if self.code is not other.code:
        return self.bottom()

    if len(self.captured) != len(other.captured):
        return Unknown()

    return PartialLambda(
        self.code,
        tuple(x.meet(y) for x, y in zip(self.captured, other.captured)),
        self.argnames,
    )

PartialTuple dataclass

PartialTuple(data: tuple[Result, ...])

Bases: PartialConst


              flowchart TD
              kirin.analysis.const.lattice.PartialTuple[PartialTuple]
              kirin.analysis.const.lattice.PartialConst[PartialConst]
              kirin.analysis.const.lattice.Result[Result]
              kirin.ir.attrs.abc.Attribute[Attribute]
              kirin.print.printable.Printable[Printable]
              kirin.lattice.mixin.IsSubsetEqMixin[IsSubsetEqMixin]
              kirin.lattice.mixin.SimpleJoinMixin[SimpleJoinMixin]
              kirin.lattice.mixin.SimpleMeetMixin[SimpleMeetMixin]
              kirin.lattice.abc.BoundedLattice[BoundedLattice]
              kirin.lattice.abc.Lattice[Lattice]
              kirin.analysis.const._visitor._ElemVisitor[_ElemVisitor]

                              kirin.analysis.const.lattice.PartialConst --> kirin.analysis.const.lattice.PartialTuple
                                kirin.analysis.const.lattice.Result --> kirin.analysis.const.lattice.PartialConst
                                kirin.ir.attrs.abc.Attribute --> kirin.analysis.const.lattice.Result
                                kirin.print.printable.Printable --> kirin.ir.attrs.abc.Attribute
                

                kirin.lattice.mixin.IsSubsetEqMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.IsSubsetEqMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.mixin.SimpleJoinMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.SimpleJoinMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.mixin.SimpleMeetMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.SimpleMeetMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.abc.BoundedLattice --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                

                kirin.analysis.const._visitor._ElemVisitor --> kirin.analysis.const.lattice.Result
                




              click kirin.analysis.const.lattice.PartialTuple href "" "kirin.analysis.const.lattice.PartialTuple"
              click kirin.analysis.const.lattice.PartialConst href "" "kirin.analysis.const.lattice.PartialConst"
              click kirin.analysis.const.lattice.Result href "" "kirin.analysis.const.lattice.Result"
              click kirin.ir.attrs.abc.Attribute href "" "kirin.ir.attrs.abc.Attribute"
              click kirin.print.printable.Printable href "" "kirin.print.printable.Printable"
              click kirin.lattice.mixin.IsSubsetEqMixin href "" "kirin.lattice.mixin.IsSubsetEqMixin"
              click kirin.lattice.mixin.SimpleJoinMixin href "" "kirin.lattice.mixin.SimpleJoinMixin"
              click kirin.lattice.mixin.SimpleMeetMixin href "" "kirin.lattice.mixin.SimpleMeetMixin"
              click kirin.lattice.abc.BoundedLattice href "" "kirin.lattice.abc.BoundedLattice"
              click kirin.lattice.abc.Lattice href "" "kirin.lattice.abc.Lattice"
              click kirin.analysis.const._visitor._ElemVisitor href "" "kirin.analysis.const._visitor._ElemVisitor"
            

Partial tuple constant value.

join

join(other: Result) -> Result

Join operation.

Source code in src/kirin/analysis/const/lattice.py
138
139
140
141
142
143
144
145
146
147
148
149
def join(self, other: Result) -> Result:
    if other.is_subseteq(self):
        return self
    elif self.is_subseteq(other):
        return other
    elif isinstance(other, PartialTuple):
        return PartialTuple(tuple(x.join(y) for x, y in zip(self.data, other.data)))
    elif isinstance(other, Value) and isinstance(other.data, tuple):
        return PartialTuple(
            tuple(x.join(Value(y)) for x, y in zip(self.data, other.data))
        )
    return Unknown()

meet

meet(other: Result) -> Result

Meet operation.

Source code in src/kirin/analysis/const/lattice.py
151
152
153
154
155
156
157
158
159
160
161
162
def meet(self, other: Result) -> Result:
    if self.is_subseteq(other):
        return self
    elif other.is_subseteq(self):
        return other
    elif isinstance(other, PartialTuple):
        return PartialTuple(tuple(x.meet(y) for x, y in zip(self.data, other.data)))
    elif isinstance(other, Value) and isinstance(other.data, tuple):
        return PartialTuple(
            tuple(x.meet(Value(y)) for x, y in zip(self.data, other.data))
        )
    return self.bottom()

PartialTupleMeta

Bases: LatticeAttributeMeta


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

                              kirin.ir.attrs.abc.LatticeAttributeMeta --> kirin.analysis.const.lattice.PartialTupleMeta
                                kirin.lattice.abc.LatticeMeta --> kirin.ir.attrs.abc.LatticeAttributeMeta
                
                kirin.ir.attrs.abc.AttributeMeta --> kirin.ir.attrs.abc.LatticeAttributeMeta
                



              click kirin.analysis.const.lattice.PartialTupleMeta href "" "kirin.analysis.const.lattice.PartialTupleMeta"
              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 PartialTuple.

This metaclass canonicalizes PartialTuple instances with all Value elements into a single Value instance.

Result dataclass

Result()

Bases: Attribute, IsSubsetEqMixin['Result'], SimpleJoinMixin['Result'], SimpleMeetMixin['Result'], BoundedLattice['Result'], _ElemVisitor


              flowchart TD
              kirin.analysis.const.lattice.Result[Result]
              kirin.ir.attrs.abc.Attribute[Attribute]
              kirin.print.printable.Printable[Printable]
              kirin.lattice.mixin.IsSubsetEqMixin[IsSubsetEqMixin]
              kirin.lattice.mixin.SimpleJoinMixin[SimpleJoinMixin]
              kirin.lattice.mixin.SimpleMeetMixin[SimpleMeetMixin]
              kirin.lattice.abc.BoundedLattice[BoundedLattice]
              kirin.lattice.abc.Lattice[Lattice]
              kirin.analysis.const._visitor._ElemVisitor[_ElemVisitor]

                              kirin.ir.attrs.abc.Attribute --> kirin.analysis.const.lattice.Result
                                kirin.print.printable.Printable --> kirin.ir.attrs.abc.Attribute
                

                kirin.lattice.mixin.IsSubsetEqMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.IsSubsetEqMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.mixin.SimpleJoinMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.SimpleJoinMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.mixin.SimpleMeetMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.SimpleMeetMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.abc.BoundedLattice --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                

                kirin.analysis.const._visitor._ElemVisitor --> kirin.analysis.const.lattice.Result
                


              click kirin.analysis.const.lattice.Result href "" "kirin.analysis.const.lattice.Result"
              click kirin.ir.attrs.abc.Attribute href "" "kirin.ir.attrs.abc.Attribute"
              click kirin.print.printable.Printable href "" "kirin.print.printable.Printable"
              click kirin.lattice.mixin.IsSubsetEqMixin href "" "kirin.lattice.mixin.IsSubsetEqMixin"
              click kirin.lattice.mixin.SimpleJoinMixin href "" "kirin.lattice.mixin.SimpleJoinMixin"
              click kirin.lattice.mixin.SimpleMeetMixin href "" "kirin.lattice.mixin.SimpleMeetMixin"
              click kirin.lattice.abc.BoundedLattice href "" "kirin.lattice.abc.BoundedLattice"
              click kirin.lattice.abc.Lattice href "" "kirin.lattice.abc.Lattice"
              click kirin.analysis.const._visitor._ElemVisitor href "" "kirin.analysis.const._visitor._ElemVisitor"
            

Base class for constant analysis results.

Unknown dataclass

Unknown()

Bases: Result


              flowchart TD
              kirin.analysis.const.lattice.Unknown[Unknown]
              kirin.analysis.const.lattice.Result[Result]
              kirin.ir.attrs.abc.Attribute[Attribute]
              kirin.print.printable.Printable[Printable]
              kirin.lattice.mixin.IsSubsetEqMixin[IsSubsetEqMixin]
              kirin.lattice.mixin.SimpleJoinMixin[SimpleJoinMixin]
              kirin.lattice.mixin.SimpleMeetMixin[SimpleMeetMixin]
              kirin.lattice.abc.BoundedLattice[BoundedLattice]
              kirin.lattice.abc.Lattice[Lattice]
              kirin.analysis.const._visitor._ElemVisitor[_ElemVisitor]

                              kirin.analysis.const.lattice.Result --> kirin.analysis.const.lattice.Unknown
                                kirin.ir.attrs.abc.Attribute --> kirin.analysis.const.lattice.Result
                                kirin.print.printable.Printable --> kirin.ir.attrs.abc.Attribute
                

                kirin.lattice.mixin.IsSubsetEqMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.IsSubsetEqMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.mixin.SimpleJoinMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.SimpleJoinMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.mixin.SimpleMeetMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.SimpleMeetMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.abc.BoundedLattice --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                

                kirin.analysis.const._visitor._ElemVisitor --> kirin.analysis.const.lattice.Result
                



              click kirin.analysis.const.lattice.Unknown href "" "kirin.analysis.const.lattice.Unknown"
              click kirin.analysis.const.lattice.Result href "" "kirin.analysis.const.lattice.Result"
              click kirin.ir.attrs.abc.Attribute href "" "kirin.ir.attrs.abc.Attribute"
              click kirin.print.printable.Printable href "" "kirin.print.printable.Printable"
              click kirin.lattice.mixin.IsSubsetEqMixin href "" "kirin.lattice.mixin.IsSubsetEqMixin"
              click kirin.lattice.mixin.SimpleJoinMixin href "" "kirin.lattice.mixin.SimpleJoinMixin"
              click kirin.lattice.mixin.SimpleMeetMixin href "" "kirin.lattice.mixin.SimpleMeetMixin"
              click kirin.lattice.abc.BoundedLattice href "" "kirin.lattice.abc.BoundedLattice"
              click kirin.lattice.abc.Lattice href "" "kirin.lattice.abc.Lattice"
              click kirin.analysis.const._visitor._ElemVisitor href "" "kirin.analysis.const._visitor._ElemVisitor"
            

Unknown constant value. This is the top element of the lattice.

is_subseteq

is_subseteq(other: Result) -> bool

Subseteq operation.

Source code in src/kirin/analysis/const/lattice.py
48
49
def is_subseteq(self, other: Result) -> bool:
    return isinstance(other, Unknown)

Value dataclass

Value(data: Any)

Bases: Result


              flowchart TD
              kirin.analysis.const.lattice.Value[Value]
              kirin.analysis.const.lattice.Result[Result]
              kirin.ir.attrs.abc.Attribute[Attribute]
              kirin.print.printable.Printable[Printable]
              kirin.lattice.mixin.IsSubsetEqMixin[IsSubsetEqMixin]
              kirin.lattice.mixin.SimpleJoinMixin[SimpleJoinMixin]
              kirin.lattice.mixin.SimpleMeetMixin[SimpleMeetMixin]
              kirin.lattice.abc.BoundedLattice[BoundedLattice]
              kirin.lattice.abc.Lattice[Lattice]
              kirin.analysis.const._visitor._ElemVisitor[_ElemVisitor]

                              kirin.analysis.const.lattice.Result --> kirin.analysis.const.lattice.Value
                                kirin.ir.attrs.abc.Attribute --> kirin.analysis.const.lattice.Result
                                kirin.print.printable.Printable --> kirin.ir.attrs.abc.Attribute
                

                kirin.lattice.mixin.IsSubsetEqMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.IsSubsetEqMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.mixin.SimpleJoinMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.SimpleJoinMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.mixin.SimpleMeetMixin --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.BoundedLattice --> kirin.lattice.mixin.SimpleMeetMixin
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                


                kirin.lattice.abc.BoundedLattice --> kirin.analysis.const.lattice.Result
                                kirin.lattice.abc.Lattice --> kirin.lattice.abc.BoundedLattice
                

                kirin.analysis.const._visitor._ElemVisitor --> kirin.analysis.const.lattice.Result
                



              click kirin.analysis.const.lattice.Value href "" "kirin.analysis.const.lattice.Value"
              click kirin.analysis.const.lattice.Result href "" "kirin.analysis.const.lattice.Result"
              click kirin.ir.attrs.abc.Attribute href "" "kirin.ir.attrs.abc.Attribute"
              click kirin.print.printable.Printable href "" "kirin.print.printable.Printable"
              click kirin.lattice.mixin.IsSubsetEqMixin href "" "kirin.lattice.mixin.IsSubsetEqMixin"
              click kirin.lattice.mixin.SimpleJoinMixin href "" "kirin.lattice.mixin.SimpleJoinMixin"
              click kirin.lattice.mixin.SimpleMeetMixin href "" "kirin.lattice.mixin.SimpleMeetMixin"
              click kirin.lattice.abc.BoundedLattice href "" "kirin.lattice.abc.BoundedLattice"
              click kirin.lattice.abc.Lattice href "" "kirin.lattice.abc.Lattice"
              click kirin.analysis.const._visitor._ElemVisitor href "" "kirin.analysis.const._visitor._ElemVisitor"
            

Constant value. Wraps any hashable Python value.