mlrun 1.7.0rc14__py3-none-any.whl → 1.7.0rc22__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 mlrun might be problematic. Click here for more details.

Files changed (160) hide show
  1. mlrun/__init__.py +10 -1
  2. mlrun/__main__.py +23 -111
  3. mlrun/alerts/__init__.py +15 -0
  4. mlrun/alerts/alert.py +169 -0
  5. mlrun/api/schemas/__init__.py +4 -3
  6. mlrun/artifacts/__init__.py +8 -3
  7. mlrun/artifacts/base.py +36 -253
  8. mlrun/artifacts/dataset.py +9 -190
  9. mlrun/artifacts/manager.py +46 -42
  10. mlrun/artifacts/model.py +9 -141
  11. mlrun/artifacts/plots.py +14 -375
  12. mlrun/common/constants.py +65 -3
  13. mlrun/common/formatters/__init__.py +19 -0
  14. mlrun/{runtimes/mpijob/v1alpha1.py → common/formatters/artifact.py} +6 -14
  15. mlrun/common/formatters/base.py +113 -0
  16. mlrun/common/formatters/function.py +46 -0
  17. mlrun/common/formatters/pipeline.py +53 -0
  18. mlrun/common/formatters/project.py +51 -0
  19. mlrun/{runtimes → common/runtimes}/constants.py +32 -4
  20. mlrun/common/schemas/__init__.py +10 -5
  21. mlrun/common/schemas/alert.py +92 -11
  22. mlrun/common/schemas/api_gateway.py +56 -0
  23. mlrun/common/schemas/artifact.py +15 -5
  24. mlrun/common/schemas/auth.py +2 -0
  25. mlrun/common/schemas/client_spec.py +1 -0
  26. mlrun/common/schemas/frontend_spec.py +1 -0
  27. mlrun/common/schemas/function.py +4 -0
  28. mlrun/common/schemas/model_monitoring/__init__.py +15 -3
  29. mlrun/common/schemas/model_monitoring/constants.py +58 -7
  30. mlrun/common/schemas/model_monitoring/grafana.py +9 -5
  31. mlrun/common/schemas/model_monitoring/model_endpoints.py +86 -2
  32. mlrun/common/schemas/pipeline.py +0 -9
  33. mlrun/common/schemas/project.py +5 -11
  34. mlrun/common/types.py +1 -0
  35. mlrun/config.py +30 -9
  36. mlrun/data_types/to_pandas.py +9 -9
  37. mlrun/datastore/base.py +41 -9
  38. mlrun/datastore/datastore.py +6 -2
  39. mlrun/datastore/datastore_profile.py +56 -4
  40. mlrun/datastore/inmem.py +2 -2
  41. mlrun/datastore/redis.py +2 -2
  42. mlrun/datastore/s3.py +5 -0
  43. mlrun/datastore/sources.py +147 -7
  44. mlrun/datastore/store_resources.py +7 -7
  45. mlrun/datastore/targets.py +110 -42
  46. mlrun/datastore/utils.py +42 -0
  47. mlrun/db/base.py +54 -10
  48. mlrun/db/httpdb.py +282 -79
  49. mlrun/db/nopdb.py +52 -10
  50. mlrun/errors.py +11 -0
  51. mlrun/execution.py +26 -9
  52. mlrun/feature_store/__init__.py +0 -2
  53. mlrun/feature_store/api.py +12 -47
  54. mlrun/feature_store/feature_set.py +9 -0
  55. mlrun/feature_store/feature_vector.py +8 -0
  56. mlrun/feature_store/ingestion.py +7 -6
  57. mlrun/feature_store/retrieval/base.py +9 -4
  58. mlrun/feature_store/retrieval/conversion.py +9 -9
  59. mlrun/feature_store/retrieval/dask_merger.py +2 -0
  60. mlrun/feature_store/retrieval/job.py +9 -3
  61. mlrun/feature_store/retrieval/local_merger.py +2 -0
  62. mlrun/feature_store/retrieval/spark_merger.py +16 -0
  63. mlrun/frameworks/__init__.py +6 -0
  64. mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +7 -12
  65. mlrun/frameworks/parallel_coordinates.py +2 -1
  66. mlrun/frameworks/tf_keras/__init__.py +4 -1
  67. mlrun/k8s_utils.py +10 -11
  68. mlrun/launcher/base.py +4 -3
  69. mlrun/launcher/client.py +5 -3
  70. mlrun/launcher/local.py +12 -2
  71. mlrun/launcher/remote.py +9 -2
  72. mlrun/lists.py +6 -2
  73. mlrun/model.py +47 -21
  74. mlrun/model_monitoring/__init__.py +1 -1
  75. mlrun/model_monitoring/api.py +42 -18
  76. mlrun/model_monitoring/application.py +5 -305
  77. mlrun/model_monitoring/applications/__init__.py +11 -0
  78. mlrun/model_monitoring/applications/_application_steps.py +157 -0
  79. mlrun/model_monitoring/applications/base.py +280 -0
  80. mlrun/model_monitoring/applications/context.py +214 -0
  81. mlrun/model_monitoring/applications/evidently_base.py +211 -0
  82. mlrun/model_monitoring/applications/histogram_data_drift.py +132 -91
  83. mlrun/model_monitoring/applications/results.py +99 -0
  84. mlrun/model_monitoring/controller.py +3 -1
  85. mlrun/model_monitoring/db/__init__.py +2 -0
  86. mlrun/model_monitoring/db/stores/__init__.py +0 -2
  87. mlrun/model_monitoring/db/stores/base/store.py +22 -37
  88. mlrun/model_monitoring/db/stores/sqldb/models/__init__.py +43 -21
  89. mlrun/model_monitoring/db/stores/sqldb/models/base.py +39 -8
  90. mlrun/model_monitoring/db/stores/sqldb/models/mysql.py +27 -7
  91. mlrun/model_monitoring/db/stores/sqldb/models/sqlite.py +5 -0
  92. mlrun/model_monitoring/db/stores/sqldb/sql_store.py +246 -224
  93. mlrun/model_monitoring/db/stores/v3io_kv/kv_store.py +232 -216
  94. mlrun/model_monitoring/db/tsdb/__init__.py +100 -0
  95. mlrun/model_monitoring/db/tsdb/base.py +316 -0
  96. mlrun/model_monitoring/db/tsdb/helpers.py +30 -0
  97. mlrun/model_monitoring/db/tsdb/tdengine/__init__.py +15 -0
  98. mlrun/model_monitoring/db/tsdb/tdengine/schemas.py +240 -0
  99. mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py +45 -0
  100. mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +401 -0
  101. mlrun/model_monitoring/db/tsdb/v3io/__init__.py +15 -0
  102. mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py +117 -0
  103. mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +658 -0
  104. mlrun/model_monitoring/evidently_application.py +6 -118
  105. mlrun/model_monitoring/helpers.py +63 -1
  106. mlrun/model_monitoring/model_endpoint.py +3 -2
  107. mlrun/model_monitoring/stream_processing.py +57 -216
  108. mlrun/model_monitoring/writer.py +134 -124
  109. mlrun/package/__init__.py +13 -1
  110. mlrun/package/packagers/__init__.py +6 -1
  111. mlrun/package/utils/_formatter.py +2 -2
  112. mlrun/platforms/__init__.py +10 -9
  113. mlrun/platforms/iguazio.py +21 -202
  114. mlrun/projects/operations.py +24 -12
  115. mlrun/projects/pipelines.py +79 -102
  116. mlrun/projects/project.py +271 -103
  117. mlrun/render.py +15 -14
  118. mlrun/run.py +16 -46
  119. mlrun/runtimes/__init__.py +6 -3
  120. mlrun/runtimes/base.py +14 -7
  121. mlrun/runtimes/daskjob.py +1 -0
  122. mlrun/runtimes/databricks_job/databricks_runtime.py +1 -0
  123. mlrun/runtimes/databricks_job/databricks_wrapper.py +1 -1
  124. mlrun/runtimes/funcdoc.py +0 -28
  125. mlrun/runtimes/kubejob.py +2 -1
  126. mlrun/runtimes/local.py +12 -3
  127. mlrun/runtimes/mpijob/__init__.py +0 -20
  128. mlrun/runtimes/mpijob/v1.py +1 -1
  129. mlrun/runtimes/nuclio/api_gateway.py +194 -84
  130. mlrun/runtimes/nuclio/application/application.py +170 -8
  131. mlrun/runtimes/nuclio/function.py +39 -49
  132. mlrun/runtimes/pod.py +16 -36
  133. mlrun/runtimes/remotesparkjob.py +9 -3
  134. mlrun/runtimes/sparkjob/spark3job.py +1 -1
  135. mlrun/runtimes/utils.py +6 -45
  136. mlrun/serving/__init__.py +8 -1
  137. mlrun/serving/server.py +2 -1
  138. mlrun/serving/states.py +51 -8
  139. mlrun/serving/utils.py +19 -11
  140. mlrun/serving/v2_serving.py +5 -1
  141. mlrun/track/tracker.py +2 -1
  142. mlrun/utils/async_http.py +25 -5
  143. mlrun/utils/helpers.py +157 -83
  144. mlrun/utils/logger.py +39 -7
  145. mlrun/utils/notifications/notification/__init__.py +14 -9
  146. mlrun/utils/notifications/notification/base.py +1 -1
  147. mlrun/utils/notifications/notification/slack.py +34 -7
  148. mlrun/utils/notifications/notification/webhook.py +1 -1
  149. mlrun/utils/notifications/notification_pusher.py +147 -16
  150. mlrun/utils/regex.py +9 -0
  151. mlrun/utils/v3io_clients.py +0 -1
  152. mlrun/utils/version/version.json +2 -2
  153. {mlrun-1.7.0rc14.dist-info → mlrun-1.7.0rc22.dist-info}/METADATA +14 -6
  154. {mlrun-1.7.0rc14.dist-info → mlrun-1.7.0rc22.dist-info}/RECORD +158 -138
  155. mlrun/kfpops.py +0 -865
  156. mlrun/platforms/other.py +0 -305
  157. {mlrun-1.7.0rc14.dist-info → mlrun-1.7.0rc22.dist-info}/LICENSE +0 -0
  158. {mlrun-1.7.0rc14.dist-info → mlrun-1.7.0rc22.dist-info}/WHEEL +0 -0
  159. {mlrun-1.7.0rc14.dist-info → mlrun-1.7.0rc22.dist-info}/entry_points.txt +0 -0
  160. {mlrun-1.7.0rc14.dist-info → mlrun-1.7.0rc22.dist-info}/top_level.txt +0 -0
@@ -15,10 +15,17 @@
15
15
  import asyncio
16
16
  import datetime
17
17
  import os
18
+ import re
18
19
  import traceback
19
20
  import typing
20
21
  from concurrent.futures import ThreadPoolExecutor
21
22
 
23
+ import kfp
24
+ import mlrun_pipelines.common.ops
25
+ import mlrun_pipelines.models
26
+
27
+ import mlrun.common.constants as mlrun_constants
28
+ import mlrun.common.runtimes.constants
22
29
  import mlrun.common.schemas
23
30
  import mlrun.config
24
31
  import mlrun.db.base
@@ -233,25 +240,12 @@ class NotificationPusher(_NotificationPusherBase):
233
240
  resource = "Run"
234
241
  runs = [run.to_dict()]
235
242
 
236
- if "workflow" in run.metadata.labels:
237
- resource = "Workflow"
243
+ if mlrun_constants.MLRunInternalLabels.workflow in run.metadata.labels:
244
+ resource = mlrun_constants.MLRunInternalLabels.workflow
238
245
  custom_message = (
239
246
  f" (workflow: {run.metadata.labels['workflow']}){custom_message}"
240
247
  )
241
- db = mlrun.get_run_db()
242
-
243
- workflow_id = run.status.results.get("workflow_id", None)
244
- if workflow_id:
245
- workflow_runs = db.list_runs(
246
- project=run.metadata.project,
247
- labels=f"workflow={workflow_id}",
248
- )
249
- logger.debug(
250
- "Found workflow runs, extending notification runs",
251
- workflow_id=workflow_id,
252
- workflow_runs_amount=len(workflow_runs),
253
- )
254
- runs.extend(workflow_runs)
248
+ runs.extend(self.get_workflow_steps(run))
255
249
 
256
250
  message = (
257
251
  self.messages.get(run.state(), "").format(resource=resource)
@@ -395,6 +389,137 @@ class NotificationPusher(_NotificationPusherBase):
395
389
  mask_params=False,
396
390
  )
397
391
 
392
+ def get_workflow_steps(self, run: mlrun.model.RunObject) -> list:
393
+ steps = []
394
+ db = mlrun.get_run_db()
395
+
396
+ def _add_run_step(_step: mlrun_pipelines.models.PipelineStep):
397
+ try:
398
+ _run = db.list_runs(
399
+ project=run.metadata.project,
400
+ labels=f"mlrun_constants.MLRunInternalLabels.runner_pod={_step.node_name}",
401
+ )[0]
402
+ except IndexError:
403
+ _run = {
404
+ "metadata": {
405
+ "name": _step.display_name,
406
+ "project": run.metadata.project,
407
+ },
408
+ }
409
+ _run["step_kind"] = _step.step_type
410
+ if _step.skipped:
411
+ _run.setdefault("status", {})["state"] = (
412
+ mlrun.common.runtimes.constants.RunStates.skipped
413
+ )
414
+ steps.append(_run)
415
+
416
+ def _add_deploy_function_step(_step: mlrun_pipelines.models.PipelineStep):
417
+ project, name, hash_key = self._extract_function_uri(
418
+ _step.get_annotation("mlrun/function-uri")
419
+ )
420
+ if name:
421
+ try:
422
+ function = db.get_function(
423
+ project=project, name=name, hash_key=hash_key
424
+ )
425
+ except mlrun.errors.MLRunNotFoundError:
426
+ # If the function is not found (if build failed for example), we will create a dummy
427
+ # function object for the notification to display the function name
428
+ function = {
429
+ "metadata": {
430
+ "name": name,
431
+ "project": project,
432
+ "hash_key": hash_key,
433
+ },
434
+ }
435
+ pod_phase = _step.phase
436
+ if _step.skipped:
437
+ state = mlrun.common.schemas.FunctionState.skipped
438
+ else:
439
+ state = mlrun.common.runtimes.constants.PodPhases.pod_phase_to_run_state(
440
+ pod_phase
441
+ )
442
+ function["status"] = {"state": state}
443
+ if isinstance(function["metadata"].get("updated"), datetime.datetime):
444
+ function["metadata"]["updated"] = function["metadata"][
445
+ "updated"
446
+ ].isoformat()
447
+ function["step_kind"] = _step.step_type
448
+ steps.append(function)
449
+
450
+ step_methods = {
451
+ mlrun_pipelines.common.ops.PipelineRunType.run: _add_run_step,
452
+ mlrun_pipelines.common.ops.PipelineRunType.build: _add_deploy_function_step,
453
+ mlrun_pipelines.common.ops.PipelineRunType.deploy: _add_deploy_function_step,
454
+ }
455
+
456
+ workflow_id = run.status.results.get("workflow_id", None)
457
+ if not workflow_id:
458
+ return steps
459
+
460
+ workflow_manifest = self._get_workflow_manifest(workflow_id)
461
+ if not workflow_manifest:
462
+ return steps
463
+
464
+ try:
465
+ for step in workflow_manifest.get_steps():
466
+ step_method = step_methods.get(step.step_type)
467
+ if step_method:
468
+ step_method(step)
469
+ return steps
470
+ except Exception:
471
+ # If we fail to read the pipeline steps, we will return the list of runs that have the same workflow id
472
+ logger.warning(
473
+ "Failed to extract workflow steps from workflow manifest, "
474
+ "returning all runs with the workflow id label",
475
+ workflow_id=workflow_id,
476
+ traceback=traceback.format_exc(),
477
+ )
478
+ return db.list_runs(
479
+ project=run.metadata.project,
480
+ labels=f"workflow={workflow_id}",
481
+ )
482
+
483
+ @staticmethod
484
+ def _get_workflow_manifest(
485
+ workflow_id: str,
486
+ ) -> typing.Optional[mlrun_pipelines.models.PipelineManifest]:
487
+ kfp_url = mlrun.mlconf.resolve_kfp_url(mlrun.mlconf.namespace)
488
+ if not kfp_url:
489
+ raise mlrun.errors.MLRunNotFoundError(
490
+ "KubeFlow Pipelines is not configured"
491
+ )
492
+
493
+ kfp_client = kfp.Client(host=kfp_url)
494
+
495
+ # arbitrary timeout of 5 seconds, the workflow should be done by now
496
+ kfp_run = kfp_client.wait_for_run_completion(workflow_id, 5)
497
+ if not kfp_run:
498
+ return None
499
+
500
+ kfp_run = mlrun_pipelines.models.PipelineRun(kfp_run)
501
+ return kfp_run.workflow_manifest()
502
+
503
+ def _extract_function_uri(self, function_uri: str) -> tuple[str, str, str]:
504
+ """
505
+ Extract the project, name, and hash key from a function uri.
506
+ Examples:
507
+ - "project/name@hash_key" returns project, name, hash_key
508
+ - "project/name returns" project, name, ""
509
+ """
510
+ project, name, hash_key = None, None, None
511
+ hashed_pattern = r"^(.+)/(.+)@(.+)$"
512
+ pattern = r"^(.+)/(.+)$"
513
+ match = re.match(hashed_pattern, function_uri)
514
+ if match:
515
+ project, name, hash_key = match.groups()
516
+ else:
517
+ match = re.match(pattern, function_uri)
518
+ if match:
519
+ project, name = match.groups()
520
+ hash_key = ""
521
+ return project, name, hash_key
522
+
398
523
 
399
524
  class CustomNotificationPusher(_NotificationPusherBase):
400
525
  def __init__(self, notification_types: list[str] = None):
@@ -413,6 +538,12 @@ class CustomNotificationPusher(_NotificationPusherBase):
413
538
  if notification.is_async
414
539
  }
415
540
 
541
+ @property
542
+ def notifications(self):
543
+ notifications = self._sync_notifications.copy()
544
+ notifications.update(self._async_notifications)
545
+ return notifications
546
+
416
547
  def push(
417
548
  self,
418
549
  message: str,
mlrun/utils/regex.py CHANGED
@@ -92,3 +92,12 @@ artifact_key = [r"[^\/\\]+$"]
92
92
  # must be alphanumeric or _
93
93
  # max 256 length
94
94
  v3io_stream_consumer_group = [r"^(?!_)[a-zA-Z0-9_]{1,256}$"]
95
+
96
+ # URI patterns
97
+ run_uri_pattern = r"^(?P<project>.*)@(?P<uid>.*)\#(?P<iteration>.*?)(:(?P<tag>.*))?$"
98
+
99
+ artifact_uri_pattern = r"^((?P<project>.*)/)?(?P<key>.*?)(\#(?P<iteration>.*?))?(:(?P<tag>.*?))?(@(?P<tree>.*))?$"
100
+
101
+ artifact_producer_uri_pattern = (
102
+ r"^((?P<project>.*)/)?(?P<uid>.*?)(\-(?P<iteration>.*?))?$"
103
+ )
@@ -11,7 +11,6 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
- #
15
14
 
16
15
  from v3io.dataplane import Client as V3IOClient
17
16
  from v3io_frames import Client as get_client
@@ -1,4 +1,4 @@
1
1
  {
2
- "git_commit": "0967b2a28f5a75cc377483f5267159eb75925822",
3
- "version": "1.7.0-rc14"
2
+ "git_commit": "0cbcbb9417af7ac58072ad981672602728fee57e",
3
+ "version": "1.7.0-rc22"
4
4
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mlrun
3
- Version: 1.7.0rc14
3
+ Version: 1.7.0rc22
4
4
  Summary: Tracking and config of machine learning runs
5
5
  Home-page: https://github.com/mlrun/mlrun
6
6
  Author: Yaron Haviv
@@ -26,10 +26,9 @@ Requires-Dist: GitPython >=3.1.41,~=3.1
26
26
  Requires-Dist: aiohttp ~=3.9
27
27
  Requires-Dist: aiohttp-retry ~=2.8
28
28
  Requires-Dist: click ~=8.1
29
- Requires-Dist: kfp ~=1.8
30
29
  Requires-Dist: nest-asyncio ~=1.0
31
30
  Requires-Dist: ipython ~=8.10
32
- Requires-Dist: nuclio-jupyter ~=0.9.16
31
+ Requires-Dist: nuclio-jupyter ~=0.9.17
33
32
  Requires-Dist: numpy <1.27.0,>=1.16.5
34
33
  Requires-Dist: pandas <2.2,>=1.2
35
34
  Requires-Dist: pyarrow <15,>=10.0
@@ -44,13 +43,15 @@ Requires-Dist: semver ~=3.0
44
43
  Requires-Dist: dependency-injector ~=4.41
45
44
  Requires-Dist: fsspec <2024.4,>=2023.9.2
46
45
  Requires-Dist: v3iofs ~=0.1.17
47
- Requires-Dist: storey ~=1.7.7
46
+ Requires-Dist: storey ~=1.7.17
48
47
  Requires-Dist: inflection ~=0.5.0
49
48
  Requires-Dist: python-dotenv ~=0.17.0
50
49
  Requires-Dist: setuptools ~=69.1
51
50
  Requires-Dist: deprecated ~=1.2
52
51
  Requires-Dist: jinja2 >=3.1.3,~=3.1
53
52
  Requires-Dist: orjson <4,>=3.9.15
53
+ Requires-Dist: mlrun-pipelines-kfp-common >0.1.0,~=0.1.1
54
+ Requires-Dist: mlrun-pipelines-kfp-v1-8 >0.1.0,~=0.1.1
54
55
  Provides-Extra: alibaba-oss
55
56
  Requires-Dist: ossfs ==2023.12.0 ; extra == 'alibaba-oss'
56
57
  Requires-Dist: oss2 ==2.18.1 ; extra == 'alibaba-oss'
@@ -81,18 +82,20 @@ Requires-Dist: pyopenssl >=23 ; extra == 'all'
81
82
  Requires-Dist: redis ~=4.3 ; extra == 'all'
82
83
  Requires-Dist: s3fs <2024.4,>=2023.9.2 ; extra == 'all'
83
84
  Requires-Dist: sqlalchemy ~=1.4 ; extra == 'all'
85
+ Requires-Dist: taos-ws-py ~=0.3.2 ; extra == 'all'
84
86
  Provides-Extra: api
85
87
  Requires-Dist: uvicorn ~=0.27.1 ; extra == 'api'
86
88
  Requires-Dist: dask-kubernetes ~=0.11.0 ; extra == 'api'
87
89
  Requires-Dist: apscheduler <4,>=3.10.3 ; extra == 'api'
88
90
  Requires-Dist: objgraph ~=3.6 ; extra == 'api'
89
- Requires-Dist: igz-mgmt ~=0.1.3 ; extra == 'api'
91
+ Requires-Dist: igz-mgmt ~=0.2.0 ; extra == 'api'
90
92
  Requires-Dist: humanfriendly ~=10.0 ; extra == 'api'
91
93
  Requires-Dist: fastapi ~=0.110.0 ; extra == 'api'
92
94
  Requires-Dist: sqlalchemy ~=1.4 ; extra == 'api'
93
95
  Requires-Dist: pymysql ~=1.0 ; extra == 'api'
94
96
  Requires-Dist: alembic ~=1.9 ; extra == 'api'
95
97
  Requires-Dist: timelength ~=1.1 ; extra == 'api'
98
+ Requires-Dist: memray ~=1.12 ; extra == 'api'
96
99
  Provides-Extra: azure-blob-storage
97
100
  Requires-Dist: msrest ~=0.6.21 ; extra == 'azure-blob-storage'
98
101
  Requires-Dist: azure-core ~=1.24 ; extra == 'azure-blob-storage'
@@ -128,6 +131,7 @@ Requires-Dist: pyopenssl >=23 ; extra == 'complete'
128
131
  Requires-Dist: redis ~=4.3 ; extra == 'complete'
129
132
  Requires-Dist: s3fs <2024.4,>=2023.9.2 ; extra == 'complete'
130
133
  Requires-Dist: sqlalchemy ~=1.4 ; extra == 'complete'
134
+ Requires-Dist: taos-ws-py ~=0.3.2 ; extra == 'complete'
131
135
  Provides-Extra: complete-api
132
136
  Requires-Dist: adlfs ==2023.9.0 ; extra == 'complete-api'
133
137
  Requires-Dist: aiobotocore <2.8,>=2.5.0 ; extra == 'complete-api'
@@ -147,8 +151,9 @@ Requires-Dist: gcsfs <2024.4,>=2023.9.2 ; extra == 'complete-api'
147
151
  Requires-Dist: google-cloud-bigquery[bqstorage,pandas] ==3.14.1 ; extra == 'complete-api'
148
152
  Requires-Dist: graphviz ~=0.20.0 ; extra == 'complete-api'
149
153
  Requires-Dist: humanfriendly ~=10.0 ; extra == 'complete-api'
150
- Requires-Dist: igz-mgmt ~=0.1.3 ; extra == 'complete-api'
154
+ Requires-Dist: igz-mgmt ~=0.2.0 ; extra == 'complete-api'
151
155
  Requires-Dist: kafka-python ~=2.0 ; extra == 'complete-api'
156
+ Requires-Dist: memray ~=1.12 ; extra == 'complete-api'
152
157
  Requires-Dist: mlflow ~=2.8 ; extra == 'complete-api'
153
158
  Requires-Dist: msrest ~=0.6.21 ; extra == 'complete-api'
154
159
  Requires-Dist: objgraph ~=3.6 ; extra == 'complete-api'
@@ -160,6 +165,7 @@ Requires-Dist: pyopenssl >=23 ; extra == 'complete-api'
160
165
  Requires-Dist: redis ~=4.3 ; extra == 'complete-api'
161
166
  Requires-Dist: s3fs <2024.4,>=2023.9.2 ; extra == 'complete-api'
162
167
  Requires-Dist: sqlalchemy ~=1.4 ; extra == 'complete-api'
168
+ Requires-Dist: taos-ws-py ~=0.3.2 ; extra == 'complete-api'
163
169
  Requires-Dist: timelength ~=1.1 ; extra == 'complete-api'
164
170
  Requires-Dist: uvicorn ~=0.27.1 ; extra == 'complete-api'
165
171
  Provides-Extra: dask
@@ -192,6 +198,8 @@ Requires-Dist: aiobotocore <2.8,>=2.5.0 ; extra == 's3'
192
198
  Requires-Dist: s3fs <2024.4,>=2023.9.2 ; extra == 's3'
193
199
  Provides-Extra: sqlalchemy
194
200
  Requires-Dist: sqlalchemy ~=1.4 ; extra == 'sqlalchemy'
201
+ Provides-Extra: tdengine
202
+ Requires-Dist: taos-ws-py ~=0.3.2 ; extra == 'tdengine'
195
203
 
196
204
  <a id="top"></a>
197
205
  [![Build Status](https://github.com/mlrun/mlrun/actions/workflows/build.yaml/badge.svg?branch=development)](https://github.com/mlrun/mlrun/actions/workflows/build.yaml?query=branch%3Adevelopment)