Source code for synkit.CRN.Structure.species
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Any, Dict, Hashable, Optional
[docs]
@dataclass
class Species:
"""
Canonical species record.
:param id: Stable internal species id such as ``s_1``.
:type id: str
:param source_node_id: Original node id in the source NetworkX graph.
:type source_node_id: Hashable
:param label: Human-readable display label.
:type label: str
:param smiles: Optional SMILES string.
:type smiles: Optional[str]
:param source_attrs: Exact original node attributes from the source graph.
:type source_attrs: Dict[str, Any]
:param metadata: Optional extra canonical metadata.
:type metadata: Dict[str, Any]
"""
id: str
source_node_id: Hashable
label: str
smiles: Optional[str] = None
source_attrs: Dict[str, Any] = field(default_factory=dict)
metadata: Dict[str, Any] = field(default_factory=dict)
[docs]
def to_dict(self) -> Dict[str, Any]:
"""
Return a JSON-like dictionary representation.
:returns: Species as a dictionary.
:rtype: Dict[str, Any]
"""
return {
"id": self.id,
"source_node_id": self.source_node_id,
"label": self.label,
"smiles": self.smiles,
"source_attrs": dict(self.source_attrs),
"metadata": dict(self.metadata),
}