On 12 November 2011 22:46, Aaron Meurer <asmeu...@gmail.com> wrote:

> On Sat, Nov 12, 2011 at 2:04 PM, krastanov.ste...@gmail.com
> <krastanov.ste...@gmail.com> wrote:
> >
> >
> > On 12 November 2011 20:43, Aaron Meurer <asmeu...@gmail.com> wrote:
> >>
> >> On Fri, Nov 11, 2011 at 4:25 PM, krastanov.ste...@gmail.com
> >> <krastanov.ste...@gmail.com> wrote:
> >> >
> >> >
> >> > On 11 November 2011 23:31, Aaron Meurer <asmeu...@gmail.com> wrote:
> >> >>
> >> >> On Fri, Nov 11, 2011 at 2:13 PM, krastanov.ste...@gmail.com
> >> >> <krastanov.ste...@gmail.com> 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).
>

Ok.


> >
> > "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?
>

Next release:
from sympy.plotting import plot # the function you proposed
from sympy.plotting import Plot # the old Plot with added deprecation
warning
from sympy.plotting.newplot import Plot # the new Plot
No complicated proxy object

Next release +1:
the old Plot is moved to plotting.pyglet and the new Plot takes it's place


>
> >
> > 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.
>
>
I suppose it's best to leave it for December. I can add the appropriate
labels.

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

Ok.


> 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 <asmeu...@gmail.com>
> 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 <asmeu...@gmail.com
> >
> >> >> >> 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, krastanov.ste...@gmail.com
> >> >> >> > <krastanov.ste...@gmail.com> 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 sympy@googlegroups.com.
> >> >> >> >> To unsubscribe from this group, send email to
> >> >> >> >> sympy+unsubscr...@googlegroups.com.
> >> >> >> >> 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 sympy@googlegroups.com.
> >> >> >> To unsubscribe from this group, send email to
> >> >> >> sympy+unsubscr...@googlegroups.com.
> >> >> >> 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 sympy@googlegroups.com.
> >> >> > To unsubscribe from this group, send email to
> >> >> > sympy+unsubscr...@googlegroups.com.
> >> >> > 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 sympy@googlegroups.com.
> >> >> To unsubscribe from this group, send email to
> >> >> sympy+unsubscr...@googlegroups.com.
> >> >> 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 sympy@googlegroups.com.
> >> > To unsubscribe from this group, send email to
> >> > sympy+unsubscr...@googlegroups.com.
> >> > 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 sympy@googlegroups.com.
> >> To unsubscribe from this group, send email to
> >> sympy+unsubscr...@googlegroups.com.
> >> 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 sympy@googlegroups.com.
> > To unsubscribe from this group, send email to
> > sympy+unsubscr...@googlegroups.com.
> > 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 sympy@googlegroups.com.
> To unsubscribe from this group, send email to
> sympy+unsubscr...@googlegroups.com.
> 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 sympy@googlegroups.com.
To unsubscribe from this group, send email to 
sympy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to