torchmonarch-nightly 2025.6.16__cp310-cp310-manylinux2014_x86_64.whl → 2025.6.17__cp310-cp310-manylinux2014_x86_64.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.
monarch/_rust_bindings.so CHANGED
Binary file
@@ -244,24 +244,24 @@ class DeviceMesh(Referenceable, MeshTrait):
244
244
  def rotate(self, **kwargs: Dict[str, int]):
245
245
  raise NotImplementedError()
246
246
 
247
- def rank(self, dims: Union[str, Sequence[str]]) -> int:
247
+ def rank(self, dims: Union[str, Sequence[str]]) -> torch.Tensor:
248
248
  self.define_remotely()
249
249
  if isinstance(dims, str):
250
250
  if dims not in self.names:
251
251
  raise KeyError(f"{self} does not have dimension {repr(dims)}")
252
252
  return _remote(
253
- "monarch.worker.worker._rank",
253
+ _rank,
254
254
  propagate=lambda _self, _dims: torch.full((), 0, dtype=torch.long),
255
255
  )(self, dims)
256
256
 
257
- combined_rank = 0
257
+ combined_rank: Any = 0
258
258
  for dim in dims:
259
259
  combined_rank *= self.size(dim)
260
260
  combined_rank += self.rank(dim)
261
261
  return combined_rank
262
262
 
263
263
  @property
264
- def ranks(self) -> dict[str, int]:
264
+ def ranks(self) -> dict[str, torch.Tensor]:
265
265
  return {dim: self.rank(dim) for dim in self.names}
266
266
 
267
267
  def process_idx(self):
@@ -334,6 +334,10 @@ class _ActiveMesh(TorchDispatchMode):
334
334
  return _remote(func, propagate=func)(*args, **kwargs)
335
335
 
336
336
 
337
+ def _rank(mesh, dim):
338
+ return torch.full((), mesh.dims[dim].rank, dtype=torch.long)
339
+
340
+
337
341
  @contextmanager
338
342
  def _dispatch():
339
343
  global _dispatch_enabled
@@ -401,7 +405,7 @@ def to_mesh(
401
405
 
402
406
  def slice_mesh(
403
407
  tensors: Any,
404
- **kwargs: Dict[str, Union[int, slice]],
408
+ **kwargs: Union[int, slice],
405
409
  ) -> Any:
406
410
  """
407
411
  Performs the slice_mesh operation for each tensor in tensors.
monarch/common/shape.py CHANGED
@@ -44,6 +44,9 @@ class MeshTrait(ABC):
44
44
  @abstractmethod
45
45
  def _labels(self) -> Tuple[str, ...]: ...
46
46
 
47
+ # mesh trait guarentees that its own calls to _new_with_shape
48
+ # will only ever select a shape that is a subspace of the
49
+ # current _ndslice.
47
50
  @abstractmethod
48
51
  def _new_with_shape(self, shape: Shape) -> Self: ...
49
52
 
monarch/common/tensor.py CHANGED
@@ -7,17 +7,20 @@
7
7
  # pyre-unsafe
8
8
  import itertools
9
9
  import traceback
10
+ import typing
10
11
  import warnings
11
12
  from collections import defaultdict
12
13
  from typing import (
13
14
  Any,
14
15
  Callable,
16
+ cast,
15
17
  Dict,
16
18
  Iterable,
17
19
  List,
18
20
  Literal,
19
21
  NamedTuple,
20
22
  Optional,
23
+ runtime_checkable,
21
24
  Sequence,
22
25
  TYPE_CHECKING,
23
26
  TypeVar,
@@ -35,7 +38,8 @@ from .base_tensor import BaseTensor
35
38
  from .borrows import StorageAliases
36
39
 
37
40
  if TYPE_CHECKING:
38
- from .device_mesh import DeviceMesh
41
+ from monarch.common.device_mesh import DeviceMesh
42
+
39
43
  from .fake import fake_call
40
44
  from .function import Propagator, ResolvableFunction
41
45
  from .invocation import Invocation
@@ -52,6 +56,12 @@ _valid_reduce = Literal[
52
56
  T = TypeVar("T")
53
57
 
54
58
 
59
+ @runtime_checkable
60
+ class HasDeviceMesh(typing.Protocol):
61
+ @property
62
+ def _device_mesh(self) -> "DeviceMesh": ...
63
+
64
+
55
65
  class DropLocation(NamedTuple):
56
66
  tensor_id: int
57
67
  traceback: List[traceback.FrameSummary]
@@ -167,7 +177,11 @@ class Tensor(Referenceable, BaseTensor):
167
177
  self._on_first_use(self)
168
178
  self._on_first_use = None
169
179
 
170
- def to_mesh(self, mesh: "DeviceMesh", stream: Optional["Stream"] = None):
180
+ def to_mesh(
181
+ self,
182
+ mesh: Union["DeviceMesh", "HasDeviceMesh"],
183
+ stream: Optional["Stream"] = None,
184
+ ):
171
185
  """
172
186
  Move data between one device mesh and another. Sizes of named dimensions must match.
173
187
  If mesh has dimensions that self.mesh does not, it will broadcast to those dimensions.
@@ -177,6 +191,8 @@ class Tensor(Referenceable, BaseTensor):
177
191
  t.slice_mesh(batch=0).to_mesh(t.mesh)
178
192
 
179
193
  """
194
+ if isinstance(mesh, HasDeviceMesh):
195
+ mesh = mesh._device_mesh
180
196
  return MeshSliceTensor(self, self.mesh).to_mesh(mesh, stream)
181
197
 
182
198
  def reduce_(
@@ -344,7 +360,7 @@ class Tensor(Referenceable, BaseTensor):
344
360
  )
345
361
  return r
346
362
 
347
- def slice_mesh(self, **kwargs: Dict[str, Union[int, slice]]) -> "MeshSliceTensor":
363
+ def slice_mesh(self, **kwargs: Union[int, slice]) -> "MeshSliceTensor":
348
364
  # technically a slice of a device mesh and a device mesh are not same thing
349
365
  # because a device mesh also has caches for doing collectives.
350
366
  # but this is an easy way to create a MeshSliceTensor until we optimize
@@ -368,8 +384,13 @@ class MeshSliceTensor:
368
384
  self.slicing = slicing
369
385
 
370
386
  def to_mesh(
371
- self, mesh: "DeviceMesh", stream: Optional["Stream"] = None
387
+ self,
388
+ mesh: Union["DeviceMesh", "HasDeviceMesh"],
389
+ stream: Optional["Stream"] = None,
372
390
  ) -> "Tensor":
391
+ if isinstance(mesh, HasDeviceMesh):
392
+ mesh = mesh._device_mesh
393
+
373
394
  if stream is None:
374
395
  stream = self.tensor.stream
375
396
 
@@ -11,7 +11,7 @@ import time
11
11
  import traceback
12
12
  from collections import deque
13
13
  from logging import Logger
14
- from typing import List, NamedTuple, Optional, Union
14
+ from typing import List, NamedTuple, Optional, TYPE_CHECKING, Union
15
15
 
16
16
  import torch.utils._python_dispatch
17
17
 
@@ -24,7 +24,13 @@ from monarch._rust_bindings.monarch_extension.mesh_controller import _Controller
24
24
  from monarch._rust_bindings.monarch_hyperactor.proc import ( # @manual=//monarch/monarch_extension:monarch_extension
25
25
  ActorId,
26
26
  )
27
- from monarch._rust_bindings.monarch_hyperactor.proc_mesh import ProcMesh as HyProcMesh
27
+
28
+ if TYPE_CHECKING:
29
+ from monarch._rust_bindings.monarch_hyperactor.proc_mesh import (
30
+ ProcMesh as HyProcMesh,
31
+ )
32
+ from monarch.proc_mesh import ProcMesh
33
+
28
34
  from monarch._rust_bindings.monarch_hyperactor.shape import Point
29
35
 
30
36
  from monarch._rust_bindings.monarch_messages.debugger import DebuggerAction
@@ -33,7 +39,6 @@ from monarch.common.controller_api import LogMessage, MessageResult
33
39
  from monarch.common.device_mesh import DeviceMesh, no_mesh
34
40
  from monarch.common.invocation import DeviceException, RemoteException
35
41
  from monarch.controller.debugger import read as debugger_read, write as debugger_write
36
- from monarch.proc_mesh import ProcMesh
37
42
  from monarch.rust_local_mesh import _get_worker_exec_info
38
43
  from pyre_extensions import none_throws
39
44
 
@@ -41,7 +46,7 @@ logger: Logger = logging.getLogger(__name__)
41
46
 
42
47
 
43
48
  class Controller(_Controller):
44
- def __init__(self, workers: HyProcMesh) -> None:
49
+ def __init__(self, workers: "HyProcMesh") -> None:
45
50
  super().__init__()
46
51
  # Buffer for messages unrelated to debugging that are received while a
47
52
  # debugger session is active.
@@ -250,7 +255,7 @@ class MeshClient(Client):
250
255
  self.inner.drain_and_stop()
251
256
 
252
257
 
253
- def spawn_tensor_engine(proc_mesh: ProcMesh) -> DeviceMesh:
258
+ def spawn_tensor_engine(proc_mesh: "ProcMesh") -> DeviceMesh:
254
259
  # This argument to Controller
255
260
  # is currently only used for debug printing. It should be fixed to
256
261
  # report the proc ID instead of the rank it currently does.
Binary file
monarch/proc_mesh.py CHANGED
@@ -7,8 +7,22 @@
7
7
  # pyre-strict
8
8
 
9
9
  import sys
10
+ from contextlib import AbstractContextManager
11
+
12
+ from typing import (
13
+ Any,
14
+ cast,
15
+ Dict,
16
+ List,
17
+ Optional,
18
+ Sequence,
19
+ Type,
20
+ TYPE_CHECKING,
21
+ TypeVar,
22
+ )
10
23
 
11
- from typing import Any, cast, List, Optional, Type, TypeVar
24
+ if TYPE_CHECKING:
25
+ import torch
12
26
 
13
27
  import monarch
14
28
  from monarch import ActorFuture as Future
@@ -24,7 +38,9 @@ from monarch._rust_bindings.monarch_hyperactor.shape import Shape, Slice
24
38
  from monarch.actor_mesh import _Actor, _ActorMeshRefImpl, Actor, ActorMeshRef
25
39
 
26
40
  from monarch.common._device_utils import _local_device_count
41
+ from monarch.common.device_mesh import DeviceMesh
27
42
  from monarch.common.shape import MeshTrait
43
+ from monarch.mesh_controller import spawn_tensor_engine
28
44
  from monarch.rdma import RDMAManager
29
45
 
30
46
  T = TypeVar("T")
@@ -45,25 +61,43 @@ def _allocate_blocking(alloc: Alloc) -> "ProcMesh":
45
61
 
46
62
 
47
63
  class ProcMesh(MeshTrait):
48
- def __init__(self, hy_proc_mesh: HyProcMesh) -> None:
64
+ def __init__(
65
+ self,
66
+ hy_proc_mesh: HyProcMesh,
67
+ _mock_shape: Optional[Shape] = None,
68
+ _device_mesh: Optional[DeviceMesh] = None,
69
+ ) -> None:
49
70
  self._proc_mesh = hy_proc_mesh
71
+ self._mock_shape: Optional[Shape] = _mock_shape
50
72
  self._mailbox: Mailbox = self._proc_mesh.client
51
- self._rdma_manager: RDMAManager = self._spawn_blocking(
52
- "rdma_manager", RDMAManager
53
- )
73
+ self._rdma_manager: Optional[RDMAManager] = None
74
+ self._maybe_device_mesh: Optional[DeviceMesh] = _device_mesh
75
+ if _mock_shape is None:
76
+ self._rdma_manager = self._spawn_blocking("rdma_manager", RDMAManager)
77
+
78
+ @property
79
+ def _shape(self) -> Shape:
80
+ return self._proc_mesh.shape if self._mock_shape is None else self._mock_shape
54
81
 
55
82
  @property
56
83
  def _ndslice(self) -> Slice:
57
- return self._proc_mesh.shape.ndslice
84
+ return self._shape.ndslice
58
85
 
59
86
  @property
60
87
  def _labels(self) -> List[str]:
61
- return self._proc_mesh.shape.labels
88
+ return self._shape.labels
62
89
 
63
90
  def _new_with_shape(self, shape: Shape) -> "ProcMesh":
64
- raise NotImplementedError("ProcMesh slicing is not implemeted yet.")
91
+ device_mesh = (
92
+ None
93
+ if self._device_mesh is None
94
+ else self._device_mesh._new_with_shape(shape)
95
+ )
96
+ return ProcMesh(self._proc_mesh, _mock_shape=shape, _device_mesh=device_mesh)
65
97
 
66
98
  def spawn(self, name: str, Class: Type[T], *args: Any, **kwargs: Any) -> Future[T]:
99
+ if self._mock_shape is not None:
100
+ raise NotImplementedError("NYI: spawn on slice of a proc mesh.")
67
101
  return Future(
68
102
  lambda: self._spawn_nonblocking(name, Class, *args, **kwargs),
69
103
  lambda: self._spawn_blocking(name, Class, *args, **kwargs),
@@ -120,6 +154,26 @@ class ProcMesh(MeshTrait):
120
154
  service._create(args, kwargs)
121
155
  return cast(T, service)
122
156
 
157
+ @property
158
+ def _device_mesh(self) -> "DeviceMesh":
159
+ if self._maybe_device_mesh is None:
160
+ if self._mock_shape is not None:
161
+ raise NotImplementedError(
162
+ "NYI: activating a proc mesh must first happen on the root proc_mesh until we fix spawning on submeshes."
163
+ )
164
+ self._maybe_device_mesh = spawn_tensor_engine(self)
165
+ return self._maybe_device_mesh
166
+
167
+ # pyre-ignore
168
+ def activate(self) -> AbstractContextManager:
169
+ return self._device_mesh.activate()
170
+
171
+ def rank_tensor(self, dim: str | Sequence[str]) -> "torch.Tensor":
172
+ return self._device_mesh.rank(dim)
173
+
174
+ def rank_tensors(self) -> Dict[str, "torch.Tensor"]:
175
+ return self._device_mesh.ranks
176
+
123
177
 
124
178
  async def local_proc_mesh_nonblocking(
125
179
  *, gpus: Optional[int] = None, hosts: int = 1
monarch/sim_mesh.py CHANGED
@@ -201,9 +201,11 @@ class Bootstrap:
201
201
 
202
202
  proxy_addr = proxy_addr or f"unix!@{_random_id()}-proxy"
203
203
  self.bootstrap_addr: str = f"sim!unix!@system,{proxy_addr}"
204
- self.client_listen_addr: str = f"sim!unix!@client,{proxy_addr}"
204
+
205
+ client_proxy_addr = f"unix!@{_random_id()}-proxy"
206
+ self.client_listen_addr: str = f"sim!unix!@client,{client_proxy_addr}"
205
207
  self.client_bootstrap_addr: str = (
206
- f"sim!unix!@client,{proxy_addr},unix!@system,{proxy_addr}"
208
+ f"sim!unix!@client,{client_proxy_addr},unix!@system,{proxy_addr}"
207
209
  )
208
210
  bootstrap_simulator_backend(self.bootstrap_addr, proxy_addr, world_size)
209
211
 
@@ -25,6 +25,7 @@ def proc_mesh(
25
25
  meshes: list[str] = _DEFAULT_MESHES,
26
26
  env: Optional[dict[str, str]] = None,
27
27
  port: int = mesh_spec.DEFAULT_REMOTE_ALLOCATOR_PORT,
28
+ program: str = "monarch_bootstrap", # installed with monarch wheel (as console script)
28
29
  ) -> specs.AppDef:
29
30
  """
30
31
  Args:
@@ -33,6 +34,7 @@ def proc_mesh(
33
34
  meshes: list of mesh specs of the form "{name}:{num_hosts}:{host_type}"
34
35
  env: environment variables to be passed to the main command (e.g. ENV1=v1,ENV2=v2,ENV3=v3)
35
36
  port: the port that the remote process allocator runs on (must be reachable from the client)
37
+ program: path to the binary that the remote process allocator spawns on an allocation request
36
38
  """
37
39
 
38
40
  appdef = specs.AppDef(name)
@@ -41,11 +43,10 @@ def proc_mesh(
41
43
  mesh_role = specs.Role(
42
44
  name=mesh.name,
43
45
  image=image,
44
- entrypoint="process_allocator", # 'cargo install monarch_hyperactor' to get this binary
46
+ entrypoint="process_allocator", # run "cargo install monarch_hyperactor" to get this binary
45
47
  args=[
46
- "mesh-worker",
47
48
  f"--port={port}",
48
- "--program=monarch_bootstrap", # installed with monarch wheel (as console script)
49
+ f"--program={program}",
49
50
  ],
50
51
  num_replicas=mesh.num_hosts,
51
52
  resource=specs.resource(h=mesh.host_type),
@@ -391,10 +391,13 @@ def test_rust_binding_modules_correct() -> None:
391
391
  check(bindings, "monarch._rust_bindings")
392
392
 
393
393
 
394
- @pytest.mark.skipif(
394
+ two_gpu = pytest.mark.skipif(
395
395
  torch.cuda.device_count() < 2,
396
396
  reason="Not enough GPUs, this test requires at least 2 GPUs",
397
397
  )
398
+
399
+
400
+ @two_gpu
398
401
  def test_tensor_engine() -> None:
399
402
  pm = proc_mesh(gpus=2).get()
400
403
 
@@ -591,3 +594,20 @@ async def test_actor_tls() -> None:
591
594
 
592
595
  assert 2 == await am.get.call_one()
593
596
  # assert 4 == await am.get_async.call_one()
597
+
598
+
599
+ @two_gpu
600
+ def test_proc_mesh_tensor_engine() -> None:
601
+ pm = proc_mesh(gpus=2).get()
602
+ with pm.activate():
603
+ f = 10 * pm.rank_tensor("gpus").cuda()
604
+ a = monarch.inspect(f, hosts=0, gpus=0)
605
+ b = monarch.inspect(f, hosts=0, gpus=1)
606
+
607
+ one = pm.slice(gpus=1)
608
+ with one.activate():
609
+ sliced_b = monarch.slice_mesh(f, gpus=1).to_mesh(one)
610
+ c = monarch.inspect(sliced_b * 10)
611
+ assert a == 0
612
+ assert b == 10
613
+ assert c == 100
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: torchmonarch-nightly
3
- Version: 2025.6.16
3
+ Version: 2025.6.17
4
4
  Summary: Monarch: Single controller library
5
5
  Author: Meta
6
6
  Author-email: oncall+monarch@xmail.facebook.com
@@ -1,5 +1,5 @@
1
1
  monarch/__init__.py,sha256=iUvWHc0-7Q2tovRoRxOIiA3TsefMXCbWl-jEfQ2djew,6897
2
- monarch/_rust_bindings.so,sha256=Mus3Wdk7VoEHkyPLV1_SQ2r2KAMOPNTv3rECuKH5Olk,40613688
2
+ monarch/_rust_bindings.so,sha256=BIOc6AH_iVbNSGCnF3de-4l9bp82KlPwWxBWUCMKf40,40709968
3
3
  monarch/_testing.py,sha256=jOIOG6jcZBzvEvG_DwSnwCkaMVXvSun6sJAG6nXemww,7859
4
4
  monarch/actor_mesh.py,sha256=nAW65WFEWMJWCv8zuH9GSOyTNXwFN8QNqZxMZTuSYxw,25537
5
5
  monarch/allocator.py,sha256=ylvYTf31o-PT385cYJPhi17uNbC4yl_RAraqD0fVe4g,4112
@@ -10,13 +10,13 @@ monarch/fetch.py,sha256=61jxo7sx4QNUTkc0_rF5NaJROen4tKbAaiIjrXWLOvg,1705
10
10
  monarch/future.py,sha256=lcdFEe7m1shYPPuvZ1RkS6JUIChEKGBWe3v7x_nu4Hg,731
11
11
  monarch/gradient_generator.py,sha256=Rl3dmXGceTdCc1mYBg2JciR88ywGPnW7TVkL86KwqEA,6366
12
12
  monarch/memory.py,sha256=ol86dBhFAJqg78iF25-BuK0wuwj1onR8FIioZ_B0gjw,1377
13
- monarch/mesh_controller.py,sha256=Xft2edk7rz8_PPe-iIUZ09P-j4JDPGADBGHBiuiZ7YY,10363
14
- monarch/monarch_controller,sha256=OZYuYEUToULTaOxmUk3Dv-73n68gFua8z4pP5WCwU5I,20400832
13
+ monarch/mesh_controller.py,sha256=am1QP7dvn0OH1z9ADSKm41APs1HY_dHcBAhOVP-QDmE,10427
14
+ monarch/monarch_controller,sha256=yEs4PlEWgSMnRUSNWyFKvT5LmpkJ9p7GRi6WF-nsdM0,20347496
15
15
  monarch/notebook.py,sha256=zu9MKDFKf1-rCM2TqFSRJjMBeiWuKcJSyUFLvoZRQzs,25949
16
16
  monarch/opaque_module.py,sha256=oajOu_WD1hD4hxE8HDdO-tvWY7KDHWd7VaAhJEa5L2I,10446
17
17
  monarch/opaque_object.py,sha256=IVpll4pyuKZMo_EnPh4s0qnx8RlAcJrJ1yoLX6E75wQ,2782
18
18
  monarch/pdb_wrapper.py,sha256=gm46AZnfR4amH1vYFWnWivEv5MaU3Nb6KIWjSM8KjWM,4052
19
- monarch/proc_mesh.py,sha256=xoaReM9Ab9TWkesxedWSyyk4TMD0HLV88dQ8CQcbqTI,6892
19
+ monarch/proc_mesh.py,sha256=5RaKPQZJD-sKzEAbqMorKsZA7SOUzIflk3Fn6cdfzvw,8607
20
20
  monarch/profiler.py,sha256=TQ9fnVM8H7smBWtYdB_6Irtzz8DBOmcp7U1T3wlUmco,4911
21
21
  monarch/python_local_mesh.py,sha256=YsureIzR9uGlNVrKd4vRghxOXBeYabkt9lICRErfRAI,3536
22
22
  monarch/random.py,sha256=f9QR7Esu4Vxqxs-KCf5QYyVqlWvXJ3-UtG90L_h4j40,1527
@@ -24,7 +24,7 @@ monarch/rdma.py,sha256=1pNh11S_FWeETRgkdUpauTMUlodrRohIq1UfQjKVnN8,5418
24
24
  monarch/remote_class.py,sha256=-OAowzU1aDP6i4ik_SjXntVUC9h4dqAzgqwohkQ6Grc,4167
25
25
  monarch/rust_backend_mesh.py,sha256=1htC62of4MgFtkezWGlsxSFtKJdc0CIeqeSuOx7yu3M,9944
26
26
  monarch/rust_local_mesh.py,sha256=7ASptybn3wy4J7eoBc7LhGW4j4AA6bigl5Kuhyflw8s,47405
27
- monarch/sim_mesh.py,sha256=9wkS99L0EpG2Gldi-nzA-3ww7z__DQ7Qp2uReMfn188,12183
27
+ monarch/sim_mesh.py,sha256=kDsbubv28YFg9ZQN4urt3oJGzR3CnnUiATnjUiSxrkE,12256
28
28
  monarch/telemetry.py,sha256=7JUZWaoD2Yn5Ae_7kNhkLFRBLYaSGfH071_m_qfVehI,525
29
29
  monarch/tensor_worker_main.py,sha256=Nbarl2sJKIddLeaRFsaUnqOerLHjzggUr9SqCr2_GYI,8300
30
30
  monarch/tensorboard.py,sha256=MnLgH5lbqeUJauEuirEgR6L_qYl2NGdtwZOWIAuOZao,2587
@@ -50,7 +50,7 @@ monarch/common/client.py,sha256=axo37s_z17nYQGOZG5fi_0zUEJ_8qw7INjs-Kw2vaVo,2493
50
50
  monarch/common/constants.py,sha256=ohvsVYMpfeWopv3KXDAeHWDFLukwc-OY37VRxpKNBE8,300
51
51
  monarch/common/context_manager.py,sha256=GOeyaFbyCqvQmkJ0oI7q6IxRd8_0mVyYKZRccI8iaug,1067
52
52
  monarch/common/controller_api.py,sha256=djGkK5aSd-V6pBkr3uBCXbfJv3OKf2o2VbBXJgFF2WI,3202
53
- monarch/common/device_mesh.py,sha256=fBZMYDpfAp5tAEXTe9l6eJxDI4-TMWVOMrAJXp5hzvI,12082
53
+ monarch/common/device_mesh.py,sha256=jo_qEIRlX6KzBlP2BUSS4XEELL-6_H08a47bUz8QYsA,12159
54
54
  monarch/common/fake.py,sha256=h57Cggz2qXNqImZ7yPuOZOSe9-l9i553ki1z-YHlgQA,1801
55
55
  monarch/common/function.py,sha256=V8kdgSRTvild2SpcewWa5IETX3QiWDZQ2BEIDFa5zz8,4374
56
56
  monarch/common/function_caching.py,sha256=HVdbWtv6Eea7ENMWi8iv36w1G1TaVuUJhkUX_JxGx5A,5060
@@ -67,9 +67,9 @@ monarch/common/recording.py,sha256=hoI9VY_FyW_xVx-jmfsKydqX5vW2GulwcDWsBdUVOm8,4
67
67
  monarch/common/reference.py,sha256=O26lkzEeVwj0S1xEy-OLqdHVnACmmlbQCUmXRrW4n1Q,938
68
68
  monarch/common/remote.py,sha256=qZWXkShX20l07TseQSpVECh2yXZaVKYUvQXkeEM-zvY,9220
69
69
  monarch/common/selection.py,sha256=lpWFbZs3ArYy29e-53eoAVAjQFksf1RvZz9NvM0CUW4,308
70
- monarch/common/shape.py,sha256=k6-0S0U19PmrfP62SMb9Ihx6_I4QQFUGErloZn8GcZ0,8144
70
+ monarch/common/shape.py,sha256=B-7DI768ZhT8ECUNCJcI7DfCB7iDFGFH0r-HmXaAfcM,8296
71
71
  monarch/common/stream.py,sha256=_ejoxafHtdD10lLzznRCXKwrkZ_ZH9k_VTgiA5yfBrI,3583
72
- monarch/common/tensor.py,sha256=mSXiHoD0Up4m2RLdQcsbesaz2N4QCFS34UNNX3Dbldk,28842
72
+ monarch/common/tensor.py,sha256=G26E8-qv7HnjZfz3Ka5a-u3vb6DadcDChOn6wpjkeZo,29273
73
73
  monarch/common/tensor_factory.py,sha256=qm8NZx-5ezMAFjNLiXQvb66okm5XgdboB_GRarGOdN0,801
74
74
  monarch/common/tree.py,sha256=1DG3siiE7ixBV6v5cwN8RT_17aJhYZTE-L3i7wZe2_c,2282
75
75
  monarch/controller/__init__.py,sha256=J8qjUOysmcMAek2KFN13mViOXZxTYc5vCrF02t3VuFU,223
@@ -110,7 +110,7 @@ monarch/tools/cli.py,sha256=66F7dr90bh27P3kOCmxwJkVmWv2v4wBrkifvwqwUwFE,4967
110
110
  monarch/tools/commands.py,sha256=BfmXndJmU_cZP4cMPlknkxGca1NjqYd8_ReDePWksXw,6908
111
111
  monarch/tools/mesh_spec.py,sha256=JLykhgy1dClXiNbH1Qsl2fX5MbqplQAhl8LGoragvbo,3702
112
112
  monarch/tools/components/__init__.py,sha256=J8qjUOysmcMAek2KFN13mViOXZxTYc5vCrF02t3VuFU,223
113
- monarch/tools/components/hyperactor.py,sha256=h0gy3QYZD-YJ7FHppJgbTKe4zOuNjUCGZqRlkwwGkhg,2012
113
+ monarch/tools/components/hyperactor.py,sha256=Ryi1X07VLcaQVlpc4af65JNBbZtOb9IAlKxSKMZ1AW4,2120
114
114
  monarch/tools/config/__init__.py,sha256=OPSflEmJB2zxAaRVzzWSWXV5M5vlknLgpulGdW1ze5U,510
115
115
  monarch/tools/config/defaults.py,sha256=34a3HQhyXqt9qR2SYMVCROoNsnwk37rIwLXXiKwqtog,1894
116
116
  monarch/worker/__init__.py,sha256=J8qjUOysmcMAek2KFN13mViOXZxTYc5vCrF02t3VuFU,223
@@ -144,7 +144,7 @@ tests/test_future.py,sha256=cXzaNi2YDwVyjR541ScXmgktX1YFsKzbl8wep0DMVbk,3032
144
144
  tests/test_grad_generator.py,sha256=p4Pm4kMEeGldt2jUVAkGKCB0mLccKI28pltH6OTGbQA,3412
145
145
  tests/test_mock_cuda.py,sha256=5hisElxeLJ5MHw3KM9gwxBiXiMaG-Rm382u3AsQcDOI,3068
146
146
  tests/test_pdb_actor.py,sha256=5KJhuhcZDPWMdjC6eAtDdwnz1W7jNFXvIrMSFaCWaPw,3858
147
- tests/test_python_actors.py,sha256=MzGeuhGVICzwiNaQt8SFCKyfwhNzdRzZ4s2rJxYbeoo,17283
147
+ tests/test_python_actors.py,sha256=YiDJaMFoQ3xPGq602QTuhRM8CsgZo5pttKMKAnLm6io,17773
148
148
  tests/test_remote_functions.py,sha256=5nxYB8dfA9NT9f9Od9O3htgQtPbiRNiXZ1Kgtn75sOQ,50056
149
149
  tests/test_rust_backend.py,sha256=94S3R995ZkyIhEiBsM5flcjf5X7bscEAHBtInbTRFe8,7776
150
150
  tests/test_signal_safe_block_on.py,sha256=bmal0XgzJowZXJV6T1Blow5a-vZluYWusCThLMGxyTE,3336
@@ -154,9 +154,9 @@ tests/simulator/test_profiling.py,sha256=TGYCfzTLdkpIwnOuO6KApprmrgPIRQe60KRX3wk
154
154
  tests/simulator/test_simulator.py,sha256=LO8lA0ssY-OGEBL5ipEu74f97Y765TEwfUOv-DtIptM,14568
155
155
  tests/simulator/test_task.py,sha256=ipqBDuDAysuo1xOB9S5psaFvwe6VATD43IovCTSs0t4,2327
156
156
  tests/simulator/test_worker.py,sha256=QrWWIJ3HDgDLkBPRc2mwYPlOQoXQcj1qRfc0WUfKkFY,3507
157
- torchmonarch_nightly-2025.6.16.dist-info/licenses/LICENSE,sha256=e0Eotbf_rHOYPuEUlppIbvwy4SN98CZnl_hqwvbDA4Q,1530
158
- torchmonarch_nightly-2025.6.16.dist-info/METADATA,sha256=KwDmmYW1hUyjyax5yF9TE1Tk7JvYmylSpIe4e2T_aXI,2772
159
- torchmonarch_nightly-2025.6.16.dist-info/WHEEL,sha256=_wZSFk0d90K9wOBp8Q-UGxshyiJ987JoPiyUBNC6VLk,104
160
- torchmonarch_nightly-2025.6.16.dist-info/entry_points.txt,sha256=sqfQ16oZqjEvttUI-uj9BBXIIE6jt05bYFSmy-2hyXI,106
161
- torchmonarch_nightly-2025.6.16.dist-info/top_level.txt,sha256=E-ZssZzyM17glpVrh-S9--qJ-w9p2EjuYOuNw9tQ4Eg,33
162
- torchmonarch_nightly-2025.6.16.dist-info/RECORD,,
157
+ torchmonarch_nightly-2025.6.17.dist-info/licenses/LICENSE,sha256=e0Eotbf_rHOYPuEUlppIbvwy4SN98CZnl_hqwvbDA4Q,1530
158
+ torchmonarch_nightly-2025.6.17.dist-info/METADATA,sha256=xnYwQ3UlDfJcHRWA86w2X71Fzl0Eddvs4u4UKveyIuo,2772
159
+ torchmonarch_nightly-2025.6.17.dist-info/WHEEL,sha256=_wZSFk0d90K9wOBp8Q-UGxshyiJ987JoPiyUBNC6VLk,104
160
+ torchmonarch_nightly-2025.6.17.dist-info/entry_points.txt,sha256=sqfQ16oZqjEvttUI-uj9BBXIIE6jt05bYFSmy-2hyXI,106
161
+ torchmonarch_nightly-2025.6.17.dist-info/top_level.txt,sha256=E-ZssZzyM17glpVrh-S9--qJ-w9p2EjuYOuNw9tQ4Eg,33
162
+ torchmonarch_nightly-2025.6.17.dist-info/RECORD,,