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