Tweak matcher (compute connected components in advance). Simple pattern matching with RAMification (incl. Python expressions) seems to work.

This commit is contained in:
Joeri Exelmans 2024-09-06 21:10:23 +02:00
parent bed3529676
commit 4160a8953e
13 changed files with 388 additions and 70 deletions

View file

@ -81,6 +81,9 @@ class Bottom:
result = self.state.read_edge(edge)
return result[1] if result != None else result
def is_edge(self, elem: UUID) -> bool:
return self.state.is_edge(elem)
def read_incoming_edges(self, target: UUID, label=None) -> List[UUID]:
"""
Reads incoming edges of an element. Optionally, filter them based on their label

View file

@ -59,16 +59,26 @@ class OD:
# An attribute-link is indistinguishable from an ordinary link:
return self.create_link(attr_link_name, object_name, target_name)
def create_integer_value(self, value: int):
def create_integer_value(self, name: str, value: int):
from services.primitives.integer_type import Integer
int_node = self.bottom.create_node()
integer_t = Integer(int_node, self.bottom.state)
integer_t.create(value)
name = 'int'+str(value) # name of the ref to the created integer
# name = 'int'+str(value) # name of the ref to the created integer
# By convention, the type model must have a ModelRef named "Integer"
self.create_model_ref(name, "Integer", int_node)
return name
def create_string_value(self, name: str, value: str):
from services.primitives.string_type import String
string_node = self.bottom.create_node()
string_t = String(string_node, self.bottom.state)
string_t.create(value)
# name = 'str-'+value # name of the ref to the created integer
# By convention, the type model must have a ModelRef named "Integer"
self.create_model_ref(name, "String", string_node)
return name
# Identical to the same SCD method:
def create_model_ref(self, name: str, type_name: str, model: UUID):
# create element + morphism links
@ -79,6 +89,7 @@ class OD:
def create_link(self, assoc_name: str, src_obj_name: str, tgt_obj_name: str):
print(tgt_obj_name)
src_obj_node, = self.bottom.read_outgoing_elements(self.model, src_obj_name)
tgt_obj_node, = self.bottom.read_outgoing_elements(self.model, tgt_obj_name)

View file

@ -72,6 +72,8 @@ class SCD:
if max_c != None:
set_cardinality("upper", max_c)
return class_node
def create_association(self, name: str, source: str, target: str,
src_min_c: int = None, src_max_c: int = None,
tgt_min_c: int = None, tgt_max_c: int = None):