Source code for besmarts.cluster.cluster_assignment
"""
besmarts.cluster.cluster_assignment
Data structures for associating data to SMILES.
"""
from typing import Dict, Sequence, List
from besmarts.core import assignments
[docs]
class smiles_assignment_str(assignments.smiles_assignment):
__slots__ = "smiles", "selections"
def __init__(self, smiles, selections):
self.smiles: str = smiles
self.selections: Dict[Sequence[int], str] = selections
[docs]
def copy(self):
return smiles_assignment_str_copy(self)
[docs]
def compute(self, idx) -> str:
return smiles_assignment_str_compute(self, idx)
[docs]
def smiles_assignment_str_diff(A: smiles_assignment_str, B: smiles_assignment_str):
assert A.smiles == B.smiles
c = {}
e = ""
for sa, lbl in A.selections.items():
if lbl != B.selections.get(sa, ""):
c[sa] = lbl
return smiles_assignment_str(A.smiles, c)
[docs]
def smiles_assignment_str_modified(A: List[smiles_assignment_str], B: List[smiles_assignment_str]):
lbls = set()
for a, b in zip(A, B):
c = smiles_assignment_str_diff(a, b)
lbls.update(c.selections.values())
return list(lbls)
[docs]
class smiles_assignment_float(assignments.smiles_assignment):
__slots__ = "smiles", "selections"
def __init__(self, smiles, selections):
self.smiles: str = smiles
self.selections: Dict[Sequence[int], List[float]] = selections
[docs]
def copy(self):
return smiles_assignment_float_copy(self)
[docs]
def compute(self, idx) -> List[float]:
return smiles_assignment_float_compute(self, idx)
[docs]
def smiles_assignment_str_compute(
sa: smiles_assignment_str, idx: Sequence[int]
) -> str:
return sa.selections.get(idx, "")
[docs]
def smiles_assignment_float_compute(
sa: smiles_assignment_float, idx: Sequence[int]
) -> List[float]:
return sa.selections.get(idx, [])
[docs]
def smiles_assignment_float_copy(sa) -> smiles_assignment_float:
return smiles_assignment_float(sa.smiles, sa.selections.copy())
[docs]
def smiles_assignment_str_copy(sa) -> smiles_assignment_str:
return smiles_assignment_str(sa.smiles, sa.selections.copy())