Skip to content

synt.expr.set ¤

set_ module-attribute ¤

set_ = SetVerbatim

Alias SetVerbatim.

Notes

set is a built-in type in Python, so it's renamed to set_ with a suffix.

set_comp module-attribute ¤

set_comp = SetComprehension

SetDisplay ¤

Bases: Expression

Literal set expression.

References

Set display.

Source code in synt/expr/set.py
class SetDisplay(expr.Expression, metaclass=ABCMeta):
    r"""Literal set expression.

    References:
        [Set display](https://docs.python.org/3/reference/expressions.html#set-displays).
    """

    precedence = expr.ExprPrecedence.Atom
    expr_type = expr.ExprType.Set

precedence class-attribute instance-attribute ¤

precedence = Atom

expr_type class-attribute instance-attribute ¤

expr_type = Set

SetVerbatim ¤

Bases: SetDisplay

Verbatim set expression.

Examples:

s = set_(litint(1), id_("b"))
assert s.into_code() == "{1, b}"
Source code in synt/expr/set.py
class SetVerbatim(SetDisplay):
    r"""Verbatim set expression.

    Examples:
        ```python
        s = set_(litint(1), id_("b"))
        assert s.into_code() == "{1, b}"
        ```
    """

    items: list[expr.Expression]
    """Set items."""

    def __init__(self, *items: expr.IntoExpression):
        """Initialize a new verbatim set expression.

        Args:
            items: Set items.
        """
        self.items = [x.into_expression() for x in items]

    def into_code(self) -> str:
        item_text = ", ".join(x.into_code() for x in self.items)
        return f"{{{item_text}}}"

items instance-attribute ¤

1
2
3
items: list[Expression] = [
    into_expression() for x in items
]

Set items.

__init__ ¤

__init__(*items: IntoExpression)

Initialize a new verbatim set expression.

Parameters:

Name Type Description Default
items IntoExpression

Set items.

()
Source code in synt/expr/set.py
def __init__(self, *items: expr.IntoExpression):
    """Initialize a new verbatim set expression.

    Args:
        items: Set items.
    """
    self.items = [x.into_expression() for x in items]

into_code ¤

into_code() -> str
Source code in synt/expr/set.py
def into_code(self) -> str:
    item_text = ", ".join(x.into_code() for x in self.items)
    return f"{{{item_text}}}"

SetComprehension ¤

Bases: SetDisplay

Set comprehension expression.

Examples:

s = set_comp(id_("x").expr().for_(id_("x")).in_(id_("range").expr().call(litint(5))))
assert s.into_code() == "{x for x in range(5)}"
References

comprehension.

Source code in synt/expr/set.py
class SetComprehension(SetDisplay):
    r"""Set comprehension expression.

    Examples:
        ```python
        s = set_comp(id_("x").expr().for_(id_("x")).in_(id_("range").expr().call(litint(5))))
        assert s.into_code() == "{x for x in range(5)}"
        ```

    References:
        [`comprehension`](https://docs.python.org/3/reference/
        expressions.html#grammar-tokens-python-grammar-comprehension).
    """

    comprehension: comp_expr.Comprehension
    """Internal comprehension expression."""

    def __init__(
        self,
        comprehension: comp_expr.Comprehension
        | comp_expr.ComprehensionBuilder
        | comp_expr.ComprehensionNodeBuilder,
    ):
        """Initialize a new set comprehension expression.

        Args:
            comprehension: Internal comprehension expression.

        Raises:
            ExpressionTypeException: Invalid set comprehension result type,
                typically a [`KVPair`][synt.tokens.kv_pair.KVPair].
        """
        if isinstance(comprehension, comp_expr.Comprehension):
            comp = comprehension
        elif isinstance(comprehension, comp_expr.ComprehensionBuilder):
            comp = comprehension.build()
        elif isinstance(comprehension, comp_expr.ComprehensionNodeBuilder):
            comp = comprehension.build_comp()
        else:
            raise ValueError(
                "Expect expression of type `Comprehension`, found `Unknown`."
            )

        if comp.elt.expr_type == expr.ExprType.KeyValuePair:
            raise ValueError("Expect expression of type `Atom`, found `KeyValuePair`.")
        self.comprehension = comp

    def into_code(self) -> str:
        return f"{{{self.comprehension.into_code()}}}"

comprehension instance-attribute ¤

comprehension: Comprehension = comp

Internal comprehension expression.

__init__ ¤

1
2
3
4
5
6
7
__init__(
    comprehension: (
        Comprehension
        | ComprehensionBuilder
        | ComprehensionNodeBuilder
    ),
)

Initialize a new set comprehension expression.

Parameters:

Name Type Description Default
comprehension Comprehension | ComprehensionBuilder | ComprehensionNodeBuilder

Internal comprehension expression.

required

Raises:

Type Description
ExpressionTypeException

Invalid set comprehension result type, typically a KVPair.

Source code in synt/expr/set.py
def __init__(
    self,
    comprehension: comp_expr.Comprehension
    | comp_expr.ComprehensionBuilder
    | comp_expr.ComprehensionNodeBuilder,
):
    """Initialize a new set comprehension expression.

    Args:
        comprehension: Internal comprehension expression.

    Raises:
        ExpressionTypeException: Invalid set comprehension result type,
            typically a [`KVPair`][synt.tokens.kv_pair.KVPair].
    """
    if isinstance(comprehension, comp_expr.Comprehension):
        comp = comprehension
    elif isinstance(comprehension, comp_expr.ComprehensionBuilder):
        comp = comprehension.build()
    elif isinstance(comprehension, comp_expr.ComprehensionNodeBuilder):
        comp = comprehension.build_comp()
    else:
        raise ValueError(
            "Expect expression of type `Comprehension`, found `Unknown`."
        )

    if comp.elt.expr_type == expr.ExprType.KeyValuePair:
        raise ValueError("Expect expression of type `Atom`, found `KeyValuePair`.")
    self.comprehension = comp

into_code ¤

into_code() -> str
Source code in synt/expr/set.py
def into_code(self) -> str:
    return f"{{{self.comprehension.into_code()}}}"