def variables_test(): assert_equal(variables(Number(3)*x*(x+Number(1))*y**Number(2)*z**n), {x, x + Number(1), y, z**n}) assert_equal(variables(a*sin(x)**Number(2)+Number(2)*b*sin(x)+Number(3)*c), {a, b, c, sin(x)}) assert_equal(variables(Number(2)**Number(1, 2)*x**Number(2) + Number(3)**Number(1, 2) + Number(5)**Number(1, 2)), {x, Number(2)**Number(1, 2), Number(3)**Number(1, 2), Number(5)**Number(1, 2)}) assert_equal(variables(Number(1,2)), set()) assert_equal(variables(x*Number(3)+Number(3)*x**Number(2)*y + Number(3)*x*y**Number(2)+y**Number(3)), {x, y}) assert_equal(variables(4*x*(x+5)), {x, x+5})
def is_ordered_test(): # O-1 assert_equal(are_ordered(Number(2), Number(3)), True) assert_equal(are_ordered(Number(1, 2), Number(1)), True) assert_equal(are_ordered(Number(7, 5), Number(1)), False) # O-2 x = Symbol('x') y = Symbol('y') abc = Symbol('abc') bcd = Symbol('bcd') assert_equal(are_ordered(x, y), True) assert_equal(are_ordered(bcd, abc), False) # O-3 a = Symbol('a') b = Symbol('b') c = Symbol('c') d = Symbol('d') assert_true(are_ordered(a + b, a + c)) assert_true(are_ordered(a + c + d, b + c + d)) assert_true(are_ordered(c + d, b + c + d)) # O-4 assert_equal(are_ordered(x ** 2, y ** 3), True) assert_equal(are_ordered(x ** 2, x ** 3), True) # O-6 assert_equal(are_ordered(cos(x), sin(x)), True) assert_equal(are_ordered(sin(x), sin(y)), True) # O-7 assert_equal(are_ordered(Number(2), x), True) # O-8 a = Symbol('a') assert_equal(are_ordered(a * x ** 2, x ** 3), True) # O-9 assert_equal(are_ordered((1 + x) ** 3, (1 + y)), True) # O-10 assert_equal(are_ordered(1 + x, y), True) # O-12 s = Symbol('sin') # why anyone would do this is beyond me, but worst case scenario... assert_equal(are_ordered(s, sin(x)), True) assert_equal(are_ordered(a, sin(x)), True) # O-13 assert_equal(are_ordered(x, x ** 2), True)
def base_test(): x = Symbol("x") assert_equal(base(x), x) assert_equal(base(x * 5), x * 5) assert_equal(base(x + 2), x + 2) assert_equal(base(sin(x)), sin(x)) assert_equal(base(x ** 3), x) assert_equal(base(sin(x) ** 5), sin(x)) assert_equal(base(Number(1, 2) ** Number(1, 3)), Number(1, 2)) assert_is_instance(base(Number(2)), Undefined) assert_is_instance(base(Number(4, 5)), Undefined)
def exponent_test(): x = Symbol("x") assert_equal(exponent(x), Number(1)) assert_equal(exponent(x * 5), Number(1)) assert_equal(exponent(x + 2), Number(1)) assert_equal(exponent(sin(x)), Number(1)) assert_equal(exponent(x ** 3), Number(3)) assert_equal(exponent(sin(x) ** 5), Number(5)) assert_equal(exponent(Number(1, 2) ** Number(1, 3)), Number(1, 3)) assert_is_instance(exponent(Number(2)), Undefined) assert_is_instance(exponent(Number(4, 5)), Undefined)
def term_test(): x = Symbol("x") y = Symbol("y") assert_equal(term(x), Mul(x)) assert_equal(term(x + 5), Mul(x + 5)) assert_equal(term(x ** 5), Mul(x ** 5)) assert_equal(term(sin(x)), Mul(sin(x))) assert_equal(term(6 * x * 3), Mul(x)) assert_equal(term(10 * x * y), x * y) assert_equal(term(x * y), x * y) assert_is_instance(term(Number(1)), Undefined) assert_is_instance(term(Number(3, 4)), Undefined)
def const_test(): x = Symbol("x") y = Symbol("y") assert_equal(const(x), Number(1)) assert_equal(const(1 + x), Number(1)) assert_equal(const(y + x), Number(1)) assert_equal(const(x ** 3), Number(1)) assert_equal(const(sin(x)), Number(1)) assert_equal(const(6 * x * 3), Number(18)) assert_equal(const(10 * x * y), Number(10)) assert_equal(const(x * y), Number(1)) assert_is_instance(const(Number(7)), Undefined) assert_is_instance(const(Number(1, 4)), Undefined)
def is_polynomial_gpe_test(): assert_equal(is_polynomial_gpe(a+b, {a+b}), True) assert_equal(is_polynomial_gpe(x**Number(2)+y**Number(2), {x, y}), True) assert_equal(is_polynomial_gpe(sin(x)**Number(2) + Number(2)*sin(x) + Number(3), sin(x)), True) assert_equal(is_polynomial_gpe(x/y + Number(2)*y, {x,y}), False) assert_equal(is_polynomial_gpe((x+Number(1))*(x+Number(3)), x), False)