[Matplotlib-users] RuntimeError: Could not open facefile

2012-03-23 Thread Andrew Smart
Hi,
I'm running into this RuntimeError: Could not open facefile
c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf;
Cannot_Open_Resource when I'm trying to save out a series of *.png files in
a loop. It crashes on this error after many passes through the loop and
successful files get created, but then always on the same pass it does
this. The full traceback is here:

  File
C:\Users\E440710\Desktop\PythonTransfer\fittslaw_ThroughputCalc_AS_break.py,
line 744, in module
fig.savefig(fname, transparent = True)
  File c:\Python32\lib\site-packages\matplotlib\figure.py, line 1174, in
savefig
self.canvas.print_figure(*args, **kwargs)
  File c:\Python32\lib\site-packages\matplotlib\backend_bases.py, line
2027, in print_figure
**kwargs)
  File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py,
line 451, in print_png
FigureCanvasAgg.draw(self)
  File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py,
line 400, in draw
self.figure.draw(self.renderer)
  File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, in
draw_wrapper
draw(artist, renderer, *args, **kwargs)
  File c:\Python32\lib\site-packages\matplotlib\figure.py, line 887, in
draw
func(*args)
  File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, in
draw_wrapper
draw(artist, renderer, *args, **kwargs)
  File c:\Python32\lib\site-packages\matplotlib\axes.py, line 1985, in
draw
a.draw(renderer)
  File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, in
draw_wrapper
draw(artist, renderer, *args, **kwargs)
  File c:\Python32\lib\site-packages\matplotlib\axis.py, line 1043, in
draw
ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw,
renderer)
  File c:\Python32\lib\site-packages\matplotlib\axis.py, line 994, in
_get_tick_bboxes
extent = tick.label1.get_window_extent(renderer)
  File c:\Python32\lib\site-packages\matplotlib\text.py, line 743, in
get_window_extent
bbox, info = self._get_layout(self._renderer)
  File c:\Python32\lib\site-packages\matplotlib\text.py, line 296, in
_get_layout
ismath=False)
  File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py,
line 182, in get_text_width_height_descent
font = self._get_agg_font(prop)
  File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py,
line 223, in _get_agg_font
font = FT2Font(str(fname))
RuntimeError: Could not open facefile
c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf;
Cannot_Open_Resource

I've tried the various fixes that have been suggested - removing the
fontList.py3k.cache and even the removing the .matplotlib directory.
However when I run my script that's producing the error the directory gets
recreated along with the fontList.py3k.cache which must be pointing to the
wrong path?

When I check the path
c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf where
matplotlib is looking for the resource it cannot open - the Vera.ttf is
there.

This only happens after many iterations through the loop that is saving out
the *.png files and I have no idea why.

The relevant code from my script is here:

for p in plotData[k][data]:
#print(p in plotData[k]:,p)
a = numpy.array((loc[0],loc[1]))
b = numpy.array((p[0],p[1]))
distValue = (numpy.sqrt(numpy.sum((a-b)**2) ))/86.0 #divide by
86 because that was the ppi on the display used to collect the data
if p[2] == 1:
hit_x.append(loc[0]-p[0])

hit_y.append(loc[1]-p[1])

frame_hit_x = loc[0]-p[0]
frame_hit_y = loc[1]-p[1]
print(frame_x:, frame_hit_x)
files = []
if size == (0.25,0.25) and makeMovie:

fig = plt.figure()
print(fig:, fig)

plt.plot(frame_hit_x,frame_hit_y,color='green',marker='o',linestyle='')

plt.axis('scaled')
plt.axis([-100,100,-100,100])

fname =
subj{:g}_size{:g}_hit_x{:g}.png.format(Subject,btnSize,frame_hit_x)
print('saving frame', fname)
fig.savefig(fname, transparent = True)
files.append(fname)

I'm on a Win7 64bit using python 3.2 and matplotlib version 1.2.x

Any help would be greatly appreciated!

Andy
--
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] RuntimeError: Could not open facefile

2012-03-23 Thread Michael Droettboom
This is a known bug on Windows where it runs out of file handles after a 
while.


This commit was an attempt to fix it, but it doesn't seem to work:

https://github.com/matplotlib/matplotlib/commit/4cb2aaa87b0aa9efe7178d7510d3d091ef5206df

I think we need a Windows user/developer/expert to get to the bottom of 
why file handles are not being freed to the OS.


Mike

On 03/23/2012 04:35 PM, Andrew Smart wrote:

Hi,
I'm running into this RuntimeError: Could not open facefile 
c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf; 
Cannot_Open_Resource when I'm trying to save out a series of *.png 
files in a loop. It crashes on this error after many passes through 
the loop and successful files get created, but then always on the same 
pass it does this. The full traceback is here:


  File 
C:\Users\E440710\Desktop\PythonTransfer\fittslaw_ThroughputCalc_AS_break.py, 
line 744, in module

fig.savefig(fname, transparent = True)
  File c:\Python32\lib\site-packages\matplotlib\figure.py, line 
1174, in savefig

self.canvas.print_figure(*args, **kwargs)
  File c:\Python32\lib\site-packages\matplotlib\backend_bases.py, 
line 2027, in print_figure

**kwargs)
  File 
c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py, 
line 451, in print_png

FigureCanvasAgg.draw(self)
  File 
c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py, 
line 400, in draw

self.figure.draw(self.renderer)
  File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, 
in draw_wrapper

draw(artist, renderer, *args, **kwargs)
  File c:\Python32\lib\site-packages\matplotlib\figure.py, line 887, 
in draw

func(*args)
  File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, 
in draw_wrapper

draw(artist, renderer, *args, **kwargs)
  File c:\Python32\lib\site-packages\matplotlib\axes.py, line 1985, 
in draw

a.draw(renderer)
  File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, 
in draw_wrapper

draw(artist, renderer, *args, **kwargs)
  File c:\Python32\lib\site-packages\matplotlib\axis.py, line 1043, 
in draw
ticklabelBoxes, ticklabelBoxes2 = 
self._get_tick_bboxes(ticks_to_draw, renderer)
  File c:\Python32\lib\site-packages\matplotlib\axis.py, line 994, 
in _get_tick_bboxes

extent = tick.label1.get_window_extent(renderer)
  File c:\Python32\lib\site-packages\matplotlib\text.py, line 743, 
in get_window_extent

bbox, info = self._get_layout(self._renderer)
  File c:\Python32\lib\site-packages\matplotlib\text.py, line 296, 
in _get_layout

ismath=False)
  File 
c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py, 
line 182, in get_text_width_height_descent

font = self._get_agg_font(prop)
  File 
c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py, 
line 223, in _get_agg_font

font = FT2Font(str(fname))
RuntimeError: Could not open facefile 
c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf; 
Cannot_Open_Resource


I've tried the various fixes that have been suggested - removing the 
fontList.py3k.cache and even the removing the .matplotlib directory. 
However when I run my script that's producing the error the directory 
gets recreated along with the fontList.py3k.cache which must be 
pointing to the wrong path?


When I check the path 
c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf 
where matplotlib is looking for the resource it cannot open - the 
Vera.ttf is there.


This only happens after many iterations through the loop that is 
saving out the *.png files and I have no idea why.


The relevant code from my script is here:

for p in plotData[k][data]:
#print(p in plotData[k]:,p)
a = numpy.array((loc[0],loc[1]))
b = numpy.array((p[0],p[1]))
distValue = (numpy.sqrt(numpy.sum((a-b)**2) ))/86.0 
#divide by 86 because that was the ppi on the display used to collect 
the data

if p[2] == 1:
hit_x.append(loc[0]-p[0])

hit_y.append(loc[1]-p[1])

frame_hit_x = loc[0]-p[0]
frame_hit_y = loc[1]-p[1]
print(frame_x:, frame_hit_x)
files = []
if size == (0.25,0.25) and makeMovie:

fig = plt.figure()
print(fig:, fig)

plt.plot(frame_hit_x,frame_hit_y,color='green',marker='o',linestyle='')


plt.axis('scaled')
plt.axis([-100,100,-100,100])

fname = 
subj{:g}_size{:g}_hit_x{:g}.png.format(Subject,btnSize,frame_hit_x)

print('saving frame', fname)
fig.savefig(fname, transparent = True)
files.append(fname)

I'm on a Win7 64bit using python 3.2 and matplotlib version 1.2.x

Any help would be greatly appreciated!

Andy


--
This SF email 

Re: [Matplotlib-users] RuntimeError: Could not open facefile

2012-03-23 Thread Andrew Smart
Ok thank you - so one way to work around it is to just generate the files I
want in batches so Windows won't run out of file handles - but is there a
way to know how many handles are available? I'm trying to animate some data
and I don't really know how many frames there are - could be thousands.

Andy

On Fri, Mar 23, 2012 at 3:45 PM, Michael Droettboom md...@stsci.edu wrote:

  This is a known bug on Windows where it runs out of file handles after a
 while.

 This commit was an attempt to fix it, but it doesn't seem to work:


 https://github.com/matplotlib/matplotlib/commit/4cb2aaa87b0aa9efe7178d7510d3d091ef5206df

 I think we need a Windows user/developer/expert to get to the bottom of
 why file handles are not being freed to the OS.

 Mike


 On 03/23/2012 04:35 PM, Andrew Smart wrote:

 Hi,
 I'm running into this RuntimeError: Could not open facefile
 c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf;
 Cannot_Open_Resource when I'm trying to save out a series of *.png files in
 a loop. It crashes on this error after many passes through the loop and
 successful files get created, but then always on the same pass it does
 this. The full traceback is here:

   File
 C:\Users\E440710\Desktop\PythonTransfer\fittslaw_ThroughputCalc_AS_break.py,
 line 744, in module
 fig.savefig(fname, transparent = True)
   File c:\Python32\lib\site-packages\matplotlib\figure.py, line 1174, in
 savefig
 self.canvas.print_figure(*args, **kwargs)
   File c:\Python32\lib\site-packages\matplotlib\backend_bases.py, line
 2027, in print_figure
 **kwargs)
   File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py,
 line 451, in print_png
 FigureCanvasAgg.draw(self)
   File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py,
 line 400, in draw
 self.figure.draw(self.renderer)
   File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, in
 draw_wrapper
 draw(artist, renderer, *args, **kwargs)
   File c:\Python32\lib\site-packages\matplotlib\figure.py, line 887, in
 draw
 func(*args)
   File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, in
 draw_wrapper
 draw(artist, renderer, *args, **kwargs)
   File c:\Python32\lib\site-packages\matplotlib\axes.py, line 1985, in
 draw
 a.draw(renderer)
   File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, in
 draw_wrapper
 draw(artist, renderer, *args, **kwargs)
   File c:\Python32\lib\site-packages\matplotlib\axis.py, line 1043, in
 draw
 ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw,
 renderer)
   File c:\Python32\lib\site-packages\matplotlib\axis.py, line 994, in
 _get_tick_bboxes
 extent = tick.label1.get_window_extent(renderer)
   File c:\Python32\lib\site-packages\matplotlib\text.py, line 743, in
 get_window_extent
 bbox, info = self._get_layout(self._renderer)
   File c:\Python32\lib\site-packages\matplotlib\text.py, line 296, in
 _get_layout
 ismath=False)
   File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py,
 line 182, in get_text_width_height_descent
 font = self._get_agg_font(prop)
   File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py,
 line 223, in _get_agg_font
 font = FT2Font(str(fname))
 RuntimeError: Could not open facefile
 c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf;
 Cannot_Open_Resource

 I've tried the various fixes that have been suggested - removing the
 fontList.py3k.cache and even the removing the .matplotlib directory.
 However when I run my script that's producing the error the directory gets
 recreated along with the fontList.py3k.cache which must be pointing to the
 wrong path?

 When I check the path
 c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf where
 matplotlib is looking for the resource it cannot open - the Vera.ttf is
 there.

 This only happens after many iterations through the loop that is saving
 out the *.png files and I have no idea why.

 The relevant code from my script is here:

 for p in plotData[k][data]:
 #print(p in plotData[k]:,p)
 a = numpy.array((loc[0],loc[1]))
 b = numpy.array((p[0],p[1]))
 distValue = (numpy.sqrt(numpy.sum((a-b)**2) ))/86.0 #divide by
 86 because that was the ppi on the display used to collect the data
 if p[2] == 1:
 hit_x.append(loc[0]-p[0])

 hit_y.append(loc[1]-p[1])

 frame_hit_x = loc[0]-p[0]
 frame_hit_y = loc[1]-p[1]
 print(frame_x:, frame_hit_x)
 files = []
 if size == (0.25,0.25) and makeMovie:

 fig = plt.figure()
 print(fig:, fig)

 plt.plot(frame_hit_x,frame_hit_y,color='green',marker='o',linestyle='')

 plt.axis('scaled')
 plt.axis([-100,100,-100,100])

 fname =
 

Re: [Matplotlib-users] RuntimeError: Could not open facefile

2012-03-23 Thread John Hunter
On Fri, Mar 23, 2012 at 3:35 PM, Andrew Smart andrew.johnsm...@gmail.comwrote:

 Hi,
 I'm running into this RuntimeError: Could not open facefile
 c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf;
 Cannot_Open_Resource when I'm trying to save out a series of *.png files in
 a loop. It crashes on this error after many passes through the loop and
 successful files get created, but then always on the same pass it does
 this. The full traceback is here:

 I wonder if the solution is as simple as doing font caching at the class
level rather than instance level.  Andrew, could you try editing
matplotlib/backends/backend_agg.py and replace

class RendererAgg(RendererBase):

The renderer handles all the drawing primitives using a graphics
context instance that controls the colors/styles

debug=1
def __init__(self, width, height, dpi):
if __debug__: verbose.report('RendererAgg.__init__',
'debug-annoying')
RendererBase.__init__(self)
self.texd = maxdict(50)  # a cache of tex image rasters
self._fontd = maxdict(50)

with

class RendererAgg(RendererBase):

The renderer handles all the drawing primitives using a graphics
context instance that controls the colors/styles

debug=1
_fontd = maxdict(50)
texd = maxdict(50)  # a cache of tex image rasters
def __init__(self, width, height, dpi):
if __debug__: verbose.report('RendererAgg.__init__',
'debug-annoying')
RendererBase.__init__(self)


Does anyone see an issue with doing this caching at the class level?  If
this works, we should have *many* fewer font files parsed.

w/o modifying the src code, a related way to test this idea is to reuse the
same figure instance and clear it at the start of the loop.  Ie, rather than

for i in range(N):
fig = plt.figure()
plot_something
fig.savefig(...)

do


fig = plt.figure()
for i in range(N):
fig.clf()
plot_something
fig.savefig(...)

I would try the latter first, and if that works I would appreciate it if
you test the src code modification unless someone chimes in and tells us
that is a really bad idea.

JDH
--
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users