Exemplo n.º 1
0
def CreateUnitDatabaseLenTime():
    """
    :rtype: UnitDatabase
    :returns:
        Returns a unit database with length and time quantity types
    """
    unit_database = units.UnitDatabase()
    unit_database.AddUnit("length", "milimeters", "mm", "%f * 1000.0",
                          "%f / 1000.0")
    unit_database.AddUnit("length", "centimeters", "cm", "%f * 100.0",
                          "%f / 100.0")
    unit_database.AddUnitBase("length", "meters", "m")
    unit_database.AddUnit("length", "kilometers", "km", "%f / 1000.0",
                          "%f * 1000.0")
    unit_database.AddUnitBase("time", "seconds", "s")
    unit_database.AddUnit("time", "minutes", "minutes", "%f / 60.0",
                          "%f * 60.0")

    unit_database.AddCategory(category="Table size",
                              quantity_type="length",
                              valid_units=["m", "cm"],
                              default_unit="m")
    unit_database.AddCategory(category="City size",
                              quantity_type="length",
                              valid_units=["km", "m"],
                              default_unit="km")
    unit_database.AddCategory(category="Time",
                              quantity_type="time",
                              default_unit="s")

    return unit_database
Exemplo n.º 2
0
def CreateUnitDatabaseWellLength():
    """
    :rtype: UnitDatabase
    :returns:
        Returns a unit database with length and time quantity types
    """
    unit_database = units.UnitDatabase()

    unit_database.AddUnit("length", "milimeters", "mm", "%f * 1000.0",
                          "%f / 1000.0")
    unit_database.AddUnitBase("length", "meters", "m")
    unit_database.AddUnit("length", "centimeters", "cm", "%f * 100.0",
                          "%f / 100.0")
    unit_database.AddUnit("length", "kilometers", "km", "%f / 1000.0",
                          "%f * 1000.0")
    unit_database.AddUnit("length", "miles", "mi", "%f / 1609.347",
                          "%f * 1609.347")
    unit_database.AddUnit("length", "inches", "in", "%f / 0.0254",
                          "%f * 0.0254")
    unit_database.AddUnit("length", "micrometers", "um", "%f * 1000000.0",
                          "%f / 1000000.0")
    unit_database.AddCategory("length", "length")
    unit_database.AddCategory("well-length", "length")
    unit_database.AddCategory("well-length-with-min-and-max",
                              "length",
                              min_value=0.0)

    return unit_database
Exemplo n.º 3
0
def unit_database_empty() -> Iterator[units.UnitDatabase]:
    database = units.UnitDatabase()
    units.UnitDatabase.PushSingleton(database)

    yield database

    units.UnitDatabase.PopSingleton()
Exemplo n.º 4
0
def unit_database_empty():
    database = units.UnitDatabase()
    units.UnitDatabase.PushSingleton(database)

    yield database

    units.UnitDatabase.PopSingleton()
Exemplo n.º 5
0
def testPrecision() -> None:
    unit_database = units.UnitDatabase()
    unit_database.AddUnitBase("Compressibility", "1/Bars", "1/Bars")
    unit_database.AddUnit("Compressibility",
                          "1/Psi",
                          "1/Psi",
                          frombase="%f / 14.50377",
                          tobase="%f * 14.50377")
    unit_database.AddUnit("Compressibility",
                          "1/Atm",
                          "1/Atm",
                          frombase="%f / 0.986923",
                          tobase="%f * 0.986923")

    assert (approx(
        abs(14.50377 * 10e-6 -
            unit_database.Convert("Compressibility", "1/Psi", "1/Bars", 1 *
                                  10e-6)),
        5,
    ) == 0)
    assert (approx(
        abs(0.000063816588 - unit_database.Convert("Compressibility", "1/Psi",
                                                   "1/Bars", 4.4e-006)),
        5,
    ) == 0)
Exemplo n.º 6
0
def testFindCase(unit_database_custom_conversion) -> None:
    unit_database = units.UnitDatabase()
    # add some units for testing
    unit_database.AddUnitBase("temperature", "mang1", "mA")
    unit_database.AddUnit("temperature",
                          "mang2",
                          "Ma",
                          frombase="%f",
                          tobase="%f")
    unit_database.AddUnit("temperature",
                          "Celsius",
                          "C",
                          frombase="%f",
                          tobase="%f")
    unit_database.AddUnit("temperature",
                          "mang3",
                          "MA",
                          frombase="%f",
                          tobase="%f")

    unit_database.AddCategory("my", "temperature")
    with pytest.raises(AssertionError):
        unit_database.FindUnitCase("my", "ma")
    assert "C" == unit_database.FindUnitCase("my", "c")
    assert "C" == unit_database.FindUnitCase("my", "C")
Exemplo n.º 7
0
def testFractionScalarConversion():
    db = units.UnitDatabase()
    db.AddUnit("length", "milimeters", "mm", "%f * 1000.0", "%f / 1000.0")
    db.AddUnitBase("length", "meters", "m")

    f = units.FractionScalar("length",
                             value=FractionValue(3, (1, 2)),
                             unit="m")

    converted = db.Convert("length", "m", "mm", f.value)
    assert converted == FractionValue(3500)
Exemplo n.º 8
0
def unit_database_posc():
    """
    Fixture to be used whenever a test needs a clean UnitDatabase. When using this fixture, it's
    safe to call UnitDatabase.GetSingleton().
    """
    unit_database = units.UnitDatabase()
    unit_database.FillUnitDatabaseWithPosc(unit_database)
    units.UnitDatabase.PushSingleton(unit_database)

    yield unit_database

    units.UnitDatabase.PopSingleton()
Exemplo n.º 9
0
def unit_database_len():
    database = units.UnitDatabase()
    units.UnitDatabase.PushSingleton(database)
    database.AddUnitBase("length", "meters", "m")
    database.AddUnit("length", "kilometers", "km", "%f / 1000.0",
                     "%f * 1000.0")
    database.AddUnitBase("temperature", "degC", "degC")
    database.AddUnitBase("flow rate", "m3/s", "m3/s")
    database.AddCategory("length", "length")
    database.AddCategory("temperature", "temperature")
    database.AddCategory("flow rate", "flow rate", min_value=0.0)

    yield database

    units.UnitDatabase.PopSingleton()
Exemplo n.º 10
0
def CreateUnitDatabaseStartUnits():
    """
    :rtype: UnitDatabase
    :returns:
        Returns a unit database with length and time quantity types
    """
    unit_database = units.UnitDatabase()

    unit_database.AddUnitBase("length", "meters", "m")
    unit_database.AddUnit("length", "kilometers", "km", "%f / 1000.0",
                          "%f * 1000.0")
    unit_database.AddUnit("length", "centimeters", "cm", "%f * 100.0",
                          "%f / 100.0")
    unit_database.AddCategory("length", "length")

    return unit_database
Exemplo n.º 11
0
def CreateUnitDatabasePoscLen(fill_categories=True):
    """
    :rtype: UnitDatabase
    :returns:
        Returns a unit database with "length" quantity type only

    :param bool fill_categories:
        If a category "length" should also be created
    """
    unit_database = units.UnitDatabase()
    unit_database.AddUnitBase("length", "meters", "m")
    unit_database.AddUnit("length", "kilometers", "km", "%f / 1000.0",
                          "%f * 1000.0")

    if fill_categories:
        unit_database.AddCategory(category="length", quantity_type="length")
    return unit_database
Exemplo n.º 12
0
def CreateUnitDatabaseLenPressure():
    """
    :rtype: UnitDatabase
    :returns:
        Returns a unit database with length and time quantity types
    """
    unit_database = units.UnitDatabase()

    unit_database.AddUnitBase("length", "meters", "m")
    unit_database.AddUnit("length", "kilometers", "km", "%f / 1000.0",
                          "%f * 1000.0")
    unit_database.AddUnitBase("pressure", "pascal", "Pa")
    unit_database.AddUnit("pressure", "pounds/square inch", "psi",
                          "%f / 6894.757", "%f * 6894.757")

    unit_database.AddCategory("length", "length")
    unit_database.AddCategory("pressure", "pressure")

    return unit_database
Exemplo n.º 13
0
def CreateUnitDatabaseCustomConversion():
    from barril.units import UNKNOWN_QUANTITY_TYPE, UNKNOWN_UNIT

    unit_database = units.UnitDatabase()
    # add some units for testing
    unit_database.AddUnit(UNKNOWN_QUANTITY_TYPE, UNKNOWN_UNIT, UNKNOWN_UNIT,
                          "%f", "%f")
    unit_database.AddUnit("length", "milimeters", "mm", "%f * 1000.0",
                          "%f / 1000.0")
    unit_database.AddUnitBase("length", "meters", "m")
    unit_database.AddUnit("length", "centimeters", "cm", "%f * 100.0",
                          "%f / 100.0")
    unit_database.AddUnit("length", "kilometers", "km", "%f / 1000.0",
                          "%f * 1000.0")
    unit_database.AddUnit("length", "miles", "mi", "%f / 1609.347",
                          "%f * 1609.347")
    unit_database.AddUnit("length", "inches", "in", "%f / 0.0254",
                          "%f * 0.0254")
    unit_database.AddUnit("length", "micrometers", "µm", "%f * 1000000.0",
                          "%f / 1000000.0")
    unit_database.AddUnitBase("temperature", "Celcius", "ºC")
    unit_database.AddCategory("length",
                              "length",
                              valid_units=["m", "mm", "cm", "km"])

    def C_to_F(x):
        return x * 1.8 + 32

    def F_to_C(x):
        return (x - 32) / 1.8

    unit_database.AddUnit("temperature", "Fahrenheit", "F", C_to_F, F_to_C)

    def C_to_K(x):
        return x + 273.15

    def K_to_C(x):
        return x - 273.15

    unit_database.AddUnit("temperature", "Kelvin", "K", C_to_K, K_to_C)

    return unit_database
Exemplo n.º 14
0
def testNotDefaultUnitDatabase() -> None:
    unit_database = units.UnitDatabase()
    with pytest.raises(AssertionError):
        unit_database.CheckDefaultUnitDatabase()