Exemple #1
0
def testEquality() -> None:
    a1 = units.Array("length", values=list(range(100)), unit="m")

    assert a1 == units.Array("length", values=list(range(100)), unit="m")
    assert a1 != units.Array("temperature", values=list(range(100)), unit="degC")
    assert a1 != units.Array("length", values=[], unit="m")
    assert a1 != units.Array("length", values=list(range(100)), unit="km")
Exemple #2
0
def testGetValues() -> None:
    """
    Tests GetValues method return type when passing a 'unit'
    """
    array = units.Array("temperature", values=[0, 100], unit="degC")
    assert isinstance(array.GetValues(), list)
    assert isinstance(array.GetValues("degC"), list)

    array2 = units.Array("temperature", values=(0, 100), unit="degC")
    assert isinstance(array2.GetValues(), tuple)
    assert isinstance(array2.GetValues("degC"), tuple)
    assert array2[1] == 100

    array3 = units.Array[List[float]]("temperature", values=[], unit="degC")
    assert isinstance(array3.GetValues("degC"), list)
Exemple #3
0
def testReadOnlyQuantity() -> None:
    quantity = ObtainQuantity("m", "length")
    array = units.Array(quantity, values=[1, 2, 3])

    array = array.CreateCopy(unit="km")
    assert array.unit == "km"
    assert approx(array.GetValues()) == [0.001, 0.002, 0.003]
Exemple #4
0
def testArrayWithNaNs(unit_database_len):
    import numpy

    TEST_VALUES = [[numpy.nan, 0, 15, numpy.nan], [numpy.nan] * 5]
    for values in TEST_VALUES:
        units.Array("flow rate", values=values,
                    unit="m3/s")  # check that this does not raise exceptions
Exemple #5
0
def testZeroDimensionalNumpyArray():
    import numpy

    values = numpy.array(1000.0)
    array = units.Array(values, "m")
    assert array.GetValues("m") == numpy.array(1000.0)
    assert array.GetValues("km") == numpy.array(1.0)
Exemple #6
0
def testZeroDimensionalNumpyArray() -> None:
    import numpy

    values = numpy.array(1000.0)  # type:ignore[call-overload]
    array = units.Array(values, "m")
    assert array.GetValues("m") == numpy.array(1000.0)  # type:ignore[call-overload]
    assert array.GetValues("km") == numpy.array(1.0)  # type:ignore[call-overload]
Exemple #7
0
def testCreateWithQuantity() -> None:
    q = ObtainQuantity("m", "length")
    a1 = units.Array(q, values=[(1000, 1000), (300, 300)])
    a2 = a1.CreateCopy(unit="km")

    assert a1.values == [(1000, 1000), (300, 300)]
    assert a2.values == [(1, 1), (0.3, 0.3)]
Exemple #8
0
def testInvalidUnit() -> None:
    a1 = units.Array("length", values=[(1000, 1000), (300, 300)], unit="m")
    try:
        a1 = a1.CreateCopy(values=[(100, 200)], unit="foo")
    except InvalidUnitError:
        pass
    assert a1.values == [(1000, 1000), (300, 300)]
    assert a1.unit == "m"
Exemple #9
0
def testNumpyConversion() -> None:
    import numpy

    values = numpy.array([100, 200, 300])
    array = units.Array("length", values=values, unit="m")

    converted_values = array.GetValues("km")
    assert isinstance(converted_values, numpy.ndarray)
    assert list(numpy.array([0.1, 0.2, 0.3])) == list(converted_values)
Exemple #10
0
def testMultiDimensional() -> None:
    a1 = units.Array("length", values=[(1000, 1000), (300, 300)], unit="m")
    assert a1.GetValues("km") == [(1, 1), (0.3, 0.3)]

    assert (1000, 1000) == a1[0]
    assert (300, 300) == a1[1]

    a1 = a1.CreateCopy(unit="km")
    assert (1, 1) == a1[0]
    assert (0.3, 0.3) == a1[1]
Exemple #11
0
def testCategoryParameters(unit_database_len, mocker):
    unit_database = unit_database_len
    unit_database.AddUnit("temperature", "Kelvin Degrees", "degK",
                          "%f - 273.5", "%f + 273.5")
    unit_database.AddCategory(
        "my temperature",
        "temperature",
        ["degC", "degK"],
        default_unit="degC",
        default_value=22.3,
        min_value=-10.0,
        max_value=213.4,
        is_min_exclusive=False,
        is_max_exclusive=True,
    )

    a1 = units.Array("my temperature", values=[0, 100], unit="degC")
    assert a1.IsValid()

    a2 = a1.CreateCopy(values=[0, 220])
    assert a2._is_valid is None
    assert a2._validity_exception is None

    mocker.patch.object(a2, "_DoValidateValues", autospec=True)
    a2._DoValidateValues.side_effect = ValueError("my value error")

    assert not a2.IsValid()
    assert a2._is_valid is False
    assert str(a2._validity_exception) == "my value error"
    assert a2._DoValidateValues.call_count == 1

    with pytest.raises(ValueError):
        a2.CheckValidity()

        # As result is already cached the "_DoValidateValues" will not be invoked.
        assert a2._DoValidateValues.call_count == 1

    a3 = units.Array("my temperature",
                     values=[(-100, 50), (0, 2)],
                     unit="degC")
    assert not a3.IsValid()
Exemple #12
0
def testValues() -> None:
    array = units.Array("length", values=[100, 150, 200], unit="m")
    assert array.unit == "m"
    assert array.values == [100, 150, 200]

    array = array.CreateCopy(values=list(range(100)))
    array = array.CreateCopy(unit="km")
    assert array.values == [x / 1000.0 for x in range(100)]
    assert 3.0 / 1000.0 == array[3]

    with pytest.raises(AttributeError):
        array.values = 10
Exemple #13
0
def testCopy() -> None:
    array = units.Array("length", values=[0, 100], unit="m")
    copy = array.Copy()
    assert copy is array

    # test copy of subclasses
    class MyArray(units.Array):
        pass

    array = MyArray("length", values=[0, 100], unit="m")
    copy = array.Copy()
    assert isinstance(copy, MyArray)
Exemple #14
0
def testNumpyMultiplicationOperation() -> None:
    import numpy

    units_array = units.Array("length", values=[100, 200, 300], unit="m")
    raw_array = [100, 200, 300]
    numpy_array = numpy.array([2.0, 0.5, 0.25])

    units_result = units_array * numpy_array
    raw_result = raw_array * numpy_array

    assert list(raw_result) == [200, 100, 75]
    assert list(units_result.GetValues("m")) == list(raw_result)
Exemple #15
0
def testStr():
    array = units.Array("length", values=[100, 150, 200], unit="m")
    assert six.text_type(array) == "100 150 200 [m]"
Exemple #16
0
def MakeArray(values):
    """Creates a standard array used by testScalarOperations"""
    return units.Array("length", values, "m")
Exemple #17
0
def testNoConversion() -> None:
    values = [100, 150, 200]
    array = units.Array("length", values=values, unit="m")
    assert array.GetValues() is values
Exemple #18
0
def testValues2() -> None:
    array = units.Array("length", values=[100, 150, 200], unit="m")
    array2 = units.Array("length", values=(100, 150, 200), unit="m")
    assert array == array2
Exemple #19
0
 def CheckConversion(values):
     _array = units.Array("length", values=values, unit="m")
     for converted, original in zip(_array.GetValues("km"), values):
         assert converted == original / 1000
Exemple #20
0
def testStr() -> None:
    array = units.Array("length", values=[100, 150, 200], unit="m")
    assert str(array) == "100 150 200 [m]"
Exemple #21
0
def testNoConversionWhenUsingSameUnit() -> None:
    import numpy

    values = numpy.array([100, 150, 200])
    array = units.Array(values, "m")
    assert array.GetValues("m") is values