@opentrons/step-generation 0.3.14-alpha.0 → 0.3.16-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/index.cjs +1 -1
- package/lib/index.mjs +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
package/lib/index.cjs
CHANGED
|
@@ -51,7 +51,7 @@ ${K(m.join(`,
|
|
|
51
51
|
`))},
|
|
52
52
|
)`;return{commands:p,python:h}},hI=(e,t,r)=>{const{axes:n,skipIfMountPositionOk:a}=e,s={commandType:"home",key:D(),params:{axes:n,skipIfMountPositionOk:a}},o=[...n!=null?[`axes=${Ls(n)},
|
|
53
53
|
`]:[],...a!=null?[`skipIfMountPositionOk=${N(a)},
|
|
54
|
-
`]:[]],i=`${be}.home(${o.join(", ")})`;return{commands:[s],python:i}},_I=(e,t,r)=>{const{pipetteId:n,axis:a,distance:s}=e,{pipetteEntities:o}=t,i=o[n].pythonName,l=[{commandType:"moveRelative",key:D(),params:{pipetteId:n,axis:a,distance:s}}],u=[`axis=${N(a)}`,`distance=${s}`];return{commands:l,python:`${i}.move_axes_relative(${u.join(", ")})`}},yI=(e,t,r)=>{const{pipetteId:n,coordinates:a,minimumZHeight:s,forceDirect:o}=e,{pipetteEntities:i}=t,l=i[n].pythonName,u=[{commandType:"moveToCoordinates",key:D(),params:{pipetteId:n,coordinates:a,minimumZHeight:s,forceDirect:o}}],p=[`coordinates=${Cc([a.x,a.y,a.z])}`,...o?["force_direct=True"]:[],...s?[`minimum_z_height=${s}`]:[]];return{commands:u,python:`${l}.move_axes_to(${p.join(", ")})`}},bI=(e,t,r)=>{const{pipetteId:n,labwareId:a,wellName:s,wellLocation:o}=e,{pipetteEntities:i}=t,l=i[n].pythonName,u=t.labwareEntities[a].pythonName;return{commands:[{commandType:"tryLiquidProbe",key:D(),params:{pipetteId:n,labwareId:a,wellName:s,wellLocation:o}}],python:`${l}.detect_liquid_presence(${u}[${N(s)}])`}},q_=(e,t,r)=>{const n=t.moduleEntities[e.moduleId].pythonName;return{commands:[{commandType:"heaterShaker/closeLabwareLatch",key:D(),params:{moduleId:e.moduleId}}],python:`${n}.close_labware_latch()`}},Gu=(e,t,r)=>{const n=t.moduleEntities[e.moduleId].pythonName;return{commands:[{commandType:"heaterShaker/deactivateHeater",key:D(),params:{moduleId:e.moduleId}}],python:`${n}.deactivate_heater()`}},TI=["1","4","7","10"],$_=(e,t,r)=>{const{pipetteEntities:n,labwareEntities:a,moduleEntities:s}=t,o=r.modules[e.moduleId].slot,i=Object.keys(n)[0],l=n[i]?.spec;if(!((l?.displayCategory==="FLEX"||l?.channels===96)??!1)&&Uy(r.labware,a,o)){const d=TI.includes(o)?"right":"left";return{errors:[Wb(d)]}}const p=s[e.moduleId].pythonName;return{commands:[{commandType:"heaterShaker/openLabwareLatch",key:D(),params:{moduleId:e.moduleId}}],python:`${p}.open_labware_latch()`}},V_=(e,t,r)=>{const{moduleEntities:n}=t,{moduleId:a,rpm:s}=e;if(a===null)return{errors:[Q()]};if(n[a]?.type!==c.HEATERSHAKER_MODULE_TYPE)throw new Error(`expected module ${a} to be heaterShaker, got ${n[a]?.type}`);const o=n[a].pythonName;return{commands:[{commandType:"heaterShaker/setAndWaitForShakeSpeed",key:D(),params:{moduleId:a,rpm:s}}],python:`${o}.set_and_wait_for_shake_speed(${s})`}},Wu=(e,t,r)=>{const n=t.moduleEntities[e.moduleId].pythonName;return{commands:[{commandType:"heaterShaker/deactivateShaker",key:D(),params:{moduleId:e.moduleId}}],python:`${n}.deactivate_shaker()`}},Uc=(e,t,r)=>{const{moduleId:n}=e,{moduleEntities:a,labwareEntities:s}=t,o=[],i=a[n].pythonName,u=Object.values(r.labware).filter(f=>f.stack.includes(n)).find(f=>f.stack.find(_=>s[_]?.def.allowedRoles?.includes("lid")&&s[_]?.def.parameters.loadName!=="opentrons_tough_pcr_auto_sealing_lid")),p=u!=null?xc(u.stack):null,d=p!=null?s[p].def.metadata.displayName:null;return d!=null&&o.push(rT({lidDisplayName:d})),o.length>0?{errors:o}:{commands:[{commandType:"thermocycler/closeLid",key:D(),params:{moduleId:n}}],python:`${i}.close_lid()`}},B_=(e,t,r)=>{const n=t.moduleEntities[e.moduleId].pythonName;return{commands:[{commandType:"thermocycler/deactivateBlock",key:D(),params:{moduleId:e.moduleId}}],python:`${n}.deactivate_block()`}},x_=(e,t,r)=>{const n=t.moduleEntities[e.moduleId].pythonName;return{commands:[{commandType:"thermocycler/deactivateLid",key:D(),params:{moduleId:e.moduleId}}],python:`${n}.deactivate_lid()`}},H_=(e,t,r)=>{const n=t.moduleEntities[e.moduleId].pythonName;return{commands:[{commandType:"thermocycler/openLid",key:D(),params:{moduleId:e.moduleId}}],python:`${n}.open_lid()`}},z_=(e,t,r)=>{e.celsius!==void 0&&console.warn("'volume' param not implemented for thermocycler/setTargetBlockTemperature, should not be set!");const n=t.moduleEntities[e.moduleId].pythonName;return{commands:[{commandType:"thermocycler/setTargetBlockTemperature",key:D(),params:{moduleId:e.moduleId,celsius:e.celsius}}],python:`${n}.set_block_temperature(${e.celsius})`}},qc=(e,t,r)=>{const{moduleId:n,celsius:a}=e,s=t.moduleEntities[n].pythonName;return{commands:[{commandType:"thermocycler/setTargetLidTemperature",key:D(),params:{moduleId:n,celsius:a}}],python:`${s}.set_lid_temperature(${a})`}};function O(e,t){return(r,n)=>e(t,r,n)}function R(e,t){return(r,n)=>{const a=e(t,r,n);if("python"in a){const{python:s,...o}=a;return o}return a}}const je="__air__",zr="source_well",Mn="dest_well";function j_(e){return Kh.includes(e.parameters.loadName)}const gI=e=>(e.parameters.quirks??[]).includes("vacuumModuleDock"),G_=(e,t,r)=>{const s=c.getDeckDefFromRobotType(r).cutoutFixtures.find(l=>l.id.includes(t))?.providesAddressableAreas,i=(l=>{if(s!=null){for(const u in s)if(s[u].includes(l))return u}return null})(e);if(i==null)throw Error(`expected to find cutoutId from addressableAreaName ${e} but could not`);return i};function W_(e){switch(e){case 1:return c.ONE_CHANNEL_WASTE_CHUTE_ADDRESSABLE_AREA;case 8:return c.EIGHT_CHANNEL_WASTE_CHUTE_ADDRESSABLE_AREA;case 96:return c.NINETY_SIX_CHANNEL_WASTE_CHUTE_ADDRESSABLE_AREA}}function $c(e){const t=c.getDeckDefFromRobotType(e==="cutout12"?c.OT2_ROBOT_TYPE:c.FLEX_ROBOT_TYPE);let r=null;return t.robot.model===c.FLEX_ROBOT_TYPE&&(r=t.cutoutFixtures.find(n=>n.id==="trashBinAdapter")?.providesAddressableAreas??null),t.robot.model===c.FLEX_ROBOT_TYPE&&r==null&&console.error(`expected to find a list of cutouts for the Flex but could not with trashLocation ${e}`),r!=null?r[e]?.[0]:"fixedTrash"}function Y_(e){if(e==="fixedTrash")return"cutout12";const r=c.getDeckDefFromRobotType(c.FLEX_ROBOT_TYPE).cutoutFixtures.find(n=>n.id==="trashBinAdapter")?.providesAddressableAreas??null;if(r==null)return console.error("Could not find trashBinAdapter cutouts for Flex"),null;for(const[n,a]of Object.entries(r))if(a.includes(e))return n;return console.error(`Could not find trashLocation for addressableAreaName ${e}`),null}function Fn(e,t,r,n){return e[n]!=null?"labware":t[n]!=null?"wasteChute":r[n]!=null?"trashBin":(console.error(`expected to determine if dest labware is a labware or waste chute with destLabware ${n} but could not`),null)}function K_(e,t){return Sn(bn(t),r=>e)}function mr(e){return ut(e,(t,r,n)=>n===je?t:t+r.volume,0)}function er(e,t){const r=mr(t);if(r===0)return{source:t,dest:{[je]:{volume:e}}};if(e>r)return{source:rr(t,()=>({volume:0})),dest:{...t,[je]:{volume:e-r}}};const n=ut(t,(a,s,o)=>({...a,[o]:s.volume/r}),{});return Object.keys(t).reduce((a,s)=>{const o=n[s]*e;return{source:{...a.source,[s]:{volume:t[s].volume-o}},dest:{...a.dest,[s]:{volume:o}}}},{source:{},dest:{}})}function hr(e,t){return{...t,...ut(e,(r,n,a)=>{const o=a in t?n.volume+t[a].volume:n.volume;return{...r,[a]:{volume:o}}},{})}}function Vc(e,t,r){const n=e===1?[r]:c.getWellNamePerMultiTip(t,r,e);if(!n)return console.warn(e===1?`Invalid well: ${r}`:`For labware def (URI ${c.getLabwareDefURI(t)}), with primary well ${r}, no wells are accessible by 8-channel's 1st tip`),{wellsForTips:[],allWellsShared:!1};const a=n.every(s=>s&&s===n[0]);return{wellsForTips:n,allWellsShared:a}}const X_=e=>{const{pipette:t,sourceLabwareId:r,sourceWell:n,destLabwareId:a,destWell:s,blowoutLocation:o,flowRate:i,offsetFromTopMm:l,invariantContext:u}=e;if(!o)return[];const{trashBinEntities:p,wasteChuteEntities:d}=u;let f=null,_=null;return o===zr?(f=r,_=n):o===Mn&&(f=a,_=s),_!=null&&f!=null?[O(Rc,{pipetteId:t,labwareId:f,wellName:_,flowRate:i,wellLocation:{origin:"top",offset:{z:l}}})]:d[o]!=null?[O(pb,{pipetteId:t,flowRate:i,wasteChuteId:Object.keys(d)[0]})]:[O(cb,{pipetteId:t,trashId:Object.keys(p)[0],flowRate:i})]};function Z_(e){const{labwareEntities:t,pipetteEntities:r,wasteChuteEntities:n,trashBinEntities:a}=e;return{pipettes:ut(r,(s,o,i)=>{const l=o.spec;return{...s,[i]:Q_(l.channels,{})}},{}),labware:ut(t,(s,o,i)=>({...s,[i]:rr(o.def.wells,()=>({}))}),{}),trashBins:ut(a,(s,o,i)=>({...s,[i]:{}}),{}),wasteChute:ut(n,(s,o,i)=>({...s,[i]:{}}),{})}}function Q_(e,t){return bn(e).reduce((r,n)=>({...r,[n]:t}),{})}const J_=e=>{const{blowoutLocation:t,sourceLabware:r,destLabware:n,sourceWell:a,destWell:s}=e;return t===zr&&r!=null&&a!=null?{dispenseAirGapLabware:r,dispenseAirGapWell:a}:{dispenseAirGapLabware:n,dispenseAirGapWell:s}};function Bc(e){const{invariantContext:t,labwareLocations:r,moduleLocations:n={},pipetteLocations:a}=e;return{labware:r,modules:n,pipettes:a,liquidState:Z_(t),tipState:{pipettes:ut(a,(s,o,i)=>o.mount?{...s,[i]:{hasTip:!1,tiprackURI:null}}:s,{}),tipracks:ut(r,(s,o,i)=>{const l=t.labwareEntities[i].def;if(!c.getIsTiprack(l))return s;const u=rr(l.wells,()=>Ra);return{...s,[i]:u}},{})}}}const ey=(e,t)=>e.tipracks[t]!=null?Object.values(e.tipracks[t]).some(r=>r!==ue):!1,ty=(e,t)=>e.labware[t]!=null?Object.values(e.labware[t]).some(r=>Object.values(r).some(n=>n.volume>0)):!1,II=(e,t,r)=>{const{destinationId:n,pipetteId:a,volume:s,flowRate:o,offsetFromBottomMm:i,well:l,xOffset:u,yOffset:p,tipRack:d,primaryNozzle:f,nozzles:_}=e,{labwareEntities:m,trashBinEntities:h,wasteChuteEntities:b}=t,T=Fn(m,b,h,n);let y=[];return T==="labware"&&i!=null&&l!=null?y=[O(kc,{pipetteId:a,volume:s,labwareId:n,wellName:l,flowRate:o,wellLocation:{origin:"bottom",offset:{z:i,x:u,y:p}},tipRack:d,primaryNozzle:f,nozzles:_})]:T==="wasteChute"?y=[O(cA,{pipetteId:a,volume:s,flowRate:o,wasteChuteId:b[n].id})]:y=[O(uA,{pipetteId:a,volume:s,flowRate:o,trashId:h[n].id})],ae(y,t,r)},EI=(e,t,r)=>{const{destinationId:n,pipetteId:a,zOffset:s,well:o}=e,{labwareEntities:i,wasteChuteEntities:l,trashBinEntities:u}=t,p=Fn(i,l,u,n);let d=[];return p==="labware"&&o!=null?d=[O(B,{pipetteId:a,labwareId:n,wellName:o,wellLocation:{origin:"bottom",offset:{x:0,y:0,z:s}}})]:p==="wasteChute"?d=[O(Fe,{pipetteId:a,fixtureId:l[n].id,offset:{x:0,y:0,z:0}})]:d=[O(Fe,{pipetteId:a,fixtureId:u[n].id,offset:wt})],ae(d,t,r)},wI=(e,t,r)=>{const{blowOutLocation:n,destinationId:a,destWell:s,flowRate:o,pipetteId:i,sourceId:l,sourceWell:u,volume:p}=e,{labwareEntities:d,trashBinEntities:f,wasteChuteEntities:_}=t,m=Fn(d,_,f,a);let h=[];if(m==="labware"&&s!=null){const{dispenseAirGapLabware:b,dispenseAirGapWell:T}=J_({blowoutLocation:n,sourceLabware:l,destLabware:a,sourceWell:u,destWell:s});h=[O(aA,{flowRate:o,pipetteId:i,labwareId:b,wellName:T,volume:p,type:"dispense"})]}else m==="wasteChute"?h=[O(nA,{pipetteId:i,volume:p,flowRate:o,wasteChuteId:_[a].id})]:h=[O(rA,{pipetteId:i,volume:p,flowRate:o,trashId:f[a].id})];return ae(h,t,r)},SI=(e,t,r)=>{const{pipetteId:n,destinationId:a,well:s,zOffset:o,seconds:i}=e,{labwareEntities:l,trashBinEntities:u,wasteChuteEntities:p}=t,d=Fn(l,p,u,a);let f=[];return s!=null&&d==="labware"?f=[O(B,{pipetteId:n,labwareId:a,wellName:s,wellLocation:{origin:"bottom",offset:{x:0,y:0,z:o}}}),O(me,{seconds:i})]:d==="wasteChute"?f=[O(Fe,{pipetteId:n,fixtureId:a,offset:wt}),O(me,{seconds:i})]:f=[O(Fe,{pipetteId:n,fixtureId:a,offset:wt}),O(me,{seconds:i})],ae(f,t,r)},G=(e,t=!1)=>{if(e==null)return console.error("expected to find stack but could not"),"unknown slot";{const r=e[e.length-1];return t?`STACKER ${r.slice(-2,-1)}`:r}},AI=e=>e===c.VACUUM_MODULE_DOCK_A4_ADDRESSABLE_AREA?Xh:e,xc=e=>e==null?(console.error("expected to find stack but could not"),"unknown top location"):e[0],ry=e=>e.length>=2?e[1]:null,fa=e=>{const{slot:t,labwareState:r,modulesState:n}=e,a=Object.values(n).find(({slot:s,moduleState:o})=>s===t&&o.type===c.FLEX_STACKER_MODULE_TYPE);if(a!=null){const s=a.moduleState.labwareOnShuttle;return s==null?[]:[s.lidLabwareId,s.primaryLabwareId,s.adapterLabwareId].filter(i=>i!=null)}return Object.values(r).reduce((s,{stack:o})=>(o[o.length-1]===t&&o.length>s.length&&(s=o),s),[])},Hc=e=>c.FLEX_SINGLE_SLOT_BY_CUTOUT_ID[c.FLEX_CUTOUT_BY_SLOT_ID[e]],ny=e=>{const t=c.FLEX_STACKER_ADDRESSABLE_AREAS.indexOf(e);return t===-1?null:ve[t]},LI=e=>{const t=ny(e);return t!=null?Hc(t):null},ay=(e,t,r)=>{if(e==null)return null;if(ve.includes(e)){const n=Hc(e);return Object.entries(t).some(([s,o])=>r[s]?.type===c.FLEX_STACKER_MODULE_TYPE&&o.slot===n)?n:e}return e},Rs=e=>{const t=c.getDeckDefFromRobotType(c.FLEX_ROBOT_TYPE),r=`${e[0]}3`,n=c.FLEX_CUTOUT_BY_SLOT_ID[r],a=t.cutoutFixtures.find(({id:s})=>s===c.FLEX_STACKER_V1_FIXTURE)?.providesAddressableAreas[n];return c.FLEX_STACKER_ADDRESSABLE_AREAS.find(s=>a?.includes(s))??null},sy=(e,t,r,n)=>{if(t.length===0)return{isCompatible:!0,isAboveStackLimit:!1};let a=!1;const s=t.find(u=>u in n);s!=null&&(a=n[s].type===c.FLEX_STACKER_MODULE_TYPE&&t.includes(Ze));const o=xc(t);let i=!0,l=!1;if(o in r){const u=r[e],p=r[o],d=t.filter(g=>r[g]!=null),f=d.filter(g=>r[g]?.def?.allowedRoles?.includes("lid"))[0],_=d.filter(g=>r[g]?.def?.allowedRoles?.includes("adapter"))[0],m=p.def.parameters.loadName,h=d.filter(g=>!r[g]?.def?.allowedRoles?.includes("adapter")&&!r[g]?.def?.allowedRoles?.includes("lid"))[0];if(a){const g=c.getMaxPoolCount({labwareDefinitions:{primary:r[h]?.def??null,adapter:r[_]?.def??null,lid:r[f]?.def??null},model:c.FLEX_STACKER_MODULE_V1});l=t.length>g}else{const g=p.def.stackLimit??1,k=m===u.def.parameters.loadName,v=t.filter(q=>r[q]?.def.parameters.loadName===m)?.length;l=k&&v>=g}const b=u.def.parameters.loadName==="opentrons_tough_universal_lid",T=p.def.metadata.displayCategory==="tubeRack",y=p.def.metadata.displayCategory==="aluminumBlock",A=p.def.parameters.isTiprack,I=(p.def.allowedRoles??[]).includes("lid"),S=j_(p.def),L=t.some(g=>g in r&&gI(r[g].def)),E=u.def.parameters.quirks?.includes("vacuumModuleDock")??!1;i=(u.def.parameters.quirks?.includes("filterPlate")??!1)&&!I&&!A&&!(p.def.parameters.quirks?.includes("filterPlate")??!1)||!L&&E||(p.def.parameters.quirks?.includes("providesStackingDefault")??!1)&&!S||u.def.compatibleParentLabware?.some(g=>g===m)||Object.keys(u.def.stackingOffsetWithLabware??{}).some(g=>g===m)||b&&!T&&!y&&!A&&(p.def.parameters.loadName==="opentrons_tough_universal_lid"||!I)}else if(o in n){const u=n[o],{model:p}=u;i=Object.keys(r[e].def.stackingOffsetWithModule??{}).some(d=>p===d)}return{isCompatible:i,isAboveStackLimit:l}},Fa=(e,t)=>t?.find(r=>e[r]!=null)??null,OI=(e,t,r)=>t?e:r?Wh[e]:e,ks=(e,t,r)=>{if(t==="offDeck"&&r==null)return console.error("offDeck slot is not allowed to be used without an offDeckOverrideId"),[];const n=ma(t),a=oy(t),s=OI(t,n,a),o=Object.values(e).filter(i=>i.stack.includes(s)&&(r==null||i.stack.includes(r))&&i.stack.includes(Ze)===a&&i.stack.includes(pc)===n);return o.length===0?[]:a?o.at(-1)?.stack??[]:n?o.at(-1)?.stack??[]:o.toSorted((i,l)=>l.stack.length-i.stack.length)[0]?.stack??[]},RI=(e,t)=>Object.values(t).filter(r=>r.stack.includes(e)).sort((r,n)=>n.stack.length-r.stack.length)[0]?.stack[0],ua=(e,t,r,n=!0)=>{const a=c.linearInterpolate(e,t)??0,s=c.linearInterpolate(e,r)??0;return e+(n?a:0)+s},zc=e=>{const{path:t,volume:r,pipetteSpecs:n,tiprackDefinition:a,conditioningByVolume:s,disposalByVolume:o,numDispenseWells:i,numAspirateWells:l,aspirateAirGapByVolume:u}=e,{liquids:p}=n,f=r<p.default.minVolume&&"lowVolumeDefault"in p?p.lowVolumeDefault.maxVolume:p.default.maxVolume,_=a?.wells.A1.totalLiquidVolume,m=_==null?f:Math.min(f,_),h=r*2,b=s!=null?c.linearInterpolate(h,s)??0:0,y=a?.namespace!=="opentrons"||s!=null&&o!=null&&m>=h+b+(c.linearInterpolate(h,o)??0)+(b===0?c.linearInterpolate(h,u)??0:0),A=m>=h;if(t==="multiAspirate"&&l<=i?console.warn("Invalid combination of source and destination wells for multiAspirate path"):t==="multiDispense"&&l>=i?console.warn("Invalid combination of source and destination wells for multiDispense path"):t==="single"&&l!==i&&console.warn("Invalid combination of source and destination wells for single path"),t==="single"||t==="multiDispense"&&!y||t==="multiAspirate"&&!A){const L=c.linearInterpolate(r,u)??0,E=Math.ceil((r+L)/m),g=r/E;return{referenceVolumes:{airGap:{aspirate:g,dispense:0},correction:{aspirate:g,dispense:g},pushOut:g,flowRate:{aspirate:g,dispense:g}},multiWellHandling:{isSupported:!1}}}if(t==="multiDispense"){let L=0,E=0;for(let g=0;g<i&&!(ua((g+1)*r,s??[],o??[])>m);g++)L=(g+1)*r,E+=1;return{referenceVolumes:{airGap:{aspirate:ua(L,s??[],o??[],!1),dispense:ua((E-1)*r,s??[],o??[],!1)},correction:{aspirate:ua(L,s??[],o??[]),dispense:r},flowRate:{aspirate:ua(L,s??[],o??[]),dispense:r},pushOut:r,conditioning:L,disposal:L},multiWellHandling:{isSupported:!0,numWellsToFitInTip:E}}}const w=Math.floor(m/r),I=Math.min(w,l),S=I*r;return{referenceVolumes:{airGap:{aspirate:S,dispense:0},pushOut:S,correction:{aspirate:S,dispense:S},flowRate:{aspirate:r,dispense:S}},multiWellHandling:{isSupported:!0,numWellsToFitInTip:I}}},Ur=e=>{const{retractZOffset:t,retractPositionReference:r,labwareId:n,labwareEntities:a,well:s}=e;if(s==null)return!1;const o=a[n]?.def.wells[s]?.depth;if(o==null)return!1;const i=c.getMmFromBottom(t,r,o);return i==null?!1:i-o>=c.SAFE_MOVE_TO_WELL_OFFSET_FROM_TOP_MM},Yu=e=>e.reduce((t,r)=>{const{kind:n}=r;return n==="onCutoutFixture"?t:n==="onLabware"?[...t,r.labwareId]:n==="onModule"||n==="inStackerHopper"?[...t,r.moduleId]:n==="onAddressableArea"?[...t,r.addressableAreaName]:[...t,r.logicalLocationName]},[]),kI={A4:"cutoutA3",B4:"cutoutB3",C4:"cutoutC3",D4:"cutoutD3"};function Ku(e){if(e.location!=="offDeck"&&e.location!=="systemLocation"&&e.location!=="wasteChuteLocation"&&"addressableAreaName"in e.location&&jh.includes(e.location.addressableAreaName)){const t=D(),r=e.location.addressableAreaName,n=kI[r]??r;return{[t]:{id:t,location:n}}}return{}}const oy=e=>Gh.includes(e),ma=e=>e===c.VACUUM_MODULE_DOCK_A4_ADDRESSABLE_AREA,jc=e=>e.labwareOnShuttle?.primaryLabwareId??null,Gc=(e,t,r)=>{if(r?.storedLabwareDetails==null)return!0;const n=Object.values(r?.storedLabwareDetails??{}).reduce((s,o)=>o!=null?[...s,o]:s,[]),a=t.labwareEntities[e];return n.some(s=>a?.labwareDefURI===s)},Wc=(e,t)=>{const{storedLabwareDetails:r}=e??{};if(r==null)return!0;const{primaryLabwareURI:n,adapterLabwareURI:a,lidLabwareURI:s}=r,o=Object.values(t).find(({labwareDefURI:f})=>f===n),i=Object.values(t).find(({labwareDefURI:f})=>f===a),l=Object.values(t).find(({labwareDefURI:f})=>f===s);if(o==null)return console.error("Primary labware entity not found"),!1;const u=c.getMaxPoolCount({labwareDefinitions:{primary:o.def,adapter:i?.def??null,lid:l?.def??null},model:c.FLEX_STACKER_MODULE_V1}),d=e?.labwareInHopper?.length??0;return u>d},iy=e=>{const{labwareId:t,labwareRobotState:r,labwareEntities:n}=e;return Object.entries(r).some(([a,{stackedOnNode:s}])=>typeof s=="object"&&"labwareId"in s&&s.labwareId===t&&c.getIsLid(n[a].def))},ly=e=>![Ln,c.GRIPPER_WASTE_CHUTE_ADDRESSABLE_AREA,...ve].some(t=>e===t),Ua=(e,t,r)=>{const n=t[r]?.stack,a=Fa(e,n),s=a!=null?e[a].moduleState:null;return!!(s&&s.type===c.ABSORBANCE_READER_TYPE&&s.lidOpen!==!0)};var Il,Xf;function uy(){if(Xf)return Il;Xf=1;function e(t){var r=t==null?0:t.length;return r?t[r-1]:void 0}return Il=e,Il}var vI=uy();const Yc=xe(vI);var cy=Symbol.for("immer-nothing"),Zf=Symbol.for("immer-draftable"),st=Symbol.for("immer-state"),PI=process.env.NODE_ENV!=="production"?[function(e){return`The plugin for '${e}' has not been loaded into Immer. To enable the plugin, import and call \`enable${e}()\` when initializing your application.`},function(e){return`produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${e}'`},"This object has been frozen and should not be mutated",function(e){return"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? "+e},"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.","Immer forbids circular references","The first or second argument to `produce` must be a function","The third argument to `produce` must be a function or undefined","First argument to `createDraft` must be a plain object, an array, or an immerable object","First argument to `finishDraft` must be a draft returned by `createDraft`",function(e){return`'current' expects a draft, got: ${e}`},"Object.defineProperty() cannot be used on an Immer draft","Object.setPrototypeOf() cannot be used on an Immer draft","Immer only supports deleting array indices","Immer only supports setting array indices and the 'length' property",function(e){return`'original' expects a draft, got: ${e}`}]:[];function Ke(e,...t){if(process.env.NODE_ENV!=="production"){const r=PI[e],n=typeof r=="function"?r.apply(null,t):r;throw new Error(`[Immer] ${n}`)}throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var ha=Object.getPrototypeOf;function On(e){return!!e&&!!e[st]}function qr(e){return e?py(e)||Array.isArray(e)||!!e[Zf]||!!e.constructor?.[Zf]||qa(e)||Ps(e):!1}var CI=Object.prototype.constructor.toString(),Qf=new WeakMap;function py(e){if(!e||typeof e!="object")return!1;const t=Object.getPrototypeOf(e);if(t===null||t===Object.prototype)return!0;const r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;if(r===Object)return!0;if(typeof r!="function")return!1;let n=Qf.get(r);return n===void 0&&(n=Function.toString.call(r),Qf.set(r,n)),n===CI}function is(e,t,r=!0){vs(e)===0?(r?Reflect.ownKeys(e):Object.keys(e)).forEach(a=>{t(a,e[a],e)}):e.forEach((n,a)=>t(a,n,e))}function vs(e){const t=e[st];return t?t.type_:Array.isArray(e)?1:qa(e)?2:Ps(e)?3:0}function Xu(e,t){return vs(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function dy(e,t,r){const n=vs(e);n===2?e.set(t,r):n===3?e.add(r):e[t]=r}function NI(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function qa(e){return e instanceof Map}function Ps(e){return e instanceof Set}function Nr(e){return e.copy_||e.base_}function Zu(e,t){if(qa(e))return new Map(e);if(Ps(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const r=py(e);if(t===!0||t==="class_only"&&!r){const n=Object.getOwnPropertyDescriptors(e);delete n[st];let a=Reflect.ownKeys(n);for(let s=0;s<a.length;s++){const o=a[s],i=n[o];i.writable===!1&&(i.writable=!0,i.configurable=!0),(i.get||i.set)&&(n[o]={configurable:!0,writable:!0,enumerable:i.enumerable,value:e[o]})}return Object.create(ha(e),n)}else{const n=ha(e);if(n!==null&&r)return{...e};const a=Object.create(n);return Object.assign(a,e)}}function Kc(e,t=!1){return Cs(e)||On(e)||!qr(e)||(vs(e)>1&&Object.defineProperties(e,{set:ts,add:ts,clear:ts,delete:ts}),Object.freeze(e),t&&Object.values(e).forEach(r=>Kc(r,!0))),e}function DI(){Ke(2)}var ts={value:DI};function Cs(e){return e===null||typeof e!="object"?!0:Object.isFrozen(e)}var MI={};function $r(e){const t=MI[e];return t||Ke(0,e),t}var _a;function fy(){return _a}function FI(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function Jf(e,t){t&&($r("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Qu(e){Ju(e),e.drafts_.forEach(UI),e.drafts_=null}function Ju(e){e===_a&&(_a=e.parent_)}function em(e){return _a=FI(_a,e)}function UI(e){const t=e[st];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function tm(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return e!==void 0&&e!==r?(r[st].modified_&&(Qu(t),Ke(4)),qr(e)&&(e=ls(t,e),t.parent_||us(t,e)),t.patches_&&$r("Patches").generateReplacementPatches_(r[st].base_,e,t.patches_,t.inversePatches_)):e=ls(t,r,[]),Qu(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==cy?e:void 0}function ls(e,t,r){if(Cs(t))return t;const n=e.immer_.shouldUseStrictIteration(),a=t[st];if(!a)return is(t,(s,o)=>rm(e,a,t,s,o,r),n),t;if(a.scope_!==e)return t;if(!a.modified_)return us(e,a.base_,!0),a.base_;if(!a.finalized_){a.finalized_=!0,a.scope_.unfinalizedDrafts_--;const s=a.copy_;let o=s,i=!1;a.type_===3&&(o=new Set(s),s.clear(),i=!0),is(o,(l,u)=>rm(e,a,s,l,u,r,i),n),us(e,s,!1),r&&e.patches_&&$r("Patches").generatePatches_(a,r,e.patches_,e.inversePatches_)}return a.copy_}function rm(e,t,r,n,a,s,o){if(a==null||typeof a!="object"&&!o)return;const i=Cs(a);if(!(i&&!o)){if(process.env.NODE_ENV!=="production"&&a===r&&Ke(5),On(a)){const l=s&&t&&t.type_!==3&&!Xu(t.assigned_,n)?s.concat(n):void 0,u=ls(e,a,l);if(dy(r,n,u),On(u))e.canAutoFreeze_=!1;else return}else o&&r.add(a);if(qr(a)&&!i){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1||t&&t.base_&&t.base_[n]===a&&i)return;ls(e,a),(!t||!t.scope_.parent_)&&typeof n!="symbol"&&(qa(r)?r.has(n):Object.prototype.propertyIsEnumerable.call(r,n))&&us(e,a)}}}function us(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Kc(t,r)}function qI(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:fy(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let a=n,s=Xc;r&&(a=[n],s=ya);const{revoke:o,proxy:i}=Proxy.revocable(a,s);return n.draft_=i,n.revoke_=o,i}var Xc={get(e,t){if(t===st)return e;const r=Nr(e);if(!Xu(r,t))return $I(e,r,t);const n=r[t];return e.finalized_||!qr(n)?n:n===El(e.base_,t)?(wl(e),e.copy_[t]=tc(n,e)):n},has(e,t){return t in Nr(e)},ownKeys(e){return Reflect.ownKeys(Nr(e))},set(e,t,r){const n=my(Nr(e),t);if(n?.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const a=El(Nr(e),t),s=a?.[st];if(s&&s.base_===r)return e.copy_[t]=r,e.assigned_[t]=!1,!0;if(NI(r,a)&&(r!==void 0||Xu(e.base_,t)))return!0;wl(e),ec(e)}return e.copy_[t]===r&&(r!==void 0||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_[t]=!0),!0},deleteProperty(e,t){return El(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,wl(e),ec(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const r=Nr(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{writable:!0,configurable:e.type_!==1||t!=="length",enumerable:n.enumerable,value:r[t]}},defineProperty(){Ke(11)},getPrototypeOf(e){return ha(e.base_)},setPrototypeOf(){Ke(12)}},ya={};is(Xc,(e,t)=>{ya[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});ya.deleteProperty=function(e,t){return process.env.NODE_ENV!=="production"&&isNaN(parseInt(t))&&Ke(13),ya.set.call(this,e,t,void 0)};ya.set=function(e,t,r){return process.env.NODE_ENV!=="production"&&t!=="length"&&isNaN(parseInt(t))&&Ke(14),Xc.set.call(this,e[0],t,r,e[0])};function El(e,t){const r=e[st];return(r?Nr(r):e)[t]}function $I(e,t,r){const n=my(t,r);return n?"value"in n?n.value:n.get?.call(e.draft_):void 0}function my(e,t){if(!(t in e))return;let r=ha(e);for(;r;){const n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=ha(r)}}function ec(e){e.modified_||(e.modified_=!0,e.parent_&&ec(e.parent_))}function wl(e){e.copy_||(e.copy_=Zu(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var VI=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!0,this.produce=(t,r,n)=>{if(typeof t=="function"&&typeof r!="function"){const s=r;r=t;const o=this;return function(l=s,...u){return o.produce(l,p=>r.call(this,p,...u))}}typeof r!="function"&&Ke(6),n!==void 0&&typeof n!="function"&&Ke(7);let a;if(qr(t)){const s=em(this),o=tc(t,void 0);let i=!0;try{a=r(o),i=!1}finally{i?Qu(s):Ju(s)}return Jf(s,n),tm(a,s)}else if(!t||typeof t!="object"){if(a=r(t),a===void 0&&(a=t),a===cy&&(a=void 0),this.autoFreeze_&&Kc(a,!0),n){const s=[],o=[];$r("Patches").generateReplacementPatches_(t,a,s,o),n(s,o)}return a}else Ke(1,t)},this.produceWithPatches=(t,r)=>{if(typeof t=="function")return(o,...i)=>this.produceWithPatches(o,l=>t(l,...i));let n,a;return[this.produce(t,r,(o,i)=>{n=o,a=i}),n,a]},typeof e?.autoFreeze=="boolean"&&this.setAutoFreeze(e.autoFreeze),typeof e?.useStrictShallowCopy=="boolean"&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),typeof e?.useStrictIteration=="boolean"&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){qr(e)||Ke(8),On(e)&&(e=BI(e));const t=em(this),r=tc(e,void 0);return r[st].isManual_=!0,Ju(t),r}finishDraft(e,t){const r=e&&e[st];(!r||!r.isManual_)&&Ke(9);const{scope_:n}=r;return Jf(n,t),tm(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){const a=t[r];if(a.path.length===0&&a.op==="replace"){e=a.value;break}}r>-1&&(t=t.slice(r+1));const n=$r("Patches").applyPatches_;return On(e)?n(e,t):this.produce(e,a=>n(a,t))}};function tc(e,t){const r=qa(e)?$r("MapSet").proxyMap_(e,t):Ps(e)?$r("MapSet").proxySet_(e,t):qI(e,t);return(t?t.scope_:fy()).drafts_.push(r),r}function BI(e){return On(e)||Ke(10,e),hy(e)}function hy(e){if(!qr(e)||Cs(e))return e;const t=e[st];let r,n=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=Zu(e,t.scope_.immer_.useStrictShallowCopy_),n=t.scope_.immer_.shouldUseStrictIteration()}else r=Zu(e,!0);return is(r,(a,s)=>{dy(r,a,hy(s))},n),t&&(t.finalized_=!1),r}var xI=new VI,_y=xI.produce;function HI(e,t){let n=0;const a=[];for(;n+1<e.length;){const s=e[n],o=e[n+1];if(t(s,o)){n+=2;continue}else a.push(s),n+=1}return n+1===e.length&&a.push(e[n]),a}const zI=(e,t)=>["pipetteId","volume","labwareId","wellName"].every(n=>e[n]===t[n]),jI=e=>HI(e,(t,r)=>t.commandType==="aspirate"&&r.commandType==="dispense"&&zI(t.params,r.params)),yy=e=>jI(e),Zc=(e,t)=>{const r=Ot(e,t);return r.type===c.ABSORBANCE_READER_TYPE?r:(console.error(`Absorbance reader state updater expected ${t} moduleState to be absorbanceReader, but it was ${r.type}`),null)},GI=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Zc(n,a);s!=null&&(s.lidOpen=!0)},WI=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Zc(n,a);s!=null&&(s.lidOpen=!1)},YI=(e,t,r)=>{const{robotState:n}=r,{moduleId:a,measureMode:s,sampleWavelengths:o,referenceWavelength:i}=e,l=Zc(n,a);l!=null&&(l.initialization={mode:s,wavelengths:o,referenceWavelength:i},l.lidOpen=!1)};function KI(e,t,r){const{pipetteId:n,volume:a}=e,{robotState:s}=r,o=s.pipettes[n].nozzles;let l=t.pipetteEntities[n].spec.channels;o===c.COLUMN?l=8:o===c.SINGLE&&(l=1),bn(l).forEach(u=>{const p=s.liquidState.pipettes[n][u]??{},d=p[je]?.volume??0;s.liquidState.pipettes[n][u]={...p,[je]:{volume:d+a}}})}var Sl,nm;function XI(){if(nm)return Sl;nm=1;var e=p_(),t=Ca(),r=fs(),n=Qe(),a=xr(),s=Ts(),o=Is(),i=Ec(),l="[object Map]",u="[object Set]",p=Object.prototype,d=p.hasOwnProperty;function f(_){if(_==null)return!0;if(a(_)&&(n(_)||typeof _=="string"||typeof _.splice=="function"||s(_)||i(_)||r(_)))return!_.length;var m=t(_);if(m==l||m==u)return!_.size;if(o(_))return!e(_).length;for(var h in _)if(d.call(_,h))return!1;return!0}return Sl=f,Sl}var ZI=XI();const Al=xe(ZI);var Ll,am;function QI(){if(am)return Ll;am=1;function e(t,r,n,a){for(var s=t.length,o=n+(a?1:-1);a?o--:++o<s;)if(r(t[o],o,t))return o;return-1}return Ll=e,Ll}var Ol,sm;function JI(){if(sm)return Ol;sm=1;function e(t){return t!==t}return Ol=e,Ol}var Rl,om;function eE(){if(om)return Rl;om=1;function e(t,r,n){for(var a=n-1,s=t.length;++a<s;)if(t[a]===r)return a;return-1}return Rl=e,Rl}var kl,im;function tE(){if(im)return kl;im=1;var e=QI(),t=JI(),r=eE();function n(a,s,o){return s===s?r(a,s,o):e(a,t,o)}return kl=n,kl}var vl,lm;function rE(){if(lm)return vl;lm=1;var e=tE();function t(r,n){var a=r==null?0:r.length;return!!a&&e(r,n,0)>-1}return vl=t,vl}var Pl,um;function nE(){if(um)return Pl;um=1;function e(t,r,n){for(var a=-1,s=t==null?0:t.length;++a<s;)if(n(r,t[a]))return!0;return!1}return Pl=e,Pl}var Cl,cm;function aE(){if(cm)return Cl;cm=1;function e(){}return Cl=e,Cl}var Nl,pm;function sE(){if(pm)return Nl;pm=1;var e=f_(),t=aE(),r=yc(),n=1/0,a=e&&1/r(new e([,-0]))[1]==n?function(s){return new e(s)}:t;return Nl=a,Nl}var Dl,dm;function oE(){if(dm)return Dl;dm=1;var e=e_(),t=rE(),r=nE(),n=r_(),a=sE(),s=yc(),o=200;function i(l,u,p){var d=-1,f=t,_=l.length,m=!0,h=[],b=h;if(p)m=!1,f=r;else if(_>=o){var T=u?null:a(l);if(T)return s(T);m=!1,f=n,b=new e}else b=u?[]:h;e:for(;++d<_;){var y=l[d],A=u?u(y):y;if(y=p||y!==0?y:0,m&&A===A){for(var w=b.length;w--;)if(b[w]===A)continue e;u&&b.push(A),h.push(y)}else f(b,A,p)||(b!==h&&b.push(A),h.push(y))}return h}return Dl=i,Dl}var Ml,fm;function iE(){if(fm)return Ml;fm=1;var e=oE();function t(r){return r&&r.length?e(r):[]}return Ml=t,Ml}var lE=iE();const uE=xe(lE),Qc=e=>{const{nozzles:t,pipetteSpec:r,primaryNozzle:n}=e,a=r.channels;if(t==null)return a;switch(t){case c.ROW:return 12;case c.COLUMN:return 8;case c.SINGLE:return 1;case c.ALL:return a;case c.PARTIAL_COLUMN:return c.PARTIAL_NOZZLE_MAP[n];default:return a}};function cE(e,t,r){const{pipetteId:n,volume:a}=e,{robotState:s,warnings:o}=r,i="labwareId"in e?e.labwareId:s.pipettes[n].entityId??"",l="wellName"in e?e.wellName:s.pipettes[n].wellName??"",{liquidState:u}=s,p=s.pipettes[n].nozzles,d=r.robotState.pipettes[n].primaryNozzle,f=t.pipetteEntities[n].spec,_=t.labwareEntities[i].def,m=_.metadata.displayCategory==="reservoir",h=Qc({pipetteSpec:f,nozzles:p,primaryNozzle:d}),{allWellsShared:b,wellsForTips:T}=Vc(h,_,l);if(console.assert(uE(T).length===b?1:T.length,`expected all wells to be shared, or no wells to be shared. Got: ${JSON.stringify(T)}`),h>1&&b){const A=T[0],w=u.labware[i][A],I=a*h>mr(w);Al(w)?o.push(gl()):I&&o.push(Tl());const S=I?mr(w)/h:a,L=er(S,w).dest;bn(h).forEach(E=>{const g=u.pipettes[n],k=E.toString(),v=g[k],q=I?hr(v,{...L,[je]:{volume:a-S}}):hr(v,L);g[k]=q}),u.labware[i][A]=er(a*h,u.labware[i][A]).source;return}if(h===96&&m){T.forEach(A=>{const w=u.labware[i][A],I=a*8>mr(w);Al(w)?o.push(gl()):I&&o.push(Tl());const S=I?mr(w)/8:a,L=er(S,w).dest;bn(h).forEach(E=>{const g=u.pipettes[n],k=E.toString(),v=g[k],q=I?hr(v,{...L,[je]:{volume:a-S}}):hr(v,L);g[k]=q}),u.labware[i][A]=er(S*8,u.labware[i][A]).source});return}bn(h).forEach(A=>{const w=A.toString(),I=u.pipettes[n],S=I[w],L=u.labware[i][T[A]],E=er(a,L).dest;Al(L)?o.push(gl()):a>mr(L)&&o.push(Tl()),I[w]=hr(S,E)});const y=u.labware[i];T.forEach(A=>{y[A]=er(a,y[A]).source}),"labwareId"in e&&(s.pipettes[n]={...s.pipettes[n],entityId:e.labwareId,wellName:l})}function Ns(e){const{robotStateAndWarnings:t,invariantContext:r,entityId:n,pipetteId:a,prevLiquidState:s,useFullVolume:o,volume:i,wellName:l}=e,u=r.pipetteEntities[a].spec,p=t.robotState.pipettes[a].nozzles,d=t.robotState.pipettes[a].primaryNozzle,f=Qc({pipetteSpec:u,nozzles:p,primaryNozzle:d}),_=l??null,m=r.labwareEntities[n]!=null?r.labwareEntities[n].def:null;console.assert(!(o&&typeof i=="number"),"dispenseUpdateLiquidState takes either `volume` or `useFullVolume`, but got both"),console.assert(typeof i=="number"||o,"in dispenseUpdateLiquidState, either volume or useFullVolume are required");const{wellsForTips:h,allWellsShared:b}=m!=null&&l!=null?Vc(f,m,l):{wellsForTips:null,allWellsShared:!0},T=s.labware[n]!=null?s.labware[n]:null;let y=null;s.trashBins[n]!=null?y=s.trashBins[n]:s.wasteChute[n]!=null&&(y=s.wasteChute[n]);const A=rr(s.pipettes[a],L=>{const{...E}=L;if(o){const g=mr(E);return g>0?er(g,E):{source:{},dest:{}}}return er(i||0,E)});let w=null;if(_!=null&&T!=null)w={[_]:ut(A,(L,E)=>hr(L,E.dest),T[_])};else if(y!=null){const L=Object.values(s.pipettes[a]).reduce((E,g)=>E+(g[0]?.volume??0),0);y[0]={volume:L}}w==null&&y==null&&console.assert(!1,`expected to merge liquid to a single well with sourceId ${n}`);const I=_!=null&&T!=null&&h!=null?h.reduce((L,E,g)=>({...L,[E]:hr(A[`${g}`].dest,T[E]||{})}),{}):{},S=b?w:I;s.pipettes[a]=rr(A,"source"),s.trashBins[n]!=null&&y!=null?Object.assign(s.trashBins[n],y):s.wasteChute[n]!=null&&y!=null?Object.assign(s.wasteChute[n],y):s.labware[n]!=null&&S!=null&&(s.labware[n]=Object.assign(T??{},S))}function pE(e,t,r){const{pipetteId:n,labwareId:a,wellName:s}=e,{robotState:o}=r;Ns({pipetteId:n,entityId:a,useFullVolume:!0,wellName:s,prevLiquidState:o.liquidState,invariantContext:t,robotStateAndWarnings:r})}function dE(e,t,r){const{pipetteId:n,configurationParams:a}=e,{robotState:s}=r;s.pipettes[n].nozzles=a.style,s.pipettes[n].primaryNozzle=a.primaryNozzle}function fE(e,t,r){const{pipetteId:n,volume:a}=e,{robotState:s}=r,o="labwareId"in e?e.labwareId:s.pipettes[n].entityId??"",i="wellName"in e?e.wellName:s.pipettes[n].wellName??"",l=s.liquidState.pipettes[n],p=Object.values(l)[0]?.[je]?.volume??0,d=r.robotState.pipettes[n].primaryNozzle;if(Ns({invariantContext:t,entityId:o,pipetteId:n,prevLiquidState:s.liquidState,useFullVolume:!1,volume:a,wellName:i,robotStateAndWarnings:r}),p>0){const f=r.robotState.pipettes[n].nozzles,_=t.pipetteEntities[n].spec,m=Qc({pipetteSpec:_,nozzles:f,primaryNozzle:d});Object.keys(l).slice(0,m).forEach(b=>{const T=l[b]??{};l[b]={...T,[je]:{volume:0}}})}"labwareId"in e&&(s.pipettes[n]={...s.pipettes[n],entityId:e.labwareId})}function mE(e,t,r){const{pipetteId:n,wellName:a,labwareId:s}=e,{robotState:o}=r;o.tipState.pipettes[n].hasTip=!1,o.tipState.pipettes[n].tiprackURI=null,o.pipettes[n].tiprackId=void 0;const i=o.tipState,l=t.pipetteEntities[n].spec,u=o.pipettes[n].nozzles,p=lp(u,l),d=(_,m)=>_.find(h=>h.includes(m)),f=t.labwareEntities[s]?.def;f==null||!c.getIsTiprack(f)?console.warn(`forDropTip expected ${s} to have definition and to be a tiprack`):(p===c.SINGLE?i.tipracks[s][a]=Qt:p===c.COLUMN?(d(f.ordering,a)??[]).forEach(m=>i.tipracks[s][m]=Qt):p===c.ALL?l.channels===96?f.ordering.reduce((m,h)=>m.concat(h),[]).forEach(function(m){i.tipracks[s][m]=Qt}):(d(f.ordering,a)??[]).forEach(m=>i.tipracks[s][m]=Qt):l.channels===1?i.tipracks[s][a]=Qt:l.channels===96?f.ordering.reduce((m,h)=>m.concat(h),[]).forEach(function(m){i.tipracks[s][m]=Qt}):(d(f.ordering,a)??[]).forEach(m=>i.tipracks[s][m]=Qt),o.pipettes[n].entityId=s,o.pipettes[n].wellName=a)}function hE(e,t,r){const{labwareId:n,liquidId:a,volumeByWell:s}=e;Object.entries(s).forEach(([o,i])=>{r.robotState.liquidState.labware[n][o][a]={volume:i}})}var Fl,mm;function _E(){if(mm)return Fl;mm=1;function e(t,r){for(var n=-1,a=t==null?0:t.length;++n<a&&r(t[n],n,t)!==!1;);return t}return Fl=e,Fl}var Ul,hm;function Jc(){if(hm)return Ul;hm=1;var e=Lc(),t=ms(),r=Object.prototype,n=r.hasOwnProperty;function a(s,o,i){var l=s[o];(!(n.call(s,o)&&t(l,i))||i===void 0&&!(o in s))&&e(s,o,i)}return Ul=a,Ul}var ql,_m;function $a(){if(_m)return ql;_m=1;var e=Jc(),t=Lc();function r(n,a,s,o){var i=!s;s||(s={});for(var l=-1,u=a.length;++l<u;){var p=a[l],d=o?o(s[p],n[p],p,s,n):void 0;d===void 0&&(d=n[p]),i?t(s,p,d):e(s,p,d)}return s}return ql=r,ql}var $l,ym;function yE(){if(ym)return $l;ym=1;var e=$a(),t=Pa();function r(n,a){return n&&e(a,t(a),n)}return $l=r,$l}var Vl,bm;function bE(){if(bm)return Vl;bm=1;function e(t){var r=[];if(t!=null)for(var n in Object(t))r.push(n);return r}return Vl=e,Vl}var Bl,Tm;function TE(){if(Tm)return Bl;Tm=1;var e=ar(),t=Is(),r=bE(),n=Object.prototype,a=n.hasOwnProperty;function s(o){if(!e(o))return r(o);var i=t(o),l=[];for(var u in o)u=="constructor"&&(i||!a.call(o,u))||l.push(u);return l}return Bl=s,Bl}var xl,gm;function ep(){if(gm)return xl;gm=1;var e=u_(),t=TE(),r=xr();function n(a){return r(a)?e(a,!0):t(a)}return xl=n,xl}var Hl,Im;function gE(){if(Im)return Hl;Im=1;var e=$a(),t=ep();function r(n,a){return n&&e(a,t(a),n)}return Hl=r,Hl}var da={exports:{}};da.exports;var Em;function IE(){return Em||(Em=1,(function(e,t){var r=Ht(),n=t&&!t.nodeType&&t,a=n&&!0&&e&&!e.nodeType&&e,s=a&&a.exports===n,o=s?r.Buffer:void 0,i=o?o.allocUnsafe:void 0;function l(u,p){if(p)return u.slice();var d=u.length,f=i?i(d):new u.constructor(d);return u.copy(f),f}e.exports=l})(da,da.exports)),da.exports}var zl,wm;function EE(){if(wm)return zl;wm=1;function e(t,r){var n=-1,a=t.length;for(r||(r=Array(a));++n<a;)r[n]=t[n];return r}return zl=e,zl}var jl,Sm;function wE(){if(Sm)return jl;Sm=1;var e=$a(),t=bc();function r(n,a){return e(n,t(n),a)}return jl=r,jl}var Gl,Am;function tp(){if(Am)return Gl;Am=1;var e=c_(),t=e(Object.getPrototypeOf,Object);return Gl=t,Gl}var Wl,Lm;function by(){if(Lm)return Wl;Lm=1;var e=fc(),t=tp(),r=bc(),n=i_(),a=Object.getOwnPropertySymbols,s=a?function(o){for(var i=[];o;)e(i,r(o)),o=t(o);return i}:n;return Wl=s,Wl}var Yl,Om;function SE(){if(Om)return Yl;Om=1;var e=$a(),t=by();function r(n,a){return e(n,t(n),a)}return Yl=r,Yl}var Kl,Rm;function rp(){if(Rm)return Kl;Rm=1;var e=s_(),t=by(),r=ep();function n(a){return e(a,r,t)}return Kl=n,Kl}var Xl,km;function AE(){if(km)return Xl;km=1;var e=Object.prototype,t=e.hasOwnProperty;function r(n){var a=n.length,s=new n.constructor(a);return a&&typeof n[0]=="string"&&t.call(n,"index")&&(s.index=n.index,s.input=n.input),s}return Xl=r,Xl}var Zl,vm;function np(){if(vm)return Zl;vm=1;var e=a_();function t(r){var n=new r.constructor(r.byteLength);return new e(n).set(new e(r)),n}return Zl=t,Zl}var Ql,Pm;function LE(){if(Pm)return Ql;Pm=1;var e=np();function t(r,n){var a=n?e(r.buffer):r.buffer;return new r.constructor(a,r.byteOffset,r.byteLength)}return Ql=t,Ql}var Jl,Cm;function OE(){if(Cm)return Jl;Cm=1;var e=/\w*$/;function t(r){var n=new r.constructor(r.source,e.exec(r));return n.lastIndex=r.lastIndex,n}return Jl=t,Jl}var eu,Nm;function RE(){if(Nm)return eu;Nm=1;var e=kn(),t=e?e.prototype:void 0,r=t?t.valueOf:void 0;function n(a){return r?Object(r.call(a)):{}}return eu=n,eu}var tu,Dm;function kE(){if(Dm)return tu;Dm=1;var e=np();function t(r,n){var a=n?e(r.buffer):r.buffer;return new r.constructor(a,r.byteOffset,r.length)}return tu=t,tu}var ru,Mm;function vE(){if(Mm)return ru;Mm=1;var e=np(),t=LE(),r=OE(),n=RE(),a=kE(),s="[object Boolean]",o="[object Date]",i="[object Map]",l="[object Number]",u="[object RegExp]",p="[object Set]",d="[object String]",f="[object Symbol]",_="[object ArrayBuffer]",m="[object DataView]",h="[object Float32Array]",b="[object Float64Array]",T="[object Int8Array]",y="[object Int16Array]",A="[object Int32Array]",w="[object Uint8Array]",I="[object Uint8ClampedArray]",S="[object Uint16Array]",L="[object Uint32Array]";function E(g,k,v){var q=g.constructor;switch(k){case _:return e(g);case s:case o:return new q(+g);case m:return t(g,v);case h:case b:case T:case y:case A:case w:case I:case S:case L:return a(g,v);case i:return new q;case l:case d:return new q(g);case u:return r(g);case p:return new q;case f:return n(g)}}return ru=E,ru}var nu,Fm;function PE(){if(Fm)return nu;Fm=1;var e=ar(),t=Object.create,r=(function(){function n(){}return function(a){if(!e(a))return{};if(t)return t(a);n.prototype=a;var s=new n;return n.prototype=void 0,s}})();return nu=r,nu}var au,Um;function CE(){if(Um)return au;Um=1;var e=PE(),t=tp(),r=Is();function n(a){return typeof a.constructor=="function"&&!r(a)?e(t(a)):{}}return au=n,au}var su,qm;function NE(){if(qm)return su;qm=1;var e=Ca(),t=nr(),r="[object Map]";function n(a){return t(a)&&e(a)==r}return su=n,su}var ou,$m;function DE(){if($m)return ou;$m=1;var e=NE(),t=gc(),r=Ic(),n=r&&r.isMap,a=n?t(n):e;return ou=a,ou}var iu,Vm;function ME(){if(Vm)return iu;Vm=1;var e=Ca(),t=nr(),r="[object Set]";function n(a){return t(a)&&e(a)==r}return iu=n,iu}var lu,Bm;function FE(){if(Bm)return lu;Bm=1;var e=ME(),t=gc(),r=Ic(),n=r&&r.isSet,a=n?t(n):e;return lu=a,lu}var uu,xm;function Ty(){if(xm)return uu;xm=1;var e=_c(),t=_E(),r=Jc(),n=yE(),a=gE(),s=IE(),o=EE(),i=wE(),l=SE(),u=d_(),p=rp(),d=Ca(),f=AE(),_=vE(),m=CE(),h=Qe(),b=Ts(),T=DE(),y=ar(),A=FE(),w=Pa(),I=ep(),S=1,L=2,E=4,g="[object Arguments]",k="[object Array]",v="[object Boolean]",q="[object Date]",$="[object Error]",ee="[object Function]",de="[object GeneratorFunction]",Te="[object Map]",se="[object Number]",Ie="[object Object]",Pe="[object RegExp]",He="[object Set]",Ve="[object String]",te="[object Symbol]",Se="[object WeakMap]",ze="[object ArrayBuffer]",Ce="[object DataView]",Ee="[object Float32Array]",X="[object Float64Array]",W="[object Int8Array]",C="[object Int16Array]",P="[object Int32Array]",V="[object Uint8Array]",M="[object Uint8ClampedArray]",oe="[object Uint16Array]",U="[object Uint32Array]",z={};z[g]=z[k]=z[ze]=z[Ce]=z[v]=z[q]=z[Ee]=z[X]=z[W]=z[C]=z[P]=z[Te]=z[se]=z[Ie]=z[Pe]=z[He]=z[Ve]=z[te]=z[V]=z[M]=z[oe]=z[U]=!0,z[$]=z[ee]=z[Se]=!1;function x(F,H,ce,Ue,Je,Be){var pe,et=H&S,ht=H&L,Rt=H&E;if(ce&&(pe=Je?ce(F,Ue,Je,Be):ce(F)),pe!==void 0)return pe;if(!y(F))return F;var _t=h(F);if(_t){if(pe=f(F),!et)return o(F,pe)}else{var Re=d(F),tt=Re==ee||Re==de;if(b(F))return s(F,et);if(Re==Ie||Re==g||tt&&!Je){if(pe=ht||tt?{}:m(F),!et)return ht?l(F,a(pe,F)):i(F,n(pe,F))}else{if(!z[Re])return Je?F:{};pe=_(F,Re,et)}}Be||(Be=new e);var ge=Be.get(F);if(ge)return ge;Be.set(F,pe),A(F)?F.forEach(function(re){pe.add(x(re,H,ce,re,F,Be))}):T(F)&&F.forEach(function(re,ne){pe.set(ne,x(re,H,ce,ne,F,Be))});var ke=Rt?ht?p:u:ht?I:w,Ne=_t?void 0:ke(F);return t(Ne||F,function(re,ne){Ne&&(ne=re,re=F[ne]),r(pe,ne,x(re,H,ce,ne,F,Be))}),pe}return uu=x,uu}var cu,Hm;function gy(){if(Hm)return cu;Hm=1;function e(t,r,n){var a=-1,s=t.length;r<0&&(r=-r>s?0:s+r),n=n>s?s:n,n<0&&(n+=s),s=r>n?0:n-r>>>0,r>>>=0;for(var o=Array(s);++a<s;)o[a]=t[a+r];return o}return cu=e,cu}var pu,zm;function UE(){if(zm)return pu;zm=1;var e=Es(),t=gy();function r(n,a){return a.length<2?n:e(n,t(a,0,-1))}return pu=r,pu}var du,jm;function qE(){if(jm)return du;jm=1;var e=Pn(),t=uy(),r=UE(),n=Cn(),a=Object.prototype,s=a.hasOwnProperty;function o(i,l){l=e(l,i);var u=-1,p=l.length;if(!p)return!0;for(;++u<p;){var d=n(l[u]);if(d==="__proto__"&&!s.call(i,"__proto__")||(d==="constructor"||d==="prototype")&&u<p-1)return!1}var f=r(i,l);return f==null||delete f[n(t(l))]}return du=o,du}var fu,Gm;function $E(){if(Gm)return fu;Gm=1;var e=vn(),t=tp(),r=nr(),n="[object Object]",a=Function.prototype,s=Object.prototype,o=a.toString,i=s.hasOwnProperty,l=o.call(Object);function u(p){if(!r(p)||e(p)!=n)return!1;var d=t(p);if(d===null)return!0;var f=i.call(d,"constructor")&&d.constructor;return typeof f=="function"&&f instanceof f&&o.call(f)==l}return fu=u,fu}var mu,Wm;function VE(){if(Wm)return mu;Wm=1;var e=$E();function t(r){return e(r)?void 0:r}return mu=t,mu}var hu,Ym;function BE(){if(Ym)return hu;Ym=1;var e=Zh();function t(r){var n=r==null?0:r.length;return n?e(r,1):[]}return hu=t,hu}var _u,Km;function xE(){if(Km)return _u;Km=1;function e(t,r,n){switch(n.length){case 0:return t.call(r);case 1:return t.call(r,n[0]);case 2:return t.call(r,n[0],n[1]);case 3:return t.call(r,n[0],n[1],n[2])}return t.apply(r,n)}return _u=e,_u}var yu,Xm;function Iy(){if(Xm)return yu;Xm=1;var e=xE(),t=Math.max;function r(n,a,s){return a=t(a===void 0?n.length-1:a,0),function(){for(var o=arguments,i=-1,l=t(o.length-a,0),u=Array(l);++i<l;)u[i]=o[a+i];i=-1;for(var p=Array(a+1);++i<a;)p[i]=o[i];return p[a]=s(u),e(n,this,p)}}return yu=r,yu}var bu,Zm;function HE(){if(Zm)return bu;Zm=1;function e(t){return function(){return t}}return bu=e,bu}var Tu,Qm;function zE(){if(Qm)return Tu;Qm=1;var e=HE(),t=b_(),r=La(),n=t?function(a,s){return t(a,"toString",{configurable:!0,enumerable:!1,value:e(s),writable:!0})}:r;return Tu=n,Tu}var gu,Jm;function jE(){if(Jm)return gu;Jm=1;var e=800,t=16,r=Date.now;function n(a){var s=0,o=0;return function(){var i=r(),l=t-(i-o);if(o=i,l>0){if(++s>=e)return arguments[0]}else s=0;return a.apply(void 0,arguments)}}return gu=n,gu}var Iu,eh;function Ey(){if(eh)return Iu;eh=1;var e=zE(),t=jE(),r=t(e);return Iu=r,Iu}var Eu,th;function GE(){if(th)return Eu;th=1;var e=BE(),t=Iy(),r=Ey();function n(a){return r(t(a,void 0,e),a+"")}return Eu=n,Eu}var wu,rh;function WE(){if(rh)return wu;rh=1;var e=va(),t=Ty(),r=qE(),n=Pn(),a=$a(),s=VE(),o=GE(),i=rp(),l=1,u=2,p=4,d=o(function(f,_){var m={};if(f==null)return m;var h=!1;_=e(_,function(T){return T=n(T,f),h||(h=T.length>1),T}),a(f,i(f),m),h&&(m=t(m,l|u|p,s));for(var b=_.length;b--;)r(m,_[b]);return m});return wu=d,wu}var YE=WE();const KE=xe(YE),rc="TOUCHED_PIPETTABLE_LABWARE";var Su,nh;function XE(){if(nh)return Su;nh=1;var e=wc();function t(r,n){return e(r,n)}return Su=t,Su}var ZE=XE();const QE=xe(ZE),Ds=e=>{const{node:t,stack:r=[],robotState:n,memo:a=new Map}=e;let s=r;if(!(typeof t=="object"&&"labwareId"in t))return s=[...r,t],a.set(t,s),{stack:s,memo:a};const{labwareId:o}=t,i=n.labware[o];if(i!=null&&i.stackedOnNode!=null){const{stack:l,memo:u}=Ds({node:i.stackedOnNode,stack:[...r,t],robotState:n,memo:a});wy(a,u),s=l,a.set(t,s)}return{stack:s,memo:a}},JE=e=>{const{node:t,robotState:r,deckDef:n,deckConfiguration:a}=e,{stack:s}=Ds({node:t,robotState:r}),{cutoutFixtures:o}=n,i=s.find(l=>typeof l=="object"&&"addressableAreaName"in l);if(i!=null&&typeof i=="object"&&"addressableAreaName"in i){const{addressableAreaName:l}=i;for(const{id:u,providesAddressableAreas:p}of o){const[d]=Object.entries(p).find(([f,_])=>_.includes(l))??[];if(d!=null){const f=a.find(({cutoutId:T})=>T===d),{cutoutFixtureId:_,cutoutId:m}=f,h=_===u&&m===d,b=Object.entries(r.modules).find(([T,{slot:y}])=>c.FLEX_CUTOUT_BY_SLOT_ID[y]===m);if(h&&b!=null)return b[0]}}}return null},wy=(e,t)=>{t.forEach((r,n)=>{e.set(n,r)})},ew=(e,t)=>e.some(r=>QE(r,t)),Sy=e=>{const{labwareId:t,robotState:r}=e,n=new Map,a={labwareId:t};let s=[];for(const[o,{stackedOnNode:i}]of Object.entries(r.labware)){const l={labwareId:o};if(i==null)continue;let u;const p=n.get(l);if(p!=null)u=p;else{const{stack:d,memo:f}=Ds({node:l,robotState:r,memo:n});if(wy(n,f),!ew(d,a))continue;n.set(l,d),u=d}u.length>s.length&&(s=u)}return s},Ay=e=>{const t=[],r=new Set;for(const n of Object.keys(e.labware)){if(r.has(n))continue;const a=Sy({labwareId:n,robotState:e});a.forEach(s=>{typeof s=="object"&&"labwareId"in s&&r.add(s.labwareId)}),t.push(a)}return t},ap=e=>{const{moduleId:t,robotState:r,moduleEntities:n,deckDef:a}=e,s=r.modules[t],o=n[t];if(s==null||o==null)return null;const{slot:i}=s,{model:l}=o,u=c.getAddressableAreaNamesFromLoadedModule(l,i,a);return u.length===0?null:u[0]},tw=e=>{const{location:t,robotState:r,moduleEntities:n,deckDef:a}=e;if(t==="offDeck"||t==="systemLocation"||t==="wasteChuteLocation")return null;if("slotName"in t)return t.slotName;if("addressableAreaName"in t)return t.addressableAreaName;if("moduleId"in t){const{moduleId:s}=t;return ap({moduleId:s,robotState:r,moduleEntities:n,deckDef:a})}return null},Ly=e=>{const{deckConfiguration:t,deckDefinition:r}=e;return t.reduce((n,{cutoutFixtureId:a,cutoutId:s})=>((r.cutoutFixtures.find(({id:i})=>a===i)?.providesAddressableAreas[s]??[]).forEach(i=>{n.add(i)}),n),new Set)},rw=e=>{const{robotState:t,deckConfiguration:r,deckDefinition:n,moduleEntities:a}=e,s=Ly({deckConfiguration:r,deckDefinition:n}),o=new Set(s),i=Ay(t);for(const l of i){const u=Yc(l);if(typeof u=="object"&&"addressableAreaName"in u){const{addressableAreaName:p}=u;o.delete(p)}if(typeof u=="object"&&"slotName"in u){const{slotName:p}=u;o.delete(p)}if(typeof u=="object"&&"moduleId"in u){const{moduleId:p}=u,d=ap({moduleId:p,robotState:t,moduleEntities:a,deckDef:n});d!=null&&o.delete(d)}}return o},nw=e=>{const t=e.toLowerCase();return t.includes("chute")||t.includes("waste")||t.startsWith("gripper")||t==="96channelwastechute"},Oy=e=>{const{stack:t,subjectLabwareId:r,moduleEntities:n,labwareEntityIds:a,modules:s}=e;if(t.length===0||t[0]!==r||t.length<2)return;const o=t[1];if(o===Ze){const u=t[2];return u==null?void 0:{kind:"inStackerHopper",moduleId:u}}if(n[o]!=null)return{moduleId:o};if(a.has(o))return{labwareId:o};if(o==="offDeck")return"offDeck";if(o==="systemLocation")return"systemLocation";if(o==="wasteChuteLocation")return"wasteChuteLocation";if(nw(o))return{addressableAreaName:o};const i=ay(o,s,n)??o;if(Object.entries(s).some(([u,p])=>n[u]?.type===c.FLEX_STACKER_MODULE_TYPE&&p.slot===i)){const u=Rs(i);if(u!=null)return{addressableAreaName:u}}return{slotName:o}},aw=e=>typeof e=="object"&&e!==null&&"kind"in e&&e.kind==="inStackerHopper",sw=e=>typeof e!="object"||e===null?!1:!aw(e),ow=(e,t)=>{const{id:r,def:n}=e,{id:a,def:s}=t,o=n.dimensions.xDimension,i=n.dimensions.yDimension,l=s.dimensions.xDimension,u=s.dimensions.yDimension;return o>l&&i>u?{containerLabwareId:r,containedLabwareId:a}:l>o&&u>i?{containerLabwareId:a,containedLabwareId:r}:null},sp=(e,t)=>{const r=new Map;for(const a of Object.keys(e)){const s=e[a].stackedOnNode;if(s==null||!sw(s))continue;const o=JSON.stringify(s),i=r.get(o)??[];i.push(a),r.set(o,i)}const n={};for(const a of r.values()){if(a.length!==2)continue;const[s,o]=a,i=t[s],l=t[o];if(i==null||l==null)continue;const u=ow(i,l);if(u==null)continue;const{containerLabwareId:p,containedLabwareId:d}=u;n[p]=d}return Object.keys(n).length===0?e:rr(e,(a,s)=>n[s]!=null?{...a,contains:n[s]}:a)},iw=(e,t,r)=>{const n=Object.keys(e.labware),a=new Set(n);let s=rr(e.labware,(o,i)=>{const l=o.stackedOnNode??Oy({stack:o.stack,subjectLabwareId:i,moduleEntities:t,labwareEntityIds:a,modules:e.modules});return l!=null?{...o,stackedOnNode:l}:{...o}});return s=sp(s,r),{...e,labware:s}};function lw(e,t,r){const{labwareId:n,newLocation:a}=e,{robotState:s}=r,{labwareEntities:o}=t,{modules:i,labware:l}=s;if(l[n]==null)return;const u=G(l[n].stack),p=ks(l,u,n),d=p.indexOf(n),f=p.slice(0,d+1),_=c.getIsLid(o[n].def);let m=!1;const h=Object.entries(i).find(([E,{slot:g}])=>{const{type:k}=t.moduleEntities[E]??{};return k===c.FLEX_STACKER_MODULE_TYPE&&g===u})??null,b=h!=null&&h[1].moduleState.type===c.FLEX_STACKER_MODULE_TYPE?Jt.map(E=>h[1].moduleState.labwareOnShuttle?.[E]).filter(E=>E!=null):[],T=b.includes(n)?b.slice(0,b.indexOf(n)+1):[];if(h!=null&&h[1].moduleState.type===c.FLEX_STACKER_MODULE_TYPE){const E=h[1].moduleState,g=Jt.findIndex(k=>E.labwareOnShuttle?.[k]===n);if(g!==-1&&E.labwareOnShuttle!=null)for(const k of Jt.slice(g,Jt.length))if(k==="primaryLabwareId"){E.labwareOnShuttle=null;break}else E.labwareOnShuttle[k]=null}const y=Object.entries(i).find(([E,{slot:g}])=>{const{type:k}=t.moduleEntities[E]??{};return k===c.FLEX_STACKER_MODULE_TYPE&&typeof a=="object"&&("moduleId"in a&&a.moduleId===E||"slotName"in a&&g===a.slotName)})??null,[A,w]=y??[];if(A!=null&&w!=null){const E=T.length>0?T:fa({slot:u,labwareState:l,modulesState:i}),g=E.indexOf(n),k=w.moduleState;if(g!==-1){const v=E.slice(0,g+1).toReversed();if(k.labwareOnShuttle==null&&(k.labwareOnShuttle={primaryLabwareId:"",adapterLabwareId:null,lidLabwareId:null}),v.length===3)for(let q=0;q<Jt.length;q++){const $=Jt[q];k.labwareOnShuttle[$]=v[q]}else if(v.length===2){const q=v.some($=>t.labwareEntities[$].def.allowedRoles?.some(ee=>ee==="lid"))?["primaryLabwareId","lidLabwareId"]:["adapterLabwareId","primaryLabwareId"];for(let $=0;$<q.length;$++){const ee=q[$];k.labwareOnShuttle[ee]=v[$]}}else v.length===1&&(k.labwareOnShuttle.primaryLabwareId=v[0])}}const I=[];if(c.locationIsOffDeck(a))I.push(a);else if("moduleId"in a)if(i[a.moduleId].moduleState.type===c.FLEX_STACKER_MODULE_TYPE)I.push(i[a.moduleId].slot);else if(t.moduleEntities[a.moduleId]?.type===c.VACUUM_MODULE_TYPE){const E=i[a.moduleId].slot,g=fa({slot:E,labwareState:l,modulesState:i});g.length>0?I.push(...g):I.push(a.moduleId,E)}else I.push(a.moduleId,i[a.moduleId].slot);else if("slotName"in a){const{slotName:E}=a;E in l?(m=c.getIsPipettableLabware(o[E].def),I.push(...l[E].stack)):I.push(E)}else if("labwareId"in a){const E=a.labwareId;m=c.getIsPipettableLabware(o[E].def);const g=l[E].stack;I.push(...g)}else if("addressableAreaName"in a)if(ma(a.addressableAreaName)){const E=Object.entries(i).find(([g])=>t.moduleEntities[g]?.type===c.VACUUM_MODULE_TYPE)?.[0];I.push(pc),E!=null&&I.push(E),I.push(a.addressableAreaName)}else I.push(a.addressableAreaName);f.forEach((E,g)=>{if(l[E]!=null){const k=f.slice(g+1);s.labware[E]={...s.labware[E],stack:[E,...k,...I],..._&&m?{sterility:rc}:{}}}});const S=typeof a=="object"&&"labwareId"in a&&c.getIsPipettableLabware(o[a.labwareId].def);let L=a;if(typeof a=="object"&&a!==null&&"moduleId"in a&&i[a.moduleId].moduleState.type===c.FLEX_STACKER_MODULE_TYPE){const E=Rs(i[a.moduleId].slot);E!=null&&(L={addressableAreaName:E})}else if(typeof a=="object"&&a!==null&&"moduleId"in a&&t.moduleEntities[a.moduleId]?.type===c.VACUUM_MODULE_TYPE){const E=i[a.moduleId].slot,g=fa({slot:E,labwareState:l,modulesState:i}),k=g.length>0?g[0]:null;k!=null&&k in o&&(L={labwareId:k})}s.labware[n].stackedOnNode=L,S&&(s.labware[n].sterility=rc),s.labware=sp(rr(s.labware,E=>KE(E,"contains")),o)}function uw(e,t,r){const{pipetteId:n,addressableAreaName:a}=e,{wasteChuteEntities:s,trashBinEntities:o}=t,i=c.WASTE_CHUTE_ADDRESSABLE_AREAS.includes(a),l=Object.values(o).find(d=>d.location===Y_(a))?.id,u=i?Object.values(s)[0].id:l,{robotState:p}=r;p.pipettes[n]={...p.pipettes[n],entityId:u}}function cw(e,t,r){const{pipetteId:n,labwareId:a,wellName:s}=e,{robotState:o}=r;o.pipettes[n]={...o.pipettes[n],entityId:a,wellName:s}}function pw(e,t,r){const{pipetteId:n,labwareId:a,wellName:s}=e,o=t.pipetteEntities[n].spec,i=t.labwareEntities[a].def;if(!c.getIsTiprack(i))throw new Error(`forPickUpTip expected ${a} to be a tiprack`);const l=r.robotState.tipState,u=r.robotState.pipettes[n].nozzles,p=r.robotState.pipettes[n].primaryNozzle,d=lp(u,o),f=(h,b)=>h.find(T=>T.includes(b)),_=(h,b)=>{const T=h.findIndex(A=>A.includes(b));if(T===-1)return null;const y=h[T].indexOf(b);return h.map(A=>A[y])},m=(h,b)=>{const T=c.PARTIAL_NOZZLE_MAP[p],y=h.findIndex(L=>L.includes(b)),A=h[y].indexOf(b),w=h[y];if(w.length-A<T){const L=w.length-T;return w.slice(L,w.length)}const S=A+T;return w.slice(A,Math.min(S,w.length))};if(l.pipettes[n].hasTip=!0,l.pipettes[n].tiprackURI=a,d===c.SINGLE)l.tipracks[a][s]=ue;else if(d===c.PARTIAL_COLUMN&&p){const h=m(i.ordering,s);h==null?console.error(`Invalid primary well for tip pick up for partial config: ${s}`):h.forEach(function(b){l.tipracks[a][b]=ue})}else if(d===c.COLUMN){const h=f(i.ordering,s);h==null&&console.error(`Invalid primary well for tip pickup: ${s}`),h?.forEach(function(b){l.tipracks[a][b]=ue})}else if(d===c.ROW){const h=_(i.ordering,s);h==null&&console.error("Invalid primary well for tip pickup: "+s),h?.forEach(function(b){l.tipracks[a][b]=ue})}else if(d===c.ALL)if(o.channels===96)i.ordering.reduce((b,T)=>b.concat(T),[]).forEach(function(b){l.tipracks[a][b]=ue});else{const h=f(i.ordering,s);h==null&&console.error(`Invalid primary well for tip pickup: ${s}`),h?.forEach(function(b){l.tipracks[a][b]=ue})}else if(o.channels===1)l.tipracks[a][s]=ue;else if(o.channels===96)i.ordering.reduce((b,T)=>b.concat(T),[]).forEach(function(b){l.tipracks[a][b]=ue});else{const h=f(i.ordering,s);h==null&&console.error(`Invalid primary well for tip pickup: ${s}`),h?.forEach(function(b){l.tipracks[a][b]=ue})}r.robotState.pipettes[n].tiprackId=a,r.robotState.pipettes[n].tipWell=s}const dw={clean:Ra,empty:ue,used:Qt};function fw(e,t,r){const{labwareId:n,wellNames:a,tipWellState:s="clean"}=e,o=dw[s],i=r.robotState.tipState.tipracks[n];i!=null&&a.forEach(l=>{i[l]=o})}const jr=(e,t)=>{const r=Ot(e,t);return r.type===c.THERMOCYCLER_MODULE_TYPE?r:(console.error(`Thermocycler state updater expected ${t} moduleState to be thermocycler, but it was ${r.type}`),{})},mw=(e,t,r)=>{const{moduleId:n,celsius:a}=e,{robotState:s}=r,o=jr(s,n);o.currentBlockActivity={type:"blockTargetTemp",blockTargetTemp:a}},hw=(e,t,r)=>{const{moduleId:n,celsius:a}=e,{robotState:s}=r,o=jr(s,n);o.lidTargetTemp=a},_w=(e,t,r)=>{},yw=(e,t,r)=>{},bw=(e,t,r)=>{},Tw=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=jr(a,n);s.currentBlockActivity={type:"blockDeactivated"}},gw=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=jr(a,n);s.lidTargetTemp=null},Iw=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=jr(a,n);s.lidOpen=!1},Ew=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=jr(a,n);s.lidOpen=!0},ww=(e,t,r)=>{const{profile:n,...a}=e;Ry({profileElements:n,...a},t,r)},Ry=(e,t,r)=>{const n=NaN+D();ky({...e,taskId:n},t,r),vy(n,r,c.THERMOCYCLER_MODULE_TYPE)},ky=(e,t,r)=>{const{moduleId:n,taskId:a,profileElements:s}=e,{robotState:o}=r,i=jr(o,n);i.currentBlockActivity={type:"profile",profileElements:s,taskId:a??null},i.numProfilesStarted++},Sw=e=>{if(e.currentBlockActivity.type==="profile"){const t=Aw(e.currentBlockActivity.profileElements);return e.currentBlockActivity=t!=null?{type:"blockTargetTemp",blockTargetTemp:t}:{type:"blockDeactivated"},!0}else return!1};function Aw(e){const t=Yc(pp(e));return t!=null?t.celsius:null}const Lw=(e,t)=>{const[r,n]=[e.ordering,t.ordering];if(r.length!==n.length)return!1;for(let a=0;a<r.length;a++){const[s,o]=[r[a],n[a]];if(s.length!==o.length)return!1}return!0},op=(e,t,r)=>{const{labware:n,liquidState:a}=t,o=ks(n,e).filter(i=>i in r&&c.getIsPipettableLabware(r[i].def));if(o.length===1){const i=a.labware[o[0]];Object.entries(i).forEach(([l,u])=>{i[l]={}});return}if(o.length===2){const i=o[0],l=o[1];if(!Lw(r[i].def,r[l].def))return;const u=a.labware[i],p=a.labware[l];Object.entries(p).forEach(([d,f])=>{const _=u[d];Object.entries(_).forEach(([m,{volume:h}])=>{f[m]={volume:m in f?f[m].volume+h:h}}),u[d]={}})}},Ow=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=ot(a,n);s!=null&&(s.ventStatus=dc)},Rw=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=ot(a,n);s!=null&&(s.ventStatus=ka)},kw=(e,t,r)=>{const{moduleId:n,gaugePressure:a,duration:s,ventAfter:o=!0,taskId:i}=e,{robotState:l}=r,{labwareEntities:u}=t,p=ot(l,n);p!=null&&(op(n,l,u),s==null||i==null?p.currentPumpActivity={type:"indefiniteHold",mode:ju,targetPressure:a}:(p.currentPumpActivity={type:"timedHold",mode:ju,targetPressure:a,durationSeconds:s,taskId:i,ventAfter:o},p.numPumpActivitiesStarted++),p.ventStatus=ka)},vw=(e,t,r)=>{const{moduleId:n,percentPower:a,duration:s,ventAfter:o=!0,taskId:i}=e,{robotState:l}=r,{labwareEntities:u}=t,p=ot(l,n);p!=null&&(op(n,l,u),s==null||i==null?p.currentPumpActivity={type:"indefiniteHold",mode:zu,targetPower:a}:(p.currentPumpActivity={type:"timedHold",mode:zu,targetPower:a,durationSeconds:s,taskId:i,ventAfter:o},p.numPumpActivitiesStarted++),p.ventStatus=ka)},Pw=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=ot(a,n);s!=null&&(s.currentPumpActivity={type:"pumpDeactivated"})},Cw=(e,t,r)=>{const{moduleId:n,steps:a,taskId:s,ventAfter:o=!0}=e,{robotState:i}=r,{labwareEntities:l}=t,u=ot(i,n);u==null||s==null||(op(n,i,l),u.currentPumpActivity={type:"profile",profileElements:a,taskId:s,ventAfter:o},u.numPumpActivitiesStarted++)},Nw=e=>{if(e.currentPumpActivity.type==="timedHold"||e.currentPumpActivity.type==="profile"){const t=e.currentPumpActivity.ventAfter;return e.currentPumpActivity={type:"pumpDeactivated"},e.ventStatus=t?dc:ka,!0}return!1};function Dw(e,t,r){for(const n of e.task_ids)vy(n,r)||r.warnings.push(iI())}const vy=(e,t,r)=>{const{robotState:n}=t,a=Object.values(n.modules).find(s=>{if(r&&s.moduleState.type!==r)return!1;const o=s.moduleState.type==="thermocyclerModuleType"&&s.moduleState.currentBlockActivity.type==="profile"&&s.moduleState.currentBlockActivity.taskId===e,i=s.moduleState.type==="vacuumModuleType"&&(s.moduleState.currentPumpActivity.type==="timedHold"||s.moduleState.currentPumpActivity.type==="profile")&&s.moduleState.currentPumpActivity.taskId===e;return o||i});return a==null?!1:a.moduleState.type==="thermocyclerModuleType"?Sw(a.moduleState):a.moduleState.type==="vacuumModuleType"?Nw(a.moduleState):(console.log(`unexpected module type with task: ${a.moduleState.type}`),!1)},Un=(e,t)=>{const r=Ot(e,t);return r.type===c.HEATERSHAKER_MODULE_TYPE?r:(console.error(`Heater-Shaker state updater expected ${t} moduleState to be heaterShaker, but it was ${r.type}`),{})},Mw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a,celsius:s}=e,o=Un(n,a);o.targetTemp=s},Fw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Un(n,a);s.targetTemp=null},Uw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a,rpm:s}=e,o=Un(n,a);o.targetSpeed=s},qw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Un(n,a);s.targetSpeed=null},$w=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Un(n,a);s.latchOpen=!0},Vw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Un(n,a);s.latchOpen=!1},Bw=(e,t,r)=>{const{pipetteId:n}=e,{robotState:a}=r,s=a.pipettes[n].entityId??"";Ns({invariantContext:t,pipetteId:n,prevLiquidState:a.liquidState,useFullVolume:!0,robotStateAndWarnings:r,entityId:s})},xw=(e,t,r)=>{const{pipetteId:n}=e,{robotState:a}=r,s=a.pipettes[n].entityId??"";a.tipState.pipettes[n]={hasTip:!1,tiprackURI:null},Ns({invariantContext:t,prevLiquidState:a.liquidState,pipetteId:n,useFullVolume:!0,robotStateAndWarnings:r,entityId:s}),a.pipettes[n].tiprackId=void 0};function Py(e,t){e.type===c.MAGNETIC_MODULE_TYPE&&(e.engaged=t)}function Hw(e,t,r){const{moduleId:n}=e,{robotState:a}=r,s=Ot(a,n);Py(s,!0)}function zw(e,t,r){const{moduleId:n}=e,{robotState:a}=r,s=Ot(a,n);Py(s,!1)}const Au=(e,t)=>{if(t==null)return console.error("expected to find defURI but could not in getLabwareByDefURI"),null;const r=e.findIndex(a=>a.labwareDefURI===t);if(r===-1)return null;const[n]=e.splice(r,1);return n.id},Cy=(e,t,r,n)=>{const a=e.labwareInHopper??[];t.forEach(s=>{const{primaryLabwareId:o,adapterLabwareId:i,lidLabwareId:l}=s;r.labware[o]={stack:[o,...l!=null?[l]:[],...n]},i!=null&&(r.labware[i]={stack:[i,o,...l!=null?[l]:[],...n]}),l!=null&&(r.labware[l]={stack:[l,...n]}),a.push({primaryLabwareId:o,adapterLabwareId:i??null,lidLabwareId:l??null})}),e.labwareInHopper=a},Ny=(e,t,r,n,a,s,o,i)=>{const u=Object.entries(e.labware).filter(([d,f])=>f[s]===t[s]).map(([d])=>d).map(d=>r[d]),p=[];for(let d=0;d<n;d++){const f=Au(u,t.storedLabwareDetails?.primaryLabwareURI),_=o!=null?Au(u,t.storedLabwareDetails?.adapterLabwareURI):null,m=i!=null?Au(u,t.storedLabwareDetails?.lidLabwareURI):null;f!=null&&(e.labware[f]={stack:[f,...m!=null?[m]:[],...a]},_!=null&&(e.labware[_]={stack:[_,f,...m!=null?[m]:[],...a]}),m!=null&&(e.labware[m]={stack:[m,...a]}),p.push({primaryLabwareId:f,adapterLabwareId:_,lidLabwareId:m})),t.labwareInHopper=p}},jw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Object.entries(n.labware).filter(([,i])=>i.stack.includes(Ze)&&i.stack.includes(a)),o=mt(n,a);o!=null&&o.labwareInHopper!=null&&(e.count!=null?o.labwareInHopper=o.labwareInHopper.slice(0,e.count):o.labwareInHopper=[]),s.forEach(([i])=>{n.labware[i]={...n.labware[i],stack:[i,c.SYSTEM_LOCATION]}})},Gw=(e,t,r)=>{const{robotState:n}=r,{labwareEntities:a}=t,{moduleId:s,labware:o}=e,i=n.modules[s].slot,l=mt(n,s);if(l==null||l.storedLabwareDetails==null)return;const{primaryLabwareURI:u,adapterLabwareURI:p,lidLabwareURI:d}=l.storedLabwareDetails,f=[];for(const b of o){const T=a[b].labwareDefURI;if(T===u)f.push({primaryLabwareId:b,adapterLabwareId:null,lidLabwareId:null});else if(T===p){const y=f[f.length-1];y&&(y.adapterLabwareId=b)}else if(T===d){const y=f[f.length-1];y&&(y.lidLabwareId=b)}}const _=[Ze,s,i];for(const b of f){const T=[b.adapterLabwareId,b.primaryLabwareId,b.lidLabwareId,..._].filter(A=>A!=null);n.labware[b.primaryLabwareId]={...n.labware[b.primaryLabwareId],stack:T.slice(T.indexOf(b.primaryLabwareId))},b.adapterLabwareId!=null&&(n.labware[b.adapterLabwareId]={...n.labware[b.adapterLabwareId],stack:T.slice(T.indexOf(b.adapterLabwareId))}),b.lidLabwareId!=null&&(n.labware[b.lidLabwareId]={...n.labware[b.lidLabwareId],stack:T.slice(T.indexOf(b.lidLabwareId))});let y=null;for(const A of T)a[A]!=null&&(y==null?n.labware[A].stackedOnNode={kind:"inStackerHopper",moduleId:s}:n.labware[A].stackedOnNode={labwareId:y},y=A)}const m=l.labwareInHopper??[],h=f.map(({primaryLabwareId:b,adapterLabwareId:T,lidLabwareId:y})=>({primaryLabwareId:b,adapterLabwareId:T,lidLabwareId:y}));l.labwareInHopper=[...m,...h]},Ww=(e,t,r)=>{const{robotState:n}=r,{labwareEntities:a}=t,{moduleId:s,primaryLabware:o,initialCount:i,adapterLabware:l,lidLabware:u,initialStoredLabware:p}=e,d=n.modules[s].slot,f=mt(n,s),_=[Ze,s,d];f!=null&&(f.storedLabwareDetails={primaryLabwareURI:`${o.namespace}/${o.loadName}/${o.version}`,adapterLabwareURI:l!=null?`${l.namespace}/${l.loadName}/${l.version}`:null,lidLabwareURI:u!=null?`${u.namespace}/${u.loadName}/${u.version}`:null},i!=null?Ny(n,f,a,i,_,"setStoredLabwareCount",l?.loadName,u?.loadName):p!=null&&Cy(f,p,n,_),f.setStoredLabwareCount=(f?.setStoredLabwareCount??0)+1)},Yw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a,labware:s}=e,{labwareEntities:o}=t,i=n.modules[a].slot,l=mt(n,a);if(l==null)return;const u=s.map(I=>I.split(":")[1]),p=new Set(u),d=Array.from(p),f=d.find(I=>Object.values(o).find(S=>S.labwareDefURI===I&&!S.def.allowedRoles?.includes("lid")&&!S.def.allowedRoles?.includes("adapter"))),_=d.find(I=>Object.values(o).find(S=>S.labwareDefURI===I&&S.def.allowedRoles?.includes("adapter"))),m=d.find(I=>Object.values(o).find(S=>S.labwareDefURI===I&&S.def.allowedRoles?.includes("lid")));if(f==null)throw new Error(`expected to find primaryLabwareURI for storedLabwareDetails but could not with labware ${s}`);l.storedLabwareDetails={primaryLabwareURI:f,adapterLabwareURI:_??null,lidLabwareURI:m??null};const h=[];for(const I of s){const S=o[I].labwareDefURI;if(S===f)h.push({primary:I,adapter:null,lid:null});else if(S===_){const L=h[h.length-1];L&&(L.adapter=I)}else if(S===m){const L=h[h.length-1];L&&(L.lid=I)}}const b=[Ze,a,i];for(const I of h){const S=[I.adapter,I.primary,I.lid,...b].filter(L=>L!=null);n.labware[I.primary]={...n.labware[I.primary],stack:S.slice(S.indexOf(I.primary))},I.adapter!=null&&(n.labware[I.adapter]={...n.labware[I.adapter],stack:S.slice(S.indexOf(I.adapter))}),I.lid!=null&&(n.labware[I.lid]={...n.labware[I.lid],stack:S.slice(S.indexOf(I.lid))})}const T=l.labwareInHopper??[],y=h.map(I=>({primaryLabwareId:I.primary,adapterLabwareId:I.adapter,lidLabwareId:I.lid})),A=new Map(T.map(I=>[I.primaryLabwareId,I])),w=[];for(const I of y)w.push(I),A.delete(I.primaryLabwareId);for(const I of T)A.has(I.primaryLabwareId)&&w.push(I);l.labwareInHopper=w},Kw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a,count:s,labwareToStore:o}=e,{labwareEntities:i}=t,l=n.modules[a].slot,u=mt(n,a),p=[Ze,a,l];if(u!=null){const d=u.storedLabwareDetails?.adapterLabwareURI,f=u.storedLabwareDetails?.lidLabwareURI;s!=null?Ny(n,u,i,s,p,"fillCount",d,f):o!=null&&Cy(u,o,n,p),u.fillCount=(u?.fillCount??0)+1}},Xw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=mt(n,a),o=n.modules[a].slot;if(s!=null){const{labwareInHopper:i,labwareOnShuttle:l}=s;if(i!=null&&i.length>0&&l==null){const u=i[0];s.labwareOnShuttle=u,i.shift();const p=[o];let d=null;for(const f of Jt){const _=u[f];if(_!=null){if(p.unshift(_),n.labware[_].stack=[...p],d==null){const m=Rs(o);m!=null?n.labware[_].stackedOnNode={addressableAreaName:m}:console.warn(`Could not find an addressable area for retrieved labware in stacker module ${a} at slot ${o}`)}else n.labware[_].stackedOnNode={labwareId:d};d=_}}}}},Zw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=mt(n,a),o=n.modules[a].slot;if(s!=null){const{labwareOnShuttle:i}=s;if(i!=null){s.labwareInHopper=[i,...s.labwareInHopper??[]],s.labwareOnShuttle=null;let l=null;for(const u of Jt){const p=i[u];p!=null&&(n.labware[p].stack=[p,Ze,a,o],l==null?(n.labware[p].stackedOnNode={kind:"inStackerHopper",moduleId:a},l=p):n.labware[p].stackedOnNode={labwareId:l})}s.storedLabwareDetails==null&&(s.storedLabwareDetails={primaryLabwareURI:t.labwareEntities[i.primaryLabwareId].labwareDefURI,adapterLabwareURI:i.adapterLabwareId!=null?t.labwareEntities[i.adapterLabwareId].labwareDefURI:null,lidLabwareURI:i.lidLabwareId!=null?t.labwareEntities[i.lidLabwareId].labwareDefURI:null})}}};function Dy(e,t,r){e.type===c.TEMPERATURE_MODULE_TYPE&&(e.targetTemperature=t,e.status=r)}function Qw(e,t,r){const{robotState:n}=r,{moduleId:a,celsius:s}=e,o=Ot(n,a);Dy(o,s,uc)}function Jw(e,t,r){const{robotState:n}=r,{moduleId:a,celsius:s}=e,o=Ot(n,a);o.type===c.TEMPERATURE_MODULE_TYPE&&s===o.targetTemperature&&(o.status=lc)}function eS(e,t,r){const{robotState:n}=r,{moduleId:a}=e,s=Ot(n,a);Dy(s,null,Oa)}function My(e,t,r){if(!e)throw new Error("undefined command passed to getNextRobotStateAndWarning");switch(e.commandType){case"aspirateWhileTracking":case"aspirate":case"aspirateInPlace":if(e.meta?.isAirGap===!0)break;cE(e.params,t,r);break;case"airGapInPlace":KI(e.params,t,r);break;case"dispenseWhileTracking":case"dispense":case"dispenseInPlace":if(e.meta?.isAirGap===!0)break;fE(e.params,t,r);break;case"blowout":pE(e.params,t,r);break;case"dropTip":mE(e.params,t,r);break;case"pickUpTip":pw(e.params,t,r);break;case"setTipState":fw(e.params,t,r);break;case"magneticModule/engage":Hw(e.params,t,r);break;case"magneticModule/disengage":zw(e.params,t,r);break;case"moveLabware":lw(e.params,t,r);break;case"waitForTasks":Dw(e.params,t,r);break;case"flexStacker/setStoredLabware":Ww(e.params,t,r);break;case"flexStacker/setStoredLabwareItems":Yw(e.params,t,r);break;case"flexStacker/prepareShuttle":case"flexStacker/closeLatch":case"flexStacker/openLatch":break;case"flexStacker/empty":jw(e.params,t,r);break;case"flexStacker/fill":Kw(e.params,t,r);break;case"flexStacker/fillItems":Gw(e.params,t,r);break;case"flexStacker/retrieve":Xw(e.params,t,r);break;case"flexStacker/store":Zw(e.params,t,r);break;case"touchTip":case"configureForVolume":case"loadPipette":case"loadLabware":case"loadModule":case"home":case"moveRelative":case"moveToSlot":case"moveToCoordinates":case"savePosition":case"waitForResume":case"waitForDuration":case"pause":case"delay":case"custom":case"comment":case"captureImage":case"prepareToAspirate":case"liquidProbe":case"loadLiquidClass":case"loadLidStack":case"loadLid":case"getTipPresence":case"identifyModule":case"getNextTip":case"retractAxis":case"sealPipetteToTip":case"tryLiquidProbe":case"unsealPipetteFromTip":case"verifyTipPresence":case"pressureDispense":case"createTimer":break;case"moveToAddressableArea":case"moveToAddressableAreaForDropTip":uw(e.params,t,r);break;case"moveToWell":cw(e.params,t,r);break;case"loadLiquid":hE(e.params,t,r);break;case"dropTipInPlace":xw(e.params,t,r);break;case"blowOutInPlace":Bw(e.params,t,r);break;case"configureNozzleLayout":dE(e.params,t,r);break;case"temperatureModule/setTargetTemperature":Qw(e.params,t,r);break;case"temperatureModule/deactivate":eS(e.params,t,r);break;case"temperatureModule/waitForTemperature":Jw(e.params,t,r);break;case"thermocycler/setTargetBlockTemperature":mw(e.params,t,r);break;case"thermocycler/setTargetLidTemperature":hw(e.params,t,r);break;case"thermocycler/waitForBlockTemperature":_w(e.params);break;case"thermocycler/waitForLidTemperature":yw(e.params);break;case"thermocycler/deactivateBlock":Tw(e.params,t,r);break;case"thermocycler/deactivateLid":gw(e.params,t,r);break;case"thermocycler/closeLid":Iw(e.params,t,r);break;case"thermocycler/openLid":Ew(e.params,t,r);break;case"thermocycler/runProfile":ww(e.params,t,r);break;case"thermocycler/runExtendedProfile":Ry(e.params,t,r);break;case"thermocycler/startRunExtendedProfile":ky(e.params,t,r);break;case"thermocycler/awaitProfileComplete":bw(e.params);break;case"heaterShaker/deactivateHeater":Fw(e.params,t,r);break;case"heaterShaker/setTargetTemperature":Mw(e.params,t,r);break;case"heaterShaker/setAndWaitForShakeSpeed":case"heaterShaker/setShakeSpeed":Uw(e.params,t,r);break;case"heaterShaker/deactivateShaker":qw(e.params,t,r);break;case"heaterShaker/openLabwareLatch":$w(e.params,t,r);break;case"heaterShaker/closeLabwareLatch":Vw(e.params,t,r);break;case"heaterShaker/waitForTemperature":break;case"absorbanceReader/openLid":GI(e.params,t,r);break;case"absorbanceReader/closeLid":WI(e.params,t,r);break;case"absorbanceReader/initialize":YI(e.params,t,r);break;case"absorbanceReader/read":break;case"vacuumModule/startSetVacuumPressure":kw(e.params,t,r);break;case"vacuumModule/startSetVacuumPower":vw(e.params,t,r);break;case"vacuumModule/openVent":Ow(e.params,t,r);break;case"vacuumModule/closeVent":Rw(e.params,t,r);break;case"vacuumModule/stopVacuum":Pw(e.params,t,r);break;case"vacuumModule/startRunProfile":Cw(e.params,t,r);break;default:console.error(`unknown command: ${e.commandType} passed to getNextRobotStateAndWarning`)}}function Fy(e,t,r){return _y({warnings:[],robotState:r},a=>{My(e,t,a)})}function ip(e,t,r){const n=yy(e);return _y({warnings:[],robotState:r},s=>{n.forEach(o=>{My(o,t,s)})})}const tS=(e,t,r)=>{const n=e.reduce((a,s,o)=>{const i=a.timeline.length===0?r:Yc(a.timeline).robotState;if(a.errors!=null)return a;const l=s(t,i);if("errors"in l)return{timeline:a.timeline,errors:l.errors};const p=yy(l.commands).reduce((f,_)=>Fy(_,t,f.robotState),{robotState:i,warnings:[]}),d={commands:l.commands,robotState:p.robotState,warnings:l.warnings,stepInfo:{stepNumber:l.stepNumber,name:l.name,description:l.description},python:l.python};return{timeline:[...a.timeline,d],errors:null}},{timeline:[],errors:null});return{timeline:n.timeline,errors:n.errors}},qn=(e,t)=>{const r=t[e]?.stack;return r!=null?G(r):""},$n=e=>{if(e.type===c.VACUUM_MODULE_TYPE){const t=e;return t.currentPumpActivity.type==="timedHold"||t.currentPumpActivity.type==="profile"}if(e.type===c.THERMOCYCLER_MODULE_TYPE){const t=e;return t.currentBlockActivity.type==="profile"||t.currentBlockActivity.type==="blockTargetTemp"}return!1},Vn=e=>{const{pipette:t,labware:r,invariantContext:n,prevRobotState:a}=e;if(n.config.OT_PD_DISABLE_MODULE_RESTRICTIONS)return!1;const s=t?n.pipetteEntities[t]:null,o=r?G(a.labware[r]?.stack):null;if(!t||!r||!s||!o)return!1;const i=Object.keys(n.moduleEntities).some(l=>{const u=n.moduleEntities[l].model;if(Dh.includes(u)){const p=a.modules[l]?.slot;return p==="1"&&o==="4"||p==="3"&&o==="6"}else return!1});return c.GEN_ONE_MULTI_PIPETTES.includes(s.name)&&i},ae=(e,t,r)=>{const n=e.reduce((a,s)=>{if(a.errors.length>0)return a;const o=s(t,a.robotState);if("errors"in o)return{robotState:a.robotState,commands:a.commands,errors:o.errors,warnings:a.warnings};const i=[...a.commands,...o.commands],l=[...a.python?[a.python]:[],...o.python?[o.python]:[]].join(`
|
|
54
|
+
`]:[]],i=`${be}.home(${o.join(", ")})`;return{commands:[s],python:i}},_I=(e,t,r)=>{const{pipetteId:n,axis:a,distance:s}=e,{pipetteEntities:o}=t,i=o[n].pythonName,l=[{commandType:"moveRelative",key:D(),params:{pipetteId:n,axis:a,distance:s}}],u=[`axis=${N(a)}`,`distance=${s}`];return{commands:l,python:`${i}.move_axes_relative(${u.join(", ")})`}},yI=(e,t,r)=>{const{pipetteId:n,coordinates:a,minimumZHeight:s,forceDirect:o}=e,{pipetteEntities:i}=t,l=i[n].pythonName,u=[{commandType:"moveToCoordinates",key:D(),params:{pipetteId:n,coordinates:a,minimumZHeight:s,forceDirect:o}}],p=[`coordinates=${Cc([a.x,a.y,a.z])}`,...o?["force_direct=True"]:[],...s?[`minimum_z_height=${s}`]:[]];return{commands:u,python:`${l}.move_axes_to(${p.join(", ")})`}},bI=(e,t,r)=>{const{pipetteId:n,labwareId:a,wellName:s,wellLocation:o}=e,{pipetteEntities:i}=t,l=i[n].pythonName,u=t.labwareEntities[a].pythonName;return{commands:[{commandType:"tryLiquidProbe",key:D(),params:{pipetteId:n,labwareId:a,wellName:s,wellLocation:o}}],python:`${l}.detect_liquid_presence(${u}[${N(s)}])`}},q_=(e,t,r)=>{const n=t.moduleEntities[e.moduleId].pythonName;return{commands:[{commandType:"heaterShaker/closeLabwareLatch",key:D(),params:{moduleId:e.moduleId}}],python:`${n}.close_labware_latch()`}},Gu=(e,t,r)=>{const n=t.moduleEntities[e.moduleId].pythonName;return{commands:[{commandType:"heaterShaker/deactivateHeater",key:D(),params:{moduleId:e.moduleId}}],python:`${n}.deactivate_heater()`}},TI=["1","4","7","10"],$_=(e,t,r)=>{const{pipetteEntities:n,labwareEntities:a,moduleEntities:s}=t,o=r.modules[e.moduleId].slot,i=Object.keys(n)[0],l=n[i]?.spec;if(!((l?.displayCategory==="FLEX"||l?.channels===96)??!1)&&Uy(r.labware,a,o)){const d=TI.includes(o)?"right":"left";return{errors:[Wb(d)]}}const p=s[e.moduleId].pythonName;return{commands:[{commandType:"heaterShaker/openLabwareLatch",key:D(),params:{moduleId:e.moduleId}}],python:`${p}.open_labware_latch()`}},V_=(e,t,r)=>{const{moduleEntities:n}=t,{moduleId:a,rpm:s}=e;if(a===null)return{errors:[Q()]};if(n[a]?.type!==c.HEATERSHAKER_MODULE_TYPE)throw new Error(`expected module ${a} to be heaterShaker, got ${n[a]?.type}`);const o=n[a].pythonName;return{commands:[{commandType:"heaterShaker/setAndWaitForShakeSpeed",key:D(),params:{moduleId:a,rpm:s}}],python:`${o}.set_and_wait_for_shake_speed(${s})`}},Wu=(e,t,r)=>{const n=t.moduleEntities[e.moduleId].pythonName;return{commands:[{commandType:"heaterShaker/deactivateShaker",key:D(),params:{moduleId:e.moduleId}}],python:`${n}.deactivate_shaker()`}},Uc=(e,t,r)=>{const{moduleId:n}=e,{moduleEntities:a,labwareEntities:s}=t,o=[],i=a[n].pythonName,u=Object.values(r.labware).filter(f=>f.stack.includes(n)).find(f=>f.stack.find(_=>s[_]?.def.allowedRoles?.includes("lid")&&s[_]?.def.parameters.loadName!=="opentrons_tough_pcr_auto_sealing_lid")),p=u!=null?xc(u.stack):null,d=p!=null?s[p].def.metadata.displayName:null;return d!=null&&o.push(rT({lidDisplayName:d})),o.length>0?{errors:o}:{commands:[{commandType:"thermocycler/closeLid",key:D(),params:{moduleId:n}}],python:`${i}.close_lid()`}},B_=(e,t,r)=>{const n=t.moduleEntities[e.moduleId].pythonName;return{commands:[{commandType:"thermocycler/deactivateBlock",key:D(),params:{moduleId:e.moduleId}}],python:`${n}.deactivate_block()`}},x_=(e,t,r)=>{const n=t.moduleEntities[e.moduleId].pythonName;return{commands:[{commandType:"thermocycler/deactivateLid",key:D(),params:{moduleId:e.moduleId}}],python:`${n}.deactivate_lid()`}},H_=(e,t,r)=>{const n=t.moduleEntities[e.moduleId].pythonName;return{commands:[{commandType:"thermocycler/openLid",key:D(),params:{moduleId:e.moduleId}}],python:`${n}.open_lid()`}},z_=(e,t,r)=>{e.celsius!==void 0&&console.warn("'volume' param not implemented for thermocycler/setTargetBlockTemperature, should not be set!");const n=t.moduleEntities[e.moduleId].pythonName;return{commands:[{commandType:"thermocycler/setTargetBlockTemperature",key:D(),params:{moduleId:e.moduleId,celsius:e.celsius}}],python:`${n}.set_block_temperature(${e.celsius})`}},qc=(e,t,r)=>{const{moduleId:n,celsius:a}=e,s=t.moduleEntities[n].pythonName;return{commands:[{commandType:"thermocycler/setTargetLidTemperature",key:D(),params:{moduleId:n,celsius:a}}],python:`${s}.set_lid_temperature(${a})`}};function O(e,t){return(r,n)=>e(t,r,n)}function R(e,t){return(r,n)=>{const a=e(t,r,n);if("python"in a){const{python:s,...o}=a;return o}return a}}const je="__air__",zr="source_well",Mn="dest_well";function j_(e){return Kh.includes(e.parameters.loadName)}const gI=e=>(e.parameters.quirks??[]).includes("vacuumModuleDock"),G_=(e,t,r)=>{const s=c.getDeckDefFromRobotType(r).cutoutFixtures.find(l=>l.id.includes(t))?.providesAddressableAreas,i=(l=>{if(s!=null){for(const u in s)if(s[u].includes(l))return u}return null})(e);if(i==null)throw Error(`expected to find cutoutId from addressableAreaName ${e} but could not`);return i};function W_(e){switch(e){case 1:return c.ONE_CHANNEL_WASTE_CHUTE_ADDRESSABLE_AREA;case 8:return c.EIGHT_CHANNEL_WASTE_CHUTE_ADDRESSABLE_AREA;case 96:return c.NINETY_SIX_CHANNEL_WASTE_CHUTE_ADDRESSABLE_AREA}}function $c(e){const t=c.getDeckDefFromRobotType(e==="cutout12"?c.OT2_ROBOT_TYPE:c.FLEX_ROBOT_TYPE);let r=null;return t.robot.model===c.FLEX_ROBOT_TYPE&&(r=t.cutoutFixtures.find(n=>n.id==="trashBinAdapter")?.providesAddressableAreas??null),t.robot.model===c.FLEX_ROBOT_TYPE&&r==null&&console.error(`expected to find a list of cutouts for the Flex but could not with trashLocation ${e}`),r!=null?r[e]?.[0]:"fixedTrash"}function Y_(e){if(e==="fixedTrash")return"cutout12";const r=c.getDeckDefFromRobotType(c.FLEX_ROBOT_TYPE).cutoutFixtures.find(n=>n.id==="trashBinAdapter")?.providesAddressableAreas??null;if(r==null)return console.error("Could not find trashBinAdapter cutouts for Flex"),null;for(const[n,a]of Object.entries(r))if(a.includes(e))return n;return console.error(`Could not find trashLocation for addressableAreaName ${e}`),null}function Fn(e,t,r,n){return e[n]!=null?"labware":t[n]!=null?"wasteChute":r[n]!=null?"trashBin":(console.error(`expected to determine if dest labware is a labware or waste chute with destLabware ${n} but could not`),null)}function K_(e,t){return Sn(bn(t),r=>e)}function mr(e){return ut(e,(t,r,n)=>n===je?t:t+r.volume,0)}function er(e,t){const r=mr(t);if(r===0)return{source:t,dest:{[je]:{volume:e}}};if(e>r)return{source:rr(t,()=>({volume:0})),dest:{...t,[je]:{volume:e-r}}};const n=ut(t,(a,s,o)=>({...a,[o]:s.volume/r}),{});return Object.keys(t).reduce((a,s)=>{const o=n[s]*e;return{source:{...a.source,[s]:{volume:t[s].volume-o}},dest:{...a.dest,[s]:{volume:o}}}},{source:{},dest:{}})}function hr(e,t){return{...t,...ut(e,(r,n,a)=>{const o=a in t?n.volume+t[a].volume:n.volume;return{...r,[a]:{volume:o}}},{})}}function Vc(e,t,r){const n=e===1?[r]:c.getWellNamePerMultiTip(t,r,e);if(!n)return console.warn(e===1?`Invalid well: ${r}`:`For labware def (URI ${c.getLabwareDefURI(t)}), with primary well ${r}, no wells are accessible by 8-channel's 1st tip`),{wellsForTips:[],allWellsShared:!1};const a=n.every(s=>s&&s===n[0]);return{wellsForTips:n,allWellsShared:a}}const X_=e=>{const{pipette:t,sourceLabwareId:r,sourceWell:n,destLabwareId:a,destWell:s,blowoutLocation:o,flowRate:i,offsetFromTopMm:l,invariantContext:u}=e;if(!o)return[];const{trashBinEntities:p,wasteChuteEntities:d}=u;let f=null,_=null;return o===zr?(f=r,_=n):o===Mn&&(f=a,_=s),_!=null&&f!=null?[O(Rc,{pipetteId:t,labwareId:f,wellName:_,flowRate:i,wellLocation:{origin:"top",offset:{z:l}}})]:d[o]!=null?[O(pb,{pipetteId:t,flowRate:i,wasteChuteId:Object.keys(d)[0]})]:[O(cb,{pipetteId:t,trashId:Object.keys(p)[0],flowRate:i})]};function Z_(e){const{labwareEntities:t,pipetteEntities:r,wasteChuteEntities:n,trashBinEntities:a}=e;return{pipettes:ut(r,(s,o,i)=>{const l=o.spec;return{...s,[i]:Q_(l.channels,{})}},{}),labware:ut(t,(s,o,i)=>({...s,[i]:rr(o.def.wells,()=>({}))}),{}),trashBins:ut(a,(s,o,i)=>({...s,[i]:{}}),{}),wasteChute:ut(n,(s,o,i)=>({...s,[i]:{}}),{})}}function Q_(e,t){return bn(e).reduce((r,n)=>({...r,[n]:t}),{})}const J_=e=>{const{blowoutLocation:t,sourceLabware:r,destLabware:n,sourceWell:a,destWell:s}=e;return t===zr&&r!=null&&a!=null?{dispenseAirGapLabware:r,dispenseAirGapWell:a}:{dispenseAirGapLabware:n,dispenseAirGapWell:s}};function Bc(e){const{invariantContext:t,labwareLocations:r,moduleLocations:n={},pipetteLocations:a}=e;return{labware:r,modules:n,pipettes:a,liquidState:Z_(t),tipState:{pipettes:ut(a,(s,o,i)=>o.mount?{...s,[i]:{hasTip:!1,tiprackURI:null}}:s,{}),tipracks:ut(r,(s,o,i)=>{const l=t.labwareEntities[i].def;if(!c.getIsTiprack(l))return s;const u=rr(l.wells,()=>Ra);return{...s,[i]:u}},{})}}}const ey=(e,t)=>e.tipracks[t]!=null?Object.values(e.tipracks[t]).some(r=>r!==ue):!1,ty=(e,t)=>e.labware[t]!=null?Object.values(e.labware[t]).some(r=>Object.values(r).some(n=>n.volume>0)):!1,II=(e,t,r)=>{const{destinationId:n,pipetteId:a,volume:s,flowRate:o,offsetFromBottomMm:i,well:l,xOffset:u,yOffset:p,tipRack:d,primaryNozzle:f,nozzles:_}=e,{labwareEntities:m,trashBinEntities:h,wasteChuteEntities:b}=t,T=Fn(m,b,h,n);let y=[];return T==="labware"&&i!=null&&l!=null?y=[O(kc,{pipetteId:a,volume:s,labwareId:n,wellName:l,flowRate:o,wellLocation:{origin:"bottom",offset:{z:i,x:u,y:p}},tipRack:d,primaryNozzle:f,nozzles:_})]:T==="wasteChute"?y=[O(cA,{pipetteId:a,volume:s,flowRate:o,wasteChuteId:b[n].id})]:y=[O(uA,{pipetteId:a,volume:s,flowRate:o,trashId:h[n].id})],ae(y,t,r)},EI=(e,t,r)=>{const{destinationId:n,pipetteId:a,zOffset:s,well:o}=e,{labwareEntities:i,wasteChuteEntities:l,trashBinEntities:u}=t,p=Fn(i,l,u,n);let d=[];return p==="labware"&&o!=null?d=[O(B,{pipetteId:a,labwareId:n,wellName:o,wellLocation:{origin:"bottom",offset:{x:0,y:0,z:s}}})]:p==="wasteChute"?d=[O(Fe,{pipetteId:a,fixtureId:l[n].id,offset:{x:0,y:0,z:0}})]:d=[O(Fe,{pipetteId:a,fixtureId:u[n].id,offset:wt})],ae(d,t,r)},wI=(e,t,r)=>{const{blowOutLocation:n,destinationId:a,destWell:s,flowRate:o,pipetteId:i,sourceId:l,sourceWell:u,volume:p}=e,{labwareEntities:d,trashBinEntities:f,wasteChuteEntities:_}=t,m=Fn(d,_,f,a);let h=[];if(m==="labware"&&s!=null){const{dispenseAirGapLabware:b,dispenseAirGapWell:T}=J_({blowoutLocation:n,sourceLabware:l,destLabware:a,sourceWell:u,destWell:s});h=[O(aA,{flowRate:o,pipetteId:i,labwareId:b,wellName:T,volume:p,type:"dispense"})]}else m==="wasteChute"?h=[O(nA,{pipetteId:i,volume:p,flowRate:o,wasteChuteId:_[a].id})]:h=[O(rA,{pipetteId:i,volume:p,flowRate:o,trashId:f[a].id})];return ae(h,t,r)},SI=(e,t,r)=>{const{pipetteId:n,destinationId:a,well:s,zOffset:o,seconds:i}=e,{labwareEntities:l,trashBinEntities:u,wasteChuteEntities:p}=t,d=Fn(l,p,u,a);let f=[];return s!=null&&d==="labware"?f=[O(B,{pipetteId:n,labwareId:a,wellName:s,wellLocation:{origin:"bottom",offset:{x:0,y:0,z:o}}}),O(me,{seconds:i})]:d==="wasteChute"?f=[O(Fe,{pipetteId:n,fixtureId:a,offset:wt}),O(me,{seconds:i})]:f=[O(Fe,{pipetteId:n,fixtureId:a,offset:wt}),O(me,{seconds:i})],ae(f,t,r)},G=(e,t=!1)=>{if(e==null)return console.error("expected to find stack but could not"),"unknown slot";{const r=e[e.length-1];return t?`STACKER ${r.slice(-2,-1)}`:r}},AI=e=>e===c.VACUUM_MODULE_DOCK_A4_ADDRESSABLE_AREA?Xh:e,xc=e=>e==null?(console.error("expected to find stack but could not"),"unknown top location"):e[0],ry=e=>e.length>=2?e[1]:null,fa=e=>{const{slot:t,labwareState:r,modulesState:n}=e,a=Object.values(n).find(({slot:s,moduleState:o})=>s===t&&o.type===c.FLEX_STACKER_MODULE_TYPE);if(a!=null){const s=a.moduleState.labwareOnShuttle;return s==null?[]:[s.lidLabwareId,s.primaryLabwareId,s.adapterLabwareId].filter(i=>i!=null)}return Object.values(r).reduce((s,{stack:o})=>(o[o.length-1]===t&&o.length>s.length&&(s=o),s),[])},Hc=e=>c.FLEX_SINGLE_SLOT_BY_CUTOUT_ID[c.FLEX_CUTOUT_BY_SLOT_ID[e]],ny=e=>{const t=c.FLEX_STACKER_ADDRESSABLE_AREAS.indexOf(e);return t===-1?null:ve[t]},LI=e=>{const t=ny(e);return t!=null?Hc(t):null},ay=(e,t,r)=>{if(e==null)return null;if(ve.includes(e)){const n=Hc(e);return Object.entries(t).some(([s,o])=>r[s]?.type===c.FLEX_STACKER_MODULE_TYPE&&o.slot===n)?n:e}return e},Rs=e=>{const t=c.getDeckDefFromRobotType(c.FLEX_ROBOT_TYPE),r=`${e[0]}3`,n=c.FLEX_CUTOUT_BY_SLOT_ID[r],a=t.cutoutFixtures.find(({id:s})=>s===c.FLEX_STACKER_V1_FIXTURE)?.providesAddressableAreas[n];return c.FLEX_STACKER_ADDRESSABLE_AREAS.find(s=>a?.includes(s))??null},sy=(e,t,r,n)=>{if(t.length===0)return{isCompatible:!0,isAboveStackLimit:!1};let a=!1;const s=t.find(u=>u in n);s!=null&&(a=n[s].type===c.FLEX_STACKER_MODULE_TYPE&&t.includes(Ze));const o=xc(t);let i=!0,l=!1;if(o in r){const u=r[e],p=r[o],d=t.filter(g=>r[g]!=null),f=d.filter(g=>r[g]?.def?.allowedRoles?.includes("lid"))[0],_=d.filter(g=>r[g]?.def?.allowedRoles?.includes("adapter"))[0],m=p.def.parameters.loadName,h=d.filter(g=>!r[g]?.def?.allowedRoles?.includes("adapter")&&!r[g]?.def?.allowedRoles?.includes("lid"))[0];if(a){const g=c.getMaxPoolCount({labwareDefinitions:{primary:r[h]?.def??null,adapter:r[_]?.def??null,lid:r[f]?.def??null},model:c.FLEX_STACKER_MODULE_V1});l=t.length>g}else{const g=p.def.stackLimit??1,k=m===u.def.parameters.loadName,v=t.filter(q=>r[q]?.def.parameters.loadName===m)?.length;l=k&&v>=g}const b=u.def.parameters.loadName==="opentrons_tough_universal_lid",T=p.def.metadata.displayCategory==="tubeRack",y=p.def.metadata.displayCategory==="aluminumBlock",A=p.def.parameters.isTiprack,I=(p.def.allowedRoles??[]).includes("lid"),S=j_(p.def),L=t.some(g=>g in r&&gI(r[g].def)),E=u.def.parameters.quirks?.includes("vacuumModuleDock")??!1;i=(u.def.parameters.quirks?.includes("filterPlate")??!1)&&!I&&!A&&!(p.def.parameters.quirks?.includes("filterPlate")??!1)||!L&&E||(p.def.parameters.quirks?.includes("providesStackingDefault")??!1)&&!S||u.def.compatibleParentLabware?.some(g=>g===m)||Object.keys(u.def.stackingOffsetWithLabware??{}).some(g=>g===m)||b&&!T&&!y&&!A&&(p.def.parameters.loadName==="opentrons_tough_universal_lid"||!I)}else if(o in n){const u=n[o],{model:p}=u;i=Object.keys(r[e].def.stackingOffsetWithModule??{}).some(d=>p===d)}return{isCompatible:i,isAboveStackLimit:l}},Fa=(e,t)=>t?.find(r=>e[r]!=null)??null,OI=(e,t,r)=>t?e:r?Wh[e]:e,ks=(e,t,r)=>{if(t==="offDeck"&&r==null)return console.error("offDeck slot is not allowed to be used without an offDeckOverrideId"),[];const n=ma(t),a=oy(t),s=OI(t,n,a),o=Object.values(e).filter(i=>i.stack.includes(s)&&(r==null||i.stack.includes(r))&&i.stack.includes(Ze)===a&&i.stack.includes(pc)===n);return o.length===0?[]:a?o.at(-1)?.stack??[]:n?o.at(-1)?.stack??[]:o.toSorted((i,l)=>l.stack.length-i.stack.length)[0]?.stack??[]},RI=(e,t)=>Object.values(t).filter(r=>r.stack.includes(e)).sort((r,n)=>n.stack.length-r.stack.length)[0]?.stack[0],ua=(e,t,r,n=!0)=>{const a=c.linearInterpolate(e,t)??0,s=c.linearInterpolate(e,r)??0;return e+(n?a:0)+s},zc=e=>{const{path:t,volume:r,pipetteSpecs:n,tiprackDefinition:a,conditioningByVolume:s,disposalByVolume:o,numDispenseWells:i,numAspirateWells:l,aspirateAirGapByVolume:u}=e,{liquids:p}=n,f=r<p.default.minVolume&&"lowVolumeDefault"in p?p.lowVolumeDefault.maxVolume:p.default.maxVolume,_=a?.wells.A1.totalLiquidVolume,m=_==null?f:Math.min(f,_),h=r*2,b=s!=null?c.linearInterpolate(h,s)??0:0,y=a?.namespace!=="opentrons"||s!=null&&o!=null&&m>=h+b+(c.linearInterpolate(h,o)??0)+(b===0?c.linearInterpolate(h,u)??0:0),A=m>=h;if(t==="multiAspirate"&&l<=i?console.warn("Invalid combination of source and destination wells for multiAspirate path"):t==="multiDispense"&&l>=i?console.warn("Invalid combination of source and destination wells for multiDispense path"):t==="single"&&l!==i&&console.warn("Invalid combination of source and destination wells for single path"),t==="single"||t==="multiDispense"&&!y||t==="multiAspirate"&&!A){const L=c.linearInterpolate(r,u)??0,E=Math.ceil((r+L)/m),g=r/E;return{referenceVolumes:{airGap:{aspirate:g,dispense:0},correction:{aspirate:g,dispense:g},pushOut:g,flowRate:{aspirate:g,dispense:g}},multiWellHandling:{isSupported:!1}}}if(t==="multiDispense"){let L=0,E=0;for(let g=0;g<i&&!(ua((g+1)*r,s??[],o??[])>m);g++)L=(g+1)*r,E+=1;return{referenceVolumes:{airGap:{aspirate:ua(L,s??[],o??[],!1),dispense:ua((E-1)*r,s??[],o??[],!1)},correction:{aspirate:ua(L,s??[],o??[]),dispense:r},flowRate:{aspirate:ua(L,s??[],o??[]),dispense:r},pushOut:r,conditioning:L,disposal:L},multiWellHandling:{isSupported:!0,numWellsToFitInTip:E}}}const w=Math.floor(m/r),I=Math.min(w,l),S=I*r;return{referenceVolumes:{airGap:{aspirate:S,dispense:0},pushOut:S,correction:{aspirate:S,dispense:S},flowRate:{aspirate:r,dispense:S}},multiWellHandling:{isSupported:!0,numWellsToFitInTip:I}}},Ur=e=>{const{retractZOffset:t,retractPositionReference:r,labwareId:n,labwareEntities:a,well:s}=e;if(s==null)return!1;const o=a[n]?.def.wells[s]?.depth;if(o==null)return!1;const i=c.getMmFromBottom(t,r,o);return i==null?!1:i-o>=c.SAFE_MOVE_TO_WELL_OFFSET_FROM_TOP_MM},Yu=e=>e.reduce((t,r)=>{const{kind:n}=r;return n==="onCutoutFixture"?t:n==="onLabware"?[...t,r.labwareId]:n==="onModule"||n==="inStackerHopper"?[...t,r.moduleId]:n==="onAddressableArea"?[...t,r.addressableAreaName]:[...t,r.logicalLocationName]},[]),kI={A4:"cutoutA3",B4:"cutoutB3",C4:"cutoutC3",D4:"cutoutD3"};function Ku(e){if(e.location!=="offDeck"&&e.location!=="systemLocation"&&e.location!=="wasteChuteLocation"&&"addressableAreaName"in e.location&&jh.includes(e.location.addressableAreaName)){const t=D(),r=e.location.addressableAreaName,n=kI[r]??r;return{[t]:{id:t,location:n}}}return{}}const oy=e=>Gh.includes(e),ma=e=>e===c.VACUUM_MODULE_DOCK_A4_ADDRESSABLE_AREA,jc=e=>e.labwareOnShuttle?.primaryLabwareId??null,Gc=(e,t,r)=>{if(r?.storedLabwareDetails==null)return!0;const n=Object.values(r?.storedLabwareDetails??{}).reduce((s,o)=>o!=null?[...s,o]:s,[]),a=t.labwareEntities[e];return n.some(s=>a?.labwareDefURI===s)},Wc=(e,t)=>{const{storedLabwareDetails:r}=e??{};if(r==null)return!0;const{primaryLabwareURI:n,adapterLabwareURI:a,lidLabwareURI:s}=r,o=Object.values(t).find(({labwareDefURI:f})=>f===n),i=Object.values(t).find(({labwareDefURI:f})=>f===a),l=Object.values(t).find(({labwareDefURI:f})=>f===s);if(o==null)return console.error("Primary labware entity not found"),!1;const u=c.getMaxPoolCount({labwareDefinitions:{primary:o.def,adapter:i?.def??null,lid:l?.def??null},model:c.FLEX_STACKER_MODULE_V1}),d=e?.labwareInHopper?.length??0;return u>d},iy=e=>{const{labwareId:t,labwareRobotState:r,labwareEntities:n}=e;return Object.entries(r).some(([a,{stackedOnNode:s}])=>typeof s=="object"&&"labwareId"in s&&s.labwareId===t&&c.getIsLid(n[a].def))},ly=e=>![Ln,c.GRIPPER_WASTE_CHUTE_ADDRESSABLE_AREA,...ve].some(t=>e===t),Ua=(e,t,r)=>{const n=t[r]?.stack,a=Fa(e,n),s=a!=null?e[a].moduleState:null;return!!(s&&s.type===c.ABSORBANCE_READER_TYPE&&s.lidOpen!==!0)};var Il,Xf;function uy(){if(Xf)return Il;Xf=1;function e(t){var r=t==null?0:t.length;return r?t[r-1]:void 0}return Il=e,Il}var vI=uy();const Yc=xe(vI);var cy=Symbol.for("immer-nothing"),Zf=Symbol.for("immer-draftable"),st=Symbol.for("immer-state"),PI=process.env.NODE_ENV!=="production"?[function(e){return`The plugin for '${e}' has not been loaded into Immer. To enable the plugin, import and call \`enable${e}()\` when initializing your application.`},function(e){return`produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${e}'`},"This object has been frozen and should not be mutated",function(e){return"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? "+e},"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.","Immer forbids circular references","The first or second argument to `produce` must be a function","The third argument to `produce` must be a function or undefined","First argument to `createDraft` must be a plain object, an array, or an immerable object","First argument to `finishDraft` must be a draft returned by `createDraft`",function(e){return`'current' expects a draft, got: ${e}`},"Object.defineProperty() cannot be used on an Immer draft","Object.setPrototypeOf() cannot be used on an Immer draft","Immer only supports deleting array indices","Immer only supports setting array indices and the 'length' property",function(e){return`'original' expects a draft, got: ${e}`}]:[];function Ke(e,...t){if(process.env.NODE_ENV!=="production"){const r=PI[e],n=typeof r=="function"?r.apply(null,t):r;throw new Error(`[Immer] ${n}`)}throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var ha=Object.getPrototypeOf;function On(e){return!!e&&!!e[st]}function qr(e){return e?py(e)||Array.isArray(e)||!!e[Zf]||!!e.constructor?.[Zf]||qa(e)||Ps(e):!1}var CI=Object.prototype.constructor.toString(),Qf=new WeakMap;function py(e){if(!e||typeof e!="object")return!1;const t=Object.getPrototypeOf(e);if(t===null||t===Object.prototype)return!0;const r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;if(r===Object)return!0;if(typeof r!="function")return!1;let n=Qf.get(r);return n===void 0&&(n=Function.toString.call(r),Qf.set(r,n)),n===CI}function is(e,t,r=!0){vs(e)===0?(r?Reflect.ownKeys(e):Object.keys(e)).forEach(a=>{t(a,e[a],e)}):e.forEach((n,a)=>t(a,n,e))}function vs(e){const t=e[st];return t?t.type_:Array.isArray(e)?1:qa(e)?2:Ps(e)?3:0}function Xu(e,t){return vs(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function dy(e,t,r){const n=vs(e);n===2?e.set(t,r):n===3?e.add(r):e[t]=r}function NI(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function qa(e){return e instanceof Map}function Ps(e){return e instanceof Set}function Nr(e){return e.copy_||e.base_}function Zu(e,t){if(qa(e))return new Map(e);if(Ps(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const r=py(e);if(t===!0||t==="class_only"&&!r){const n=Object.getOwnPropertyDescriptors(e);delete n[st];let a=Reflect.ownKeys(n);for(let s=0;s<a.length;s++){const o=a[s],i=n[o];i.writable===!1&&(i.writable=!0,i.configurable=!0),(i.get||i.set)&&(n[o]={configurable:!0,writable:!0,enumerable:i.enumerable,value:e[o]})}return Object.create(ha(e),n)}else{const n=ha(e);if(n!==null&&r)return{...e};const a=Object.create(n);return Object.assign(a,e)}}function Kc(e,t=!1){return Cs(e)||On(e)||!qr(e)||(vs(e)>1&&Object.defineProperties(e,{set:ts,add:ts,clear:ts,delete:ts}),Object.freeze(e),t&&Object.values(e).forEach(r=>Kc(r,!0))),e}function DI(){Ke(2)}var ts={value:DI};function Cs(e){return e===null||typeof e!="object"?!0:Object.isFrozen(e)}var MI={};function $r(e){const t=MI[e];return t||Ke(0,e),t}var _a;function fy(){return _a}function FI(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function Jf(e,t){t&&($r("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Qu(e){Ju(e),e.drafts_.forEach(UI),e.drafts_=null}function Ju(e){e===_a&&(_a=e.parent_)}function em(e){return _a=FI(_a,e)}function UI(e){const t=e[st];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function tm(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return e!==void 0&&e!==r?(r[st].modified_&&(Qu(t),Ke(4)),qr(e)&&(e=ls(t,e),t.parent_||us(t,e)),t.patches_&&$r("Patches").generateReplacementPatches_(r[st].base_,e,t.patches_,t.inversePatches_)):e=ls(t,r,[]),Qu(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==cy?e:void 0}function ls(e,t,r){if(Cs(t))return t;const n=e.immer_.shouldUseStrictIteration(),a=t[st];if(!a)return is(t,(s,o)=>rm(e,a,t,s,o,r),n),t;if(a.scope_!==e)return t;if(!a.modified_)return us(e,a.base_,!0),a.base_;if(!a.finalized_){a.finalized_=!0,a.scope_.unfinalizedDrafts_--;const s=a.copy_;let o=s,i=!1;a.type_===3&&(o=new Set(s),s.clear(),i=!0),is(o,(l,u)=>rm(e,a,s,l,u,r,i),n),us(e,s,!1),r&&e.patches_&&$r("Patches").generatePatches_(a,r,e.patches_,e.inversePatches_)}return a.copy_}function rm(e,t,r,n,a,s,o){if(a==null||typeof a!="object"&&!o)return;const i=Cs(a);if(!(i&&!o)){if(process.env.NODE_ENV!=="production"&&a===r&&Ke(5),On(a)){const l=s&&t&&t.type_!==3&&!Xu(t.assigned_,n)?s.concat(n):void 0,u=ls(e,a,l);if(dy(r,n,u),On(u))e.canAutoFreeze_=!1;else return}else o&&r.add(a);if(qr(a)&&!i){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1||t&&t.base_&&t.base_[n]===a&&i)return;ls(e,a),(!t||!t.scope_.parent_)&&typeof n!="symbol"&&(qa(r)?r.has(n):Object.prototype.propertyIsEnumerable.call(r,n))&&us(e,a)}}}function us(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Kc(t,r)}function qI(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:fy(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let a=n,s=Xc;r&&(a=[n],s=ya);const{revoke:o,proxy:i}=Proxy.revocable(a,s);return n.draft_=i,n.revoke_=o,i}var Xc={get(e,t){if(t===st)return e;const r=Nr(e);if(!Xu(r,t))return $I(e,r,t);const n=r[t];return e.finalized_||!qr(n)?n:n===El(e.base_,t)?(wl(e),e.copy_[t]=tc(n,e)):n},has(e,t){return t in Nr(e)},ownKeys(e){return Reflect.ownKeys(Nr(e))},set(e,t,r){const n=my(Nr(e),t);if(n?.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const a=El(Nr(e),t),s=a?.[st];if(s&&s.base_===r)return e.copy_[t]=r,e.assigned_[t]=!1,!0;if(NI(r,a)&&(r!==void 0||Xu(e.base_,t)))return!0;wl(e),ec(e)}return e.copy_[t]===r&&(r!==void 0||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_[t]=!0),!0},deleteProperty(e,t){return El(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,wl(e),ec(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const r=Nr(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{writable:!0,configurable:e.type_!==1||t!=="length",enumerable:n.enumerable,value:r[t]}},defineProperty(){Ke(11)},getPrototypeOf(e){return ha(e.base_)},setPrototypeOf(){Ke(12)}},ya={};is(Xc,(e,t)=>{ya[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});ya.deleteProperty=function(e,t){return process.env.NODE_ENV!=="production"&&isNaN(parseInt(t))&&Ke(13),ya.set.call(this,e,t,void 0)};ya.set=function(e,t,r){return process.env.NODE_ENV!=="production"&&t!=="length"&&isNaN(parseInt(t))&&Ke(14),Xc.set.call(this,e[0],t,r,e[0])};function El(e,t){const r=e[st];return(r?Nr(r):e)[t]}function $I(e,t,r){const n=my(t,r);return n?"value"in n?n.value:n.get?.call(e.draft_):void 0}function my(e,t){if(!(t in e))return;let r=ha(e);for(;r;){const n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=ha(r)}}function ec(e){e.modified_||(e.modified_=!0,e.parent_&&ec(e.parent_))}function wl(e){e.copy_||(e.copy_=Zu(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var VI=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!0,this.produce=(t,r,n)=>{if(typeof t=="function"&&typeof r!="function"){const s=r;r=t;const o=this;return function(l=s,...u){return o.produce(l,p=>r.call(this,p,...u))}}typeof r!="function"&&Ke(6),n!==void 0&&typeof n!="function"&&Ke(7);let a;if(qr(t)){const s=em(this),o=tc(t,void 0);let i=!0;try{a=r(o),i=!1}finally{i?Qu(s):Ju(s)}return Jf(s,n),tm(a,s)}else if(!t||typeof t!="object"){if(a=r(t),a===void 0&&(a=t),a===cy&&(a=void 0),this.autoFreeze_&&Kc(a,!0),n){const s=[],o=[];$r("Patches").generateReplacementPatches_(t,a,s,o),n(s,o)}return a}else Ke(1,t)},this.produceWithPatches=(t,r)=>{if(typeof t=="function")return(o,...i)=>this.produceWithPatches(o,l=>t(l,...i));let n,a;return[this.produce(t,r,(o,i)=>{n=o,a=i}),n,a]},typeof e?.autoFreeze=="boolean"&&this.setAutoFreeze(e.autoFreeze),typeof e?.useStrictShallowCopy=="boolean"&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),typeof e?.useStrictIteration=="boolean"&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){qr(e)||Ke(8),On(e)&&(e=BI(e));const t=em(this),r=tc(e,void 0);return r[st].isManual_=!0,Ju(t),r}finishDraft(e,t){const r=e&&e[st];(!r||!r.isManual_)&&Ke(9);const{scope_:n}=r;return Jf(n,t),tm(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){const a=t[r];if(a.path.length===0&&a.op==="replace"){e=a.value;break}}r>-1&&(t=t.slice(r+1));const n=$r("Patches").applyPatches_;return On(e)?n(e,t):this.produce(e,a=>n(a,t))}};function tc(e,t){const r=qa(e)?$r("MapSet").proxyMap_(e,t):Ps(e)?$r("MapSet").proxySet_(e,t):qI(e,t);return(t?t.scope_:fy()).drafts_.push(r),r}function BI(e){return On(e)||Ke(10,e),hy(e)}function hy(e){if(!qr(e)||Cs(e))return e;const t=e[st];let r,n=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=Zu(e,t.scope_.immer_.useStrictShallowCopy_),n=t.scope_.immer_.shouldUseStrictIteration()}else r=Zu(e,!0);return is(r,(a,s)=>{dy(r,a,hy(s))},n),t&&(t.finalized_=!1),r}var xI=new VI,_y=xI.produce;function HI(e,t){let n=0;const a=[];for(;n+1<e.length;){const s=e[n],o=e[n+1];if(t(s,o)){n+=2;continue}else a.push(s),n+=1}return n+1===e.length&&a.push(e[n]),a}const zI=(e,t)=>["pipetteId","volume","labwareId","wellName"].every(n=>e[n]===t[n]),jI=e=>HI(e,(t,r)=>t.commandType==="aspirate"&&r.commandType==="dispense"&&zI(t.params,r.params)),yy=e=>jI(e),Zc=(e,t)=>{const r=Ot(e,t);return r.type===c.ABSORBANCE_READER_TYPE?r:(console.error(`Absorbance reader state updater expected ${t} moduleState to be absorbanceReader, but it was ${r.type}`),null)},GI=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Zc(n,a);s!=null&&(s.lidOpen=!0)},WI=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Zc(n,a);s!=null&&(s.lidOpen=!1)},YI=(e,t,r)=>{const{robotState:n}=r,{moduleId:a,measureMode:s,sampleWavelengths:o,referenceWavelength:i}=e,l=Zc(n,a);l!=null&&(l.initialization={mode:s,wavelengths:o,referenceWavelength:i},l.lidOpen=!1)};function KI(e,t,r){const{pipetteId:n,volume:a}=e,{robotState:s}=r,o=s.pipettes[n].nozzles;let l=t.pipetteEntities[n].spec.channels;o===c.COLUMN?l=8:o===c.SINGLE&&(l=1),bn(l).forEach(u=>{const p=s.liquidState.pipettes[n][u]??{},d=p[je]?.volume??0;s.liquidState.pipettes[n][u]={...p,[je]:{volume:d+a}}})}var Sl,nm;function XI(){if(nm)return Sl;nm=1;var e=p_(),t=Ca(),r=fs(),n=Qe(),a=xr(),s=Ts(),o=Is(),i=Ec(),l="[object Map]",u="[object Set]",p=Object.prototype,d=p.hasOwnProperty;function f(_){if(_==null)return!0;if(a(_)&&(n(_)||typeof _=="string"||typeof _.splice=="function"||s(_)||i(_)||r(_)))return!_.length;var m=t(_);if(m==l||m==u)return!_.size;if(o(_))return!e(_).length;for(var h in _)if(d.call(_,h))return!1;return!0}return Sl=f,Sl}var ZI=XI();const Al=xe(ZI);var Ll,am;function QI(){if(am)return Ll;am=1;function e(t,r,n,a){for(var s=t.length,o=n+(a?1:-1);a?o--:++o<s;)if(r(t[o],o,t))return o;return-1}return Ll=e,Ll}var Ol,sm;function JI(){if(sm)return Ol;sm=1;function e(t){return t!==t}return Ol=e,Ol}var Rl,om;function eE(){if(om)return Rl;om=1;function e(t,r,n){for(var a=n-1,s=t.length;++a<s;)if(t[a]===r)return a;return-1}return Rl=e,Rl}var kl,im;function tE(){if(im)return kl;im=1;var e=QI(),t=JI(),r=eE();function n(a,s,o){return s===s?r(a,s,o):e(a,t,o)}return kl=n,kl}var vl,lm;function rE(){if(lm)return vl;lm=1;var e=tE();function t(r,n){var a=r==null?0:r.length;return!!a&&e(r,n,0)>-1}return vl=t,vl}var Pl,um;function nE(){if(um)return Pl;um=1;function e(t,r,n){for(var a=-1,s=t==null?0:t.length;++a<s;)if(n(r,t[a]))return!0;return!1}return Pl=e,Pl}var Cl,cm;function aE(){if(cm)return Cl;cm=1;function e(){}return Cl=e,Cl}var Nl,pm;function sE(){if(pm)return Nl;pm=1;var e=f_(),t=aE(),r=yc(),n=1/0,a=e&&1/r(new e([,-0]))[1]==n?function(s){return new e(s)}:t;return Nl=a,Nl}var Dl,dm;function oE(){if(dm)return Dl;dm=1;var e=e_(),t=rE(),r=nE(),n=r_(),a=sE(),s=yc(),o=200;function i(l,u,p){var d=-1,f=t,_=l.length,m=!0,h=[],b=h;if(p)m=!1,f=r;else if(_>=o){var T=u?null:a(l);if(T)return s(T);m=!1,f=n,b=new e}else b=u?[]:h;e:for(;++d<_;){var y=l[d],A=u?u(y):y;if(y=p||y!==0?y:0,m&&A===A){for(var w=b.length;w--;)if(b[w]===A)continue e;u&&b.push(A),h.push(y)}else f(b,A,p)||(b!==h&&b.push(A),h.push(y))}return h}return Dl=i,Dl}var Ml,fm;function iE(){if(fm)return Ml;fm=1;var e=oE();function t(r){return r&&r.length?e(r):[]}return Ml=t,Ml}var lE=iE();const uE=xe(lE),Qc=e=>{const{nozzles:t,pipetteSpec:r,primaryNozzle:n}=e,a=r.channels;if(t==null)return a;switch(t){case c.ROW:return 12;case c.COLUMN:return 8;case c.SINGLE:return 1;case c.ALL:return a;case c.PARTIAL_COLUMN:return c.PARTIAL_NOZZLE_MAP[n];default:return a}};function cE(e,t,r){const{pipetteId:n,volume:a}=e,{robotState:s,warnings:o}=r,i="labwareId"in e?e.labwareId:s.pipettes[n].entityId??"",l="wellName"in e?e.wellName:s.pipettes[n].wellName??"",{liquidState:u}=s,p=s.pipettes[n].nozzles,d=r.robotState.pipettes[n].primaryNozzle,f=t.pipetteEntities[n].spec,_=t.labwareEntities[i].def,m=_.metadata.displayCategory==="reservoir",h=Qc({pipetteSpec:f,nozzles:p,primaryNozzle:d}),{allWellsShared:b,wellsForTips:T}=Vc(h,_,l);if(console.assert(uE(T).length===b?1:T.length,`expected all wells to be shared, or no wells to be shared. Got: ${JSON.stringify(T)}`),h>1&&b){const A=T[0],w=u.labware[i][A],I=a*h>mr(w);Al(w)?o.push(gl()):I&&o.push(Tl());const S=I?mr(w)/h:a,L=er(S,w).dest;bn(h).forEach(E=>{const g=u.pipettes[n],k=E.toString(),v=g[k],q=I?hr(v,{...L,[je]:{volume:a-S}}):hr(v,L);g[k]=q}),u.labware[i][A]=er(a*h,u.labware[i][A]).source;return}if(h===96&&m){T.forEach(A=>{const w=u.labware[i][A],I=a*8>mr(w);Al(w)?o.push(gl()):I&&o.push(Tl());const S=I?mr(w)/8:a,L=er(S,w).dest;bn(h).forEach(E=>{const g=u.pipettes[n],k=E.toString(),v=g[k],q=I?hr(v,{...L,[je]:{volume:a-S}}):hr(v,L);g[k]=q}),u.labware[i][A]=er(S*8,u.labware[i][A]).source});return}bn(h).forEach(A=>{const w=A.toString(),I=u.pipettes[n],S=I[w],L=u.labware[i][T[A]],E=er(a,L).dest;Al(L)?o.push(gl()):a>mr(L)&&o.push(Tl()),I[w]=hr(S,E)});const y=u.labware[i];T.forEach(A=>{y[A]=er(a,y[A]).source}),"labwareId"in e&&(s.pipettes[n]={...s.pipettes[n],entityId:e.labwareId,wellName:l})}function Ns(e){const{robotStateAndWarnings:t,invariantContext:r,entityId:n,pipetteId:a,prevLiquidState:s,useFullVolume:o,volume:i,wellName:l}=e,u=r.pipetteEntities[a].spec,p=t.robotState.pipettes[a].nozzles,d=t.robotState.pipettes[a].primaryNozzle,f=Qc({pipetteSpec:u,nozzles:p,primaryNozzle:d}),_=l??null,m=r.labwareEntities[n]!=null?r.labwareEntities[n].def:null;console.assert(!(o&&typeof i=="number"),"dispenseUpdateLiquidState takes either `volume` or `useFullVolume`, but got both"),console.assert(typeof i=="number"||o,"in dispenseUpdateLiquidState, either volume or useFullVolume are required");const{wellsForTips:h,allWellsShared:b}=m!=null&&l!=null?Vc(f,m,l):{wellsForTips:null,allWellsShared:!0},T=s.labware[n]!=null?s.labware[n]:null;let y=null;s.trashBins[n]!=null?y=s.trashBins[n]:s.wasteChute[n]!=null&&(y=s.wasteChute[n]);const A=rr(s.pipettes[a],L=>{const{...E}=L;if(o){const g=mr(E);return g>0?er(g,E):{source:{},dest:{}}}return er(i||0,E)});let w=null;if(_!=null&&T!=null)w={[_]:ut(A,(L,E)=>hr(L,E.dest),T[_])};else if(y!=null){const L=Object.values(s.pipettes[a]).reduce((E,g)=>E+(g[0]?.volume??0),0);y[0]={volume:L}}w==null&&y==null&&console.assert(!1,`expected to merge liquid to a single well with sourceId ${n}`);const I=_!=null&&T!=null&&h!=null?h.reduce((L,E,g)=>({...L,[E]:hr(A[`${g}`].dest,T[E]||{})}),{}):{},S=b?w:I;s.pipettes[a]=rr(A,"source"),s.trashBins[n]!=null&&y!=null?Object.assign(s.trashBins[n],y):s.wasteChute[n]!=null&&y!=null?Object.assign(s.wasteChute[n],y):s.labware[n]!=null&&S!=null&&(s.labware[n]=Object.assign(T??{},S))}function pE(e,t,r){const{pipetteId:n,labwareId:a,wellName:s}=e,{robotState:o}=r;Ns({pipetteId:n,entityId:a,useFullVolume:!0,wellName:s,prevLiquidState:o.liquidState,invariantContext:t,robotStateAndWarnings:r})}function dE(e,t,r){const{pipetteId:n,configurationParams:a}=e,{robotState:s}=r;s.pipettes[n].nozzles=a.style,s.pipettes[n].primaryNozzle=a.primaryNozzle}function fE(e,t,r){const{pipetteId:n,volume:a}=e,{robotState:s}=r,o="labwareId"in e?e.labwareId:s.pipettes[n].entityId??"",i="wellName"in e?e.wellName:s.pipettes[n].wellName??"",l=s.liquidState.pipettes[n],p=Object.values(l)[0]?.[je]?.volume??0,d=r.robotState.pipettes[n].primaryNozzle;if(Ns({invariantContext:t,entityId:o,pipetteId:n,prevLiquidState:s.liquidState,useFullVolume:!1,volume:a,wellName:i,robotStateAndWarnings:r}),p>0){const f=r.robotState.pipettes[n].nozzles,_=t.pipetteEntities[n].spec,m=Qc({pipetteSpec:_,nozzles:f,primaryNozzle:d});Object.keys(l).slice(0,m).forEach(b=>{const T=l[b]??{};l[b]={...T,[je]:{volume:0}}})}"labwareId"in e&&(s.pipettes[n]={...s.pipettes[n],entityId:e.labwareId})}function mE(e,t,r){const{pipetteId:n,wellName:a,labwareId:s}=e,{robotState:o}=r;o.tipState.pipettes[n].hasTip=!1,o.tipState.pipettes[n].tiprackURI=null,o.pipettes[n].tiprackId=void 0;const i=o.tipState,l=t.pipetteEntities[n].spec,u=o.pipettes[n].nozzles,p=lp(u,l),d=(_,m)=>_.find(h=>h.includes(m)),f=t.labwareEntities[s]?.def;f==null||!c.getIsTiprack(f)?console.warn(`forDropTip expected ${s} to have definition and to be a tiprack`):(p===c.SINGLE?i.tipracks[s][a]=Qt:p===c.COLUMN?(d(f.ordering,a)??[]).forEach(m=>i.tipracks[s][m]=Qt):p===c.ALL?l.channels===96?f.ordering.reduce((m,h)=>m.concat(h),[]).forEach(function(m){i.tipracks[s][m]=Qt}):(d(f.ordering,a)??[]).forEach(m=>i.tipracks[s][m]=Qt):l.channels===1?i.tipracks[s][a]=Qt:l.channels===96?f.ordering.reduce((m,h)=>m.concat(h),[]).forEach(function(m){i.tipracks[s][m]=Qt}):(d(f.ordering,a)??[]).forEach(m=>i.tipracks[s][m]=Qt),o.pipettes[n].entityId=s,o.pipettes[n].wellName=a)}function hE(e,t,r){const{labwareId:n,liquidId:a,volumeByWell:s}=e;Object.entries(s).forEach(([o,i])=>{r.robotState.liquidState.labware[n][o][a]={volume:i}})}var Fl,mm;function _E(){if(mm)return Fl;mm=1;function e(t,r){for(var n=-1,a=t==null?0:t.length;++n<a&&r(t[n],n,t)!==!1;);return t}return Fl=e,Fl}var Ul,hm;function Jc(){if(hm)return Ul;hm=1;var e=Lc(),t=ms(),r=Object.prototype,n=r.hasOwnProperty;function a(s,o,i){var l=s[o];(!(n.call(s,o)&&t(l,i))||i===void 0&&!(o in s))&&e(s,o,i)}return Ul=a,Ul}var ql,_m;function $a(){if(_m)return ql;_m=1;var e=Jc(),t=Lc();function r(n,a,s,o){var i=!s;s||(s={});for(var l=-1,u=a.length;++l<u;){var p=a[l],d=o?o(s[p],n[p],p,s,n):void 0;d===void 0&&(d=n[p]),i?t(s,p,d):e(s,p,d)}return s}return ql=r,ql}var $l,ym;function yE(){if(ym)return $l;ym=1;var e=$a(),t=Pa();function r(n,a){return n&&e(a,t(a),n)}return $l=r,$l}var Vl,bm;function bE(){if(bm)return Vl;bm=1;function e(t){var r=[];if(t!=null)for(var n in Object(t))r.push(n);return r}return Vl=e,Vl}var Bl,Tm;function TE(){if(Tm)return Bl;Tm=1;var e=ar(),t=Is(),r=bE(),n=Object.prototype,a=n.hasOwnProperty;function s(o){if(!e(o))return r(o);var i=t(o),l=[];for(var u in o)u=="constructor"&&(i||!a.call(o,u))||l.push(u);return l}return Bl=s,Bl}var xl,gm;function ep(){if(gm)return xl;gm=1;var e=u_(),t=TE(),r=xr();function n(a){return r(a)?e(a,!0):t(a)}return xl=n,xl}var Hl,Im;function gE(){if(Im)return Hl;Im=1;var e=$a(),t=ep();function r(n,a){return n&&e(a,t(a),n)}return Hl=r,Hl}var da={exports:{}};da.exports;var Em;function IE(){return Em||(Em=1,(function(e,t){var r=Ht(),n=t&&!t.nodeType&&t,a=n&&!0&&e&&!e.nodeType&&e,s=a&&a.exports===n,o=s?r.Buffer:void 0,i=o?o.allocUnsafe:void 0;function l(u,p){if(p)return u.slice();var d=u.length,f=i?i(d):new u.constructor(d);return u.copy(f),f}e.exports=l})(da,da.exports)),da.exports}var zl,wm;function EE(){if(wm)return zl;wm=1;function e(t,r){var n=-1,a=t.length;for(r||(r=Array(a));++n<a;)r[n]=t[n];return r}return zl=e,zl}var jl,Sm;function wE(){if(Sm)return jl;Sm=1;var e=$a(),t=bc();function r(n,a){return e(n,t(n),a)}return jl=r,jl}var Gl,Am;function tp(){if(Am)return Gl;Am=1;var e=c_(),t=e(Object.getPrototypeOf,Object);return Gl=t,Gl}var Wl,Lm;function by(){if(Lm)return Wl;Lm=1;var e=fc(),t=tp(),r=bc(),n=i_(),a=Object.getOwnPropertySymbols,s=a?function(o){for(var i=[];o;)e(i,r(o)),o=t(o);return i}:n;return Wl=s,Wl}var Yl,Om;function SE(){if(Om)return Yl;Om=1;var e=$a(),t=by();function r(n,a){return e(n,t(n),a)}return Yl=r,Yl}var Kl,Rm;function rp(){if(Rm)return Kl;Rm=1;var e=s_(),t=by(),r=ep();function n(a){return e(a,r,t)}return Kl=n,Kl}var Xl,km;function AE(){if(km)return Xl;km=1;var e=Object.prototype,t=e.hasOwnProperty;function r(n){var a=n.length,s=new n.constructor(a);return a&&typeof n[0]=="string"&&t.call(n,"index")&&(s.index=n.index,s.input=n.input),s}return Xl=r,Xl}var Zl,vm;function np(){if(vm)return Zl;vm=1;var e=a_();function t(r){var n=new r.constructor(r.byteLength);return new e(n).set(new e(r)),n}return Zl=t,Zl}var Ql,Pm;function LE(){if(Pm)return Ql;Pm=1;var e=np();function t(r,n){var a=n?e(r.buffer):r.buffer;return new r.constructor(a,r.byteOffset,r.byteLength)}return Ql=t,Ql}var Jl,Cm;function OE(){if(Cm)return Jl;Cm=1;var e=/\w*$/;function t(r){var n=new r.constructor(r.source,e.exec(r));return n.lastIndex=r.lastIndex,n}return Jl=t,Jl}var eu,Nm;function RE(){if(Nm)return eu;Nm=1;var e=kn(),t=e?e.prototype:void 0,r=t?t.valueOf:void 0;function n(a){return r?Object(r.call(a)):{}}return eu=n,eu}var tu,Dm;function kE(){if(Dm)return tu;Dm=1;var e=np();function t(r,n){var a=n?e(r.buffer):r.buffer;return new r.constructor(a,r.byteOffset,r.length)}return tu=t,tu}var ru,Mm;function vE(){if(Mm)return ru;Mm=1;var e=np(),t=LE(),r=OE(),n=RE(),a=kE(),s="[object Boolean]",o="[object Date]",i="[object Map]",l="[object Number]",u="[object RegExp]",p="[object Set]",d="[object String]",f="[object Symbol]",_="[object ArrayBuffer]",m="[object DataView]",h="[object Float32Array]",b="[object Float64Array]",T="[object Int8Array]",y="[object Int16Array]",A="[object Int32Array]",w="[object Uint8Array]",I="[object Uint8ClampedArray]",S="[object Uint16Array]",L="[object Uint32Array]";function E(g,k,v){var q=g.constructor;switch(k){case _:return e(g);case s:case o:return new q(+g);case m:return t(g,v);case h:case b:case T:case y:case A:case w:case I:case S:case L:return a(g,v);case i:return new q;case l:case d:return new q(g);case u:return r(g);case p:return new q;case f:return n(g)}}return ru=E,ru}var nu,Fm;function PE(){if(Fm)return nu;Fm=1;var e=ar(),t=Object.create,r=(function(){function n(){}return function(a){if(!e(a))return{};if(t)return t(a);n.prototype=a;var s=new n;return n.prototype=void 0,s}})();return nu=r,nu}var au,Um;function CE(){if(Um)return au;Um=1;var e=PE(),t=tp(),r=Is();function n(a){return typeof a.constructor=="function"&&!r(a)?e(t(a)):{}}return au=n,au}var su,qm;function NE(){if(qm)return su;qm=1;var e=Ca(),t=nr(),r="[object Map]";function n(a){return t(a)&&e(a)==r}return su=n,su}var ou,$m;function DE(){if($m)return ou;$m=1;var e=NE(),t=gc(),r=Ic(),n=r&&r.isMap,a=n?t(n):e;return ou=a,ou}var iu,Vm;function ME(){if(Vm)return iu;Vm=1;var e=Ca(),t=nr(),r="[object Set]";function n(a){return t(a)&&e(a)==r}return iu=n,iu}var lu,Bm;function FE(){if(Bm)return lu;Bm=1;var e=ME(),t=gc(),r=Ic(),n=r&&r.isSet,a=n?t(n):e;return lu=a,lu}var uu,xm;function Ty(){if(xm)return uu;xm=1;var e=_c(),t=_E(),r=Jc(),n=yE(),a=gE(),s=IE(),o=EE(),i=wE(),l=SE(),u=d_(),p=rp(),d=Ca(),f=AE(),_=vE(),m=CE(),h=Qe(),b=Ts(),T=DE(),y=ar(),A=FE(),w=Pa(),I=ep(),S=1,L=2,E=4,g="[object Arguments]",k="[object Array]",v="[object Boolean]",q="[object Date]",$="[object Error]",ee="[object Function]",de="[object GeneratorFunction]",Te="[object Map]",se="[object Number]",Ie="[object Object]",Pe="[object RegExp]",He="[object Set]",Ve="[object String]",te="[object Symbol]",Se="[object WeakMap]",ze="[object ArrayBuffer]",Ce="[object DataView]",Ee="[object Float32Array]",X="[object Float64Array]",W="[object Int8Array]",C="[object Int16Array]",P="[object Int32Array]",V="[object Uint8Array]",M="[object Uint8ClampedArray]",oe="[object Uint16Array]",U="[object Uint32Array]",z={};z[g]=z[k]=z[ze]=z[Ce]=z[v]=z[q]=z[Ee]=z[X]=z[W]=z[C]=z[P]=z[Te]=z[se]=z[Ie]=z[Pe]=z[He]=z[Ve]=z[te]=z[V]=z[M]=z[oe]=z[U]=!0,z[$]=z[ee]=z[Se]=!1;function x(F,H,ce,Ue,Je,Be){var pe,et=H&S,ht=H&L,Rt=H&E;if(ce&&(pe=Je?ce(F,Ue,Je,Be):ce(F)),pe!==void 0)return pe;if(!y(F))return F;var _t=h(F);if(_t){if(pe=f(F),!et)return o(F,pe)}else{var Re=d(F),tt=Re==ee||Re==de;if(b(F))return s(F,et);if(Re==Ie||Re==g||tt&&!Je){if(pe=ht||tt?{}:m(F),!et)return ht?l(F,a(pe,F)):i(F,n(pe,F))}else{if(!z[Re])return Je?F:{};pe=_(F,Re,et)}}Be||(Be=new e);var ge=Be.get(F);if(ge)return ge;Be.set(F,pe),A(F)?F.forEach(function(re){pe.add(x(re,H,ce,re,F,Be))}):T(F)&&F.forEach(function(re,ne){pe.set(ne,x(re,H,ce,ne,F,Be))});var ke=Rt?ht?p:u:ht?I:w,Ne=_t?void 0:ke(F);return t(Ne||F,function(re,ne){Ne&&(ne=re,re=F[ne]),r(pe,ne,x(re,H,ce,ne,F,Be))}),pe}return uu=x,uu}var cu,Hm;function gy(){if(Hm)return cu;Hm=1;function e(t,r,n){var a=-1,s=t.length;r<0&&(r=-r>s?0:s+r),n=n>s?s:n,n<0&&(n+=s),s=r>n?0:n-r>>>0,r>>>=0;for(var o=Array(s);++a<s;)o[a]=t[a+r];return o}return cu=e,cu}var pu,zm;function UE(){if(zm)return pu;zm=1;var e=Es(),t=gy();function r(n,a){return a.length<2?n:e(n,t(a,0,-1))}return pu=r,pu}var du,jm;function qE(){if(jm)return du;jm=1;var e=Pn(),t=uy(),r=UE(),n=Cn(),a=Object.prototype,s=a.hasOwnProperty;function o(i,l){l=e(l,i);var u=-1,p=l.length;if(!p)return!0;for(;++u<p;){var d=n(l[u]);if(d==="__proto__"&&!s.call(i,"__proto__")||(d==="constructor"||d==="prototype")&&u<p-1)return!1}var f=r(i,l);return f==null||delete f[n(t(l))]}return du=o,du}var fu,Gm;function $E(){if(Gm)return fu;Gm=1;var e=vn(),t=tp(),r=nr(),n="[object Object]",a=Function.prototype,s=Object.prototype,o=a.toString,i=s.hasOwnProperty,l=o.call(Object);function u(p){if(!r(p)||e(p)!=n)return!1;var d=t(p);if(d===null)return!0;var f=i.call(d,"constructor")&&d.constructor;return typeof f=="function"&&f instanceof f&&o.call(f)==l}return fu=u,fu}var mu,Wm;function VE(){if(Wm)return mu;Wm=1;var e=$E();function t(r){return e(r)?void 0:r}return mu=t,mu}var hu,Ym;function BE(){if(Ym)return hu;Ym=1;var e=Zh();function t(r){var n=r==null?0:r.length;return n?e(r,1):[]}return hu=t,hu}var _u,Km;function xE(){if(Km)return _u;Km=1;function e(t,r,n){switch(n.length){case 0:return t.call(r);case 1:return t.call(r,n[0]);case 2:return t.call(r,n[0],n[1]);case 3:return t.call(r,n[0],n[1],n[2])}return t.apply(r,n)}return _u=e,_u}var yu,Xm;function Iy(){if(Xm)return yu;Xm=1;var e=xE(),t=Math.max;function r(n,a,s){return a=t(a===void 0?n.length-1:a,0),function(){for(var o=arguments,i=-1,l=t(o.length-a,0),u=Array(l);++i<l;)u[i]=o[a+i];i=-1;for(var p=Array(a+1);++i<a;)p[i]=o[i];return p[a]=s(u),e(n,this,p)}}return yu=r,yu}var bu,Zm;function HE(){if(Zm)return bu;Zm=1;function e(t){return function(){return t}}return bu=e,bu}var Tu,Qm;function zE(){if(Qm)return Tu;Qm=1;var e=HE(),t=b_(),r=La(),n=t?function(a,s){return t(a,"toString",{configurable:!0,enumerable:!1,value:e(s),writable:!0})}:r;return Tu=n,Tu}var gu,Jm;function jE(){if(Jm)return gu;Jm=1;var e=800,t=16,r=Date.now;function n(a){var s=0,o=0;return function(){var i=r(),l=t-(i-o);if(o=i,l>0){if(++s>=e)return arguments[0]}else s=0;return a.apply(void 0,arguments)}}return gu=n,gu}var Iu,eh;function Ey(){if(eh)return Iu;eh=1;var e=zE(),t=jE(),r=t(e);return Iu=r,Iu}var Eu,th;function GE(){if(th)return Eu;th=1;var e=BE(),t=Iy(),r=Ey();function n(a){return r(t(a,void 0,e),a+"")}return Eu=n,Eu}var wu,rh;function WE(){if(rh)return wu;rh=1;var e=va(),t=Ty(),r=qE(),n=Pn(),a=$a(),s=VE(),o=GE(),i=rp(),l=1,u=2,p=4,d=o(function(f,_){var m={};if(f==null)return m;var h=!1;_=e(_,function(T){return T=n(T,f),h||(h=T.length>1),T}),a(f,i(f),m),h&&(m=t(m,l|u|p,s));for(var b=_.length;b--;)r(m,_[b]);return m});return wu=d,wu}var YE=WE();const KE=xe(YE),rc="TOUCHED_PIPETTABLE_LABWARE";var Su,nh;function XE(){if(nh)return Su;nh=1;var e=wc();function t(r,n){return e(r,n)}return Su=t,Su}var ZE=XE();const QE=xe(ZE),Ds=e=>{const{node:t,stack:r=[],robotState:n,memo:a=new Map}=e;let s=r;if(!(typeof t=="object"&&"labwareId"in t))return s=[...r,t],a.set(t,s),{stack:s,memo:a};const{labwareId:o}=t,i=n.labware[o];if(i!=null&&i.stackedOnNode!=null){const{stack:l,memo:u}=Ds({node:i.stackedOnNode,stack:[...r,t],robotState:n,memo:a});wy(a,u),s=l,a.set(t,s)}return{stack:s,memo:a}},JE=e=>{const{node:t,robotState:r,deckDef:n,deckConfiguration:a}=e,{stack:s}=Ds({node:t,robotState:r}),{cutoutFixtures:o}=n,i=s.find(l=>typeof l=="object"&&"addressableAreaName"in l);if(i!=null&&typeof i=="object"&&"addressableAreaName"in i){const{addressableAreaName:l}=i;for(const{id:u,providesAddressableAreas:p}of o){const[d]=Object.entries(p).find(([f,_])=>_.includes(l))??[];if(d!=null){const f=a.find(({cutoutId:T})=>T===d),{cutoutFixtureId:_,cutoutId:m}=f,h=_===u&&m===d,b=Object.entries(r.modules).find(([T,{slot:y}])=>c.FLEX_CUTOUT_BY_SLOT_ID[y]===m);if(h&&b!=null)return b[0]}}}return null},wy=(e,t)=>{t.forEach((r,n)=>{e.set(n,r)})},ew=(e,t)=>e.some(r=>QE(r,t)),Sy=e=>{const{labwareId:t,robotState:r}=e,n=new Map,a={labwareId:t};let s=[];for(const[o,{stackedOnNode:i}]of Object.entries(r.labware)){const l={labwareId:o};if(i==null)continue;let u;const p=n.get(l);if(p!=null)u=p;else{const{stack:d,memo:f}=Ds({node:l,robotState:r,memo:n});if(wy(n,f),!ew(d,a))continue;n.set(l,d),u=d}u.length>s.length&&(s=u)}return s},Ay=e=>{const t=[],r=new Set;for(const n of Object.keys(e.labware)){if(r.has(n))continue;const a=Sy({labwareId:n,robotState:e});a.forEach(s=>{typeof s=="object"&&"labwareId"in s&&r.add(s.labwareId)}),t.push(a)}return t},ap=e=>{const{moduleId:t,robotState:r,moduleEntities:n,deckDef:a}=e,s=r.modules[t],o=n[t];if(s==null||o==null)return null;const{slot:i}=s,{model:l}=o,u=c.getAddressableAreaNamesFromLoadedModule(l,i,a);return u.length===0?null:u[0]},tw=e=>{const{location:t,robotState:r,moduleEntities:n,deckDef:a}=e;if(t==="offDeck"||t==="systemLocation"||t==="wasteChuteLocation")return null;if("slotName"in t)return t.slotName;if("addressableAreaName"in t)return t.addressableAreaName;if("moduleId"in t){const{moduleId:s}=t;return ap({moduleId:s,robotState:r,moduleEntities:n,deckDef:a})}return null},Ly=e=>{const{deckConfiguration:t,deckDefinition:r}=e;return t.reduce((n,{cutoutFixtureId:a,cutoutId:s})=>((r.cutoutFixtures.find(({id:i})=>a===i)?.providesAddressableAreas[s]??[]).forEach(i=>{n.add(i)}),n),new Set)},rw=e=>{const{robotState:t,deckConfiguration:r,deckDefinition:n,moduleEntities:a}=e,s=Ly({deckConfiguration:r,deckDefinition:n}),o=new Set(s),i=Ay(t);for(const l of i){const u=Yc(l);if(typeof u=="object"&&"addressableAreaName"in u){const{addressableAreaName:p}=u;o.delete(p)}if(typeof u=="object"&&"slotName"in u){const{slotName:p}=u;o.delete(p)}if(typeof u=="object"&&"moduleId"in u){const{moduleId:p}=u,d=ap({moduleId:p,robotState:t,moduleEntities:a,deckDef:n});d!=null&&o.delete(d)}}return o},nw=e=>{const t=e.toLowerCase();return t.includes("chute")||t.includes("waste")||t.startsWith("gripper")||t==="96channelwastechute"},Oy=e=>{const{stack:t,subjectLabwareId:r,moduleEntities:n,labwareEntityIds:a,modules:s}=e;if(t.length===0||t[0]!==r||t.length<2)return;const o=t[1];if(o===Ze){const u=t[2];return u==null?void 0:{kind:"inStackerHopper",moduleId:u}}if(n[o]!=null)return{moduleId:o};if(a.has(o))return{labwareId:o};if(o==="offDeck")return"offDeck";if(o==="systemLocation")return"systemLocation";if(o==="wasteChuteLocation")return"wasteChuteLocation";if(nw(o))return{addressableAreaName:o};const i=ay(o,s,n)??o;if(Object.entries(s).some(([u,p])=>n[u]?.type===c.FLEX_STACKER_MODULE_TYPE&&p.slot===i)){const u=Rs(i);if(u!=null)return{addressableAreaName:u}}return{slotName:o}},aw=e=>typeof e=="object"&&e!==null&&"kind"in e&&e.kind==="inStackerHopper",sw=e=>typeof e!="object"||e===null?!1:!aw(e),ow=(e,t)=>{const{id:r,def:n}=e,{id:a,def:s}=t,o=n.dimensions.xDimension,i=n.dimensions.yDimension,l=s.dimensions.xDimension,u=s.dimensions.yDimension;return o>l&&i>u?{containerLabwareId:r,containedLabwareId:a}:l>o&&u>i?{containerLabwareId:a,containedLabwareId:r}:null},sp=(e,t)=>{const r=new Map;for(const a of Object.keys(e)){const s=e[a].stackedOnNode;if(s==null||!sw(s))continue;const o=JSON.stringify(s),i=r.get(o)??[];i.push(a),r.set(o,i)}const n={};for(const a of r.values()){if(a.length!==2)continue;const[s,o]=a,i=t[s],l=t[o];if(i==null||l==null)continue;const u=ow(i,l);if(u==null)continue;const{containerLabwareId:p,containedLabwareId:d}=u;n[p]=d}return Object.keys(n).length===0?e:rr(e,(a,s)=>n[s]!=null?{...a,contains:n[s]}:a)},iw=(e,t,r)=>{const n=Object.keys(e.labware),a=new Set(n);let s=rr(e.labware,(o,i)=>{const l=o.stackedOnNode??Oy({stack:o.stack,subjectLabwareId:i,moduleEntities:t,labwareEntityIds:a,modules:e.modules});return l!=null?{...o,stackedOnNode:l}:{...o}});return s=sp(s,r),{...e,labware:s}};function lw(e,t,r){const{labwareId:n,newLocation:a}=e,{robotState:s}=r,{labwareEntities:o}=t,{modules:i,labware:l}=s;if(l[n]==null)return;const u=G(l[n].stack),p=ks(l,u,n),d=p.indexOf(n),f=p.slice(0,d+1),_=c.getIsLid(o[n].def);let m=!1;const h=Object.entries(i).find(([E,{slot:g}])=>{const{type:k}=t.moduleEntities[E]??{};return k===c.FLEX_STACKER_MODULE_TYPE&&g===u})??null,b=h!=null&&h[1].moduleState.type===c.FLEX_STACKER_MODULE_TYPE?Jt.map(E=>h[1].moduleState.labwareOnShuttle?.[E]).filter(E=>E!=null):[],T=b.includes(n)?b.slice(0,b.indexOf(n)+1):[];if(h!=null&&h[1].moduleState.type===c.FLEX_STACKER_MODULE_TYPE){const E=h[1].moduleState,g=Jt.findIndex(k=>E.labwareOnShuttle?.[k]===n);if(g!==-1&&E.labwareOnShuttle!=null)for(const k of Jt.slice(g,Jt.length))if(k==="primaryLabwareId"){E.labwareOnShuttle=null;break}else E.labwareOnShuttle[k]=null}const y=Object.entries(i).find(([E,{slot:g}])=>{const{type:k}=t.moduleEntities[E]??{};return k===c.FLEX_STACKER_MODULE_TYPE&&typeof a=="object"&&("moduleId"in a&&a.moduleId===E||"slotName"in a&&g===a.slotName)})??null,[A,w]=y??[];if(A!=null&&w!=null){const E=T.length>0?T:fa({slot:u,labwareState:l,modulesState:i}),g=E.indexOf(n),k=w.moduleState;if(g!==-1){const v=E.slice(0,g+1).toReversed();if(k.labwareOnShuttle==null&&(k.labwareOnShuttle={primaryLabwareId:"",adapterLabwareId:null,lidLabwareId:null}),v.length===3)for(let q=0;q<Jt.length;q++){const $=Jt[q];k.labwareOnShuttle[$]=v[q]}else if(v.length===2){const q=v.some($=>t.labwareEntities[$].def.allowedRoles?.some(ee=>ee==="lid"))?["primaryLabwareId","lidLabwareId"]:["adapterLabwareId","primaryLabwareId"];for(let $=0;$<q.length;$++){const ee=q[$];k.labwareOnShuttle[ee]=v[$]}}else v.length===1&&(k.labwareOnShuttle.primaryLabwareId=v[0])}}const I=[];if(c.locationIsOffDeck(a))I.push(a);else if("moduleId"in a)if(i[a.moduleId].moduleState.type===c.FLEX_STACKER_MODULE_TYPE)I.push(i[a.moduleId].slot);else if(t.moduleEntities[a.moduleId]?.type===c.VACUUM_MODULE_TYPE){const E=i[a.moduleId].slot,g=fa({slot:E,labwareState:l,modulesState:i});g.length>0?I.push(...g):I.push(a.moduleId,E)}else I.push(a.moduleId,i[a.moduleId].slot);else if("slotName"in a){const{slotName:E}=a;E in l?(m=c.getIsPipettableLabware(o[E].def),I.push(...l[E].stack)):I.push(E)}else if("labwareId"in a){const E=a.labwareId;m=c.getIsPipettableLabware(o[E].def);const g=l[E].stack;I.push(...g)}else if("addressableAreaName"in a)if(ma(a.addressableAreaName)){const E=Object.entries(i).find(([g])=>t.moduleEntities[g]?.type===c.VACUUM_MODULE_TYPE)?.[0];I.push(pc),E!=null&&I.push(E),I.push(a.addressableAreaName)}else I.push(a.addressableAreaName);f.forEach((E,g)=>{if(l[E]!=null){const k=f.slice(g+1);s.labware[E]={...s.labware[E],stack:[E,...k,...I],..._&&m?{sterility:rc}:{}}}});const S=typeof a=="object"&&"labwareId"in a&&c.getIsPipettableLabware(o[a.labwareId].def);let L=a;if(typeof a=="object"&&a!==null&&"moduleId"in a&&i[a.moduleId].moduleState.type===c.FLEX_STACKER_MODULE_TYPE){const E=Rs(i[a.moduleId].slot);E!=null&&(L={addressableAreaName:E})}else if(typeof a=="object"&&a!==null&&"moduleId"in a&&t.moduleEntities[a.moduleId]?.type===c.VACUUM_MODULE_TYPE){const E=i[a.moduleId].slot,g=fa({slot:E,labwareState:l,modulesState:i}),k=g.length>0?g[0]:null;k!=null&&k in o&&(L={labwareId:k})}s.labware[n].stackedOnNode=L,S&&(s.labware[n].sterility=rc),s.labware=sp(rr(s.labware,E=>KE(E,"contains")),o)}function uw(e,t,r){const{pipetteId:n,addressableAreaName:a}=e,{wasteChuteEntities:s,trashBinEntities:o}=t,i=c.WASTE_CHUTE_ADDRESSABLE_AREAS.includes(a),l=Object.values(o).find(d=>d.location===Y_(a))?.id,u=i?Object.values(s)[0].id:l,{robotState:p}=r;p.pipettes[n]={...p.pipettes[n],entityId:u}}function cw(e,t,r){const{pipetteId:n,labwareId:a,wellName:s}=e,{robotState:o}=r;o.pipettes[n]={...o.pipettes[n],entityId:a,wellName:s}}function pw(e,t,r){const{pipetteId:n,labwareId:a,wellName:s}=e,o=t.pipetteEntities[n].spec,i=t.labwareEntities[a].def;if(!c.getIsTiprack(i))throw new Error(`forPickUpTip expected ${a} to be a tiprack`);const l=r.robotState.tipState,u=r.robotState.pipettes[n].nozzles,p=r.robotState.pipettes[n].primaryNozzle,d=lp(u,o),f=(h,b)=>h.find(T=>T.includes(b)),_=(h,b)=>{const T=h.findIndex(A=>A.includes(b));if(T===-1)return null;const y=h[T].indexOf(b);return h.map(A=>A[y])},m=(h,b)=>{const T=c.PARTIAL_NOZZLE_MAP[p],y=h.findIndex(L=>L.includes(b)),A=h[y].indexOf(b),w=h[y];if(w.length-A<T){const L=w.length-T;return w.slice(L,w.length)}const S=A+T;return w.slice(A,Math.min(S,w.length))};if(l.pipettes[n].hasTip=!0,l.pipettes[n].tiprackURI=a,d===c.SINGLE)l.tipracks[a][s]=ue;else if(d===c.PARTIAL_COLUMN&&p){const h=m(i.ordering,s);h==null?console.error(`Invalid primary well for tip pick up for partial config: ${s}`):h.forEach(function(b){l.tipracks[a][b]=ue})}else if(d===c.COLUMN){const h=f(i.ordering,s);h==null&&console.error(`Invalid primary well for tip pickup: ${s}`),h?.forEach(function(b){l.tipracks[a][b]=ue})}else if(d===c.ROW){const h=_(i.ordering,s);h==null&&console.error("Invalid primary well for tip pickup: "+s),h?.forEach(function(b){l.tipracks[a][b]=ue})}else if(d===c.ALL)if(o.channels===96)i.ordering.reduce((b,T)=>b.concat(T),[]).forEach(function(b){l.tipracks[a][b]=ue});else{const h=f(i.ordering,s);h==null&&console.error(`Invalid primary well for tip pickup: ${s}`),h?.forEach(function(b){l.tipracks[a][b]=ue})}else if(o.channels===1)l.tipracks[a][s]=ue;else if(o.channels===96)i.ordering.reduce((b,T)=>b.concat(T),[]).forEach(function(b){l.tipracks[a][b]=ue});else{const h=f(i.ordering,s);h==null&&console.error(`Invalid primary well for tip pickup: ${s}`),h?.forEach(function(b){l.tipracks[a][b]=ue})}r.robotState.pipettes[n].tiprackId=a,r.robotState.pipettes[n].tipWell=s}const dw={clean:Ra,empty:ue,used:Qt};function fw(e,t,r){const{labwareId:n,wellNames:a,tipWellState:s="clean"}=e,o=dw[s],i=r.robotState.tipState.tipracks[n];i!=null&&a.forEach(l=>{i[l]=o})}const jr=(e,t)=>{const r=Ot(e,t);return r.type===c.THERMOCYCLER_MODULE_TYPE?r:(console.error(`Thermocycler state updater expected ${t} moduleState to be thermocycler, but it was ${r.type}`),{})},mw=(e,t,r)=>{const{moduleId:n,celsius:a}=e,{robotState:s}=r,o=jr(s,n);o.currentBlockActivity={type:"blockTargetTemp",blockTargetTemp:a}},hw=(e,t,r)=>{const{moduleId:n,celsius:a}=e,{robotState:s}=r,o=jr(s,n);o.lidTargetTemp=a},_w=(e,t,r)=>{},yw=(e,t,r)=>{},bw=(e,t,r)=>{},Tw=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=jr(a,n);s.currentBlockActivity={type:"blockDeactivated"}},gw=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=jr(a,n);s.lidTargetTemp=null},Iw=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=jr(a,n);s.lidOpen=!1},Ew=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=jr(a,n);s.lidOpen=!0},ww=(e,t,r)=>{const{profile:n,...a}=e;Ry({profileElements:n,...a},t,r)},Ry=(e,t,r)=>{const n=NaN+D();ky({...e,taskId:n},t,r),vy(n,r,c.THERMOCYCLER_MODULE_TYPE)},ky=(e,t,r)=>{const{moduleId:n,taskId:a,profileElements:s}=e,{robotState:o}=r,i=jr(o,n);i.currentBlockActivity={type:"profile",profileElements:s,taskId:a??null},i.numProfilesStarted++},Sw=e=>{if(e.currentBlockActivity.type==="profile"){const t=Aw(e.currentBlockActivity.profileElements);return e.currentBlockActivity=t!=null?{type:"blockTargetTemp",blockTargetTemp:t}:{type:"blockDeactivated"},!0}else return!1};function Aw(e){const t=Yc(pp(e));return t!=null?t.celsius:null}const Lw=(e,t)=>{const[r,n]=[e.ordering,t.ordering];if(r.length!==n.length)return!1;for(let a=0;a<r.length;a++){const[s,o]=[r[a],n[a]];if(s.length!==o.length)return!1}return!0},op=(e,t,r)=>{const{labware:n,liquidState:a}=t,o=ks(n,e).filter(i=>i in r&&c.getIsPipettableLabware(r[i].def));if(o.length===1){const i=a.labware[o[0]];Object.entries(i).forEach(([l,u])=>{i[l]={}});return}if(o.length===2){const i=o[0],l=o[1];if(!Lw(r[i].def,r[l].def))return;const u=a.labware[i],p=a.labware[l];Object.entries(p).forEach(([d,f])=>{const _=u[d];Object.entries(_).forEach(([m,{volume:h}])=>{f[m]={volume:m in f?f[m].volume+h:h}}),u[d]={}})}},Ow=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=ot(a,n);s!=null&&(s.ventStatus=dc)},Rw=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=ot(a,n);s!=null&&(s.ventStatus=ka)},kw=(e,t,r)=>{const{moduleId:n,gaugePressure:a,duration:s,ventAfter:o=!0,taskId:i}=e,{robotState:l}=r,{labwareEntities:u}=t,p=ot(l,n);p!=null&&(op(n,l,u),s==null||i==null?p.currentPumpActivity={type:"indefiniteHold",mode:ju,targetPressure:a}:(p.currentPumpActivity={type:"timedHold",mode:ju,targetPressure:a,durationSeconds:s,taskId:i,ventAfter:o},p.numPumpActivitiesStarted++),p.ventStatus=ka)},vw=(e,t,r)=>{const{moduleId:n,percentPower:a,duration:s,ventAfter:o=!0,taskId:i}=e,{robotState:l}=r,{labwareEntities:u}=t,p=ot(l,n);p!=null&&(op(n,l,u),s==null||i==null?p.currentPumpActivity={type:"indefiniteHold",mode:zu,targetPower:a}:(p.currentPumpActivity={type:"timedHold",mode:zu,targetPower:a,durationSeconds:s,taskId:i,ventAfter:o},p.numPumpActivitiesStarted++),p.ventStatus=ka)},Pw=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=ot(a,n);s!=null&&(s.currentPumpActivity={type:"pumpDeactivated"})},Cw=(e,t,r)=>{const{moduleId:n,steps:a,taskId:s,ventAfter:o=!0}=e,{robotState:i}=r,{labwareEntities:l}=t,u=ot(i,n);u==null||s==null||(op(n,i,l),u.currentPumpActivity={type:"profile",profileElements:a,taskId:s,ventAfter:o},u.numPumpActivitiesStarted++)},Nw=e=>{if(e.currentPumpActivity.type==="timedHold"||e.currentPumpActivity.type==="profile"){const t=e.currentPumpActivity.ventAfter;return e.currentPumpActivity={type:"pumpDeactivated"},e.ventStatus=t?dc:ka,!0}return!1};function Dw(e,t,r){for(const n of e.task_ids)vy(n,r)||r.warnings.push(iI())}const vy=(e,t,r)=>{const{robotState:n}=t,a=Object.values(n.modules).find(s=>{if(r&&s.moduleState.type!==r)return!1;const o=s.moduleState.type==="thermocyclerModuleType"&&s.moduleState.currentBlockActivity.type==="profile"&&s.moduleState.currentBlockActivity.taskId===e,i=s.moduleState.type==="vacuumModuleType"&&(s.moduleState.currentPumpActivity.type==="timedHold"||s.moduleState.currentPumpActivity.type==="profile")&&s.moduleState.currentPumpActivity.taskId===e;return o||i});return a==null?!1:a.moduleState.type==="thermocyclerModuleType"?Sw(a.moduleState):a.moduleState.type==="vacuumModuleType"?Nw(a.moduleState):(console.log(`unexpected module type with task: ${a.moduleState.type}`),!1)},Un=(e,t)=>{const r=Ot(e,t);return r.type===c.HEATERSHAKER_MODULE_TYPE?r:(console.error(`Heater-Shaker state updater expected ${t} moduleState to be heaterShaker, but it was ${r.type}`),{})},Mw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a,celsius:s}=e,o=Un(n,a);o.targetTemp=s},Fw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Un(n,a);s.targetTemp=null},Uw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a,rpm:s}=e,o=Un(n,a);o.targetSpeed=s},qw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Un(n,a);s.targetSpeed=null},$w=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Un(n,a);s.latchOpen=!0},Vw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Un(n,a);s.latchOpen=!1},Bw=(e,t,r)=>{const{pipetteId:n}=e,{robotState:a}=r,s=a.pipettes[n].entityId??"";Ns({invariantContext:t,pipetteId:n,prevLiquidState:a.liquidState,useFullVolume:!0,robotStateAndWarnings:r,entityId:s})},xw=(e,t,r)=>{const{pipetteId:n}=e,{robotState:a}=r,s=a.pipettes[n].entityId??"";a.tipState.pipettes[n]={hasTip:!1,tiprackURI:null},Ns({invariantContext:t,prevLiquidState:a.liquidState,pipetteId:n,useFullVolume:!0,robotStateAndWarnings:r,entityId:s}),a.pipettes[n].tiprackId=void 0};function Py(e,t){e.type===c.MAGNETIC_MODULE_TYPE&&(e.engaged=t)}function Hw(e,t,r){const{moduleId:n}=e,{robotState:a}=r,s=Ot(a,n);Py(s,!0)}function zw(e,t,r){const{moduleId:n}=e,{robotState:a}=r,s=Ot(a,n);Py(s,!1)}const Au=(e,t)=>{if(t==null)return console.error("expected to find defURI but could not in getLabwareByDefURI"),null;const r=e.findIndex(a=>a.labwareDefURI===t);if(r===-1)return null;const[n]=e.splice(r,1);return n.id},Cy=(e,t,r,n)=>{const a=e.labwareInHopper??[];t.forEach(s=>{const{primaryLabwareId:o,adapterLabwareId:i,lidLabwareId:l}=s;r.labware[o]={stack:[o,...l!=null?[l]:[],...n]},i!=null&&(r.labware[i]={stack:[i,o,...l!=null?[l]:[],...n]}),l!=null&&(r.labware[l]={stack:[l,...n]}),a.push({primaryLabwareId:o,adapterLabwareId:i??null,lidLabwareId:l??null})}),e.labwareInHopper=a},Ny=(e,t,r,n,a,s,o,i)=>{const u=Object.entries(e.labware).filter(([d,f])=>f[s]===t[s]).map(([d])=>d).map(d=>r[d]),p=[];for(let d=0;d<n;d++){const f=Au(u,t.storedLabwareDetails?.primaryLabwareURI),_=o!=null?Au(u,t.storedLabwareDetails?.adapterLabwareURI):null,m=i!=null?Au(u,t.storedLabwareDetails?.lidLabwareURI):null;f!=null&&(e.labware[f]={stack:[f,...m!=null?[m]:[],...a]},_!=null&&(e.labware[_]={stack:[_,f,...m!=null?[m]:[],...a]}),m!=null&&(e.labware[m]={stack:[m,...a]}),p.push({primaryLabwareId:f,adapterLabwareId:_,lidLabwareId:m})),t.labwareInHopper=p}},jw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Object.entries(n.labware).filter(([,i])=>i.stack.includes(Ze)&&i.stack.includes(a)),o=mt(n,a);o!=null&&o.labwareInHopper!=null&&(e.count!=null?o.labwareInHopper=o.labwareInHopper.slice(0,e.count):o.labwareInHopper=[]),s.forEach(([i])=>{n.labware[i]={...n.labware[i],stack:[i,c.SYSTEM_LOCATION]}})},Gw=(e,t,r)=>{const{robotState:n}=r,{labwareEntities:a}=t,{moduleId:s,labware:o}=e,i=n.modules[s].slot,l=mt(n,s);if(l==null||l.storedLabwareDetails==null)return;const{primaryLabwareURI:u,adapterLabwareURI:p,lidLabwareURI:d}=l.storedLabwareDetails,f=[];for(const b of o){const T=a[b].labwareDefURI;if(T===u)f.push({primaryLabwareId:b,adapterLabwareId:null,lidLabwareId:null});else if(T===p){const y=f[f.length-1];y&&(y.adapterLabwareId=b)}else if(T===d){const y=f[f.length-1];y&&(y.lidLabwareId=b)}}const _=[Ze,s,i];for(const b of f){const T=[b.adapterLabwareId,b.primaryLabwareId,b.lidLabwareId,..._].filter(A=>A!=null);n.labware[b.primaryLabwareId]={...n.labware[b.primaryLabwareId],stack:T.slice(T.indexOf(b.primaryLabwareId))},b.adapterLabwareId!=null&&(n.labware[b.adapterLabwareId]={...n.labware[b.adapterLabwareId],stack:T.slice(T.indexOf(b.adapterLabwareId))}),b.lidLabwareId!=null&&(n.labware[b.lidLabwareId]={...n.labware[b.lidLabwareId],stack:T.slice(T.indexOf(b.lidLabwareId))});let y=null;for(const A of T)a[A]!=null&&(y==null?n.labware[A].stackedOnNode={kind:"inStackerHopper",moduleId:s}:n.labware[A].stackedOnNode={labwareId:y},y=A)}const m=l.labwareInHopper??[],h=f.map(({primaryLabwareId:b,adapterLabwareId:T,lidLabwareId:y})=>({primaryLabwareId:b,adapterLabwareId:T,lidLabwareId:y}));l.labwareInHopper=[...m,...h]},Ww=(e,t,r)=>{const{robotState:n}=r,{labwareEntities:a}=t,{moduleId:s,primaryLabware:o,initialCount:i,adapterLabware:l,lidLabware:u,initialStoredLabware:p}=e,d=n.modules[s].slot,f=mt(n,s),_=[Ze,s,d];f!=null&&(f.storedLabwareDetails={primaryLabwareURI:`${o.namespace}/${o.loadName}/${o.version}`,adapterLabwareURI:l!=null?`${l.namespace}/${l.loadName}/${l.version}`:null,lidLabwareURI:u!=null?`${u.namespace}/${u.loadName}/${u.version}`:null},i!=null?Ny(n,f,a,i,_,"setStoredLabwareCount",l?.loadName,u?.loadName):p!=null&&Cy(f,p,n,_),f.setStoredLabwareCount=(f?.setStoredLabwareCount??0)+1)},Yw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a,labware:s}=e,{labwareEntities:o}=t,i=n.modules[a].slot,l=mt(n,a);if(l==null)return;const u=s.map(I=>I.split(":")[1]),p=new Set(u),d=Array.from(p),f=d.find(I=>Object.values(o).find(S=>S.labwareDefURI===I&&!S.def.allowedRoles?.includes("lid")&&!S.def.allowedRoles?.includes("adapter"))),_=d.find(I=>Object.values(o).find(S=>S.labwareDefURI===I&&S.def.allowedRoles?.includes("adapter"))),m=d.find(I=>Object.values(o).find(S=>S.labwareDefURI===I&&S.def.allowedRoles?.includes("lid")));if(f==null)throw new Error(`expected to find primaryLabwareURI for storedLabwareDetails but could not with labware ${s}`);l.storedLabwareDetails={primaryLabwareURI:f,adapterLabwareURI:_??null,lidLabwareURI:m??null};const h=[];for(const I of s){const S=o[I].labwareDefURI;if(S===f)h.push({primary:I,adapter:null,lid:null});else if(S===_){const L=h[h.length-1];L&&(L.adapter=I)}else if(S===m){const L=h[h.length-1];L&&(L.lid=I)}}const b=[Ze,a,i];for(const I of h){const S=[I.adapter,I.primary,I.lid,...b].filter(L=>L!=null);n.labware[I.primary]={...n.labware[I.primary],stack:S.slice(S.indexOf(I.primary))},I.adapter!=null&&(n.labware[I.adapter]={...n.labware[I.adapter],stack:S.slice(S.indexOf(I.adapter))}),I.lid!=null&&(n.labware[I.lid]={...n.labware[I.lid],stack:S.slice(S.indexOf(I.lid))})}const T=l.labwareInHopper??[],y=h.map(I=>({primaryLabwareId:I.primary,adapterLabwareId:I.adapter,lidLabwareId:I.lid})),A=new Map(T.map(I=>[I.primaryLabwareId,I])),w=[];for(const I of y)w.push(I),A.delete(I.primaryLabwareId);for(const I of T)A.has(I.primaryLabwareId)&&w.push(I);l.labwareInHopper=w},Kw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a,count:s,labwareToStore:o}=e,{labwareEntities:i}=t,l=n.modules[a].slot,u=mt(n,a),p=[Ze,a,l];if(u!=null){const d=u.storedLabwareDetails?.adapterLabwareURI,f=u.storedLabwareDetails?.lidLabwareURI;s!=null?Ny(n,u,i,s,p,"fillCount",d,f):o!=null&&Cy(u,o,n,p),u.fillCount=(u?.fillCount??0)+1}},Xw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=mt(n,a),o=n.modules[a].slot;if(s!=null){const{labwareInHopper:i,labwareOnShuttle:l}=s;if(i!=null&&i.length>0&&l==null){const u=i[0];s.labwareOnShuttle=u,i.shift();const p=[o];let d=null;for(const f of Jt){const _=u[f];if(_!=null){if(p.unshift(_),n.labware[_].stack=[...p],d==null){const m=Rs(o);m!=null?n.labware[_].stackedOnNode={addressableAreaName:m}:console.warn(`Could not find an addressable area for retrieved labware in stacker module ${a} at slot ${o}`)}else n.labware[_].stackedOnNode={labwareId:d};d=_}}}}},Zw=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=mt(n,a),o=n.modules[a].slot;if(s!=null){const{labwareOnShuttle:i}=s;if(i!=null){s.labwareInHopper=[i,...s.labwareInHopper??[]],s.labwareOnShuttle=null;let l=null;for(const u of Jt){const p=i[u];p!=null&&(n.labware[p].stack=[p,Ze,a,o],l==null?(n.labware[p].stackedOnNode={kind:"inStackerHopper",moduleId:a},l=p):n.labware[p].stackedOnNode={labwareId:l})}s.storedLabwareDetails==null&&(s.storedLabwareDetails={primaryLabwareURI:t.labwareEntities[i.primaryLabwareId].labwareDefURI,adapterLabwareURI:i.adapterLabwareId!=null?t.labwareEntities[i.adapterLabwareId].labwareDefURI:null,lidLabwareURI:i.lidLabwareId!=null?t.labwareEntities[i.lidLabwareId].labwareDefURI:null})}}};function Dy(e,t,r){e.type===c.TEMPERATURE_MODULE_TYPE&&(e.targetTemperature=t,e.status=r)}function Qw(e,t,r){const{robotState:n}=r,{moduleId:a,celsius:s}=e,o=Ot(n,a);Dy(o,s,uc)}function Jw(e,t,r){const{robotState:n}=r,{moduleId:a,celsius:s}=e,o=Ot(n,a);o.type===c.TEMPERATURE_MODULE_TYPE&&s===o.targetTemperature&&(o.status=lc)}function eS(e,t,r){const{robotState:n}=r,{moduleId:a}=e,s=Ot(n,a);Dy(s,null,Oa)}function My(e,t,r){if(!e)throw new Error("undefined command passed to getNextRobotStateAndWarning");switch(e.commandType){case"aspirateWhileTracking":case"aspirate":case"aspirateInPlace":if(e.meta?.isAirGap===!0)break;cE(e.params,t,r);break;case"airGapInPlace":KI(e.params,t,r);break;case"dispenseWhileTracking":case"dispense":case"dispenseInPlace":if(e.meta?.isAirGap===!0)break;fE(e.params,t,r);break;case"blowout":pE(e.params,t,r);break;case"dropTip":mE(e.params,t,r);break;case"pickUpTip":pw(e.params,t,r);break;case"setTipState":fw(e.params,t,r);break;case"magneticModule/engage":Hw(e.params,t,r);break;case"magneticModule/disengage":zw(e.params,t,r);break;case"moveLabware":lw(e.params,t,r);break;case"waitForTasks":Dw(e.params,t,r);break;case"flexStacker/setStoredLabware":Ww(e.params,t,r);break;case"flexStacker/setStoredLabwareItems":Yw(e.params,t,r);break;case"flexStacker/prepareShuttle":case"flexStacker/closeLatch":case"flexStacker/openLatch":break;case"flexStacker/empty":jw(e.params,t,r);break;case"flexStacker/fill":Kw(e.params,t,r);break;case"flexStacker/fillItems":Gw(e.params,t,r);break;case"flexStacker/retrieve":Xw(e.params,t,r);break;case"flexStacker/store":Zw(e.params,t,r);break;case"setRailLights":case"touchTip":case"configureForVolume":case"loadPipette":case"loadLabware":case"loadModule":case"home":case"moveRelative":case"moveToSlot":case"moveToCoordinates":case"savePosition":case"waitForResume":case"waitForDuration":case"pause":case"delay":case"custom":case"comment":case"captureImage":case"prepareToAspirate":case"liquidProbe":case"loadLiquidClass":case"loadLidStack":case"loadLid":case"getTipPresence":case"identifyModule":case"getNextTip":case"retractAxis":case"sealPipetteToTip":case"tryLiquidProbe":case"unsealPipetteFromTip":case"verifyTipPresence":case"pressureDispense":case"createTimer":break;case"moveToAddressableArea":case"moveToAddressableAreaForDropTip":uw(e.params,t,r);break;case"moveToWell":cw(e.params,t,r);break;case"loadLiquid":hE(e.params,t,r);break;case"dropTipInPlace":xw(e.params,t,r);break;case"blowOutInPlace":Bw(e.params,t,r);break;case"configureNozzleLayout":dE(e.params,t,r);break;case"temperatureModule/setTargetTemperature":Qw(e.params,t,r);break;case"temperatureModule/deactivate":eS(e.params,t,r);break;case"temperatureModule/waitForTemperature":Jw(e.params,t,r);break;case"thermocycler/setTargetBlockTemperature":mw(e.params,t,r);break;case"thermocycler/setTargetLidTemperature":hw(e.params,t,r);break;case"thermocycler/waitForBlockTemperature":_w(e.params);break;case"thermocycler/waitForLidTemperature":yw(e.params);break;case"thermocycler/deactivateBlock":Tw(e.params,t,r);break;case"thermocycler/deactivateLid":gw(e.params,t,r);break;case"thermocycler/closeLid":Iw(e.params,t,r);break;case"thermocycler/openLid":Ew(e.params,t,r);break;case"thermocycler/runProfile":ww(e.params,t,r);break;case"thermocycler/runExtendedProfile":Ry(e.params,t,r);break;case"thermocycler/startRunExtendedProfile":ky(e.params,t,r);break;case"thermocycler/awaitProfileComplete":bw(e.params);break;case"heaterShaker/deactivateHeater":Fw(e.params,t,r);break;case"heaterShaker/setTargetTemperature":Mw(e.params,t,r);break;case"heaterShaker/setAndWaitForShakeSpeed":case"heaterShaker/setShakeSpeed":Uw(e.params,t,r);break;case"heaterShaker/deactivateShaker":qw(e.params,t,r);break;case"heaterShaker/openLabwareLatch":$w(e.params,t,r);break;case"heaterShaker/closeLabwareLatch":Vw(e.params,t,r);break;case"heaterShaker/waitForTemperature":break;case"absorbanceReader/openLid":GI(e.params,t,r);break;case"absorbanceReader/closeLid":WI(e.params,t,r);break;case"absorbanceReader/initialize":YI(e.params,t,r);break;case"absorbanceReader/read":break;case"vacuumModule/startSetVacuumPressure":kw(e.params,t,r);break;case"vacuumModule/startSetVacuumPower":vw(e.params,t,r);break;case"vacuumModule/openVent":Ow(e.params,t,r);break;case"vacuumModule/closeVent":Rw(e.params,t,r);break;case"vacuumModule/stopVacuum":Pw(e.params,t,r);break;case"vacuumModule/startRunProfile":Cw(e.params,t,r);break;default:console.error(`unknown command: ${e.commandType} passed to getNextRobotStateAndWarning`)}}function Fy(e,t,r){return _y({warnings:[],robotState:r},a=>{My(e,t,a)})}function ip(e,t,r){const n=yy(e);return _y({warnings:[],robotState:r},s=>{n.forEach(o=>{My(o,t,s)})})}const tS=(e,t,r)=>{const n=e.reduce((a,s,o)=>{const i=a.timeline.length===0?r:Yc(a.timeline).robotState;if(a.errors!=null)return a;const l=s(t,i);if("errors"in l)return{timeline:a.timeline,errors:l.errors};const p=yy(l.commands).reduce((f,_)=>Fy(_,t,f.robotState),{robotState:i,warnings:[]}),d={commands:l.commands,robotState:p.robotState,warnings:l.warnings,stepInfo:{stepNumber:l.stepNumber,name:l.name,description:l.description},python:l.python};return{timeline:[...a.timeline,d],errors:null}},{timeline:[],errors:null});return{timeline:n.timeline,errors:n.errors}},qn=(e,t)=>{const r=t[e]?.stack;return r!=null?G(r):""},$n=e=>{if(e.type===c.VACUUM_MODULE_TYPE){const t=e;return t.currentPumpActivity.type==="timedHold"||t.currentPumpActivity.type==="profile"}if(e.type===c.THERMOCYCLER_MODULE_TYPE){const t=e;return t.currentBlockActivity.type==="profile"||t.currentBlockActivity.type==="blockTargetTemp"}return!1},Vn=e=>{const{pipette:t,labware:r,invariantContext:n,prevRobotState:a}=e;if(n.config.OT_PD_DISABLE_MODULE_RESTRICTIONS)return!1;const s=t?n.pipetteEntities[t]:null,o=r?G(a.labware[r]?.stack):null;if(!t||!r||!s||!o)return!1;const i=Object.keys(n.moduleEntities).some(l=>{const u=n.moduleEntities[l].model;if(Dh.includes(u)){const p=a.modules[l]?.slot;return p==="1"&&o==="4"||p==="3"&&o==="6"}else return!1});return c.GEN_ONE_MULTI_PIPETTES.includes(s.name)&&i},ae=(e,t,r)=>{const n=e.reduce((a,s)=>{if(a.errors.length>0)return a;const o=s(t,a.robotState);if("errors"in o)return{robotState:a.robotState,commands:a.commands,errors:o.errors,warnings:a.warnings};const i=[...a.commands,...o.commands],l=[...a.python?[a.python]:[],...o.python?[o.python]:[]].join(`
|
|
55
55
|
`),u=ip(o.commands,t,a.robotState);return{...a,robotState:u.robotState,commands:i,warnings:[...a.warnings||[],...o.warnings||[],...u.warnings],...l&&{python:l}}},{robotState:r,commands:[],errors:[],warnings:[]});return n.errors.length>0?{errors:n.errors}:{commands:n.commands,warnings:n.warnings,...n.python&&{python:n.python}}},Va=(e,t,r)=>{const n=Fa(e,t[r]?.stack),a=n&&e[n].moduleState;return!!(a&&a.type===c.THERMOCYCLER_MODULE_TYPE&&a.lidOpen!==!0)},rS=e=>e.commandCreatorFnName!=="delay"&&e.commandCreatorFnName!=="engageMagnet"&&e.commandCreatorFnName!=="disengageMagnet"&&e.commandCreatorFnName!=="setTemperature"&&e.commandCreatorFnName!=="deactivateTemperature"&&"pipette"in e?e.pipette:null,nS=e=>e.commandCreatorFnName==="delay"||e.commandCreatorFnName==="engageMagnet"||e.commandCreatorFnName==="disengageMagnet"||e.commandCreatorFnName==="setTemperature"||e.commandCreatorFnName==="deactivateTemperature",aS=new Date("2025-03-19T00:00:00Z"),sS=2,oS=22;function iS(e,t,r){const{labware:n,modules:a,pipettes:s,commands:o,liquids:i}=e,l=t.protocolType==="python"?t.apiVersion:null,u=l!=null&&l[0]>=sS&&l[1]>=oS,p=t.protocolType==="json"&&r>=aS,d=c.getLabwareDefinitionsByURIForProtocol(o),f=i.reduce((y,A)=>{const{id:w,description:I,displayName:S,displayColor:L}=A;return{...y,[w]:{description:I,displayName:S??"Unknown Liquid",pythonName:"n/a",displayColor:L??"#B7B8B9",liquidGroupId:w}}},{}),_=a.reduce((y,A)=>{const{id:w,model:I}=A;return{...y,[w]:{id:w,type:c.getModuleType(I),model:I,pythonName:"n/a"}}},{}),m=n.reduce((y,A)=>{const{id:w,definitionUri:I}=A,S=d[I];return S==null||S.schemaVersion===3?y:{...y,[w]:{id:w,labwareDefURI:I,def:S,pythonName:"n/a"}}},{}),h=o.reduce((y,A)=>{if(A.commandType==="loadLidStack"&&A.result!=null){const{stackLabwareId:w,lidStackDefinition:I}=A.result;if(w!=null&&I!=null&&y[w]==null&&I.schemaVersion!==3)return{...y,[w]:{id:w,labwareDefURI:c.getLabwareDefURI(I),def:I,pythonName:"n/a"}}}return y},m),b=s.reduce((y,A)=>{const{id:w,pipetteName:I}=A,S=c.getPipetteSpecsV2(I),E=o.filter(v=>v.commandType==="pickUpTip"&&v.params.pipetteId===w).map(v=>h[v.params.labwareId]),g=Array.from(new Set(E.map(v=>v.labwareDefURI))),k=Array.from(new Set(E.map(v=>v.def)));return S==null||(y[w]={name:I,id:w,tiprackLabwareDef:k,tiprackDefURI:g,spec:S,pythonName:"n/a"}),y},{}),T=o.reduce((y,A)=>{if(A.commandType==="loadLidStack"&&A.result!=null){const{params:w}=A,I=Ku(w);return{...y,stagingAreaEntities:{...y.stagingAreaEntities,...I}}}else if((A.commandType==="loadLabware"||A.commandType==="loadLid")&&A.result!=null){const{params:w}=A,I=Ku(w);return{...y,stagingAreaEntities:{...y.stagingAreaEntities,...I}}}else if(A.commandType==="moveToAddressableArea"||A.commandType==="moveToAddressableAreaForDropTip"){const w=A.params.addressableAreaName,I=`${D()}:${w}`;let S=zh;w==="fixedTrash"?S="cutout12":w.includes("WasteChute")?S="cutoutD3":w.includes("movableTrash")&&(S=`cutout${w.split("movableTrash")[1]}`);let L=y.trashBinEntities;Object.values(y.trashBinEntities).some(g=>g.location===S)||(w.includes("movableTrash")?L={...y.trashBinEntities,[I]:{pythonName:"trash_bin_1",id:I,location:S}}:w==="fixedTrash"&&(L={...y.trashBinEntities,[I]:{pythonName:"trash_bin_1",id:I,location:S}}));let E=y.wasteChuteEntities;return w.includes("WasteChute")&&(E={[I]:{pythonName:"waste_chute",id:I,location:S}}),{...y,trashBinEntities:L,wasteChuteEntities:E}}return y},{wasteChuteEntities:{},trashBinEntities:{},stagingAreaEntities:{},gripperEntities:{},config:{OT_PD_DISABLE_MODULE_RESTRICTIONS:!0}});return{labwareEntities:h,pipetteEntities:b,moduleEntities:_,liquidEntities:u||p?f:{},...T}}const lS={A3:"A4",B3:"B4",C3:"C4",D3:"D4"};function uS(e,t){const r=e.reduce((o,i)=>i.commandType==="loadPipette"&&i.result!=null?{...o,[i.result.pipetteId]:{mount:i.params.mount}}:o,{}),n=e.reduce((o,i)=>{if(i.commandType==="loadModule"&&i.result!=null){const l=c.getModuleDef(i.params.model).moduleType;return{...o,[i.result.moduleId]:{slot:l===c.FLEX_STACKER_MODULE_TYPE?lS[i.params.location.slotName]:i.params.location.slotName,moduleState:Hh[l]}}}return o},{}),a=e.reduce((o,i)=>{if(i.commandType==="loadLidStack"&&i.result!=null){const{result:l}=i,u=l.locationSequences,p=l.labwareIds,d=l.stackLabwareId,f=l.stackLocationSequence,_=m=>{if(c.locationIsOffDeck(m))return[m];if("slotName"in m)return[m.slotName];if("moduleId"in m){const h=n[m.moduleId]?.slot??"offDeck";return[m.moduleId,h]}else if("addressableAreaName"in m)return[m.addressableAreaName];return["offDeck"]};if(u!=null){const m=u.reduce((T,y)=>{const A=y.find(w=>w.kind==="onLabware");return A!=null&&(T[A.labwareId]=y),T},{}),h=p.reduce((T,y,A)=>{const w=m[y]??u[A];if(w!=null){const I=Yu(w);T[y]={stack:I[0]===y?I:[y,...I]}}else{const I=i.params.location;c.locationIsOffDeck(I)?T[y]={stack:[y,I]}:"slotName"in I?T[y]={stack:[y,I.slotName]}:T[y]={stack:[y,"offDeck"]}}return T},{}),b=d!=null&&f!=null?[d,...Yu(f)]:null;return{...o,...h,...d!=null&&b!=null?{[d]:{stack:b}}:{}}}else{const m=i.params.location,h=p.reduce((T,y)=>{if(c.locationIsOffDeck(m))T[y]={stack:[y,m]};else if("slotName"in m)T[y]={stack:[y,m.slotName]};else if("moduleId"in m){const A=m.moduleId;T[y]={stack:[y,A,n[A].slot]}}else T[y]={stack:[y,"offDeck"]};return T},{}),b=d!=null?[d,..._(m)]:null;return{...o,...h,...d!=null&&b!=null?{[d]:{stack:b}}:{}}}}else if((i.commandType==="loadLabware"||i.commandType==="loadLid")&&i.result!=null){const l=[i.result.labwareId];if(c.locationIsOffDeck(i.params.location))l.push(i.params.location);else if("slotName"in i.params.location)l.push(i.params.location.slotName);else if("moduleId"in i.params.location){const u=i.params.location.moduleId;if(n[u]==null)return console.warn(`Module ${u} not found when processing loadLabware/loadLid command. `),o;l.push(i.params.location.moduleId,n[i.params.location.moduleId].slot)}else if("labwareId"in i.params.location){const u=i.params.location.labwareId;o[u]==null&&(console.warn(`Parent labware ${u} not found when processing loadLabware/loadLid command. `),o[u]={stack:[u,"offDeck"]});const p=o[u].stack;l.push(u,...p)}else l.push(i.params.location.addressableAreaName);return{...o,[i.result.labwareId]:{stack:l}}}else{if(i.commandType==="flexStacker/setStoredLabware")return sh(i).forEach(u=>{ah(o,u,"setStoredLabwareCount")}),o;if(i.commandType==="flexStacker/fill")return sh(i).forEach(u=>{ah(o,u,"fillCount")}),o}return o},{}),s=Bc({invariantContext:t,labwareLocations:a,moduleLocations:n,pipetteLocations:r});return{frame:{...ip(e,t,s),command:e[e.length-1]},invariantContext:t}}const ah=(e,t,r)=>{const n=e[t]??{stack:[t,"offDeck"]};e[t]={...n,[r]:(n[r]??0)+1}},sh=e=>e.result?.storedLabware?.flatMap(r=>[r.primaryLabwareId,r.adapterLabwareId,r.lidLabwareId].filter(n=>n!=null))??[],lp=(e,t)=>e??(t.channels===1?c.SINGLE:t.channels===96?c.ALL:c.COLUMN);var Lu,oh;function cS(){if(oh)return Lu;oh=1;var e=Ac();function t(r,n){var a;return e(r,function(s,o,i){return a=n(s,o,i),!a}),!!a}return Lu=t,Lu}var Ou,ih;function pS(){if(ih)return Ou;ih=1;var e=t_(),t=Nn(),r=cS(),n=Qe(),a=Oc();function s(o,i,l){var u=n(o)?e:r;return l&&a(o,i,l)&&(i=void 0),u(o,t(i,3))}return Ou=s,Ou}var dS=pS();const Ba=xe(dS),Bn=(e,t)=>Ba(e,r=>r.moduleState.type===c.HEATERSHAKER_MODULE_TYPE&&r.moduleState.latchOpen!==!1&&c.getAreSlotsHorizontallyAdjacent(r.slot,t)),xn=(e,t,r)=>r.channels!==1&&Ba(e,n=>n.moduleState.type===c.HEATERSHAKER_MODULE_TYPE&&c.getAreSlotsHorizontallyAdjacent(n.slot,t)),xa=(e,t,r,n)=>r.channels!==1&&!n.def.parameters.isTiprack&&Ba(e,a=>a.moduleState.type===c.HEATERSHAKER_MODULE_TYPE&&c.getAreSlotsVerticallyAdjacent(a.slot,t)),Uy=(e,t,r)=>Ba(e,(a,s)=>c.getAreSlotsHorizontallyAdjacent(r,G(a.stack))&&c.getIsLabwareAboveHeight(t[s].def,c.MAX_LABWARE_HEIGHT_EAST_WEST_HEATER_SHAKER_MM)),Ha=(e,t,r)=>{const n=Fa(e,t[r]?.stack),a=n!=null?e[n].moduleState:null;return!!(a&&a.type===c.HEATERSHAKER_MODULE_TYPE&&a.latchOpen!==!1)},Hn=(e,t,r)=>Ba(e,n=>n.moduleState.type===c.HEATERSHAKER_MODULE_TYPE&&n.moduleState.targetSpeed!=null&&n.moduleState.targetSpeed>0&&(r===c.OT2_ROBOT_TYPE?c.getAreSlotsAdjacent(n.slot,t):c.getAreFlexSlotsAdjacent(n.slot,t))),za=(e,t,r)=>{const n=Fa(e,t[r]?.stack),a=n!=null?e[n].moduleState:null;return!!(a&&a.type===c.HEATERSHAKER_MODULE_TYPE&&a.targetSpeed!==null)},Ms=e=>{const{args:t,pipetteName:r,tiprackUri:n,liquidClassValuesForTip:a}=e;let s=null;"mixBeforeAspirate"in t?s=t.mixBeforeAspirate:"mixFirstAspirate"in t&&(s=t.mixFirstAspirate);const o=fS(t),i={dispense_position:{offset:{x:t.dispenseXOffset,y:t.dispenseYOffset,z:t.dispenseZOffset},position_reference:t.dispensePositionReference},flow_rate_by_volume:[[0,t.dispenseFlowRateUlSec??0]],delay:{enabled:!!t.dispenseDelay?.seconds,...t.dispenseDelay?.seconds?{duration:t.dispenseDelay?.seconds}:{}},submerge:{delay:{enabled:!!t.dispenseSubmergeDelay?.seconds,...t.dispenseSubmergeDelay?.seconds?{duration:t.dispenseSubmergeDelay?.seconds}:{}},speed:t.dispenseSubmergeSpeed??void 0,start_position:{offset:{x:t.dispenseSubmergeXOffset,y:t.dispenseSubmergeYOffset,z:t.dispenseSubmergeZOffset},position_reference:t.dispenseSubmergePositionReference}},retract:{air_gap_by_volume:[[0,t.dispenseAirGapVolume??0]],delay:{enabled:!!t.dispenseRetractDelay?.seconds,...t.dispenseRetractDelay?.seconds?{duration:t.dispenseRetractDelay?.seconds}:{}},end_position:{offset:{x:t.dispenseRetractXOffset,y:t.dispenseRetractYOffset,z:t.dispenseRetractZOffset},position_reference:t.dispenseRetractPositionReference},speed:t.dispenseRetractSpeed??void 0,touch_tip:{enabled:t.touchTipAfterDispense,z_offset:t.touchTipAfterDispense?t.touchTipAfterDispenseOffsetMmFromTop:void 0,mm_from_edge:t.touchTipAfterDispense&&t.touchTipAfterDispenseMmFromEdge!=null?t.touchTipAfterDispenseMmFromEdge:void 0,speed:t.touchTipAfterDispense?t.touchTipAfterDispenseSpeed:void 0},blowout:{enabled:t.blowoutLocation!=null,location:qy(t.blowoutLocation),flow_rate:t.blowoutLocation!=null?t.blowoutFlowRateUlSec:void 0,...o!=null?{blowout_position:o}:{}}}},l={[r]:{[n]:{aspirate:{aspirate_position:{offset:{x:t.aspirateXOffset,y:t.aspirateYOffset,z:t.aspirateZOffset},position_reference:t.aspiratePositionReference},flow_rate_by_volume:[[0,t.aspirateFlowRateUlSec]],pre_wet:t.preWetTip,correction_by_volume:a?.aspirate.correctionByVolume??[[0,0]],delay:{enabled:!!t.aspirateDelay?.seconds,...t.aspirateDelay?.seconds?{duration:t.aspirateDelay?.seconds}:{}},mix:{enabled:!!s?.volume,...s?.times?{repetitions:s.times}:{},...s?.volume?{volume:s.volume}:{}},submerge:{delay:{enabled:!!t.aspirateSubmergeDelay?.seconds,...t.aspirateSubmergeDelay?.seconds?{duration:t.aspirateSubmergeDelay?.seconds}:{}},speed:t.aspirateSubmergeSpeed??void 0,start_position:{offset:{x:t.aspirateSubmergeXOffset,y:t.aspirateSubmergeYOffset,z:t.aspirateSubmergeZOffset},position_reference:t.aspirateSubmergePositionReference}},retract:{air_gap_by_volume:[[0,t.aspirateAirGapVolume??0]],delay:{enabled:!!t.aspirateRetractDelay?.seconds,...t.aspirateRetractDelay?.seconds?{duration:t.aspirateRetractDelay?.seconds}:{}},end_position:{offset:{x:t.aspirateRetractXOffset,y:t.aspirateRetractYOffset,z:t.aspirateRetractZOffset},position_reference:t.aspirateRetractPositionReference},speed:t.aspirateRetractSpeed??void 0,touch_tip:{enabled:t.touchTipAfterAspirate,z_offset:t.touchTipAfterAspirate?t.touchTipAfterAspirateOffsetMmFromTop:void 0,mm_from_edge:t.touchTipAfterAspirate&&t.touchTipAfterAspirateMmFromEdge!=null?t.touchTipAfterAspirateMmFromEdge:void 0,speed:t.touchTipAfterAspirate?t.touchTipAfterAspirateSpeed:void 0}}},dispense:{...i,correction_by_volume:a?.singleDispense.correctionByVolume??[[0,0]],push_out_by_volume:[[0,t.pushOut??0]],mix:{enabled:"mixInDestination"in t?t.mixInDestination!=null:!1,repetitions:"mixInDestination"in t?t.mixInDestination?.times??void 0:void 0,volume:"mixInDestination"in t?t.mixInDestination?.volume??void 0:void 0}},...t.commandCreatorFnName==="distribute"?{multi_dispense:{...i,correction_by_volume:a?.multiDispense?.correctionByVolume??[[0,0]],..."conditioningVolume"in t?{conditioning_by_volume:[[0,t.conditioningVolume??0]]}:{},..."disposalVolume"in t?{disposal_by_volume:[[0,t.disposalVolume??0]]}:{}}}:{}}}},u=JSON.parse(JSON.stringify(l));return Fr(u)},ja=(e,t)=>`${c.getAllLiquidClassDefs()[e].liquidClassName}${t?"_base_class":""}`,qy=e=>{if(e!=null)return e===zr?"source":e===Mn?"destination":"trash"},fS=e=>{const t=qy(e.blowoutLocation);return!t||t==="trash"?null:{offset:{x:e.blowoutXPosition??0,y:e.blowoutYPosition??0,z:e.blowoutOffsetFromTopMm??1},position_reference:e.blowoutPositionReference??c.POSITION_REFERENCE_TOP}},Fs=e=>{const{labwareEntities:t,tiprackIds:r}=e;return`tip_racks=[${r.map(a=>t[a].pythonName).join(", ")}]`};var Ru,lh;function mS(){if(lh)return Ru;lh=1;var e="Expected a function";function t(r){if(typeof r!="function")throw new TypeError(e);return function(){var n=arguments;switch(n.length){case 0:return!r.call(this);case 1:return!r.call(this,n[0]);case 2:return!r.call(this,n[0],n[1]);case 3:return!r.call(this,n[0],n[1],n[2])}return!r.apply(this,n)}}return Ru=t,Ru}var ku,uh;function hS(){if(uh)return ku;uh=1;var e=Jc(),t=Pn(),r=gs(),n=ar(),a=Cn();function s(o,i,l,u){if(!n(o))return o;i=t(i,o);for(var p=-1,d=i.length,f=d-1,_=o;_!=null&&++p<d;){var m=a(i[p]),h=l;if(m==="__proto__"||m==="constructor"||m==="prototype")return o;if(p!=f){var b=_[m];h=u?u(b,m,_):void 0,h===void 0&&(h=n(b)?b:r(i[p+1])?[]:{})}e(_,m,h),_=_[m]}return o}return ku=s,ku}var vu,ch;function _S(){if(ch)return vu;ch=1;var e=Es(),t=hS(),r=Pn();function n(a,s,o){for(var i=-1,l=s.length,u={};++i<l;){var p=s[i],d=e(a,p);o(d,p)&&t(u,r(p,a),d)}return u}return vu=n,vu}var Pu,ph;function yS(){if(ph)return Pu;ph=1;var e=va(),t=Nn(),r=_S(),n=rp();function a(s,o){if(s==null)return{};var i=e(n(s),function(l){return[l]});return o=t(o),r(s,i,function(l,u){return o(l,u[0])})}return Pu=a,Pu}var Cu,dh;function bS(){if(dh)return Cu;dh=1;var e=Nn(),t=mS(),r=yS();function n(a,s){return r(a,t(e(s)))}return Cu=n,Cu}var TS=bS();const gS=xe(TS);function $y(e){return Object.keys(e.wells)}const IS=(e,t)=>{const r=Object.keys(e||{}).filter(n=>e[n]&&e[n].volume>0);return{wellName:t,groupIds:r,ingreds:gS(e,n=>!n||n.volume<=0)}},ES=(e,t)=>{const r=$y(t);return ut(r,(n,a)=>{const s=e&&e[a];return{...n,[a]:s?IS(e[a],a):{}}},{})},wS=(e,t)=>{const r={};return t.forEach(n=>{const a=e!=null?Object.values(e).reduce((s,o)=>{if(o.groupIds.indexOf(n)!==-1){const l=o.ingreds[n];l?.volume!=null&&(s[o.wellName??"A1"]=l.volume)}return s},{}):{};r[n]=a}),r},SS=e=>{const t=e.flatMap(r=>r==null?[]:Object.values(r).flatMap(n=>n.groupIds.filter(a=>a!==je)));return Array.from(new Set(t))},AS=e=>{const t=e!=null?Object.values(e).flatMap(r=>r.groupIds)?.filter(r=>r!==je):[];return Array.from(new Set(t))},Vy="#737578",By=e=>{const t=Number(e);return Number.isInteger(t)?c.DEFAULT_LIQUID_COLORS[t%c.DEFAULT_LIQUID_COLORS.length]:(e!==je&&console.warn(`swatchColors expected an integer or ${je}, got ${e}`),"transparent")},LS=(e,t)=>{const r=e.filter(n=>n!==je);return r.length===0?null:r.length===1?t[r[0]]??By(r[0]):Vy},OS=(e,t)=>ut(e,(r,n,a)=>{const s=LS(n.groupIds,t);return s?{...r,[a]:s}:r},{});var Nu,fh;function RS(){if(fh)return Nu;fh=1;function e(t,r){return t>r}return Nu=e,Nu}var Du,mh;function kS(){if(mh)return Du;mh=1;var e=Nh(),t=RS(),r=La();function n(a){return a&&a.length?e(a,r,t):void 0}return Du=n,Du}var vS=kS();const PS=xe(vS),xy="2.31",CS="9.0.1";function NS(){return["import json","from opentrons import protocol_api, types"].join(`
|
|
56
56
|
`)}function DS(e){function t(n){return n?new Date(n).toISOString():""}const r=Object.fromEntries(Object.entries({protocolName:e.protocolName,author:e.author,description:e.description,created:t(e.created),internalAppBuildDate:e.internalAppBuildDate,lastModified:t(e.lastModified),category:e.category,subcategory:e.subcategory,tags:e.tags?.length&&e.tags.join(", "),protocolDesigner:e.protocolDesigner,source:e.source}).filter(([n,a])=>a));return`metadata = ${Fr(r)}`}function MS(e){const r={robotType:{[c.OT2_ROBOT_TYPE]:"OT-2",[c.FLEX_ROBOT_TYPE]:"Flex"}[e],apiLevel:xy};return`requirements = ${Fr(r)}`}function Hy(e,t){const r=Object.keys(e).length>0,n=r?Object.values(e).map(a=>`${a.pythonName} = ${be}.load_module(${N(a.model)}, ${N(t[a.id].slot)})`).join(`
|
|
57
57
|
`):"";return r?`# Load Modules:
|
package/lib/index.mjs
CHANGED
package/package.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
},
|
|
10
10
|
"name": "@opentrons/step-generation",
|
|
11
11
|
"productName": "Opentrons Step Generation",
|
|
12
|
-
"version": "0.3.
|
|
12
|
+
"version": "0.3.16-alpha.0",
|
|
13
13
|
"description": "Step generation",
|
|
14
14
|
"main": "lib/index.cjs",
|
|
15
15
|
"types": "lib/index.d.ts",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"immer": "^10.1.3",
|
|
38
38
|
"lodash": "4.18.1",
|
|
39
39
|
"uuid": "14.0.0",
|
|
40
|
-
"@opentrons/shared-data": "0.3.
|
|
40
|
+
"@opentrons/shared-data": "0.3.16-alpha.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/lodash": "4.17.24"
|