def test_get_all_children(self): c1 = generate_plate(4, 2, (5, 5), (0, 0), 5) c2 = generate_plate(4, 2, (5, 5), (0, 0), 5) deck = Deck() deck.add(c1, "A1", (0, 0, 0)) deck.add(c2, "A2", (50, 50, 50)) self.assertEqual(len(deck.get_all_children()), 10)
def test_get_all_children(): c1 = generate_plate(4, 2, (5, 5), (0, 0), 5) c2 = generate_plate(4, 2, (5, 5), (0, 0), 5) deck = Deck() deck.add(c1, "A1", (0, 0, 0)) deck.add(c2, "A2", (50, 50, 50)) assert len(deck.get_all_children()) == 10
def test_chain_method(self): a = generate_plate(4, 2, (5, 5), (0, 0), 5) b = generate_plate(4, 2, (5, 5), (0, 0), 5) c = generate_plate(4, 2, (5, 5), (0, 0), 5) cycle_iter = a.chain(b, c) for i in range(4): self.assertEqual(next(cycle_iter), a[i]) for i in range(4): self.assertEqual(next(cycle_iter), b[i]) for i in range(4): self.assertEqual(next(cycle_iter), c[i])
def test_tip_tracking_chain(self): # TODO (ben 20171130): revise this test to make more sense in the # context of required tip pick_up/drop sequencing, etc. total_tips_per_plate = 4 self.tiprack1 = generate_plate( total_tips_per_plate, 2, (5, 5), (0, 0), 5) self.tiprack2 = generate_plate( total_tips_per_plate, 2, (5, 5), (0, 0), 5) self.robot._deck['1'].add(self.tiprack1, 'tiprack1') self.robot._deck['2'].add(self.tiprack2, 'tiprack2') self.p200 = Pipette( self.robot, mount='right', tip_racks=[self.tiprack1, self.tiprack2], trash_container=self.tiprack1, name='pipette-for-transfer-tests', ul_per_mm=18.5 ) self.p200.max_volume = 200 self.p200.move_to = mock.Mock() for _ in range(0, total_tips_per_plate * 2): self.p200.pick_up_tip() self.p200.tip_attached = False # prior expectation, for test only expected = [] for i in range(0, total_tips_per_plate): expected.extend(self.build_pick_up_tip(self.tiprack1[i])) for i in range(0, total_tips_per_plate): expected.extend(self.build_pick_up_tip(self.tiprack2[i])) self.assertEqual( self.p200.move_to.mock_calls, expected ) # test then when we go over the total number of tips, # Pipette raises a RuntimeWarning self.robot.clear_commands() self.p200.reset() for _ in range(0, total_tips_per_plate * 2): self.p200.pick_up_tip() self.p200.tip_attached = False # prior expectation, for test only self.assertRaises(RuntimeWarning, self.p200.pick_up_tip)
def test_tip_tracking_chain(local_test_pipette, robot): trash, tiprack1, tiprack2, plate, p200 = local_test_pipette # TODO (ben 20171130): revise this test to make more sense in the # context of required tip pick_up/drop sequencing, etc. total_tips_per_plate = 4 tiprack1 = generate_plate( total_tips_per_plate, 2, (5, 5), (0, 0), 5) tiprack2 = generate_plate( total_tips_per_plate, 2, (5, 5), (0, 0), 5) robot._deck['1'].add(tiprack1, 'tiprack1') robot._deck['2'].add(tiprack2, 'tiprack2') p200 = Pipette( robot, mount='right', tip_racks=[tiprack1, tiprack2], trash_container=tiprack1, name='pipette-for-transfer-tests', max_volume=200, ul_per_mm=18.5 ) p200.move_to = mock.Mock() for _ in range(0, total_tips_per_plate * 2): p200.pick_up_tip() p200.tip_attached = False # prior expectation, for test only expected = [] for i in range(0, total_tips_per_plate): expected.extend(build_pick_up_tip(p200, tiprack1[i])) for i in range(0, total_tips_per_plate): expected.extend(build_pick_up_tip(p200, tiprack2[i])) assert p200.move_to.mock_calls == expected # test then when we go over the total number of tips, # Pipette raises a RuntimeWarning robot.clear_commands() p200.reset() for _ in range(0, total_tips_per_plate * 2): p200.pick_up_tip() p200.tip_attached = False # prior expectation, for test only with pytest.raises(RuntimeWarning): p200.pick_up_tip()
def test_wells(self): c = generate_plate(96, 8, (9, 9), (16, 11), 2.5, 40) self.assertWellSeriesEqual(c.well(0), c[0]) self.assertWellSeriesEqual(c.well('A2'), c['A2']) self.assertWellSeriesEqual(c.wells(0), c[0]) self.assertWellSeriesEqual(c.wells(), c[0:]) expected = [c[n] for n in ['A1', 'B2', 'C3']] self.assertWellSeriesEqual(c.wells('A1', 'B2', 'C3'), expected) self.assertWellSeriesEqual(c.get('A1', 'B2', 'C3'), expected) self.assertWellSeriesEqual(c('A1', 'B2', 'C3'), expected) expected = [c.rows[0][0], c.rows[0][5]] self.assertWellSeriesEqual(c.rows['A'].wells('1', '6'), expected) self.assertWellSeriesEqual(c.rows['A'].get('1', '6'), expected) expected = [c.rows[0][0], c.rows[0][5]] self.assertWellSeriesEqual(c.rows['A'].wells(['1', '6']), expected) self.assertWellSeriesEqual(c.rows['A'].get('1', '6'), expected) self.assertWellSeriesEqual(c.rows('A').get('1', '6'), expected) expected = c.wells('A1', 'B1', 'C1', 'D1', 'E1', 'F1', 'G1', 'H1') self.assertWellSeriesEqual(c.wells('A1', to='H1'), expected) self.assertWellSeriesEqual(c.get('A1', to='H1'), expected) expected = c.wells('A1', 'C1', 'E1', 'G1') self.assertWellSeriesEqual(c.wells('A1', to='H1', step=2), expected) self.assertWellSeriesEqual(c.get('A1', to='H1', step=2), expected) expected = c.cols['1':'12':2] self.assertWellSeriesEqual(c.cols('1', to='12', step=2), expected) expected = c.wells('A3', 'G2', 'E2', 'C2', 'A2', 'G1', 'E1', 'C1', 'A1') self.assertWellSeriesEqual(c.wells('A3', to='A1', step=2), expected) self.assertWellSeriesEqual(c.get('A3', to='A1', step=2), expected) expected = c.wells('A1', 'B1', 'C1', 'D1', 'E1', 'F1', 'G1', 'H1') self.assertWellSeriesEqual(c.wells('A1', length=8), expected) expected = c.wells('A1', 'C1', 'E1', 'G1', 'A2', 'C2', 'E2', 'G2') self.assertWellSeriesEqual(c.wells('A1', length=8, step=2), expected) expected = c.wells('A1', 'H12', 'G12', 'F12') self.assertWellSeriesEqual(c.wells('A1', length=4, step=-1), expected) expected = c.wells('A1', 'H12', 'G12', 'F12') self.assertWellSeriesEqual(c.wells('A1', length=-4, step=-1), expected) expected = c.wells('A1', 'H12', 'G12', 'F12') self.assertWellSeriesEqual(c.wells('A1', length=-4, step=1), expected) expected = c.wells('A1', 'B1', 'C1', 'D1') self.assertWellSeriesEqual(c.wells(length=4), expected) self.assertWellSeriesEqual(c.wells(43), c.wells(x=3, y=5)) self.assertWellSeriesEqual(c.rows(3), c.wells(y=3)) self.assertWellSeriesEqual(c.cols(4), c.wells(x=4)) self.assertRaises(ValueError, c.wells, **{'x': '1', 'y': '2'})
def test_slice_with_strings(self): c = generate_plate(96, 8, (9, 9), (16, 11), 2.5, 40) self.assertWellSeriesEqual(c['A1':'A2'], c[0:8]) self.assertWellSeriesEqual(c['A12':], c.cols[-1][0:]) self.assertWellSeriesEqual(c.cols['4':'8'], c.cols[3:7]) self.assertWellSeriesEqual(c.rows['B':'E'], c.rows[1:4]) self.assertWellSeriesEqual(c.rows['B']['1':'7'], c.rows[1][0:6])
def test_top_bottom(self): deck = Deck() slot = Slot() plate = generate_plate(wells=4, cols=2, spacing=(10, 10), offset=(0, 0), radius=5, height=10) deck.add(slot, 'A1', (0, 0, 0)) slot.add(plate) self.assertEqual(plate['A1'].bottom(10), (plate['A1'], Vector(5, 5, 10))) self.assertEqual(plate['A1'].top(10), (plate['A1'], Vector(5, 5, 20))) self.assertEqual(plate['A1'].bottom(10, radius=1.0, degrees=90), (plate['A1'], Vector(5, 10, 10))) self.assertEqual(plate['A1'].top(10, radius=1.0, degrees=90), (plate['A1'], Vector(5, 10, 20))) self.assertEqual(plate['A1'].bottom(10, radius=0.5, degrees=270), (plate['A1'], Vector(5, 2.5, 10.00))) self.assertEqual(plate['A1'].top(10, radius=0.5, degrees=270), (plate['A1'], Vector(5, 2.5, 20.00)))
def test_add_placeables(self): a = generate_plate(4, 2, (5, 5), (0, 0), 5) b = generate_plate(4, 2, (5, 5), (0, 0), 5) result = a + b self.assertEqual(len(result), 8) for i in range(len(a)): self.assertEqual(a[i], result[i]) for i in range(len(b)): self.assertEqual(b[i], result[i + len(a)]) result = a.cols(0) + b.rows(0) self.assertEqual(len(result), 4) self.assertEqual(a[0], result[0]) self.assertEqual(a[1], result[1]) self.assertEqual(b[0], result[2]) self.assertEqual(b[2], result[3])
def test_add_placeables(): a = generate_plate(4, 2, (5, 5), (0, 0), 5) b = generate_plate(4, 2, (5, 5), (0, 0), 5) result = a + b assert len(result) == 8 for i in range(len(a)): assert a[i] == result[i] for i in range(len(b)): assert b[i] == result[i + len(a)] result = a.cols(0) + b.rows(0) assert len(result) == 4 assert a[0] == result[0] assert a[1] == result[1] assert b[0] == result[2] assert b[2] == result[3]
def test_generate_plate(self): c = generate_plate(wells=96, cols=8, spacing=(10, 15), offset=(5, 15), radius=5) self.assertEqual(c['A1'].coordinates(), (5, 15, 0)) self.assertEqual(c['B2'].coordinates(), (15, 30, 0))
def test_generate_plate(robot): c = generate_plate(wells=96, cols=8, spacing=(10, 15), offset=(5, 15), radius=5) assert c['A1'].coordinates() == (5, 15, 0) assert c['B2'].coordinates() == (15, 30, 0)
def test_coordinates(robot): deck = Deck() slot = Slot() plate = generate_plate(wells=96, cols=8, spacing=(10, 15), offset=(5, 15), radius=5) deck.add(slot, 'B2', (100, 200, 0)) slot.add(plate) assert plate['A1'].coordinates(deck) == (105, 215, 0)
def test_well_from_center(robot): deck = Deck() slot = Slot() plate = generate_plate(wells=4, cols=2, spacing=(10, 10), offset=(0, 0), radius=5) deck.add(slot, 'A1', (0, 0, 0)) slot.add(plate) assert plate['B2'].center() == (5, 5, 0) assert plate['B2'].from_center(x=0.0, y=0.0, z=0.0) == (5, 5, 0) assert plate['B2'].from_center(r=1.0, theta=math.pi / 2, h=0.0)\ == (5.0, 10.0, 0.0)
def test_well_from_center(): deck = Deck() slot = Slot() plate = generate_plate(wells=4, cols=2, spacing=(10, 10), offset=(0, 0), radius=5, height=20) deck.add(slot, 'A1', (0, 0, 0)) slot.add(plate) assert plate['B2'].center() == (5, 5, 10) assert plate['B2'].from_center(x=0.0, y=0.0, z=2.0) == (5, 5, 30) assert plate['B2'].from_center(r=1.0, theta=pi / 2, h=5.0) == (5, 10, 60) assert plate['B2'].top()[1] == (5, 5, 20) assert plate['B2'].bottom()[1] == (5, 5, 0)
def test_well_from_center_new(split_labware_def): print("Split labware definitions? {}".format( ff.split_labware_definitions())) deck = Deck() slot = Slot() plate = generate_plate(wells=4, cols=2, spacing=(10, 10), offset=(0, 0), radius=5, height=20) deck.add(slot, 'A1', (0, 0, 0)) slot.add(plate) assert plate['B2'].center() == (5, 5, 10) assert plate['B2'].from_center(x=0.0, y=0.0, z=2.0) == (5, 5, 30) assert plate['B2'].from_center(r=1.0, theta=pi / 2, h=5.0) == (5, 10, 60) assert plate['B2'].top()[1] == (5, 5, 20) assert plate['B2'].bottom()[1] == (5, 5, 0)
def test_next(self): c = generate_plate(4, 2, (5, 5), (0, 0), 5) well = c['A1'] expected = c.get_child_by_name('B1') self.assertEqual(next(well), expected)
def test_iterate_without_parent(self): c = generate_plate(4, 2, (5, 5), (0, 0), 5) self.assertRaises(Exception, next, c)
def test_int_index(robot): c = generate_plate(4, 2, (5, 5), (0, 0), 5) assert c[3] == c.get_child_by_name('B2') assert c[1] == c.get_child_by_name('B1')
def test_next(robot): c = generate_plate(4, 2, (5, 5), (0, 0), 5) well = c['A1'] expected = c.get_child_by_name('B1') assert next(well) == expected
def test_iterator(robot): c = generate_plate(4, 2, (5, 5), (0, 0), 5) res = [well.coordinates() for well in c] expected = [(0, 0, 0), (5, 0, 0), (0, 5, 0), (5, 5, 0)] assert res == expected
def test_back_container_getitem(robot): c = generate_plate(4, 2, (5, 5), (0, 0), 5) with pytest.raises(TypeError): c.__getitem__((1, 1))
def test_iterate_without_parent(robot): c = generate_plate(4, 2, (5, 5), (0, 0), 5) with pytest.raises(Exception): next(c)
def test_int_index(self): c = generate_plate(4, 2, (5, 5), (0, 0), 5) self.assertEqual(c[3], c.get_child_by_name('B2')) self.assertEqual(c[1], c.get_child_by_name('B1'))
def test_back_container_getitem(self): c = generate_plate(4, 2, (5, 5), (0, 0), 5) self.assertRaises(TypeError, c.__getitem__, (1, 1))
def test_get_name(self): c = generate_plate(4, 2, (5, 5), (0, 0), 5) expected = '<Well A1>' self.assertEqual(str(c['A1']), expected) expected = '<Container>' self.assertEqual(str(c), expected)
def test_iter_method(self): c = generate_plate(4, 2, (5, 5), (0, 0), 5) cycle_iter = c.iter() for i in range(4): self.assertEqual(next(cycle_iter), c[i])
def test_cycle(self): c = generate_plate(4, 2, (5, 5), (0, 0), 5) cycle_iter = c.cycle() for n in range(3): for i in range(4): self.assertEqual(next(cycle_iter), c[i])
def test_iter_method(): c = generate_plate(4, 2, (5, 5), (0, 0), 5) cycle_iter = c.iter() for i in range(4): assert next(cycle_iter) == c[i]
def test_iterator(self): c = generate_plate(4, 2, (5, 5), (0, 0), 5) res = [well.coordinates() for well in c] expected = [(0, 0, 0), (5, 0, 0), (0, 5, 0), (5, 5, 0)] self.assertListEqual(res, expected)