# pmm_tools.evolution

*module*

Coherent evolution with exact linear interpolation between control knots.

Integrate pure states with SciPy DOP853, retaining the supplied Hilbert space.
Each knot is an integration boundary, so adaptive steps cannot skip a ramp.

## pmm_tools.evolution.evolve

*function*

```python
def evolve(H_static, operators, knots, values, psi0, times, *, rtol=1e-09, atol=1e-11)
```

Integrate the pure-state Schrödinger equation along linear controls.

`H_static` and each control operator have shape `(D, D)` in the
same Fock basis as `psi0` of shape `(D,)`. The products of operator
matrices and control values have units μeV. `knots` is a strictly
increasing ns array and `values` has shape `(n_knots, n_controls)`;
at each knot, `H=H_static+sum(value*operator)`. Chemical potentials
are absolute unless their baseline is already in `H_static`.
`times` increases strictly in ns and includes both control endpoints,
but need not include interior knots. Return complex states of shape
`(len(times), D)` without renormalizing. DOP853 restarts at each knot;
`rtol`/`atol` set its local integration tolerances. The supplied
Hilbert space is retained, with no noise averaging or state projection.

[View source](https://gitlab.kwant-project.org/qt/pmm_tools/-/blob/e412d66507a554f455ef935b755fc39f28ab4e05/pmm_tools/evolution.py#L13-L60)
