Simplified bottom context
This commit is contained in:
parent
8382d7bfc4
commit
249a07894a
1 changed files with 27 additions and 24 deletions
104
core/bottom.py
104
core/bottom.py
|
|
@ -1,104 +0,0 @@
|
|||
from state.base import INTEGER, FLOAT, BOOLEAN, STRING, TYPE, State
|
||||
from core.element import Element, String
|
||||
|
||||
|
||||
class Bottom:
|
||||
def __init__(self, state: State):
|
||||
self.state = state
|
||||
|
||||
def create_model(self, name: String) -> Element:
|
||||
bottom = self.state.create_nodevalue(name.value)
|
||||
self.state.create_dict(bottom, "Model", self.state.create_node())
|
||||
return Element(id=bottom)
|
||||
|
||||
def add_node(self, model: Element, name: String):
|
||||
model_root = self.state.read_dict(model.id, "Model")
|
||||
# create model element
|
||||
element = self.state.create_node()
|
||||
# connect to model root
|
||||
self.state.create_dict(model_root, name.value, element)
|
||||
# confirm that element has been added to the model
|
||||
element = self.state.read_dict(model_root, name.value)
|
||||
if element is None:
|
||||
self.state.delete_node(element)
|
||||
print(f"Warning: Invalid name {name.value}, element not created.")
|
||||
return
|
||||
|
||||
def add_value(self, model: Element, name: String, value: Element):
|
||||
model_root = self.state.read_dict(model.id, "Model")
|
||||
# create model element
|
||||
element = self.state.create_nodevalue(value.value)
|
||||
if element is None:
|
||||
print("Warning: Invalid value, value node not created.")
|
||||
return
|
||||
# connect to model root
|
||||
self.state.create_dict(model_root, name.value, element)
|
||||
# confirm that element has been added to the model
|
||||
element_found = self.state.read_dict(model_root, name.value)
|
||||
if element_found is None:
|
||||
self.state.delete_node(element)
|
||||
print(f"Warning: Invalid name {name.value}, element not created.")
|
||||
return
|
||||
|
||||
def add_edge(self, model: Element, name: String, source: String, target: String):
|
||||
model_root = self.state.read_dict(model.id, "Model")
|
||||
source_element = self.state.read_dict(model_root, source.value)
|
||||
if source_element is None:
|
||||
print(f"Warning: Unknown source element {source.value}, edge not created.")
|
||||
return
|
||||
target_element = self.state.read_dict(model_root, target.value)
|
||||
if target_element is None:
|
||||
print(f"Warning: Unknown target element {target.value}, edge not created.")
|
||||
return
|
||||
# create model element
|
||||
element = self.state.create_edge(source_element, target_element)
|
||||
# connect to model root
|
||||
self.state.create_dict(model_root, name.value, element)
|
||||
# confirm that element has been added to the model
|
||||
element = self.state.read_dict(model_root, name.value)
|
||||
if element is None:
|
||||
self.state.delete_edge(element)
|
||||
print(f"Warning: Invalid name {name.value}, element not created.")
|
||||
|
||||
def delete_element(self, model: Element, name: String):
|
||||
model_root = self.state.read_dict(model.id, "Model")
|
||||
element = self.state.read_dict(model_root, name.value)
|
||||
# could be both a node or an edge
|
||||
self.state.delete_node(element)
|
||||
self.state.delete_edge(element)
|
||||
|
||||
def list_elements(self, model: Element):
|
||||
def is_edge(elem: Element) -> bool:
|
||||
edge = self.state.read_edge(elem.id)
|
||||
return edge is not None
|
||||
def value_type(value) -> str:
|
||||
map = {
|
||||
int: INTEGER,
|
||||
float: FLOAT,
|
||||
str: STRING,
|
||||
bool: BOOLEAN,
|
||||
tuple: TYPE
|
||||
}
|
||||
return map[type(value)][0]
|
||||
|
||||
unsorted = []
|
||||
model_root = self.state.read_dict(model.id, "Model")
|
||||
for elem_edge in self.state.read_outgoing(model_root):
|
||||
# get element name
|
||||
label_edge, = self.state.read_outgoing(elem_edge)
|
||||
_, label_node = self.state.read_edge(label_edge)
|
||||
label = self.state.read_value(label_node)
|
||||
# find element bottom type
|
||||
_, elem = self.state.read_edge(elem_edge)
|
||||
if is_edge(elem):
|
||||
bottom_type = "Edge"
|
||||
else:
|
||||
# is_node
|
||||
elem_value = self.state.read_value(elem)
|
||||
if elem_value is None:
|
||||
bottom_type = "Node"
|
||||
else:
|
||||
bottom_type = value_type
|
||||
unsorted.append(f"{label} : {bottom_type}")
|
||||
for i in sorted(unsorted):
|
||||
print(i)
|
||||
Loading…
Add table
Add a link
Reference in a new issue