def test_extract_funcs(self): cases = [('g(x)', [('g', 1)]), ('f(g(x))', [('f', 1), ('g', 1)]), ('f(g(x)/2, a, b(x, y))', [('f', 3), ('g', 1), ('b', 2)]), ('a + g(x)', [('g', 1)]), ('a + g(x) + (a + f(x))', [('f', 1), ('g', 1)]), ('f(g(1 + h(a))/2) + j(q**k(x)) + q.r[1] + s[1]', [('f', 1), ('g', 1), ('h', 1), ('j', 1), ('k', 1)]), ('(g(x) + 2)**f(y)', [('f', 1), ('g', 1)]), ('g(x)**f(y)', [('f', 1), ('g', 1)]), ('g(x) > f(y)', [('f', 1), ('g', 1)]), ('g(x) and f(y)', [('f', 1), ('g', 1)]), ('g(x) and not f(y)', [('f', 1), ('g', 1)])] for expr, funcs in cases: assert ExprManip.extract_funcs(expr) == set(funcs)