skills/pylabrobot/references/material-handling.md
Verified against PyLabRobot 0.2.1 on 2026-07-23. Every operation in this domain can create physical motion, pressure, heat, or stored energy. The snippets below identify APIs only; they do not connect to devices.
Stable frontend and one stable backend export:
from pylabrobot.pumps import MasterflexBackend, Pump
Verified Pump methods:
run_revolutions(num_revolutions)
run_continuously(speed)
run_for_duration(speed, duration)
halt()
The stale methods start, stop as a pumping command, pump_volume, and
calibrate(duration=..., speed=..., volume=...) are not the verified universal
0.2.1 frontend shown above. stop() belongs to machine lifecycle; halt() is
the pump-motion command.
MasterflexBackend(com_port) is transport-specific. Do not instantiate it
during discovery. Stable supported machines labels Cole-Parmer Masterflex
L/S listed models and Agrowtek Pump Array as Full.
Before a separately authorized run, verify:
A time/speed command is not a measured volume. Record the calibration and uncertainty; use a validated scale/flow sensor if closed-loop confirmation is required.
Stable frontend imports:
from pylabrobot.heating_shaking import (
HamiltonHeaterShakerBackend,
HeaterShaker,
InhecoThermoshakeBackend,
)
from pylabrobot.shaking import Shaker
The stable class is InhecoThermoshakeBackend (lowercase s in
Thermoshake), not the stale InhecoThermoShakeBackend.
Verified HeaterShaker methods:
set_temperature(temperature, passive=False)
get_temperature()
shake(speed, duration=None, **backend_kwargs)
stop_shaking(**backend_kwargs)
lock_plate(**backend_kwargs)
unlock_plate(**backend_kwargs)
The old names set_shake_rate and set_temperature(None) are not the verified
0.2.1 frontend signatures. Use the exact device page for deactivation/cooling
and do not substitute zero/None unless documented for that backend.
HeaterShaker construction requires name, dimensions, backend, and a
child_location. Backend construction is also device topology-specific:
HamiltonHeaterShakerBackend(index, interface) and
InhecoThermoshakeBackend(index, control_box) require approved shared
interfaces/controllers.
Stable supported machines lists:
Confirm plate compatibility, mass, balance, lid/seal, locking, condensation, spillage containment, orbit/speed limits, thermal limits, ramp/equilibration, sensor calibration, and safe unlock temperature. Never unlock or move a plate while shaking. Treat a requested setpoint as a command, not proof that the sample has reached that temperature.
Stable frontend:
from pylabrobot.temperature_controlling import TemperatureController
Verified methods:
set_temperature(temperature, passive=False)
get_temperature()
deactivate()
Stable support includes Inheco CPAC (Full) and Opentrons Temperature Module (Mostly in the complete stable table). Validate active cooling, condensation, plate/adapter contact, setpoint range, ramp, sensor placement, overshoot, and sample-versus-block temperature.
Stable imports:
from pylabrobot.centrifuge import Access2Backend, Centrifuge, VSpinBackend
Verified frontend:
open_door()
close_door()
lock_door()
unlock_door()
spin(g, duration, **backend_kwargs)
The stable method takes relative centrifugal force g, not the stale
speed=... RPM argument. Converting RPM to RCF requires the correct rotor
radius; never guess it.
Stable supported machines labels:
VSpinBackend(device_id=None) and Access2Backend(device_id, timeout=60) are
device-specific. Do not use placeholder IDs in a live script.
The current changelog lists HighRes Biosolutions MicroSpin under
Unreleased. Although development main may expose MicroSpin, it is not a
stable 0.2.1 API and must not be imported in pinned examples.
Require human verification of rotor/bucket/adapter model, plate rating, orientation, balance, maximum RCF, duration, acceleration/deceleration, lid/door interlocks, loading position, clearance, maintenance, and emergency procedure. Never open/unlock while rotating or issue movement merely to test a connection. On timeout or disconnect, assume the rotor may still be moving until physically verified safe.
The stable machine inventory includes multiple Thermo Fisher/Heraeus Cytomat
models as Full, and Inheco Incubator Shaker/SCILA as Mostly. Their APIs
are model-specific; do not use stale generic examples such as
from pylabrobot.incubation import Incubator without verifying that exact
symbol in the pinned wheel.
Storage moves require explicit plate identity, slot mapping, occupancy state, door/hatch/interlock state, orientation, environmental setpoints, and recovery from an interrupted handoff. Software occupancy is not physical detection.
Do not independently gather() hardware operations just because frontends are
async. Safe concurrency requires approved workcell interlocks and a scheduler
that owns:
Default sequence:
python3 skills/pylabrobot/scripts/inspect_backends.py \
--expected-version 0.2.1 --strict
This checks a fixed set of frontend symbols and methods without constructing
devices or calling setup().
Checked 2026-07-23:
v0.2.1 pumps,
heating/shaking,
and centrifuge
source — exact methods/classes; tag dated 2026-03-23.Unreleased
— development-only MicroSpin.