Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Pickling support added. Various whitespace fixes as a result of reading *lots* of code. #1175

Merged
merged 3 commits into from

7 participants

@pelson
Collaborator

Rebasing #1020 was causing real problems, therefore I decided to cut a fresh branch and merge my changes on (with a commit squash to boot).

@dmcdougall
Collaborator

I see changes to colorbar and legend! Does this mean you've added support for them?

@pwuertz
Collaborator

This new new_figure_manager_given_figure method should be added to backend_pgf.py as well, right?

@travisbot

This pull request fails (merged 51f8ffc6 into cf7618c).

@pelson
Collaborator

@dmcdougall: Yes. ;-)
@pwuertz: Yes. ;-)

Will do the pgf backend now.

@travisbot

This pull request fails (merged 7885d94 into cf7618c).

@pelson pelson commented on the diff
lib/matplotlib/figure.py
((6 lines not shown))
+ # the axobservers cannot currently be pickled.
+ # Additionally, the canvas cannot currently be pickled, but this has
+ # the benefit of meaning that a figure can be detached from one canvas,
+ # and re-attached to another.
+ for attr_to_pop in ('_axobservers', 'show', 'canvas', '_cachedRenderer') :
+ state.pop(attr_to_pop, None)
+
+ # add version information to the state
+ state['__mpl_version__'] = _mpl_version
+
+ # check to see if the figure has a manager and whether it is registered
+ # with pyplot
+ if getattr(self.canvas, 'manager', None) is not None:
+ manager = self.canvas.manager
+ import matplotlib._pylab_helpers
+ if manager in matplotlib._pylab_helpers.Gcf.figs.viewvalues():
@pelson Collaborator
pelson added a note

based on the travis results, I am assuming viewvalues is not python2.6 compatible?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@pelson
Collaborator

I have been developing this with python2.7, but it appears that this is not compatible with python3.2 nor python2.6. I don't have local installations of either and would have to build both from source, if anyone else is willing to get involved I would much appreciate it, otherwise it looks like I have a painful journey of building ahead of me...

@pwuertz
Collaborator

I have a few python 3 fixes for you in this commit:
pwuertz@0e7c6e3

Successfully pickled and unpickled a simple figure with python3 using that patch on top.

@pwuertz
Collaborator

The figure from your test_complete also pickles/unpickles fine with python3, but apparently you cannot unpickle data that has been pickled with python2...

@pelson
Collaborator

@pwuertz: awesome! I've cherry picked that commit into this PR.

@pwuertz
Collaborator

Ah, hold on. In python3 you need a Byte buffer instead of a String buffer for pickle. This commit here makes the test module work.
pwuertz@8753aaa

I don't know if the code is now further away from being python2.6 compatible.

Also, our python editors seem to have a fight over a few whitespaces :)

@mdboom
Owner

As for testing on different versions of Python -- hopefully the Travis bot will start to be helpful with that. We have a number of failures on master at the moment, so it makes everything look like it's failing -- but manually expecting the results should hopefully be enough to track down whether a given pull request introduces any new failures.

@travisbot

This pull request fails (merged f4245bb into cf7618c).

@dmcdougall
Collaborator

I'm confused. How do I use travis bot? The web interface sure looks pretty, but I do not understand where to see what tests are failing where. Is there documentation?

@travisbot

This pull request fails (merged 1e08190 into cf7618c).

@pelson
Collaborator

@pwuertz: Thanks for the added commit. I will need to do a bit of work to make that code python2 compatible, but that's fine. Mightn't be until Monday now though.

@pelson
Collaborator

Given this is quite a significant code change I would be eager to merge this and then fix the python3 support in a subsequent PR. Some of the benefits of doing this:

  • This PR will conflict and expire quickly. Rebasing is painful and means that a full review of all changes is needed each time.
  • There are other PRs in need of some of the changes. Particularly #1125.

The biggest drawback of doing this:

  • Currently, the pickle test will fail on python3 (and possibly python2.6)

Is anyone willing to merge this?

@efiring efiring commented on the diff
lib/matplotlib/backends/backend_pgf.py
@@ -608,7 +609,14 @@ def new_figure_manager(num, *args, **kwargs):
# main-level app (egg backend_gtk, backend_gtkagg) for pylab
FigureClass = kwargs.pop('FigureClass', Figure)
thisFig = FigureClass(*args, **kwargs)
- canvas = FigureCanvasPgf(thisFig)
+ return new_figure_manager_given_figure(thisFig)
@efiring Owner
efiring added a note

Don't you need a "num" argument here, to match the signature below?

@pelson Collaborator
pelson added a note

Yes. Thanks Eric.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@efiring efiring merged commit 4c1e36d into matplotlib:master
@efiring
Owner

With some trepidation, but in the interest of keeping things moving, I went ahead with the merge. I suspect that will wreak havoc with many other pull requests, but being small, they will not be difficult to fix.

@dmcdougall
Collaborator

Woohoo! This has me a little too excited. Good work!

@pelson
Collaborator

@efiring: Thanks for doing that: I think it is a good decision. It will certainly save me time in having to rebase (and other re-read), which I intend to invest to other mpl related things. As you can see, I have created a new PR with the feedback from this PR applied.

@dmcdougall : Thanks for the back pat. Its good to know that these features are appreciated. Do you have a particular use in mind for pickle support or is it just a general purpose "nice to have"?

@dmcdougall
Collaborator

@pelson Well, it is 'nice to have'. Though, in particular, it would save me a lot of time when I write a script that generates 8 figures from several 2GB data files and then a co-author tells me that there are too many yticks.

@pelson
Collaborator

Though, in particular, it would save me a lot of time when I write a script that generates 8 figures from several 2GB data files and then a co-author tells me that there are too many yticks.

Yes. I like it. ;-) Your right: it is the general purpose - little things which will save a little bit of time time - benefits that I see this delivering most of all.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Aug 30, 2012
  1. @pelson
  2. @pelson
  3. @pelson

    py3 fixes for axes.py

    pwuertz authored pelson committed
Something went wrong with that request. Please try again.