primitive.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from state.base import State, UUID
  2. from services.bottom.V0 import Bottom
  3. def bootstrap_type(type_name: str, python_type: str, scd_root: UUID, model_root: UUID, state: State):
  4. bottom = Bottom(state)
  5. # create class
  6. class_node = bottom.create_node() # create class node
  7. bottom.create_edge(model_root, class_node, type_name) # attach to model
  8. scd_node, = bottom.read_outgoing_elements(scd_root, "Class") # retrieve type
  9. bottom.create_edge(class_node, scd_node, "Morphism") # create morphism link
  10. # set min_cardinality
  11. min_c_node = bottom.create_node(1)
  12. bottom.create_edge(model_root, min_c_node, f"{type_name}.lower_cardinality")
  13. min_c_link = bottom.create_edge(class_node, min_c_node)
  14. bottom.create_edge(model_root, min_c_link, f"{type_name}.lower_cardinality_link")
  15. scd_node, = bottom.read_outgoing_elements(scd_root, "Integer")
  16. scd_link, = bottom.read_outgoing_elements(scd_root, "Class_lower_cardinality")
  17. bottom.create_edge(min_c_node, scd_node, "Morphism")
  18. bottom.create_edge(min_c_link, scd_link, "Morphism")
  19. # set max_cardinality
  20. max_c_node = bottom.create_node(1)
  21. bottom.create_edge(model_root, max_c_node, f"{type_name}.upper_cardinality")
  22. max_c_link = bottom.create_edge(class_node, max_c_node)
  23. bottom.create_edge(model_root, max_c_link, f"{type_name}.upper_cardinality_link")
  24. scd_node, = bottom.read_outgoing_elements(scd_root, "Integer")
  25. scd_link, = bottom.read_outgoing_elements(scd_root, "Class_upper_cardinality")
  26. bottom.create_edge(max_c_node, scd_node, "Morphism")
  27. bottom.create_edge(max_c_link, scd_link, "Morphism")
  28. # set constraint
  29. constraint_node = bottom.create_node(f"isinstance(read_value(x),{python_type})")
  30. bottom.create_edge(model_root, constraint_node, f"{type_name}.constraint")
  31. constraint_link = bottom.create_edge(class_node, constraint_node)
  32. bottom.create_edge(model_root, constraint_link, f"{type_name}.constraint_link")
  33. scd_node, = bottom.read_outgoing_elements(scd_root, "ActionCode")
  34. scd_link, = bottom.read_outgoing_elements(scd_root, "Element_constraint")
  35. bottom.create_edge(constraint_node, scd_node, "Morphism")
  36. bottom.create_edge(constraint_link, scd_link, "Morphism")
  37. def bootstrap_type_type(scd_root: UUID, model_root: UUID, state: State):
  38. bootstrap_type("Type", "tuple", scd_root, model_root, state)
  39. def bootstrap_boolean_type(scd_root: UUID, model_root: UUID, state: State):
  40. bootstrap_type("Boolean", "bool", scd_root, model_root, state)
  41. def bootstrap_integer_type(scd_root: UUID, model_root: UUID, state: State):
  42. bootstrap_type("Integer", "int", scd_root, model_root, state)
  43. def bootstrap_float_type(scd_root: UUID, model_root: UUID, state: State):
  44. bootstrap_type("Float", "float", scd_root, model_root, state)
  45. def bootstrap_string_type(scd_root: UUID, model_root: UUID, state: State):
  46. bootstrap_type("String", "str", scd_root, model_root, state)