Warning

This documentation is for an old version of IPython. You can find docs for newer versions here.

# octavemagic¶

Note

The octavemagic extension has been moved to oct2py as `oct2py.ipython`.

Magics for interacting with Octave via oct2py.

Note

The `oct2py` module needs to be installed separately and can be obtained using `easy_install` or `pip`.

You will also need a working copy of GNU Octave.

## Usage¶

To enable the magics below, execute `%load_ext octavemagic`.

`%octave`

```%octave [-i INPUT] [-o OUTPUT] [-s SIZE] [-f FORMAT] [code [code ...]]
```

Execute code in Octave, and pull some of the results back into the Python namespace:

```In [9]: %octave X = [1 2; 3 4]; mean(X)
Out[9]: array([[ 2., 3.]])
```

As a cell, this will run a block of Octave code, without returning any value:

```In [10]: %%octave
....: p = [-2, -1, 0, 1, 2]
....: polyout(p, 'x')

-2*x^4 - 1*x^3 + 0*x^2 + 1*x^1 + 2
```

In the notebook, plots are published as the output of the cell, e.g.:

```%octave plot([1 2 3], [4 5 6])
```

will create a line plot.

Objects can be passed back and forth between Octave and IPython via the -i and -o flags in line:

```In [14]: Z = np.array([1, 4, 5, 10])

In [15]: %octave -i Z mean(Z)
Out[15]: array([ 5.])

In [16]: %octave -o W W = Z * mean(Z)
Out[16]: array([  5.,  20.,  25.,  50.])

In [17]: W
Out[17]: array([  5.,  20.,  25.,  50.])
```

The size and format of output plots can be specified:

```In [18]: %%octave -s 600,800 -f svg
...: plot([1, 2, 3]);
```
positional arguments:
code
optional arguments:
 -i INPUT, --input INPUT Names of input variables to be pushed to Octave. Multiple names can be passed, separated by commas with no whitespace. -o OUTPUT, --output OUTPUT Names of variables to be pulled from Octave after executing cell body. Multiple names can be passed, separated by commas with no whitespace. -s SIZE, --size SIZE Pixel size of plots, “width,height”. Default is “-s 400,250”. -f FORMAT, --format FORMAT Plot format (png, svg or jpg).

`%octave_push`

Line-level magic that pushes a variable to Octave.

line should be made up of whitespace separated variable names in the IPython namespace:

```In [7]: import numpy as np

In [8]: X = np.arange(5)

In [9]: X.mean()
Out[9]: 2.0

In [10]: %octave_push X

In [11]: %octave mean(X)
Out[11]: 2.0
```

`%octave_pull`

Line-level magic that pulls a variable from Octave.

```In [18]: _ = %octave x = [1 2; 3 4]; y = 'hello'

In [19]: %octave_pull x y

In [20]: x
Out[20]:
array([[ 1.,  2.],
[ 3.,  4.]])

In [21]: y
Out[21]: 'hello'
```