pranamanam's picture Jingjie00's picture
Upload Staplebridge files (#1)
bb6d2aa
Raw History Blame Contribute Delete
1.54 kB
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Any
@dataclass(eq=False)
class StapleState:
sequence_tokens: list[str]
anchor_pair: tuple[int, int] | None = None
block_id: str | None = None
topology: str = "linear"
metadata: dict[str, Any] = field(default_factory=dict)
@classmethod
def from_sequence(cls, seq: str, **kwargs: Any) -> "StapleState":
return cls(sequence_tokens=list(seq), **kwargs)
def to_sequence(self) -> str:
return "".join(self.sequence_tokens)
def copy(self) -> "StapleState":
return StapleState(
sequence_tokens=self.sequence_tokens.copy(),
anchor_pair=None if self.anchor_pair is None else tuple(self.anchor_pair),
block_id=self.block_id,
topology=self.topology,
metadata=dict(self.metadata),
)
def __hash__(self) -> int:
return hash((tuple(self.sequence_tokens), self.anchor_pair, self.block_id, self.topology))
def __eq__(self, other: object) -> bool:
if not isinstance(other, StapleState):
return False
return (
self.sequence_tokens == other.sequence_tokens
and self.anchor_pair == other.anchor_pair
and self.block_id == other.block_id
and self.topology == other.topology
)
def __str__(self) -> str:
return f"StapleState(seq={self.to_sequence()}, anchor={self.anchor_pair}, block={self.block_id}, topo={self.topology})"