aas-core-codegen 0.0.16__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 (604) hide show
  1. aas_core_codegen/__init__.py +6 -0
  2. aas_core_codegen/__main__.py +8 -0
  3. aas_core_codegen/common.py +500 -0
  4. aas_core_codegen/cpp/__init__.py +1 -0
  5. aas_core_codegen/cpp/aas_common/__init__.py +6 -0
  6. aas_core_codegen/cpp/aas_common/_generate.py +713 -0
  7. aas_core_codegen/cpp/common.py +681 -0
  8. aas_core_codegen/cpp/constants/__init__.py +6 -0
  9. aas_core_codegen/cpp/constants/_generate.py +568 -0
  10. aas_core_codegen/cpp/description.py +654 -0
  11. aas_core_codegen/cpp/enhancing/__init__.py +4 -0
  12. aas_core_codegen/cpp/enhancing/_generate.py +993 -0
  13. aas_core_codegen/cpp/iteration/__init__.py +6 -0
  14. aas_core_codegen/cpp/iteration/_generate.py +2332 -0
  15. aas_core_codegen/cpp/jsonization/__init__.py +6 -0
  16. aas_core_codegen/cpp/jsonization/_generate.py +2619 -0
  17. aas_core_codegen/cpp/main.py +694 -0
  18. aas_core_codegen/cpp/naming.py +170 -0
  19. aas_core_codegen/cpp/optionaling.py +557 -0
  20. aas_core_codegen/cpp/pattern/__init__.py +6 -0
  21. aas_core_codegen/cpp/pattern/_generate.py +508 -0
  22. aas_core_codegen/cpp/revm/__init__.py +6 -0
  23. aas_core_codegen/cpp/revm/_generate.py +1149 -0
  24. aas_core_codegen/cpp/stringification/__init__.py +5 -0
  25. aas_core_codegen/cpp/stringification/_generate.py +955 -0
  26. aas_core_codegen/cpp/structure/__init__.py +7 -0
  27. aas_core_codegen/cpp/structure/_generate.py +1503 -0
  28. aas_core_codegen/cpp/transpilation.py +1383 -0
  29. aas_core_codegen/cpp/unrolling.py +159 -0
  30. aas_core_codegen/cpp/verification/__init__.py +6 -0
  31. aas_core_codegen/cpp/verification/_generate.py +3073 -0
  32. aas_core_codegen/cpp/visitation/__init__.py +6 -0
  33. aas_core_codegen/cpp/visitation/_generate.py +521 -0
  34. aas_core_codegen/cpp/wstringification/__init__.py +5 -0
  35. aas_core_codegen/cpp/wstringification/_generate.py +586 -0
  36. aas_core_codegen/cpp/xmlization/__init__.py +6 -0
  37. aas_core_codegen/cpp/xmlization/_generate.py +5373 -0
  38. aas_core_codegen/cpp/yielding.py +201 -0
  39. aas_core_codegen/csharp/__init__.py +1 -0
  40. aas_core_codegen/csharp/common.py +224 -0
  41. aas_core_codegen/csharp/constants/__init__.py +5 -0
  42. aas_core_codegen/csharp/constants/_generate.py +409 -0
  43. aas_core_codegen/csharp/copying/__init__.py +4 -0
  44. aas_core_codegen/csharp/copying/_generate.py +498 -0
  45. aas_core_codegen/csharp/description.py +1103 -0
  46. aas_core_codegen/csharp/enhancing/__init__.py +4 -0
  47. aas_core_codegen/csharp/enhancing/_generate.py +667 -0
  48. aas_core_codegen/csharp/jsonization/__init__.py +4 -0
  49. aas_core_codegen/csharp/jsonization/_generate.py +1630 -0
  50. aas_core_codegen/csharp/main.py +421 -0
  51. aas_core_codegen/csharp/naming.py +157 -0
  52. aas_core_codegen/csharp/reporting/__init__.py +4 -0
  53. aas_core_codegen/csharp/reporting/_generate.py +266 -0
  54. aas_core_codegen/csharp/stringification/__init__.py +4 -0
  55. aas_core_codegen/csharp/stringification/_generate.py +243 -0
  56. aas_core_codegen/csharp/structure/__init__.py +6 -0
  57. aas_core_codegen/csharp/structure/_generate.py +1341 -0
  58. aas_core_codegen/csharp/transpilation.py +990 -0
  59. aas_core_codegen/csharp/unrolling.py +211 -0
  60. aas_core_codegen/csharp/verification/__init__.py +6 -0
  61. aas_core_codegen/csharp/verification/_generate.py +1457 -0
  62. aas_core_codegen/csharp/visitation/__init__.py +5 -0
  63. aas_core_codegen/csharp/visitation/_generate.py +579 -0
  64. aas_core_codegen/csharp/xmlization/__init__.py +4 -0
  65. aas_core_codegen/csharp/xmlization/_generate.py +1980 -0
  66. aas_core_codegen/golang/__init__.py +1 -0
  67. aas_core_codegen/golang/aas_common/__init__.py +4 -0
  68. aas_core_codegen/golang/aas_common/_generate.py +152 -0
  69. aas_core_codegen/golang/common.py +303 -0
  70. aas_core_codegen/golang/constants/__init__.py +5 -0
  71. aas_core_codegen/golang/constants/_generate.py +339 -0
  72. aas_core_codegen/golang/description.py +501 -0
  73. aas_core_codegen/golang/enhancing/__init__.py +4 -0
  74. aas_core_codegen/golang/enhancing/_generate.py +527 -0
  75. aas_core_codegen/golang/jsonization/__init__.py +4 -0
  76. aas_core_codegen/golang/jsonization/_generate.py +1740 -0
  77. aas_core_codegen/golang/main.py +368 -0
  78. aas_core_codegen/golang/naming.py +412 -0
  79. aas_core_codegen/golang/pointering.py +631 -0
  80. aas_core_codegen/golang/reporting/__init__.py +4 -0
  81. aas_core_codegen/golang/reporting/_generate.py +218 -0
  82. aas_core_codegen/golang/stringification/__init__.py +4 -0
  83. aas_core_codegen/golang/stringification/_generate.py +394 -0
  84. aas_core_codegen/golang/structure/__init__.py +6 -0
  85. aas_core_codegen/golang/structure/_generate.py +1493 -0
  86. aas_core_codegen/golang/transpilation.py +1191 -0
  87. aas_core_codegen/golang/unrolling.py +159 -0
  88. aas_core_codegen/golang/verification/__init__.py +6 -0
  89. aas_core_codegen/golang/verification/_generate.py +1513 -0
  90. aas_core_codegen/golang/xmlization/__init__.py +4 -0
  91. aas_core_codegen/golang/xmlization/_generate.py +2507 -0
  92. aas_core_codegen/infer_for_schema/__init__.py +21 -0
  93. aas_core_codegen/infer_for_schema/_inline.py +693 -0
  94. aas_core_codegen/infer_for_schema/_len.py +527 -0
  95. aas_core_codegen/infer_for_schema/_pattern.py +311 -0
  96. aas_core_codegen/infer_for_schema/_set.py +394 -0
  97. aas_core_codegen/infer_for_schema/_stringify.py +201 -0
  98. aas_core_codegen/infer_for_schema/_types.py +135 -0
  99. aas_core_codegen/infer_for_schema/match.py +122 -0
  100. aas_core_codegen/intermediate/__init__.py +78 -0
  101. aas_core_codegen/intermediate/_hierarchy.py +397 -0
  102. aas_core_codegen/intermediate/_stringify.py +989 -0
  103. aas_core_codegen/intermediate/_translate.py +5128 -0
  104. aas_core_codegen/intermediate/_types.py +2901 -0
  105. aas_core_codegen/intermediate/construction.py +750 -0
  106. aas_core_codegen/intermediate/doc.py +344 -0
  107. aas_core_codegen/intermediate/pattern_verification.py +428 -0
  108. aas_core_codegen/intermediate/revm.py +985 -0
  109. aas_core_codegen/intermediate/type_inference.py +2266 -0
  110. aas_core_codegen/java/__init__.py +1 -0
  111. aas_core_codegen/java/common.py +197 -0
  112. aas_core_codegen/java/constants/__init__.py +5 -0
  113. aas_core_codegen/java/constants/_generate.py +334 -0
  114. aas_core_codegen/java/copying/__init__.py +4 -0
  115. aas_core_codegen/java/copying/_generate.py +502 -0
  116. aas_core_codegen/java/description.py +774 -0
  117. aas_core_codegen/java/enhancing/__init__.py +4 -0
  118. aas_core_codegen/java/enhancing/_generate.py +820 -0
  119. aas_core_codegen/java/generation/__init__.py +5 -0
  120. aas_core_codegen/java/generation/_generate.py +285 -0
  121. aas_core_codegen/java/jsonization/__init__.py +4 -0
  122. aas_core_codegen/java/jsonization/_generate.py +1472 -0
  123. aas_core_codegen/java/main.py +438 -0
  124. aas_core_codegen/java/naming.py +187 -0
  125. aas_core_codegen/java/optional.py +514 -0
  126. aas_core_codegen/java/reporting/__init__.py +4 -0
  127. aas_core_codegen/java/reporting/_generate.py +248 -0
  128. aas_core_codegen/java/stringification/__init__.py +4 -0
  129. aas_core_codegen/java/stringification/_generate.py +212 -0
  130. aas_core_codegen/java/structure/__init__.py +6 -0
  131. aas_core_codegen/java/structure/_generate.py +1767 -0
  132. aas_core_codegen/java/transpilation.py +1111 -0
  133. aas_core_codegen/java/verification/__init__.py +6 -0
  134. aas_core_codegen/java/verification/_generate.py +1536 -0
  135. aas_core_codegen/java/visitation/__init__.py +5 -0
  136. aas_core_codegen/java/visitation/_generate.py +689 -0
  137. aas_core_codegen/java/xmlization/__init__.py +4 -0
  138. aas_core_codegen/java/xmlization/_generate.py +2274 -0
  139. aas_core_codegen/jsonld/__init__.py +1 -0
  140. aas_core_codegen/jsonld/main.py +455 -0
  141. aas_core_codegen/jsonschema/__init__.py +1 -0
  142. aas_core_codegen/jsonschema/main.py +982 -0
  143. aas_core_codegen/main.py +245 -0
  144. aas_core_codegen/naming.py +133 -0
  145. aas_core_codegen/opcua/__init__.py +1 -0
  146. aas_core_codegen/opcua/main.py +1525 -0
  147. aas_core_codegen/opcua/naming.py +126 -0
  148. aas_core_codegen/parse/__init__.py +46 -0
  149. aas_core_codegen/parse/_rules.py +796 -0
  150. aas_core_codegen/parse/_stringify.py +532 -0
  151. aas_core_codegen/parse/_translate.py +3940 -0
  152. aas_core_codegen/parse/_types.py +973 -0
  153. aas_core_codegen/parse/retree/__init__.py +46 -0
  154. aas_core_codegen/parse/retree/_fix.py +434 -0
  155. aas_core_codegen/parse/retree/_parse.py +1143 -0
  156. aas_core_codegen/parse/retree/_render.py +298 -0
  157. aas_core_codegen/parse/retree/_stringify.py +199 -0
  158. aas_core_codegen/parse/retree/_types.py +362 -0
  159. aas_core_codegen/parse/retree/_visitor.py +70 -0
  160. aas_core_codegen/parse/tree.py +1303 -0
  161. aas_core_codegen/protobuf/__init__.py +1 -0
  162. aas_core_codegen/protobuf/common.py +225 -0
  163. aas_core_codegen/protobuf/description.py +1102 -0
  164. aas_core_codegen/protobuf/main.py +115 -0
  165. aas_core_codegen/protobuf/naming.py +143 -0
  166. aas_core_codegen/protobuf/structure/__init__.py +6 -0
  167. aas_core_codegen/protobuf/structure/_generate.py +502 -0
  168. aas_core_codegen/py.typed +1 -0
  169. aas_core_codegen/python/__init__.py +1 -0
  170. aas_core_codegen/python/aas_common/__init__.py +4 -0
  171. aas_core_codegen/python/aas_common/_generate.py +63 -0
  172. aas_core_codegen/python/common.py +406 -0
  173. aas_core_codegen/python/constants/__init__.py +5 -0
  174. aas_core_codegen/python/constants/_generate.py +377 -0
  175. aas_core_codegen/python/description.py +508 -0
  176. aas_core_codegen/python/jsonization/__init__.py +4 -0
  177. aas_core_codegen/python/jsonization/_generate.py +1391 -0
  178. aas_core_codegen/python/main.py +323 -0
  179. aas_core_codegen/python/naming.py +255 -0
  180. aas_core_codegen/python/stringification/__init__.py +4 -0
  181. aas_core_codegen/python/stringification/_generate.py +129 -0
  182. aas_core_codegen/python/structure/__init__.py +6 -0
  183. aas_core_codegen/python/structure/_generate.py +1801 -0
  184. aas_core_codegen/python/transpilation.py +958 -0
  185. aas_core_codegen/python/unrolling.py +156 -0
  186. aas_core_codegen/python/verification/__init__.py +6 -0
  187. aas_core_codegen/python/verification/_generate.py +1471 -0
  188. aas_core_codegen/python/xmlization/__init__.py +4 -0
  189. aas_core_codegen/python/xmlization/_generate.py +3003 -0
  190. aas_core_codegen/python_protobuf/__init__.py +1 -0
  191. aas_core_codegen/python_protobuf/main.py +1424 -0
  192. aas_core_codegen/python_protobuf/naming.py +85 -0
  193. aas_core_codegen/rdf_shacl/__init__.py +1 -0
  194. aas_core_codegen/rdf_shacl/_description.py +351 -0
  195. aas_core_codegen/rdf_shacl/common.py +206 -0
  196. aas_core_codegen/rdf_shacl/main.py +114 -0
  197. aas_core_codegen/rdf_shacl/naming.py +145 -0
  198. aas_core_codegen/rdf_shacl/rdf.py +435 -0
  199. aas_core_codegen/rdf_shacl/shacl.py +453 -0
  200. aas_core_codegen/run.py +124 -0
  201. aas_core_codegen/smoke/__init__.py +1 -0
  202. aas_core_codegen/smoke/main.py +219 -0
  203. aas_core_codegen/specific_implementations.py +72 -0
  204. aas_core_codegen/stringify.py +333 -0
  205. aas_core_codegen/typescript/__init__.py +1 -0
  206. aas_core_codegen/typescript/aas_common/__init__.py +4 -0
  207. aas_core_codegen/typescript/aas_common/_generate.py +472 -0
  208. aas_core_codegen/typescript/common.py +340 -0
  209. aas_core_codegen/typescript/constants/__init__.py +5 -0
  210. aas_core_codegen/typescript/constants/_generate.py +347 -0
  211. aas_core_codegen/typescript/description.py +530 -0
  212. aas_core_codegen/typescript/jsonization/__init__.py +4 -0
  213. aas_core_codegen/typescript/jsonization/_generate.py +1510 -0
  214. aas_core_codegen/typescript/main.py +258 -0
  215. aas_core_codegen/typescript/naming.py +189 -0
  216. aas_core_codegen/typescript/stringification/__init__.py +4 -0
  217. aas_core_codegen/typescript/stringification/_generate.py +367 -0
  218. aas_core_codegen/typescript/structure/__init__.py +6 -0
  219. aas_core_codegen/typescript/structure/_generate.py +2500 -0
  220. aas_core_codegen/typescript/transpilation.py +1051 -0
  221. aas_core_codegen/typescript/unrolling.py +159 -0
  222. aas_core_codegen/typescript/verification/__init__.py +6 -0
  223. aas_core_codegen/typescript/verification/_generate.py +1578 -0
  224. aas_core_codegen/xsd/__init__.py +1 -0
  225. aas_core_codegen/xsd/main.py +1187 -0
  226. aas_core_codegen/xsd/naming.py +83 -0
  227. aas_core_codegen/yielding/__init__.py +1 -0
  228. aas_core_codegen/yielding/flow.py +139 -0
  229. aas_core_codegen/yielding/linear.py +754 -0
  230. aas_core_codegen-0.0.16.dist-info/METADATA +211 -0
  231. aas_core_codegen-0.0.16.dist-info/RECORD +604 -0
  232. aas_core_codegen-0.0.16.dist-info/WHEEL +5 -0
  233. aas_core_codegen-0.0.16.dist-info/entry_points.txt +3 -0
  234. aas_core_codegen-0.0.16.dist-info/licenses/AUTHORS +9 -0
  235. aas_core_codegen-0.0.16.dist-info/licenses/LICENSE +23 -0
  236. aas_core_codegen-0.0.16.dist-info/top_level.txt +2 -0
  237. dev/continuous_integration/__init__.py +1 -0
  238. dev/continuous_integration/check_help_in_readme.py +208 -0
  239. dev/continuous_integration/check_init_and_pyproject_consistent.py +154 -0
  240. dev/continuous_integration/precommit.py +400 -0
  241. dev/dev_scripts/__init__.py +1 -0
  242. dev/dev_scripts/compare_rendered_regexes_against_source_py.py +42 -0
  243. dev/dev_scripts/copy_to_aas_core3_cpp.py +100 -0
  244. dev/dev_scripts/copy_to_aas_core3_java.py +90 -0
  245. dev/dev_scripts/download_latest_aas_core_meta_v3.py +114 -0
  246. dev/dev_scripts/draw_bipartite_graph_based_on_lines.py +37 -0
  247. dev/dev_scripts/run_tests_with_rerecord.py +69 -0
  248. dev/dev_scripts/update_to_aas_core_meta.py +174 -0
  249. dev/integration_tests/input/jsonschema/boilerplate/main.py +55 -0
  250. dev/integration_tests/input/meta_model.py +38 -0
  251. dev/integration_tests/input/python/boilerplate/main.py +153 -0
  252. dev/integration_tests/main.py +258 -0
  253. dev/test_data/csharp/test_structure/concrete_class_with_descendants/meta_model.py +15 -0
  254. dev/test_data/csharp/test_structure/constructor_without_arguments/all_properties_optional/meta_model.py +9 -0
  255. dev/test_data/csharp/test_structure/constructor_without_arguments/no_properties/meta_model.py +6 -0
  256. dev/test_data/csharp/test_verification/builtin_functions/len/on_list/meta_model.py +20 -0
  257. dev/test_data/csharp/test_verification/builtin_functions/len/on_str/meta_model.py +16 -0
  258. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/as_prefix/meta_model.py +8 -0
  259. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/as_suffix/meta_model.py +8 -0
  260. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/in_group_with_quantifier/meta_model.py +8 -0
  261. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/in_the_middle/meta_model.py +8 -0
  262. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/in_union/meta_model.py +8 -0
  263. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/single_utf32_literal/meta_model.py +8 -0
  264. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/with_quantifier_within_group/meta_model.py +8 -0
  265. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/with_quantifier_without_group/meta_model.py +8 -0
  266. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/at_the_beginning/meta_model.py +8 -0
  267. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/at_the_end/meta_model.py +8 -0
  268. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/in_the_middle/meta_model.py +8 -0
  269. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/multiple/meta_model.py +8 -0
  270. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/single/meta_model.py +8 -0
  271. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/single_with_quantifier/meta_model.py +8 -0
  272. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/mixed_with_non_utf32/meta_model.py +8 -0
  273. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/more_than_two_high_surrogates/meta_model.py +8 -0
  274. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/multiple_utf32_ranges/meta_model.py +8 -0
  275. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/multiple_utf32_ranges_mixed_with_non_utf32/meta_model.py +8 -0
  276. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/same_high_surrogate/meta_model.py +8 -0
  277. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/same_high_surrogate_with_quantifier/meta_model.py +8 -0
  278. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/two_high_surrogates/meta_model.py +8 -0
  279. dev/test_data/intermediate/expected/class/empty/meta_model.py +6 -0
  280. dev/test_data/intermediate/expected/class/implementation_specific_method/meta_model.py +8 -0
  281. dev/test_data/intermediate/expected/class/inheritance/meta_model.py +41 -0
  282. dev/test_data/intermediate/expected/class/methods_with_contracts/meta_model.py +15 -0
  283. dev/test_data/intermediate/expected/class/only_method_no_property/meta_model.py +7 -0
  284. dev/test_data/intermediate/expected/class/only_property_no_method/meta_model.py +9 -0
  285. dev/test_data/intermediate/expected/constant/constant_set/of_enum/meta_model.py +12 -0
  286. dev/test_data/intermediate/expected/constant/constant_set/of_str/meta_model.py +4 -0
  287. dev/test_data/intermediate/expected/constant/constant_set/with_description/meta_model.py +6 -0
  288. dev/test_data/intermediate/expected/constant/constant_set/with_superset_of/meta_model.py +14 -0
  289. dev/test_data/intermediate/expected/constant/constant_str/only_value/meta_model.py +7 -0
  290. dev/test_data/intermediate/expected/constant/constant_str/with_description/meta_model.py +5 -0
  291. dev/test_data/intermediate/expected/documentation/docstring_with_special_characters_in_literal/meta_model.py +20 -0
  292. dev/test_data/intermediate/expected/documentation/docstring_with_special_characters_outside_literal/meta_model.py +20 -0
  293. dev/test_data/intermediate/expected/empty/meta_model.py +2 -0
  294. dev/test_data/intermediate/expected/enumeration/meta_model.py +9 -0
  295. dev/test_data/intermediate/expected/interface/basic/meta_model.py +14 -0
  296. dev/test_data/intermediate/expected/interface/empty/meta_model.py +7 -0
  297. dev/test_data/intermediate/expected/interface/inheritance/meta_model.py +27 -0
  298. dev/test_data/intermediate/expected/interface/method_signature/meta_model.py +10 -0
  299. dev/test_data/intermediate/expected/interface/only_constructor/meta_model.py +11 -0
  300. dev/test_data/intermediate/expected/method/non_mutating/implementation_specific/meta_model.py +12 -0
  301. dev/test_data/intermediate/expected/method/non_mutating/understood/meta_model.py +11 -0
  302. dev/test_data/intermediate/expected/type_annotation/atomic/meta_model.py +9 -0
  303. dev/test_data/intermediate/expected/type_annotation/subscripted/class/meta_model.py +13 -0
  304. dev/test_data/intermediate/expected/type_annotation/subscripted/primitive/meta_model.py +9 -0
  305. dev/test_data/intermediate/unexpected/constant_set/of_enum/enumeration_literals_in_subset_outside_of_superset/meta_model.py +20 -0
  306. dev/test_data/intermediate/unexpected/constant_set/of_enum/invalid_literal/meta_model.py +11 -0
  307. dev/test_data/intermediate/unexpected/constant_set/of_enum/mismatch_between_enumeration_and_literal/meta_model.py +30 -0
  308. dev/test_data/intermediate/unexpected/constant_set/of_enum/mismatch_in_enumerations_between_subset_and_superset/meta_model.py +21 -0
  309. dev/test_data/intermediate/unexpected/constant_set/of_str/literals_in_subset_outside_of_superset/meta_model.py +18 -0
  310. dev/test_data/intermediate/unexpected/constant_set/of_str/mismatch_between_type_annotation_and_literals/meta_model.py +10 -0
  311. dev/test_data/intermediate/unexpected/constant_set/of_str/superset_and_subset_mismatch_in_type/meta_model.py +12 -0
  312. dev/test_data/intermediate/unexpected/constraints/dangling_constraintref/meta_model.py +18 -0
  313. dev/test_data/intermediate/unexpected/constraints/duplicate_constraints/meta_model.py +20 -0
  314. dev/test_data/intermediate/unexpected/documentation/unexpected_documentation_elements/meta_model.py +34 -0
  315. dev/test_data/intermediate/unexpected/invariant/class_invariant_uses_re/meta_model.py +10 -0
  316. dev/test_data/intermediate/unexpected/invariant/invariant_of_constrained_primitive_uses_re/meta_model.py +7 -0
  317. dev/test_data/intermediate/unexpected/invariant/unexpected_argument_count_to_len/meta_model.py +20 -0
  318. dev/test_data/intermediate/unexpected/invariant/unhandled_built_in_function/meta_model.py +16 -0
  319. dev/test_data/intermediate/unexpected/method_definitions/non_constant_default/meta_model.py +7 -0
  320. dev/test_data/intermediate/unexpected/optional_constructor_arguments_wo_default/default_non_none/meta_model.py +16 -0
  321. dev/test_data/intermediate/unexpected/optional_constructor_arguments_wo_default/no_default/meta_model.py +16 -0
  322. dev/test_data/intermediate/unexpected/properties_and_constructor_arguments_do_not_match/after_inheritance/meta_model.py +58 -0
  323. dev/test_data/intermediate/unexpected/properties_and_constructor_arguments_do_not_match/type_missmatch/meta_model.py +9 -0
  324. dev/test_data/intermediate/unexpected/properties_and_constructor_arguments_do_not_match/within_class/meta_model.py +22 -0
  325. dev/test_data/jsonschema/test_main/regression_when_len_constraints_on_inherited_property/meta_model.py +28 -0
  326. dev/test_data/opcua/test_main/abstract_and_concrete_classes/meta_model.py +37 -0
  327. dev/test_data/opcua/test_main/classes_with_invariants/meta_model.py +21 -0
  328. dev/test_data/opcua/test_main/concrete_class_with_descendant/meta_model.py +27 -0
  329. dev/test_data/opcua/test_main/concrete_class_with_enum/meta_model.py +21 -0
  330. dev/test_data/opcua/test_main/concrete_class_with_list_of_instances/meta_model.py +21 -0
  331. dev/test_data/opcua/test_main/concrete_class_with_primitive_attributes/meta_model.py +41 -0
  332. dev/test_data/opcua/test_main/concrete_class_with_string/meta_model.py +13 -0
  333. dev/test_data/opcua/test_main/constrained_primitive/meta_model.py +20 -0
  334. dev/test_data/opcua/test_main/multiple_inheritance/meta_model.py +25 -0
  335. dev/test_data/parse/expected/constant/constant_set/of_enum/meta_model.py +12 -0
  336. dev/test_data/parse/expected/constant/constant_set/of_str/meta_model.py +4 -0
  337. dev/test_data/parse/expected/constant/constant_set/with_description/meta_model.py +6 -0
  338. dev/test_data/parse/expected/constant/constant_set/with_superset_of/meta_model.py +14 -0
  339. dev/test_data/parse/expected/constant/constant_str/only_value/meta_model.py +7 -0
  340. dev/test_data/parse/expected/constant/constant_str/with_description/meta_model.py +5 -0
  341. dev/test_data/parse/expected/enum/ok/meta_model.py +15 -0
  342. dev/test_data/parse/expected/implementation_specific_class/properties_and_methods_in_implementation_specific_class/meta_model.py +17 -0
  343. dev/test_data/parse/expected/inheritance/basic/meta_model.py +11 -0
  344. dev/test_data/parse/expected/inheritance/diamond/meta_model.py +26 -0
  345. dev/test_data/parse/expected/inheritance/inheritance_from_concrete_class/meta_model.py +10 -0
  346. dev/test_data/parse/expected/invariants/in_relation/meta_model.py +16 -0
  347. dev/test_data/parse/expected/method/arguments/meta_model.py +7 -0
  348. dev/test_data/parse/expected/method/basic/meta_model.py +7 -0
  349. dev/test_data/parse/expected/method/contracts/condition_as_keyword_argument/meta_model.py +8 -0
  350. dev/test_data/parse/expected/method/contracts/condition_as_positional_argument/meta_model.py +8 -0
  351. dev/test_data/parse/expected/method/contracts/description_as_keyword_argument/meta_model.py +8 -0
  352. dev/test_data/parse/expected/method/contracts/description_as_positional_argument/meta_model.py +8 -0
  353. dev/test_data/parse/expected/method/contracts/multiple_contracts_in_order/meta_model.py +17 -0
  354. dev/test_data/parse/expected/method/contracts/postcondition/basic/meta_model.py +10 -0
  355. dev/test_data/parse/expected/method/contracts/postcondition/snapshot/with_keyword_arguments/meta_model.py +9 -0
  356. dev/test_data/parse/expected/method/contracts/postcondition/snapshot/with_positional_arguments/meta_model.py +9 -0
  357. dev/test_data/parse/expected/method/default/meta_model.py +9 -0
  358. dev/test_data/parse/expected/method/description/meta_model.py +8 -0
  359. dev/test_data/parse/expected/method/is_implementation_specific/meta_model.py +8 -0
  360. dev/test_data/parse/expected/method/non_mutating/meta_model.py +11 -0
  361. dev/test_data/parse/expected/method/returns_none/meta_model.py +7 -0
  362. dev/test_data/parse/expected/method/returns_something/meta_model.py +7 -0
  363. dev/test_data/parse/expected/single_class/description/meta_model.py +12 -0
  364. dev/test_data/parse/expected/single_class/empty/meta_model.py +6 -0
  365. dev/test_data/parse/expected/single_class/property/description/meta_model.py +14 -0
  366. dev/test_data/parse/expected/single_class/property/mandatory/meta_model.py +6 -0
  367. dev/test_data/parse/expected/single_class/property/optional/meta_model.py +6 -0
  368. dev/test_data/parse/expected/single_class/property/recursion_to_entity/meta_model.py +6 -0
  369. dev/test_data/parse/unexpected/class_decorators/non_name_decorator/meta_model.py +7 -0
  370. dev/test_data/parse/unexpected/class_decorators/unknown_decorator/meta_model.py +7 -0
  371. dev/test_data/parse/unexpected/class_definitions/is_abstract_and_implementation_specific/meta_model.py +8 -0
  372. dev/test_data/parse/unexpected/class_definitions/unexpected_docstring_before_a_method/meta_model.py +11 -0
  373. dev/test_data/parse/unexpected/class_definitions/unexpected_docstring_for_a_pass/meta_model.py +9 -0
  374. dev/test_data/parse/unexpected/class_definitions/unexpected_double_description_for_a_property/meta_model.py +10 -0
  375. dev/test_data/parse/unexpected/class_inheritances/inheriting_from_implementation_specific_parent/meta_model.py +20 -0
  376. dev/test_data/parse/unexpected/class_inheritances/non_name_super_class/meta_model.py +6 -0
  377. dev/test_data/parse/unexpected/enum/expression_as_assignment_value/meta_model.py +6 -0
  378. dev/test_data/parse/unexpected/enum/non_assignment/meta_model.py +8 -0
  379. dev/test_data/parse/unexpected/enum/non_string_literal/meta_model.py +6 -0
  380. dev/test_data/parse/unexpected/enum/unexpected_inheritance/meta_model.py +6 -0
  381. dev/test_data/parse/unexpected/method_contracts/contract/non_lambda_condition/meta_model.py +8 -0
  382. dev/test_data/parse/unexpected/method_contracts/contract/non_string_literal_description/meta_model.py +8 -0
  383. dev/test_data/parse/unexpected/method_contracts/contract/without_any_arguments/meta_model.py +8 -0
  384. dev/test_data/parse/unexpected/method_contracts/contract/without_condition/meta_model.py +8 -0
  385. dev/test_data/parse/unexpected/method_contracts/postcondition/OLD_in_postcondition_without_snapshot/meta_model.py +8 -0
  386. dev/test_data/parse/unexpected/method_contracts/postcondition/argument_missing_in_function/meta_model.py +8 -0
  387. dev/test_data/parse/unexpected/method_contracts/precondition/argument_missing_in_function/meta_model.py +8 -0
  388. dev/test_data/parse/unexpected/method_contracts/snapshot/argument_missing_in_function/meta_model.py +8 -0
  389. dev/test_data/parse/unexpected/method_contracts/snapshot/capture_not_a_lambda/meta_model.py +8 -0
  390. dev/test_data/parse/unexpected/method_contracts/snapshot/invalid_name/meta_model.py +8 -0
  391. dev/test_data/parse/unexpected/method_contracts/snapshot/name_not_a_string_literal/meta_model.py +8 -0
  392. dev/test_data/parse/unexpected/method_contracts/snapshot/without_a_capture/meta_model.py +8 -0
  393. dev/test_data/parse/unexpected/method_contracts/snapshot/without_a_name/meta_model.py +8 -0
  394. dev/test_data/parse/unexpected/method_decorators/non_mutating/non_mutating_constructor/meta_model.py +8 -0
  395. dev/test_data/parse/unexpected/method_decorators/non_mutating/non_mutating_verification_function/meta_model.py +8 -0
  396. dev/test_data/parse/unexpected/method_decorators/non_name_decorator/meta_model.py +8 -0
  397. dev/test_data/parse/unexpected/method_decorators/unknown_call_decorator/meta_model.py +8 -0
  398. dev/test_data/parse/unexpected/method_decorators/unknown_name_decorator/meta_model.py +8 -0
  399. dev/test_data/parse/unexpected/method_definitions/argument_with_final/meta_model.py +7 -0
  400. dev/test_data/parse/unexpected/method_definitions/argument_without_a_type_annotation/meta_model.py +7 -0
  401. dev/test_data/parse/unexpected/method_definitions/default_for_self/meta_model.py +7 -0
  402. dev/test_data/parse/unexpected/method_definitions/dunder/meta_model.py +7 -0
  403. dev/test_data/parse/unexpected/method_definitions/init_with_return_type/meta_model.py +7 -0
  404. dev/test_data/parse/unexpected/method_definitions/with_keyword_only_arguments/meta_model.py +7 -0
  405. dev/test_data/parse/unexpected/method_definitions/with_positional_arguments/meta_model.py +7 -0
  406. dev/test_data/parse/unexpected/method_definitions/with_type_annotation_for_self/meta_model.py +7 -0
  407. dev/test_data/parse/unexpected/method_definitions/with_variable_arguments/meta_model.py +7 -0
  408. dev/test_data/parse/unexpected/method_definitions/with_variable_keyword_arguments/meta_model.py +7 -0
  409. dev/test_data/parse/unexpected/method_definitions/without_arguments/meta_model.py +7 -0
  410. dev/test_data/parse/unexpected/method_definitions/without_self/meta_model.py +7 -0
  411. dev/test_data/parse/unexpected/method_definitions/without_type_annotation_for_result/meta_model.py +7 -0
  412. dev/test_data/parse/unexpected/property_definitions/final_without_subscript/meta_model.py +6 -0
  413. dev/test_data/parse/unexpected/property_definitions/nested_final/meta_model.py +6 -0
  414. dev/test_data/parse/unexpected/property_definitions/non_simple/meta_model.py +6 -0
  415. dev/test_data/parse/unexpected/property_definitions/unexpected_assignment/meta_model.py +6 -0
  416. dev/test_data/parse/unexpected/property_definitions/unexpected_non_name_property/meta_model.py +6 -0
  417. dev/test_data/parse/unexpected/property_definitions/without_type_annotation/meta_model.py +6 -0
  418. dev/test_data/parse/unexpected/symbol_table/constant_set_with_a_non_set_subset/meta_model.py +6 -0
  419. dev/test_data/parse/unexpected/symbol_table/dangling_inheritance/meta_model.py +6 -0
  420. dev/test_data/parse/unexpected/symbol_table/dangling_reference_in_type_annotation_of_a_property/meta_model.py +6 -0
  421. dev/test_data/parse/unexpected/symbol_table/dangling_reference_in_type_annotation_of_an_argument/meta_model.py +7 -0
  422. dev/test_data/parse/unexpected/symbol_table/dangling_reference_in_type_annotation_of_constant_set/meta_model.py +6 -0
  423. dev/test_data/parse/unexpected/symbol_table/dangling_subset_in_constant_set/meta_model.py +4 -0
  424. dev/test_data/parse/unexpected/symbol_table/inheritance_from_non_class/meta_model.py +10 -0
  425. dev/test_data/parse_retree/expected/character_set/common_escaping/source.py +1 -0
  426. dev/test_data/parse_retree/expected/character_set/complementing/double_caret/source.py +1 -0
  427. dev/test_data/parse_retree/expected/character_set/complementing/multiple_ranges/source.py +1 -0
  428. dev/test_data/parse_retree/expected/character_set/complementing/suffix_dash/source.py +1 -0
  429. dev/test_data/parse_retree/expected/character_set/escape_first_caret/source.py +1 -0
  430. dev/test_data/parse_retree/expected/character_set/literals_which_need_no_escaping_in_characters_set_but_need_escaping_outside/source.py +1 -0
  431. dev/test_data/parse_retree/expected/character_set/multiple_ranges/source.py +1 -0
  432. dev/test_data/parse_retree/expected/character_set/single_literal/source.py +1 -0
  433. dev/test_data/parse_retree/expected/character_set/single_range/source.py +1 -0
  434. dev/test_data/parse_retree/expected/character_set/unescaped_dash/only_dash/source.py +1 -0
  435. dev/test_data/parse_retree/expected/character_set/unescaped_dash/prefix_dash/source.py +1 -0
  436. dev/test_data/parse_retree/expected/character_set/unescaped_dash/suffix_dash/source.py +1 -0
  437. dev/test_data/parse_retree/expected/dot/source.py +1 -0
  438. dev/test_data/parse_retree/expected/empty/group/source.py +1 -0
  439. dev/test_data/parse_retree/expected/empty/group_in_a_group/source.py +1 -0
  440. dev/test_data/parse_retree/expected/empty/group_of_union_of_empty_concatenations/source.py +1 -0
  441. dev/test_data/parse_retree/expected/empty/regex/source.py +1 -0
  442. dev/test_data/parse_retree/expected/empty/union_of_empty_concatenations/source.py +1 -0
  443. dev/test_data/parse_retree/expected/escaped_literals/source.py +1 -0
  444. dev/test_data/parse_retree/expected/formatted_value/at_the_beginning/source.py +1 -0
  445. dev/test_data/parse_retree/expected/formatted_value/at_the_end/source.py +1 -0
  446. dev/test_data/parse_retree/expected/formatted_value/in_the_middle/source.py +1 -0
  447. dev/test_data/parse_retree/expected/formatted_value/single_formatted_value/source.py +1 -0
  448. dev/test_data/parse_retree/expected/literal/source.py +1 -0
  449. dev/test_data/parse_retree/expected/quantifier/greedy/at_least_3/source.py +1 -0
  450. dev/test_data/parse_retree/expected/quantifier/greedy/at_least_one/source.py +1 -0
  451. dev/test_data/parse_retree/expected/quantifier/greedy/at_most_3/source.py +1 -0
  452. dev/test_data/parse_retree/expected/quantifier/greedy/exactly_3/source.py +1 -0
  453. dev/test_data/parse_retree/expected/quantifier/greedy/maybe/source.py +1 -0
  454. dev/test_data/parse_retree/expected/quantifier/greedy/zero_or_more/source.py +1 -0
  455. dev/test_data/parse_retree/expected/quantifier/non_greedy/at_least_3/source.py +1 -0
  456. dev/test_data/parse_retree/expected/quantifier/non_greedy/at_least_one/source.py +1 -0
  457. dev/test_data/parse_retree/expected/quantifier/non_greedy/at_most_3/source.py +1 -0
  458. dev/test_data/parse_retree/expected/quantifier/non_greedy/exactly_3/source.py +1 -0
  459. dev/test_data/parse_retree/expected/quantifier/non_greedy/maybe/source.py +1 -0
  460. dev/test_data/parse_retree/expected/quantifier/non_greedy/zero_or_more/source.py +1 -0
  461. dev/test_data/parse_retree/expected/quantifier/on_a_character_set/source.py +1 -0
  462. dev/test_data/parse_retree/expected/quantifier/on_a_formatted_value/source.py +1 -0
  463. dev/test_data/parse_retree/expected/quantifier/on_a_group/source.py +1 -0
  464. dev/test_data/parse_retree/expected/quantifier/on_a_literal/source.py +1 -0
  465. dev/test_data/parse_retree/expected/start_and_stop_symbols/double_end_symbol/source.py +1 -0
  466. dev/test_data/parse_retree/expected/start_and_stop_symbols/double_start_symbol/source.py +1 -0
  467. dev/test_data/parse_retree/expected/start_and_stop_symbols/end_symbol_in_the_middle/source.py +1 -0
  468. dev/test_data/parse_retree/expected/start_and_stop_symbols/only_start_symbol/source.py +1 -0
  469. dev/test_data/parse_retree/expected/start_and_stop_symbols/only_stop_symbol/source.py +1 -0
  470. dev/test_data/parse_retree/expected/start_and_stop_symbols/start_symbol_at_the_beginning/source.py +1 -0
  471. dev/test_data/parse_retree/expected/start_and_stop_symbols/start_symbol_in_the_middle/source.py +1 -0
  472. dev/test_data/parse_retree/expected/start_and_stop_symbols/stop_symbol_at_the_end/source.py +1 -0
  473. dev/test_data/parse_retree/expected/union/of_character_sets/source.py +1 -0
  474. dev/test_data/parse_retree/expected/union/of_groups/source.py +1 -0
  475. dev/test_data/parse_retree/expected/union/of_string_literals/source.py +1 -0
  476. dev/test_data/parse_retree/expected/union/within_group/source.py +1 -0
  477. dev/test_data/parse_retree/expected/whitespace/source.py +1 -0
  478. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/Uxxxxxxxx_out_of_range/source.py +1 -0
  479. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/only_backslash/source.py +1 -0
  480. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/short_Uxxxxxxxx/source.py +1 -0
  481. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/short_uxxxx/source.py +1 -0
  482. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/short_x/source.py +1 -0
  483. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unexpected_escaping/source.py +1 -0
  484. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/digit/source.py +1 -0
  485. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/not_digit/source.py +1 -0
  486. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/not_whitespace/source.py +1 -0
  487. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/not_word/source.py +1 -0
  488. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/whitespace/source.py +1 -0
  489. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/word/source.py +1 -0
  490. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/Uxxxxxxxx_out_of_range/source.py +1 -0
  491. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/only_backslash/source.py +1 -0
  492. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/short_Uxxxxxxxx/source.py +1 -0
  493. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/short_uxxxx/source.py +1 -0
  494. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/short_x/source.py +1 -0
  495. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unexpected_escaping/source.py +1 -0
  496. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/digit/source.py +1 -0
  497. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/not_digit/source.py +1 -0
  498. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/not_whitespace/source.py +1 -0
  499. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/not_word/source.py +1 -0
  500. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/whitespace/source.py +1 -0
  501. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/word/source.py +1 -0
  502. dev/test_data/parse_retree/unexpected/invalid_character_range/source.py +1 -0
  503. dev/test_data/parse_retree/unexpected/invalid_quantifier/at_least_x/source.py +1 -0
  504. dev/test_data/parse_retree/unexpected/invalid_quantifier/between_3_and_x/source.py +1 -0
  505. dev/test_data/parse_retree/unexpected/invalid_quantifier/exactly_x/source.py +1 -0
  506. dev/test_data/parse_retree/unexpected/unhandled_group_directives/source.py +1 -0
  507. dev/test_data/parse_retree/unexpected/unterminated/character_set/source.py +1 -0
  508. dev/test_data/parse_retree/unexpected/unterminated/group/source.py +1 -0
  509. dev/test_data/parse_retree/unexpected/unterminated/group_of_union_of_empty_concatenations/source.py +1 -0
  510. dev/test_data/parse_retree/unexpected/unterminated/quantifier/source.py +1 -0
  511. dev/test_data/parse_retree/unexpected/unterminated/quantifier_with_comma/source.py +1 -0
  512. dev/test_data/parse_retree/unexpected/unterminated/quantifier_with_number_and_comma/source.py +1 -0
  513. dev/test_data/proto/test_main/expected/abstract_and_concrete_classes/meta_model.py +37 -0
  514. dev/test_data/proto/test_main/expected/concrete_class_with_descendants/meta_model.py +30 -0
  515. dev/test_data/proto/test_main/expected/concrete_class_with_enum/meta_model.py +21 -0
  516. dev/test_data/proto/test_main/expected/concrete_class_with_list_of_instances/meta_model.py +21 -0
  517. dev/test_data/proto/test_main/expected/concrete_class_with_primitive_attributes/meta_model.py +41 -0
  518. dev/test_data/python_protobuf/test_main/abstract_and_concrete_classes/expected_output/pbization.py +532 -0
  519. dev/test_data/python_protobuf/test_main/abstract_and_concrete_classes/meta_model.py +37 -0
  520. dev/test_data/python_protobuf/test_main/concrete_class_with_descendant/expected_output/pbization.py +527 -0
  521. dev/test_data/python_protobuf/test_main/concrete_class_with_descendant/meta_model.py +27 -0
  522. dev/test_data/python_protobuf/test_main/concrete_class_with_enum/expected_output/pbization.py +290 -0
  523. dev/test_data/python_protobuf/test_main/concrete_class_with_enum/meta_model.py +21 -0
  524. dev/test_data/python_protobuf/test_main/concrete_class_with_list_of_instances/expected_output/pbization.py +328 -0
  525. dev/test_data/python_protobuf/test_main/concrete_class_with_list_of_instances/meta_model.py +23 -0
  526. dev/test_data/python_protobuf/test_main/concrete_class_with_primitive_attributes/expected_output/pbization.py +274 -0
  527. dev/test_data/python_protobuf/test_main/concrete_class_with_primitive_attributes/meta_model.py +41 -0
  528. dev/test_data/rdf_shacl/test_main/expected/regression_when_lang_string_class_is_missing/meta_model.py +29 -0
  529. dev/test_data/rdf_shacl/test_main/expected/regression_when_len_constraints_on_inherited_property/meta_model.py +27 -0
  530. dev/test_data/rdf_shacl/test_main/unexpected/regression_len_constraint_on_class_property/meta_model.py +61 -0
  531. dev/test_data/real_meta_models/aas_core_meta.v3.py +5721 -0
  532. dev/test_data/smoke/test_main/unexpected/infer_for_schema_error/meta_model.py +12 -0
  533. dev/test_data/smoke/test_main/unexpected/intermediate_error/meta_model.py +18 -0
  534. dev/test_data/smoke/test_main/unexpected/parse_error/meta_model.py +5 -0
  535. dev/test_data/smoke/test_main/unexpected/pattern_verification_unparsable_regex/direct_match/meta_model.py +8 -0
  536. dev/test_data/smoke/test_main/unexpected/type_error/meta_model.py +18 -0
  537. dev/tests/__init__.py +1 -0
  538. dev/tests/common.py +197 -0
  539. dev/tests/cpp/__init__.py +0 -0
  540. dev/tests/cpp/test_common.py +32 -0
  541. dev/tests/cpp/test_main.py +144 -0
  542. dev/tests/cpp/test_pattern.py +188 -0
  543. dev/tests/cpp/test_verification.py +189 -0
  544. dev/tests/cpp/test_yielding.py +225 -0
  545. dev/tests/csharp/__init__.py +0 -0
  546. dev/tests/csharp/live_test_main.py +109 -0
  547. dev/tests/csharp/test_common.py +28 -0
  548. dev/tests/csharp/test_description.py +684 -0
  549. dev/tests/csharp/test_main.py +129 -0
  550. dev/tests/csharp/test_structure.py +93 -0
  551. dev/tests/csharp/test_verification.py +82 -0
  552. dev/tests/description.py +29 -0
  553. dev/tests/golang/__init__.py +0 -0
  554. dev/tests/golang/test_common.py +78 -0
  555. dev/tests/golang/test_main.py +128 -0
  556. dev/tests/infer_for_schema/__init__.py +0 -0
  557. dev/tests/infer_for_schema/common.py +47 -0
  558. dev/tests/infer_for_schema/test_len_on_properties.py +955 -0
  559. dev/tests/infer_for_schema/test_len_on_self.py +580 -0
  560. dev/tests/infer_for_schema/test_patterns_on_properties.py +686 -0
  561. dev/tests/infer_for_schema/test_patterns_on_self.py +258 -0
  562. dev/tests/infer_for_schema/test_property_in_set_of_enumeration_literals.py +600 -0
  563. dev/tests/infer_for_schema/test_property_in_set_of_primitives.py +549 -0
  564. dev/tests/intermediate/__init__.py +0 -0
  565. dev/tests/intermediate/test_constructor.py +719 -0
  566. dev/tests/intermediate/test_hierarchy.py +221 -0
  567. dev/tests/intermediate/test_revm.py +134 -0
  568. dev/tests/intermediate/test_translate.py +337 -0
  569. dev/tests/intermediate/test_type_inference.py +333 -0
  570. dev/tests/intermediate/test_types.py +169 -0
  571. dev/tests/java/__init__.py +0 -0
  572. dev/tests/java/test_common.py +20 -0
  573. dev/tests/java/test_description.py +128 -0
  574. dev/tests/java/test_main.py +234 -0
  575. dev/tests/jsonld_context/test_main.py +79 -0
  576. dev/tests/opcua/__init__.py +3 -0
  577. dev/tests/opcua/test_main.py +110 -0
  578. dev/tests/our_jsonschema/__init__.py +3 -0
  579. dev/tests/our_jsonschema/test_main.py +232 -0
  580. dev/tests/parse/__init__.py +0 -0
  581. dev/tests/parse/test_parse.py +503 -0
  582. dev/tests/parse/test_retree.py +272 -0
  583. dev/tests/proto/__init__.py +0 -0
  584. dev/tests/proto/test_main.py +112 -0
  585. dev/tests/python/__init__.py +0 -0
  586. dev/tests/python/test_common.py +124 -0
  587. dev/tests/python/test_main.py +126 -0
  588. dev/tests/python/test_xml_playground.py +254 -0
  589. dev/tests/python_protobuf/__init__.py +0 -0
  590. dev/tests/python_protobuf/test_main.py +111 -0
  591. dev/tests/rdf_shacl/__init__.py +0 -0
  592. dev/tests/rdf_shacl/test_common.py +32 -0
  593. dev/tests/rdf_shacl/test_description.py +223 -0
  594. dev/tests/rdf_shacl/test_main.py +194 -0
  595. dev/tests/smoke/__init__.py +0 -0
  596. dev/tests/smoke/test_main.py +83 -0
  597. dev/tests/test_common.py +94 -0
  598. dev/tests/typescript/__init__.py +0 -0
  599. dev/tests/typescript/test_common.py +108 -0
  600. dev/tests/typescript/test_main.py +125 -0
  601. dev/tests/xsd/__init__.py +0 -0
  602. dev/tests/xsd/test_main.py +227 -0
  603. dev/tests/yielding/__init__.py +0 -0
  604. dev/tests/yielding/test_linear.py +558 -0
@@ -0,0 +1,114 @@
1
+ """Generate the RDF ontology and the SHACL schema corresponding to the meta-model."""
2
+
3
+ import pathlib
4
+ from typing import TextIO
5
+
6
+ import aas_core_codegen
7
+ import aas_core_codegen.rdf_shacl.rdf
8
+ import aas_core_codegen.rdf_shacl.shacl
9
+ from aas_core_codegen import run
10
+ from aas_core_codegen.rdf_shacl import common as rdf_shacl_common
11
+
12
+
13
+ class Parameters:
14
+ """Represent the program parameters."""
15
+
16
+ def __init__(
17
+ self,
18
+ model_path: pathlib.Path,
19
+ snippets_dir: pathlib.Path,
20
+ output_dir: pathlib.Path,
21
+ ) -> None:
22
+ """Initialize with the given values."""
23
+ self.model_path = model_path
24
+ self.snippets_dir = snippets_dir
25
+ self.output_dir = output_dir
26
+
27
+
28
+ def execute(context: run.Context, stdout: TextIO, stderr: TextIO) -> int:
29
+ """Generate the code."""
30
+ # region Dependencies
31
+
32
+ our_type_to_rdfs_range, error = rdf_shacl_common.map_our_type_to_rdfs_range(
33
+ symbol_table=context.symbol_table, spec_impls=context.spec_impls
34
+ )
35
+ if error:
36
+ run.write_error_report(
37
+ message=f"Failed to determine the mapping our type to ``rdfs:range`` "
38
+ f"based on {context.model_path}",
39
+ errors=[context.lineno_columner.error_message(error)],
40
+ stderr=stderr,
41
+ )
42
+
43
+ return 1
44
+
45
+ assert our_type_to_rdfs_range is not None
46
+
47
+ # endregion
48
+
49
+ # region RDF ontology
50
+
51
+ rdf_code, errors = aas_core_codegen.rdf_shacl.rdf.generate(
52
+ symbol_table=context.symbol_table,
53
+ our_type_to_rdfs_range=our_type_to_rdfs_range,
54
+ spec_impls=context.spec_impls,
55
+ )
56
+
57
+ if errors is not None:
58
+ run.write_error_report(
59
+ message=f"Failed to generate the RDF ontology "
60
+ f"based on {context.model_path}",
61
+ errors=[context.lineno_columner.error_message(error) for error in errors],
62
+ stderr=stderr,
63
+ )
64
+ return 1
65
+
66
+ assert rdf_code is not None
67
+
68
+ pth = context.output_dir / "rdf-ontology.ttl"
69
+ try:
70
+ pth.write_text(rdf_code, encoding="utf-8")
71
+ except Exception as exception:
72
+ run.write_error_report(
73
+ message=f"Failed to write the RDF ontology to {pth}",
74
+ errors=[str(exception)],
75
+ stderr=stderr,
76
+ )
77
+ return 1
78
+
79
+ # endregion
80
+
81
+ # region SHACL schema
82
+
83
+ shacl_code, errors = aas_core_codegen.rdf_shacl.shacl.generate(
84
+ symbol_table=context.symbol_table,
85
+ our_type_to_rdfs_range=our_type_to_rdfs_range,
86
+ spec_impls=context.spec_impls,
87
+ )
88
+
89
+ if errors is not None:
90
+ run.write_error_report(
91
+ message=f"Failed to generate the SHACL schema "
92
+ f"based on {context.model_path}",
93
+ errors=[context.lineno_columner.error_message(error) for error in errors],
94
+ stderr=stderr,
95
+ )
96
+ return 1
97
+
98
+ assert shacl_code is not None
99
+
100
+ pth = context.output_dir / "shacl-schema.ttl"
101
+ try:
102
+ pth.write_text(shacl_code, encoding="utf-8")
103
+ except Exception as exception:
104
+ run.write_error_report(
105
+ message=f"Failed to write the SHACL schema to {pth}",
106
+ errors=[str(exception)],
107
+ stderr=stderr,
108
+ )
109
+ return 1
110
+
111
+ # endregion
112
+
113
+ stdout.write(f"Code generated to: {context.output_dir}\n")
114
+ return 0
@@ -0,0 +1,145 @@
1
+ """Generate RDF and SHACL identifiers based on the identifiers from the meta-model."""
2
+ from typing import List
3
+
4
+ from icontract import require
5
+
6
+ from aas_core_codegen import naming
7
+ from aas_core_codegen.common import Identifier, Stripped
8
+
9
+ _LOWERCASE_WORDS_IN_LABEL = {"to", "in"}
10
+
11
+
12
+ def _capitalized_label(identifier: Identifier) -> Stripped:
13
+ """
14
+ Generate the label starting with a capital letter.
15
+
16
+ >>> _capitalized_label(Identifier("Something"))
17
+ 'Something'
18
+
19
+ >>> _capitalized_label(Identifier("Something_good_to_URL"))
20
+ 'Something Good to URL'
21
+
22
+ >>> _capitalized_label(Identifier("URL_to_something"))
23
+ 'URL to Something'
24
+ """
25
+ parts = identifier.split("_")
26
+
27
+ cased = [] # type: List[str]
28
+ for part in parts:
29
+ if part in _LOWERCASE_WORDS_IN_LABEL:
30
+ cased.append(part.lower())
31
+ else:
32
+ if part == part.lower():
33
+ cased.append(part.capitalize())
34
+ else:
35
+ cased.append(part)
36
+
37
+ return Stripped(" ".join(cased))
38
+
39
+
40
+ # fmt: off
41
+ @require(
42
+ lambda identifier: identifier[0].isupper(),
43
+ "The class name must start with a capital letter"
44
+ )
45
+ # fmt: on
46
+ def class_name(identifier: Identifier) -> Identifier:
47
+ """
48
+ Generate the class name from the intermediate class ``identifier``.
49
+
50
+ >>> class_name(Identifier("Something"))
51
+ 'Something'
52
+
53
+ >>> class_name(Identifier("Something_to_URL"))
54
+ 'SomethingToUrl'
55
+
56
+ >>> class_name(Identifier("URL_to_something"))
57
+ 'UrlToSomething'
58
+ """
59
+ return naming.capitalized_camel_case(identifier)
60
+
61
+
62
+ # fmt: off
63
+ @require(
64
+ lambda identifier: identifier[0].isupper(),
65
+ "The class name must start with a capital letter"
66
+ )
67
+ # fmt: on
68
+ def class_label(identifier: Identifier) -> Stripped:
69
+ """
70
+ Generate the class label from the intermediate class ``identifier``.
71
+
72
+ >>> class_label(Identifier("Something"))
73
+ 'Something'
74
+
75
+ >>> class_label(Identifier("Something_good_to_URL"))
76
+ 'Something Good to URL'
77
+
78
+ >>> class_label(Identifier("URL_to_something"))
79
+ 'URL to Something'
80
+ """
81
+ return _capitalized_label(identifier)
82
+
83
+
84
+ def property_name(identifier: Identifier) -> Identifier:
85
+ """
86
+ Generate a property name based on its meta-model ``identifier``.
87
+
88
+ >>> property_name(Identifier("something"))
89
+ 'something'
90
+
91
+ >>> property_name(Identifier("something_to_URL"))
92
+ 'somethingToUrl'
93
+
94
+ >>> property_name(Identifier("URL_to_something"))
95
+ 'urlToSomething'
96
+ """
97
+ return naming.lower_camel_case(identifier)
98
+
99
+
100
+ def property_label(identifier: Identifier) -> Stripped:
101
+ """
102
+ Generate the property label from the intermediate class ``identifier``.
103
+
104
+ >>> property_label(Identifier("something"))
105
+ 'something'
106
+
107
+ >>> property_label(Identifier("something_good_to_URL"))
108
+ 'something good to URL'
109
+
110
+ >>> property_label(Identifier("URL_to_something"))
111
+ 'URL to something'
112
+ """
113
+ return Stripped(" ".join(identifier.split("_")))
114
+
115
+
116
+ def enumeration_literal(identifier: Identifier) -> Stripped:
117
+ """
118
+ Generate the enumeration literal for its intermediate ``identifier``.
119
+
120
+ >>> enumeration_literal(Identifier('something'))
121
+ 'Something'
122
+
123
+ >>> enumeration_literal(Identifier("something_to_URL"))
124
+ 'SomethingToUrl'
125
+
126
+ >>> enumeration_literal(Identifier("URL_to_something"))
127
+ 'UrlToSomething'
128
+ """
129
+ return naming.capitalized_camel_case(identifier)
130
+
131
+
132
+ def enumeration_literal_label(identifier: Identifier) -> Stripped:
133
+ """
134
+ Generate the label for an enumeration literal with intermediate ``identifier``.
135
+
136
+ >>> enumeration_literal_label(Identifier("something"))
137
+ 'Something'
138
+
139
+ >>> enumeration_literal_label(Identifier("something_good_to_URL"))
140
+ 'Something Good to URL'
141
+
142
+ >>> enumeration_literal_label(Identifier("URL_to_something_good"))
143
+ 'URL to Something Good'
144
+ """
145
+ return _capitalized_label(identifier)
@@ -0,0 +1,435 @@
1
+ """Generate the RDF ontology based on the meta-model."""
2
+ import io
3
+ from typing import Tuple, Optional, List
4
+
5
+ from icontract import ensure, require
6
+
7
+ from aas_core_codegen import intermediate, specific_implementations
8
+ from aas_core_codegen.common import Stripped, Error, assert_never
9
+ from aas_core_codegen.rdf_shacl import (
10
+ naming as rdf_shacl_naming,
11
+ common as rdf_shacl_common,
12
+ _description as rdf_shacl_description,
13
+ )
14
+ from aas_core_codegen.rdf_shacl.common import INDENT as I, INDENT2 as II
15
+
16
+
17
+ @ensure(lambda result: (result[0] is not None) ^ (result[1] is not None))
18
+ def _generate_summary(
19
+ description: intermediate.DescriptionUnion,
20
+ ) -> Tuple[Optional[str], Optional[Error]]:
21
+ """Generate the comment text based on the summary in the description."""
22
+ renderer = rdf_shacl_description.Renderer()
23
+ tokens, errors = renderer.transform(description.summary)
24
+
25
+ if errors is not None:
26
+ return None, Error(
27
+ description.parsed.node,
28
+ "Failed to generate the description comment",
29
+ [Error(description.parsed.node, message) for message in errors],
30
+ )
31
+
32
+ assert tokens is not None
33
+
34
+ tokens = rdf_shacl_description.without_redundant_breaks(tokens=tokens)
35
+
36
+ parts = [] # type: List[str]
37
+ for token in tokens:
38
+ if isinstance(token, rdf_shacl_description.TokenText):
39
+ parts.append(token.content)
40
+ elif isinstance(token, rdf_shacl_description.TokenLineBreak):
41
+ parts.append("\n")
42
+ elif isinstance(token, rdf_shacl_description.TokenParagraphBreak):
43
+ parts.append("\n\n")
44
+ else:
45
+ assert_never(token)
46
+
47
+ result = "".join(parts)
48
+
49
+ return result, None
50
+
51
+
52
+ @ensure(lambda result: (result[0] is not None) ^ (result[1] is not None))
53
+ def _define_for_enumeration(
54
+ enumeration: intermediate.Enumeration, xml_namespace: Stripped
55
+ ) -> Tuple[Optional[Stripped], Optional[Error]]:
56
+ """Define an RDF definition of an enumeration."""
57
+ cls_name = rdf_shacl_naming.class_name(enumeration.name)
58
+ cls_label = rdf_shacl_naming.class_label(enumeration.name)
59
+
60
+ writer = io.StringIO()
61
+ writer.write(
62
+ f"""\
63
+ ### {xml_namespace}/{cls_name}
64
+ aas:{cls_name} rdf:type owl:Class ;"""
65
+ )
66
+
67
+ writer.write(
68
+ f"\n{I}rdfs:label {rdf_shacl_common.string_literal(cls_label)}^^xs:string ;"
69
+ )
70
+
71
+ errors = [] # type: List[Error]
72
+
73
+ if enumeration.description is not None:
74
+ summary, error = _generate_summary(enumeration.description)
75
+ if error is not None:
76
+ errors.append(error)
77
+ else:
78
+ assert summary is not None
79
+ writer.write(
80
+ f"\n{I}rdfs:comment {rdf_shacl_common.string_literal(summary)}@en ;"
81
+ )
82
+
83
+ if len(enumeration.literals) > 0:
84
+ writer.write(f"\n{I}owl:oneOf (\n")
85
+
86
+ # NOTE (mristin, 2022-04-20):
87
+ # We sort by the literal names so that the URLs are sorted in the resulting
88
+ # schema.
89
+ for literal_name in sorted(
90
+ rdf_shacl_naming.enumeration_literal(literal.name)
91
+ for literal in enumeration.literals
92
+ ):
93
+ writer.write(f"{II}<{xml_namespace}/{cls_name}/{literal_name}>\n")
94
+
95
+ writer.write(f"{I}) ;")
96
+
97
+ writer.write("\n.")
98
+
99
+ if len(enumeration.literals) > 0:
100
+ # NOTE (mristin, 2022-04-20):
101
+ # We sort by the literal names so that the URLs are sorted in the resulting
102
+ # schema.
103
+ for literal_name, literal in sorted(
104
+ (rdf_shacl_naming.enumeration_literal(literal.name), literal)
105
+ for literal in enumeration.literals
106
+ ):
107
+ literal_label = rdf_shacl_naming.enumeration_literal_label(literal.name)
108
+
109
+ writer.write("\n\n")
110
+ writer.write(
111
+ f"""\
112
+ ### {xml_namespace}/{cls_name}/{literal_name}
113
+ <{xml_namespace}/{cls_name}/{literal_name}> rdf:type aas:{cls_name} ;
114
+ {I}rdfs:label {rdf_shacl_common.string_literal(literal_label)}^^xs:string ;"""
115
+ )
116
+
117
+ if literal.description is not None:
118
+ summary, error = _generate_summary(literal.description)
119
+ if error is not None:
120
+ errors.append(error)
121
+ else:
122
+ assert summary is not None
123
+ writer.write(
124
+ f"\n{I}rdfs:comment "
125
+ f"{rdf_shacl_common.string_literal(summary)}@en ;"
126
+ )
127
+
128
+ writer.write("\n.")
129
+
130
+ if len(errors) > 0:
131
+ return None, Error(
132
+ enumeration.parsed.node,
133
+ "Failed to generate the RDF definition",
134
+ underlying=errors,
135
+ )
136
+
137
+ return Stripped(writer.getvalue()), None
138
+
139
+
140
+ @ensure(lambda result: (result[0] is not None) ^ (result[1] is not None))
141
+ def _define_owl_class_for_class(
142
+ cls: intermediate.ClassUnion, xml_namespace: Stripped
143
+ ) -> Tuple[Optional[Stripped], Optional[Error]]:
144
+ """Generate the code to define an OWL class."""
145
+ cls_name = rdf_shacl_naming.class_name(cls.name)
146
+
147
+ writer = io.StringIO()
148
+ writer.write(f"### {xml_namespace}/{cls_name}\n")
149
+ writer.write(f"aas:{cls_name} rdf:type owl:Class ;\n")
150
+
151
+ for inheritance in cls.inheritances:
152
+ writer.write(
153
+ f"{I}rdfs:subClassOf "
154
+ f"aas:{rdf_shacl_naming.class_name(inheritance.name)} ;\n"
155
+ )
156
+
157
+ cls_label = rdf_shacl_naming.class_label(cls.name)
158
+ writer.write(
159
+ f"{I}rdfs:label {rdf_shacl_common.string_literal(cls_label)}^^xs:string ;\n"
160
+ )
161
+
162
+ if cls.description is not None:
163
+ summary, error = _generate_summary(cls.description)
164
+ if error is not None:
165
+ return None, error
166
+
167
+ assert summary is not None
168
+ writer.write(
169
+ f"{I}rdfs:comment {rdf_shacl_common.string_literal(summary)}@en ;\n"
170
+ )
171
+
172
+ writer.write(".")
173
+ return Stripped(writer.getvalue()), None
174
+
175
+
176
+ @require(lambda prop, cls: id(prop) in cls.property_id_set)
177
+ @ensure(lambda result: (result[0] is not None) ^ (result[1] is not None))
178
+ def _define_property(
179
+ prop: intermediate.Property,
180
+ cls: intermediate.ClassUnion,
181
+ xml_namespace: Stripped,
182
+ our_type_to_rdfs_range: rdf_shacl_common.OurTypeToRdfsRange,
183
+ ) -> Tuple[Optional[Stripped], Optional[Error]]:
184
+ """Generate the definition of a property ``prop`` of the intermediate ``cls``."""
185
+ type_anno = intermediate.beneath_optional(prop.type_annotation)
186
+
187
+ cls_name = rdf_shacl_naming.class_name(cls.name)
188
+ rdfs_domain = f"aas:{cls_name}"
189
+
190
+ rdf_type = None # type: Optional[str]
191
+
192
+ missing_implementation = False
193
+
194
+ if isinstance(type_anno, intermediate.OurTypeAnnotation):
195
+ if isinstance(
196
+ type_anno.our_type,
197
+ (
198
+ intermediate.Enumeration,
199
+ intermediate.AbstractClass,
200
+ intermediate.ConcreteClass,
201
+ ),
202
+ ):
203
+ rdf_type = "owl:ObjectProperty"
204
+ elif isinstance(type_anno.our_type, intermediate.ConstrainedPrimitive):
205
+ rdf_type = "owl:DatatypeProperty"
206
+ else:
207
+ assert_never(type_anno.our_type)
208
+
209
+ elif isinstance(type_anno, intermediate.PrimitiveTypeAnnotation):
210
+ rdf_type = "owl:DatatypeProperty"
211
+
212
+ elif isinstance(type_anno, intermediate.ListTypeAnnotation):
213
+ type_anno_items = intermediate.beneath_optional(type_anno.items)
214
+
215
+ if isinstance(type_anno_items, intermediate.OurTypeAnnotation):
216
+ rdf_type = "owl:ObjectProperty"
217
+
218
+ elif isinstance(type_anno_items, intermediate.PrimitiveTypeAnnotation):
219
+ rdf_type = "owl:DatatypeProperty"
220
+
221
+ else:
222
+ missing_implementation = True
223
+ else:
224
+ missing_implementation = True
225
+
226
+ if missing_implementation:
227
+ return None, Error(
228
+ prop.parsed.node,
229
+ f"(mristin, 2021-11-12): "
230
+ f"We did not refine the definition of the non-atomic and non-sequential "
231
+ f"properties. If you see this message, it is time to implement "
232
+ f"this missing functionality.\n"
233
+ f"{prop=}, {type_anno=}, {cls=}",
234
+ )
235
+
236
+ assert rdf_type is not None
237
+
238
+ prop_name = rdf_shacl_naming.property_name(prop.name)
239
+ prop_label = Stripped(f"has {rdf_shacl_naming.property_label(prop.name)}")
240
+ rdfs_range = rdf_shacl_common.rdfs_range_for_type_annotation(
241
+ type_annotation=type_anno, our_type_to_rdfs_range=our_type_to_rdfs_range
242
+ )
243
+
244
+ url = f"{xml_namespace}/{cls_name}/{prop_name}"
245
+ writer = io.StringIO()
246
+ writer.write(
247
+ f"""\
248
+ ### {url}
249
+ <{url}> rdf:type {rdf_type} ;
250
+ {I}rdfs:label {rdf_shacl_common.string_literal(prop_label)}^^xs:string ;
251
+ {I}rdfs:domain {rdfs_domain} ;
252
+ {I}rdfs:range {rdfs_range} ;"""
253
+ )
254
+
255
+ if prop.description:
256
+ summary, error = _generate_summary(prop.description)
257
+ if error is not None:
258
+ return None, error
259
+
260
+ assert summary is not None
261
+
262
+ writer.write(
263
+ f"\n{I}rdfs:comment {rdf_shacl_common.string_literal(summary)}@en ;"
264
+ )
265
+
266
+ writer.write("\n.")
267
+ return Stripped(writer.getvalue()), None
268
+
269
+
270
+ # fmt: off
271
+ @require(
272
+ lambda cls:
273
+ not isinstance(cls, intermediate.Class)
274
+ or not cls.is_implementation_specific
275
+ )
276
+ # fmt: on
277
+ def _define_for_class(
278
+ cls: intermediate.ClassUnion,
279
+ our_type_to_rdfs_range: rdf_shacl_common.OurTypeToRdfsRange,
280
+ xml_namespace: Stripped,
281
+ ) -> Tuple[Optional[Stripped], Optional[Error]]:
282
+ """Generate the definition for the intermediate ``cls``."""
283
+ blocks = [] # type: List[Stripped]
284
+ errors = [] # type: List[Error]
285
+
286
+ owl_class, error = _define_owl_class_for_class(cls=cls, xml_namespace=xml_namespace)
287
+ if error is not None:
288
+ errors.append(error)
289
+ else:
290
+ assert owl_class is not None
291
+ blocks.append(owl_class)
292
+
293
+ # NOTE (mristin, 2022-04-20):
294
+ # We sort by the property names so that the URLs appear sorted in the resulting
295
+ # schema.
296
+ for _, prop in sorted(
297
+ (rdf_shacl_naming.property_name(prop.name), prop) for prop in cls.properties
298
+ ):
299
+ if prop.specified_for is not cls:
300
+ continue
301
+
302
+ prop_def, error = _define_property(
303
+ prop=prop,
304
+ cls=cls,
305
+ xml_namespace=xml_namespace,
306
+ our_type_to_rdfs_range=our_type_to_rdfs_range,
307
+ )
308
+ if error is not None:
309
+ errors.append(error)
310
+ else:
311
+ assert prop_def is not None
312
+ blocks.append(prop_def)
313
+
314
+ if len(errors) > 0:
315
+ return None, Error(
316
+ None, f"Failed to generate the definition for {cls.name}", errors
317
+ )
318
+
319
+ return Stripped("\n\n".join(blocks)), None
320
+
321
+
322
+ @ensure(lambda result: (result[0] is not None) ^ (result[1] is not None))
323
+ def generate(
324
+ symbol_table: intermediate.SymbolTable,
325
+ our_type_to_rdfs_range: rdf_shacl_common.OurTypeToRdfsRange,
326
+ spec_impls: specific_implementations.SpecificImplementations,
327
+ ) -> Tuple[Optional[Stripped], Optional[List[Error]]]:
328
+ """Generate the RDF ontology based on the ``symbol_table."""
329
+ errors = [] # type: List[Error]
330
+
331
+ xml_namespace = symbol_table.meta_model.xml_namespace
332
+
333
+ version_literal = rdf_shacl_common.string_literal(symbol_table.meta_model.version)
334
+
335
+ ontology_comment_literal = rdf_shacl_common.string_literal(
336
+ f"This ontology represents the data model for the Asset Administration Shell "
337
+ f"according to the specification "
338
+ f"version {symbol_table.meta_model.version}."
339
+ )
340
+
341
+ preamble = Stripped(
342
+ f"""\
343
+ @prefix aas: <{xml_namespace}/> .
344
+ @prefix owl: <http://www.w3.org/2002/07/owl#> .
345
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
346
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
347
+ @prefix xs: <http://www.w3.org/2001/XMLSchema#> .
348
+ @base <{xml_namespace}/> .
349
+
350
+ <{xml_namespace}/> rdf:type owl:Ontology ;
351
+ owl:versionInfo {version_literal} ;
352
+ rdfs:comment {ontology_comment_literal}@en ;
353
+ rdfs:isDefinedBy <{xml_namespace}/> ;
354
+ ."""
355
+ )
356
+
357
+ blocks = [preamble] # type: List[Stripped]
358
+
359
+ lang_string_cls, lang_string_error = rdf_shacl_common.get_lang_string_as_expected(
360
+ symbol_table=symbol_table
361
+ )
362
+ if lang_string_error is not None:
363
+ errors.append(lang_string_error)
364
+
365
+ if len(errors) > 0:
366
+ return None, errors
367
+
368
+ for our_type in sorted(
369
+ symbol_table.our_types,
370
+ key=lambda another_our_type: rdf_shacl_naming.class_name(another_our_type.name),
371
+ ):
372
+ if our_type is lang_string_cls:
373
+ # NOTE (mristin, 2022-09-01):
374
+ # Please see
375
+ # :py:const`aas_core_codegen.rdf_shacl.common._EXPLANATION_ABOUT_WHY_WE_EXPECT_LANG_STRING`
376
+ # on why we hard-wire ``Lang_string`` here.
377
+ continue
378
+
379
+ if isinstance(our_type, intermediate.Enumeration):
380
+ block, error = _define_for_enumeration(
381
+ enumeration=our_type, xml_namespace=xml_namespace
382
+ )
383
+
384
+ if error is not None:
385
+ errors.append(error)
386
+ else:
387
+ assert block is not None
388
+ blocks.append(block)
389
+
390
+ elif isinstance(our_type, intermediate.ConstrainedPrimitive):
391
+ # NOTE (mristin, 2022-02-11):
392
+ # We have to in-line the constraints of the constrained primitives directly
393
+ # in SHACL as we do not want to introduce new entities into the ontology.
394
+ pass
395
+
396
+ elif isinstance(
397
+ our_type, (intermediate.AbstractClass, intermediate.ConcreteClass)
398
+ ):
399
+ if our_type.is_implementation_specific:
400
+ implementation_key = specific_implementations.ImplementationKey(
401
+ f"rdf/{our_type.name}/owl_class.ttl"
402
+ )
403
+
404
+ implementation = spec_impls.get(implementation_key, None)
405
+ if implementation is None:
406
+ errors.append(
407
+ Error(
408
+ our_type.parsed.node,
409
+ f"The implementation snippet for "
410
+ f"the class {our_type.parsed.name} "
411
+ f"is missing: {implementation_key}",
412
+ )
413
+ )
414
+ else:
415
+ blocks.append(implementation)
416
+
417
+ else:
418
+ block, error = _define_for_class(
419
+ cls=our_type,
420
+ our_type_to_rdfs_range=our_type_to_rdfs_range,
421
+ xml_namespace=xml_namespace,
422
+ )
423
+
424
+ if error is not None:
425
+ errors.append(error)
426
+ else:
427
+ assert block is not None
428
+ blocks.append(block)
429
+ else:
430
+ assert_never(our_type)
431
+
432
+ if len(errors) > 0:
433
+ return None, errors
434
+
435
+ return Stripped("\n\n".join(blocks)), None