mlrun 1.6.4rc2__py3-none-any.whl → 1.7.0rc20__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 (291) hide show
  1. mlrun/__init__.py +11 -1
  2. mlrun/__main__.py +26 -112
  3. mlrun/alerts/__init__.py +15 -0
  4. mlrun/alerts/alert.py +144 -0
  5. mlrun/api/schemas/__init__.py +5 -4
  6. mlrun/artifacts/__init__.py +8 -3
  7. mlrun/artifacts/base.py +46 -257
  8. mlrun/artifacts/dataset.py +11 -192
  9. mlrun/artifacts/manager.py +47 -48
  10. mlrun/artifacts/model.py +31 -159
  11. mlrun/artifacts/plots.py +23 -380
  12. mlrun/common/constants.py +69 -0
  13. mlrun/common/db/sql_session.py +2 -3
  14. mlrun/common/formatters/__init__.py +19 -0
  15. mlrun/common/formatters/artifact.py +21 -0
  16. mlrun/common/formatters/base.py +78 -0
  17. mlrun/common/formatters/function.py +41 -0
  18. mlrun/common/formatters/pipeline.py +53 -0
  19. mlrun/common/formatters/project.py +51 -0
  20. mlrun/common/helpers.py +1 -2
  21. mlrun/common/model_monitoring/helpers.py +9 -5
  22. mlrun/{runtimes → common/runtimes}/constants.py +37 -9
  23. mlrun/common/schemas/__init__.py +24 -4
  24. mlrun/common/schemas/alert.py +203 -0
  25. mlrun/common/schemas/api_gateway.py +148 -0
  26. mlrun/common/schemas/artifact.py +18 -8
  27. mlrun/common/schemas/auth.py +11 -5
  28. mlrun/common/schemas/background_task.py +1 -1
  29. mlrun/common/schemas/client_spec.py +4 -1
  30. mlrun/common/schemas/feature_store.py +16 -16
  31. mlrun/common/schemas/frontend_spec.py +8 -7
  32. mlrun/common/schemas/function.py +5 -1
  33. mlrun/common/schemas/hub.py +11 -18
  34. mlrun/common/schemas/memory_reports.py +2 -2
  35. mlrun/common/schemas/model_monitoring/__init__.py +18 -3
  36. mlrun/common/schemas/model_monitoring/constants.py +83 -26
  37. mlrun/common/schemas/model_monitoring/grafana.py +13 -9
  38. mlrun/common/schemas/model_monitoring/model_endpoints.py +99 -16
  39. mlrun/common/schemas/notification.py +4 -4
  40. mlrun/common/schemas/object.py +2 -2
  41. mlrun/{runtimes/mpijob/v1alpha1.py → common/schemas/pagination.py} +10 -13
  42. mlrun/common/schemas/pipeline.py +1 -10
  43. mlrun/common/schemas/project.py +24 -23
  44. mlrun/common/schemas/runtime_resource.py +8 -12
  45. mlrun/common/schemas/schedule.py +3 -3
  46. mlrun/common/schemas/tag.py +1 -2
  47. mlrun/common/schemas/workflow.py +2 -2
  48. mlrun/common/types.py +7 -1
  49. mlrun/config.py +54 -17
  50. mlrun/data_types/to_pandas.py +10 -12
  51. mlrun/datastore/__init__.py +5 -8
  52. mlrun/datastore/alibaba_oss.py +130 -0
  53. mlrun/datastore/azure_blob.py +17 -5
  54. mlrun/datastore/base.py +62 -39
  55. mlrun/datastore/datastore.py +28 -9
  56. mlrun/datastore/datastore_profile.py +146 -20
  57. mlrun/datastore/filestore.py +0 -1
  58. mlrun/datastore/google_cloud_storage.py +6 -2
  59. mlrun/datastore/hdfs.py +56 -0
  60. mlrun/datastore/inmem.py +2 -2
  61. mlrun/datastore/redis.py +6 -2
  62. mlrun/datastore/s3.py +9 -0
  63. mlrun/datastore/snowflake_utils.py +43 -0
  64. mlrun/datastore/sources.py +201 -96
  65. mlrun/datastore/spark_utils.py +1 -2
  66. mlrun/datastore/store_resources.py +7 -7
  67. mlrun/datastore/targets.py +358 -104
  68. mlrun/datastore/utils.py +72 -58
  69. mlrun/datastore/v3io.py +5 -1
  70. mlrun/db/base.py +185 -35
  71. mlrun/db/factory.py +1 -1
  72. mlrun/db/httpdb.py +614 -179
  73. mlrun/db/nopdb.py +210 -26
  74. mlrun/errors.py +12 -1
  75. mlrun/execution.py +41 -24
  76. mlrun/feature_store/__init__.py +0 -2
  77. mlrun/feature_store/api.py +40 -72
  78. mlrun/feature_store/common.py +1 -1
  79. mlrun/feature_store/feature_set.py +76 -55
  80. mlrun/feature_store/feature_vector.py +28 -30
  81. mlrun/feature_store/ingestion.py +7 -6
  82. mlrun/feature_store/retrieval/base.py +16 -11
  83. mlrun/feature_store/retrieval/conversion.py +11 -13
  84. mlrun/feature_store/retrieval/dask_merger.py +2 -0
  85. mlrun/feature_store/retrieval/job.py +9 -3
  86. mlrun/feature_store/retrieval/local_merger.py +2 -0
  87. mlrun/feature_store/retrieval/spark_merger.py +34 -24
  88. mlrun/feature_store/steps.py +37 -34
  89. mlrun/features.py +9 -20
  90. mlrun/frameworks/_common/artifacts_library.py +9 -9
  91. mlrun/frameworks/_common/mlrun_interface.py +5 -5
  92. mlrun/frameworks/_common/model_handler.py +48 -48
  93. mlrun/frameworks/_common/plan.py +2 -3
  94. mlrun/frameworks/_common/producer.py +3 -4
  95. mlrun/frameworks/_common/utils.py +5 -5
  96. mlrun/frameworks/_dl_common/loggers/logger.py +6 -7
  97. mlrun/frameworks/_dl_common/loggers/mlrun_logger.py +9 -9
  98. mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +23 -47
  99. mlrun/frameworks/_ml_common/artifacts_library.py +1 -2
  100. mlrun/frameworks/_ml_common/loggers/logger.py +3 -4
  101. mlrun/frameworks/_ml_common/loggers/mlrun_logger.py +4 -5
  102. mlrun/frameworks/_ml_common/model_handler.py +24 -24
  103. mlrun/frameworks/_ml_common/pkl_model_server.py +2 -2
  104. mlrun/frameworks/_ml_common/plan.py +1 -1
  105. mlrun/frameworks/_ml_common/plans/calibration_curve_plan.py +2 -3
  106. mlrun/frameworks/_ml_common/plans/confusion_matrix_plan.py +2 -3
  107. mlrun/frameworks/_ml_common/plans/dataset_plan.py +3 -3
  108. mlrun/frameworks/_ml_common/plans/feature_importance_plan.py +3 -3
  109. mlrun/frameworks/_ml_common/plans/roc_curve_plan.py +4 -4
  110. mlrun/frameworks/_ml_common/utils.py +4 -4
  111. mlrun/frameworks/auto_mlrun/auto_mlrun.py +9 -9
  112. mlrun/frameworks/huggingface/model_server.py +4 -4
  113. mlrun/frameworks/lgbm/__init__.py +33 -33
  114. mlrun/frameworks/lgbm/callbacks/callback.py +2 -4
  115. mlrun/frameworks/lgbm/callbacks/logging_callback.py +4 -5
  116. mlrun/frameworks/lgbm/callbacks/mlrun_logging_callback.py +4 -5
  117. mlrun/frameworks/lgbm/mlrun_interfaces/booster_mlrun_interface.py +1 -3
  118. mlrun/frameworks/lgbm/mlrun_interfaces/mlrun_interface.py +6 -6
  119. mlrun/frameworks/lgbm/model_handler.py +10 -10
  120. mlrun/frameworks/lgbm/model_server.py +6 -6
  121. mlrun/frameworks/lgbm/utils.py +5 -5
  122. mlrun/frameworks/onnx/dataset.py +8 -8
  123. mlrun/frameworks/onnx/mlrun_interface.py +3 -3
  124. mlrun/frameworks/onnx/model_handler.py +6 -6
  125. mlrun/frameworks/onnx/model_server.py +7 -7
  126. mlrun/frameworks/parallel_coordinates.py +4 -3
  127. mlrun/frameworks/pytorch/__init__.py +18 -18
  128. mlrun/frameworks/pytorch/callbacks/callback.py +4 -5
  129. mlrun/frameworks/pytorch/callbacks/logging_callback.py +17 -17
  130. mlrun/frameworks/pytorch/callbacks/mlrun_logging_callback.py +11 -11
  131. mlrun/frameworks/pytorch/callbacks/tensorboard_logging_callback.py +23 -29
  132. mlrun/frameworks/pytorch/callbacks_handler.py +38 -38
  133. mlrun/frameworks/pytorch/mlrun_interface.py +20 -20
  134. mlrun/frameworks/pytorch/model_handler.py +17 -17
  135. mlrun/frameworks/pytorch/model_server.py +7 -7
  136. mlrun/frameworks/sklearn/__init__.py +13 -13
  137. mlrun/frameworks/sklearn/estimator.py +4 -4
  138. mlrun/frameworks/sklearn/metrics_library.py +14 -14
  139. mlrun/frameworks/sklearn/mlrun_interface.py +3 -6
  140. mlrun/frameworks/sklearn/model_handler.py +2 -2
  141. mlrun/frameworks/tf_keras/__init__.py +10 -7
  142. mlrun/frameworks/tf_keras/callbacks/logging_callback.py +15 -15
  143. mlrun/frameworks/tf_keras/callbacks/mlrun_logging_callback.py +11 -11
  144. mlrun/frameworks/tf_keras/callbacks/tensorboard_logging_callback.py +19 -23
  145. mlrun/frameworks/tf_keras/mlrun_interface.py +9 -11
  146. mlrun/frameworks/tf_keras/model_handler.py +14 -14
  147. mlrun/frameworks/tf_keras/model_server.py +6 -6
  148. mlrun/frameworks/xgboost/__init__.py +13 -13
  149. mlrun/frameworks/xgboost/model_handler.py +6 -6
  150. mlrun/k8s_utils.py +14 -16
  151. mlrun/launcher/__init__.py +1 -1
  152. mlrun/launcher/base.py +16 -15
  153. mlrun/launcher/client.py +8 -6
  154. mlrun/launcher/factory.py +1 -1
  155. mlrun/launcher/local.py +17 -11
  156. mlrun/launcher/remote.py +16 -10
  157. mlrun/lists.py +7 -6
  158. mlrun/model.py +238 -73
  159. mlrun/model_monitoring/__init__.py +1 -1
  160. mlrun/model_monitoring/api.py +138 -315
  161. mlrun/model_monitoring/application.py +5 -296
  162. mlrun/model_monitoring/applications/__init__.py +24 -0
  163. mlrun/model_monitoring/applications/_application_steps.py +157 -0
  164. mlrun/model_monitoring/applications/base.py +282 -0
  165. mlrun/model_monitoring/applications/context.py +214 -0
  166. mlrun/model_monitoring/applications/evidently_base.py +211 -0
  167. mlrun/model_monitoring/applications/histogram_data_drift.py +349 -0
  168. mlrun/model_monitoring/applications/results.py +99 -0
  169. mlrun/model_monitoring/controller.py +104 -84
  170. mlrun/model_monitoring/controller_handler.py +13 -5
  171. mlrun/model_monitoring/db/__init__.py +18 -0
  172. mlrun/model_monitoring/{stores → db/stores}/__init__.py +43 -36
  173. mlrun/model_monitoring/db/stores/base/__init__.py +15 -0
  174. mlrun/model_monitoring/{stores/model_endpoint_store.py → db/stores/base/store.py} +64 -40
  175. mlrun/model_monitoring/db/stores/sqldb/__init__.py +13 -0
  176. mlrun/model_monitoring/db/stores/sqldb/models/__init__.py +71 -0
  177. mlrun/model_monitoring/{stores → db/stores/sqldb}/models/base.py +109 -5
  178. mlrun/model_monitoring/db/stores/sqldb/models/mysql.py +88 -0
  179. mlrun/model_monitoring/{stores/models/mysql.py → db/stores/sqldb/models/sqlite.py} +19 -13
  180. mlrun/model_monitoring/db/stores/sqldb/sql_store.py +684 -0
  181. mlrun/model_monitoring/db/stores/v3io_kv/__init__.py +13 -0
  182. mlrun/model_monitoring/{stores/kv_model_endpoint_store.py → db/stores/v3io_kv/kv_store.py} +310 -165
  183. mlrun/model_monitoring/db/tsdb/__init__.py +100 -0
  184. mlrun/model_monitoring/db/tsdb/base.py +329 -0
  185. mlrun/model_monitoring/db/tsdb/helpers.py +30 -0
  186. mlrun/model_monitoring/db/tsdb/tdengine/__init__.py +15 -0
  187. mlrun/model_monitoring/db/tsdb/tdengine/schemas.py +240 -0
  188. mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py +45 -0
  189. mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +397 -0
  190. mlrun/model_monitoring/db/tsdb/v3io/__init__.py +15 -0
  191. mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py +117 -0
  192. mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +630 -0
  193. mlrun/model_monitoring/evidently_application.py +6 -118
  194. mlrun/model_monitoring/features_drift_table.py +134 -106
  195. mlrun/model_monitoring/helpers.py +127 -28
  196. mlrun/model_monitoring/metrics/__init__.py +13 -0
  197. mlrun/model_monitoring/metrics/histogram_distance.py +127 -0
  198. mlrun/model_monitoring/model_endpoint.py +3 -2
  199. mlrun/model_monitoring/prometheus.py +1 -4
  200. mlrun/model_monitoring/stream_processing.py +62 -231
  201. mlrun/model_monitoring/tracking_policy.py +9 -2
  202. mlrun/model_monitoring/writer.py +152 -124
  203. mlrun/package/__init__.py +6 -6
  204. mlrun/package/context_handler.py +5 -5
  205. mlrun/package/packager.py +7 -7
  206. mlrun/package/packagers/default_packager.py +6 -6
  207. mlrun/package/packagers/numpy_packagers.py +15 -15
  208. mlrun/package/packagers/pandas_packagers.py +5 -5
  209. mlrun/package/packagers/python_standard_library_packagers.py +10 -10
  210. mlrun/package/packagers_manager.py +19 -23
  211. mlrun/package/utils/_formatter.py +6 -6
  212. mlrun/package/utils/_pickler.py +2 -2
  213. mlrun/package/utils/_supported_format.py +4 -4
  214. mlrun/package/utils/log_hint_utils.py +2 -2
  215. mlrun/package/utils/type_hint_utils.py +4 -9
  216. mlrun/platforms/__init__.py +11 -10
  217. mlrun/platforms/iguazio.py +24 -203
  218. mlrun/projects/operations.py +35 -21
  219. mlrun/projects/pipelines.py +68 -99
  220. mlrun/projects/project.py +830 -266
  221. mlrun/render.py +3 -11
  222. mlrun/run.py +162 -166
  223. mlrun/runtimes/__init__.py +62 -7
  224. mlrun/runtimes/base.py +39 -32
  225. mlrun/runtimes/daskjob.py +8 -8
  226. mlrun/runtimes/databricks_job/databricks_cancel_task.py +1 -1
  227. mlrun/runtimes/databricks_job/databricks_runtime.py +7 -7
  228. mlrun/runtimes/databricks_job/databricks_wrapper.py +1 -1
  229. mlrun/runtimes/funcdoc.py +0 -28
  230. mlrun/runtimes/function_reference.py +1 -1
  231. mlrun/runtimes/kubejob.py +28 -122
  232. mlrun/runtimes/local.py +6 -3
  233. mlrun/runtimes/mpijob/__init__.py +0 -20
  234. mlrun/runtimes/mpijob/abstract.py +9 -10
  235. mlrun/runtimes/mpijob/v1.py +1 -1
  236. mlrun/{model_monitoring/stores/models/sqlite.py → runtimes/nuclio/__init__.py} +7 -9
  237. mlrun/runtimes/nuclio/api_gateway.py +709 -0
  238. mlrun/runtimes/nuclio/application/__init__.py +15 -0
  239. mlrun/runtimes/nuclio/application/application.py +523 -0
  240. mlrun/runtimes/nuclio/application/reverse_proxy.go +95 -0
  241. mlrun/runtimes/{function.py → nuclio/function.py} +112 -73
  242. mlrun/runtimes/{nuclio.py → nuclio/nuclio.py} +6 -6
  243. mlrun/runtimes/{serving.py → nuclio/serving.py} +45 -51
  244. mlrun/runtimes/pod.py +286 -88
  245. mlrun/runtimes/remotesparkjob.py +2 -2
  246. mlrun/runtimes/sparkjob/spark3job.py +51 -34
  247. mlrun/runtimes/utils.py +7 -75
  248. mlrun/secrets.py +9 -5
  249. mlrun/serving/remote.py +2 -7
  250. mlrun/serving/routers.py +13 -10
  251. mlrun/serving/server.py +22 -26
  252. mlrun/serving/states.py +99 -25
  253. mlrun/serving/utils.py +3 -3
  254. mlrun/serving/v1_serving.py +6 -7
  255. mlrun/serving/v2_serving.py +59 -20
  256. mlrun/track/tracker.py +2 -1
  257. mlrun/track/tracker_manager.py +3 -3
  258. mlrun/track/trackers/mlflow_tracker.py +1 -2
  259. mlrun/utils/async_http.py +5 -7
  260. mlrun/utils/azure_vault.py +1 -1
  261. mlrun/utils/clones.py +1 -2
  262. mlrun/utils/condition_evaluator.py +3 -3
  263. mlrun/utils/db.py +3 -3
  264. mlrun/utils/helpers.py +183 -197
  265. mlrun/utils/http.py +2 -5
  266. mlrun/utils/logger.py +76 -14
  267. mlrun/utils/notifications/notification/__init__.py +17 -12
  268. mlrun/utils/notifications/notification/base.py +14 -2
  269. mlrun/utils/notifications/notification/console.py +2 -0
  270. mlrun/utils/notifications/notification/git.py +3 -1
  271. mlrun/utils/notifications/notification/ipython.py +3 -1
  272. mlrun/utils/notifications/notification/slack.py +101 -21
  273. mlrun/utils/notifications/notification/webhook.py +11 -1
  274. mlrun/utils/notifications/notification_pusher.py +155 -30
  275. mlrun/utils/retryer.py +208 -0
  276. mlrun/utils/singleton.py +1 -1
  277. mlrun/utils/v3io_clients.py +2 -4
  278. mlrun/utils/version/version.json +2 -2
  279. mlrun/utils/version/version.py +2 -6
  280. {mlrun-1.6.4rc2.dist-info → mlrun-1.7.0rc20.dist-info}/METADATA +31 -19
  281. mlrun-1.7.0rc20.dist-info/RECORD +353 -0
  282. mlrun/kfpops.py +0 -868
  283. mlrun/model_monitoring/batch.py +0 -1095
  284. mlrun/model_monitoring/stores/models/__init__.py +0 -27
  285. mlrun/model_monitoring/stores/sql_model_endpoint_store.py +0 -384
  286. mlrun/platforms/other.py +0 -306
  287. mlrun-1.6.4rc2.dist-info/RECORD +0 -314
  288. {mlrun-1.6.4rc2.dist-info → mlrun-1.7.0rc20.dist-info}/LICENSE +0 -0
  289. {mlrun-1.6.4rc2.dist-info → mlrun-1.7.0rc20.dist-info}/WHEEL +0 -0
  290. {mlrun-1.6.4rc2.dist-info → mlrun-1.7.0rc20.dist-info}/entry_points.txt +0 -0
  291. {mlrun-1.6.4rc2.dist-info → mlrun-1.7.0rc20.dist-info}/top_level.txt +0 -0
@@ -13,7 +13,7 @@
13
13
  # limitations under the License.
14
14
  #
15
15
  import math
16
- from typing import Callable, List, Tuple, Union
16
+ from typing import Callable, Union
17
17
 
18
18
  import numpy as np
19
19
 
@@ -25,11 +25,11 @@ class ONNXDataset:
25
25
 
26
26
  def __init__(
27
27
  self,
28
- x: Union[np.ndarray, List[np.ndarray]],
29
- y: Union[np.ndarray, List[np.ndarray]] = None,
28
+ x: Union[np.ndarray, list[np.ndarray]],
29
+ y: Union[np.ndarray, list[np.ndarray]] = None,
30
30
  batch_size: int = 1,
31
- x_transforms: List[Callable[[np.ndarray], np.ndarray]] = None,
32
- y_transforms: List[Callable[[np.ndarray], np.ndarray]] = None,
31
+ x_transforms: list[Callable[[np.ndarray], np.ndarray]] = None,
32
+ y_transforms: list[Callable[[np.ndarray], np.ndarray]] = None,
33
33
  is_batched_transforms: bool = False,
34
34
  ):
35
35
  """
@@ -71,7 +71,7 @@ class ONNXDataset:
71
71
  self._index = 0
72
72
  return self
73
73
 
74
- def __next__(self) -> Union[np.ndarray, Tuple[np.ndarray, np.ndarray]]:
74
+ def __next__(self) -> Union[np.ndarray, tuple[np.ndarray, np.ndarray]]:
75
75
  """
76
76
  Get the next item in line (by the inner index) since calling '__iter__'. If ground truth was provided (y),
77
77
  a tuple of (x, y) will be returned. Otherwise x.
@@ -92,7 +92,7 @@ class ONNXDataset:
92
92
 
93
93
  def __getitem__(
94
94
  self, index: int
95
- ) -> Union[np.ndarray, Tuple[np.ndarray, np.ndarray]]:
95
+ ) -> Union[np.ndarray, tuple[np.ndarray, np.ndarray]]:
96
96
  """
97
97
  Get the item at the given index. If ground truth was provided, a tuple of (x, y) will be returned. Otherwise x.
98
98
 
@@ -155,7 +155,7 @@ class ONNXDataset:
155
155
  def _call_transforms(
156
156
  self,
157
157
  items: np.ndarray,
158
- transforms: List[Callable[[np.ndarray], np.ndarray]],
158
+ transforms: list[Callable[[np.ndarray], np.ndarray]],
159
159
  is_batched: bool,
160
160
  ):
161
161
  """
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  #
15
- from typing import Callable, List
15
+ from typing import Callable
16
16
 
17
17
  import numpy as np
18
18
  import onnx
@@ -35,7 +35,7 @@ class ONNXMLRunInterface:
35
35
  def __init__(
36
36
  self,
37
37
  model: onnx.ModelProto,
38
- execution_providers: List[str] = None,
38
+ execution_providers: list[str] = None,
39
39
  context: mlrun.MLClientCtx = None,
40
40
  ):
41
41
  # Set the context:
@@ -74,7 +74,7 @@ class ONNXMLRunInterface:
74
74
  def evaluate(
75
75
  self,
76
76
  dataset: ONNXDataset,
77
- metrics: List[Callable[[np.ndarray, np.ndarray], float]],
77
+ metrics: list[Callable[[np.ndarray, np.ndarray], float]],
78
78
  ):
79
79
  pass
80
80
 
@@ -13,7 +13,7 @@
13
13
  # limitations under the License.
14
14
  #
15
15
  import os
16
- from typing import Dict, List, Union
16
+ from typing import Union
17
17
 
18
18
  import onnx
19
19
  import onnxoptimizer
@@ -60,7 +60,7 @@ class ONNXModelHandler(ModelHandler):
60
60
  :raise MLRunInvalidArgumentError: There was no model or model directory supplied.
61
61
  """
62
62
  # Setup the base handler class:
63
- super(ONNXModelHandler, self).__init__(
63
+ super().__init__(
64
64
  model=model,
65
65
  model_path=model_path,
66
66
  model_name=model_name,
@@ -71,7 +71,7 @@ class ONNXModelHandler(ModelHandler):
71
71
  # TODO: output_path won't work well with logging artifacts. Need to look into changing the logic of 'log_artifact'.
72
72
  def save(
73
73
  self, output_path: str = None, **kwargs
74
- ) -> Union[Dict[str, Artifact], None]:
74
+ ) -> Union[dict[str, Artifact], None]:
75
75
  """
76
76
  Save the handled model at the given output path. If a MLRun context is available, the saved model files will be
77
77
  logged and returned as artifacts.
@@ -81,7 +81,7 @@ class ONNXModelHandler(ModelHandler):
81
81
 
82
82
  :return The saved model additional artifacts (if needed) dictionary if context is available and None otherwise.
83
83
  """
84
- super(ONNXModelHandler, self).save(output_path=output_path)
84
+ super().save(output_path=output_path)
85
85
 
86
86
  # Set the output path:
87
87
  if output_path is None:
@@ -97,7 +97,7 @@ class ONNXModelHandler(ModelHandler):
97
97
  """
98
98
  Load the specified model in this handler.
99
99
  """
100
- super(ONNXModelHandler, self).load()
100
+ super().load()
101
101
 
102
102
  # Check that the model is well-formed:
103
103
  # TODO: Currently not working well with HuggingFace models so we skip it
@@ -106,7 +106,7 @@ class ONNXModelHandler(ModelHandler):
106
106
  # Load the ONNX model:
107
107
  self._model = onnx.load(self._model_file)
108
108
 
109
- def optimize(self, optimizations: List[str] = None, fixed_point: bool = False):
109
+ def optimize(self, optimizations: list[str] = None, fixed_point: bool = False):
110
110
  """
111
111
  Use ONNX optimizer to optimize the ONNX model. The optimizations supported can be seen by calling
112
112
  'onnxoptimizer.get_available_passes()'
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  #
15
- from typing import Any, Dict, List, Tuple, Union
15
+ from typing import Any, Union
16
16
 
17
17
  import numpy as np
18
18
  import onnx
@@ -37,7 +37,7 @@ class ONNXModelServer(V2ModelServer):
37
37
  model: onnx.ModelProto = None,
38
38
  model_path: str = None,
39
39
  model_name: str = None,
40
- execution_providers: List[Union[str, Tuple[str, Dict[str, Any]]]] = None,
40
+ execution_providers: list[Union[str, tuple[str, dict[str, Any]]]] = None,
41
41
  protocol: str = None,
42
42
  **class_args,
43
43
  ):
@@ -76,7 +76,7 @@ class ONNXModelServer(V2ModelServer):
76
76
  :param protocol: -
77
77
  :param class_args: -
78
78
  """
79
- super(ONNXModelServer, self).__init__(
79
+ super().__init__(
80
80
  context=context,
81
81
  name=name,
82
82
  model_path=model_path,
@@ -98,8 +98,8 @@ class ONNXModelServer(V2ModelServer):
98
98
  # Prepare inference parameters:
99
99
  self._model_handler: ONNXModelHandler = None
100
100
  self._inference_session: onnxruntime.InferenceSession = None
101
- self._input_layers: List[str] = None
102
- self._output_layers: List[str] = None
101
+ self._input_layers: list[str] = None
102
+ self._output_layers: list[str] = None
103
103
 
104
104
  def load(self):
105
105
  """
@@ -134,7 +134,7 @@ class ONNXModelServer(V2ModelServer):
134
134
  output_layer.name for output_layer in self._inference_session.get_outputs()
135
135
  ]
136
136
 
137
- def predict(self, request: Dict[str, Any]) -> np.ndarray:
137
+ def predict(self, request: dict[str, Any]) -> np.ndarray:
138
138
  """
139
139
  Infer the inputs through the model using ONNXRunTime and return its output. The inferred data will be
140
140
  read from the "inputs" key of the request.
@@ -155,7 +155,7 @@ class ONNXModelServer(V2ModelServer):
155
155
  },
156
156
  )
157
157
 
158
- def explain(self, request: Dict[str, Any]) -> str:
158
+ def explain(self, request: dict[str, Any]) -> str:
159
159
  """
160
160
  Return a string explaining what model is being serve in this serving function and the function name.
161
161
 
@@ -14,7 +14,7 @@
14
14
  #
15
15
  import datetime
16
16
  import os
17
- from typing import List, Union
17
+ from typing import Union
18
18
 
19
19
  import numpy as np
20
20
  import pandas as pd
@@ -239,7 +239,7 @@ def _runs_list_to_df(runs_list, extend_iterations=False):
239
239
 
240
240
  @filter_warnings("ignore", FutureWarning)
241
241
  def compare_run_objects(
242
- runs_list: Union[mlrun.model.RunObject, List[mlrun.model.RunObject]],
242
+ runs_list: Union[mlrun.model.RunObject, list[mlrun.model.RunObject]],
243
243
  hide_identical: bool = True,
244
244
  exclude: list = None,
245
245
  show: bool = None,
@@ -295,7 +295,7 @@ def compare_db_runs(
295
295
  iter=False,
296
296
  start_time_from: datetime = None,
297
297
  hide_identical: bool = True,
298
- exclude: list = [],
298
+ exclude: list = None,
299
299
  show=None,
300
300
  colorscale: str = "Blues",
301
301
  filename=None,
@@ -332,6 +332,7 @@ def compare_db_runs(
332
332
  **query_args,
333
333
  )
334
334
 
335
+ exclude = exclude or []
335
336
  runs_df = _runs_list_to_df(runs_list)
336
337
  plot_as_html = gen_pcp_plot(
337
338
  runs_df,
@@ -13,7 +13,7 @@
13
13
  # limitations under the License.
14
14
  #
15
15
  # flake8: noqa - this is until we take care of the F401 violations with respect to __all__ & sphinx
16
- from typing import Any, Dict, List, Tuple, Union
16
+ from typing import Any, Union
17
17
 
18
18
  from torch.nn import Module
19
19
  from torch.optim import Optimizer
@@ -35,23 +35,23 @@ def train(
35
35
  loss_function: Module,
36
36
  optimizer: Optimizer,
37
37
  validation_set: DataLoader = None,
38
- metric_functions: List[PyTorchTypes.MetricFunctionType] = None,
38
+ metric_functions: list[PyTorchTypes.MetricFunctionType] = None,
39
39
  scheduler=None,
40
40
  scheduler_step_frequency: Union[int, float, str] = "epoch",
41
41
  epochs: int = 1,
42
42
  training_iterations: int = None,
43
43
  validation_iterations: int = None,
44
- callbacks_list: List[Callback] = None,
44
+ callbacks_list: list[Callback] = None,
45
45
  use_cuda: bool = True,
46
46
  use_horovod: bool = None,
47
47
  auto_log: bool = True,
48
48
  model_name: str = None,
49
- modules_map: Union[Dict[str, Union[None, str, List[str]]], str] = None,
50
- custom_objects_map: Union[Dict[str, Union[str, List[str]]], str] = None,
49
+ modules_map: Union[dict[str, Union[None, str, list[str]]], str] = None,
50
+ custom_objects_map: Union[dict[str, Union[str, list[str]]], str] = None,
51
51
  custom_objects_directory: str = None,
52
52
  tensorboard_directory: str = None,
53
- mlrun_callback_kwargs: Dict[str, Any] = None,
54
- tensorboard_callback_kwargs: Dict[str, Any] = None,
53
+ mlrun_callback_kwargs: dict[str, Any] = None,
54
+ tensorboard_callback_kwargs: dict[str, Any] = None,
55
55
  context: mlrun.MLClientCtx = None,
56
56
  ) -> PyTorchModelHandler:
57
57
  """
@@ -112,7 +112,7 @@ def train(
112
112
 
113
113
  {
114
114
  "/.../custom_optimizer.py": "optimizer",
115
- "/.../custom_layers.py": ["layer1", "layer2"]
115
+ "/.../custom_layers.py": ["layer1", "layer2"],
116
116
  }
117
117
 
118
118
  All the paths will be accessed from the given 'custom_objects_directory',
@@ -205,19 +205,19 @@ def evaluate(
205
205
  dataset: DataLoader,
206
206
  model: Module = None,
207
207
  loss_function: Module = None,
208
- metric_functions: List[PyTorchTypes.MetricFunctionType] = None,
208
+ metric_functions: list[PyTorchTypes.MetricFunctionType] = None,
209
209
  iterations: int = None,
210
- callbacks_list: List[Callback] = None,
210
+ callbacks_list: list[Callback] = None,
211
211
  use_cuda: bool = True,
212
212
  use_horovod: bool = False,
213
213
  auto_log: bool = True,
214
214
  model_name: str = None,
215
- modules_map: Union[Dict[str, Union[None, str, List[str]]], str] = None,
216
- custom_objects_map: Union[Dict[str, Union[str, List[str]]], str] = None,
215
+ modules_map: Union[dict[str, Union[None, str, list[str]]], str] = None,
216
+ custom_objects_map: Union[dict[str, Union[str, list[str]]], str] = None,
217
217
  custom_objects_directory: str = None,
218
- mlrun_callback_kwargs: Dict[str, Any] = None,
218
+ mlrun_callback_kwargs: dict[str, Any] = None,
219
219
  context: mlrun.MLClientCtx = None,
220
- ) -> Tuple[PyTorchModelHandler, List[PyTorchTypes.MetricValueType]]:
220
+ ) -> tuple[PyTorchModelHandler, list[PyTorchTypes.MetricValueType]]:
221
221
  """
222
222
  Use MLRun's PyTorch interface to evaluate the model with the given parameters. For more information and further
223
223
  options regarding the auto logging, see 'PyTorchMLRunInterface' documentation. Notice for auto-logging: In order to
@@ -264,7 +264,7 @@ def evaluate(
264
264
 
265
265
  {
266
266
  "/.../custom_optimizer.py": "optimizer",
267
- "/.../custom_layers.py": ["layer1", "layer2"]
267
+ "/.../custom_layers.py": ["layer1", "layer2"],
268
268
  }
269
269
 
270
270
  All the paths will be accessed from the given 'custom_objects_directory', meaning
@@ -343,9 +343,9 @@ def evaluate(
343
343
  def _parse_callbacks_kwargs(
344
344
  handler: PyTorchModelHandler,
345
345
  tensorboard_directory: Union[str, None],
346
- mlrun_callback_kwargs: Union[Dict[str, Any], None],
347
- tensorboard_callback_kwargs: Union[Dict[str, Any], None],
348
- ) -> Tuple[dict, dict]:
346
+ mlrun_callback_kwargs: Union[dict[str, Any], None],
347
+ tensorboard_callback_kwargs: Union[dict[str, Any], None],
348
+ ) -> tuple[dict, dict]:
349
349
  """
350
350
  Parse the given parameters into the MLRun and Tensorboard callbacks kwargs.
351
351
 
@@ -13,7 +13,6 @@
13
13
  # limitations under the License.
14
14
  #
15
15
  from abc import ABC, abstractmethod
16
- from typing import List
17
16
 
18
17
  from torch import Tensor
19
18
  from torch.nn import Module
@@ -68,7 +67,7 @@ class Callback(ABC):
68
67
  validation_set: DataLoader = None,
69
68
  loss_function: Module = None,
70
69
  optimizer: Optimizer = None,
71
- metric_functions: List[PyTorchTypes.MetricFunctionType] = None,
70
+ metric_functions: list[PyTorchTypes.MetricFunctionType] = None,
72
71
  scheduler=None,
73
72
  ):
74
73
  """
@@ -141,7 +140,7 @@ class Callback(ABC):
141
140
  pass
142
141
 
143
142
  def on_validation_end(
144
- self, loss_value: PyTorchTypes.MetricValueType, metric_values: List[float]
143
+ self, loss_value: PyTorchTypes.MetricValueType, metric_values: list[float]
145
144
  ) -> bool:
146
145
  """
147
146
  Before the validation (in a training case it will be per epoch) ends, this method will be called.
@@ -258,7 +257,7 @@ class Callback(ABC):
258
257
  """
259
258
  pass
260
259
 
261
- def on_train_metrics_end(self, metric_values: List[PyTorchTypes.MetricValueType]):
260
+ def on_train_metrics_end(self, metric_values: list[PyTorchTypes.MetricValueType]):
262
261
  """
263
262
  After the training calculation of the metrics, this method will be called.
264
263
 
@@ -273,7 +272,7 @@ class Callback(ABC):
273
272
  pass
274
273
 
275
274
  def on_validation_metrics_end(
276
- self, metric_values: List[PyTorchTypes.MetricValueType]
275
+ self, metric_values: list[PyTorchTypes.MetricValueType]
277
276
  ):
278
277
  """
279
278
  After the validating calculation of the metrics, this method will be called.
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  #
15
- from typing import Callable, Dict, List, Tuple, Union
15
+ from typing import Callable, Union
16
16
 
17
17
  import numpy as np
18
18
  from torch import Tensor
@@ -59,15 +59,15 @@ class LoggingCallback(Callback):
59
59
  def __init__(
60
60
  self,
61
61
  context: mlrun.MLClientCtx = None,
62
- dynamic_hyperparameters: Dict[
62
+ dynamic_hyperparameters: dict[
63
63
  str,
64
- Tuple[
64
+ tuple[
65
65
  str,
66
- Union[List[Union[str, int]], Callable[[], PyTorchTypes.TrackableType]],
66
+ Union[list[Union[str, int]], Callable[[], PyTorchTypes.TrackableType]],
67
67
  ],
68
68
  ] = None,
69
- static_hyperparameters: Dict[
70
- str, Union[PyTorchTypes.TrackableType, Tuple[str, List[Union[str, int]]]]
69
+ static_hyperparameters: dict[
70
+ str, Union[PyTorchTypes.TrackableType, tuple[str, list[Union[str, int]]]]
71
71
  ] = None,
72
72
  auto_log: bool = False,
73
73
  ):
@@ -100,7 +100,7 @@ class LoggingCallback(Callback):
100
100
  :param auto_log: Whether or not to enable auto logging, trying to track common static and dynamic
101
101
  hyperparameters.
102
102
  """
103
- super(LoggingCallback, self).__init__()
103
+ super().__init__()
104
104
 
105
105
  # Store the configurations:
106
106
  self._dynamic_hyperparameters_keys = (
@@ -117,7 +117,7 @@ class LoggingCallback(Callback):
117
117
  self._is_training = None # type: bool
118
118
  self._auto_log = auto_log
119
119
 
120
- def get_training_results(self) -> Dict[str, List[List[float]]]:
120
+ def get_training_results(self) -> dict[str, list[list[float]]]:
121
121
  """
122
122
  Get the training results logged. The results will be stored in a dictionary where each key is the metric name
123
123
  and the value is a list of lists of values. The first list is by epoch and the second list is by iteration
@@ -127,7 +127,7 @@ class LoggingCallback(Callback):
127
127
  """
128
128
  return self._logger.training_results
129
129
 
130
- def get_validation_results(self) -> Dict[str, List[List[float]]]:
130
+ def get_validation_results(self) -> dict[str, list[list[float]]]:
131
131
  """
132
132
  Get the validation results logged. The results will be stored in a dictionary where each key is the metric name
133
133
  and the value is a list of lists of values. The first list is by epoch and the second list is by iteration
@@ -137,7 +137,7 @@ class LoggingCallback(Callback):
137
137
  """
138
138
  return self._logger.validation_results
139
139
 
140
- def get_static_hyperparameters(self) -> Dict[str, PyTorchTypes.TrackableType]:
140
+ def get_static_hyperparameters(self) -> dict[str, PyTorchTypes.TrackableType]:
141
141
  """
142
142
  Get the static hyperparameters logged. The hyperparameters will be stored in a dictionary where each key is the
143
143
  hyperparameter name and the value is his logged value.
@@ -148,7 +148,7 @@ class LoggingCallback(Callback):
148
148
 
149
149
  def get_dynamic_hyperparameters(
150
150
  self,
151
- ) -> Dict[str, List[PyTorchTypes.TrackableType]]:
151
+ ) -> dict[str, list[PyTorchTypes.TrackableType]]:
152
152
  """
153
153
  Get the dynamic hyperparameters logged. The hyperparameters will be stored in a dictionary where each key is the
154
154
  hyperparameter name and the value is a list of his logged values per epoch.
@@ -157,7 +157,7 @@ class LoggingCallback(Callback):
157
157
  """
158
158
  return self._logger.dynamic_hyperparameters
159
159
 
160
- def get_summaries(self) -> Dict[str, List[float]]:
160
+ def get_summaries(self) -> dict[str, list[float]]:
161
161
  """
162
162
  Get the validation summaries of the metrics results. The summaries will be stored in a dictionary where each key
163
163
  is the metric names and the value is a list of all the summary values per epoch.
@@ -210,7 +210,7 @@ class LoggingCallback(Callback):
210
210
  self._add_auto_hyperparameters()
211
211
  # # Static hyperparameters:
212
212
  for name, value in self._static_hyperparameters_keys.items():
213
- if isinstance(value, Tuple):
213
+ if isinstance(value, tuple):
214
214
  # Its a parameter that needed to be extracted via key chain.
215
215
  self._logger.log_static_hyperparameter(
216
216
  parameter_name=name,
@@ -294,7 +294,7 @@ class LoggingCallback(Callback):
294
294
  self._logger.set_mode(mode=LoggingMode.EVALUATION)
295
295
 
296
296
  def on_validation_end(
297
- self, loss_value: PyTorchTypes.MetricValueType, metric_values: List[float]
297
+ self, loss_value: PyTorchTypes.MetricValueType, metric_values: list[float]
298
298
  ):
299
299
  """
300
300
  Before the validation (in a training case it will be per epoch) ends, this method will be called to log the
@@ -372,7 +372,7 @@ class LoggingCallback(Callback):
372
372
  result=float(loss_value),
373
373
  )
374
374
 
375
- def on_train_metrics_end(self, metric_values: List[PyTorchTypes.MetricValueType]):
375
+ def on_train_metrics_end(self, metric_values: list[PyTorchTypes.MetricValueType]):
376
376
  """
377
377
  After the training calculation of the metrics, this method will be called to log the metrics values.
378
378
 
@@ -389,7 +389,7 @@ class LoggingCallback(Callback):
389
389
  )
390
390
 
391
391
  def on_validation_metrics_end(
392
- self, metric_values: List[PyTorchTypes.MetricValueType]
392
+ self, metric_values: list[PyTorchTypes.MetricValueType]
393
393
  ):
394
394
  """
395
395
  After the validating calculation of the metrics, this method will be called to log the metrics values.
@@ -456,7 +456,7 @@ class LoggingCallback(Callback):
456
456
  self,
457
457
  source: str,
458
458
  key_chain: Union[
459
- List[Union[str, int]], Callable[[], PyTorchTypes.TrackableType]
459
+ list[Union[str, int]], Callable[[], PyTorchTypes.TrackableType]
460
460
  ],
461
461
  ) -> PyTorchTypes.TrackableType:
462
462
  """
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  #
15
- from typing import Callable, Dict, List, Tuple, Union
15
+ from typing import Callable, Union
16
16
 
17
17
  import torch
18
18
  from torch import Tensor
@@ -53,20 +53,20 @@ class MLRunLoggingCallback(LoggingCallback):
53
53
  context: mlrun.MLClientCtx,
54
54
  model_handler: PyTorchModelHandler,
55
55
  log_model_tag: str = "",
56
- log_model_labels: Dict[str, PyTorchTypes.TrackableType] = None,
57
- log_model_parameters: Dict[str, PyTorchTypes.TrackableType] = None,
58
- log_model_extra_data: Dict[
56
+ log_model_labels: dict[str, PyTorchTypes.TrackableType] = None,
57
+ log_model_parameters: dict[str, PyTorchTypes.TrackableType] = None,
58
+ log_model_extra_data: dict[
59
59
  str, Union[PyTorchTypes.TrackableType, Artifact]
60
60
  ] = None,
61
- dynamic_hyperparameters: Dict[
61
+ dynamic_hyperparameters: dict[
62
62
  str,
63
- Tuple[
63
+ tuple[
64
64
  str,
65
- Union[List[Union[str, int]], Callable[[], PyTorchTypes.TrackableType]],
65
+ Union[list[Union[str, int]], Callable[[], PyTorchTypes.TrackableType]],
66
66
  ],
67
67
  ] = None,
68
- static_hyperparameters: Dict[
69
- str, Union[PyTorchTypes.TrackableType, Tuple[str, List[Union[str, int]]]]
68
+ static_hyperparameters: dict[
69
+ str, Union[PyTorchTypes.TrackableType, tuple[str, list[Union[str, int]]]]
70
70
  ] = None,
71
71
  auto_log: bool = False,
72
72
  ):
@@ -107,7 +107,7 @@ class MLRunLoggingCallback(LoggingCallback):
107
107
  :param auto_log: Whether or not to enable auto logging for logging the context parameters and
108
108
  trying to track common static and dynamic hyperparameters.
109
109
  """
110
- super(MLRunLoggingCallback, self).__init__(
110
+ super().__init__(
111
111
  dynamic_hyperparameters=dynamic_hyperparameters,
112
112
  static_hyperparameters=static_hyperparameters,
113
113
  auto_log=auto_log,
@@ -160,7 +160,7 @@ class MLRunLoggingCallback(LoggingCallback):
160
160
 
161
161
  :param epoch: The epoch that has just ended.
162
162
  """
163
- super(MLRunLoggingCallback, self).on_epoch_end(epoch=epoch)
163
+ super().on_epoch_end(epoch=epoch)
164
164
 
165
165
  # Create child context to hold the current epoch's results:
166
166
  self._logger.log_epoch_to_context(epoch=epoch)