interlis2py 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. ili2py/__init__.py +3 -0
  2. ili2py/_version.py +24 -0
  3. ili2py/cli.py +229 -0
  4. ili2py/interfaces/__init__.py +0 -0
  5. ili2py/interfaces/interlis/__init__.py +0 -0
  6. ili2py/interfaces/interlis/interlis_23/__init__.py +36 -0
  7. ili2py/interfaces/interlis/interlis_23/generator.py +146 -0
  8. ili2py/interfaces/interlis/interlis_24/__init__.py +37 -0
  9. ili2py/interfaces/interlis/interlis_24/ilismeta/README.md +21 -0
  10. ili2py/interfaces/interlis/interlis_24/ilismeta/__init__.py +0 -0
  11. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/__init__.py +815 -0
  12. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/actual_argument_type.py +630 -0
  13. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/actual_argument_type_formal_argument.py +19 -0
  14. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/actual_argument_type_object_classes.py +22 -0
  15. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/allowed_in_basket.py +11 -0
  16. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/allowed_in_basket_type.py +33 -0
  17. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/allowed_in_basket_type_class_in_basket.py +19 -0
  18. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/allowed_in_basket_type_of_data_unit.py +19 -0
  19. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/any_oidtype.py +12 -0
  20. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/any_oidtype_type.py +11 -0
  21. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/aref_of.py +12 -0
  22. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/aref_of_type.py +9 -0
  23. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/aref_restriction.py +12 -0
  24. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/aref_restriction_type.py +32 -0
  25. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/aref_restriction_type_aref.py +19 -0
  26. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/aref_restriction_type_type.py +19 -0
  27. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/argument.py +11 -0
  28. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/argument_type.py +11 -0
  29. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/argument_type_1.py +62 -0
  30. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/argument_type_function.py +37 -0
  31. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/argument_type_type_1.py +9 -0
  32. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_acc.py +11 -0
  33. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_acc_origin.py +11 -0
  34. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_acc_origin_type.py +8 -0
  35. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_acc_target.py +11 -0
  36. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_acc_target_type.py +8 -0
  37. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_acc_type.py +29 -0
  38. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_acc_type_assoc_acc.py +19 -0
  39. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_acc_type_class.py +19 -0
  40. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_role.py +11 -0
  41. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_role_type.py +8 -0
  42. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attr_or_param.py +11 -0
  43. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attr_or_param_type.py +11 -0
  44. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attr_or_param_type_1.py +88 -0
  45. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attr_or_param_type_attr_parent.py +37 -0
  46. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attr_or_param_type_derivates.py +116 -0
  47. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attr_or_param_type_param_parent.py +37 -0
  48. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attr_or_param_type_type_1.py +9 -0
  49. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attribute_const.py +11 -0
  50. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attribute_const_type.py +19 -0
  51. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attribute_const_type_attribute.py +19 -0
  52. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attribute_ref_type.py +11 -0
  53. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attribute_ref_type_type.py +19 -0
  54. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attribute_ref_type_type_of.py +29 -0
  55. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/axis_spec.py +11 -0
  56. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/axis_spec_type.py +29 -0
  57. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/axis_spec_type_axis.py +27 -0
  58. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/axis_spec_type_coord_type.py +19 -0
  59. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_class.py +11 -0
  60. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_class_type.py +29 -0
  61. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_class_type_base_class.py +19 -0
  62. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_class_type_crt.py +19 -0
  63. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_type.py +11 -0
  64. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_type_type.py +8 -0
  65. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_view_def.py +11 -0
  66. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_view_def_type.py +8 -0
  67. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_view_ref.py +11 -0
  68. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_view_ref_type.py +8 -0
  69. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/blackbox_type.py +11 -0
  70. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/blackbox_type_type.py +19 -0
  71. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/boolean_type.py +11 -0
  72. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/boolean_type_type.py +10 -0
  73. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_attr.py +11 -0
  74. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_attr_type.py +8 -0
  75. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_const.py +11 -0
  76. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_const_type.py +19 -0
  77. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_const_type_class.py +19 -0
  78. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_constraint.py +11 -0
  79. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_constraint_type.py +8 -0
  80. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_mod.py +11 -0
  81. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_param.py +11 -0
  82. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_param_type.py +8 -0
  83. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_ref.py +11 -0
  84. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_ref_type.py +23 -0
  85. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_ref_type_ref.py +19 -0
  86. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_ref_type_type.py +10 -0
  87. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_related_type.py +11 -0
  88. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_related_type_type.py +10 -0
  89. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_restriction.py +11 -0
  90. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_restriction_type.py +31 -0
  91. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_restriction_type_class_restriction.py +19 -0
  92. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_restriction_type_crtr.py +19 -0
  93. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_type.py +74 -0
  94. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_type_existence_constraint.py +29 -0
  95. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_type_multiplicity.py +22 -0
  96. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_type_oid.py +29 -0
  97. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_type_view.py +29 -0
  98. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/concrete_for_generic.py +11 -0
  99. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/concrete_for_generic_type.py +33 -0
  100. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/concrete_for_generic_type_concrete_domain.py +19 -0
  101. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/concrete_for_generic_type_generic_def.py +19 -0
  102. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/cond_sign_param_assignment.py +13 -0
  103. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/cond_sign_param_assignment_type.py +31 -0
  104. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/cond_sign_param_assignment_type_assignments.py +22 -0
  105. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/cond_sign_param_assignment_type_where.py +116 -0
  106. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/constant.py +11 -0
  107. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/constant_type.py +28 -0
  108. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/constraint.py +11 -0
  109. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/constraint_type.py +28 -0
  110. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/constraint_type_to_class.py +29 -0
  111. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/constraint_type_to_domain.py +29 -0
  112. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/context.py +11 -0
  113. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/context_type.py +10 -0
  114. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/coord_type.py +11 -0
  115. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/coord_type_type.py +38 -0
  116. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/data_unit.py +11 -0
  117. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/data_unit_type.py +37 -0
  118. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/data_unit_type_oid.py +29 -0
  119. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/dependency.py +11 -0
  120. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/dependency_type.py +29 -0
  121. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/dependency_type_dependent.py +19 -0
  122. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/dependency_type_using.py +19 -0
  123. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/derived_assoc.py +11 -0
  124. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/derived_assoc_type.py +8 -0
  125. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/doc_text.py +11 -0
  126. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/doc_text_translation.py +11 -0
  127. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/doc_text_translation_type.py +17 -0
  128. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/doc_text_type.py +25 -0
  129. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/domain_constraint.py +11 -0
  130. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/domain_constraint_type.py +8 -0
  131. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/domain_type.py +11 -0
  132. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/domain_type_type.py +28 -0
  133. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/domain_type_type_context.py +29 -0
  134. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/drawing_rule.py +11 -0
  135. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/drawing_rule_type.py +37 -0
  136. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/drawing_rule_type_class.py +29 -0
  137. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/drawing_rule_type_graphic.py +29 -0
  138. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/drawing_rule_type_rule.py +22 -0
  139. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_assignment_type_max_enum_value.py +19 -0
  140. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_assignment_type_min_enum_value.py +19 -0
  141. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_mapping_type_enum_value.py +22 -0
  142. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_node.py +11 -0
  143. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_node_type.py +28 -0
  144. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_node_type_enum_type.py +37 -0
  145. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_node_type_parent_node.py +37 -0
  146. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_tree_value_type.py +11 -0
  147. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_tree_value_type_type.py +20 -0
  148. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_tree_value_type_type_et.py +29 -0
  149. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_type.py +11 -0
  150. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_type_type.py +19 -0
  151. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/existence_constraint.py +11 -0
  152. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/existence_constraint_type.py +20 -0
  153. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/existence_constraint_type_attr.py +22 -0
  154. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/existence_def.py +11 -0
  155. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/existence_def_type.py +8 -0
  156. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/explicit_assoc_acc.py +11 -0
  157. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/explicit_assoc_acc_type.py +8 -0
  158. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/explicit_assoc_access.py +11 -0
  159. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/explicit_assoc_access_type.py +44 -0
  160. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/explicit_assoc_access_type_assoc_acc_of.py +37 -0
  161. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/explicit_assoc_access_type_origin_role.py +29 -0
  162. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/explicit_assoc_access_type_target_role.py +29 -0
  163. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/expression.py +11 -0
  164. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/expression_type.py +8 -0
  165. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/extendable_me.py +12 -0
  166. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/extendable_metype.py +49 -0
  167. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/extendable_metype_super.py +29 -0
  168. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/factor.py +11 -0
  169. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/factor_type.py +10 -0
  170. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/formal_argument.py +11 -0
  171. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/formal_argument_type.py +8 -0
  172. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/formatted_type.py +11 -0
  173. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/formatted_type_type.py +29 -0
  174. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/formatted_type_type_struct.py +29 -0
  175. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/function_call_type_function.py +19 -0
  176. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/function_def.py +11 -0
  177. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/function_def_type.py +28 -0
  178. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/function_def_type_result_type.py +29 -0
  179. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/generic_def.py +11 -0
  180. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/generic_def_type.py +8 -0
  181. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/graphic.py +11 -0
  182. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/graphic_base.py +11 -0
  183. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/graphic_base_type.py +8 -0
  184. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/graphic_rule.py +11 -0
  185. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/graphic_rule_type.py +8 -0
  186. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/graphic_type.py +28 -0
  187. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/graphic_type_base.py +29 -0
  188. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/graphic_type_where.py +116 -0
  189. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/ili1_format.py +11 -0
  190. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/ili1_format_type.py +96 -0
  191. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/ili1_transfer_element.py +11 -0
  192. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/ili1_transfer_element_type.py +35 -0
  193. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/ili1_transfer_element_type_ili1_ref_attr.py +27 -0
  194. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/ili1_transfer_element_type_ili1_transfer_class.py +19 -0
  195. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/import_mod.py +11 -0
  196. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/import_type.py +29 -0
  197. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/import_type_imported_p.py +19 -0
  198. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/import_type_importing_p.py +19 -0
  199. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/inheritance.py +11 -0
  200. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/inheritance_type.py +8 -0
  201. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_attr.py +11 -0
  202. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_attr_type.py +8 -0
  203. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_coord.py +11 -0
  204. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_coord_type.py +8 -0
  205. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_form.py +11 -0
  206. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_form_structure.py +11 -0
  207. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_form_structure_type.py +8 -0
  208. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_form_type.py +20 -0
  209. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_form_type_structure.py +29 -0
  210. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_type.py +11 -0
  211. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_type_type.py +53 -0
  212. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_type_type_coord_type.py +29 -0
  213. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_type_type_lastructure.py +29 -0
  214. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/lines_form.py +11 -0
  215. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/lines_form_type.py +29 -0
  216. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/lines_form_type_line_form.py +19 -0
  217. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/lines_form_type_line_type.py +19 -0
  218. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/local_ftype.py +12 -0
  219. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/local_ftype_type.py +9 -0
  220. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/local_type.py +11 -0
  221. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/local_type_type.py +8 -0
  222. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_attribute.py +11 -0
  223. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_attribute_type.py +46 -0
  224. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_attribute_type_meta_element.py +29 -0
  225. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_attributes.py +11 -0
  226. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_attributes_type.py +8 -0
  227. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_basket_def.py +11 -0
  228. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_basket_def_type.py +31 -0
  229. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_basket_def_type_meta_data_topic.py +29 -0
  230. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_basket_members.py +11 -0
  231. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_basket_members_type.py +8 -0
  232. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_data_unit.py +11 -0
  233. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_data_unit_type.py +8 -0
  234. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_element.py +11 -0
  235. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_element_type.py +48 -0
  236. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_element_type_documentation.py +22 -0
  237. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_element_type_element_in_package.py +29 -0
  238. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_object_class.py +11 -0
  239. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_object_class_type.py +8 -0
  240. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_object_def.py +11 -0
  241. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_object_def_type.py +40 -0
  242. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_object_def_type_class.py +29 -0
  243. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_object_def_type_meta_basket_def.py +29 -0
  244. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/metranslation.py +12 -0
  245. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/metranslation_type.py +41 -0
  246. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/metranslation_type_of.py +19 -0
  247. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/metranslation_type_translated_doc.py +22 -0
  248. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model.py +11 -0
  249. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model_data.py +11 -0
  250. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model_data_basket_oid.py +12 -0
  251. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model_data_basket_oidtype.py +9 -0
  252. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model_data_type.py +455 -0
  253. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model_translation.py +11 -0
  254. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model_translation_type.py +33 -0
  255. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model_type.py +101 -0
  256. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model_type_ili1_format.py +22 -0
  257. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/multi_value.py +11 -0
  258. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/multi_value_type.py +28 -0
  259. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/multi_value_type_multiplicity.py +22 -0
  260. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/multiplicity.py +11 -0
  261. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/multiplicity_type.py +29 -0
  262. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/num_type.py +11 -0
  263. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/num_type_type.py +60 -0
  264. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/num_type_type_ref_sys.py +29 -0
  265. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/num_type_type_unit.py +29 -0
  266. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/num_unit.py +11 -0
  267. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/num_unit_type.py +8 -0
  268. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/nums_ref_sys.py +11 -0
  269. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/nums_ref_sys_type.py +18 -0
  270. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/object_oid.py +12 -0
  271. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/object_oidtype.py +9 -0
  272. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/object_type.py +11 -0
  273. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/object_type_type.py +19 -0
  274. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/package.py +11 -0
  275. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/package_elements.py +11 -0
  276. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/package_elements_type.py +8 -0
  277. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/package_type.py +10 -0
  278. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/path_el.py +11 -0
  279. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/path_el_type.py +44 -0
  280. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/path_el_type_ref.py +19 -0
  281. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/path_or_insp_factor.py +11 -0
  282. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/path_or_insp_factor_type.py +32 -0
  283. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/path_or_insp_factor_type_inspection.py +19 -0
  284. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/path_or_insp_factor_type_path_els.py +22 -0
  285. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/reference_type.py +11 -0
  286. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/reference_type_type.py +19 -0
  287. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/renamed_base_view.py +11 -0
  288. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/renamed_base_view_type.py +39 -0
  289. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/renamed_base_view_type_base_view.py +29 -0
  290. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/renamed_base_view_type_view.py +37 -0
  291. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/result_type.py +11 -0
  292. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/result_type_type.py +8 -0
  293. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/role.py +11 -0
  294. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/role_type.py +64 -0
  295. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/role_type_association.py +37 -0
  296. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/role_type_derivates.py +116 -0
  297. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/role_type_multiplicity.py +22 -0
  298. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/runtime_param_ref.py +11 -0
  299. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/runtime_param_ref_type.py +22 -0
  300. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/runtime_param_ref_type_runtime_param.py +19 -0
  301. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/set_constraint.py +11 -0
  302. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/set_constraint_type.py +28 -0
  303. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/set_constraint_type_constraint.py +116 -0
  304. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/set_constraint_type_where.py +116 -0
  305. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sign_class.py +11 -0
  306. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sign_class_type.py +8 -0
  307. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sign_param_assignment.py +11 -0
  308. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sign_param_assignment_type.py +32 -0
  309. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sign_param_assignment_type_assignment.py +116 -0
  310. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sign_param_assignment_type_param.py +19 -0
  311. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/simple_constraint.py +11 -0
  312. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/simple_constraint_type.py +42 -0
  313. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/simple_constraint_type_logical_expression.py +116 -0
  314. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/struct_of_format.py +11 -0
  315. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/struct_of_format_type.py +8 -0
  316. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sub_model.py +11 -0
  317. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sub_model_type.py +10 -0
  318. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sub_node.py +11 -0
  319. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sub_node_type.py +8 -0
  320. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/text_type.py +11 -0
  321. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/text_type_type.py +29 -0
  322. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/top_node.py +11 -0
  323. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/top_node_type.py +8 -0
  324. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/transfer_element.py +11 -0
  325. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/transfer_element_type.py +33 -0
  326. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/transfer_element_type_transfer_class.py +19 -0
  327. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/transfer_element_type_transfer_element.py +27 -0
  328. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/translation.py +11 -0
  329. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/translation_type.py +36 -0
  330. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/translation_type_translations.py +22 -0
  331. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/tree_value_type_of.py +11 -0
  332. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/tree_value_type_of_type.py +8 -0
  333. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_mod.py +11 -0
  334. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_related_type.py +11 -0
  335. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_related_type_type.py +22 -0
  336. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_related_type_type_base_type.py +29 -0
  337. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_restriction.py +11 -0
  338. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_restriction_type.py +31 -0
  339. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_restriction_type_trtr.py +19 -0
  340. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_restriction_type_type_restriction.py +19 -0
  341. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_type.py +28 -0
  342. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_type_lftparent.py +29 -0
  343. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_type_ltparent.py +29 -0
  344. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unique_constraint.py +11 -0
  345. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unique_constraint_type.py +40 -0
  346. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unique_constraint_type_unique_def.py +22 -0
  347. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unique_constraint_type_where.py +116 -0
  348. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unit.py +11 -0
  349. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unit_function.py +11 -0
  350. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unit_function_type.py +19 -0
  351. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unit_ref.py +11 -0
  352. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unit_ref_type.py +19 -0
  353. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unit_ref_type_unit.py +19 -0
  354. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unit_type.py +28 -0
  355. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unit_type_definition.py +116 -0
  356. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/view.py +11 -0
  357. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/view_type.py +46 -0
  358. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/view_type_formation_parameter.py +116 -0
  359. ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/view_type_where.py +116 -0
  360. ili2py/interfaces/interlis/interlis_24/ilismeta16/README.md +6 -0
  361. ili2py/interfaces/interlis/interlis_24/ilismeta16/__init__.py +45 -0
  362. ili2py/interfaces/interlis/interlis_24/ilismeta16/helper.py +65 -0
  363. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/__init__.py +0 -0
  364. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/abstract_element.py +85 -0
  365. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/constraints.py +47 -0
  366. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/__init__.py +0 -0
  367. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/extendable_me.py +102 -0
  368. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/__init__.py +0 -0
  369. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/domain_type/__init__.py +0 -0
  370. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/domain_type/class_related_type/__init__.py +0 -0
  371. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/domain_type/class_related_type/class_related_type.py +26 -0
  372. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/domain_type/class_related_type/role.py +56 -0
  373. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/domain_type/domain_type.py +171 -0
  374. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/expression/__init__.py +0 -0
  375. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/expression/expression.py +52 -0
  376. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/expression/factor/__init__.py +0 -0
  377. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/expression/factor/factor.py +46 -0
  378. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/type_class.py +77 -0
  379. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/line_form.py +39 -0
  380. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/meta_element.py +47 -0
  381. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/model_data.py +132 -0
  382. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/package/__init__.py +0 -0
  383. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/package/package.py +99 -0
  384. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/path_elements.py +51 -0
  385. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/references.py +57 -0
  386. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/serialization_elements.py +81 -0
  387. ili2py/interfaces/interlis/interlis_24/ilismeta16/model_translation/__init__.py +0 -0
  388. ili2py/interfaces/interlis/interlis_24/ilismeta16/shared.py +5 -0
  389. ili2py/mappers/__init__.py +0 -0
  390. ili2py/mappers/helpers.py +1018 -0
  391. ili2py/mappers/internal/__init__.py +0 -0
  392. ili2py/mappers/internal/ilismeta16/__init__.py +0 -0
  393. ili2py/mappers/internal/ilismeta16/domain.py +29 -0
  394. ili2py/mappers/internal/ilismeta16/model_data/__init__.py +0 -0
  395. ili2py/mappers/internal/ilismeta16/model_data/definitions.py +401 -0
  396. ili2py/mappers/internal/ilismeta16/model_data/domain.py +31 -0
  397. ili2py/mappers/internal/ilismeta16/model_data/types.py +94 -0
  398. ili2py/mappers/internal/ilismeta16/model_data/units.py +49 -0
  399. ili2py/py.typed +0 -0
  400. ili2py/readers/__init__.py +0 -0
  401. ili2py/readers/interlis_23/__init__.py +0 -0
  402. ili2py/readers/interlis_23/xtf/__init__.py +0 -0
  403. ili2py/readers/interlis_23/xtf/xsdata.py +38 -0
  404. ili2py/readers/interlis_24/__init__.py +0 -0
  405. ili2py/readers/interlis_24/ilismeta16/__init__.py +0 -0
  406. ili2py/readers/interlis_24/ilismeta16/xsdata.py +40 -0
  407. ili2py/readers/interlis_24/xtf/__init__.py +0 -0
  408. ili2py/scripts/__init__.py +0 -0
  409. ili2py/scripts/config.py +21 -0
  410. ili2py/scripts/generate_docs_diagrams.py +177 -0
  411. ili2py/scripts/generate_mermaid_diagrams.py +118 -0
  412. ili2py/scripts/generate_plantuml_diagrams.py +156 -0
  413. ili2py/scripts/generate_test_output.py +632 -0
  414. ili2py/writers/__init__.py +0 -0
  415. ili2py/writers/diagram/__init__.py +33 -0
  416. ili2py/writers/diagram/interlis/__init__.py +115 -0
  417. ili2py/writers/diagram/interlis/templates/dot/class.jinja2 +34 -0
  418. ili2py/writers/diagram/interlis/templates/dot/classes.jinja2 +4 -0
  419. ili2py/writers/diagram/interlis/templates/dot/dot.jinja2 +48 -0
  420. ili2py/writers/diagram/interlis/templates/mermaid/mermaid.jinja2 +69 -0
  421. ili2py/writers/diagram/interlis/templates/plantuml/plantuml.jinja2 +62 -0
  422. ili2py/writers/diagram/interlis/templates/plantuml_role_members/plantuml_role_members.jinja2 +78 -0
  423. ili2py/writers/diagram/interlis/uml.py +353 -0
  424. ili2py/writers/helpers.py +36 -0
  425. ili2py/writers/py/__init__.py +0 -0
  426. ili2py/writers/py/constraints.py +183 -0
  427. ili2py/writers/py/interlis23/templates/classes.jinja2 +218 -0
  428. ili2py/writers/py/interlis23/templates/convertable_types.jinja2 +50 -0
  429. ili2py/writers/py/interlis23/templates/coord_types.jinja2 +126 -0
  430. ili2py/writers/py/interlis23/templates/domain_types.jinja2 +26 -0
  431. ili2py/writers/py/interlis23/templates/enumerations.jinja2 +27 -0
  432. ili2py/writers/py/interlis23/templates/library_init.jinja2 +5 -0
  433. ili2py/writers/py/interlis23/templates/line_types.jinja2 +162 -0
  434. ili2py/writers/py/interlis23/templates/module.jinja2 +89 -0
  435. ili2py/writers/py/interlis23/templates/package_init.jinja2 +56 -0
  436. ili2py/writers/py/interlis23/templates/references.jinja2 +26 -0
  437. ili2py/writers/py/interlis23/templates/xtf_opening.jinja2 +126 -0
  438. ili2py/writers/py/interlis24/templates/classes.jinja2 +225 -0
  439. ili2py/writers/py/interlis24/templates/convertable_types.jinja2 +50 -0
  440. ili2py/writers/py/interlis24/templates/coord_types.jinja2 +120 -0
  441. ili2py/writers/py/interlis24/templates/domain_types.jinja2 +26 -0
  442. ili2py/writers/py/interlis24/templates/enumerations.jinja2 +27 -0
  443. ili2py/writers/py/interlis24/templates/library_init.jinja2 +5 -0
  444. ili2py/writers/py/interlis24/templates/line_type_polyline.jinja2 +31 -0
  445. ili2py/writers/py/interlis24/templates/line_type_polyline_multi.jinja2 +49 -0
  446. ili2py/writers/py/interlis24/templates/line_type_segment.jinja2 +27 -0
  447. ili2py/writers/py/interlis24/templates/line_type_surface.jinja2 +31 -0
  448. ili2py/writers/py/interlis24/templates/line_type_surface_boundary.jinja2 +40 -0
  449. ili2py/writers/py/interlis24/templates/line_type_surface_multi.jinja2 +50 -0
  450. ili2py/writers/py/interlis24/templates/line_types.jinja2 +41 -0
  451. ili2py/writers/py/interlis24/templates/module.jinja2 +89 -0
  452. ili2py/writers/py/interlis24/templates/package_init.jinja2 +56 -0
  453. ili2py/writers/py/interlis24/templates/references.jinja2 +13 -0
  454. ili2py/writers/py/interlis24/templates/xtf_opening.jinja2 +120 -0
  455. ili2py/writers/py/python_structure.py +1829 -0
  456. ili2py/writers/py/render.py +180 -0
  457. interlis2py-0.1.0.dist-info/METADATA +91 -0
  458. interlis2py-0.1.0.dist-info/RECORD +462 -0
  459. interlis2py-0.1.0.dist-info/WHEEL +5 -0
  460. interlis2py-0.1.0.dist-info/entry_points.txt +2 -0
  461. interlis2py-0.1.0.dist-info/licenses/LICENSE +661 -0
  462. interlis2py-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1018 @@
1
+ import logging
2
+ from dataclasses import dataclass
3
+ from typing import Any, Protocol
4
+
5
+ from ili2py.interfaces.interlis.interlis_24.ilismeta.ilismeta16_2022_10_10 import (
6
+ AllowedInBasket,
7
+ AttrOrParam,
8
+ AxisSpec,
9
+ BaseClass,
10
+ Class,
11
+ ClassRefType,
12
+ ClassType,
13
+ ConstraintType,
14
+ CoordType,
15
+ CoordTypeType,
16
+ DataUnit,
17
+ DataUnitType,
18
+ Dependency,
19
+ DomainTypeType,
20
+ ExistenceConstraintType,
21
+ ExplicitAssocAccess,
22
+ ExtendableMetype,
23
+ Ili1TransferElement,
24
+ Import,
25
+ LineForm,
26
+ LinesForm,
27
+ LineType,
28
+ LineTypeType,
29
+ MetaAttribute,
30
+ MetaElementType,
31
+ Model,
32
+ Multiplicity,
33
+ MultiValueType,
34
+ ObjectType,
35
+ Role,
36
+ SetConstraintType,
37
+ SimpleConstraintType,
38
+ SubModel,
39
+ TransferElement,
40
+ UniqueConstraintType,
41
+ View,
42
+ )
43
+ from ili2py.interfaces.interlis.interlis_24.ilismeta16 import DataSection
44
+
45
+
46
+ class HasOptionalRef(Protocol):
47
+ @property
48
+ def ref(self) -> str | None: ...
49
+
50
+
51
+ def mandatory[T](value: T | None) -> T:
52
+ """
53
+ Narrows a value which xsdata generated as optional, but which is MANDATORY in
54
+ IlisMeta16 (tests/data/ilismeta16/IlisMeta16.ili).
55
+
56
+ Args:
57
+ value: The value read from the IMD.
58
+
59
+ Returns:
60
+ The value itself.
61
+
62
+ Raises:
63
+ ValueError: If the value is missing, the IMD does not conform to IlisMeta16.
64
+ """
65
+ if value is None:
66
+ raise ValueError("MANDATORY value of IlisMeta16 is missing in the IMD")
67
+ return value
68
+
69
+
70
+ def mandatory_ref(reference: HasOptionalRef | None) -> str:
71
+ """
72
+ Narrows a reference (and its REF) which is MANDATORY in IlisMeta16, see `mandatory`.
73
+
74
+ Args:
75
+ reference: The reference element read from the IMD.
76
+
77
+ Returns:
78
+ The OID the reference points to.
79
+ """
80
+ return mandatory(mandatory(reference).ref)
81
+
82
+
83
+ @dataclass
84
+ class Reference:
85
+ model: str
86
+ type: type[Any]
87
+ instance: Any
88
+
89
+
90
+ class Index:
91
+ """
92
+ Attributes:
93
+ index: The index of all elements which have a TID. The TID is the key.
94
+ imported_p: Which Package is imported by what packages. The key of the dict is the
95
+ package tid which has a list of tid's of packages which are importing it.
96
+ IMPORTANT: Explicit imports only!
97
+ importing_p: The other direction as imported_p. Key is the package tid which has a list
98
+ of package tid's it is exporting. IMPORTANT: Explicit imports only!
99
+ allowed_in_basket_class_in_basket: Key is the class tid, and it has a list of basket
100
+ tid's which is in.
101
+ allowed_in_basket_of_data_unit: TODO
102
+ transfer_class: A representation of the Class construct out of the imd which is
103
+ specifically for parsing transfer data more easily. The key is the class tid and it
104
+ has a list of tuple containing the order number of the attribute and the tid to the
105
+ linked attribute.
106
+ transfer_element: The other direction as transfer_class. The key is the attribute and
107
+ the value is the element it is referenced to AttrOrParam OR ExplicitAssocAccess OR
108
+ Role
109
+ ili1_transfer_class: TODO
110
+ ili1_ref_attr: TODO
111
+ base_class: TODO
112
+ class_related_type: TODO
113
+ coord_type: Key is the tid of the CoordType, value is a list of tid's to the linked
114
+ coordinates (NumType).
115
+ axis: The opposite direction of coord_type. The key is the tid of the axis related
116
+ NumType and the value is the CoordType the element belongs to.
117
+ line_type: The key is the tid of the LineType value is a list of tid's to the LineForm
118
+ elements.
119
+ line_form: The opposite direction of line_type. Key is the tid of the LineForm and
120
+ value is the list of tid's of LineTypes which are of this LineForm.
121
+ class_class_attribute: The key is the tid of Class of Kind Class and value is a list of
122
+ tid's to the AttrOrParam which has attr_parent defined.
123
+ class_class_parameter: The key is the tid of Class of Kind Class and value is a list of
124
+ tid's to the AttrOrParam which has param_parent defined.
125
+ class_association_attribute: The key is the tid of Class of Kind Association and value
126
+ is a list of tid's to the AttrOrParam which has attr_parent defined.
127
+ class_association_parameter: The key is the tid of Class of Kind Association and value
128
+ is a list of tid's to the AttrOrParam which has param_parent defined.
129
+ association_role: Key is the tid of the Role and value is a list of tid's to the Class
130
+ of kind Association belonging to the Role.
131
+ association_to_class_ref_attributes: Key is the tid of Class of kind Class and value is
132
+ a list of tuple which contain the tid to the Role and the tid to the related Class
133
+ kind Class. This is the the embedded reference, where the actual class might get
134
+ additional attributes by the association definition. It explicitly is only used
135
+ when association is one or zero on the side of the class in question.
136
+ elements_in_package: Key is the tid of the package (Model, Submodel) and value is a
137
+ list of tid's of elements which are in the package.
138
+ topic_basket: Key is the tid of the package (SubModel) and value is the tid of the
139
+ corresponding basket.
140
+ dependency_using: Key is the
141
+ """
142
+
143
+ def __init__(self, data_section: DataSection):
144
+ self.aa_not_touched: list = []
145
+ self.index: dict = {}
146
+ self.imported_p: dict = {}
147
+ self.importing_p: dict = {}
148
+ self.models: list = []
149
+
150
+ self.allowed_in_basket_class_in_basket: dict = {}
151
+ self.allowed_in_basket_of_data_unit: dict = {}
152
+
153
+ self.transfer_class: dict = {}
154
+ self.transfer_element: dict = {}
155
+
156
+ self.ili1_transfer_class: dict = {}
157
+ self.ili1_ref_attr: dict = {}
158
+
159
+ self.base_class: dict = {}
160
+ self.class_related_type: dict = {}
161
+
162
+ self.coord_type: dict = {}
163
+ self.axis: dict = {}
164
+
165
+ self.line_type: dict = {}
166
+ self.line_form: dict = {}
167
+
168
+ self.types_used_by_attributes: dict = {}
169
+
170
+ self.class_class_attribute: dict = {}
171
+ self.class_class_parameter: dict = {}
172
+ self.class_association_attribute: dict = {}
173
+ self.class_association_parameter: dict = {}
174
+
175
+ self.geometric_attributes: list = []
176
+ self.geometric_attributes_multi: list = []
177
+ self.geometric_attributes_line_form: dict = {}
178
+ self.geometric_attributes_point_like: list = []
179
+ self.geometric_attributes_line_like: list = []
180
+ self.geometric_attributes_polygon_like: list = []
181
+
182
+ self.geometric_classes: dict = {}
183
+
184
+ self.association_role: dict = {}
185
+ self.association_to_class_ref_attributes: dict = {}
186
+ self.association_as_class_ref_attributes: dict = {}
187
+ self.association_bucket: dict = {}
188
+ self.associated_classes: dict = {}
189
+
190
+ self.types_bucket: dict[str, list[Any]] = {}
191
+ self.types_kind_bucket: dict[str, list[Any]] = {}
192
+ self.type_super_classes: dict[str, list[str]] = {}
193
+ self.type_sub_classes: dict[str, list[str]] = {}
194
+
195
+ self.metaelement_metaattributes: dict = {}
196
+
197
+ self.class_in_package: dict = {}
198
+ self.submodel_in_package: dict = {}
199
+ self.association_in_package: dict = {}
200
+ self.elements_in_package: dict = {}
201
+ self.elements_in_package_class_class: dict = {}
202
+ self.elements_in_package_class_structure: dict = {}
203
+ self.elements_in_package_class_association: dict = {}
204
+ self.topic_basket: dict = {}
205
+ self.class_subclassed_by: dict = {}
206
+
207
+ self.dependency_depends_on: dict = {}
208
+ self.dependency_used_by: dict = {}
209
+
210
+ self.object_oid_in_submodel: dict = {}
211
+ self.object_oid_in_model: dict = {}
212
+
213
+ self.basket_oid_in_submodel: dict = {}
214
+ self.basket_oid_in_model: dict = {}
215
+
216
+ self.class_with_simple_constraints: dict = {}
217
+ self.class_with_existence_constraints: dict = {}
218
+ self.class_with_unique_constraints: dict = {}
219
+ self.class_with_set_constraints: dict = {}
220
+ self.domain_with_simple_constraints: dict = {}
221
+ self.domain_with_existence_constraints: dict = {}
222
+ self.domain_with_unique_constraints: dict = {}
223
+ self.domain_with_set_constraints: dict = {}
224
+
225
+ self.types_in_domain: dict = {}
226
+
227
+ self.depth_tree: list = []
228
+
229
+ for basket in data_section.ModelData:
230
+ for element in basket.choice:
231
+ self.unwrap_tree(element)
232
+ for basket in data_section.ModelData:
233
+ for element in basket.choice:
234
+ self.prepare_tree(element)
235
+
236
+ if self.types_kind_bucket.get("Class.Association"):
237
+ for association_class in self.types_kind_bucket["Class.Association"]:
238
+ self.prepare_association(association_class)
239
+
240
+ self.root_model: str = self.models[-1]
241
+ self.depth_tree.append([self.root_model])
242
+ self.assemble_depth_tree(self.root_model, [self.root_model])
243
+ # evaluated for its side effect: fills self.aa_not_touched
244
+ _ = self.associations_embedded
245
+
246
+ def assemble_depth_tree(self, model_name: str, visited_models: list):
247
+ selected_models = []
248
+ for importing in self.importing_p[model_name]:
249
+ if importing not in visited_models:
250
+ visited_models.append(importing)
251
+ selected_models.append(importing)
252
+ if len(selected_models) > 0:
253
+ self.depth_tree.append(self.depth_tree[-1] + selected_models)
254
+ for importing in self.importing_p[model_name]:
255
+ self.assemble_depth_tree(importing, visited_models)
256
+
257
+ @staticmethod
258
+ def role_multiplicity(role: Role) -> Multiplicity:
259
+ """
260
+ Returns the multiplicity of a role. It is optional in IlisMeta16, but ili2c always
261
+ writes it. If it is missing, the INTERLIS default is used: {0..1} for the role of a
262
+ composition, {0..*} otherwise (ili2-refman_2006-04-13_d.pdf, 2.7.3).
263
+
264
+ Args:
265
+ role: The role whose multiplicity is looked up.
266
+
267
+ Returns:
268
+ The multiplicity of the role.
269
+ """
270
+ if role.multiplicity and role.multiplicity.multiplicity:
271
+ return role.multiplicity.multiplicity
272
+ logging.warning(f"{role.tid} has no multiplicity, the INTERLIS default is used")
273
+ return Multiplicity(min=0, max=1 if role.strongness == "Comp" else None)
274
+
275
+ def prepare_tree(self, element: Any):
276
+ self.resolve_references(element)
277
+ self.handle_types(element)
278
+
279
+ def _follow_super_ref(self, element: ExtendableMetype, super_references_list: list):
280
+ if element.super is not None:
281
+ reference = mandatory(element.super.ref)
282
+ if reference not in self.type_sub_classes:
283
+ self.type_sub_classes[reference] = []
284
+ self.type_sub_classes[reference].append(mandatory(element.tid))
285
+ if reference not in super_references_list:
286
+ super_references_list.append(reference)
287
+ self._follow_super_ref(self.index[reference], super_references_list)
288
+
289
+ def handle_types(self, element: Any):
290
+ if element.__class__.__name__ not in self.types_bucket:
291
+ self.types_bucket[element.__class__.__name__] = []
292
+ self.types_bucket[element.__class__.__name__].append(element)
293
+ if hasattr(element, "kind"):
294
+ key = f"{element.__class__.__name__}.{element.kind}"
295
+ if key not in self.types_kind_bucket:
296
+ self.types_kind_bucket[key] = []
297
+ self.types_kind_bucket[key].append(element)
298
+ if hasattr(element, "super") and element.super is not None:
299
+ super_references_list: list[str] = []
300
+ self._follow_super_ref(element, super_references_list)
301
+ if element.tid not in self.type_super_classes:
302
+ self.type_super_classes[element.tid] = []
303
+ self.type_super_classes[element.tid] += super_references_list
304
+
305
+ def resolve_references(self, element: Any):
306
+ """
307
+ Helper method to resolve references between elements.
308
+
309
+ IMPORTANT: the order in which the handle_... methods are called is important!!!
310
+
311
+ Args:
312
+ element: the element which is looked up and which references will be deconstructed.
313
+ """
314
+ if isinstance(element, MetaElementType):
315
+ # we want to track all basic meta elements
316
+ self.handle_element_in_package(element)
317
+ if isinstance(element, Import):
318
+ self.handle_import(element)
319
+ elif isinstance(element, AllowedInBasket):
320
+ self.handle_allowed_in_basket(element)
321
+ elif isinstance(element, TransferElement):
322
+ self.handle_transfer_element(element)
323
+ elif isinstance(element, Ili1TransferElement):
324
+ self.handle_ili1_transfer_element(element)
325
+ elif isinstance(element, BaseClass):
326
+ self.handle_base_class(element)
327
+ elif isinstance(element, AxisSpec):
328
+ self.handle_axis_spec(element)
329
+ elif isinstance(element, LinesForm):
330
+ self.handle_lines_form(element)
331
+ elif isinstance(element, Role):
332
+ self.handle_role(element)
333
+ elif isinstance(element, AttrOrParam):
334
+ self.handle_attr_or_param(element)
335
+ self.handle_geometric(element)
336
+ self.handle_multivalue_type(element)
337
+ elif isinstance(element, MetaAttribute):
338
+ self.handle_metaattribute(element)
339
+ elif isinstance(element, Dependency):
340
+ self.handle_dependency(element)
341
+ elif isinstance(element, Class):
342
+ self.handle_class(element)
343
+ elif isinstance(element, ConstraintType):
344
+ self.handle_constraint(element)
345
+ if isinstance(element, DomainTypeType):
346
+ self.handle_domain_type(element)
347
+
348
+ def handle_import(self, element: Import):
349
+ """
350
+ Resolves the Import references between Models.
351
+ Args:
352
+ element: The import reference which will be handled.
353
+ """
354
+ # Null-safety checks to prevent AttributeError
355
+ if element.imported_p is None or element.importing_p is None:
356
+ return
357
+ if not hasattr(element.imported_p, "ref") or element.imported_p.ref is None:
358
+ return
359
+ if not hasattr(element.importing_p, "ref") or element.importing_p.ref is None:
360
+ return
361
+
362
+ imported_p_bucket = self.imported_p[element.imported_p.ref]
363
+ if element.imported_p.ref not in imported_p_bucket:
364
+ imported_p_bucket.append(element.importing_p.ref)
365
+ importing_p_bucket = self.importing_p[element.importing_p.ref]
366
+ if element.importing_p.ref not in importing_p_bucket:
367
+ importing_p_bucket.append(element.imported_p.ref)
368
+
369
+ def handle_allowed_in_basket(self, element: AllowedInBasket):
370
+ """
371
+
372
+ Args:
373
+ element: The allowed-in-basket reference which will be handled.
374
+ """
375
+ class_in_basket = mandatory_ref(element.class_in_basket)
376
+ of_data_unit = mandatory_ref(element.of_data_unit)
377
+ of_data_unit_bucket = self.allowed_in_basket_class_in_basket[class_in_basket]
378
+ if of_data_unit not in of_data_unit_bucket:
379
+ of_data_unit_bucket.append(of_data_unit)
380
+ class_in_basket_bucket = self.allowed_in_basket_of_data_unit[of_data_unit]
381
+ if class_in_basket not in class_in_basket_bucket:
382
+ class_in_basket_bucket.append(class_in_basket)
383
+
384
+ def handle_transfer_element(self, element: TransferElement):
385
+ transfer_class = mandatory_ref(element.transfer_class)
386
+ transfer_element = mandatory(element.transfer_element)
387
+ transfer_element_ref = mandatory(transfer_element.ref)
388
+ transfer_class_bucket = self.transfer_class[transfer_class]
389
+ self.transfer_element[transfer_element_ref] = transfer_class
390
+ if transfer_element_ref not in transfer_class_bucket:
391
+ transfer_class_bucket.append((transfer_element.order_pos, transfer_element_ref))
392
+
393
+ def handle_ili1_transfer_element(self, element: Ili1TransferElement):
394
+ ili1_transfer_class = mandatory_ref(element.ili1_transfer_class)
395
+ ili1_ref_attr = mandatory_ref(element.ili1_ref_attr)
396
+ ili1_transfer_class_bucket = self.ili1_transfer_class[ili1_transfer_class]
397
+ ili1_ref_bucket = self.ili1_ref_attr[ili1_ref_attr]
398
+ if ili1_transfer_class not in ili1_ref_bucket:
399
+ ili1_ref_bucket.append(ili1_transfer_class)
400
+ if ili1_ref_attr not in ili1_transfer_class_bucket:
401
+ ili1_transfer_class_bucket.append(ili1_ref_attr)
402
+
403
+ def handle_base_class(self, element: BaseClass):
404
+ base_class_ref = mandatory_ref(element.base_class)
405
+ crt_ref = mandatory_ref(element.crt)
406
+ base_class_bucket = self.base_class[base_class_ref]
407
+ self.class_related_type[crt_ref] = base_class_ref
408
+ if crt_ref not in base_class_bucket:
409
+ base_class_bucket.append(crt_ref)
410
+
411
+ # handle association unwrapping
412
+ base_class = self.index[base_class_ref]
413
+ class_related_type = self.index[crt_ref]
414
+ if isinstance(base_class, Class) and isinstance(class_related_type, Role):
415
+ # this is an association part
416
+ association = self.index[mandatory_ref(class_related_type.association)]
417
+ multiplicity = Index.role_multiplicity(class_related_type)
418
+ if association.tid not in self.association_bucket:
419
+ self.association_bucket[association.tid] = []
420
+ self.association_bucket[association.tid].append(
421
+ (
422
+ class_related_type.tid,
423
+ base_class.tid,
424
+ class_related_type.strongness,
425
+ multiplicity.min,
426
+ multiplicity.max,
427
+ )
428
+ )
429
+ if base_class.tid not in self.associated_classes:
430
+ self.associated_classes[base_class.tid] = []
431
+ self.associated_classes[base_class.tid].append(association.tid)
432
+
433
+ def handle_axis_spec(self, element: AxisSpec):
434
+ coord_type = mandatory_ref(element.coord_type)
435
+ axis = mandatory_ref(element.axis)
436
+ coord_type_bucket = self.coord_type[coord_type]
437
+ self.axis[axis] = coord_type
438
+ if axis not in coord_type_bucket:
439
+ coord_type_bucket.append(axis)
440
+
441
+ def handle_lines_form(self, element: LinesForm):
442
+ line_form = mandatory_ref(element.line_form)
443
+ line_type = mandatory_ref(element.line_type)
444
+ line_form_bucket = self.line_form[line_form]
445
+ line_type_bucket = self.line_type[line_type]
446
+ if line_form not in line_type_bucket:
447
+ line_type_bucket.append(line_form)
448
+ if line_type not in line_form_bucket:
449
+ line_form_bucket.append(line_type)
450
+
451
+ def handle_role(self, element: Role):
452
+ # a Role is always part of an association (AssocRole)
453
+ association = mandatory_ref(element.association)
454
+ if association not in self.association_role:
455
+ self.association_role[association] = []
456
+ self.association_role[association].append(element.tid)
457
+
458
+ def handle_metaattribute(self, element: MetaAttribute):
459
+ meta_element = mandatory_ref(element.meta_element)
460
+ if meta_element not in self.metaelement_metaattributes:
461
+ self.metaelement_metaattributes[meta_element] = []
462
+ self.metaelement_metaattributes[meta_element].append(element.tid)
463
+
464
+ def handle_element_in_package(self, element: MetaElementType):
465
+ if (
466
+ element.element_in_package
467
+ and hasattr(element.element_in_package, "ref")
468
+ and element.element_in_package.ref
469
+ ):
470
+ if element.element_in_package.ref not in self.elements_in_package:
471
+ self.elements_in_package[element.element_in_package.ref] = []
472
+ self.elements_in_package[element.element_in_package.ref].append(element.tid)
473
+ if isinstance(element, DataUnitType) and (
474
+ element.element_in_package
475
+ and hasattr(element.element_in_package, "ref")
476
+ and element.element_in_package.ref
477
+ ):
478
+ self.topic_basket[element.element_in_package.ref] = element.tid
479
+ if element.oid:
480
+ package = self.index[element.element_in_package.ref]
481
+ if isinstance(package, SubModel):
482
+ self.basket_oid_in_submodel[package.tid] = element.tid
483
+ package = self.index[mandatory_ref(package.element_in_package)]
484
+ self.basket_oid_in_model[package.tid] = element.tid
485
+ if isinstance(element, ClassType):
486
+ if element.kind == "Class":
487
+ if (
488
+ element.element_in_package
489
+ and hasattr(element.element_in_package, "ref")
490
+ and element.element_in_package.ref
491
+ not in self.elements_in_package_class_class
492
+ ):
493
+ self.elements_in_package_class_class[element.element_in_package.ref] = []
494
+ if element.element_in_package and hasattr(element.element_in_package, "ref"):
495
+ self.elements_in_package_class_class[
496
+ element.element_in_package.ref
497
+ ].append(element.tid)
498
+ elif element.kind == "Structure":
499
+ if (
500
+ element.element_in_package
501
+ and hasattr(element.element_in_package, "ref")
502
+ and element.element_in_package.ref
503
+ not in self.elements_in_package_class_structure
504
+ ):
505
+ self.elements_in_package_class_structure[
506
+ element.element_in_package.ref
507
+ ] = []
508
+ if element.element_in_package and hasattr(element.element_in_package, "ref"):
509
+ self.elements_in_package_class_structure[
510
+ element.element_in_package.ref
511
+ ].append(element.tid)
512
+ elif element.kind == "Association":
513
+ if (
514
+ element.element_in_package
515
+ and hasattr(element.element_in_package, "ref")
516
+ and element.element_in_package.ref
517
+ not in self.elements_in_package_class_association
518
+ ):
519
+ self.elements_in_package_class_association[
520
+ element.element_in_package.ref
521
+ ] = []
522
+ if element.element_in_package and hasattr(element.element_in_package, "ref"):
523
+ self.elements_in_package_class_association[
524
+ element.element_in_package.ref
525
+ ].append(element.tid)
526
+ else:
527
+ logging.debug(
528
+ f"Element kind of Class type was not handled correctly: {element}"
529
+ )
530
+
531
+ def handle_dependency(self, element: Dependency):
532
+ if element.using and hasattr(element.using, "ref") and element.using.ref:
533
+ if element.using.ref not in self.dependency_used_by:
534
+ self.dependency_used_by[element.using.ref] = []
535
+ if (
536
+ element.dependent
537
+ and hasattr(element.dependent, "ref")
538
+ and element.dependent.ref
539
+ ):
540
+ self.dependency_used_by[element.using.ref].append(element.dependent.ref)
541
+ if element.dependent and hasattr(element.dependent, "ref") and element.dependent.ref:
542
+ if element.dependent.ref not in self.dependency_depends_on:
543
+ self.dependency_depends_on[element.dependent.ref] = []
544
+ if element.using and hasattr(element.using, "ref") and element.using.ref:
545
+ self.dependency_depends_on[element.dependent.ref].append(element.using.ref)
546
+
547
+ def unwrap_tree(self, element: Any):
548
+ """
549
+ Helper method to assemble a one dimensional index with the elements unique
550
+ identifiers *tid* as the key.
551
+
552
+ Args:
553
+ element: The object to inspect for flattening.
554
+ """
555
+ if hasattr(element, "tid"):
556
+ if element.tid is None:
557
+ # element had no tid
558
+ logging.debug(f"Element {element} had no tid and is not added to the index.")
559
+ else:
560
+ # tid is not None
561
+ # the element has already a unique identifier. we can use this in the index
562
+ if element.tid in self.index:
563
+ raise LookupError(
564
+ f"Element {element.tid} was already in tree. "
565
+ f"Thats not allowed! {element} {self.index[element.tid]}"
566
+ )
567
+ else:
568
+ self.index[element.tid] = element
569
+ if isinstance(element, Model):
570
+ if element.tid not in self.imported_p:
571
+ self.imported_p[element.tid] = []
572
+ if element.tid not in self.importing_p:
573
+ self.importing_p[element.tid] = []
574
+ self.models.append(element.tid)
575
+ elif isinstance(element, SubModel):
576
+ if (
577
+ element.element_in_package
578
+ and element.element_in_package.ref not in self.submodel_in_package
579
+ ):
580
+ self.submodel_in_package[element.element_in_package.ref] = []
581
+ if element.element_in_package:
582
+ self.submodel_in_package[element.element_in_package.ref].append(
583
+ element.tid
584
+ )
585
+
586
+ elif isinstance(element, DataUnit):
587
+ if element.tid not in self.allowed_in_basket_of_data_unit:
588
+ self.allowed_in_basket_of_data_unit[element.tid] = []
589
+
590
+ elif isinstance(element, Class):
591
+ if element.tid not in self.allowed_in_basket_class_in_basket:
592
+ self.allowed_in_basket_class_in_basket[element.tid] = []
593
+ if element.tid not in self.transfer_class:
594
+ self.transfer_class[element.tid] = []
595
+ if element.tid not in self.ili1_transfer_class:
596
+ self.ili1_transfer_class[element.tid] = []
597
+ if element.tid not in self.base_class:
598
+ self.base_class[element.tid] = []
599
+ if element.kind == "Class":
600
+ if (
601
+ element.element_in_package
602
+ and element.element_in_package.ref not in self.class_in_package
603
+ ):
604
+ self.class_in_package[element.element_in_package.ref] = []
605
+ if element.element_in_package:
606
+ self.class_in_package[element.element_in_package.ref].append(
607
+ element.tid
608
+ )
609
+ if element.kind == "Association":
610
+ if (
611
+ element.element_in_package
612
+ and element.element_in_package.ref
613
+ not in self.association_in_package
614
+ ):
615
+ self.association_in_package[element.element_in_package.ref] = []
616
+ if element.element_in_package:
617
+ self.association_in_package[element.element_in_package.ref].append(
618
+ element.tid
619
+ )
620
+
621
+ elif isinstance(element, View):
622
+ if element.tid not in self.allowed_in_basket_class_in_basket:
623
+ self.allowed_in_basket_class_in_basket[element.tid] = []
624
+ if element.tid not in self.transfer_class:
625
+ self.transfer_class[element.tid] = []
626
+
627
+ elif isinstance(element, AttrOrParam):
628
+ if (
629
+ element.type_value
630
+ and hasattr(element.type_value, "ref")
631
+ and element.type_value.ref
632
+ ):
633
+ type_definition = self.index[element.type_value.ref]
634
+ type_ref = type_definition.tid
635
+ if (
636
+ isinstance(type_definition, MultiValueType)
637
+ and type_definition.name == "TYPE"
638
+ ):
639
+ type_ref = mandatory_ref(type_definition.base_type)
640
+ if type_ref not in self.types_used_by_attributes:
641
+ self.types_used_by_attributes[type_ref] = []
642
+ self.types_used_by_attributes[type_ref].append(element.tid)
643
+ if element.tid not in self.transfer_element:
644
+ self.transfer_element[element.tid] = None
645
+ if element.tid not in self.ili1_ref_attr:
646
+ self.ili1_ref_attr[element.tid] = []
647
+
648
+ elif isinstance(element, ExplicitAssocAccess):
649
+ if element.tid not in self.transfer_element:
650
+ self.transfer_element[element.tid] = None
651
+
652
+ elif isinstance(element, Role):
653
+ if element.tid not in self.transfer_element:
654
+ self.transfer_element[element.tid] = None
655
+ if element.tid not in self.ili1_ref_attr:
656
+ self.ili1_ref_attr[element.tid] = []
657
+ if element.tid not in self.class_related_type:
658
+ self.class_related_type[element.tid] = None
659
+
660
+ elif isinstance(element, (ClassRefType, ObjectType)):
661
+ if element.tid not in self.class_related_type:
662
+ self.class_related_type[element.tid] = None
663
+
664
+ elif isinstance(element, CoordType):
665
+ if element.tid not in self.coord_type:
666
+ self.coord_type[element.tid] = []
667
+
668
+ elif isinstance(element, LineType):
669
+ if element.tid not in self.line_type:
670
+ self.line_type[element.tid] = []
671
+
672
+ elif isinstance(element, LineForm):
673
+ if element.tid not in self.line_form:
674
+ self.line_form[element.tid] = []
675
+
676
+ def prepare_association(self, association_class: Class):
677
+ """
678
+ The following preassumptions were made:
679
+ - 1:n is installed as class attribute to the referenced class with the 1 side, a
680
+ backref attribute is installed at the referenced class as a list, if the
681
+ association itself has no attributes itself
682
+ - m:n is created as extra class with the attributes and references to the tid's of
683
+ the corresponding objects, same approach is implemented for any associaton which
684
+ has additional attributes itself
685
+ - QUESTION: what happens, if association has super class?
686
+ Args:
687
+ association_class ():
688
+
689
+ Returns:
690
+
691
+ """
692
+
693
+ if self.association_role.get(association_class.tid):
694
+ # we have associated classes in this association
695
+ association_members = self.association_role[association_class.tid]
696
+ else:
697
+ # association does not have associated classes
698
+ # this is the case when association is just a subclass of another one
699
+ # TODO: currently we step only one level deep here, this has to be recursively
700
+ # deep!
701
+ if association_class.super:
702
+ association_members = self.association_role[association_class.super.ref]
703
+ else:
704
+ association_members = []
705
+ from_class = None
706
+ attributes = []
707
+ for member_ref in association_members:
708
+ # handling of embedded associations
709
+ role: Role = self.index[member_ref]
710
+ multiplicity = Index.role_multiplicity(role)
711
+ linked = self.class_related_type[member_ref]
712
+ if not isinstance(linked, list):
713
+ linked = [linked]
714
+ for linked_class in linked:
715
+ # multiple classes can be linked with additional logical operator
716
+ # (currently OR is what is implemented according to ref manual)
717
+ if multiplicity.min in [0, 1] and multiplicity.max == 1:
718
+ # regarding ref manual direct embedded class attributes are only existing
719
+ # on exactly 1 or 0 related association targets - all others are modeled as
720
+ # own class like entities in the transfer data
721
+ attributes.append((role.tid, linked_class))
722
+ else:
723
+ from_class = linked_class
724
+ if from_class not in self.association_to_class_ref_attributes:
725
+ self.association_to_class_ref_attributes[from_class] = attributes
726
+ else:
727
+ self.association_to_class_ref_attributes[from_class] = (
728
+ self.association_to_class_ref_attributes[from_class] + attributes
729
+ )
730
+
731
+ def handle_attr_or_param(self, element: AttrOrParam):
732
+ if element.attr_parent:
733
+ referenced_class = self.index[element.attr_parent.ref]
734
+ if referenced_class.kind in ["Class", "Structure"]:
735
+ if element.attr_parent.ref not in self.class_class_attribute:
736
+ self.class_class_attribute[element.attr_parent.ref] = []
737
+ self.class_class_attribute[element.attr_parent.ref].append(element.tid)
738
+ elif referenced_class.kind == "Association":
739
+ if element.attr_parent.ref not in self.class_association_attribute:
740
+ self.class_association_attribute[element.attr_parent.ref] = []
741
+ self.class_association_attribute[element.attr_parent.ref].append(element.tid)
742
+ elif element.param_parent:
743
+ referenced_class = self.index[element.param_parent.ref]
744
+ if referenced_class.kind in ["Class", "Structure"]:
745
+ if element.param_parent.ref not in self.class_class_attribute:
746
+ self.class_class_attribute[element.param_parent.ref] = []
747
+ self.class_class_attribute[element.param_parent.ref].append(element.tid)
748
+ elif referenced_class.kind == "Association":
749
+ if element.param_parent.ref not in self.class_association_attribute:
750
+ self.class_association_attribute[element.param_parent.ref] = []
751
+ self.class_association_attribute[element.param_parent.ref].append(element.tid)
752
+
753
+ def handle_class(self, element: Class):
754
+ if element.oid and element.element_in_package:
755
+ package = self.index[element.element_in_package.ref]
756
+ if isinstance(package, SubModel):
757
+ self.object_oid_in_submodel[package.tid] = element.oid.ref
758
+ package = self.index[mandatory_ref(package.element_in_package)]
759
+ self.object_oid_in_model[package.tid] = element.oid.ref
760
+ if element.super:
761
+ if element.super.ref not in self.class_subclassed_by:
762
+ self.class_subclassed_by[element.super.ref] = []
763
+ self.class_subclassed_by[element.super.ref].append(element.tid)
764
+
765
+ def handle_constraint(self, element: ConstraintType):
766
+ if isinstance(element, SimpleConstraintType):
767
+ if element.to_class:
768
+ if element.to_class.ref not in self.class_with_simple_constraints:
769
+ self.class_with_simple_constraints[element.to_class.ref] = []
770
+ self.class_with_simple_constraints[element.to_class.ref].append(element.tid)
771
+ if element.to_domain:
772
+ if element.to_domain.ref not in self.domain_with_simple_constraints:
773
+ self.domain_with_simple_constraints[element.to_domain.ref] = []
774
+ self.domain_with_simple_constraints[element.to_domain.ref].append(element.tid)
775
+ elif isinstance(element, ExistenceConstraintType):
776
+ if element.to_class:
777
+ if element.to_class.ref not in self.class_with_existence_constraints:
778
+ self.class_with_existence_constraints[element.to_class.ref] = []
779
+ self.class_with_existence_constraints[element.to_class.ref].append(element.tid)
780
+ if element.to_domain:
781
+ if element.to_domain.ref not in self.domain_with_existence_constraints:
782
+ self.domain_with_existence_constraints[element.to_domain.ref] = []
783
+ self.domain_with_existence_constraints[element.to_domain.ref].append(
784
+ element.tid
785
+ )
786
+ elif isinstance(element, UniqueConstraintType):
787
+ if element.to_class:
788
+ if element.to_class.ref not in self.class_with_unique_constraints:
789
+ self.class_with_unique_constraints[element.to_class.ref] = []
790
+ self.class_with_unique_constraints[element.to_class.ref].append(element.tid)
791
+ if element.to_domain:
792
+ if element.to_domain.ref not in self.domain_with_unique_constraints:
793
+ self.domain_with_unique_constraints[element.to_domain.ref] = []
794
+ self.domain_with_unique_constraints[element.to_domain.ref].append(element.tid)
795
+ elif isinstance(element, SetConstraintType):
796
+ if element.to_class:
797
+ if element.to_class.ref not in self.class_with_set_constraints:
798
+ self.class_with_set_constraints[element.to_class.ref] = []
799
+ self.class_with_set_constraints[element.to_class.ref].append(element.tid)
800
+ if element.to_domain:
801
+ if element.to_domain.ref not in self.domain_with_set_constraints:
802
+ self.domain_with_set_constraints[element.to_domain.ref] = []
803
+ self.domain_with_set_constraints[element.to_domain.ref].append(element.tid)
804
+ else:
805
+ logging.warning(f"Constraint was not handled as expected: {element}")
806
+
807
+ def handle_domain_type(self, element: DomainTypeType):
808
+ if element.name not in ["TYPE", "C1", "C2", "C3"] and element.element_in_package:
809
+ if element.element_in_package.ref not in self.types_in_domain:
810
+ self.types_in_domain[element.element_in_package.ref] = []
811
+ self.types_in_domain[element.element_in_package.ref].append(element)
812
+
813
+ def handle_geometric(
814
+ self,
815
+ element: AttrOrParam,
816
+ origin_type: CoordType | LineType | None = None,
817
+ multi: bool = False,
818
+ ):
819
+ type_definition = origin_type or self.index[mandatory_ref(element.type_value)]
820
+ if isinstance(type_definition, (CoordType, LineType)):
821
+ inner_multi = multi if origin_type else bool(type_definition.multi)
822
+ if element.tid not in self.geometric_attributes:
823
+ self.geometric_attributes.append(element.tid)
824
+ if inner_multi and element.tid not in self.geometric_attributes_multi:
825
+ self.geometric_attributes_multi.append(element.tid)
826
+ if isinstance(type_definition, CoordTypeType):
827
+ if element.tid not in self.geometric_attributes_point_like:
828
+ self.geometric_attributes_point_like.append(element.tid)
829
+ elif isinstance(type_definition, LineTypeType) and type_definition.kind in [
830
+ "Polyline",
831
+ "DirectedPolyline",
832
+ ]:
833
+ if element.tid not in self.geometric_attributes_line_like:
834
+ self.geometric_attributes_line_like.append(element.tid)
835
+ elif isinstance(type_definition, LineTypeType) and type_definition.kind in [
836
+ "Surface",
837
+ "Area",
838
+ ]:
839
+ if element.tid not in self.geometric_attributes_polygon_like:
840
+ self.geometric_attributes_polygon_like.append(element.tid)
841
+ else:
842
+ logging.debug(f"Unexpected geometric type {type_definition}")
843
+ if (
844
+ element.attr_parent
845
+ and hasattr(element.attr_parent, "ref")
846
+ and element.attr_parent.ref
847
+ ):
848
+ class_definition: Class = self.index[element.attr_parent.ref]
849
+ if class_definition.tid not in self.geometric_classes:
850
+ self.geometric_classes[class_definition.tid] = []
851
+ self.geometric_classes[class_definition.tid].append(element.tid)
852
+ # adding attribute info level to index
853
+ if (
854
+ isinstance(type_definition, LineType)
855
+ and element.tid not in self.geometric_attributes_line_form
856
+ ):
857
+ self.geometric_attributes_line_form[element.tid] = self.line_type[
858
+ type_definition.tid
859
+ ]
860
+ for attribute_oid in self.types_used_by_attributes.get(
861
+ class_definition.tid, []
862
+ ):
863
+ # the geometric class was used as a type for another class attribute
864
+ structure_attribute = self.index[attribute_oid]
865
+ if structure_attribute.type_value and hasattr(
866
+ structure_attribute.type_value, "ref"
867
+ ):
868
+ structure_attribute_type = self.index[
869
+ structure_attribute.type_value.ref
870
+ ]
871
+ multi = inner_multi
872
+ if structure_attribute_type.multiplicity and (
873
+ structure_attribute_type.multiplicity.multiplicity.max is None
874
+ or structure_attribute_type.multiplicity.multiplicity.max > 1
875
+ ):
876
+ multi = True
877
+ self.handle_geometric(structure_attribute, type_definition, multi)
878
+ else:
879
+ logging.debug(
880
+ f"Element {element.tid} has no attr_parent or attr_parent.ref is None"
881
+ )
882
+
883
+ def handle_multivalue_type(self, element: AttrOrParam):
884
+ pass
885
+
886
+ @property
887
+ def association_classes(self) -> dict:
888
+ """
889
+ Delivers all associations which represent own classes as defined in the reference
890
+ manual of INTERLIS.
891
+
892
+ Returns:
893
+ A dictionary where the key is the association oid and the value is a list of tuples
894
+ defining the attributes of the association and its roles.
895
+ """
896
+ association_classes: dict = {}
897
+ for association_oid in self.association_bucket:
898
+ association_object = self.index[association_oid]
899
+ role_definitions = self.association_bucket[association_oid]
900
+ maxes = []
901
+ logging.debug(f"Deciding if association is own class {association_object}")
902
+ for _role_oid, referenced_class_oid, _strongness, _min, max in role_definitions:
903
+ if max is None or max > 1:
904
+ maxes.append(referenced_class_oid)
905
+ if len(role_definitions) > 2:
906
+ association_classes[association_oid] = role_definitions
907
+ logging.debug(" Association has > 2 roles => own class")
908
+ elif len(maxes) == len(role_definitions):
909
+ association_classes[association_oid] = role_definitions
910
+ logging.debug(" Multiplicities are > 1 for all roles => own class")
911
+ elif len(maxes) == 1:
912
+ class_object = self.index[maxes[0]]
913
+ if (
914
+ class_object.element_in_package.ref
915
+ != association_object.element_in_package.ref
916
+ ):
917
+ association_classes[association_oid] = role_definitions
918
+ logging.debug(
919
+ " One roles multiplicity is > 1 but cant be embedded because "
920
+ f"target class {class_object} is in an other topic than the base "
921
+ f"association {association_object} => own class"
922
+ )
923
+ elif len(maxes) == 0:
924
+ logging.debug(" Multiplicities are <= 1 for all roles")
925
+ class_object2 = self.index[role_definitions[1][1]]
926
+ class_object1 = self.index[role_definitions[0][1]]
927
+ if (
928
+ class_object2.element_in_package.ref
929
+ != association_object.element_in_package.ref
930
+ != class_object1.element_in_package.ref
931
+ ):
932
+ logging.debug(
933
+ f" Both target classes {class_object2} {class_object1} are in "
934
+ f"different topic than base association {association_object} => own "
935
+ "class"
936
+ )
937
+ elif hasattr(association_object, "oid") and association_object.oid is not None:
938
+ association_classes[association_oid] = role_definitions
939
+ logging.debug(" Association has OID => own class")
940
+ elif len(self.class_subclassed_by.get(association_object.tid, [])) > 0:
941
+ association_classes[association_oid] = role_definitions
942
+ logging.debug(
943
+ " Associaction has Subclasses, we construct a class for validity "
944
+ "reason "
945
+ f"(Dataclasses) {association_object} => own class"
946
+ )
947
+ return association_classes
948
+
949
+ @property
950
+ def associations_embedded(self):
951
+ associations_embedded: dict = {}
952
+ association_classes = self.association_classes
953
+ for association_oid in self.association_bucket:
954
+ association_object = self.index[association_oid]
955
+ logging.debug(f"Deciding if association gets embedded {association_object}")
956
+ role_definitions = self.association_bucket[association_oid]
957
+ if association_oid not in association_classes:
958
+ if len(role_definitions) == 2:
959
+ # we check only the associations which are not already clearly own classes
960
+ # and regarding reference manual only associations with 2 members are
961
+ # candidates to be embedded.
962
+ logging.debug(
963
+ " Association has 2 Role definitions, checking how to embedd..."
964
+ )
965
+ maxes = []
966
+ roles = {}
967
+ for role_definition in role_definitions:
968
+ multiplicity_max = role_definition[-1]
969
+ if multiplicity_max is None or multiplicity_max > 1:
970
+ maxes.append(role_definition)
971
+ roles[role_definition[0]] = role_definition
972
+ if len(maxes) == 1:
973
+ if maxes[0][1] not in associations_embedded:
974
+ associations_embedded[maxes[0][1]] = []
975
+ associations_embedded[maxes[0][1]].append(
976
+ self.switch(roles, maxes[0][0])
977
+ )
978
+ logging.debug(
979
+ " Embedding at target class vice versa the multiplicity > 1"
980
+ )
981
+ elif len(maxes) == 0:
982
+ class_object2 = self.index[role_definitions[1][1]]
983
+ class_object1 = self.index[role_definitions[0][1]]
984
+ if (
985
+ class_object2.element_in_package.ref
986
+ == association_object.element_in_package.ref
987
+ ):
988
+ if class_object2.tid not in associations_embedded:
989
+ associations_embedded[class_object2.tid] = []
990
+ associations_embedded[class_object2.tid].append(
991
+ role_definitions[0]
992
+ )
993
+ logging.debug(
994
+ " Embedding at target class 2 vice versa the multiplicity "
995
+ "<= 1"
996
+ )
997
+ elif (
998
+ class_object1.element_in_package.ref
999
+ == association_object.element_in_package.ref
1000
+ ):
1001
+ if class_object1.tid not in associations_embedded:
1002
+ associations_embedded[class_object1.tid] = []
1003
+ associations_embedded[class_object1.tid].append(
1004
+ role_definitions[1]
1005
+ )
1006
+ logging.debug(
1007
+ " Embedding at target class 1 vice versa the multiplicity "
1008
+ "<= 1"
1009
+ )
1010
+ else:
1011
+ self.aa_not_touched.append(association_oid)
1012
+
1013
+ return associations_embedded
1014
+
1015
+ def switch(self, d, key):
1016
+ # Dict hat genau 2 Keys
1017
+ k1, k2 = d.keys()
1018
+ return d[k2] if key == k1 else d[k1]