1010import os
1111from dataclasses import is_dataclass
1212
13- import krrood .entity_query_language .orm .model
1413import trimesh
1514from krrood .class_diagrams import ClassDiagram
16- from krrood .entity_query_language .predicate import HasTypes , HasType , Symbol
17- from krrood .entity_query_language .symbol_graph import SymbolGraph
1815from krrood .ormatic .dao import AlternativeMapping
1916from krrood .ormatic .ormatic import ORMatic
2017from krrood .ormatic .utils import classes_of_module
2118from krrood .utils import recursive_subclasses
2219
2320import semantic_digital_twin .orm .model
21+ import semantic_digital_twin .reasoning .predicates
2422import semantic_digital_twin .robots .abstract_robot
2523import semantic_digital_twin .semantic_annotations .semantic_annotations
2624import semantic_digital_twin .world # ensure the module attribute exists on the package
25+ import semantic_digital_twin .adapters .procthor .procthor_semantic_annotations
2726import semantic_digital_twin .world_description .degree_of_freedom
2827import semantic_digital_twin .world_description .geometry
2928import semantic_digital_twin .world_description .shape_collection
3029import semantic_digital_twin .world_description .world_entity
3130from semantic_digital_twin .datastructures .prefixed_name import PrefixedName
31+ from semantic_digital_twin .reasoning .predicates import ContainsType
32+ from semantic_digital_twin .semantic_annotations .mixins import HasBody
3233from semantic_digital_twin .spatial_computations .forward_kinematics import (
3334 ForwardKinematicsManager ,
3435)
3536from semantic_digital_twin .world import (
3637 ResetStateContextManager ,
3738 WorldModelUpdateContextManager ,
3839)
40+ from semantic_digital_twin .world import WorldModelManager
3941from semantic_digital_twin .world_description .connections import (
4042 FixedConnection ,
4143 HasUpdateState ,
4244)
45+ from semantic_digital_twin .orm .model import * # type: ignore
4346
44-
45- # collect all semantic digital twin classes that should be mapped
46- all_classes = set (classes_of_module (semantic_digital_twin .orm .model ))
47- all_classes |= set (
47+ all_classes = set (
4848 classes_of_module (semantic_digital_twin .world_description .world_entity )
4949)
5050all_classes |= set (classes_of_module (semantic_digital_twin .world_description .geometry ))
6666 classes_of_module (semantic_digital_twin .world_description .degree_of_freedom )
6767)
6868all_classes |= set (classes_of_module (semantic_digital_twin .robots .abstract_robot ))
69+ # classes |= set(recursive_subclasses(ViewFactory))
70+ all_classes |= set ([HasBody ] + recursive_subclasses (HasBody ))
71+ all_classes |= set (classes_of_module (semantic_digital_twin .reasoning .predicates ))
72+ all_classes |= set (classes_of_module (semantic_digital_twin .semantic_annotations .mixins ))
73+ all_classes |= set (
74+ classes_of_module (
75+ semantic_digital_twin .adapters .procthor .procthor_semantic_annotations
76+ )
77+ )
6978
7079
7180# remove classes that should not be mapped
7483 WorldModelUpdateContextManager ,
7584 HasUpdateState ,
7685 ForwardKinematicsManager ,
86+ WorldModelManager ,
87+ semantic_digital_twin .adapters .procthor .procthor_semantic_annotations .ProcthorResolver ,
88+ ContainsType ,
7789}
78-
79- # build the symbol graph
80- symbol_graph = SymbolGraph ()
81-
82- # collect all KRROOD classes
83- all_classes |= {c .clazz for c in symbol_graph .class_diagram .wrapped_classes }
84- all_classes |= {am .original_class () for am in recursive_subclasses (AlternativeMapping )}
85- all_classes |= set (classes_of_module (krrood .entity_query_language .symbol_graph ))
86- all_classes |= {Symbol }
87-
88- # remove classes that don't need persistence
89- all_classes -= {HasType , HasTypes }
90-
91-
9290# keep only dataclasses that are NOT AlternativeMapping subclasses
9391all_classes = {
9492 c for c in all_classes if is_dataclass (c ) and not issubclass (c , AlternativeMapping )
9593}
96-
97- # ensure we have the original classes of the mappings (ORMatic uses these)
9894all_classes |= {am .original_class () for am in recursive_subclasses (AlternativeMapping )}
9995
96+ alternative_mappings = [
97+ am
98+ for am in recursive_subclasses (AlternativeMapping )
99+ if am .original_class () in all_classes
100+ ]
101+
100102
101103def generate_orm ():
102104 """
@@ -109,7 +111,7 @@ def generate_orm():
109111 instance = ORMatic (
110112 class_dependency_graph = class_diagram ,
111113 type_mappings = {trimesh .Trimesh : semantic_digital_twin .orm .model .TrimeshType },
112- alternative_mappings = recursive_subclasses ( AlternativeMapping ) ,
114+ alternative_mappings = alternative_mappings ,
113115 )
114116
115117 instance .make_all_tables ()
0 commit comments