I think it looks good so far. I like how you cleanly organized your
pull requests. That helps a lot.

My comments:

- I'm putting this up front because I think it's the most important
point. I feel that you are only addressing half of the issue at
https://github.com/sympy/sympy/issues/6659, namely the output format
of solve. What about the input API? Here is the parameter list for
solve() (I had to construct this manually from the docstring since the
code uses **kwargs):

solve(f, *symbols, dict=False, set=False, exclude=(), check=True,
numerical=True, minimal=False, warning=False, simplify=True,
force=False, rational=True, manual=False, implicit=False,
minimal=False, quick=False)

That's assuming there aren't any undocumented parameters.

And don't get me started on the mess of linear equation solving
functions. We probably have a dozen functions that solve linear
equations or systems of linear equations (see some of the discussion
at https://github.com/sympy/sympy/pull/2580).

I like that you're adding new stuff and cleaning up the output API,
but you should think about how to clean up the input API as well.

- Your example

In[]: soln = solve(sin(x)*sin(y), (x, y), input_set = Interval(0,
4)*Interval(0, 4))

is a bit confusing to me. The input_set argument gives a 2-dimensional
set, but how are you to know which axis is x and which is y?

- You talk a lot about using sets, which I think is a good idea. But
you should think about how you can also use the assumptions. Maybe
there is a clean way that we can go back and forth between assumptions
and sets that requires minimal code duplication, and also allows each
to take advantage of the algorithms implemented in the other (by the
way, when I say assumptions, you should probably only worry about the
new assumptions, i.e., the stuff in the Q object).

- Your section on singularities doesn't really make it clear why we
need the solvers to be improved to do this, namely, that we need to
know exactly when we have all the solutions to not get wrong results.

- How will we handle that situation (finding all solutions)? What if
we can't say anything? Can we still represent objects in such a way
that it is not wrong (basically by somehow saying, "here are 'some' of
the solutions, but maybe not all of them", and ditto for anything that
uses solve, like singularities)? Maybe Piecewise is sufficient
somehow?

- I'm glad to see you are working on improving the simplicity of the
results of solve, such as radical denesting. A potential
simplification routine uses minpoly() on an algebraic expression and
then uses solve to find a simpler solution, but this relies on the
results of solve being simple.  Do the radical denesting algorithms
work with symbolic entries as well?

- Did you plan to add any new solvers? I think there are still quite a
few cases that we can't solve. Some higher degree irreducible
polynomials for instance (not all higher degree polynomials are
solvable by radicals but some are). There will also be a lot to
implement once we are able to even represent the solutions to
sin(x)=0.

Aaron Meurer

On Tue, Mar 11, 2014 at 8:40 AM, Harsh Gupta <gupta.hars...@gmail.com> wrote:
> Hi, I have put my the first draft of the proposal on the sympy wiki.
>
> https://github.com/sympy/sympy/wiki/GSoC-2014-Application-Harsh-Gupta:-Solvers
>
> Please have a look, your suggestions will be valuable.
>
> On 22 February 2014 01:27, Harsh Gupta <gupta.hars...@gmail.com> wrote:
>> I realize that there is less than a month left for the application
>> deadline and it has already been a month since I posted this thread.
>> So, I need to come up with design details fast. I have written some
>> details about using sets as output for solvers in this PR
>> https://github.com/sympy/sympy/pull/2948/files. PR because I feel it
>> is better platform to facilitate this discussion than the mailing
>> list. Please have a look.
>>
>> On 16 February 2014 07:15, Jigar Mistry <jigarmistr...@gmail.com> wrote:
>>> i am also interested in solvers module. how can i contribute to simpy using
>>> this solvers module.Plz help me....
>>>
>>>
>>> On Tuesday, 21 January 2014 16:25:13 UTC+5:30, Harsh Gupta wrote:
>>>>
>>>> Hi, I'm Harsh Gupta I will be GSOC applicant this year. I want to discuss
>>>> the solvers idea given on the Idea's
>>>> page.https://github.com/sympy/sympy/wiki/GSoC-2014-Ideas#solvers
>>>>
>>>> Some of the aspect of the idea are discussed at
>>>> https://groups.google.com/forum/?fromgroups=#!starred/sympy/8TM8cnuzkG8.
>>>>
>>>>
>>>> Aaron Meurer said:
>>>>
>>>>> I think with TransformationSet we can do quite a bit. That handles
>>>>> sets like {f(x) | x in A}. I think what is missing is the basic set
>>>>> builder {x | P(x)}, where P(x) is a boolean predicate.
>>>>
>>>>
>>>>
>>>> Matthew Rocklin said:
>>>>
>>>>>> > Real issue here - how to represent some solutions (e.g. sin(x)==0).
>>>>>
>>>>> In sets we would represent this with
>>>>> In [1]: imageset(k, pi*k, S.Integers)
>>>>> Out[1]: {π⋅k | k ∊ ℤ}
>>>>
>>>>
>>>> Implementing a general set builder will be very useful, we will need to
>>>> define basic set operations like union
>>>> and intersection on them. We might use a syntax like `BuildSet(expr,
>>>> sym_in_inputset, cond)`
>>>>
>>>> In [1]: BuildSet(pi*k, (k, S.Integers), True).intersect(0, 10)
>>>> Out[1]: {pi, 2*pi, 3*pi}
>>>>
>>>>
>>>> Matthew Rocklin said:
>>>>
>>>>> It sounds like maybe solve should return a Set.
>>>>
>>>>
>>>> I think it will be necessary to return set if we want to represent the
>>>> solution of expressions like `floor(x) - 5`.
>>>> See https://code.google.com/p/sympy/issues/detail?id=3975.
>>>> One problem I see with returning sets is that it can break a lot of
>>>> existing code.
>>>>
>>>>
>>>> As mentioned in the idea page we need to have a method to check if solve
>>>> returns all the solutions. For polynomials or expressions which are
>>>> solved by converting to polynomials we can compare the degree of the
>>>> polynomial to the number of solutions returned.
>>>>
>>>> Other method can be verifying the number of the solutions by using the
>>>> derivative of the function. Say we are given a *continuous* and
>>>> *differentiable*  function f(x) and it's derivative w.r.t x is g(x),
>>>> then if g(x) has n solutions then f(x) cannot have more than n + 1
>>>> solutions. So, if the solve returns n + 1 solutions for f(x) then we are
>>>> guaranteed that we have found all the solutions.
>>>> For this we will need a discontinuity finder and we will also have to make
>>>> sure that we have found all the solutions for g(x), i.e., the derivative of
>>>> f(x), which can be done recursively or by using other methods.
>>>>
>>>> A third way can be using numerical solver. Say we use solve to find the
>>>> solution of f(x) for some interval [a, b] then we can also run the 
>>>> numerical
>>>> solver for f(x) on [a, b]
>>>> if the number of solutions by numerical solver and symbolic solve matches
>>>> then we can be pretty sure that we have found out all the solutions of f(x)
>>>> in [a, b].
>>>>
>>>> --
>>>> Harsh
>>>
>>> --
>>> 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 sympy+unsubscr...@googlegroups.com.
>>> To post to this group, send email to sympy@googlegroups.com.
>>> Visit this group at http://groups.google.com/group/sympy.
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>>
>>
>> --
>> Harsh
>
>
>
> --
> Harsh
>
> --
> 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 sympy+unsubscr...@googlegroups.com.
> To post to this group, send email to sympy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sympy.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sympy/CADN8iuohUoie3-eQHG5C_%2BEtKsfs%2BJ%2Bk2P-_DdLMPSBbLtXXDA%40mail.gmail.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
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 sympy+unsubscr...@googlegroups.com.
To post to this group, send email to sympy@googlegroups.com.
Visit this group at http://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/CAKgW%3D6KJVcvAhtX0iXPN%3DRy9DVrt642KmXLkAxLSxMDpNy5jiA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to