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")
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)
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]
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
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)
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]
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)]
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"
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)
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]
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()
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
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)
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)
def testStr(): array = units.Array("length", values=[100, 150, 200], unit="m") assert six.text_type(array) == "100 150 200 [m]"
def MakeArray(values): """Creates a standard array used by testScalarOperations""" return units.Array("length", values, "m")
def testNoConversion() -> None: values = [100, 150, 200] array = units.Array("length", values=values, unit="m") assert array.GetValues() is values
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
def CheckConversion(values): _array = units.Array("length", values=values, unit="m") for converted, original in zip(_array.GetValues("km"), values): assert converted == original / 1000
def testStr() -> None: array = units.Array("length", values=[100, 150, 200], unit="m") assert str(array) == "100 150 200 [m]"
def testNoConversionWhenUsingSameUnit() -> None: import numpy values = numpy.array([100, 150, 200]) array = units.Array(values, "m") assert array.GetValues("m") is values