hydraflow 0.19.0__py3-none-any.whl → 0.19.2__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/cli.py CHANGED
@@ -15,7 +15,7 @@ app = typer.Typer(add_completion=False)
15
15
 
16
16
 
17
17
  @app.command("run", context_settings={"ignore_unknown_options": True})
18
- def _run(
18
+ def _run( # pyright: ignore[reportUnusedFunction]
19
19
  name: Annotated[str, Argument(help="Job name.", show_default=False)],
20
20
  *,
21
21
  args: Annotated[
@@ -17,11 +17,13 @@ from .group_by import GroupBy
17
17
 
18
18
  if TYPE_CHECKING:
19
19
  from collections.abc import Callable, Iterator
20
- from re import Pattern, _FlagsType
20
+ from re import Pattern, _FlagsType # pyright: ignore[reportPrivateUsage]
21
21
  from typing import Any, Self
22
22
 
23
23
  from numpy.typing import NDArray
24
24
 
25
+ # pyright: reportUnknownVariableType=false
26
+
25
27
 
26
28
  class Collection[I](Sequence[I]):
27
29
  """A collection of items that implements the Sequence protocol."""
@@ -280,7 +282,7 @@ class Collection[I](Sequence[I]):
280
282
  self,
281
283
  key: str,
282
284
  default: Any | Callable[[I], Any] = MISSING,
283
- ) -> NDArray:
285
+ ) -> NDArray[Any]:
284
286
  """Extract values for a specific key from all items as a NumPy array.
285
287
 
286
288
  Args:
@@ -323,7 +325,7 @@ class Collection[I](Sequence[I]):
323
325
  self,
324
326
  key: str,
325
327
  default: Any | Callable[[I], Any] = MISSING,
326
- ) -> NDArray:
328
+ ) -> NDArray[Any]:
327
329
  """Get the unique values for a specific key across all items.
328
330
 
329
331
  Args:
@@ -456,13 +458,13 @@ class Collection[I](Sequence[I]):
456
458
  it = (delayed(function)(i, *args, **kwargs) for i in self)
457
459
 
458
460
  if not progress:
459
- return parallel(it) # type: ignore
461
+ return parallel(it) # pyright: ignore[reportReturnType]
460
462
 
461
463
  from hydraflow.utils.progress import Progress
462
464
 
463
465
  with Progress(*Progress.get_default_columns()) as p:
464
466
  p.add_task("", total=len(self))
465
- return parallel(it) # type: ignore
467
+ return parallel(it) # pyright: ignore[reportReturnType]
466
468
 
467
469
  def to_frame(
468
470
  self,
@@ -513,12 +515,12 @@ class Collection[I](Sequence[I]):
513
515
  keys_ = []
514
516
  for k in keys:
515
517
  if isinstance(k, tuple):
516
- keys_.append(k[0])
518
+ keys_.append(k[0]) # pyright: ignore[reportUnknownMemberType]
517
519
  defaults[k[0]] = k[1]
518
520
  else:
519
- keys_.append(k)
521
+ keys_.append(k) # pyright: ignore[reportUnknownMemberType]
520
522
 
521
- data = {k: self.to_list(k, defaults.get(k, MISSING)) for k in keys_}
523
+ data = {k: self.to_list(k, defaults.get(k, MISSING)) for k in keys_} # pyright: ignore[reportUnknownArgumentType]
522
524
  df = DataFrame(data)
523
525
 
524
526
  if not kwargs:
@@ -907,11 +909,11 @@ def matches(value: Any, criterion: Any) -> bool:
907
909
  if isinstance(criterion, list | set) and not _is_iterable(value):
908
910
  return value in criterion
909
911
 
910
- if isinstance(criterion, tuple) and len(criterion) == 2 and not _is_iterable(value):
912
+ if isinstance(criterion, tuple) and len(criterion) == 2 and not _is_iterable(value): # pyright: ignore[reportUnknownArgumentType]
911
913
  return criterion[0] <= value <= criterion[1]
912
914
 
913
915
  if _is_iterable(criterion):
914
- criterion = list(criterion)
916
+ criterion = list(criterion) # pyright: ignore[reportUnknownArgumentType]
915
917
 
916
918
  if _is_iterable(value):
917
919
  value = list(value)
@@ -193,10 +193,10 @@ class GroupBy[C: Collection[Any], I]:
193
193
  else:
194
194
  df = DataFrame(dict(zip(self.by, k, strict=True)) for k in gp)
195
195
 
196
- columns = []
196
+ columns: list[Series] = []
197
197
 
198
198
  for agg in aggs:
199
- values = [[c._get(i, agg, MISSING) for i in c] for c in gp.values()] # noqa: SLF001
199
+ values = [[c._get(i, agg, MISSING) for i in c] for c in gp.values()] # noqa: SLF001 # pyright: ignore[reportPrivateUsage]
200
200
  columns.append(Series(agg, values))
201
201
 
202
202
  for k, v in named_aggs.items():
hydraflow/core/io.py CHANGED
@@ -38,7 +38,7 @@ def get_artifact_dir(run: Run) -> Path:
38
38
  The local path to the directory where the artifacts are downloaded.
39
39
 
40
40
  """
41
- uri = run.info.artifact_uri
41
+ uri = run.info.artifact_uri # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType]
42
42
 
43
43
  if not isinstance(uri, str):
44
44
  raise NotImplementedError
hydraflow/core/main.py CHANGED
@@ -105,7 +105,7 @@ def main[C](
105
105
  dry_run = True
106
106
  sys.argv.remove("--dry-run")
107
107
 
108
- finished = RunStatus.to_string(RunStatus.FINISHED)
108
+ finished = RunStatus.to_string(RunStatus.FINISHED) # pyright: ignore[reportUnknownMemberType]
109
109
 
110
110
  def decorator(app: Callable[[Run, C], None]) -> Callable[[], None]:
111
111
  ConfigStore.instance().store(config_name, node)
@@ -134,11 +134,11 @@ def main[C](
134
134
  else:
135
135
  uri = experiment.artifact_location
136
136
  overrides = hc.overrides.task if match_overrides else None
137
- run_id = get_run_id(uri, cfg, overrides)
137
+ run_id = get_run_id(uri, cfg, overrides) # pyright: ignore[reportUnknownArgumentType]
138
138
 
139
139
  if run_id and not rerun_finished:
140
140
  run = mlflow.get_run(run_id)
141
- if run.info.status == finished:
141
+ if run.info.status == finished: # pyright: ignore[reportUnknownMemberType]
142
142
  return
143
143
 
144
144
  with start_run(run_id=run_id, chdir=chdir) as run:
hydraflow/core/run.py CHANGED
@@ -45,6 +45,8 @@ if TYPE_CHECKING:
45
45
 
46
46
  from .run_collection import RunCollection
47
47
 
48
+ # pyright: reportUnknownVariableType=false
49
+
48
50
 
49
51
  class Run[C, I = None]:
50
52
  """Represent an MLflow Run in HydraFlow.
@@ -76,7 +78,7 @@ class Run[C, I = None]:
76
78
  impl_factory: Callable[[Path], I] | Callable[[Path, C], I] | None = None,
77
79
  ) -> None:
78
80
  self.info = RunInfo(run_dir)
79
- self.impl_factory = impl_factory or (lambda _: None) # type: ignore
81
+ self.impl_factory = impl_factory or (lambda _: None) # pyright: ignore[reportAttributeAccessIssue]
80
82
 
81
83
  def __repr__(self) -> str:
82
84
  """Return a string representation of the Run."""
@@ -93,9 +95,9 @@ class Run[C, I = None]:
93
95
  """The configuration instance loaded from the Hydra configuration file."""
94
96
  config_file = self.info.run_dir / "artifacts/.hydra/config.yaml"
95
97
  if config_file.exists():
96
- return OmegaConf.load(config_file) # type: ignore
98
+ return OmegaConf.load(config_file) # pyright: ignore[reportReturnType]
97
99
 
98
- return OmegaConf.create() # type: ignore
100
+ return OmegaConf.create() # pyright: ignore[reportReturnType]
99
101
 
100
102
  @cached_property
101
103
  def impl(self) -> I:
@@ -176,13 +178,13 @@ class Run[C, I = None]:
176
178
 
177
179
  if n_jobs == 0:
178
180
  runs = (cls(Path(r), impl_factory) for r in run_dir)
179
- return RunCollection(runs, cls.get) # type: ignore
181
+ return RunCollection(runs, cls.get)
180
182
 
181
183
  from joblib import Parallel, delayed
182
184
 
183
185
  parallel = Parallel(backend="threading", n_jobs=n_jobs)
184
186
  runs = parallel(delayed(cls)(Path(r), impl_factory) for r in run_dir)
185
- return RunCollection(runs, cls.get) # type: ignore
187
+ return RunCollection(runs, cls.get) # pyright: ignore[reportArgumentType]
186
188
 
187
189
  @overload
188
190
  def update(
@@ -235,7 +237,7 @@ class Run[C, I = None]:
235
237
  an iterable.
236
238
 
237
239
  """
238
- cfg: DictConfig = self.cfg # type: ignore
240
+ cfg: DictConfig = self.cfg # pyright: ignore[reportAssignmentType]
239
241
 
240
242
  if isinstance(key, str):
241
243
  key = key.replace("__", ".")
@@ -296,7 +298,7 @@ class Run[C, I = None]:
296
298
  """
297
299
  key = key.replace("__", ".")
298
300
 
299
- value = OmegaConf.select(self.cfg, key, default=MISSING) # type: ignore
301
+ value = OmegaConf.select(self.cfg, key, default=MISSING) # pyright: ignore[reportArgumentType]
300
302
  if value is not MISSING:
301
303
  return value
302
304
 
@@ -377,7 +379,7 @@ class Run[C, I = None]:
377
379
  if not isinstance(cfg, dict):
378
380
  raise TypeError("Configuration must be a dictionary")
379
381
 
380
- standard_dict: dict[str, Any] = {str(k): v for k, v in cfg.items()}
382
+ standard_dict: dict[str, Any] = {str(k): v for k, v in cfg.items()} # pyright: ignore[reportUnknownArgumentType]
381
383
 
382
384
  if flatten:
383
385
  return _flatten_dict(standard_dict)
@@ -450,12 +452,12 @@ class Run[C, I = None]:
450
452
 
451
453
 
452
454
  def _flatten_dict(d: dict[str, Any], parent_key: str = "") -> dict[str, Any]:
453
- items = []
455
+ items: list[tuple[str, Any]] = []
454
456
 
455
457
  for k, v in d.items():
456
458
  key = f"{parent_key}.{k}" if parent_key else k
457
459
  if isinstance(v, dict):
458
- items.extend(_flatten_dict(v, key).items())
460
+ items.extend(_flatten_dict(v, key).items()) # pyright: ignore[reportUnknownArgumentType]
459
461
  else:
460
462
  items.append((key, v))
461
463
 
@@ -54,6 +54,8 @@ if TYPE_CHECKING:
54
54
 
55
55
  from polars import DataFrame
56
56
 
57
+ # pyright: reportUnknownVariableType=false
58
+
57
59
 
58
60
  class RunCollection[R: Run[Any, Any]](Collection[R]):
59
61
  """A collection of Run instances that implements the Sequence protocol.
hydraflow/executor/aio.py CHANGED
@@ -68,7 +68,7 @@ async def arun(
68
68
  ) -> int | None:
69
69
  """Run a command asynchronously."""
70
70
  process = await asyncio.create_subprocess_exec(*args, stdout=PIPE, stderr=PIPE)
71
- coros = alog(process.stdout, stdout), alog(process.stderr, stderr) # type:ignore
71
+ coros = alog(process.stdout, stdout), alog(process.stderr, stderr) # pyright: ignore[reportArgumentType]
72
72
  await asyncio.gather(*coros)
73
73
  await process.communicate()
74
74
 
hydraflow/executor/io.py CHANGED
@@ -10,7 +10,7 @@ from omegaconf import DictConfig, OmegaConf
10
10
  from .conf import HydraflowConf
11
11
 
12
12
  if TYPE_CHECKING:
13
- from .job import Job
13
+ from .conf import Job
14
14
 
15
15
 
16
16
  def find_config_file() -> Path | None:
@@ -38,7 +38,7 @@ def load_config() -> HydraflowConf:
38
38
  if not isinstance(cfg, DictConfig):
39
39
  return schema
40
40
 
41
- return OmegaConf.merge(schema, cfg) # type: ignore[return-value]
41
+ return OmegaConf.merge(schema, cfg) # pyright: ignore[reportReturnType]
42
42
 
43
43
 
44
44
  def get_job(name: str) -> Job:
hydraflow/executor/job.py CHANGED
@@ -99,7 +99,7 @@ def merge_args(first: list[str], second: list[str]) -> list[str]:
99
99
  list[str]: A merged list of arguments.
100
100
 
101
101
  """
102
- merged = {}
102
+ merged: dict[str, str | None] = {}
103
103
 
104
104
  for item in [*first, *second]:
105
105
  if "=" in item:
@@ -158,7 +158,7 @@ def submit(
158
158
  iterable: Iterable[list[str]],
159
159
  *,
160
160
  dry_run: bool = False,
161
- ) -> CompletedProcess | tuple[list[str], str]:
161
+ ) -> CompletedProcess[bytes] | tuple[list[str], str]:
162
162
  """Submit entire job using a shell command."""
163
163
  executable, *args = args
164
164
  if executable == "python" and sys.platform == "win32":
@@ -181,7 +181,7 @@ def submit(
181
181
  file.unlink(missing_ok=True)
182
182
 
183
183
 
184
- def get_callable(name: str) -> Callable:
184
+ def get_callable(name: str) -> Callable[[list[str]], Any]:
185
185
  """Get a callable from a function name."""
186
186
  if "." not in name:
187
187
  msg = f"Invalid function path: {name}."
@@ -205,7 +205,7 @@ def _arange(start: float, stop: float, step: float) -> list[float]:
205
205
 
206
206
  epsilon = min(abs(start), abs(stop)) * 1e-5
207
207
 
208
- result = []
208
+ result: list[float] = []
209
209
  current = start
210
210
 
211
211
  if step > 0:
@@ -412,8 +412,8 @@ def split(arg: str) -> list[str]:
412
412
  ['(a,b)m', '(1,2:4)k']
413
413
 
414
414
  """
415
- result = []
416
- current = []
415
+ result: list[str] = []
416
+ current: list[str] = []
417
417
  bracket_count = 0
418
418
  paren_count = 0
419
419
  in_single_quote = False
@@ -57,12 +57,12 @@ class Progress(Super):
57
57
  def _update(parallel: Parallel) -> None:
58
58
  update(self, parallel)
59
59
 
60
- Parallel.print_progress = _update # type: ignore
60
+ Parallel.print_progress = _update # pyright: ignore[reportAttributeAccessIssue]
61
61
 
62
62
  def stop(self) -> None:
63
63
  """Stop the progress display."""
64
64
  if self._print_progress:
65
- Parallel.print_progress = self._print_progress # type: ignore
65
+ Parallel.print_progress = self._print_progress # pyright: ignore[reportAttributeAccessIssue]
66
66
 
67
67
  super().stop()
68
68
 
@@ -86,5 +86,5 @@ def update(progress: Progress, parallel: Parallel) -> None:
86
86
 
87
87
  progress.update(task_id, completed=parallel.n_completed_tasks, refresh=True)
88
88
 
89
- if progress._print_progress: # noqa: SLF001
90
- progress._print_progress(parallel) # noqa: SLF001
89
+ if progress._print_progress: # noqa: SLF001 # pyright: ignore[reportPrivateUsage]
90
+ progress._print_progress(parallel) # noqa: SLF001 # pyright: ignore[reportPrivateUsage]
@@ -1,34 +1,31 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.3
2
2
  Name: hydraflow
3
- Version: 0.19.0
3
+ Version: 0.19.2
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
- Project-URL: Documentation, https://daizutabi.github.io/hydraflow/
6
- Project-URL: Source, https://github.com/daizutabi/hydraflow
7
- Project-URL: Issues, https://github.com/daizutabi/hydraflow/issues
5
+ Keywords: machine-learning,mlflow,hydra,experiment-tracking,mlops,ai,deep-learning,research,data-science
6
+ Author: daizutabi
8
7
  Author-email: daizutabi <daizutabi@gmail.com>
9
8
  License: MIT License
10
-
11
- Copyright (c) 2024 Daizu
12
-
13
- Permission is hereby granted, free of charge, to any person obtaining a copy
14
- of this software and associated documentation files (the "Software"), to deal
15
- in the Software without restriction, including without limitation the rights
16
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
- copies of the Software, and to permit persons to whom the Software is
18
- furnished to do so, subject to the following conditions:
19
-
20
- The above copyright notice and this permission notice shall be included in all
21
- copies or substantial portions of the Software.
22
-
23
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
- SOFTWARE.
30
- License-File: LICENSE
31
- Keywords: ai,data-science,deep-learning,experiment-tracking,hydra,machine-learning,mlflow,mlops,research
9
+
10
+ Copyright (c) 2024 Daizu
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
32
29
  Classifier: Development Status :: 4 - Beta
33
30
  Classifier: Environment :: Console
34
31
  Classifier: Intended Audience :: Developers
@@ -39,15 +36,18 @@ Classifier: Programming Language :: Python
39
36
  Classifier: Programming Language :: Python :: 3.13
40
37
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
41
38
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
42
- Requires-Python: >=3.13
43
39
  Requires-Dist: hydra-core>=1.3
44
40
  Requires-Dist: joblib>=1.4.0
45
- Requires-Dist: mlflow>=2.15
41
+ Requires-Dist: mlflow>=3
46
42
  Requires-Dist: omegaconf>=2.3
47
43
  Requires-Dist: polars>=1.26
48
44
  Requires-Dist: python-ulid>=3.0.0
49
- Requires-Dist: rich>=13.9
50
- Requires-Dist: typer>=0.15
45
+ Requires-Dist: rich>=14
46
+ Requires-Dist: typer>=0.16
47
+ Requires-Python: >=3.13
48
+ Project-URL: Documentation, https://daizutabi.github.io/hydraflow/
49
+ Project-URL: Issues, https://github.com/daizutabi/hydraflow/issues
50
+ Project-URL: Source, https://github.com/daizutabi/hydraflow
51
51
  Description-Content-Type: text/markdown
52
52
 
53
53
  # HydraFlow
@@ -64,7 +64,7 @@ Description-Content-Type: text/markdown
64
64
  [pypi-v-link]: https://pypi.org/project/hydraflow/
65
65
  [GHAction-image]: https://github.com/daizutabi/hydraflow/actions/workflows/ci.yaml/badge.svg?branch=main&event=push
66
66
  [GHAction-link]: https://github.com/daizutabi/hydraflow/actions?query=event%3Apush+branch%3Amain
67
- [codecov-image]: https://codecov.io/github/daizutabi/hydraflow/coverage.svg?branch=main
67
+ [codecov-image]: https://codecov.io/github/daizutabi/hydraflow/graph/badge.svg?token=Yu6lAdVVnd
68
68
  [codecov-link]: https://codecov.io/github/daizutabi/hydraflow?branch=main
69
69
  [docs-image]: https://img.shields.io/badge/docs-latest-blue.svg
70
70
  [docs-link]: https://daizutabi.github.io/hydraflow/
@@ -0,0 +1,24 @@
1
+ hydraflow/__init__.py,sha256=_cLLokEv0pUlwvG8RMnjOwCTtDQBs0-RgGbtDk5m_Xg,794
2
+ hydraflow/cli.py,sha256=plw1kB2QeeGrEqM5MnVkzwFO6oZfZ-v5CqgndzDRW2Q,3176
3
+ hydraflow/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ hydraflow/core/collection.py,sha256=cb8KJIGKeU4heo1eOzk63abB9_xGtxiYADHbM2M7X4E,30798
5
+ hydraflow/core/context.py,sha256=6vpwe0Xfl6mzh2hHLE-4uB9Hjew-CK4pA0KFihQ80U8,4168
6
+ hydraflow/core/group_by.py,sha256=TmJ1bWV7xfP7sSddS4eSxc4-uPa_fTU_1MbLJvCh4VE,5541
7
+ hydraflow/core/io.py,sha256=3aW6nXjeJxBr-l4wflc9GulGJOBm_xTQQEYyT4m749g,5243
8
+ hydraflow/core/main.py,sha256=DyzeozQc89nGp4rPIRGeY3k1UYF8buY3yBsbvfpPQnc,6676
9
+ hydraflow/core/run.py,sha256=LsXgv0d7__Ki2hVs4w3CYDqJVOKiAWz80nl9nJEyugg,16023
10
+ hydraflow/core/run_collection.py,sha256=hzza5xcusjB78tfT3dzrqz1jZf64V7sXSda_l-_mB1E,7343
11
+ hydraflow/core/run_info.py,sha256=SMOTZXEa7OBV_XjTyctk5gJGrggmYwhePvRF8CLF1kU,1616
12
+ hydraflow/executor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ hydraflow/executor/aio.py,sha256=nqaaIEZvkwUgMPCrDgXAwtmgKupCxW1ARN74GzGU9BM,2146
14
+ hydraflow/executor/conf.py,sha256=8Xq4UAenRKJIl1NBgNbSfv6VUTJhdwPLayZIEAsiBR0,414
15
+ hydraflow/executor/io.py,sha256=4f7VXf8XbF9cOVvNtCihKPnPH61xTaNCzNbwnNrow5A,1051
16
+ hydraflow/executor/job.py,sha256=IqtrMY9OCdn0eQvG4SbzWZ7CGKxv00M1I5OFHkNDDDo,5484
17
+ hydraflow/executor/parser.py,sha256=JfFJF-ATSddSr0dvZDRvoPBL43JZgyH4MHIYY6L0euI,14645
18
+ hydraflow/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
+ hydraflow/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ hydraflow/utils/progress.py,sha256=slEa2xR5mNqMrL8IkFakTkOMLpdzT8KvpMfp_RVQ9R8,3188
21
+ hydraflow-0.19.2.dist-info/WHEEL,sha256=4n27za1eEkOnA7dNjN6C5-O2rUiw6iapszm14Uj-Qmk,79
22
+ hydraflow-0.19.2.dist-info/entry_points.txt,sha256=UuqtOTjlKLlxIOBJ7YOQ8U9maIIHf23-qjkdlYB524k,49
23
+ hydraflow-0.19.2.dist-info/METADATA,sha256=WlF_vla8ln1sSvsxFzt-6E2vkEbzqCRdxacGZvvTo_8,7452
24
+ hydraflow-0.19.2.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: uv 0.8.13
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -1,2 +1,3 @@
1
1
  [console_scripts]
2
2
  hydraflow = hydraflow.cli:app
3
+
@@ -1,25 +0,0 @@
1
- hydraflow/__init__.py,sha256=_cLLokEv0pUlwvG8RMnjOwCTtDQBs0-RgGbtDk5m_Xg,794
2
- hydraflow/cli.py,sha256=3rGr___wwp8KazjLGQ7JO_IgAMqLyMlcVSs_QJK7g0Y,3135
3
- hydraflow/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- hydraflow/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- hydraflow/core/collection.py,sha256=s1XtsV1AU5Cr6XutMfphRA60uhompDiQQVSgb_Xz-nM,30437
6
- hydraflow/core/context.py,sha256=6vpwe0Xfl6mzh2hHLE-4uB9Hjew-CK4pA0KFihQ80U8,4168
7
- hydraflow/core/group_by.py,sha256=Pnw-oA5aXHeRG9lMLz-bKc8drqQ8LIRsWzvVn153iyQ,5488
8
- hydraflow/core/io.py,sha256=B3-jPuJWttRgpbIpy_XA-Z2qpXzNF1ATwyYEwA7Pv3w,5172
9
- hydraflow/core/main.py,sha256=6X58M-xpJPql7xqLR3gpa4XMePvZ6Q1diMSqTZf2Jrw,6542
10
- hydraflow/core/run.py,sha256=RphCqeXg5OiZQ5U1Kh1PYrbQ9TEuVjzvfWvNOrU0bas,15736
11
- hydraflow/core/run_collection.py,sha256=xXbNiqAgzpA_F_6zNdpTyy9ydV84isljzK9o2C6206Q,7299
12
- hydraflow/core/run_info.py,sha256=SMOTZXEa7OBV_XjTyctk5gJGrggmYwhePvRF8CLF1kU,1616
13
- hydraflow/executor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- hydraflow/executor/aio.py,sha256=xXsmBPIPdBlopv_1h0FdtOvoKUcuW7PQeKCV2d_lN9I,2122
15
- hydraflow/executor/conf.py,sha256=8Xq4UAenRKJIl1NBgNbSfv6VUTJhdwPLayZIEAsiBR0,414
16
- hydraflow/executor/io.py,sha256=18wnHpCMQRGYL-oN2841h9W2aSW_X2SmO68Lx-3FIbU,1043
17
- hydraflow/executor/job.py,sha256=6QeJ18OMeocXeM04rCYL46GgArfX1SvZs9_4HTomTgE,5436
18
- hydraflow/executor/parser.py,sha256=RxP8qpDaJ8VLqZ51VlPFyVitWctObhkE_3iPIsY66Cs,14610
19
- hydraflow/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- hydraflow/utils/progress.py,sha256=a-CHvioyGCeiUKawqPcV8i1nhzunm5-r5AlLbzd5epw,3048
21
- hydraflow-0.19.0.dist-info/METADATA,sha256=vl5BV8Gcp3RykIsV4qU_BsgQYlY6EfkhiILKyvnA0yQ,7433
22
- hydraflow-0.19.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
23
- hydraflow-0.19.0.dist-info/entry_points.txt,sha256=XI0khPbpCIUo9UPqkNEpgh-kqK3Jy8T7L2VCWOdkbSM,48
24
- hydraflow-0.19.0.dist-info/licenses/LICENSE,sha256=IGdDrBPqz1O0v_UwCW-NJlbX9Hy9b3uJ11t28y2srmY,1062
25
- hydraflow-0.19.0.dist-info/RECORD,,
@@ -1,4 +0,0 @@
1
- Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
3
- Root-Is-Purelib: true
4
- Tag: py3-none-any
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2024 Daizu
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.