This would be a good thing to have some standalone documentation on. There are also some related things like the functionality that is used by diff() to determine what can be used as a differentiation variable, which is a little more complex than just free_symbols in general because you can have things like derivatives with respect to indexed expressions.
Aaron Meurer On Mon, Sep 13, 2021 at 11:48 AM Chris Smith <[email protected]> wrote: > > > can be evalf'ed > > That's a clear and good reminder. > > /c > > On Monday, September 13, 2021 at 12:10:50 PM UTC-5 [email protected] wrote: >> >> is_number means "can be evalf'ed". So for example, we have the following >> >> >>> f = Function('f') >> >>> f(0).is_number >> False >> >>> f(0).free_symbols >> set() >> >> So you should use is_number specifically if you are checking if you >> can evaluate the expression to a literal number. >> >> Aaron Meurer >> >> On Mon, Sep 13, 2021 at 10:21 AM Paul Royik <[email protected]> wrote: >> > >> > Thanks to everybody! >> > >> > On Monday, September 13, 2021 at 3:56:47 PM UTC+3 Oscar wrote: >> >> >> >> Think about things that are literally not numbers: >> >> >> >> In [9]: Interval(1, 2).is_number >> >> Out[9]: False >> >> >> >> In [10]: ImmutableMatrix([[1, 2], [3, 4]]).is_number >> >> Out[10]: False >> >> >> >> >> >> On Mon, 13 Sept 2021 at 13:00, Chris Smith <[email protected]> wrote: >> >>> >> >>> To confirm, if you mean that it is free from any Symbol (free or bound) >> >>> then `not expr.has(Symbol)` will be best. But if you consider >> >>> `Integral(x, (x, 1, 2))` as a number then you should use `is_number` or >> >>> `free_symbols`, with `expr.is_number` failing sooner than `not >> >>> expr.free_symbols` if the expression has a free symbol. (So if you >> >>> suspect the expression has free symbols then use `is_number`, else >> >>> `free_symbols`). >> >>> >> >>> `f.is_number != (not bool(f.free_symbols))` should be an invariant for >> >>> Expr, but SymPy also deals with Booleans, so `S.true.is_number` is False >> >>> and `S.true.free_symbols` is empty. >> >>> >> >>> /c >> >>> >> >>> On Sunday, September 12, 2021 at 11:56:23 PM UTC-5 [email protected] >> >>> wrote: >> >>>> >> >>>> Are there any cases when f.is_number != (not bool(f.free_symbols))? >> >>>> >> >>>> If I have an arbitrary expression, what is the correct way to check >> >>>> whether it has variables? >> >>>> >> >>>> Thank you. >> >>> >> >>> -- >> >>> You received this message because you are subscribed to the Google >> >>> Groups "sympy" group. >> >>> To unsubscribe from this group and stop receiving emails from it, send >> >>> an email to [email protected]. >> >>> To view this discussion on the web visit >> >>> https://groups.google.com/d/msgid/sympy/9af46205-ce22-494c-a604-c27b6682fa96n%40googlegroups.com. >> > >> > -- >> > You received this message because you are subscribed to the Google Groups >> > "sympy" group. >> > To unsubscribe from this group and stop receiving emails from it, send an >> > email to [email protected]. >> > To view this discussion on the web visit >> > https://groups.google.com/d/msgid/sympy/8717be3c-0286-4741-900c-94e21573f3c5n%40googlegroups.com. > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/69d8097b-b81b-4490-ae85-0dbb946346c1n%40googlegroups.com. -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CAKgW%3D6LOouUDFL9eooBukJz5G%2BSSMOoFWkVBLvwbqjrbduSjkA%40mail.gmail.com.
