cognite-neat 0.85.4__tar.gz → 0.85.6__tar.gz

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.

Potentially problematic release.


This version of cognite-neat might be problematic. Click here for more details.

Files changed (320) hide show
  1. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/PKG-INFO +1 -1
  2. cognite_neat-0.85.6/cognite/neat/_version.py +1 -0
  3. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/constants.py +0 -8
  4. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/loaders/_rdf2dms.py +12 -4
  5. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/examples/__init__.py +3 -0
  6. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/extractors/_dexpi.py +2 -2
  7. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/core/rdf_to_assets.py +1 -1
  8. cognite_neat-0.85.6/cognite/neat/legacy/rules/examples/Rules-Nordic44-to-graphql.xlsx +0 -0
  9. cognite_neat-0.85.6/cognite/neat/legacy/rules/examples/Rules-Nordic44.xlsx +0 -0
  10. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/__init__.py +1 -1
  11. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Extract_RDF_Graph_and_Generate_Assets/workflow.yaml +1 -1
  12. cognite_neat-0.85.6/cognite/neat/rules/analysis/__init__.py +6 -0
  13. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/analysis/_base.py +0 -12
  14. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/analysis/_information_rules.py +116 -27
  15. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/exporters/_rules2excel.py +11 -3
  16. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_base.py +8 -2
  17. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_inference2rules.py +13 -7
  18. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/issues/spreadsheet.py +46 -6
  19. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/information/_rules.py +3 -1
  20. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/information/_rules_input.py +23 -4
  21. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/information/_validation.py +15 -0
  22. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Extract_RDF_Graph_and_Generate_Assets/workflow.yaml +1 -1
  23. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/legacy/graph_store.py +27 -9
  24. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/pyproject.toml +2 -2
  25. cognite_neat-0.85.4/cognite/neat/_version.py +0 -1
  26. cognite_neat-0.85.4/cognite/neat/legacy/rules/examples/Rules-Nordic44-to-TNT.xlsx +0 -0
  27. cognite_neat-0.85.4/cognite/neat/legacy/rules/examples/Rules-Nordic44-to-graphql.xlsx +0 -0
  28. cognite_neat-0.85.4/cognite/neat/rules/analysis/__init__.py +0 -3
  29. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/LICENSE +0 -0
  30. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/README.md +0 -0
  31. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/__init__.py +0 -0
  32. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/_shared.py +0 -0
  33. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/__init__.py +0 -0
  34. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/asgi/metrics.py +0 -0
  35. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/configuration.py +0 -0
  36. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/context_manager/__init__.py +0 -0
  37. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/context_manager/manager.py +0 -0
  38. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/data_classes/__init__.py +0 -0
  39. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/data_classes/rest.py +0 -0
  40. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/explorer.py +0 -0
  41. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/routers/configuration.py +0 -0
  42. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/routers/core.py +0 -0
  43. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/routers/crud.py +0 -0
  44. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/routers/data_exploration.py +0 -0
  45. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/routers/metrics.py +0 -0
  46. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/routers/rules.py +0 -0
  47. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/routers/workflows.py +0 -0
  48. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/utils/__init__.py +0 -0
  49. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/utils/data_mapping.py +0 -0
  50. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/utils/logging.py +0 -0
  51. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/utils/query_templates.py +0 -0
  52. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/main.py +0 -0
  53. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/monitoring/__init__.py +0 -0
  54. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/monitoring/metrics.py +0 -0
  55. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/index.html +0 -0
  56. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/.gitignore +0 -0
  57. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/README.md +0 -0
  58. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/asset-manifest.json +0 -0
  59. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/favicon.ico +0 -0
  60. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/img/architect-icon.svg +0 -0
  61. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/img/developer-icon.svg +0 -0
  62. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/img/sme-icon.svg +0 -0
  63. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/index.html +0 -0
  64. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/logo192.png +0 -0
  65. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/manifest.json +0 -0
  66. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/robots.txt +0 -0
  67. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/static/css/main.38a62222.css +0 -0
  68. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/static/css/main.38a62222.css.map +0 -0
  69. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/static/js/main.ec7f72e2.js +0 -0
  70. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/static/js/main.ec7f72e2.js.LICENSE.txt +0 -0
  71. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/static/js/main.ec7f72e2.js.map +0 -0
  72. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/static/media/logo.8093b84df9ed36a174c629d6fe0b730d.svg +0 -0
  73. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/config.py +0 -0
  74. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/exceptions.py +0 -0
  75. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/__init__.py +0 -0
  76. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/_shared.py +0 -0
  77. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/_tracking/__init__.py +0 -0
  78. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/_tracking/base.py +0 -0
  79. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/_tracking/log.py +0 -0
  80. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/examples/Knowledge-Graph-Nordic44-dirty.xml +0 -0
  81. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/examples/Knowledge-Graph-Nordic44.xml +0 -0
  82. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/examples/__init__.py +0 -0
  83. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/examples/skos-capturing-sheet-wind-topics.xlsx +0 -0
  84. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/exceptions.py +0 -0
  85. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/__init__.py +0 -0
  86. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_base.py +0 -0
  87. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_classic_cdf/__init__.py +0 -0
  88. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_classic_cdf/_assets.py +0 -0
  89. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_classic_cdf/_events.py +0 -0
  90. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_classic_cdf/_files.py +0 -0
  91. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_classic_cdf/_labels.py +0 -0
  92. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_classic_cdf/_relationships.py +0 -0
  93. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_classic_cdf/_sequences.py +0 -0
  94. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_classic_cdf/_timeseries.py +0 -0
  95. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_dexpi.py +0 -0
  96. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_mock_graph_generator.py +0 -0
  97. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_rdf_file.py +0 -0
  98. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/issues/__init__.py +0 -0
  99. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/issues/loader.py +0 -0
  100. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/loaders/__init__.py +0 -0
  101. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/loaders/_base.py +0 -0
  102. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/loaders/_rdf2asset.py +0 -0
  103. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/models.py +0 -0
  104. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/queries/__init__.py +0 -0
  105. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/queries/_base.py +0 -0
  106. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/queries/_construct.py +0 -0
  107. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/queries/_shared.py +0 -0
  108. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/stores/__init__.py +0 -0
  109. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/stores/_base.py +0 -0
  110. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/stores/_oxrdflib.py +0 -0
  111. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/stores/_provenance.py +0 -0
  112. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/transformers/__init__.py +0 -0
  113. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/transformers/_base.py +0 -0
  114. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/transformers/_classic_cdf.py +0 -0
  115. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/issues.py +0 -0
  116. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/__init__.py +0 -0
  117. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/__init__.py +0 -0
  118. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/examples/Knowledge-Graph-Nordic44-dirty.xml +0 -0
  119. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/examples/Knowledge-Graph-Nordic44.xml +0 -0
  120. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/examples/skos-capturing-sheet-wind-topics.xlsx +0 -0
  121. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/exceptions.py +0 -0
  122. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/extractors/__init__.py +0 -0
  123. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/extractors/_base.py +0 -0
  124. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/extractors/_graph_capturing_sheet.py +0 -0
  125. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/extractors/_mock_graph_generator.py +0 -0
  126. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/__init__.py +0 -0
  127. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/_asset_loader.py +0 -0
  128. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/_base.py +0 -0
  129. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/_exceptions.py +0 -0
  130. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/core/__init__.py +0 -0
  131. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/core/labels.py +0 -0
  132. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/core/models.py +0 -0
  133. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/core/rdf_to_relationships.py +0 -0
  134. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/rdf_to_dms.py +0 -0
  135. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/validator.py +0 -0
  136. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/models.py +0 -0
  137. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/stores/__init__.py +0 -0
  138. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/stores/_base.py +0 -0
  139. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/stores/_graphdb_store.py +0 -0
  140. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/stores/_memory_store.py +0 -0
  141. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/stores/_oxigraph_store.py +0 -0
  142. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/stores/_oxrdflib.py +0 -0
  143. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/stores/_rdf_to_graph.py +0 -0
  144. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/transformations/__init__.py +0 -0
  145. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/transformations/entity_matcher.py +0 -0
  146. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/transformations/query_generator/__init__.py +0 -0
  147. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/transformations/query_generator/sparql.py +0 -0
  148. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/transformations/transformer.py +0 -0
  149. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/__init__.py +0 -0
  150. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/analysis.py +0 -0
  151. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/power-grid-containers.yaml +0 -0
  152. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/power-grid-example.xlsx +0 -0
  153. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/power-grid-model.yaml +0 -0
  154. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/rules-template.xlsx +0 -0
  155. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/sheet2cdf-transformation-rules.xlsx +0 -0
  156. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/skos-rules.xlsx +0 -0
  157. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/source-to-solution-mapping-rules.xlsx +0 -0
  158. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/wind-energy.owl +0 -0
  159. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exceptions.py +0 -0
  160. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/__init__.py +0 -0
  161. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_base.py +0 -0
  162. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_core/__init__.py +0 -0
  163. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_core/rules2labels.py +0 -0
  164. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_rules2dms.py +0 -0
  165. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_rules2excel.py +0 -0
  166. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_rules2graphql.py +0 -0
  167. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_rules2ontology.py +0 -0
  168. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_rules2pydantic_models.py +0 -0
  169. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_rules2rules.py +0 -0
  170. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_rules2triples.py +0 -0
  171. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_validation.py +0 -0
  172. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/__init__.py +0 -0
  173. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_base.py +0 -0
  174. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_dict2rules.py +0 -0
  175. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_dms2rules.py +0 -0
  176. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_graph2rules.py +0 -0
  177. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_json2rules.py +0 -0
  178. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_owl2rules/__init__.py +0 -0
  179. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_owl2rules/_owl2classes.py +0 -0
  180. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_owl2rules/_owl2metadata.py +0 -0
  181. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_owl2rules/_owl2properties.py +0 -0
  182. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_owl2rules/_owl2rules.py +0 -0
  183. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_spreadsheet2rules.py +0 -0
  184. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_xsd2rules.py +0 -0
  185. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_yaml2rules.py +0 -0
  186. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/models/__init__.py +0 -0
  187. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/models/_base.py +0 -0
  188. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/models/raw_rules.py +0 -0
  189. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/models/rdfpath.py +0 -0
  190. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/models/rules.py +0 -0
  191. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/models/tables.py +0 -0
  192. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/models/value_types.py +0 -0
  193. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Export_DMS/workflow.yaml +0 -0
  194. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Export_Rules_to_Ontology/workflow.yaml +0 -0
  195. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Extract_DEXPI_Graph_and_Export_Rules/workflow.yaml +0 -0
  196. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Import_DMS/workflow.yaml +0 -0
  197. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Ontology_to_Data_Model/workflow.yaml +0 -0
  198. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Validate_Rules/workflow.yaml +0 -0
  199. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Validate_Solution_Model/workflow.yaml +0 -0
  200. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Visualize_Data_Model_Using_Mock_Graph/workflow.yaml +0 -0
  201. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Visualize_Semantic_Data_Model/workflow.yaml +0 -0
  202. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/py.typed +0 -0
  203. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/__init__.py +0 -0
  204. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/_shared.py +0 -0
  205. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/examples/__init__.py +0 -0
  206. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/examples/wind-energy.owl +0 -0
  207. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/exceptions.py +0 -0
  208. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/exporters/__init__.py +0 -0
  209. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/exporters/_base.py +0 -0
  210. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/exporters/_rules2dms.py +0 -0
  211. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/exporters/_rules2ontology.py +0 -0
  212. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/exporters/_rules2yaml.py +0 -0
  213. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/exporters/_validation.py +0 -0
  214. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/__init__.py +0 -0
  215. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_dms2rules.py +0 -0
  216. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_dtdl2rules/__init__.py +0 -0
  217. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_dtdl2rules/_unit_lookup.py +0 -0
  218. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_dtdl2rules/dtdl_converter.py +0 -0
  219. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_dtdl2rules/dtdl_importer.py +0 -0
  220. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_dtdl2rules/spec.py +0 -0
  221. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_owl2rules/__init__.py +0 -0
  222. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_owl2rules/_owl2classes.py +0 -0
  223. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_owl2rules/_owl2metadata.py +0 -0
  224. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_owl2rules/_owl2properties.py +0 -0
  225. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_owl2rules/_owl2rules.py +0 -0
  226. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_spreadsheet2rules.py +0 -0
  227. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_yaml2rules.py +0 -0
  228. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/issues/__init__.py +0 -0
  229. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/issues/base.py +0 -0
  230. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/issues/dms.py +0 -0
  231. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/issues/fileread.py +0 -0
  232. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/issues/formatters.py +0 -0
  233. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/issues/importing.py +0 -0
  234. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/issues/spreadsheet_file.py +0 -0
  235. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/__init__.py +0 -0
  236. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/_base.py +0 -0
  237. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/_constants.py +0 -0
  238. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/_rdfpath.py +0 -0
  239. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/_types/__init__.py +0 -0
  240. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/_types/_base.py +0 -0
  241. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/_types/_field.py +0 -0
  242. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/asset/__init__.py +0 -0
  243. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/asset/_converter.py +0 -0
  244. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/asset/_rules.py +0 -0
  245. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/asset/_rules_input.py +0 -0
  246. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/asset/_serializer.py +0 -0
  247. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/asset/_validation.py +0 -0
  248. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/data_types.py +0 -0
  249. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/dms/__init__.py +0 -0
  250. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/dms/_converter.py +0 -0
  251. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/dms/_exporter.py +0 -0
  252. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/dms/_rules.py +0 -0
  253. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/dms/_rules_input.py +0 -0
  254. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/dms/_schema.py +0 -0
  255. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/dms/_serializer.py +0 -0
  256. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/dms/_validation.py +0 -0
  257. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/domain.py +0 -0
  258. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/entities.py +0 -0
  259. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/information/__init__.py +0 -0
  260. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/information/_converter.py +0 -0
  261. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/information/_serializer.py +0 -0
  262. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/wrapped_entities.py +0 -0
  263. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/__init__.py +0 -0
  264. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/auth.py +0 -0
  265. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/auxiliary.py +0 -0
  266. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/cdf.py +0 -0
  267. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/cdf_classes.py +0 -0
  268. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/cdf_loaders/__init__.py +0 -0
  269. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/cdf_loaders/_base.py +0 -0
  270. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/cdf_loaders/_data_modeling.py +0 -0
  271. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/cdf_loaders/_ingestion.py +0 -0
  272. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/cdf_loaders/data_classes.py +0 -0
  273. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/exceptions.py +0 -0
  274. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/spreadsheet.py +0 -0
  275. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/text.py +0 -0
  276. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/upload.py +0 -0
  277. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/utils.py +0 -0
  278. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/xml_.py +0 -0
  279. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/__init__.py +0 -0
  280. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/_exceptions.py +0 -0
  281. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/base.py +0 -0
  282. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/cdf_store.py +0 -0
  283. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Export_DMS/workflow.yaml +0 -0
  284. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Export_Rules_to_Ontology/workflow.yaml +0 -0
  285. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Extract_DEXPI_Graph_and_Export_Rules/workflow.yaml +0 -0
  286. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Import_DMS/workflow.yaml +0 -0
  287. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Ontology_to_Data_Model/workflow.yaml +0 -0
  288. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Validate_Rules/workflow.yaml +0 -0
  289. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Validate_Solution_Model/workflow.yaml +0 -0
  290. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Visualize_Data_Model_Using_Mock_Graph/workflow.yaml +0 -0
  291. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Visualize_Semantic_Data_Model/workflow.yaml +0 -0
  292. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/manager.py +0 -0
  293. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/migration/__init__.py +0 -0
  294. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/migration/steps.py +0 -0
  295. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/migration/wf_manifests.py +0 -0
  296. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/model.py +0 -0
  297. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/__init__.py +0 -0
  298. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/data_contracts.py +0 -0
  299. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/__init__.py +0 -0
  300. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/current/__init__.py +0 -0
  301. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/current/graph_extractor.py +0 -0
  302. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/current/graph_loader.py +0 -0
  303. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/current/graph_store.py +0 -0
  304. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/current/rules_exporter.py +0 -0
  305. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/current/rules_importer.py +0 -0
  306. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/current/rules_validator.py +0 -0
  307. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/io/__init__.py +0 -0
  308. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/io/io_steps.py +0 -0
  309. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/legacy/__init__.py +0 -0
  310. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/legacy/graph_contextualization.py +0 -0
  311. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/legacy/graph_extractor.py +0 -0
  312. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/legacy/graph_loader.py +0 -0
  313. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/legacy/graph_transformer.py +0 -0
  314. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/legacy/rules_exporter.py +0 -0
  315. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/legacy/rules_importer.py +0 -0
  316. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/step_model.py +0 -0
  317. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps_registry.py +0 -0
  318. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/tasks.py +0 -0
  319. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/triggers.py +0 -0
  320. {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cognite-neat
3
- Version: 0.85.4
3
+ Version: 0.85.6
4
4
  Summary: Knowledge graph transformation
5
5
  Home-page: https://cognite-neat.readthedocs-hosted.com/
6
6
  License: Apache-2.0
@@ -0,0 +1 @@
1
+ __version__ = "0.85.6"
@@ -22,14 +22,6 @@ PREFIXES = {
22
22
  "owl": OWL._NS,
23
23
  "xsd": XSD._NS,
24
24
  "pav": Namespace("http://purl.org/pav/"),
25
- "cim": Namespace("http://iec.ch/TC57/2013/CIM-schema-cim16#"),
26
- "icim": Namespace("http://iec.ch/TC57/2013/CIM-schema-cim16-info#"),
27
- "entsoe": Namespace("http://entsoe.eu/CIM/SchemaExtension/3/1#"),
28
- "entsoe2": Namespace("http://entsoe.eu/CIM/SchemaExtension/3/2#"),
29
- "md": Namespace("http://iec.ch/TC57/61970-552/ModelDescription/1#"),
30
- "pti": Namespace("http://www.pti-us.com/PTI_CIM-schema-cim16#"),
31
- "tnt": Namespace("http://purl.org/cognite/tnt#"),
32
- "neat": DEFAULT_NAMESPACE,
33
25
  }
34
26
 
35
27
 
@@ -82,7 +82,9 @@ class DMSLoader(CDFLoader[dm.InstanceApply]):
82
82
  except Exception as e:
83
83
  issues.append(
84
84
  loader_issues.FailedConvertError(
85
- identifier=rules.metadata.as_identifier(), target_format="read DMS model", reason=str(e)
85
+ identifier=rules.metadata.as_identifier(),
86
+ target_format="read DMS model",
87
+ reason=str(e),
86
88
  )
87
89
  )
88
90
  return cls(graph_store, data_model, instance_space, {}, issues)
@@ -199,7 +201,11 @@ class DMSLoader(CDFLoader[dm.InstanceApply]):
199
201
  return pydantic_cls, edge_by_property, issues
200
202
 
201
203
  def _create_node(
202
- self, identifier: str, properties: dict[str, list[str]], pydantic_cls: type[Model], view_id: dm.ViewId
204
+ self,
205
+ identifier: str,
206
+ properties: dict[str, list[str]],
207
+ pydantic_cls: type[Model],
208
+ view_id: dm.ViewId,
203
209
  ) -> dm.InstanceApply:
204
210
  created = pydantic_cls.model_validate(properties)
205
211
 
@@ -233,7 +239,7 @@ class DMSLoader(CDFLoader[dm.InstanceApply]):
233
239
  external_id = f"{identifier}.{prop}.{target}"
234
240
  yield dm.EdgeApply(
235
241
  space=self.instance_space,
236
- external_id=external_id if len(external_id) < 256 else create_sha256_hash(external_id),
242
+ external_id=(external_id if len(external_id) < 256 else create_sha256_hash(external_id)),
237
243
  type=edge.type,
238
244
  start_node=dm.DirectRelationReference(self.instance_space, identifier),
239
245
  end_node=dm.DirectRelationReference(self.instance_space, target),
@@ -290,5 +296,7 @@ def _triples2dictionary(
290
296
  """Converts list of triples to dictionary"""
291
297
  values_by_property_by_identifier: dict[str, dict[str, list[str]]] = defaultdict(lambda: defaultdict(list))
292
298
  for id_, property_, value in triples:
293
- values_by_property_by_identifier[id_][property_].append(value)
299
+ # avoid issue with strings "None", "nan", "null" being treated as values
300
+ if value.lower() not in ["", "None", "nan", "null"]:
301
+ values_by_property_by_identifier[id_][property_].append(value)
294
302
  return values_by_property_by_identifier
@@ -5,3 +5,6 @@ from pathlib import Path
5
5
  # https://github.com/pydata/xarray/blob/main/xarray/tutorial.py
6
6
  # Currently there are simple paths to the examples which are then easily loaded in the notebooks
7
7
  nordic44_knowledge_graph = Path(__file__).parent / "Knowledge-Graph-Nordic44.xml"
8
+ nordic44_knowledge_graph_dirty = (
9
+ Path(__file__).parent / "Knowledge-Graph-Nordic44-dirty.xml"
10
+ )
@@ -3,7 +3,7 @@ from pathlib import Path
3
3
 
4
4
  from rdflib import Namespace
5
5
 
6
- from cognite.neat.constants import PREFIXES
6
+ from cognite.neat.constants import DEFAULT_NAMESPACE
7
7
  from cognite.neat.graph.extractors._dexpi import DexpiExtractor
8
8
  from cognite.neat.legacy.graph.models import Triple
9
9
 
@@ -31,7 +31,7 @@ class DexpiXML(BaseExtractor):
31
31
  base_namespace: str | None = None,
32
32
  ):
33
33
  self.filepath = Path(filepath)
34
- self.namespace = Namespace(base_namespace) if isinstance(base_namespace, str | Namespace) else PREFIXES["neat"]
34
+ self.namespace = Namespace(base_namespace) if isinstance(base_namespace, str | Namespace) else DEFAULT_NAMESPACE
35
35
 
36
36
  def extract(self) -> set[Triple]:
37
37
  """
@@ -271,7 +271,7 @@ def _class2asset_instance(
271
271
  if "name" in remapped_class_instance and remapped_class_instance["name"] == "":
272
272
  remapped_class_instance["name"] = empty_name_default
273
273
  # To maintain shape across of all assets of specific type we are adding missing metadata
274
- # keys as empty strings, this was request by Statnett
274
+ # keys as empty strings, this was request by a customer
275
275
  # Generally this is bad practice, but more of a workaround of their bad data
276
276
  if missing_metadata and add_missing_metadata:
277
277
  msg = f"Adding missing metadata keys with values set to empty string for {class_}"
@@ -12,7 +12,7 @@ power_grid_containers = _EXAMPLES / "power-grid-containers.yaml"
12
12
  power_grid_data_model = _EXAMPLES / "power-grid-model.yaml"
13
13
  simple_example = _EXAMPLES / "sheet2cdf-transformation-rules.xlsx"
14
14
  source_to_solution_mapping = _EXAMPLES / "source-to-solution-mapping-rules.xlsx"
15
- nordic44 = _EXAMPLES / "Rules-Nordic44-to-TNT.xlsx"
15
+ nordic44 = _EXAMPLES / "Rules-Nordic44.xlsx"
16
16
  nordic44_graphql = _EXAMPLES / "Rules-Nordic44-to-graphql.xlsx"
17
17
  skos = _EXAMPLES / "skos-rules.xlsx"
18
18
  wind_energy_ontology = _EXAMPLES / "wind-energy.owl"
@@ -24,7 +24,7 @@ steps:
24
24
  pos_y: 77
25
25
  - complex_configs: {}
26
26
  configs:
27
- file_name: Rules-Nordic44-to-TNT.xlsx
27
+ file_name: Rules-Nordic44.xlsx
28
28
  validation_report_file: rules_validation_report.txt
29
29
  validation_report_storage_dir: rules_validation_report
30
30
  version: ""
@@ -0,0 +1,6 @@
1
+ from ._information_rules import (
2
+ AssetArchitectRulesAnalysis,
3
+ InformationArchitectRulesAnalysis,
4
+ )
5
+
6
+ __all__ = ["InformationArchitectRulesAnalysis", "AssetArchitectRulesAnalysis"]
@@ -1,15 +1,9 @@
1
- import sys
2
1
  from abc import ABC, abstractmethod
3
2
  from typing import Generic, TypeVar
4
3
 
5
4
  from cognite.neat.rules._shared import Rules
6
5
  from cognite.neat.rules.models.entities import ClassEntity
7
6
 
8
- if sys.version_info >= (3, 11):
9
- from enum import StrEnum
10
- else:
11
- from backports.strenum import StrEnum
12
-
13
7
  T_Rules = TypeVar("T_Rules", bound=Rules)
14
8
 
15
9
 
@@ -17,9 +11,3 @@ class BaseAnalysis(ABC, Generic[T_Rules]):
17
11
  @abstractmethod
18
12
  def subset_rules(self, desired_classes: set[ClassEntity]) -> T_Rules:
19
13
  raise NotImplementedError()
20
-
21
-
22
- class DataModelingScenario(StrEnum):
23
- from_scratch = "from scratch"
24
- build_solution = "build solution"
25
- extend_reference = "extend reference"
@@ -2,25 +2,37 @@ import itertools
2
2
  import logging
3
3
  import warnings
4
4
  from collections import defaultdict
5
- from typing import Any
5
+ from typing import Any, Generic, TypeVar
6
6
 
7
7
  import pandas as pd
8
8
  from pydantic import ValidationError
9
9
 
10
10
  from cognite.neat.rules.models import SchemaCompleteness
11
11
  from cognite.neat.rules.models._rdfpath import RDFPath
12
- from cognite.neat.rules.models.entities import ClassEntity, EntityTypes, ParentClassEntity, ReferenceEntity
13
- from cognite.neat.rules.models.information import InformationClass, InformationProperty, InformationRules
12
+ from cognite.neat.rules.models.asset import AssetClass, AssetProperty, AssetRules
13
+ from cognite.neat.rules.models.entities import (
14
+ AssetEntity,
15
+ ClassEntity,
16
+ EntityTypes,
17
+ ParentClassEntity,
18
+ ReferenceEntity,
19
+ RelationshipEntity,
20
+ )
21
+ from cognite.neat.rules.models.information import (
22
+ InformationClass,
23
+ InformationProperty,
24
+ InformationRules,
25
+ )
14
26
  from cognite.neat.utils.utils import get_inheritance_path
15
27
 
16
- from ._base import BaseAnalysis
28
+ T_Rules = TypeVar("T_Rules", InformationRules, AssetRules)
29
+ T_Property = TypeVar("T_Property", InformationProperty, AssetProperty)
30
+ T_Class = TypeVar("T_Class", InformationClass, AssetClass)
17
31
 
18
32
 
19
- class InformationArchitectRulesAnalysis(BaseAnalysis):
20
- """Assumes analysis over only the complete schema"""
21
-
22
- def __init__(self, rules: InformationRules):
23
- self.rules = rules
33
+ class _SharedAnalysis(Generic[T_Rules, T_Property, T_Class]):
34
+ def __init__(self, rules: T_Rules):
35
+ self.rules: T_Rules = rules
24
36
 
25
37
  @property
26
38
  def directly_referred_classes(self) -> set[ClassEntity]:
@@ -65,9 +77,7 @@ class InformationArchitectRulesAnalysis(BaseAnalysis):
65
77
 
66
78
  return class_subclass_pairs
67
79
 
68
- def classes_with_properties(
69
- self, consider_inheritance: bool = False
70
- ) -> dict[ClassEntity, list[InformationProperty]]:
80
+ def classes_with_properties(self, consider_inheritance: bool = False) -> dict[ClassEntity, list[T_Property]]:
71
81
  """Returns classes that have been defined in the data model.
72
82
 
73
83
  Args:
@@ -85,10 +95,10 @@ class InformationArchitectRulesAnalysis(BaseAnalysis):
85
95
  it will not be included in the returned dictionary.
86
96
  """
87
97
 
88
- class_property_pairs: dict[ClassEntity, list[InformationProperty]] = defaultdict(list)
98
+ class_property_pairs: dict[ClassEntity, list[T_Property]] = defaultdict(list)
89
99
 
90
100
  for property_ in self.rules.properties:
91
- class_property_pairs[property_.class_].append(property_)
101
+ class_property_pairs[property_.class_].append(property_) # type: ignore
92
102
 
93
103
  if consider_inheritance:
94
104
  class_parent_pairs = self.class_parent_pairs()
@@ -106,7 +116,7 @@ class InformationArchitectRulesAnalysis(BaseAnalysis):
106
116
  def _add_inherited_properties(
107
117
  cls,
108
118
  class_: ClassEntity,
109
- class_property_pairs: dict[ClassEntity, list[InformationProperty]],
119
+ class_property_pairs: dict[ClassEntity, list[T_Property]],
110
120
  class_parent_pairs: dict[ClassEntity, list[ParentClassEntity]],
111
121
  ):
112
122
  inheritance_path = get_inheritance_path(class_, class_parent_pairs)
@@ -130,7 +140,7 @@ class InformationArchitectRulesAnalysis(BaseAnalysis):
130
140
 
131
141
  def class_property_pairs(
132
142
  self, only_rdfpath: bool = False, consider_inheritance: bool = False
133
- ) -> dict[ClassEntity, dict[str, InformationProperty]]:
143
+ ) -> dict[ClassEntity, dict[str, T_Property]]:
134
144
  """Returns a dictionary of classes with a dictionary of properties associated with them.
135
145
 
136
146
  Args:
@@ -193,7 +203,14 @@ class InformationArchitectRulesAnalysis(BaseAnalysis):
193
203
  Dataframe with the class linkage of the data model
194
204
  """
195
205
 
196
- class_linkage = pd.DataFrame(columns=["source_class", "target_class", "connecting_property", "max_occurrence"])
206
+ class_linkage = pd.DataFrame(
207
+ columns=[
208
+ "source_class",
209
+ "target_class",
210
+ "connecting_property",
211
+ "max_occurrence",
212
+ ]
213
+ )
197
214
 
198
215
  class_property_pairs = self.classes_with_properties(consider_inheritance)
199
216
  properties = list(itertools.chain.from_iterable(class_property_pairs.values()))
@@ -286,21 +303,21 @@ class InformationArchitectRulesAnalysis(BaseAnalysis):
286
303
 
287
304
  def as_property_dict(
288
305
  self,
289
- ) -> dict[str, list[InformationProperty]]:
306
+ ) -> dict[str, list[T_Property]]:
290
307
  """This is used to capture all definitions of a property in the data model."""
291
- property_dict: dict[str, list[InformationProperty]] = defaultdict(list)
308
+ property_dict: dict[str, list[T_Property]] = defaultdict(list)
292
309
  for definition in self.rules.properties:
293
- property_dict[definition.property_].append(definition)
310
+ property_dict[definition.property_].append(definition) # type: ignore
294
311
  return property_dict
295
312
 
296
- def as_class_dict(self) -> dict[str, InformationClass]:
313
+ def as_class_dict(self) -> dict[str, T_Class]:
297
314
  """This is to simplify access to classes through dict."""
298
- class_dict: dict[str, InformationClass] = {}
315
+ class_dict: dict[str, T_Class] = {}
299
316
  for definition in self.rules.classes:
300
- class_dict[str(definition.class_.suffix)] = definition
317
+ class_dict[str(definition.class_.suffix)] = definition # type: ignore
301
318
  return class_dict
302
319
 
303
- def subset_rules(self, desired_classes: set[ClassEntity]) -> InformationRules:
320
+ def subset_rules(self, desired_classes: set[ClassEntity]) -> T_Rules:
304
321
  """
305
322
  Subset rules to only include desired classes and their properties.
306
323
 
@@ -352,7 +369,8 @@ class InformationArchitectRulesAnalysis(BaseAnalysis):
352
369
  if impossible_classes:
353
370
  logging.warning(f"Could not find the following classes defined in the data model: {impossible_classes}")
354
371
  warnings.warn(
355
- f"Could not find the following classes defined in the data model: {impossible_classes}", stacklevel=2
372
+ f"Could not find the following classes defined in the data model: {impossible_classes}",
373
+ stacklevel=2,
356
374
  )
357
375
 
358
376
  reduced_data_model: dict[str, Any] = {
@@ -373,8 +391,79 @@ class InformationArchitectRulesAnalysis(BaseAnalysis):
373
391
  reduced_data_model["properties"].extend(properties)
374
392
 
375
393
  try:
376
- return InformationRules(**reduced_data_model)
394
+ return type(self.rules)(**reduced_data_model)
377
395
  except ValidationError as e:
378
396
  warnings.warn(f"Reduced data model is not complete: {e}", stacklevel=2)
379
397
  reduced_data_model["metadata"].schema_ = SchemaCompleteness.partial
380
- return InformationRules.model_construct(**reduced_data_model)
398
+ return type(self.rules).model_construct(**reduced_data_model)
399
+
400
+
401
+ class InformationArchitectRulesAnalysis(_SharedAnalysis[InformationRules, InformationProperty, InformationClass]):
402
+ """Assumes analysis over only the complete schema"""
403
+
404
+ ...
405
+
406
+
407
+ class AssetArchitectRulesAnalysis(_SharedAnalysis[AssetRules, AssetProperty, AssetClass]):
408
+ """Assumes analysis over only the complete schema"""
409
+
410
+ def class_property_pairs(
411
+ self,
412
+ only_rdfpath: bool = False,
413
+ consider_inheritance: bool = False,
414
+ implementation_type: EntityTypes = EntityTypes.asset,
415
+ ) -> dict[ClassEntity, dict[str, AssetProperty]]:
416
+ class_property_pairs = {}
417
+
418
+ T_implementation = AssetEntity if implementation_type == EntityTypes.asset else RelationshipEntity
419
+
420
+ for class_, properties in self.classes_with_properties(consider_inheritance).items():
421
+ processed_properties = {}
422
+ for property_ in properties:
423
+ if property_.property_ in processed_properties:
424
+ # TODO: use appropriate Warning class from _exceptions.py
425
+ # if missing make one !
426
+ warnings.warn(
427
+ f"Property {property_.property_} for {class_} has been defined more than once!"
428
+ " Only the first definition will be considered, skipping the rest..",
429
+ stacklevel=2,
430
+ )
431
+ continue
432
+
433
+ if (
434
+ property_.implementation
435
+ and any(isinstance(implementation, T_implementation) for implementation in property_.implementation)
436
+ and (not only_rdfpath or (only_rdfpath and isinstance(property_.transformation, RDFPath)))
437
+ ):
438
+ implementation = [
439
+ implementation
440
+ for implementation in property_.implementation
441
+ if isinstance(implementation, T_implementation)
442
+ ]
443
+
444
+ processed_properties[property_.property_] = property_.model_copy(
445
+ deep=True, update={"implementation": implementation}
446
+ )
447
+
448
+ if processed_properties:
449
+ class_property_pairs[class_] = processed_properties
450
+
451
+ return class_property_pairs
452
+
453
+ def asset_definition(
454
+ self, only_rdfpath: bool = False, consider_inheritance: bool = False
455
+ ) -> dict[ClassEntity, dict[str, AssetProperty]]:
456
+ return self.class_property_pairs(
457
+ consider_inheritance=consider_inheritance,
458
+ only_rdfpath=only_rdfpath,
459
+ implementation_type=EntityTypes.asset,
460
+ )
461
+
462
+ def relationship_definition(
463
+ self, only_rdfpath: bool = False, consider_inheritance: bool = False
464
+ ) -> dict[ClassEntity, dict[str, AssetProperty]]:
465
+ return self.class_property_pairs(
466
+ consider_inheritance=consider_inheritance,
467
+ only_rdfpath=only_rdfpath,
468
+ implementation_type=EntityTypes.relationship,
469
+ )
@@ -143,9 +143,15 @@ class ExcelExporter(BaseExporter[Workbook]):
143
143
 
144
144
  return workbook
145
145
 
146
- def _write_sheets(self, workbook: Workbook, dumped_rules: dict[str, Any], rules: Rules, sheet_prefix: str = ""):
146
+ def _write_sheets(
147
+ self,
148
+ workbook: Workbook,
149
+ dumped_rules: dict[str, Any],
150
+ rules: Rules,
151
+ sheet_prefix: str = "",
152
+ ):
147
153
  for sheet_name, headers in rules.headers_by_sheet(by_alias=True).items():
148
- if sheet_name in ("Metadata", "prefixes", "Reference", "Last"):
154
+ if sheet_name in ("Metadata", "Prefixes", "Reference", "Last"):
149
155
  continue
150
156
  sheet = workbook.create_sheet(f"{sheet_prefix}{sheet_name}")
151
157
 
@@ -273,7 +279,9 @@ class _MetadataCreator:
273
279
 
274
280
  new_metadata = self._create_new_info(now)
275
281
  if isinstance(metadata, DMSMetadata):
276
- from cognite.neat.rules.models.information._converter import _InformationRulesConverter
282
+ from cognite.neat.rules.models.information._converter import (
283
+ _InformationRulesConverter,
284
+ )
277
285
 
278
286
  output_metadata: DMSMetadata | InformationMetadata = _InformationRulesConverter._convert_metadata_to_dms(
279
287
  new_metadata
@@ -10,7 +10,11 @@ from pydantic import ValidationError
10
10
  from rdflib import Namespace
11
11
 
12
12
  from cognite.neat.rules._shared import Rules
13
- from cognite.neat.rules.issues.base import IssueList, NeatValidationError, ValidationWarning
13
+ from cognite.neat.rules.issues.base import (
14
+ IssueList,
15
+ NeatValidationError,
16
+ ValidationWarning,
17
+ )
14
18
  from cognite.neat.rules.models import AssetRules, DMSRules, InformationRules, RoleTypes
15
19
  from cognite.neat.utils.auxiliary import class_html_doc
16
20
 
@@ -30,7 +34,9 @@ class BaseImporter(ABC):
30
34
 
31
35
  @abstractmethod
32
36
  def to_rules(
33
- self, errors: Literal["raise", "continue"] = "continue", role: RoleTypes | None = None
37
+ self,
38
+ errors: Literal["raise", "continue"] = "continue",
39
+ role: RoleTypes | None = None,
34
40
  ) -> tuple[Rules | None, IssueList] | Rules:
35
41
  """
36
42
  Creates `Rules` object from the data for target role.
@@ -91,7 +91,9 @@ class InferenceImporter(BaseImporter):
91
91
  ) -> tuple[Rules | None, IssueList]: ...
92
92
 
93
93
  def to_rules(
94
- self, errors: Literal["raise", "continue"] = "continue", role: RoleTypes | None = None
94
+ self,
95
+ errors: Literal["raise", "continue"] = "continue",
96
+ role: RoleTypes | None = None,
95
97
  ) -> tuple[Rules | None, IssueList] | Rules:
96
98
  """
97
99
  Creates `Rules` object from the data for target role.
@@ -103,9 +105,6 @@ class InferenceImporter(BaseImporter):
103
105
 
104
106
  rules_dict = self._to_rules_components()
105
107
 
106
- # adding additional prefix
107
- rules_dict["prefixes"][rules_dict["metadata"]["prefix"]] = rules_dict["metadata"]["namespace"]
108
-
109
108
  with _handle_issues(self.issue_list) as future:
110
109
  rules: InformationRules
111
110
  rules = InformationRulesInput.load(rules_dict).as_rules()
@@ -134,7 +133,10 @@ class InferenceImporter(BaseImporter):
134
133
  """
135
134
  classes: dict[str, dict] = {}
136
135
  properties: dict[str, dict] = {}
137
- prefixes: dict[str, Namespace] = PREFIXES
136
+ prefixes: dict[str, Namespace] = PREFIXES.copy()
137
+
138
+ # Adds default namespace to prefixes
139
+ prefixes[self._default_metadata().prefix] = self._default_metadata().namespace
138
140
 
139
141
  # Infers all the classes in the graph
140
142
  for class_uri, no_instances in self.graph.query(ORDERED_CLASSES_QUERY): # type: ignore[misc]
@@ -246,7 +248,7 @@ class InferenceImporter(BaseImporter):
246
248
  created=datetime.now(),
247
249
  updated=datetime.now(),
248
250
  description="Inferred model from knowledge graph",
249
- prefix="neat",
251
+ prefix="inferred",
250
252
  namespace=DEFAULT_NAMESPACE,
251
253
  )
252
254
 
@@ -262,6 +264,10 @@ class InferenceImporter(BaseImporter):
262
264
  def _read_value_type_occurrence_from_comment(cls, value_type: str, comment: str) -> int:
263
265
  return int(
264
266
  cast(
265
- re.Match, re.search(rf"with value type <{value_type}> which occurs <(\d+)> times in the graph", comment)
267
+ re.Match,
268
+ re.search(
269
+ rf"with value type <{value_type}> which occurs <(\d+)> times in the graph",
270
+ comment,
271
+ ),
266
272
  ).group(1)
267
273
  )
@@ -7,6 +7,7 @@ from typing import Any, ClassVar
7
7
  from cognite.client.data_classes import data_modeling as dm
8
8
  from cognite.client.data_classes.data_modeling import ContainerId, ViewId
9
9
  from pydantic_core import ErrorDetails
10
+ from rdflib import Namespace
10
11
 
11
12
  from cognite.neat.issues import MultiValueError
12
13
  from cognite.neat.utils.spreadsheet import SpreadsheetRead
@@ -23,6 +24,7 @@ __all__ = [
23
24
  "InvalidRowError",
24
25
  "InvalidPropertyError",
25
26
  "InvalidClassError",
27
+ "PrefixNamespaceCollisionError",
26
28
  "InvalidContainerError",
27
29
  "InvalidViewError",
28
30
  "InvalidRowUnknownSheetError",
@@ -44,13 +46,18 @@ class InvalidSheetError(NeatValidationError, ABC):
44
46
  @classmethod
45
47
  @abstractmethod
46
48
  def from_pydantic_error(
47
- cls, error: ErrorDetails, read_info_by_sheet: dict[str, SpreadsheetRead] | None = None
49
+ cls,
50
+ error: ErrorDetails,
51
+ read_info_by_sheet: dict[str, SpreadsheetRead] | None = None,
48
52
  ) -> Self:
49
53
  raise NotImplementedError
50
54
 
51
55
  @classmethod
52
56
  def from_pydantic_errors(
53
- cls, errors: list[ErrorDetails], read_info_by_sheet: dict[str, SpreadsheetRead] | None = None, **kwargs: Any
57
+ cls,
58
+ errors: list[ErrorDetails],
59
+ read_info_by_sheet: dict[str, SpreadsheetRead] | None = None,
60
+ **kwargs: Any,
54
61
  ) -> "list[NeatValidationError]":
55
62
  output: list[NeatValidationError] = []
56
63
  for error in errors:
@@ -100,16 +107,26 @@ class InvalidRowError(InvalidSheetError, ABC):
100
107
  def __lt__(self, other: object) -> bool:
101
108
  if not isinstance(other, InvalidRowError):
102
109
  return NotImplemented
103
- return (self.sheet_name, self.row, self.column) < (other.sheet_name, other.row, other.column)
110
+ return (self.sheet_name, self.row, self.column) < (
111
+ other.sheet_name,
112
+ other.row,
113
+ other.column,
114
+ )
104
115
 
105
116
  def __eq__(self, other: object) -> bool:
106
117
  if not isinstance(other, InvalidRowError):
107
118
  return NotImplemented
108
- return (self.sheet_name, self.row, self.column) == (other.sheet_name, other.row, other.column)
119
+ return (self.sheet_name, self.row, self.column) == (
120
+ other.sheet_name,
121
+ other.row,
122
+ other.column,
123
+ )
109
124
 
110
125
  @classmethod
111
126
  def from_pydantic_error(
112
- cls, error: ErrorDetails, read_info_by_sheet: dict[str, SpreadsheetRead] | None = None
127
+ cls,
128
+ error: ErrorDetails,
129
+ read_info_by_sheet: dict[str, SpreadsheetRead] | None = None,
113
130
  ) -> Self:
114
131
  sheet_name, _, row, column, *__ = error["loc"]
115
132
  reader = (read_info_by_sheet or {}).get(str(sheet_name), SpreadsheetRead())
@@ -173,7 +190,9 @@ class InvalidRowUnknownSheetError(InvalidRowError):
173
190
 
174
191
  @classmethod
175
192
  def from_pydantic_error(
176
- cls, error: ErrorDetails, read_info_by_sheet: dict[str, SpreadsheetRead] | None = None
193
+ cls,
194
+ error: ErrorDetails,
195
+ read_info_by_sheet: dict[str, SpreadsheetRead] | None = None,
177
196
  ) -> Self:
178
197
  sheet_name, _, row, column, *__ = error["loc"]
179
198
  reader = (read_info_by_sheet or {}).get(str(sheet_name), SpreadsheetRead())
@@ -294,6 +313,27 @@ class ParentClassesNotDefinedError(NeatValidationError):
294
313
  return f"Parent classes {', '.join(self.classes[0])} are not defined. This may be a mistake."
295
314
 
296
315
 
316
+ @dataclass(frozen=True)
317
+ class PrefixNamespaceCollisionError(NeatValidationError):
318
+ description = "Same namespaces are assigned to different prefixes."
319
+ fix = "Make sure that each unique namespace is assigned to a unique prefix"
320
+
321
+ namespaces: list[Namespace]
322
+ prefixes: list[str]
323
+
324
+ def dump(self) -> dict[str, list[str]]:
325
+ output = super().dump()
326
+ output["prefixes"] = self.prefixes
327
+ output["namespaces"] = self.namespaces
328
+ return output
329
+
330
+ def message(self) -> str:
331
+ return (
332
+ f"Namespaces {', '.join(self.namespaces)} are assigned multiple times."
333
+ f" Impacted prefixes: {', '.join(self.prefixes)}."
334
+ )
335
+
336
+
297
337
  @dataclass(frozen=True)
298
338
  class ValueTypeNotDefinedError(NeatValidationError):
299
339
  description = "Value types referred by properties are not defined in Rules."
@@ -259,7 +259,7 @@ class InformationRules(BaseRules):
259
259
  metadata: InformationMetadata = Field(alias="Metadata")
260
260
  properties: SheetList[InformationProperty] = Field(alias="Properties")
261
261
  classes: SheetList[InformationClass] = Field(alias="Classes")
262
- prefixes: dict[str, Namespace] = Field(default_factory=lambda: PREFIXES.copy())
262
+ prefixes: dict[str, Namespace] = Field(default_factory=lambda: PREFIXES.copy(), alias="Prefixes")
263
263
  last: "InformationRules | None" = Field(None, alias="Last")
264
264
  reference: "InformationRules | None" = Field(None, alias="Reference")
265
265
 
@@ -267,6 +267,8 @@ class InformationRules(BaseRules):
267
267
  def parse_str(cls, values: Any) -> Any:
268
268
  if isinstance(values, dict):
269
269
  return {key: Namespace(value) if isinstance(value, str) else value for key, value in values.items()}
270
+ elif values is None:
271
+ values = PREFIXES.copy()
270
272
  return values
271
273
 
272
274
  @model_validator(mode="after")