cognite-neat 0.70.1__py3-none-any.whl → 0.127.19__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 (530) hide show
  1. cognite/neat/__init__.py +4 -1
  2. cognite/neat/_client/__init__.py +4 -0
  3. cognite/neat/_client/api.py +8 -0
  4. cognite/neat/_client/client.py +21 -0
  5. cognite/neat/_client/config.py +40 -0
  6. cognite/neat/_client/containers_api.py +125 -0
  7. cognite/neat/_client/data_classes.py +44 -0
  8. cognite/neat/_client/data_model_api.py +115 -0
  9. cognite/neat/_client/spaces_api.py +115 -0
  10. cognite/neat/_client/statistics_api.py +24 -0
  11. cognite/neat/_client/views_api.py +129 -0
  12. cognite/neat/_data_model/_analysis.py +186 -0
  13. cognite/neat/_data_model/_constants.py +67 -0
  14. cognite/neat/_data_model/_identifiers.py +61 -0
  15. cognite/neat/_data_model/_shared.py +41 -0
  16. cognite/neat/_data_model/deployer/_differ.py +140 -0
  17. cognite/neat/_data_model/deployer/_differ_container.py +360 -0
  18. cognite/neat/_data_model/deployer/_differ_data_model.py +54 -0
  19. cognite/neat/_data_model/deployer/_differ_space.py +9 -0
  20. cognite/neat/_data_model/deployer/_differ_view.py +299 -0
  21. cognite/neat/_data_model/deployer/data_classes.py +529 -0
  22. cognite/neat/_data_model/deployer/deployer.py +401 -0
  23. cognite/neat/_data_model/exporters/__init__.py +15 -0
  24. cognite/neat/_data_model/exporters/_api_exporter.py +37 -0
  25. cognite/neat/_data_model/exporters/_base.py +24 -0
  26. cognite/neat/_data_model/exporters/_table_exporter/exporter.py +128 -0
  27. cognite/neat/_data_model/exporters/_table_exporter/workbook.py +409 -0
  28. cognite/neat/_data_model/exporters/_table_exporter/writer.py +399 -0
  29. cognite/neat/_data_model/importers/__init__.py +5 -0
  30. cognite/neat/_data_model/importers/_api_importer.py +166 -0
  31. cognite/neat/_data_model/importers/_base.py +16 -0
  32. cognite/neat/_data_model/importers/_table_importer/data_classes.py +291 -0
  33. cognite/neat/_data_model/importers/_table_importer/importer.py +192 -0
  34. cognite/neat/_data_model/importers/_table_importer/reader.py +875 -0
  35. cognite/neat/_data_model/importers/_table_importer/source.py +94 -0
  36. cognite/neat/_data_model/models/conceptual/_base.py +18 -0
  37. cognite/neat/_data_model/models/conceptual/_concept.py +67 -0
  38. cognite/neat/_data_model/models/conceptual/_data_model.py +51 -0
  39. cognite/neat/_data_model/models/conceptual/_properties.py +104 -0
  40. cognite/neat/_data_model/models/conceptual/_property.py +105 -0
  41. cognite/neat/_data_model/models/dms/__init__.py +206 -0
  42. cognite/neat/_data_model/models/dms/_base.py +31 -0
  43. cognite/neat/_data_model/models/dms/_constants.py +47 -0
  44. cognite/neat/_data_model/models/dms/_constraints.py +42 -0
  45. cognite/neat/_data_model/models/dms/_container.py +159 -0
  46. cognite/neat/_data_model/models/dms/_data_model.py +94 -0
  47. cognite/neat/_data_model/models/dms/_data_types.py +195 -0
  48. cognite/neat/_data_model/models/dms/_http.py +28 -0
  49. cognite/neat/_data_model/models/dms/_indexes.py +30 -0
  50. cognite/neat/_data_model/models/dms/_limits.py +96 -0
  51. cognite/neat/_data_model/models/dms/_references.py +135 -0
  52. cognite/neat/_data_model/models/dms/_schema.py +18 -0
  53. cognite/neat/_data_model/models/dms/_space.py +48 -0
  54. cognite/neat/_data_model/models/dms/_types.py +17 -0
  55. cognite/neat/_data_model/models/dms/_view_filter.py +282 -0
  56. cognite/neat/_data_model/models/dms/_view_property.py +235 -0
  57. cognite/neat/_data_model/models/dms/_views.py +210 -0
  58. cognite/neat/_data_model/models/entities/__init__.py +50 -0
  59. cognite/neat/_data_model/models/entities/_base.py +101 -0
  60. cognite/neat/_data_model/models/entities/_constants.py +22 -0
  61. cognite/neat/_data_model/models/entities/_data_types.py +144 -0
  62. cognite/neat/_data_model/models/entities/_identifiers.py +61 -0
  63. cognite/neat/_data_model/models/entities/_parser.py +226 -0
  64. cognite/neat/_data_model/validation/dms/__init__.py +57 -0
  65. cognite/neat/_data_model/validation/dms/_ai_readiness.py +167 -0
  66. cognite/neat/_data_model/validation/dms/_base.py +304 -0
  67. cognite/neat/_data_model/validation/dms/_connections.py +627 -0
  68. cognite/neat/_data_model/validation/dms/_consistency.py +56 -0
  69. cognite/neat/_data_model/validation/dms/_containers.py +135 -0
  70. cognite/neat/_data_model/validation/dms/_limits.py +414 -0
  71. cognite/neat/_data_model/validation/dms/_orchestrator.py +202 -0
  72. cognite/neat/_data_model/validation/dms/_views.py +101 -0
  73. cognite/neat/_exceptions.py +56 -0
  74. cognite/neat/_issues.py +68 -0
  75. cognite/neat/_session/__init__.py +3 -0
  76. cognite/neat/_session/_html/_render.py +30 -0
  77. cognite/neat/_session/_html/static/__init__.py +8 -0
  78. cognite/neat/_session/_html/static/deployment.css +303 -0
  79. cognite/neat/_session/_html/static/deployment.js +149 -0
  80. cognite/neat/_session/_html/static/issues.css +211 -0
  81. cognite/neat/_session/_html/static/issues.js +167 -0
  82. cognite/neat/_session/_html/static/shared.css +186 -0
  83. cognite/neat/_session/_html/templates/__init__.py +4 -0
  84. cognite/neat/_session/_html/templates/deployment.html +74 -0
  85. cognite/neat/_session/_html/templates/issues.html +44 -0
  86. cognite/neat/_session/_issues.py +76 -0
  87. cognite/neat/_session/_opt.py +35 -0
  88. cognite/neat/_session/_physical.py +240 -0
  89. cognite/neat/_session/_result.py +231 -0
  90. cognite/neat/_session/_session.py +69 -0
  91. cognite/neat/_session/_usage_analytics/_collector.py +131 -0
  92. cognite/neat/_session/_usage_analytics/_constants.py +23 -0
  93. cognite/neat/_session/_usage_analytics/_storage.py +240 -0
  94. cognite/neat/_session/_wrappers.py +82 -0
  95. cognite/neat/_state_machine/__init__.py +10 -0
  96. cognite/neat/_state_machine/_base.py +37 -0
  97. cognite/neat/_state_machine/_states.py +52 -0
  98. cognite/neat/_store/__init__.py +3 -0
  99. cognite/neat/_store/_provenance.py +71 -0
  100. cognite/neat/_store/_store.py +144 -0
  101. cognite/neat/_utils/_reader.py +194 -0
  102. cognite/neat/_utils/auxiliary.py +39 -0
  103. cognite/neat/_utils/collection.py +11 -0
  104. cognite/neat/_utils/http_client/__init__.py +39 -0
  105. cognite/neat/_utils/http_client/_client.py +245 -0
  106. cognite/neat/_utils/http_client/_config.py +19 -0
  107. cognite/neat/_utils/http_client/_data_classes.py +294 -0
  108. cognite/neat/_utils/http_client/_tracker.py +31 -0
  109. cognite/neat/_utils/text.py +71 -0
  110. cognite/neat/_utils/useful_types.py +37 -0
  111. cognite/neat/_utils/validation.py +149 -0
  112. cognite/neat/_version.py +2 -1
  113. cognite/neat/v0/core/__init__.py +0 -0
  114. cognite/neat/v0/core/_client/__init__.py +4 -0
  115. cognite/neat/v0/core/_client/_api/__init__.py +0 -0
  116. cognite/neat/v0/core/_client/_api/data_modeling_loaders.py +1032 -0
  117. cognite/neat/v0/core/_client/_api/neat_instances.py +101 -0
  118. cognite/neat/v0/core/_client/_api/schema.py +158 -0
  119. cognite/neat/v0/core/_client/_api/statistics.py +91 -0
  120. cognite/neat/v0/core/_client/_api_client.py +21 -0
  121. cognite/neat/v0/core/_client/data_classes/__init__.py +0 -0
  122. cognite/neat/v0/core/_client/data_classes/data_modeling.py +198 -0
  123. cognite/neat/v0/core/_client/data_classes/neat_sequence.py +261 -0
  124. cognite/neat/v0/core/_client/data_classes/schema.py +540 -0
  125. cognite/neat/v0/core/_client/data_classes/statistics.py +125 -0
  126. cognite/neat/v0/core/_client/testing.py +39 -0
  127. cognite/neat/v0/core/_config.py +11 -0
  128. cognite/neat/v0/core/_constants.py +278 -0
  129. cognite/neat/v0/core/_data_model/__init__.py +0 -0
  130. cognite/neat/v0/core/_data_model/_constants.py +210 -0
  131. cognite/neat/v0/core/_data_model/_shared.py +59 -0
  132. cognite/neat/v0/core/_data_model/analysis/__init__.py +3 -0
  133. cognite/neat/v0/core/_data_model/analysis/_base.py +578 -0
  134. cognite/neat/v0/core/_data_model/catalog/__init__.py +8 -0
  135. cognite/neat/v0/core/_data_model/catalog/classic_model.xlsx +0 -0
  136. cognite/neat/v0/core/_data_model/catalog/conceptual-imf-data-model.xlsx +0 -0
  137. cognite/neat/v0/core/_data_model/catalog/hello_world_pump.xlsx +0 -0
  138. cognite/neat/v0/core/_data_model/exporters/__init__.py +38 -0
  139. cognite/neat/v0/core/_data_model/exporters/_base.py +67 -0
  140. cognite/neat/v0/core/_data_model/exporters/_data_model2dms.py +428 -0
  141. cognite/neat/v0/core/_data_model/exporters/_data_model2excel.py +612 -0
  142. cognite/neat/v0/core/_data_model/exporters/_data_model2instance_template.py +158 -0
  143. cognite/neat/v0/core/_data_model/exporters/_data_model2semantic_model.py +646 -0
  144. cognite/neat/v0/core/_data_model/exporters/_data_model2yaml.py +84 -0
  145. cognite/neat/v0/core/_data_model/importers/__init__.py +49 -0
  146. cognite/neat/v0/core/_data_model/importers/_base.py +64 -0
  147. cognite/neat/v0/core/_data_model/importers/_base_file_reader.py +56 -0
  148. cognite/neat/v0/core/_data_model/importers/_dict2data_model.py +131 -0
  149. cognite/neat/v0/core/_data_model/importers/_dms2data_model.py +705 -0
  150. cognite/neat/v0/core/_data_model/importers/_graph2data_model.py +299 -0
  151. cognite/neat/v0/core/_data_model/importers/_rdf/__init__.py +4 -0
  152. cognite/neat/v0/core/_data_model/importers/_rdf/_base.py +161 -0
  153. cognite/neat/v0/core/_data_model/importers/_rdf/_inference2rdata_model.py +618 -0
  154. cognite/neat/v0/core/_data_model/importers/_rdf/_owl2data_model.py +124 -0
  155. cognite/neat/v0/core/_data_model/importers/_rdf/_shared.py +255 -0
  156. cognite/neat/v0/core/_data_model/importers/_spreadsheet2data_model.py +424 -0
  157. cognite/neat/v0/core/_data_model/models/__init__.py +38 -0
  158. cognite/neat/v0/core/_data_model/models/_base_unverified.py +181 -0
  159. cognite/neat/v0/core/_data_model/models/_base_verified.py +449 -0
  160. cognite/neat/v0/core/_data_model/models/_import_contexts.py +82 -0
  161. cognite/neat/v0/core/_data_model/models/_types.py +171 -0
  162. cognite/neat/v0/core/_data_model/models/conceptual/__init__.py +25 -0
  163. cognite/neat/v0/core/_data_model/models/conceptual/_unverified.py +193 -0
  164. cognite/neat/v0/core/_data_model/models/conceptual/_validation.py +308 -0
  165. cognite/neat/v0/core/_data_model/models/conceptual/_verified.py +327 -0
  166. cognite/neat/v0/core/_data_model/models/data_types.py +422 -0
  167. cognite/neat/v0/core/_data_model/models/entities/__init__.py +70 -0
  168. cognite/neat/v0/core/_data_model/models/entities/_constants.py +18 -0
  169. cognite/neat/v0/core/_data_model/models/entities/_loaders.py +155 -0
  170. cognite/neat/v0/core/_data_model/models/entities/_multi_value.py +83 -0
  171. cognite/neat/v0/core/_data_model/models/entities/_restrictions.py +230 -0
  172. cognite/neat/v0/core/_data_model/models/entities/_single_value.py +676 -0
  173. cognite/neat/v0/core/_data_model/models/entities/_types.py +103 -0
  174. cognite/neat/v0/core/_data_model/models/entities/_wrapped.py +217 -0
  175. cognite/neat/v0/core/_data_model/models/mapping/__init__.py +3 -0
  176. cognite/neat/v0/core/_data_model/models/mapping/_classic2core.py +39 -0
  177. cognite/neat/v0/core/_data_model/models/mapping/_classic2core.yaml +608 -0
  178. cognite/neat/v0/core/_data_model/models/physical/__init__.py +40 -0
  179. cognite/neat/v0/core/_data_model/models/physical/_exporter.py +658 -0
  180. cognite/neat/v0/core/_data_model/models/physical/_unverified.py +557 -0
  181. cognite/neat/v0/core/_data_model/models/physical/_validation.py +887 -0
  182. cognite/neat/v0/core/_data_model/models/physical/_verified.py +667 -0
  183. cognite/neat/v0/core/_data_model/transformers/__init__.py +70 -0
  184. cognite/neat/v0/core/_data_model/transformers/_base.py +79 -0
  185. cognite/neat/v0/core/_data_model/transformers/_converters.py +2485 -0
  186. cognite/neat/v0/core/_data_model/transformers/_mapping.py +390 -0
  187. cognite/neat/v0/core/_data_model/transformers/_union_conceptual.py +208 -0
  188. cognite/neat/v0/core/_data_model/transformers/_verification.py +120 -0
  189. cognite/neat/v0/core/_instances/__init__.py +0 -0
  190. cognite/neat/v0/core/_instances/_shared.py +37 -0
  191. cognite/neat/v0/core/_instances/_tracking/__init__.py +4 -0
  192. cognite/neat/v0/core/_instances/_tracking/base.py +30 -0
  193. cognite/neat/v0/core/_instances/_tracking/log.py +27 -0
  194. cognite/neat/v0/core/_instances/extractors/__init__.py +76 -0
  195. cognite/neat/v0/core/_instances/extractors/_base.py +58 -0
  196. cognite/neat/v0/core/_instances/extractors/_classic_cdf/__init__.py +0 -0
  197. cognite/neat/v0/core/_instances/extractors/_classic_cdf/_assets.py +37 -0
  198. cognite/neat/v0/core/_instances/extractors/_classic_cdf/_base.py +443 -0
  199. cognite/neat/v0/core/_instances/extractors/_classic_cdf/_classic.py +479 -0
  200. cognite/neat/v0/core/_instances/extractors/_classic_cdf/_data_sets.py +35 -0
  201. cognite/neat/v0/core/_instances/extractors/_classic_cdf/_events.py +33 -0
  202. cognite/neat/v0/core/_instances/extractors/_classic_cdf/_files.py +45 -0
  203. cognite/neat/v0/core/_instances/extractors/_classic_cdf/_labels.py +54 -0
  204. cognite/neat/v0/core/_instances/extractors/_classic_cdf/_relationships.py +122 -0
  205. cognite/neat/v0/core/_instances/extractors/_classic_cdf/_sequences.py +280 -0
  206. cognite/neat/v0/core/_instances/extractors/_classic_cdf/_timeseries.py +48 -0
  207. cognite/neat/v0/core/_instances/extractors/_dict.py +105 -0
  208. cognite/neat/v0/core/_instances/extractors/_dms.py +315 -0
  209. cognite/neat/v0/core/_instances/extractors/_dms_graph.py +238 -0
  210. cognite/neat/v0/core/_instances/extractors/_mock_graph_generator.py +404 -0
  211. cognite/neat/v0/core/_instances/extractors/_raw.py +67 -0
  212. cognite/neat/v0/core/_instances/extractors/_rdf_file.py +80 -0
  213. cognite/neat/v0/core/_instances/loaders/__init__.py +24 -0
  214. cognite/neat/v0/core/_instances/loaders/_base.py +116 -0
  215. cognite/neat/v0/core/_instances/loaders/_rdf2dms.py +649 -0
  216. cognite/neat/v0/core/_instances/loaders/_rdf_to_instance_space.py +249 -0
  217. cognite/neat/v0/core/_instances/queries/__init__.py +3 -0
  218. cognite/neat/v0/core/_instances/queries/_base.py +16 -0
  219. cognite/neat/v0/core/_instances/queries/_queries.py +16 -0
  220. cognite/neat/v0/core/_instances/queries/_select.py +478 -0
  221. cognite/neat/v0/core/_instances/queries/_update.py +37 -0
  222. cognite/neat/v0/core/_instances/transformers/__init__.py +65 -0
  223. cognite/neat/v0/core/_instances/transformers/_base.py +133 -0
  224. cognite/neat/v0/core/_instances/transformers/_classic_cdf.py +589 -0
  225. cognite/neat/v0/core/_instances/transformers/_prune_graph.py +315 -0
  226. cognite/neat/v0/core/_instances/transformers/_rdfpath.py +84 -0
  227. cognite/neat/v0/core/_instances/transformers/_value_type.py +366 -0
  228. cognite/neat/v0/core/_issues/__init__.py +21 -0
  229. cognite/neat/v0/core/_issues/_base.py +348 -0
  230. cognite/neat/v0/core/_issues/_contextmanagers.py +50 -0
  231. cognite/neat/v0/core/_issues/_factory.py +69 -0
  232. cognite/neat/v0/core/_issues/errors/__init__.py +90 -0
  233. cognite/neat/v0/core/_issues/errors/_external.py +91 -0
  234. cognite/neat/v0/core/_issues/errors/_general.py +51 -0
  235. cognite/neat/v0/core/_issues/errors/_properties.py +80 -0
  236. cognite/neat/v0/core/_issues/errors/_resources.py +116 -0
  237. cognite/neat/v0/core/_issues/errors/_wrapper.py +93 -0
  238. cognite/neat/{rules/issues → v0/core/_issues}/formatters.py +12 -10
  239. cognite/neat/v0/core/_issues/warnings/__init__.py +99 -0
  240. cognite/neat/v0/core/_issues/warnings/_external.py +56 -0
  241. cognite/neat/v0/core/_issues/warnings/_general.py +46 -0
  242. cognite/neat/v0/core/_issues/warnings/_models.py +165 -0
  243. cognite/neat/v0/core/_issues/warnings/_properties.py +108 -0
  244. cognite/neat/v0/core/_issues/warnings/_resources.py +110 -0
  245. cognite/neat/v0/core/_issues/warnings/user_modeling.py +125 -0
  246. cognite/neat/v0/core/_shared.py +77 -0
  247. cognite/neat/v0/core/_store/__init__.py +4 -0
  248. cognite/neat/v0/core/_store/_data_model.py +487 -0
  249. cognite/neat/v0/core/_store/_instance.py +485 -0
  250. cognite/neat/v0/core/_store/_provenance.py +217 -0
  251. cognite/neat/v0/core/_store/exceptions.py +59 -0
  252. cognite/neat/v0/core/_utils/__init__.py +0 -0
  253. cognite/neat/v0/core/_utils/auth.py +364 -0
  254. cognite/neat/v0/core/_utils/auxiliary.py +169 -0
  255. cognite/neat/v0/core/_utils/collection_.py +66 -0
  256. cognite/neat/v0/core/_utils/graph_transformations_report.py +36 -0
  257. cognite/neat/v0/core/_utils/io_.py +11 -0
  258. cognite/neat/v0/core/_utils/rdf_.py +336 -0
  259. cognite/neat/v0/core/_utils/reader/__init__.py +3 -0
  260. cognite/neat/v0/core/_utils/reader/_base.py +194 -0
  261. cognite/neat/v0/core/_utils/spreadsheet.py +182 -0
  262. cognite/neat/v0/core/_utils/tarjan.py +44 -0
  263. cognite/neat/v0/core/_utils/text.py +277 -0
  264. cognite/neat/v0/core/_utils/time_.py +17 -0
  265. cognite/neat/v0/core/_utils/upload.py +134 -0
  266. cognite/neat/v0/core/_utils/xml_.py +52 -0
  267. cognite/neat/v0/plugins/__init__.py +4 -0
  268. cognite/neat/v0/plugins/_base.py +9 -0
  269. cognite/neat/v0/plugins/_data_model.py +48 -0
  270. cognite/neat/v0/plugins/_issues.py +35 -0
  271. cognite/neat/v0/plugins/_manager.py +94 -0
  272. cognite/neat/v0/session/__init__.py +3 -0
  273. cognite/neat/v0/session/_base.py +332 -0
  274. cognite/neat/v0/session/_collector.py +131 -0
  275. cognite/neat/v0/session/_diff.py +51 -0
  276. cognite/neat/v0/session/_drop.py +103 -0
  277. cognite/neat/v0/session/_experimental.py +26 -0
  278. cognite/neat/v0/session/_explore.py +39 -0
  279. cognite/neat/v0/session/_fix.py +28 -0
  280. cognite/neat/v0/session/_inspect.py +285 -0
  281. cognite/neat/v0/session/_mapping.py +71 -0
  282. cognite/neat/v0/session/_plugin.py +66 -0
  283. cognite/neat/v0/session/_prepare.py +286 -0
  284. cognite/neat/v0/session/_read.py +923 -0
  285. cognite/neat/v0/session/_set.py +101 -0
  286. cognite/neat/v0/session/_show.py +298 -0
  287. cognite/neat/v0/session/_state/README.md +23 -0
  288. cognite/neat/v0/session/_state.py +161 -0
  289. cognite/neat/v0/session/_subset.py +88 -0
  290. cognite/neat/v0/session/_template.py +208 -0
  291. cognite/neat/v0/session/_to.py +454 -0
  292. cognite/neat/v0/session/_wizard.py +44 -0
  293. cognite/neat/v0/session/engine/__init__.py +4 -0
  294. cognite/neat/v0/session/engine/_import.py +7 -0
  295. cognite/neat/v0/session/engine/_interface.py +25 -0
  296. cognite/neat/v0/session/engine/_load.py +131 -0
  297. cognite/neat/v0/session/exceptions.py +103 -0
  298. cognite/neat/v1.py +3 -0
  299. cognite_neat-0.127.19.dist-info/METADATA +145 -0
  300. cognite_neat-0.127.19.dist-info/RECORD +318 -0
  301. {cognite_neat-0.70.1.dist-info → cognite_neat-0.127.19.dist-info}/WHEEL +1 -1
  302. cognite/neat/app/api/asgi/metrics.py +0 -4
  303. cognite/neat/app/api/configuration.py +0 -110
  304. cognite/neat/app/api/context_manager/__init__.py +0 -3
  305. cognite/neat/app/api/context_manager/manager.py +0 -16
  306. cognite/neat/app/api/data_classes/configuration.py +0 -121
  307. cognite/neat/app/api/data_classes/rest.py +0 -78
  308. cognite/neat/app/api/explorer.py +0 -64
  309. cognite/neat/app/api/routers/configuration.py +0 -24
  310. cognite/neat/app/api/routers/core.py +0 -51
  311. cognite/neat/app/api/routers/crud.py +0 -112
  312. cognite/neat/app/api/routers/data_exploration.py +0 -334
  313. cognite/neat/app/api/routers/metrics.py +0 -10
  314. cognite/neat/app/api/routers/rules.py +0 -169
  315. cognite/neat/app/api/routers/workflows.py +0 -274
  316. cognite/neat/app/api/utils/data_mapping.py +0 -17
  317. cognite/neat/app/api/utils/logging.py +0 -26
  318. cognite/neat/app/api/utils/query_templates.py +0 -92
  319. cognite/neat/app/main.py +0 -17
  320. cognite/neat/app/monitoring/metrics.py +0 -69
  321. cognite/neat/app/ui/index.html +0 -1
  322. cognite/neat/app/ui/neat-app/.gitignore +0 -23
  323. cognite/neat/app/ui/neat-app/README.md +0 -70
  324. cognite/neat/app/ui/neat-app/build/asset-manifest.json +0 -14
  325. cognite/neat/app/ui/neat-app/build/favicon.ico +0 -0
  326. cognite/neat/app/ui/neat-app/build/index.html +0 -1
  327. cognite/neat/app/ui/neat-app/build/logo192.png +0 -0
  328. cognite/neat/app/ui/neat-app/build/manifest.json +0 -25
  329. cognite/neat/app/ui/neat-app/build/robots.txt +0 -3
  330. cognite/neat/app/ui/neat-app/build/static/css/main.38a62222.css +0 -2
  331. cognite/neat/app/ui/neat-app/build/static/css/main.38a62222.css.map +0 -1
  332. cognite/neat/app/ui/neat-app/build/static/js/main.ed960141.js +0 -3
  333. cognite/neat/app/ui/neat-app/build/static/js/main.ed960141.js.LICENSE.txt +0 -97
  334. cognite/neat/app/ui/neat-app/build/static/js/main.ed960141.js.map +0 -1
  335. cognite/neat/app/ui/neat-app/build/static/media/logo.8093b84df9ed36a174c629d6fe0b730d.svg +0 -1
  336. cognite/neat/config.py +0 -46
  337. cognite/neat/constants.py +0 -36
  338. cognite/neat/exceptions.py +0 -139
  339. cognite/neat/graph/__init__.py +0 -3
  340. cognite/neat/graph/exceptions.py +0 -91
  341. cognite/neat/graph/extractor/__init__.py +0 -6
  342. cognite/neat/graph/extractor/_base.py +0 -14
  343. cognite/neat/graph/extractor/_dexpi.py +0 -306
  344. cognite/neat/graph/extractor/_graph_capturing_sheet.py +0 -401
  345. cognite/neat/graph/extractor/_mock_graph_generator.py +0 -359
  346. cognite/neat/graph/extractors/_base.py +0 -14
  347. cognite/neat/graph/extractors/_mock_graph_generator.py +0 -359
  348. cognite/neat/graph/loader/__init__.py +0 -23
  349. cognite/neat/graph/loader/_asset_loader.py +0 -516
  350. cognite/neat/graph/loader/_base.py +0 -69
  351. cognite/neat/graph/loader/_exceptions.py +0 -87
  352. cognite/neat/graph/loader/core/labels.py +0 -58
  353. cognite/neat/graph/loader/core/models.py +0 -136
  354. cognite/neat/graph/loader/core/rdf_to_assets.py +0 -1047
  355. cognite/neat/graph/loader/core/rdf_to_relationships.py +0 -558
  356. cognite/neat/graph/loader/rdf_to_dms.py +0 -309
  357. cognite/neat/graph/loader/validator.py +0 -87
  358. cognite/neat/graph/models.py +0 -6
  359. cognite/neat/graph/stores/__init__.py +0 -13
  360. cognite/neat/graph/stores/_base.py +0 -384
  361. cognite/neat/graph/stores/_graphdb_store.py +0 -51
  362. cognite/neat/graph/stores/_memory_store.py +0 -43
  363. cognite/neat/graph/stores/_oxigraph_store.py +0 -145
  364. cognite/neat/graph/stores/_oxrdflib.py +0 -247
  365. cognite/neat/graph/stores/_rdf_to_graph.py +0 -40
  366. cognite/neat/graph/transformation/entity_matcher.py +0 -101
  367. cognite/neat/graph/transformation/query_generator/__init__.py +0 -3
  368. cognite/neat/graph/transformation/query_generator/sparql.py +0 -540
  369. cognite/neat/graph/transformation/transformer.py +0 -316
  370. cognite/neat/rules/_analysis/_base.py +0 -25
  371. cognite/neat/rules/_analysis/_information_rules.py +0 -414
  372. cognite/neat/rules/_shared.py +0 -5
  373. cognite/neat/rules/analysis.py +0 -231
  374. cognite/neat/rules/examples/Rules-Nordic44-to-TNT.xlsx +0 -0
  375. cognite/neat/rules/examples/Rules-Nordic44-to-graphql.xlsx +0 -0
  376. cognite/neat/rules/examples/__init__.py +0 -18
  377. cognite/neat/rules/examples/power-grid-containers.yaml +0 -113
  378. cognite/neat/rules/examples/power-grid-example.xlsx +0 -0
  379. cognite/neat/rules/examples/power-grid-model.yaml +0 -213
  380. cognite/neat/rules/examples/rules-template.xlsx +0 -0
  381. cognite/neat/rules/examples/sheet2cdf-transformation-rules.xlsx +0 -0
  382. cognite/neat/rules/examples/skos-rules.xlsx +0 -0
  383. cognite/neat/rules/examples/source-to-solution-mapping-rules.xlsx +0 -0
  384. cognite/neat/rules/examples/wind-energy.owl +0 -1511
  385. cognite/neat/rules/exceptions.py +0 -2972
  386. cognite/neat/rules/exporter/__init__.py +0 -20
  387. cognite/neat/rules/exporter/_base.py +0 -45
  388. cognite/neat/rules/exporter/_core/__init__.py +0 -5
  389. cognite/neat/rules/exporter/_core/rules2labels.py +0 -24
  390. cognite/neat/rules/exporter/_rules2dms.py +0 -888
  391. cognite/neat/rules/exporter/_rules2excel.py +0 -212
  392. cognite/neat/rules/exporter/_rules2graphql.py +0 -183
  393. cognite/neat/rules/exporter/_rules2ontology.py +0 -523
  394. cognite/neat/rules/exporter/_rules2pydantic_models.py +0 -748
  395. cognite/neat/rules/exporter/_rules2rules.py +0 -104
  396. cognite/neat/rules/exporter/_rules2triples.py +0 -37
  397. cognite/neat/rules/exporter/_validation.py +0 -150
  398. cognite/neat/rules/exporters/__init__.py +0 -15
  399. cognite/neat/rules/exporters/_base.py +0 -42
  400. cognite/neat/rules/exporters/_models.py +0 -58
  401. cognite/neat/rules/exporters/_rules2dms.py +0 -259
  402. cognite/neat/rules/exporters/_rules2excel.py +0 -196
  403. cognite/neat/rules/exporters/_rules2ontology.py +0 -561
  404. cognite/neat/rules/exporters/_rules2yaml.py +0 -78
  405. cognite/neat/rules/exporters/_validation.py +0 -107
  406. cognite/neat/rules/importer/__init__.py +0 -22
  407. cognite/neat/rules/importer/_base.py +0 -70
  408. cognite/neat/rules/importer/_dict2rules.py +0 -158
  409. cognite/neat/rules/importer/_dms2rules.py +0 -196
  410. cognite/neat/rules/importer/_graph2rules.py +0 -304
  411. cognite/neat/rules/importer/_json2rules.py +0 -39
  412. cognite/neat/rules/importer/_owl2rules/__init__.py +0 -3
  413. cognite/neat/rules/importer/_owl2rules/_owl2classes.py +0 -239
  414. cognite/neat/rules/importer/_owl2rules/_owl2metadata.py +0 -255
  415. cognite/neat/rules/importer/_owl2rules/_owl2properties.py +0 -217
  416. cognite/neat/rules/importer/_owl2rules/_owl2rules.py +0 -290
  417. cognite/neat/rules/importer/_spreadsheet2rules.py +0 -45
  418. cognite/neat/rules/importer/_xsd2rules.py +0 -20
  419. cognite/neat/rules/importer/_yaml2rules.py +0 -39
  420. cognite/neat/rules/importers/__init__.py +0 -16
  421. cognite/neat/rules/importers/_base.py +0 -124
  422. cognite/neat/rules/importers/_dms2rules.py +0 -191
  423. cognite/neat/rules/importers/_dtdl2rules/__init__.py +0 -3
  424. cognite/neat/rules/importers/_dtdl2rules/_unit_lookup.py +0 -224
  425. cognite/neat/rules/importers/_dtdl2rules/dtdl_converter.py +0 -318
  426. cognite/neat/rules/importers/_dtdl2rules/dtdl_importer.py +0 -164
  427. cognite/neat/rules/importers/_dtdl2rules/spec.py +0 -359
  428. cognite/neat/rules/importers/_owl2rules/__init__.py +0 -3
  429. cognite/neat/rules/importers/_owl2rules/_owl2classes.py +0 -219
  430. cognite/neat/rules/importers/_owl2rules/_owl2metadata.py +0 -217
  431. cognite/neat/rules/importers/_owl2rules/_owl2properties.py +0 -203
  432. cognite/neat/rules/importers/_owl2rules/_owl2rules.py +0 -148
  433. cognite/neat/rules/importers/_spreadsheet2rules.py +0 -266
  434. cognite/neat/rules/importers/_yaml2rules.py +0 -110
  435. cognite/neat/rules/issues/__init__.py +0 -27
  436. cognite/neat/rules/issues/base.py +0 -190
  437. cognite/neat/rules/issues/dms.py +0 -331
  438. cognite/neat/rules/issues/fileread.py +0 -156
  439. cognite/neat/rules/issues/importing.py +0 -220
  440. cognite/neat/rules/issues/spreadsheet.py +0 -381
  441. cognite/neat/rules/issues/spreadsheet_file.py +0 -151
  442. cognite/neat/rules/models/__init__.py +0 -5
  443. cognite/neat/rules/models/_base.py +0 -151
  444. cognite/neat/rules/models/_rules/__init__.py +0 -14
  445. cognite/neat/rules/models/_rules/_types/__init__.py +0 -66
  446. cognite/neat/rules/models/_rules/_types/_base.py +0 -450
  447. cognite/neat/rules/models/_rules/_types/_field.py +0 -339
  448. cognite/neat/rules/models/_rules/_types/_value.py +0 -156
  449. cognite/neat/rules/models/_rules/base.py +0 -320
  450. cognite/neat/rules/models/_rules/dms_architect_rules.py +0 -1034
  451. cognite/neat/rules/models/_rules/dms_schema.py +0 -641
  452. cognite/neat/rules/models/_rules/domain_rules.py +0 -55
  453. cognite/neat/rules/models/_rules/information_rules.py +0 -525
  454. cognite/neat/rules/models/raw_rules.py +0 -304
  455. cognite/neat/rules/models/rdfpath.py +0 -238
  456. cognite/neat/rules/models/rules.py +0 -1269
  457. cognite/neat/rules/models/tables.py +0 -9
  458. cognite/neat/rules/models/value_types.py +0 -117
  459. cognite/neat/utils/__init__.py +0 -3
  460. cognite/neat/utils/auxiliary.py +0 -11
  461. cognite/neat/utils/cdf.py +0 -24
  462. cognite/neat/utils/cdf_loaders/__init__.py +0 -25
  463. cognite/neat/utils/cdf_loaders/_base.py +0 -62
  464. cognite/neat/utils/cdf_loaders/_data_modeling.py +0 -275
  465. cognite/neat/utils/cdf_loaders/_ingestion.py +0 -152
  466. cognite/neat/utils/cdf_loaders/data_classes.py +0 -121
  467. cognite/neat/utils/exceptions.py +0 -41
  468. cognite/neat/utils/spreadsheet.py +0 -84
  469. cognite/neat/utils/text.py +0 -104
  470. cognite/neat/utils/utils.py +0 -354
  471. cognite/neat/utils/xml.py +0 -37
  472. cognite/neat/workflows/__init__.py +0 -12
  473. cognite/neat/workflows/_exceptions.py +0 -41
  474. cognite/neat/workflows/base.py +0 -574
  475. cognite/neat/workflows/cdf_store.py +0 -393
  476. cognite/neat/workflows/examples/Export DMS/workflow.yaml +0 -89
  477. cognite/neat/workflows/examples/Export Rules to Ontology/workflow.yaml +0 -152
  478. cognite/neat/workflows/examples/Extract DEXPI Graph and Export Rules/workflow.yaml +0 -139
  479. cognite/neat/workflows/examples/Extract RDF Graph and Generate Assets/workflow.yaml +0 -270
  480. cognite/neat/workflows/examples/Import DMS/workflow.yaml +0 -65
  481. cognite/neat/workflows/examples/Ontology to Data Model/workflow.yaml +0 -116
  482. cognite/neat/workflows/examples/Validate Rules/workflow.yaml +0 -67
  483. cognite/neat/workflows/examples/Validate Solution Model/workflow.yaml +0 -64
  484. cognite/neat/workflows/examples/Visualize Data Model Using Mock Graph/workflow.yaml +0 -95
  485. cognite/neat/workflows/examples/Visualize Semantic Data Model/workflow.yaml +0 -111
  486. cognite/neat/workflows/manager.py +0 -309
  487. cognite/neat/workflows/migration/steps.py +0 -93
  488. cognite/neat/workflows/migration/wf_manifests.py +0 -33
  489. cognite/neat/workflows/model.py +0 -202
  490. cognite/neat/workflows/steps/data_contracts.py +0 -140
  491. cognite/neat/workflows/steps/lib/__init__.py +0 -7
  492. cognite/neat/workflows/steps/lib/graph_extractor.py +0 -123
  493. cognite/neat/workflows/steps/lib/graph_loader.py +0 -68
  494. cognite/neat/workflows/steps/lib/graph_store.py +0 -139
  495. cognite/neat/workflows/steps/lib/io_steps.py +0 -393
  496. cognite/neat/workflows/steps/lib/rules_exporter.py +0 -453
  497. cognite/neat/workflows/steps/lib/rules_importer.py +0 -171
  498. cognite/neat/workflows/steps/lib/rules_validator.py +0 -102
  499. cognite/neat/workflows/steps/lib/v1/__init__.py +0 -7
  500. cognite/neat/workflows/steps/lib/v1/graph_contextualization.py +0 -82
  501. cognite/neat/workflows/steps/lib/v1/graph_extractor.py +0 -644
  502. cognite/neat/workflows/steps/lib/v1/graph_loader.py +0 -606
  503. cognite/neat/workflows/steps/lib/v1/graph_store.py +0 -278
  504. cognite/neat/workflows/steps/lib/v1/graph_transformer.py +0 -58
  505. cognite/neat/workflows/steps/lib/v1/rules_exporter.py +0 -513
  506. cognite/neat/workflows/steps/lib/v1/rules_importer.py +0 -612
  507. cognite/neat/workflows/steps/step_model.py +0 -83
  508. cognite/neat/workflows/steps_registry.py +0 -212
  509. cognite/neat/workflows/tasks.py +0 -18
  510. cognite/neat/workflows/triggers.py +0 -169
  511. cognite/neat/workflows/utils.py +0 -19
  512. cognite_neat-0.70.1.dist-info/METADATA +0 -212
  513. cognite_neat-0.70.1.dist-info/RECORD +0 -234
  514. cognite_neat-0.70.1.dist-info/entry_points.txt +0 -3
  515. /cognite/neat/{app/api → _data_model}/__init__.py +0 -0
  516. /cognite/neat/{app/api/data_classes → _data_model/deployer}/__init__.py +0 -0
  517. /cognite/neat/{app/api/utils → _data_model/exporters/_table_exporter}/__init__.py +0 -0
  518. /cognite/neat/{app/monitoring → _data_model/importers/_table_importer}/__init__.py +0 -0
  519. /cognite/neat/{graph/extractors → _data_model/models}/__init__.py +0 -0
  520. /cognite/neat/{graph/loader/core → _data_model/models/conceptual}/__init__.py +0 -0
  521. /cognite/neat/{graph/transformation → _data_model/validation}/__init__.py +0 -0
  522. /cognite/neat/{rules → _session/_html}/__init__.py +0 -0
  523. /cognite/neat/{rules/_analysis → _session/_usage_analytics}/__init__.py +0 -0
  524. /cognite/neat/{workflows/migration → _utils}/__init__.py +0 -0
  525. /cognite/neat/{workflows/steps → v0}/__init__.py +0 -0
  526. /cognite/neat/{graph → v0/core/_instances}/examples/Knowledge-Graph-Nordic44-dirty.xml +0 -0
  527. /cognite/neat/{graph → v0/core/_instances}/examples/Knowledge-Graph-Nordic44.xml +0 -0
  528. /cognite/neat/{graph → v0/core/_instances}/examples/__init__.py +0 -0
  529. /cognite/neat/{graph → v0/core/_instances}/examples/skos-capturing-sheet-wind-topics.xlsx +0 -0
  530. {cognite_neat-0.70.1.dist-info → cognite_neat-0.127.19.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,315 @@
1
+ from typing import Any, cast
2
+
3
+ from rdflib import Graph, Namespace, URIRef
4
+ from rdflib.query import ResultRow
5
+
6
+ from cognite.neat.v0.core._constants import DEFAULT_NAMESPACE
7
+ from cognite.neat.v0.core._shared import Triple
8
+ from cognite.neat.v0.core._utils.rdf_ import as_neat_compliant_uri
9
+ from cognite.neat.v0.core._utils.text import sentence_or_string_to_camel
10
+
11
+ from ._base import BaseTransformer, BaseTransformerStandardised, RowTransformationOutput
12
+
13
+
14
+ # TODO: Standardise after figuring out the bug which appears when running test_iodd_transformers.py
15
+ class AttachPropertyFromTargetToSource(BaseTransformer):
16
+ """
17
+ Transformer that considers a TargetNode and SourceNode relationship, to extract a property that is attached to
18
+ the TargetNode, and attaches it to the SourceNode instead, while also deleting the edge between
19
+ the SourceNode and TargetNode.
20
+ This means that you no longer have to go via the SourceNode to TargetNode to extract
21
+ the desired property from TargetNode, you can get it directly from the SourceNode instead.
22
+ Further, there are two ways of defining the predicate for the new property to attach to
23
+ the SourceNode. The predicate that is used will either be the old predicate between the SourceNode and TargetNode,
24
+ or, the TargetNode may hold a property with a value for the new predicate to use.
25
+ In this case, the user must specify the name of this predicate property connected to the TargetNode.
26
+ Consider the following example for illustration:
27
+
28
+ Ex. AttachPropertyFromTargetToSource
29
+ Graph before transformation:
30
+
31
+ :SourceNode a :SourceType .
32
+ :SourceNode :sourceProperty :TargetNode .
33
+
34
+ :TargetNode a :TargetType .
35
+ :TargetNode :propertyWhichValueWeWant 'Target Value' .
36
+ :TargetNode :propertyWhichValueWeMightWantAsNameForNewProperty 'PropertyName'
37
+
38
+ Use case A after transformation - attach new property to SourceNode using old predicate:
39
+
40
+ :SourceNode a :SourceType .
41
+ :SourceNode :sourceProperty 'Target Value' .
42
+
43
+ Use case B after transformation - extract new predicate from one of the properties of the TargetNode:
44
+
45
+ :SourceNode a :SourceType .
46
+ :SourceNode :PropertyName 'Target Value' .
47
+
48
+
49
+ The user can provide a flag to decide if the intermediate target node should be removed from the graph or not
50
+ after connecting the target property to the source node. The example illustrates this.
51
+ The default however is False.
52
+
53
+ If delete_target_node is not set, the expected number of triples after this transformation should be the same as
54
+ before the transformation.
55
+
56
+ If delete_target_node is set, the expected number of triples should be:
57
+ #triples_before - #target_nodes * #target_nodes_properties
58
+
59
+ Number of triples after operation from above example: 5 - 1*3 = 2
60
+
61
+ Args:
62
+ target_node_type: RDF.type of edge Node
63
+ target_property: URIRef of the property that holds the value attached to the intermediate node
64
+ target_property_holding_new_property: URIRef of the property which value will be new
65
+ property that will be added to the source node
66
+ delete_target_node: bool if the intermediate Node and Edge between source Node
67
+ and target property should be deleted. Defaults to False.
68
+ convert_literal_to_uri: bool if the value of the new property should be converted to URIRef. Defaults to False.
69
+ namespace: Namespace to use when converting value to URIRef. Defaults to DEFAULT_NAMESPACE.
70
+ """
71
+
72
+ description: str = "Attaches a target property from a target node that is connected to a source node."
73
+
74
+ _query_template_use_case_a: str = """
75
+ SELECT ?sourceNode ?sourceProperty ?targetNode ?newSourceProperty ?newSourcePropertyValue WHERE {{
76
+ ?sourceNode ?sourceProperty ?targetNode .
77
+ BIND( <{target_property}> as ?newSourceProperty ) .
78
+ ?targetNode a <{target_node_type}> .
79
+ ?targetNode <{target_property}> ?newSourcePropertyValue . }}"""
80
+
81
+ _query_template_use_case_b: str = """
82
+ SELECT ?sourceNode ?sourceProperty ?targetNode ?newSourceProperty ?newSourcePropertyValue WHERE {{
83
+ ?sourceNode ?sourceProperty ?targetNode .
84
+ ?targetNode a <{target_node_type}> .
85
+ ?targetNode <{target_property_holding_new_property_name}> ?newSourceProperty .
86
+ ?targetNode <{target_property}> ?newSourcePropertyValue . }}"""
87
+
88
+ def __init__(
89
+ self,
90
+ target_node_type: URIRef,
91
+ target_property: URIRef,
92
+ target_property_holding_new_property: URIRef | None = None,
93
+ delete_target_node: bool = False,
94
+ convert_literal_to_uri: bool = False,
95
+ namespace: Namespace | None = None,
96
+ ):
97
+ self.target_node_type = target_node_type
98
+ self.target_property = target_property
99
+ self.delete_target_node = delete_target_node
100
+ self.target_property_holding_new_property = target_property_holding_new_property
101
+ self.convert_literal_to_uri = convert_literal_to_uri
102
+ self.namespace = namespace or DEFAULT_NAMESPACE
103
+
104
+ def transform(self, graph: Graph) -> None:
105
+ nodes_to_delete: list[Any] = []
106
+
107
+ if self.target_property_holding_new_property is not None:
108
+ query = self._query_template_use_case_b.format(
109
+ target_node_type=self.target_node_type,
110
+ target_property_holding_new_property_name=self.target_property_holding_new_property,
111
+ target_property=self.target_property,
112
+ )
113
+ else:
114
+ query = self._query_template_use_case_a.format(
115
+ target_node_type=self.target_node_type,
116
+ target_property=self.target_property,
117
+ )
118
+
119
+ for ( # type: ignore
120
+ source_node,
121
+ old_predicate,
122
+ target_node,
123
+ new_predicate_value,
124
+ new_property_value,
125
+ ) in graph.query(query):
126
+ if self.target_property_holding_new_property is not None:
127
+ # Ensure new predicate is URI compliant as we are creating a new predicate
128
+ new_predicate_value_string = sentence_or_string_to_camel(str(new_predicate_value))
129
+ predicate = as_neat_compliant_uri(self.namespace[new_predicate_value_string])
130
+ else:
131
+ # this assign seems dangerous
132
+ predicate = old_predicate # type: ignore
133
+ # Create new connection from source node to value
134
+ graph.add(
135
+ (
136
+ source_node,
137
+ predicate,
138
+ (self.namespace[new_property_value] if self.convert_literal_to_uri else new_property_value),
139
+ )
140
+ )
141
+ # Remove old relationship between source node and destination node
142
+ graph.remove((source_node, old_predicate, target_node))
143
+
144
+ nodes_to_delete.append(target_node)
145
+
146
+ # this seems a bit funky. Need to check further.
147
+ if self.delete_target_node:
148
+ for target_node in nodes_to_delete:
149
+ # Remove triples with edges to target_node
150
+ graph.remove((None, None, target_node)) # type: ignore
151
+ # Remove target node triple and its properties
152
+ graph.remove((target_node, None, None)) # type: ignore
153
+
154
+
155
+ # TODO: Remove or adapt IODD
156
+ class PruneDanglingNodes(BaseTransformer):
157
+ """
158
+ Knowledge graph pruner and resolver. Will remove rdf triples from graph that does not have connections
159
+ to other nodes, and traverse graph for specified types to resolve the value in the final node and link it to
160
+ the source node.
161
+
162
+ Ex. PruneDanglingNodes
163
+
164
+ Graph before pruning:
165
+ node(A, rdf:type(Pump)) -> node(B, rdf:type(Disc)),
166
+ node(C, rdf:type(Disc))
167
+
168
+ Graph after pruning of nodes rdf:type(Disc):
169
+
170
+ node(A, rd:type(Pump)) -> node(B, rdf:type(Disc))
171
+
172
+ Args:
173
+ node_prune_types: list of RDF types to prune from the Graph if they are stand-alone Nodes
174
+ """
175
+
176
+ description: str = "Prunes nodes of specific rdf types that do not have any connection to them."
177
+ _query_template = """
178
+ SELECT ?subject
179
+ WHERE {{
180
+ ?subject a <{rdf_type}> .
181
+ FILTER NOT EXISTS {{ ?s ?p ?subject }}
182
+ }}
183
+ """
184
+
185
+ def __init__(
186
+ self,
187
+ node_prune_types: list[URIRef],
188
+ ):
189
+ self.node_prune_types = node_prune_types
190
+
191
+ def transform(self, graph: Graph) -> None:
192
+ for type_ in self.node_prune_types:
193
+ for (subject,) in list(graph.query(self._query_template.format(rdf_type=type_))): # type: ignore
194
+ graph.remove((subject, None, None))
195
+
196
+
197
+ class PruneTypes(BaseTransformerStandardised):
198
+ """
199
+ Removes all the instances of specific type
200
+ """
201
+
202
+ description: str = "Prunes nodes of specific rdf types"
203
+
204
+ def __init__(
205
+ self,
206
+ node_prune_types: list[URIRef],
207
+ ):
208
+ self.node_prune_types = node_prune_types
209
+
210
+ def _iterate_query(self) -> str:
211
+ filter_string = ""
212
+ for node in self.node_prune_types:
213
+ filter_string += f" <{node}> "
214
+
215
+ query = """
216
+ SELECT ?subject
217
+ WHERE {{
218
+ ?subject a ?type .
219
+ VALUES ?type {{ {rdf_types_string} }}
220
+ }}
221
+ """
222
+ return query.format(rdf_types_string=filter_string)
223
+
224
+ def _count_query(self) -> str:
225
+ filter_string = ""
226
+ for node in self.node_prune_types:
227
+ filter_string += f" <{node}> "
228
+
229
+ query = """
230
+ SELECT ( COUNT( ?subject ) as ?count )
231
+ WHERE {{
232
+ ?subject a ?type .
233
+ VALUES ?type {{ {rdf_types_string} }}
234
+ }}
235
+ """
236
+ return query.format(rdf_types_string=filter_string)
237
+
238
+ def operation(self, query_result_row: ResultRow) -> RowTransformationOutput:
239
+ row_output = RowTransformationOutput()
240
+
241
+ (subject,) = query_result_row
242
+ row_output.remove_triples.add((subject, None, None)) # type: ignore
243
+ row_output.instances_removed_count = 1
244
+
245
+ return row_output
246
+
247
+
248
+ class PruneDeadEndEdges(BaseTransformerStandardised):
249
+ """
250
+ Removes all the triples where object is a node that is not found in graph
251
+ """
252
+
253
+ description: str = "Pruning the graph of triples where object is a node that is not found in graph."
254
+
255
+ def _iterate_query(self) -> str:
256
+ return """
257
+ SELECT ?subject ?predicate ?object
258
+ WHERE {
259
+ ?subject ?predicate ?object .
260
+ FILTER (isIRI(?object) && ?predicate != rdf:type)
261
+ FILTER NOT EXISTS {?object ?p ?o .}
262
+ }
263
+ """
264
+
265
+ def _count_query(self) -> str:
266
+ return """
267
+ SELECT (COUNT(?object) AS ?count)
268
+ WHERE {
269
+ ?subject ?predicate ?object .
270
+ FILTER (isIRI(?object) && ?predicate != rdf:type)
271
+ FILTER NOT EXISTS {?object ?p ?o .}
272
+ }
273
+ """
274
+
275
+ def operation(self, row: ResultRow) -> RowTransformationOutput:
276
+ row_output = RowTransformationOutput()
277
+ row_output.remove_triples.add(cast(Triple, row))
278
+ row_output.instances_modified_count = 1
279
+
280
+ return row_output
281
+
282
+
283
+ class PruneInstancesOfUnknownType(BaseTransformerStandardised):
284
+ """
285
+ Removes all the triples where object is a node that is not found in graph
286
+ """
287
+
288
+ description: str = "Prunes the graph of triples where the object is a node that is not found in the graph."
289
+
290
+ def _iterate_query(self) -> str:
291
+ return """
292
+ SELECT DISTINCT ?subject
293
+ WHERE {
294
+ ?subject ?p ?o .
295
+ FILTER NOT EXISTS {?subject a ?object .}
296
+
297
+ }
298
+ """
299
+
300
+ def _count_query(self) -> str:
301
+ return """
302
+ SELECT (COUNT(DISTINCT ?subject) as ?count)
303
+ WHERE {
304
+ ?subject ?p ?o .
305
+ FILTER NOT EXISTS {?subject a ?object .}
306
+ }
307
+ """
308
+
309
+ def operation(self, query_result_row: ResultRow) -> RowTransformationOutput:
310
+ row_output = RowTransformationOutput()
311
+ (subject,) = query_result_row
312
+ row_output.remove_triples.add(cast(Triple, (subject, None, None)))
313
+ row_output.instances_removed_count = 1
314
+
315
+ return row_output
@@ -0,0 +1,84 @@
1
+ from typing import cast
2
+ from urllib.parse import quote
3
+
4
+ from rdflib import Namespace, URIRef
5
+ from rdflib.query import ResultRow
6
+
7
+ from cognite.neat.v0.core._utils.rdf_ import get_namespace, remove_namespace_from_uri
8
+
9
+ from ._base import BaseTransformerStandardised, RowTransformationOutput
10
+
11
+
12
+ class MakeConnectionOnExactMatch(BaseTransformerStandardised):
13
+ description: str = "Adds property that contains id of reference to all references of given class in model"
14
+ _use_only_once: bool = False
15
+ _need_changes = frozenset({})
16
+
17
+ def __init__(
18
+ self,
19
+ subject_type: URIRef,
20
+ subject_predicate: URIRef,
21
+ object_type: URIRef,
22
+ object_predicate: URIRef,
23
+ connection: URIRef | str | None = None,
24
+ limit: int | None = None,
25
+ ):
26
+ self.subject_type = subject_type
27
+ self.subject_predicate = subject_predicate
28
+ self.object_type = object_type
29
+ self.object_predicate = object_predicate
30
+ subject_namespace = Namespace(get_namespace(subject_type))
31
+ self.connection: URIRef = (
32
+ subject_namespace[quote(connection.strip())]
33
+ if isinstance(connection, str)
34
+ else connection or subject_namespace[remove_namespace_from_uri(self.object_type).lower()]
35
+ )
36
+
37
+ self.limit = limit
38
+
39
+ def _iterate_query(self) -> str:
40
+ query = """SELECT DISTINCT ?subject ?object
41
+ WHERE {{
42
+ ?subject a <{subject_type}> ;
43
+ <{subject_predicate}> ?value .
44
+ ?object a <{object_type}> ;
45
+ <{object_predicate}> ?value .
46
+ }}"""
47
+
48
+ if self.limit and isinstance(self.limit, int) and self.limit > 0:
49
+ query += f" LIMIT {self.limit}"
50
+
51
+ return query.format(
52
+ subject_type=self.subject_type,
53
+ subject_predicate=self.subject_predicate,
54
+ object_type=self.object_type,
55
+ object_predicate=self.object_predicate,
56
+ )
57
+
58
+ def _count_query(self) -> str:
59
+ query = """SELECT (COUNT(DISTINCT ?subject) as ?count)
60
+ WHERE {{
61
+ ?subject a <{subject_type}> ;
62
+ <{subject_predicate}> ?value .
63
+ ?object a <{object_type}> ;
64
+ <{object_predicate}> ?value .
65
+ }}"""
66
+
67
+ if self.limit and isinstance(self.limit, int) and self.limit > 0:
68
+ query += f" LIMIT {self.limit}"
69
+
70
+ return query.format(
71
+ subject_type=self.subject_type,
72
+ subject_predicate=self.subject_predicate,
73
+ object_type=self.object_type,
74
+ object_predicate=self.object_predicate,
75
+ )
76
+
77
+ def operation(self, query_result_row: ResultRow) -> RowTransformationOutput:
78
+ row_output = RowTransformationOutput()
79
+
80
+ subject, object = cast(tuple[URIRef, URIRef], query_result_row)
81
+
82
+ row_output.add_triples.add((subject, self.connection, object))
83
+ row_output.instances_modified_count += 1
84
+ return row_output