The documentation for  isympy mode is not good. When I search the sympy 
docs I find this
https://docs.sympy.org/latest/modules/interactive.html. I am do not find 
anything about the -i option on this page.

A general web search turns up this old command line doc which also does not 
document the -i option. The only thing that is clear is some predefined 
symbols and automatic symbol creation.
https://www.mankier.com/1/isympy
None of the other links from the search are any better.

It looks like isympy is close to the sensible convenience mode I am 
suggesting. However, it needs to be identified and documented much more 
clearly. It probably should be in the introductory material.

>I normally use sympy through the command line isympy interface which 
is a wrapper around ipython that provides an environment automatically 
set up for using sympy. I don't use this myself but isympy has a -i 
flag to interpret integer literals as sympy Integers (and therefore 
integer division as rational division): 

>$ isympy -i 

On Monday, July 3, 2023 at 8:44:07 AM UTC-5 [email protected] wrote:

> David,
>
> I want to make sure I understand the behavior you would prefer, because I 
> think I can implement it in algebra-with-sympy 
> <https://gutow.github.io/Algebra_with_Sympy/algebra_with_sympy.html>. The 
> package already does some pre-parsing, so I think I could handle it there.
>
> Here is what I think you are asking for:
> 1. Any number that is not in scientific notation and does not contain a 
> decimal point would be considered an integer and be converted to S().
> 2. All other numerical values would be treated as they normally are.
>
> Is that all you are asking for or do you need something more sophisticated?
>
> As more of these usage questions come up, I am beginning to wonder if 
> sympy needs an interactive mode that implements sensible/useful extensions 
> and defaults that would get in the way of sympy's use as a symbolic 
> manipulation back-end? The idea would be to have these features only turned 
> on in the interactive mode.
>
> Jonathan
>
> On Monday, July 3, 2023 at 7:25:00 AM UTC-5 Oscar wrote:
>
>> On Mon, 3 Jul 2023 at 00:16, David Bailey <[email protected]> wrote: 
>> > 
>> > On 02/07/2023 23:44, Oscar Benjamin wrote: 
>> > > On Sun, 2 Jul 2023 at 23:06, David Bailey <[email protected]> 
>> wrote: 
>> > >> Dear Group, 
>> > >> 
>> > >> If I want to enter m+1/2, I define m as a symbol and write: 
>> > >> 
>> > >> m+S(1)/2. 
>> > >> 
>> > >> However if I have a complicated expression with lots of fractions, 
>> such as: 
>> > >> 
>> > >> 1 + x*(m + 1/2)/(2*m + 1) + x**2*(m + 1/2)*(m + 3/2)/(2*(2*m + 
>> 1)*(2*m + 2)) 
>> > >> 
>> > >> it would be much neater if I could automatically wrap all the 
>> integers 
>> > >> in S so that no floating point numbers get introduced. 
>> > >> 
>> > >> Is that feasible? I did try wrapping the whole expression in S, but 
>> that 
>> > >> does not work. 
>> > > You can wrap the whole expression in nsimplify: 
>> > > 
>> > > >>> e = 1 + x*(m + 1/2)/(2*m + 1) + x**2*(m + 1/2)*(m + 3/2)/(2*(2*m 
>> > > + 1)*(2*m + 2)) 
>> > > >>> print(e) 
>> > > x**2*(m + 0.5)*(m + 1.5)/((2*m + 2)*(4*m + 2)) + x*(m + 0.5)/(2*m + 
>> 1) + 1 
>> > > >>> print(nsimplify(e)) 
>> > > x**2*(m + 1/2)*(m + 3/2)/((2*m + 2)*(4*m + 2)) + x*(m + 1/2)/(2*m + 
>> 1) + 1 
>> > > 
>> > > The nsimplify function will attempt to guess what rational number a 
>> > > float represents. In your example this is easy because all floats are 
>> > > exactly represented in binary (having only twos in the denominator) 
>> > > but otherwise the conversion can be inexact: 
>> > > 
>> > > >>> f = 1/3 
>> > > >>> f 
>> > > 0.3333333333333333 
>> > > >>> print(Rational(f)) # exact value of the binary float 
>> > > 6004799503160661/18014398509481984 
>> > > >>> nsimplify(f) # probably the value that the float was intended to 
>> have 
>> > > 1/3 
>> > > 
>> > Thanks Oscar for that incredibly fast reply, but I'm not super keen on 
>> > algebra that is only probably correct! 
>>
>> Agreed but that means that you need to avoid creating floats in the 
>> first place. Many users find it awkward to do this and prefer to use 
>> nsimplify. 
>>
>> Another option is to call S with a string:: 
>>
>> In [27]: s = '1 + x*(m + 1/2)/(2*m + 1) + x**2*(m + 1/2)*(m + 
>> 3/2)/(2*(2*m + 1)*(2*m + 2))' 
>>
>> In [28]: print(S(s)) 
>> x**2*(m + 1/2)*(m + 3/2)/((2*m + 2)*(4*m + 2)) + x*(m + 1/2)/(2*m + 1) + 
>> 1 
>>
>> -- 
>> Oscar 
>>
>

-- 
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/a57a393f-97e1-4cba-8699-6e7725e22c4an%40googlegroups.com.

Reply via email to