Nico Schlömer
Nico Schlömer

Reputation: 58791

Sympy: Get functions from expression

To get all variables from a sympy expression, one can call .free_symbols on the expression. I would like to retrieve all functions used in an expression. For example, from y in

from sympy import *

f = Function('f')
g = Function('g')

x = Symbol('x')

y = f(x) + 2*g(x)

I'd like to get f and g.

Any hints?

Upvotes: 5

Views: 918

Answers (2)

asmeurer
asmeurer

Reputation: 91490

For all functions, use atoms(Function).

In [40]: (f(x) + sin(x)).atoms(Function)
Out[40]: set([f(x), sin(x)])

For only undefined functions, use atoms(AppliedUndef).

In [41]: from sympy.core.function import AppliedUndef

In [42]: (f(x) + sin(x)).atoms(AppliedUndef)
Out[42]: set([f(x)])

Upvotes: 5

Nico Schlömer
Nico Schlömer

Reputation: 58791

atoms does the trick:

for f in y.atoms(Function):
    print(f.func)

Upvotes: 7

Related Questions