modal 1.1.2.dev7__py3-none-any.whl → 1.1.2.dev9__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 modal might be problematic. Click here for more details.
- modal/_functions.py +20 -2
- modal/client.pyi +2 -2
- modal/functions.pyi +39 -6
- modal/parallel_map.py +131 -0
- modal/parallel_map.pyi +42 -0
- {modal-1.1.2.dev7.dist-info → modal-1.1.2.dev9.dist-info}/METADATA +1 -1
- {modal-1.1.2.dev7.dist-info → modal-1.1.2.dev9.dist-info}/RECORD +12 -12
- modal_version/__init__.py +1 -1
- {modal-1.1.2.dev7.dist-info → modal-1.1.2.dev9.dist-info}/WHEEL +0 -0
- {modal-1.1.2.dev7.dist-info → modal-1.1.2.dev9.dist-info}/entry_points.txt +0 -0
- {modal-1.1.2.dev7.dist-info → modal-1.1.2.dev9.dist-info}/licenses/LICENSE +0 -0
- {modal-1.1.2.dev7.dist-info → modal-1.1.2.dev9.dist-info}/top_level.txt +0 -0
modal/_functions.py
CHANGED
|
@@ -71,6 +71,8 @@ from .mount import _get_client_mount, _Mount
|
|
|
71
71
|
from .network_file_system import _NetworkFileSystem, network_file_system_mount_protos
|
|
72
72
|
from .output import _get_output_manager
|
|
73
73
|
from .parallel_map import (
|
|
74
|
+
_experimental_spawn_map_async,
|
|
75
|
+
_experimental_spawn_map_sync,
|
|
74
76
|
_for_each_async,
|
|
75
77
|
_for_each_sync,
|
|
76
78
|
_map_async,
|
|
@@ -78,6 +80,7 @@ from .parallel_map import (
|
|
|
78
80
|
_map_invocation_inputplane,
|
|
79
81
|
_map_sync,
|
|
80
82
|
_spawn_map_async,
|
|
83
|
+
_spawn_map_invocation,
|
|
81
84
|
_spawn_map_sync,
|
|
82
85
|
_starmap_async,
|
|
83
86
|
_starmap_sync,
|
|
@@ -351,8 +354,7 @@ class _Invocation:
|
|
|
351
354
|
|
|
352
355
|
class _InputPlaneInvocation:
|
|
353
356
|
"""Internal client representation of a single-input call to a Modal Function using the input
|
|
354
|
-
plane server API.
|
|
355
|
-
It is OK to make breaking changes to this class."""
|
|
357
|
+
plane server API."""
|
|
356
358
|
|
|
357
359
|
stub: ModalClientModal
|
|
358
360
|
|
|
@@ -1543,6 +1545,21 @@ Use the `Function.get_web_url()` method instead.
|
|
|
1543
1545
|
async for item in stream:
|
|
1544
1546
|
yield item
|
|
1545
1547
|
|
|
1548
|
+
@live_method
|
|
1549
|
+
async def _spawn_map(self, input_queue: _SynchronizedQueue) -> "_FunctionCall[ReturnType]":
|
|
1550
|
+
self._check_no_web_url("spawn_map")
|
|
1551
|
+
if self._is_generator:
|
|
1552
|
+
raise InvalidError("A generator function cannot be called with `.spawn_map(...)`.")
|
|
1553
|
+
|
|
1554
|
+
assert self._function_name
|
|
1555
|
+
function_call_id = await _spawn_map_invocation(
|
|
1556
|
+
self,
|
|
1557
|
+
input_queue,
|
|
1558
|
+
self.client,
|
|
1559
|
+
)
|
|
1560
|
+
fc: _FunctionCall[ReturnType] = _FunctionCall._new_hydrated(function_call_id, self.client, None)
|
|
1561
|
+
return fc
|
|
1562
|
+
|
|
1546
1563
|
async def _call_function(self, args, kwargs) -> ReturnType:
|
|
1547
1564
|
invocation: Union[_Invocation, _InputPlaneInvocation]
|
|
1548
1565
|
if self._input_plane_url:
|
|
@@ -1789,6 +1806,7 @@ Use the `Function.get_web_url()` method instead.
|
|
|
1789
1806
|
starmap = MethodWithAio(_starmap_sync, _starmap_async, synchronizer)
|
|
1790
1807
|
for_each = MethodWithAio(_for_each_sync, _for_each_async, synchronizer)
|
|
1791
1808
|
spawn_map = MethodWithAio(_spawn_map_sync, _spawn_map_async, synchronizer)
|
|
1809
|
+
experimental_spawn_map = MethodWithAio(_experimental_spawn_map_sync, _experimental_spawn_map_async, synchronizer)
|
|
1792
1810
|
|
|
1793
1811
|
|
|
1794
1812
|
class _FunctionCall(typing.Generic[ReturnType], _Object, type_prefix="fc"):
|
modal/client.pyi
CHANGED
|
@@ -33,7 +33,7 @@ class _Client:
|
|
|
33
33
|
server_url: str,
|
|
34
34
|
client_type: int,
|
|
35
35
|
credentials: typing.Optional[tuple[str, str]],
|
|
36
|
-
version: str = "1.1.2.
|
|
36
|
+
version: str = "1.1.2.dev9",
|
|
37
37
|
):
|
|
38
38
|
"""mdmd:hidden
|
|
39
39
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -164,7 +164,7 @@ class Client:
|
|
|
164
164
|
server_url: str,
|
|
165
165
|
client_type: int,
|
|
166
166
|
credentials: typing.Optional[tuple[str, str]],
|
|
167
|
-
version: str = "1.1.2.
|
|
167
|
+
version: str = "1.1.2.dev9",
|
|
168
168
|
):
|
|
169
169
|
"""mdmd:hidden
|
|
170
170
|
The Modal client object is not intended to be instantiated directly by users.
|
modal/functions.pyi
CHANGED
|
@@ -405,6 +405,12 @@ class Function(
|
|
|
405
405
|
|
|
406
406
|
_map: ___map_spec[typing_extensions.Self]
|
|
407
407
|
|
|
408
|
+
class ___spawn_map_spec(typing_extensions.Protocol[ReturnType_INNER, SUPERSELF]):
|
|
409
|
+
def __call__(self, /, input_queue: modal.parallel_map.SynchronizedQueue) -> FunctionCall[ReturnType_INNER]: ...
|
|
410
|
+
async def aio(self, /, input_queue: modal.parallel_map.SynchronizedQueue) -> FunctionCall[ReturnType_INNER]: ...
|
|
411
|
+
|
|
412
|
+
_spawn_map: ___spawn_map_spec[modal._functions.ReturnType, typing_extensions.Self]
|
|
413
|
+
|
|
408
414
|
class ___call_function_spec(typing_extensions.Protocol[ReturnType_INNER, SUPERSELF]):
|
|
409
415
|
def __call__(self, /, args, kwargs) -> ReturnType_INNER: ...
|
|
410
416
|
async def aio(self, /, args, kwargs) -> ReturnType_INNER: ...
|
|
@@ -427,7 +433,7 @@ class Function(
|
|
|
427
433
|
|
|
428
434
|
_call_generator: ___call_generator_spec[typing_extensions.Self]
|
|
429
435
|
|
|
430
|
-
class __remote_spec(typing_extensions.Protocol[
|
|
436
|
+
class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
431
437
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
|
432
438
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
433
439
|
...
|
|
@@ -436,7 +442,7 @@ class Function(
|
|
|
436
442
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
437
443
|
...
|
|
438
444
|
|
|
439
|
-
remote: __remote_spec[modal._functions.
|
|
445
|
+
remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
|
440
446
|
|
|
441
447
|
class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
442
448
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
|
@@ -463,7 +469,7 @@ class Function(
|
|
|
463
469
|
"""
|
|
464
470
|
...
|
|
465
471
|
|
|
466
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
|
472
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
467
473
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
468
474
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
|
469
475
|
|
|
@@ -487,7 +493,7 @@ class Function(
|
|
|
487
493
|
...
|
|
488
494
|
|
|
489
495
|
_experimental_spawn: ___experimental_spawn_spec[
|
|
490
|
-
modal._functions.
|
|
496
|
+
modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
|
|
491
497
|
]
|
|
492
498
|
|
|
493
499
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
|
|
@@ -496,7 +502,7 @@ class Function(
|
|
|
496
502
|
|
|
497
503
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
|
|
498
504
|
|
|
499
|
-
class __spawn_spec(typing_extensions.Protocol[
|
|
505
|
+
class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
500
506
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
501
507
|
"""Calls the function with the given arguments, without waiting for the results.
|
|
502
508
|
|
|
@@ -517,7 +523,7 @@ class Function(
|
|
|
517
523
|
"""
|
|
518
524
|
...
|
|
519
525
|
|
|
520
|
-
spawn: __spawn_spec[modal._functions.
|
|
526
|
+
spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
|
521
527
|
|
|
522
528
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
|
|
523
529
|
"""Return the inner Python object wrapped by this Modal Function."""
|
|
@@ -693,6 +699,33 @@ class Function(
|
|
|
693
699
|
|
|
694
700
|
spawn_map: __spawn_map_spec[typing_extensions.Self]
|
|
695
701
|
|
|
702
|
+
class __experimental_spawn_map_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
703
|
+
def __call__(self, /, *input_iterators, kwargs={}) -> modal._functions._FunctionCall:
|
|
704
|
+
"""Spawn parallel execution over a set of inputs, exiting as soon as the inputs are created (without waiting
|
|
705
|
+
for the map to complete).
|
|
706
|
+
|
|
707
|
+
Takes one iterator argument per argument in the function being mapped over.
|
|
708
|
+
|
|
709
|
+
Example:
|
|
710
|
+
```python
|
|
711
|
+
@app.function()
|
|
712
|
+
def my_func(a):
|
|
713
|
+
return a ** 2
|
|
714
|
+
|
|
715
|
+
|
|
716
|
+
@app.local_entrypoint()
|
|
717
|
+
def main():
|
|
718
|
+
fc = my_func.spawn_map([1, 2, 3, 4])
|
|
719
|
+
```
|
|
720
|
+
|
|
721
|
+
Returns a FunctionCall object that can be used to retrieve results
|
|
722
|
+
"""
|
|
723
|
+
...
|
|
724
|
+
|
|
725
|
+
async def aio(self, /, *input_iterators, kwargs={}) -> modal._functions._FunctionCall: ...
|
|
726
|
+
|
|
727
|
+
experimental_spawn_map: __experimental_spawn_map_spec[typing_extensions.Self]
|
|
728
|
+
|
|
696
729
|
class FunctionCall(typing.Generic[modal._functions.ReturnType], modal.object.Object):
|
|
697
730
|
"""A reference to an executed function call.
|
|
698
731
|
|
modal/parallel_map.py
CHANGED
|
@@ -260,6 +260,89 @@ class SyncInputPumper(InputPumper):
|
|
|
260
260
|
yield
|
|
261
261
|
|
|
262
262
|
|
|
263
|
+
class AsyncInputPumper(InputPumper):
|
|
264
|
+
def __init__(
|
|
265
|
+
self,
|
|
266
|
+
client: "modal.client._Client",
|
|
267
|
+
*,
|
|
268
|
+
input_queue: asyncio.Queue,
|
|
269
|
+
function: "modal.functions._Function",
|
|
270
|
+
function_call_id: str,
|
|
271
|
+
):
|
|
272
|
+
super().__init__(client, input_queue=input_queue, function=function, function_call_id=function_call_id)
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
async def _spawn_map_invocation(
|
|
276
|
+
function: "modal.functions._Function", raw_input_queue: _SynchronizedQueue, client: "modal.client._Client"
|
|
277
|
+
) -> str:
|
|
278
|
+
assert client.stub
|
|
279
|
+
request = api_pb2.FunctionMapRequest(
|
|
280
|
+
function_id=function.object_id,
|
|
281
|
+
parent_input_id=current_input_id() or "",
|
|
282
|
+
function_call_type=api_pb2.FUNCTION_CALL_TYPE_MAP,
|
|
283
|
+
function_call_invocation_type=api_pb2.FUNCTION_CALL_INVOCATION_TYPE_ASYNC,
|
|
284
|
+
)
|
|
285
|
+
response: api_pb2.FunctionMapResponse = await retry_transient_errors(client.stub.FunctionMap, request)
|
|
286
|
+
function_call_id = response.function_call_id
|
|
287
|
+
|
|
288
|
+
have_all_inputs = False
|
|
289
|
+
inputs_created = 0
|
|
290
|
+
|
|
291
|
+
def set_inputs_created(set_inputs_created):
|
|
292
|
+
nonlocal inputs_created
|
|
293
|
+
assert set_inputs_created is None or set_inputs_created > inputs_created
|
|
294
|
+
inputs_created = set_inputs_created
|
|
295
|
+
|
|
296
|
+
def set_have_all_inputs():
|
|
297
|
+
nonlocal have_all_inputs
|
|
298
|
+
have_all_inputs = True
|
|
299
|
+
|
|
300
|
+
input_queue: asyncio.Queue[api_pb2.FunctionPutInputsItem | None] = asyncio.Queue()
|
|
301
|
+
input_preprocessor = InputPreprocessor(
|
|
302
|
+
client=client,
|
|
303
|
+
raw_input_queue=raw_input_queue,
|
|
304
|
+
processed_input_queue=input_queue,
|
|
305
|
+
function=function,
|
|
306
|
+
created_callback=set_inputs_created,
|
|
307
|
+
done_callback=set_have_all_inputs,
|
|
308
|
+
)
|
|
309
|
+
|
|
310
|
+
input_pumper = AsyncInputPumper(
|
|
311
|
+
client=client,
|
|
312
|
+
input_queue=input_queue,
|
|
313
|
+
function=function,
|
|
314
|
+
function_call_id=function_call_id,
|
|
315
|
+
)
|
|
316
|
+
|
|
317
|
+
def log_stats():
|
|
318
|
+
logger.debug(
|
|
319
|
+
f"have_all_inputs={have_all_inputs} inputs_created={inputs_created} inputs_sent={input_pumper.inputs_sent} "
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
async def log_task():
|
|
323
|
+
while True:
|
|
324
|
+
log_stats()
|
|
325
|
+
try:
|
|
326
|
+
await asyncio.sleep(10)
|
|
327
|
+
except asyncio.CancelledError:
|
|
328
|
+
# Log final stats before exiting
|
|
329
|
+
log_stats()
|
|
330
|
+
break
|
|
331
|
+
|
|
332
|
+
async def consume_generator(gen):
|
|
333
|
+
async for _ in gen:
|
|
334
|
+
pass
|
|
335
|
+
|
|
336
|
+
log_debug_stats_task = asyncio.create_task(log_task())
|
|
337
|
+
await asyncio.gather(
|
|
338
|
+
consume_generator(input_preprocessor.drain_input_generator()),
|
|
339
|
+
consume_generator(input_pumper.pump_inputs()),
|
|
340
|
+
)
|
|
341
|
+
log_debug_stats_task.cancel()
|
|
342
|
+
await log_debug_stats_task
|
|
343
|
+
return function_call_id
|
|
344
|
+
|
|
345
|
+
|
|
263
346
|
async def _map_invocation(
|
|
264
347
|
function: "modal.functions._Function",
|
|
265
348
|
raw_input_queue: _SynchronizedQueue,
|
|
@@ -1063,6 +1146,54 @@ def _map_sync(
|
|
|
1063
1146
|
)
|
|
1064
1147
|
|
|
1065
1148
|
|
|
1149
|
+
async def _experimental_spawn_map_async(self, *input_iterators, kwargs={}) -> "modal.functions._FunctionCall":
|
|
1150
|
+
async_input_gen = async_zip(*[sync_or_async_iter(it) for it in input_iterators])
|
|
1151
|
+
return await _spawn_map_helper(self, async_input_gen, kwargs)
|
|
1152
|
+
|
|
1153
|
+
|
|
1154
|
+
async def _spawn_map_helper(
|
|
1155
|
+
self: "modal.functions.Function", async_input_gen, kwargs={}
|
|
1156
|
+
) -> "modal.functions._FunctionCall":
|
|
1157
|
+
raw_input_queue: Any = SynchronizedQueue() # type: ignore
|
|
1158
|
+
await raw_input_queue.init.aio()
|
|
1159
|
+
|
|
1160
|
+
async def feed_queue():
|
|
1161
|
+
async with aclosing(async_input_gen) as streamer:
|
|
1162
|
+
async for args in streamer:
|
|
1163
|
+
await raw_input_queue.put.aio((args, kwargs))
|
|
1164
|
+
await raw_input_queue.put.aio(None) # end-of-input sentinel
|
|
1165
|
+
|
|
1166
|
+
fc, _ = await asyncio.gather(self._spawn_map.aio(raw_input_queue), feed_queue())
|
|
1167
|
+
return fc
|
|
1168
|
+
|
|
1169
|
+
|
|
1170
|
+
def _experimental_spawn_map_sync(self, *input_iterators, kwargs={}) -> "modal.functions._FunctionCall":
|
|
1171
|
+
"""Spawn parallel execution over a set of inputs, exiting as soon as the inputs are created (without waiting
|
|
1172
|
+
for the map to complete).
|
|
1173
|
+
|
|
1174
|
+
Takes one iterator argument per argument in the function being mapped over.
|
|
1175
|
+
|
|
1176
|
+
Example:
|
|
1177
|
+
```python
|
|
1178
|
+
@app.function()
|
|
1179
|
+
def my_func(a):
|
|
1180
|
+
return a ** 2
|
|
1181
|
+
|
|
1182
|
+
|
|
1183
|
+
@app.local_entrypoint()
|
|
1184
|
+
def main():
|
|
1185
|
+
fc = my_func.spawn_map([1, 2, 3, 4])
|
|
1186
|
+
```
|
|
1187
|
+
|
|
1188
|
+
Returns a FunctionCall object that can be used to retrieve results
|
|
1189
|
+
"""
|
|
1190
|
+
|
|
1191
|
+
return run_coroutine_in_temporary_event_loop(
|
|
1192
|
+
_experimental_spawn_map_async(self, *input_iterators, kwargs=kwargs),
|
|
1193
|
+
"You can't run Function.spawn_map() from an async function. Use Function.spawn_map.aio() instead.",
|
|
1194
|
+
)
|
|
1195
|
+
|
|
1196
|
+
|
|
1066
1197
|
async def _spawn_map_async(self, *input_iterators, kwargs={}) -> None:
|
|
1067
1198
|
"""This runs in an event loop on the main thread. It consumes inputs from the input iterators and creates async
|
|
1068
1199
|
function calls for each.
|
modal/parallel_map.pyi
CHANGED
|
@@ -123,6 +123,22 @@ class SyncInputPumper(InputPumper):
|
|
|
123
123
|
|
|
124
124
|
def retry_inputs(self): ...
|
|
125
125
|
|
|
126
|
+
class AsyncInputPumper(InputPumper):
|
|
127
|
+
"""Reads inputs from a queue of FunctionPutInputsItems, and sends them to the server."""
|
|
128
|
+
def __init__(
|
|
129
|
+
self,
|
|
130
|
+
client: modal.client._Client,
|
|
131
|
+
*,
|
|
132
|
+
input_queue: asyncio.queues.Queue,
|
|
133
|
+
function: modal._functions._Function,
|
|
134
|
+
function_call_id: str,
|
|
135
|
+
):
|
|
136
|
+
"""Initialize self. See help(type(self)) for accurate signature."""
|
|
137
|
+
...
|
|
138
|
+
|
|
139
|
+
async def _spawn_map_invocation(
|
|
140
|
+
function: modal._functions._Function, raw_input_queue: _SynchronizedQueue, client: modal.client._Client
|
|
141
|
+
) -> str: ...
|
|
126
142
|
def _map_invocation(
|
|
127
143
|
function: modal._functions._Function,
|
|
128
144
|
raw_input_queue: _SynchronizedQueue,
|
|
@@ -242,6 +258,32 @@ def _map_sync(
|
|
|
242
258
|
"""
|
|
243
259
|
...
|
|
244
260
|
|
|
261
|
+
async def _experimental_spawn_map_async(self, *input_iterators, kwargs={}) -> modal._functions._FunctionCall: ...
|
|
262
|
+
async def _spawn_map_helper(
|
|
263
|
+
self: modal.functions.Function, async_input_gen, kwargs={}
|
|
264
|
+
) -> modal._functions._FunctionCall: ...
|
|
265
|
+
def _experimental_spawn_map_sync(self, *input_iterators, kwargs={}) -> modal._functions._FunctionCall:
|
|
266
|
+
"""Spawn parallel execution over a set of inputs, exiting as soon as the inputs are created (without waiting
|
|
267
|
+
for the map to complete).
|
|
268
|
+
|
|
269
|
+
Takes one iterator argument per argument in the function being mapped over.
|
|
270
|
+
|
|
271
|
+
Example:
|
|
272
|
+
```python
|
|
273
|
+
@app.function()
|
|
274
|
+
def my_func(a):
|
|
275
|
+
return a ** 2
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
@app.local_entrypoint()
|
|
279
|
+
def main():
|
|
280
|
+
fc = my_func.spawn_map([1, 2, 3, 4])
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Returns a FunctionCall object that can be used to retrieve results
|
|
284
|
+
"""
|
|
285
|
+
...
|
|
286
|
+
|
|
245
287
|
async def _spawn_map_async(self, *input_iterators, kwargs={}) -> None:
|
|
246
288
|
"""This runs in an event loop on the main thread. It consumes inputs from the input iterators and creates async
|
|
247
289
|
function calls for each.
|
|
@@ -3,7 +3,7 @@ modal/__main__.py,sha256=45H-GtwzaDfN-1nP4_HYvzN3s7AG_HXR4-ynrsjO_OI,2803
|
|
|
3
3
|
modal/_clustered_functions.py,sha256=zmrKbptRbqp4euS3LWncKaLXb8Kjj4YreusOzpEpRMk,2856
|
|
4
4
|
modal/_clustered_functions.pyi,sha256=_wtFjWocGf1WgI-qYBpbJPArNkg2H9JV7BVaGgMesEQ,1103
|
|
5
5
|
modal/_container_entrypoint.py,sha256=1qBMNY_E9ICC_sRCtillMxmKPsmxJl1J0_qOAG8rH-0,28288
|
|
6
|
-
modal/_functions.py,sha256=
|
|
6
|
+
modal/_functions.py,sha256=rOk0CIWmkZzrcbWraJd4G8UC6bSHP0q6HK7doWa4xUY,83394
|
|
7
7
|
modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
|
|
8
8
|
modal/_location.py,sha256=joiX-0ZeutEUDTrrqLF1GHXCdVLF-rHzstocbMcd_-k,366
|
|
9
9
|
modal/_object.py,sha256=nCkQeLibSuvVAEIheGaLnUfN5PIh1CGpJCnzPIXymGY,11563
|
|
@@ -22,7 +22,7 @@ modal/app.py,sha256=kpq4kXp7pch688y6g55QYAC10wqPTU5FXKoWPMirA3E,47899
|
|
|
22
22
|
modal/app.pyi,sha256=-jKXlGDBWRPVsuenBhdMRqawK-L2eiJ7gHbmSblhltg,43525
|
|
23
23
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
|
24
24
|
modal/client.py,sha256=kyAIVB3Ay-XKJizQ_1ufUFB__EagV0MLmHJpyYyJ7J0,18636
|
|
25
|
-
modal/client.pyi,sha256=
|
|
25
|
+
modal/client.pyi,sha256=Szc2H1bedvkx3th2i9cJGdzsc4j-ZtbNPDYLUU3Ld8U,15829
|
|
26
26
|
modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
|
|
27
27
|
modal/cloud_bucket_mount.pyi,sha256=-qSfYAQvIoO_l2wsCCGTG5ZUwQieNKXdAO00yP1-LYU,7394
|
|
28
28
|
modal/cls.py,sha256=7A0xGnugQzm8dOfnKMjLjtqekRlRtQ0jPFRYgq6xdUM,40018
|
|
@@ -39,7 +39,7 @@ modal/file_io.py,sha256=BVqAJ0sgPUfN8QsYztWiGB4j56he60TncM02KsylnCw,21449
|
|
|
39
39
|
modal/file_io.pyi,sha256=cPT_hsplE5iLCXhYOLn1Sp9eDdk7DxdFmicQHanJZyg,15918
|
|
40
40
|
modal/file_pattern_matcher.py,sha256=A_Kdkej6q7YQyhM_2-BvpFmPqJ0oHb54B6yf9VqvPVE,8116
|
|
41
41
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
|
42
|
-
modal/functions.pyi,sha256=
|
|
42
|
+
modal/functions.pyi,sha256=s3PQtacOfSeHukLR7Xz3qGD2sVh-CEgfpjgimv2gCCo,36161
|
|
43
43
|
modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
|
|
44
44
|
modal/image.py,sha256=A83nmo0zfCUwgvJh0LZ7Yc1sYvDnZLl_phbKxN-9HIw,103144
|
|
45
45
|
modal/image.pyi,sha256=oH-GCHVEwD5fOX0K_IaWN5RKZlYwX82z-K4wxx8aN3c,68541
|
|
@@ -52,8 +52,8 @@ modal/network_file_system.pyi,sha256=Td_IobHr84iLo_9LZKQ4tNdUB60yjX8QWBaFiUvhfi8
|
|
|
52
52
|
modal/object.py,sha256=bTeskuY8JFrESjU4_UL_nTwYlBQdOLmVaOX3X6EMxsg,164
|
|
53
53
|
modal/object.pyi,sha256=sgbaq_d3QSmnPKg5jRbMG3dOceKs0l54kHUAhAyZKAE,6796
|
|
54
54
|
modal/output.py,sha256=q4T9uHduunj4NwY-YSwkHGgjZlCXMuJbfQ5UFaAGRAc,1968
|
|
55
|
-
modal/parallel_map.py,sha256=
|
|
56
|
-
modal/parallel_map.pyi,sha256=
|
|
55
|
+
modal/parallel_map.py,sha256=2ujy7eRHK7N2sdyoKjq_ynWUyeoN9M9BD5XpB3KjMLk,66948
|
|
56
|
+
modal/parallel_map.pyi,sha256=MMjGNm-Q4J_rhjZ3441WOvQn4yrs0l0nACiKublZdu8,15373
|
|
57
57
|
modal/partial_function.py,sha256=aIdlGfTjjgqY6Fpr-biCjvRU9W542_S5N2xkNN_rYGM,1127
|
|
58
58
|
modal/partial_function.pyi,sha256=lqqOzZ9-QvHTDWKQ_oAYYOvsXgTOBKhO9u-RI98JbUk,13986
|
|
59
59
|
modal/proxy.py,sha256=NQJJMGo-D2IfmeU0vb10WWaE4oTLcuf9jTeEJvactOg,1446
|
|
@@ -151,7 +151,7 @@ modal/experimental/__init__.py,sha256=nuc7AL4r_Fs08DD5dciWFZhrV1nanwoClOfdTcudU0
|
|
|
151
151
|
modal/experimental/flash.py,sha256=viXQumCIFp5VFsPFURdFTBTjP_QnsAi8nSWXAMmfjeQ,19744
|
|
152
152
|
modal/experimental/flash.pyi,sha256=A8_qJGtGoXEzKDdHbvhmCw7oqfneFEvJQK3ZdTOvUdU,10830
|
|
153
153
|
modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
|
|
154
|
-
modal-1.1.2.
|
|
154
|
+
modal-1.1.2.dev9.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
|
155
155
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
|
156
156
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
|
157
157
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
|
@@ -174,10 +174,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
|
|
|
174
174
|
modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
175
175
|
modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
|
|
176
176
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
177
|
-
modal_version/__init__.py,sha256=
|
|
177
|
+
modal_version/__init__.py,sha256=NLPaypgfaHjUXwTWckWpdqRfUJNlaoybPkbthOrKyPw,120
|
|
178
178
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
|
179
|
-
modal-1.1.2.
|
|
180
|
-
modal-1.1.2.
|
|
181
|
-
modal-1.1.2.
|
|
182
|
-
modal-1.1.2.
|
|
183
|
-
modal-1.1.2.
|
|
179
|
+
modal-1.1.2.dev9.dist-info/METADATA,sha256=X7BS2f_z_Ht1DvjBUjTOoi6xkbFZQogDqG1CdJnhz3o,2459
|
|
180
|
+
modal-1.1.2.dev9.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
|
181
|
+
modal-1.1.2.dev9.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
|
182
|
+
modal-1.1.2.dev9.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
|
183
|
+
modal-1.1.2.dev9.dist-info/RECORD,,
|
modal_version/__init__.py
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|