hydraflow 0.18.3__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.3 → hydraflow-0.19.0}/PKG-INFO +1 -1
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/part3-analysis/run-class.md +19 -20
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/part3-analysis/run-collection.md +4 -4
- {hydraflow-0.18.3 → hydraflow-0.19.0}/pyproject.toml +2 -2
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/core/run.py +5 -5
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/core/run_collection.py +5 -16
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/cli/test_run.py +4 -8
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/run/test_run_collection.py +1 -7
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/test_group_by.py +1 -1
- {hydraflow-0.18.3 → hydraflow-0.19.0}/.devcontainer/devcontainer.json +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/.devcontainer/postCreate.sh +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/.devcontainer/starship.toml +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/.gitattributes +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/.github/workflows/ci.yaml +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/.github/workflows/docs.yaml +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/.github/workflows/publish.yaml +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/.gitignore +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/LICENSE +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/README.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/getting-started/concepts.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/getting-started/index.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/getting-started/installation.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/index.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/part1-applications/configuration.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/part1-applications/execution.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/part1-applications/index.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/part1-applications/main-decorator.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/part2-advanced/index.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/part2-advanced/job-configuration.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/part2-advanced/sweep-syntax.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/part3-analysis/index.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/part3-analysis/updating-runs.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/practical-tutorials/advanced.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/practical-tutorials/analysis.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/practical-tutorials/applications.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/docs/practical-tutorials/index.md +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/examples/example.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/examples/hydraflow.yaml +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/examples/submit.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/mkdocs.yaml +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/cli.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/core/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/core/collection.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/core/context.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/core/group_by.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/core/io.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/core/main.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/core/run_info.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/executor/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/executor/aio.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/executor/conf.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/executor/io.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/executor/job.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/executor/parser.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/py.typed +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/utils/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/src/hydraflow/utils/progress.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/cli/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/cli/app.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/cli/conftest.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/cli/hydraflow.yaml +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/cli/submit.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/cli/test_setup.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/cli/test_show.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/cli/test_version.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/conftest.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/context/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/context/chdir.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/context/log_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/context/start_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/context/test_chdir.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/context/test_log_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/context/test_start_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/main/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/main/default.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/main/force_new_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/main/match_overrides.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/main/rerun_finished.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/main/skip_finished.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/main/test_default.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/main/test_dry_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/main/test_force_new_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/main/test_main.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/main/test_match_overrides.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/main/test_rerun_finished.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/main/test_skip_finished.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/main/test_update.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/main/update.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/run/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/run/run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/run/test_run.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/run/test_run_info.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/test_collection.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/core/test_io.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/executor/__init__.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/executor/conftest.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/executor/echo.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/executor/read.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/executor/test_aio.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/executor/test_args.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/executor/test_conf.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/executor/test_io.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/executor/test_job.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/executor/test_parser.py +0 -0
- {hydraflow-0.18.3 → hydraflow-0.19.0}/tests/utils/__init__.py +0 -0
- {hydraflow-0.18.3 → 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
|
@@ -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.
|
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" }
|
@@ -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 = [
|
@@ -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:
|
@@ -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
|
|
@@ -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
|
@@ -174,7 +173,7 @@ class RunCollection[R: Run[Any, Any], I = None](Collection[R]):
|
|
174
173
|
|
175
174
|
def concat(
|
176
175
|
self,
|
177
|
-
|
176
|
+
function: Callable[[R], DataFrame],
|
178
177
|
*keys: str | tuple[str, Any | Callable[[R], Any]],
|
179
178
|
) -> DataFrame:
|
180
179
|
"""Concatenate the results of a function applied to all runs in the collection.
|
@@ -183,26 +182,16 @@ class RunCollection[R: Run[Any, Any], I = None](Collection[R]):
|
|
183
182
|
and concatenates the resulting DataFrames along the specified keys.
|
184
183
|
|
185
184
|
Args:
|
186
|
-
|
185
|
+
function (Callable[[R], DataFrame]): A function that takes a Run
|
187
186
|
instance and returns a DataFrame.
|
188
187
|
keys (str | tuple[str, Any | Callable[[R], Any]]): The keys to
|
189
188
|
add to the DataFrame.
|
190
189
|
|
191
190
|
Returns:
|
192
|
-
DataFrame: A DataFrame representation of the Run.
|
191
|
+
DataFrame: A DataFrame representation of the Run collection.
|
193
192
|
|
194
193
|
"""
|
195
|
-
return pl.concat(run.to_frame(
|
196
|
-
|
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)
|
194
|
+
return pl.concat(run.to_frame(function, *keys) for run in self)
|
206
195
|
|
207
196
|
def iterdir(self, relative_dir: str = "") -> Iterator[Path]:
|
208
197
|
"""Iterate over the artifact directories for all runs in the collection.
|
@@ -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
|