On Sat, Nov 12, 2011 at 2:04 PM, [email protected]
<[email protected]> wrote:
>
>
> On 12 November 2011 20:43, Aaron Meurer <[email protected]> wrote:
>>
>> On Fri, Nov 11, 2011 at 4:25 PM, [email protected]
>> <[email protected]> wrote:
>> >
>> >
>> > On 11 November 2011 23:31, Aaron Meurer <[email protected]> wrote:
>> >>
>> >> On Fri, Nov 11, 2011 at 2:13 PM, [email protected]
>> >> <[email protected]> wrote:
>> >> > Hi
>> >> >
>> >> > I'm a bit ashamed that Aaron gave better introduction than me for my
>> >> > own
>> >> > code :)
>> >> > Anyway, I think the documentation of Plot and the module is quite
>> >> > detailed
>> >> > so you can look also at help(Plot) anhelp(newplot).
>> >> >
>> >> > About the warnings - my idea was to structure the base backend class
>> >> > in
>> >> > such
>> >> > a way that any missing functionality in the backend subclass will
>> >> > just
>> >> > raise
>> >> > a warning but not an error (unless it is some essential
>> >> > functionality).
>> >> > So
>> >> > those will be addressed later.
>> >> >
>> >> > It can plot Integrals (due to an old addition done to lambdify thanks
>> >> > to
>> >> > Certik) but not Sums or anything fancy like product of Kets and Bras.
>> >> > To
>> >> > do
>> >> > those a more in depth refactoring of lambda will be needed as
>> >> > Certik's
>> >> > method for adding Integral to lambdify does not scale well. I think
>> >> > this
>> >> > is
>> >> > an important problem.
>> >>
>> >> I agree.  Is there an issue for this?
>> >
>> > No issue for the moment. I take responsibility for creating one when I
>> > gather enough understanding of the code and the problem.
>> >>
>> >> >
>> >> > Discontinuous functions may pose problems for the moment (none seen
>> >> > for
>> >> > the
>> >> > moment, but this is mostly by chance).
>> >>
>> >> As far as I can tell, this is a nontrivial problem to solve, as many
>> >> very good plotting systems choke on discontinuous functions.  Perhaps
>> >> there can be some kind of symbolic heuristic applied to find
>> >> discontinuities.
>> >
>> > I think Maple has some option in its plotting module about detecting
>> > asymptotes (numerically?) but I can not check it at the moment. Anyhow,
>> > this
>> > is not the most important feature at the moment.
>> >>
>> >> >
>> >> > About the bug in matplotlib - Aaron, you said that you will make a
>> >> > pull
>> >> > request for them. Should I do something or you have already taken
>> >> > care
>> >> > of
>> >> > this.
>> >>
>> >> Sorry for the misunderstanding, but this is not what I said.  I was
>> >> suggesting to you that you do it.  I haven't even been able to
>> >> reproduce the bug you are seeing, so I can't even tell with certainty
>> >> what the correct fix is.
>> >
>> > I'm sorry :D (my mistake). I'll do it.
>> >>
>> >> >
>> >> > I'll start writing tests for the module in the near future. Then the
>> >> > core
>> >> > devs should tell me if this code is going in and how.
>> >>
>> >> I definitely think it should go in.  I guess the question is how to
>> >> properly replace/merge it with the old module, which isn't compatible
>> >> (it uses different syntax, keywords, etc.)
>> >>
>> >> Actually, to what degree is the new Plot() function incompatible with
>> >> the old one?  Would it be possible to merge the two without breaking
>> >> compatibility with the old module?
>> >
>> > There are some things about the api of the old module that I don't like,
>> > but
>> > I'll check if there is a compromise that can be made. I understand the
>> > importance of not breaking the api.
>>
>> What are these specifically.  Is it possible to support both APIs at
>> the same time, while deprecating the old one, r would they have to be
>> completely different functions to prevent ambiguous input?
>
>
> About the parts that I don't like: Using a big string for all the options
> and the possibility to use an arbitrary big index when adding new plot.
> That's all, I think. Those two (especially the first one) would be difficult
> to support.
>
> About supporting both apis - I think it's possible. For example: when there
> is an ambiguity it will default to the old module, and when it is using the
> old module it will raise a deprecation warning. All this will be done from a
> proxy class Plot that is in sympy.plotting. The old module will be in
> sympy.plotting.pyglet. The deprecation warning will read:

Actually, I think it may be cleaner to just create plot(), which uses
the new module, and lave Plot alone (if the user wants the new Plot(),
they can import it from the new module).

>
> "To use directly the pyglet module do: from sympy.plotting.pyglet import
> PygletPlot. To use exclusively the new module (that has pyglet as one of the
> possible backends) do: from sympy.plotting.future import Plot".
>
> If this is ok, I'll do it in my pull request.

I think it sounds OK.  How does it fit in with my idea above?

>
> And the old module needs only to be moved, not removed (and a backend for it
> needs to be written, but that would take under 2 hours (under a day or two
> for a CGI student)).

Feel free to add a CodeIn issue for it. Can you add labels to issues
in the tracker?  There seems to be some bug in the admin interface
right now, so if you can't, I'll add you as a project member as soon
as it's fixed. Note that it should really only be a task if you have
finished enough that it is clear what the student needs to do, but we
can always add in the second round of tasks in December if it's too
early now.

>
> One big advantage (the only one) of the old module over matplotlib is that
> it does all in OpenGL so you can turn the graph in realtime (imagine a
> teacher showing a hydrogen orbital in front of the class, matplotlib is not
> fast enough).
>
>>
>> Also, even if you don't plan to have this ready by the next release,
>> we can start deprecating the old module now.
>
>
> I suppose that a warning wont hurt.
>
>>
>> The differences that I've noticed are that with the new module, you
>> have to specify a variable and range (but assumedly, this will be
>> relaxed at some point?), and that you have to call p.show() to
>> actually see the plot.  One idea regarding the last point would be to
>> create a function plot() (lowercase) which automatically shows the
>> plot, which would be used for quick plotting, and then leave Plot()
>> for more advanced plots.
>>
> About the variable with range: I was not thinking about relaxing the
> requirement, but I suppose it would be a wanted feature. I'll write some
> code for it. Maybe only in the plot() function (lower case). And yes, I
> agree that a plot() function will be a good idea.

Yes, putting it only in plot() sounds good to me.

Aaron Meurer

>
>>
>> Aaron Meurer
>>
>> >
>> > But I was thinking it would be best to have both modules and then a
>> > backend
>> > for the old module in the new module. And maybe move the old module to
>> > plotting.oldplot or leave the new module in plotting.newplot.
>> >>
>> >> >
>> >> > About the '3d' string - you are right it's a bad default. It's just
>> >> > that
>> >> > contour was written first, but I'll change this now.
>> >>
>> >> Cool.  By the way, will it be possible in the future to call something
>> >> like p.change_plot_type('contour') (only with a better name than that
>> >> :) and it will change it from 3d to a contour?
>> >
>> > At the moment 3dsurface (not parametric) and contour are represented by
>> > different classes. It makes sense to merge them and add an option
>> > (actually
>> > there is a repetition of code at the moment). It would be something
>> > like:
>> > p = Plot(blah blah)
>> > p[0].visualisation_method = '3d' or 'contour'
>> > the name of the attribute may be other ('plot_type', 'projection', ...)
>> >>
>> >> >
>> >> > Finally - I was squashing and rebasing this pull request quite a bit.
>> >> > Now as
>> >> > it's getting more attention I'll stop doing it, so you are free to
>> >> > make
>> >> > changes if you are interested.
>> >>
>> >> Great.  This makes it easier to follow your progress.
>> >>
>> >> Aaron Meurer
>> >>
>> >> >
>> >> > On 11 November 2011 21:41, Aaron Meurer <[email protected]> wrote:
>> >> >>
>> >> >> Oh, I forgot to mention that I got the following warnings:
>> >> >>
>> >> >> In [6]: p = Plot(Heaviside(x)*(1 - x)*sin(y), (x, -1, 1), (y, -pi,
>> >> >> pi))
>> >> >>
>> >> >> In [7]: p.show()
>> >> >> /sw/lib/python2.7/site-packages/matplotlib/axes.py:4368:
>> >> >> UserWarning:
>> >> >> No labeled objects found. Use label='...' kwarg on individual plots.
>> >> >>  warnings.warn("No labeled objects found. "
>> >> >>
>> >> >> In [8]: p = Plot(Heaviside(x)*(1 - x)*sin(y), (x, -1, 1), (y, -pi,
>> >> >> pi),
>> >> >> '3d')
>> >> >>
>> >> >> In [9]: p.show()
>> >> >>
>> >> >>
>> >> >>
>> >> >> /Users/aaronmeurer/Documents/python/sympy/sympy/sympy/plotting/newplot.py:901:
>> >> >> UserWarning: xscale is not supported in 3D matplotlib backend.
>> >> >>  warnings.warn('xscale is not supported in 3D matplotlib backend.')
>> >> >>
>> >> >>
>> >> >>
>> >> >> /Users/aaronmeurer/Documents/python/sympy/sympy/sympy/plotting/newplot.py:879:
>> >> >> UserWarning: axis_center is not supported in 3D matplotlib backend.
>> >> >>  warnings.warn('axis_center is not supported in 3D matplotlib
>> >> >> backend.')
>> >> >>
>> >> >>
>> >> >>
>> >> >> /Users/aaronmeurer/Documents/python/sympy/sympy/sympy/plotting/newplot.py:895:
>> >> >> UserWarning: xscale is not supported in 3D matplotlib backend.
>> >> >>  warnings.warn('xscale is not supported in 3D matplotlib backend.')
>> >> >>
>> >> >> Aaron Meurer
>> >> >>
>> >> >> On Fri, Nov 11, 2011 at 1:39 PM, Aaron Meurer <[email protected]>
>> >> >> wrote:
>> >> >> > Hi.
>> >> >> >
>> >> >> > This looks great.  For others, to run the examples, download the
>> >> >> > examples script and put in the sympy directory.  Then, checkout
>> >> >> > Krastanov's branch (from the pull request). Then, run IPython, and
>> >> >> > type %run examples.py.  And then type p0.show(), p1.show(), etc.
>> >> >> > (up
>> >> >> > to p4).
>> >> >> >
>> >> >> > And if you just want to test the plotting of your own functions in
>> >> >> > isympy, you have to run "from sympy.plotting.newplot import *", or
>> >> >> > else it will use the old plotting.  The syntax is
>> >> >> >
>> >> >> > In [8]: p = Plot(Heaviside(x)*(1 - x)*sin(y), (x, -1, 1), (y, -pi,
>> >> >> > pi),
>> >> >> > '3d')
>> >> >> >
>> >> >> > In [9]: p.show()
>> >> >> >
>> >> >> > (if you don't add '3d' in this case, it will default to a contour
>> >> >> > plot, which btw is maybe not the best default)
>> >> >> >
>> >> >> > Aaron Meurer
>> >> >> >
>> >> >> > On Fri, Nov 11, 2011 at 7:46 AM, [email protected]
>> >> >> > <[email protected]> wrote:
>> >> >> >> The proposal that I made in
>> >> >> >> https://github.com/sympy/sympy/pull/673
>> >> >> >> may
>> >> >> >> or
>> >> >> >> may not became part of sympy but I like it and it's already quite
>> >> >> >> useful for
>> >> >> >> me.
>> >> >> >>
>> >> >> >> Here are some examples. I would like to know what do you think.
>> >> >> >> The
>> >> >> >> 3d
>> >> >> >> stuff
>> >> >> >> runs only on the latest version of matplotlib _after_ fixing a
>> >> >> >> bug
>> >> >> >> (mentioned in the commit history, but those will be squashed
>> >> >> >> soon).
>> >> >> >
>> >> >> > I didn't have any problems with it, though you do seem to have
>> >> >> > found
>> >> >> > a
>> >> >> > bug in matplotlib.  I would submit a pull request to them fixing
>> >> >> > it.
>> >> >> >
>> >> >> > Aaron Meurer
>> >> >> >
>> >> >> >>
>> >> >> >> The script to produce them is also attached (as the api is
>> >> >> >> probably
>> >> >> >> more
>> >> >> >> important than the visuals (the _series[index] stuff is just a
>> >> >> >> workaround
>> >> >> >> until getters are written)).
>> >> >> >>
>> >> >> >> Regards
>> >> >> >> Stefan
>> >> >> >>
>> >> >> >> --
>> >> >> >> You received this message because you are subscribed to the
>> >> >> >> Google
>> >> >> >> Groups
>> >> >> >> "sympy" group.
>> >> >> >> To post to this group, send email to [email protected].
>> >> >> >> To unsubscribe from this group, send email to
>> >> >> >> [email protected].
>> >> >> >> For more options, visit this group at
>> >> >> >> http://groups.google.com/group/sympy?hl=en.
>> >> >> >>
>> >> >> >
>> >> >>
>> >> >> --
>> >> >> You received this message because you are subscribed to the Google
>> >> >> Groups
>> >> >> "sympy" group.
>> >> >> To post to this group, send email to [email protected].
>> >> >> To unsubscribe from this group, send email to
>> >> >> [email protected].
>> >> >> For more options, visit this group at
>> >> >> http://groups.google.com/group/sympy?hl=en.
>> >> >>
>> >> >
>> >> > --
>> >> > You received this message because you are subscribed to the Google
>> >> > Groups
>> >> > "sympy" group.
>> >> > To post to this group, send email to [email protected].
>> >> > To unsubscribe from this group, send email to
>> >> > [email protected].
>> >> > For more options, visit this group at
>> >> > http://groups.google.com/group/sympy?hl=en.
>> >> >
>> >>
>> >> --
>> >> You received this message because you are subscribed to the Google
>> >> Groups
>> >> "sympy" group.
>> >> To post to this group, send email to [email protected].
>> >> To unsubscribe from this group, send email to
>> >> [email protected].
>> >> For more options, visit this group at
>> >> http://groups.google.com/group/sympy?hl=en.
>> >>
>> >
>> > --
>> > You received this message because you are subscribed to the Google
>> > Groups
>> > "sympy" group.
>> > To post to this group, send email to [email protected].
>> > To unsubscribe from this group, send email to
>> > [email protected].
>> > For more options, visit this group at
>> > http://groups.google.com/group/sympy?hl=en.
>> >
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "sympy" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected].
>> For more options, visit this group at
>> http://groups.google.com/group/sympy?hl=en.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "sympy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/sympy?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to