Ticket #8422 (closed: wontfix)
IPython doc pop-up doesn't work correctly with default enum values
| Reported by: | Arturs Bekasovs | Owned by: | Russell Taylor | 
|---|---|---|---|
| Priority: | major | Milestone: | Release 3.1 | 
| Component: | Python | Keywords: | |
| Cc: | Blocked By: | ||
| Blocking: | Tester: | Owen Arnold | 
Description
Python function plotMD has the following argument with its default value:
def plotMD([..], normalization = mantid.api.MDNormalization.VolumeNormalization, [..]):
mantid.api.MDNormalization is exported from C++ in the following way:
boost::python::enum_<Mantid::API::MDNormalization>("MDNormalization") .value("NoNormalization", Mantid::API::NoNormalization) .value("VolumeNormalization", Mantid::API::VolumeNormalization) .value("NumEventsNormalization", Mantid::API::NumEventsNormalization);
However, this thing doesn't seem to work correctly with IPython. When we type "plotMD(" instead of usual documentation pop-up, we get the following error:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/IPython/qt/console/frontend_widget.py", line 775, in _document_contents_change
    self._call_tip()
  File "/usr/local/lib/python2.7/dist-packages/IPython/qt/console/frontend_widget.py", line 686, in _call_tip
    msg_id = self.kernel_client.object_info(name)
  File "/usr/local/lib/python2.7/dist-packages/IPython/kernel/inprocess/channels.py", line 116, in object_info
    self._dispatch_to_kernel(msg)
  File "/usr/local/lib/python2.7/dist-packages/IPython/kernel/inprocess/channels.py", line 146, in _dispatch_to_kernel
    idents, reply_msg = self.client.session.recv(stream, copy=False)
  File "/usr/local/lib/python2.7/dist-packages/IPython/kernel/zmq/session.py", line 696, in recv
    raise e
simplejson.decoder.JSONDecodeError: Expecting object: line 1 column 273 (char 273)
There is a work-around which seems to solve the problem:
DEFAULT_MD_NORMALIZATION = int(mantid.api.MDNormalization.VolumeNormalization) def plotMD([..], normalization = DEFAULT_MD_NORMALIZATION, [..]):
Doing the same without explicit int() conversion doesn't do the trick.
Change History
comment:1 Changed 7 years ago by Russell Taylor
- Status changed from new to verify
 - Resolution set to wontfix
 
comment:2 Changed 7 years ago by Russell Taylor
This error has now been solved in IPython. We'll pick that up if we ever upgrade.
Note: See
        TracTickets for help on using
        tickets.
    
I see that this specific problem was fixed in #4166. The error itself is deep within the IPython code (actually the exception is generated in zmq, which is a dependency of IPython) and I don't think there's anything we can do at our level other than fix issues we find in the manner given above (and I'm not aware of any other places that need fixing).
I've reported this back to the IPython people in case they want to look into it.