labcode 0.10.4__tar.gz → 0.10.5__tar.gz
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.
- {labcode-0.10.4 → labcode-0.10.5}/CHANGELOG.md +28 -0
- {labcode-0.10.4 → labcode-0.10.5}/PKG-INFO +3 -3
- {labcode-0.10.4 → labcode-0.10.5}/labcode.egg-info/PKG-INFO +3 -3
- {labcode-0.10.4 → labcode-0.10.5}/labcode.egg-info/requires.txt +2 -2
- labcode-0.10.5/labcode.egg-info/scm_version.json +8 -0
- {labcode-0.10.4 → labcode-0.10.5}/pyproject.toml +9 -3
- labcode-0.10.4/labcode.egg-info/scm_version.json +0 -8
- {labcode-0.10.4 → labcode-0.10.5}/.github/workflows/ci.yml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/.github/workflows/publish.yml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/.gitignore +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/LICENSE +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/MANIFEST.in +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/README.md +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/docs/SPECIFICATIONS.md +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/README.md +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/lads_plate_cycle.env.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/lads_seal.env.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/outputs/plate_line.boundary.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/outputs/plate_line.observation.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/outputs/plate_line.plan.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/outputs/plate_line.svg +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/outputs/shared_bench.boundary.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/outputs/shared_bench.observation.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/outputs/shared_bench.plan.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/outputs/shared_bench.svg +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/outputs/sila2_plate_cycle.boundary.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/outputs/sila2_plate_cycle.observation.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/outputs/sila2_plate_cycle.plan.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/outputs/sila2_plate_cycle.svg +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/plate_line.boundary.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/plate_line.env.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/plate_line.workflow.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/preflight_sila2_env.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/render_plate_line.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/render_shared_bench.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/render_sila2_plate_cycle.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/run_all_lads_examples.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/run_all_sila2_examples.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/run_sila2_plate_cycle.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/run_sila2_plate_cycle_no_atc.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/run_sila2_seal.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/shared_bench.afternoon.boundary.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/shared_bench.env.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/shared_bench.morning.boundary.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/shared_bench.run.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/shared_bench.workflow.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/sila2_plate_cycle.boundary.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/sila2_plate_cycle.workflow.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/sila2_plate_cycle.wrapped.env.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/sila2_plate_cycle_no_atc.boundary.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/sila2_plate_cycle_no_atc.workflow.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/sila2_plate_cycle_no_atc.wrapped.env.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/sila2_seal.boundary.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/sila2_seal.env.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/sila2_seal.workflow.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/examples/sila2_seal.wrapped.env.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/__init__.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/__main__.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/_child.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/backend.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/cli.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/connections.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/dialect.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/extension.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/idgen.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/lads.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/lads_commands.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/lads_unit.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/objectid.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/otel.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/otel_sila2.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/probe.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/py.typed +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/record.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/run_cli.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/runner.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/sila2.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/sila2_commands.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode/sila2_instrument.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode.egg-info/SOURCES.txt +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode.egg-info/dependency_links.txt +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode.egg-info/entry_points.txt +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode.egg-info/scm_file_list.json +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/labcode.egg-info/top_level.txt +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/setup.cfg +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/fixtures/device_script.env.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/fixtures/device_script.workflow.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/fixtures/dispense_read.workflow.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/fixtures/joint.run.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/fixtures/replenishment.env.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/fixtures/reroute_device.env.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/fixtures/reroute_transporter.env.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/fixtures/transport.env.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/fixtures/transport.workflow.yaml +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_backend.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_cli.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_dialect.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_joint.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_lads.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_lads_unit.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_objectid.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_otel.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_otel_child.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_otel_grpc.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_otel_sila2.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_probe.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_record.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_recording.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_run_cli.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_sila2.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_sila2_commands.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_sila2_instrument.py +0 -0
- {labcode-0.10.4 → labcode-0.10.5}/tests/test_structured_labcode.py +0 -0
|
@@ -6,6 +6,34 @@ specification the section numbers refer to is [`docs/SPECIFICATIONS.md`](docs/SP
|
|
|
6
6
|
Releases before 0.9.0 are described in the messages of their `Release vX.Y.Z` commits
|
|
7
7
|
(`git log --grep '^Release v'`).
|
|
8
8
|
|
|
9
|
+
## 0.10.5 — 2026-10-13
|
|
10
|
+
|
|
11
|
+
No code changes; the siblings move.
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **A `do_while` runs.** A loop whose condition is read during the run -- a script's
|
|
16
|
+
verdict on each measurement -- is planned to end after the invocation it is in, and
|
|
17
|
+
grows by one invocation each time the reading says go on, up to `max_iterations`
|
|
18
|
+
(ofplang-schedule 0.17, ofplang-run 0.17). Stopping at the limit is reported
|
|
19
|
+
(`loop_exhausted`), never failed.
|
|
20
|
+
- **A branch or loop decided during the run keeps its places.** While it is open, the
|
|
21
|
+
plan keeps every spot any of its outcomes may need (a `reservation`), so a second job
|
|
22
|
+
sharing the only sink or reader waits outside instead of the two locking when the
|
|
23
|
+
outcome is not the one assumed. Whatever such a region hands on leaves through a
|
|
24
|
+
`gate` in the plan.
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- A run no longer skips planning a branch's other arm on a replan: what the branch keeps
|
|
29
|
+
for itself comes from planning both arms, so a branch whose other arm could never be
|
|
30
|
+
planned is refused (`arm_unplannable`) on any plan, not only the first.
|
|
31
|
+
|
|
32
|
+
### Known limitations
|
|
33
|
+
|
|
34
|
+
- **`lc export` cannot read such a plan yet.** The export viewer does not know the
|
|
35
|
+
`decision`, `gate` and `reservation` entries; plans without them are unaffected.
|
|
36
|
+
|
|
9
37
|
## 0.10.4 — 2026-10-10
|
|
10
38
|
|
|
11
39
|
No code changes; the siblings move.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: labcode
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.5
|
|
4
4
|
Summary: labcode -- a dialect wrapper over the Object-Flow Programming Language toolchain
|
|
5
5
|
Author-email: Kazunari Kaizu <kwaizu@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -21,8 +21,8 @@ Requires-Python: >=3.10
|
|
|
21
21
|
Description-Content-Type: text/markdown
|
|
22
22
|
License-File: LICENSE
|
|
23
23
|
Requires-Dist: ofplang-validate<0.5,>=0.4.1
|
|
24
|
-
Requires-Dist: ofplang-schedule<0.
|
|
25
|
-
Requires-Dist: ofplang-run<0.
|
|
24
|
+
Requires-Dist: ofplang-schedule<0.18,>=0.17
|
|
25
|
+
Requires-Dist: ofplang-run<0.18,>=0.17
|
|
26
26
|
Provides-Extra: test
|
|
27
27
|
Requires-Dist: pytest>=7.0; extra == "test"
|
|
28
28
|
Requires-Dist: opentelemetry-sdk>=1.20; extra == "test"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: labcode
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.5
|
|
4
4
|
Summary: labcode -- a dialect wrapper over the Object-Flow Programming Language toolchain
|
|
5
5
|
Author-email: Kazunari Kaizu <kwaizu@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -21,8 +21,8 @@ Requires-Python: >=3.10
|
|
|
21
21
|
Description-Content-Type: text/markdown
|
|
22
22
|
License-File: LICENSE
|
|
23
23
|
Requires-Dist: ofplang-validate<0.5,>=0.4.1
|
|
24
|
-
Requires-Dist: ofplang-schedule<0.
|
|
25
|
-
Requires-Dist: ofplang-run<0.
|
|
24
|
+
Requires-Dist: ofplang-schedule<0.18,>=0.17
|
|
25
|
+
Requires-Dist: ofplang-run<0.18,>=0.17
|
|
26
26
|
Provides-Extra: test
|
|
27
27
|
Requires-Dist: pytest>=7.0; extra == "test"
|
|
28
28
|
Requires-Dist: opentelemetry-sdk>=1.20; extra == "test"
|
|
@@ -62,7 +62,13 @@ classifiers = [
|
|
|
62
62
|
# every real-lab example already happens on it, and run's own floor requires it anyway
|
|
63
63
|
# (an older scheduler reports a running refill free before it is).
|
|
64
64
|
#
|
|
65
|
-
# `ofplang-schedule>=0.
|
|
65
|
+
# `ofplang-schedule>=0.17` and `ofplang-run>=0.17` move together: a `do_while` whose
|
|
66
|
+
# condition a script reads during the run runs from these, and a branch or loop decided
|
|
67
|
+
# only during the run keeps the spots it may yet need while it is open, so jobs sharing a
|
|
68
|
+
# machine no longer lock on an assumed outcome (ofplang-schedule design.md D65, D66);
|
|
69
|
+
# run 0.17 needs schedule 0.17.
|
|
70
|
+
#
|
|
71
|
+
# `ofplang-schedule>=0.16` and `ofplang-run>=0.16` moved together: a `branch` whose
|
|
66
72
|
# condition is produced during the run -- a script's verdict on a measurement -- runs
|
|
67
73
|
# from these (the scheduler plans it on an assumed arm and holds it back until the
|
|
68
74
|
# condition exists, the run states the arm once the value is recorded and replans), and
|
|
@@ -114,8 +120,8 @@ dependencies = [
|
|
|
114
120
|
# bounds cannot protect what is already on PyPI without one, which is why they go
|
|
115
121
|
# in now rather than at the first breakage.
|
|
116
122
|
"ofplang-validate>=0.4.1,<0.5",
|
|
117
|
-
"ofplang-schedule>=0.
|
|
118
|
-
"ofplang-run>=0.
|
|
123
|
+
"ofplang-schedule>=0.17,<0.18",
|
|
124
|
+
"ofplang-run>=0.17,<0.18",
|
|
119
125
|
]
|
|
120
126
|
|
|
121
127
|
[project.urls]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|