There is also is_Number vs is_number. There is also is_comparable which
means can be evalf'd to a real number.

There should be a glossary of all the different attributes that are used
throughout sympy:

In [*1*]: *for* name *in* dir(x):

   ...:     *if* name.startswith('is'):

   ...:         print(name)

   ...:

is_Add

is_AlgebraicNumber

is_Atom

is_Boolean

is_Derivative

is_Dummy

is_Equality

is_Float

is_Function

is_Indexed

is_Integer

is_MatAdd

is_MatMul

is_Matrix

is_Mul

is_Not

is_Number

is_NumberSymbol

is_Order

is_Piecewise

is_Point

is_Poly

is_Pow

is_Rational

is_Relational

is_Symbol

is_Vector

is_Wild

is_algebraic

is_algebraic_expr

is_antihermitian

is_commutative

is_comparable

is_complex

is_composite

is_constant

is_even

is_extended_negative

is_extended_nonnegative

is_extended_nonpositive

is_extended_nonzero

is_extended_positive

is_extended_real

is_finite

is_hermitian

is_hypergeometric

is_imaginary

is_infinite

is_integer

is_irrational

is_meromorphic

is_negative

is_noninteger

is_nonnegative

is_nonpositive

is_nonzero

is_number

is_odd

is_polar

is_polynomial

is_positive

is_prime

is_rational

is_rational_function

is_real

is_scalar

is_symbol

is_transcendental

is_zero



On Mon, 13 Sept 2021 at 18:56, Aaron Meurer <[email protected]> wrote:

> 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
> .
>

-- 
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/CAHVvXxQeJ8eOdCpSKsiAXPjZKrd_jS2WRmfLdZS_Drjm377L5g%40mail.gmail.com.

Reply via email to