torchx-nightly 2025.9.28__py3-none-any.whl → 2025.11.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.

Potentially problematic release.


This version of torchx-nightly might be problematic. Click here for more details.

torchx/workspace/api.py CHANGED
@@ -8,25 +8,16 @@
8
8
 
9
9
  import abc
10
10
  import fnmatch
11
+ import logging
11
12
  import posixpath
12
- import shutil
13
13
  import tempfile
14
14
  import warnings
15
15
  from dataclasses import dataclass
16
- from pathlib import Path
17
- from typing import (
18
- Any,
19
- Dict,
20
- Generic,
21
- Iterable,
22
- Mapping,
23
- Tuple,
24
- TYPE_CHECKING,
25
- TypeVar,
26
- Union,
27
- )
28
-
29
- from torchx.specs import AppDef, CfgVal, Role, runopts
16
+ from typing import Any, Dict, Generic, Iterable, Mapping, Tuple, TYPE_CHECKING, TypeVar
17
+
18
+ from torchx.specs import AppDef, CfgVal, Role, runopts, Workspace
19
+
20
+ logger: logging.Logger = logging.getLogger(__name__)
30
21
 
31
22
  if TYPE_CHECKING:
32
23
  from fsspec import AbstractFileSystem
@@ -88,71 +79,6 @@ class WorkspaceBuilder(Generic[PackageType, WorkspaceConfigType]):
88
79
  pass
89
80
 
90
81
 
91
- @dataclass
92
- class Workspace:
93
- """
94
- Specifies a local "workspace" (a set of directories). Workspaces are ad-hoc built
95
- into an (usually ephemeral) image. This effectively mirrors the local code changes
96
- at job submission time.
97
-
98
- For example:
99
-
100
- 1. ``projects={"~/github/torch": "torch"}`` copies ``~/github/torch/**`` into ``$REMOTE_WORKSPACE_ROOT/torch/**``
101
- 2. ``projects={"~/github/torch": ""}`` copies ``~/github/torch/**`` into ``$REMOTE_WORKSPACE_ROOT/**``
102
-
103
- The exact location of ``$REMOTE_WORKSPACE_ROOT`` is implementation dependent and varies between
104
- different implementations of :py:class:`~torchx.workspace.api.WorkspaceMixin`.
105
- Check the scheduler documentation for details on which workspace it supports.
106
-
107
- Note: ``projects`` maps the location of the local project to a sub-directory in the remote workspace root directory.
108
- Typically the local project location is a directory path (e.g. ``/home/foo/github/torch``).
109
-
110
-
111
- Attributes:
112
- projects: mapping of local project to the sub-dir in the remote workspace dir.
113
- """
114
-
115
- projects: dict[str, str]
116
-
117
- def is_unmapped_single_project(self) -> bool:
118
- """
119
- Returns ``True`` if this workspace only has 1 project
120
- and its target mapping is an empty string.
121
- """
122
- return len(self.projects) == 1 and not next(iter(self.projects.values()))
123
-
124
- @staticmethod
125
- def from_str(workspace: str) -> "Workspace":
126
- import yaml
127
-
128
- projects = yaml.safe_load(workspace)
129
- if isinstance(projects, str): # single project workspace
130
- projects = {projects: ""}
131
- else: # multi-project workspace
132
- # Replace None mappings with "" (empty string)
133
- projects = {k: ("" if v is None else v) for k, v in projects.items()}
134
-
135
- return Workspace(projects)
136
-
137
- def __str__(self) -> str:
138
- """
139
- Returns a string representation of the Workspace by concatenating
140
- the project mappings using ';' as a delimiter and ':' between key and value.
141
- If the single-project workspace with no target mapping, then simply
142
- returns the src (local project dir)
143
-
144
- NOTE: meant to be used for logging purposes not serde.
145
- Therefore not symmetric with :py:func:`Workspace.from_str`.
146
-
147
- """
148
- if self.is_unmapped_single_project():
149
- return next(iter(self.projects))
150
- else:
151
- return ";".join(
152
- k if not v else f"{k}:{v}" for k, v in self.projects.items()
153
- )
154
-
155
-
156
82
  class WorkspaceMixin(abc.ABC, Generic[T]):
157
83
  """
158
84
  Note: (Prototype) this interface may change without notice!
@@ -178,45 +104,72 @@ class WorkspaceMixin(abc.ABC, Generic[T]):
178
104
  """
179
105
  return runopts()
180
106
 
181
- def build_workspace_and_update_role2(
107
+ def build_workspaces(self, roles: list[Role], cfg: Mapping[str, CfgVal]) -> None:
108
+ """
109
+ NOTE: this method MUTATES the passed roles!
110
+
111
+ Builds the workspaces (if any) for each role and updates the role to reflect the built workspace.
112
+ Typically ``role.image`` is updated with the newly built image that reflects the local workspace.
113
+ Some workspace implementations may add extra environment variables to make it easier for other
114
+ parts of the program to access the workspace. For example a ``WORKSPACE_DIR`` env var may be added
115
+ to ``role.env`` that scripts can use to refert to the workspace directory in the container.
116
+ """
117
+
118
+ build_cache: dict[object, object] = {}
119
+
120
+ for i, role in enumerate(roles):
121
+ if role.workspace:
122
+ old_img = role.image
123
+ self.caching_build_workspace_and_update_role(role, cfg, build_cache)
124
+
125
+ if old_img != role.image:
126
+ logger.info(
127
+ "role[%d]=%s updated with new image to include workspace changes",
128
+ i,
129
+ role.name,
130
+ )
131
+
132
+ def caching_build_workspace_and_update_role(
182
133
  self,
183
134
  role: Role,
184
- workspace: Union[Workspace, str],
185
135
  cfg: Mapping[str, CfgVal],
136
+ build_cache: dict[object, object],
186
137
  ) -> None:
187
138
  """
188
- Same as :py:meth:`build_workspace_and_update_role` but operates
189
- on :py:class:`Workspace` (supports multi-project workspaces)
190
- as well as ``str`` (for backwards compatibility).
139
+ Same as :py:meth:`build_workspace_and_update_role` but takes
140
+ a ``build_cache`` that can be used to cache pointers to build artifacts
141
+ between building workspace for each role.
142
+
143
+ This is useful when an appdef has multiple roles where the image and workspace
144
+ of the roles are the same but other attributes such as entrypoint or args are different.
191
145
 
192
- If ``workspace`` is a ``str`` this method simply calls
146
+ NOTE: ``build_cache``'s lifetime is within :py:meth:`build_workspace_and_update_roles`
147
+ NOTE: the workspace implementation decides what to cache
148
+
149
+ Workspace subclasses should prefer implementing this method over
193
150
  :py:meth:`build_workspace_and_update_role`.
194
151
 
195
- If ``workspace`` is :py:class:`Workspace` then the default
196
- impl copies all the projects into a tmp directory and passes the tmp dir to
197
- :py:meth:`build_workspace_and_update_role`
152
+ The default implementation of this method simply calls the (deprecated) non-caching
153
+ :py:meth:`build_workspace_and_update_role` and deals with multi-dir workspaces by
154
+ merging them into a single tmpdir before passing it down.
198
155
 
199
- Subclasses can override this method to customize multi-project
200
- workspace building logic.
201
156
  """
202
- if isinstance(workspace, Workspace):
203
- if not workspace.is_unmapped_single_project():
204
- with tempfile.TemporaryDirectory(suffix="torchx_workspace_") as outdir:
205
- for src, dst in workspace.projects.items():
206
- dst_path = Path(outdir) / dst
207
- if Path(src).is_file():
208
- shutil.copy2(src, dst_path)
209
- else: # src is dir
210
- shutil.copytree(src, dst_path, dirs_exist_ok=True)
211
-
212
- self.build_workspace_and_update_role(role, outdir, cfg)
213
- return
214
- else: # single project workspace with no target mapping (treat like a str workspace)
215
- workspace = str(workspace)
216
-
217
- self.build_workspace_and_update_role(role, workspace, cfg)
218
157
 
219
- @abc.abstractmethod
158
+ workspace = role.workspace
159
+
160
+ if not workspace:
161
+ return
162
+
163
+ if workspace.is_unmapped_single_project():
164
+ # single-dir workspace with no target map; no need to copy to a tmp dir
165
+ self.build_workspace_and_update_role(role, str(workspace), cfg)
166
+ else:
167
+ # multi-dirs or single-dir with a target map;
168
+ # copy all dirs to a tmp dir and treat the tmp dir as a single-dir workspace
169
+ with tempfile.TemporaryDirectory(suffix="torchx_workspace_") as outdir:
170
+ workspace.merge_into(outdir)
171
+ self.build_workspace_and_update_role(role, outdir, cfg)
172
+
220
173
  def build_workspace_and_update_role(
221
174
  self,
222
175
  role: Role,
@@ -224,6 +177,9 @@ class WorkspaceMixin(abc.ABC, Generic[T]):
224
177
  cfg: Mapping[str, CfgVal],
225
178
  ) -> None:
226
179
  """
180
+ .. note:: DEPRECATED: Workspace subclasses should implement
181
+ :py:meth:`caching_build_workspace_and_update_role` over this method.
182
+
227
183
  Builds the specified ``workspace`` with respect to ``img``
228
184
  and updates the ``role`` to reflect the built workspace artifacts.
229
185
  In the simplest case, this method builds a new image and updates
@@ -232,7 +188,7 @@ class WorkspaceMixin(abc.ABC, Generic[T]):
232
188
 
233
189
  Note: this method mutates the passed ``role``.
234
190
  """
235
- ...
191
+ raise NotImplementedError("implement `caching_build_workspace_and_update_role`")
236
192
 
237
193
  def dryrun_push_images(self, app: AppDef, cfg: Mapping[str, CfgVal]) -> T:
238
194
  """
@@ -275,7 +231,6 @@ def walk_workspace(
275
231
  walk_workspace walks the filesystem path and applies the ignore rules
276
232
  specified via ``ignore_name``.
277
233
  This follows the rules for ``.dockerignore``.
278
- https://docs.docker.com/engine/reference/builder/#dockerignore-file
279
234
  """
280
235
  ignore_patterns = []
281
236
  ignore_path = posixpath.join(path, ignore_name)
@@ -1,8 +1,8 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: torchx-nightly
3
- Version: 2025.9.28
3
+ Version: 2025.11.17
4
4
  Summary: TorchX SDK and Components
5
- Home-page: https://github.com/pytorch/torchx
5
+ Home-page: https://github.com/meta-pytorch/torchx
6
6
  Author: TorchX Devs
7
7
  Author-email: torchx@fb.com
8
8
  License: BSD-3
@@ -23,8 +23,10 @@ Requires-Dist: docker
23
23
  Requires-Dist: filelock
24
24
  Requires-Dist: fsspec>=2023.10.0
25
25
  Requires-Dist: tabulate
26
- Provides-Extra: aws_batch
26
+ Provides-Extra: aws-batch
27
27
  Requires-Dist: boto3; extra == "aws-batch"
28
+ Provides-Extra: kubernetes
29
+ Requires-Dist: kubernetes>=11; extra == "kubernetes"
28
30
  Provides-Extra: dev
29
31
  Requires-Dist: aiobotocore==2.20.0; extra == "dev"
30
32
  Requires-Dist: ax-platform[mysql]==0.2.3; extra == "dev"
@@ -47,23 +49,34 @@ Requires-Dist: pytorch-lightning==2.5.0; extra == "dev"
47
49
  Requires-Dist: tensorboard==2.14.0; extra == "dev"
48
50
  Requires-Dist: sagemaker==2.230.0; extra == "dev"
49
51
  Requires-Dist: torch-model-archiver>=0.4.2; extra == "dev"
50
- Requires-Dist: torch>=2.7.0; extra == "dev"
52
+ Requires-Dist: torch; extra == "dev"
51
53
  Requires-Dist: torchmetrics==1.6.3; extra == "dev"
52
54
  Requires-Dist: torchserve>=0.10.0; extra == "dev"
53
- Requires-Dist: torchtext==0.18.0; extra == "dev"
54
- Requires-Dist: torchvision==0.23.0; extra == "dev"
55
+ Requires-Dist: torchtext; extra == "dev"
56
+ Requires-Dist: torchvision; extra == "dev"
55
57
  Requires-Dist: typing-extensions; extra == "dev"
56
58
  Requires-Dist: ts==0.5.1; extra == "dev"
57
59
  Requires-Dist: wheel; extra == "dev"
58
60
  Requires-Dist: lintrunner; extra == "dev"
59
61
  Requires-Dist: lintrunner-adapters; extra == "dev"
60
- Provides-Extra: kubernetes
61
- Requires-Dist: kubernetes>=11; extra == "kubernetes"
62
+ Dynamic: author
63
+ Dynamic: author-email
64
+ Dynamic: classifier
65
+ Dynamic: description
66
+ Dynamic: description-content-type
67
+ Dynamic: home-page
68
+ Dynamic: keywords
69
+ Dynamic: license
70
+ Dynamic: license-file
71
+ Dynamic: provides-extra
72
+ Dynamic: requires-dist
73
+ Dynamic: requires-python
74
+ Dynamic: summary
62
75
 
63
76
  [![PyPI](https://img.shields.io/pypi/v/torchx)](https://pypi.org/project/torchx/)
64
- [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://github.com/pytorch/torchx/blob/main/LICENSE)
65
- ![Tests](https://github.com/pytorch/torchx/actions/workflows/python-unittests.yaml/badge.svg)
66
- ![Lint](https://github.com/pytorch/torchx/actions/workflows/lint.yaml/badge.svg)
77
+ [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://github.com/meta-pytorch/torchx/blob/main/LICENSE)
78
+ ![Tests](https://github.com/meta-pytorch/torchx/actions/workflows/python-unittests.yaml/badge.svg)
79
+ ![Lint](https://github.com/meta-pytorch/torchx/actions/workflows/lint.yaml/badge.svg)
67
80
  [![codecov](https://codecov.io/gh/pytorch/torchx/branch/main/graph/badge.svg?token=ceHHIm0hXy)](https://codecov.io/gh/pytorch/torchx)
68
81
 
69
82
 
@@ -82,16 +95,16 @@ TorchX currently supports:
82
95
  * Docker
83
96
  * Local
84
97
 
85
- Need a scheduler not listed? [Let us know!](https://github.com/pytorch/torchx/issues?q=is%3Aopen+is%3Aissue+label%3Ascheduler-request)
98
+ Need a scheduler not listed? [Let us know!](https://github.com/meta-pytorch/torchx/issues?q=is%3Aopen+is%3Aissue+label%3Ascheduler-request)
86
99
 
87
100
  ## Quickstart
88
101
 
89
- See the [quickstart guide](https://pytorch.org/torchx/latest/quickstart.html).
102
+ See the [quickstart guide](https://meta-pytorch.org/torchx/latest/quickstart.html).
90
103
 
91
104
  ## Documentation
92
105
 
93
- * [Stable Documentation](https://pytorch.org/torchx/latest/)
94
- * [Nightly Documentation](https://pytorch.org/torchx/main/)
106
+ * [Stable Documentation](https://meta-pytorch.org/torchx/latest/)
107
+ * [Nightly Documentation](https://meta-pytorch.org/torchx/main/)
95
108
 
96
109
  ## Requirements
97
110
 
@@ -133,22 +146,22 @@ pip install torchx-nightly[dev]
133
146
 
134
147
  ```bash
135
148
  # install torchx sdk and CLI from source
136
- $ pip install -e git+https://github.com/pytorch/torchx.git#egg=torchx
149
+ $ pip install -e git+https://github.com/meta-pytorch/torchx.git#egg=torchx
137
150
 
138
151
  # install extra dependencies
139
- $ pip install -e git+https://github.com/pytorch/torchx.git#egg=torchx[dev]
152
+ $ pip install -e git+https://github.com/meta-pytorch/torchx.git#egg=torchx[dev]
140
153
  ```
141
154
 
142
155
  ### Docker
143
156
 
144
157
  TorchX provides a docker container for using as as part of a TorchX role.
145
158
 
146
- See: https://github.com/pytorch/torchx/pkgs/container/torchx
159
+ See: https://github.com/meta-pytorch/torchx/pkgs/container/torchx
147
160
 
148
161
  ## Contributing
149
162
 
150
- We welcome PRs! See the [CONTRIBUTING](https://github.com/pytorch/torchx/blob/main/CONTRIBUTING.md) file.
163
+ We welcome PRs! See the [CONTRIBUTING](https://github.com/meta-pytorch/torchx/blob/main/CONTRIBUTING.md) file.
151
164
 
152
165
  ## License
153
166
 
154
- TorchX is BSD licensed, as found in the [LICENSE](https://github.com/pytorch/torchx/blob/main/LICENSE) file.
167
+ TorchX is BSD licensed, as found in the [LICENSE](https://github.com/meta-pytorch/torchx/blob/main/LICENSE) file.
@@ -1,6 +1,7 @@
1
1
  torchx/__init__.py,sha256=QFDTdJacncWYWHL-2QyWdY5MUck3jVfSPRRGdvedcKc,355
2
+ torchx/_version.py,sha256=TzDuXIviDldFbXAhGe33redQcoP33jIsVR_hMyqSgdc,250
2
3
  torchx/notebook.py,sha256=Rc6XUMzSq7NXtsYdtVluE6T89LpEhcba-3ANxuaLCCU,1008
3
- torchx/version.py,sha256=d28ccaZP21nlF8jEmSLjJiidyquMJo02tDpeVD36inc,951
4
+ torchx/version.py,sha256=YcE66UkBxYHMQMtjVts4jF3l6Qeaj1gK_LzxU77l8Bo,975
4
5
  torchx/apps/__init__.py,sha256=fE0IHi1JJpxsNVBNzWNee2thrNXFFRhY94c80RxNSIE,231
5
6
  torchx/apps/serve/__init__.py,sha256=Md3cCHD7Ano9kV15PqGbicgUO-RMdh4aVy1yKiDt_xE,208
6
7
  torchx/apps/serve/serve.py,sha256=u_h8agld1TwIPq5GRosHL3uxhkljNfS65McLB77O0OE,4386
@@ -16,25 +17,25 @@ torchx/cli/cmd_configure.py,sha256=1kTv0qbsbV44So74plAySwWu56pQrqjhfW_kbfdC3Rw,1
16
17
  torchx/cli/cmd_describe.py,sha256=E5disbHoKTsqYKp2s3DaFW9GDLCCOgdOc3pQoHKoyCs,1283
17
18
  torchx/cli/cmd_list.py,sha256=alkS9aIaDI8lX3W8uj8Vtr3IU3G2VeCuokKSd3zOFug,1409
18
19
  torchx/cli/cmd_log.py,sha256=v-EZYUDOcG95rEgTnrsmPJMUyxM9Mk8YFAJtUxtgViE,5475
19
- torchx/cli/cmd_run.py,sha256=TshvEMTxMRj5O0KhetzHepZUaAFq8R5nFgY8GC_Gl6g,18576
20
+ torchx/cli/cmd_run.py,sha256=z8wS-M2W9hHZfLkA6DFiV6Y0LFS9KfEBc_NTwAwdviQ,18780
20
21
  torchx/cli/cmd_runopts.py,sha256=NWZiP8XpQjfTDJgays2c6MgL_8wxFoeDge6NstaZdKk,1302
21
22
  torchx/cli/cmd_status.py,sha256=22IAEmKs0qkG6kJi83u9dRX2Q-ntT7yehVx7FxtY-vQ,2114
22
- torchx/cli/cmd_tracker.py,sha256=RfLxE4Cq1wfk7k051RtZ8RPJp0pEKSCa3KmTeRs3LF8,5218
23
+ torchx/cli/cmd_tracker.py,sha256=9gmOmYi-89qQRGQfSrXCTto7ve54_JKFqs_wa7oRUA8,5223
23
24
  torchx/cli/colors.py,sha256=yLMes7e_UoLAfhxE0W6edhc58t83UHAlnCN2ANPeuXw,568
24
25
  torchx/cli/main.py,sha256=1Jf2cnO6Y2W69Adt88avmNPVrL6ZR4Hkff6GVB4293k,3484
25
- torchx/components/__init__.py,sha256=YT2D_w4df1TN_Soek6vhk6fv8WFxT-_mgs6SINrP0BI,11810
26
+ torchx/components/__init__.py,sha256=JaVte0j9Gqi6IrjZKudJ2Kr3gkdHsvlCdRTo-zYpSRo,11815
26
27
  torchx/components/component_test_base.py,sha256=22iNSdVa_qTW3SMM30Pw5UEWlK4DZVw0C03EqYiaLOI,4150
27
- torchx/components/dist.py,sha256=9jECk3jjQ4Yh4oWDK8vnQ7kcI0-OWCbbwj8uvBdI9FU,14588
28
+ torchx/components/dist.py,sha256=6DNPEvHVqEifmM8g1L7HVY169cQv_7tSfSlh3o6lTp4,14930
28
29
  torchx/components/interpret.py,sha256=g8gkKdDJvsBfX1ZrpVT7n2bMEtmwRV_1AqDyAnnQ_aA,697
29
30
  torchx/components/metrics.py,sha256=1gbp8BfzZWGa7PD1db5vRADlONzmae4qSBUUdCWayr0,2814
30
31
  torchx/components/serve.py,sha256=uxIC5gU2ecg0EJIPX_oEPzNNOXRAre4j2eXusrgwGAI,2156
31
32
  torchx/components/structured_arg.py,sha256=8jMcd0rtUmzCKEQKJ_JYzxSkMMK9q0fYjkwAs6wo78E,9595
32
33
  torchx/components/train.py,sha256=vtrQXRcD7bIcbb3lSeyD9BBlIe1mv1WNW6rnLK9R0Mw,1259
33
- torchx/components/utils.py,sha256=QRBxBm1OnNhOhpPs0lKdbJ8_mNhWYMklY6cl1gPIw9A,9363
34
+ torchx/components/utils.py,sha256=IMjihhgs7nO67YtTetUBjN_CRpyIyyQsaJBkp7mpHfk,9368
34
35
  torchx/components/integration_tests/__init__.py,sha256=Md3cCHD7Ano9kV15PqGbicgUO-RMdh4aVy1yKiDt_xE,208
35
36
  torchx/components/integration_tests/component_provider.py,sha256=g-4ig1vtd5Vzgug0VAKRAFUt6KAV3TgQrBCrwRSJ7ZY,3981
36
37
  torchx/components/integration_tests/integ_tests.py,sha256=O8jd8Jq5O0mns7xzIFsHexBDHkIIAIfELQkWCzNPzRw,5165
37
- torchx/distributed/__init__.py,sha256=lobebigfujmRTe_SJw07_a9iohBxDhq2iiPsV1YcKjw,10247
38
+ torchx/distributed/__init__.py,sha256=kh9YzDwWX7zFJJ8StR9qhMM2V3-66INs9i3ztDF-1ho,10252
38
39
  torchx/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
40
  torchx/examples/torchx_out_of_sync_training.py,sha256=sXiI1G8aGsfuvxRdBszDgM8pSplqhgfXjRnAcgRwNGM,397
40
41
  torchx/examples/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -48,33 +49,33 @@ torchx/examples/apps/lightning/profiler.py,sha256=SSSihnwjeUTkBoz0E3qn1b-wbkfUIo
48
49
  torchx/examples/apps/lightning/train.py,sha256=0wvvshGHvZowePB4LfclXwn40X7i9euM0ReETWBcPSo,6253
49
50
  torchx/pipelines/__init__.py,sha256=2MbRVk5xwRjg-d2qPemeXpEhDsocMQumPQ53lsesZAI,606
50
51
  torchx/runner/__init__.py,sha256=x8Sz7s_tLxPgJgvWIhK4ju9BNZU61uBFywGwDY6CqJs,315
51
- torchx/runner/api.py,sha256=0kDyOgmAcq0X-bTWiBIqX3BJOCYSa5-TZ7o2Hrqxzdw,30053
52
- torchx/runner/config.py,sha256=20X-vveAJVjb1AjjDSC6x_BVcdrTj9_ZLt_CHTykiFo,18266
52
+ torchx/runner/api.py,sha256=xQpgiUz9jCX4zZriubbWk4tTJRe7MxNJQK64g0o7KQ8,30438
53
+ torchx/runner/config.py,sha256=SaKOB50d79WaMFPWK8CC4as6UaNFaRGhrBkfajq3KC4,18311
53
54
  torchx/runner/events/__init__.py,sha256=cMiNjnr4eUNQ2Nxxtu4nsvN5lu56b-a6nJ-ct3i7DQk,5536
54
55
  torchx/runner/events/api.py,sha256=bvxKBAYK8LzbrBNaNLgL1x0aivtfANmWo1EMGOrSR8k,2668
55
56
  torchx/runner/events/handlers.py,sha256=ThHCIJW21BfBgB7b6ftyjASJmD1KdizpjuTtsyqnvJs,522
56
57
  torchx/runtime/__init__.py,sha256=Wxje2BryzeQneFu5r6P9JJiEKG-_C9W1CcZ_JNrKT6g,593
57
58
  torchx/runtime/tracking/__init__.py,sha256=dYnAPnrXYREfPXkpHhdOFkcYIODWEbA13PdD-wLQYBo,3055
58
59
  torchx/runtime/tracking/api.py,sha256=SmUQyUKZqG3KlAhT7CJOGqRz1O274E4m63wQeOVq3CU,5472
59
- torchx/schedulers/__init__.py,sha256=_Wx6-X3FNh8RJR82UGgUwKg7V_VQYsAkrveDoSSk2xU,2195
60
- torchx/schedulers/api.py,sha256=lfxNhrEO6eYYqVuQzzj9sTXrZShuZkyYxJ1jPE-Lvpo,14561
61
- torchx/schedulers/aws_batch_scheduler.py,sha256=hFxYzSZEK2SVS5sEyQC5YvNI0JJUJUQsWORlYpj_h3M,28105
60
+ torchx/schedulers/__init__.py,sha256=FQN9boQM4mwOD3sK9LZ3GBgw-gJ7Vx4MFj6z6ATQIrc,2211
61
+ torchx/schedulers/api.py,sha256=smoUv1ocfqsBRmesXbz9i1F86zBOixZ8QHxYmI_MzgQ,14649
62
+ torchx/schedulers/aws_batch_scheduler.py,sha256=-HpjNVhSFBDxZo3cebK-3YEguB49dxoaud2gz30cAVM,29437
62
63
  torchx/schedulers/aws_sagemaker_scheduler.py,sha256=flN8GumKE2Dz4X_foAt6Jnvt-ZVojWs6pcyrHwB0hz0,20921
63
64
  torchx/schedulers/devices.py,sha256=RjVcu22ZRl_9OKtOtmA1A3vNXgu2qD6A9ST0L0Hsg4I,1734
64
- torchx/schedulers/docker_scheduler.py,sha256=xuK00-dB6o8TV1YaZox7O5P09LHB2KeQ6t4eiNtqMYQ,16781
65
+ torchx/schedulers/docker_scheduler.py,sha256=x-XHCqYnrmiW0dHfVA7hz7Fp2Qgw7fvMgRm058YOngY,16880
65
66
  torchx/schedulers/ids.py,sha256=3E-_vwVYC-8Tv8kjuY9-W7TbOe_-Laqd8a65uIN3hQY,1798
66
67
  torchx/schedulers/kubernetes_mcad_scheduler.py,sha256=1tuzq3OutCMdSPqg_dNmCHt_wyuSFKG0-ywLc3qITJo,42949
67
- torchx/schedulers/kubernetes_scheduler.py,sha256=0_loGJ7WnxEr9dhgFt3Gw-7nVLirMDVN-MAFTCq7erE,28217
68
+ torchx/schedulers/kubernetes_scheduler.py,sha256=86ny9XXt9tdeV6Y7AlVFQ6vhxlviOdNeZUz4gOzU3cc,34478
68
69
  torchx/schedulers/local_scheduler.py,sha256=ttnxFDy48_DSYDEW-no27OirFZOyfrjwJ2S1MwBUi74,41929
69
70
  torchx/schedulers/lsf_scheduler.py,sha256=YS6Yel8tXJqLPxbcGz95lZG2nCi36AQXdNDyuBJePKg,17661
70
- torchx/schedulers/slurm_scheduler.py,sha256=vZt102OxuTGj0ZE-V9dWbldtOyL2VbHcxADm_osL7Y4,31568
71
+ torchx/schedulers/slurm_scheduler.py,sha256=vypGaCZe61bkyNkqRlK4Iwmk_NaAUQi-DsspaWd6BZw,31873
71
72
  torchx/schedulers/streams.py,sha256=8_SLezgnWgfv_zXUsJCUM34-h2dtv25NmZuxEwkzmxw,2007
72
- torchx/specs/__init__.py,sha256=HU7OoXs7aBBi0IenB49QIONRzoG1Ovs1Qlm9KnsvqfE,6609
73
- torchx/specs/api.py,sha256=Rzv_Yx8yyseARbC928ZvqAZbvaXhJRDAbcyPsxiblF4,41543
73
+ torchx/specs/__init__.py,sha256=TaC0AveTebkCMo5hmdY1wGpo09vFDqzWnsT166ionTw,7108
74
+ torchx/specs/api.py,sha256=OrLX4gGa97qtjUbl3x_YnOKCdP0rQkVEruPIbNjo7fk,49230
74
75
  torchx/specs/builders.py,sha256=Ye3of4MupJ-da8vLaX6_-nzGo_FRw1BFpYsX6dAZCNk,13730
75
- torchx/specs/file_linter.py,sha256=6_aoeuS5d9UwXseKKfPgWNTwxj-f7G1i3uO9mQepti4,14402
76
- torchx/specs/finder.py,sha256=KbtyQ2ZUIgg4vgIUdmvAis7es5CCnLtdbvxdusWkv3c,17433
77
- torchx/specs/named_resources_aws.py,sha256=ISjHtifRJqB8u7PeAMiyLyO_S0WCaZiK-CFF3qe6JDU,11415
76
+ torchx/specs/file_linter.py,sha256=z0c4mKJv47BWiPaWCdUM0A8kHwnj4b1s7oTmESuD9Tc,14407
77
+ torchx/specs/finder.py,sha256=gWQNEFrLYqrZoI0gMMhQ70YAC4sxqS0ZFpoWAmcVi44,17438
78
+ torchx/specs/named_resources_aws.py,sha256=ZNAbw6lD8NUlMfcJ-LpX14dMSaHO7m4Yt9iHwAF44yg,11674
78
79
  torchx/specs/named_resources_generic.py,sha256=Sg4tAdqiiWDrDz2Lj_pnfsjzGIXKTou73wPseh6j55w,2646
79
80
  torchx/specs/test/components/__init__.py,sha256=J8qjUOysmcMAek2KFN13mViOXZxTYc5vCrF02t3VuFU,223
80
81
  torchx/specs/test/components/a/__init__.py,sha256=kdxEgnI8QBSBiuTjaB4qDD7JX84hWowyPWU4B2Cqe9A,561
@@ -82,15 +83,15 @@ torchx/specs/test/components/a/b/__init__.py,sha256=J8qjUOysmcMAek2KFN13mViOXZxT
82
83
  torchx/specs/test/components/a/b/c.py,sha256=FhixafzNqpS5zvggtWIWLxRd6HIxsOmct-d1Hs-rDoc,554
83
84
  torchx/specs/test/components/c/__init__.py,sha256=5CBMckkpqJUdxBQBYHGSsItqq1gj2V0UiCw02Qfq6MM,246
84
85
  torchx/specs/test/components/c/d.py,sha256=2AjE-FmQXJTw3hws66O83ToQPmjOEZLDf-jDAKrrUkQ,546
85
- torchx/tracker/__init__.py,sha256=u4Fjw4pf49ZLbzQ8mTj5p3Dp_gvnJKxNIwWY7WszZ8E,4365
86
- torchx/tracker/api.py,sha256=tQk8o8naMfmQVug0BBDiiVz_9SWVRdJpgyUjwytsFYE,11257
86
+ torchx/tracker/__init__.py,sha256=qo39aOa0Dz9zt4TtFkqPeIaH7MNqdAkFlGaOFiDLXTI,4375
87
+ torchx/tracker/api.py,sha256=WZ7TYdbSVx_5h5MlX9EwQLRpxmIf0oKdiQwQ0zvkO3o,11262
87
88
  torchx/tracker/mlflow.py,sha256=poeoIXVPzr2sxgi515fMGRH83KAFNL6XFILMh0EQ2Dw,14487
88
89
  torchx/tracker/backend/__init__.py,sha256=fE0IHi1JJpxsNVBNzWNee2thrNXFFRhY94c80RxNSIE,231
89
90
  torchx/tracker/backend/fsspec.py,sha256=528xKryBE27Rm_OHD7r2R6fmVAclknBtoy1s034Ny6c,10440
90
91
  torchx/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
92
  torchx/util/cuda.py,sha256=-ZTa1WCLnY2WtSWAdWufLQqZSDCZfZsloBuiS84LIkU,1099
92
93
  torchx/util/datetime.py,sha256=hV6Sg0u5KTBe68yrmy_RGCC5su0i4Tb_mAYphWamiXI,405
93
- torchx/util/entrypoints.py,sha256=XgwCjQ5f1xchUVxABiPqODgd3--SrOtUTlgtMlAeKKc,3980
94
+ torchx/util/entrypoints.py,sha256=YUv7F-Vr4uuY4_82IBPdrz5vrch_qsx_dIr6e08kSD4,3800
94
95
  torchx/util/io.py,sha256=HNpWLcFUX0WTAP3CsdamHz--FR5A4kSdLCPfNqa2UkA,1807
95
96
  torchx/util/log_tee_helpers.py,sha256=wPyozmh9BOt_2d3Gxa0iNogwnjzwFitIIMBJOJ1arIw,6330
96
97
  torchx/util/modules.py,sha256=o4y_d07gTpJ4nIVBcoUVJ0JtXIHEsEC5kbgBM6NGpgA,2135
@@ -98,13 +99,13 @@ torchx/util/session.py,sha256=r6M_nyzXgcbk1GgYGZ324F_ehRGCqjjdVk4YgKxMj8M,1214
98
99
  torchx/util/shlex.py,sha256=eXEKu8KC3zIcd8tEy9_s8Ds5oma8BORr-0VGWNpG2dk,463
99
100
  torchx/util/strings.py,sha256=7Ef1loz2IYMrzeJ6Lewywi5cBIc3X3g7lSPbT1Tn_z4,664
100
101
  torchx/util/types.py,sha256=E9dxAWQnsJkIDuHtg-poeOJ4etucSI_xP_Z5kNJX8uI,9229
101
- torchx/workspace/__init__.py,sha256=cZsKVvUWwDYcGhe6SCXQGBQfbk_yTnKEImOkI6xmu30,809
102
- torchx/workspace/api.py,sha256=Ct_75VU94fsH9Rf1WRe-wJGpVgl5O05S_Dq_t2ArJWA,11348
102
+ torchx/workspace/__init__.py,sha256=FqN8AN4VhR1C_SBY10MggQvNZmyanbbuPuE-JCjkyUY,798
103
+ torchx/workspace/api.py,sha256=UESQ4qgxXjsb6Y1wP9OGv2ixaFgaTs3SqghmNuOJIZM,10235
103
104
  torchx/workspace/dir_workspace.py,sha256=npNW_IjUZm_yS5r-8hrRkH46ndDd9a_eApT64m1S1T4,2268
104
105
  torchx/workspace/docker_workspace.py,sha256=PFu2KQNVC-0p2aKJ-W_BKA9ZOmXdCY2ABEkCExp3udQ,10269
105
- torchx_nightly-2025.9.28.dist-info/LICENSE,sha256=WVHfXhFC0Ia8LTKt_nJVYobdqTJVg_4J3Crrfm2A8KQ,1721
106
- torchx_nightly-2025.9.28.dist-info/METADATA,sha256=E9ENK12IPJl3mDA-UxaGSQF5iQkN_RzUlwJ4v5swlV0,5003
107
- torchx_nightly-2025.9.28.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
108
- torchx_nightly-2025.9.28.dist-info/entry_points.txt,sha256=T328AMXeKI3JZnnxfkEew2ZcMN1oQDtkXjMz7lkV-P4,169
109
- torchx_nightly-2025.9.28.dist-info/top_level.txt,sha256=pxew3bc2gsiViS0zADs0jb6kC5v8o_Yy_85fhHj_J1A,7
110
- torchx_nightly-2025.9.28.dist-info/RECORD,,
106
+ torchx_nightly-2025.11.17.dist-info/licenses/LICENSE,sha256=WVHfXhFC0Ia8LTKt_nJVYobdqTJVg_4J3Crrfm2A8KQ,1721
107
+ torchx_nightly-2025.11.17.dist-info/METADATA,sha256=iim6P-wiEztRPHgcWaQCa9_f0GsU-GyxHBILL2cyVJg,5324
108
+ torchx_nightly-2025.11.17.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
109
+ torchx_nightly-2025.11.17.dist-info/entry_points.txt,sha256=T328AMXeKI3JZnnxfkEew2ZcMN1oQDtkXjMz7lkV-P4,169
110
+ torchx_nightly-2025.11.17.dist-info/top_level.txt,sha256=pxew3bc2gsiViS0zADs0jb6kC5v8o_Yy_85fhHj_J1A,7
111
+ torchx_nightly-2025.11.17.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.45.1)
2
+ Generator: setuptools (79.0.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5