hydraflow 0.18.4__tar.gz → 0.19.0__tar.gz
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-0.18.4 → hydraflow-0.19.0}/PKG-INFO +1 -1
- {hydraflow-0.18.4 → hydraflow-0.19.0}/pyproject.toml +1 -1
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/core/run.py +2 -2
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/core/run_collection.py +1 -12
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/cli/test_run.py +4 -8
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/run/test_run_collection.py +1 -7
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/test_group_by.py +1 -1
- {hydraflow-0.18.4 → hydraflow-0.19.0}/.devcontainer/devcontainer.json +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/.devcontainer/postCreate.sh +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/.devcontainer/starship.toml +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/.gitattributes +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/.github/workflows/ci.yaml +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/.github/workflows/docs.yaml +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/.github/workflows/publish.yaml +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/.gitignore +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/LICENSE +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/README.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/getting-started/concepts.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/getting-started/index.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/getting-started/installation.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/index.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/part1-applications/configuration.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/part1-applications/execution.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/part1-applications/index.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/part1-applications/main-decorator.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/part2-advanced/index.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/part2-advanced/job-configuration.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/part2-advanced/sweep-syntax.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/part3-analysis/index.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/part3-analysis/run-class.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/part3-analysis/run-collection.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/part3-analysis/updating-runs.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/practical-tutorials/advanced.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/practical-tutorials/analysis.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/practical-tutorials/applications.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/docs/practical-tutorials/index.md +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/examples/example.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/examples/hydraflow.yaml +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/examples/submit.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/mkdocs.yaml +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/__init__.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/cli.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/core/__init__.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/core/collection.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/core/context.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/core/group_by.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/core/io.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/core/main.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/core/run_info.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/executor/__init__.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/executor/aio.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/executor/conf.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/executor/io.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/executor/job.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/executor/parser.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/py.typed +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/utils/__init__.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/src/hydraflow/utils/progress.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/__init__.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/cli/__init__.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/cli/app.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/cli/conftest.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/cli/hydraflow.yaml +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/cli/submit.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/cli/test_setup.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/cli/test_show.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/cli/test_version.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/conftest.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/__init__.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/context/__init__.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/context/chdir.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/context/log_run.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/context/start_run.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/context/test_chdir.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/context/test_log_run.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/context/test_start_run.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/main/__init__.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/main/default.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/main/force_new_run.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/main/match_overrides.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/main/rerun_finished.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/main/skip_finished.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/main/test_default.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/main/test_dry_run.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/main/test_force_new_run.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/main/test_main.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/main/test_match_overrides.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/main/test_rerun_finished.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/main/test_skip_finished.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/main/test_update.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/main/update.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/run/__init__.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/run/run.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/run/test_run.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/run/test_run_info.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/test_collection.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/core/test_io.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/executor/__init__.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/executor/conftest.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/executor/echo.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/executor/read.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/executor/test_aio.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/executor/test_args.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/executor/test_conf.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/executor/test_io.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/executor/test_job.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/executor/test_parser.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/utils/__init__.py +0 -0
- {hydraflow-0.18.4 → hydraflow-0.19.0}/tests/utils/test_progress.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: hydraflow
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.19.0
|
4
4
|
Summary: HydraFlow seamlessly integrates Hydra and MLflow to streamline ML experiment management, combining Hydra's configuration management with MLflow's tracking capabilities.
|
5
5
|
Project-URL: Documentation, https://daizutabi.github.io/hydraflow/
|
6
6
|
Project-URL: Source, https://github.com/daizutabi/hydraflow
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "hydraflow"
|
7
|
-
version = "0.
|
7
|
+
version = "0.19.0"
|
8
8
|
description = "HydraFlow seamlessly integrates Hydra and MLflow to streamline ML experiment management, combining Hydra's configuration management with MLflow's tracking capabilities."
|
9
9
|
readme = "README.md"
|
10
10
|
license = { file = "LICENSE" }
|
@@ -140,7 +140,7 @@ class Run[C, I = None]:
|
|
140
140
|
impl_factory: Callable[[Path], I] | Callable[[Path, C], I] | None = None,
|
141
141
|
*,
|
142
142
|
n_jobs: int = 0,
|
143
|
-
) -> RunCollection[Self
|
143
|
+
) -> RunCollection[Self]: ...
|
144
144
|
|
145
145
|
@classmethod
|
146
146
|
def load(
|
@@ -149,7 +149,7 @@ class Run[C, I = None]:
|
|
149
149
|
impl_factory: Callable[[Path], I] | Callable[[Path, C], I] | None = None,
|
150
150
|
*,
|
151
151
|
n_jobs: int = 0,
|
152
|
-
) -> Self | RunCollection[Self
|
152
|
+
) -> Self | RunCollection[Self]:
|
153
153
|
"""Load a Run from a run directory.
|
154
154
|
|
155
155
|
Args:
|
@@ -40,7 +40,6 @@ Note:
|
|
40
40
|
|
41
41
|
from __future__ import annotations
|
42
42
|
|
43
|
-
from functools import cached_property
|
44
43
|
from typing import TYPE_CHECKING, overload
|
45
44
|
|
46
45
|
import polars as pl
|
@@ -56,7 +55,7 @@ if TYPE_CHECKING:
|
|
56
55
|
from polars import DataFrame
|
57
56
|
|
58
57
|
|
59
|
-
class RunCollection[R: Run[Any, Any]
|
58
|
+
class RunCollection[R: Run[Any, Any]](Collection[R]):
|
60
59
|
"""A collection of Run instances that implements the Sequence protocol.
|
61
60
|
|
62
61
|
RunCollection provides methods for filtering, sorting, grouping, and analyzing
|
@@ -194,16 +193,6 @@ class RunCollection[R: Run[Any, Any], I = None](Collection[R]):
|
|
194
193
|
"""
|
195
194
|
return pl.concat(run.to_frame(function, *keys) for run in self)
|
196
195
|
|
197
|
-
@cached_property
|
198
|
-
def impls(self) -> Collection[I]:
|
199
|
-
"""Get the implementation objects for all runs in the collection.
|
200
|
-
|
201
|
-
Returns:
|
202
|
-
Collection[I]: A collection of implementation objects for all runs.
|
203
|
-
|
204
|
-
"""
|
205
|
-
return Collection(run.impl for run in self)
|
206
|
-
|
207
196
|
def iterdir(self, relative_dir: str = "") -> Iterator[Path]:
|
208
197
|
"""Iterate over the artifact directories for all runs in the collection.
|
209
198
|
|
@@ -97,19 +97,15 @@ def test_run_echo():
|
|
97
97
|
assert result.exit_code == 0
|
98
98
|
out = result.stdout
|
99
99
|
lines = out.splitlines()
|
100
|
-
assert
|
101
|
-
assert "['a', 'b', 'c', '--multirun', 'name=
|
102
|
-
assert "['a', 'b', 'c', '--multirun', 'name=
|
103
|
-
assert "['a', 'b', 'c', '--multirun', 'name=
|
104
|
-
assert "['a', 'b', 'c', '--multirun', 'name=d', 'count=4,5,6'" in lines[4]
|
100
|
+
assert "['a', 'b', 'c', '--multirun', 'name=a', 'count=1,2,3'" in lines[-4]
|
101
|
+
assert "['a', 'b', 'c', '--multirun', 'name=b', 'count=1,2,3'" in lines[-3]
|
102
|
+
assert "['a', 'b', 'c', '--multirun', 'name=c', 'count=4,5,6'" in lines[-2]
|
103
|
+
assert "['a', 'b', 'c', '--multirun', 'name=d', 'count=4,5,6'" in lines[-1]
|
105
104
|
|
106
105
|
|
107
106
|
def test_submit():
|
108
107
|
result = runner.invoke(app, ["run", "submit"])
|
109
108
|
assert result.exit_code == 0
|
110
|
-
out = result.stdout
|
111
|
-
lines = out.splitlines()
|
112
|
-
assert len(lines) == 1
|
113
109
|
run_dirs = list(iter_run_dirs("mlruns", "submit"))
|
114
110
|
assert len(run_dirs) == 4
|
115
111
|
|
@@ -53,7 +53,7 @@ def rc(run_factory):
|
|
53
53
|
return RunCollection(runs, Run.get)
|
54
54
|
|
55
55
|
|
56
|
-
type Rc = RunCollection[Run[Config, Impl]
|
56
|
+
type Rc = RunCollection[Run[Config, Impl]]
|
57
57
|
|
58
58
|
|
59
59
|
def test_repr(rc: Rc):
|
@@ -289,9 +289,3 @@ def test_concat(rc: Rc):
|
|
289
289
|
assert df["size.width"].to_list()[-6:] == [10, 10, 20, 20, 30, 30]
|
290
290
|
assert df["z"].to_list()[:6] == [20, 20, 20, 20, 20, 20]
|
291
291
|
assert df["z"].to_list()[-6:] == [40, 40, 40, 40, 40, 40]
|
292
|
-
|
293
|
-
|
294
|
-
def test_impls(rc: Rc):
|
295
|
-
impls = rc.impls
|
296
|
-
assert len(impls) == 12
|
297
|
-
assert len(impls.filter(lambda i: i.y[0] == "1")) == 6
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|