At the command line, install pIDLy:
$ pip install pidly
In IPython, install idlmagic:
In : %install_ext https://raw.github.com/ebellm/ipython-idlmagic/master/idlmagic.py
In Ipython, load the magics:
In : %load_ext idlmagic
idlmagic will first look for the
idl interpreter on the search path and fall back to
gdl if it is not found.
%idl magic enables one-line execution of idl commands in the IPython interpreter or notebook:
In : %idl print, findgen(5) 0.00000 1.00000 2.00000 3.00000 4.00000
Multi-line input can be entered with the
%%idl cell magic:
In : %%idl ...: x = findgen(5) ...: y = x^2. ...: ; comments are supported ...: print, $ ; as are line continuations ...: mean(y) ...: % Compiled module: MEAN. 6.00000
Passing variables between Python and IDL
The mechanisms for passing variables to and from IDL are based on those in the built-in
Variables may be pushed from Python into IDL with
In : msg = ' padded string ' In : import numpy as np In : arr = np.arange(5) In : %idl_push msg arr In : %%idl ....: print, strcompress(msg,/REMOVE_ALL) ....: print, reverse(arr) ....: paddedstring 4 3 2 1 0
Similarly, variables can be pulled from IDL back to Python with
In : %idl arr += 1 In : %idl_pull arr In : arr Out: array([1, 2, 3, 4, 5])
Variables can also be pushed and pulled from IDL inline using the
In : Z = np.array([1, 4, 5, 10]) In : %idl -i Z -o W W = sqrt(Z) In : W Out: array([ 1. , 2. , 2.23606801, 3.1622777 ], dtype=float32)
Inline plots are displayed automatically by the IPython notebook. IDL Direct graphics are used. The optional
-s width,height argument (or
600,375) specifies the size of the resulting png image.
In : %%idl -s 400,400 plot, findgen(10), xtitle='X', ytitle='Y'
Known issues and limitations
- Only one plot can be rendered per cell
- Processing for possibly unused plot output slows execution
- Scalar variables from IDL may be returned as single-element Numpy arrays
%idlline magic fails with
TypeError: coercing to Unicode: need string or buffer, dict foundin IPython 0.13.2 and below due to a known bug; IPython 1.0 and later should work as expected.