Source code for synkit.CRN.Structure.rule

from __future__ import annotations

from dataclasses import dataclass, field
from typing import Any, Dict, Optional, Tuple


[docs] @dataclass class Rule: """ Abstract rule provenance shared by one or more concrete reactions. This does not become a node in the bipartite CRN graph. Instead, reaction nodes may carry ``kind="rule"`` in the input graph while still being interpreted as concrete reaction instances that reference a rule record. :param id: Stable internal rule id such as ``rule_1``. :type id: str :param rule_index: Optional original rule index. :type rule_index: Optional[int] :param rule_repr: Optional original rule/template string. :type rule_repr: Optional[str] :param label: Optional human-readable rule label. :type label: Optional[str] :param metadata: Extra metadata for the rule. :type metadata: Dict[str, Any] """ id: str rule_index: Optional[int] = None rule_repr: Optional[str] = None label: Optional[str] = None metadata: Dict[str, Any] = field(default_factory=dict) @property def signature(self) -> Tuple[Optional[int], Optional[str]]: """ Signature used to deduplicate rules across reactions. :returns: ``(rule_index, rule_repr)`` :rtype: Tuple[Optional[int], Optional[str]] """ return (self.rule_index, self.rule_repr)
[docs] def to_dict(self) -> Dict[str, Any]: """ Return a JSON-like dictionary representation. :returns: Rule as a dictionary. :rtype: Dict[str, Any] """ return { "id": self.id, "rule_index": self.rule_index, "rule_repr": self.rule_repr, "label": self.label, "metadata": dict(self.metadata), }