@@ -104,13 +104,28 @@ describe('mix: change tip', () => {
104
104
`
105
105
mockPythonName.drop_tip()
106
106
mockPythonName.pick_up_tip(location=mockPythonName)
107
- mockPythonName.mix(2, 5, mockPythonName["A1"])
107
+ mockPythonName.mix(
108
+ repetitions=2,
109
+ volume=5,
110
+ location=mockPythonName["A1"].bottom(z=3.2),
111
+ rate=(2.1 / mockPythonName.flow_rate.aspirate) + (2.2 / mockPythonName.flow_rate.dispense),
112
+ )
108
113
mockPythonName.drop_tip()
109
114
mockPythonName.pick_up_tip(location=mockPythonName)
110
- mockPythonName.mix(2, 5, mockPythonName["B1"])
115
+ mockPythonName.mix(
116
+ repetitions=2,
117
+ volume=5,
118
+ location=mockPythonName["B1"].bottom(z=3.2),
119
+ rate=(2.1 / mockPythonName.flow_rate.aspirate) + (2.2 / mockPythonName.flow_rate.dispense),
120
+ )
111
121
mockPythonName.drop_tip()
112
122
mockPythonName.pick_up_tip(location=mockPythonName)
113
- mockPythonName.mix(2, 5, mockPythonName["C1"])` . trimStart ( )
123
+ mockPythonName.mix(
124
+ repetitions=2,
125
+ volume=5,
126
+ location=mockPythonName["C1"].bottom(z=3.2),
127
+ rate=(2.1 / mockPythonName.flow_rate.aspirate) + (2.2 / mockPythonName.flow_rate.dispense),
128
+ )` . trimStart ( )
114
129
)
115
130
} )
116
131
@@ -326,21 +341,28 @@ describe('mix: advanced options', () => {
326
341
times,
327
342
changeTip : 'always' ,
328
343
wells : [ 'A1' , 'B1' , 'C1' ] ,
344
+ yOffset : 1 ,
329
345
} as MixArgs
346
+ const mockWellLocationCustomXY : Partial < AspDispAirgapParams > = {
347
+ wellLocation : {
348
+ origin : 'bottom' ,
349
+ offset : { x : 0 , y : 1 , z : 3.2 } ,
350
+ } ,
351
+ }
330
352
331
353
const result = mix ( args , invariantContext , robotStateWithTip )
332
354
const res = getSuccessResult ( result )
333
355
334
356
expect ( res . commands ) . toEqual (
335
357
flatMap ( args . wells , ( well , idx ) => [
336
358
...replaceTipCommands ( idx ) ,
337
- aspirateHelper ( well , volume , mockWellLocation ) ,
359
+ aspirateHelper ( well , volume , mockWellLocationCustomXY ) ,
338
360
delayCommand ( 10 ) ,
339
- dispenseHelper ( well , volume , mockWellLocation ) ,
361
+ dispenseHelper ( well , volume , mockWellLocationCustomXY ) ,
340
362
delayCommand ( 12 ) ,
341
- aspirateHelper ( well , volume , mockWellLocation ) ,
363
+ aspirateHelper ( well , volume , mockWellLocationCustomXY ) ,
342
364
delayCommand ( 10 ) ,
343
- dispenseHelper ( well , volume , mockWellLocation ) ,
365
+ dispenseHelper ( well , volume , mockWellLocationCustomXY ) ,
344
366
delayCommand ( 12 ) ,
345
367
blowoutHelper ( blowoutLabwareId , {
346
368
wellLocation : {
@@ -359,25 +381,25 @@ mockPythonName.drop_tip()
359
381
mockPythonName.pick_up_tip(location=mockPythonName)
360
382
mockPythonName.aspirate(
361
383
volume=8,
362
- location=mockPythonName["A1"].bottom(z=3.2),
384
+ location=mockPythonName["A1"].bottom(z=3.2).move(types.Point(y=1)) ,
363
385
rate=2.1 / mockPythonName.flow_rate.aspirate,
364
386
)
365
387
protocol.delay(seconds=10)
366
388
mockPythonName.dispense(
367
389
volume=8,
368
- location=mockPythonName["A1"].bottom(z=3.2),
390
+ location=mockPythonName["A1"].bottom(z=3.2).move(types.Point(y=1)) ,
369
391
rate=2.2 / mockPythonName.flow_rate.dispense,
370
392
)
371
393
protocol.delay(seconds=12)
372
394
mockPythonName.aspirate(
373
395
volume=8,
374
- location=mockPythonName["A1"].bottom(z=3.2),
396
+ location=mockPythonName["A1"].bottom(z=3.2).move(types.Point(y=1)) ,
375
397
rate=2.1 / mockPythonName.flow_rate.aspirate,
376
398
)
377
399
protocol.delay(seconds=10)
378
400
mockPythonName.dispense(
379
401
volume=8,
380
- location=mockPythonName["A1"].bottom(z=3.2),
402
+ location=mockPythonName["A1"].bottom(z=3.2).move(types.Point(y=1)) ,
381
403
rate=2.2 / mockPythonName.flow_rate.dispense,
382
404
)
383
405
protocol.delay(seconds=12)
@@ -391,25 +413,25 @@ mockPythonName.drop_tip()
391
413
mockPythonName.pick_up_tip(location=mockPythonName)
392
414
mockPythonName.aspirate(
393
415
volume=8,
394
- location=mockPythonName["B1"].bottom(z=3.2),
416
+ location=mockPythonName["B1"].bottom(z=3.2).move(types.Point(y=1)) ,
395
417
rate=2.1 / mockPythonName.flow_rate.aspirate,
396
418
)
397
419
protocol.delay(seconds=10)
398
420
mockPythonName.dispense(
399
421
volume=8,
400
- location=mockPythonName["B1"].bottom(z=3.2),
422
+ location=mockPythonName["B1"].bottom(z=3.2).move(types.Point(y=1)) ,
401
423
rate=2.2 / mockPythonName.flow_rate.dispense,
402
424
)
403
425
protocol.delay(seconds=12)
404
426
mockPythonName.aspirate(
405
427
volume=8,
406
- location=mockPythonName["B1"].bottom(z=3.2),
428
+ location=mockPythonName["B1"].bottom(z=3.2).move(types.Point(y=1)) ,
407
429
rate=2.1 / mockPythonName.flow_rate.aspirate,
408
430
)
409
431
protocol.delay(seconds=10)
410
432
mockPythonName.dispense(
411
433
volume=8,
412
- location=mockPythonName["B1"].bottom(z=3.2),
434
+ location=mockPythonName["B1"].bottom(z=3.2).move(types.Point(y=1)) ,
413
435
rate=2.2 / mockPythonName.flow_rate.dispense,
414
436
)
415
437
protocol.delay(seconds=12)
@@ -423,25 +445,25 @@ mockPythonName.drop_tip()
423
445
mockPythonName.pick_up_tip(location=mockPythonName)
424
446
mockPythonName.aspirate(
425
447
volume=8,
426
- location=mockPythonName["C1"].bottom(z=3.2),
448
+ location=mockPythonName["C1"].bottom(z=3.2).move(types.Point(y=1)) ,
427
449
rate=2.1 / mockPythonName.flow_rate.aspirate,
428
450
)
429
451
protocol.delay(seconds=10)
430
452
mockPythonName.dispense(
431
453
volume=8,
432
- location=mockPythonName["C1"].bottom(z=3.2),
454
+ location=mockPythonName["C1"].bottom(z=3.2).move(types.Point(y=1)) ,
433
455
rate=2.2 / mockPythonName.flow_rate.dispense,
434
456
)
435
457
protocol.delay(seconds=12)
436
458
mockPythonName.aspirate(
437
459
volume=8,
438
- location=mockPythonName["C1"].bottom(z=3.2),
460
+ location=mockPythonName["C1"].bottom(z=3.2).move(types.Point(y=1)) ,
439
461
rate=2.1 / mockPythonName.flow_rate.aspirate,
440
462
)
441
463
protocol.delay(seconds=10)
442
464
mockPythonName.dispense(
443
465
volume=8,
444
- location=mockPythonName["C1"].bottom(z=3.2),
466
+ location=mockPythonName["C1"].bottom(z=3.2).move(types.Point(y=1)) ,
445
467
rate=2.2 / mockPythonName.flow_rate.dispense,
446
468
)
447
469
protocol.delay(seconds=12)
@@ -454,7 +476,7 @@ mockPythonName.touch_tip(
454
476
)
455
477
} )
456
478
} )
457
- it ( 'should create python commands with mix() with touchTip and blowOut and no delay set' , ( ) => {
479
+ it ( 'should create python commands with mix() with touchTip and blowOut and no delay or x/y offset set' , ( ) => {
458
480
const args : MixArgs = {
459
481
...mixinArgs ,
460
482
touchTip : true ,
@@ -463,6 +485,8 @@ mockPythonName.touch_tip(
463
485
times,
464
486
changeTip : 'always' ,
465
487
wells : [ 'A1' , 'B1' , 'C1' ] ,
488
+ xOffset : 1 ,
489
+ yOffset : 1 ,
466
490
} as MixArgs
467
491
468
492
const result = mix ( args , invariantContext , robotStateWithTip )
@@ -472,7 +496,12 @@ mockPythonName.touch_tip(
472
496
`
473
497
mockPythonName.drop_tip()
474
498
mockPythonName.pick_up_tip(location=mockPythonName)
475
- mockPythonName.mix(2, 8, mockPythonName["A1"])
499
+ mockPythonName.mix(
500
+ repetitions=2,
501
+ volume=8,
502
+ location=mockPythonName["A1"].bottom(z=3.2).move(types.Point(x=1, y=1)),
503
+ rate=(2.1 / mockPythonName.flow_rate.aspirate) + (2.2 / mockPythonName.flow_rate.dispense),
504
+ )
476
505
mockPythonName.flow_rate.blow_out = 2.3
477
506
mockPythonName.blow_out(mockPythonName["A1"].top(z=3.3))
478
507
mockPythonName.touch_tip(
@@ -481,7 +510,12 @@ mockPythonName.touch_tip(
481
510
)
482
511
mockPythonName.drop_tip()
483
512
mockPythonName.pick_up_tip(location=mockPythonName)
484
- mockPythonName.mix(2, 8, mockPythonName["B1"])
513
+ mockPythonName.mix(
514
+ repetitions=2,
515
+ volume=8,
516
+ location=mockPythonName["B1"].bottom(z=3.2).move(types.Point(x=1, y=1)),
517
+ rate=(2.1 / mockPythonName.flow_rate.aspirate) + (2.2 / mockPythonName.flow_rate.dispense),
518
+ )
485
519
mockPythonName.flow_rate.blow_out = 2.3
486
520
mockPythonName.blow_out(mockPythonName["A1"].top(z=3.3))
487
521
mockPythonName.touch_tip(
@@ -490,7 +524,12 @@ mockPythonName.touch_tip(
490
524
)
491
525
mockPythonName.drop_tip()
492
526
mockPythonName.pick_up_tip(location=mockPythonName)
493
- mockPythonName.mix(2, 8, mockPythonName["C1"])
527
+ mockPythonName.mix(
528
+ repetitions=2,
529
+ volume=8,
530
+ location=mockPythonName["C1"].bottom(z=3.2).move(types.Point(x=1, y=1)),
531
+ rate=(2.1 / mockPythonName.flow_rate.aspirate) + (2.2 / mockPythonName.flow_rate.dispense),
532
+ )
494
533
mockPythonName.flow_rate.blow_out = 2.3
495
534
mockPythonName.blow_out(mockPythonName["A1"].top(z=3.3))
496
535
mockPythonName.touch_tip(
0 commit comments