linkml-store 0.2.6__py3-none-any.whl → 0.2.10rc1__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 linkml-store might be problematic. Click here for more details.

Files changed (35) hide show
  1. linkml_store/api/client.py +2 -3
  2. linkml_store/api/collection.py +63 -8
  3. linkml_store/api/database.py +20 -3
  4. linkml_store/api/stores/duckdb/duckdb_collection.py +168 -4
  5. linkml_store/api/stores/duckdb/duckdb_database.py +5 -5
  6. linkml_store/api/stores/filesystem/__init__.py +1 -1
  7. linkml_store/api/stores/filesystem/filesystem_database.py +1 -1
  8. linkml_store/api/stores/mongodb/mongodb_collection.py +132 -15
  9. linkml_store/api/stores/mongodb/mongodb_database.py +2 -1
  10. linkml_store/api/stores/neo4j/neo4j_database.py +1 -1
  11. linkml_store/api/stores/solr/solr_collection.py +107 -18
  12. linkml_store/cli.py +201 -21
  13. linkml_store/index/implementations/llm_indexer.py +13 -6
  14. linkml_store/index/indexer.py +9 -5
  15. linkml_store/inference/implementations/llm_inference_engine.py +15 -13
  16. linkml_store/inference/implementations/rag_inference_engine.py +13 -10
  17. linkml_store/inference/implementations/sklearn_inference_engine.py +7 -1
  18. linkml_store/inference/inference_config.py +2 -1
  19. linkml_store/inference/inference_engine.py +1 -1
  20. linkml_store/plotting/__init__.py +5 -0
  21. linkml_store/plotting/cli.py +172 -0
  22. linkml_store/plotting/heatmap.py +356 -0
  23. linkml_store/utils/dat_parser.py +95 -0
  24. linkml_store/utils/enrichment_analyzer.py +217 -0
  25. linkml_store/utils/format_utils.py +124 -3
  26. linkml_store/utils/llm_utils.py +4 -2
  27. linkml_store/utils/object_utils.py +9 -3
  28. linkml_store/utils/pandas_utils.py +1 -1
  29. linkml_store/utils/sql_utils.py +1 -1
  30. linkml_store/utils/vector_utils.py +3 -10
  31. {linkml_store-0.2.6.dist-info → linkml_store-0.2.10rc1.dist-info}/METADATA +3 -1
  32. {linkml_store-0.2.6.dist-info → linkml_store-0.2.10rc1.dist-info}/RECORD +35 -30
  33. {linkml_store-0.2.6.dist-info → linkml_store-0.2.10rc1.dist-info}/WHEEL +1 -1
  34. {linkml_store-0.2.6.dist-info → linkml_store-0.2.10rc1.dist-info}/LICENSE +0 -0
  35. {linkml_store-0.2.6.dist-info → linkml_store-0.2.10rc1.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,6 @@
1
1
  import csv
2
2
  import gzip
3
+ import hashlib
3
4
  import io
4
5
  import json
5
6
  import logging
@@ -29,13 +30,24 @@ class Format(Enum):
29
30
  JSONL = "jsonl"
30
31
  YAML = "yaml"
31
32
  YAMLL = "yamll"
33
+ TOML = "toml"
32
34
  TSV = "tsv"
33
35
  CSV = "csv"
34
36
  XML = "xml"
37
+ TURTLE = "turtle"
38
+ RDFXML = "rdfxml"
39
+ TEXT = "text"
40
+ TEXTLINES = "textlines"
35
41
  OBO = "obo"
42
+ FASTA = "fasta"
43
+ GMT = "gmt"
44
+ DAT = "dat"
45
+ MARKDOWN = "markdown"
36
46
  PKL = "pkl"
37
47
  PYTHON = "python"
38
48
  PARQUET = "parquet"
49
+ HDF5 = "hdf5"
50
+ NETCDF = "netcdf"
39
51
  FORMATTED = "formatted"
40
52
  TABLE = "table"
41
53
  XLSX = "xlsx"
@@ -55,7 +67,12 @@ class Format(Enum):
55
67
  ".yamll": cls.YAMLL,
56
68
  ".tsv": cls.TSV,
57
69
  ".csv": cls.CSV,
70
+ ".txt": cls.TEXT,
58
71
  ".xml": cls.XML,
72
+ ".owx": cls.XML,
73
+ ".owl": cls.RDFXML,
74
+ ".ttl": cls.TURTLE,
75
+ ".md": cls.MARKDOWN,
59
76
  ".py": cls.PYTHON,
60
77
  ".parquet": cls.PARQUET,
61
78
  ".pq": cls.PARQUET,
@@ -122,12 +139,25 @@ def clean_nested_structure(obj):
122
139
  else:
123
140
  return clean_pandas_value(obj)
124
141
 
142
+
125
143
  def process_file(
126
- f: IO, format: Format, expected_type: Optional[Type] = None, header_comment_token: Optional[str] = None
144
+ f: IO,
145
+ format: Format,
146
+ expected_type: Optional[Type] = None,
147
+ header_comment_token: Optional[str] = None,
148
+ format_options: Optional[Dict[str, Any]] = None,
127
149
  ) -> List[Dict[str, Any]]:
128
150
  """
129
151
  Process a single file and return a list of objects.
152
+
153
+ :param f: The file object.
154
+ :param format: The format of the file.
155
+ :param expected_type: The expected type of the objects.
156
+ :param header_comment_token: Token used for header comments to be skipped
157
+ :return:
130
158
  """
159
+ if format_options is None:
160
+ format_options = {}
131
161
  if format == Format.YAMLL:
132
162
  format = Format.YAML
133
163
  expected_type = list
@@ -142,6 +172,14 @@ def process_file(
142
172
  objs = [obj for obj in objs if obj is not None]
143
173
  else:
144
174
  objs = yaml.safe_load(f)
175
+ elif format == Format.TOML:
176
+ import toml
177
+
178
+ objs = toml.load(f)
179
+ if not isinstance(objs, list):
180
+ objs = [objs]
181
+ elif format == Format.TEXTLINES:
182
+ objs = f.readlines()
145
183
  elif format in [Format.TSV, Format.CSV]:
146
184
  if header_comment_token:
147
185
  while True:
@@ -160,14 +198,82 @@ def process_file(
160
198
  elif format == Format.XLSX:
161
199
  xls = pd.ExcelFile(f)
162
200
  objs = {sheet: clean_nested_structure(xls.parse(sheet).to_dict(orient="records")) for sheet in xls.sheet_names}
201
+ elif format == Format.TEXT:
202
+ txt = f.read()
203
+ objs = [
204
+ {
205
+ "name": Path(f.name).name,
206
+ "path": f.name,
207
+ "content": txt,
208
+ "size": len(txt),
209
+ "lines": txt.count("\n") + 1,
210
+ "md5": hashlib.md5(txt.encode()).hexdigest(),
211
+ }
212
+ ]
213
+ elif format == Format.GMT:
214
+ objs = []
215
+ lib_name = Path(f.name).name
216
+ for line in f:
217
+ parts = line.strip().split("\t")
218
+ desc = parts[1]
219
+ objs.append(
220
+ {
221
+ "library": lib_name,
222
+ "uid": f"{lib_name}.{parts[0]}",
223
+ "name": parts[0],
224
+ "description": desc if desc else None,
225
+ "genes": parts[2:],
226
+ }
227
+ )
228
+ elif format == Format.FASTA:
229
+ objs = []
230
+ current_obj = None
231
+ for line in f:
232
+ line = line.strip()
233
+ if line.startswith(">"):
234
+ if current_obj:
235
+ objs.append(current_obj)
236
+ current_obj = {"id": line[1:], "sequence": ""}
237
+ else:
238
+ current_obj["sequence"] += line
239
+ if current_obj:
240
+ objs.append(current_obj)
163
241
  elif format == Format.OBO:
164
242
  blocks = split_document(f.read(), "\n\n")
165
243
  id_pattern = re.compile(r"id: (\S+)")
244
+
166
245
  def get_id(block):
167
246
  m = id_pattern.search(block)
168
247
  return m.group(1) if m else None
248
+
169
249
  objs = [{"id": get_id(block), "content": block} for block in blocks]
170
250
  objs = [obj for obj in objs if obj["id"]]
251
+ elif format == Format.DAT:
252
+ from linkml_store.utils.dat_parser import parse_sib_format
253
+
254
+ _, objs = parse_sib_format(f.read())
255
+ elif format in (Format.RDFXML, Format.TURTLE):
256
+ import lightrdf
257
+
258
+ parser = lightrdf.Parser()
259
+ objs = []
260
+ ext_fmt = "rdfxml"
261
+ if format == Format.TURTLE:
262
+ ext_fmt = "ttl"
263
+ bytesio = io.BytesIO(f.read().encode("utf-8"))
264
+ buffer = io.BufferedReader(bytesio)
265
+ for s, p, o in parser.parse(buffer, base_iri=None, format=ext_fmt):
266
+ obj = {
267
+ "subject": s,
268
+ "predicate": p,
269
+ "object": o,
270
+ }
271
+ if format_options.get("pivot", False):
272
+ obj = {
273
+ "subject": s,
274
+ p: o,
275
+ }
276
+ objs.append(obj)
171
277
  elif format == Format.PARQUET:
172
278
  import pyarrow.parquet as pq
173
279
 
@@ -202,6 +308,7 @@ def load_objects(
202
308
  :param compression: The compression type. Supports 'gz' for gzip and 'tgz' for tar.gz.
203
309
  :param expected_type: The target type to load the objects into, e.g. list
204
310
  :param header_comment_token: Token used for header comments to be skipped
311
+ :param select_query: JSONPath query to select specific objects from the loaded data.
205
312
  :return: A list of dictionaries representing the loaded objects.
206
313
  """
207
314
  if isinstance(file_path, Path):
@@ -290,7 +397,8 @@ def write_output(
290
397
 
291
398
 
292
399
  def render_output(
293
- data: Union[List[Dict[str, Any]], Dict[str, Any], pd.DataFrame], format: Optional[Union[Format, str]] = Format.YAML
400
+ data: Union[List[Dict[str, Any]], Dict[str, Any], pd.DataFrame, List[BaseModel]],
401
+ format: Optional[Union[Format, str]] = Format.YAML,
294
402
  ) -> str:
295
403
  """
296
404
  Render output data in JSON, JSONLines, YAML, CSV, or TSV format.
@@ -323,6 +431,12 @@ def render_output(
323
431
  if isinstance(data, pd.DataFrame):
324
432
  data = data.to_dict(orient="records")
325
433
 
434
+ if isinstance(data, BaseModel):
435
+ data = data.model_dump()
436
+
437
+ if data and isinstance(data, list) and isinstance(data[0], BaseModel):
438
+ data = [d.model_dump() if isinstance(d, BaseModel) else d for d in data]
439
+
326
440
  if isinstance(data, dict) and format in [Format.TSV, Format.CSV]:
327
441
  data = [data]
328
442
 
@@ -335,8 +449,15 @@ def render_output(
335
449
  return "\n".join(json.dumps(obj) for obj in data)
336
450
  elif format == Format.PYTHON:
337
451
  return str(data)
452
+ elif format == Format.MARKDOWN:
453
+
454
+ def as_markdown(obj: dict):
455
+ return "## Object\n\n" + "\n".join([f" * {k}: {v}" for k, v in obj.items()])
456
+
457
+ return "\n\n".join([as_markdown(obj) for obj in data]) if isinstance(data, list) else as_markdown(data)
338
458
  elif format == Format.TABLE:
339
459
  from tabulate import tabulate
460
+
340
461
  return tabulate(pd.DataFrame(data), headers="keys", tablefmt="psql")
341
462
  elif format == Format.YAML:
342
463
  if isinstance(data, list):
@@ -401,4 +522,4 @@ def split_document(doc: str, delimiter: str):
401
522
  :param delimiter: The delimiter.
402
523
  :return: The parts of the document.
403
524
  """
404
- return doc.split(delimiter)
525
+ return doc.split(delimiter)
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Callable, List, Optional, TYPE_CHECKING
2
+ from typing import TYPE_CHECKING, Callable, List, Optional
3
3
 
4
4
  if TYPE_CHECKING:
5
5
  import tiktoken
@@ -76,6 +76,7 @@ def render_formatted_text(
76
76
  return text
77
77
  if not values:
78
78
  raise ValueError(f"Cannot fit text into token limit: {text_length} > {token_limit}")
79
+ # remove last element and try again
79
80
  return render_formatted_text(render_func, values[0:-1], encoding=encoding, token_limit=token_limit)
80
81
 
81
82
 
@@ -104,6 +105,7 @@ def get_token_limit(model_name: str) -> int:
104
105
 
105
106
  def parse_yaml_payload(yaml_str: str, strict=False) -> Optional[dict]:
106
107
  import yaml
108
+
107
109
  if "```" in yaml_str:
108
110
  yaml_str = yaml_str.split("```")[1].strip()
109
111
  if yaml_str.startswith("yaml"):
@@ -114,4 +116,4 @@ def parse_yaml_payload(yaml_str: str, strict=False) -> Optional[dict]:
114
116
  if strict:
115
117
  raise e
116
118
  logger.error(f"Error parsing YAML: {yaml_str}\n{e}")
117
- return None
119
+ return None
@@ -83,15 +83,21 @@ def object_path_get(obj: Union[BaseModel, Dict[str, Any]], path: str, default_va
83
83
  'NA'
84
84
  """
85
85
  if isinstance(obj, BaseModel):
86
- obj = obj.dict()
86
+ obj = obj.model_dump()
87
87
  parts = path.split(".")
88
88
  for part in parts:
89
89
  if "[" in part:
90
90
  key, index = part[:-1].split("[")
91
91
  index = int(index)
92
- obj = obj[key][index]
92
+ if key in obj and obj[key] is not None:
93
+ obj = obj[key][index]
94
+ else:
95
+ return default_value
93
96
  else:
94
- obj = obj.get(part, default_value)
97
+ if isinstance(obj, list):
98
+ obj = [v1.get(part, default_value) for v1 in obj]
99
+ else:
100
+ obj = obj.get(part, default_value)
95
101
  return obj
96
102
 
97
103
 
@@ -56,7 +56,7 @@ def nested_objects_to_dataframe(data: List[Dict[str, Any]]) -> pd.DataFrame:
56
56
 
57
57
 
58
58
  def facet_summary_to_dataframe_unmelted(
59
- facet_summary: Dict[Union[str, Tuple[str, ...]], List[Tuple[Union[str, Tuple[str, ...]], int]]]
59
+ facet_summary: Dict[Union[str, Tuple[str, ...]], List[Tuple[Union[str, Tuple[str, ...]], int]]],
60
60
  ) -> pd.DataFrame:
61
61
  rows = []
62
62
 
@@ -116,7 +116,7 @@ def facet_count_sql(query: Query, facet_column: Union[str, Tuple[str, ...]], mul
116
116
  modified_where = " AND ".join(conditions)
117
117
 
118
118
  def make_col_safe(col):
119
- return '"' + quoted_name(col, True) + '"' if ' ' in col else col
119
+ return '"' + quoted_name(col, True) + '"' if " " in col else col
120
120
 
121
121
  if isinstance(facet_column, str):
122
122
  facet_column = make_col_safe(facet_column)
@@ -8,6 +8,7 @@ logger = logging.getLogger(__name__)
8
8
 
9
9
  LOL = List[List[float]]
10
10
 
11
+
11
12
  def pairwise_cosine_similarity(vector1: np.array, vector2: np.array) -> float:
12
13
  """
13
14
  Calculate the cosine similarity between two vectors.
@@ -77,9 +78,7 @@ def top_matches(cosine_similarity_matrix: np.ndarray) -> Tuple[np.ndarray, np.nd
77
78
  return top_match_indices, top_match_values
78
79
 
79
80
 
80
- def top_n_matches(
81
- cosine_similarity_matrix: np.ndarray, n: int = 10
82
- ) -> Tuple[np.ndarray, np.ndarray]:
81
+ def top_n_matches(cosine_similarity_matrix: np.ndarray, n: int = 10) -> Tuple[np.ndarray, np.ndarray]:
83
82
  # Find the indices that would sort each row in descending order
84
83
  sorted_indices = np.argsort(-cosine_similarity_matrix, axis=1)
85
84
 
@@ -136,10 +135,7 @@ def mmr_diversified_search(
136
135
  max_sim_to_selected = max(
137
136
  [
138
137
  np.dot(document_vectors[idx], document_vectors[s])
139
- / (
140
- np.linalg.norm(document_vectors[idx])
141
- * np.linalg.norm(document_vectors[s])
142
- )
138
+ / (np.linalg.norm(document_vectors[idx]) * np.linalg.norm(document_vectors[s]))
143
139
  for s in selected_indices
144
140
  ]
145
141
  )
@@ -160,6 +156,3 @@ def mmr_diversified_search(
160
156
  selected_indices.add(best_index)
161
157
 
162
158
  return result_indices
163
-
164
-
165
-
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: linkml-store
3
- Version: 0.2.6
3
+ Version: 0.2.10rc1
4
4
  Summary: linkml-store
5
5
  License: MIT
6
6
  Author: Author 1
@@ -24,6 +24,7 @@ Provides-Extra: map
24
24
  Provides-Extra: mongodb
25
25
  Provides-Extra: neo4j
26
26
  Provides-Extra: pyarrow
27
+ Provides-Extra: rdf
27
28
  Provides-Extra: renderer
28
29
  Provides-Extra: scipy
29
30
  Provides-Extra: tests
@@ -39,6 +40,7 @@ Requires-Dist: h5py ; extra == "h5py"
39
40
  Requires-Dist: jinja2 (>=3.1.4,<4.0.0)
40
41
  Requires-Dist: jsonlines (>=4.0.0,<5.0.0)
41
42
  Requires-Dist: jsonpatch (>=1.33)
43
+ Requires-Dist: lightrdf ; extra == "rdf"
42
44
  Requires-Dist: linkml (>=1.8.0) ; extra == "validation"
43
45
  Requires-Dist: linkml-runtime (>=1.8.0)
44
46
  Requires-Dist: linkml_map ; extra == "map"
@@ -1,71 +1,76 @@
1
1
  linkml_store/__init__.py,sha256=jlU6WOUAn8cKIhzbTULmBTWpW9gZdEt7q_RI6KZN1bY,118
2
2
  linkml_store/api/__init__.py,sha256=3CelcFEFz0y3MkQAzhQ9JxHIt1zFk6nYZxSmYTo8YZE,226
3
- linkml_store/api/client.py,sha256=-XX1H5dIPBCPwU3lgZLtb7JXmUQR_c-FYGSKEW1idr8,12970
4
- linkml_store/api/collection.py,sha256=Edwyb36D8NJjb-bkDy3O8BJbDVxtSH3yOKI_QW9_cic,41620
3
+ linkml_store/api/client.py,sha256=I2kCSMQ-HS0EByJHfewsRbunNYfuZ9JoZv8AXj7Ho48,12970
4
+ linkml_store/api/collection.py,sha256=zmMGequFf9WmoNgkd1_cuydInRe_aTqJvmuybizKjO8,43118
5
5
  linkml_store/api/config.py,sha256=pOz210JIwkEEXtfjcsZBp1UEedkBu8RkH62Qa1b4exI,5777
6
- linkml_store/api/database.py,sha256=JyQ8SuPrNiltgMH4pdFt4IgGBc9nq3mfRJ5ZUEIDEqA,29696
6
+ linkml_store/api/database.py,sha256=W0ootSLm4MGTHexR-De_GvBFlsio00KwkoNksSbpmso,30442
7
7
  linkml_store/api/queries.py,sha256=tx9fgGY5fC_2ZbIvg4BqTK_MXJwA_DI4mxr8HdQ6Vos,2075
8
8
  linkml_store/api/stores/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  linkml_store/api/stores/chromadb/__init__.py,sha256=e9BkOPuPnVQKA5PRKDulag59yGNHDP3U2_DnPSrFAKM,132
10
10
  linkml_store/api/stores/chromadb/chromadb_collection.py,sha256=RQUZx5oeotkzNihg-dlSevkiTiKY1d9x0bS63HF80W4,4270
11
11
  linkml_store/api/stores/chromadb/chromadb_database.py,sha256=dZA3LQE8-ZMhJQOzsUFyxehnKpFF7adR182aggfkaFY,3205
12
12
  linkml_store/api/stores/duckdb/__init__.py,sha256=rbQSDgNg-fdvi6-pHGYkJTST4p1qXUZBf9sFSsO3KPk,387
13
- linkml_store/api/stores/duckdb/duckdb_collection.py,sha256=1Jc770CR3oipfLj9iJn-dbkgtoEObLbylUQCoUWxuzs,7313
14
- linkml_store/api/stores/duckdb/duckdb_database.py,sha256=idIe89yqrdMKR69Xpi3cd5LStwe6FRBOm4eJGsHfOV0,10904
13
+ linkml_store/api/stores/duckdb/duckdb_collection.py,sha256=AW7YhHdegHdbcAB1Lnr1WNI9VUAxRyMd3oHMnzfsLuQ,15057
14
+ linkml_store/api/stores/duckdb/duckdb_database.py,sha256=R2NB9r5WgYc5CTKaiXwK_BS-C0RO6WLTlG8EooCzTuk,10886
15
15
  linkml_store/api/stores/duckdb/mappings.py,sha256=tDce3W1Apwammhf4LS6cRJ0m4NiJ0eB7vOI_4U5ETY8,148
16
- linkml_store/api/stores/filesystem/__init__.py,sha256=KjvCjdttwqMHNeGyL-gr59zRz0--HFEWWUNNCJ5hITs,347
16
+ linkml_store/api/stores/filesystem/__init__.py,sha256=rD6nsZLkMphS4EQSrGtjirYD32ENRIqv7Kllm5CLBMY,346
17
17
  linkml_store/api/stores/filesystem/filesystem_collection.py,sha256=9gqY2KRZsn_RWk4eKkxFd3_wcxs5YaXvcBI7GGJBMGE,6751
18
- linkml_store/api/stores/filesystem/filesystem_database.py,sha256=e9hSGoaOxr_sG_RhjgzV_yvdQ_xbHHXHJDtufWzAX4E,2883
18
+ linkml_store/api/stores/filesystem/filesystem_database.py,sha256=Ich707bWzgeq3tdv37wLLkM4Kb3lr4w3T1iftvbMqdw,2883
19
19
  linkml_store/api/stores/hdf5/__init__.py,sha256=l4cIh3v7P0nPbwGIsfuCMD_serQ8q8c7iuUA9W2Jb4o,97
20
20
  linkml_store/api/stores/hdf5/hdf5_collection.py,sha256=mnpLMYehn3PuaIjp2dXrIWu8jh-bdQ84X2Ku83jMdEY,3805
21
21
  linkml_store/api/stores/hdf5/hdf5_database.py,sha256=EZbjrpaqiNDEFvoD5dZNcGBXA8z6HRNL81emueTZWNw,2714
22
22
  linkml_store/api/stores/mongodb/__init__.py,sha256=OSFCr7RQlDEe-O-Y0P_i912oAMK-L3pC7Cnj7sxlwAk,510
23
- linkml_store/api/stores/mongodb/mongodb_collection.py,sha256=hKwaHHFxfWqjBNHZpzVuDVruH_SdXzoIKHdePN3JDEg,10447
24
- linkml_store/api/stores/mongodb/mongodb_database.py,sha256=HfVEEFCuwZ96KO3eWuSGFajRUgZPmeG-fqsrWHZhJng,4077
23
+ linkml_store/api/stores/mongodb/mongodb_collection.py,sha256=lR18BdaVUbuJDIltuL42MnGJWyMa28XFi_x1PHb3u0M,14884
24
+ linkml_store/api/stores/mongodb/mongodb_database.py,sha256=Lr47vVaJv_cgTCc2ArEma9R5T0agR_haaCJB6BageyI,4112
25
25
  linkml_store/api/stores/neo4j/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  linkml_store/api/stores/neo4j/neo4j_collection.py,sha256=a-Az5_ypdBMgeNyhrTW7q-ik-vYPCDDONIK7N_CDA9c,17449
27
- linkml_store/api/stores/neo4j/neo4j_database.py,sha256=zanP_uBZO3AH0wuzbu6auK4zcZon_lMreC2vooSZwt8,5571
27
+ linkml_store/api/stores/neo4j/neo4j_database.py,sha256=QN6-iSshQwTk0GWDANmSCs8b_Oqd-KI5gI90nq82HWM,5574
28
28
  linkml_store/api/stores/solr/__init__.py,sha256=aAfnaN9mZOiIDj1NYz0Ll9fZF2gG7UU_vhP4SNCL2d8,36
29
- linkml_store/api/stores/solr/solr_collection.py,sha256=ZlxC3JbVaHfSA4HuTeJTsp6qe48tHS6Fgel5jsqXcsM,4727
29
+ linkml_store/api/stores/solr/solr_collection.py,sha256=rSCh9wzmP2ijD7St6xjhTKFeKszUBRg5ZvJjvvLkvLE,8869
30
30
  linkml_store/api/stores/solr/solr_database.py,sha256=TFjqbY7jAkdrhAchbNg0E-mChSP7ogNwFExslbvX7Yo,2877
31
31
  linkml_store/api/stores/solr/solr_utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
32
  linkml_store/api/types.py,sha256=3aIQtDFMvsSmjuN5qrR2vNK5sHa6yzD_rEOPA6tHwvg,176
33
- linkml_store/cli.py,sha256=GtbLVMcH6rHEeEMljFGVFd8U5h71WN_ojmIp17UlJxo,31253
33
+ linkml_store/cli.py,sha256=OJbzxNlqHERUMrqMiznRjA_3tp5eXBA3w7cex0nVPhM,37663
34
34
  linkml_store/constants.py,sha256=x4ZmDsfE9rZcL5WpA93uTKrRWzCD6GodYXviVzIvR38,112
35
35
  linkml_store/graphs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  linkml_store/graphs/graph_map.py,sha256=bYRxv8n1YPnFqE9d6JKNmRawb8EAhsPlHhBue0gvtZE,712
37
37
  linkml_store/index/__init__.py,sha256=6SQzDe-WZSSqbGNsbCDfyPTyz0s9ISDKw1dm9xgQuT4,1396
38
38
  linkml_store/index/implementations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- linkml_store/index/implementations/llm_indexer.py,sha256=ja7UXhQj7F0g6HiRIJ8EBPuM86nOgr49jkh7eh_nCHs,5644
39
+ linkml_store/index/implementations/llm_indexer.py,sha256=gGyl4j7AF72CyfJLKAMOUJOPhHwptS_0k8mcJ-t76zU,5911
40
40
  linkml_store/index/implementations/simple_indexer.py,sha256=KnkFJtXTHnwjhD_D6ZK2rFhBID1dgCedcOVPEWAY2NU,1282
41
- linkml_store/index/indexer.py,sha256=e5dsjh2wjOTDRsfClKJAFTbcK1UC7BOGkUCOfDg9omI,7635
41
+ linkml_store/index/indexer.py,sha256=YK715LJtoJY0fUaHBsS0kJs-Vs3sOug7biouIsfQsTo,7654
42
42
  linkml_store/inference/__init__.py,sha256=b8NAFNZjOYU_8gOvxdyCyoiHOOl5Ai2ckKs1tv7ZkkY,342
43
43
  linkml_store/inference/evaluation.py,sha256=YDFYaEu2QLSfFq4oyARrnKfTiPLtNF8irhhspgVDfdY,6013
44
44
  linkml_store/inference/implementations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
- linkml_store/inference/implementations/llm_inference_engine.py,sha256=iSxiboYpgB0_yL4zlHIJx2ZbvDrJC8JioewTKgLUS0U,5443
46
- linkml_store/inference/implementations/rag_inference_engine.py,sha256=R3Dz-DyNx7UU3ZaV1n9homxC2nUAT5JZnd4IRkIFftk,11326
45
+ linkml_store/inference/implementations/llm_inference_engine.py,sha256=qoMrzsEE5zDTHc6Y1nBQcSOYDjJETRqsZL7Zl7p3hLg,5407
46
+ linkml_store/inference/implementations/rag_inference_engine.py,sha256=xdf1WJ-e0G34Y_F4h4UzkLNF2TZjSfdNIUiYTP7xiZU,11276
47
47
  linkml_store/inference/implementations/rule_based_inference_engine.py,sha256=0IEY_fsHJPJy6QKbYQU_qE87RRnPOXQxPuJKXCQG8jU,6250
48
- linkml_store/inference/implementations/sklearn_inference_engine.py,sha256=Sdi7CoRK3qoLJu3prgLy1Ck_zQ1gHWRKFybHe7XQ4_g,13192
49
- linkml_store/inference/inference_config.py,sha256=EFGdigxWsfTPREbgqyJVRShN0JktCEmFLLoECrLfXSg,2282
50
- linkml_store/inference/inference_engine.py,sha256=7P9syuIwwBpCUytfqZcCR5ei61ys5LIw8YhO0iIehG4,7191
48
+ linkml_store/inference/implementations/sklearn_inference_engine.py,sha256=_PiZom5i3ki9SmdqwF7SipHeLPK-Ai-vEiiuOfgNWd4,13516
49
+ linkml_store/inference/inference_config.py,sha256=bbYiWf9eYdjEDzpMK-k5AfrhyzZlotVxPLZtjnVsA5Q,2283
50
+ linkml_store/inference/inference_engine.py,sha256=r5Adx1ZOfe4eJ9XgMEYgXb9XhSDCzq7t4Sdvn4EXOUQ,7191
51
51
  linkml_store/inference/inference_engine_registry.py,sha256=6o66gvBYBwdeAKm62zqqvfaBlcopVP_cla3L6uXGsHA,3015
52
+ linkml_store/plotting/__init__.py,sha256=8Wjpwjhtp1-Ci_B2gRVUZ8EI_hGxpuhXQPlUny5ZWC0,84
53
+ linkml_store/plotting/cli.py,sha256=rPTPwracoRq80vjMGeFghUf9r6MMYpibZ62fW85NrsI,7482
54
+ linkml_store/plotting/heatmap.py,sha256=uXnIpQyIPHGAk_sgSKKPWZpbBm8nuLEjQrfAJgIsMCc,13594
52
55
  linkml_store/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
56
  linkml_store/utils/change_utils.py,sha256=O2rvSvgTKB60reLLz9mX5OWykAA_m93bwnUh5ZWa0EY,471
57
+ linkml_store/utils/dat_parser.py,sha256=BY4QOQ5YSv6u5SIEXN5bLWCjcynBaC9Tndze0FwOP3M,3047
58
+ linkml_store/utils/enrichment_analyzer.py,sha256=KLVdw0zqnWKdfCiUwSuBm8f5g5gppiADIysHamMcnSg,7707
54
59
  linkml_store/utils/file_utils.py,sha256=rQ7-XpmI6_Kx_dhEnI98muFRr0MmgI_kZ_9cgJBf_0I,1411
55
- linkml_store/utils/format_utils.py,sha256=hHRFkh3cwb5shM6RO7WWuOXsHHH283M_vZjXRuzbwWI,13035
60
+ linkml_store/utils/format_utils.py,sha256=ZKMNUYOTcKEWx0s5GBZSbe7-ncfHgiQ63jdig2tbxCg,16743
56
61
  linkml_store/utils/io.py,sha256=JHUrWDtlZC2jtN_PQZ4ypdGIyYlftZEN3JaCvEPs44w,884
57
- linkml_store/utils/llm_utils.py,sha256=51AiwMeXm2FpiD-9AywKcbZzlUMqXRAjDFJEp5Ia0LA,3494
62
+ linkml_store/utils/llm_utils.py,sha256=N_Xo1CRPYfN1nKw_UUOxGJyl1IK2N8lJ6Zrh8mcZF8g,3536
58
63
  linkml_store/utils/mongodb_utils.py,sha256=Rl1YmMKs1IXwSsJIViSDChbi0Oer5cBnMmjka2TeQS8,4665
59
64
  linkml_store/utils/neo4j_utils.py,sha256=y3KPmDZ8mQmePgg0lUeKkeKqzEr2rV226xxEtHc5pRg,1266
60
- linkml_store/utils/object_utils.py,sha256=V0s_ZzqAGkFUfrU-9fAPb5g3snMmgKKhR3SiYZgECXI,6353
61
- linkml_store/utils/pandas_utils.py,sha256=djiFPO3YbgRVo2XAZuKCtgH8QVLuUyPIsfS8e-0umsU,3182
65
+ linkml_store/utils/object_utils.py,sha256=s6GIcfEODI8oALL_-ohtTlW_jwCRL48KaP1FGp4YS9M,6596
66
+ linkml_store/utils/pandas_utils.py,sha256=ttkXGCJZcNhmy72SkY4ZfKbC-lyscpI74YLKznJ8AfM,3183
62
67
  linkml_store/utils/patch_utils.py,sha256=q-h_v68okyruzdPTEHCe0WubbQHKpi1qy5bJ9vFWDo8,4823
63
68
  linkml_store/utils/query_utils.py,sha256=HWt46BsGWoIGiNBTtvpXGY6onPRWsQky6eu_9cYqbvo,3440
64
69
  linkml_store/utils/schema_utils.py,sha256=iJiZxo5NGr7v87h4DV6V9DrDOZHSswMRuf0N4V2rVtg,646
65
70
  linkml_store/utils/sklearn_utils.py,sha256=itPpcrsbbyOazdjmivaaZ1lyZeytm0a0hJ2AS8ziUgg,7590
66
- linkml_store/utils/sql_utils.py,sha256=qatmrJR2u4ICaO7QhDRL1ukxJlLv0zYSGgmmFV-hdnU,6210
71
+ linkml_store/utils/sql_utils.py,sha256=GF4s51BP3WmnYuBgtUiwo3uXvYX_ypyrknk4a6tIoSE,6210
67
72
  linkml_store/utils/stats_utils.py,sha256=4KqBb1bqDgAmq-1fJLLu5B2paPgoZZc3A-gnyVam4bI,1799
68
- linkml_store/utils/vector_utils.py,sha256=QcLTUQWm5z1OTtiOl0mXKJyFJcQeCtbcc-GQwHhkUYw,5456
73
+ linkml_store/utils/vector_utils.py,sha256=ZJPRWz64jHMbH5sV1CaCZAAvA_kS1gTjhjnwLRXjKT8,5354
69
74
  linkml_store/webapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
75
  linkml_store/webapi/html/__init__.py,sha256=hwp5eeBJKH65Bvv1x9Z4vsT1tLSYtb9Dq4I9r1kL1q0,69
71
76
  linkml_store/webapi/html/base.html.j2,sha256=hoiV2uaSxxrQp7VuAZBOHueH7czyJMYcPBRN6dZFYhk,693
@@ -74,8 +79,8 @@ linkml_store/webapi/html/database_details.html.j2,sha256=qtXdavbZb0mohiObI9dvJtk
74
79
  linkml_store/webapi/html/databases.html.j2,sha256=a9BCWQYfPeFhdUd31CWhB0yWhTIFXQayO08JgjyqKoc,294
75
80
  linkml_store/webapi/html/generic.html.j2,sha256=KtLaO2HUEF2Opq-OwHKgRKetNWe8IWc6JuIkxRPsywk,1018
76
81
  linkml_store/webapi/main.py,sha256=B0Da575kKR7X88N9ykm99Dem8FyBAW9f-w3A_JwUzfw,29165
77
- linkml_store-0.2.6.dist-info/LICENSE,sha256=77mDOslUnalYnuq9xQYZKtIoNEzcH9mIjvWHOKjamnE,1086
78
- linkml_store-0.2.6.dist-info/METADATA,sha256=s5x6OmbGC7oVUpXunjiM42sASvsvKR8XRoJllGqF6ww,6964
79
- linkml_store-0.2.6.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
80
- linkml_store-0.2.6.dist-info/entry_points.txt,sha256=gWxVsHqx-t-UKWFHFzawQTvs4is4vC1rCF5AeKyqWWk,101
81
- linkml_store-0.2.6.dist-info/RECORD,,
82
+ linkml_store-0.2.10rc1.dist-info/LICENSE,sha256=77mDOslUnalYnuq9xQYZKtIoNEzcH9mIjvWHOKjamnE,1086
83
+ linkml_store-0.2.10rc1.dist-info/METADATA,sha256=ApfUFD87aguIxXb20QF_lPRSxenx0KhkHp9Ruw-l-3Y,7029
84
+ linkml_store-0.2.10rc1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
85
+ linkml_store-0.2.10rc1.dist-info/entry_points.txt,sha256=gWxVsHqx-t-UKWFHFzawQTvs4is4vC1rCF5AeKyqWWk,101
86
+ linkml_store-0.2.10rc1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.1
2
+ Generator: poetry-core 2.1.3
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any