[{"data":1,"prerenderedAt":3353},["ShallowReactive",2],{"navigation":3,"\u002Foperate\u002Fconcepts\u002Fliquids":750,"\u002Foperate\u002Fconcepts\u002Fliquids-surround":3348},[4,80,134,364,428,530,567,646],{"title":5,"path":6,"stem":7,"children":8,"page":42},"Get Started","\u002Fget-started","01.get-started",[9,13,17,43,47],{"title":10,"path":11,"stem":12},"Welcome to UniteLabs","\u002Fget-started\u002Fwelcome","01.get-started\u002F00.welcome",{"title":14,"path":15,"stem":16},"How it works","\u002Fget-started\u002Fhow-it-works","01.get-started\u002F01.how-it-works",{"title":18,"path":19,"stem":20,"children":21,"page":42},"Use Cases","\u002Fget-started\u002Fuse-cases","01.get-started\u002F02.use-cases",[22,26,30,34,38],{"title":23,"path":24,"stem":25},"Instrument Control","\u002Fget-started\u002Fuse-cases\u002Flow-level-instrument-control","01.get-started\u002F02.use-cases\u002F10.low-level-instrument-control",{"title":27,"path":28,"stem":29},"Multi-device Control","\u002Fget-started\u002Fuse-cases\u002Fmulti-device-control","01.get-started\u002F02.use-cases\u002F20.multi-device-control",{"title":31,"path":32,"stem":33},"Workflow Orchestration","\u002Fget-started\u002Fuse-cases\u002Fworkflow-orchestration","01.get-started\u002F02.use-cases\u002F30.workflow-orchestration",{"title":35,"path":36,"stem":37},"Custom Apps and LIMS Integration","\u002Fget-started\u002Fuse-cases\u002Fcustom-apps-lims","01.get-started\u002F02.use-cases\u002F40.custom-apps-lims",{"title":39,"path":40,"stem":41},"Scale and Fleet Management","\u002Fget-started\u002Fuse-cases\u002Fscale-and-fleet","01.get-started\u002F02.use-cases\u002F50.scale-and-fleet",false,{"title":44,"path":45,"stem":46},"Lab as Code","\u002Fget-started\u002Fwhy-code","01.get-started\u002F03.why-code",{"title":48,"path":49,"stem":50,"children":51,"page":42},"Setup","\u002Fget-started\u002Fsetup","01.get-started\u002F20.setup",[52,56,60,64,68,72,76],{"title":53,"path":54,"stem":55},"GroundControl","\u002Fget-started\u002Fsetup\u002Fgroundcontrol","01.get-started\u002F20.setup\u002F10.groundcontrol",{"title":57,"path":58,"stem":59},"Network requirements","\u002Fget-started\u002Fsetup\u002Fnetwork-requirements","01.get-started\u002F20.setup\u002F20.network-requirements",{"title":61,"path":62,"stem":63},"Multi-device Networking","\u002Fget-started\u002Fsetup\u002Fmultiple-devices","01.get-started\u002F20.setup\u002F30.multiple-devices",{"title":65,"path":66,"stem":67},"Connect to Platform","\u002Fget-started\u002Fsetup\u002Fconnect-to-platform","01.get-started\u002F20.setup\u002F40.connect-to-platform",{"title":69,"path":70,"stem":71},"Headless install","\u002Fget-started\u002Fsetup\u002Fheadless-install","01.get-started\u002F20.setup\u002F50.headless-install",{"title":73,"path":74,"stem":75},"Raspberry Pi","\u002Fget-started\u002Fsetup\u002Fraspberry-pi","01.get-started\u002F20.setup\u002F55.raspberry-pi",{"title":77,"path":78,"stem":79},"Installation","\u002Fget-started\u002Fsetup\u002Fsdk-installation","01.get-started\u002F20.setup\u002F60.sdk-installation",{"title":81,"path":82,"stem":83,"children":84,"page":42},"Integrate","\u002Fintegrate","02.integrate",[85,89,93,118],{"title":86,"path":87,"stem":88},"What is a connector?","\u002Fintegrate\u002Fwhat-is-a-connector","02.integrate\u002F00.what-is-a-connector",{"title":90,"path":91,"stem":92},"Calling a Connector","\u002Fintegrate\u002Fcontrol-with-code","02.integrate\u002F05.control-with-code",{"title":94,"path":95,"stem":96,"children":97,"page":42},"Concepts","\u002Fintegrate\u002Fconcepts","02.integrate\u002F10.concepts",[98,102,106,110,114],{"title":99,"path":100,"stem":101},"Connector","\u002Fintegrate\u002Fconcepts\u002Fconnector","02.integrate\u002F10.concepts\u002F10.connector",{"title":103,"path":104,"stem":105},"Module","\u002Fintegrate\u002Fconcepts\u002Fmodule","02.integrate\u002F10.concepts\u002F20.module",{"title":107,"path":108,"stem":109},"Action","\u002Fintegrate\u002Fconcepts\u002Faction","02.integrate\u002F10.concepts\u002F30.action",{"title":111,"path":112,"stem":113},"Subscription","\u002Fintegrate\u002Fconcepts\u002Fsubscription","02.integrate\u002F10.concepts\u002F40.subscription",{"title":115,"path":116,"stem":117},"Device","\u002Fintegrate\u002Fconcepts\u002Fdevice","02.integrate\u002F10.concepts\u002F50.device",{"title":119,"path":120,"stem":121,"children":122,"page":42},"Use a connector","\u002Fintegrate\u002Fuse-a-connector","02.integrate\u002F30.use-a-connector",[123,126,130],{"title":53,"path":124,"stem":125},"\u002Fintegrate\u002Fuse-a-connector\u002Fgroundcontrol","02.integrate\u002F30.use-a-connector\u002F10.groundcontrol",{"title":127,"path":128,"stem":129},"Platform","\u002Fintegrate\u002Fuse-a-connector\u002Fplatform","02.integrate\u002F30.use-a-connector\u002F20.platform",{"title":131,"path":132,"stem":133},"UniteLabs SDK & REST API","\u002Fintegrate\u002Fuse-a-connector\u002Fpython","02.integrate\u002F30.use-a-connector\u002F30.python",{"title":135,"path":136,"stem":137,"children":138,"page":42},"Operate","\u002Foperate","03.operate",[139,142,146,186,259],{"title":135,"path":140,"stem":141},"\u002Foperate\u002Foverview","03.operate\u002F00.overview",{"title":143,"path":144,"stem":145},"Your First Protocol","\u002Foperate\u002Fyour-first-protocol","03.operate\u002F05.your-first-protocol",{"title":94,"path":147,"stem":148,"children":149,"page":42},"\u002Foperate\u002Fconcepts","03.operate\u002F10.concepts",[150,154,158,162,166,170,174,178,182],{"title":151,"path":152,"stem":153},"Liquid Handling","\u002Foperate\u002Fconcepts\u002Fliquid-handling","03.operate\u002F10.concepts\u002F10.liquid-handling",{"title":155,"path":156,"stem":157},"Modules","\u002Foperate\u002Fconcepts\u002Fmodules","03.operate\u002F10.concepts\u002F20.modules",{"title":159,"path":160,"stem":161},"Deck","\u002Foperate\u002Fconcepts\u002Fdeck","03.operate\u002F10.concepts\u002F30.deck",{"title":163,"path":164,"stem":165},"Labware","\u002Foperate\u002Fconcepts\u002Flabware","03.operate\u002F10.concepts\u002F40.labware",{"title":167,"path":168,"stem":169},"Liquids","\u002Foperate\u002Fconcepts\u002Fliquids","03.operate\u002F10.concepts\u002F50.liquids",{"title":171,"path":172,"stem":173},"Liquid Classes","\u002Foperate\u002Fconcepts\u002Fliquid-classes","03.operate\u002F10.concepts\u002F60.liquid-classes",{"title":175,"path":176,"stem":177},"Tips and Tip Tracking","\u002Foperate\u002Fconcepts\u002Ftips","03.operate\u002F10.concepts\u002F70.tips",{"title":179,"path":180,"stem":181},"Simulation","\u002Foperate\u002Fconcepts\u002Fsimulation","03.operate\u002F10.concepts\u002F80.simulation",{"title":183,"path":184,"stem":185},"Error Handling","\u002Foperate\u002Fconcepts\u002Ferror-handling","03.operate\u002F10.concepts\u002F90.error-handling",{"title":187,"path":188,"stem":189,"children":190,"page":42},"Guides","\u002Foperate\u002Fguides","03.operate\u002F20.guides",[191,220,232,256],{"title":163,"path":192,"stem":193,"children":194},"\u002Foperate\u002Fguides\u002Flabware","03.operate\u002F20.guides\u002F10.labware\u002Findex",[195,196,200,204,208,212,216],{"title":163,"path":192,"stem":193},{"title":197,"path":198,"stem":199},"Standard Labware","\u002Foperate\u002Fguides\u002Flabware\u002Fstandard-labware","03.operate\u002F20.guides\u002F10.labware\u002F05.standard-labware",{"title":201,"path":202,"stem":203},"Plates","\u002Foperate\u002Fguides\u002Flabware\u002Fplates","03.operate\u002F20.guides\u002F10.labware\u002F10.plates",{"title":205,"path":206,"stem":207},"Tips and Tip Racks","\u002Foperate\u002Fguides\u002Flabware\u002Ftips-and-racks","03.operate\u002F20.guides\u002F10.labware\u002F20.tips-and-racks",{"title":209,"path":210,"stem":211},"Tubes and Tube Racks","\u002Foperate\u002Fguides\u002Flabware\u002Ftubes-and-tube-racks","03.operate\u002F20.guides\u002F10.labware\u002F30.tubes-and-tube-racks",{"title":213,"path":214,"stem":215},"Troughs","\u002Foperate\u002Fguides\u002Flabware\u002Ftroughs","03.operate\u002F20.guides\u002F10.labware\u002F35.troughs",{"title":217,"path":218,"stem":219},"Carriers and Adapters","\u002Foperate\u002Fguides\u002Flabware\u002Fcarriers-and-adapters","03.operate\u002F20.guides\u002F10.labware\u002F40.carriers-and-adapters",{"title":159,"path":221,"stem":222,"children":223,"page":42},"\u002Foperate\u002Fguides\u002Fdeck","03.operate\u002F20.guides\u002F20.deck",[224,228],{"title":225,"path":226,"stem":227},"Building a Deck","\u002Foperate\u002Fguides\u002Fdeck\u002Fbuilding-a-deck","03.operate\u002F20.guides\u002F20.deck\u002F10.building-a-deck",{"title":229,"path":230,"stem":231},"Save\u002FLoad a Deck","\u002Foperate\u002Fguides\u002Fdeck\u002Fsave-load-deck","03.operate\u002F20.guides\u002F20.deck\u002F20.save-load-deck",{"title":233,"path":234,"stem":235,"children":236,"page":42},"Pipetting","\u002Foperate\u002Fguides\u002Fpipetting","03.operate\u002F20.guides\u002F30.pipetting",[237,241,245,249,252],{"title":238,"path":239,"stem":240},"Basic Pipetting","\u002Foperate\u002Fguides\u002Fpipetting\u002Fbasic-pipetting","03.operate\u002F20.guides\u002F30.pipetting\u002F10.basic-pipetting",{"title":242,"path":243,"stem":244},"Advanced Pipetting","\u002Foperate\u002Fguides\u002Fpipetting\u002Fadvanced-pipetting","03.operate\u002F20.guides\u002F30.pipetting\u002F20.advanced-pipetting",{"title":246,"path":247,"stem":248},"Tip Handling","\u002Foperate\u002Fguides\u002Fpipetting\u002Ftip-handling","03.operate\u002F20.guides\u002F30.pipetting\u002F30.tip-handling",{"title":171,"path":250,"stem":251},"\u002Foperate\u002Fguides\u002Fpipetting\u002Fliquid-classes","03.operate\u002F20.guides\u002F30.pipetting\u002F40.liquid-classes",{"title":253,"path":254,"stem":255},"Labware Transport","\u002Foperate\u002Fguides\u002Fpipetting\u002Flabware-transport","03.operate\u002F20.guides\u002F30.pipetting\u002F50.labware-transport",{"title":179,"path":257,"stem":258},"\u002Foperate\u002Fguides\u002Fsimulation","03.operate\u002F20.guides\u002F40.simulation",{"title":260,"path":261,"stem":262,"children":263,"page":42},"Liquid Handler Guides","\u002Foperate\u002Fdevices","03.operate\u002F30.devices",[264,305,330,347],{"title":265,"path":266,"stem":267,"children":268,"page":42},"Hamilton STAR","\u002Foperate\u002Fdevices\u002Fhamilton-star","03.operate\u002F30.devices\u002F10.hamilton-star",[269,273,277,281,285,289,293,297,301],{"title":270,"path":271,"stem":272},"Positioning & Movement","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fpositioning","03.operate\u002F30.devices\u002F10.hamilton-star\u002F10.positioning",{"title":274,"path":275,"stem":276},"Gripper Module","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fcore-gripper","03.operate\u002F30.devices\u002F10.hamilton-star\u002F20.core-gripper",{"title":278,"path":279,"stem":280},"iSWAP Module","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fiswap","03.operate\u002F30.devices\u002F10.hamilton-star\u002F30.iswap",{"title":282,"path":283,"stem":284},"Using TADM","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Ftadm","03.operate\u002F30.devices\u002F10.hamilton-star\u002F40.tadm",{"title":286,"path":287,"stem":288},"Autoload Module","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fautoload","03.operate\u002F30.devices\u002F10.hamilton-star\u002F50.autoload",{"title":290,"path":291,"stem":292},"Waste Block","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fwaste-block","03.operate\u002F30.devices\u002F10.hamilton-star\u002F60.waste-block",{"title":294,"path":295,"stem":296},"Complex Mixing","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fcomplex-mixing","03.operate\u002F30.devices\u002F10.hamilton-star\u002F66.complex-mixing",{"title":298,"path":299,"stem":300},"Teaching Gripper Paddle Positions","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fgripper-positions","03.operate\u002F30.devices\u002F10.hamilton-star\u002F70.gripper-positions",{"title":302,"path":303,"stem":304},"Training a Custom Deck Position With the iSWAP","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fcustom-deck-position","03.operate\u002F30.devices\u002F10.hamilton-star\u002F75.custom-deck-position",{"title":306,"path":307,"stem":308,"children":309,"page":42},"Hamilton Vantage","\u002Foperate\u002Fdevices\u002Fhamilton-vantage","03.operate\u002F30.devices\u002F20.hamilton-vantage",[310,314,318,322,326],{"title":311,"path":312,"stem":313},"Waste Configuration","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fwaste-configuration","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F05.waste-configuration",{"title":315,"path":316,"stem":317},"Covers and Lights","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fcovers-and-lights","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F10.covers-and-lights",{"title":319,"path":320,"stem":321},"IDL Module","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fidl","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F20.idl",{"title":323,"path":324,"stem":325},"IPG Module","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fipg","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F30.ipg",{"title":327,"path":328,"stem":329},"XL Pipettes","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fxl-channels","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F40.xl-channels",{"title":331,"path":332,"stem":333,"children":334,"page":42},"Agilent Bravo","\u002Foperate\u002Fdevices\u002Fagilent-bravo","03.operate\u002F30.devices\u002F30.agilent-bravo",[335,338,341,344],{"title":246,"path":336,"stem":337},"\u002Foperate\u002Fdevices\u002Fagilent-bravo\u002Ftip-handling","03.operate\u002F30.devices\u002F30.agilent-bravo\u002F10.tip-handling",{"title":238,"path":339,"stem":340},"\u002Foperate\u002Fdevices\u002Fagilent-bravo\u002Fbasic-pipetting","03.operate\u002F30.devices\u002F30.agilent-bravo\u002F20.basic-pipetting",{"title":171,"path":342,"stem":343},"\u002Foperate\u002Fdevices\u002Fagilent-bravo\u002Fliquid-classes","03.operate\u002F30.devices\u002F30.agilent-bravo\u002F25.liquid-classes",{"title":274,"path":345,"stem":346},"\u002Foperate\u002Fdevices\u002Fagilent-bravo\u002Fusing-the-gripper","03.operate\u002F30.devices\u002F30.agilent-bravo\u002F30.using-the-gripper",{"title":348,"path":349,"stem":350,"children":351,"page":42},"Tecan FluentControl","\u002Foperate\u002Fdevices\u002Ftecan-fluentcontrol","03.operate\u002F30.devices\u002F40.tecan-fluentcontrol",[352,356,360],{"title":353,"path":354,"stem":355},"Connect & Run a Method","\u002Foperate\u002Fdevices\u002Ftecan-fluentcontrol\u002Fconnect-and-run","03.operate\u002F30.devices\u002F40.tecan-fluentcontrol\u002F10.connect-and-run",{"title":357,"path":358,"stem":359},"Sending XML Commands","\u002Foperate\u002Fdevices\u002Ftecan-fluentcontrol\u002Fsending-xml-commands","03.operate\u002F30.devices\u002F40.tecan-fluentcontrol\u002F20.sending-xml-commands",{"title":361,"path":362,"stem":363},"Full Workflow Example","\u002Foperate\u002Fdevices\u002Ftecan-fluentcontrol\u002Ffull-workflow-example","03.operate\u002F30.devices\u002F40.tecan-fluentcontrol\u002F30.full-workflow-example",{"title":365,"path":366,"stem":367,"children":368,"page":42},"Device Guides","\u002Fdevice-guides","06.device-guides",[369,372,385,402,415],{"title":365,"path":370,"stem":371},"\u002Fdevice-guides\u002Foverview","06.device-guides\u002F00.overview",{"title":373,"path":374,"stem":375,"children":376,"page":42},"Incubation","\u002Fdevice-guides\u002Fincubation","06.device-guides\u002F20.incubation",[377,381],{"title":378,"path":379,"stem":380},"Inheco ODTC","\u002Fdevice-guides\u002Fincubation\u002Finheco-odtc","06.device-guides\u002F20.incubation\u002F10.inheco-odtc",{"title":382,"path":383,"stem":384},"Inheco SCILA","\u002Fdevice-guides\u002Fincubation\u002Finheco-scila","06.device-guides\u002F20.incubation\u002F20.inheco-scila",{"title":386,"path":387,"stem":388,"children":389,"page":42},"Heater-Shakers","\u002Fdevice-guides\u002Fheater-shakers","06.device-guides\u002F30.heater-shakers",[390,394,398],{"title":391,"path":392,"stem":393},"Inheco Thermoshake","\u002Fdevice-guides\u002Fheater-shakers\u002Finheco-thermoshake","06.device-guides\u002F30.heater-shakers\u002F10.inheco-thermoshake",{"title":395,"path":396,"stem":397},"QInstruments Bioshake","\u002Fdevice-guides\u002Fheater-shakers\u002Fqinstruments-bioshake","06.device-guides\u002F30.heater-shakers\u002F20.qinstruments-bioshake",{"title":399,"path":400,"stem":401},"QInstruments ColdPlate","\u002Fdevice-guides\u002Fheater-shakers\u002Fqinstruments-coldplate","06.device-guides\u002F30.heater-shakers\u002F30.qinstruments-coldplate",{"title":403,"path":404,"stem":405,"children":406,"page":42},"Readers","\u002Fdevice-guides\u002Freaders","06.device-guides\u002F40.readers",[407,411],{"title":408,"path":409,"stem":410},"Biotek Gen5","\u002Fdevice-guides\u002Freaders\u002Fbiotek-gen5","06.device-guides\u002F40.readers\u002F10.biotek-gen5",{"title":412,"path":413,"stem":414},"Biotek Synergy H1","\u002Fdevice-guides\u002Freaders\u002Fbiotek-synergy-h1","06.device-guides\u002F40.readers\u002F20.biotek-synergy-H1",{"title":416,"path":417,"stem":418,"children":419,"page":42},"Tilt & Turn","\u002Fdevice-guides\u002Ftilt-and-turn","06.device-guides\u002F50.tilt-and-turn",[420,424],{"title":421,"path":422,"stem":423},"TurnStation","\u002Fdevice-guides\u002Ftilt-and-turn\u002Fqinstruments-turnstation","06.device-guides\u002F50.tilt-and-turn\u002F10.qinstruments-turnstation",{"title":425,"path":426,"stem":427},"TiltStation","\u002Fdevice-guides\u002Ftilt-and-turn\u002Fqinstruments-tiltstation","06.device-guides\u002F50.tilt-and-turn\u002F20.qinstruments-tiltstation",{"title":429,"path":430,"stem":431,"children":432,"page":42},"Automate","\u002Fautomate","07.automate",[433,437,441,445,494],{"title":434,"path":435,"stem":436},"What is a workflow?","\u002Fautomate\u002Fwhat-is-a-workflow","07.automate\u002F00.what-is-a-workflow",{"title":438,"path":439,"stem":440},"Workflow template","\u002Fautomate\u002Fworkflow-template","07.automate\u002F05.workflow-template",{"title":442,"path":443,"stem":444},"Your First Workflow","\u002Fautomate\u002Fyour-first-workflow","07.automate\u002F08.your-first-workflow",{"title":94,"pages":446,"path":456,"stem":457,"children":458,"page":42},[447,448,449,450,451,452,453,454,455],"workflow","phase","step","runs","input","artifacts","logs","human-in-the-loop","error-handling","\u002Fautomate\u002Fconcepts","07.automate\u002F10.concepts",[459,463,467,471,475,479,483,487,491],{"title":460,"path":461,"stem":462},"Workflow","\u002Fautomate\u002Fconcepts\u002Fworkflow","07.automate\u002F10.concepts\u002F10.workflow",{"title":464,"path":465,"stem":466},"Phase","\u002Fautomate\u002Fconcepts\u002Fphase","07.automate\u002F10.concepts\u002F20.phase",{"title":468,"path":469,"stem":470},"Step","\u002Fautomate\u002Fconcepts\u002Fstep","07.automate\u002F10.concepts\u002F30.step",{"title":472,"path":473,"stem":474},"Runs","\u002Fautomate\u002Fconcepts\u002Fruns","07.automate\u002F10.concepts\u002F40.runs",{"title":476,"path":477,"stem":478},"Input","\u002Fautomate\u002Fconcepts\u002Finput","07.automate\u002F10.concepts\u002F50.input",{"title":480,"path":481,"stem":482},"Artifacts","\u002Fautomate\u002Fconcepts\u002Fartifacts","07.automate\u002F10.concepts\u002F60.artifacts",{"title":484,"path":485,"stem":486},"Logs","\u002Fautomate\u002Fconcepts\u002Flogs","07.automate\u002F10.concepts\u002F70.logs",{"title":488,"path":489,"stem":490},"Human in the Loop","\u002Fautomate\u002Fconcepts\u002Fhuman-in-the-loop","07.automate\u002F10.concepts\u002F80.human-in-the-loop",{"title":183,"path":492,"stem":493},"\u002Fautomate\u002Fconcepts\u002Ferror-handling","07.automate\u002F10.concepts\u002F90.error-handling",{"title":187,"path":495,"stem":496,"children":497,"page":42},"\u002Fautomate\u002Fguides","07.automate\u002F25.guides",[498,502,506,510,514,518,522,526],{"title":499,"path":500,"stem":501},"Deploy a workflow","\u002Fautomate\u002Fguides\u002Fdeploy-a-workflow","07.automate\u002F25.guides\u002F30.deploy-a-workflow",{"title":503,"path":504,"stem":505},"Run a workflow","\u002Fautomate\u002Fguides\u002Frun-a-workflow","07.automate\u002F25.guides\u002F35.run-a-workflow",{"title":507,"path":508,"stem":509},"CI\u002FCD for workflows","\u002Fautomate\u002Fguides\u002Fcicd-for-workflows","07.automate\u002F25.guides\u002F40.cicd-for-workflows",{"title":511,"path":512,"stem":513},"HITL basics","\u002Fautomate\u002Fguides\u002Fbasic-hitl","07.automate\u002F25.guides\u002F50.basic-hitl",{"title":515,"path":516,"stem":517},"Typed operator inputs","\u002Fautomate\u002Fguides\u002Ftyped-operator-inputs","07.automate\u002F25.guides\u002F55.typed-operator-inputs",{"title":519,"path":520,"stem":521},"Error recovery","\u002Fautomate\u002Fguides\u002Fbasic-error-handling","07.automate\u002F25.guides\u002F60.basic-error-handling",{"title":523,"path":524,"stem":525},"Advanced error handling","\u002Fautomate\u002Fguides\u002Fadvanced-error-handling","07.automate\u002F25.guides\u002F70.advanced-error-handling",{"title":527,"path":528,"stem":529},"Workflows REST API","\u002Fautomate\u002Fguides\u002Fworkflows-api","07.automate\u002F25.guides\u002F80.workflows-api",{"title":531,"path":532,"stem":533,"children":534,"page":42},"Observe","\u002Fobserve","08.observe",[535,539,555],{"title":536,"path":537,"stem":538},"Overview","\u002Fobserve\u002Foverview","08.observe\u002F10.overview",{"title":94,"path":540,"stem":541,"children":542,"page":42},"\u002Fobserve\u002Fconcepts","08.observe\u002F20.concepts",[543,547,551],{"title":544,"path":545,"stem":546},"Object Storage","\u002Fobserve\u002Fconcepts\u002Fstorage","08.observe\u002F20.concepts\u002F10.storage",{"title":548,"path":549,"stem":550},"Secrets","\u002Fobserve\u002Fconcepts\u002Fsecrets","08.observe\u002F20.concepts\u002F20.secrets",{"title":552,"path":553,"stem":554},"Data sources","\u002Fobserve\u002Fconcepts\u002Fdata-sources","08.observe\u002F20.concepts\u002F30.data-sources",{"title":187,"path":556,"stem":557,"children":558,"page":42},"\u002Fobserve\u002Fguides","08.observe\u002F30.guides",[559,563],{"title":560,"path":561,"stem":562},"File System Connector","\u002Fobserve\u002Fguides\u002Ffilesystem-connector","08.observe\u002F30.guides\u002F10.filesystem-connector",{"title":564,"path":565,"stem":566},"Building an ETL","\u002Fobserve\u002Fguides\u002Fbuilding-an-etl","08.observe\u002F30.guides\u002F20.building-an-etl",{"title":568,"path":569,"stem":570,"children":571,"page":42},"Technical Reference","\u002Ftechnical-reference","10.technical-reference",[572,576,580,592,603,614,624,635],{"title":573,"path":574,"stem":575},"Introduction","\u002Ftechnical-reference\u002Fplatform-blueprint","10.technical-reference\u002F00.platform-blueprint",{"title":577,"path":578,"stem":579},"REST API","\u002Ftechnical-reference\u002Frest-api","10.technical-reference\u002F01.rest-api",{"title":53,"path":581,"stem":582,"children":583,"page":42},"\u002Ftechnical-reference\u002Fgroundcontrol","10.technical-reference\u002F10.groundcontrol",[584,588],{"title":585,"path":586,"stem":587},"Install & Setup","\u002Ftechnical-reference\u002Fgroundcontrol\u002Finstall","10.technical-reference\u002F10.groundcontrol\u002F10.install",{"title":589,"path":590,"stem":591},"Changelog","\u002Ftechnical-reference\u002Fgroundcontrol\u002Fchangelog","10.technical-reference\u002F10.groundcontrol\u002F20.changelog",{"title":593,"path":594,"stem":595,"children":596,"page":42},"UniteLabs SDK","\u002Ftechnical-reference\u002Fpython-sdk","10.technical-reference\u002F20.python-sdk",[597,600],{"title":585,"path":598,"stem":599},"\u002Ftechnical-reference\u002Fpython-sdk\u002Finstall","10.technical-reference\u002F20.python-sdk\u002F10.install",{"title":589,"path":601,"stem":602},"\u002Ftechnical-reference\u002Fpython-sdk\u002Fchangelog","10.technical-reference\u002F20.python-sdk\u002F20.changelog",{"title":604,"path":605,"stem":606,"children":607,"page":42},"Liquid Handling SDK","\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk","10.technical-reference\u002F30.python-liquid-handling-sdk",[608,611],{"title":585,"path":609,"stem":610},"\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk\u002Finstall","10.technical-reference\u002F30.python-liquid-handling-sdk\u002F10.install",{"title":589,"path":612,"stem":613},"\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk\u002Fchangelog","10.technical-reference\u002F30.python-liquid-handling-sdk\u002F20.changelog",{"title":163,"path":615,"stem":616,"children":617,"page":42},"\u002Ftechnical-reference\u002Flabware","10.technical-reference\u002F40.labware",[618,621],{"title":585,"path":619,"stem":620},"\u002Ftechnical-reference\u002Flabware\u002Finstall","10.technical-reference\u002F40.labware\u002F10.install",{"title":589,"path":622,"stem":623},"\u002Ftechnical-reference\u002Flabware\u002Fchangelog","10.technical-reference\u002F40.labware\u002F20.changelog",{"title":625,"path":626,"stem":627,"children":628,"page":42},"Python Omnibus","\u002Ftechnical-reference\u002Fpython-omnibus","10.technical-reference\u002F50.python-omnibus",[629,632],{"title":585,"path":630,"stem":631},"\u002Ftechnical-reference\u002Fpython-omnibus\u002Finstall","10.technical-reference\u002F50.python-omnibus\u002F10.install",{"title":589,"path":633,"stem":634},"\u002Ftechnical-reference\u002Fpython-omnibus\u002Fchangelog","10.technical-reference\u002F50.python-omnibus\u002F20.changelog",{"title":636,"path":637,"stem":638,"children":639,"page":42},"Python CDK","\u002Ftechnical-reference\u002Fpython-cdk","10.technical-reference\u002F60.python-cdk",[640,643],{"title":585,"path":641,"stem":642},"\u002Ftechnical-reference\u002Fpython-cdk\u002Finstall","10.technical-reference\u002F60.python-cdk\u002F10.install",{"title":589,"path":644,"stem":645},"\u002Ftechnical-reference\u002Fpython-cdk\u002Fchangelog","10.technical-reference\u002F60.python-cdk\u002F20.changelog",{"title":647,"path":648,"stem":649,"children":650},"Connector Development (CDK)","\u002Fconnector-development","20.connector-development",[651,653,672,705,713,744],{"title":647,"path":648,"stem":652},"20.connector-development\u002Findex",{"title":654,"path":655,"stem":656,"children":657,"page":42},"Getting Started","\u002Fconnector-development\u002Fgetting-started","20.connector-development\u002F10.getting-started",[658,661,665,668],{"title":536,"path":659,"stem":660},"\u002Fconnector-development\u002Fgetting-started\u002Foverview","20.connector-development\u002F10.getting-started\u002F10.overview",{"title":662,"path":663,"stem":664},"What's new","\u002Fconnector-development\u002Fgetting-started\u002Fwhats-new","20.connector-development\u002F10.getting-started\u002F20.whats-new",{"title":77,"path":666,"stem":667},"\u002Fconnector-development\u002Fgetting-started\u002Finstallation","20.connector-development\u002F10.getting-started\u002F30.installation",{"title":669,"path":670,"stem":671},"Contributing","\u002Fconnector-development\u002Fgetting-started\u002Fcontributing","20.connector-development\u002F10.getting-started\u002F40.contributing",{"title":673,"path":674,"stem":675,"children":676,"page":42},"Tutorial","\u002Fconnector-development\u002Ftutorial","20.connector-development\u002F20.tutorial",[677,681,685,689,693,697,701],{"title":678,"path":679,"stem":680},"Walkthrough","\u002Fconnector-development\u002Ftutorial\u002Fwalkthrough","20.connector-development\u002F20.tutorial\u002F00.walkthrough",{"title":682,"path":683,"stem":684},"SiLA Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fsila-endpoints","20.connector-development\u002F20.tutorial\u002F10.sila-endpoints",{"title":686,"path":687,"stem":688},"Data Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fdata-endpoints","20.connector-development\u002F20.tutorial\u002F20.data-endpoints",{"title":690,"path":691,"stem":692},"Controls","\u002Fconnector-development\u002Ftutorial\u002Fcontrols","20.connector-development\u002F20.tutorial\u002F30.controls",{"title":694,"path":695,"stem":696},"SiLA Data Types","\u002Fconnector-development\u002Ftutorial\u002Fdata-types","20.connector-development\u002F20.tutorial\u002F40.data-types",{"title":698,"path":699,"stem":700},"Feature","\u002Fconnector-development\u002Ftutorial\u002Fconnector-structure","20.connector-development\u002F20.tutorial\u002F70.connector-structure",{"title":702,"path":703,"stem":704},"Hardware Communication","\u002Fconnector-development\u002Ftutorial\u002Fhardware-communication","20.connector-development\u002F20.tutorial\u002F90.hardware-communication",{"title":94,"path":706,"stem":707,"children":708,"page":42},"\u002Fconnector-development\u002Fconcepts","20.connector-development\u002F30.concepts",[709],{"title":710,"path":711,"stem":712},"SiLA","\u002Fconnector-development\u002Fconcepts\u002Fsila","20.connector-development\u002F30.concepts\u002Fsila",{"title":187,"path":714,"stem":715,"children":716,"page":42},"\u002Fconnector-development\u002Fguides","20.connector-development\u002F40.guides",[717,721,725,729,733,736,740],{"title":718,"path":719,"stem":720},"Configuration","\u002Fconnector-development\u002Fguides\u002Fconfiguration","20.connector-development\u002F40.guides\u002F20.configuration",{"title":722,"path":723,"stem":724},"Deployment","\u002Fconnector-development\u002Fguides\u002Fdeployment","20.connector-development\u002F40.guides\u002F30.deployment",{"title":726,"path":727,"stem":728},"Security","\u002Fconnector-development\u002Fguides\u002Fsecurity","20.connector-development\u002F40.guides\u002F40.security",{"title":730,"path":731,"stem":732},"Subscriptions","\u002Fconnector-development\u002Fguides\u002Fsubscriptions","20.connector-development\u002F40.guides\u002F45.subscriptions",{"title":183,"path":734,"stem":735},"\u002Fconnector-development\u002Fguides\u002Ferror-handling","20.connector-development\u002F40.guides\u002F50.error-handling",{"title":737,"path":738,"stem":739},"Serial Troubleshooting","\u002Fconnector-development\u002Fguides\u002Fserial-troubleshooting","20.connector-development\u002F40.guides\u002F70.serial-troubleshooting",{"title":741,"path":742,"stem":743},"Testing","\u002Fconnector-development\u002Fguides\u002Ftesting","20.connector-development\u002F40.guides\u002F80.testing",{"title":745,"path":746,"stem":747,"children":748},"References","\u002Fconnector-development\u002Freference","20.connector-development\u002F50.reference\u002Findex",[749],{"title":745,"path":746,"stem":747},{"id":751,"title":167,"body":752,"description":3342,"extension":3343,"links":3344,"meta":3345,"navigation":860,"path":168,"seo":3346,"stem":169,"__hash__":3347},"docs\u002F03.operate\u002F10.concepts\u002F50.liquids.md",{"type":753,"value":754,"toc":3318},"minimark",[755,759,762,800,803,808,814,937,955,960,1220,1226,1229,1246,1250,1253,1267,1270,1272,1276,1282,1286,1388,1403,1465,1469,1494,1702,1716,1759,1761,1765,1772,1938,1942,1960,2111,2113,2117,2122,2234,2237,2251,2253,2257,2314,2323,2325,2329,2332,2406,2409,2420,2505,2518,2590,2593,2690,2706,2712,2797,2799,2803,2826,2830,2881,2885,3008,3015,3019,3103,3107,3170,3183,3185,3189,3208,3301,3303,3307,3314],[756,757,758],"p",{},"Every container in the labware model can hold liquid. How you represent that liquid determines how it behaves: whether it carries physical properties that influence pipetting, whether it carries a unique identifier that can be traced back to a sample, and how it homogenizes inside a mixture.",[756,760,761],{},"The SDK provides three representations, each with distinct semantics:",[763,764,765,778,791],"ul",{},[766,767,768,772,773,777],"li",{},[769,770,771],"strong",{},"Predefined liquids"," — common lab reagents accessed via ",[774,775,776],"code",{},"PredefinedLiquids"," (water, ethanol, DMSO, etc.)",[766,779,780,787,788],{},[769,781,782,783,786],{},"Custom ",[774,784,785],{},"Liquid"," instances"," — user-defined reagents with optional physical metadata, created with ",[774,789,790],{},"Liquid(\"name\")",[766,792,793,799],{},[769,794,795,798],{},[774,796,797],{},"Sample"," class"," — traceable biological specimens with unique identifiers",[801,802],"hr",{},[804,805,807],"h2",{"id":806},"predefined-liquids","Predefined Liquids",[756,809,810,811,813],{},"Predefined liquids are accessed through the ",[774,812,776],{}," registry:",[815,816,821],"pre",{"className":817,"code":818,"language":819,"meta":820,"style":820},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from unitelabs.labware import Liquid, PredefinedLiquids\n\n# Add predefined liquid to a container\ncontainer.add_liquid(PredefinedLiquids.WATER, volume=50_000)\ncontainer.add_liquid(PredefinedLiquids.ETHANOL, volume=10_000)\n","python","",[774,822,823,855,862,869,908],{"__ignoreMap":820},[824,825,828,832,836,840,843,846,849,852],"span",{"class":826,"line":827},"line",1,[824,829,831],{"class":830},"s7zQu","from",[824,833,835],{"class":834},"sTEyZ"," unitelabs",[824,837,839],{"class":838},"sMK4o",".",[824,841,842],{"class":834},"labware ",[824,844,845],{"class":830},"import",[824,847,848],{"class":834}," Liquid",[824,850,851],{"class":838},",",[824,853,854],{"class":834}," PredefinedLiquids\n",[824,856,858],{"class":826,"line":857},2,[824,859,861],{"emptyLinePlaceholder":860},true,"\n",[824,863,865],{"class":826,"line":864},3,[824,866,868],{"class":867},"sHwdD","# Add predefined liquid to a container\n",[824,870,872,875,877,881,884,886,888,892,894,898,901,905],{"class":826,"line":871},4,[824,873,874],{"class":834},"container",[824,876,839],{"class":838},[824,878,880],{"class":879},"s2Zo4","add_liquid",[824,882,883],{"class":838},"(",[824,885,776],{"class":879},[824,887,839],{"class":838},[824,889,891],{"class":890},"swJcz","WATER",[824,893,851],{"class":838},[824,895,897],{"class":896},"sHdIc"," volume",[824,899,900],{"class":838},"=",[824,902,904],{"class":903},"sbssI","50_000",[824,906,907],{"class":838},")\n",[824,909,911,913,915,917,919,921,923,926,928,930,932,935],{"class":826,"line":910},5,[824,912,874],{"class":834},[824,914,839],{"class":838},[824,916,880],{"class":879},[824,918,883],{"class":838},[824,920,776],{"class":879},[824,922,839],{"class":838},[824,924,925],{"class":890},"ETHANOL",[824,927,851],{"class":838},[824,929,897],{"class":896},[824,931,900],{"class":838},[824,933,934],{"class":903},"10_000",[824,936,907],{"class":838},[938,939,941],"callout",{"type":940},"warning",[756,942,943,946,947,950,951,954],{},[774,944,945],{},"Liquid.WATER"," still works but is ",[769,948,949],{},"deprecated"," and will be removed in a future version. Use ",[774,952,953],{},"PredefinedLiquids.WATER"," instead.",[956,957,959],"h3",{"id":958},"available-liquids","Available Liquids",[961,962,963,979],"table",{},[964,965,966],"thead",{},[967,968,969,973,976],"tr",{},[970,971,972],"th",{},"Constant",[970,974,975],{},"Display name",[970,977,978],{},"Built-in aliases",[980,981,982,996,1008,1030,1042,1063,1086,1098,1113,1131,1143,1155,1167,1194],"tbody",{},[967,983,984,990,993],{},[985,986,987],"td",{},[774,988,989],{},"ACETONITRILE",[985,991,992],{},"Acetonitrile",[985,994,995],{},"—",[967,997,998,1003,1006],{},[985,999,1000],{},[774,1001,1002],{},"BLOOD",[985,1004,1005],{},"Blood",[985,1007,995],{},[967,1009,1010,1015,1018],{},[985,1011,1012],{},[774,1013,1014],{},"BRAIN_HOMOGENATE",[985,1016,1017],{},"Brain-Homogenate",[985,1019,1020,1023,1024,1023,1027],{},[774,1021,1022],{},"Brain Homogenate",", ",[774,1025,1026],{},"brain_homogenate",[774,1028,1029],{},"BrainHomogenate",[967,1031,1032,1037,1040],{},[985,1033,1034],{},[774,1035,1036],{},"CHLOROFORM",[985,1038,1039],{},"Chloroform",[985,1041,995],{},[967,1043,1044,1049,1052],{},[985,1045,1046],{},[774,1047,1048],{},"DIMETHYL_SULFOXIDE",[985,1050,1051],{},"Dimethyl sulfoxide",[985,1053,1054,1023,1057,1023,1060],{},[774,1055,1056],{},"DMSO",[774,1058,1059],{},"dimethyl_sulfoxide",[774,1061,1062],{},"DimethylSulfoxide",[967,1064,1065,1069,1072],{},[985,1066,1067],{},[774,1068,925],{},[985,1070,1071],{},"Ethanol",[985,1073,1074,1023,1077,1023,1080,1023,1083],{},[774,1075,1076],{},"EtOH",[774,1078,1079],{},"ethanol",[774,1081,1082],{},"Ethyl Alcohol",[774,1084,1085],{},"ethyl_alcohol",[967,1087,1088,1093,1096],{},[985,1089,1090],{},[774,1091,1092],{},"GLYCERIN",[985,1094,1095],{},"Glycerin",[985,1097,995],{},[967,1099,1100,1105,1108],{},[985,1101,1102],{},[774,1103,1104],{},"METHANOL",[985,1106,1107],{},"Methanol",[985,1109,1110],{},[774,1111,1112],{},"MeOH",[967,1114,1115,1120,1123],{},[985,1116,1117],{},[774,1118,1119],{},"OCTANOL",[985,1121,1122],{},"Octanol",[985,1124,1125,1023,1128],{},[774,1126,1127],{},"1-Octanol",[774,1129,1130],{},"octanol",[967,1132,1133,1138,1141],{},[985,1134,1135],{},[774,1136,1137],{},"PBS_BUFFER",[985,1139,1140],{},"PBS Buffer",[985,1142,995],{},[967,1144,1145,1150,1153],{},[985,1146,1147],{},[774,1148,1149],{},"PLASMA",[985,1151,1152],{},"Plasma",[985,1154,995],{},[967,1156,1157,1162,1165],{},[985,1158,1159],{},[774,1160,1161],{},"SERUM",[985,1163,1164],{},"Serum",[985,1166,995],{},[967,1168,1169,1174,1177],{},[985,1170,1171],{},[774,1172,1173],{},"TE_BUFFER",[985,1175,1176],{},"Tris-EDTA buffer",[985,1178,1179,1023,1182,1023,1185,1023,1188,1023,1191],{},[774,1180,1181],{},"TE Buffer",[774,1183,1184],{},"te_buffer",[774,1186,1187],{},"TEBuffer",[774,1189,1190],{},"Tris EDTA buffer",[774,1192,1193],{},"tris_edta_buffer",[967,1195,1196,1200,1203],{},[985,1197,1198],{},[774,1199,891],{},[985,1201,1202],{},"Water",[985,1204,1205,1023,1208,1023,1211,1023,1214,1023,1217],{},[774,1206,1207],{},"H2O",[774,1209,1210],{},"h_2_o",[774,1212,1213],{},"H_2_O",[774,1215,1216],{},"water",[774,1218,1219],{},"Aqua",[756,1221,1222,1223,839],{},"All name and alias lookups are ",[769,1224,1225],{},"case-insensitive",[756,1227,1228],{},"To see the full table at runtime (including any custom aliases you have added):",[815,1230,1232],{"className":817,"code":1231,"language":819,"meta":820,"style":820},"PredefinedLiquids.show()\n",[774,1233,1234],{"__ignoreMap":820},[824,1235,1236,1238,1240,1243],{"class":826,"line":827},[824,1237,776],{"class":834},[824,1239,839],{"class":838},[824,1241,1242],{"class":879},"show",[824,1244,1245],{"class":838},"()\n",[956,1247,1249],{"id":1248},"liquid-properties","Liquid Properties",[756,1251,1252],{},"Liquids can optionally carry properties that influence pipetting behavior:",[763,1254,1255,1261],{},[766,1256,1257,1260],{},[769,1258,1259],{},"Viscosity"," — viscosity of the liquid in mPa·s",[766,1262,1263,1266],{},[769,1264,1265],{},"Density"," — density of the liquid in g\u002FmL",[756,1268,1269],{},"These properties can be used to select appropriate pipetting parameters (flow rates, mixing speeds, etc.) for optimal liquid transfer.",[801,1271],{},[804,1273,1275],{"id":1274},"custom-liquids","Custom Liquids",[756,1277,1278,1279,1281],{},"For substances that are not in the predefined list, create a ",[774,1280,785],{}," instance directly. You can optionally supply physical metadata.",[956,1283,1285],{"id":1284},"creating-a-custom-liquid","Creating a Custom Liquid",[815,1287,1289],{"className":817,"code":1288,"language":819,"meta":820,"style":820},"from unitelabs.labware import Liquid\n\n# Minimal — name only\ntris_buffer = Liquid(\"Tris buffer\")\n\n# With physical metadata\nlysis_buffer = Liquid(\"Lysis buffer\", viscosity=1.2, density=1.05)\n",[774,1290,1291,1306,1310,1315,1337,1341,1347],{"__ignoreMap":820},[824,1292,1293,1295,1297,1299,1301,1303],{"class":826,"line":827},[824,1294,831],{"class":830},[824,1296,835],{"class":834},[824,1298,839],{"class":838},[824,1300,842],{"class":834},[824,1302,845],{"class":830},[824,1304,1305],{"class":834}," Liquid\n",[824,1307,1308],{"class":826,"line":857},[824,1309,861],{"emptyLinePlaceholder":860},[824,1311,1312],{"class":826,"line":864},[824,1313,1314],{"class":867},"# Minimal — name only\n",[824,1316,1317,1320,1322,1324,1326,1329,1333,1335],{"class":826,"line":871},[824,1318,1319],{"class":834},"tris_buffer ",[824,1321,900],{"class":838},[824,1323,848],{"class":879},[824,1325,883],{"class":838},[824,1327,1328],{"class":838},"\"",[824,1330,1332],{"class":1331},"sfazB","Tris buffer",[824,1334,1328],{"class":838},[824,1336,907],{"class":838},[824,1338,1339],{"class":826,"line":910},[824,1340,861],{"emptyLinePlaceholder":860},[824,1342,1344],{"class":826,"line":1343},6,[824,1345,1346],{"class":867},"# With physical metadata\n",[824,1348,1350,1353,1355,1357,1359,1361,1364,1366,1368,1371,1373,1376,1378,1381,1383,1386],{"class":826,"line":1349},7,[824,1351,1352],{"class":834},"lysis_buffer ",[824,1354,900],{"class":838},[824,1356,848],{"class":879},[824,1358,883],{"class":838},[824,1360,1328],{"class":838},[824,1362,1363],{"class":1331},"Lysis buffer",[824,1365,1328],{"class":838},[824,1367,851],{"class":838},[824,1369,1370],{"class":896}," viscosity",[824,1372,900],{"class":838},[824,1374,1375],{"class":903},"1.2",[824,1377,851],{"class":838},[824,1379,1380],{"class":896}," density",[824,1382,900],{"class":838},[824,1384,1385],{"class":903},"1.05",[824,1387,907],{"class":838},[938,1389,1390],{"type":940},[756,1391,1392,1393,1395,1396,1399,1400,1402],{},"Creating a ",[774,1394,785],{}," with a name that matches a predefined liquid or its aliases raises ",[774,1397,1398],{},"ValueError",". Use the ",[774,1401,776],{}," constant instead.",[815,1404,1406],{"className":817,"code":1405,"language":819,"meta":820,"style":820},"# Raises ValueError — \"Water\" is a predefined liquid\nwater = Liquid(\"Water\")\n# ValueError: Liquid named 'Water' conflicts with predefined liquid 'Water'.\n#             Use PredefinedLiquids.WATER instead.\n\n# Correct approach\nwater = PredefinedLiquids.WATER\n",[774,1407,1408,1413,1432,1437,1442,1446,1451],{"__ignoreMap":820},[824,1409,1410],{"class":826,"line":827},[824,1411,1412],{"class":867},"# Raises ValueError — \"Water\" is a predefined liquid\n",[824,1414,1415,1418,1420,1422,1424,1426,1428,1430],{"class":826,"line":857},[824,1416,1417],{"class":834},"water ",[824,1419,900],{"class":838},[824,1421,848],{"class":879},[824,1423,883],{"class":838},[824,1425,1328],{"class":838},[824,1427,1202],{"class":1331},[824,1429,1328],{"class":838},[824,1431,907],{"class":838},[824,1433,1434],{"class":826,"line":864},[824,1435,1436],{"class":867},"# ValueError: Liquid named 'Water' conflicts with predefined liquid 'Water'.\n",[824,1438,1439],{"class":826,"line":871},[824,1440,1441],{"class":867},"#             Use PredefinedLiquids.WATER instead.\n",[824,1443,1444],{"class":826,"line":910},[824,1445,861],{"emptyLinePlaceholder":860},[824,1447,1448],{"class":826,"line":1343},[824,1449,1450],{"class":867},"# Correct approach\n",[824,1452,1453,1455,1457,1460,1462],{"class":826,"line":1349},[824,1454,1417],{"class":834},[824,1456,900],{"class":838},[824,1458,1459],{"class":834}," PredefinedLiquids",[824,1461,839],{"class":838},[824,1463,1464],{"class":890},"WATER\n",[956,1466,1468],{"id":1467},"equality-and-homogenization","Equality and Homogenization",[756,1470,1471,1472,1474,1475,1478,1479,1023,1482,1485,1486,1489,1490,1493],{},"Two ",[774,1473,785],{}," instances are ",[769,1476,1477],{},"equal"," when their ",[774,1480,1481],{},"name",[774,1483,1484],{},"viscosity",", and ",[774,1487,1488],{},"density"," all match. This means the same custom liquid defined in two places will homogenize correctly inside a ",[774,1491,1492],{},"Mixture",":",[815,1495,1497],{"className":817,"code":1496,"language":819,"meta":820,"style":820},"from unitelabs.labware import Liquid, Mixture\n\nbuf_a = Liquid(\"Lysis buffer\", viscosity=1.2, density=1.05)\nbuf_b = Liquid(\"Lysis buffer\", viscosity=1.2, density=1.05)\n\nmixture = Mixture()\nmixture.add(buf_a, 100)\nmixture.add(buf_b, 50)\n\nprint(len(mixture.ingredients))  # 1 — homogenized into one entry\nprint(mixture.volume)            # 150\n",[774,1498,1499,1518,1522,1557,1592,1596,1608,1630,1651,1656,1682],{"__ignoreMap":820},[824,1500,1501,1503,1505,1507,1509,1511,1513,1515],{"class":826,"line":827},[824,1502,831],{"class":830},[824,1504,835],{"class":834},[824,1506,839],{"class":838},[824,1508,842],{"class":834},[824,1510,845],{"class":830},[824,1512,848],{"class":834},[824,1514,851],{"class":838},[824,1516,1517],{"class":834}," Mixture\n",[824,1519,1520],{"class":826,"line":857},[824,1521,861],{"emptyLinePlaceholder":860},[824,1523,1524,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553,1555],{"class":826,"line":864},[824,1525,1526],{"class":834},"buf_a ",[824,1528,900],{"class":838},[824,1530,848],{"class":879},[824,1532,883],{"class":838},[824,1534,1328],{"class":838},[824,1536,1363],{"class":1331},[824,1538,1328],{"class":838},[824,1540,851],{"class":838},[824,1542,1370],{"class":896},[824,1544,900],{"class":838},[824,1546,1375],{"class":903},[824,1548,851],{"class":838},[824,1550,1380],{"class":896},[824,1552,900],{"class":838},[824,1554,1385],{"class":903},[824,1556,907],{"class":838},[824,1558,1559,1562,1564,1566,1568,1570,1572,1574,1576,1578,1580,1582,1584,1586,1588,1590],{"class":826,"line":871},[824,1560,1561],{"class":834},"buf_b ",[824,1563,900],{"class":838},[824,1565,848],{"class":879},[824,1567,883],{"class":838},[824,1569,1328],{"class":838},[824,1571,1363],{"class":1331},[824,1573,1328],{"class":838},[824,1575,851],{"class":838},[824,1577,1370],{"class":896},[824,1579,900],{"class":838},[824,1581,1375],{"class":903},[824,1583,851],{"class":838},[824,1585,1380],{"class":896},[824,1587,900],{"class":838},[824,1589,1385],{"class":903},[824,1591,907],{"class":838},[824,1593,1594],{"class":826,"line":910},[824,1595,861],{"emptyLinePlaceholder":860},[824,1597,1598,1601,1603,1606],{"class":826,"line":1343},[824,1599,1600],{"class":834},"mixture ",[824,1602,900],{"class":838},[824,1604,1605],{"class":879}," Mixture",[824,1607,1245],{"class":838},[824,1609,1610,1613,1615,1618,1620,1623,1625,1628],{"class":826,"line":1349},[824,1611,1612],{"class":834},"mixture",[824,1614,839],{"class":838},[824,1616,1617],{"class":879},"add",[824,1619,883],{"class":838},[824,1621,1622],{"class":879},"buf_a",[824,1624,851],{"class":838},[824,1626,1627],{"class":903}," 100",[824,1629,907],{"class":838},[824,1631,1633,1635,1637,1639,1641,1644,1646,1649],{"class":826,"line":1632},8,[824,1634,1612],{"class":834},[824,1636,839],{"class":838},[824,1638,1617],{"class":879},[824,1640,883],{"class":838},[824,1642,1643],{"class":879},"buf_b",[824,1645,851],{"class":838},[824,1647,1648],{"class":903}," 50",[824,1650,907],{"class":838},[824,1652,1654],{"class":826,"line":1653},9,[824,1655,861],{"emptyLinePlaceholder":860},[824,1657,1659,1662,1664,1667,1669,1671,1673,1676,1679],{"class":826,"line":1658},10,[824,1660,1661],{"class":879},"print",[824,1663,883],{"class":838},[824,1665,1666],{"class":879},"len",[824,1668,883],{"class":838},[824,1670,1612],{"class":879},[824,1672,839],{"class":838},[824,1674,1675],{"class":890},"ingredients",[824,1677,1678],{"class":838},"))",[824,1680,1681],{"class":867},"  # 1 — homogenized into one entry\n",[824,1683,1685,1687,1689,1691,1693,1696,1699],{"class":826,"line":1684},11,[824,1686,1661],{"class":879},[824,1688,883],{"class":838},[824,1690,1612],{"class":879},[824,1692,839],{"class":838},[824,1694,1695],{"class":890},"volume",[824,1697,1698],{"class":838},")",[824,1700,1701],{"class":867},"            # 150\n",[756,1703,1704,1705,1707,1708,1711,1712,1715],{},"Each ",[774,1706,785],{}," instance also carries a short unique ",[774,1709,1710],{},"identifier"," (8-character hex string) that is ",[769,1713,1714],{},"excluded from equality and hashing"," — it exists solely for tracking purposes:",[815,1717,1719],{"className":817,"code":1718,"language":819,"meta":820,"style":820},"liq = Liquid(\"My Buffer\")\nprint(liq.identifier)  # e.g. \"3f8a1c2b\"\n",[774,1720,1721,1741],{"__ignoreMap":820},[824,1722,1723,1726,1728,1730,1732,1734,1737,1739],{"class":826,"line":827},[824,1724,1725],{"class":834},"liq ",[824,1727,900],{"class":838},[824,1729,848],{"class":879},[824,1731,883],{"class":838},[824,1733,1328],{"class":838},[824,1735,1736],{"class":1331},"My Buffer",[824,1738,1328],{"class":838},[824,1740,907],{"class":838},[824,1742,1743,1745,1747,1750,1752,1754,1756],{"class":826,"line":857},[824,1744,1661],{"class":879},[824,1746,883],{"class":838},[824,1748,1749],{"class":879},"liq",[824,1751,839],{"class":838},[824,1753,1710],{"class":890},[824,1755,1698],{"class":838},[824,1757,1758],{"class":867},"  # e.g. \"3f8a1c2b\"\n",[801,1760],{},[804,1762,1764],{"id":1763},"custom-aliases","Custom Aliases",[756,1766,1767,1768,1771],{},"If your lab uses a different name for a predefined liquid (e.g. your LIMS stores water as ",[774,1769,1770],{},"\"AquaDest\"","), you can register an alias so that name resolves to the correct predefined instance and homogenizes transparently:",[815,1773,1775],{"className":817,"code":1774,"language":819,"meta":820,"style":820},"from unitelabs.labware import PredefinedLiquids, Mixture\n\n# Register the alias once at startup\nPredefinedLiquids.add_alias(PredefinedLiquids.WATER, \"AquaDest\")\n\n# From that point on, the alias is interchangeable with the predefined liquid\nmixture = Mixture()\nmixture.add(\"AquaDest\", 100)\nmixture.add(\"Water\", 50)\n\nprint(len(mixture.ingredients))  # 1 — both resolve to the same entry\nprint(mixture.volume)            # 150\n",[774,1776,1777,1795,1799,1804,1833,1837,1842,1852,1874,1896,1900,1921],{"__ignoreMap":820},[824,1778,1779,1781,1783,1785,1787,1789,1791,1793],{"class":826,"line":827},[824,1780,831],{"class":830},[824,1782,835],{"class":834},[824,1784,839],{"class":838},[824,1786,842],{"class":834},[824,1788,845],{"class":830},[824,1790,1459],{"class":834},[824,1792,851],{"class":838},[824,1794,1517],{"class":834},[824,1796,1797],{"class":826,"line":857},[824,1798,861],{"emptyLinePlaceholder":860},[824,1800,1801],{"class":826,"line":864},[824,1802,1803],{"class":867},"# Register the alias once at startup\n",[824,1805,1806,1808,1810,1813,1815,1817,1819,1821,1823,1826,1829,1831],{"class":826,"line":871},[824,1807,776],{"class":834},[824,1809,839],{"class":838},[824,1811,1812],{"class":879},"add_alias",[824,1814,883],{"class":838},[824,1816,776],{"class":879},[824,1818,839],{"class":838},[824,1820,891],{"class":890},[824,1822,851],{"class":838},[824,1824,1825],{"class":838}," \"",[824,1827,1828],{"class":1331},"AquaDest",[824,1830,1328],{"class":838},[824,1832,907],{"class":838},[824,1834,1835],{"class":826,"line":910},[824,1836,861],{"emptyLinePlaceholder":860},[824,1838,1839],{"class":826,"line":1343},[824,1840,1841],{"class":867},"# From that point on, the alias is interchangeable with the predefined liquid\n",[824,1843,1844,1846,1848,1850],{"class":826,"line":1349},[824,1845,1600],{"class":834},[824,1847,900],{"class":838},[824,1849,1605],{"class":879},[824,1851,1245],{"class":838},[824,1853,1854,1856,1858,1860,1862,1864,1866,1868,1870,1872],{"class":826,"line":1632},[824,1855,1612],{"class":834},[824,1857,839],{"class":838},[824,1859,1617],{"class":879},[824,1861,883],{"class":838},[824,1863,1328],{"class":838},[824,1865,1828],{"class":1331},[824,1867,1328],{"class":838},[824,1869,851],{"class":838},[824,1871,1627],{"class":903},[824,1873,907],{"class":838},[824,1875,1876,1878,1880,1882,1884,1886,1888,1890,1892,1894],{"class":826,"line":1653},[824,1877,1612],{"class":834},[824,1879,839],{"class":838},[824,1881,1617],{"class":879},[824,1883,883],{"class":838},[824,1885,1328],{"class":838},[824,1887,1202],{"class":1331},[824,1889,1328],{"class":838},[824,1891,851],{"class":838},[824,1893,1648],{"class":903},[824,1895,907],{"class":838},[824,1897,1898],{"class":826,"line":1658},[824,1899,861],{"emptyLinePlaceholder":860},[824,1901,1902,1904,1906,1908,1910,1912,1914,1916,1918],{"class":826,"line":1684},[824,1903,1661],{"class":879},[824,1905,883],{"class":838},[824,1907,1666],{"class":879},[824,1909,883],{"class":838},[824,1911,1612],{"class":879},[824,1913,839],{"class":838},[824,1915,1675],{"class":890},[824,1917,1678],{"class":838},[824,1919,1920],{"class":867},"  # 1 — both resolve to the same entry\n",[824,1922,1924,1926,1928,1930,1932,1934,1936],{"class":826,"line":1923},12,[824,1925,1661],{"class":879},[824,1927,883],{"class":838},[824,1929,1612],{"class":879},[824,1931,839],{"class":838},[824,1933,1695],{"class":890},[824,1935,1698],{"class":838},[824,1937,1701],{"class":867},[956,1939,1941],{"id":1940},"rules-for-aliases","Rules for Aliases",[763,1943,1944,1954,1957],{},[766,1945,1946,1947,1950,1951,1953],{},"An alias can only be added to a ",[769,1948,1949],{},"predefined"," liquid; custom ",[774,1952,785],{}," instances cannot have aliases.",[766,1955,1956],{},"Aliases must not conflict with any existing predefined name or existing alias (comparison is case-insensitive).",[766,1958,1959],{},"Multiple aliases for the same liquid are allowed.",[815,1961,1963],{"className":817,"code":1962,"language":819,"meta":820,"style":820},"# Multiple aliases for the same liquid — OK\nPredefinedLiquids.add_alias(PredefinedLiquids.DIMETHYL_SULFOXIDE, \"Dimethylsulfoxide\")\nPredefinedLiquids.add_alias(PredefinedLiquids.DIMETHYL_SULFOXIDE, \"Me2SO\")\n\n# Raises ValueError — alias conflicts with the predefined name \"Water\"\nPredefinedLiquids.add_alias(PredefinedLiquids.ETHANOL, \"Water\")\n\n# Raises ValueError — alias targets a custom liquid, not a predefined one\ncustom = Liquid(\"My Buffer\")\nPredefinedLiquids.add_alias(custom, \"MB\")\n",[774,1964,1965,1970,1997,2024,2028,2033,2059,2063,2068,2087],{"__ignoreMap":820},[824,1966,1967],{"class":826,"line":827},[824,1968,1969],{"class":867},"# Multiple aliases for the same liquid — OK\n",[824,1971,1972,1974,1976,1978,1980,1982,1984,1986,1988,1990,1993,1995],{"class":826,"line":857},[824,1973,776],{"class":834},[824,1975,839],{"class":838},[824,1977,1812],{"class":879},[824,1979,883],{"class":838},[824,1981,776],{"class":879},[824,1983,839],{"class":838},[824,1985,1048],{"class":890},[824,1987,851],{"class":838},[824,1989,1825],{"class":838},[824,1991,1992],{"class":1331},"Dimethylsulfoxide",[824,1994,1328],{"class":838},[824,1996,907],{"class":838},[824,1998,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017,2020,2022],{"class":826,"line":864},[824,2000,776],{"class":834},[824,2002,839],{"class":838},[824,2004,1812],{"class":879},[824,2006,883],{"class":838},[824,2008,776],{"class":879},[824,2010,839],{"class":838},[824,2012,1048],{"class":890},[824,2014,851],{"class":838},[824,2016,1825],{"class":838},[824,2018,2019],{"class":1331},"Me2SO",[824,2021,1328],{"class":838},[824,2023,907],{"class":838},[824,2025,2026],{"class":826,"line":871},[824,2027,861],{"emptyLinePlaceholder":860},[824,2029,2030],{"class":826,"line":910},[824,2031,2032],{"class":867},"# Raises ValueError — alias conflicts with the predefined name \"Water\"\n",[824,2034,2035,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057],{"class":826,"line":1343},[824,2036,776],{"class":834},[824,2038,839],{"class":838},[824,2040,1812],{"class":879},[824,2042,883],{"class":838},[824,2044,776],{"class":879},[824,2046,839],{"class":838},[824,2048,925],{"class":890},[824,2050,851],{"class":838},[824,2052,1825],{"class":838},[824,2054,1202],{"class":1331},[824,2056,1328],{"class":838},[824,2058,907],{"class":838},[824,2060,2061],{"class":826,"line":1349},[824,2062,861],{"emptyLinePlaceholder":860},[824,2064,2065],{"class":826,"line":1632},[824,2066,2067],{"class":867},"# Raises ValueError — alias targets a custom liquid, not a predefined one\n",[824,2069,2070,2073,2075,2077,2079,2081,2083,2085],{"class":826,"line":1653},[824,2071,2072],{"class":834},"custom ",[824,2074,900],{"class":838},[824,2076,848],{"class":879},[824,2078,883],{"class":838},[824,2080,1328],{"class":838},[824,2082,1736],{"class":1331},[824,2084,1328],{"class":838},[824,2086,907],{"class":838},[824,2088,2089,2091,2093,2095,2097,2100,2102,2104,2107,2109],{"class":826,"line":1658},[824,2090,776],{"class":834},[824,2092,839],{"class":838},[824,2094,1812],{"class":879},[824,2096,883],{"class":838},[824,2098,2099],{"class":879},"custom",[824,2101,851],{"class":838},[824,2103,1825],{"class":838},[824,2105,2106],{"class":1331},"MB",[824,2108,1328],{"class":838},[824,2110,907],{"class":838},[801,2112],{},[804,2114,2116],{"id":2115},"samples","Samples",[756,2118,2119,2121],{},[774,2120,797],{}," represents traceable biological specimens with unique identifiers:",[815,2123,2125],{"className":817,"code":2124,"language":819,"meta":820,"style":820},"from unitelabs.labware import Sample\n\n# Create a sample with tracking information\nsample = Sample(\n    name=\"MySample\",\n    identifier=\"SAMPLE-001\",\n)\n\n# Add to container\ncontainer.add_liquid(sample, volume=100)\n",[774,2126,2127,2142,2146,2151,2164,2181,2197,2201,2205,2210],{"__ignoreMap":820},[824,2128,2129,2131,2133,2135,2137,2139],{"class":826,"line":827},[824,2130,831],{"class":830},[824,2132,835],{"class":834},[824,2134,839],{"class":838},[824,2136,842],{"class":834},[824,2138,845],{"class":830},[824,2140,2141],{"class":834}," Sample\n",[824,2143,2144],{"class":826,"line":857},[824,2145,861],{"emptyLinePlaceholder":860},[824,2147,2148],{"class":826,"line":864},[824,2149,2150],{"class":867},"# Create a sample with tracking information\n",[824,2152,2153,2156,2158,2161],{"class":826,"line":871},[824,2154,2155],{"class":834},"sample ",[824,2157,900],{"class":838},[824,2159,2160],{"class":879}," Sample",[824,2162,2163],{"class":838},"(\n",[824,2165,2166,2169,2171,2173,2176,2178],{"class":826,"line":910},[824,2167,2168],{"class":896},"    name",[824,2170,900],{"class":838},[824,2172,1328],{"class":838},[824,2174,2175],{"class":1331},"MySample",[824,2177,1328],{"class":838},[824,2179,2180],{"class":838},",\n",[824,2182,2183,2186,2188,2190,2193,2195],{"class":826,"line":1343},[824,2184,2185],{"class":896},"    identifier",[824,2187,900],{"class":838},[824,2189,1328],{"class":838},[824,2191,2192],{"class":1331},"SAMPLE-001",[824,2194,1328],{"class":838},[824,2196,2180],{"class":838},[824,2198,2199],{"class":826,"line":1349},[824,2200,907],{"class":838},[824,2202,2203],{"class":826,"line":1632},[824,2204,861],{"emptyLinePlaceholder":860},[824,2206,2207],{"class":826,"line":1653},[824,2208,2209],{"class":867},"# Add to container\n",[824,2211,2212,2214,2216,2218,2220,2223,2225,2227,2229,2232],{"class":826,"line":1658},[824,2213,874],{"class":834},[824,2215,839],{"class":838},[824,2217,880],{"class":879},[824,2219,883],{"class":838},[824,2221,2222],{"class":879},"sample",[824,2224,851],{"class":838},[824,2226,897],{"class":896},[824,2228,900],{"class":838},[824,2230,2231],{"class":903},"100",[824,2233,907],{"class":838},[756,2235,2236],{},"Samples are appropriate when you need:",[763,2238,2239,2245],{},[766,2240,2241,2244],{},[769,2242,2243],{},"Traceability"," — unique identification and tracking of biological specimens",[766,2246,2247,2250],{},[769,2248,2249],{},"Isolation"," — each sample is distinct, even if the names match",[801,2252],{},[804,2254,2256],{"id":2255},"when-to-use-each-type","When to Use Each Type",[961,2258,2259,2272],{},[964,2260,2261],{},[967,2262,2263,2266,2269],{},[970,2264,2265],{},"Type",[970,2267,2268],{},"Use Case",[970,2270,2271],{},"Key Features",[980,2273,2274,2286,2300],{},[967,2275,2276,2280,2283],{},[985,2277,2278],{},[769,2279,771],{},[985,2281,2282],{},"Standard reagents (water, ethanol, etc.)",[985,2284,2285],{},"Registry-based, aliases, no construction",[967,2287,2288,2294,2297],{},[985,2289,2290],{},[769,2291,782,2292,786],{},[774,2293,785],{},[985,2295,2296],{},"Workflow-specific buffers and reagents",[985,2298,2299],{},"Optional viscosity\u002Fdensity, homogenization",[967,2301,2302,2308,2311],{},[985,2303,2304],{},[769,2305,2306,798],{},[774,2307,797],{},[985,2309,2310],{},"Traceable biological specimens",[985,2312,2313],{},"Unique IDs, tracking, never homogenized",[756,2315,2316,2317,2319,2320,2322],{},"Use predefined liquids for standard reagents, custom ",[774,2318,785],{}," instances for workflow-specific reagents, and ",[774,2321,797],{}," for traceable biological specimens.",[801,2324],{},[804,2326,2328],{"id":2327},"pre-filling-labware","Pre-filling Labware",[756,2330,2331],{},"Adding liquid one container at a time is useful in many cases as volumes or liquids vary between the wells and granural control is needed.",[815,2333,2335],{"className":817,"code":2334,"language":819,"meta":820,"style":820},"plate = Standard96Plate(identifier=\"plate\")\nfor well in plate:\n    well.container.add_liquid(PredefinedLiquids.WATER, 100)\n",[774,2336,2337,2362,2379],{"__ignoreMap":820},[824,2338,2339,2342,2344,2347,2349,2351,2353,2355,2358,2360],{"class":826,"line":827},[824,2340,2341],{"class":834},"plate ",[824,2343,900],{"class":838},[824,2345,2346],{"class":879}," Standard96Plate",[824,2348,883],{"class":838},[824,2350,1710],{"class":896},[824,2352,900],{"class":838},[824,2354,1328],{"class":838},[824,2356,2357],{"class":1331},"plate",[824,2359,1328],{"class":838},[824,2361,907],{"class":838},[824,2363,2364,2367,2370,2373,2376],{"class":826,"line":857},[824,2365,2366],{"class":830},"for",[824,2368,2369],{"class":834}," well ",[824,2371,2372],{"class":830},"in",[824,2374,2375],{"class":834}," plate",[824,2377,2378],{"class":838},":\n",[824,2380,2381,2384,2386,2388,2390,2392,2394,2396,2398,2400,2402,2404],{"class":826,"line":864},[824,2382,2383],{"class":834},"    well",[824,2385,839],{"class":838},[824,2387,874],{"class":890},[824,2389,839],{"class":838},[824,2391,880],{"class":879},[824,2393,883],{"class":838},[824,2395,776],{"class":879},[824,2397,839],{"class":838},[824,2399,891],{"class":890},[824,2401,851],{"class":838},[824,2403,1627],{"class":903},[824,2405,907],{"class":838},[756,2407,2408],{},"If a whole plate is filled with same volume of a liquid, a simpler method on labware construction can be preferable.",[756,2410,2411,2412,2415,2416,2419],{},"Pipettable labware — plates and troughs — accept a ",[774,2413,2414],{},"filled_with"," argument that does this at construction, mirroring the way a ",[774,2417,2418],{},"TipRack"," is pre-filled with tips:",[815,2421,2423],{"className":817,"code":2422,"language":819,"meta":820,"style":820},"from unitelabs.labware import PredefinedLiquids\nfrom unitelabs.labware.plates import Standard96Plate\n\nplate = Standard96Plate(identifier=\"plate\", filled_with=(PredefinedLiquids.WATER, 100))\n",[774,2424,2425,2439,2460,2464],{"__ignoreMap":820},[824,2426,2427,2429,2431,2433,2435,2437],{"class":826,"line":827},[824,2428,831],{"class":830},[824,2430,835],{"class":834},[824,2432,839],{"class":838},[824,2434,842],{"class":834},[824,2436,845],{"class":830},[824,2438,854],{"class":834},[824,2440,2441,2443,2445,2447,2450,2452,2455,2457],{"class":826,"line":857},[824,2442,831],{"class":830},[824,2444,835],{"class":834},[824,2446,839],{"class":838},[824,2448,2449],{"class":834},"labware",[824,2451,839],{"class":838},[824,2453,2454],{"class":834},"plates ",[824,2456,845],{"class":830},[824,2458,2459],{"class":834}," Standard96Plate\n",[824,2461,2462],{"class":826,"line":864},[824,2463,861],{"emptyLinePlaceholder":860},[824,2465,2466,2468,2470,2472,2474,2476,2478,2480,2482,2484,2486,2489,2492,2494,2496,2498,2500,2502],{"class":826,"line":871},[824,2467,2341],{"class":834},[824,2469,900],{"class":838},[824,2471,2346],{"class":879},[824,2473,883],{"class":838},[824,2475,1710],{"class":896},[824,2477,900],{"class":838},[824,2479,1328],{"class":838},[824,2481,2357],{"class":1331},[824,2483,1328],{"class":838},[824,2485,851],{"class":838},[824,2487,2488],{"class":896}," filled_with",[824,2490,2491],{"class":838},"=(",[824,2493,776],{"class":879},[824,2495,839],{"class":838},[824,2497,891],{"class":890},[824,2499,851],{"class":838},[824,2501,1627],{"class":903},[824,2503,2504],{"class":838},"))\n",[756,2506,2507,2509,2510,2513,2514,2517],{},[774,2508,2414],{}," takes a single ",[774,2511,2512],{},"(liquid, volume)"," pair, or a list of pairs to pre-fill each container with a mixture. The volume is the amount in microliters added to ",[769,2515,2516],{},"every"," container of the labware:",[815,2519,2521],{"className":817,"code":2520,"language":819,"meta":820,"style":820},"plate = Standard96Plate(\n    identifier=\"plate\",\n    filled_with=[(PredefinedLiquids.WATER, 80), (PredefinedLiquids.ETHANOL, 20)],\n)\n",[774,2522,2523,2533,2547,2586],{"__ignoreMap":820},[824,2524,2525,2527,2529,2531],{"class":826,"line":827},[824,2526,2341],{"class":834},[824,2528,900],{"class":838},[824,2530,2346],{"class":879},[824,2532,2163],{"class":838},[824,2534,2535,2537,2539,2541,2543,2545],{"class":826,"line":857},[824,2536,2185],{"class":896},[824,2538,900],{"class":838},[824,2540,1328],{"class":838},[824,2542,2357],{"class":1331},[824,2544,1328],{"class":838},[824,2546,2180],{"class":838},[824,2548,2549,2552,2555,2557,2559,2561,2563,2566,2569,2572,2574,2576,2578,2580,2583],{"class":826,"line":864},[824,2550,2551],{"class":896},"    filled_with",[824,2553,2554],{"class":838},"=[(",[824,2556,776],{"class":879},[824,2558,839],{"class":838},[824,2560,891],{"class":890},[824,2562,851],{"class":838},[824,2564,2565],{"class":903}," 80",[824,2567,2568],{"class":838},"),",[824,2570,2571],{"class":838}," (",[824,2573,776],{"class":879},[824,2575,839],{"class":838},[824,2577,925],{"class":890},[824,2579,851],{"class":838},[824,2581,2582],{"class":903}," 20",[824,2584,2585],{"class":838},")],\n",[824,2587,2588],{"class":826,"line":871},[824,2589,907],{"class":838},[756,2591,2592],{},"\"Every container\" is what keeps the behavior uniform across labware shapes — the argument fills whatever the labware's containers are, whether that is 96 wells on a plate, the twelve independent channels of a column trough, or the single reservoir of a simple trough:",[815,2594,2596],{"className":817,"code":2595,"language":819,"meta":820,"style":820},"from unitelabs.labware.troughs import StandardTrough12Column\n\n# Each of the twelve columns is filled with the same mixture\nreservoir = StandardTrough12Column(\n    identifier=\"reservoir\",\n    filled_with=[(PredefinedLiquids.WATER, 80), (PredefinedLiquids.ETHANOL, 20)],\n)\n",[774,2597,2598,2618,2622,2627,2639,2654,2686],{"__ignoreMap":820},[824,2599,2600,2602,2604,2606,2608,2610,2613,2615],{"class":826,"line":827},[824,2601,831],{"class":830},[824,2603,835],{"class":834},[824,2605,839],{"class":838},[824,2607,2449],{"class":834},[824,2609,839],{"class":838},[824,2611,2612],{"class":834},"troughs ",[824,2614,845],{"class":830},[824,2616,2617],{"class":834}," StandardTrough12Column\n",[824,2619,2620],{"class":826,"line":857},[824,2621,861],{"emptyLinePlaceholder":860},[824,2623,2624],{"class":826,"line":864},[824,2625,2626],{"class":867},"# Each of the twelve columns is filled with the same mixture\n",[824,2628,2629,2632,2634,2637],{"class":826,"line":871},[824,2630,2631],{"class":834},"reservoir ",[824,2633,900],{"class":838},[824,2635,2636],{"class":879}," StandardTrough12Column",[824,2638,2163],{"class":838},[824,2640,2641,2643,2645,2647,2650,2652],{"class":826,"line":910},[824,2642,2185],{"class":896},[824,2644,900],{"class":838},[824,2646,1328],{"class":838},[824,2648,2649],{"class":1331},"reservoir",[824,2651,1328],{"class":838},[824,2653,2180],{"class":838},[824,2655,2656,2658,2660,2662,2664,2666,2668,2670,2672,2674,2676,2678,2680,2682,2684],{"class":826,"line":1343},[824,2657,2551],{"class":896},[824,2659,2554],{"class":838},[824,2661,776],{"class":879},[824,2663,839],{"class":838},[824,2665,891],{"class":890},[824,2667,851],{"class":838},[824,2669,2565],{"class":903},[824,2671,2568],{"class":838},[824,2673,2571],{"class":838},[824,2675,776],{"class":879},[824,2677,839],{"class":838},[824,2679,925],{"class":890},[824,2681,851],{"class":838},[824,2683,2582],{"class":903},[824,2685,2585],{"class":838},[824,2687,2688],{"class":826,"line":1349},[824,2689,907],{"class":838},[938,2691,2692],{"type":940},[756,2693,2694,2695,2697,2698,2701,2702,2705],{},"A ",[774,2696,2414],{}," volume that exceeds a container's ",[774,2699,2700],{},"max_volume"," fails immediately at construction with ",[774,2703,2704],{},"LiquidOverflowError",", rather than silently overfilling.",[756,2707,2708,2709,2711],{},"To fill only some containers, leave ",[774,2710,2414],{}," off and add liquid to the wells you want — slicing works with chess-key ranges:",[815,2713,2715],{"className":817,"code":2714,"language":819,"meta":820,"style":820},"plate = Standard96Plate(identifier=\"plate\")\nfor well in plate[\"A1\":\"H1\"]:\n    well.container.add_liquid(PredefinedLiquids.WATER, 100)\n",[774,2716,2717,2739,2771],{"__ignoreMap":820},[824,2718,2719,2721,2723,2725,2727,2729,2731,2733,2735,2737],{"class":826,"line":827},[824,2720,2341],{"class":834},[824,2722,900],{"class":838},[824,2724,2346],{"class":879},[824,2726,883],{"class":838},[824,2728,1710],{"class":896},[824,2730,900],{"class":838},[824,2732,1328],{"class":838},[824,2734,2357],{"class":1331},[824,2736,1328],{"class":838},[824,2738,907],{"class":838},[824,2740,2741,2743,2745,2747,2749,2752,2754,2757,2759,2761,2763,2766,2768],{"class":826,"line":857},[824,2742,2366],{"class":830},[824,2744,2369],{"class":834},[824,2746,2372],{"class":830},[824,2748,2375],{"class":834},[824,2750,2751],{"class":838},"[",[824,2753,1328],{"class":838},[824,2755,2756],{"class":1331},"A1",[824,2758,1328],{"class":838},[824,2760,1493],{"class":838},[824,2762,1328],{"class":838},[824,2764,2765],{"class":1331},"H1",[824,2767,1328],{"class":838},[824,2769,2770],{"class":838},"]:\n",[824,2772,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791,2793,2795],{"class":826,"line":864},[824,2774,2383],{"class":834},[824,2776,839],{"class":838},[824,2778,874],{"class":890},[824,2780,839],{"class":838},[824,2782,880],{"class":879},[824,2784,883],{"class":838},[824,2786,776],{"class":879},[824,2788,839],{"class":838},[824,2790,891],{"class":890},[824,2792,851],{"class":838},[824,2794,1627],{"class":903},[824,2796,907],{"class":838},[801,2798],{},[804,2800,2802],{"id":2801},"migration-guide","Migration Guide",[756,2804,2805,2806,2808,2809,2812,2813,2816,2817,2819,2820,2822,2823,2825],{},"The ",[774,2807,785],{}," type was redesigned from a ",[774,2810,2811],{},"str"," enum into a ",[769,2814,2815],{},"frozen dataclass",". Predefined substances are no longer members of the ",[774,2818,785],{}," class itself; they live in the ",[774,2821,776],{}," registry. Custom liquids are now plain ",[774,2824,785],{}," instances.",[956,2827,2829],{"id":2828},"import-changes","Import changes",[815,2831,2833],{"className":817,"code":2832,"language":819,"meta":820,"style":820},"# Before\nfrom unitelabs.labware import Liquid\n\n# After\nfrom unitelabs.labware import Liquid, PredefinedLiquids\n",[774,2834,2835,2840,2854,2858,2863],{"__ignoreMap":820},[824,2836,2837],{"class":826,"line":827},[824,2838,2839],{"class":867},"# Before\n",[824,2841,2842,2844,2846,2848,2850,2852],{"class":826,"line":857},[824,2843,831],{"class":830},[824,2845,835],{"class":834},[824,2847,839],{"class":838},[824,2849,842],{"class":834},[824,2851,845],{"class":830},[824,2853,1305],{"class":834},[824,2855,2856],{"class":826,"line":864},[824,2857,861],{"emptyLinePlaceholder":860},[824,2859,2860],{"class":826,"line":871},[824,2861,2862],{"class":867},"# After\n",[824,2864,2865,2867,2869,2871,2873,2875,2877,2879],{"class":826,"line":910},[824,2866,831],{"class":830},[824,2868,835],{"class":834},[824,2870,839],{"class":838},[824,2872,842],{"class":834},[824,2874,845],{"class":830},[824,2876,848],{"class":834},[824,2878,851],{"class":838},[824,2880,854],{"class":834},[956,2882,2884],{"id":2883},"accessing-predefined-liquids","Accessing predefined liquids",[815,2886,2888],{"className":817,"code":2887,"language":819,"meta":820,"style":820},"# Before — Liquid was a str(enum.Enum)\ncontainer.add_liquid(Liquid.WATER, volume=50_000)\ncontainer.add_liquid(Liquid.DMSO, volume=10_000)\n\n# After — predefined liquids live in PredefinedLiquids\ncontainer.add_liquid(PredefinedLiquids.WATER, volume=50_000)\ncontainer.add_liquid(PredefinedLiquids.DIMETHYL_SULFOXIDE, volume=10_000)\n",[774,2889,2890,2895,2921,2947,2951,2956,2982],{"__ignoreMap":820},[824,2891,2892],{"class":826,"line":827},[824,2893,2894],{"class":867},"# Before — Liquid was a str(enum.Enum)\n",[824,2896,2897,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919],{"class":826,"line":857},[824,2898,874],{"class":834},[824,2900,839],{"class":838},[824,2902,880],{"class":879},[824,2904,883],{"class":838},[824,2906,785],{"class":879},[824,2908,839],{"class":838},[824,2910,891],{"class":890},[824,2912,851],{"class":838},[824,2914,897],{"class":896},[824,2916,900],{"class":838},[824,2918,904],{"class":903},[824,2920,907],{"class":838},[824,2922,2923,2925,2927,2929,2931,2933,2935,2937,2939,2941,2943,2945],{"class":826,"line":864},[824,2924,874],{"class":834},[824,2926,839],{"class":838},[824,2928,880],{"class":879},[824,2930,883],{"class":838},[824,2932,785],{"class":879},[824,2934,839],{"class":838},[824,2936,1056],{"class":890},[824,2938,851],{"class":838},[824,2940,897],{"class":896},[824,2942,900],{"class":838},[824,2944,934],{"class":903},[824,2946,907],{"class":838},[824,2948,2949],{"class":826,"line":871},[824,2950,861],{"emptyLinePlaceholder":860},[824,2952,2953],{"class":826,"line":910},[824,2954,2955],{"class":867},"# After — predefined liquids live in PredefinedLiquids\n",[824,2957,2958,2960,2962,2964,2966,2968,2970,2972,2974,2976,2978,2980],{"class":826,"line":1343},[824,2959,874],{"class":834},[824,2961,839],{"class":838},[824,2963,880],{"class":879},[824,2965,883],{"class":838},[824,2967,776],{"class":879},[824,2969,839],{"class":838},[824,2971,891],{"class":890},[824,2973,851],{"class":838},[824,2975,897],{"class":896},[824,2977,900],{"class":838},[824,2979,904],{"class":903},[824,2981,907],{"class":838},[824,2983,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004,3006],{"class":826,"line":1349},[824,2985,874],{"class":834},[824,2987,839],{"class":838},[824,2989,880],{"class":879},[824,2991,883],{"class":838},[824,2993,776],{"class":879},[824,2995,839],{"class":838},[824,2997,1048],{"class":890},[824,2999,851],{"class":838},[824,3001,897],{"class":896},[824,3003,900],{"class":838},[824,3005,934],{"class":903},[824,3007,907],{"class":838},[756,3009,3010,3012,3013,954],{},[774,3011,945],{}," is deprecated and will be removed in a future version — use ",[774,3014,953],{},[956,3016,3018],{"id":3017},"string-comparison-no-longer-works-directly","String comparison no longer works directly",[815,3020,3022],{"className":817,"code":3021,"language":819,"meta":820,"style":820},"# Before — Liquid was a str enum, so this was True\nLiquid.WATER == \"Water\"  # True\n\n# After — Liquid is a frozen dataclass\nPredefinedLiquids.WATER == \"Water\"  # False\nstr(PredefinedLiquids.WATER) == \"Water\"  # True — compare via str() if needed\n",[774,3023,3024,3029,3049,3053,3058,3077],{"__ignoreMap":820},[824,3025,3026],{"class":826,"line":827},[824,3027,3028],{"class":867},"# Before — Liquid was a str enum, so this was True\n",[824,3030,3031,3033,3035,3037,3040,3042,3044,3046],{"class":826,"line":857},[824,3032,785],{"class":834},[824,3034,839],{"class":838},[824,3036,891],{"class":890},[824,3038,3039],{"class":838}," ==",[824,3041,1825],{"class":838},[824,3043,1202],{"class":1331},[824,3045,1328],{"class":838},[824,3047,3048],{"class":867},"  # True\n",[824,3050,3051],{"class":826,"line":864},[824,3052,861],{"emptyLinePlaceholder":860},[824,3054,3055],{"class":826,"line":871},[824,3056,3057],{"class":867},"# After — Liquid is a frozen dataclass\n",[824,3059,3060,3062,3064,3066,3068,3070,3072,3074],{"class":826,"line":910},[824,3061,776],{"class":834},[824,3063,839],{"class":838},[824,3065,891],{"class":890},[824,3067,3039],{"class":838},[824,3069,1825],{"class":838},[824,3071,1202],{"class":1331},[824,3073,1328],{"class":838},[824,3075,3076],{"class":867},"  # False\n",[824,3078,3079,3082,3084,3086,3088,3090,3092,3094,3096,3098,3100],{"class":826,"line":1343},[824,3080,2811],{"class":3081},"sBMFI",[824,3083,883],{"class":838},[824,3085,776],{"class":879},[824,3087,839],{"class":838},[824,3089,891],{"class":890},[824,3091,1698],{"class":838},[824,3093,3039],{"class":838},[824,3095,1825],{"class":838},[824,3097,1202],{"class":1331},[824,3099,1328],{"class":838},[824,3101,3102],{"class":867},"  # True — compare via str() if needed\n",[956,3104,3106],{"id":3105},"constructing-a-liquid-with-a-predefined-name-is-now-forbidden","Constructing a Liquid with a predefined name is now forbidden",[815,3108,3110],{"className":817,"code":3109,"language":819,"meta":820,"style":820},"# Before — silently created a duplicate\nwater = Liquid(\"Water\")\n\n# After — raises ValueError\nwater = Liquid(\"Water\")\n# ValueError: Liquid named 'Water' conflicts with predefined liquid 'Water'.\n#             Use PredefinedLiquids.WATER instead.\n",[774,3111,3112,3117,3135,3139,3144,3162,3166],{"__ignoreMap":820},[824,3113,3114],{"class":826,"line":827},[824,3115,3116],{"class":867},"# Before — silently created a duplicate\n",[824,3118,3119,3121,3123,3125,3127,3129,3131,3133],{"class":826,"line":857},[824,3120,1417],{"class":834},[824,3122,900],{"class":838},[824,3124,848],{"class":879},[824,3126,883],{"class":838},[824,3128,1328],{"class":838},[824,3130,1202],{"class":1331},[824,3132,1328],{"class":838},[824,3134,907],{"class":838},[824,3136,3137],{"class":826,"line":864},[824,3138,861],{"emptyLinePlaceholder":860},[824,3140,3141],{"class":826,"line":871},[824,3142,3143],{"class":867},"# After — raises ValueError\n",[824,3145,3146,3148,3150,3152,3154,3156,3158,3160],{"class":826,"line":910},[824,3147,1417],{"class":834},[824,3149,900],{"class":838},[824,3151,848],{"class":879},[824,3153,883],{"class":838},[824,3155,1328],{"class":838},[824,3157,1202],{"class":1331},[824,3159,1328],{"class":838},[824,3161,907],{"class":838},[824,3163,3164],{"class":826,"line":1343},[824,3165,1436],{"class":867},[824,3167,3168],{"class":826,"line":1349},[824,3169,1441],{"class":867},[756,3171,3172,3173,1023,3176,1023,3179,3182],{},"The same guard applies to all built-in aliases (",[774,3174,3175],{},"\"H2O\"",[774,3177,3178],{},"\"DMSO\"",[774,3180,3181],{},"\"EtOH\"",", etc.) and is case-insensitive.",[801,3184],{},[804,3186,3188],{"id":3187},"predefinedliquids-api-reference","PredefinedLiquids API Reference",[815,3190,3192],{"className":817,"code":3191,"language":819,"meta":820,"style":820},"from unitelabs.labware import PredefinedLiquids\n",[774,3193,3194],{"__ignoreMap":820},[824,3195,3196,3198,3200,3202,3204,3206],{"class":826,"line":827},[824,3197,831],{"class":830},[824,3199,835],{"class":834},[824,3201,839],{"class":838},[824,3203,842],{"class":834},[824,3205,845],{"class":830},[824,3207,854],{"class":834},[961,3209,3210,3220],{},[964,3211,3212],{},[967,3213,3214,3217],{},[970,3215,3216],{},"Method \u002F attribute",[970,3218,3219],{},"Description",[980,3221,3222,3231,3247,3264,3274,3291],{},[967,3223,3224,3228],{},[985,3225,3226],{},[774,3227,953],{},[985,3229,3230],{},"Direct attribute access to any predefined liquid",[967,3232,3233,3238],{},[985,3234,3235],{},[774,3236,3237],{},"PredefinedLiquids.get_by_name(name)",[985,3239,3240,3241,3243,3244],{},"Case-insensitive lookup by name or alias; returns ",[774,3242,785],{}," or ",[774,3245,3246],{},"None",[967,3248,3249,3254],{},[985,3250,3251],{},[774,3252,3253],{},"PredefinedLiquids.get_by_identifier(id)",[985,3255,3256,3257,3259,3260,3243,3262],{},"Lookup by the ",[774,3258,1710],{}," field; returns ",[774,3261,785],{},[774,3263,3246],{},[967,3265,3266,3271],{},[985,3267,3268],{},[774,3269,3270],{},"PredefinedLiquids.add_alias(liquid, alias)",[985,3272,3273],{},"Register a custom alias for a predefined liquid",[967,3275,3276,3281],{},[985,3277,3278],{},[774,3279,3280],{},"PredefinedLiquids.find(**kwargs)",[985,3282,3283,3284,1023,3286,3288,3289],{},"Filter predefined liquids by ",[774,3285,1481],{},[774,3287,1484],{},", and\u002For ",[774,3290,1488],{},[967,3292,3293,3298],{},[985,3294,3295],{},[774,3296,3297],{},"PredefinedLiquids.show()",[985,3299,3300],{},"Print a formatted table of all predefined liquids, aliases, and properties",[801,3302],{},[804,3304,3306],{"id":3305},"integration-with-liquid-classes","Integration with Liquid Classes",[756,3308,3309,3310,839],{},"Custom liquids with viscosity and density properties can influence liquid-class selection for pipetting parameters. See ",[3311,3312,171],"a",{"href":3313},"\u002Foperate\u002Fconcepts\u002Fliquid-classes\u002F",[3315,3316,3317],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":820,"searchDepth":827,"depth":857,"links":3319},[3320,3324,3328,3331,3332,3333,3334,3340,3341],{"id":806,"depth":857,"text":807,"children":3321},[3322,3323],{"id":958,"depth":864,"text":959},{"id":1248,"depth":864,"text":1249},{"id":1274,"depth":857,"text":1275,"children":3325},[3326,3327],{"id":1284,"depth":864,"text":1285},{"id":1467,"depth":864,"text":1468},{"id":1763,"depth":857,"text":1764,"children":3329},[3330],{"id":1940,"depth":864,"text":1941},{"id":2115,"depth":857,"text":2116},{"id":2255,"depth":857,"text":2256},{"id":2327,"depth":857,"text":2328},{"id":2801,"depth":857,"text":2802,"children":3335},[3336,3337,3338,3339],{"id":2828,"depth":864,"text":2829},{"id":2883,"depth":864,"text":2884},{"id":3017,"depth":864,"text":3018},{"id":3105,"depth":864,"text":3106},{"id":3187,"depth":857,"text":3188},{"id":3305,"depth":857,"text":3306},"How to represent liquids in the SDK — predefined types, custom instances with physical metadata, traceable samples, and custom aliases — and when to use each.","md",null,{},{"title":167,"description":3342},"Do3BAIDI-f_YAS-1ZPgCi-5AddMdlcVIXT2W32bOqRM",[3349,3351],{"title":163,"path":164,"stem":165,"description":3350},"Understand what labware is and how it is modelled in UniteLabs.",{"title":171,"path":172,"stem":173,"description":3352},"Why pipetting needs a parameter model, and how Hamilton and Bravo diverge in how they express it.",1783607763780]