## Use MATLAB`duration` Types with Python

These examples show how MATLAB® converts between MATLAB `duration` values and Python® `timedelta` or NumPy `timedelta64` values.

### Pass MATLAB`duration` Scalar to Python Function

When you pass a MATLAB `duration` object, the interface converts it to a Python `timedelta` object. For example, create a scalar MATLAB `duration` object. This value is precise enough to include microseconds.

```mwd = duration("01:02:34.56789",... "Format","hh:mm:ss.SSSSS") ```
```mwd = duration 01:02:34.56789 ```

Then pass it as an argument to a Python function, such as the `list` constructor. When you pass a MATLAB `duration` object as an argument to a Python function, the interface converts it to a Python `timedelta` object.

```pyListOfTimedelta = py.list({mwd}) ```
```pyListOfTimedelta = Python list with values: [datetime.timedelta(seconds=3754, microseconds=567890)] ```

### Handle Python`duration` Scalar Returned from Python Function

When a Python function returns a `timedelta` object, convert it to a MATLAB `duration` object by calling the `duration` function. The converted `duration` object always has the default format. To change its format, set its `Format` property. In this example, set the format to display microseconds.

```mwdConverted = duration(pyListOfTimedelta{1}); mwdConverted.Format = "hh:mm:ss.SSSSS" ```
```mwdConverted = duration 01:02:34.56789 ```

### Pass `timedelta` Arrays

To store a MATLAB a `duration` array as a list of Python `timedelta` values, first convert it to a cell array.

```mwd = duration(1:2,2,34); mwd = num2cell(mwd) ```
```mwd = 1×2 cell array {[01:02:34]} {[02:02:34]} ```

Then pass the cell array as an argument to a Python function. The interface converts the cell array to a list of Python `timedelta` values.

```py.print(mwd) ```
```(datetime.timedelta(seconds=3754), datetime.timedelta(seconds=7354)) ```

### Pass NumPy `duration` Arrays

You can convert between MATLAB `duration` arrays and NumPy `timedelta64` arrays. For example, create a MATLAB `duration` array.

```mwd = duration(1:2,2,34) ```
```mwd = 1×2 duration array 01:02:34 02:02:34 ```

If you have NumPy installed, then the interface converts the array to a NumPy `timedelta64` array.

```py.print(mwd) ```
```[[3754000000 7354000000]] ```
```py.print(py.type(mwd)) ```
```<class 'numpy.ndarray'> ```

To convert a NumPy `timedelta64` array to a MATLAB `duration` array, use the `duration` function.

```pyTimedeltas = py.numpy.array(mwd) ```
```pyTimedeltas = Python ndarray with properties: T: [1×1 py.numpy.ndarray] base: [1×1 py.NoneType] ctypes: [1×1 py.numpy.core._internal._ctypes] dtype: [1×1 py.numpy.dtype[timedelta64]] flags: [1×1 py.numpy.core.multiarray.flagsobj] flat: [1×1 py.numpy.flatiter] imag: [1×1 py.numpy.ndarray] itemsize: [1×1 py.int] nbytes: [1×1 py.int] ndim: [1×1 py.int] real: [1×1 py.numpy.ndarray] shape: [1×2 py.tuple] size: [1×1 py.int] strides: [1×2 py.tuple] [[3754000000 7354000000]] ```
```mwdConverted = duration(pyTimedeltas) ```
```mwdConverted = 1×2 duration array 01:02:34 02:02:34 ```

### Handle Multiple Python`timedelta` Objects Returned from Python Function

A Python function might return multiple `timedelta` objects as a list or a tuple of Python `timedelta` objects. Use the MATLAB `duration` function to convert the list or tuple to a MATLAB `duration` array. The list or tuple must contain Python `datetime.timedelta` types only.

Suppose that a function returns a list, `ptdList`. For the purpose of this example, create `ptdList` with this code:

```td1 = py.datetime.timedelta(hours=25, seconds=2); td2 = py.datetime.timedelta(days=50, hours=21, seconds=22); ptdList = py.list({td1, td2})```
```ptdList = Python list with values: [datetime.timedelta(days=1, seconds=3602), datetime.timedelta(days=50, seconds=75622)] Use string, double, duration or cell function to convert to a MATLAB array. ```

Calculate the elapsed time between the `timedelta` objects:

```mwtdList = duration(ptdList); D = mwtdList(1) + mwtdList(2)```
```D = 1246:00:24 ```