Exemplo n.º 1
0
 def test_compound_units(self):
     u1 = Unit(20, 'microliter/second')
     u2 = Unit(30, 'microliter/second')
     self.assertTrue(u1 < u2)
     self.assertTrue(u2 > u1)
     self.assertEqual(u1 + u2, Unit(50, 'microliter/second'))
     self.assertEqual(u1 - u2, Unit(-10, 'microliter/second'))
 def test_compound_units(self):
     u1 = Unit(20, 'microliter/second')
     u2 = Unit(30, 'microliter/second')
     assert (u1 < u2)
     assert (u2 > u1)
     assert (u1 + u2 == Unit(50, 'microliter/second'))
     assert (u1 - u2 == Unit(-10, 'microliter/second'))
 def test_set_volume_unit_conv(self):
     self.c.well(0).set_volume("200:nanoliter")
     assert (self.c.well(0).volume == Unit(0.2, "microliter"))
     self.c.well(1).set_volume(".1:milliliter")
     assert (self.c.well(1).volume == Unit(100, "microliter"))
     with pytest.raises(ValueError):
         self.c.well(2).set_volume("1:milliliter")
Exemplo n.º 4
0
 def test_compound_units(self):
     u1 = Unit(20, "microliter/second")
     u2 = Unit(30, "microliter/second")
     assert u1 < u2
     assert u2 > u1
     assert u1 + u2 == Unit(50, "microliter/second")
     assert u1 - u2 == Unit(-10, "microliter/second")
Exemplo n.º 5
0
 def test_string_rounding(self):
     # Ensure that string representation is rounded
     assert (
         str(Unit(0.1, "microliter") + Unit(0.2, "microliter")) == "0.3:microliter"
     )
     # Currently we round to 12 decimal places by default
     assert str(Unit(0.1234567890123, "microliter")) == "0.123456789012:microliter"
     assert str(Unit(0.1234567890126, "microliter")) == "0.123456789013:microliter"
Exemplo n.º 6
0
 def test_input_types(self):
     u1 = Unit("20.1:microliter")
     u2 = Unit(20.1, "microliter")
     u3 = Unit(Decimal("20.1"), "microliter")
     assert u1 == u2 == u3
     assert isinstance(u1.magnitude, Decimal)
     with pytest.raises(UnitValueError):
         Unit(1j, "microliter")
Exemplo n.º 7
0
 def test_generates_liquid_handle_with_density(self):
     self.p.transfer(self.flat.well(0),
                     self.flat.well(0),
                     "1:uL",
                     density=Unit(1.1, "mg/ml"))
     inst = self.p.instructions[-1]
     assert inst.op == "liquid_handle"
     assert inst.data["locations"][0]["transports"][4]["density"] == Unit(
         1.1, "mg/ml")
Exemplo n.º 8
0
    def test_updates_well_volume(self):
        source = self.flat.well(0)
        destination = self.flat.well(1)
        source_volume = Unit(30, "uL")
        volume = Unit(20, "uL")

        self.p.transfer(source.set_volume(source_volume), destination, volume)
        assert source.volume == source_volume - volume
        assert destination.volume == volume
Exemplo n.º 9
0
 def test_comparison(self):
     u1 = Unit(20, 'microliter')
     u2 = Unit(30, 'microliter')
     self.assertFalse(u1 == u2)
     self.assertTrue(u1 == Unit(20, 'microliter'))
     self.assertTrue(u1 != u2)
     self.assertTrue(u1 < u2)
     self.assertTrue(u1 <= u2)
     self.assertFalse(u1 > u2)
     self.assertTrue(u2 > u1)
Exemplo n.º 10
0
    def test_split_volume_transfer(self):
        self.p.transfer(self.deep.well(0), self.deep.well(1), "2000:uL")
        assert len(self.p.instructions) == 3
        volumes = [
            _.locations[1]["transports"][4]["volume"]
            for _ in self.p.instructions
        ]
        expected_volumes = [Unit(895, "uL"), Unit(895, "uL"), Unit(210, "uL")]

        assert volumes == expected_volumes
Exemplo n.º 11
0
 def test_arithmetic(self):
     u1 = Unit(20, 'microliter')
     u2 = Unit(30, 'microliter')
     assert (Unit(50, 'microliter') == u1 + u2)
     assert (Unit(50, 'microliter') == u2 + u1)
     assert (Unit(-10, 'microliter') == u1 - u2)
     assert (Unit(10, 'microliter') == u2 - u1)
     assert (Unit(600, 'microliter') == u2 * u1._magnitude)
     assert (Unit(600, 'microliter') == u2._magnitude * u1)
     assert (Unit(1.5, 'microliter') == u2 / u1._magnitude)
     assert (Unit(1, 'dimensionless') == u2 // u1)
Exemplo n.º 12
0
 def test_dimensional_arithmetic(self):
     u1 = Unit(200, "microliter")
     u2 = Unit(3, "milliliter")
     assert Unit(3200, "microliter") == u1 + u2
     assert Unit(3.2, "milliliter") == u2 + u1
     assert Unit(-2800, "microliter") == u1 - u2
     assert Unit(2.8, "milliliter") == u2 - u1
     assert Unit(0.6, "milliliter**2") == u2 * u1
     assert Unit(600000, "microliter**2") == u1 * u2
     assert Unit(15, "dimensionless") == u2 / u1
     assert Unit(0.066666667, "dimensionless") == (u1 / u2).round(9)
Exemplo n.º 13
0
 def test_arithmetic(self):
     u1 = Unit(20, "microliter")
     u2 = Unit(30, "microliter")
     assert Unit(50, "microliter") == u1 + u2
     assert Unit(50, "microliter") == u2 + u1
     assert Unit(-10, "microliter") == u1 - u2
     assert Unit(10, "microliter") == u2 - u1
     assert Unit(600, "microliter") == u2 * u1.magnitude
     assert Unit(600, "microliter") == u2.magnitude * u1
     assert Unit(1.5, "microliter") == u2 / u1.magnitude
     assert Unit(1, "dimensionless") == u2 // u1
Exemplo n.º 14
0
 def test_dimensional_arithmetic(self):
     u1 = Unit(200, 'microliter')
     u2 = Unit(3, 'milliliter')
     assert Unit(3200, 'microliter') == u1 + u2
     assert Unit(3.2, 'milliliter') == u2 + u1
     assert Unit(-2800, 'microliter') == u1 - u2
     assert Unit(2.8, 'milliliter') == u2 - u1
     assert Unit(0.6, 'milliliter**2') == u2 * u1
     assert Unit(600000, 'microliter**2') == u1 * u2
     assert Unit(15, 'dimensionless') == u2 / u1
     assert Unit(0.066666667, 'dimensionless') == (u1 / u2).round(9)
Exemplo n.º 15
0
 def test_arithmetic(self):
     u1 = Unit(20, 'microliter')
     u2 = Unit(30, 'microliter')
     self.assertEqual(Unit(50, 'microliter'), u1 + u2)
     self.assertEqual(Unit(50, 'microliter'), u2 + u1)
     self.assertEqual(Unit(-10, 'microliter'), u1 - u2)
     self.assertEqual(Unit(10, 'microliter'), u2 - u1)
     self.assertEqual(Unit(600, 'microliter'), u2 * u1.value)
     self.assertEqual(Unit(1.5, 'microliter'), u2 / u1.value)
     self.assertEqual(Unit(1, 'microliter'), u2 // u1)
Exemplo n.º 16
0
 def __init__(self, shortname, description):
     """
     Parameters
     ----------
     shortname : str
         A short name for the solution. (e.g. 'buffer')
     description:
         A descriptive name for the solution (e.g. '20 mM Tris 50 mM NaCl')
     """
     self.shortname = shortname
     self.description = description
     self.species = None
     self.concentration = Unit(0.0, 'moles/liter')
     self.uncertainty = Unit(0.0, 'moles/liter')
Exemplo n.º 17
0
 def test_comparison(self):
     u1 = Unit(20, "microliter")
     u2 = Unit(30, "microliter")
     u3 = Unit(1, "milliliter")
     assert u1 != u2
     assert u1 == Unit(20, "microliter")
     assert u1 != u2
     assert u1 < u2
     assert u1 <= u2
     assert u1 <= u2
     assert u2 > u1
     assert u1 < u2
     assert u2 >= u1
     assert u3 > u1
     assert u2 < u3
Exemplo n.º 18
0
 def test_comparison(self):
     u1 = Unit(20, 'microliter')
     u2 = Unit(30, 'microliter')
     u3 = Unit(1, 'milliliter')
     assert (u1 != u2)
     assert (u1 == Unit(20, 'microliter'))
     assert (u1 != u2)
     assert (u1 < u2)
     assert (u1 <= u2)
     assert (u1 <= u2)
     assert (u2 > u1)
     assert (u1 < u2)
     assert (u2 >= u1)
     assert (u3 > u1)
     assert (u2 < u3)
Exemplo n.º 19
0
def sample_protocol(protocol, params):
    dest_plate = params["destination_plate"]
    wells_to_measure = []

    for location in params["dye_locations"]:
        protocol.transfer(params["dye"],
                          dest_plate.well(location["well_index"]),
                          location["volume"])
        if location["volume"] != Unit(100, "microliter"):
            protocol.transfer(params["water"],
                              dest_plate.well(location["well_index"]),
                              Unit(100, "microliter") - location["volume"],
                              mix_after=True)
        wells_to_measure.append(location["well_index"])

    protocol.absorbance(dest_plate, wells_to_measure, "475:nanometer", "test")
Exemplo n.º 20
0
def provision_assay_plate(name, plate_type='4titude 4ti-0223', id=None):
    """
    Provision a new assay plate.

    Parameters
    ----------
    name : str
       The name of the container
    plate_type : str, optional, default='4titude 4ti-0223'
       The name of the plate type used to retrieve the `container_type` from library
    id : str, optional, default=None
       Unless `id` is specified, a unique container ID will be autogenerated.
    """
    if id == None:
        id = generate_uuid

    # Define the container
    container_type = container_types[plate_type]
    container = Container(name="assay-plate",
                          id=id,
                          container_type=container_type)

    # Initialize well properties for this container
    for well in container.all_wells():
        well.set_volume(Unit(0.0, 'microliters'))  # well starts empty

    return container
Exemplo n.º 21
0
 def test_single_transfer(self):
     p = Protocol()
     c = p.ref("test", None, "96-flat", discard=True)
     p.transfer(c.well(0), c.well(1), "20:microliter")
     self.assertEqual(Unit(20, "microliter"), c.well(1).volume)
     self.assertEqual(None, c.well(0).volume)
     self.assertTrue("transfer" in p.instructions[-1].groups[-1])
    def measure_absorbance(self, record: paml.ActivityNodeExecution):
        results = {}
        call = record.call.lookup()
        parameter_value_map = call.parameter_value_map()

        wl = parameter_value_map["wavelength"]["value"]
        wl_units = tyto.OM.get_term_by_uri(wl.unit)
        samples = parameter_value_map["samples"]["value"]
        wells = self.var_to_entity[samples]
        measurements = parameter_value_map["measurements"]["value"]

        # HACK extract contrainer from well group since we do not have it as input
        container = wells[0].container

        l.debug(f"measure_absorbance:")
        l.debug(f"  container: {container}")
        l.debug(f"  samples: {samples}")
        l.debug(f"  wavelength: {wl.value} {wl_units}")

        self.protocol.spectrophotometry(
            dataref=measurements,
            obj=container,
            groups=Spectrophotometry.builders.groups([
                Spectrophotometry.builders.group(
                    "absorbance",
                    Spectrophotometry.builders.absorbance_mode_params(
                        wells=wells,
                        wavelength=Unit(wl.value, wl_units),
                        num_flashes=None,
                        settle_time=None,
                        read_position=None,
                        position_z=None))
            ]))
        return results
 def test_echo_max_vol(self):
     from autoprotocol.protocol import Protocol
     p = Protocol()
     echo_w = p.ref("echo", None, "384-echo", discard=True).well(0)
     echo_w.set_volume("135:microliter")
     assert echo_w.volume == Unit(135, "microliter")
     with pytest.raises(ValueError):
         echo_w.set_volume("136:microliter")
Exemplo n.º 24
0
def dummy_type():
    return ContainerType(
        name="dummy",
        well_count=15,
        well_depth_mm=None,
        well_volume_ul=Unit(200, "microliter"),
        well_coating=None,
        sterile=False,
        is_tube=False,
        cover_types=[],
        seal_types=None,
        capabilities=[],
        shortname="dummy",
        col_count=5,
        dead_volume_ul=Unit(15, "microliter"),
        safe_min_volume_ul=Unit(30, "microliter")
    )
Exemplo n.º 25
0
 def test_conversion(self):
     assert (Unit(200, 'centimeter').to('meter') == Unit(2, 'meter'))
     assert (Unit(20, 'microliter/second').to('liter/hour') == Unit(
         0.072, 'liter / hour'))
     # Due to floating point imprecision, use AlmostEqual as the test
     # condition
     assert almost_equal(
         Unit(1000, 'microliter').to('milliliter'), Unit(1, 'milliliter'),
         Unit(10**-12, 'milliliter'))
Exemplo n.º 26
0
    def test_updates_well_volume(self):
        source_volume = Unit(30, "uL")
        volume = Unit(20, "uL")

        row_count = self.flat.container_type.row_count()
        source_origin = self.flat.well(0)
        source_wells = self.flat.wells_from(
            source_origin, row_count,
            columnwise=True).set_volume(source_volume)
        destination_origin = self.flat.well(1)
        destination_wells = self.flat.wells_from(destination_origin,
                                                 row_count,
                                                 columnwise=True)

        self.p.transfer(source_origin,
                        destination_origin,
                        volume,
                        rows=row_count)
        assert all(_.volume == source_volume - volume for _ in source_wells)
        assert all(_.volume == volume for _ in destination_wells)
Exemplo n.º 27
0
 def test_multiple_sources(self):
     p = Protocol()
     c = p.ref("test", None, "96-flat", discard=True)
     with self.assertRaises(AssertionError):
         p.consolidate(c.wells_from(0, 3), c.wells_from(2, 3),
                       "10:microliter")
         p.consolidate(c.wells_from(0, 3), c.well(4), ["10:microliter"])
     p.consolidate(c.wells_from(0, 3), c.well(4), "10:microliter")
     self.assertEqual(Unit(30, "microliter"), c.well(4).volume)
     self.assertEqual(
         3, len(p.instructions[0].groups[0]["consolidate"]["from"]))
Exemplo n.º 28
0
def dummy_echo():
    return Container(
        None,
        ContainerType(
            name="dummy",
            well_count=384,
            well_depth_mm=None,
            well_volume_ul=Unit(65, "microliter"),
            well_coating=None,
            sterile=False,
            is_tube=False,
            cover_types=[],
            seal_types=None,
            capabilities=[],
            shortname="dummy",
            col_count=96,
            dead_volume_ul=Unit(15, "microliter"),
            safe_min_volume_ul=Unit(15, "microliter"),
            true_max_vol_ul=Unit(135, "microliter"),
            vendor="Labcyte"
        )
    )
Exemplo n.º 29
0
 def __init__(self, dmso_stock):
     """
     Parameters
     ----------
     dmso_stock : dict
         The dictionary containing 'id', 'compound_name', 'compound mass (mg)', 'molecular weight', 'purity', 'solvent_mass'
     """
     self.shortname = dmso_stock['id']
     self.species = dmso_stock['compound name']
     self.description = '10 mM ' + dmso_stock[
         'compound name'] + ' DMSO stock'
     dmso_density = Unit(1.1004, 'grams/milliliter')
     mass_uncertainty = 0.01  # TODO: Calculate from balance precision
     concentration = Unit(
         dmso_stock['compound mass (mg)'],
         'milligrams') * dmso_stock['purity'] / Unit(
             dmso_stock['molecular weight'], 'grams/mole') / (
                 Unit(dmso_stock['solvent mass (g)'], 'grams') /
                 dmso_density)  # mol/liter
     self.concentration = concentration.to('moles/liter')
     self.uncertainty = mass_uncertainty * self.concentration
     self.buffer = DMSO
Exemplo n.º 30
0
    def test_units_match(self):
        with pytest.raises(ValueError):
            Unit(20, 'microliter') + Unit(30, 'second')

        with pytest.raises(ValueError):
            Unit(20, 'microliter') - Unit(30, 'second')

        with pytest.raises(ValueError):
            Unit(20, 'microliter') < Unit(30, 'second')