hydraflow 0.18.3__tar.gz → 0.18.4__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.3 → hydraflow-0.18.4}/PKG-INFO +1 -1
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/part3-analysis/run-class.md +19 -20
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/part3-analysis/run-collection.md +4 -4
- {hydraflow-0.18.3 → hydraflow-0.18.4}/pyproject.toml +2 -2
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/core/run.py +3 -3
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/core/run_collection.py +4 -4
- {hydraflow-0.18.3 → hydraflow-0.18.4}/.devcontainer/devcontainer.json +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/.devcontainer/postCreate.sh +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/.devcontainer/starship.toml +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/.gitattributes +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/.github/workflows/ci.yaml +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/.github/workflows/docs.yaml +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/.github/workflows/publish.yaml +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/.gitignore +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/LICENSE +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/README.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/getting-started/concepts.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/getting-started/index.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/getting-started/installation.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/index.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/part1-applications/configuration.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/part1-applications/execution.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/part1-applications/index.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/part1-applications/main-decorator.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/part2-advanced/index.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/part2-advanced/job-configuration.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/part2-advanced/sweep-syntax.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/part3-analysis/index.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/part3-analysis/updating-runs.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/practical-tutorials/advanced.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/practical-tutorials/analysis.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/practical-tutorials/applications.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/docs/practical-tutorials/index.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/examples/example.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/examples/hydraflow.yaml +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/examples/submit.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/mkdocs.yaml +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/cli.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/core/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/core/collection.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/core/context.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/core/group_by.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/core/io.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/core/main.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/core/run_info.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/executor/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/executor/aio.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/executor/conf.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/executor/io.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/executor/job.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/executor/parser.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/py.typed +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/utils/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/src/hydraflow/utils/progress.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/cli/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/cli/app.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/cli/conftest.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/cli/hydraflow.yaml +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/cli/submit.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/cli/test_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/cli/test_setup.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/cli/test_show.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/cli/test_version.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/conftest.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/context/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/context/chdir.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/context/log_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/context/start_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/context/test_chdir.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/context/test_log_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/context/test_start_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/main/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/main/default.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/main/force_new_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/main/match_overrides.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/main/rerun_finished.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/main/skip_finished.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/main/test_default.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/main/test_dry_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/main/test_force_new_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/main/test_main.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/main/test_match_overrides.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/main/test_rerun_finished.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/main/test_skip_finished.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/main/test_update.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/main/update.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/run/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/run/run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/run/test_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/run/test_run_collection.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/run/test_run_info.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/test_collection.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/test_group_by.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/core/test_io.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/executor/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/executor/conftest.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/executor/echo.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/executor/read.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/executor/test_aio.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/executor/test_args.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/executor/test_conf.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/executor/test_io.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/executor/test_job.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/executor/test_parser.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/utils/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.18.4}/tests/utils/test_progress.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: hydraflow
|
3
|
-
Version: 0.18.
|
3
|
+
Version: 0.18.4
|
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
|
@@ -191,22 +191,6 @@ run = Run[Config, AdvancedModelLoader](run_dir, AdvancedModelLoader)
|
|
191
191
|
model = run.impl.load_model() # Uses configuration information
|
192
192
|
```
|
193
193
|
|
194
|
-
## Loading Multiple Runs
|
195
|
-
|
196
|
-
The `load` class method can load both individual runs and collections of runs:
|
197
|
-
|
198
|
-
```python
|
199
|
-
# Load a single run
|
200
|
-
run = Run.load("mlruns/exp_id/run_id")
|
201
|
-
|
202
|
-
# Load multiple runs to create a RunCollection
|
203
|
-
run_dirs = ["mlruns/exp_id/run_id1", "mlruns/exp_id/run_id2"]
|
204
|
-
runs = Run.load(run_dirs)
|
205
|
-
|
206
|
-
# Load runs with parallel processing
|
207
|
-
runs = Run.load(run_dirs, n_jobs=4) # Use 4 parallel jobs for loading
|
208
|
-
runs = Run.load(run_dirs, n_jobs=-1) # Use all available CPU cores
|
209
|
-
```
|
210
194
|
## Converting to DataFrame
|
211
195
|
|
212
196
|
To convert a Run instance to a Polars DataFrame, use the
|
@@ -231,12 +215,27 @@ df = run.to_frame(
|
|
231
215
|
|
232
216
|
The `to_frame` method accepts the following parameters:
|
233
217
|
|
234
|
-
- `
|
218
|
+
- `function`: A function that takes a Run instance and returns a DataFrame
|
235
219
|
- `*keys`: Keys for the Run's information to add. Accepts the following formats:
|
236
|
-
|
237
|
-
|
220
|
+
- String: A simple key (e.g., "run_id")
|
221
|
+
- Tuple: A tuple of (key, default value or function returning default value)
|
238
222
|
|
223
|
+
## Loading Multiple Runs
|
224
|
+
|
225
|
+
The `load` class method can load both individual runs and collections of runs:
|
226
|
+
|
227
|
+
```python
|
228
|
+
# Load a single run
|
229
|
+
run = Run.load("mlruns/exp_id/run_id")
|
239
230
|
|
231
|
+
# Load multiple runs to create a RunCollection
|
232
|
+
run_dirs = ["mlruns/exp_id/run_id1", "mlruns/exp_id/run_id2"]
|
233
|
+
runs = Run.load(run_dirs)
|
234
|
+
|
235
|
+
# Load runs with parallel processing
|
236
|
+
runs = Run.load(run_dirs, n_jobs=4) # Use 4 parallel jobs for loading
|
237
|
+
runs = Run.load(run_dirs, n_jobs=-1) # Use all available CPU cores
|
238
|
+
```
|
240
239
|
|
241
240
|
### Finding Runs with `iter_run_dirs`
|
242
241
|
|
@@ -294,4 +293,4 @@ based on experiment names or custom filtering criteria.
|
|
294
293
|
The [`Run`][hydraflow.core.run.Run] class provides a powerful interface for
|
295
294
|
working with experiment runs in HydraFlow. Its type-safe configuration access,
|
296
295
|
custom implementation support, and convenient loading mechanisms make it easy
|
297
|
-
to analyze and compare experiment results effectively.
|
296
|
+
to analyze and compare experiment results effectively.
|
@@ -327,10 +327,10 @@ df = run_collection.concat(
|
|
327
327
|
|
328
328
|
The `concat` method accepts the following parameters:
|
329
329
|
|
330
|
-
- `
|
330
|
+
- `function`: A function that takes each Run instance and returns a DataFrame
|
331
331
|
- `*keys`: Keys for the Run's information to add. Accepts the following formats:
|
332
|
-
|
333
|
-
|
332
|
+
- String: A simple key (e.g., "run_id")
|
333
|
+
- Tuple: A tuple of (key, default value or function returning default value)
|
334
334
|
|
335
335
|
## Grouping Runs
|
336
336
|
|
@@ -468,4 +468,4 @@ filtering, grouping, and data extraction capabilities enable efficient extractio
|
|
468
468
|
of insights from large sets of experiments, helping you identify optimal
|
469
469
|
configurations and understand performance trends.
|
470
470
|
|
471
|
-
[hydraflow.core.collection.Collection]: ../../api/hydraflow/core/collection.html#hydraflow.core.collection.Collection
|
471
|
+
[hydraflow.core.collection.Collection]: ../../api/hydraflow/core/collection.html#hydraflow.core.collection.Collection
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "hydraflow"
|
7
|
-
version = "0.18.
|
7
|
+
version = "0.18.4"
|
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" }
|
@@ -62,7 +62,7 @@ dev = [
|
|
62
62
|
"pytest-xdist",
|
63
63
|
"ruff>=0.11",
|
64
64
|
]
|
65
|
-
docs = ["markdown-exec[ansi]", "mkapi", "mkdocs-material"]
|
65
|
+
docs = ["markdown-exec[ansi]", "mkapi>=4.4", "mkdocs-material"]
|
66
66
|
|
67
67
|
[tool.pytest.ini_options]
|
68
68
|
addopts = [
|
@@ -343,13 +343,13 @@ class Run[C, I = None]:
|
|
343
343
|
|
344
344
|
def to_frame(
|
345
345
|
self,
|
346
|
-
|
346
|
+
function: Callable[[Self], DataFrame],
|
347
347
|
*keys: str | tuple[str, Any | Callable[[Self], Any]],
|
348
348
|
) -> DataFrame:
|
349
349
|
"""Convert the Run to a DataFrame.
|
350
350
|
|
351
351
|
Args:
|
352
|
-
|
352
|
+
function (Callable[[Run], DataFrame]): A function that takes a Run
|
353
353
|
instance and returns a DataFrame.
|
354
354
|
keys (str | tuple[str, Any | Callable[[Run], Any]]): The keys to
|
355
355
|
add to the DataFrame.
|
@@ -358,7 +358,7 @@ class Run[C, I = None]:
|
|
358
358
|
DataFrame: A DataFrame representation of the Run.
|
359
359
|
|
360
360
|
"""
|
361
|
-
return
|
361
|
+
return function(self).with_columns(
|
362
362
|
self.lit(k) if isinstance(k, str) else self.lit(k[0], k[1]) for k in keys
|
363
363
|
)
|
364
364
|
|
@@ -174,7 +174,7 @@ class RunCollection[R: Run[Any, Any], I = None](Collection[R]):
|
|
174
174
|
|
175
175
|
def concat(
|
176
176
|
self,
|
177
|
-
|
177
|
+
function: Callable[[R], DataFrame],
|
178
178
|
*keys: str | tuple[str, Any | Callable[[R], Any]],
|
179
179
|
) -> DataFrame:
|
180
180
|
"""Concatenate the results of a function applied to all runs in the collection.
|
@@ -183,16 +183,16 @@ class RunCollection[R: Run[Any, Any], I = None](Collection[R]):
|
|
183
183
|
and concatenates the resulting DataFrames along the specified keys.
|
184
184
|
|
185
185
|
Args:
|
186
|
-
|
186
|
+
function (Callable[[R], DataFrame]): A function that takes a Run
|
187
187
|
instance and returns a DataFrame.
|
188
188
|
keys (str | tuple[str, Any | Callable[[R], Any]]): The keys to
|
189
189
|
add to the DataFrame.
|
190
190
|
|
191
191
|
Returns:
|
192
|
-
DataFrame: A DataFrame representation of the Run.
|
192
|
+
DataFrame: A DataFrame representation of the Run collection.
|
193
193
|
|
194
194
|
"""
|
195
|
-
return pl.concat(run.to_frame(
|
195
|
+
return pl.concat(run.to_frame(function, *keys) for run in self)
|
196
196
|
|
197
197
|
@cached_property
|
198
198
|
def impls(self) -> Collection[I]:
|
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
|
File without changes
|