labcode 0.10.0__tar.gz → 0.10.2__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.0 → labcode-0.10.2}/CHANGELOG.md +42 -0
  2. {labcode-0.10.0 → labcode-0.10.2}/PKG-INFO +4 -4
  3. {labcode-0.10.0 → labcode-0.10.2}/labcode.egg-info/PKG-INFO +4 -4
  4. {labcode-0.10.0 → labcode-0.10.2}/labcode.egg-info/requires.txt +3 -3
  5. labcode-0.10.2/labcode.egg-info/scm_version.json +8 -0
  6. {labcode-0.10.0 → labcode-0.10.2}/pyproject.toml +21 -6
  7. labcode-0.10.0/labcode.egg-info/scm_version.json +0 -8
  8. {labcode-0.10.0 → labcode-0.10.2}/.github/workflows/ci.yml +0 -0
  9. {labcode-0.10.0 → labcode-0.10.2}/.github/workflows/publish.yml +0 -0
  10. {labcode-0.10.0 → labcode-0.10.2}/.gitignore +0 -0
  11. {labcode-0.10.0 → labcode-0.10.2}/LICENSE +0 -0
  12. {labcode-0.10.0 → labcode-0.10.2}/MANIFEST.in +0 -0
  13. {labcode-0.10.0 → labcode-0.10.2}/README.md +0 -0
  14. {labcode-0.10.0 → labcode-0.10.2}/docs/SPECIFICATIONS.md +0 -0
  15. {labcode-0.10.0 → labcode-0.10.2}/examples/README.md +0 -0
  16. {labcode-0.10.0 → labcode-0.10.2}/examples/lads_plate_cycle.env.yaml +0 -0
  17. {labcode-0.10.0 → labcode-0.10.2}/examples/lads_seal.env.yaml +0 -0
  18. {labcode-0.10.0 → labcode-0.10.2}/examples/outputs/plate_line.boundary.yaml +0 -0
  19. {labcode-0.10.0 → labcode-0.10.2}/examples/outputs/plate_line.observation.yaml +0 -0
  20. {labcode-0.10.0 → labcode-0.10.2}/examples/outputs/plate_line.plan.yaml +0 -0
  21. {labcode-0.10.0 → labcode-0.10.2}/examples/outputs/plate_line.svg +0 -0
  22. {labcode-0.10.0 → labcode-0.10.2}/examples/outputs/shared_bench.boundary.yaml +0 -0
  23. {labcode-0.10.0 → labcode-0.10.2}/examples/outputs/shared_bench.observation.yaml +0 -0
  24. {labcode-0.10.0 → labcode-0.10.2}/examples/outputs/shared_bench.plan.yaml +0 -0
  25. {labcode-0.10.0 → labcode-0.10.2}/examples/outputs/shared_bench.svg +0 -0
  26. {labcode-0.10.0 → labcode-0.10.2}/examples/outputs/sila2_plate_cycle.boundary.yaml +0 -0
  27. {labcode-0.10.0 → labcode-0.10.2}/examples/outputs/sila2_plate_cycle.observation.yaml +0 -0
  28. {labcode-0.10.0 → labcode-0.10.2}/examples/outputs/sila2_plate_cycle.plan.yaml +0 -0
  29. {labcode-0.10.0 → labcode-0.10.2}/examples/outputs/sila2_plate_cycle.svg +0 -0
  30. {labcode-0.10.0 → labcode-0.10.2}/examples/plate_line.boundary.yaml +0 -0
  31. {labcode-0.10.0 → labcode-0.10.2}/examples/plate_line.env.yaml +0 -0
  32. {labcode-0.10.0 → labcode-0.10.2}/examples/plate_line.workflow.yaml +0 -0
  33. {labcode-0.10.0 → labcode-0.10.2}/examples/preflight_sila2_env.py +0 -0
  34. {labcode-0.10.0 → labcode-0.10.2}/examples/render_plate_line.py +0 -0
  35. {labcode-0.10.0 → labcode-0.10.2}/examples/render_shared_bench.py +0 -0
  36. {labcode-0.10.0 → labcode-0.10.2}/examples/render_sila2_plate_cycle.py +0 -0
  37. {labcode-0.10.0 → labcode-0.10.2}/examples/run_all_lads_examples.py +0 -0
  38. {labcode-0.10.0 → labcode-0.10.2}/examples/run_all_sila2_examples.py +0 -0
  39. {labcode-0.10.0 → labcode-0.10.2}/examples/run_sila2_plate_cycle.py +0 -0
  40. {labcode-0.10.0 → labcode-0.10.2}/examples/run_sila2_plate_cycle_no_atc.py +0 -0
  41. {labcode-0.10.0 → labcode-0.10.2}/examples/run_sila2_seal.py +0 -0
  42. {labcode-0.10.0 → labcode-0.10.2}/examples/shared_bench.afternoon.boundary.yaml +0 -0
  43. {labcode-0.10.0 → labcode-0.10.2}/examples/shared_bench.env.yaml +0 -0
  44. {labcode-0.10.0 → labcode-0.10.2}/examples/shared_bench.morning.boundary.yaml +0 -0
  45. {labcode-0.10.0 → labcode-0.10.2}/examples/shared_bench.run.yaml +0 -0
  46. {labcode-0.10.0 → labcode-0.10.2}/examples/shared_bench.workflow.yaml +0 -0
  47. {labcode-0.10.0 → labcode-0.10.2}/examples/sila2_plate_cycle.boundary.yaml +0 -0
  48. {labcode-0.10.0 → labcode-0.10.2}/examples/sila2_plate_cycle.workflow.yaml +0 -0
  49. {labcode-0.10.0 → labcode-0.10.2}/examples/sila2_plate_cycle.wrapped.env.yaml +0 -0
  50. {labcode-0.10.0 → labcode-0.10.2}/examples/sila2_plate_cycle_no_atc.boundary.yaml +0 -0
  51. {labcode-0.10.0 → labcode-0.10.2}/examples/sila2_plate_cycle_no_atc.workflow.yaml +0 -0
  52. {labcode-0.10.0 → labcode-0.10.2}/examples/sila2_plate_cycle_no_atc.wrapped.env.yaml +0 -0
  53. {labcode-0.10.0 → labcode-0.10.2}/examples/sila2_seal.boundary.yaml +0 -0
  54. {labcode-0.10.0 → labcode-0.10.2}/examples/sila2_seal.env.yaml +0 -0
  55. {labcode-0.10.0 → labcode-0.10.2}/examples/sila2_seal.workflow.yaml +0 -0
  56. {labcode-0.10.0 → labcode-0.10.2}/examples/sila2_seal.wrapped.env.yaml +0 -0
  57. {labcode-0.10.0 → labcode-0.10.2}/labcode/__init__.py +0 -0
  58. {labcode-0.10.0 → labcode-0.10.2}/labcode/__main__.py +0 -0
  59. {labcode-0.10.0 → labcode-0.10.2}/labcode/_child.py +0 -0
  60. {labcode-0.10.0 → labcode-0.10.2}/labcode/backend.py +0 -0
  61. {labcode-0.10.0 → labcode-0.10.2}/labcode/cli.py +0 -0
  62. {labcode-0.10.0 → labcode-0.10.2}/labcode/connections.py +0 -0
  63. {labcode-0.10.0 → labcode-0.10.2}/labcode/dialect.py +0 -0
  64. {labcode-0.10.0 → labcode-0.10.2}/labcode/extension.py +0 -0
  65. {labcode-0.10.0 → labcode-0.10.2}/labcode/idgen.py +0 -0
  66. {labcode-0.10.0 → labcode-0.10.2}/labcode/lads.py +0 -0
  67. {labcode-0.10.0 → labcode-0.10.2}/labcode/lads_commands.py +0 -0
  68. {labcode-0.10.0 → labcode-0.10.2}/labcode/lads_unit.py +0 -0
  69. {labcode-0.10.0 → labcode-0.10.2}/labcode/objectid.py +0 -0
  70. {labcode-0.10.0 → labcode-0.10.2}/labcode/otel.py +0 -0
  71. {labcode-0.10.0 → labcode-0.10.2}/labcode/otel_sila2.py +0 -0
  72. {labcode-0.10.0 → labcode-0.10.2}/labcode/probe.py +0 -0
  73. {labcode-0.10.0 → labcode-0.10.2}/labcode/py.typed +0 -0
  74. {labcode-0.10.0 → labcode-0.10.2}/labcode/record.py +0 -0
  75. {labcode-0.10.0 → labcode-0.10.2}/labcode/run_cli.py +0 -0
  76. {labcode-0.10.0 → labcode-0.10.2}/labcode/runner.py +0 -0
  77. {labcode-0.10.0 → labcode-0.10.2}/labcode/sila2.py +0 -0
  78. {labcode-0.10.0 → labcode-0.10.2}/labcode/sila2_commands.py +0 -0
  79. {labcode-0.10.0 → labcode-0.10.2}/labcode/sila2_instrument.py +0 -0
  80. {labcode-0.10.0 → labcode-0.10.2}/labcode.egg-info/SOURCES.txt +0 -0
  81. {labcode-0.10.0 → labcode-0.10.2}/labcode.egg-info/dependency_links.txt +0 -0
  82. {labcode-0.10.0 → labcode-0.10.2}/labcode.egg-info/entry_points.txt +0 -0
  83. {labcode-0.10.0 → labcode-0.10.2}/labcode.egg-info/scm_file_list.json +0 -0
  84. {labcode-0.10.0 → labcode-0.10.2}/labcode.egg-info/top_level.txt +0 -0
  85. {labcode-0.10.0 → labcode-0.10.2}/setup.cfg +0 -0
  86. {labcode-0.10.0 → labcode-0.10.2}/tests/fixtures/device_script.env.yaml +0 -0
  87. {labcode-0.10.0 → labcode-0.10.2}/tests/fixtures/device_script.workflow.yaml +0 -0
  88. {labcode-0.10.0 → labcode-0.10.2}/tests/fixtures/dispense_read.workflow.yaml +0 -0
  89. {labcode-0.10.0 → labcode-0.10.2}/tests/fixtures/joint.run.yaml +0 -0
  90. {labcode-0.10.0 → labcode-0.10.2}/tests/fixtures/replenishment.env.yaml +0 -0
  91. {labcode-0.10.0 → labcode-0.10.2}/tests/fixtures/reroute_device.env.yaml +0 -0
  92. {labcode-0.10.0 → labcode-0.10.2}/tests/fixtures/reroute_transporter.env.yaml +0 -0
  93. {labcode-0.10.0 → labcode-0.10.2}/tests/fixtures/transport.env.yaml +0 -0
  94. {labcode-0.10.0 → labcode-0.10.2}/tests/fixtures/transport.workflow.yaml +0 -0
  95. {labcode-0.10.0 → labcode-0.10.2}/tests/test_backend.py +0 -0
  96. {labcode-0.10.0 → labcode-0.10.2}/tests/test_cli.py +0 -0
  97. {labcode-0.10.0 → labcode-0.10.2}/tests/test_dialect.py +0 -0
  98. {labcode-0.10.0 → labcode-0.10.2}/tests/test_joint.py +0 -0
  99. {labcode-0.10.0 → labcode-0.10.2}/tests/test_lads.py +0 -0
  100. {labcode-0.10.0 → labcode-0.10.2}/tests/test_lads_unit.py +0 -0
  101. {labcode-0.10.0 → labcode-0.10.2}/tests/test_objectid.py +0 -0
  102. {labcode-0.10.0 → labcode-0.10.2}/tests/test_otel.py +0 -0
  103. {labcode-0.10.0 → labcode-0.10.2}/tests/test_otel_child.py +0 -0
  104. {labcode-0.10.0 → labcode-0.10.2}/tests/test_otel_grpc.py +0 -0
  105. {labcode-0.10.0 → labcode-0.10.2}/tests/test_otel_sila2.py +0 -0
  106. {labcode-0.10.0 → labcode-0.10.2}/tests/test_probe.py +0 -0
  107. {labcode-0.10.0 → labcode-0.10.2}/tests/test_record.py +0 -0
  108. {labcode-0.10.0 → labcode-0.10.2}/tests/test_recording.py +0 -0
  109. {labcode-0.10.0 → labcode-0.10.2}/tests/test_run_cli.py +0 -0
  110. {labcode-0.10.0 → labcode-0.10.2}/tests/test_sila2.py +0 -0
  111. {labcode-0.10.0 → labcode-0.10.2}/tests/test_sila2_commands.py +0 -0
  112. {labcode-0.10.0 → labcode-0.10.2}/tests/test_sila2_instrument.py +0 -0
  113. {labcode-0.10.0 → labcode-0.10.2}/tests/test_structured_labcode.py +0 -0
@@ -6,6 +6,48 @@ 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.2 — 2026-10-07
10
+
11
+ No code changes; the siblings move.
12
+
13
+ ### Added
14
+
15
+ - **A `map` / `fold` over a list of values runs.** `lc run` is given a list of labels,
16
+ volumes or the like and makes one invocation per element: the runner counts each
17
+ list and states its length in the document's `expansion` (ofplang-schedule SPEC
18
+ §6.13), and the scheduler expands by it (ofplang-schedule 0.14, ofplang-run 0.14).
19
+ Until now such a workflow was refused (`array_length_unknown`).
20
+
21
+ ### Changed — may need your attention
22
+
23
+ - **A list zipped with an Array of plates of another length is refused before the run
24
+ starts** (`each_length_mismatch`), where it used to stop that job at its first check.
25
+ - **A structured node's `outputs` is checked as the specification says** (ofplang-validate
26
+ 0.4.1). An entry with no `mode` is `missing_required_key`, and a reference to an output
27
+ the node does not expose -- one its `outputs` drops, or one dropped by default -- is
28
+ `output_not_exposed`. Both passed validation before.
29
+
30
+ Requires ofplang-validate 0.4.1, ofplang-schedule 0.14.1 and ofplang-run 0.14.1.
31
+
32
+ ## 0.10.1 — 2026-10-07
33
+
34
+ labcode follows specification revision 0.5. No code changes; the siblings move.
35
+
36
+ ### Changed — may need your attention
37
+
38
+ - **A composite returns every output it declares.** An output port with no `returns`
39
+ entry is now `output_not_returned`, and a `returns` entry naming no output port is
40
+ `return_port_not_found` (ofplang-validate 0.4). Until now a Pure Data output could go
41
+ unreturned.
42
+ - **The `scheduling` section is gone from the language.** It is now an unknown key, and
43
+ `scheduling_policies` in `features` an unknown feature. Delete the section and the
44
+ feature name; nothing else depended on them, and no plan used them.
45
+ - An Object that comes in at the boundary and is returned as it came is now planned and
46
+ run, moved to the spot its output is bound to (ofplang-schedule 0.13.1, ofplang-run
47
+ 0.13.1).
48
+
49
+ Requires ofplang-validate 0.4, ofplang-schedule 0.13.1 and ofplang-run 0.13.1.
50
+
9
51
  ## 0.10.0 — 2026-10-05
10
52
 
11
53
  labcode runs a protocol repeated over every plate (`map` / `fold`), and stops making up
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: labcode
3
- Version: 0.10.0
3
+ Version: 0.10.2
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
@@ -20,9 +20,9 @@ Classifier: Typing :: Typed
20
20
  Requires-Python: >=3.10
21
21
  Description-Content-Type: text/markdown
22
22
  License-File: LICENSE
23
- Requires-Dist: ofplang-validate<0.4,>=0.3
24
- Requires-Dist: ofplang-schedule<0.14,>=0.13
25
- Requires-Dist: ofplang-run<0.14,>=0.13
23
+ Requires-Dist: ofplang-validate<0.5,>=0.4.1
24
+ Requires-Dist: ofplang-schedule<0.15,>=0.14.1
25
+ Requires-Dist: ofplang-run<0.15,>=0.14.1
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.0
3
+ Version: 0.10.2
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
@@ -20,9 +20,9 @@ Classifier: Typing :: Typed
20
20
  Requires-Python: >=3.10
21
21
  Description-Content-Type: text/markdown
22
22
  License-File: LICENSE
23
- Requires-Dist: ofplang-validate<0.4,>=0.3
24
- Requires-Dist: ofplang-schedule<0.14,>=0.13
25
- Requires-Dist: ofplang-run<0.14,>=0.13
23
+ Requires-Dist: ofplang-validate<0.5,>=0.4.1
24
+ Requires-Dist: ofplang-schedule<0.15,>=0.14.1
25
+ Requires-Dist: ofplang-run<0.15,>=0.14.1
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
- ofplang-validate<0.4,>=0.3
2
- ofplang-schedule<0.14,>=0.13
3
- ofplang-run<0.14,>=0.13
1
+ ofplang-validate<0.5,>=0.4.1
2
+ ofplang-schedule<0.15,>=0.14.1
3
+ ofplang-run<0.15,>=0.14.1
4
4
 
5
5
  [dev]
6
6
  pytest>=7.0
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.10.2",
3
+ "distance": 0,
4
+ "node": "g702546d47fa25fa78a8e2b3246f173db95c1ecf3",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-10-07"
8
+ }
@@ -62,14 +62,29 @@ 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.13`, `ofplang-run>=0.13` and `ofplang-validate>=0.3` are required
66
- # together: a `map` / `fold` over an Array of plates runs from these (the scheduler expands
65
+ # `ofplang-validate>=0.4.1`, `ofplang-schedule>=0.14.1` and `ofplang-run>=0.14.1` are
66
+ # required together. A `map` / `fold` over a list of values is planned and run from
67
+ # these (the run states each list's length as the document's `expansion`, the scheduler
68
+ # expands by it), and the front door and the scheduler's reader agree again on what a
69
+ # structured node's `outputs` may say: an entry with no mode, and a reference to an
70
+ # output the node does not expose, are refused by both (validate 0.4.1), where before
71
+ # validate passed what the reader refused.
72
+ #
73
+ # The `ofplang-validate>=0.4`, `ofplang-schedule>=0.13.1` and `ofplang-run>=0.13.1`
74
+ # floors they replace were required together: they implement specification revision 0.5, and `lc` validates at its
75
+ # front door with the one validate and plans and runs with the others, so the three have
76
+ # to agree on what is valid. Under validate 0.3 a composite could leave an output
77
+ # unreturned that the scheduler's reader now refuses, and a `scheduling` section passed
78
+ # that 0.4 calls an unknown key.
79
+ #
80
+ # The `ofplang-schedule>=0.13`, `ofplang-run>=0.13` and `ofplang-validate>=0.3` floors they
81
+ # replace were required together: a `map` / `fold` over an Array of plates runs from these (the scheduler expands
67
82
  # it, the runner reads the expansion and takes an Array of Objects at the boundary one
68
83
  # element per spot, and specification revision 0.4 is what they validate against), and
69
84
  # labcode keys each plate's `_id` by its element. `RunResult.run_warnings`, which `lc run`
70
85
  # fills with what labcode defaulted, is new in run 0.13 too.
71
86
  #
72
- # 🔴 The schedule `<0.14` bound is a bound, not a floor: 0.10 refuses two jobs binding one
87
+ # 🔴 The schedule upper bound is a bound, not a floor: 0.10 refuses two jobs binding one
73
88
  # boundary spot where it used to warn, and 0.12 refuses a plan it can show has no
74
89
  # schedule before the solve instead of returning `unknown`. Both change what happens to
75
90
  # a document this package hands over rather than anything it calls.
@@ -88,9 +103,9 @@ dependencies = [
88
103
  # would pick up the next such sibling and start refusing its own examples. The
89
104
  # bounds cannot protect what is already on PyPI without one, which is why they go
90
105
  # in now rather than at the first breakage.
91
- "ofplang-validate>=0.3,<0.4",
92
- "ofplang-schedule>=0.13,<0.14",
93
- "ofplang-run>=0.13,<0.14",
106
+ "ofplang-validate>=0.4.1,<0.5",
107
+ "ofplang-schedule>=0.14.1,<0.15",
108
+ "ofplang-run>=0.14.1,<0.15",
94
109
  ]
95
110
 
96
111
  [project.urls]
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "0.10.0",
3
- "distance": 0,
4
- "node": "geaede720f48ffdbbeec2c2e2500d2ca2242094ee",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-10-06"
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