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.

Reply via email to