You can subscribe to this list here.
| 2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(33) |
Dec
(20) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2004 |
Jan
(7) |
Feb
(44) |
Mar
(51) |
Apr
(43) |
May
(43) |
Jun
(36) |
Jul
(61) |
Aug
(44) |
Sep
(25) |
Oct
(82) |
Nov
(97) |
Dec
(47) |
| 2005 |
Jan
(77) |
Feb
(143) |
Mar
(42) |
Apr
(31) |
May
(93) |
Jun
(93) |
Jul
(35) |
Aug
(78) |
Sep
(56) |
Oct
(44) |
Nov
(72) |
Dec
(75) |
| 2006 |
Jan
(116) |
Feb
(99) |
Mar
(181) |
Apr
(171) |
May
(112) |
Jun
(86) |
Jul
(91) |
Aug
(111) |
Sep
(77) |
Oct
(72) |
Nov
(57) |
Dec
(51) |
| 2007 |
Jan
(64) |
Feb
(116) |
Mar
(70) |
Apr
(74) |
May
(53) |
Jun
(40) |
Jul
(519) |
Aug
(151) |
Sep
(132) |
Oct
(74) |
Nov
(282) |
Dec
(190) |
| 2008 |
Jan
(141) |
Feb
(67) |
Mar
(69) |
Apr
(96) |
May
(227) |
Jun
(404) |
Jul
(399) |
Aug
(96) |
Sep
(120) |
Oct
(205) |
Nov
(126) |
Dec
(261) |
| 2009 |
Jan
(136) |
Feb
(136) |
Mar
(119) |
Apr
(124) |
May
(155) |
Jun
(98) |
Jul
(136) |
Aug
(292) |
Sep
(174) |
Oct
(126) |
Nov
(126) |
Dec
(79) |
| 2010 |
Jan
(109) |
Feb
(83) |
Mar
(139) |
Apr
(91) |
May
(79) |
Jun
(164) |
Jul
(184) |
Aug
(146) |
Sep
(163) |
Oct
(128) |
Nov
(70) |
Dec
(73) |
| 2011 |
Jan
(235) |
Feb
(165) |
Mar
(147) |
Apr
(86) |
May
(74) |
Jun
(118) |
Jul
(65) |
Aug
(75) |
Sep
(162) |
Oct
(94) |
Nov
(48) |
Dec
(44) |
| 2012 |
Jan
(49) |
Feb
(40) |
Mar
(88) |
Apr
(35) |
May
(52) |
Jun
(69) |
Jul
(90) |
Aug
(123) |
Sep
(112) |
Oct
(120) |
Nov
(105) |
Dec
(116) |
| 2013 |
Jan
(76) |
Feb
(26) |
Mar
(78) |
Apr
(43) |
May
(61) |
Jun
(53) |
Jul
(147) |
Aug
(85) |
Sep
(83) |
Oct
(122) |
Nov
(18) |
Dec
(27) |
| 2014 |
Jan
(58) |
Feb
(25) |
Mar
(49) |
Apr
(17) |
May
(29) |
Jun
(39) |
Jul
(53) |
Aug
(52) |
Sep
(35) |
Oct
(47) |
Nov
(110) |
Dec
(27) |
| 2015 |
Jan
(50) |
Feb
(93) |
Mar
(96) |
Apr
(30) |
May
(55) |
Jun
(83) |
Jul
(44) |
Aug
(8) |
Sep
(5) |
Oct
|
Nov
(1) |
Dec
(1) |
| 2016 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
(2) |
Jul
|
Aug
(3) |
Sep
(1) |
Oct
(3) |
Nov
|
Dec
|
| 2017 |
Jan
|
Feb
(5) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(3) |
Aug
|
Sep
(7) |
Oct
|
Nov
|
Dec
|
| 2018 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
1
|
|
2
(2) |
3
(7) |
4
(3) |
5
(7) |
6
(18) |
7
(6) |
8
|
|
9
(1) |
10
(1) |
11
(1) |
12
|
13
(5) |
14
(2) |
15
(2) |
|
16
|
17
(2) |
18
|
19
|
20
|
21
|
22
(1) |
|
23
(2) |
24
(3) |
25
(6) |
26
(1) |
27
|
28
(8) |
29
(9) |
|
30
(3) |
31
(4) |
|
|
|
|
|
|
From: Paul I. <piv...@gm...> - 2011-10-25 22:58:28
|
On Tue, Oct 25, 2011 at 3:52 PM, Daniel Hyams <dh...@gm...> wrote: > For small bugfixes, am I supposed to fork from v1.1.x, or master? I say 'master' (Mike's been pushing some things to v1.1.x, but as he said in a comment to #551, "Pushed to v1.1.x since this is pretty serious yet simple-to-fix bug -- it should be on the maintenance branch.") best, -- Paul Ivanov 314 address only used for lists, off-list direct email at: http://pirsquared.org | GPG/PGP key id: 0x0F3E28F7 |
|
From: Benjamin R. <ben...@ou...> - 2011-10-25 22:57:00
|
On Tuesday, October 25, 2011, Daniel Hyams <dh...@gm...> wrote: > For small bugfixes, am I supposed to fork from v1.1.x, or master? > V1.1.x is the maintenance branch. Master is for new features. When bugfixes are made and merged to v1.1.x, we then merge it to master. Ben Root |
|
From: Daniel H. <dh...@gm...> - 2011-10-25 22:52:44
|
For small bugfixes, am I supposed to fork from v1.1.x, or master? -- Daniel Hyams dh...@gm... |
|
From: Tobin H. V. P. <to...@i3...> - 2011-10-25 17:46:41
|
Daniel - Yes that works. In my case - I hate to edit any existing third party code bases - or it bites me later when I upgrade. For now - I simply do my own dead reference clean up externally when doing the deletes. Really, that would be the same as just doing a disconnect - but for other reasons (not worth going into detail here) - I prefer deleting and not having to know all of the connection points. My solution ensures that the dead references aren't around later. I mainly wanted to get it out into the devel community - get smart eyeballs on it - and hope that it gets addresses in a future release. It will likely be a fairly straightforward fix - as you show. |
|
From: Daniel H. <dh...@gm...> - 2011-10-25 17:17:12
|
I've run into this same issue in the past, and have it "fixed" in my
own local copy of matplotlib. I just placed a check to make sure that
cid actually was in the callbacks for s before deleting it.
That is quite possibly a band-aid; I never looked far enough in to
see. But it is possibly another way of fixing the problem.
def process(self, s, *args, **kwargs):
"""
process signal *s*. All of the functions registered to receive
callbacks on *s* will be called with *\*args* and *\*\*kwargs*
"""
if s in self.callbacks:
for cid, proxy in self.callbacks[s].items():
# Clean out dead references
if proxy.inst is not None and proxy.inst() is None:
if cid in self.callbacks[s]: #<------- here
del self.callbacks[s][cid]
else:
proxy(*args, **kwargs)
On Tue, Oct 25, 2011 at 1:09 PM, <to...@i3...> wrote:
> Here is a bit more detail and a simple example.
>
> The example below places red squares in an axes. When the user clicks on an existing red square - another square is created and added. When the user hits any key a square is deleted from the axes. The error is triggered by clicking on the red square and then hitting any key, and then clicking a red square again.
>
> Diagnosis:
> By monitoring cbook.py line 235 and cbook.py line 263 it can be seen that after the second mouse click (following one of the squares being deleted), that the process() function builds a loop and begins handling the button press callbacks. Note that there is a dead reference coming later in this list. The first callback involves another square being created and the connect() method being called. In the connect() call - the dead reference is deleted from the callback list. Now upon returning to the process() callback this dead reference is no longer in the callback list and a Key Exception is triggered once it gets to it in the loop.
>
> Problem:
> There are two locations where dead references are cleared from the callback list. When these loops get intermingled - as the case with a callback leading to another connect mid-loop - the exception occurs when both loops attempt to delete the dead reference.
>
> Possible Solutions:
> 1. Trap the KeyException at the point of attempting to delete it from the list in both places.
>
> 2. Place the dead reference check and deletion within a single method ... and perform this check at beginning of the process() and connect() methods before processing callbacks.
>
>
> Sample Code
> --------------------
>
> import matplotlib
> matplotlib.use('WXAGG')
>
> from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg
> from matplotlib.pyplot import Figure, Axes, Rectangle
>
> import wx
> import random
>
> class SquareManager(object):
> def __init__(self, axes):
> self.axes = axes
> self.canvas = axes.figure.canvas
> self.squares = []
> self.last_x = 0
>
> self.canvas.mpl_connect('key_press_event', self.on_key_press)
>
> def add_square(self):
> self.last_x += .1
> s = Square(self, self.axes, [self.last_x, .4],
> .05, .05, facecolor='red', edgecolor='black')
> self.squares.append(s)
> self._refresh()
>
> def on_key_press(self, evt):
> if len(self.squares) == 0: return
>
> # delete the first square - results in no error
> # self.squares[0].remove()
> # del self.squares[0]
>
> # delete the last square - results in the error
> self.squares[-1].remove()
> del self.squares[-1]
>
> self._refresh()
>
> def _refresh(self):
> self.canvas.draw()
>
>
> class Square(Rectangle):
> def __init__(self, manager, axes, *args, **kwds):
> Rectangle.__init__(self, *args, **kwds)
> axes.add_patch(self)
>
> self.manager = manager
> axes.figure.canvas.mpl_connect('button_press_event', self.selected)
>
> def selected(self, evt):
> within, _ = self.contains(evt)
> if within:
> self.manager.add_square()
>
>
> app = wx.PySimpleApp()
> frame = wx.Frame(None)
> fig = Figure()
> canvas = FigureCanvasWxAgg(frame, -1, fig)
> a = Axes(fig, [.1, .1, .8, .8])
> fig.add_axes(a)
>
> sm = SquareManager(a)
> sm.add_square()
>
> frame.Show()
> app.MainLoop()
>
>
> # To demonstrate the error:
> #
> # 1. click on red sqaure
> # 2. press any key
> # 3. click on red sqaure again
>
>
>
>
>
>
>
>
>
> ------------------------------------------------------------------------------
> The demand for IT networking professionals continues to grow, and the
> demand for specialized networking skills is growing even more rapidly.
> Take a complimentary Learning@Cisco Self-Assessment and learn
> about Cisco certifications, training, and career opportunities.
> http://p.sf.net/sfu/cisco-dev2dev
> _______________________________________________
> Matplotlib-devel mailing list
> Mat...@li...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
>
--
Daniel Hyams
dh...@gm...
|
|
From: <to...@i3...> - 2011-10-25 17:09:16
|
Here is a bit more detail and a simple example.
The example below places red squares in an axes. When the user clicks on an existing red square - another square is created and added. When the user hits any key a square is deleted from the axes. The error is triggered by clicking on the red square and then hitting any key, and then clicking a red square again.
Diagnosis:
By monitoring cbook.py line 235 and cbook.py line 263 it can be seen that after the second mouse click (following one of the squares being deleted), that the process() function builds a loop and begins handling the button press callbacks. Note that there is a dead reference coming later in this list. The first callback involves another square being created and the connect() method being called. In the connect() call - the dead reference is deleted from the callback list. Now upon returning to the process() callback this dead reference is no longer in the callback list and a Key Exception is triggered once it gets to it in the loop.
Problem:
There are two locations where dead references are cleared from the callback list. When these loops get intermingled - as the case with a callback leading to another connect mid-loop - the exception occurs when both loops attempt to delete the dead reference.
Possible Solutions:
1. Trap the KeyException at the point of attempting to delete it from the list in both places.
2. Place the dead reference check and deletion within a single method ... and perform this check at beginning of the process() and connect() methods before processing callbacks.
Sample Code
--------------------
import matplotlib
matplotlib.use('WXAGG')
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg
from matplotlib.pyplot import Figure, Axes, Rectangle
import wx
import random
class SquareManager(object):
def __init__(self, axes):
self.axes = axes
self.canvas = axes.figure.canvas
self.squares = []
self.last_x = 0
self.canvas.mpl_connect('key_press_event', self.on_key_press)
def add_square(self):
self.last_x += .1
s = Square(self, self.axes, [self.last_x, .4],
.05, .05, facecolor='red', edgecolor='black')
self.squares.append(s)
self._refresh()
def on_key_press(self, evt):
if len(self.squares) == 0: return
# delete the first square - results in no error
# self.squares[0].remove()
# del self.squares[0]
# delete the last square - results in the error
self.squares[-1].remove()
del self.squares[-1]
self._refresh()
def _refresh(self):
self.canvas.draw()
class Square(Rectangle):
def __init__(self, manager, axes, *args, **kwds):
Rectangle.__init__(self, *args, **kwds)
axes.add_patch(self)
self.manager = manager
axes.figure.canvas.mpl_connect('button_press_event', self.selected)
def selected(self, evt):
within, _ = self.contains(evt)
if within:
self.manager.add_square()
app = wx.PySimpleApp()
frame = wx.Frame(None)
fig = Figure()
canvas = FigureCanvasWxAgg(frame, -1, fig)
a = Axes(fig, [.1, .1, .8, .8])
fig.add_axes(a)
sm = SquareManager(a)
sm.add_square()
frame.Show()
app.MainLoop()
# To demonstrate the error:
#
# 1. click on red sqaure
# 2. press any key
# 3. click on red sqaure again
|