hydraflow 0.2.16__py3-none-any.whl → 0.2.17__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.
hydraflow/param.py ADDED
@@ -0,0 +1,64 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any
4
+
5
+
6
+ def match(param: str, value: Any) -> bool:
7
+ """Check if the string matches the specified value.
8
+
9
+ Args:
10
+ param (str): The parameter to check.
11
+ value (Any): The value to check.
12
+
13
+ Returns:
14
+ True if the parameter matches the specified value,
15
+ False otherwise.
16
+ """
17
+ if value in [None, True, False]:
18
+ return param == str(value)
19
+
20
+ if isinstance(value, list) and (m := _match_list(param, value)) is not None:
21
+ return m
22
+
23
+ if isinstance(value, tuple) and (m := _match_tuple(param, value)) is not None:
24
+ return m
25
+
26
+ if isinstance(value, int | float | str):
27
+ return type(value)(param) == value
28
+
29
+ return param == str(value)
30
+
31
+
32
+ def _match_list(param: str, value: list) -> bool | None:
33
+ if not value:
34
+ return None
35
+
36
+ if any(param.startswith(x) for x in ["[", "(", "{"]):
37
+ return None
38
+
39
+ if isinstance(value[0], bool):
40
+ return None
41
+
42
+ if not isinstance(value[0], int | float | str):
43
+ return None
44
+
45
+ return type(value[0])(param) in value
46
+
47
+
48
+ def _match_tuple(param: str, value: tuple) -> bool | None:
49
+ if len(value) != 2: # noqa: PLR2004
50
+ return None
51
+
52
+ if any(param.startswith(x) for x in ["[", "(", "{"]):
53
+ return None
54
+
55
+ if isinstance(value[0], bool):
56
+ return None
57
+
58
+ if not isinstance(value[0], int | float | str):
59
+ return None
60
+
61
+ if type(value[0]) is not type(value[1]):
62
+ return None
63
+
64
+ return value[0] <= type(value[0])(param) < value[1] # type: ignore
@@ -23,6 +23,7 @@ from dataclasses import dataclass, field
23
23
  from itertools import chain
24
24
  from typing import TYPE_CHECKING, Any, Concatenate, ParamSpec, TypeVar, overload
25
25
 
26
+ import hydraflow.param
26
27
  from hydraflow.config import iter_params
27
28
  from hydraflow.info import RunCollectionInfo
28
29
 
@@ -86,6 +87,9 @@ class RunCollection:
86
87
  def __contains__(self, run: Run) -> bool:
87
88
  return run in self._runs
88
89
 
90
+ def __bool__(self) -> bool:
91
+ return bool(self._runs)
92
+
89
93
  @classmethod
90
94
  def from_list(cls, runs: list[Run]) -> RunCollection:
91
95
  """Create a `RunCollection` instance from a list of MLflow `Run` instances."""
@@ -569,37 +573,15 @@ class RunCollection:
569
573
 
570
574
 
571
575
  def _param_matches(run: Run, key: str, value: Any) -> bool:
572
- """
573
- Check if the run's parameter matches the specified key-value pair.
574
-
575
- Check if the run's parameters contain the specified
576
- key-value pair. It handles different types of values, including lists
577
- and tuples.
578
-
579
- Args:
580
- run (Run): The run object to check.
581
- key (str): The parameter key to check.
582
- value (Any): The parameter value to check.
583
-
584
- Returns:
585
- True if the run's parameter matches the specified key-value pair,
586
- False otherwise.
587
- """
588
- param = run.data.params.get(key, value)
589
-
590
- if param is None:
591
- return False
576
+ params = run.data.params
577
+ if key not in params:
578
+ return True
592
579
 
580
+ param = params[key]
593
581
  if param == "None":
594
- return value is None
595
-
596
- if isinstance(value, list) and value:
597
- return type(value[0])(param) in value
598
-
599
- if isinstance(value, tuple) and len(value) == 2: # noqa: PLR2004
600
- return value[0] <= type(value[0])(param) < value[1]
582
+ return value is None or value == "None"
601
583
 
602
- return type(value)(param) == value
584
+ return hydraflow.param.match(param, value)
603
585
 
604
586
 
605
587
  def filter_runs(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: hydraflow
3
- Version: 0.2.16
3
+ Version: 0.2.17
4
4
  Summary: Hydraflow integrates Hydra and MLflow to manage and track machine learning experiments.
5
5
  Project-URL: Documentation, https://github.com/daizutabi/hydraflow
6
6
  Project-URL: Source, https://github.com/daizutabi/hydraflow
@@ -4,10 +4,11 @@ hydraflow/config.py,sha256=YU6xYLinxq-Iqw1R3Zy7s3_u8nfpvnvXlGIkPXJTNLc,2116
4
4
  hydraflow/context.py,sha256=4UDaWGoVmeF36UqsKoh6dd_cS_YVRfz80gFr28ouNlo,8040
5
5
  hydraflow/info.py,sha256=7EsCMEH6LJZB3FZiQ3IpPFTD3Meaz7G3M-HvDQeo1rw,3466
6
6
  hydraflow/mlflow.py,sha256=irD1INrVaI_1RIzUCjI36voBqgZszZ4dkSLo4aT1_FM,8271
7
+ hydraflow/param.py,sha256=W71zJH39s8cJcy3qV-PFQHJYyQnfa1GbnHOIqCMG3Jc,1573
7
8
  hydraflow/progress.py,sha256=b5LvLm3d0eW3WsaidZAZotJNTTN3OwSY3XwxXXsJV9A,6561
8
9
  hydraflow/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- hydraflow/run_collection.py,sha256=tiNKy_mUmE-9moLs7enfLQyiwTUvL5eCKnD1acKeUFw,23854
10
- hydraflow-0.2.16.dist-info/METADATA,sha256=PUsFQ8YLW_L-rVzzx1OzQX6imjdQglhIAgJCSV9qEaM,3819
11
- hydraflow-0.2.16.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
12
- hydraflow-0.2.16.dist-info/licenses/LICENSE,sha256=IGdDrBPqz1O0v_UwCW-NJlbX9Hy9b3uJ11t28y2srmY,1062
13
- hydraflow-0.2.16.dist-info/RECORD,,
10
+ hydraflow/run_collection.py,sha256=ym3M5ApEZVwJ1rYgOs4aYluTBfJeOECD6Z9SLFhv5O8,23260
11
+ hydraflow-0.2.17.dist-info/METADATA,sha256=uD6q000C_h2JsuFh0mkf1YmpTYxVDI1RLaAUKzZ6fDw,3819
12
+ hydraflow-0.2.17.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
13
+ hydraflow-0.2.17.dist-info/licenses/LICENSE,sha256=IGdDrBPqz1O0v_UwCW-NJlbX9Hy9b3uJ11t28y2srmY,1062
14
+ hydraflow-0.2.17.dist-info/RECORD,,