I get it now. I knew how to call a `nengo.solvers`

instance, but I was confused about the arguments. I now understand you have to:

- Choose some evaluation points
- Get activities from neurons using those evaluation points
- Get the target points for those evaluation points
- Use the activities, the target and the encoders from the post population as arguments to the
`nengo.solvers`

This is demonstrated in the code below:

```
import nengo
import numpy as np
n_neurons = 100
seed = 0
with nengo.Network(seed=seed) as tmp_model:
pre = nengo.Ensemble(n_neurons, 1, seed=seed)
post = nengo.Ensemble(n_neurons, 1, seed=seed)
with nengo.Simulator(tmp_model) as tmp_sim:
pass
pre_built = tmp_sim.data[pre]
x = np.dot(pre_built.eval_points, pre_built.encoders.T / pre.radius)
activities = pre.neuron_type.rates(x, pre_built.gain, pre_built.bias)
solver = nengo.solvers.LstsqL2(weights=True)
weights, _ = solver(activities, pre_built.eval_points, E=tmp_sim.data[post].scaled_encoders.T)
```