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.