labcode 0.10.3__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.
Files changed (113) hide show
  1. {labcode-0.10.3 → labcode-0.10.5}/CHANGELOG.md +53 -0
  2. {labcode-0.10.3 → labcode-0.10.5}/PKG-INFO +3 -3
  3. {labcode-0.10.3 → labcode-0.10.5}/labcode.egg-info/PKG-INFO +3 -3
  4. {labcode-0.10.3 → labcode-0.10.5}/labcode.egg-info/requires.txt +2 -2
  5. labcode-0.10.5/labcode.egg-info/scm_version.json +8 -0
  6. {labcode-0.10.3 → labcode-0.10.5}/pyproject.toml +15 -3
  7. labcode-0.10.3/labcode.egg-info/scm_version.json +0 -8
  8. {labcode-0.10.3 → labcode-0.10.5}/.github/workflows/ci.yml +0 -0
  9. {labcode-0.10.3 → labcode-0.10.5}/.github/workflows/publish.yml +0 -0
  10. {labcode-0.10.3 → labcode-0.10.5}/.gitignore +0 -0
  11. {labcode-0.10.3 → labcode-0.10.5}/LICENSE +0 -0
  12. {labcode-0.10.3 → labcode-0.10.5}/MANIFEST.in +0 -0
  13. {labcode-0.10.3 → labcode-0.10.5}/README.md +0 -0
  14. {labcode-0.10.3 → labcode-0.10.5}/docs/SPECIFICATIONS.md +0 -0
  15. {labcode-0.10.3 → labcode-0.10.5}/examples/README.md +0 -0
  16. {labcode-0.10.3 → labcode-0.10.5}/examples/lads_plate_cycle.env.yaml +0 -0
  17. {labcode-0.10.3 → labcode-0.10.5}/examples/lads_seal.env.yaml +0 -0
  18. {labcode-0.10.3 → labcode-0.10.5}/examples/outputs/plate_line.boundary.yaml +0 -0
  19. {labcode-0.10.3 → labcode-0.10.5}/examples/outputs/plate_line.observation.yaml +0 -0
  20. {labcode-0.10.3 → labcode-0.10.5}/examples/outputs/plate_line.plan.yaml +0 -0
  21. {labcode-0.10.3 → labcode-0.10.5}/examples/outputs/plate_line.svg +0 -0
  22. {labcode-0.10.3 → labcode-0.10.5}/examples/outputs/shared_bench.boundary.yaml +0 -0
  23. {labcode-0.10.3 → labcode-0.10.5}/examples/outputs/shared_bench.observation.yaml +0 -0
  24. {labcode-0.10.3 → labcode-0.10.5}/examples/outputs/shared_bench.plan.yaml +0 -0
  25. {labcode-0.10.3 → labcode-0.10.5}/examples/outputs/shared_bench.svg +0 -0
  26. {labcode-0.10.3 → labcode-0.10.5}/examples/outputs/sila2_plate_cycle.boundary.yaml +0 -0
  27. {labcode-0.10.3 → labcode-0.10.5}/examples/outputs/sila2_plate_cycle.observation.yaml +0 -0
  28. {labcode-0.10.3 → labcode-0.10.5}/examples/outputs/sila2_plate_cycle.plan.yaml +0 -0
  29. {labcode-0.10.3 → labcode-0.10.5}/examples/outputs/sila2_plate_cycle.svg +0 -0
  30. {labcode-0.10.3 → labcode-0.10.5}/examples/plate_line.boundary.yaml +0 -0
  31. {labcode-0.10.3 → labcode-0.10.5}/examples/plate_line.env.yaml +0 -0
  32. {labcode-0.10.3 → labcode-0.10.5}/examples/plate_line.workflow.yaml +0 -0
  33. {labcode-0.10.3 → labcode-0.10.5}/examples/preflight_sila2_env.py +0 -0
  34. {labcode-0.10.3 → labcode-0.10.5}/examples/render_plate_line.py +0 -0
  35. {labcode-0.10.3 → labcode-0.10.5}/examples/render_shared_bench.py +0 -0
  36. {labcode-0.10.3 → labcode-0.10.5}/examples/render_sila2_plate_cycle.py +0 -0
  37. {labcode-0.10.3 → labcode-0.10.5}/examples/run_all_lads_examples.py +0 -0
  38. {labcode-0.10.3 → labcode-0.10.5}/examples/run_all_sila2_examples.py +0 -0
  39. {labcode-0.10.3 → labcode-0.10.5}/examples/run_sila2_plate_cycle.py +0 -0
  40. {labcode-0.10.3 → labcode-0.10.5}/examples/run_sila2_plate_cycle_no_atc.py +0 -0
  41. {labcode-0.10.3 → labcode-0.10.5}/examples/run_sila2_seal.py +0 -0
  42. {labcode-0.10.3 → labcode-0.10.5}/examples/shared_bench.afternoon.boundary.yaml +0 -0
  43. {labcode-0.10.3 → labcode-0.10.5}/examples/shared_bench.env.yaml +0 -0
  44. {labcode-0.10.3 → labcode-0.10.5}/examples/shared_bench.morning.boundary.yaml +0 -0
  45. {labcode-0.10.3 → labcode-0.10.5}/examples/shared_bench.run.yaml +0 -0
  46. {labcode-0.10.3 → labcode-0.10.5}/examples/shared_bench.workflow.yaml +0 -0
  47. {labcode-0.10.3 → labcode-0.10.5}/examples/sila2_plate_cycle.boundary.yaml +0 -0
  48. {labcode-0.10.3 → labcode-0.10.5}/examples/sila2_plate_cycle.workflow.yaml +0 -0
  49. {labcode-0.10.3 → labcode-0.10.5}/examples/sila2_plate_cycle.wrapped.env.yaml +0 -0
  50. {labcode-0.10.3 → labcode-0.10.5}/examples/sila2_plate_cycle_no_atc.boundary.yaml +0 -0
  51. {labcode-0.10.3 → labcode-0.10.5}/examples/sila2_plate_cycle_no_atc.workflow.yaml +0 -0
  52. {labcode-0.10.3 → labcode-0.10.5}/examples/sila2_plate_cycle_no_atc.wrapped.env.yaml +0 -0
  53. {labcode-0.10.3 → labcode-0.10.5}/examples/sila2_seal.boundary.yaml +0 -0
  54. {labcode-0.10.3 → labcode-0.10.5}/examples/sila2_seal.env.yaml +0 -0
  55. {labcode-0.10.3 → labcode-0.10.5}/examples/sila2_seal.workflow.yaml +0 -0
  56. {labcode-0.10.3 → labcode-0.10.5}/examples/sila2_seal.wrapped.env.yaml +0 -0
  57. {labcode-0.10.3 → labcode-0.10.5}/labcode/__init__.py +0 -0
  58. {labcode-0.10.3 → labcode-0.10.5}/labcode/__main__.py +0 -0
  59. {labcode-0.10.3 → labcode-0.10.5}/labcode/_child.py +0 -0
  60. {labcode-0.10.3 → labcode-0.10.5}/labcode/backend.py +0 -0
  61. {labcode-0.10.3 → labcode-0.10.5}/labcode/cli.py +0 -0
  62. {labcode-0.10.3 → labcode-0.10.5}/labcode/connections.py +0 -0
  63. {labcode-0.10.3 → labcode-0.10.5}/labcode/dialect.py +0 -0
  64. {labcode-0.10.3 → labcode-0.10.5}/labcode/extension.py +0 -0
  65. {labcode-0.10.3 → labcode-0.10.5}/labcode/idgen.py +0 -0
  66. {labcode-0.10.3 → labcode-0.10.5}/labcode/lads.py +0 -0
  67. {labcode-0.10.3 → labcode-0.10.5}/labcode/lads_commands.py +0 -0
  68. {labcode-0.10.3 → labcode-0.10.5}/labcode/lads_unit.py +0 -0
  69. {labcode-0.10.3 → labcode-0.10.5}/labcode/objectid.py +0 -0
  70. {labcode-0.10.3 → labcode-0.10.5}/labcode/otel.py +0 -0
  71. {labcode-0.10.3 → labcode-0.10.5}/labcode/otel_sila2.py +0 -0
  72. {labcode-0.10.3 → labcode-0.10.5}/labcode/probe.py +0 -0
  73. {labcode-0.10.3 → labcode-0.10.5}/labcode/py.typed +0 -0
  74. {labcode-0.10.3 → labcode-0.10.5}/labcode/record.py +0 -0
  75. {labcode-0.10.3 → labcode-0.10.5}/labcode/run_cli.py +0 -0
  76. {labcode-0.10.3 → labcode-0.10.5}/labcode/runner.py +0 -0
  77. {labcode-0.10.3 → labcode-0.10.5}/labcode/sila2.py +0 -0
  78. {labcode-0.10.3 → labcode-0.10.5}/labcode/sila2_commands.py +0 -0
  79. {labcode-0.10.3 → labcode-0.10.5}/labcode/sila2_instrument.py +0 -0
  80. {labcode-0.10.3 → labcode-0.10.5}/labcode.egg-info/SOURCES.txt +0 -0
  81. {labcode-0.10.3 → labcode-0.10.5}/labcode.egg-info/dependency_links.txt +0 -0
  82. {labcode-0.10.3 → labcode-0.10.5}/labcode.egg-info/entry_points.txt +0 -0
  83. {labcode-0.10.3 → labcode-0.10.5}/labcode.egg-info/scm_file_list.json +0 -0
  84. {labcode-0.10.3 → labcode-0.10.5}/labcode.egg-info/top_level.txt +0 -0
  85. {labcode-0.10.3 → labcode-0.10.5}/setup.cfg +0 -0
  86. {labcode-0.10.3 → labcode-0.10.5}/tests/fixtures/device_script.env.yaml +0 -0
  87. {labcode-0.10.3 → labcode-0.10.5}/tests/fixtures/device_script.workflow.yaml +0 -0
  88. {labcode-0.10.3 → labcode-0.10.5}/tests/fixtures/dispense_read.workflow.yaml +0 -0
  89. {labcode-0.10.3 → labcode-0.10.5}/tests/fixtures/joint.run.yaml +0 -0
  90. {labcode-0.10.3 → labcode-0.10.5}/tests/fixtures/replenishment.env.yaml +0 -0
  91. {labcode-0.10.3 → labcode-0.10.5}/tests/fixtures/reroute_device.env.yaml +0 -0
  92. {labcode-0.10.3 → labcode-0.10.5}/tests/fixtures/reroute_transporter.env.yaml +0 -0
  93. {labcode-0.10.3 → labcode-0.10.5}/tests/fixtures/transport.env.yaml +0 -0
  94. {labcode-0.10.3 → labcode-0.10.5}/tests/fixtures/transport.workflow.yaml +0 -0
  95. {labcode-0.10.3 → labcode-0.10.5}/tests/test_backend.py +0 -0
  96. {labcode-0.10.3 → labcode-0.10.5}/tests/test_cli.py +0 -0
  97. {labcode-0.10.3 → labcode-0.10.5}/tests/test_dialect.py +0 -0
  98. {labcode-0.10.3 → labcode-0.10.5}/tests/test_joint.py +0 -0
  99. {labcode-0.10.3 → labcode-0.10.5}/tests/test_lads.py +0 -0
  100. {labcode-0.10.3 → labcode-0.10.5}/tests/test_lads_unit.py +0 -0
  101. {labcode-0.10.3 → labcode-0.10.5}/tests/test_objectid.py +0 -0
  102. {labcode-0.10.3 → labcode-0.10.5}/tests/test_otel.py +0 -0
  103. {labcode-0.10.3 → labcode-0.10.5}/tests/test_otel_child.py +0 -0
  104. {labcode-0.10.3 → labcode-0.10.5}/tests/test_otel_grpc.py +0 -0
  105. {labcode-0.10.3 → labcode-0.10.5}/tests/test_otel_sila2.py +0 -0
  106. {labcode-0.10.3 → labcode-0.10.5}/tests/test_probe.py +0 -0
  107. {labcode-0.10.3 → labcode-0.10.5}/tests/test_record.py +0 -0
  108. {labcode-0.10.3 → labcode-0.10.5}/tests/test_recording.py +0 -0
  109. {labcode-0.10.3 → labcode-0.10.5}/tests/test_run_cli.py +0 -0
  110. {labcode-0.10.3 → labcode-0.10.5}/tests/test_sila2.py +0 -0
  111. {labcode-0.10.3 → labcode-0.10.5}/tests/test_sila2_commands.py +0 -0
  112. {labcode-0.10.3 → labcode-0.10.5}/tests/test_sila2_instrument.py +0 -0
  113. {labcode-0.10.3 → labcode-0.10.5}/tests/test_structured_labcode.py +0 -0
@@ -6,6 +6,59 @@ 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
+
37
+ ## 0.10.4 — 2026-10-10
38
+
39
+ No code changes; the siblings move.
40
+
41
+ ### Added
42
+
43
+ - **A `branch` runs on a condition produced during the run.** A branch whose
44
+ condition is made by an activity -- a script's verdict on a measured value, an
45
+ instrument's flag -- runs the arm the value picks. The scheduler plans the branch on
46
+ its `then` arm until the value exists and lets nothing of it start before then,
47
+ marking the moment in the plan with a `decision` (ofplang-schedule SPEC §6.14); the
48
+ run states the arm in the document's `expansion.arms` as soon as the value is
49
+ recorded and replans (ofplang-schedule 0.16, ofplang-run 0.16). The arm not planned
50
+ is checked without a solve, and a workflow whose other arm could never be planned is
51
+ refused before anything runs (`arm_unplannable`). In 0.10.3 such a branch was refused
52
+ (`branch_arm_unknown`).
53
+
54
+ ### Known limitations
55
+
56
+ - **`lc export` cannot read a plan that waits on such a branch yet.** The export viewer
57
+ does not know the `decision` entry, so a plan with one is refused; plans without one
58
+ are unaffected. Planning and running are not.
59
+
60
+ Requires ofplang-schedule 0.16 and ofplang-run 0.16 (ofplang-validate 0.4.1 as before).
61
+
9
62
  ## 0.10.3 — 2026-10-08
10
63
 
11
64
  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
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.16,>=0.15
25
- Requires-Dist: ofplang-run<0.16,>=0.15
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
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.16,>=0.15
25
- Requires-Dist: ofplang-run<0.16,>=0.15
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
  ofplang-validate<0.5,>=0.4.1
2
- ofplang-schedule<0.16,>=0.15
3
- ofplang-run<0.16,>=0.15
2
+ ofplang-schedule<0.18,>=0.17
3
+ ofplang-run<0.18,>=0.17
4
4
 
5
5
  [dev]
6
6
  pytest>=7.0
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.10.5",
3
+ "distance": 0,
4
+ "node": "gf8fb3c4c5fc16e0b358765e7e5f13917a81fac7e",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-10-13"
8
+ }
@@ -62,7 +62,19 @@ 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.15` and `ofplang-run>=0.15` move together: a `branch` whose arm
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
72
+ # condition is produced during the run -- a script's verdict on a measurement -- runs
73
+ # from these (the scheduler plans it on an assumed arm and holds it back until the
74
+ # condition exists, the run states the arm once the value is recorded and replans), and
75
+ # run 0.16 needs schedule 0.16.
76
+ #
77
+ # `ofplang-schedule>=0.15` and `ofplang-run>=0.15` moved together: a `branch` whose arm
66
78
  # the boundary decides runs from these (the run states each arm as the document's
67
79
  # `expansion.arms`, the scheduler expands by it), and run 0.15 needs schedule 0.15.
68
80
  #
@@ -108,8 +120,8 @@ dependencies = [
108
120
  # bounds cannot protect what is already on PyPI without one, which is why they go
109
121
  # in now rather than at the first breakage.
110
122
  "ofplang-validate>=0.4.1,<0.5",
111
- "ofplang-schedule>=0.15,<0.16",
112
- "ofplang-run>=0.15,<0.16",
123
+ "ofplang-schedule>=0.17,<0.18",
124
+ "ofplang-run>=0.17,<0.18",
113
125
  ]
114
126
 
115
127
  [project.urls]
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "0.10.3",
3
- "distance": 0,
4
- "node": "g748b5b84ca5df86201d3cf46406dd544cb84a4ab",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-10-08"
8
- }
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