Skip to content

Material Mutation and Transfer

Material mutation uses the << operator to move or merge material into a destination.

text
target << [source:5uL];

The left side is the destination container. The source list on the right describes material sources and optional transfer quantities.

Quantified Transfer

The minimal public example uses quantified transfer.

text
target << [source:5uL];

This mutates runtime material state and appears in the execution plan as a material operation.

The quantity must carry a physical unit. This is valid:

text
target << [source:5uL];

This is not a quantified transfer:

text
target << [source:1];

Full Transfer

A source item can also be unquantified:

text
target << [source];

That expresses full-transfer or merge semantics for the source item.

Do not mix quantified and unquantified source items in one transfer statement:

text
target << [source_a:5uL, source_b];  // invalid style mix

Multiple Sources

Multiple sources can be listed:

text
target << [sample:80uL, buffer:20uL];

Ordinary source lists mean that multiple sources flow into the same target. They do not imply ordered mapping across a group.

Ordered Mapping with series

For group targets, ordered mapping uses series(...).

text
group_ref << [series(stock, [5uL, 10uL, 20uL])];

The value list must match the target group size. series(...) is only a mutation source-list form; it is not a general-purpose list mapping expression.

Unit Collection

Culsma also allows collecting a unit back into a container:

text
keep_tube << [cell];

This is used with stream/unit workflows and belongs to more advanced authoring.

Same-Container No-Op

If a source item resolves to the same container as the target, the item is legal and is treated as a no-op at material execution.

What Transfer Is Not

<< no longer carries a source-level program argument. Actions such as vortexing, shaking, or stirring belong to agit(...), not to transfer syntax.

Released under the Apache-2.0 license.