# ‘Farming’ with Harvester Example

# ‘Farming’ with `Harvester`

Example#

This examples demonstrates ‘farming’ runs, that is, using a `Harvester`

to perform and combine succesive, disjoint sets of runs.

First we define a simple trig function to explore and label with a `Runner`

:

```
[1]:
```

```
import xyzpy as xyz
import numpy as np
def trig(f, x, amp, phi):
trig_fn = getattr(np, f)
err = 0.2 + 0.1 * np.random.randn()
return amp * trig_fn(x - phi), err
r = xyz.Runner(trig, ['f(x)', 'ef(x)'])
```

The harvester is composed of this `Runner`

and logic for merging for saving each new set of runs.

```
[2]:
```

```
h = xyz.Harvester(r, data_name='trig.h5')
```

We perform one set of runs first:

```
[3]:
```

```
combos_1 = {
'f': ['sin', 'cos'],
'x': np.linspace(-5, 5, 101),
'amp': [1, 2, 3],
'phi': [0.4, 0.8],
}
```

```
[4]:
```

```
h.harvest_combos(combos_1)
```

```
100%|##########| 1212/1212 [00:00<00:00, 198993.83it/s]
```

Which we can plot:

```
[5]:
```

```
h.full_ds.xyz.ilineplot(x='x', y='f(x)', z='f', col='amp', row='phi', y_err='ef(x)')
```