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,85 @@
1
+ """Emulate naming logic for our types to Protocol Buffers in Python code."""
2
+
3
+ from aas_core_codegen.common import Identifier
4
+ from aas_core_codegen import naming
5
+
6
+
7
+ def enum_name(identifier: Identifier) -> Identifier:
8
+ """
9
+ Generate a name for an enum based on its meta-model ``identifier``.
10
+
11
+ >>> enum_name(Identifier("something"))
12
+ 'Something'
13
+
14
+ >>> enum_name(Identifier("URL_to_something"))
15
+ 'UrlToSomething'
16
+ """
17
+ return naming.capitalized_camel_case(identifier)
18
+
19
+
20
+ def enum_literal_constant_name(
21
+ enumeration_name: Identifier, literal_name: Identifier
22
+ ) -> Identifier:
23
+ """
24
+ Generate a constant identifier for an enum literal in the meta-model.
25
+
26
+ >>> enum_literal_constant_name(
27
+ ... Identifier("that"), Identifier("literal")
28
+ ... )
29
+ 'That_LITERAL'
30
+
31
+ >>> enum_literal_constant_name(
32
+ ... Identifier("URL_to_something"), Identifier("ABC_shines")
33
+ ... )
34
+ 'Urltosomething_ABC_SHINES'
35
+
36
+ >>> enum_literal_constant_name(
37
+ ... Identifier("Modelling_kind"), Identifier("Template")
38
+ ... )
39
+ 'Modellingkind_TEMPLATE'
40
+ """
41
+ enum_name_joined = "".join(enumeration_name.split("_"))
42
+
43
+ return Identifier(f"{enum_name_joined.capitalize()}_{literal_name.upper()}")
44
+
45
+
46
+ def property_name(identifier: Identifier) -> Identifier:
47
+ """
48
+ Generate the name of the property in a Protocol Buffer generated class.
49
+
50
+ >>> property_name(Identifier("something"))
51
+ 'something'
52
+
53
+ >>> property_name(Identifier("something_to_URL"))
54
+ 'something_to_url'
55
+
56
+ >>> property_name(Identifier("URL_to_something"))
57
+ 'url_to_something'
58
+ """
59
+ return naming.lower_snake_case(identifier)
60
+
61
+
62
+ def class_name(identifier: Identifier) -> Identifier:
63
+ """
64
+ Generate a name for a class based on its meta-model ``identifier``.
65
+
66
+ >>> class_name(Identifier("something"))
67
+ 'Something'
68
+
69
+ >>> class_name(Identifier("URL_to_something"))
70
+ 'UrlToSomething'
71
+ """
72
+ return naming.capitalized_camel_case(identifier)
73
+
74
+
75
+ def choice_class_name(identifier: Identifier) -> Identifier:
76
+ """
77
+ Generate a name for a choice (union) class based on its meta-model ``identifier``.
78
+
79
+ >>> choice_class_name(Identifier("something"))
80
+ 'Something_choice'
81
+
82
+ >>> choice_class_name(Identifier("URL_to_something"))
83
+ 'UrlToSomething_choice'
84
+ """
85
+ return Identifier(naming.capitalized_camel_case(identifier) + "_choice")
@@ -0,0 +1 @@
1
+ """Generate the RDF ontology and the SHACL schema corresponding to the meta-model."""
@@ -0,0 +1,351 @@
1
+ """Render the description of a class or a property as a plain text."""
2
+ from typing import Optional, List, Tuple, Sequence, cast, Union
3
+
4
+ import docutils.nodes
5
+ from icontract import ensure
6
+
7
+ from aas_core_codegen.common import assert_never, assert_union_of_descendants_exhaustive
8
+ from aas_core_codegen.intermediate import (
9
+ doc as intermediate_doc,
10
+ )
11
+ from aas_core_codegen.rdf_shacl import naming as rdf_shacl_naming
12
+
13
+ # NOTE (mristin, 2022-03-23):
14
+ # The representation of the documentation as tokens was definitely a wrong decision.
15
+ # However, we do not prioritize descriptions in RDF+SHACL at the moment, so we leave out
16
+ # the refactoring for now. A better approach would be to first transform
17
+ # into a nested structure similar to HTML (paragraph, unordered list, ordered list,
18
+ # *etc.*) and then render this nested structure in a separate step.
19
+
20
+
21
+ class Token:
22
+ """Represent a token of a rendered description."""
23
+
24
+
25
+ class TokenText(Token):
26
+ """Represent a text without a break."""
27
+
28
+ def __init__(self, content: str) -> None:
29
+ """Initialize with the given values."""
30
+ self.content = content
31
+
32
+ def __repr__(self) -> str:
33
+ return f"{TokenText.__name__}({self.content!r})"
34
+
35
+
36
+ class TokenParagraphBreak(Token):
37
+ """Represent a paragraph break in a rendered description."""
38
+
39
+ def __repr__(self) -> str:
40
+ return f"{TokenParagraphBreak.__name__}()"
41
+
42
+
43
+ class TokenLineBreak(Token):
44
+ """Represent a line break in a rendered description."""
45
+
46
+ def __repr__(self) -> str:
47
+ return f"{TokenLineBreak.__name__}()"
48
+
49
+
50
+ def without_trailing_breaks(tokens: Sequence["TokenUnion"]) -> List["TokenUnion"]:
51
+ """Remove all the trailing breaks at the end of the ``tokens``."""
52
+ result = list(tokens)
53
+
54
+ first_non_break = None # type: Optional[int]
55
+ for i, token in enumerate(reversed(result)):
56
+ if not isinstance(token, (TokenLineBreak, TokenParagraphBreak)):
57
+ first_non_break = i
58
+ break
59
+
60
+ if first_non_break is None:
61
+ result = []
62
+
63
+ elif first_non_break == 0:
64
+ pass
65
+
66
+ else:
67
+ result = result[:-first_non_break] # pylint: disable=invalid-unary-operand-type
68
+
69
+ return result
70
+
71
+
72
+ def without_redundant_breaks(tokens: Sequence["TokenUnion"]) -> List["TokenUnion"]:
73
+ """Remove the redundant breaks from ``tokens`` and return a cleaned-up list."""
74
+ if len(tokens) == 0:
75
+ return []
76
+
77
+ last_token = None # type: Optional[TokenUnion]
78
+ result = [] # type: List[TokenUnion]
79
+
80
+ # region Remove multiple consecutive paragraph breaks and line breaks
81
+
82
+ for token in tokens:
83
+ if last_token is None:
84
+ result.append(token)
85
+ elif isinstance(last_token, TokenLineBreak) and isinstance(
86
+ token, TokenLineBreak
87
+ ):
88
+ pass
89
+ elif isinstance(last_token, TokenParagraphBreak) and isinstance(
90
+ token, TokenParagraphBreak
91
+ ):
92
+ pass
93
+ else:
94
+ result.append(token)
95
+
96
+ last_token = token
97
+
98
+ # endregion
99
+
100
+ result = without_trailing_breaks(tokens=result)
101
+
102
+ return result
103
+
104
+
105
+ class Renderer(intermediate_doc.DocutilsElementTransformer[List["TokenUnion"]]):
106
+ """Render descriptions as C# docstring XML."""
107
+
108
+ # fmt: off
109
+ @ensure(
110
+ lambda result:
111
+ not (result[0] is not None)
112
+ or (
113
+ all(
114
+ '\n' not in token.content
115
+ for token in result[0]
116
+ if isinstance(token, TokenText)
117
+ )))
118
+ # fmt: on
119
+ def transform_text(
120
+ self, element: docutils.nodes.Text
121
+ ) -> Tuple[Optional[List["TokenUnion"]], Optional[List[str]]]:
122
+ return [TokenText(element.astext().replace("\n", " "))], None
123
+
124
+ def transform_reference_to_our_type_in_doc(
125
+ self, element: intermediate_doc.ReferenceToOurType
126
+ ) -> Tuple[Optional[List["TokenUnion"]], Optional[List[str]]]:
127
+ cls_name = rdf_shacl_naming.class_name(element.our_type.name)
128
+ return [TokenText(f"'{cls_name}'")], None
129
+
130
+ def transform_reference_to_attribute_in_doc(
131
+ self, element: intermediate_doc.ReferenceToAttribute
132
+ ) -> Tuple[Optional[List["TokenUnion"]], Optional[List[str]]]:
133
+ if isinstance(element.reference, intermediate_doc.ReferenceToProperty):
134
+ prop_name = rdf_shacl_naming.property_name(element.reference.prop.name)
135
+ return [TokenText(f"'{prop_name}'")], None
136
+
137
+ elif isinstance(
138
+ element.reference, intermediate_doc.ReferenceToEnumerationLiteral
139
+ ):
140
+ literal_name = rdf_shacl_naming.enumeration_literal(
141
+ element.reference.literal.name
142
+ )
143
+
144
+ return [TokenText(f"'{literal_name}'")], None
145
+
146
+ else:
147
+ assert_never(element.reference)
148
+
149
+ def transform_reference_to_argument_in_doc(
150
+ self, element: intermediate_doc.ReferenceToArgument
151
+ ) -> Tuple[Optional[List["TokenUnion"]], Optional[List[str]]]:
152
+ # Argument references are not really meaningful for SHACL, so we just
153
+ # return them as-is.
154
+ return [TokenText(element.reference)], None
155
+
156
+ def transform_reference_to_constraint_in_doc(
157
+ self, element: intermediate_doc.ReferenceToConstraint
158
+ ) -> Tuple[Optional[List["TokenUnion"]], Optional[List[str]]]:
159
+ return [TokenText(f"Constraint {element.reference}")], None
160
+
161
+ def transform_reference_to_constant_in_doc(
162
+ self, element: intermediate_doc.ReferenceToConstant
163
+ ) -> Tuple[Optional[List["TokenUnion"]], Optional[List[str]]]:
164
+ # NOTE (mristin, 2022-07-10):
165
+ # We simply use class label here to obtain some name here. The constants are
166
+ # not defined in the schemas, so we can not really reference them in some
167
+ # meaningful way.
168
+
169
+ return [TokenText(rdf_shacl_naming.class_name(element.constant.name))], None
170
+
171
+ def transform_literal(
172
+ self, element: docutils.nodes.literal
173
+ ) -> Tuple[Optional[List["TokenUnion"]], Optional[List[str]]]:
174
+ return [TokenText(element.astext())], None
175
+
176
+ def transform_paragraph(
177
+ self, element: docutils.nodes.paragraph
178
+ ) -> Tuple[Optional[List["TokenUnion"]], Optional[List[str]]]:
179
+ tokens = [] # type: List["TokenUnion"]
180
+ errors = [] # type: List[str]
181
+
182
+ for child in element.children:
183
+ child_tokens, child_errors = self.transform(child)
184
+ if child_errors is not None:
185
+ errors.extend(child_errors)
186
+ else:
187
+ assert child_tokens is not None
188
+ tokens.extend(child_tokens)
189
+
190
+ if len(errors) > 0:
191
+ return None, errors
192
+
193
+ tokens.append(TokenParagraphBreak())
194
+
195
+ return tokens, None
196
+
197
+ def transform_emphasis(
198
+ self, element: docutils.nodes.emphasis
199
+ ) -> Tuple[Optional[List["TokenUnion"]], Optional[List[str]]]:
200
+ tokens = [] # type: List["TokenUnion"]
201
+ errors = [] # type: List[str]
202
+
203
+ for child in element.children:
204
+ child_tokens, child_errors = self.transform(child)
205
+ if child_errors is not None:
206
+ errors.extend(child_errors)
207
+ else:
208
+ assert child_tokens is not None
209
+ tokens.extend(child_tokens)
210
+
211
+ if len(errors) > 0:
212
+ return None, errors
213
+
214
+ return tokens, None
215
+
216
+ def transform_list_item(
217
+ self, element: docutils.nodes.list_item
218
+ ) -> Tuple[Optional[List["TokenUnion"]], Optional[List[str]]]:
219
+ if len(element.children) != 1 or not isinstance(
220
+ element.children[0], docutils.nodes.paragraph
221
+ ):
222
+ return None, [
223
+ (
224
+ f"Expected the list item to contain a single child (paragraph), "
225
+ f"but got: {element}"
226
+ )
227
+ ]
228
+
229
+ para_element = element.children[0]
230
+
231
+ tokens = [] # type: List["TokenUnion"]
232
+
233
+ if len(para_element.children) == 0:
234
+ return [TokenText("* (empty)")], None
235
+
236
+ errors = [] # type: List[str]
237
+
238
+ for child in para_element.children:
239
+ child_tokens, child_errors = self.transform(child)
240
+ if child_errors is not None:
241
+ errors.extend(child_errors)
242
+ else:
243
+ assert child_tokens is not None
244
+ tokens.append(TokenText("* "))
245
+ tokens.extend(child_tokens)
246
+
247
+ if len(errors) > 0:
248
+ return None, errors
249
+
250
+ return tokens, None
251
+
252
+ def transform_bullet_list(
253
+ self, element: docutils.nodes.bullet_list
254
+ ) -> Tuple[Optional[List["TokenUnion"]], Optional[List[str]]]:
255
+ tokens = [] # type: List["TokenUnion"]
256
+ errors = [] # type: List[str]
257
+
258
+ for child in element.children:
259
+ child_tokens, child_errors = self.transform(child)
260
+ if child_errors is not None:
261
+ errors.extend(child_errors)
262
+ else:
263
+ assert child_tokens is not None
264
+ tokens.extend(child_tokens)
265
+ tokens.append(TokenLineBreak())
266
+
267
+ if len(errors) > 0:
268
+ return None, errors
269
+
270
+ return tokens, None
271
+
272
+ def transform_note(
273
+ self, element: docutils.nodes.note
274
+ ) -> Tuple[Optional[List["TokenUnion"]], Optional[List[str]]]:
275
+ tokens = [] # type: List["TokenUnion"]
276
+ errors = [] # type: List[str]
277
+
278
+ for child in element.children:
279
+ child_tokens, child_errors = self.transform(child)
280
+ if child_errors is not None:
281
+ errors.extend(child_errors)
282
+ else:
283
+ assert child_tokens is not None
284
+ tokens.extend(child_tokens)
285
+
286
+ if len(errors) > 0:
287
+ return None, errors
288
+
289
+ tokens = (
290
+ cast(List["TokenUnion"], [TokenText("NOTE:"), TokenLineBreak()]) + tokens
291
+ )
292
+
293
+ return tokens, None
294
+
295
+ def transform_reference(
296
+ self, element: docutils.nodes.reference
297
+ ) -> Tuple[Optional[List["TokenUnion"]], Optional[List[str]]]:
298
+ tokens = [] # type: List["TokenUnion"]
299
+ errors = [] # type: List[str]
300
+
301
+ for child in element.children:
302
+ child_tokens, child_errors = self.transform(child)
303
+ if child_errors is not None:
304
+ errors.extend(child_errors)
305
+ else:
306
+ assert child_tokens is not None
307
+ tokens.extend(child_tokens)
308
+ tokens.append(TokenLineBreak())
309
+
310
+ if len(errors) > 0:
311
+ return None, errors
312
+
313
+ return tokens, None
314
+
315
+ def transform_field_body(
316
+ self, element: docutils.nodes.field_body
317
+ ) -> Tuple[Optional[List["TokenUnion"]], Optional[List[str]]]:
318
+ tokens = [] # type: List[TokenUnion]
319
+ errors = [] # type: List[str]
320
+
321
+ for child in element:
322
+ child_tokens, child_errors = self.transform(child)
323
+ if child_errors is not None:
324
+ errors.extend(child_errors)
325
+ else:
326
+ assert child_tokens is not None
327
+ tokens.extend(child_tokens)
328
+
329
+ result = without_redundant_breaks(tokens=tokens)
330
+ return result, None
331
+
332
+ def transform_document(
333
+ self, element: docutils.nodes.document
334
+ ) -> Tuple[Optional[List["TokenUnion"]], Optional[List[str]]]:
335
+ tokens = [] # type: List[TokenUnion]
336
+ errors = [] # type: List[str]
337
+
338
+ for child in element:
339
+ child_tokens, child_errors = self.transform(child)
340
+ if child_errors is not None:
341
+ errors.extend(child_errors)
342
+ else:
343
+ assert child_tokens is not None
344
+ tokens.extend(child_tokens)
345
+
346
+ result = without_redundant_breaks(tokens=tokens)
347
+ return result, None
348
+
349
+
350
+ TokenUnion = Union[TokenText, TokenParagraphBreak, TokenLineBreak]
351
+ assert_union_of_descendants_exhaustive(union=TokenUnion, base_class=Token)
@@ -0,0 +1,206 @@
1
+ """Provide common functions for both RDF and SHACL generators."""
2
+ from typing import MutableMapping, Tuple, Optional, List
3
+
4
+ from icontract import ensure
5
+
6
+ from aas_core_codegen import intermediate, specific_implementations
7
+ from aas_core_codegen.common import (
8
+ Stripped,
9
+ Error,
10
+ assert_never,
11
+ Identifier,
12
+ )
13
+ from aas_core_codegen.rdf_shacl import naming as rdf_shacl_naming
14
+
15
+ INDENT = " "
16
+ INDENT2 = INDENT * 2
17
+ INDENT3 = INDENT * 3
18
+ INDENT4 = INDENT * 4
19
+
20
+
21
+ def string_literal(text: str) -> Stripped:
22
+ """Generate a valid and escaped string literal based on the free-form ``text``."""
23
+ if len(text) == 0:
24
+ return Stripped('""')
25
+
26
+ escaped = text.replace("\\", "\\\\").replace('"', '\\"').replace("\n", "\\n")
27
+ return Stripped(f'"{escaped}"')
28
+
29
+
30
+ OurTypeToRdfsRange = MutableMapping[intermediate.OurType, Stripped]
31
+
32
+
33
+ EXPLANATION_ABOUT_WHY_WE_EXPECT_LANG_STRING = (
34
+ "(mristin, 2022-09-01) "
35
+ "We hard-wire the langString's to rdf:langString. Admittedly, this is "
36
+ "hacky. We could have made the class ``Lang_string`` "
37
+ "implementation-specific and defined its ``rdfs:range`` manually as "
38
+ "a snippet.\n\n"
39
+ "However, we decided against that as such a design would force us to "
40
+ "define langString for every language and schema which do not natively "
41
+ "support it, write custom data generation methods *etc.* Given that "
42
+ "RDF+SHACL codegen is one out of many code generators we leave the "
43
+ "other code generators and test data generators as simple as possible, "
44
+ "and make this code generator a bit hacky in return."
45
+ )
46
+
47
+
48
+ @ensure(
49
+ lambda result: not (result[1] is not None) or (result[0] is None),
50
+ "If there is an error, the class must not be found.",
51
+ )
52
+ def get_lang_string_as_expected(
53
+ symbol_table: intermediate.SymbolTable,
54
+ ) -> Tuple[Optional[intermediate.ConcreteClass], Optional[Error]]:
55
+ """
56
+ Try to retrieve the ``Lang_string`` as a concrete class.
57
+
58
+ In some metamodels, we do define ``Lang_string`` and can hard-wire schema generation
59
+ in RDF and SHACL with it. However, in other models, we dispensed of ``Lang_string``.
60
+ Therefore, this function is not guaranteed to return a class. If there is no
61
+ ``Lang_string`` in the symbol table, no error will be returned!
62
+
63
+ However, if ``Lang_string`` exists as a class, it must be a concrete class. If it
64
+ does not fulfill the expectations, an error will be returned.
65
+ """
66
+ lang_string_cls = symbol_table.find_our_type(Identifier("Lang_string"))
67
+ if lang_string_cls is not None:
68
+ if not isinstance(lang_string_cls, intermediate.ConcreteClass):
69
+ return (
70
+ None,
71
+ Error(
72
+ None,
73
+ f"Expected ``Lang_string`` to be specified as "
74
+ f"a concrete class in the meta model, but it has been defined "
75
+ f"as: {type(lang_string_cls)}.\n\n"
76
+ + EXPLANATION_ABOUT_WHY_WE_EXPECT_LANG_STRING,
77
+ ),
78
+ )
79
+
80
+ return lang_string_cls, None
81
+
82
+
83
+ @ensure(lambda result: (result[0] is not None) ^ (result[1] is not None))
84
+ def map_our_type_to_rdfs_range(
85
+ symbol_table: intermediate.SymbolTable,
86
+ spec_impls: specific_implementations.SpecificImplementations,
87
+ ) -> Tuple[Optional[OurTypeToRdfsRange], Optional[Error]]:
88
+ """
89
+ Iterate over all our types and determine their value as ``rdfs:range``.
90
+
91
+ This also applies for ``sh:datatype`` in SHACL.
92
+ """
93
+ our_type_to_rdfs_range = dict() # type: OurTypeToRdfsRange
94
+ errors = [] # type: List[Error]
95
+
96
+ lang_string_cls, lang_string_error = get_lang_string_as_expected(
97
+ symbol_table=symbol_table
98
+ )
99
+ if lang_string_error is not None:
100
+ return None, lang_string_error
101
+
102
+ for our_type in symbol_table.our_types:
103
+ if our_type is lang_string_cls:
104
+ # NOTE (mristin, 2022-09-01):
105
+ # Please see
106
+ # :py:const`aas_core_codegen.rdf_shacl.common._EXPLANATION_ABOUT_WHY_WE_EXPECT_LANG_STRING`
107
+ # on why we hard-wire ``Lang_string`` here.
108
+ our_type_to_rdfs_range[our_type] = Stripped("rdf:langString")
109
+
110
+ elif isinstance(
111
+ our_type, (intermediate.AbstractClass, intermediate.ConcreteClass)
112
+ ):
113
+ if our_type.is_implementation_specific:
114
+ implementation_key = specific_implementations.ImplementationKey(
115
+ f"rdf/{our_type.name}/as_rdfs_range.ttl"
116
+ )
117
+ implementation = spec_impls.get(implementation_key, None)
118
+ if implementation is None:
119
+ errors.append(
120
+ Error(
121
+ our_type.parsed.node,
122
+ f"The implementation snippet for "
123
+ f"how to represent the class {our_type.parsed.name} "
124
+ f"as ``rdfs:range`` is missing: {implementation_key}",
125
+ )
126
+ )
127
+ else:
128
+ our_type_to_rdfs_range[our_type] = implementation
129
+ else:
130
+ # NOTE (mristin, 2022-09-01):
131
+ # We do not define any special rdfs:range for the class. The function
132
+ # :function:`.rdfs_range_for_type_annotation` will take care of the
133
+ # general cases.
134
+ pass
135
+
136
+ else:
137
+ # NOTE (mristin, 2022-09-01):
138
+ # No pre-defined rdfs:range for this our type.
139
+ pass
140
+
141
+ if len(errors) > 0:
142
+ return None, Error(
143
+ None,
144
+ "Failed to determine the mapping our type 🠒 ``rdfs:range`` "
145
+ "for one or more of our types",
146
+ errors,
147
+ )
148
+
149
+ return our_type_to_rdfs_range, None
150
+
151
+
152
+ PRIMITIVE_MAP = {
153
+ intermediate.PrimitiveType.BOOL: "xs:boolean",
154
+ intermediate.PrimitiveType.INT: "xs:long",
155
+ intermediate.PrimitiveType.FLOAT: "xs:double",
156
+ intermediate.PrimitiveType.STR: "xs:string",
157
+ intermediate.PrimitiveType.BYTEARRAY: "xs:base64Binary",
158
+ }
159
+
160
+
161
+ def rdfs_range_for_type_annotation(
162
+ type_annotation: intermediate.TypeAnnotationUnion,
163
+ our_type_to_rdfs_range: OurTypeToRdfsRange,
164
+ ) -> Stripped:
165
+ """Determine the ``rdfs:range`` corresponding to the ``type_annotation``."""
166
+ type_anno = intermediate.beneath_optional(type_annotation)
167
+
168
+ rdfs_range: str
169
+
170
+ if isinstance(type_anno, intermediate.PrimitiveTypeAnnotation):
171
+ rdfs_range = PRIMITIVE_MAP[type_anno.a_type]
172
+
173
+ elif isinstance(type_anno, intermediate.OurTypeAnnotation):
174
+ maybe_rdfs_range = our_type_to_rdfs_range.get(type_anno.our_type, None)
175
+
176
+ if maybe_rdfs_range is None:
177
+ if isinstance(
178
+ type_anno.our_type,
179
+ (
180
+ intermediate.Enumeration,
181
+ intermediate.AbstractClass,
182
+ intermediate.ConcreteClass,
183
+ ),
184
+ ):
185
+ cls_name = rdf_shacl_naming.class_name(type_anno.our_type.name)
186
+ rdfs_range = f"aas:{cls_name}"
187
+
188
+ elif isinstance(type_anno.our_type, intermediate.ConstrainedPrimitive):
189
+ rdfs_range = PRIMITIVE_MAP[type_anno.our_type.constrainee]
190
+ else:
191
+ assert_never(type_anno.our_type)
192
+ else:
193
+ rdfs_range = maybe_rdfs_range
194
+
195
+ elif isinstance(type_anno, intermediate.ListTypeAnnotation):
196
+ rdfs_range = rdfs_range_for_type_annotation(
197
+ type_annotation=type_anno.items,
198
+ our_type_to_rdfs_range=our_type_to_rdfs_range,
199
+ )
200
+ else:
201
+ assert_never(type_anno)
202
+
203
+ return Stripped(rdfs_range)
204
+
205
+
206
+ assert all(literal in PRIMITIVE_MAP for literal in intermediate.PrimitiveType)