thds.mops 3.9.20250828214754__py3-none-any.whl → 3.9.20250902220321__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 thds.mops might be problematic. Click here for more details.
- thds/mops/_utils/temp.py +1 -0
- thds/mops/impure/keyfunc.py +1 -0
- thds/mops/k8s/counts.py +1 -2
- thds/mops/k8s/watch.py +1 -2
- thds/mops/pure/core/deferred_work.py +3 -3
- thds/mops/pure/core/entry/route_result.py +2 -4
- thds/mops/pure/core/entry/runner_registry.py +1 -2
- thds/mops/pure/core/lock/types.py +2 -4
- thds/mops/pure/core/memo/function_memospace.py +1 -2
- thds/mops/pure/core/memo/keyfunc.py +2 -2
- thds/mops/pure/core/pipeline_id_mask.py +1 -2
- thds/mops/pure/core/script_support.py +1 -0
- thds/mops/pure/core/serialize_paths.py +2 -4
- thds/mops/pure/core/types.py +2 -4
- thds/mops/pure/runner/get_results.py +3 -0
- thds/mops/pure/runner/local.py +37 -29
- thds/mops/pure/runner/types.py +1 -2
- {thds_mops-3.9.20250828214754.dist-info → thds_mops-3.9.20250902220321.dist-info}/METADATA +1 -1
- {thds_mops-3.9.20250828214754.dist-info → thds_mops-3.9.20250902220321.dist-info}/RECORD +22 -22
- {thds_mops-3.9.20250828214754.dist-info → thds_mops-3.9.20250902220321.dist-info}/WHEEL +0 -0
- {thds_mops-3.9.20250828214754.dist-info → thds_mops-3.9.20250902220321.dist-info}/entry_points.txt +0 -0
- {thds_mops-3.9.20250828214754.dist-info → thds_mops-3.9.20250902220321.dist-info}/top_level.txt +0 -0
thds/mops/_utils/temp.py
CHANGED
thds/mops/impure/keyfunc.py
CHANGED
thds/mops/k8s/counts.py
CHANGED
thds/mops/k8s/watch.py
CHANGED
|
@@ -36,8 +36,7 @@ class V1List(ty.Protocol[T]):
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
class K8sList(ty.Protocol[T]):
|
|
39
|
-
def __call__(self, *args: ty.Any, namespace: str, **kwargs: ty.Any) -> V1List[T]:
|
|
40
|
-
...
|
|
39
|
+
def __call__(self, *args: ty.Any, namespace: str, **kwargs: ty.Any) -> V1List[T]: ...
|
|
41
40
|
|
|
42
41
|
|
|
43
42
|
# If this does not return a K8sList API method, the loop will exit
|
|
@@ -11,9 +11,9 @@ from thds import core
|
|
|
11
11
|
from thds.core import config, refcount
|
|
12
12
|
from thds.core.stack_context import StackContext
|
|
13
13
|
|
|
14
|
-
_DEFERRED_INVOCATION_WORK: StackContext[
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
_DEFERRED_INVOCATION_WORK: StackContext[ty.Optional[ty.Dict[ty.Hashable, ty.Callable[[], ty.Any]]]] = (
|
|
15
|
+
StackContext("DEFERRED_INVOCATION_WORK", None)
|
|
16
|
+
)
|
|
17
17
|
_MAX_DEFERRED_WORK_THREADS = config.item("max_deferred_work_threads", default=50, parse=int)
|
|
18
18
|
_DEFERRED_WORK_THREADPOOL = refcount.Resource[concurrent.futures.ThreadPoolExecutor](
|
|
19
19
|
lambda: concurrent.futures.ThreadPoolExecutor(
|
|
@@ -19,11 +19,9 @@ class ResultChannel(ty.Protocol[T_contra]):
|
|
|
19
19
|
A remote invocation can succeed with a result or fail with an exception.
|
|
20
20
|
"""
|
|
21
21
|
|
|
22
|
-
def return_value(self, __return_value: T_contra) -> None:
|
|
23
|
-
... # pragma: no cover
|
|
22
|
+
def return_value(self, __return_value: T_contra) -> None: ... # pragma: no cover
|
|
24
23
|
|
|
25
|
-
def exception(self, __ex: Exception) -> None:
|
|
26
|
-
... # pragma: no cover
|
|
24
|
+
def exception(self, __ex: Exception) -> None: ... # pragma: no cover
|
|
27
25
|
|
|
28
26
|
|
|
29
27
|
logger = log.getLogger(__name__)
|
|
@@ -29,10 +29,8 @@ class LockAcquired(ty.Protocol):
|
|
|
29
29
|
|
|
30
30
|
writer_id: str
|
|
31
31
|
|
|
32
|
-
def maintain(self) -> None:
|
|
33
|
-
... # pragma: no cover
|
|
32
|
+
def maintain(self) -> None: ... # pragma: no cover
|
|
34
33
|
|
|
35
|
-
def release(self) -> None:
|
|
36
|
-
... # pragma: no cover
|
|
34
|
+
def release(self) -> None: ... # pragma: no cover
|
|
37
35
|
|
|
38
36
|
expire_s: float
|
|
@@ -148,8 +148,7 @@ from .unique_name_for_function import make_unique_name_including_docstring_key,
|
|
|
148
148
|
|
|
149
149
|
|
|
150
150
|
class _PipelineMemospaceHandler(ty.Protocol):
|
|
151
|
-
def __call__(self, __callable_name: str, __runner_prefix: str) -> ty.Optional[str]:
|
|
152
|
-
...
|
|
151
|
+
def __call__(self, __callable_name: str, __runner_prefix: str) -> ty.Optional[str]: ...
|
|
153
152
|
|
|
154
153
|
|
|
155
154
|
_PIPELINE_MEMOSPACE_HANDLERS: ty.List[_PipelineMemospaceHandler] = list()
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"""Definitions of basic keyfuncs."""
|
|
2
|
+
|
|
2
3
|
import inspect
|
|
3
4
|
import typing as ty
|
|
4
5
|
|
|
@@ -24,8 +25,7 @@ class Keyfunc(ty.Protocol):
|
|
|
24
25
|
|
|
25
26
|
def __call__(
|
|
26
27
|
self, c: ty.Callable, __args: Args, __kwargs: Kwargs
|
|
27
|
-
) -> ty.Tuple[ty.Callable, Args, Kwargs]:
|
|
28
|
-
... # pragma: nocover
|
|
28
|
+
) -> ty.Tuple[ty.Callable, Args, Kwargs]: ... # pragma: nocover
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
ArgsOnlyKeyfunc = ty.Callable[..., ty.Tuple[Args, Kwargs]]
|
|
@@ -65,11 +65,9 @@ class _ProcessLockingPathContentAddresser:
|
|
|
65
65
|
|
|
66
66
|
|
|
67
67
|
class PathStream(ty.Protocol):
|
|
68
|
-
def local_to_remote(self, __path: Path, __key: str) -> None:
|
|
69
|
-
... # pragma: no cover
|
|
68
|
+
def local_to_remote(self, __path: Path, __key: str) -> None: ... # pragma: no cover
|
|
70
69
|
|
|
71
|
-
def get_downloader(self, __key: str) -> Downloader:
|
|
72
|
-
... # pragma: no cover
|
|
70
|
+
def get_downloader(self, __key: str) -> Downloader: ... # pragma: no cover
|
|
73
71
|
|
|
74
72
|
|
|
75
73
|
class NotAFileError(ValueError):
|
thds/mops/pure/core/types.py
CHANGED
|
@@ -36,8 +36,7 @@ class Runner(Protocol):
|
|
|
36
36
|
__f: ty.Callable[..., T],
|
|
37
37
|
__args: ty.Sequence,
|
|
38
38
|
__kwargs: ty.Mapping[str, ty.Any],
|
|
39
|
-
) -> T:
|
|
40
|
-
... # pragma: no cover
|
|
39
|
+
) -> T: ... # pragma: no cover
|
|
41
40
|
|
|
42
41
|
|
|
43
42
|
class NoResultAfterInvocationError(Exception): # TODO remove in v4.
|
|
@@ -134,8 +133,7 @@ class BlobStore(Protocol):
|
|
|
134
133
|
followed by the path component split along the same lines that join would concatenate.
|
|
135
134
|
"""
|
|
136
135
|
|
|
137
|
-
def is_blob_not_found(self, __exc: Exception) -> bool:
|
|
138
|
-
...
|
|
136
|
+
def is_blob_not_found(self, __exc: Exception) -> bool: ...
|
|
139
137
|
|
|
140
138
|
|
|
141
139
|
Args = ty.Sequence
|
|
@@ -99,6 +99,9 @@ def lock_maintaining_future(
|
|
|
99
99
|
) -> concurrent.futures.Future[futures.R1]:
|
|
100
100
|
"""Create a Future that will be used to retrieve the result of a shim invocation.
|
|
101
101
|
|
|
102
|
+
Most commonly, this will be partially applied and only lazily invoked
|
|
103
|
+
when the user calls `.result()` or some other method on the Future.
|
|
104
|
+
|
|
102
105
|
This Future will be used to retrieve the result of a shim invocation, and will
|
|
103
106
|
maintain the lock while it is being retrieved.
|
|
104
107
|
"""
|
thds/mops/pure/runner/local.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
"""Joins pickle functionality and Blob Store functionality to run functions remotely.
|
|
2
|
-
"""
|
|
1
|
+
"""Joins pickle functionality and Blob Store functionality to run functions remotely."""
|
|
3
2
|
|
|
4
3
|
import threading
|
|
5
4
|
import time
|
|
@@ -194,34 +193,43 @@ def invoke_via_shim_or_return_memoized( # noqa: C901
|
|
|
194
193
|
# If something about our invocation fails,
|
|
195
194
|
# we fail just as we would have previously, without any attempt to go
|
|
196
195
|
# 'back' to waiting for someone else to compute the result.
|
|
197
|
-
lock.maintain_to_release(lock_owned)
|
|
198
|
-
# we don't actually need the release_lock here, because it will get
|
|
199
|
-
# 'recreated' in the PostShimResultGetter below, which is also where it gets called
|
|
196
|
+
release_lock_in_current_process = lock.maintain_to_release(lock_owned)
|
|
200
197
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
)
|
|
215
|
-
)
|
|
216
|
-
)
|
|
217
|
-
if hasattr(future_or_shim_result, "add_done_callback"):
|
|
218
|
-
# if the shim returns a Future, we wrap it.
|
|
219
|
-
logger.debug("Shim returned a Future; wrapping it for post-shim result retrieval.")
|
|
220
|
-
return futures.make_lazy(lock_maintaining_future)(
|
|
221
|
-
lock_owned, future_result_getter, future_or_shim_result
|
|
198
|
+
try:
|
|
199
|
+
with _BEFORE_INVOCATION_SEMAPHORE:
|
|
200
|
+
log_invocation(f"Invoking {memo_uri}")
|
|
201
|
+
upload_invocation_and_deps()
|
|
202
|
+
|
|
203
|
+
# can't hold the semaphore while we block on the shim, though.
|
|
204
|
+
shim = shim_builder(func, args_, kwargs_)
|
|
205
|
+
future_or_shim_result = shim( # ACTUAL INVOCATION (handoff to remote shim) HAPPENS HERE
|
|
206
|
+
(
|
|
207
|
+
memo_uri,
|
|
208
|
+
*metadata.format_invocation_cli_args(
|
|
209
|
+
metadata.InvocationMetadata.new(pipeline_id, invoked_at, lock_owned.writer_id)
|
|
210
|
+
),
|
|
211
|
+
)
|
|
222
212
|
)
|
|
223
|
-
|
|
224
|
-
future_result_getter
|
|
225
|
-
|
|
213
|
+
|
|
214
|
+
future_result_getter = PostShimResultGetter[T](memo_uri, p_unwrap_value_or_error)
|
|
215
|
+
if hasattr(future_or_shim_result, "add_done_callback"):
|
|
216
|
+
# if the shim returns a Future, we wrap it.
|
|
217
|
+
logger.debug("Shim returned a Future; wrapping it for post-shim result retrieval.")
|
|
218
|
+
return futures.make_lazy(lock_maintaining_future)(
|
|
219
|
+
lock_owned, future_result_getter, future_or_shim_result
|
|
220
|
+
)
|
|
221
|
+
|
|
222
|
+
else: # it's a synchronous shim - just process the result directly.
|
|
223
|
+
future_result_getter.release_lock = release_lock_in_current_process
|
|
224
|
+
return futures.resolved(future_result_getter(future_or_shim_result))
|
|
225
|
+
|
|
226
|
+
except Exception:
|
|
227
|
+
try:
|
|
228
|
+
release_lock_in_current_process()
|
|
229
|
+
except Exception:
|
|
230
|
+
logger.exception(
|
|
231
|
+
f"Failed to release lock {lock_owned.writer_id} after failed invocation."
|
|
232
|
+
)
|
|
233
|
+
raise
|
|
226
234
|
|
|
227
235
|
return create_invocation_and_result_future
|
thds/mops/pure/runner/types.py
CHANGED
|
@@ -24,8 +24,7 @@ S = ty.TypeVar("S", SyncShim, FutureShim, Shim, covariant=True)
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class ShimBuilder(ty.Protocol, ty.Generic[S]):
|
|
27
|
-
def __call__(self, __f: ty.Callable, __args: Args, __kwargs: Kwargs) -> S:
|
|
28
|
-
... # pragma: no cover
|
|
27
|
+
def __call__(self, __f: ty.Callable, __args: Args, __kwargs: Kwargs) -> S: ... # pragma: no cover
|
|
29
28
|
|
|
30
29
|
|
|
31
30
|
SyncShimBuilder = ShimBuilder[SyncShim]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: thds.mops
|
|
3
|
-
Version: 3.9.
|
|
3
|
+
Version: 3.9.20250902220321
|
|
4
4
|
Summary: ML Ops tools for Trilliant Health
|
|
5
5
|
Author-email: Trilliant Health <info@trillianthealth.com>
|
|
6
6
|
Project-URL: Repository, https://github.com/TrilliantHealth/ds-monorepo
|
|
@@ -11,9 +11,9 @@ thds/mops/_utils/locked_cache.py,sha256=ROIkwu-_FcXlNyCreWQeE5cyL9XrNW7drWsolTge
|
|
|
11
11
|
thds/mops/_utils/names.py,sha256=tPPaXCyduUXqmbdvIg3ygevERnKM3YIs868BeaKX5XY,824
|
|
12
12
|
thds/mops/_utils/on_slow.py,sha256=jtNvOiG3ICXCkq_hMCrqhL0gyyFnD9bZYzljDYA_yec,825
|
|
13
13
|
thds/mops/_utils/once.py,sha256=_LHkPbMJO4nqp0RIDj8VgIV3JoZYSQYKGdatdnT-19s,946
|
|
14
|
-
thds/mops/_utils/temp.py,sha256=
|
|
14
|
+
thds/mops/_utils/temp.py,sha256=FkUlcl3abzSoANYiw2ce4alhyufiEsa_2tgdu3pwsdc,949
|
|
15
15
|
thds/mops/impure/__init__.py,sha256=VnrHPVgbOYUjkrVnnVicvNV39G6K6ENcWtCuV-BedW4,83
|
|
16
|
-
thds/mops/impure/keyfunc.py,sha256
|
|
16
|
+
thds/mops/impure/keyfunc.py,sha256=6VRa44qW95mH-cWkwPaU-aarXv6Nz0EwBOn4Aowy73s,525
|
|
17
17
|
thds/mops/impure/runner.py,sha256=UI1NZWMZ_5TQHfFKLnoiSm2zDR3zCunTKFmJoybkyCo,2840
|
|
18
18
|
thds/mops/k8s/__init__.py,sha256=zl4GVcCFRvPscyo6gvv5Lx0OKB7d3QjtVFjYurnxMuE,764
|
|
19
19
|
thds/mops/k8s/_launch.py,sha256=n4a3v6JNjcShFlBgRyL6JdS9My0ApggsjurtZFuKOnk,10893
|
|
@@ -23,7 +23,7 @@ thds/mops/k8s/auth.py,sha256=0zs4TQgkD6VPrhDD43xt7JGwP6uWf3ctySGLcPKN7iw,1691
|
|
|
23
23
|
thds/mops/k8s/batching.py,sha256=VJw6DhdhklOSu-iUW6r_BpAP7Jx62uoKV2Bpy0V9U_Q,8266
|
|
24
24
|
thds/mops/k8s/config.py,sha256=_znocX5BW8kfG_Cbq6f3apx5FqSihD7Tmic-SBkVjMQ,2992
|
|
25
25
|
thds/mops/k8s/container_registry.py,sha256=qOiGCE4t_tLYgJDGrhKV9KNv48lF_AlwCDHyFgucd2s,539
|
|
26
|
-
thds/mops/k8s/counts.py,sha256=
|
|
26
|
+
thds/mops/k8s/counts.py,sha256=D-OVHY_dhsgJ2YHApy2qvrcSKzE5mlweDPredFU6tOU,572
|
|
27
27
|
thds/mops/k8s/job_future.py,sha256=_wsH5Lh9qdcGqLZsvXYz8vAFgpV_nMYZ5d8dIFJA-eQ,3933
|
|
28
28
|
thds/mops/k8s/jobs.py,sha256=KcHxlPRukubRp_ddOm0tAX4COs7Ppv0mjbEdv4SAjmM,3359
|
|
29
29
|
thds/mops/k8s/logging.py,sha256=m_3Tn0XAFhUHdEicqRKnMzdK_hvSTCB7hsP1mIilKC4,10940
|
|
@@ -34,7 +34,7 @@ thds/mops/k8s/too_old_resource_version.py,sha256=S7ltVA-LrxUpQ8Q__AB0nQmezN8Mmnx
|
|
|
34
34
|
thds/mops/k8s/uncertain_future.py,sha256=60v9yVlhnCDN_yUv8l4Z4KafR4TsTGxN7dprkGI8pQQ,7152
|
|
35
35
|
thds/mops/k8s/wait_job.py,sha256=_X5lSn-3CE4V-_ra0kF1WtxkAiOgqSom8mU1-0hhMio,2445
|
|
36
36
|
thds/mops/k8s/warn_image_backoff.py,sha256=ls_zLSnRbJjO4ICjq1Rk21EXh190l2dT6nKg-PT8Das,1934
|
|
37
|
-
thds/mops/k8s/watch.py,sha256=
|
|
37
|
+
thds/mops/k8s/watch.py,sha256=4LBLZ9s9hp4jSOr3OTBDMWWCEDedgxsUoYt89zCLLsw,14020
|
|
38
38
|
thds/mops/k8s/tools/krsync.py,sha256=us7pXX0-bRMwD2oAno7Z6BJcPs6FgaUabHW0STyQJYg,1773
|
|
39
39
|
thds/mops/k8s/tools/krsync.sh,sha256=fWgwkdzWnJeTbzEA_uBiIIi-bNU4nXAYj3dNovyRluU,747
|
|
40
40
|
thds/mops/pure/__init__.py,sha256=3xLimQ2JWdeq1YgPs7bPwlwOspzPRwaR2w2KX7vfJU0,1624
|
|
@@ -48,36 +48,36 @@ thds/mops/pure/adls/blob_store.py,sha256=ZWr7CKKcI-jz1sWZq4Jwq6LYkhFNxp-EFnNh83E
|
|
|
48
48
|
thds/mops/pure/adls/output_fqn.py,sha256=qnwdubjVwKShzZ5RruD0_85x86DtPwZNSgwADrdhrTs,748
|
|
49
49
|
thds/mops/pure/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
50
|
thds/mops/pure/core/content_addressed.py,sha256=RaCPvtM7bf0NnY5lNR5jPcNn2Moh-bmLtC4zOvdWjCU,1202
|
|
51
|
-
thds/mops/pure/core/deferred_work.py,sha256=
|
|
51
|
+
thds/mops/pure/core/deferred_work.py,sha256=eizGEtruepmd92SZLAIjJLAoab8QyeqfgezVdSJ5UEY,3743
|
|
52
52
|
thds/mops/pure/core/file_blob_store.py,sha256=N4m4LLrBZaqTJFR4D_eYl03a-n6yQBRsv0ID1bOS9TA,4298
|
|
53
53
|
thds/mops/pure/core/metadata.py,sha256=xAL2iz0pXrcKapmYnNrqSZ8nH2GVakA167NSpAfwiCI,8276
|
|
54
54
|
thds/mops/pure/core/output_naming.py,sha256=ntufOVNJiVPiUM-Azl9mFpDFhIxiB-V2je9dv9AUQhg,2283
|
|
55
55
|
thds/mops/pure/core/partial.py,sha256=aeNQFNHj9epU6lvk6NNTV6hXkNqNHN_czBydt7nkHmg,463
|
|
56
56
|
thds/mops/pure/core/pipeline_id.py,sha256=LHGoIg0I3IM9_ZDyWjqOZp48PbfF_olKSzot22RMFI4,2543
|
|
57
|
-
thds/mops/pure/core/pipeline_id_mask.py,sha256=
|
|
58
|
-
thds/mops/pure/core/script_support.py,sha256=
|
|
57
|
+
thds/mops/pure/core/pipeline_id_mask.py,sha256=AVAy06TdNAmivxGec1gahBYvkJCn7yn-gvxijmz6ABE,2790
|
|
58
|
+
thds/mops/pure/core/script_support.py,sha256=4VCBL5AfGSHcZWpOxMw6nnAbQyk1B-979G_OjvUg9B0,953
|
|
59
59
|
thds/mops/pure/core/serialize_big_objs.py,sha256=YcOS1ccs82ZWO7nTbeumErMzYVe4hgXCTsfvMggYmd8,2332
|
|
60
|
-
thds/mops/pure/core/serialize_paths.py,sha256=
|
|
60
|
+
thds/mops/pure/core/serialize_paths.py,sha256=XrkaAwwtILWSTa0QlngCrm6534hp4fCZogGeHp6Y8xw,5771
|
|
61
61
|
thds/mops/pure/core/source.py,sha256=R36ajrCU1JdWF-8iD8YqAiP-q39ypZqf2DeBsqC9lYo,15105
|
|
62
|
-
thds/mops/pure/core/types.py,sha256=
|
|
62
|
+
thds/mops/pure/core/types.py,sha256=_3gDwztDKV4Xeyw2jvyMRJAjmR6gRsmfYmsRCcZMUwI,5436
|
|
63
63
|
thds/mops/pure/core/uris.py,sha256=qO9_f-ro7kax6haNOPTPe81-_aUSRFELeeZH4PMTTU4,2694
|
|
64
64
|
thds/mops/pure/core/use_runner.py,sha256=m1Mu1XDr3xRf_u_VSiHfTG4TH6fnSg0IqwmtbLKG_oc,2103
|
|
65
65
|
thds/mops/pure/core/entry/__init__.py,sha256=kiDcsj16CwjRSexOZW-4h4b4tDCYIS_eLS5wgu2yIlk,151
|
|
66
66
|
thds/mops/pure/core/entry/main.py,sha256=b1F5lFDK_hnpvW3bqzt5MWDcpKvCXZpWdEHI8zroC4k,2061
|
|
67
|
-
thds/mops/pure/core/entry/route_result.py,sha256=
|
|
68
|
-
thds/mops/pure/core/entry/runner_registry.py,sha256=
|
|
67
|
+
thds/mops/pure/core/entry/route_result.py,sha256=uUNyYDfoMWICelcgBQLsTighL3J1kJQAdh41_ubiBRo,2132
|
|
68
|
+
thds/mops/pure/core/entry/runner_registry.py,sha256=CD8EzIU72y66Hz3q4BPB67sogwx6SKwnY65MbZJAtH4,593
|
|
69
69
|
thds/mops/pure/core/lock/__init__.py,sha256=4x9NdborLPGktDNs8LDapW17LeuAHLCbO9v-8IWdT2I,268
|
|
70
70
|
thds/mops/pure/core/lock/_acquire.py,sha256=lVxHzDA30VB95Cfb4Fl2m0eatdLXCDv6rOCnERiyMNw,9468
|
|
71
71
|
thds/mops/pure/core/lock/_funcs.py,sha256=j4g8yVWnrAMPDKqLlq8nTnccM1KHSJ3g71L1iWNbV2Q,969
|
|
72
72
|
thds/mops/pure/core/lock/cli.py,sha256=uidtmgHB2y5LDkj7SQTncy_cNe1EfIseuiJPV9kcxBU,2488
|
|
73
73
|
thds/mops/pure/core/lock/maintain.py,sha256=UFhXdr9Q6FdPgq3PtELiAKdlRVl1sqF8IzAf3Oun4g4,9718
|
|
74
74
|
thds/mops/pure/core/lock/read.py,sha256=Ct5eYMlkTlEaV5Yhw6HWsDD7VrgdhDZoI6AVIQ0ts-4,1255
|
|
75
|
-
thds/mops/pure/core/lock/types.py,sha256=
|
|
75
|
+
thds/mops/pure/core/lock/types.py,sha256=Qex-l32a0M30oyHyYEgYG8a4rhy0Ac3n5436QK0Bw-U,990
|
|
76
76
|
thds/mops/pure/core/lock/write.py,sha256=wJByqa2edVhVcyrCaigWChVW3dYsoPBVt0HXyul-WpQ,6782
|
|
77
77
|
thds/mops/pure/core/memo/__init__.py,sha256=k64vX3XazDkP0m8MZgwqt0BV4vXg-ojK1EDhymucnuo,286
|
|
78
78
|
thds/mops/pure/core/memo/calls.py,sha256=kvm6kn-CbOLxZuo86BvzEJw69p7VlEJ8_mCiWd6uz-g,3631
|
|
79
|
-
thds/mops/pure/core/memo/function_memospace.py,sha256=
|
|
80
|
-
thds/mops/pure/core/memo/keyfunc.py,sha256=
|
|
79
|
+
thds/mops/pure/core/memo/function_memospace.py,sha256=Ixg4_QMx8z9T8HuJkas5fr-RqfwXY7rd8E1nQ5zOC_Y,11636
|
|
80
|
+
thds/mops/pure/core/memo/keyfunc.py,sha256=WR67YlvzCOccs8t2e9SmZu24Bugrwim4p8XJ_IMY0Is,2046
|
|
81
81
|
thds/mops/pure/core/memo/overwrite_params.py,sha256=ltuFxhr8gNo2iBoBz2eFPayjSV23gMdBuoLZD42lIAg,2425
|
|
82
82
|
thds/mops/pure/core/memo/results.py,sha256=hEgwlNXRIzihjUMgrlKeHAXDDBmp7y6vQyemzc47hgY,3202
|
|
83
83
|
thds/mops/pure/core/memo/unique_name_for_function.py,sha256=NGuBmK9c-UdgQP27I-WLMRlCMWJmPSdMymRm14mT1K0,2331
|
|
@@ -92,12 +92,12 @@ thds/mops/pure/pickling/pickles.py,sha256=CSlnjLssE0Ad8YzqyaKqWCSNyW5LiMFKiXO6hW
|
|
|
92
92
|
thds/mops/pure/pickling/remote.py,sha256=7JXZRGnLI5y5dqElIDrhIlaRv6Q_zQ_78aqNhO7O4KY,8478
|
|
93
93
|
thds/mops/pure/pickling/sha256_b64.py,sha256=HL0cPixHPZYuZDVDBscxsnI-3a2amWEfw-LseOX-PyY,2916
|
|
94
94
|
thds/mops/pure/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
95
|
-
thds/mops/pure/runner/get_results.py,sha256=
|
|
96
|
-
thds/mops/pure/runner/local.py,sha256=
|
|
95
|
+
thds/mops/pure/runner/get_results.py,sha256=4pUlUJiwxKaFYFlQpgJ2sS1jeYlf-HlTLfRzrhvQdW8,4200
|
|
96
|
+
thds/mops/pure/runner/local.py,sha256=CFlhqHdd2JpmpdVrKHuugJ7tfeKhwTIKCizuqMMxpQI,11278
|
|
97
97
|
thds/mops/pure/runner/shim_builder.py,sha256=obs2-NipAB8w0NR8o90UQX_bmHYS69c-raL2JPw8yM4,821
|
|
98
98
|
thds/mops/pure/runner/simple_shims.py,sha256=r-kLmpSCwzjfzF-Ku43YKvrHMLpZR5jDmweo4Vk07O4,1069
|
|
99
99
|
thds/mops/pure/runner/strings.py,sha256=PYAYMxZ2ehgahKIBXJilENNE6OrdNkueNBel8LPsoh8,26
|
|
100
|
-
thds/mops/pure/runner/types.py,sha256=
|
|
100
|
+
thds/mops/pure/runner/types.py,sha256=M9afUkSeZ66AF_6_rDalqzGUEB-SFKE6DIGr22rNOeg,1558
|
|
101
101
|
thds/mops/pure/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
102
102
|
thds/mops/pure/tools/_pickle_dis.py,sha256=EyLgWP_dRzz1HIabGRTEGZFT_LZV5gmn4asJyFUAt4Y,6312
|
|
103
103
|
thds/mops/pure/tools/history.py,sha256=dB7C2jq-0P3Fnv5Q3nzEkLehXdX0kaZZrGl1U1ns9DU,1048
|
|
@@ -109,8 +109,8 @@ thds/mops/pure/tools/summarize/cli.py,sha256=7kDtn24ok8oBO3jFjlMmOK3jnZYpMoE_5Y8
|
|
|
109
109
|
thds/mops/pure/tools/summarize/run_summary.py,sha256=w45qiQr7elrHDiK9Hgs85gtU3gwLuXa447ih1Y23BBY,5776
|
|
110
110
|
thds/mops/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
111
111
|
thds/mops/testing/deferred_imports.py,sha256=f0ezCgQAtzTqW1yAOb0OWgsB9ZrlztLB894LtpWDaVw,3780
|
|
112
|
-
thds_mops-3.9.
|
|
113
|
-
thds_mops-3.9.
|
|
114
|
-
thds_mops-3.9.
|
|
115
|
-
thds_mops-3.9.
|
|
116
|
-
thds_mops-3.9.
|
|
112
|
+
thds_mops-3.9.20250902220321.dist-info/METADATA,sha256=9ikxjI9losOmD74Vmv62sZfISIloyiRycqkfMWBjEQw,2225
|
|
113
|
+
thds_mops-3.9.20250902220321.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
114
|
+
thds_mops-3.9.20250902220321.dist-info/entry_points.txt,sha256=qKvCAaB80syXfxVR3xx6x9J0YJdaQWkIbVSw-NwFgMw,322
|
|
115
|
+
thds_mops-3.9.20250902220321.dist-info/top_level.txt,sha256=LTZaE5SkWJwv9bwOlMbIhiS-JWQEEIcjVYnJrt-CriY,5
|
|
116
|
+
thds_mops-3.9.20250902220321.dist-info/RECORD,,
|
|
File without changes
|
{thds_mops-3.9.20250828214754.dist-info → thds_mops-3.9.20250902220321.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{thds_mops-3.9.20250828214754.dist-info → thds_mops-3.9.20250902220321.dist-info}/top_level.txt
RENAMED
|
File without changes
|