cognite-neat 0.100.1__py3-none-any.whl → 0.101.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.
Potentially problematic release.
This version of cognite-neat might be problematic. Click here for more details.
- cognite/neat/_graph/loaders/_rdf2dms.py +0 -1
- cognite/neat/_graph/transformers/__init__.py +5 -0
- cognite/neat/_graph/transformers/_iodd.py +9 -4
- cognite/neat/_graph/transformers/_prune_graph.py +118 -61
- cognite/neat/_rules/exporters/_rules2dms.py +35 -13
- cognite/neat/_rules/models/_base_rules.py +13 -9
- cognite/neat/_rules/models/dms/_rules.py +111 -39
- cognite/neat/_rules/models/information/_rules.py +50 -17
- cognite/neat/_session/_base.py +18 -0
- cognite/neat/_session/_read.py +3 -3
- cognite/neat/_session/_to.py +1 -1
- cognite/neat/_utils/reader/__init__.py +2 -2
- cognite/neat/_utils/reader/_base.py +40 -35
- cognite/neat/_utils/text.py +12 -0
- cognite/neat/_version.py +1 -1
- cognite_neat-0.101.0.dist-info/METADATA +113 -0
- {cognite_neat-0.100.1.dist-info → cognite_neat-0.101.0.dist-info}/RECORD +20 -20
- cognite_neat-0.100.1.dist-info/METADATA +0 -215
- {cognite_neat-0.100.1.dist-info → cognite_neat-0.101.0.dist-info}/LICENSE +0 -0
- {cognite_neat-0.100.1.dist-info → cognite_neat-0.101.0.dist-info}/WHEEL +0 -0
- {cognite_neat-0.100.1.dist-info → cognite_neat-0.101.0.dist-info}/entry_points.txt +0 -0
|
@@ -68,10 +68,16 @@ class InformationClass(SheetRow):
|
|
|
68
68
|
implements: Which classes the current class implements.
|
|
69
69
|
"""
|
|
70
70
|
|
|
71
|
-
class_: ClassEntityType = Field(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
class_: ClassEntityType = Field(
|
|
72
|
+
alias="Class", description="Class id being defined, use strongly advise `PascalCase` usage."
|
|
73
|
+
)
|
|
74
|
+
name: str | None = Field(alias="Name", default=None, description="Human readable name of the class.")
|
|
75
|
+
description: str | None = Field(alias="Description", default=None, description="Short description of the class.")
|
|
76
|
+
implements: ClassEntityList | None = Field(
|
|
77
|
+
alias="Implements",
|
|
78
|
+
default=None,
|
|
79
|
+
description="List of classes (comma separated) that the current class implements (parents).",
|
|
80
|
+
)
|
|
75
81
|
|
|
76
82
|
physical: URIRefType | None = Field(
|
|
77
83
|
None,
|
|
@@ -119,17 +125,40 @@ class InformationProperty(SheetRow):
|
|
|
119
125
|
knowledge graph. Defaults to None (no transformation)
|
|
120
126
|
"""
|
|
121
127
|
|
|
122
|
-
class_: ClassEntityType = Field(
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
128
|
+
class_: ClassEntityType = Field(
|
|
129
|
+
alias="Class", description="Class id that the property is defined for, strongly advise `PascalCase` usage."
|
|
130
|
+
)
|
|
131
|
+
property_: InformationPropertyType = Field(
|
|
132
|
+
alias="Property", description="Property id, strongly advised to `camelCase` usage."
|
|
133
|
+
)
|
|
134
|
+
name: str | None = Field(alias="Name", default=None, description="Human readable name of the property.")
|
|
135
|
+
description: str | None = Field(alias="Description", default=None, description="Short description of the property.")
|
|
126
136
|
value_type: DataType | ClassEntityType | MultiValueTypeType | UnknownEntity = Field(
|
|
127
|
-
alias="Value Type",
|
|
137
|
+
alias="Value Type",
|
|
138
|
+
union_mode="left_to_right",
|
|
139
|
+
description="Value type that the property can hold. It takes either subset of XSD type or a class defined.",
|
|
140
|
+
)
|
|
141
|
+
min_count: int | None = Field(
|
|
142
|
+
alias="Min Count",
|
|
143
|
+
default=None,
|
|
144
|
+
description="Minimum number of values that the property can hold. "
|
|
145
|
+
"If no value is provided, the default value is `0`, "
|
|
146
|
+
"which means that the property is optional.",
|
|
147
|
+
)
|
|
148
|
+
max_count: int | float | None = Field(
|
|
149
|
+
alias="Max Count",
|
|
150
|
+
default=None,
|
|
151
|
+
description="Maximum number of values that the property can hold. "
|
|
152
|
+
"If no value is provided, the default value is `inf`, "
|
|
153
|
+
"which means that the property can hold any number of values (listable).",
|
|
154
|
+
)
|
|
155
|
+
default: Any | None = Field(alias="Default", default=None, description="Default value of the property.")
|
|
156
|
+
transformation: RDFPath | None = Field(
|
|
157
|
+
alias="Transformation",
|
|
158
|
+
default=None,
|
|
159
|
+
description="The rule that is used to populate the data model. "
|
|
160
|
+
"The rule is provided in a RDFPath query syntax which is converted to downstream solution query (e.g. SPARQL).",
|
|
128
161
|
)
|
|
129
|
-
min_count: int | None = Field(alias="Min Count", default=None)
|
|
130
|
-
max_count: int | float | None = Field(alias="Max Count", default=None)
|
|
131
|
-
default: Any | None = Field(alias="Default", default=None)
|
|
132
|
-
transformation: RDFPath | None = Field(alias="Transformation", default=None)
|
|
133
162
|
inherited: bool = Field(
|
|
134
163
|
default=False,
|
|
135
164
|
exclude=True,
|
|
@@ -221,10 +250,14 @@ class InformationProperty(SheetRow):
|
|
|
221
250
|
|
|
222
251
|
|
|
223
252
|
class InformationRules(BaseRules):
|
|
224
|
-
metadata: InformationMetadata = Field(alias="Metadata")
|
|
225
|
-
properties: SheetList[InformationProperty] = Field(alias="Properties")
|
|
226
|
-
classes: SheetList[InformationClass] = Field(alias="Classes")
|
|
227
|
-
prefixes: dict[str, Namespace] = Field(
|
|
253
|
+
metadata: InformationMetadata = Field(alias="Metadata", description="Metadata for the logical data model")
|
|
254
|
+
properties: SheetList[InformationProperty] = Field(alias="Properties", description="List of properties")
|
|
255
|
+
classes: SheetList[InformationClass] = Field(alias="Classes", description="List of classes")
|
|
256
|
+
prefixes: dict[str, Namespace] = Field(
|
|
257
|
+
alias="Prefixes",
|
|
258
|
+
default_factory=get_default_prefixes,
|
|
259
|
+
description="the definition of the prefixes that are used in the semantic data model",
|
|
260
|
+
)
|
|
228
261
|
|
|
229
262
|
@field_validator("prefixes", mode="before")
|
|
230
263
|
def parse_str(cls, values: Any) -> Any:
|
cognite/neat/_session/_base.py
CHANGED
|
@@ -38,6 +38,24 @@ from .exceptions import NeatSessionError, session_class_wrapper
|
|
|
38
38
|
|
|
39
39
|
@session_class_wrapper
|
|
40
40
|
class NeatSession:
|
|
41
|
+
"""Creates a new NeatSession.
|
|
42
|
+
|
|
43
|
+
This is the main entry point for using Neat. It provides access to the different APIs that can be used to read,
|
|
44
|
+
write, and manipulate data and data models.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
client: The CogniteClient to use for reading and writing data.
|
|
48
|
+
storage: The storage type to use for storing data and data models. Can be either "memory" or "oxigraph".
|
|
49
|
+
In "memory" mode works well for small data sets and when only working with data models. It is works
|
|
50
|
+
well for all notebook environments. In "oxigraph" mode, the data is stored in an Oxigraph database. This
|
|
51
|
+
is more performant for larger data sets and when working with data. Note that this option requires
|
|
52
|
+
additional dependencies to be installed and is not available in CDF Notebooks.
|
|
53
|
+
verbose: Whether to print information about the operations being performed.
|
|
54
|
+
load_engine: Whether to load the Neat Engine. Can be "newest", "cache", or "skip". "newest" will always
|
|
55
|
+
check for the newest version of the engine. "cache" will load the engine if it has been downloaded before.
|
|
56
|
+
"skip" will not load the engine.
|
|
57
|
+
"""
|
|
58
|
+
|
|
41
59
|
def __init__(
|
|
42
60
|
self,
|
|
43
61
|
client: CogniteClient | None = None,
|
cognite/neat/_session/_read.py
CHANGED
|
@@ -17,7 +17,7 @@ from cognite.neat._rules.importers import BaseImporter
|
|
|
17
17
|
from cognite.neat._store._provenance import Activity as ProvenanceActivity
|
|
18
18
|
from cognite.neat._store._provenance import Change
|
|
19
19
|
from cognite.neat._store._provenance import Entity as ProvenanceEntity
|
|
20
|
-
from cognite.neat._utils.reader import GitHubReader, NeatReader, PathReader
|
|
20
|
+
from cognite.neat._utils.reader import GitHubReader, HttpFileReader, NeatReader, PathReader
|
|
21
21
|
|
|
22
22
|
from ._state import SessionState
|
|
23
23
|
from ._wizard import NeatObjectType, RDFFileType, XMLFileType, object_wizard, rdf_dm_wizard, xml_format_wizard
|
|
@@ -244,9 +244,9 @@ class YamlReadAPI(BaseReadAPI):
|
|
|
244
244
|
class CSVReadAPI(BaseReadAPI):
|
|
245
245
|
def __call__(self, io: Any, type: str, primary_key: str) -> None:
|
|
246
246
|
reader = NeatReader.create(io)
|
|
247
|
-
if isinstance(reader,
|
|
247
|
+
if isinstance(reader, HttpFileReader):
|
|
248
248
|
path = Path(tempfile.gettempdir()).resolve() / reader.name
|
|
249
|
-
path.write_text(reader.read_text())
|
|
249
|
+
path.write_text(reader.read_text(), encoding="utf-8", newline="\n")
|
|
250
250
|
elif isinstance(reader, PathReader):
|
|
251
251
|
path = reader.path
|
|
252
252
|
else:
|
cognite/neat/_session/_to.py
CHANGED
|
@@ -150,7 +150,7 @@ class CDFToAPI:
|
|
|
150
150
|
- "skip": If any component already exists, it will be skipped.
|
|
151
151
|
- "update": If any component already exists, it will be updated.
|
|
152
152
|
- "force": If any component already exists, and the update fails, it will be deleted and recreated.
|
|
153
|
-
- "recreate": All components will be deleted and recreated.
|
|
153
|
+
- "recreate": All components will be deleted and recreated. The exception is spaces, which will be updated.
|
|
154
154
|
|
|
155
155
|
"""
|
|
156
156
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
from ._base import GitHubReader, NeatReader, PathReader
|
|
1
|
+
from ._base import GitHubReader, HttpFileReader, NeatReader, PathReader
|
|
2
2
|
|
|
3
|
-
__all__ = ["NeatReader", "PathReader", "GitHubReader"]
|
|
3
|
+
__all__ = ["NeatReader", "PathReader", "GitHubReader", "HttpFileReader"]
|
|
@@ -17,6 +17,8 @@ class NeatReader(ABC):
|
|
|
17
17
|
url = urlparse(io)
|
|
18
18
|
if url.scheme == "https" and url.netloc.endswith("github.com"):
|
|
19
19
|
return GitHubReader(io)
|
|
20
|
+
elif url.scheme == "https":
|
|
21
|
+
return HttpFileReader(io, url.path)
|
|
20
22
|
|
|
21
23
|
if isinstance(io, str | Path):
|
|
22
24
|
return PathReader(Path(io))
|
|
@@ -94,12 +96,10 @@ class PathReader(NeatReader):
|
|
|
94
96
|
return self.path.exists()
|
|
95
97
|
|
|
96
98
|
|
|
97
|
-
class
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
self.raw = raw
|
|
102
|
-
self.repo, self.path = self._parse_url(raw)
|
|
99
|
+
class HttpFileReader(NeatReader):
|
|
100
|
+
def __init__(self, url: str, path: str):
|
|
101
|
+
self._url = url
|
|
102
|
+
self.path = path
|
|
103
103
|
|
|
104
104
|
@property
|
|
105
105
|
def name(self) -> str:
|
|
@@ -107,9 +107,40 @@ class GitHubReader(NeatReader):
|
|
|
107
107
|
return self.path.rsplit("/", maxsplit=1)[-1]
|
|
108
108
|
return self.path
|
|
109
109
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
110
|
+
def read_text(self) -> str:
|
|
111
|
+
response = requests.get(self._url)
|
|
112
|
+
response.raise_for_status()
|
|
113
|
+
return response.text
|
|
114
|
+
|
|
115
|
+
def size(self) -> int:
|
|
116
|
+
response = requests.head(self._url)
|
|
117
|
+
response.raise_for_status()
|
|
118
|
+
return int(response.headers["Content-Length"])
|
|
119
|
+
|
|
120
|
+
def iterate(self, chunk_size: int) -> Iterable[str]:
|
|
121
|
+
with requests.get(self._url, stream=True) as response:
|
|
122
|
+
response.raise_for_status()
|
|
123
|
+
for chunk in response.iter_content(chunk_size):
|
|
124
|
+
yield chunk.decode("utf-8")
|
|
125
|
+
|
|
126
|
+
def __enter__(self) -> IO:
|
|
127
|
+
return StringIO(self.read_text())
|
|
128
|
+
|
|
129
|
+
def __str__(self) -> str:
|
|
130
|
+
return self._url
|
|
131
|
+
|
|
132
|
+
def exists(self) -> bool:
|
|
133
|
+
response = requests.head(self._url)
|
|
134
|
+
return 200 <= response.status_code < 400
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
class GitHubReader(HttpFileReader):
|
|
138
|
+
raw_url = "https://raw.githubusercontent.com/"
|
|
139
|
+
|
|
140
|
+
def __init__(self, raw: str):
|
|
141
|
+
self.raw = raw
|
|
142
|
+
self.repo, path = self._parse_url(raw)
|
|
143
|
+
super().__init__(f"{self.raw_url}{self.repo}/main/{path}", path)
|
|
113
144
|
|
|
114
145
|
@staticmethod
|
|
115
146
|
def _parse_url(url: str) -> tuple[str, str]:
|
|
@@ -134,29 +165,3 @@ class GitHubReader(NeatReader):
|
|
|
134
165
|
|
|
135
166
|
def __str__(self) -> str:
|
|
136
167
|
return self.raw
|
|
137
|
-
|
|
138
|
-
def read_text(self) -> str:
|
|
139
|
-
response = requests.get(self._full_url)
|
|
140
|
-
response.raise_for_status()
|
|
141
|
-
return response.text
|
|
142
|
-
|
|
143
|
-
def size(self) -> int:
|
|
144
|
-
response = requests.head(self._full_url)
|
|
145
|
-
response.raise_for_status()
|
|
146
|
-
return int(response.headers["Content-Length"])
|
|
147
|
-
|
|
148
|
-
def iterate(self, chunk_size: int) -> Iterable[str]:
|
|
149
|
-
with requests.get(self._full_url, stream=True) as response:
|
|
150
|
-
response.raise_for_status()
|
|
151
|
-
for chunk in response.iter_content(chunk_size):
|
|
152
|
-
yield chunk.decode("utf-8")
|
|
153
|
-
|
|
154
|
-
def __enter__(self) -> IO:
|
|
155
|
-
return StringIO(self.read_text())
|
|
156
|
-
|
|
157
|
-
def __exit__(self, exc_type, exc_value, traceback) -> None:
|
|
158
|
-
pass
|
|
159
|
-
|
|
160
|
-
def exists(self) -> bool:
|
|
161
|
-
response = requests.head(self._full_url)
|
|
162
|
-
return 200 <= response.status_code < 400
|
cognite/neat/_utils/text.py
CHANGED
|
@@ -106,6 +106,18 @@ def to_snake(string: str) -> str:
|
|
|
106
106
|
return "_".join(map(str.lower, words))
|
|
107
107
|
|
|
108
108
|
|
|
109
|
+
def sentence_or_string_to_camel(string: str) -> str:
|
|
110
|
+
# Could be a combination of kebab and pascal/camel case
|
|
111
|
+
if " " in string:
|
|
112
|
+
parts = string.split(" ")
|
|
113
|
+
try:
|
|
114
|
+
return parts[0].casefold() + "".join(word.capitalize() for word in parts[1:])
|
|
115
|
+
except IndexError:
|
|
116
|
+
return ""
|
|
117
|
+
else:
|
|
118
|
+
return to_camel(string)
|
|
119
|
+
|
|
120
|
+
|
|
109
121
|
def replace_non_alphanumeric_with_underscore(text: str) -> str:
|
|
110
122
|
return re.sub(r"\W+", "_", text)
|
|
111
123
|
|
cognite/neat/_version.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
__version__ = "0.
|
|
1
|
+
__version__ = "0.101.0"
|
|
2
2
|
__engine__ = "^2.0.1"
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: cognite-neat
|
|
3
|
+
Version: 0.101.0
|
|
4
|
+
Summary: Knowledge graph transformation
|
|
5
|
+
Home-page: https://cognite-neat.readthedocs-hosted.com/
|
|
6
|
+
License: Apache-2.0
|
|
7
|
+
Author: Nikola Vasiljevic
|
|
8
|
+
Author-email: nikola.vasiljevic@cognite.com
|
|
9
|
+
Requires-Python: >=3.10,<4.0
|
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Provides-Extra: all
|
|
17
|
+
Provides-Extra: docs
|
|
18
|
+
Provides-Extra: google
|
|
19
|
+
Provides-Extra: oxi
|
|
20
|
+
Provides-Extra: service
|
|
21
|
+
Requires-Dist: PyYAML
|
|
22
|
+
Requires-Dist: backports.strenum (>=1.2,<2.0) ; python_version < "3.11"
|
|
23
|
+
Requires-Dist: cognite-sdk (>=7.54.6,<8.0.0)
|
|
24
|
+
Requires-Dist: elementpath (>=4.0.0,<5.0.0)
|
|
25
|
+
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
|
+
Requires-Dist: google-api-python-client ; extra == "google"
|
|
28
|
+
Requires-Dist: google-auth-oauthlib ; extra == "google"
|
|
29
|
+
Requires-Dist: gspread ; extra == "google"
|
|
30
|
+
Requires-Dist: jsonpath-python (>=1.0.6,<2.0.0)
|
|
31
|
+
Requires-Dist: lxml (>=5.3.0,<6.0.0) ; extra == "all"
|
|
32
|
+
Requires-Dist: mixpanel (>=4.10.1,<5.0.0)
|
|
33
|
+
Requires-Dist: mkdocs ; extra == "docs"
|
|
34
|
+
Requires-Dist: mkdocs-autorefs (>=0.5.0,<0.6.0) ; extra == "docs"
|
|
35
|
+
Requires-Dist: mkdocs-git-authors-plugin ; extra == "docs"
|
|
36
|
+
Requires-Dist: mkdocs-git-revision-date-localized-plugin ; extra == "docs"
|
|
37
|
+
Requires-Dist: mkdocs-gitbook ; extra == "docs"
|
|
38
|
+
Requires-Dist: mkdocs-glightbox ; extra == "docs"
|
|
39
|
+
Requires-Dist: mkdocs-jupyter ; extra == "docs"
|
|
40
|
+
Requires-Dist: mkdocs-material-extensions ; extra == "docs"
|
|
41
|
+
Requires-Dist: mkdocstrings[python] ; extra == "docs"
|
|
42
|
+
Requires-Dist: networkx (>=3.4.2,<4.0.0)
|
|
43
|
+
Requires-Dist: openpyxl
|
|
44
|
+
Requires-Dist: oxrdflib[oxigraph] (>=0.4.0,<0.5.0) ; extra == "oxi" or extra == "all"
|
|
45
|
+
Requires-Dist: packaging (>=22.0,<25.0)
|
|
46
|
+
Requires-Dist: pandas
|
|
47
|
+
Requires-Dist: prometheus-client (>=0,<1) ; extra == "service" or extra == "all"
|
|
48
|
+
Requires-Dist: pydantic (>=2,<3)
|
|
49
|
+
Requires-Dist: pymdown-extensions ; extra == "docs"
|
|
50
|
+
Requires-Dist: pyoxigraph (==0.4.3) ; extra == "oxi" or extra == "all"
|
|
51
|
+
Requires-Dist: python-multipart (==0.0.9) ; extra == "service" or extra == "all"
|
|
52
|
+
Requires-Dist: pyvis (>=0.3.2,<0.4.0)
|
|
53
|
+
Requires-Dist: rdflib
|
|
54
|
+
Requires-Dist: requests
|
|
55
|
+
Requires-Dist: rich[jupyter] (>=13.7.1,<14.0.0)
|
|
56
|
+
Requires-Dist: schedule (>=1,<2) ; extra == "service" or extra == "all"
|
|
57
|
+
Requires-Dist: tomli (>=2.0.1,<3.0.0) ; python_version < "3.11"
|
|
58
|
+
Requires-Dist: typing_extensions (>=4.8,<5.0) ; python_version < "3.11"
|
|
59
|
+
Requires-Dist: urllib3 (>=2,<3)
|
|
60
|
+
Requires-Dist: uvicorn[standard] (>=0,<1) ; extra == "service" or extra == "all"
|
|
61
|
+
Project-URL: Documentation, https://cognite-neat.readthedocs-hosted.com/
|
|
62
|
+
Project-URL: Repository, https://github.com/cognitedata/neat
|
|
63
|
+
Description-Content-Type: text/markdown
|
|
64
|
+
|
|
65
|
+
# kNowlEdge grAph Transformer (NEAT)
|
|
66
|
+
|
|
67
|
+
[](https://github.com/cognitedata/neat/actions/workflows/release.yaml)
|
|
68
|
+
[](https://cognite-neat.readthedocs-hosted.com/en/latest/?badge=latest)
|
|
69
|
+
[](https://github.com/cognitedata/neat)
|
|
70
|
+
[](https://pypi.org/project/cognite-neat/)
|
|
71
|
+
[](https://pypistats.org/packages/cognite-neat)
|
|
72
|
+
[](https://hub.docker.com/r/cognite/neat)
|
|
73
|
+
[](https://github.com/cognitedata/neat/blob/master/LICENSE)
|
|
74
|
+
[](https://github.com/ambv/black)
|
|
75
|
+
[](https://github.com/astral-sh/ruff)
|
|
76
|
+
[](http://mypy-lang.org)
|
|
77
|
+
|
|
78
|
+
NEAT is a domain expert centric and developer friendly solution for rapid:
|
|
79
|
+
|
|
80
|
+
- semantic data modeling
|
|
81
|
+
- creation, transformation and enrichment of knowledge graphs
|
|
82
|
+
- and ingestion of the models and graphs into [Cognite Data Fusion](https://www.cognite.com/en/product/cognite_data_fusion_industrial_dataops_platform)
|
|
83
|
+
|
|
84
|
+
NEAT is using open and globally recognized standards maintained by the [World Wide Web Consortium (W3C)](https://www.w3.org/RDF/).
|
|
85
|
+
NEAT represents an essential tool for creation of standardized, machine-actionable, linked and semantic (meta)data.
|
|
86
|
+
|
|
87
|
+
> NEAT is an acronym derived from k**N**owl**Ed**ge gr**A**ph **T**ransformer hallucinated by GenAI.
|
|
88
|
+
|
|
89
|
+
## Installation
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
pip install cognite-neat
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Usage
|
|
96
|
+
|
|
97
|
+
The user interface for `NEAT` is a notebook-based environment. Once you have set up your notebook
|
|
98
|
+
environment, you start by creating a `CogniteClient` and instantiate a `NeatSession` object.
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
from cognite.neat import NeatSession, get_cognite_client
|
|
102
|
+
|
|
103
|
+
client = get_cognite_client(".env")
|
|
104
|
+
|
|
105
|
+
neat = NeatSession(client)
|
|
106
|
+
|
|
107
|
+
neat.read.cdf.data_model(("my_space", "MyDataModel", "v1"))
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Documentation
|
|
111
|
+
|
|
112
|
+
For more information, see the [documentation](https://cognite-neat.readthedocs-hosted.com/en/latest/)
|
|
113
|
+
|
|
@@ -110,16 +110,16 @@ cognite/neat/_graph/extractors/_mock_graph_generator.py,sha256=yEqQdbnRQjBXVQIEV
|
|
|
110
110
|
cognite/neat/_graph/extractors/_rdf_file.py,sha256=YgPZN4Ayk6UlbwFFjdWn4Yo3P74D8KeNUb3slXg6Ox8,1604
|
|
111
111
|
cognite/neat/_graph/loaders/__init__.py,sha256=1eam_rG1BXTUJ8iDm8_IYZldEe177vn2GmHihDBi8qk,718
|
|
112
112
|
cognite/neat/_graph/loaders/_base.py,sha256=tjplRd-vbWhWyys0Ll3KgHR3F3ETlP_dXJ3e8F8w15M,3984
|
|
113
|
-
cognite/neat/_graph/loaders/_rdf2dms.py,sha256=
|
|
113
|
+
cognite/neat/_graph/loaders/_rdf2dms.py,sha256=6EaCnwnnFA8Vye8Ph439yTtbJCP_NGNpBD24XLc7PQA,17437
|
|
114
114
|
cognite/neat/_graph/queries/__init__.py,sha256=BgDd-037kvtWwAoGAy8eORVNMiZ5-E9sIV0txIpeaN4,50
|
|
115
115
|
cognite/neat/_graph/queries/_base.py,sha256=dKEk8TDYUxIc71peqD9TfHHoILG9cKzjkFp7CAkbF78,14246
|
|
116
116
|
cognite/neat/_graph/queries/_construct.py,sha256=CW8uHtXXACUXDj1AcEjROXtvoiuyx0CTgZ0bURY5Neo,7213
|
|
117
117
|
cognite/neat/_graph/queries/_shared.py,sha256=K3svLkvw-DWPZUwIwpJRjPKg5UIRKFCn5jBLpuJjiHc,5330
|
|
118
|
-
cognite/neat/_graph/transformers/__init__.py,sha256=
|
|
118
|
+
cognite/neat/_graph/transformers/__init__.py,sha256=82a7rV6bGhOc5iAznBOtlQOMWxgi0KpGXYV4zh4HnsE,1187
|
|
119
119
|
cognite/neat/_graph/transformers/_base.py,sha256=b37Ek-9njuM5pTR_3XhnxCMrg_ip_2BMwM7ZhKpAAlw,328
|
|
120
120
|
cognite/neat/_graph/transformers/_classic_cdf.py,sha256=8vzvoHH2YJMg2mMTEH_ASGWn1Maars1N1RZ9jWhLTkY,19291
|
|
121
|
-
cognite/neat/_graph/transformers/_iodd.py,sha256=
|
|
122
|
-
cognite/neat/_graph/transformers/_prune_graph.py,sha256=
|
|
121
|
+
cognite/neat/_graph/transformers/_iodd.py,sha256=AajIWbCzQcR5ZNz6qSb2dKoNEJOedgEB7L2se94u6qw,863
|
|
122
|
+
cognite/neat/_graph/transformers/_prune_graph.py,sha256=i0YnpfcFq_y_bZIlZJRRZDRzoj5ya9qpnozgUqKOD8o,8220
|
|
123
123
|
cognite/neat/_graph/transformers/_rdfpath.py,sha256=0ZH7d62kfdCyWGrCyY2oJSnGEPsHQd0sMrZAsTibCCI,4155
|
|
124
124
|
cognite/neat/_graph/transformers/_value_type.py,sha256=JorH-AgDXVZUkG_GCcwn51Mw0M2WIOV834t0kF_Nwvo,2614
|
|
125
125
|
cognite/neat/_issues/__init__.py,sha256=IEZBpvL88hdghX7JgndhxcZcxreZowuoQFIXuSeIKDs,556
|
|
@@ -149,7 +149,7 @@ cognite/neat/_rules/catalog/__init__.py,sha256=dzx-DYYJDc861aFiOI5o1FsySD9F1agY8
|
|
|
149
149
|
cognite/neat/_rules/catalog/info-rules-imf.xlsx,sha256=7odm5CoAU72-VTZk_z1u7GbycIb-X-8Yy3mtBGLjhE4,55511
|
|
150
150
|
cognite/neat/_rules/exporters/__init__.py,sha256=jCwXAeyZJv7GNJ3hGG-80gb8LAidozsyFMzdNIsGt_Y,1204
|
|
151
151
|
cognite/neat/_rules/exporters/_base.py,sha256=vadYWb5hVbjiPIhVIzlY6ARisoqhtJa6Ce0ysNHPXQc,1328
|
|
152
|
-
cognite/neat/_rules/exporters/_rules2dms.py,sha256=
|
|
152
|
+
cognite/neat/_rules/exporters/_rules2dms.py,sha256=pwqy0wzLpSh-BNukLOOB12gTVNeCHEPefX5idtTp2sI,17198
|
|
153
153
|
cognite/neat/_rules/exporters/_rules2excel.py,sha256=puFgIf_dolxv38Lkgzl9lDDREWDPdTApqgYCu9H-hf4,11689
|
|
154
154
|
cognite/neat/_rules/exporters/_rules2instance_template.py,sha256=8HM1SkzcucaEYpQi96ncMnL8STArX9Oe09JBhJJAN4I,5810
|
|
155
155
|
cognite/neat/_rules/exporters/_rules2ontology.py,sha256=ioMi1GUhnbvcfVOPb3Z0a24mIEe74AfxySETWMDS9Lc,21776
|
|
@@ -173,13 +173,13 @@ cognite/neat/_rules/importers/_spreadsheet2rules.py,sha256=TI92l_qddRW2JWk3Jbmsv
|
|
|
173
173
|
cognite/neat/_rules/importers/_yaml2rules.py,sha256=5DsEMYo6JVHC_mBOaaR3J6on1rXSpk82plCsrOq5_l8,3144
|
|
174
174
|
cognite/neat/_rules/models/__init__.py,sha256=z1LoPY2X-M8Og8bKcjae2JwQB9yW8Y_ASnkL3Tjwqyg,1024
|
|
175
175
|
cognite/neat/_rules/models/_base_input.py,sha256=qJrxobZLqpc28adEUJTKdJ8hDUZ67SVDFkUJnGjcPOc,6647
|
|
176
|
-
cognite/neat/_rules/models/_base_rules.py,sha256=
|
|
176
|
+
cognite/neat/_rules/models/_base_rules.py,sha256=4JP9jnJFP93kQ1otJSop-xIljTpHmZgNX9RfsQvEBfY,14820
|
|
177
177
|
cognite/neat/_rules/models/_rdfpath.py,sha256=hqUMZCMeI8ESdJltu7FifuUhna5JNN_Heup2aYkV56Y,11882
|
|
178
178
|
cognite/neat/_rules/models/_types.py,sha256=7rh4PVaqI58OTXtoIgZKitmwa5hZlVtk8uX4czlSGFY,5261
|
|
179
179
|
cognite/neat/_rules/models/data_types.py,sha256=LJuWUbStlZM4hUJGExOJIJXmAA4uiA0tvO9zKqLUrQg,9805
|
|
180
180
|
cognite/neat/_rules/models/dms/__init__.py,sha256=r2XGwAjTsAZs-n-oimg40hLUKVpqFGVuAPmfEUCwwRs,695
|
|
181
181
|
cognite/neat/_rules/models/dms/_exporter.py,sha256=eB5uDX06XYkQkON96eykSk7ZCegb9a5dCxTmTIr252c,28020
|
|
182
|
-
cognite/neat/_rules/models/dms/_rules.py,sha256=
|
|
182
|
+
cognite/neat/_rules/models/dms/_rules.py,sha256=xQ8NoSE9D4tMjcEwKn4z7HdF9l_3OR-1xRlH3uamQPM,20186
|
|
183
183
|
cognite/neat/_rules/models/dms/_rules_input.py,sha256=mVW-gHrjjlqFuq82qTkxIaMZ7OlzQFxjopxdlwQergY,12949
|
|
184
184
|
cognite/neat/_rules/models/dms/_validation.py,sha256=TAgNg1rur3PRVPcsm4-BXKV9AHX8AtahN0OhRx3PgyM,27262
|
|
185
185
|
cognite/neat/_rules/models/entities/__init__.py,sha256=QD-h79HhjqCsgscNU5kuf1ieRCE94dOfpujLuzYbtHk,1469
|
|
@@ -190,7 +190,7 @@ cognite/neat/_rules/models/entities/_single_value.py,sha256=dVfqIx3_Agi_LddhsqPO
|
|
|
190
190
|
cognite/neat/_rules/models/entities/_types.py,sha256=df9rnXJJKciv2Bp-Ve2q4xdEJt6WWniq12Z0hW2d6sk,1917
|
|
191
191
|
cognite/neat/_rules/models/entities/_wrapped.py,sha256=FxC8HztW_tUUtuArAOwxyFfkdJnSEB4bgZoNmmmfiPk,7137
|
|
192
192
|
cognite/neat/_rules/models/information/__init__.py,sha256=ex9JOyiZYXefFl9oi1VaHhyUOtYjXWytSmwuq4pqKqc,556
|
|
193
|
-
cognite/neat/_rules/models/information/_rules.py,sha256=
|
|
193
|
+
cognite/neat/_rules/models/information/_rules.py,sha256=F8Tjb_ymOEEkt1k2yDjboS7hCthd0PsVYSZzandATwE,11753
|
|
194
194
|
cognite/neat/_rules/models/information/_rules_input.py,sha256=PdXTPN0QfO4vxN5M4xzaaDwHEQo53RbY_jIr5TfBszY,5443
|
|
195
195
|
cognite/neat/_rules/models/information/_validation.py,sha256=HbaLShj6uumu-t9I3FUI_iKQfUDiwEkuFENHgWIPfrk,10202
|
|
196
196
|
cognite/neat/_rules/models/mapping/__init__.py,sha256=T68Hf7rhiXa7b03h4RMwarAmkGnB-Bbhc1H07b2PyC4,100
|
|
@@ -203,17 +203,17 @@ cognite/neat/_rules/transformers/_mapping.py,sha256=gMkLHeMWTvQJZV-YLMQm0pirnd2a
|
|
|
203
203
|
cognite/neat/_rules/transformers/_pipelines.py,sha256=2y786LkNMedmxoozUyvtd-2bfqf6wkX2H8On-m2Ucsw,2618
|
|
204
204
|
cognite/neat/_rules/transformers/_verification.py,sha256=M4-Cr3vTm3PZyHSjW-odbOqbY5g0hiRjERDjvLgYbxU,3907
|
|
205
205
|
cognite/neat/_session/__init__.py,sha256=fxQ5URVlUnmEGYyB8Baw7IDq-uYacqkigbc4b-Pr9Fw,58
|
|
206
|
-
cognite/neat/_session/_base.py,sha256=
|
|
206
|
+
cognite/neat/_session/_base.py,sha256=93FJAYYdXvg2cpzL-rVCFdIivFIafb2OtMhr5zrkcyE,11696
|
|
207
207
|
cognite/neat/_session/_collector.py,sha256=zS5JxLIYnAWV-dBzF6WgUfo662iYSzEyDhtnMv-Zibs,4002
|
|
208
208
|
cognite/neat/_session/_drop.py,sha256=XlEaKb_HpqI5EQuUuUFjcf3Qx6BfcBBWdqqGdwkGhmE,1137
|
|
209
209
|
cognite/neat/_session/_inspect.py,sha256=s3R6vz8HbqZSdknyXTSkmA3JvvInlQF5yNKECTA-I1w,7264
|
|
210
210
|
cognite/neat/_session/_mapping.py,sha256=MZ_xRhapc2mVwM-W3tda2zZGaPncj_ZqnzuasvY05po,6109
|
|
211
211
|
cognite/neat/_session/_prepare.py,sha256=_jU0TJWLcg727wKh8NK3a-5duVnRkGJrnkNxLO_D83Q,21883
|
|
212
|
-
cognite/neat/_session/_read.py,sha256=
|
|
212
|
+
cognite/neat/_session/_read.py,sha256=Kfq1RAT5soXSI7vgxY-HN-GjMzAW5RZQD9E7JiuKBmU,15152
|
|
213
213
|
cognite/neat/_session/_set.py,sha256=NY0Vz8xD_a-UA8qWE1GFxHdmBl1BkT1KHQehQVKUorI,1914
|
|
214
214
|
cognite/neat/_session/_show.py,sha256=_ev_Z41rkW4nlvhLf69PmttggKksnkCchOow7CmICyU,14124
|
|
215
215
|
cognite/neat/_session/_state.py,sha256=rqKHkikagO1pf_fKpY-LZI1X5R_v6AyYpV72_3eSduM,5783
|
|
216
|
-
cognite/neat/_session/_to.py,sha256=
|
|
216
|
+
cognite/neat/_session/_to.py,sha256=PjS3avL0a4SmarMgfxJrsjAA45gMZ_1wX9RcKSSvKXk,7413
|
|
217
217
|
cognite/neat/_session/_wizard.py,sha256=O8d0FA87RIoiTOD2KLyTVsxwA2-ewAG2By4JfxXSL84,1474
|
|
218
218
|
cognite/neat/_session/engine/__init__.py,sha256=aeI5pzljU5n1B-SVu3LwjYVsN1tSVhnJj-4ddflEo4U,120
|
|
219
219
|
cognite/neat/_session/engine/_import.py,sha256=1QxA2_EK613lXYAHKQbZyw2yjo5P9XuiX4Z6_6-WMNQ,169
|
|
@@ -229,14 +229,14 @@ cognite/neat/_utils/auth.py,sha256=UbFNq4BIqxc1459xJtI1FZz91K5XEMkfY5cfpBHyUHU,1
|
|
|
229
229
|
cognite/neat/_utils/auxiliary.py,sha256=WFOycFgoYipvDmtGvn6ZNH3H8iNZmHamrfe2kXRb8lM,6667
|
|
230
230
|
cognite/neat/_utils/collection_.py,sha256=Q_LN1qypr0SeAV3dAR5KLD1szHNohSdYxyA8hr3n4T8,1433
|
|
231
231
|
cognite/neat/_utils/rdf_.py,sha256=_nmZqo6_Ef7Aep0kXR_uoiRxGQR2u5lMK4g5mxWneeY,8586
|
|
232
|
-
cognite/neat/_utils/reader/__init__.py,sha256=
|
|
233
|
-
cognite/neat/_utils/reader/_base.py,sha256=
|
|
232
|
+
cognite/neat/_utils/reader/__init__.py,sha256=bTYNMnlcCDSFWAcbj7j_r1pU3CnFM7lXeXXfo6acokA,146
|
|
233
|
+
cognite/neat/_utils/reader/_base.py,sha256=mk_kZDnfg5LcvYJr5IiBosYwbF82mLWo1p1Wq3K2p_Y,4681
|
|
234
234
|
cognite/neat/_utils/spreadsheet.py,sha256=LI0c7dlW0zXHkHw0NvB-gg6Df6cDcE3FbiaHBYLXdzQ,2714
|
|
235
|
-
cognite/neat/_utils/text.py,sha256=
|
|
235
|
+
cognite/neat/_utils/text.py,sha256=0IffvBIAmeGh92F4T6xiEdd-vv3B7FOGEMbfuTktO5Y,4017
|
|
236
236
|
cognite/neat/_utils/time_.py,sha256=O30LUiDH9TdOYz8_a9pFqTtJdg8vEjC3qHCk8xZblG8,345
|
|
237
237
|
cognite/neat/_utils/upload.py,sha256=iWKmsQgw4EHLv-11NjYu7zAj5LtqTAfNa87a1kWeuaU,5727
|
|
238
238
|
cognite/neat/_utils/xml_.py,sha256=FQkq84u35MUsnKcL6nTMJ9ajtG9D5i1u4VBnhGqP2DQ,1710
|
|
239
|
-
cognite/neat/_version.py,sha256=
|
|
239
|
+
cognite/neat/_version.py,sha256=YC9egL_60_4y49kwtdUsQ37p_zPCkAdak7ziTTA-JL8,46
|
|
240
240
|
cognite/neat/_workflows/__init__.py,sha256=S0fZq7kvoqDKodHu1UIPsqcpdvXoefUWRPt1lqeQkQs,420
|
|
241
241
|
cognite/neat/_workflows/base.py,sha256=O1pcmfbme2gIVF2eOGrKZSUDmhZc8L9rI8UfvLN2YAM,26839
|
|
242
242
|
cognite/neat/_workflows/cdf_store.py,sha256=3pebnATPo6In4-1srpa3wzstynTOi3T6hwFX5uaie4c,18050
|
|
@@ -265,8 +265,8 @@ cognite/neat/_workflows/tasks.py,sha256=dr2xuIb8P5e5e9p_fjzRlvDbKsre2xGYrkc3wnRx
|
|
|
265
265
|
cognite/neat/_workflows/triggers.py,sha256=u69xOsaTtM8_WD6ZeIIBB-XKwvlZmPHAsZQh_TnyHcM,7073
|
|
266
266
|
cognite/neat/_workflows/utils.py,sha256=gKdy3RLG7ctRhbCRwaDIWpL9Mi98zm56-d4jfHDqP1E,453
|
|
267
267
|
cognite/neat/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
268
|
-
cognite_neat-0.
|
|
269
|
-
cognite_neat-0.
|
|
270
|
-
cognite_neat-0.
|
|
271
|
-
cognite_neat-0.
|
|
272
|
-
cognite_neat-0.
|
|
268
|
+
cognite_neat-0.101.0.dist-info/LICENSE,sha256=W8VmvFia4WHa3Gqxq1Ygrq85McUNqIGDVgtdvzT-XqA,11351
|
|
269
|
+
cognite_neat-0.101.0.dist-info/METADATA,sha256=0qjVPqhZDNDDWTYxyQJS7v2f-JpEu2uQrtbGv4km-7c,5708
|
|
270
|
+
cognite_neat-0.101.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
271
|
+
cognite_neat-0.101.0.dist-info/entry_points.txt,sha256=SsQlnl8SNMSSjE3acBI835JYFtsIinLSbVmHmMEXv6E,51
|
|
272
|
+
cognite_neat-0.101.0.dist-info/RECORD,,
|