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/CAKgW%3D6JPWqzeaC16GTx%2BaaLrxKDHdjz5qYW6dKASffZBVTmeLw%40mail.gmail.com.