Module for managing a stream of builder nodes.
This module provides classes to represent builder nodes and builder streams. A builder node is a single element in the stream, representing a step in a construction process. A builder stream is a sequence of builder nodes, allowing traversal and manipulation of the construction steps.
BuilderNode dataclass
BuilderNode(node, next=None)
A node in the builder stream.
__repr__
Representation of the BuilderNode.
Source code in src/bloqade/builder/parse/stream.py
| def __repr__(self) -> str:
"""Representation of the BuilderNode."""
return repr(self.node)
|
BuilderStream dataclass
BuilderStream(head, curr=None)
Represents a stream of builder nodes.
__iter__
Iterator method to iterate over the builder stream.
Source code in src/bloqade/builder/parse/stream.py
| def __iter__(self):
"""Iterator method to iterate over the builder stream."""
return self
|
__next__
Next method to get the next item in the builder stream.
Source code in src/bloqade/builder/parse/stream.py
| def __next__(self):
"""Next method to get the next item in the builder stream."""
node = self.read()
if node is None:
raise StopIteration
return node
|
build_nodes staticmethod
Build BuilderNode instances from the provided Builder.
Parameters:
Name | Type | Description | Default |
node | Builder | The root Builder instance. | required |
Returns:
Name | Type | Description |
BuilderNode | BuilderNode | The head of the linked list of BuilderNodes. |
Source code in src/bloqade/builder/parse/stream.py
| @staticmethod
def build_nodes(node: Builder) -> "BuilderNode":
"""
Build BuilderNode instances from the provided Builder.
Args:
node (Builder): The root Builder instance.
Returns:
BuilderNode: The head of the linked list of BuilderNodes.
"""
curr = node
node = None
while curr is not None:
next = curr
curr = curr.__parent__ if hasattr(curr, "__parent__") else None
node = BuilderNode(next, node)
return node
|
copy
Create a copy of the builder stream.
Source code in src/bloqade/builder/parse/stream.py
| def copy(self) -> "BuilderStream":
"""Create a copy of the builder stream."""
return BuilderStream(head=self.head, curr=self.curr)
|
create staticmethod
Create a BuilderStream instance from a Builder.
Parameters:
Name | Type | Description | Default |
builder | Builder | The root Builder instance. | required |
Returns:
Name | Type | Description |
BuilderStream | BuilderStream | The created BuilderStream instance. |
Source code in src/bloqade/builder/parse/stream.py
| @staticmethod
def create(builder: Builder) -> "BuilderStream":
"""
Create a BuilderStream instance from a Builder.
Args:
builder (Builder): The root Builder instance.
Returns:
BuilderStream: The created BuilderStream instance.
"""
head = BuilderStream.build_nodes(builder)
return BuilderStream(head=head, curr=head)
|
eat
Move the stream pointer until a node of specified types is found.
Parameters:
Name | Type | Description | Default |
types | List[Type[Builder]] | List of types to move the stream pointer to. | required |
skips | List[Type[Builder]] | None | List of types to end the stream scan. | None |
Returns:
Name | Type | Description |
BuilderNode | BuilderNode | The beginning of the stream which matches a type in types . |
Source code in src/bloqade/builder/parse/stream.py
| def eat(
self, types: List[Type[Builder]], skips: Optional[List[Type[Builder]]] = None
) -> BuilderNode:
"""
Move the stream pointer until a node of specified types is found.
Args:
types (List[Type[Builder]]): List of types to move the stream pointer to.
skips (List[Type[Builder]] | None, optional): List of types to end the stream scan.
Returns:
BuilderNode: The beginning of the stream which matches a type in `types`.
"""
head = self.read_next(types)
curr = head
while curr is not None:
if type(curr.node) not in types:
if skips and type(curr.node) not in skips:
break
curr = curr.next
self.curr = curr
return head
|
read
Read the next builder node from the stream.
Source code in src/bloqade/builder/parse/stream.py
| def read(self) -> Optional[BuilderNode]:
"""Read the next builder node from the stream."""
if self.curr is None:
return None
node = self.curr
self.curr = self.curr.next
return node
|
read_next
Read the next builder node of specified types from the stream.
Parameters:
Name | Type | Description | Default |
builder_types | List[type[Builder]] | List of builder types to read from the stream. | required |
Returns:
Type | Description |
Optional[BuilderNode] | Optional[BuilderNode]: The next builder node matching one of the specified types, or None if not found. |
Source code in src/bloqade/builder/parse/stream.py
| def read_next(self, builder_types: List[type[Builder]]) -> Optional[BuilderNode]:
"""
Read the next builder node of specified types from the stream.
Args:
builder_types (List[type[Builder]]): List of builder types to read from the stream.
Returns:
Optional[BuilderNode]: The next builder node matching one of the specified types, or None if not found.
"""
node = self.read()
while node is not None:
if type(node.node) in builder_types:
return node
node = self.read()
return None
|