# API Outline

The TEMPO Collaboration is continuously developing new methods to make this package applicable to a wider set of scenarios. This calls for a flexible API design to allow to reuse the same objects with different algorithms. We therefore choose an almost fully object oriented approach. The functions and objects fall into 4 categories:

**Physical**: Consists of objects that describe physical quantities, like for example a system Hamiltonian or the spectral density of an environment.**Methods**: Gathers the information from physical objects and applies a numerical method using particular simulation parameters.**Results**: Encode the results of a computation. Unlike physical objects, these objects may depend on computational parameters (like for example a specific time step length).**Utilities**: Supplies some handy utilities such as shorthands for the Pauli operators.

## Physical

### Systems

- class
`oqupy.system.BaseSystem`

Abstract class representing a quantum system of interest.

- class
`oqupy.system.System`

Encodes system Hamiltonian and possibly some additional Markovian decay.

- class
`oqupy.system.TimeDependentSystem`

Encodes a time dependent system Hamiltonian and possibly some additional time dependent Markovian decay.

- class
`oqupy.system.TimeDependentSystemWithField`

Encodes a system Hamiltonian (and possibly some additional time dependent Markovian decay) that depends on both time and the expectation value of a field (a complex scalar) to which the system couples.

- class
- class
`oqupy.system.MeanFieldSystem`

Encodes a collection of time dependent systems that couple to a common field which evolves according to a prescribed equation of motion.

- class
`oqupy.system.SystemChain`

Encodes a 1D chain of systems and possibly some additional Markovian decay.

### Control

- class
`oqupy.control.Control`

Encodes control operations on oqupy.system.BaseSystem objects.

- class
`oqupy.control.ChainControl`

Encodes control operations on oqupy.system.SystemChain objects.

### Environment

- class
`oqupy.correlations.BaseCorrelations`

Abstract class representing the environments auto-correlations.

- class
`oqupy.correlations.CustomCorrelations`

Encode an explicitly given environment auto-correlation function.

- class
`oqupy.correlations.CustomSD`

Encodes the auto-correlations for a given spectral density.

- class
`oqupy.correlations.PowerLawSD`

Encodes the auto-correlations for a given spectral density of a power law form.

- class
- class
`oqupy.bath.Bath`

Bundles a

`oqupy.correlations.BaseCorrelations`

object together with a coupling operator.

## Methods

### TEMPO

(Time Evolving Matrix Product Operator)

- class
`oqupy.tempo.TempoParameters`

Stores a set of parameters for a TEMPO computation.

- class
`oqupy.tempo.Tempo`

Class to facilitate a TEMPO computation.

- method
`oqupy.tempo.Tempo.compute()`

Method that carries out a TEMPO computation and creates a

`oqupy.dynamics.Dynamics`

object.

- method
- class
`oqupy.tempo.MeanFieldTempo`

Class to facilitate a TEMPO computation with concurrent evolution of a coherent field.

- method
`oqupy.tempo.MeanFieldTempo.compute()`

Method that carries out a TEMPO computation while evolving a coherent field, and creates a

`oqupy.dynamics.MeanFieldDyanmics`

object.

- method
- function
`oqupy.tempo.guess_tempo_parameters()`

Function that chooses an appropriate set of parameters for a particular TEMPO computation.

### PT-TEMPO

(Process Tensor - Time Evolving Matrix Product Operator)

- class
`oqupy.pt_tempo.PtTempo`

Class to facilitate a PT-TEMPO computation.

- method
`oqupy.pt_tempo.PtTempo.compute()`

Method that carries out a PT-TEMPO computation and creates an

`oqupy.process_tensor.BaseProcessTensor`

object.

- method

### Process Tensor Applications

- function
`oqupy.contractions.compute_dynamics()`

Compute a

`oqupy.dynamics.Dynamics`

object for given`oqupy.system.System`

or`oqupy.system.TimeDependentSystem`

and`oqupy.control.Control`

and`oqupy.process_tensor.BaseProcessTensor`

objects.- function
`oqupy.contractions.compute_dynamics_with_field()`

Compute a

`oqupy.dynamics.MeanFieldDynamics`

object for given`oqupy.system.MeanFieldSystem`

and list of`oqupy.control.Control`

objects and list of`oqupy.process_tensor.BaseProcessTensor`

objects.- function
`oqupy.contractions.compute_correlations()`

Compute two time correlations for given

`oqupy.system.BaseSystem`

and`oqupy.process_tensor.BaseProcessTensor`

objects.- class
`oqupy.bath_dynamics.TwoTimeBathCorrelations`

Class to facilitate calculation of two-time bath correlations.

- method
`oqupy.bath_dynamics.TwoTimeBathCorrelations.occupation()`

Function to calculate the change in bath occupation in a particular bandwidth.

- method
`oqupy.bath_dynamics.TwoTimeBathCorrelations.correlation()`

Function to calculate two-time correlation function between two frequency bands of a bath.

- method

### PT-TEBD

(Process Tensor - Time Evolving Block Decimation)

- class
`oqupy.pt_tebd.PtTebdParameters`

Stores a set of parameters for a PT-TEBD computation.

- class
`oqupy.pt_tebd.PtTebd`

Class to facilitate a PT-TEBD computation.

- method
`oqupy.pt_tebd.PtTebd.compute()`

Method that carries out a PT-TEMPO computation and returns an results dictionary.

- method

## Results

- class
`oqupy.dynamics.Dynamics`

Object that encodes the discretized evolution of the reduced density matrix of a system.

- class
`oqupy.dynamics.MeanFieldDynamics`

Object that encodes the discretized evolution of the reduced density matrix of one or more time-dependent systems together with that of a classical field coupled to the systems.

- class
`oqupy.process_tensor.BaseProcessTensor`

Object that encodes a so called process tensor (which captures all possible Markovian and non-Markovian interactions between some system and an environment).

## Utilities

- module
`oqupy.operators`

Supplies several commonly used operators, such as the Pauli matrices and spin density matrices.

- function
`oqupy.helpers.plot_correlations_with_parameters()`

A helper function to plot an auto-correlation function and the sampling points given by a set of parameters for a TEMPO computation.