mailRe: [bug #21324] GUI error on mac OS X Maverics 10.9


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by Troels Emtekær Linnet on December 04, 2013 - 13:01:
Hi Edward.

The Menu.py and MessageDialog.py functions fine.

I will wait and see what happens.
And if it drives me crazy, I will try to go for another round.

Best
Troels

2013/12/4 Edward d'Auvergne <edward@xxxxxxxxxxxxx>:
Hi,

It is a very tough problem to solve, and it is likely to be a wxPython
bug.  Oh, what if you run the Menu.py wx_demo?  Or MessageDialog.py?
The testing in http://wiki.nmr-relax.com/Installation_test#wxPython_test
only checks a tiny fraction of all wxPython functionality used in
relax so it may not show the problem.  It could be that one of the
PNGs in wxPython, for example those used in the message dialogs, are
corrupted (according to the PNG people nowadays).  It could be that
one of the standard Mac OS X icons distributed with the operating
system is giving the iCCP warning too.

Regards,

Edward



On 4 December 2013 11:49, Troels Emtekær Linnet <tlinnet@xxxxxxxxxxxxx> 
wrote:
Hi Edward.

The code change did not make a difference.

The wxPython demo runs fine:
http://wiki.nmr-relax.com/Installation_test#wxPython_test

I see the smiley face fine.
In the terminal there are still the fonts issue, but not the iCCP warning.

Hm, I guess i will see what happens if I start using the GUI with
relax on real data applications.
Anyway, I will probably run a lot more scripting than GUI.

And I will wait to see if there comes a fix for wxPython for Mavericks.

Best
Troels


2013/12/4 Edward d'Auvergne <edward@xxxxxxxxxxxxx>:
Hi,

There are literally thousands of places where the wx.CallAfter() call
could be used.  This may not even fix the problem.  Does the error go
away if you make the change?  On a different note, do you see those
wxPython iCCP and font issues if you run the wx_demo?  If so, then
there is no point searching for these errors in relax, for there are
none.  It will be a wxPython issue.  My feeling is that everything you
see is due to problems with wxPython, as my tests on multiple
operating system, both 32 and 64-bit show nothing.  The crash in the
test suite might be fixable from within relax however.

Regards,

Edward


On 4 December 2013 11:26, Troels Emtekær Linnet <tlinnet@xxxxxxxxxxxxx> 
wrote:
Hm.

It seems that many people have problems with wxPython 2.9 on Mavericks.
I have tried installing wxPython 2.8, but that would not work on my 
system.

The GUI will show up when starting relax.
Complaining about: "iCCP: known incorrect sRGB profile".
And terminal will show:

"
2013-12-03 22:56:31.956 Python[1180:d0b] CoreText performance note: 
Client
called CTFontCreateWithName() using name ".Lucida Grande UI" and got 
font with
PostScript name ".LucidaGrandeUI". For best performance, only use 
PostScript
names when calling this API.
2013-12-03 22:56:31.956 Python[1180:d0b] CoreText performance note: Set a
breakpoint on CTFontLogSuboptimalRequest to debug.
2013-12-03 22:56:37.521 Python[1180:d0b] CoreText performance note: 
Client
called CTFontCreateWithName() using name ".Lucida Grande UI" and got 
font with
PostScript name ".LucidaGrandeUI". For best performance, only use 
PostScript
names when calling this API.
"

This problem has been reported before:
http://successfulsoftware.net/2013/10/23/fixing-qt-4-for-mac-os-x-10-9-mavericks/
https://bugreports.qt-project.org/browse/QTBUG-32789
http://wxpython-users.1045709.n5.nabble.com/another-possible-issue-with-new-Mac-OS-Mavericks-td5719024.html


In the relax GUI:

The Unit test will perform fine.
The GUI test will crash relax.
The system test will run for a long time, and crash at some point.
(After 30 dots ?)
It is hard to see at which points it crashes.

The system test performed in terminal goes fine.


-------
I found one instance of "AppendText" in line 1048.
Should I try to alter it ?

from:
self.AppendText(string_list[i])

to:
wx.CallAfter(self.textArea.AppendText, string_list[i])
or
wx.CallAfter(self.AppendText, string_list[i])


-------




[tlinnet@haddock relax_trunk]$ grep -r "AppendText" ./gui
Binary file ./gui/controller.pyc matches
./gui/controller.py:            self.AppendText(string_list[i])


[tlinnet@haddock relax_trunk]$ grep -r "wx.CallAfter(" ./gui
./gui/spin_viewer/frame.py:                wx.CallAfter(item.Enable, 
enable)
./gui/spin_viewer/frame.py:        wx.CallAfter(self.bar.EnableTool,
self.spin_loader_id, enable)
./gui/spin_viewer/frame.py:        wx.CallAfter(self.pipe_name.Enable, 
enable)
./gui/spin_viewer/frame.py:        wx.CallAfter(self.refresh_safe)
./gui/relax_gui.py:        wx.CallAfter(self.toolbar.EnableTool,
self.TB_FILE_NEW, enable)
./gui/relax_gui.py:        wx.CallAfter(self.toolbar.EnableTool,
self.TB_FILE_CLOSE, enable)
./gui/relax_gui.py:        wx.CallAfter(self.toolbar.EnableTool,
self.TB_FILE_CLOSE_ALL, enable)
./gui/relax_gui.py:        wx.CallAfter(self.toolbar.EnableTool,
self.TB_FILE_OPEN, enable)
./gui/relax_gui.py:        wx.CallAfter(self.toolbar.EnableTool,
self.TB_FILE_SAVE, enable)
./gui/relax_gui.py:        wx.CallAfter(self.toolbar.EnableTool,
self.TB_FILE_SAVE_AS, enable)
./gui/relax_gui.py:
wx.CallAfter(self.controller.main_gauge.SetValue, 100)
./gui/relax_gui.py:        wx.CallAfter(self.show_results_viewer_safe,
warn=True)
./gui/relax_gui.py:                wx.CallAfter(dlg.ShowModal)
./gui/relax_gui.py:        wx.CallAfter(self.show_results_viewer_safe,
warn=False)
./gui/relax_gui.py:        wx.CallAfter(self.status_bar.SetStatusText,
"(C) 2001-2013 the relax development team", 0)
./gui/relax_gui.py:        wx.CallAfter(self.status_bar.SetStatusText,
"Current data pipe:", 1)
./gui/relax_gui.py:        wx.CallAfter(self.status_bar.SetStatusText, 
pipe, 2)
./gui/icons.py:        wx.CallAfter(self.gui.exit_gui)
./gui/results_viewer.py:        wx.CallAfter(self.pipe_name.Enable, 
enable)
./gui/results_viewer.py:        wx.CallAfter(self.button_open.Enable, 
enable)
./gui/results_viewer.py:        wx.CallAfter(self.refresh_safe)
./gui/results_viewer.py:        wx.CallAfter(self.Raise)
./gui/analyses/auto_noe.py:
wx.CallAfter(self.field_nmr_frq.Enable, enable)
./gui/analyses/auto_noe.py:
wx.CallAfter(self.field_results_dir.Enable, enable)
./gui/analyses/auto_noe.py:
wx.CallAfter(self.spin_systems.Enable, enable)
./gui/analyses/auto_noe.py:
wx.CallAfter(self.peak_intensity.Enable, enable)
./gui/analyses/auto_noe.py:
wx.CallAfter(self.button_exec_relax.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.field_results_dir.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.field_pre_run_dir.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.spin_systems.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.field_cluster.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.button_isotope.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.button_r1.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.button_chemical_shift.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.button_interatom_define.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.peak_intensity.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.model_field.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.button_exec_relax.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.field_cluster.SetValue, "free spins")
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.field_cluster.SetValue, text)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.field_results_dir.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.spin_systems.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.relax_data.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.button_dipole_pair.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.button_csa.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.button_isotope_heteronuc.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.button_isotope_proton.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.local_tm_model_field.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.mf_model_field.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.grid_inc.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.mc_sim_num.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.max_iter.Enable, enable)
./gui/analyses/auto_model_free.py:        wx.CallAfter(self.mode.Enable, 
enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.button_exec_relax.Enable, enable)
./gui/analyses/auto_rx_base.py:
wx.CallAfter(self.field_nmr_frq.Enable, enable)
./gui/analyses/auto_rx_base.py:
wx.CallAfter(self.field_results_dir.Enable, enable)
./gui/analyses/auto_rx_base.py:
wx.CallAfter(self.spin_systems.Enable, enable)
./gui/analyses/auto_rx_base.py:
wx.CallAfter(self.peak_intensity.Enable, enable)
./gui/analyses/auto_rx_base.py:
wx.CallAfter(self.grid_inc.Enable, enable)
./gui/analyses/auto_rx_base.py:
wx.CallAfter(self.mc_sim_num.Enable, enable)
./gui/analyses/auto_rx_base.py:
wx.CallAfter(self.button_exec_relax.Enable, enable)
./gui/analyses/__init__.py:
wx.CallAfter(self.notebook.SetSelection, self._current)
./gui/analyses/__init__.py:
wx.CallAfter(status.observers.gui_analysis.notify)
./gui/analyses/base.py:
wx.CallAfter(self.spin_systems.SetValue,
str_to_gui(self.spin_count()))
./gui/uf_objects.py:            wx.CallAfter(app.gui.controller.Raise)
./gui/relax_prompt.py:        wx.CallAfter(self.prompt.Enable, enable)
./gui/controller.py:        wx.CallAfter(self.main_gauge.Pulse)
./gui/controller.py:            wx.CallAfter(self.mc_gauge_rx.SetValue, 
0)
./gui/controller.py:            wx.CallAfter(self.mc_gauge_mf.SetValue, 
0)
./gui/controller.py:            
wx.CallAfter(self.progress_gauge_mf.SetValue, 0)
./gui/controller.py:        wx.CallAfter(self.main_gauge.SetValue, 0)
./gui/controller.py:        wx.CallAfter(self.cdp.SetValue, 
str_to_gui(pipe))
./gui/controller.py:        wx.CallAfter(self.name.SetValue, 
str_to_gui(name))
./gui/controller.py:                wx.CallAfter(self.panel_rx.Show)
./gui/controller.py:            wx.CallAfter(self.update_rx)
./gui/controller.py:                wx.CallAfter(self.panel_rx.Hide)
./gui/controller.py:                wx.CallAfter(self.panel_mf.Show)
./gui/controller.py:            wx.CallAfter(self.update_mf)
./gui/controller.py:                wx.CallAfter(self.panel_mf.Hide)
./gui/controller.py:        wx.CallAfter(self.update_gauge)
./gui/controller.py:        wx.CallAfter(self.main_panel.Layout)
./gui/controller.py:                wx.CallAfter(self.timer.Start, 100)
./gui/controller.py:                
wx.CallAfter(self.mc_gauge_rx.SetValue, 100)
./gui/controller.py:                
wx.CallAfter(self.mc_gauge_mf.SetValue, 100)
./gui/controller.py:
wx.CallAfter(self.progress_gauge_mf.SetValue, 100)
./gui/controller.py:            wx.CallAfter(self.main_gauge.SetValue, 
100)
./gui/controller.py:            wx.CallAfter(self.main_gauge.SetValue, 0)
./gui/controller.py:                
wx.CallAfter(self.mc_gauge_rx.SetValue, 0)
./gui/controller.py:                
wx.CallAfter(self.mc_gauge_mf.SetValue, 0)
./gui/controller.py:
wx.CallAfter(self.progress_gauge_mf.SetValue, 0)
./gui/controller.py:            wx.CallAfter(self.main_gauge.SetValue, 0)
./gui/controller.py:            wx.CallAfter(self.mc_gauge_mf.SetValue, 
100)
./gui/controller.py:
wx.CallAfter(self.progress_gauge_mf.SetValue, 100)
./gui/controller.py:            wx.CallAfter(self.main_gauge.SetValue, 
100)
./gui/controller.py:            wx.CallAfter(self.mc_gauge_mf.SetValue, 
0)
./gui/controller.py:            
wx.CallAfter(self.progress_gauge_mf.SetValue, 0)
./gui/controller.py:            wx.CallAfter(self.main_gauge.SetValue, 0)
./gui/controller.py:
wx.CallAfter(self.global_model_mf.SetValue,
str_to_gui(status.auto_analysis[key].diff_model))
./gui/controller.py:
wx.CallAfter(self.progress_gauge_mf.SetValue, percent)
./gui/controller.py:
wx.CallAfter(self.progress_gauge_mf.SetValue, 0)
./gui/controller.py:
wx.CallAfter(self.progress_gauge_mf.SetValue, percent)
./gui/controller.py:            wx.CallAfter(self.mc_gauge_mf.SetValue, 
percent)
./gui/controller.py:            wx.CallAfter(self.mc_gauge_rx.SetValue, 
0)
./gui/controller.py:            wx.CallAfter(self.main_gauge.SetValue, 0)
./gui/controller.py:            wx.CallAfter(self.mc_gauge_rx.SetValue, 
percent)
./gui/controller.py:        wx.CallAfter(self.control.write)
./gui/controller.py:        wx.CallAfter(self.control.write)
./gui/pipe_editor.py:            wx.CallAfter(self.button_bundle.Enable, 
False)
./gui/pipe_editor.py:            wx.CallAfter(self.button_create.Enable, 
False)
./gui/pipe_editor.py:            wx.CallAfter(self.button_copy.Enable, 
False)
./gui/pipe_editor.py:            wx.CallAfter(self.button_delete.Enable, 
False)
./gui/pipe_editor.py:            wx.CallAfter(self.button_hybrid.Enable, 
False)
./gui/pipe_editor.py:            wx.CallAfter(self.button_switch.Enable, 
False)
./gui/pipe_editor.py:            wx.CallAfter(self.button_bundle.Enable, 
True)
./gui/pipe_editor.py:            wx.CallAfter(self.button_create.Enable, 
True)
./gui/pipe_editor.py:            wx.CallAfter(self.button_copy.Enable, 
True)
./gui/pipe_editor.py:            wx.CallAfter(self.button_delete.Enable, 
True)
./gui/pipe_editor.py:            wx.CallAfter(self.button_hybrid.Enable, 
True)
./gui/pipe_editor.py:            wx.CallAfter(self.button_switch.Enable, 
True)
./gui/pipe_editor.py:        wx.CallAfter(self.Raise)
./gui/pipe_editor.py:        wx.CallAfter(self.update_grid_safe)
./gui/interpreter.py:                    wx.CallAfter(gui_raise,
instance, raise_flag=False)
./gui/components/base_list.py:        
wx.CallAfter(self.build_element_safe)

2013/12/4 Edward d'Auvergne <edward@xxxxxxxxxxxxx>:
Hi,

It could be related to the first link.  These issues are difficult to
track down and find, as a GUI must naturally run multi-threaded and
multi-threaded debugging is a nightmare.  The problem is likely to be
fixed by wrapping a call to a wxPython method or function within a
wx.CallAfter() call.  Grep the sources to see how often we have used
this construct already.  This seems to only be triggered on your
system as I do not see it on Mac OS X 10.6, 10.7 and 10.8, Windows
2000, Vista and 7, or Linux (Mandriva 2008.1 32-bit, Mageia 1 64-bit,
Mageia 3 64-bit, SUSE 64-bit, etc.).  It may be related to wxPython
2.9.5.0.

This does not mean that it is not a bug in the relax GUI sources, just
that it has never been uncovered before.  One trick is to find a way
of reliably and quickly reproducing the error, maybe by running a
single GUI test, and then to use the print statements to find exactly
where the error occurred.  Then return statements or massive code
deletion can be used to exit a function early.  If the bug is gone
after that, you know the error was in the part that was deleted.  Then
this can be repeated until the bad function call can be found.  The
error could also be in the GUI test itself.  Here wx.Yield() calls are
often needed to prevent racing, as the test runs the GUI code much,
much faster than what a user sitting at a computer could ever do.

Regards,

Edward



On 3 December 2013 22:23, Troels E. Linnet
<NO-REPLY.INVALID-ADDRESS@xxxxxxx> wrote:
URL:
  <http://gna.org/bugs/?21324>

                 Summary: GUI error on mac OS X Maverics 10.9
                 Project: relax
            Submitted by: tlinnet
            Submitted on: Tue 03 Dec 2013 09:23:31 PM GMT
                Category: None
                Severity: 3 - Normal
                Priority: 3 - Low
                  Status: None
                 Privacy: Public
             Assigned to: None
         Originator Name:
        Originator Email:
             Open/Closed: Open
         Discussion Lock: Any
                 Release: Repository: trunk
        Operating System: Mac OS X (Intel)

    _______________________________________________________

Details:

I have tried to use:
wxPython2.9-osx-2.9.5.0-cocoa-py2.7.dmg
and
brew install wxmac

to get the same GUI errors.

Log attached.

*** Terminating app due to uncaught exception 'NSRangeException', 
reason: '***
-[__NSArrayM objectAtIndex:]: index 18446744073709551615 beyond bounds 
for
empty array'

Could it be related to this post?
http://stackoverflow.com/questions/17246160/textctrl-providing-an-out-of-bound-exception-in-wxpython

http://stackoverflow.com/questions/13085683/xcode-terminating-app-due-to-uncaught-exception-nsrangeexception

http://stackoverflow.com/questions/4289894/terminating-app-due-to-uncaught-exception-nsrangeexception-reason

I will now try with:
wxPython2.9-osx-2.9.5.0-carbon-py2.7.dmg





    _______________________________________________________

File Attachments:


-------------------------------------------------------
Date: Tue 03 Dec 2013 09:23:31 PM GMT  Name: gui_error.log  Size: 70kB 
  By:
tlinnet

<http://gna.org/bugs/download.php?file_id=19415>

    _______________________________________________________

Reply to this item at:

  <http://gna.org/bugs/?21324>

_______________________________________________
  Message sent via/by Gna!
  http://gna.org/


_______________________________________________
relax (http://www.nmr-relax.com)

This is the relax-devel mailing list
relax-devel@xxxxxxx

To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-devel



Related Messages


Powered by MHonArc, Updated Wed Dec 04 14:40:08 2013