cognite-neat 0.105.2__py3-none-any.whl → 0.106.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. cognite/neat/_config.py +6 -260
  2. cognite/neat/_graph/extractors/_classic_cdf/_base.py +26 -13
  3. cognite/neat/_graph/extractors/_classic_cdf/_classic.py +4 -1
  4. cognite/neat/_graph/extractors/_classic_cdf/_sequences.py +2 -2
  5. cognite/neat/_graph/loaders/_rdf2dms.py +7 -2
  6. cognite/neat/_graph/transformers/_base.py +4 -8
  7. cognite/neat/_graph/transformers/_classic_cdf.py +51 -41
  8. cognite/neat/_graph/transformers/_rdfpath.py +1 -1
  9. cognite/neat/_issues/warnings/_external.py +1 -1
  10. cognite/neat/_rules/importers/_rdf/_inference2rules.py +4 -2
  11. cognite/neat/_rules/models/mapping/_classic2core.yaml +70 -58
  12. cognite/neat/_rules/transformers/_mapping.py +3 -2
  13. cognite/neat/_session/_base.py +6 -7
  14. cognite/neat/_session/_inspect.py +6 -2
  15. cognite/neat/_session/_mapping.py +6 -8
  16. cognite/neat/_session/_prepare.py +9 -10
  17. cognite/neat/_session/_read.py +35 -26
  18. cognite/neat/_session/_set.py +9 -0
  19. cognite/neat/_session/_state.py +3 -1
  20. cognite/neat/_session/_to.py +11 -13
  21. cognite/neat/_store/_graph_store.py +33 -28
  22. cognite/neat/_utils/collection_.py +32 -11
  23. cognite/neat/_version.py +1 -1
  24. {cognite_neat-0.105.2.dist-info → cognite_neat-0.106.0.dist-info}/METADATA +1 -7
  25. {cognite_neat-0.105.2.dist-info → cognite_neat-0.106.0.dist-info}/RECORD +28 -28
  26. {cognite_neat-0.105.2.dist-info → cognite_neat-0.106.0.dist-info}/LICENSE +0 -0
  27. {cognite_neat-0.105.2.dist-info → cognite_neat-0.106.0.dist-info}/WHEEL +0 -0
  28. {cognite_neat-0.105.2.dist-info → cognite_neat-0.106.0.dist-info}/entry_points.txt +0 -0
@@ -22,23 +22,22 @@ from .exceptions import NeatSessionError, session_class_wrapper
22
22
  class ReadAPI:
23
23
  """Read from a data source into NeatSession graph store."""
24
24
 
25
- def __init__(self, state: SessionState, client: NeatClient | None, verbose: bool) -> None:
25
+ def __init__(self, state: SessionState, verbose: bool) -> None:
26
26
  self._state = state
27
27
  self._verbose = verbose
28
- self.cdf = CDFReadAPI(state, client, verbose)
29
- self.rdf = RDFReadAPI(state, client, verbose)
30
- self.excel = ExcelReadAPI(state, client, verbose)
31
- self.csv = CSVReadAPI(state, client, verbose)
32
- self.yaml = YamlReadAPI(state, client, verbose)
33
- self.xml = XMLReadAPI(state, client, verbose)
28
+ self.cdf = CDFReadAPI(state, verbose)
29
+ self.rdf = RDFReadAPI(state, verbose)
30
+ self.excel = ExcelReadAPI(state, verbose)
31
+ self.csv = CSVReadAPI(state, verbose)
32
+ self.yaml = YamlReadAPI(state, verbose)
33
+ self.xml = XMLReadAPI(state, verbose)
34
34
 
35
35
 
36
36
  @session_class_wrapper
37
37
  class BaseReadAPI:
38
- def __init__(self, state: SessionState, client: NeatClient | None, verbose: bool) -> None:
38
+ def __init__(self, state: SessionState, verbose: bool) -> None:
39
39
  self._state = state
40
40
  self._verbose = verbose
41
- self._client = client
42
41
 
43
42
 
44
43
  @session_class_wrapper
@@ -48,15 +47,15 @@ class CDFReadAPI(BaseReadAPI):
48
47
 
49
48
  """
50
49
 
51
- def __init__(self, state: SessionState, client: NeatClient | None, verbose: bool) -> None:
52
- super().__init__(state, client, verbose)
53
- self.classic = CDFClassicAPI(state, client, verbose)
50
+ def __init__(self, state: SessionState, verbose: bool) -> None:
51
+ super().__init__(state, verbose)
52
+ self.classic = CDFClassicAPI(state, verbose)
54
53
 
55
54
  @property
56
55
  def _get_client(self) -> NeatClient:
57
- if self._client is None:
56
+ if self._state.client is None:
58
57
  raise NeatValueError("No client provided. Please provide a client to read a data model.")
59
- return self._client
58
+ return self._state.client
60
59
 
61
60
  def data_model(self, data_model_id: DataModelIdentifier) -> IssueList:
62
61
  """Reads a Data Model from CDF to the knowledge graph.
@@ -89,11 +88,11 @@ class CDFClassicAPI(BaseReadAPI):
89
88
 
90
89
  @property
91
90
  def _get_client(self) -> NeatClient:
92
- if self._client is None:
91
+ if self._state.client is None:
93
92
  raise ValueError("No client provided. Please provide a client to read a data model.")
94
- return self._client
93
+ return self._state.client
95
94
 
96
- def graph(self, root_asset_external_id: str, limit_per_type: int | None = None) -> None:
95
+ def graph(self, root_asset_external_id: str, limit_per_type: int | None = None) -> IssueList:
97
96
  """Reads the classic knowledge graph from CDF.
98
97
 
99
98
  The Classic Graph consists of the following core resource type.
@@ -129,14 +128,24 @@ class CDFClassicAPI(BaseReadAPI):
129
128
  root_asset_external_id: The external id of the root asset
130
129
  limit_per_type: The maximum number of nodes to extract per core node type. If None, all nodes are extracted.
131
130
 
131
+ Returns:
132
+ IssueList: A list of issues that occurred during the extraction.
133
+
134
+ Example:
135
+ ```python
136
+ neat.read.cdf.graph("root_asset_external_id")
137
+ ```
138
+
132
139
  """
133
140
  extractor = extractors.ClassicGraphExtractor(
134
141
  self._get_client, root_asset_external_id=root_asset_external_id, limit_per_type=limit_per_type
135
142
  )
136
143
 
137
- self._state.instances.store.write(extractor)
138
- if self._verbose:
139
- print(f"Classic Graph {root_asset_external_id} read successfully")
144
+ issues = self._state.instances.store.write(extractor)
145
+ issues.action = "Read Classic Graph"
146
+ if issues:
147
+ print("Use the .inspect.issues() for more details")
148
+ return issues
140
149
 
141
150
 
142
151
  @session_class_wrapper
@@ -153,9 +162,9 @@ class ExcelReadAPI(BaseReadAPI):
153
162
  ```
154
163
  """
155
164
 
156
- def __init__(self, state: SessionState, client: NeatClient | None, verbose: bool) -> None:
157
- super().__init__(state, client, verbose)
158
- self.examples = ExcelExampleAPI(state, client, verbose)
165
+ def __init__(self, state: SessionState, verbose: bool) -> None:
166
+ super().__init__(state, verbose)
167
+ self.examples = ExcelExampleAPI(state, verbose)
159
168
 
160
169
  def __call__(self, io: Any) -> IssueList:
161
170
  """Reads a Neat Excel Rules sheet to the graph store. The rules sheet may stem from an Information architect,
@@ -201,7 +210,7 @@ class YamlReadAPI(BaseReadAPI):
201
210
  if format == "neat":
202
211
  importer = importers.YAMLImporter.from_file(path, source_name=f"{reader!s}")
203
212
  elif format == "toolkit":
204
- dms_importer = importers.DMSImporter.from_path(path, self._client)
213
+ dms_importer = importers.DMSImporter.from_path(path, self._state.client)
205
214
  if dms_importer.issue_list.has_warning_type(MissingCogniteClientWarning):
206
215
  raise NeatSessionError(
207
216
  "No client provided. You are referencing Cognite containers in your data model, "
@@ -316,8 +325,8 @@ class RDFReadAPI(BaseReadAPI):
316
325
  io: file path or url to the RDF source
317
326
  """
318
327
 
319
- def __init__(self, state: SessionState, client: NeatClient | None, verbose: bool) -> None:
320
- super().__init__(state, client, verbose)
328
+ def __init__(self, state: SessionState, verbose: bool) -> None:
329
+ super().__init__(state, verbose)
321
330
  self.examples = RDFExamples(state)
322
331
 
323
332
  def ontology(self, io: Any) -> IssueList:
@@ -1,5 +1,7 @@
1
+ from cognite.client import CogniteClient
1
2
  from cognite.client import data_modeling as dm
2
3
 
4
+ from cognite.neat._client import NeatClient
3
5
  from cognite.neat._constants import COGNITE_MODELS
4
6
  from cognite.neat._issues import IssueList
5
7
  from cognite.neat._rules.models import DMSRules
@@ -35,3 +37,10 @@ class SetAPI:
35
37
  " due to temporarily issue with the reverse direct relation interpretation"
36
38
  )
37
39
  return self._state.rule_transform(SetIDDMSModel(new_model_id))
40
+
41
+ def client(self, client: CogniteClient) -> None:
42
+ """Sets the client to be used in the session."""
43
+ self._state.client = NeatClient(client)
44
+ if self._verbose:
45
+ print(f"Client set to {self._state.client.config.project} CDF project.")
46
+ return None
@@ -1,6 +1,7 @@
1
1
  from dataclasses import dataclass, field
2
2
  from typing import Literal, cast
3
3
 
4
+ from cognite.neat._client import NeatClient
4
5
  from cognite.neat._issues import IssueList
5
6
  from cognite.neat._rules.importers import BaseImporter, InferenceImporter
6
7
  from cognite.neat._rules.models import DMSRules, InformationRules
@@ -15,10 +16,11 @@ from .exceptions import NeatSessionError
15
16
 
16
17
 
17
18
  class SessionState:
18
- def __init__(self, store_type: Literal["memory", "oxigraph"]) -> None:
19
+ def __init__(self, store_type: Literal["memory", "oxigraph"], client: NeatClient | None = None) -> None:
19
20
  self.instances = InstancesState(store_type)
20
21
  self.rule_store = NeatRulesStore()
21
22
  self.last_reference: DMSRules | InformationRules | None = None
23
+ self.client = client
22
24
 
23
25
  def rule_transform(self, *transformer: RulesTransformer) -> IssueList:
24
26
  if not transformer:
@@ -4,7 +4,6 @@ from typing import Any, Literal, overload
4
4
 
5
5
  from cognite.client.data_classes.data_modeling import SpaceApply
6
6
 
7
- from cognite.neat._client import NeatClient
8
7
  from cognite.neat._constants import COGNITE_MODELS
9
8
  from cognite.neat._graph import loaders
10
9
  from cognite.neat._rules import exporters
@@ -25,10 +24,10 @@ class ToAPI:
25
24
 
26
25
  """
27
26
 
28
- def __init__(self, state: SessionState, client: NeatClient | None, verbose: bool) -> None:
27
+ def __init__(self, state: SessionState, verbose: bool) -> None:
29
28
  self._state = state
30
29
  self._verbose = verbose
31
- self.cdf = CDFToAPI(state, client, verbose)
30
+ self.cdf = CDFToAPI(state, verbose)
32
31
 
33
32
  def excel(
34
33
  self,
@@ -153,8 +152,7 @@ class ToAPI:
153
152
  class CDFToAPI:
154
153
  """Write a verified Data Model and Instances to CDF."""
155
154
 
156
- def __init__(self, state: SessionState, client: NeatClient | None, verbose: bool) -> None:
157
- self._client = client
155
+ def __init__(self, state: SessionState, verbose: bool) -> None:
158
156
  self._state = state
159
157
  self._verbose = verbose
160
158
 
@@ -166,9 +164,9 @@ class CDFToAPI:
166
164
  Note this space is required to be different than the space with the data model.
167
165
 
168
166
  """
169
- if not self._client:
167
+ if not self._state.client:
170
168
  raise NeatSessionError("No CDF client provided!")
171
-
169
+ client = self._state.client
172
170
  space = space or f"{self._state.rule_store.last_verified_dms_rules.metadata.space}_instances"
173
171
 
174
172
  if space and space == self._state.rule_store.last_verified_dms_rules.metadata.space:
@@ -176,16 +174,16 @@ class CDFToAPI:
176
174
  elif not PATTERNS.space_compliance.match(str(space)):
177
175
  raise NeatSessionError("Please provide a valid space name. {PATTERNS.space_compliance.pattern}")
178
176
 
179
- if not self._client.data_modeling.spaces.retrieve(space):
180
- self._client.data_modeling.spaces.apply(SpaceApply(space=space))
177
+ if not client.data_modeling.spaces.retrieve(space):
178
+ client.data_modeling.spaces.apply(SpaceApply(space=space))
181
179
 
182
180
  loader = loaders.DMSLoader.from_rules(
183
181
  self._state.rule_store.last_verified_dms_rules,
184
182
  self._state.instances.store,
185
183
  instance_space=space,
186
- client=self._client,
184
+ client=client,
187
185
  )
188
- result = loader.load_into_cdf(self._client)
186
+ result = loader.load_into_cdf(client)
189
187
  self._state.instances.outcome.append(result)
190
188
  print("You can inspect the details with the .inspect.outcome.instances(...) method.")
191
189
  return result
@@ -219,9 +217,9 @@ class CDFToAPI:
219
217
 
220
218
  exporter = exporters.DMSExporter(existing=existing, export_components=components, drop_data=drop_data)
221
219
 
222
- if not self._client:
220
+ if not self._state.client:
223
221
  raise NeatSessionError("No client provided!")
224
222
 
225
- result = self._state.rule_store.export_to_cdf(exporter, self._client, dry_run)
223
+ result = self._state.rule_store.export_to_cdf(exporter, self._state.client, dry_run)
226
224
  print("You can inspect the details with the .inspect.outcome.data_model(...) method.")
227
225
  return result
@@ -15,6 +15,7 @@ from cognite.neat._graph._shared import rdflib_to_oxi_type
15
15
  from cognite.neat._graph.extractors import RdfFileExtractor, TripleExtractors
16
16
  from cognite.neat._graph.queries import Queries
17
17
  from cognite.neat._graph.transformers import Transformers
18
+ from cognite.neat._issues import IssueList, catch_issues
18
19
  from cognite.neat._rules.analysis import InformationAnalysis
19
20
  from cognite.neat._rules.models import InformationRules
20
21
  from cognite.neat._rules.models.entities import ClassEntity
@@ -157,39 +158,43 @@ class NeatGraphStore:
157
158
 
158
159
  return cls(graph, rules)
159
160
 
160
- def write(self, extractor: TripleExtractors) -> None:
161
- _start = datetime.now(timezone.utc)
162
- success = True
163
-
164
- if isinstance(extractor, RdfFileExtractor) and not extractor.issue_list.has_errors:
165
- self._parse_file(extractor.filepath, cast(str, extractor.format), extractor.base_uri)
166
- elif isinstance(extractor, RdfFileExtractor):
167
- success = False
168
- issue_text = "\n".join([issue.as_message() for issue in extractor.issue_list])
169
- warnings.warn(
170
- f"Cannot write to graph store with {type(extractor).__name__}, errors found in file:\n{issue_text}",
171
- stacklevel=2,
172
- )
173
- else:
174
- self._add_triples(extractor.extract())
175
-
176
- if success:
177
- _end = datetime.now(timezone.utc)
178
- # Need to do the hasattr in case the extractor comes from NeatEngine.
179
- activities = (
180
- extractor._get_activity_names()
181
- if hasattr(extractor, "_get_activity_names")
182
- else [type(extractor).__name__]
183
- )
184
- for activity in activities:
185
- self.provenance.append(
186
- Change.record(
161
+ def write(self, extractor: TripleExtractors) -> IssueList:
162
+ last_change: Change | None = None
163
+ with catch_issues() as issue_list:
164
+ _start = datetime.now(timezone.utc)
165
+ success = True
166
+
167
+ if isinstance(extractor, RdfFileExtractor) and not extractor.issue_list.has_errors:
168
+ self._parse_file(extractor.filepath, cast(str, extractor.format), extractor.base_uri)
169
+ elif isinstance(extractor, RdfFileExtractor):
170
+ success = False
171
+ issue_text = "\n".join([issue.as_message() for issue in extractor.issue_list])
172
+ warnings.warn(
173
+ f"Cannot write to graph store with {type(extractor).__name__}, errors found in file:\n{issue_text}",
174
+ stacklevel=2,
175
+ )
176
+ else:
177
+ self._add_triples(extractor.extract())
178
+
179
+ if success:
180
+ _end = datetime.now(timezone.utc)
181
+ # Need to do the hasattr in case the extractor comes from NeatEngine.
182
+ activities = (
183
+ extractor._get_activity_names()
184
+ if hasattr(extractor, "_get_activity_names")
185
+ else [type(extractor).__name__]
186
+ )
187
+ for activity in activities:
188
+ last_change = Change.record(
187
189
  activity=activity,
188
190
  start=_start,
189
191
  end=_end,
190
192
  description=f"Extracted triples to graph store using {type(extractor).__name__}",
191
193
  )
192
- )
194
+ self.provenance.append(last_change)
195
+ if last_change:
196
+ last_change.target_entity.issues.extend(issue_list)
197
+ return issue_list
193
198
 
194
199
  def _read_via_rules_linkage(
195
200
  self, class_neat_id: URIRef, property_link_pairs: dict[str, URIRef] | None
@@ -2,6 +2,7 @@ from collections import Counter
2
2
  from collections.abc import Iterable, Sequence
3
3
  from typing import TypeVar
4
4
 
5
+ from cognite.neat._config import GLOBAL_CONFIG
5
6
  from cognite.neat._constants import IN_PYODIDE
6
7
 
7
8
  T_Element = TypeVar("T_Element")
@@ -26,20 +27,40 @@ def remove_list_elements(input_list: list, elements_to_remove: list) -> list:
26
27
 
27
28
 
28
29
  def iterate_progress_bar(iterable: Iterable[T_Element], total: int, description: str) -> Iterable[T_Element]:
29
- if IN_PYODIDE:
30
+ if IN_PYODIDE or GLOBAL_CONFIG.progress_bar in ("infer", "tqdm"):
30
31
  try:
31
- from tqdm import tqdm # type: ignore [import]
32
+ from tqdm import tqdm
32
33
  except ModuleNotFoundError:
33
34
  return iterable
34
35
  return tqdm(iterable, total=total, desc=description)
35
- # Progress bar from rich requires multi-threading, which is not supported in Pyodide
36
- try:
37
- from rich.progress import track
38
- except ModuleNotFoundError:
36
+
37
+ elif GLOBAL_CONFIG.progress_bar == "tqdm-notebook":
38
+ try:
39
+ from tqdm.notebook import tqdm as tqdm_notebook
40
+ except ModuleNotFoundError:
41
+ return iterable
42
+ return tqdm_notebook(iterable, total=total, desc=description)
43
+ elif GLOBAL_CONFIG.progress_bar in ("infer", "rich"):
44
+ # Progress bar from rich requires multi-threading, which is not supported in Pyodide
45
+ try:
46
+ from rich.progress import track
47
+ except ModuleNotFoundError:
48
+ return iterable
49
+
50
+ return track(
51
+ iterable,
52
+ total=total,
53
+ description=description,
54
+ )
55
+ elif GLOBAL_CONFIG.progress_bar is None:
39
56
  return iterable
57
+ else:
58
+ raise ValueError(f"Unsupported progress bar type: {GLOBAL_CONFIG.progress_bar}")
59
+
40
60
 
41
- return track(
42
- iterable,
43
- total=total,
44
- description=description,
45
- )
61
+ def iterate_progress_bar_if_above_config_threshold(
62
+ iterable: Iterable[T_Element], total: int, description: str
63
+ ) -> Iterable[T_Element]:
64
+ if GLOBAL_CONFIG.use_iterate_bar_threshold and total > GLOBAL_CONFIG.use_iterate_bar_threshold:
65
+ return iterate_progress_bar(iterable, total, description)
66
+ return iterable
cognite/neat/_version.py CHANGED
@@ -1,2 +1,2 @@
1
- __version__ = "0.105.2"
1
+ __version__ = "0.106.0"
2
2
  __engine__ = "^2.0.3"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: cognite-neat
3
- Version: 0.105.2
3
+ Version: 0.106.0
4
4
  Summary: Knowledge graph transformation
5
5
  Home-page: https://cognite-neat.readthedocs-hosted.com/
6
6
  License: Apache-2.0
@@ -17,13 +17,11 @@ Provides-Extra: all
17
17
  Provides-Extra: docs
18
18
  Provides-Extra: google
19
19
  Provides-Extra: oxi
20
- Provides-Extra: service
21
20
  Requires-Dist: PyYAML
22
21
  Requires-Dist: backports.strenum (>=1.2,<2.0) ; python_version < "3.11"
23
22
  Requires-Dist: cognite-sdk (>=7.71.2,<8.0.0)
24
23
  Requires-Dist: elementpath (>=4.0.0,<5.0.0)
25
24
  Requires-Dist: exceptiongroup (>=1.1.3,<2.0.0) ; python_version < "3.11"
26
- Requires-Dist: fastapi (>=0,<1) ; extra == "service" or extra == "all"
27
25
  Requires-Dist: google-api-python-client ; extra == "google"
28
26
  Requires-Dist: google-auth-oauthlib ; extra == "google"
29
27
  Requires-Dist: gspread ; extra == "google"
@@ -45,20 +43,16 @@ Requires-Dist: openpyxl
45
43
  Requires-Dist: oxrdflib[oxigraph] (>=0.4.0,<0.5.0) ; extra == "oxi" or extra == "all"
46
44
  Requires-Dist: packaging (>=22.0,<25.0)
47
45
  Requires-Dist: pandas
48
- Requires-Dist: prometheus-client (>=0,<1) ; extra == "service" or extra == "all"
49
46
  Requires-Dist: pydantic (>=2,<3)
50
47
  Requires-Dist: pymdown-extensions ; extra == "docs"
51
48
  Requires-Dist: pyoxigraph (==0.4.3) ; extra == "oxi" or extra == "all"
52
- Requires-Dist: python-multipart (==0.0.9) ; extra == "service" or extra == "all"
53
49
  Requires-Dist: pyvis (>=0.3.2,<0.4.0)
54
50
  Requires-Dist: rdflib
55
51
  Requires-Dist: requests
56
52
  Requires-Dist: rich[jupyter] (>=13.7.1,<14.0.0)
57
- Requires-Dist: schedule (>=1,<2) ; extra == "service" or extra == "all"
58
53
  Requires-Dist: tomli (>=2.0.1,<3.0.0) ; python_version < "3.11"
59
54
  Requires-Dist: typing_extensions (>=4.8,<5.0) ; python_version < "3.11"
60
55
  Requires-Dist: urllib3 (>=2,<3)
61
- Requires-Dist: uvicorn[standard] (>=0,<1) ; extra == "service" or extra == "all"
62
56
  Project-URL: Documentation, https://cognite-neat.readthedocs-hosted.com/
63
57
  Project-URL: Repository, https://github.com/cognitedata/neat
64
58
  Description-Content-Type: text/markdown
@@ -9,7 +9,7 @@ cognite/neat/_client/data_classes/data_modeling.py,sha256=RvpUp9ygd-yffQFJ7O2mQq
9
9
  cognite/neat/_client/data_classes/neat_sequence.py,sha256=QZWSfWnwk6KlYJvsInco4Wdwc1U8DnOQKWmHebArbQY,10830
10
10
  cognite/neat/_client/data_classes/schema.py,sha256=uD8ExxEiIP3zhK4b--Q5fND-vmcC05a9WU5ItLsqG88,23179
11
11
  cognite/neat/_client/testing.py,sha256=c5ADJkRJFYGlJVQz-uPqxKExKXT297pxKh_ka4oGBjs,1082
12
- cognite/neat/_config.py,sha256=f9Py4SEHwYYquIg-k1rC7MbXBLENXQauoZtLyUbWvJQ,10118
12
+ cognite/neat/_config.py,sha256=WT1BS8uADcFvGoUYOOfwFOVq_VBl472TisdoA3wLick,280
13
13
  cognite/neat/_constants.py,sha256=ei0ODx_P1Z4O-8tVK_K_7oRvEMzovVJ-0kw96fW8a_0,4999
14
14
  cognite/neat/_graph/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  cognite/neat/_graph/_shared.py,sha256=g7XFITbVxdDyGZ6mlgFUv5cBycrU7QbPktRikdUVkks,863
@@ -24,14 +24,14 @@ cognite/neat/_graph/extractors/__init__.py,sha256=dUdr4lg4HfEJuXeGGo2dmNdFwv75is
24
24
  cognite/neat/_graph/extractors/_base.py,sha256=xvoK8ZCu7OOvqcI9glOLEh1DxqW_TA1xYPI5tQQG_50,859
25
25
  cognite/neat/_graph/extractors/_classic_cdf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  cognite/neat/_graph/extractors/_classic_cdf/_assets.py,sha256=9WVFrAtUFAp_AAlb26Rtt2Axz9xsPQYetg7SKVrNCr4,1474
27
- cognite/neat/_graph/extractors/_classic_cdf/_base.py,sha256=9kI2qBv5fvUPNPA7RL9HrUR3p5R40Cxz2zR0f3lTxrU,11115
28
- cognite/neat/_graph/extractors/_classic_cdf/_classic.py,sha256=aKo5Z5eKMZuyq9k6Uxk-yizvBnPNVc_58lIGoKrOEMU,11206
27
+ cognite/neat/_graph/extractors/_classic_cdf/_base.py,sha256=aM4v7s291H08tq_mAAcvHfheWfXl5oCYbD4O2q3FqOE,11753
28
+ cognite/neat/_graph/extractors/_classic_cdf/_classic.py,sha256=6RBb06JxcLTj2VKCatlXj5_1TUx5SG_uV3e9-muu81Y,11272
29
29
  cognite/neat/_graph/extractors/_classic_cdf/_data_sets.py,sha256=xRFv9pVFgIMTZ45E8teMC0Ynku_CuZdcZkVCbhPuPBk,1294
30
30
  cognite/neat/_graph/extractors/_classic_cdf/_events.py,sha256=B8hRoMAg8GQvApjxals5PfPyjmdPO93U3nj_G7g0kDQ,1394
31
31
  cognite/neat/_graph/extractors/_classic_cdf/_files.py,sha256=Q816cVQ9qS7Art66HJfErL2OV7MxH_eSIG7bJ8_HJ7Q,1406
32
32
  cognite/neat/_graph/extractors/_classic_cdf/_labels.py,sha256=7guTZdGFT1r7ItE2VNgXwbBZ1y_005oB3fg1XbwT7WQ,2083
33
33
  cognite/neat/_graph/extractors/_classic_cdf/_relationships.py,sha256=Mu0PRcgF3BEZ7HVNQpCT1Ht2TLl9n2JcRz-UinShiFY,2977
34
- cognite/neat/_graph/extractors/_classic_cdf/_sequences.py,sha256=n8qaFNR5YCRkT8rMevnQArFovbzE3EI-DuWIXMtjmx0,10676
34
+ cognite/neat/_graph/extractors/_classic_cdf/_sequences.py,sha256=754-yyf5OymxNQR2uzI-yo8JZDlr8mr6C-DgTAWDEcw,10738
35
35
  cognite/neat/_graph/extractors/_classic_cdf/_timeseries.py,sha256=6CmmxWWG2IErfNKOPhsjQ5wSOTUZZMjulpaRbHj0Q-g,1560
36
36
  cognite/neat/_graph/extractors/_dexpi.py,sha256=SFWnKXYpQToWag9aoX8fxISNa9b8KlqjZnkwI18BzNY,9431
37
37
  cognite/neat/_graph/extractors/_dms.py,sha256=bK5p4-NdXlnQMGaalr6vgODcIvWu2e4qE6f8nnvdQK0,6685
@@ -40,17 +40,17 @@ cognite/neat/_graph/extractors/_mock_graph_generator.py,sha256=7WqyFu2Qj03pJD4au
40
40
  cognite/neat/_graph/extractors/_rdf_file.py,sha256=YgPZN4Ayk6UlbwFFjdWn4Yo3P74D8KeNUb3slXg6Ox8,1604
41
41
  cognite/neat/_graph/loaders/__init__.py,sha256=1eam_rG1BXTUJ8iDm8_IYZldEe177vn2GmHihDBi8qk,718
42
42
  cognite/neat/_graph/loaders/_base.py,sha256=Fp6uUkNfAM-SVgsLz7tyNJxJ1eeEw3h2d4Q0YyppR-Y,3991
43
- cognite/neat/_graph/loaders/_rdf2dms.py,sha256=BskCCo_2P4JjPOyAc4His6tv_nEPH8u0qoQZyaSjVGQ,25247
43
+ cognite/neat/_graph/loaders/_rdf2dms.py,sha256=swCF3fqCiroqGTGamMhlsJL9i8UDQ3kAt410W_LGMzQ,25531
44
44
  cognite/neat/_graph/queries/__init__.py,sha256=BgDd-037kvtWwAoGAy8eORVNMiZ5-E9sIV0txIpeaN4,50
45
45
  cognite/neat/_graph/queries/_base.py,sha256=Y3Amuave6xdQsDE5ZXCrYLUgOMIH8BXa4n5Pc9czAF0,14926
46
46
  cognite/neat/_graph/queries/_construct.py,sha256=CW8uHtXXACUXDj1AcEjROXtvoiuyx0CTgZ0bURY5Neo,7213
47
47
  cognite/neat/_graph/queries/_shared.py,sha256=uhw-nY4jJvivgtj1msdCRrfTWgauU7ybSHUqqUaFOUU,5390
48
48
  cognite/neat/_graph/transformers/__init__.py,sha256=sSrjK3_UDeesN8RzOjfNAYqyOEwjZJPUGO4uDuMLZ3s,1620
49
- cognite/neat/_graph/transformers/_base.py,sha256=omFmfRGaudojjq3GlW6b8PA2TNRcN3jXkw6Xvnx5r4M,4345
50
- cognite/neat/_graph/transformers/_classic_cdf.py,sha256=rKgrhYpChzO4pfg08Nl-Yin4793N00DA6rSXdC3Tlh4,21742
49
+ cognite/neat/_graph/transformers/_base.py,sha256=xQWAedOumkmzp16UGjtgnctXmk_mzixqOVZ4qjd2aOQ,4196
50
+ cognite/neat/_graph/transformers/_classic_cdf.py,sha256=0rTpB9crJ_RHrCnegZSYFQZKf3dnfIbO3q9I0TENbug,22240
51
51
  cognite/neat/_graph/transformers/_iodd.py,sha256=KNz1fPdKK40UaHgPMECzNZgSeU5PdPRyLdaRYdq1iug,866
52
52
  cognite/neat/_graph/transformers/_prune_graph.py,sha256=LFiAMYFteND5LGEv9KqYJr5C9-n7S5fR6IrEdtJyRnk,12447
53
- cognite/neat/_graph/transformers/_rdfpath.py,sha256=WzydQvBzsnZ4BSv3HJWSH73e-sf1p-R4M2dm2H-DtEk,5019
53
+ cognite/neat/_graph/transformers/_rdfpath.py,sha256=_ZM8hmZvBPcgbascKzkeDwAaQFoO6edfdpddzDjuQNg,5020
54
54
  cognite/neat/_graph/transformers/_value_type.py,sha256=ZtH1KZmOGBGpUcqj4fBRlPOMq6kADt-HMShvYPS5Org,12841
55
55
  cognite/neat/_issues/__init__.py,sha256=OVgWivp_Br31p8zPeHjOEXs-Wj7lJU1pU1L3pfhfuqE,518
56
56
  cognite/neat/_issues/_base.py,sha256=vV0E8cfXKlOnRXFIDZKg5QPMruELEbCaUfQ01l5dR9A,20073
@@ -62,7 +62,7 @@ cognite/neat/_issues/errors/_resources.py,sha256=YoajFF4Nxq_mhhVSZ7r3J6V-sH8cMMn
62
62
  cognite/neat/_issues/errors/_workflow.py,sha256=m_Hlsvl5A1Oy7P3IROnz-4_do8_orZ1Pr1IHqsMyEys,971
63
63
  cognite/neat/_issues/formatters.py,sha256=ziNWT_YXwovTfU8Av5iYuSLgszzJYKTawM_z67VBdlU,3331
64
64
  cognite/neat/_issues/warnings/__init__.py,sha256=6iIa8IFb7i1TtCS6Bp2ZiwPggQPWziKv9_jsb9v1m0U,2967
65
- cognite/neat/_issues/warnings/_external.py,sha256=3tE98nLzOx9pb-VMi0MmQskHj-IuEqwjjoqhKMJ-xIM,1325
65
+ cognite/neat/_issues/warnings/_external.py,sha256=O5GSRmIsAC6HyToQ7itpFFNILWCAg0OehPTVUy8pTuc,1319
66
66
  cognite/neat/_issues/warnings/_general.py,sha256=idZZZDbeSrDJJ1PomdmIO40QsZQNn_lWztWvMA-9q50,782
67
67
  cognite/neat/_issues/warnings/_models.py,sha256=i4ZXr1IINKbFiVhUd8-qAt9_cXB8D3W-ng1Ime_lQTA,4376
68
68
  cognite/neat/_issues/warnings/_properties.py,sha256=cC1mWcHm7NM2avheTh3eUZmNrnI-s5rqjGvg0-YR6NI,3146
@@ -97,7 +97,7 @@ cognite/neat/_rules/importers/_dtdl2rules/spec.py,sha256=u__f08rAiYG0FIRiWoecBN8
97
97
  cognite/neat/_rules/importers/_rdf/__init__.py,sha256=x06gjJ3dXlhJRRgyXZ-HoF4vFnbPmzI2ni6wyzwtfPU,183
98
98
  cognite/neat/_rules/importers/_rdf/_base.py,sha256=b7MM4PV4d0irLbU8nKws4ynhiIuzmvvZeeQycHVKMpQ,5682
99
99
  cognite/neat/_rules/importers/_rdf/_imf2rules.py,sha256=M5hfWZUhoCgXFlr8QNfogNCI2pxzqqAvTJII4yA8xJw,3723
100
- cognite/neat/_rules/importers/_rdf/_inference2rules.py,sha256=Kp0ShcswOP0HKL2RtTwnN5Q2mxpI1lXzqzgNF2npfHM,12741
100
+ cognite/neat/_rules/importers/_rdf/_inference2rules.py,sha256=G_-UXNOBZy0jCDpghKp7-h8Lqn5qExGR-wrE6N9t0YY,12907
101
101
  cognite/neat/_rules/importers/_rdf/_owl2rules.py,sha256=gTMe94DC9xe8NR9KNVHTMTshg_NzVuN1v8Lz95BUshI,3392
102
102
  cognite/neat/_rules/importers/_rdf/_shared.py,sha256=mxBoqFQfvHeLa4kbDYAd7FEcHe1fv97tcqHd9gmFeKk,5867
103
103
  cognite/neat/_rules/importers/_spreadsheet2rules.py,sha256=2KhOSzNPmQgBb64L3aIARwmqY944LNP_9QciMnn7ecY,10911
@@ -126,24 +126,24 @@ cognite/neat/_rules/models/information/_rules_input.py,sha256=_e4ocafo4RYg0b67y2
126
126
  cognite/neat/_rules/models/information/_validation.py,sha256=HbaLShj6uumu-t9I3FUI_iKQfUDiwEkuFENHgWIPfrk,10202
127
127
  cognite/neat/_rules/models/mapping/__init__.py,sha256=T68Hf7rhiXa7b03h4RMwarAmkGnB-Bbhc1H07b2PyC4,100
128
128
  cognite/neat/_rules/models/mapping/_classic2core.py,sha256=2IEIWTF7siB7nHTKuafG_KJbt4h1CPMdG3yDsw3Sky8,1239
129
- cognite/neat/_rules/models/mapping/_classic2core.yaml,sha256=invWES7qhqKXymx_Bt2ZdMJwBMpmFQ9hGe0nWt_hMEw,20055
129
+ cognite/neat/_rules/models/mapping/_classic2core.yaml,sha256=jodkmcTborWJmG3At16OChtnol696X6D4lgAa7aaQ78,20491
130
130
  cognite/neat/_rules/transformers/__init__.py,sha256=jzfzRDcyz_6azteTjGFBjKz9vQTwo_slT-eNocfWZxw,993
131
131
  cognite/neat/_rules/transformers/_base.py,sha256=sflEUKfNgCE3NNErzBMJ88VJEYB12pU1H3da40B52Yg,2556
132
132
  cognite/neat/_rules/transformers/_converters.py,sha256=0fnQl-RXGfh9WcRjIlgCmpjYs2gZa0ya8kNQL_FnMPk,52576
133
- cognite/neat/_rules/transformers/_mapping.py,sha256=mx1FJCfflWmUPaDdlcLE2MEuuJwPcR4-gvx_CtK8Lds,18093
133
+ cognite/neat/_rules/transformers/_mapping.py,sha256=2aNJ5hcJ2hRtQAacOEC6uOTM7SdglduimepmIhRUikg,18157
134
134
  cognite/neat/_rules/transformers/_verification.py,sha256=jKTppklUCVwVlRfYyMfnUtV8r2ACTY-AtsoMF6L-KXo,4593
135
135
  cognite/neat/_session/__init__.py,sha256=fxQ5URVlUnmEGYyB8Baw7IDq-uYacqkigbc4b-Pr9Fw,58
136
- cognite/neat/_session/_base.py,sha256=qkZh5FFFydD3m4YOyAXEss429eCcb9nJyjCFszWWYqc,10067
136
+ cognite/neat/_session/_base.py,sha256=pOpV9Bnkci-RjGj5ouzAf-chJ0lOlSnm2MVwqQmIQ84,10002
137
137
  cognite/neat/_session/_collector.py,sha256=SPCb1fEuOVIMHMQsVUNS7nkUUPhtUuNatnWPAIfQMcE,4093
138
138
  cognite/neat/_session/_drop.py,sha256=kfXSgsq3xaLOAxtfjPkix9C18xulJv4Cfu4gj86nBSY,1392
139
- cognite/neat/_session/_inspect.py,sha256=w8EGQIYMfhN4blCWo6BRCMckBhKMqmt1faa-7M0jqAg,8167
140
- cognite/neat/_session/_mapping.py,sha256=WbFFho2Lr3PNL4WkfHw5K3ca9d8DiAcWRYkFkMURsds,2451
141
- cognite/neat/_session/_prepare.py,sha256=wnWOX19cmnCTjiWxJAIOWznyE7yHQ12tdnJiVdjuTC4,23934
142
- cognite/neat/_session/_read.py,sha256=Z-yl-h1c_OLZYEW7M8vsgoZigOlg79LwUMXKGt6bImo,14644
143
- cognite/neat/_session/_set.py,sha256=5glxDLjgJaEmX-KbWTWsJOfYaDSZ-j-kxvZfnoHmV1k,1622
139
+ cognite/neat/_session/_inspect.py,sha256=yls1XrJpVid2IlOs6-m2-9Hlgn0AuT_CMIASDXVEktU,8410
140
+ cognite/neat/_session/_mapping.py,sha256=Q_ZYd75ZFvX7tcA3m-rfzMo-zTOgwXuR-lVq0E0kBzQ,2319
141
+ cognite/neat/_session/_prepare.py,sha256=Qk8qq3iQA7amRZInjnwwJkPZwGs3vUfQ21c-FUERFUo,23828
142
+ cognite/neat/_session/_read.py,sha256=8pSL1tTACw3Z6tMU8ck486FmUK3lXKWNH1V29_oKITk,14689
143
+ cognite/neat/_session/_set.py,sha256=7k6oPX3n7sUViGaSZOQb4zLQIBKDFt_y5xBmC5SYYjU,1997
144
144
  cognite/neat/_session/_show.py,sha256=bp1IddBd0vBxlWcewxL3U3zv-GsE8l7lxIE7muCvyXk,16305
145
- cognite/neat/_session/_state.py,sha256=rleRNrjocCI8vG9jbIDAQ3a3bpe5O5t2kizXS0CWscY,4041
146
- cognite/neat/_session/_to.py,sha256=yvI4VdICdWnQZSMrxDD1KncESBpPuv9WVo8I17tySEA,9795
145
+ cognite/neat/_session/_state.py,sha256=PPn1OOu-4A0AyysxcRA1Ehr5CppRoCrF52uZDvt7Z6Y,4148
146
+ cognite/neat/_session/_to.py,sha256=G2OpRXyowe0UMDARFzVDyjQW13-8Dm40w9y8zesPjTg,9688
147
147
  cognite/neat/_session/_wizard.py,sha256=O8d0FA87RIoiTOD2KLyTVsxwA2-ewAG2By4JfxXSL84,1474
148
148
  cognite/neat/_session/engine/__init__.py,sha256=D3MxUorEs6-NtgoICqtZ8PISQrjrr4dvca6n48bu_bI,120
149
149
  cognite/neat/_session/engine/_import.py,sha256=1QxA2_EK613lXYAHKQbZyw2yjo5P9XuiX4Z6_6-WMNQ,169
@@ -152,14 +152,14 @@ cognite/neat/_session/engine/_load.py,sha256=LcoYVthQyCzLWKzRE_75_nElS-n_eMWSPAg
152
152
  cognite/neat/_session/exceptions.py,sha256=dvhwF7d8AADxqEI13nZreLCPBPN_7A3KiAqlWjkpuqc,2303
153
153
  cognite/neat/_shared.py,sha256=Ov59SWYboRRsncB_5V1ZC_BAoACfNLjo80vqE5Ru6wo,2325
154
154
  cognite/neat/_store/__init__.py,sha256=RrvuZrMdezqun5dOrwHWSk26kampZcvqiHBqSFumkEE,130
155
- cognite/neat/_store/_graph_store.py,sha256=36wShJzRTJUBg-rSZJwvD4c3RsdvxCL1ORQopeuCSuU,18384
155
+ cognite/neat/_store/_graph_store.py,sha256=EjZ2kuetEE0G6I2DvMxNUXDvx-p_ZEJAOtnCOgLBocI,18745
156
156
  cognite/neat/_store/_provenance.py,sha256=g_u6O7jo3ZekQVtc-FfJR1fTGqD9L3ipwfSEjdHB1xM,6610
157
157
  cognite/neat/_store/_rules_store.py,sha256=mpx63LSceedrDiRDG66RW5zlsaCYzyYspDiAV_WwW5U,15335
158
158
  cognite/neat/_store/exceptions.py,sha256=1xLtWqX-TiGcXdgayBgeNx1cipoXkye7LmTMFdpMg1s,506
159
159
  cognite/neat/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
160
  cognite/neat/_utils/auth.py,sha256=jOoPN3hKyVDalsc-AotzuuyZP9DwtYmKhYxGzbwAC_w,14412
161
161
  cognite/neat/_utils/auxiliary.py,sha256=WFOycFgoYipvDmtGvn6ZNH3H8iNZmHamrfe2kXRb8lM,6667
162
- cognite/neat/_utils/collection_.py,sha256=Q_LN1qypr0SeAV3dAR5KLD1szHNohSdYxyA8hr3n4T8,1433
162
+ cognite/neat/_utils/collection_.py,sha256=JvYLSR6Cf8PIKGhr8HKRvep0U-z0980jbnIM_g-5I5I,2366
163
163
  cognite/neat/_utils/graph_transformations_report.py,sha256=rjEy4XMvOygFL4UgnYOmFW6AHxaU9IXep-dmYc5654c,1230
164
164
  cognite/neat/_utils/io_.py,sha256=D2Mg8sOxfBoDg3fC0jBzaxO3vkXmr0QvZSgYIv6xRkM,386
165
165
  cognite/neat/_utils/rdf_.py,sha256=b3sE3aTW9lu4gJWQJEaq_NCLbI54cc1o12utz-xbLh8,9023
@@ -170,10 +170,10 @@ cognite/neat/_utils/text.py,sha256=0IffvBIAmeGh92F4T6xiEdd-vv3B7FOGEMbfuTktO5Y,4
170
170
  cognite/neat/_utils/time_.py,sha256=O30LUiDH9TdOYz8_a9pFqTtJdg8vEjC3qHCk8xZblG8,345
171
171
  cognite/neat/_utils/upload.py,sha256=iWKmsQgw4EHLv-11NjYu7zAj5LtqTAfNa87a1kWeuaU,5727
172
172
  cognite/neat/_utils/xml_.py,sha256=FQkq84u35MUsnKcL6nTMJ9ajtG9D5i1u4VBnhGqP2DQ,1710
173
- cognite/neat/_version.py,sha256=ZdP8OHYaYjC3n9FoYFk-2lJvFDOhdAi2zKtn9SR_Jlg,46
173
+ cognite/neat/_version.py,sha256=jWs7dXFPYMcNh2DTNiuA6jFiNNxY_5JWElO8H2VTVfY,46
174
174
  cognite/neat/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
- cognite_neat-0.105.2.dist-info/LICENSE,sha256=W8VmvFia4WHa3Gqxq1Ygrq85McUNqIGDVgtdvzT-XqA,11351
176
- cognite_neat-0.105.2.dist-info/METADATA,sha256=R9RyL5gu5s7rtLz7uNaNREc0tzMCu0DyGIBL5AHjk5w,5759
177
- cognite_neat-0.105.2.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
178
- cognite_neat-0.105.2.dist-info/entry_points.txt,sha256=SsQlnl8SNMSSjE3acBI835JYFtsIinLSbVmHmMEXv6E,51
179
- cognite_neat-0.105.2.dist-info/RECORD,,
175
+ cognite_neat-0.106.0.dist-info/LICENSE,sha256=W8VmvFia4WHa3Gqxq1Ygrq85McUNqIGDVgtdvzT-XqA,11351
176
+ cognite_neat-0.106.0.dist-info/METADATA,sha256=WEAC8ydzyYveGV3mP8SFMIRV5qMWkv2QbNln_pT1hvk,5349
177
+ cognite_neat-0.106.0.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
178
+ cognite_neat-0.106.0.dist-info/entry_points.txt,sha256=SsQlnl8SNMSSjE3acBI835JYFtsIinLSbVmHmMEXv6E,51
179
+ cognite_neat-0.106.0.dist-info/RECORD,,