On Wed, 19 May 2021 at 07:41, Martin Teichmann
<martin.teichm...@gmail.com> wrote:

> that worked well, but actually we would like to write the last line simply as
>
>     >>> solve(x**2 == 1/2)
>
> as you might notice, this is fully legal Python syntax. Unfortunately the 
> semantics is such that sympy has no way to determine what is actually going 
> on, this is why they invented all those helper functions shown above.

It's almost possible to do this right now. Using the compiler and ast
module, you can write a version of solve that works like

    >>> solve("x**2 == 1/2")

You have to quote the argument, and yes that probably means your
editor/IDE won't help you as much with the expression syntax, but
otherwise this could be made to work exactly as you want with no
language changes.

People don't often do this, so presumably there's a reason people
don't like having to quote "stuff that's basically Python code". But
it *is* technically possible.

> My idea is now to start at the line above, "x = symbols('x')". I propose a 
> new syntax, "symbolic x", which tells the parser that x is a symbolic 
> variable, and expressions should not be executed, but handed over as such to 
> the calling functions. To stay with the example, the code would look like 
> this (this is fake, I did not prototype this yet):
>
>     >>> from sympy import solve
>     >>> symbolic x
>     >>> solve(x**2 == 1/2)
>     [-sqrt(2)/2, sqrt(2)/2]
>
> Now to the details.

Before you get to details of implementation, you should explain:

1. Why sympy doesn't have a solve("x**2 == 1/2") function taking a
string like I described above? Why isn't that a good solution here?
2. Why new syntax is any more likely to be useful for sympy than a
string-based function.

The barrier for language changes, and in particular new syntax, is
high (as you've discovered). So proposals need to be pretty thorough
in examining ways to solve a problem within the existing language
before proposing a new language feature. Particularly if the feature
is focused on improving things just for a subset of the Python user
base.

You really should look at the history of the matrix multiplication
operator in Python - start with PEP 465,
https://www.python.org/dev/peps/pep-0465/, but look back at the
history of all the proposals that *didn't* work leading up to that -
to get a feel for how much work it needs to get a feature focused on
the needs of a specialist community into the core language. And as
others have pointed out, symbolic maths and sympy is nowhere near as
big an audience as the numeric community.

Paul
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/VNEVTZ5NSLTFNMUMWDQMVIOG5CX5PYML/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to