experimaestro 1.7.0rc0__py3-none-any.whl → 1.7.0rc2__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 experimaestro might be problematic. Click here for more details.
- experimaestro/experiments/cli.py +7 -3
- experimaestro/launcherfinder/registry.py +12 -1
- experimaestro/notifications.proto +17 -0
- experimaestro/notifications.py +3 -1
- experimaestro/notifications_pb2.py +39 -0
- experimaestro/streaming_state.py +124 -0
- experimaestro/tests/state_streamer.proto +9 -0
- experimaestro/tests/state_streamer_pb2.py +38 -0
- experimaestro/tests/test_state_streamer.py +18 -0
- {experimaestro-1.7.0rc0.dist-info → experimaestro-1.7.0rc2.dist-info}/METADATA +2 -1
- {experimaestro-1.7.0rc0.dist-info → experimaestro-1.7.0rc2.dist-info}/RECORD +14 -8
- {experimaestro-1.7.0rc0.dist-info → experimaestro-1.7.0rc2.dist-info}/LICENSE +0 -0
- {experimaestro-1.7.0rc0.dist-info → experimaestro-1.7.0rc2.dist-info}/WHEEL +0 -0
- {experimaestro-1.7.0rc0.dist-info → experimaestro-1.7.0rc2.dist-info}/entry_points.txt +0 -0
experimaestro/experiments/cli.py
CHANGED
|
@@ -194,7 +194,11 @@ def experiments_cli( # noqa: C901
|
|
|
194
194
|
xp_file = Path(xp_file)
|
|
195
195
|
if not python_path:
|
|
196
196
|
python_path.append(xp_file.parent)
|
|
197
|
-
logging.info(
|
|
197
|
+
logging.info(
|
|
198
|
+
"Using python path: %s", ", ".join(str(s) for s in python_path)
|
|
199
|
+
)
|
|
200
|
+
else:
|
|
201
|
+
xp_file = Path(xp_file)
|
|
198
202
|
|
|
199
203
|
assert (
|
|
200
204
|
module_name or xp_file
|
|
@@ -269,11 +273,11 @@ def experiments_cli( # noqa: C901
|
|
|
269
273
|
|
|
270
274
|
# Define the workspace
|
|
271
275
|
ws_env = find_workspace(workdir=workdir, workspace=workspace)
|
|
272
|
-
|
|
276
|
+
|
|
273
277
|
workdir = ws_env.path
|
|
274
278
|
|
|
275
279
|
logging.info("Using working directory %s", str(workdir.resolve()))
|
|
276
|
-
|
|
280
|
+
|
|
277
281
|
# --- Runs the experiment
|
|
278
282
|
with experiment(
|
|
279
283
|
ws_env, configuration.id, host=host, port=port, run_mode=run_mode
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# Configuration registers
|
|
2
2
|
|
|
3
|
+
from contextlib import contextmanager
|
|
3
4
|
from typing import ClassVar, Dict, Optional, Set, Type, Union
|
|
4
5
|
|
|
5
6
|
from pathlib import Path
|
|
@@ -36,6 +37,16 @@ def load_yaml(schema, path: Path):
|
|
|
36
37
|
)
|
|
37
38
|
|
|
38
39
|
|
|
40
|
+
@contextmanager
|
|
41
|
+
def ensure_enter(fp):
|
|
42
|
+
"""Behaves as a resource, whether it is one or not"""
|
|
43
|
+
if hasattr(fp, "__enter__"):
|
|
44
|
+
with fp as _fp:
|
|
45
|
+
yield _fp
|
|
46
|
+
else:
|
|
47
|
+
yield fp
|
|
48
|
+
|
|
49
|
+
|
|
39
50
|
class LauncherRegistry:
|
|
40
51
|
INSTANCES: ClassVar[Dict[Path, "LauncherRegistry"]] = {}
|
|
41
52
|
CURRENT_CONFIG_DIR: ClassVar[Optional[Path]] = None
|
|
@@ -78,7 +89,7 @@ class LauncherRegistry:
|
|
|
78
89
|
|
|
79
90
|
from importlib import util
|
|
80
91
|
|
|
81
|
-
with launchers_py.__fspath__() as fp:
|
|
92
|
+
with ensure_enter(launchers_py.__fspath__()) as fp:
|
|
82
93
|
spec = util.spec_from_file_location("xpm_launchers_conf", fp)
|
|
83
94
|
module = util.module_from_spec(spec)
|
|
84
95
|
spec.loader.exec_module(module)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
import "google/protobuf/any.proto";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
message Envelope {
|
|
6
|
+
google.protobuf.Any payload = 1;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
message LevelInformation {
|
|
10
|
+
int32 level = 1;
|
|
11
|
+
|
|
12
|
+
optional string desc = 2; // Optional in proto3 is handled by default unless you want to use 'optional'
|
|
13
|
+
float progress = 3;
|
|
14
|
+
|
|
15
|
+
float previous_progress = 4;
|
|
16
|
+
string previous_desc = 5;
|
|
17
|
+
}
|
experimaestro/notifications.py
CHANGED
|
@@ -12,15 +12,16 @@ from tqdm.auto import tqdm as std_tqdm
|
|
|
12
12
|
|
|
13
13
|
from .utils import logger
|
|
14
14
|
from experimaestro.taskglobals import Env as TaskEnv
|
|
15
|
+
from experimaestro.notifications_pb2 import LevelInformation
|
|
15
16
|
|
|
16
17
|
# --- Progress and other notifications
|
|
17
18
|
|
|
18
19
|
T = TypeVar("T")
|
|
19
20
|
|
|
20
|
-
|
|
21
21
|
@dataclass
|
|
22
22
|
class LevelInformation:
|
|
23
23
|
level: int
|
|
24
|
+
|
|
24
25
|
desc: Optional[str]
|
|
25
26
|
progress: float
|
|
26
27
|
|
|
@@ -213,6 +214,7 @@ class Reporter(threading.Thread):
|
|
|
213
214
|
|
|
214
215
|
self.cv.notify_all()
|
|
215
216
|
|
|
217
|
+
#: The reporter instance
|
|
216
218
|
INSTANCE: ClassVar[Optional["Reporter"]] = None
|
|
217
219
|
|
|
218
220
|
@staticmethod
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
|
4
|
+
# source: src/experimaestro/notifications.proto
|
|
5
|
+
# Protobuf Python Version: 5.29.3
|
|
6
|
+
"""Generated protocol buffer code."""
|
|
7
|
+
from google.protobuf import descriptor as _descriptor
|
|
8
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
|
10
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
11
|
+
from google.protobuf.internal import builder as _builder
|
|
12
|
+
_runtime_version.ValidateProtobufRuntimeVersion(
|
|
13
|
+
_runtime_version.Domain.PUBLIC,
|
|
14
|
+
5,
|
|
15
|
+
29,
|
|
16
|
+
3,
|
|
17
|
+
'',
|
|
18
|
+
'src/experimaestro/notifications.proto'
|
|
19
|
+
)
|
|
20
|
+
# @@protoc_insertion_point(imports)
|
|
21
|
+
|
|
22
|
+
_sym_db = _symbol_database.Default()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%src/experimaestro/notifications.proto\x1a\x19google/protobuf/any.proto\"1\n\x08\x45nvelope\x12%\n\x07payload\x18\x01 \x01(\x0b\x32\x14.google.protobuf.Any\"\x81\x01\n\x10LevelInformation\x12\r\n\x05level\x18\x01 \x01(\x05\x12\x11\n\x04\x64\x65sc\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08progress\x18\x03 \x01(\x02\x12\x19\n\x11previous_progress\x18\x04 \x01(\x02\x12\x15\n\rprevious_desc\x18\x05 \x01(\tB\x07\n\x05_descb\x06proto3')
|
|
29
|
+
|
|
30
|
+
_globals = globals()
|
|
31
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
32
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'src.experimaestro.notifications_pb2', _globals)
|
|
33
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
|
34
|
+
DESCRIPTOR._loaded_options = None
|
|
35
|
+
_globals['_ENVELOPE']._serialized_start=68
|
|
36
|
+
_globals['_ENVELOPE']._serialized_end=117
|
|
37
|
+
_globals['_LEVELINFORMATION']._serialized_start=120
|
|
38
|
+
_globals['_LEVELINFORMATION']._serialized_end=249
|
|
39
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"""Handles streaming states
|
|
2
|
+
|
|
3
|
+
Allows to track a global state via a file
|
|
4
|
+
|
|
5
|
+
- partial states can be output
|
|
6
|
+
- every K bytes, a global state is output
|
|
7
|
+
|
|
8
|
+
The reader can then recover quickly by seeking the last global state output.
|
|
9
|
+
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import struct
|
|
13
|
+
from io import BufferedWriter, BufferedReader, SEEK_END
|
|
14
|
+
from typing import Type, Generator, Union
|
|
15
|
+
|
|
16
|
+
from google.protobuf.message import Message
|
|
17
|
+
|
|
18
|
+
# Constants
|
|
19
|
+
PARTIAL_UPDATE = 1
|
|
20
|
+
GLOBAL_STATE = 2
|
|
21
|
+
HEADER_FORMAT = ">BI" # 1-byte type tag, 4-byte message size
|
|
22
|
+
HEADER_SIZE = struct.calcsize(HEADER_FORMAT)
|
|
23
|
+
MAGIC_NUMBER = b"\xab\xcd\xef\x00"
|
|
24
|
+
MAGIC_SIZE = len(MAGIC_NUMBER)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class StreamingStateWriter:
|
|
28
|
+
def __init__(
|
|
29
|
+
self,
|
|
30
|
+
file: BufferedWriter,
|
|
31
|
+
partial_cls: Type[Message],
|
|
32
|
+
snapshot_cls: Type[Message],
|
|
33
|
+
chunk_size: int = 8192,
|
|
34
|
+
):
|
|
35
|
+
self.file = file
|
|
36
|
+
self.partial_cls = partial_cls
|
|
37
|
+
self.snapshot_cls = snapshot_cls
|
|
38
|
+
self.chunk_size = chunk_size
|
|
39
|
+
self.bytes_since_last_snapshot = 0
|
|
40
|
+
|
|
41
|
+
def write_partial(self, message: Message):
|
|
42
|
+
assert isinstance(message, self.partial_cls)
|
|
43
|
+
self._write_message(PARTIAL_UPDATE, message)
|
|
44
|
+
|
|
45
|
+
def write_snapshot_if_needed(self, message: Message):
|
|
46
|
+
assert isinstance(message, self.snapshot_cls)
|
|
47
|
+
if self.bytes_since_last_snapshot >= self.chunk_size:
|
|
48
|
+
self._write_message(GLOBAL_STATE, message, with_magic=True)
|
|
49
|
+
self.bytes_since_last_snapshot = 0
|
|
50
|
+
|
|
51
|
+
def _write_message(self, type_tag: int, message: Message, with_magic: bool = False):
|
|
52
|
+
data = message.SerializeToString()
|
|
53
|
+
header = struct.pack(HEADER_FORMAT, type_tag, len(data))
|
|
54
|
+
if with_magic:
|
|
55
|
+
self.file.write(MAGIC_NUMBER)
|
|
56
|
+
self.bytes_since_last_snapshot += MAGIC_SIZE
|
|
57
|
+
self.file.write(header + data)
|
|
58
|
+
self.file.flush()
|
|
59
|
+
self.bytes_since_last_snapshot += HEADER_SIZE + len(data)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class StreamingStateReader:
|
|
63
|
+
def __init__(
|
|
64
|
+
self,
|
|
65
|
+
file: BufferedReader,
|
|
66
|
+
partial_cls: Type[Message],
|
|
67
|
+
snapshot_cls: Type[Message],
|
|
68
|
+
):
|
|
69
|
+
self.file = file
|
|
70
|
+
self.partial_cls = partial_cls
|
|
71
|
+
self.snapshot_cls = snapshot_cls
|
|
72
|
+
|
|
73
|
+
def __iter__(self) -> Generator[Union[Message, Message], None, None]:
|
|
74
|
+
while True:
|
|
75
|
+
peek = self.file.peek(MAGIC_SIZE)[:MAGIC_SIZE]
|
|
76
|
+
if peek == MAGIC_NUMBER:
|
|
77
|
+
self.file.read(MAGIC_SIZE)
|
|
78
|
+
|
|
79
|
+
header = self.file.read(HEADER_SIZE)
|
|
80
|
+
if len(header) < HEADER_SIZE:
|
|
81
|
+
break
|
|
82
|
+
|
|
83
|
+
type_tag, length = struct.unpack(HEADER_FORMAT, header)
|
|
84
|
+
payload = self.file.read(length)
|
|
85
|
+
|
|
86
|
+
if type_tag == PARTIAL_UPDATE:
|
|
87
|
+
msg = self.partial_cls()
|
|
88
|
+
elif type_tag == GLOBAL_STATE:
|
|
89
|
+
msg = self.snapshot_cls()
|
|
90
|
+
else:
|
|
91
|
+
raise ValueError(f"Unknown type tag: {type_tag}")
|
|
92
|
+
|
|
93
|
+
msg.ParseFromString(payload)
|
|
94
|
+
yield msg
|
|
95
|
+
|
|
96
|
+
def seek_last_snapshot(self) -> Union[Message, None]:
|
|
97
|
+
self.file.seek(0, SEEK_END)
|
|
98
|
+
file_size = self.file.tell()
|
|
99
|
+
|
|
100
|
+
window = 4096
|
|
101
|
+
pos = file_size
|
|
102
|
+
|
|
103
|
+
while pos > 0:
|
|
104
|
+
read_size = min(window, pos)
|
|
105
|
+
pos -= read_size
|
|
106
|
+
self.file.seek(pos)
|
|
107
|
+
data = self.file.read(read_size)
|
|
108
|
+
|
|
109
|
+
idx = data.rfind(MAGIC_NUMBER)
|
|
110
|
+
if idx != -1:
|
|
111
|
+
snapshot_pos = pos + idx + MAGIC_SIZE
|
|
112
|
+
self.file.seek(snapshot_pos)
|
|
113
|
+
header = self.file.read(HEADER_SIZE)
|
|
114
|
+
if len(header) < HEADER_SIZE:
|
|
115
|
+
break
|
|
116
|
+
type_tag, length = struct.unpack(HEADER_FORMAT, header)
|
|
117
|
+
if type_tag != GLOBAL_STATE:
|
|
118
|
+
continue
|
|
119
|
+
payload = self.file.read(length)
|
|
120
|
+
msg = self.snapshot_cls()
|
|
121
|
+
msg.ParseFromString(payload)
|
|
122
|
+
return msg
|
|
123
|
+
|
|
124
|
+
return None
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
|
4
|
+
# source: src/experimaestro/tests/state_streamer.proto
|
|
5
|
+
# Protobuf Python Version: 5.29.3
|
|
6
|
+
"""Generated protocol buffer code."""
|
|
7
|
+
from google.protobuf import descriptor as _descriptor
|
|
8
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
|
10
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
11
|
+
from google.protobuf.internal import builder as _builder
|
|
12
|
+
_runtime_version.ValidateProtobufRuntimeVersion(
|
|
13
|
+
_runtime_version.Domain.PUBLIC,
|
|
14
|
+
5,
|
|
15
|
+
29,
|
|
16
|
+
3,
|
|
17
|
+
'',
|
|
18
|
+
'src/experimaestro/tests/state_streamer.proto'
|
|
19
|
+
)
|
|
20
|
+
# @@protoc_insertion_point(imports)
|
|
21
|
+
|
|
22
|
+
_sym_db = _symbol_database.Default()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n,src/experimaestro/tests/state_streamer.proto\"&\n\rPartialUpdate\x12\x15\n\rupdated_field\x18\x01 \x01(\x05\"\x1c\n\x0bGlobalState\x12\r\n\x05\x66ield\x18\x01 \x01(\x05\x62\x06proto3')
|
|
28
|
+
|
|
29
|
+
_globals = globals()
|
|
30
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
31
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'src.experimaestro.tests.state_streamer_pb2', _globals)
|
|
32
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
|
33
|
+
DESCRIPTOR._loaded_options = None
|
|
34
|
+
_globals['_PARTIALUPDATE']._serialized_start=48
|
|
35
|
+
_globals['_PARTIALUPDATE']._serialized_end=86
|
|
36
|
+
_globals['_GLOBALSTATE']._serialized_start=88
|
|
37
|
+
_globals['_GLOBALSTATE']._serialized_end=116
|
|
38
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from .state_streamer_pb2 import PartialUpdate, GlobalState
|
|
2
|
+
|
|
3
|
+
# Writing
|
|
4
|
+
with open("log.bin", "wb") as f:
|
|
5
|
+
writer = StreamingStateWriter(f, PartialUpdate, GlobalState)
|
|
6
|
+
for i in range(1000):
|
|
7
|
+
writer.write_partial(PartialUpdate(updated_field=i))
|
|
8
|
+
if i % 100 == 0:
|
|
9
|
+
writer.write_snapshot_if_needed(GlobalState(field=i))
|
|
10
|
+
|
|
11
|
+
# Reading
|
|
12
|
+
with open("log.bin", "rb") as f:
|
|
13
|
+
reader = StreamingStateReader(f, PartialUpdate, GlobalState)
|
|
14
|
+
last_snapshot = reader.seek_last_snapshot()
|
|
15
|
+
print("Last Snapshot:", last_snapshot)
|
|
16
|
+
|
|
17
|
+
for msg in reader:
|
|
18
|
+
print(type(msg).__name__, msg)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: experimaestro
|
|
3
|
-
Version: 1.7.
|
|
3
|
+
Version: 1.7.0rc2
|
|
4
4
|
Summary: "Experimaestro is a computer science experiment manager"
|
|
5
5
|
License: GPL-3
|
|
6
6
|
Keywords: experiment manager
|
|
@@ -34,6 +34,7 @@ Requires-Dist: huggingface-hub (>0.17)
|
|
|
34
34
|
Requires-Dist: humanfriendly (>=10,<11)
|
|
35
35
|
Requires-Dist: marshmallow (>=3.20,<4.0)
|
|
36
36
|
Requires-Dist: omegaconf (>=2.3,<3.0)
|
|
37
|
+
Requires-Dist: protobuf (>5)
|
|
37
38
|
Requires-Dist: psutil (>=7)
|
|
38
39
|
Requires-Dist: pyparsing (>=3.1,<4.0)
|
|
39
40
|
Requires-Dist: pytools (>=2023.1.1,<2024.0.0)
|
|
@@ -22,7 +22,7 @@ experimaestro/core/types.py,sha256=gSLv9F1HszVxI8jla6e-aVVS7q3KBwSzG1MImUHdGMg,2
|
|
|
22
22
|
experimaestro/core/utils.py,sha256=JfC3qGUS9b6FUHc2VxIYUI9ysNpXSQ1LjOBkjfZ8n7o,495
|
|
23
23
|
experimaestro/exceptions.py,sha256=cUy83WHM3GeynxmMk6QRr5xsnpqUAdAoc-m3KQVrE2o,44
|
|
24
24
|
experimaestro/experiments/__init__.py,sha256=GcpDUIbCvhnv6rxFdAp4wTffCVNTv-InY6fbQAlTy-o,159
|
|
25
|
-
experimaestro/experiments/cli.py,sha256=
|
|
25
|
+
experimaestro/experiments/cli.py,sha256=fvHz2aih7Aw1DK3GoVkeaVtG3r1tU6qbnwIv-uD0eVI,8697
|
|
26
26
|
experimaestro/experiments/configuration.py,sha256=cFDiUHnUGblJsctAUxAqx0jlM7_Ja_527lzk-4G-44k,1368
|
|
27
27
|
experimaestro/generators.py,sha256=DQsEgdMwRUud9suWr-QGxI3vCO5sywP6MVGZWRNQXkk,1372
|
|
28
28
|
experimaestro/huggingface.py,sha256=gnVlr6SZnbutYz4PLH0Q77n1TRF-uk-dR-3UFzFqAY0,2956
|
|
@@ -30,7 +30,7 @@ experimaestro/ipc.py,sha256=Xn3tYME83jLEB0nFak3DwEIhpL5IRZpCl3jirBF_jl4,1570
|
|
|
30
30
|
experimaestro/launcherfinder/__init__.py,sha256=qRUDyv3B9UsAM8Q31mRrZrTZox0AptwdmOY4f2K-TUo,279
|
|
31
31
|
experimaestro/launcherfinder/base.py,sha256=q47SsF_cXdo5O6ZhFKn5385WVFcx8Wd-BcEpd6tRpbs,515
|
|
32
32
|
experimaestro/launcherfinder/parser.py,sha256=pYbfEJw7osnqZWm7fkVhQawhpNU8dLU_6vEjtXdc8E8,2279
|
|
33
|
-
experimaestro/launcherfinder/registry.py,sha256=
|
|
33
|
+
experimaestro/launcherfinder/registry.py,sha256=5KKElGd9aS1gegx-A6JVXL-LACk02wFVQxeUIEbZfUc,6105
|
|
34
34
|
experimaestro/launcherfinder/specs.py,sha256=G8za6mEmkVxuZY_ab3OhWJIpONpcBMO_iXeB30sUbhI,6448
|
|
35
35
|
experimaestro/launchers/__init__.py,sha256=lXn544sgJExr6uirILWzAXu_IfmfyqFZOt4OzRnjHXg,2525
|
|
36
36
|
experimaestro/launchers/direct.py,sha256=JZh6WOPnO6ED_xlOs8pL4MRFmnRhmXzpVxTl-ByaD2A,258
|
|
@@ -44,7 +44,9 @@ experimaestro/mkdocs/base.py,sha256=SwLh9s7BZfrTAZdBaealSqVeLAroDSwLLMOHmLCxMPQ,
|
|
|
44
44
|
experimaestro/mkdocs/metaloader.py,sha256=qCqnTWhlgxql-oe46E8AbvYdoM311-lQh-msmPnbllQ,1481
|
|
45
45
|
experimaestro/mkdocs/style.css,sha256=42kJ6Ozq_n4Iw5UfJ4-nO1u-HN3ELvV7Vhvj1Xkn7rQ,66
|
|
46
46
|
experimaestro/mypy.py,sha256=M39VFuDrab-ymlCDIF5jys9oKpTwnuBPzb1T8Un5J3s,285
|
|
47
|
-
experimaestro/notifications.
|
|
47
|
+
experimaestro/notifications.proto,sha256=0bDb3DYeuP_69rUsBJxMA_2m-P9HznQampw7YGovLUU,363
|
|
48
|
+
experimaestro/notifications.py,sha256=j5BbUkQ9JkRvAJCH60MtrOPbaZ1iWTafc-6bFKYrod8,9368
|
|
49
|
+
experimaestro/notifications_pb2.py,sha256=nkUsLXGOXtKIxdASePIFPgLEH6DuGXUKVX1TpxjMS4M,1847
|
|
48
50
|
experimaestro/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
51
|
experimaestro/rpyc.py,sha256=ZRKol-3tVoeoUITLNFenLF4dhWBLW_FvSV_GvsypmeI,3605
|
|
50
52
|
experimaestro/run.py,sha256=58ZlIZ2dQ7a0un2iGiyHJhK14zc18BnpEFDis7OyTPA,5222
|
|
@@ -89,6 +91,7 @@ experimaestro/server/data/manifest.json,sha256=EpzHQZzrGh9c1Kf63nrqvI33H1cm0nLYf
|
|
|
89
91
|
experimaestro/settings.py,sha256=U6gTVBL5Z4Rk0_7BAVoavVJKN2sQNRpspE-601Elfys,3170
|
|
90
92
|
experimaestro/sphinx/__init__.py,sha256=heovvtwbYToZM-b6HNi4pJdBoo_97usdEawhMGSK3bk,9560
|
|
91
93
|
experimaestro/sphinx/static/experimaestro.css,sha256=0rEgt1LoDdD-a_R5rVfWZ19zD1gR-1L7q3f4UibIB58,294
|
|
94
|
+
experimaestro/streaming_state.py,sha256=NEneDTRWRYfvhqButJCg8rzmVb5coy-sTazljub7umQ,3927
|
|
92
95
|
experimaestro/taskglobals.py,sha256=Lp0bqobVLndR7fOtF9qPI7utTKQXXwTdVN6l5Av9Dc4,660
|
|
93
96
|
experimaestro/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
94
97
|
experimaestro/tests/conftest.py,sha256=CtC6TvUS9sbgSc3pZYyTyEvfilnNGPpOUJvi-jn6twI,695
|
|
@@ -109,6 +112,8 @@ experimaestro/tests/restart.py,sha256=wivq06i3SoxL_cUKti9J_o3MykynmLic6czuCZSHc_
|
|
|
109
112
|
experimaestro/tests/restart_main.py,sha256=iAFzw0H1q9Aq7t6TrSAj236QBnYU52qx0VF-2dz6tx4,295
|
|
110
113
|
experimaestro/tests/scripts/notifyandwait.py,sha256=3BLXLI5XgP3BnKf6sQ56oKoMVqR80VMHmploJ3JO6Ko,407
|
|
111
114
|
experimaestro/tests/scripts/waitforfile.py,sha256=EDT-TuFi2fU_qt51K5EmAxjw_OnJKkBW7UCfhrtDbVw,120
|
|
115
|
+
experimaestro/tests/state_streamer.proto,sha256=KopoTOt0VpRKbZ_ed9boQyaWB7oNOlDDKhqX-cj9pZs,121
|
|
116
|
+
experimaestro/tests/state_streamer_pb2.py,sha256=5mbmirhDMAOU09Kx9Wo_YrKF1PK6Ebr2TNBELQ2dfMQ,1541
|
|
112
117
|
experimaestro/tests/task_tokens.py,sha256=vgqUa-S_YC2Id9pGOSv40qFTwq1WGZkFhr556Z5o678,477
|
|
113
118
|
experimaestro/tests/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
114
119
|
experimaestro/tests/tasks/all.py,sha256=OMkHsWZkErCmTajiNO7hNhvnk9eKzJC-VatWgabWlsI,1955
|
|
@@ -126,6 +131,7 @@ experimaestro/tests/test_progress.py,sha256=wtIGQzlV3ldd_wMng11LinVESchW-1J954mC
|
|
|
126
131
|
experimaestro/tests/test_serializers.py,sha256=xSCezAM9yH_Ix1wr7j0au9SyBv9DtZ7b0zs2-Ynt-VM,2338
|
|
127
132
|
experimaestro/tests/test_snippets.py,sha256=rojnyDjtmAMnSuDUj6Bv9XEgdP8oQf2nVc132JF8vsM,3081
|
|
128
133
|
experimaestro/tests/test_ssh.py,sha256=KS1NWltiXrJBSStY9d4mwrexeqgNGWmhxuAU_WLQDAU,1449
|
|
134
|
+
experimaestro/tests/test_state_streamer.py,sha256=T1_Mz-dkHEcpPjCGcUsat6s4cOizxHt1so4bw7VkypM,609
|
|
129
135
|
experimaestro/tests/test_tags.py,sha256=v_8_7LuEHfY_gfa0JRCUkmgJh8h6RMya_nd5NcPAJPw,2852
|
|
130
136
|
experimaestro/tests/test_tasks.py,sha256=bUSB_UT1MTN2P_RPHd4AT5NK-DFsgCVeFKSiXu3bEz8,9429
|
|
131
137
|
experimaestro/tests/test_tokens.py,sha256=U3nKBL1KftWhmk3dQZZLQd-MLJL_SscMjI3zMieMHfc,7823
|
|
@@ -146,8 +152,8 @@ experimaestro/utils/jupyter.py,sha256=JcEo2yQK7x3Cr1tNl5FqGMZOICxCv9DwMvL5xsWdQP
|
|
|
146
152
|
experimaestro/utils/resources.py,sha256=j-nvsTFwmgENMoVGOD2Ap-UD3WU85WkI0IgeSszMCX4,1328
|
|
147
153
|
experimaestro/utils/settings.py,sha256=jpFMqF0DLL4_P1xGal0zVR5cOrdD8O0Y2IOYvnRgN3k,793
|
|
148
154
|
experimaestro/xpmutils.py,sha256=S21eMbDYsHfvmZ1HmKpq5Pz5O-1HnCLYxKbyTBbASyQ,638
|
|
149
|
-
experimaestro-1.7.
|
|
150
|
-
experimaestro-1.7.
|
|
151
|
-
experimaestro-1.7.
|
|
152
|
-
experimaestro-1.7.
|
|
153
|
-
experimaestro-1.7.
|
|
155
|
+
experimaestro-1.7.0rc2.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
156
|
+
experimaestro-1.7.0rc2.dist-info/METADATA,sha256=61zmKYFsyGyj3HXvJATsPb3CFO3dn2ZXlR66pegSjic,6191
|
|
157
|
+
experimaestro-1.7.0rc2.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
|
|
158
|
+
experimaestro-1.7.0rc2.dist-info/entry_points.txt,sha256=TppTNiz5qm5xm1fhAcdLKdCLMrlL-eQggtCrCI00D9c,446
|
|
159
|
+
experimaestro-1.7.0rc2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|