@opentrons/step-generation 0.3.12-alpha.0 → 0.3.13-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 -1
- package/lib/utils/pythonFileUtils.d.ts +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
package/lib/index.cjs
CHANGED
|
@@ -52,7 +52,7 @@ ${K(m.join(`,
|
|
|
52
52
|
)`;return{commands:p,python:_}},fI=(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
54
|
`]:[]],i=`${be}.home(${o.join(", ")})`;return{commands:[s],python:i}},mI=(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(", ")})`}},hI=(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=${Pc([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(", ")})`}},_I=(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)}])`}},F_=(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()`}},ju=(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()`}},yI=["1","4","7","10"],U_=(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)&&My(r.labware,a,o)){const d=yI.includes(o)?"right":"left";return{errors:[jb(d)]}}const p=s[e.moduleId].pythonName;return{commands:[{commandType:"heaterShaker/openLabwareLatch",key:D(),params:{moduleId:e.moduleId}}],python:`${p}.open_labware_latch()`}},q_=(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})`}},Gu=(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()`}},Fc=(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(h=>s[h]?.def.allowedRoles?.includes("lid")&&s[h]?.def.parameters.loadName!=="opentrons_tough_pcr_auto_sealing_lid")),p=u!=null?Bc(u.stack):null,d=p!=null?s[p].def.metadata.displayName:null;return d!=null&&o.push(eT({lidDisplayName:d})),o.length>0?{errors:o}:{commands:[{commandType:"thermocycler/closeLid",key:D(),params:{moduleId:n}}],python:`${i}.close_lid()`}},$_=(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()`}},V_=(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()`}},B_=(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()`}},x_=(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})`}},Uc=(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 H_(e){return Yh.includes(e.parameters.loadName)}const bI=e=>(e.parameters.quirks??[]).includes("vacuumModuleDock"),z_=(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 j_(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 qc(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 G_(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 W_(e,t){return wn(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 $c(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 Y_=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,h=null;return o===zr?(f=r,h=n):o===Mn&&(f=a,h=s),h!=null&&f!=null?[O(Oc,{pipetteId:t,labwareId:f,wellName:h,flowRate:i,wellLocation:{origin:"top",offset:{z:l}}})]:d[o]!=null?[O(ub,{pipetteId:t,flowRate:i,wasteChuteId:Object.keys(d)[0]})]:[O(lb,{pipetteId:t,trashId:Object.keys(p)[0],flowRate:i})]};function K_(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]:X_(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 X_(e,t){return bn(e).reduce((r,n)=>({...r,[n]:t}),{})}const Z_=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 Vc(e){const{invariantContext:t,labwareLocations:r,moduleLocations:n={},pipetteLocations:a}=e;return{labware:r,modules:n,pipettes:a,liquidState:K_(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 Q_=(e,t)=>e.tipracks[t]!=null?Object.values(e.tipracks[t]).some(r=>r!==ue):!1,J_=(e,t)=>e.labware[t]!=null?Object.values(e.labware[t]).some(r=>Object.values(r).some(n=>n.volume>0)):!1,TI=(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:h}=e,{labwareEntities:m,trashBinEntities:_,wasteChuteEntities:b}=t,T=Fn(m,b,_,n);let y=[];return T==="labware"&&i!=null&&l!=null?y=[O(Rc,{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:h})]:T==="wasteChute"?y=[O(oA,{pipetteId:a,volume:s,flowRate:o,wasteChuteId:b[n].id})]:y=[O(sA,{pipetteId:a,volume:s,flowRate:o,trashId:_[n].id})],ae(y,t,r)},gI=(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:St})],ae(d,t,r)},II=(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:h}=t,m=Fn(d,h,f,a);let _=[];if(m==="labware"&&s!=null){const{dispenseAirGapLabware:b,dispenseAirGapWell:T}=Z_({blowoutLocation:n,sourceLabware:l,destLabware:a,sourceWell:u,destWell:s});_=[O(eA,{flowRate:o,pipetteId:i,labwareId:b,wellName:T,volume:p,type:"dispense"})]}else m==="wasteChute"?_=[O(Jw,{pipetteId:i,volume:p,flowRate:o,wasteChuteId:h[a].id})]:_=[O(Qw,{pipetteId:i,volume:p,flowRate:o,trashId:f[a].id})];return ae(_,t,r)},EI=(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:St}),O(me,{seconds:i})]:f=[O(Fe,{pipetteId:n,fixtureId:a,offset:St}),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}},Bc=e=>e==null?(console.error("expected to find stack but could not"),"unknown top location"):e[0],ey=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),[])},xc=e=>c.FLEX_SINGLE_SLOT_BY_CUTOUT_ID[c.FLEX_CUTOUT_BY_SLOT_ID[e]],ty=e=>{const t=c.FLEX_STACKER_ADDRESSABLE_AREAS.indexOf(e);return t===-1?null:ve[t]},SI=e=>{const t=ty(e);return t!=null?xc(t):null},ry=(e,t,r)=>{if(e==null)return null;if(ve.includes(e)){const n=xc(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},ny=(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=Bc(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],h=d.filter(g=>r[g]?.def?.allowedRoles?.includes("adapter"))[0],m=p.def.parameters.loadName,_=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[_]?.def??null,adapter:r[h]?.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"),w=H_(p.def),L=t.some(g=>g in r&&bI(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)&&!w||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,wI=(e,t,r)=>t?e:r?Gh[e]:e,Hc=(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=ay(t),s=wI(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(cc)===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??[]},AI=(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,h=a?.wells.A1.totalLiquidVolume,m=h==null?f:Math.min(f,h),_=r*2,b=s!=null?c.linearInterpolate(_,s)??0:0,y=a?.namespace!=="opentrons"||s!=null&&o!=null&&m>=_+b+(c.linearInterpolate(_,o)??0)+(b===0?c.linearInterpolate(_,u)??0:0),A=m>=_;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 S=Math.floor(m/r),I=Math.min(S,l),w=I*r;return{referenceVolumes:{airGap:{aspirate:w,dispense:0},pushOut:w,correction:{aspirate:w,dispense:w},flowRate:{aspirate:r,dispense:w}},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},Wu=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]},[]),LI={A4:"cutoutA3",B4:"cutoutB3",C4:"cutoutC3",D4:"cutoutD3"};function Yu(e){if(e.location!=="offDeck"&&e.location!=="systemLocation"&&e.location!=="wasteChuteLocation"&&"addressableAreaName"in e.location&&zh.includes(e.location.addressableAreaName)){const t=D(),r=e.location.addressableAreaName,n=LI[r]??r;return{[t]:{id:t,location:n}}}return{}}const ay=e=>jh.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},sy=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))},oy=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 gl,Kf;function iy(){if(Kf)return gl;Kf=1;function e(t){var r=t==null?0:t.length;return r?t[r-1]:void 0}return gl=e,gl}var OI=iy();const Yc=xe(OI);var ly=Symbol.for("immer-nothing"),Xf=Symbol.for("immer-draftable"),st=Symbol.for("immer-state"),RI=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=RI[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?uy(e)||Array.isArray(e)||!!e[Xf]||!!e.constructor?.[Xf]||qa(e)||vs(e):!1}var kI=Object.prototype.constructor.toString(),Zf=new WeakMap;function uy(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=Zf.get(r);return n===void 0&&(n=Function.toString.call(r),Zf.set(r,n)),n===kI}function is(e,t,r=!0){ks(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 ks(e){const t=e[st];return t?t.type_:Array.isArray(e)?1:qa(e)?2:vs(e)?3:0}function Ku(e,t){return ks(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function cy(e,t,r){const n=ks(e);n===2?e.set(t,r):n===3?e.add(r):e[t]=r}function vI(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function qa(e){return e instanceof Map}function vs(e){return e instanceof Set}function Nr(e){return e.copy_||e.base_}function Xu(e,t){if(qa(e))return new Map(e);if(vs(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const r=uy(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 Ps(e)||On(e)||!qr(e)||(ks(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 PI(){Ke(2)}var ts={value:PI};function Ps(e){return e===null||typeof e!="object"?!0:Object.isFrozen(e)}var CI={};function $r(e){const t=CI[e];return t||Ke(0,e),t}var _a;function py(){return _a}function NI(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function Qf(e,t){t&&($r("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Zu(e){Qu(e),e.drafts_.forEach(DI),e.drafts_=null}function Qu(e){e===_a&&(_a=e.parent_)}function Jf(e){return _a=NI(_a,e)}function DI(e){const t=e[st];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function em(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return e!==void 0&&e!==r?(r[st].modified_&&(Zu(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,[]),Zu(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==ly?e:void 0}function ls(e,t,r){if(Ps(t))return t;const n=e.immer_.shouldUseStrictIteration(),a=t[st];if(!a)return is(t,(s,o)=>tm(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)=>tm(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 tm(e,t,r,n,a,s,o){if(a==null||typeof a!="object"&&!o)return;const i=Ps(a);if(!(i&&!o)){if(process.env.NODE_ENV!=="production"&&a===r&&Ke(5),On(a)){const l=s&&t&&t.type_!==3&&!Ku(t.assigned_,n)?s.concat(n):void 0,u=ls(e,a,l);if(cy(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 MI(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:py(),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(!Ku(r,t))return FI(e,r,t);const n=r[t];return e.finalized_||!qr(n)?n:n===Il(e.base_,t)?(El(e),e.copy_[t]=ec(n,e)):n},has(e,t){return t in Nr(e)},ownKeys(e){return Reflect.ownKeys(Nr(e))},set(e,t,r){const n=dy(Nr(e),t);if(n?.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const a=Il(Nr(e),t),s=a?.[st];if(s&&s.base_===r)return e.copy_[t]=r,e.assigned_[t]=!1,!0;if(vI(r,a)&&(r!==void 0||Ku(e.base_,t)))return!0;El(e),Ju(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 Il(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,El(e),Ju(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 Il(e,t){const r=e[st];return(r?Nr(r):e)[t]}function FI(e,t,r){const n=dy(t,r);return n?"value"in n?n.value:n.get?.call(e.draft_):void 0}function dy(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 Ju(e){e.modified_||(e.modified_=!0,e.parent_&&Ju(e.parent_))}function El(e){e.copy_||(e.copy_=Xu(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var UI=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=Jf(this),o=ec(t,void 0);let i=!0;try{a=r(o),i=!1}finally{i?Zu(s):Qu(s)}return Qf(s,n),em(a,s)}else if(!t||typeof t!="object"){if(a=r(t),a===void 0&&(a=t),a===ly&&(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=qI(e));const t=Jf(this),r=ec(e,void 0);return r[st].isManual_=!0,Qu(t),r}finishDraft(e,t){const r=e&&e[st];(!r||!r.isManual_)&&Ke(9);const{scope_:n}=r;return Qf(n,t),em(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 ec(e,t){const r=qa(e)?$r("MapSet").proxyMap_(e,t):vs(e)?$r("MapSet").proxySet_(e,t):MI(e,t);return(t?t.scope_:py()).drafts_.push(r),r}function qI(e){return On(e)||Ke(10,e),fy(e)}function fy(e){if(!qr(e)||Ps(e))return e;const t=e[st];let r,n=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=Xu(e,t.scope_.immer_.useStrictShallowCopy_),n=t.scope_.immer_.shouldUseStrictIteration()}else r=Xu(e,!0);return is(r,(a,s)=>{cy(r,a,fy(s))},n),t&&(t.finalized_=!1),r}var $I=new UI,my=$I.produce;function VI(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 BI=(e,t)=>["pipetteId","volume","labwareId","wellName"].every(n=>e[n]===t[n]),xI=e=>VI(e,(t,r)=>t.commandType==="aspirate"&&r.commandType==="dispense"&&BI(t.params,r.params)),hy=e=>xI(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)},HI=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Zc(n,a);s!=null&&(s.lidOpen=!0)},zI=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Zc(n,a);s!=null&&(s.lidOpen=!1)},jI=(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 GI(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,rm;function WI(){if(rm)return Sl;rm=1;var e=u_(),t=Ca(),r=fs(),n=Qe(),a=xr(),s=Ts(),o=Is(),i=Ic(),l="[object Map]",u="[object Set]",p=Object.prototype,d=p.hasOwnProperty;function f(h){if(h==null)return!0;if(a(h)&&(n(h)||typeof h=="string"||typeof h.splice=="function"||s(h)||i(h)||r(h)))return!h.length;var m=t(h);if(m==l||m==u)return!h.size;if(o(h))return!e(h).length;for(var _ in h)if(d.call(h,_))return!1;return!0}return Sl=f,Sl}var YI=WI();const wl=xe(YI);var Al,nm;function KI(){if(nm)return Al;nm=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 Al=e,Al}var Ll,am;function XI(){if(am)return Ll;am=1;function e(t){return t!==t}return Ll=e,Ll}var Ol,sm;function ZI(){if(sm)return Ol;sm=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 Ol=e,Ol}var Rl,om;function QI(){if(om)return Rl;om=1;var e=KI(),t=XI(),r=ZI();function n(a,s,o){return s===s?r(a,s,o):e(a,t,o)}return Rl=n,Rl}var kl,im;function JI(){if(im)return kl;im=1;var e=QI();function t(r,n){var a=r==null?0:r.length;return!!a&&e(r,n,0)>-1}return kl=t,kl}var vl,lm;function eE(){if(lm)return vl;lm=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 vl=e,vl}var Pl,um;function tE(){if(um)return Pl;um=1;function e(){}return Pl=e,Pl}var Cl,cm;function rE(){if(cm)return Cl;cm=1;var e=p_(),t=tE(),r=_c(),n=1/0,a=e&&1/r(new e([,-0]))[1]==n?function(s){return new e(s)}:t;return Cl=a,Cl}var Nl,pm;function nE(){if(pm)return Nl;pm=1;var e=Qh(),t=JI(),r=eE(),n=e_(),a=rE(),s=_c(),o=200;function i(l,u,p){var d=-1,f=t,h=l.length,m=!0,_=[],b=_;if(p)m=!1,f=r;else if(h>=o){var T=u?null:a(l);if(T)return s(T);m=!1,f=n,b=new e}else b=u?[]:_;e:for(;++d<h;){var y=l[d],A=u?u(y):y;if(y=p||y!==0?y:0,m&&A===A){for(var S=b.length;S--;)if(b[S]===A)continue e;u&&b.push(A),_.push(y)}else f(b,A,p)||(b!==_&&b.push(A),_.push(y))}return _}return Nl=i,Nl}var Dl,dm;function aE(){if(dm)return Dl;dm=1;var e=nE();function t(r){return r&&r.length?e(r):[]}return Dl=t,Dl}var sE=aE();const oE=xe(sE),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 iE(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,h=t.labwareEntities[i].def,m=h.metadata.displayCategory==="reservoir",_=Qc({pipetteSpec:f,nozzles:p,primaryNozzle:d}),{allWellsShared:b,wellsForTips:T}=$c(_,h,l);if(console.assert(oE(T).length===b?1:T.length,`expected all wells to be shared, or no wells to be shared. Got: ${JSON.stringify(T)}`),_>1&&b){const A=T[0],S=u.labware[i][A],I=a*_>mr(S);wl(S)?o.push(Tl()):I&&o.push(bl());const w=I?mr(S)/_:a,L=er(w,S).dest;bn(_).forEach(E=>{const g=u.pipettes[n],k=E.toString(),v=g[k],q=I?hr(v,{...L,[je]:{volume:a-w}}):hr(v,L);g[k]=q}),u.labware[i][A]=er(a*_,u.labware[i][A]).source;return}if(_===96&&m){T.forEach(A=>{const S=u.labware[i][A],I=a*8>mr(S);wl(S)?o.push(Tl()):I&&o.push(bl());const w=I?mr(S)/8:a,L=er(w,S).dest;bn(_).forEach(E=>{const g=u.pipettes[n],k=E.toString(),v=g[k],q=I?hr(v,{...L,[je]:{volume:a-w}}):hr(v,L);g[k]=q}),u.labware[i][A]=er(w*8,u.labware[i][A]).source});return}bn(_).forEach(A=>{const S=A.toString(),I=u.pipettes[n],w=I[S],L=u.labware[i][T[A]],E=er(a,L).dest;wl(L)?o.push(Tl()):a>mr(L)&&o.push(bl()),I[S]=hr(w,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 Cs(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}),h=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:_,allWellsShared:b}=m!=null&&l!=null?$c(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 S=null;if(h!=null&&T!=null)S={[h]:ut(A,(L,E)=>hr(L,E.dest),T[h])};else if(y!=null){const L=Object.values(s.pipettes[a]).reduce((E,g)=>E+(g[0]?.volume??0),0);y[0]={volume:L}}S==null&&y==null&&console.assert(!1,`expected to merge liquid to a single well with sourceId ${n}`);const I=h!=null&&T!=null&&_!=null?_.reduce((L,E,g)=>({...L,[E]:hr(A[`${g}`].dest,T[E]||{})}),{}):{},w=b?S: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&&w!=null&&(s.labware[n]=Object.assign(T??{},w))}function lE(e,t,r){const{pipetteId:n,labwareId:a,wellName:s}=e,{robotState:o}=r;Cs({pipetteId:n,entityId:a,useFullVolume:!0,wellName:s,prevLiquidState:o.liquidState,invariantContext:t,robotStateAndWarnings:r})}function uE(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 cE(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(Cs({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,h=t.pipetteEntities[n].spec,m=Qc({pipetteSpec:h,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 pE(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=ip(u,l),d=(h,m)=>h.find(_=>_.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,_)=>m.concat(_),[]).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,_)=>m.concat(_),[]).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 dE(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 Ml,fm;function fE(){if(fm)return Ml;fm=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 Ml=e,Ml}var Fl,mm;function Jc(){if(mm)return Fl;mm=1;var e=Ac(),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 Fl=a,Fl}var Ul,hm;function $a(){if(hm)return Ul;hm=1;var e=Jc(),t=Ac();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 Ul=r,Ul}var ql,_m;function mE(){if(_m)return ql;_m=1;var e=$a(),t=Pa();function r(n,a){return n&&e(a,t(a),n)}return ql=r,ql}var $l,ym;function hE(){if(ym)return $l;ym=1;function e(t){var r=[];if(t!=null)for(var n in Object(t))r.push(n);return r}return $l=e,$l}var Vl,bm;function _E(){if(bm)return Vl;bm=1;var e=ar(),t=Is(),r=hE(),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 Vl=s,Vl}var Bl,Tm;function ep(){if(Tm)return Bl;Tm=1;var e=i_(),t=_E(),r=xr();function n(a){return r(a)?e(a,!0):t(a)}return Bl=n,Bl}var xl,gm;function yE(){if(gm)return xl;gm=1;var e=$a(),t=ep();function r(n,a){return n&&e(a,t(a),n)}return xl=r,xl}var da={exports:{}};da.exports;var Im;function bE(){return Im||(Im=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 Hl,Em;function TE(){if(Em)return Hl;Em=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 Hl=e,Hl}var zl,Sm;function gE(){if(Sm)return zl;Sm=1;var e=$a(),t=yc();function r(n,a){return e(n,t(n),a)}return zl=r,zl}var jl,wm;function tp(){if(wm)return jl;wm=1;var e=l_(),t=e(Object.getPrototypeOf,Object);return jl=t,jl}var Gl,Am;function _y(){if(Am)return Gl;Am=1;var e=dc(),t=tp(),r=yc(),n=s_(),a=Object.getOwnPropertySymbols,s=a?function(o){for(var i=[];o;)e(i,r(o)),o=t(o);return i}:n;return Gl=s,Gl}var Wl,Lm;function IE(){if(Lm)return Wl;Lm=1;var e=$a(),t=_y();function r(n,a){return e(n,t(n),a)}return Wl=r,Wl}var Yl,Om;function rp(){if(Om)return Yl;Om=1;var e=n_(),t=_y(),r=ep();function n(a){return e(a,r,t)}return Yl=n,Yl}var Kl,Rm;function EE(){if(Rm)return Kl;Rm=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 Kl=r,Kl}var Xl,km;function np(){if(km)return Xl;km=1;var e=r_();function t(r){var n=new r.constructor(r.byteLength);return new e(n).set(new e(r)),n}return Xl=t,Xl}var Zl,vm;function SE(){if(vm)return Zl;vm=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 Zl=t,Zl}var Ql,Pm;function wE(){if(Pm)return Ql;Pm=1;var e=/\w*$/;function t(r){var n=new r.constructor(r.source,e.exec(r));return n.lastIndex=r.lastIndex,n}return Ql=t,Ql}var Jl,Cm;function AE(){if(Cm)return Jl;Cm=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 Jl=n,Jl}var eu,Nm;function LE(){if(Nm)return eu;Nm=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 eu=t,eu}var tu,Dm;function OE(){if(Dm)return tu;Dm=1;var e=np(),t=SE(),r=wE(),n=AE(),a=LE(),s="[object Boolean]",o="[object Date]",i="[object Map]",l="[object Number]",u="[object RegExp]",p="[object Set]",d="[object String]",f="[object Symbol]",h="[object ArrayBuffer]",m="[object DataView]",_="[object Float32Array]",b="[object Float64Array]",T="[object Int8Array]",y="[object Int16Array]",A="[object Int32Array]",S="[object Uint8Array]",I="[object Uint8ClampedArray]",w="[object Uint16Array]",L="[object Uint32Array]";function E(g,k,v){var q=g.constructor;switch(k){case h:return e(g);case s:case o:return new q(+g);case m:return t(g,v);case _:case b:case T:case y:case A:case S:case I:case w: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 tu=E,tu}var ru,Mm;function RE(){if(Mm)return ru;Mm=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 ru=r,ru}var nu,Fm;function kE(){if(Fm)return nu;Fm=1;var e=RE(),t=tp(),r=Is();function n(a){return typeof a.constructor=="function"&&!r(a)?e(t(a)):{}}return nu=n,nu}var au,Um;function vE(){if(Um)return au;Um=1;var e=Ca(),t=nr(),r="[object Map]";function n(a){return t(a)&&e(a)==r}return au=n,au}var su,qm;function PE(){if(qm)return su;qm=1;var e=vE(),t=Tc(),r=gc(),n=r&&r.isMap,a=n?t(n):e;return su=a,su}var ou,$m;function CE(){if($m)return ou;$m=1;var e=Ca(),t=nr(),r="[object Set]";function n(a){return t(a)&&e(a)==r}return ou=n,ou}var iu,Vm;function NE(){if(Vm)return iu;Vm=1;var e=CE(),t=Tc(),r=gc(),n=r&&r.isSet,a=n?t(n):e;return iu=a,iu}var lu,Bm;function yy(){if(Bm)return lu;Bm=1;var e=hc(),t=fE(),r=Jc(),n=mE(),a=yE(),s=bE(),o=TE(),i=gE(),l=IE(),u=c_(),p=rp(),d=Ca(),f=EE(),h=OE(),m=kE(),_=Qe(),b=Ts(),T=PE(),y=ar(),A=NE(),S=Pa(),I=ep(),w=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]",we="[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[we]=!1;function x(F,H,ce,Ue,Je,Be){var pe,et=H&w,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=_(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=h(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:S,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 lu=x,lu}var uu,xm;function by(){if(xm)return uu;xm=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 uu=e,uu}var cu,Hm;function DE(){if(Hm)return cu;Hm=1;var e=Es(),t=by();function r(n,a){return a.length<2?n:e(n,t(a,0,-1))}return cu=r,cu}var pu,zm;function ME(){if(zm)return pu;zm=1;var e=Pn(),t=iy(),r=DE(),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 pu=o,pu}var du,jm;function FE(){if(jm)return du;jm=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 du=u,du}var fu,Gm;function UE(){if(Gm)return fu;Gm=1;var e=FE();function t(r){return e(r)?void 0:r}return fu=t,fu}var mu,Wm;function qE(){if(Wm)return mu;Wm=1;var e=Kh();function t(r){var n=r==null?0:r.length;return n?e(r,1):[]}return mu=t,mu}var hu,Ym;function $E(){if(Ym)return hu;Ym=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 hu=e,hu}var _u,Km;function Ty(){if(Km)return _u;Km=1;var e=$E(),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 _u=r,_u}var yu,Xm;function VE(){if(Xm)return yu;Xm=1;function e(t){return function(){return t}}return yu=e,yu}var bu,Zm;function BE(){if(Zm)return bu;Zm=1;var e=VE(),t=__(),r=La(),n=t?function(a,s){return t(a,"toString",{configurable:!0,enumerable:!1,value:e(s),writable:!0})}:r;return bu=n,bu}var Tu,Qm;function xE(){if(Qm)return Tu;Qm=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 Tu=n,Tu}var gu,Jm;function gy(){if(Jm)return gu;Jm=1;var e=BE(),t=xE(),r=t(e);return gu=r,gu}var Iu,eh;function HE(){if(eh)return Iu;eh=1;var e=qE(),t=Ty(),r=gy();function n(a){return r(t(a,void 0,e),a+"")}return Iu=n,Iu}var Eu,th;function zE(){if(th)return Eu;th=1;var e=va(),t=yy(),r=ME(),n=Pn(),a=$a(),s=UE(),o=HE(),i=rp(),l=1,u=2,p=4,d=o(function(f,h){var m={};if(f==null)return m;var _=!1;h=e(h,function(T){return T=n(T,f),_||(_=T.length>1),T}),a(f,i(f),m),_&&(m=t(m,l|u|p,s));for(var b=h.length;b--;)r(m,h[b]);return m});return Eu=d,Eu}var jE=zE();const GE=xe(jE),tc="TOUCHED_PIPETTABLE_LABWARE";var Su,rh;function WE(){if(rh)return Su;rh=1;var e=Ec();function t(r,n){return e(r,n)}return Su=t,Su}var YE=WE();const KE=xe(YE),Ns=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}=Ns({node:i.stackedOnNode,stack:[...r,t],robotState:n,memo:a});Iy(a,u),s=l,a.set(t,s)}return{stack:s,memo:a}},XE=e=>{const{node:t,robotState:r,deckDef:n,deckConfiguration:a}=e,{stack:s}=Ns({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,h])=>h.includes(l))??[];if(d!=null){const f=a.find(({cutoutId:T})=>T===d),{cutoutFixtureId:h,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(_&&b!=null)return b[0]}}}return null},Iy=(e,t)=>{t.forEach((r,n)=>{e.set(n,r)})},ZE=(e,t)=>e.some(r=>KE(r,t)),Ey=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}=Ns({node:l,robotState:r,memo:n});if(Iy(n,f),!ZE(d,a))continue;n.set(l,d),u=d}u.length>s.length&&(s=u)}return s},Sy=e=>{const t=[],r=new Set;for(const n of Object.keys(e.labware)){if(r.has(n))continue;const a=Ey({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]},QE=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},wy=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)},JE=e=>{const{robotState:t,deckConfiguration:r,deckDefinition:n,moduleEntities:a}=e,s=wy({deckConfiguration:r,deckDefinition:n}),o=new Set(s),i=Sy(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},eS=e=>{const t=e.toLowerCase();return t.includes("chute")||t.includes("waste")||t.startsWith("gripper")||t==="96channelwastechute"},Ay=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(eS(o))return{addressableAreaName:o};const i=ry(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}},tS=e=>typeof e=="object"&&e!==null&&"kind"in e&&e.kind==="inStackerHopper",rS=e=>typeof e!="object"||e===null?!1:!tS(e),nS=(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||!rS(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=nS(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)},aS=(e,t,r)=>{const n=Object.keys(e.labware),a=new Set(n);let s=rr(e.labware,(o,i)=>{const l=o.stackedOnNode??Ay({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 sS(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=Hc(l,u,n),d=p.indexOf(n),f=p.slice(0,d+1),h=c.getIsLid(o[n].def);let m=!1;const _=Object.entries(i).find(([E,{slot:g}])=>{const{type:k}=t.moduleEntities[E]??{};return k===c.FLEX_STACKER_MODULE_TYPE&&g===u})??null,b=_!=null&&_[1].moduleState.type===c.FLEX_STACKER_MODULE_TYPE?Jt.map(E=>_[1].moduleState.labwareOnShuttle?.[E]).filter(E=>E!=null):[],T=b.includes(n)?b.slice(0,b.indexOf(n)+1):[];if(_!=null&&_[1].moduleState.type===c.FLEX_STACKER_MODULE_TYPE){const E=_[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,S]=y??[];if(A!=null&&S!=null){const E=T.length>0?T:fa({slot:u,labwareState:l,modulesState:i}),g=E.indexOf(n),k=S.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(cc),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],...h&&m?{sterility:tc}:{}}}});const w=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,w&&(s.labware[n].sterility=tc),s.labware=sp(rr(s.labware,E=>GE(E,"contains")),o)}function oS(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===G_(a))?.id,u=i?Object.values(s)[0].id:l,{robotState:p}=r;p.pipettes[n]={...p.pipettes[n],entityId:u}}function iS(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 lS(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=ip(u,o),f=(_,b)=>_.find(T=>T.includes(b)),h=(_,b)=>{const T=_.findIndex(A=>A.includes(b));if(T===-1)return null;const y=_[T].indexOf(b);return _.map(A=>A[y])},m=(_,b)=>{const T=c.PARTIAL_NOZZLE_MAP[p],y=_.findIndex(L=>L.includes(b)),A=_[y].indexOf(b),S=_[y];if(S.length-A<T){const L=S.length-T;return S.slice(L,S.length)}const w=A+T;return S.slice(A,Math.min(w,S.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 _=m(i.ordering,s);_==null?console.error(`Invalid primary well for tip pick up for partial config: ${s}`):_.forEach(function(b){l.tipracks[a][b]=ue})}else if(d===c.COLUMN){const _=f(i.ordering,s);_==null&&console.error(`Invalid primary well for tip pickup: ${s}`),_?.forEach(function(b){l.tipracks[a][b]=ue})}else if(d===c.ROW){const _=h(i.ordering,s);_==null&&console.error("Invalid primary well for tip pickup: "+s),_?.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 _=f(i.ordering,s);_==null&&console.error(`Invalid primary well for tip pickup: ${s}`),_?.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 _=f(i.ordering,s);_==null&&console.error(`Invalid primary well for tip pickup: ${s}`),_?.forEach(function(b){l.tipracks[a][b]=ue})}r.robotState.pipettes[n].tiprackId=a,r.robotState.pipettes[n].tipWell=s}const uS={clean:Ra,empty:ue,used:Qt};function cS(e,t,r){const{labwareId:n,wellNames:a,tipWellState:s="clean"}=e,o=uS[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}`),{})},pS=(e,t,r)=>{const{moduleId:n,celsius:a}=e,{robotState:s}=r,o=jr(s,n);o.currentBlockActivity={type:"blockTargetTemp",blockTargetTemp:a}},dS=(e,t,r)=>{const{moduleId:n,celsius:a}=e,{robotState:s}=r,o=jr(s,n);o.lidTargetTemp=a},fS=(e,t,r)=>{},mS=(e,t,r)=>{},hS=(e,t,r)=>{},_S=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=jr(a,n);s.currentBlockActivity={type:"blockDeactivated"}},yS=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=jr(a,n);s.lidTargetTemp=null},bS=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=jr(a,n);s.lidOpen=!1},TS=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=jr(a,n);s.lidOpen=!0},gS=(e,t,r)=>{const{profile:n,...a}=e;Ly({profileElements:n,...a},t,r)},Ly=(e,t,r)=>{const n=NaN+D();Oy({...e,taskId:n},t,r),Ry(n,r,c.THERMOCYCLER_MODULE_TYPE)},Oy=(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++},IS=e=>{if(e.currentBlockActivity.type==="profile"){const t=ES(e.currentBlockActivity.profileElements);return e.currentBlockActivity=t!=null?{type:"blockTargetTemp",blockTargetTemp:t}:{type:"blockDeactivated"},!0}else return!1};function ES(e){const t=Yc(cp(e));return t!=null?t.celsius:null}const SS=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=ot(a,n);s!=null&&(s.ventStatus=pc)},wS=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=ot(a,n);s!=null&&(s.ventStatus=ka)},AS=(e,t,r)=>{const{moduleId:n,gaugePressure:a,duration:s,ventAfter:o=!0,taskId:i}=e,{robotState:l}=r,u=ot(l,n);u!=null&&(s==null||i==null?u.currentPumpActivity={type:"indefiniteHold",mode:zu,targetPressure:a}:(u.currentPumpActivity={type:"timedHold",mode:zu,targetPressure:a,durationSeconds:s,taskId:i,ventAfter:o},u.numPumpActivitiesStarted++),u.ventStatus=ka)},LS=(e,t,r)=>{const{moduleId:n,percentPower:a,duration:s,ventAfter:o=!0,taskId:i}=e,{robotState:l}=r,u=ot(l,n);u!=null&&(s==null||i==null?u.currentPumpActivity={type:"indefiniteHold",mode:Hu,targetPower:a}:(u.currentPumpActivity={type:"timedHold",mode:Hu,targetPower:a,durationSeconds:s,taskId:i,ventAfter:o},u.numPumpActivitiesStarted++),u.ventStatus=ka)},OS=(e,t,r)=>{const{moduleId:n}=e,{robotState:a}=r,s=ot(a,n);s!=null&&(s.currentPumpActivity={type:"pumpDeactivated"})},RS=(e,t,r)=>{const{moduleId:n,steps:a,taskId:s,ventAfter:o=!0}=e,{robotState:i}=r,l=ot(i,n);l==null||s==null||(l.currentPumpActivity={type:"profile",profileElements:a,taskId:s,ventAfter:o},l.numPumpActivitiesStarted++)},kS=e=>{if(e.currentPumpActivity.type==="timedHold"||e.currentPumpActivity.type==="profile"){const t=e.currentPumpActivity.ventAfter;return e.currentPumpActivity={type:"pumpDeactivated"},e.ventStatus=t?pc:ka,!0}return!1};function vS(e,t,r){for(const n of e.task_ids)Ry(n,r)||r.warnings.push(sI())}const Ry=(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"?IS(a.moduleState):a.moduleState.type==="vacuumModuleType"?kS(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}`),{})},PS=(e,t,r)=>{const{robotState:n}=r,{moduleId:a,celsius:s}=e,o=Un(n,a);o.targetTemp=s},CS=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Un(n,a);s.targetTemp=null},NS=(e,t,r)=>{const{robotState:n}=r,{moduleId:a,rpm:s}=e,o=Un(n,a);o.targetSpeed=s},DS=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Un(n,a);s.targetSpeed=null},MS=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Un(n,a);s.latchOpen=!0},FS=(e,t,r)=>{const{robotState:n}=r,{moduleId:a}=e,s=Un(n,a);s.latchOpen=!1},US=(e,t,r)=>{const{pipetteId:n}=e,{robotState:a}=r,s=a.pipettes[n].entityId??"";Cs({invariantContext:t,pipetteId:n,prevLiquidState:a.liquidState,useFullVolume:!0,robotStateAndWarnings:r,entityId:s})},qS=(e,t,r)=>{const{pipetteId:n}=e,{robotState:a}=r,s=a.pipettes[n].entityId??"";a.tipState.pipettes[n]={hasTip:!1,tiprackURI:null},Cs({invariantContext:t,prevLiquidState:a.liquidState,pipetteId:n,useFullVolume:!0,robotStateAndWarnings:r,entityId:s}),a.pipettes[n].tiprackId=void 0};function ky(e,t){e.type===c.MAGNETIC_MODULE_TYPE&&(e.engaged=t)}function $S(e,t,r){const{moduleId:n}=e,{robotState:a}=r,s=Ot(a,n);ky(s,!0)}function VS(e,t,r){const{moduleId:n}=e,{robotState:a}=r,s=Ot(a,n);ky(s,!1)}const wu=(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},vy=(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},Py=(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=wu(u,t.storedLabwareDetails?.primaryLabwareURI),h=o!=null?wu(u,t.storedLabwareDetails?.adapterLabwareURI):null,m=i!=null?wu(u,t.storedLabwareDetails?.lidLabwareURI):null;f!=null&&(e.labware[f]={stack:[f,...m!=null?[m]:[],...a]},h!=null&&(e.labware[h]={stack:[h,f,...m!=null?[m]:[],...a]}),m!=null&&(e.labware[m]={stack:[m,...a]}),p.push({primaryLabwareId:f,adapterLabwareId:h,lidLabwareId:m})),t.labwareInHopper=p}},BS=(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]}})},xS=(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 h=[Ze,s,i];for(const b of f){const T=[b.adapterLabwareId,b.primaryLabwareId,b.lidLabwareId,...h].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??[],_=f.map(({primaryLabwareId:b,adapterLabwareId:T,lidLabwareId:y})=>({primaryLabwareId:b,adapterLabwareId:T,lidLabwareId:y}));l.labwareInHopper=[...m,..._]},HS=(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),h=[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?Py(n,f,a,i,h,"setStoredLabwareCount",l?.loadName,u?.loadName):p!=null&&vy(f,p,n,h),f.setStoredLabwareCount=(f?.setStoredLabwareCount??0)+1)},zS=(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(w=>w.labwareDefURI===I&&!w.def.allowedRoles?.includes("lid")&&!w.def.allowedRoles?.includes("adapter"))),h=d.find(I=>Object.values(o).find(w=>w.labwareDefURI===I&&w.def.allowedRoles?.includes("adapter"))),m=d.find(I=>Object.values(o).find(w=>w.labwareDefURI===I&&w.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:h??null,lidLabwareURI:m??null};const _=[];for(const I of s){const w=o[I].labwareDefURI;if(w===f)_.push({primary:I,adapter:null,lid:null});else if(w===h){const L=_[_.length-1];L&&(L.adapter=I)}else if(w===m){const L=_[_.length-1];L&&(L.lid=I)}}const b=[Ze,a,i];for(const I of _){const w=[I.adapter,I.primary,I.lid,...b].filter(L=>L!=null);n.labware[I.primary]={...n.labware[I.primary],stack:w.slice(w.indexOf(I.primary))},I.adapter!=null&&(n.labware[I.adapter]={...n.labware[I.adapter],stack:w.slice(w.indexOf(I.adapter))}),I.lid!=null&&(n.labware[I.lid]={...n.labware[I.lid],stack:w.slice(w.indexOf(I.lid))})}const T=l.labwareInHopper??[],y=_.map(I=>({primaryLabwareId:I.primary,adapterLabwareId:I.adapter,lidLabwareId:I.lid})),A=new Map(T.map(I=>[I.primaryLabwareId,I])),S=[];for(const I of y)S.push(I),A.delete(I.primaryLabwareId);for(const I of T)A.has(I.primaryLabwareId)&&S.push(I);l.labwareInHopper=S},jS=(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?Py(n,u,i,s,p,"fillCount",d,f):o!=null&&vy(u,o,n,p),u.fillCount=(u?.fillCount??0)+1}},GS=(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 h=u[f];if(h!=null){if(p.unshift(h),n.labware[h].stack=[...p],d==null){const m=Rs(o);m!=null?n.labware[h].stackedOnNode={addressableAreaName:m}:console.warn(`Could not find an addressable area for retrieved labware in stacker module ${a} at slot ${o}`)}else n.labware[h].stackedOnNode={labwareId:d};d=h}}}}},WS=(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 Cy(e,t,r){e.type===c.TEMPERATURE_MODULE_TYPE&&(e.targetTemperature=t,e.status=r)}function YS(e,t,r){const{robotState:n}=r,{moduleId:a,celsius:s}=e,o=Ot(n,a);Cy(o,s,lc)}function KS(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=ic)}function XS(e,t,r){const{robotState:n}=r,{moduleId:a}=e,s=Ot(n,a);Cy(s,null,Oa)}function Ny(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;iE(e.params,t,r);break;case"airGapInPlace":GI(e.params,t,r);break;case"dispenseWhileTracking":case"dispense":case"dispenseInPlace":if(e.meta?.isAirGap===!0)break;cE(e.params,t,r);break;case"blowout":lE(e.params,t,r);break;case"dropTip":pE(e.params,t,r);break;case"pickUpTip":lS(e.params,t,r);break;case"setTipState":cS(e.params,t,r);break;case"magneticModule/engage":$S(e.params,t,r);break;case"magneticModule/disengage":VS(e.params,t,r);break;case"moveLabware":sS(e.params,t,r);break;case"waitForTasks":vS(e.params,t,r);break;case"flexStacker/setStoredLabware":HS(e.params,t,r);break;case"flexStacker/setStoredLabwareItems":zS(e.params,t,r);break;case"flexStacker/prepareShuttle":case"flexStacker/closeLatch":case"flexStacker/openLatch":break;case"flexStacker/empty":BS(e.params,t,r);break;case"flexStacker/fill":jS(e.params,t,r);break;case"flexStacker/fillItems":xS(e.params,t,r);break;case"flexStacker/retrieve":GS(e.params,t,r);break;case"flexStacker/store":WS(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":oS(e.params,t,r);break;case"moveToWell":iS(e.params,t,r);break;case"loadLiquid":dE(e.params,t,r);break;case"dropTipInPlace":qS(e.params,t,r);break;case"blowOutInPlace":US(e.params,t,r);break;case"configureNozzleLayout":uE(e.params,t,r);break;case"temperatureModule/setTargetTemperature":YS(e.params,t,r);break;case"temperatureModule/deactivate":XS(e.params,t,r);break;case"temperatureModule/waitForTemperature":KS(e.params,t,r);break;case"thermocycler/setTargetBlockTemperature":pS(e.params,t,r);break;case"thermocycler/setTargetLidTemperature":dS(e.params,t,r);break;case"thermocycler/waitForBlockTemperature":fS(e.params);break;case"thermocycler/waitForLidTemperature":mS(e.params);break;case"thermocycler/deactivateBlock":_S(e.params,t,r);break;case"thermocycler/deactivateLid":yS(e.params,t,r);break;case"thermocycler/closeLid":bS(e.params,t,r);break;case"thermocycler/openLid":TS(e.params,t,r);break;case"thermocycler/runProfile":gS(e.params,t,r);break;case"thermocycler/runExtendedProfile":Ly(e.params,t,r);break;case"thermocycler/startRunExtendedProfile":Oy(e.params,t,r);break;case"thermocycler/awaitProfileComplete":hS(e.params);break;case"heaterShaker/deactivateHeater":CS(e.params,t,r);break;case"heaterShaker/setTargetTemperature":PS(e.params,t,r);break;case"heaterShaker/setAndWaitForShakeSpeed":case"heaterShaker/setShakeSpeed":NS(e.params,t,r);break;case"heaterShaker/deactivateShaker":DS(e.params,t,r);break;case"heaterShaker/openLabwareLatch":MS(e.params,t,r);break;case"heaterShaker/closeLabwareLatch":FS(e.params,t,r);break;case"heaterShaker/waitForTemperature":break;case"absorbanceReader/openLid":HI(e.params,t,r);break;case"absorbanceReader/closeLid":zI(e.params,t,r);break;case"absorbanceReader/initialize":jI(e.params,t,r);break;case"absorbanceReader/read":break;case"vacuumModule/startSetVacuumPressure":AS(e.params,t,r);break;case"vacuumModule/startSetVacuumPower":LS(e.params,t,r);break;case"vacuumModule/openVent":SS(e.params,t,r);break;case"vacuumModule/closeVent":wS(e.params,t,r);break;case"vacuumModule/stopVacuum":OS(e.params,t,r);break;case"vacuumModule/startRunProfile":RS(e.params,t,r);break;default:console.error(`unknown command: ${e.commandType} passed to getNextRobotStateAndWarning`)}}function Dy(e,t,r){return my({warnings:[],robotState:r},a=>{Ny(e,t,a)})}function op(e,t,r){const n=hy(e);return my({warnings:[],robotState:r},s=>{n.forEach(o=>{Ny(o,t,s)})})}const ZS=(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=hy(l.commands).reduce((f,h)=>Dy(h,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(Nh.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
|
-
`),u=op(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)},QS=e=>e.commandCreatorFnName!=="delay"&&e.commandCreatorFnName!=="engageMagnet"&&e.commandCreatorFnName!=="disengageMagnet"&&e.commandCreatorFnName!=="setTemperature"&&e.commandCreatorFnName!=="deactivateTemperature"&&"pipette"in e?e.pipette:null,JS=e=>e.commandCreatorFnName==="delay"||e.commandCreatorFnName==="engageMagnet"||e.commandCreatorFnName==="disengageMagnet"||e.commandCreatorFnName==="setTemperature"||e.commandCreatorFnName==="deactivateTemperature",ew=new Date("2025-03-19T00:00:00Z"),tw=2,rw=22;function nw(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]>=tw&&l[1]>=rw,p=t.protocolType==="json"&&r>=ew,d=c.getLabwareDefinitionsByURIForProtocol(o),f=i.reduce((y,A)=>{const{id:S,description:I,displayName:w,displayColor:L}=A;return{...y,[S]:{description:I,displayName:w??"Unknown Liquid",pythonName:"n/a",displayColor:L??"#B7B8B9",liquidGroupId:S}}},{}),h=a.reduce((y,A)=>{const{id:S,model:I}=A;return{...y,[S]:{id:S,type:c.getModuleType(I),model:I,pythonName:"n/a"}}},{}),m=n.reduce((y,A)=>{const{id:S,definitionUri:I}=A,w=d[I];return w==null||w.schemaVersion===3?y:{...y,[S]:{id:S,labwareDefURI:I,def:w,pythonName:"n/a"}}},{}),_=o.reduce((y,A)=>{if(A.commandType==="loadLidStack"&&A.result!=null){const{stackLabwareId:S,lidStackDefinition:I}=A.result;if(S!=null&&I!=null&&y[S]==null&&I.schemaVersion!==3)return{...y,[S]:{id:S,labwareDefURI:c.getLabwareDefURI(I),def:I,pythonName:"n/a"}}}return y},m),b=s.reduce((y,A)=>{const{id:S,pipetteName:I}=A,w=c.getPipetteSpecsV2(I),E=o.filter(v=>v.commandType==="pickUpTip"&&v.params.pipetteId===S).map(v=>_[v.params.labwareId]),g=Array.from(new Set(E.map(v=>v.labwareDefURI))),k=Array.from(new Set(E.map(v=>v.def)));return w==null||(y[S]={name:I,id:S,tiprackLabwareDef:k,tiprackDefURI:g,spec:w,pythonName:"n/a"}),y},{}),T=o.reduce((y,A)=>{if(A.commandType==="loadLidStack"&&A.result!=null){const{params:S}=A,I=Yu(S);return{...y,stagingAreaEntities:{...y.stagingAreaEntities,...I}}}else if((A.commandType==="loadLabware"||A.commandType==="loadLid")&&A.result!=null){const{params:S}=A,I=Yu(S);return{...y,stagingAreaEntities:{...y.stagingAreaEntities,...I}}}else if(A.commandType==="moveToAddressableArea"||A.commandType==="moveToAddressableAreaForDropTip"){const S=A.params.addressableAreaName,I=`${D()}:${S}`;let w=Hh;S==="fixedTrash"?w="cutout12":S.includes("WasteChute")?w="cutoutD3":S.includes("movableTrash")&&(w=`cutout${S.split("movableTrash")[1]}`);let L=y.trashBinEntities;Object.values(y.trashBinEntities).some(g=>g.location===w)||(S.includes("movableTrash")?L={...y.trashBinEntities,[I]:{pythonName:"trash_bin_1",id:I,location:w}}:S==="fixedTrash"&&(L={...y.trashBinEntities,[I]:{pythonName:"trash_bin_1",id:I,location:w}}));let E=y.wasteChuteEntities;return S.includes("WasteChute")&&(E={[I]:{pythonName:"waste_chute",id:I,location:w}}),{...y,trashBinEntities:L,wasteChuteEntities:E}}return y},{wasteChuteEntities:{},trashBinEntities:{},stagingAreaEntities:{},gripperEntities:{},config:{OT_PD_DISABLE_MODULE_RESTRICTIONS:!0}});return{labwareEntities:_,pipetteEntities:b,moduleEntities:h,liquidEntities:u||p?f:{},...T}}const aw={A3:"A4",B3:"B4",C3:"C4",D3:"D4"};function sw(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?aw[i.params.location.slotName]:i.params.location.slotName,moduleState:xh[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,h=m=>{if(c.locationIsOffDeck(m))return[m];if("slotName"in m)return[m.slotName];if("moduleId"in m){const _=n[m.moduleId]?.slot??"offDeck";return[m.moduleId,_]}else if("addressableAreaName"in m)return[m.addressableAreaName];return["offDeck"]};if(u!=null){const m=u.reduce((T,y)=>{const A=y.find(S=>S.kind==="onLabware");return A!=null&&(T[A.labwareId]=y),T},{}),_=p.reduce((T,y,A)=>{const S=m[y]??u[A];if(S!=null){const I=Wu(S);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,...Wu(f)]:null;return{...o,..._,...d!=null&&b!=null?{[d]:{stack:b}}:{}}}else{const m=i.params.location,_=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,...h(m)]:null;return{...o,..._,...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 ah(i).forEach(u=>{nh(o,u,"setStoredLabwareCount")}),o;if(i.commandType==="flexStacker/fill")return ah(i).forEach(u=>{nh(o,u,"fillCount")}),o}return o},{}),s=Vc({invariantContext:t,labwareLocations:a,moduleLocations:n,pipetteLocations:r});return{frame:{...op(e,t,s),command:e[e.length-1]},invariantContext:t}}const nh=(e,t,r)=>{const n=e[t]??{stack:[t,"offDeck"]};e[t]={...n,[r]:(n[r]??0)+1}},ah=e=>e.result?.storedLabware?.flatMap(r=>[r.primaryLabwareId,r.adapterLabwareId,r.lidLabwareId].filter(n=>n!=null))??[],ip=(e,t)=>e??(t.channels===1?c.SINGLE:t.channels===96?c.ALL:c.COLUMN);var Au,sh;function ow(){if(sh)return Au;sh=1;var e=wc();function t(r,n){var a;return e(r,function(s,o,i){return a=n(s,o,i),!a}),!!a}return Au=t,Au}var Lu,oh;function iw(){if(oh)return Lu;oh=1;var e=Jh(),t=Nn(),r=ow(),n=Qe(),a=Lc();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 Lu=s,Lu}var lw=iw();const Ba=xe(lw),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)),My=(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)},Ds=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=uw(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:Fy(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":""}`,Fy=e=>{if(e!=null)return e===zr?"source":e===Mn?"destination":"trash"},uw=e=>{const t=Fy(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}},Ms=e=>{const{labwareEntities:t,tiprackIds:r}=e;return`tip_racks=[${r.map(a=>t[a].pythonName).join(", ")}]`};var Ou,ih;function cw(){if(ih)return Ou;ih=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 Ou=t,Ou}var Ru,lh;function pw(){if(lh)return Ru;lh=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,h=o;h!=null&&++p<d;){var m=a(i[p]),_=l;if(m==="__proto__"||m==="constructor"||m==="prototype")return o;if(p!=f){var b=h[m];_=u?u(b,m,h):void 0,_===void 0&&(_=n(b)?b:r(i[p+1])?[]:{})}e(h,m,_),h=h[m]}return o}return Ru=s,Ru}var ku,uh;function dw(){if(uh)return ku;uh=1;var e=Es(),t=pw(),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 ku=n,ku}var vu,ch;function fw(){if(ch)return vu;ch=1;var e=va(),t=Nn(),r=dw(),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 vu=a,vu}var Pu,ph;function mw(){if(ph)return Pu;ph=1;var e=Nn(),t=cw(),r=fw();function n(a,s){return r(a,t(e(s)))}return Pu=n,Pu}var hw=mw();const _w=xe(hw);function Uy(e){return Object.keys(e.wells)}const yw=(e,t)=>{const r=Object.keys(e||{}).filter(n=>e[n]&&e[n].volume>0);return{wellName:t,groupIds:r,ingreds:_w(e,n=>!n||n.volume<=0)}},bw=(e,t)=>{const r=Uy(t);return ut(r,(n,a)=>{const s=e&&e[a];return{...n,[a]:s?yw(e[a],a):{}}},{})},Tw=(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},gw=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))},Iw=e=>{const t=e!=null?Object.values(e).flatMap(r=>r.groupIds)?.filter(r=>r!==je):[];return Array.from(new Set(t))},qy="#737578",$y=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")},Ew=(e,t)=>{const r=e.filter(n=>n!==je);return r.length===0?null:r.length===1?t[r[0]]??$y(r[0]):qy},Sw=(e,t)=>ut(e,(r,n,a)=>{const s=Ew(n.groupIds,t);return s?{...r,[a]:s}:r},{});var Cu,dh;function ww(){if(dh)return Cu;dh=1;function e(t,r){return t>r}return Cu=e,Cu}var Nu,fh;function Aw(){if(fh)return Nu;fh=1;var e=Ch(),t=ww(),r=La();function n(a){return a&&a.length?e(a,r,t):void 0}return Nu=n,Nu}var Lw=Aw();const Ow=xe(Lw),Vy="2.30",Rw="9.0.1";function kw(){return["import json","from opentrons import protocol_api, types"].join(`
|
|
55
|
+
`),u=op(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)},QS=e=>e.commandCreatorFnName!=="delay"&&e.commandCreatorFnName!=="engageMagnet"&&e.commandCreatorFnName!=="disengageMagnet"&&e.commandCreatorFnName!=="setTemperature"&&e.commandCreatorFnName!=="deactivateTemperature"&&"pipette"in e?e.pipette:null,JS=e=>e.commandCreatorFnName==="delay"||e.commandCreatorFnName==="engageMagnet"||e.commandCreatorFnName==="disengageMagnet"||e.commandCreatorFnName==="setTemperature"||e.commandCreatorFnName==="deactivateTemperature",ew=new Date("2025-03-19T00:00:00Z"),tw=2,rw=22;function nw(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]>=tw&&l[1]>=rw,p=t.protocolType==="json"&&r>=ew,d=c.getLabwareDefinitionsByURIForProtocol(o),f=i.reduce((y,A)=>{const{id:S,description:I,displayName:w,displayColor:L}=A;return{...y,[S]:{description:I,displayName:w??"Unknown Liquid",pythonName:"n/a",displayColor:L??"#B7B8B9",liquidGroupId:S}}},{}),h=a.reduce((y,A)=>{const{id:S,model:I}=A;return{...y,[S]:{id:S,type:c.getModuleType(I),model:I,pythonName:"n/a"}}},{}),m=n.reduce((y,A)=>{const{id:S,definitionUri:I}=A,w=d[I];return w==null||w.schemaVersion===3?y:{...y,[S]:{id:S,labwareDefURI:I,def:w,pythonName:"n/a"}}},{}),_=o.reduce((y,A)=>{if(A.commandType==="loadLidStack"&&A.result!=null){const{stackLabwareId:S,lidStackDefinition:I}=A.result;if(S!=null&&I!=null&&y[S]==null&&I.schemaVersion!==3)return{...y,[S]:{id:S,labwareDefURI:c.getLabwareDefURI(I),def:I,pythonName:"n/a"}}}return y},m),b=s.reduce((y,A)=>{const{id:S,pipetteName:I}=A,w=c.getPipetteSpecsV2(I),E=o.filter(v=>v.commandType==="pickUpTip"&&v.params.pipetteId===S).map(v=>_[v.params.labwareId]),g=Array.from(new Set(E.map(v=>v.labwareDefURI))),k=Array.from(new Set(E.map(v=>v.def)));return w==null||(y[S]={name:I,id:S,tiprackLabwareDef:k,tiprackDefURI:g,spec:w,pythonName:"n/a"}),y},{}),T=o.reduce((y,A)=>{if(A.commandType==="loadLidStack"&&A.result!=null){const{params:S}=A,I=Yu(S);return{...y,stagingAreaEntities:{...y.stagingAreaEntities,...I}}}else if((A.commandType==="loadLabware"||A.commandType==="loadLid")&&A.result!=null){const{params:S}=A,I=Yu(S);return{...y,stagingAreaEntities:{...y.stagingAreaEntities,...I}}}else if(A.commandType==="moveToAddressableArea"||A.commandType==="moveToAddressableAreaForDropTip"){const S=A.params.addressableAreaName,I=`${D()}:${S}`;let w=Hh;S==="fixedTrash"?w="cutout12":S.includes("WasteChute")?w="cutoutD3":S.includes("movableTrash")&&(w=`cutout${S.split("movableTrash")[1]}`);let L=y.trashBinEntities;Object.values(y.trashBinEntities).some(g=>g.location===w)||(S.includes("movableTrash")?L={...y.trashBinEntities,[I]:{pythonName:"trash_bin_1",id:I,location:w}}:S==="fixedTrash"&&(L={...y.trashBinEntities,[I]:{pythonName:"trash_bin_1",id:I,location:w}}));let E=y.wasteChuteEntities;return S.includes("WasteChute")&&(E={[I]:{pythonName:"waste_chute",id:I,location:w}}),{...y,trashBinEntities:L,wasteChuteEntities:E}}return y},{wasteChuteEntities:{},trashBinEntities:{},stagingAreaEntities:{},gripperEntities:{},config:{OT_PD_DISABLE_MODULE_RESTRICTIONS:!0}});return{labwareEntities:_,pipetteEntities:b,moduleEntities:h,liquidEntities:u||p?f:{},...T}}const aw={A3:"A4",B3:"B4",C3:"C4",D3:"D4"};function sw(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?aw[i.params.location.slotName]:i.params.location.slotName,moduleState:xh[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,h=m=>{if(c.locationIsOffDeck(m))return[m];if("slotName"in m)return[m.slotName];if("moduleId"in m){const _=n[m.moduleId]?.slot??"offDeck";return[m.moduleId,_]}else if("addressableAreaName"in m)return[m.addressableAreaName];return["offDeck"]};if(u!=null){const m=u.reduce((T,y)=>{const A=y.find(S=>S.kind==="onLabware");return A!=null&&(T[A.labwareId]=y),T},{}),_=p.reduce((T,y,A)=>{const S=m[y]??u[A];if(S!=null){const I=Wu(S);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,...Wu(f)]:null;return{...o,..._,...d!=null&&b!=null?{[d]:{stack:b}}:{}}}else{const m=i.params.location,_=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,...h(m)]:null;return{...o,..._,...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 ah(i).forEach(u=>{nh(o,u,"setStoredLabwareCount")}),o;if(i.commandType==="flexStacker/fill")return ah(i).forEach(u=>{nh(o,u,"fillCount")}),o}return o},{}),s=Vc({invariantContext:t,labwareLocations:a,moduleLocations:n,pipetteLocations:r});return{frame:{...op(e,t,s),command:e[e.length-1]},invariantContext:t}}const nh=(e,t,r)=>{const n=e[t]??{stack:[t,"offDeck"]};e[t]={...n,[r]:(n[r]??0)+1}},ah=e=>e.result?.storedLabware?.flatMap(r=>[r.primaryLabwareId,r.adapterLabwareId,r.lidLabwareId].filter(n=>n!=null))??[],ip=(e,t)=>e??(t.channels===1?c.SINGLE:t.channels===96?c.ALL:c.COLUMN);var Au,sh;function ow(){if(sh)return Au;sh=1;var e=wc();function t(r,n){var a;return e(r,function(s,o,i){return a=n(s,o,i),!a}),!!a}return Au=t,Au}var Lu,oh;function iw(){if(oh)return Lu;oh=1;var e=Jh(),t=Nn(),r=ow(),n=Qe(),a=Lc();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 Lu=s,Lu}var lw=iw();const Ba=xe(lw),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)),My=(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)},Ds=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=uw(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:Fy(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":""}`,Fy=e=>{if(e!=null)return e===zr?"source":e===Mn?"destination":"trash"},uw=e=>{const t=Fy(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}},Ms=e=>{const{labwareEntities:t,tiprackIds:r}=e;return`tip_racks=[${r.map(a=>t[a].pythonName).join(", ")}]`};var Ou,ih;function cw(){if(ih)return Ou;ih=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 Ou=t,Ou}var Ru,lh;function pw(){if(lh)return Ru;lh=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,h=o;h!=null&&++p<d;){var m=a(i[p]),_=l;if(m==="__proto__"||m==="constructor"||m==="prototype")return o;if(p!=f){var b=h[m];_=u?u(b,m,h):void 0,_===void 0&&(_=n(b)?b:r(i[p+1])?[]:{})}e(h,m,_),h=h[m]}return o}return Ru=s,Ru}var ku,uh;function dw(){if(uh)return ku;uh=1;var e=Es(),t=pw(),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 ku=n,ku}var vu,ch;function fw(){if(ch)return vu;ch=1;var e=va(),t=Nn(),r=dw(),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 vu=a,vu}var Pu,ph;function mw(){if(ph)return Pu;ph=1;var e=Nn(),t=cw(),r=fw();function n(a,s){return r(a,t(e(s)))}return Pu=n,Pu}var hw=mw();const _w=xe(hw);function Uy(e){return Object.keys(e.wells)}const yw=(e,t)=>{const r=Object.keys(e||{}).filter(n=>e[n]&&e[n].volume>0);return{wellName:t,groupIds:r,ingreds:_w(e,n=>!n||n.volume<=0)}},bw=(e,t)=>{const r=Uy(t);return ut(r,(n,a)=>{const s=e&&e[a];return{...n,[a]:s?yw(e[a],a):{}}},{})},Tw=(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},gw=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))},Iw=e=>{const t=e!=null?Object.values(e).flatMap(r=>r.groupIds)?.filter(r=>r!==je):[];return Array.from(new Set(t))},qy="#737578",$y=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")},Ew=(e,t)=>{const r=e.filter(n=>n!==je);return r.length===0?null:r.length===1?t[r[0]]??$y(r[0]):qy},Sw=(e,t)=>ut(e,(r,n,a)=>{const s=Ew(n.groupIds,t);return s?{...r,[a]:s}:r},{});var Cu,dh;function ww(){if(dh)return Cu;dh=1;function e(t,r){return t>r}return Cu=e,Cu}var Nu,fh;function Aw(){if(fh)return Nu;fh=1;var e=Ch(),t=ww(),r=La();function n(a){return a&&a.length?e(a,r,t):void 0}return Nu=n,Nu}var Lw=Aw();const Ow=xe(Lw),Vy="2.31",Rw="9.0.1";function kw(){return["import json","from opentrons import protocol_api, types"].join(`
|
|
56
56
|
`)}function vw(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 Pw(e){const r={robotType:{[c.OT2_ROBOT_TYPE]:"OT-2",[c.FLEX_ROBOT_TYPE]:"Flex"}[e],apiLevel:Vy};return`requirements = ${Fr(r)}`}function By(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:
|
|
58
58
|
${n}`:""}function xy(e,t,r){const n=Object.values(t).filter(s=>s.def.allowedRoles?.includes("adapter")),a=Object.values(n).map(s=>{const{id:o,def:i,pythonName:l}=s,{parameters:u,namespace:p,version:d}=i,f=r[o].stack[1],h=r[o].stack.find(y=>y in e),m=r[o].stack.some(y=>y===Wh);let _,b=null;if(h!=null){const y=e[h];[_,b]=m?[be,`location=${y.pythonName}.manifold_dock`]:[y.pythonName,null]}else _=be,b=`location=${f==="offDeck"?Ln:N(f)}`;if(c.getLabwareDefIsStandard(i)){const y=[`${N(u.loadName)}`,...b?[b]:[],`namespace=${N(p)}`,`version=${d}`].join(`,
|
package/lib/index.mjs
CHANGED
|
@@ -8886,7 +8886,7 @@ function YA() {
|
|
|
8886
8886
|
return tu = n, tu;
|
|
8887
8887
|
}
|
|
8888
8888
|
var ZA = YA();
|
|
8889
|
-
const JA = /* @__PURE__ */ Ye(ZA), QA = "2.
|
|
8889
|
+
const JA = /* @__PURE__ */ Ye(ZA), QA = "2.31", lL = "9.0.1";
|
|
8890
8890
|
function cL() {
|
|
8891
8891
|
return ["import json", "from opentrons import protocol_api, types"].join(`
|
|
8892
8892
|
`);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ProtocolFile, RobotType } from '@opentrons/shared-data';
|
|
2
2
|
import type { ChangeTipOptions, InvariantContext, LabwareEntities, LabwareLiquidState, LabwareTemporalProperties, LiquidEntities, ModuleEntities, ModuleTemporalProperties, PipetteEntities, Timeline, TimelineFrame, TrashBinEntities, WasteChuteEntities } from '../types';
|
|
3
|
-
export declare const PAPI_VERSION = "2.
|
|
3
|
+
export declare const PAPI_VERSION = "2.31";
|
|
4
4
|
export declare const PD_APPLICATION_VERSION = "9.0.1";
|
|
5
5
|
export declare function pythonImports(): string;
|
|
6
6
|
export declare function pythonMetadata(fileMetadata: ProtocolFile<{}>['metadata'] & {
|
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.13-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.13-alpha.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/lodash": "4.17.24"
|