Re: [matplotlib-devel] repeated calls to show() are now OK?

2010-06-13 Thread Eric Firing
On 06/12/2010 08:12 PM, Michiel de Hoon wrote:
> So on Linux, show(block=True) blocks but show(block=False) doesn't? If 
> matplotlib is in interactive mode, does show(block=True) still block? Because 
> if matplotlib is in interactive mode, then the call to 
> matplotlib.interactive(True) shouldn't make a difference, and I would expect 
> show(block=True) and show(block=False) to behave the same way.
>

Except that with block=False there is that _needmain flag.  And as you 
noted earlier, it blocks the first time, but not after that.  Somehow, I 
had previously missed the fact that it did block on the first call, so I 
did not realize that the tkagg behavior was identical on linux and mac, 
as one would expect.

Eric

> --Michiel.
>
> --- On Sat, 6/12/10, Eric Firing  wrote:
>
>> From: Eric Firing
>> Subject: Re: [matplotlib-devel] repeated calls to show() are now OK?
>> To: "Michiel de Hoon"
>> Cc: "John Hunter", "matplotlib development 
>> list"
>> Date: Saturday, June 12, 2010, 11:32 PM
>> On 06/12/2010 05:37 AM, Michiel de
>> Hoon wrote:
>>> --- On Sat, 6/12/10, Eric Firing
>> wrote:
> With TkAgg on Mac OS X, the first call to
>> show()
> blocks, and returns when all figures are
>> closed by the user.
> However, subsequent calls to show() return
>> immediately.

 This is anomalous, then; on linux, no call to show
>> blocks
 with tkagg.
 Puzzling difference.
>>>
>>> If I remove the _needmain stuff in the show() function
>> in the TkAgg backend, then each call to show() blocks on Mac
>> OS X with the TkAgg backend, which (in my understanding) is
>> the desired behavior. I don't know the purpose of _needmain
>> in the show() function, other than to disallow multiple
>> calls to show().
>>>
>>> --Michiel.
>>>
>>
>> I committed a change to backend_tkagg that leaves the show
>> functionality exactly as it is at present, but that
>> facilitates testing of a simpler version that I think is
>> more consistent with the other backends and with what we
>> want.  (I have appended the whole function to this
>> message--see below for additional explanation.)
>>
>> I have also done some more exploration and testing, and
>> here are my tentative conclusions:
>>
>> 1) We should aim for a show() that blocks until all windows
>> are closed, on all backends, and in all environments.
>> I think this is clearly something that many users would
>> like; it has reasonable use cases; and it is simple,
>> consistent, and easy to explain.
>>
>> 2) The big problem is the "in all environments" part of
>> that statement.  We probably can't achieve the goal,
>> but I suspect that over the long term we can approach it,
>> and the result will be "good enough".
>>
>> 3) As a step in that direction, I would like to see enough
>> testing of Tk with show(block=True) so that, if it works, we
>> can transition towards that behavior as the default,
>> deprecate the old behavior, and eventually eliminate
>> it.  Presently, TkAgg is most anomalous among the major
>> backends.
>>
>> 4) Leaving the documentation (all in the FAQ) with its
>> caution against anything but a single show() at the end of a
>> script is fine for 1.0; supporting multiple calls to a
>> blocking show under mildly restrictive conditions is a
>> reasonable goal for a subsequent release.
>>
>> Eric
>>
>> 
>> def show(block=False):
>>  """
>>  Show all figures.
>>
>>  Temporary, experimental kwarg *block*
>> defaults to False to
>>  provide the behavior present throughout mpl
>> history to date:
>>  interactive mode is forced on, and show does
>> not block.
>>
>>  Set *block* to True to test the proposed new
>> behavior,
>>  consistent with other backends, in which show
>> does not affect
>>  interactive mode, and always blocks until all
>> figures are closed.
>>  In addition, the rcParam['tk.pythoninspect']
>> is ignored.
>>
>>  Use this kwarg only for testing; other
>> backends do not accept
>>  a kwarg to show, and might never do so.
>>  """
>>  for manager in Gcf.get_all_fig_managers():
>>  manager.show()
>>  if block:
>>  # proposed new behavior; seems
>> to make this backend consistent
>>  # with others, with no
>> drawbacks identified yet.
>>  Tk.mainloop()
>>  else:
>>  # long-time behavior:
>> non-blocking, forces interactive mode
>>  import matplotlib
>>  matplotlib.interactive(True)
>>  if
>> rcParams['tk.pythoninspect']:
>>
>> os.environ['PYTHONINSPECT'] = '1'
>>  if show._needmain:
>>  Tk.mainloop()
>>  show._needmain =
>> False
>>
>> show._needmain = True   # This can go away
>> if we eliminate block=False option.
>>
>>
>>
>
>
>


--
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental u

Re: [matplotlib-devel] repeated calls to show() are now OK?

2010-06-13 Thread Michiel de Hoon
--- On Fri, 6/11/10, Eric Firing  wrote:
> I agree that the difference in blocking behavior is still a
> problem. I think that what we should do for now, *if* multiple
> calls to show work on the Mac (which I can't easily test), is
> change the documentation to correspond to the present situation, 
> highlighting the real problem of different blocking behavior.

I now tried the remaining backends on Mac OS X. With the Qt4Agg and WxAgg 
backends, show() can be called repeatedly and blocks each time. The FltkAgg 
backend shows the same behavior as Tkagg. The implementation of show() in the 
FltkAgg backend uses the same _needmain as TkAgg. If I remove the _needmain 
stuff, then show() can be called multiple times with FltkAgg, blocking each 
time.

--Michiel.


  

--
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo
___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] repeated calls to show() are now OK?

2010-06-13 Thread Daniel Welling
Something that I have noticed:
When using TkAgg (python 2.5, OSX/ppc, mpl 99.0), isinteractive() switches
from False to True after the first call to show() (see below).  When I
switch back ends, e.g. to Qt4, this change does not happen until I do it
myself through ion().  This was reproduceable on my intel mac, but since
updating to 99.1.1 (from source rather than Fink), I've broken the Tk
backend.  Hope this helps; it may be a naive observation.

In [2]: import matplotlib as mpl

In [3]: mpl.use('TkAgg')

In [4]: import pylab as plt

In [5]: plt.isinteractive()
Out[5]: False

In [6]: plt.plot([0,1])
Out[6]: []

In [7]: plt.show()

In [8]: plt.isinteractive()
Out[8]: True


On Sun, Jun 13, 2010 at 9:36 AM, Michiel de Hoon wrote:

> --- On Fri, 6/11/10, Eric Firing  wrote:
> > I agree that the difference in blocking behavior is still a
> > problem. I think that what we should do for now, *if* multiple
> > calls to show work on the Mac (which I can't easily test), is
> > change the documentation to correspond to the present situation,
> > highlighting the real problem of different blocking behavior.
>
> I now tried the remaining backends on Mac OS X. With the Qt4Agg and WxAgg
> backends, show() can be called repeatedly and blocks each time. The FltkAgg
> backend shows the same behavior as Tkagg. The implementation of show() in
> the FltkAgg backend uses the same _needmain as TkAgg. If I remove the
> _needmain stuff, then show() can be called multiple times with FltkAgg,
> blocking each time.
>
> --Michiel.
>
>
>
>
>
> --
> ThinkGeek and WIRED's GeekDad team up for the Ultimate
> GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the
> lucky parental unit.  See the prize list and enter to win:
> http://p.sf.net/sfu/thinkgeek-promo
> ___
> Matplotlib-devel mailing list
> Matplotlib-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
>
--
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] repeated calls to show() are now OK?

2010-06-13 Thread Eric Firing
On 06/13/2010 07:39 AM, Daniel Welling wrote:
> Something that I have noticed:
> When using TkAgg (python 2.5, OSX/ppc, mpl 99.0), isinteractive()
> switches from False to True after the first call to show() (see below).
> When I switch back ends, e.g. to Qt4, this change does not happen until
> I do it myself through ion().  This was reproduceable on my intel mac,
> but since updating to 99.1.1 (from source rather than Fink), I've broken
> the Tk backend.  Hope this helps; it may be a naive observation.

Not naive at all--this is one of the odd, and I think very undesirable, 
aspects of present TkAgg show() behavior.  It is eliminated by my 
proposed change.

Eric

>
> In [2]: import matplotlib as mpl
>
> In [3]: mpl.use('TkAgg')
>
> In [4]: import pylab as plt
>
> In [5]: plt.isinteractive()
> Out[5]: False
>
> In [6]: plt.plot([0,1])
> Out[6]: []
>
> In [7]: plt.show()
>
> In [8]: plt.isinteractive()
> Out[8]: True
>
>
> On Sun, Jun 13, 2010 at 9:36 AM, Michiel de Hoon  > wrote:
>
> --- On Fri, 6/11/10, Eric Firing  > wrote:
>  > I agree that the difference in blocking behavior is still a
>  > problem. I think that what we should do for now, *if* multiple
>  > calls to show work on the Mac (which I can't easily test), is
>  > change the documentation to correspond to the present situation,
>  > highlighting the real problem of different blocking behavior.
>
> I now tried the remaining backends on Mac OS X. With the Qt4Agg and
> WxAgg backends, show() can be called repeatedly and blocks each
> time. The FltkAgg backend shows the same behavior as Tkagg. The
> implementation of show() in the FltkAgg backend uses the same
> _needmain as TkAgg. If I remove the _needmain stuff, then show() can
> be called multiple times with FltkAgg, blocking each time.
>
> --Michiel.
>
>
>
>
> 
> --
> ThinkGeek and WIRED's GeekDad team up for the Ultimate
> GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the
> lucky parental unit.  See the prize list and enter to win:
> http://p.sf.net/sfu/thinkgeek-promo
> ___
> Matplotlib-devel mailing list
> Matplotlib-devel@lists.sourceforge.net
> 
> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
>
>
>
>
> --
> ThinkGeek and WIRED's GeekDad team up for the Ultimate
> GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the
> lucky parental unit.  See the prize list and enter to win:
> http://p.sf.net/sfu/thinkgeek-promo
>
>
>
> ___
> Matplotlib-devel mailing list
> Matplotlib-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


--
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo
___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


[matplotlib-devel] matplotlib date formatting

2010-06-13 Thread Гузий Саша
Hello,

I recently updated matplotlib using macports, and it broke my plotting
functions which plot date-value plots.

The reason was that my locale.getpreferredencoding() returned empty string
in
cbook.py.

changing the code to the following solved my problem

# On some systems, locale.getpreferredencoding returns None,
# which can break unicode; and the sage project reports that
# some systems have incorrect locale specifications, e.g.,
# an encoding instead of a valid locale name.

try:
preferredencoding = locale.getpreferredencoding()
if preferredencoding.strip() == '':
raise ValueError
except ValueError:
preferredencoding = None
except ImportError:
preferredencoding = None

sorry for disturbing you
--
Huziy Oleksandr
--
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] matplotlib date formatting

2010-06-13 Thread Eric Firing
On 06/13/2010 08:23 AM, Гузий Саша wrote:
> Hello,
>
> I recently updated matplotlib using macports, and it broke my plotting
> functions which plot date-value plots.
>
> The reason was that my locale.getpreferredencoding() returned empty
> string in
> cbook.py.
>
> changing the code to the following solved my problem
>
> # On some systems, locale.getpreferredencoding returns None,
> # which can break unicode; and the sage project reports that
> # some systems have incorrect locale specifications, e.g.,
> # an encoding instead of a valid locale name.
>
> try:
>  preferredencoding = locale.getpreferredencoding()
>  if preferredencoding.strip() == '':
>  raise ValueError
> except ValueError:
>  preferredencoding = None
> except ImportError:
>  preferredencoding = None
>
> sorry for disturbing you
> --
> Huziy Oleksandr
>

Thank you for the report.  I committed a modified version of your change 
in svn 8433.

Eric


--
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo
___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel