# Conversions

## Python to Octave Types

Shows the round-trip data types, originating in Python. Lists and sets
will be converted to a numeric array if possible, falling back on cells.
If an Octave cell consisting of numbers is desired, use a tuple. Cell,
Struct, StructArray are Oct2Py convenience classes.

| Python | Octave | Python |
| ---------- | ------------- | --------------- |
| int | int32 | np.int32 |
| long | int64 | np.int64 |
| float | double | np.float64 |
| complex | double | np.complex128 |
| str | char | unicode |
| unicode | cell | unicode |
| bool | logical | np.bool |
| None | nan | np.nan |
| dict | struct | Struct |
| tuple | cell | Cell |
| list | array or cell | ndarray or Cell |
| set | array or cell | ndarray or Cell |
| Struct | struct | Struct |
| StructArray | struct array | StructArray |
| pd.Series | array | ndarray |
| pd.DataFrame | matrix | ndarray |

> **Note:** Pandas objects are converted to their underlying NumPy array via
> `.values` before being sent to Octave. The round-trip type is therefore
> `ndarray`, not the original `Series` or `DataFrame`.

## Numpy to Octave Types

Note that when `convert_to_float` is set (default is True), integer
types are converted to floating point before sending them to Octave.

| Numpy | Octave | Numpy |
| ------------ | ------- | ------------ |
| np.int8 | int8 | np.int8 |
| np.int16 | int16 | np.int16 |
| np.int32 | int32 | np.int32 |
| np.int64 | int64 | np.int64 |
| np.uint8 | uint8 | np.uint8 |
| np.uint16 | uint16 | np.uint16 |
| np.uint32 | uint32 | np.uint32 |
| np.uint64 | uint64 | np.uint64 |
| np.float16 | double | np.float64 |
| np.float32 | single | np.float32 |
| np.float64 | double | np.float64 |
| np.float128 | double | np.float64 |
| np.double | double | np.float64 |
| np.complex64 | double | np.complex64 |
| np.complex128 | double | np.complex128 |
| np.complex256 | double | np.complex128 |
| np.bool | logical | bool |
| np.str | cell | list |
| np.object | cell | list |
| sparse | sparse | sparse |
| recarray | struct array | StructArray |

## Octave to Python Types

These are handled unambiguously. The only known data type that is not
transferable is a function pointer, since Octave cannot save them to the
v6 MAT file format.

| Octave | Python |
| ------------------- | ---------------------- |
| array | ndarray |
| cell | Cell |
| struct | Struct |
| struct array | StructArray |
| logical | ndarray (of uint8) |
| sparse | sparse |
| user defined object | Oct2Py object pointer |
