# newtonprop.propagator module¶

Newton Propagator

## Summary¶

Functions:

 jit step Evaluate $$f(A\,dt)\,v$$, for example $$e^{-i\,A\,dt}\,v$$ for the propagation of a quantum state.

__all__: step

## Reference¶

newtonprop.propagator.jit(*args, **kwargs)[source]
newtonprop.propagator.step(A, v, dt, func='exp', m_max=10, maxrestart=100, tol=1e-12, inner=None, norm=None, zero=None)[source]

Evaluate $$f(A\,dt)\,v$$, for example $$e^{-i\,A\,dt}\,v$$ for the propagation of a quantum state.

Applies the result of an arbitrary abstract operator function $$f(A\,dt)$$ to an abstract state $$v$$, where $$A$$ is an abstract operator and $$dt$$ is a scalar factor. The intended application is computing a single time step $$dt$$ of the time evolution of a quantum state, where the form of the time evolution operator/dynamical map is $$e^{-i\,A\,dt}$$. If $$v$$ is a Hilbert space state, $$A$$ is the system Hamiltonian (constant over the duration $$dt$$). If $$v$$ is a density matrix, $$A = i \Liouville$$ with the Liouvillian super-operator $$\Liouville$$.

The operator $$f(A\,dt)$$ is never explicitly constructed, only its application to $$v$$ is calculated. This distinguishes the Newton propagator from functions like scipy.linalg.expm() for matrix exponentiation. Internally, it uses an iterative restarted Krylov projection of $$(A\,dt)$$, where the Krylov dimension in each iteration is m_max. Consequently, storage for only m_max Arnoldi-vectors of the same size as v is required.

Parameters: A (callable) – Function encoding the abstract operator $$A$$. Calling A(v) must return the result of applying $$A$$ to $$v$$. v – Initial state $$v$$. dt (float) – scalar parameter (time step $$dt$$) func (callable or str) – The scalar version of the operator-function $$f$$. Must take one complex argument and return a complex value. Note that func will only ever be called with a scalar argument, not with the argument $$(A\,dt)$$. If passed as a string, func may have the following values, corresponding to “standard” functions: 'exp': lambda x: np.exp(x) 'expmi': lambda x: np.exp(-1j * x) 'expi': lambda x: np.exp(1j * x) m_max (int) – Maximal Krylov dimension maxrestart (int) – Maximal number of Newton restarts (iterations of the algorithm) tol (float) – Desired precision of the result inner (callable) – Function that evaluates an inner product. Must take two arguments of the type of v0 and return a complex number. If None, defaults to numpy.vdot(). norm (callable) – Function that calculates the norm of a state. Must take one argument of the type of v0 and return a real number. If None, defaults to numpy.linalg.norm(). The norm must be induced by the inner product specified by inner. zero (callable) – Function that takes v as input and allocates and returns a new zero state of the same type and shape as v. If None, defaults to lambda v: numpy.zeros(shape=v.shape, dtype=v.dtype) The result of the operator-function $$f(A\,dt)$$ applied to $$v$$. The return value will be of the same type as the input v.

Note

The input state may be of any array-like type. It should have (but is not strictly required to have) a shape attribute. It must support being multiplied or divided by a scalar, e.g. state / 2.0 or 2 * state. Lastly, it must support in-place addition with another state, state += state2. All other mathematical properties of state can be defined via custom inner, norm, and zero functions.

Mathematically, state must be an element a Hilbert space (a “complete inner product space”). This includes density matrices, which can be interpreted as elements of a Hilbert space provided one chooses an appropriate norm and inner product.

Warning

The norm must be the one induced by the inner product,

$\Norm{v} \equiv \sqrt{\Braket{v}{v}}$

The parameters inner and norm must fulfill this definition. For density matrices, they should be the Hilbert-Schmidt product and the Hilbert-Schmidt norm. The “operator norm” has no associated inner product. If the operator norm is used, density matrices are not elements of a Hilbert space, but of a C* algebra, which would not allow for the evaluation of the propagator.

A mismatch between norm and inner leads to subtle errors that will not be obvious (e.g., a substantial lack of precision)