Missing files and requirements

This commit is contained in:
Andrei Bondarenko 2021-09-28 19:53:12 +02:00
parent cd74bb53f6
commit 5e28a8d108
6 changed files with 82 additions and 2 deletions

76
services/bottom/V1.py Normal file
View file

@ -0,0 +1,76 @@
from uuid import UUID
from state.base import State
from services.bottom.V0 import Bottom as BottomV0
class Bottom:
def __init__(self, model: UUID, state: State):
type_model_id = state.read_dict(state.read_root(), "Bottom")
self.type_model = UUID(state.read_value(type_model_id))
self.model = model
self.bottom = BottomV0(state)
def create_node(self, name: str, value=None):
if value is None:
n = self.bottom.create_node()
else:
n = self.bottom.create_node(value)
self.bottom.create_edge(self.model, n, label=name)
def create_edge(self, name: str, source: str, target: str):
try:
src, = self.bottom.read_outgoing_elements(self.model, source)
except ValueError:
raise RuntimeError(f"No element named {source}")
try:
tgt, = self.bottom.read_outgoing_elements(self.model, source)
except ValueError:
raise RuntimeError(f"No element named {target}")
e = self.bottom.create_edge(src, tgt)
self.bottom.create_edge(self.model, e, label=name)
def read_value(self, name: str):
try:
element, = self.bottom.read_outgoing_elements(self.model, name)
return self.bottom.read_value(element)
except ValueError:
raise RuntimeError(f"No element named {name}")
def read_edge_source(self, name: str):
try:
element, = self.bottom.read_outgoing_elements(self.model, name)
return self.bottom.read_value(element)
except ValueError:
raise RuntimeError(f"No element named {name}")
def read_edge_target(self, name: str):
pass
def delete_element(self, name: str):
try:
element, = self.bottom.read_outgoing_elements(self.model, name)
self.bottom.delete_element(element)
except ValueError:
raise RuntimeError(f"No element named {name}")
def list_elements(self):
tm_names = {}
for key in self.bottom.read_keys(self.type_model):
element, = self.bottom.read_outgoing_elements(self.type_model, key)
tm_names[element] = key
unsorted = []
for key in self.bottom.read_keys(self.model):
element, = self.bottom.read_outgoing_elements(self.model, key)
element_types = self.bottom.read_outgoing_elements(element, "Morphism")
type_model_elements = self.bottom.read_outgoing_elements(self.type_model)
element_type_node, = [e for e in element_types if e in type_model_elements]
unsorted.append(f"{key} : {tm_names[element_type_node]}")
return sorted(unsorted)
def to_bottom(self):
pass # already encoded as bottom
def from_bottom(self):
pass # already encoded as bottom