def test_float(self): f1 = as_ufl(1) f2 = as_ufl(1.0) f3 = FloatValue(1) f4 = FloatValue(1.0) f5 = 3 - FloatValue(1) - 1 f6 = 3 * FloatValue(2) / 6 assert f1 == f1 self.assertNotEqual(f1, f2) # IntValue vs FloatValue, == compares representations! assert f2 == f3 assert f2 == f4 assert f2 == f5 assert f2 == f6
def __new__(cls, arg1, arg2): if isinstance(arg1, (RealValue, Zero)) and isinstance( arg2, (RealValue, Zero)): return FloatValue(math.atan2(float(arg1), float(arg2))) if isinstance(arg1, (ComplexValue)) or isinstance(arg2, (ComplexValue)): raise TypeError("Atan2 does not support complex numbers.") return Operator.__new__(cls)
def __new__(cls, argument): if isinstance(argument, (RealValue, Zero, numbers.Real)): if float(argument) < 0: return ComplexValue(cmath.sqrt(complex(argument))) else: return FloatValue(math.sqrt(float(argument))) if isinstance(argument, (ComplexValue, complex)): return ComplexValue(cmath.sqrt(complex(argument))) return MathFunction.__new__(cls)
def __new__(cls, argument): if isinstance(argument, (RealValue, Zero)): erf = _find_erf() if erf is not None: return FloatValue(erf(float(argument))) if isinstance(argument, (ConstantValue)): erf = _find_erf() if erf is not None: return ComplexValue(erf(complex(argument))) return MathFunction.__new__(cls)
def test_zero(self): z1 = Zero(()) z2 = Zero(()) z3 = as_ufl(0) z4 = as_ufl(0.0) z5 = FloatValue(0) z6 = FloatValue(0.0) # self.assertTrue(z1 is z2) # self.assertTrue(z1 is z3) # self.assertTrue(z1 is z4) # self.assertTrue(z1 is z5) # self.assertTrue(z1 is z6) assert z1 == z1 assert int(z1) == 0 assert float(z1) == 0.0 self.assertNotEqual(z1, 1.0) self.assertFalse(z1) # If zero() == 0 is to be allowed, it must not have the same hash or it will collide with 0 as key in dicts... self.assertNotEqual(hash(z1), hash(0.0)) self.assertNotEqual(hash(z1), hash(0))
def __new__(cls, argument): if isinstance(argument, (ScalarValue, Zero)): return FloatValue(math.exp(float(argument))) return MathFunction.__new__(cls)
def __new__(cls, argument): if isinstance(argument, (ScalarValue, Zero)): erf = _find_erf() if erf is not None: return FloatValue(erf(float(argument))) return MathFunction.__new__(cls)
def __new__(cls, arg1, arg2): if isinstance(arg1, (ScalarValue, Zero)) and isinstance( arg2, (ScalarValue, Zero)): return FloatValue(math.atan2(float(arg1), float(arg2))) return Operator.__new__(cls)
def __new__(cls, argument): if isinstance(argument, (RealValue, Zero)): return FloatValue(math.exp(float(argument))) if isinstance(argument, (ComplexValue)): return ComplexValue(cmath.exp(complex(argument))) return MathFunction.__new__(cls)