Functions¶
Manipulation and Creation of States and Operators¶
Quantum States¶

basis
(N, n=0, offset=0)[source]¶ Generates the vector representation of a Fock state.
Parameters:  N (int) – Number of Fock states in Hilbert space.
 n (int) – Integer corresponding to desired number state, defaults to 0 if omitted.
 offset (int (default 0)) – The lowest number state that is included in the finite number state representation of the state.
Returns: state – Qobj representing the requested number state
n>
.Return type: qobj
Examples
>>> basis(5,2) Quantum object: dims = [[5], [1]], shape = [5, 1], type = ket Qobj data = [[ 0.+0.j] [ 0.+0.j] [ 1.+0.j] [ 0.+0.j] [ 0.+0.j]]
Notes
A subtle incompatibility with the quantum optics toolbox: In QuTiP:
basis(N, 0) = ground state
but in the qotoolbox:
basis(N, 1) = ground state

bell_state
(state='00')[source]¶ Returns the Bell state:
Returns: Bell_state – Bell state Return type: qobj

bra
(seq, dim=2)[source]¶ Produces a multiparticle bra state for a list or string, where each element stands for state of the respective particle.
Parameters: seq (str / list of ints or characters) – Each element defines state of the respective particle. (e.g. [1,1,0,1] or a string “1101”). For qubits it is also possible to use the following conventions:  ‘g’/’e’ (ground and excited state)  ‘u’/’d’ (spin up and down)  ‘H’/’V’ (horizontal and vertical polarization) Note: for dimension > 9 you need to use a list.  dim : int (default: 2) / list of ints
 Space dimension for each particle: int if there are the same, list if they are different.
Returns: bra Return type: qobj Examples
>>> bra("10") Quantum object: dims = [[1, 1], [2, 2]], shape = [1, 4], type = bra Qobj data = [[ 0. 0. 1. 0.]]
>>> bra("Hue") Quantum object: dims = [[1, 1, 1], [2, 2, 2]], shape = [1, 8], type = bra Qobj data = [[ 0. 1. 0. 0. 0. 0. 0. 0.]]
>>> bra("12", 3) Quantum object: dims = [[1, 1], [3, 3]], shape = [1, 9], type = bra Qobj data = [[ 0. 0. 0. 0. 0. 1. 0. 0. 0.]]
>>> bra("31", [5, 2]) Quantum object: dims = [[1, 1], [5, 2]], shape = [1, 10], type = bra Qobj data = [[ 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]]

coherent
(N, alpha, offset=0, method='operator')[source]¶ Generates a coherent state with eigenvalue alpha.
Constructed using displacement operator on vacuum state.
Parameters:  N (int) – Number of Fock states in Hilbert space.
 alpha (float/complex) – Eigenvalue of coherent state.
 offset (int (default 0)) – The lowest number state that is included in the finite number state representation of the state. Using a nonzero offset will make the default method ‘analytic’.
 method (string {'operator', 'analytic'}) – Method for generating coherent state.
Returns: state – Qobj quantum object for coherent state
Return type: qobj
Examples
>>> coherent(5,0.25j) Quantum object: dims = [[5], [1]], shape = [5, 1], type = ket Qobj data = [[ 9.69233235e01+0.j ] [ 0.00000000e+00+0.24230831j] [ 4.28344935e02+0.j ] [ 0.00000000e+000.00618204j] [ 7.80904967e04+0.j ]]
Notes
Select method ‘operator’ (default) or ‘analytic’. With the ‘operator’ method, the coherent state is generated by displacing the vacuum state using the displacement operator defined in the truncated Hilbert space of size ‘N’. This method guarantees that the resulting state is normalized. With ‘analytic’ method the coherent state is generated using the analytical formula for the coherent state coefficients in the Fock basis. This method does not guarantee that the state is normalized if truncated to a small number of Fock states, but would in that case give more accurate coefficients.

coherent_dm
(N, alpha, offset=0, method='operator')[source]¶ Density matrix representation of a coherent state.
Constructed via outer product of
qutip.states.coherent
Parameters:  N (int) – Number of Fock states in Hilbert space.
 alpha (float/complex) – Eigenvalue for coherent state.
 offset (int (default 0)) – The lowest number state that is included in the finite number state representation of the state.
 method (string {'operator', 'analytic'}) – Method for generating coherent density matrix.
Returns: dm – Density matrix representation of coherent state.
Return type: qobj
Examples
>>> coherent_dm(3,0.25j) Quantum object: dims = [[3], [3]], shape = [3, 3], type = oper, isHerm = True Qobj data = [[ 0.93941695+0.j 0.000000000.23480733j 0.04216943+0.j ] [ 0.00000000+0.23480733j 0.05869011+0.j 0.000000000.01054025j] [0.04216943+0.j 0.00000000+0.01054025j 0.00189294+0.j ]]
Notes
Select method ‘operator’ (default) or ‘analytic’. With the ‘operator’ method, the coherent density matrix is generated by displacing the vacuum state using the displacement operator defined in the truncated Hilbert space of size ‘N’. This method guarantees that the resulting density matrix is normalized. With ‘analytic’ method the coherent density matrix is generated using the analytical formula for the coherent state coefficients in the Fock basis. This method does not guarantee that the state is normalized if truncated to a small number of Fock states, but would in that case give more accurate coefficients.

enr_state_dictionaries
(dims, excitations)[source]¶ Return the number of states, and lookupdictionaries for translating a state tuple to a state index, and vice versa, for a system with a given number of components and maximum number of excitations.
Parameters:  dims (list) – A list with the number of states in each subsystem.
 excitations (integer) – The maximum numbers of dimension
Returns: nstates, state2idx, idx2state – The number of states nstates, a dictionary for looking up state indices from a state tuple, and a dictionary for looking up state state tuples from state indices.
Return type: integer, dict, dict

enr_thermal_dm
(dims, excitations, n)[source]¶ Generate the density operator for a thermal state in the excitationnumber restricted state space defined by the dims and exciations arguments. See the documentation for enr_fock for a more detailed description of these arguments. The temperature of each mode in dims is specified by the average number of excitatons n.
Parameters:  dims (list) – A list of the dimensions of each subsystem of a composite quantum system.
 excitations (integer) – The maximum number of excitations that are to be included in the state space.
 n (integer) – The average number of exciations in the thermal state. n can be a float (which then applies to each mode), or a list/array of the same length as dims, in which each element corresponds specifies the temperature of the corresponding mode.
Returns: dm – Thermal state density matrix.
Return type:

enr_fock
(dims, excitations, state)[source]¶ Generate the Fock state representation in a excitationnumber restricted state space. The dims argument is a list of integers that define the number of quantums states of each component of a composite quantum system, and the excitations specifies the maximum number of excitations for the basis states that are to be included in the state space. The state argument is a tuple of integers that specifies the state (in the number basis representation) for which to generate the Fock state representation.
Parameters:  dims (list) – A list of the dimensions of each subsystem of a composite quantum system.
 excitations (integer) – The maximum number of excitations that are to be included in the state space.
 state (list of integers) – The state in the number basis representation.
Returns: ket – A Qobj instance that represent a Fock state in the exicationnumber restricted state space defined by dims and exciations.
Return type:

fock
(N, n=0, offset=0)[source]¶ Bosonic Fock (number) state.
Same as
qutip.states.basis
.Parameters:  N (int) – Number of states in the Hilbert space.
 n (int) –
int
for desired number state, defaults to 0 if omitted.
Returns: Return type: Requested number state \(\leftn\right>\).
Examples
>>> fock(4,3) Quantum object: dims = [[4], [1]], shape = [4, 1], type = ket Qobj data = [[ 0.+0.j] [ 0.+0.j] [ 0.+0.j] [ 1.+0.j]]

fock_dm
(N, n=0, offset=0)[source]¶ Density matrix representation of a Fock state
Constructed via outer product of
qutip.states.fock
.Parameters:  N (int) – Number of Fock states in Hilbert space.
 n (int) –
int
for desired number state, defaults to 0 if omitted.
Returns: dm – Density matrix representation of Fock state.
Return type: qobj
Examples
>>> fock_dm(3,1) Quantum object: dims = [[3], [3]], shape = [3, 3], type = oper, isHerm = True Qobj data = [[ 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 1.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j]]

ghz_state
(N=3)[source]¶ Returns the Nqubit GHZstate.
Parameters: N (int (default=3)) – Number of qubits in state Returns: G – Nqubit GHZstate Return type: qobj

maximally_mixed_dm
(N)[source]¶ Returns the maximally mixed density matrix for a Hilbert space of dimension N.
Parameters: N (int) – Number of basis states in Hilbert space. Returns: dm – Thermal state density matrix. Return type: qobj

ket
(seq, dim=2)[source]¶ Produces a multiparticle ket state for a list or string, where each element stands for state of the respective particle.
Parameters: seq (str / list of ints or characters) – Each element defines state of the respective particle. (e.g. [1,1,0,1] or a string “1101”). For qubits it is also possible to use the following conventions:  ‘g’/’e’ (ground and excited state)  ‘u’/’d’ (spin up and down)  ‘H’/’V’ (horizontal and vertical polarization) Note: for dimension > 9 you need to use a list.  dim : int (default: 2) / list of ints
 Space dimension for each particle: int if there are the same, list if they are different.
Returns: ket Return type: qobj Examples
>>> ket("10") Quantum object: dims = [[2, 2], [1, 1]], shape = [4, 1], type = ket Qobj data = [[ 0.] [ 0.] [ 1.] [ 0.]]
>>> ket("Hue") Quantum object: dims = [[2, 2, 2], [1, 1, 1]], shape = [8, 1], type = ket Qobj data = [[ 0.] [ 1.] [ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 0.]]
>>> ket("12", 3) Quantum object: dims = [[3, 3], [1, 1]], shape = [9, 1], type = ket Qobj data = [[ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 1.] [ 0.] [ 0.] [ 0.]]
>>> ket("31", [5, 2]) Quantum object: dims = [[5, 2], [1, 1]], shape = [10, 1], type = ket Qobj data = [[ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 1.] [ 0.] [ 0.]]

ket2dm
(Q)[source]¶ Takes input ket or bra vector and returns density matrix formed by outer product.
Parameters: Q (qobj) – Ket or bra type quantum object. Returns: dm – Density matrix formed by outer product of Q. Return type: qobj Examples
>>> x=basis(3,2) >>> ket2dm(x) Quantum object: dims = [[3], [3]], shape = [3, 3], type = oper, isHerm = True Qobj data = [[ 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 1.+0.j]]

phase_basis
(N, m, phi0=0)[source]¶ Basis vector for the mth phase of the PeggBarnett phase operator.
Parameters:  N (int) – Number of basis vectors in Hilbert space.
 m (int) – Integer corresponding to the mth discrete phase phi_m=phi0+2*pi*m/N
 phi0 (float (default=0)) – Reference phase angle.
Returns: state – Ket vector for mth PeggBarnett phase operator basis state.
Return type: qobj
Notes
The PeggBarnett basis states form a complete set over the truncated Hilbert space.

projection
(N, n, m, offset=0)[source]¶ The projection operator that projects state \(m>\) on state \(n>\).
Parameters:  N (int) – Number of basis states in Hilbert space.
 m (n,) – The number states in the projection.
 offset (int (default 0)) – The lowest number state that is included in the finite number state representation of the projector.
Returns: oper – Requested projection operator.
Return type: qobj

qutrit_basis
()[source]¶ Basis states for a three level system (qutrit)
Returns: qstates – Array of qutrit basis vectors Return type: array

singlet_state
()[source]¶ Returns the two particle singletstate:
that is identical to the fourth bell state.
Returns: Bell_state – B11> Bell state Return type: qobj

spin_state
(j, m, type='ket')[source]¶ Generates the spin state j, m>, i.e. the eigenstate of the spinj Sz operator with eigenvalue m.
Parameters:  j (float) – The spin of the state ().
 m (int) – Eigenvalue of the spinj Sz operator.
 type (string {'ket', 'bra', 'dm'}) – Type of state to generate.
Returns: state – Qobj quantum object for spin state
Return type: qobj

spin_coherent
(j, theta, phi, type='ket')[source]¶ Generates the spin state j, m>, i.e. the eigenstate of the spinj Sz operator with eigenvalue m.
Parameters:  j (float) – The spin of the state.
 theta (float) – Angle from z axis.
 phi (float) – Angle from x axis.
 type (string {'ket', 'bra', 'dm'}) – Type of state to generate.
Returns: state – Qobj quantum object for spin coherent state
Return type: qobj

state_number_enumerate
(dims, excitations=None, state=None, idx=0)[source]¶ An iterator that enumerate all the state number arrays (quantum numbers on the form [n1, n2, n3, ...]) for a system with dimensions given by dims.
Example
>>> for state in state_number_enumerate([2,2]): >>> print(state) [ 0 0 ] [ 0 1 ] [ 1 0 ] [ 1 1 ]
Parameters:  dims (list or array) – The quantum state dimensions array, as it would appear in a Qobj.
 state (list) – Current state in the iteration. Used internally.
 excitations (integer (None)) – Restrict state space to states with excitation numbers below or equal to this value.
 idx (integer) – Current index in the iteration. Used internally.
Returns: state_number – Successive state number arrays that can be used in loops and other iterations, using standard state enumeration by definition.
Return type: list

state_number_index
(dims, state)[source]¶ Return the index of a quantum state corresponding to state, given a system with dimensions given by dims.
Example
>>> state_number_index([2, 2, 2], [1, 1, 0]) 6
Parameters:  dims (list or array) – The quantum state dimensions array, as it would appear in a Qobj.
 state (list) – State number array.
Returns: idx – The index of the state given by state in standard enumeration ordering.
Return type: int

state_index_number
(dims, index)[source]¶ Return a quantum number representation given a state index, for a system of composite structure defined by dims.
Example
>>> state_index_number([2, 2, 2], 6) [1, 1, 0]
Parameters:  dims (list or array) – The quantum state dimensions array, as it would appear in a Qobj.
 index (integer) – The index of the state in standard enumeration ordering.
Returns: state – The state number array corresponding to index index in standard enumeration ordering.
Return type: list

state_number_qobj
(dims, state)[source]¶ Return a Qobj representation of a quantum state specified by the state array state.
Example
>>> state_number_qobj([2, 2, 2], [1, 0, 1]) Quantum object: dims = [[2, 2, 2], [1, 1, 1]], shape = [8, 1], type = ket Qobj data = [[ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 1.] [ 0.] [ 0.]]
Parameters:  dims (list or array) – The quantum state dimensions array, as it would appear in a Qobj.
 state (list) – State number array.
Returns: state – The state as a
qutip.Qobj.qobj
instance.Return type: qutip.Qobj.qobj

thermal_dm
(N, n, method='operator')[source]¶ Density matrix for a thermal state of n particles
Parameters:  N (int) – Number of basis states in Hilbert space.
 n (float) – Expectation value for number of particles in thermal state.
 method (string {'operator', 'analytic'}) –
string
that sets the method used to generate the thermal state probabilities
Returns: dm – Thermal state density matrix.
Return type: qobj
Examples
>>> thermal_dm(5, 1) Quantum object: dims = [[5], [5]], shape = [5, 5], type = oper, isHerm = True Qobj data = [[ 0.51612903 0. 0. 0. 0. ] [ 0. 0.25806452 0. 0. 0. ] [ 0. 0. 0.12903226 0. 0. ] [ 0. 0. 0. 0.06451613 0. ] [ 0. 0. 0. 0. 0.03225806]]
>>> thermal_dm(5, 1, 'analytic') Quantum object: dims = [[5], [5]], shape = [5, 5], type = oper, isHerm = True Qobj data = [[ 0.5 0. 0. 0. 0. ] [ 0. 0.25 0. 0. 0. ] [ 0. 0. 0.125 0. 0. ] [ 0. 0. 0. 0.0625 0. ] [ 0. 0. 0. 0. 0.03125]]
Notes
The ‘operator’ method (default) generates the thermal state using the truncated number operator
num(N)
. This is the method that should be used in computations. The ‘analytic’ method uses the analytic coefficients derived in an infinite Hilbert space. The analytic form is not necessarily normalized, if truncated too aggressively.
Quantum Operators¶
This module contains functions for generating Qobj representation of a variety of commonly occuring quantum operators.

charge
(Nmax, Nmin=None, frac=1)[source]¶ Generate the diagonal charge operator over charge states from Nmin to Nmax.
Parameters:  Nmax (int) – Maximum charge state to consider.
 Nmin (int (default = Nmax)) – Lowest charge state to consider.
 frac (float (default = 1)) – Specify fractional charge if needed.
Returns: C – Charge operator over [Nmin,Nmax].
Return type: Notes
New in version 3.2.

commutator
(A, B, kind='normal')[source]¶ Return the commutator of kind kind (normal, anti) of the two operators A and B.

create
(N, offset=0)[source]¶ Creation (raising) operator.
Parameters: N (int) – Dimension of Hilbert space. Returns:  oper (qobj) – Qobj for raising operator.
 offset (int (default 0)) – The lowest number state that is included in the finite number state representation of the operator.
Examples
>>> create(4) Quantum object: dims = [[4], [4]], shape = [4, 4], type = oper, isHerm = False Qobj data = [[ 0.00000000+0.j 0.00000000+0.j 0.00000000+0.j 0.00000000+0.j] [ 1.00000000+0.j 0.00000000+0.j 0.00000000+0.j 0.00000000+0.j] [ 0.00000000+0.j 1.41421356+0.j 0.00000000+0.j 0.00000000+0.j] [ 0.00000000+0.j 0.00000000+0.j 1.73205081+0.j 0.00000000+0.j]]

destroy
(N, offset=0)[source]¶ Destruction (lowering) operator.
Parameters:  N (int) – Dimension of Hilbert space.
 offset (int (default 0)) – The lowest number state that is included in the finite number state representation of the operator.
Returns: oper – Qobj for lowering operator.
Return type: qobj
Examples
>>> destroy(4) Quantum object: dims = [[4], [4]], shape = [4, 4], type = oper, isHerm = False Qobj data = [[ 0.00000000+0.j 1.00000000+0.j 0.00000000+0.j 0.00000000+0.j] [ 0.00000000+0.j 0.00000000+0.j 1.41421356+0.j 0.00000000+0.j] [ 0.00000000+0.j 0.00000000+0.j 0.00000000+0.j 1.73205081+0.j] [ 0.00000000+0.j 0.00000000+0.j 0.00000000+0.j 0.00000000+0.j]]

displace
(N, alpha, offset=0)[source]¶ Singlemode displacement operator.
Parameters:  N (int) – Dimension of Hilbert space.
 alpha (float/complex) – Displacement amplitude.
 offset (int (default 0)) – The lowest number state that is included in the finite number state representation of the operator.
Returns: oper – Displacement operator.
Return type: qobj
Examples
>>> displace(4,0.25) Quantum object: dims = [[4], [4]], shape = [4, 4], type = oper, isHerm = False Qobj data = [[ 0.96923323+0.j 0.24230859+0.j 0.04282883+0.j 0.00626025+0.j] [ 0.24230859+0.j 0.90866411+0.j 0.33183303+0.j 0.07418172+0.j] [ 0.04282883+0.j 0.33183303+0.j 0.84809499+0.j 0.41083747+0.j] [ 0.00626025+0.j 0.07418172+0.j 0.41083747+0.j 0.90866411+0.j]]

enr_destroy
(dims, excitations)[source]¶ Generate annilation operators for modes in a excitationnumberrestricted state space. For example, consider a system consisting of 4 modes, each with 5 states. The total hilbert space size is 5**4 = 625. If we are only interested in states that contain up to 2 excitations, we only need to include states such as
(0, 0, 0, 0) (0, 0, 0, 1) (0, 0, 0, 2) (0, 0, 1, 0) (0, 0, 1, 1) (0, 0, 2, 0) ...This function creates annihilation operators for the 4 modes that act within this state space:
a1, a2, a3, a4 = enr_destroy([5, 5, 5, 5], excitations=2)From this point onwards, the annihiltion operators a1, ..., a4 can be used to setup a Hamiltonian, collapse operators and expectationvalue operators, etc., following the usual pattern.
Parameters:  dims (list) – A list of the dimensions of each subsystem of a composite quantum system.
 excitations (integer) – The maximum number of excitations that are to be included in the state space.
Returns: a_ops – A list of annihilation operators for each mode in the composite quantum system described by dims.
Return type: list of qobj

enr_identity
(dims, excitations)[source]¶ Generate the identity operator for the excitationnumber restricted state space defined by the dims and exciations arguments. See the docstring for enr_fock for a more detailed description of these arguments.
Parameters:  dims (list) – A list of the dimensions of each subsystem of a composite quantum system.
 excitations (integer) – The maximum number of excitations that are to be included in the state space.
 state (list of integers) – The state in the number basis representation.
Returns: op – A Qobj instance that represent the identity operator in the exicationnumberrestricted state space defined by dims and exciations.
Return type:

jmat
(j, *args)[source]¶ Higherorder spin operators:
Parameters:  j (float) – Spin of operator
 args (str) – Which operator to return ‘x’,’y’,’z’,’+’,’‘. If no args given, then output is [‘x’,’y’,’z’]
Returns: jmat –
qobj
for requested spin operator(s).Return type: qobj / ndarray
Examples
>>> jmat(1) [ Quantum object: dims = [[3], [3]], shape = [3, 3], type = oper, isHerm = True Qobj data = [[ 0. 0.70710678 0. ] [ 0.70710678 0. 0.70710678] [ 0. 0.70710678 0. ]] Quantum object: dims = [[3], [3]], shape = [3, 3], type = oper, isHerm = True Qobj data = [[ 0.+0.j 0.0.70710678j 0.+0.j ] [ 0.+0.70710678j 0.+0.j 0.0.70710678j] [ 0.+0.j 0.+0.70710678j 0.+0.j ]] Quantum object: dims = [[3], [3]], shape = [3, 3], type = oper, isHerm = True Qobj data = [[ 1. 0. 0.] [ 0. 0. 0.] [ 0. 0. 1.]]]
Notes
If no ‘args’ input, then returns array of [‘x’,’y’,’z’] operators.

num
(N, offset=0)[source]¶ Quantum object for number operator.
Parameters:  N (int) – The dimension of the Hilbert space.
 offset (int (default 0)) – The lowest number state that is included in the finite number state representation of the operator.
Returns: oper – Qobj for number operator.
Return type: qobj
Examples
>>> num(4) Quantum object: dims = [[4], [4]], shape = [4, 4], type = oper, isHerm = True Qobj data = [[0 0 0 0] [0 1 0 0] [0 0 2 0] [0 0 0 3]]

qeye
(N)[source]¶ Identity operator
Parameters: N (int or list of ints) – Dimension of Hilbert space. If provided as a list of ints, then the dimension is the product over this list, but the dims
property of the new Qobj are set to this list.Returns: oper – Identity operator Qobj. Return type: qobj Examples
>>> qeye(3) Quantum object: dims = [[3], [3]], shape = [3, 3], type = oper, isHerm = True Qobj data = [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]]

identity
(N)[source]¶ Identity operator. Alternative name to
qeye
.Parameters: N (int or list of ints) – Dimension of Hilbert space. If provided as a list of ints, then the dimension is the product over this list, but the dims
property of the new Qobj are set to this list.Returns: oper – Identity operator Qobj. Return type: qobj

momentum
(N, offset=0)[source]¶ Momentum operator p=1j/sqrt(2)*(aa.dag())
Parameters:  N (int) – Number of Fock states in Hilbert space.
 offset (int (default 0)) – The lowest number state that is included in the finite number state representation of the operator.
Returns: oper – Momentum operator as Qobj.
Return type: qobj

phase
(N, phi0=0)[source]¶ Singlemode PeggBarnett phase operator.
Parameters:  N (int) – Number of basis states in Hilbert space.
 phi0 (float) – Reference phase.
Returns: oper – Phase operator with respect to reference phase.
Return type: qobj
Notes
The PeggBarnett phase operator is Hermitian on a truncated Hilbert space.

position
(N, offset=0)[source]¶ Position operator x=1/sqrt(2)*(a+a.dag())
Parameters:  N (int) – Number of Fock states in Hilbert space.
 offset (int (default 0)) – The lowest number state that is included in the finite number state representation of the operator.
Returns: oper – Position operator as Qobj.
Return type: qobj

qdiags
(diagonals, offsets, dims=None, shape=None)[source]¶ Constructs an operator from an array of diagonals.
Parameters:  diagonals (sequence of array_like) – Array of elements to place along the selected diagonals.
 offsets (sequence of ints) –
 Sequence for diagonals to be set:
 k=0 main diagonal
 k>0 kth upper diagonal
 k<0 kth lower diagonal
 dims (list, optional) – Dimensions for operator
 shape (list, tuple, optional) – Shape of operator. If omitted, a square operator large enough to contain the diagonals is generated.
See also
scipy.sparse.diags
Notes
This function requires SciPy 0.11+.
Examples
>>> qdiags(sqrt(range(1,4)),1) Quantum object: dims = [[4], [4]], shape = [4, 4], type = oper, isherm = False Qobj data = [[ 0. 1. 0. 0. ] [ 0. 0. 1.41421356 0. ] [ 0. 0. 0. 1.73205081] [ 0. 0. 0. 0. ]]

qutrit_ops
()[source]¶ Operators for a three level system (qutrit).
Returns: opers – array of qutrit operators. Return type: array

qzero
(N)[source]¶ Zero operator
Parameters: N (int or list of ints) – Dimension of Hilbert space. If provided as a list of ints, then the dimension is the product over this list, but the dims
property of the new Qobj are set to this list.Returns: qzero – Zero operator Qobj. Return type: qobj

sigmam
()[source]¶ Annihilation operator for Pauli spins.
Examples
>>> sigmam() Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isHerm = False Qobj data = [[ 0. 0.] [ 1. 0.]]

sigmap
()[source]¶ Creation operator for Pauli spins.
Examples
>>> sigmam() Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isHerm = False Qobj data = [[ 0. 1.] [ 0. 0.]]

sigmax
()[source]¶ Pauli spin 1/2 sigmax operator
Examples
>>> sigmax() Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isHerm = False Qobj data = [[ 0. 1.] [ 1. 0.]]

sigmay
()[source]¶ Pauli spin 1/2 sigmay operator.
Examples
>>> sigmay() Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isHerm = True Qobj data = [[ 0.+0.j 0.1.j] [ 0.+1.j 0.+0.j]]

sigmaz
()[source]¶ Pauli spin 1/2 sigmaz operator.
Examples
>>> sigmaz() Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isHerm = True Qobj data = [[ 1. 0.] [ 0. 1.]]

spin_Jx
(j)[source]¶ Spinj x operator
Parameters: j (float) – Spin of operator Returns: op – qobj
representation of the operator.Return type: Qobj

spin_Jy
(j)[source]¶ Spinj y operator
Parameters: j (float) – Spin of operator Returns: op – qobj
representation of the operator.Return type: Qobj

spin_Jz
(j)[source]¶ Spinj z operator
Parameters: j (float) – Spin of operator Returns: op – qobj
representation of the operator.Return type: Qobj

spin_Jm
(j)[source]¶ Spinj annihilation operator
Parameters: j (float) – Spin of operator Returns: op – qobj
representation of the operator.Return type: Qobj

spin_Jp
(j)[source]¶ Spinj creation operator
Parameters: j (float) – Spin of operator Returns: op – qobj
representation of the operator.Return type: Qobj

squeeze
(N, z, offset=0)[source]¶ Singlemode Squeezing operator.
Parameters:  N (int) – Dimension of hilbert space.
 z (float/complex) – Squeezing parameter.
 offset (int (default 0)) – The lowest number state that is included in the finite number state representation of the operator.
Returns: oper – Squeezing operator.
Return type: qutip.qobj.Qobj
Examples
>>> squeeze(4, 0.25) Quantum object: dims = [[4], [4]], shape = [4, 4], type = oper, isHerm = False Qobj data = [[ 0.98441565+0.j 0.00000000+0.j 0.17585742+0.j 0.00000000+0.j] [ 0.00000000+0.j 0.95349007+0.j 0.00000000+0.j 0.30142443+0.j] [0.17585742+0.j 0.00000000+0.j 0.98441565+0.j 0.00000000+0.j] [ 0.00000000+0.j 0.30142443+0.j 0.00000000+0.j 0.95349007+0.j]]

squeezing
(a1, a2, z)[source]¶ Generalized squeezing operator.
\[S(z) = \exp\left(\frac{1}{2}\left(z^*a_1a_2  za_1^\dagger a_2^\dagger\right)\right)\]Parameters:  a1 (
qutip.qobj.Qobj
) – Operator 1.  a2 (
qutip.qobj.Qobj
) – Operator 2.  z (float/complex) – Squeezing parameter.
Returns: oper – Squeezing operator.
Return type: qutip.qobj.Qobj
 a1 (

tunneling
(N, m=1)[source]¶ Tunneling operator with elements of the form \(\sum N><N+m + N+m><N\).
Parameters:  N (int) – Number of basis states in Hilbert space.
 m (int (default = 1)) – Number of excitations in tunneling event.
Returns: T – Tunneling operator.
Return type: Notes
New in version 3.2.
Random Operators and States¶
This module is a collection of random state and operator generators. The sparsity of the ouput Qobj’s is controlled by varing the density parameter.

rand_dm
(N, density=0.75, pure=False, dims=None)[source]¶ Creates a random NxN density matrix.
Parameters:  N (int, ndarray, list) – If int, then shape of output operator. If list/ndarray then eigenvalues of generated density matrix.
 density (float) – Density between [0,1] of output density matrix.
 dims (list) – Dimensions of quantum object. Used for specifying tensor structure. Default is dims=[[N],[N]].
Returns: oper – NxN density matrix quantum operator.
Return type: qobj
Notes
For small density matrices., choosing a low density will result in an error as no diagonal elements will be generated such that \(Tr(\rho)=1\).

rand_dm_ginibre
(N=2, rank=None, dims=None)[source]¶ Returns a Ginibre random density operator of dimension
dim
and rankrank
by using the algorithm of [BCSZ08]. Ifrank
is None, a fullrank (HilbertSchmidt ensemble) random density operator will be returned.Parameters:  N (int) – Dimension of the density operator to be returned.
 dims (list) – Dimensions of quantum object. Used for specifying tensor structure. Default is dims=[[N],[N]].
 rank (int or None) – Rank of the sampled density operator. If None, a fullrank density operator is generated.
Returns: rho – An N × N density operator sampled from the Ginibre or HilbertSchmidt distribution.
Return type:

rand_dm_hs
(N=2, dims=None)[source]¶ Returns a HilbertSchmidt random density operator of dimension
dim
and rankrank
by using the algorithm of [BCSZ08].Parameters:  N (int) – Dimension of the density operator to be returned.
 dims (list) – Dimensions of quantum object. Used for specifying tensor structure. Default is dims=[[N],[N]].
Returns: rho – A dim × dim density operator sampled from the Ginibre or HilbertSchmidt distribution.
Return type:

rand_herm
(N, density=0.75, dims=None, pos_def=False)[source]¶ Creates a random NxN sparse Hermitian quantum object.
If ‘N’ is an integer, uses \(H=0.5*(X+X^{+})\) where \(X\) is a randomly generated quantum operator with a given density. Else uses complex Jacobi rotations when ‘N’ is given by an array.
Parameters:  N (int, list/ndarray) – If int, then shape of output operator. If list/ndarray then eigenvalues of generated operator.
 density (float) – Density between [0,1] of output Hermitian operator.
 dims (list) – Dimensions of quantum object. Used for specifying tensor structure. Default is dims=[[N],[N]].
 pos_def (bool (default=False)) – Return a positive semidefinite matrix (by diagonal dominance).
Returns: oper – NxN Hermitian quantum operator.
Return type: qobj
Note
If given a list/ndarray as input ‘N’, this function returns a random Hermitian object with eigenvalues given in the list/ndarray. This is accomplished via complex Jacobi rotations. While this method is ~50% faster than the corresponding (real only) Matlab code, it should not be repeatedly used for generating matrices larger than ~1000x1000.

rand_ket
(N, density=1, dims=None)[source]¶ Creates a random Nx1 sparse ket vector.
Parameters:  N (int) – Number of rows for output quantum operator.
 density (float) – Density between [0,1] of output ket state.
 dims (list) – Leftdimensions of quantum object. Used for specifying tensor structure. Default is dims=[[N]].
Returns: oper – Nx1 ket state quantum operator.
Return type: qobj

rand_ket_haar
(N=2, dims=None)[source]¶ Returns a Haar random pure state of dimension
dim
by applying a Haar random unitary to a fixed pure state.Parameters:  N (int) – Dimension of the state vector to be returned.
 dims (list of ints, or None) – Leftdimensions of the resultant quantum object. If None, [N] is used.
Returns: psi – A random state vector drawn from the Haar measure.
Return type:

rand_unitary
(N, density=0.75, dims=None)[source]¶ Creates a random NxN sparse unitary quantum object.
Uses \(\exp(iH)\) where H is a randomly generated Hermitian operator.
Parameters:  N (int) – Shape of output quantum operator.
 density (float) – Density between [0,1] of output Unitary operator.
 dims (list) – Dimensions of quantum object. Used for specifying tensor structure. Default is dims=[[N],[N]].
Returns: oper – NxN Unitary quantum operator.
Return type: qobj

rand_unitary_haar
(N=2, dims=None)[source]¶ Returns a Haar random unitary matrix of dimension
dim
, using the algorithm of [Mez07].Parameters:  N (int) – Dimension of the unitary to be returned.
 dims (list of lists of int, or None) – Dimensions of quantum object. Used for specifying tensor structure. Default is dims=[[N],[N]].
Returns: U – Unitary of dims
[[dim], [dim]]
drawn from the Haar measure.Return type:

rand_super
(N=5, dims=None)[source]¶ Returns a randomly drawn superoperator acting on operators acting on N dimensions.
Parameters:  N (int) – Square root of the dimension of the superoperator to be returned.
 dims (list) – Dimensions of quantum object. Used for specifying tensor structure. Default is dims=[[[N],[N]], [[N],[N]]].

rand_super_bcsz
(N=2, enforce_tp=True, rank=None, dims=None)[source]¶ Returns a random superoperator drawn from the Bruzda et al ensemble for CPTP maps [BCSZ08]. Note that due to finite numerical precision, for ranks less than fullrank, zero eigenvalues may become slightly negative, such that the returned operator is not actually completely positive.
Parameters:  N (int) – Square root of the dimension of the superoperator to be returned.
 enforce_tp (bool) – If True, the tracepreserving condition of [BCSZ08] is enforced; otherwise only complete positivity is enforced.
 rank (int or None) – Rank of the sampled superoperator. If None, a fullrank superoperator is generated.
 dims (list) – Dimensions of quantum object. Used for specifying tensor structure. Default is dims=[[[N],[N]], [[N],[N]]].
Returns: rho – A superoperator acting on vectorized dim × dim density operators, sampled from the BCSZ distribution.
Return type:
ThreeLevel Atoms¶
This module provides functions that are useful for simulating the three level atom with QuTiP. A three level atom (qutrit) has three states, which are linked by dipole transitions so that 1 <> 2 <> 3. Depending on there relative energies they are in the ladder, lambda or vee configuration. The structure of the relevant operators is the same for any of the three configurations:
Ladder: Lambda: Vee:
two> three>
three>  
 / \ one> /
 / \  /
 / \ \ /
two> / \ \ /
 / \ \ /
 / \ \ /
 /  \ /
one>  three> 
one> two>
References
The naming of qutip operators follows the convention in [R1] .
[R1]  Shore, B. W., “The Theory of Coherent Atomic Excitation”, Wiley, 1990. 
Notes
Contributed by Markus Baden, Oct. 07, 2011
Superoperators and Liouvillians¶

operator_to_vector
(op)[source]¶ Create a vector representation of a quantum operator given the matrix representation.

vector_to_operator
(op)[source]¶ Create a matrix representation given a quantum operator in vector form.

liouvillian
(H, c_ops=[], data_only=False, chi=None)[source]¶ Assembles the Liouvillian superoperator from a Hamiltonian and a
list
of collapse operators. Like liouvillian, but with an experimental implementation which avoids creating extra Qobj instances, which can be advantageous for large systems.Parameters:  H (qobj) – System Hamiltonian.
 c_ops (array_like) – A
list
orarray
of collapse operators.
Returns: L – Liouvillian superoperator.
Return type: qobj

spost
(A)[source]¶ Superoperator formed from postmultiplication by operator A
Parameters: A (qobj) – Quantum operator for post multiplication. Returns: super – Superoperator formed from input qauntum object. Return type: qobj

spre
(A)[source]¶ Superoperator formed from premultiplication by operator A.
Parameters: A (qobj) – Quantum operator for premultiplication. Returns: super – Superoperator formed from input quantum object. Return type: qobj

sprepost
(A, B)[source]¶ Superoperator formed from premultiplication by operator A and post multiplication of operator B.
Parameters: Returns: super – Superoperator formed from input quantum objects.
Return type:

lindblad_dissipator
(a, b=None, data_only=False)[source]¶ Lindblad dissipator (generalized) for a single pair of collapse operators (a, b), or for a single collapse operator (a) when b is not specified:
\[\mathcal{D}[a,b]\rho = a \rho b^\dagger  \frac{1}{2}a^\dagger b\rho  \frac{1}{2}\rho a^\dagger b\]Parameters:  a (qobj) – Left part of collapse operator.
 b (qobj (optional)) – Right part of collapse operator. If not specified, b defaults to a.
Returns: D – Lindblad dissipator superoperator.
Return type: qobj
Superoperator Representations¶
This module implements transformations between superoperator representations, including supermatrix, Kraus, Choi and Chi (process) matrix formalisms.

to_choi
(q_oper)[source]¶ Converts a Qobj representing a quantum map to the Choi representation, such that the trace of the returned operator is equal to the dimension of the system.
Parameters: q_oper (Qobj) – Superoperator to be converted to Choi representation. If q_oper
istype="oper"
, then it is taken to act by conjugation, such thatto_choi(A) == to_choi(sprepost(A, A.dag()))
.Returns: choi – A quantum object representing the same map as q_oper
, such thatchoi.superrep == "choi"
.Return type: Qobj Raises: TypeError: if the given quantum object is not a map, or cannot be converted – to Choi representation.

to_super
(q_oper)[source]¶ Converts a Qobj representing a quantum map to the supermatrix (Liouville) representation.
Parameters: q_oper (Qobj) – Superoperator to be converted to supermatrix representation. If q_oper
istype="oper"
, then it is taken to act by conjugation, such thatto_super(A) == sprepost(A, A.dag())
.Returns: superop – A quantum object representing the same map as q_oper
, such thatsuperop.superrep == "super"
.Return type: Qobj Raises: TypeError
– If the given quantum object is not a map, or cannot be converted to supermatrix representation.

to_kraus
(q_oper)[source]¶ Converts a Qobj representing a quantum map to a list of quantum objects, each representing an operator in the Kraus decomposition of the given map.
Parameters: q_oper (Qobj) – Superoperator to be converted to Kraus representation. If q_oper
istype="oper"
, then it is taken to act by conjugation, such thatto_kraus(A) == to_kraus(sprepost(A, A.dag())) == [A]
.Returns: kraus_ops – A list of quantum objects, each representing a Kraus operator in the decomposition of q_oper
.Return type: list of Qobj Raises: TypeError: if the given quantum object is not a map, or cannot be – decomposed into Kraus operators.
Functions acting on states and operators¶
Tensor¶
Module for the creation of composite quantum objects via the tensor product.

tensor
(*args)[source]¶ Calculates the tensor product of input operators.
Parameters: args (array_like) – list
orarray
of quantum objects for tensor product.Returns: obj – A composite quantum object. Return type: qobj Examples
>>> tensor([sigmax(), sigmax()]) Quantum object: dims = [[2, 2], [2, 2]], shape = [4, 4], type = oper, isHerm = True Qobj data = [[ 0.+0.j 0.+0.j 0.+0.j 1.+0.j] [ 0.+0.j 0.+0.j 1.+0.j 0.+0.j] [ 0.+0.j 1.+0.j 0.+0.j 0.+0.j] [ 1.+0.j 0.+0.j 0.+0.j 0.+0.j]]

super_tensor
(*args)[source]¶ Calculates the tensor product of input superoperators, by tensoring together the underlying Hilbert spaces on which each vectorized operator acts.
Parameters: args (array_like) – list
orarray
of quantum objects withtype="super"
.Returns: obj – A composite quantum object. Return type: qobj

composite
(*args)[source]¶ Given two or more operators, kets or bras, returns the Qobj corresponding to a composite system over each argument. For ordinary operators and vectors, this is the tensor product, while for superoperators and vectorized operators, this is the columnreshuffled tensor product.
If a mix of Qobjs supported on Hilbert and Liouville spaces are passed in, the former are promoted. Ordinary operators are assumed to be unitaries, and are promoted using
to_super
, while kets and bras are promoted by taking their projectors and usingoperator_to_vector(ket2dm(arg))
.

tensor_contract
(qobj, *pairs)[source]¶ Contracts a qobj along one or more index pairs. Note that this uses dense representations and thus should not be used for very large Qobjs.
Parameters: pairs (tuple) – One or more tuples (i, j)
indicating that thei
andj
dimensions of the original qobj should be contracted.Returns: cqobj – The original Qobj with all named index pairs contracted away. Return type: Qobj
Expectation Values¶

expect
(oper, state)[source]¶ Calculates the expectation value for operator(s) and state(s).
Parameters:  oper (qobj/arraylike) – A single or a list or operators for expectation value.
 state (qobj/arraylike) – A single or a list of quantum states or density matrices.
Returns: expt – Expectation value.
real
if oper is Hermitian,complex
otherwise. A (nested) array of expectaction values of state or operator are arrays.Return type: float/complex/arraylike
Examples
>>> expect(num(4), basis(4, 3)) 3

variance
(oper, state)[source]¶ Variance of an operator for the given state vector or density matrix.
Parameters:  oper (qobj) – Operator for expectation value.
 state (qobj/list) – A single or list of quantum states or density matrices..
Returns: var – Variance of operator ‘oper’ for given state.
Return type: float
Partial Transpose¶

partial_transpose
(rho, mask, method='dense')[source]¶ Return the partial transpose of a Qobj instance rho, where mask is an array/list with length that equals the number of components of rho (that is, the length of rho.dims[0]), and the values in mask indicates whether or not the corresponding subsystem is to be transposed. The elements in mask can be boolean or integers 0 or 1, where True/1 indicates that the corresponding subsystem should be tranposed.
Parameters:  rho (
qutip.qobj
) – A density matrix.  mask (list / array) – A mask that selects which subsystems should be transposed.
 method (str) – choice of method, dense or sparse. The default method is dense. The sparse implementation can be faster for large and sparse systems (hundreds of quantum states).
Returns: rho_pr – A density matrix with the selected subsystems transposed.
Return type: qutip.qobj
 rho (
Entropy Functions¶

concurrence
(rho)[source]¶ Calculate the concurrence entanglement measure for a twoqubit state.
Parameters: state (qobj) – Ket, bra, or density matrix for a twoqubit state. Returns: concur – Concurrence Return type: float References
[R2] http://en.wikipedia.org/wiki/Concurrence_(quantum_computing)

entropy_conditional
(rho, selB, base=2.718281828459045, sparse=False)[source]¶ Calculates the conditional entropy \(S(AB)=S(A,B)S(B)\) of a selected density matrix component.
Parameters:  rho (qobj) – Density matrix of composite object
 selB (int/list) – Selected components for density matrix B
 base ({e,2}) – Base of logarithm.
 sparse ({False,True}) – Use sparse eigensolver.
Returns: ent_cond – Value of conditional entropy
Return type: float

entropy_linear
(rho)[source]¶ Linear entropy of a density matrix.
Parameters: rho (qobj) – sensity matrix or ket/bra vector. Returns: entropy – Linear entropy of rho. Return type: float Examples
>>> rho=0.5*fock_dm(2,0)+0.5*fock_dm(2,1) >>> entropy_linear(rho) 0.5

entropy_mutual
(rho, selA, selB, base=2.718281828459045, sparse=False)[source]¶ Calculates the mutual information S(A:B) between selection components of a system density matrix.
Parameters:  rho (qobj) – Density matrix for composite quantum systems
 selA (int/list) – int or list of first selected density matrix components.
 selB (int/list) – int or list of second selected density matrix components.
 base ({e,2}) – Base of logarithm.
 sparse ({False,True}) – Use sparse eigensolver.
Returns: ent_mut – Mutual information between selected components.
Return type: float

entropy_vn
(rho, base=2.718281828459045, sparse=False)[source]¶ VonNeumann entropy of density matrix
Parameters:  rho (qobj) – Density matrix.
 base ({e,2}) – Base of logarithm.
 sparse ({False,True}) – Use sparse eigensolver.
Returns: entropy – VonNeumann entropy of rho.
Return type: float
Examples
>>> rho=0.5*fock_dm(2,0)+0.5*fock_dm(2,1) >>> entropy_vn(rho,2) 1.0
Density Matrix Metrics¶
This module contains a collection of functions for calculating metrics (distance measures) between states and operators.

fidelity
(A, B)[source]¶ Calculates the fidelity (pseudometric) between two density matrices. See: Nielsen & Chuang, “Quantum Computation and Quantum Information”
Parameters:  A (qobj) – Density matrix or state vector.
 B (qobj) – Density matrix or state vector with same dimensions as A.
Returns: fid – Fidelity pseudometric between A and B.
Return type: float
Examples
>>> x = fock_dm(5,3) >>> y = coherent_dm(5,1) >>> fidelity(x,y) 0.24104350624628332

tracedist
(A, B, sparse=False, tol=0)[source]¶ Calculates the trace distance between two density matrices.. See: Nielsen & Chuang, “Quantum Computation and Quantum Information”
Parameters: A : qobj
Density matrix or state vector.
B : qobj
Density matrix or state vector with same dimensions as A.
tol : float
Tolerance used by sparse eigensolver, if used. (0=Machine precision)
sparse : {False, True}
Use sparse eigensolver.
:returns: **tracedist – Trace distance between A and B.**
:rtype: float
.. rubric:: Examples
>>> x=fock_dm(5,3)
>>> y=coherent_dm(5,1)
>>> tracedist(x,y)
0.9705143161472971

bures_dist
(A, B)[source]¶ Returns the Bures distance between two density matrices A & B.
The Bures distance ranges from 0, for states with unit fidelity, to sqrt(2).
Parameters:  A (qobj) – Density matrix or state vector.
 B (qobj) – Density matrix or state vector with same dimensions as A.
Returns: dist – Bures distance between density matrices.
Return type: float

bures_angle
(A, B)[source]¶ Returns the Bures Angle between two density matrices A & B.
The Bures angle ranges from 0, for states with unit fidelity, to pi/2.
Parameters:  A (qobj) – Density matrix or state vector.
 B (qobj) – Density matrix or state vector with same dimensions as A.
Returns: angle – Bures angle between density matrices.
Return type: float

hilbert_dist
(A, B)[source]¶ Returns the HilbertSchmidt distance between two density matrices A & B.
Parameters:  A (qobj) – Density matrix or state vector.
 B (qobj) – Density matrix or state vector with same dimensions as A.
Returns: dist – HilbertSchmidt distance between density matrices.
Return type: float
Notes
See V. Vedral and M. B. Plenio, Phys. Rev. A 57, 1619 (1998).

average_gate_fidelity
(oper, target=None)[source]¶ Given a Qobj representing the supermatrix form of a map, returns the average gate fidelity (pseudometric) of that map.
Parameters: Returns: fid – Fidelity pseudometric between A and the identity superoperator, or between A and the target superunitary.
Return type: float
Continous Variables¶
This module contains a collection functions for calculating continuous variable quantities from fockbasis representation of the state of multimode fields.

correlation_matrix
(basis, rho=None)[source]¶ Given a basis set of operators \(\{a\}_n\), calculate the correlation matrix:
\[C_{mn} = \langle a_m a_n \rangle\]Parameters:  basis (list) – List of operators that defines the basis for the correlation matrix.
 rho (Qobj) – Density matrix for which to calculate the correlation matrix. If rho is None, then a matrix of correlation matrix operators is returned instead of expectation values of those operators.
Returns: corr_mat – A 2dimensional array of correlation values or operators.
Return type: ndarray

covariance_matrix
(basis, rho, symmetrized=True)[source]¶ Given a basis set of operators \(\{a\}_n\), calculate the covariance matrix:
\[V_{mn} = \frac{1}{2}\langle a_m a_n + a_n a_m \rangle  \langle a_m \rangle \langle a_n\rangle\]or, if of the optional argument symmetrized=False,
\[V_{mn} = \langle a_m a_n\rangle  \langle a_m \rangle \langle a_n\rangle\]Parameters:  basis (list) – List of operators that defines the basis for the covariance matrix.
 rho (Qobj) – Density matrix for which to calculate the covariance matrix.
 symmetrized (bool {True, False}) – Flag indicating whether the symmetrized (default) or nonsymmetrized correlation matrix is to be calculated.
Returns: corr_mat – A 2dimensional array of covariance values.
Return type: ndarray

correlation_matrix_field
(a1, a2, rho=None)[source]¶ Calculates the correlation matrix for given field operators \(a_1\) and \(a_2\). If a density matrix is given the expectation values are calculated, otherwise a matrix with operators is returned.
Parameters: Returns: cov_mat – Array of complex numbers or Qobj’s A 2dimensional array of covariance values, or, if rho=0, a matrix of operators.
Return type: ndarray

correlation_matrix_quadrature
(a1, a2, rho=None)[source]¶ Calculate the quadrature correlation matrix with given field operators \(a_1\) and \(a_2\). If a density matrix is given the expectation values are calculated, otherwise a matrix with operators is returned.
Parameters: Returns: corr_mat – Array of complex numbers or Qobj’s A 2dimensional array of covariance values for the field quadratures, or, if rho=0, a matrix of operators.
Return type: ndarray

wigner_covariance_matrix
(a1=None, a2=None, R=None, rho=None)[source]¶ Calculates the Wigner covariance matrix \(V_{ij} = \frac{1}{2}(R_{ij} + R_{ji})\), given the quadrature correlation matrix \(R_{ij} = \langle R_{i} R_{j}\rangle  \langle R_{i}\rangle \langle R_{j}\rangle\), where \(R = (q_1, p_1, q_2, p_2)^T\) is the vector with quadrature operators for the two modes.
Alternatively, if R = None, and if annihilation operators a1 and a2 for the two modes are supplied instead, the quadrature correlation matrix is constructed from the annihilation operators before then the covariance matrix is calculated.
Parameters: Returns: cov_mat – A 2dimensional array of covariance values.
Return type: ndarray

logarithmic_negativity
(V)[source]¶ Calculates the logarithmic negativity given a symmetrized covariance matrix, see
qutip.continous_variables.covariance_matrix
. Note that the twomode field state that is described by V must be Gaussian for this function to applicable.Parameters: V (2d array) – The covariance matrix. Returns: N – The logarithmic negativity for the twomode Gaussian state that is described by the the Wigner covariance matrix V. Return type: float
Dynamics and TimeEvolution¶
Schrödinger Equation¶
This module provides solvers for the unitary Schrodinger equation.

sesolve
(H, rho0, tlist, e_ops=[], args={}, options=None, progress_bar=<qutip.ui.progressbar.BaseProgressBar object>, _safe_mode=True)[source]¶ Schrodinger equation evolution of a state vector for a given Hamiltonian.
Evolve the state vector or density matrix (rho0) using a given Hamiltonian (H), by integrating the set of ordinary differential equations that define the system.
The output is either the state vector at arbitrary points in time (tlist), or the expectation values of the supplied operators (e_ops). If e_ops is a callback function, it is invoked for each time in tlist with time and the state as arguments, and the function does not use any return values.
Parameters:  H (
qutip.qobj
) – system Hamiltonian, or a callback function for timedependent Hamiltonians.  rho0 (
qutip.qobj
) – initial density matrix or state vector (ket).  tlist (list / array) – list of times for \(t\).
 e_ops (list of
qutip.qobj
/ callback function single) – single operator or list of operators for which to evaluate expectation values.  args (dictionary) – dictionary of parameters for timedependent Hamiltonians and collapse operators.
 options (
qutip.Qdeoptions
) – with options for the ODE solver.
Returns: output – An instance of the class
qutip.solver
, which contains either an array of expectation values for the times specified by tlist, or an array or state vectors or density matrices corresponding to the times in tlist [if e_ops is an empty list], or nothing if a callback function was given inplace of operators for which to calculate the expectation values.Return type: qutip.solver
 H (
Master Equation¶
This module provides solvers for the Lindblad master equation and von Neumann equation.

mesolve
(H, rho0, tlist, c_ops=[], e_ops=[], args={}, options=None, progress_bar=None, _safe_mode=True)[source]¶ Master equation evolution of a density matrix for a given Hamiltonian and set of collapse operators, or a Liouvillian.
Evolve the state vector or density matrix (rho0) using a given Hamiltonian (H) and an [optional] set of collapse operators (c_ops), by integrating the set of ordinary differential equations that define the system. In the absence of collapse operators the system is evolved according to the unitary evolution of the Hamiltonian.
The output is either the state vector at arbitrary points in time (tlist), or the expectation values of the supplied operators (e_ops). If e_ops is a callback function, it is invoked for each time in tlist with time and the state as arguments, and the function does not use any return values.
If either H or the Qobj elements in c_ops are superoperators, they will be treated as direct contributions to the total system Liouvillian. This allows to solve master equations that are not on standard Lindblad form by passing a custom Liouvillian in place of either the H or c_ops elements.
Timedependent operators
For timedependent problems, H and c_ops can be callback functions that takes two arguments, time and args, and returns the Hamiltonian or Liouvillian for the system at that point in time (callback format).
Alternatively, H and c_ops can be a specified in a nestedlist format where each element in the list is a list of length 2, containing an operator (
qutip.qobj
) at the first element and where the second element is either a string (list string format), a callback function (list callback format) that evaluates to the timedependent coefficient for the corresponding operator, or a NumPy array (list array format) which specifies the value of the coefficient to the corresponding operator for each value of t in tlist.Examples
H = [[H0, ‘sin(w*t)’], [H1, ‘sin(2*w*t)’]]
H = [[H0, f0_t], [H1, f1_t]]
where f0_t and f1_t are python functions with signature f_t(t, args).
H = [[H0, np.sin(w*tlist)], [H1, np.sin(2*w*tlist)]]
In the list string format and list callback format, the string expression and the callback function must evaluate to a real or complex number (coefficient for the corresponding operator).
In all cases of timedependent operators, args is a dictionary of parameters that is used when evaluating operators. It is passed to the callback functions as second argument.
Additional options
Additional options to mesolve can be set via the options argument, which should be an instance of
qutip.solver.Options
. Many ODE integration options can be set this way, and the store_states and store_final_state options can be used to store states even though expectation values are requested via the e_ops argument.Note
If an element in the listspecification of the Hamiltonian or the list of collapse operators are in superoperator form it will be added to the total Liouvillian of the problem with out further transformation. This allows for using mesolve for solving master equations that are not on standard Lindblad form.
Note
On using callback function: mesolve transforms all
qutip.qobj
objects to sparse matrices before handing the problem to the integrator function. In order for your callback function to work correctly, pass allqutip.qobj
objects that are used in constructing the Hamiltonian via args. mesolve will check forqutip.qobj
in args and handle the conversion to sparse matrices. All otherqutip.qobj
objects that are not passed via args will be passed on to the integrator in scipy which will raise an NotImplemented exception.Parameters:  H (
qutip.Qobj
) – System Hamiltonian, or a callback function for timedependent Hamiltonians, or alternatively a system Liouvillian.  rho0 (
qutip.Qobj
) – initial density matrix or state vector (ket).  tlist (list / array) – list of times for \(t\).
 c_ops (list of
qutip.Qobj
) – single collapse operator, or list of collapse operators, or a list of Liouvillian superoperators.  e_ops (list of
qutip.Qobj
/ callback function single) – single operator or list of operators for which to evaluate expectation values.  args (dictionary) – dictionary of parameters for timedependent Hamiltonians and collapse operators.
 options (
qutip.Options
) – with options for the solver.  progress_bar (BaseProgressBar) – Optional instance of BaseProgressBar, or a subclass thereof, for showing the progress of the simulation.
Returns: result – An instance of the class
qutip.Result
, which contains either an array result.expect of expectation values for the times specified by tlist, or an array result.states of state vectors or density matrices corresponding to the times in tlist [if e_ops is an empty list], or nothing if a callback function was given in place of operators for which to calculate the expectation values.Return type: qutip.Result
 H (
Monte Carlo Evolution¶

mcsolve
(H, psi0, tlist, c_ops=[], e_ops=[], ntraj=None, args={}, options=None, progress_bar=True, map_func=None, map_kwargs=None, _safe_mode=True)[source]¶ Monte Carlo evolution of a state vector \(\psi \rangle\) for a given Hamiltonian and sets of collapse operators, and possibly, operators for calculating expectation values. Options for the underlying ODE solver are given by the Options class.
mcsolve supports timedependent Hamiltonians and collapse operators using either Python functions of strings to represent timedependent coefficients. Note that, the system Hamiltonian MUST have at least one constant term.
As an example of a timedependent problem, consider a Hamiltonian with two terms
H0
andH1
, whereH1
is timedependent with coefficientsin(w*t)
, and collapse operatorsC0
andC1
, whereC1
is timedependent with coeffcientexp(a*t)
. Here, w and a are constant arguments with valuesW
andA
.Using the Python function timedependent format requires two Python functions, one for each collapse coefficient. Therefore, this problem could be expressed as:
def H1_coeff(t,args): return sin(args['w']*t) def C1_coeff(t,args): return exp(args['a']*t) H = [H0, [H1, H1_coeff]] c_ops = [C0, [C1, C1_coeff]] args={'a': A, 'w': W}
or in String (Cython) format we could write:
H = [H0, [H1, 'sin(w*t)']] c_ops = [C0, [C1, 'exp(a*t)']] args={'a': A, 'w': W}
Constant terms are preferably placed first in the Hamiltonian and collapse operator lists.
Parameters:  H (
qutip.Qobj
) – System Hamiltonian.  psi0 (
qutip.Qobj
) – Initial state vector  tlist (array_like) – Times at which results are recorded.
 ntraj (int) – Number of trajectories to run.
 c_ops (array_like) – single collapse operator or
list
orarray
of collapse operators.  e_ops (array_like) – single operator or
list
orarray
of operators for calculating expectation values.  args (dict) – Arguments for timedependent Hamiltonian and collapse operator terms.
 options (Options) – Instance of ODE solver options.
 progress_bar (BaseProgressBar) – Optional instance of BaseProgressBar, or a subclass thereof, for showing the progress of the simulation. Set to None to disable the progress bar.
 map_func (function) – A map function for managing the calls to the singletrajactory solver.
 map_kwargs (dictionary) – Optional keyword arguments to the map_func function.
Returns:  results (
qutip.solver.Result
) – Object storing all results from the simulation.  .. note:: – It is possible to reuse the random number seeds from a previous run of the mcsolver by passing the output Result object seeds via the Options class, i.e. Options(seeds=prev_result.seeds).
 H (
Exponential Series¶

essolve
(H, rho0, tlist, c_op_list, e_ops)[source]¶ Evolution of a state vector or density matrix (rho0) for a given Hamiltonian (H) and set of collapse operators (c_op_list), by expressing the ODE as an exponential series. The output is either the state vector at arbitrary points in time (tlist), or the expectation values of the supplied operators (e_ops).
Parameters:  H (qobj/function_type) – System Hamiltonian.
 rho0 (
qutip.qobj
) – Initial state density matrix.  tlist (list/array) –
list
of times for \(t\).  c_op_list (list of
qutip.qobj
) –list
ofqutip.qobj
collapse operators.  e_ops (list of
qutip.qobj
) –list
ofqutip.qobj
operators for which to evaluate expectation values.
Returns: expt_array – Expectation values of wavefunctions/density matrices for the times specified in
tlist
.Return type: array
Note
This solver does not support timedependent Hamiltonians.

ode2es
(L, rho0)[source]¶ Creates an exponential series that describes the time evolution for the initial density matrix (or state vector) rho0, given the Liouvillian (or Hamiltonian) L.
Parameters:  L (qobj) – Liouvillian of the system.
 rho0 (qobj) – Initial state vector or density matrix.
Returns: eseries –
eseries
represention of the system dynamics.Return type:
BlochRedfield Master Equation¶

brmesolve
(H, psi0, tlist, a_ops, e_ops=[], spectra_cb=[], c_ops=[], args={}, options=<qutip.solver.Options object>, _safe_mode=True)[source]¶ Solve the dynamics for a system using the BlochRedfield master equation.
Note
This solver does not currently support timedependent Hamiltonians.
Parameters:  H (
qutip.Qobj
) – System Hamiltonian.  / psi0 (rho0) – Initial density matrix or state vector (ket).
 tlist (list / array) – List of times for \(t\).
 a_ops (list of
qutip.qobj
) – List of system operators that couple to bath degrees of freedom.  e_ops (list of
qutip.qobj
/ callback function) – List of operators for which to evaluate expectation values.  c_ops (list of
qutip.qobj
) – List of system collapse operators.  args (dictionary) – Placeholder for future implementation, kept for API consistency.
 options (
qutip.solver.Options
) – Options for the solver.
Returns: result – An instance of the class
qutip.solver.Result
, which contains either an array of expectation values, for operators given in e_ops, or a list of states for the times specified by tlist.Return type:  H (

bloch_redfield_tensor
(H, a_ops, spectra_cb, c_ops=[], use_secular=True)[source]¶ Calculate the BlochRedfield tensor for a system given a set of operators and corresponding spectral functions that describes the system’s coupling to its environment.
Note
This tensor generation requires a timeindependent Hamiltonian.
Parameters:  H (
qutip.qobj
) – System Hamiltonian.  a_ops (list of
qutip.qobj
) – List of system operators that couple to the environment.  spectra_cb (list of callback functions) – List of callback functions that evaluate the noise power spectrum at a given frequency.
 c_ops (list of
qutip.qobj
) – List of system collapse operators.  use_secular (bool) – Flag (True of False) that indicates if the secular approximation should be used.
Returns: R, kets – R is the BlochRedfield tensor and kets is a list eigenstates of the Hamiltonian.
Return type: qutip.Qobj
, list ofqutip.Qobj
 H (

bloch_redfield_solve
(R, ekets, rho0, tlist, e_ops=[], options=None)[source]¶ Evolve the ODEs defined by BlochRedfield master equation. The BlochRedfield tensor can be calculated by the function
bloch_redfield_tensor
.Parameters:  R (
qutip.qobj
) – BlochRedfield tensor.  ekets (array of
qutip.qobj
) – Array of kets that make up a basis tranformation for the eigenbasis.  rho0 (
qutip.qobj
) – Initial density matrix.  tlist (list / array) – List of times for \(t\).
 e_ops (list of
qutip.qobj
/ callback function) – List of operators for which to evaluate expectation values.  options (
qutip.Qdeoptions
) – Options for the ODE solver.
Returns: output – An instance of the class
qutip.solver
, which contains either an array of expectation values for the times specified by tlist.Return type: qutip.solver
 R (
Floquet States and FloquetMarkov Master Equation¶

fmmesolve
(H, rho0, tlist, c_ops=[], e_ops=[], spectra_cb=[], T=None, args={}, options=<qutip.solver.Options object>, floquet_basis=True, kmax=5, _safe_mode=True)[source]¶ Solve the dynamics for the system using the FloquetMarkov master equation.
Note
This solver currently does not support multiple collapse operators.
Parameters:  H (
qutip.qobj
) – system Hamiltonian.  / psi0 (rho0) – initial density matrix or state vector (ket).
 tlist (list / array) – list of times for \(t\).
 c_ops (list of
qutip.qobj
) – list of collapse operators.  e_ops (list of
qutip.qobj
/ callback function) – list of operators for which to evaluate expectation values.  spectra_cb (list callback functions) – List of callback functions that compute the noise power spectrum as a function of frequency for the collapse operators in c_ops.
 T (float) – The period of the timedependence of the hamiltonian. The default value ‘None’ indicates that the ‘tlist’ spans a single period of the driving.
 args (dictionary) –
dictionary of parameters for timedependent Hamiltonians and collapse operators.
This dictionary should also contain an entry ‘w_th’, which is the temperature of the environment (if finite) in the energy/frequency units of the Hamiltonian. For example, if the Hamiltonian written in units of 2pi GHz, and the temperature is given in K, use the following conversion
>>> temperature = 25e3 # unit K >>> h = 6.626e34 >>> kB = 1.38e23 >>> args['w_th'] = temperature * (kB / h) * 2 * pi * 1e9
 options (
qutip.solver
) – options for the ODE solver.  k_max (int) – The truncation of the number of sidebands (default 5).
Returns: output – An instance of the class
qutip.solver
, which contains either an array of expectation values for the times specified by tlist.Return type: qutip.solver
 H (

floquet_modes
(H, T, args=None, sort=False, U=None)[source]¶ Calculate the initial Floquet modes Phi_alpha(0) for a driven system with period T.
Returns a list of
qutip.qobj
instances representing the Floquet modes and a list of corresponding quasienergies, sorted by increasing quasienergy in the interval [pi/T, pi/T]. The optional parameter sort decides if the output is to be sorted in increasing quasienergies or not.Parameters:  H (
qutip.qobj
) – system Hamiltonian, timedependent with period T  args (dictionary) – dictionary with variables required to evaluate H
 T (float) – The period of the timedependence of the hamiltonian. The default value ‘None’ indicates that the ‘tlist’ spans a single period of the driving.
 U (
qutip.qobj
) – The propagator for the timedependent Hamiltonian with period T. If U is None (default), it will be calculated from the Hamiltonian H usingqutip.propagator.propagator
.
Returns: output – Two lists: the Floquet modes as kets and the quasi energies.
Return type: list of kets, list of quasi energies
 H (

floquet_modes_t
(f_modes_0, f_energies, t, H, T, args=None)[source]¶ Calculate the Floquet modes at times tlist Phi_alpha(tlist) propagting the initial Floquet modes Phi_alpha(0)
Parameters:  f_modes_0 (list of
qutip.qobj
(kets)) – Floquet modes at \(t\)  f_energies (list) – Floquet energies.
 t (float) – The time at which to evaluate the floquet modes.
 H (
qutip.qobj
) – system Hamiltonian, timedependent with period T  args (dictionary) – dictionary with variables required to evaluate H
 T (float) – The period of the timedependence of the hamiltonian.
Returns: output – The Floquet modes as kets at time \(t\)
Return type: list of kets
 f_modes_0 (list of

floquet_modes_table
(f_modes_0, f_energies, tlist, H, T, args=None)[source]¶ Precalculate the Floquet modes for a range of times spanning the floquet period. Can later be used as a table to look up the floquet modes for any time.
Parameters:  f_modes_0 (list of
qutip.qobj
(kets)) – Floquet modes at \(t\)  f_energies (list) – Floquet energies.
 tlist (array) – The list of times at which to evaluate the floquet modes.
 H (
qutip.qobj
) – system Hamiltonian, timedependent with period T  T (float) – The period of the timedependence of the hamiltonian.
 args (dictionary) – dictionary with variables required to evaluate H
Returns: output – A nested list of Floquet modes as kets for each time in tlist
Return type: nested list
 f_modes_0 (list of

floquet_modes_t_lookup
(f_modes_table_t, t, T)[source]¶ Lookup the floquet mode at time t in the precalculated table of floquet modes in the first period of the timedependence.
Parameters:  f_modes_table_t (nested list of
qutip.qobj
(kets)) – A lookuptable of Floquet modes at times precalculated byqutip.floquet.floquet_modes_table
.  t (float) – The time for which to evaluate the Floquet modes.
 T (float) – The period of the timedependence of the hamiltonian.
Returns: output – A list of Floquet modes as kets for the time that most closely matching the time t in the supplied table of Floquet modes.
Return type: nested list
 f_modes_table_t (nested list of

floquet_states_t
(f_modes_0, f_energies, t, H, T, args=None)[source]¶ Evaluate the floquet states at time t given the initial Floquet modes.
Parameters:  f_modes_t (list of
qutip.qobj
(kets)) – A list of initial Floquet modes (for time \(t=0\)).  f_energies (array) – The Floquet energies.
 t (float) – The time for which to evaluate the Floquet states.
 H (
qutip.qobj
) – System Hamiltonian, timedependent with period T.  T (float) – The period of the timedependence of the hamiltonian.
 args (dictionary) – Dictionary with variables required to evaluate H.
Returns: output – A list of Floquet states for the time \(t\).
Return type: list
 f_modes_t (list of

floquet_wavefunction_t
(f_modes_0, f_energies, f_coeff, t, H, T, args=None)[source]¶ Evaluate the wavefunction for a time t using the Floquet state decompositon, given the initial Floquet modes.
Parameters:  f_modes_t (list of
qutip.qobj
(kets)) – A list of initial Floquet modes (for time \(t=0\)).  f_energies (array) – The Floquet energies.
 f_coeff (array) – The coefficients for Floquet decomposition of the initial wavefunction.
 t (float) – The time for which to evaluate the Floquet states.
 H (
qutip.qobj
) – System Hamiltonian, timedependent with period T.  T (float) – The period of the timedependence of the hamiltonian.
 args (dictionary) – Dictionary with variables required to evaluate H.
Returns: output – The wavefunction for the time \(t\).
Return type: qutip.qobj
 f_modes_t (list of

floquet_state_decomposition
(f_states, f_energies, psi)[source]¶ Decompose the wavefunction psi (typically an initial state) in terms of the Floquet states, \(\psi = \sum_\alpha c_\alpha \psi_\alpha(0)\).
Parameters:  f_states (list of
qutip.qobj
(kets)) – A list of Floquet modes.  f_energies (array) – The Floquet energies.
 psi (
qutip.qobj
) – The wavefunction to decompose in the Floquet state basis.
Returns: output – The coefficients \(c_\alpha\) in the Floquet state decomposition.
Return type: array
 f_states (list of

fsesolve
(H, psi0, tlist, e_ops=[], T=None, args={}, Tsteps=100)[source]¶ Solve the Schrodinger equation using the Floquet formalism.
Parameters:  H (
qutip.qobj.Qobj
) – System Hamiltonian, timedependent with period T.  psi0 (
qutip.qobj
) – Initial state vector (ket).  tlist (list / array) – list of times for \(t\).
 e_ops (list of
qutip.qobj
/ callback function) – list of operators for which to evaluate expectation values. If this list is empty, the state vectors for each time in tlist will be returned instead of expectation values.  T (float) – The period of the timedependence of the hamiltonian.
 args (dictionary) – Dictionary with variables required to evaluate H.
 Tsteps (integer) – The number of time steps in one driving period for which to precalculate the Floquet modes. Tsteps should be an even number.
Returns: output – An instance of the class
qutip.solver.Result
, which contains either an array of expectation values or an array of state vectors, for the times specified by tlist.Return type:  H (
Stochastic Schrödinger Equation and Master Equation¶
This module contains functions for solving stochastic schrodinger and master equations. The API should not be considered stable, and is subject to change when we work more on optimizing this module for performance and features.

smesolve
(H, rho0, times, c_ops=[], sc_ops=[], e_ops=[], _safe_mode=True, **kwargs)[source]¶ Solve stochastic master equation. Dispatch to specific solvers depending on the value of the solver keyword argument.
Parameters:  H (
qutip.Qobj
) – System Hamiltonian.  rho0 (
qutip.Qobj
) – Initial density matrix or state vector (ket).  times (list / array) – List of times for \(t\). Must be uniformly spaced.
 c_ops (list of
qutip.Qobj
) – Deterministic collapse operator which will contribute with a standard Lindblad type of dissipation.  sc_ops (list of
qutip.Qobj
) – List of stochastic collapse operators. Each stochastic collapse operator will give a deterministic and stochastic contribution to the eqaution of motion according to how the d1 and d2 functions are defined.  e_ops (list of
qutip.Qobj
/ callback function single) – single operator or list of operators for which to evaluate expectation values.  kwargs (dictionary) – Optional keyword arguments. See
qutip.stochastic.StochasticSolverOptions
.
Returns: output – An instance of the class
qutip.solver.SolverResult
.Return type: qutip.solver.SolverResult
Todo
Add checks for commuting jump operators in Milstein method.
 H (

ssesolve
(H, psi0, times, sc_ops=[], e_ops=[], _safe_mode=True, **kwargs)[source]¶ Solve the stochastic Schrödinger equation. Dispatch to specific solvers depending on the value of the solver keyword argument.
Parameters:  H (
qutip.Qobj
) – System Hamiltonian.  psi0 (
qutip.Qobj
) – Initial state vector (ket).  times (list / array) – List of times for \(t\). Must be uniformly spaced.
 sc_ops (list of
qutip.Qobj
) – List of stochastic collapse operators. Each stochastic collapse operator will give a deterministic and stochastic contribution to the equation of motion according to how the d1 and d2 functions are defined.  e_ops (list of
qutip.Qobj
) – Single operator or list of operators for which to evaluate expectation values.  kwargs (dictionary) – Optional keyword arguments. See
qutip.stochastic.StochasticSolverOptions
.
Returns: output – An instance of the class
qutip.solver.SolverResult
.Return type: qutip.solver.SolverResult
 H (

smepdpsolve
(H, rho0, times, c_ops, e_ops, **kwargs)[source]¶ A stochastic (piecewse deterministic process) PDP solver for density matrix evolution.
Parameters:  H (
qutip.Qobj
) – System Hamiltonian.  rho0 (
qutip.Qobj
) – Initial density matrix.  times (list / array) – List of times for \(t\). Must be uniformly spaced.
 c_ops (list of
qutip.Qobj
) – Deterministic collapse operator which will contribute with a standard Lindblad type of dissipation.  sc_ops (list of
qutip.Qobj
) – List of stochastic collapse operators. Each stochastic collapse operator will give a deterministic and stochastic contribution to the eqaution of motion according to how the d1 and d2 functions are defined.  e_ops (list of
qutip.Qobj
/ callback function single) – single operator or list of operators for which to evaluate expectation values.  kwargs (dictionary) – Optional keyword arguments. See
qutip.stochastic.StochasticSolverOptions
.
Returns: output – An instance of the class
qutip.solver.SolverResult
.Return type: qutip.solver.SolverResult
 H (

ssepdpsolve
(H, psi0, times, c_ops, e_ops, **kwargs)[source]¶ A stochastic (piecewse deterministic process) PDP solver for wavefunction evolution. For most purposes, use
qutip.mcsolve
instead for quantum trajectory simulations.Parameters:  H (
qutip.Qobj
) – System Hamiltonian.  psi0 (
qutip.Qobj
) – Initial state vector (ket).  times (list / array) – List of times for \(t\). Must be uniformly spaced.
 c_ops (list of
qutip.Qobj
) – Deterministic collapse operator which will contribute with a standard Lindblad type of dissipation.  e_ops (list of
qutip.Qobj
/ callback function single) – single operator or list of operators for which to evaluate expectation values.  kwargs (dictionary) – Optional keyword arguments. See
qutip.stochastic.StochasticSolverOptions
.
Returns: output – An instance of the class
qutip.solver.SolverResult
.Return type: qutip.solver.SolverResult
 H (
Correlation Functions¶

correlation
(H, state0, tlist, taulist, c_ops, a_op, b_op, solver='me', reverse=False, args={}, options=<qutip.solver.Options object>)[source]¶ Calculate the twooperator twotime correlation function: \(\left<A(t+\tau)B(t)\right>\) along two time axes using the quantum regression theorem and the evolution solver indicated by the solver parameter.
Parameters:  H (Qobj) – system Hamiltonian, may be timedependent for solver choice of me or mc.
 state0 (Qobj) – Initial state density matrix \(\rho(t_0)\) or state vector \(\psi(t_0)\). If ‘state0’ is ‘None’, then the steady state will be used as the initial state. The ‘steadystate’ is only implemented for the me and es solvers.
 tlist (array_like) – list of times for \(t\). tlist must be positive and contain the element 0. When taking steadysteady correlations only one tlist value is necessary, i.e. when \(t \rightarrow \infty\); here tlist is automatically set, ignoring user input.
 taulist (array_like) – list of times for \(\tau\). taulist must be positive and contain the element 0.
 c_ops (list) – list of collapse operators, may be timedependent for solver choice of me or mc.
 a_op (Qobj) – operator A.
 b_op (Qobj) – operator B.
 reverse (bool) – If True, calculate \(\left<A(t)B(t+\tau)\right>\) instead of \(\left<A(t+\tau)B(t)\right>\).
 solver (str) – choice of solver (me for masterequation, mc for Monte Carlo, and es for exponential series).
 options (Options) – solver options class. ntraj is taken as a twoelement list because the mc correlator calls mcsolve() recursively; by default, ntraj=[20, 100]. mc_corr_eps prevents dividebyzero errors in the mc correlator; by default, mc_corr_eps=1e10.
Returns: corr_mat – An 2dimensional array (matrix) of correlation values for the times specified by tlist (first index) and taulist (second index). If tlist is None, then a 1dimensional array of correlation values is returned instead.
Return type: array
References
See, Gardiner, Quantum Noise, Section 5.2.

correlation_ss
(H, taulist, c_ops, a_op, b_op, solver='me', reverse=False, args={}, options=<qutip.solver.Options object>)[source]¶ Calculate the twooperator twotime correlation function:
\[\lim_{t \to \infty} \left<A(t+\tau)B(t)\right>\]along one time axis (given steadystate initial conditions) using the quantum regression theorem and the evolution solver indicated by the solver parameter.
Parameters:  H (Qobj) – system Hamiltonian.
 taulist (array_like) – list of times for \(\tau\). taulist must be positive and contain the element 0.
 c_ops (list) – list of collapse operators.
 a_op (Qobj) – operator A.
 b_op (Qobj) – operator B.
 reverse (bool) – If True, calculate \(\lim_{t \to \infty} \left<A(t)B(t+\tau)\right>\) instead of \(\lim_{t \to \infty} \left<A(t+\tau)B(t)\right>\).
 solver (str) – choice of solver (me for masterequation and es for exponential series).
 options (Options) – solver options class. ntraj is taken as a twoelement list because the mc correlator calls mcsolve() recursively; by default, ntraj=[20, 100]. mc_corr_eps prevents dividebyzero errors in the mc correlator; by default, mc_corr_eps=1e10.
Returns: corr_vec – An array of correlation values for the times specified by tlist.
Return type: array
References
See, Gardiner, Quantum Noise, Section 5.2.

correlation_2op_1t
(H, state0, taulist, c_ops, a_op, b_op, solver='me', reverse=False, args={}, options=<qutip.solver.Options object>)[source]¶ Calculate the twooperator twotime correlation function: \(\left<A(t+\tau)B(t)\right>\) along one time axis using the quantum regression theorem and the evolution solver indicated by the solver parameter.
Parameters:  H (Qobj) – system Hamiltonian, may be timedependent for solver choice of me or mc.
 state0 (Qobj) – Initial state density matrix \(\rho(t_0)\) or state vector \(\psi(t_0)\). If ‘state0’ is ‘None’, then the steady state will be used as the initial state. The ‘steadystate’ is only implemented for the me and es solvers.
 taulist (array_like) – list of times for \(\tau\). taulist must be positive and contain the element 0.
 c_ops (list) – list of collapse operators, may be timedependent for solver choice of me or mc.
 a_op (Qobj) – operator A.
 b_op (Qobj) – operator B.
 reverse (bool {False, True}) – If True, calculate \(\left<A(t)B(t+\tau)\right>\) instead of \(\left<A(t+\tau)B(t)\right>\).
 solver (str {'me', 'mc', 'es'}) – choice of solver (me for masterequation, mc for Monte Carlo, and es for exponential series).
 options (Options) – Solver options class. ntraj is taken as a twoelement list because the mc correlator calls mcsolve() recursively; by default, ntraj=[20, 100]. mc_corr_eps prevents dividebyzero errors in the mc correlator; by default, mc_corr_eps=1e10.
Returns: corr_vec – An array of correlation values for the times specified by tlist.
Return type: ndarray
References
See, Gardiner, Quantum Noise, Section 5.2.

correlation_2op_2t
(H, state0, tlist, taulist, c_ops, a_op, b_op, solver='me', reverse=False, args={}, options=<qutip.solver.Options object>)[source]¶ Calculate the twooperator twotime correlation function: \(\left<A(t+\tau)B(t)\right>\) along two time axes using the quantum regression theorem and the evolution solver indicated by the solver parameter.
Parameters:  H (Qobj) – system Hamiltonian, may be timedependent for solver choice of me or mc.
 state0 (Qobj) – Initial state density matrix \(\rho_0\) or state vector \(\psi_0\). If ‘state0’ is ‘None’, then the steady state will be used as the initial state. The ‘steadystate’ is only implemented for the me and es solvers.
 tlist (array_like) – list of times for \(t\). tlist must be positive and contain the element 0. When taking steadysteady correlations only one tlist value is necessary, i.e. when \(t \rightarrow \infty\); here tlist is automatically set, ignoring user input.
 taulist (array_like) – list of times for \(\tau\). taulist must be positive and contain the element 0.
 c_ops (list) – list of collapse operators, may be timedependent for solver choice of me or mc.
 a_op (Qobj) – operator A.
 b_op (Qobj) – operator B.
 reverse (bool {False, True}) – If True, calculate \(\left<A(t)B(t+\tau)\right>\) instead of \(\left<A(t+\tau)B(t)\right>\).
 solver (str) – choice of solver (me for masterequation, mc for Monte Carlo, and es for exponential series).
 options (Options) – solver options class. ntraj is taken as a twoelement list because the mc correlator calls mcsolve() recursively; by default, ntraj=[20, 100]. mc_corr_eps prevents dividebyzero errors in the mc correlator; by default, mc_corr_eps=1e10.
Returns: corr_mat – An 2dimensional array (matrix) of correlation values for the times specified by tlist (first index) and taulist (second index). If tlist is None, then a 1dimensional array of correlation values is returned instead.
Return type: ndarray
References
See, Gardiner, Quantum Noise, Section 5.2.

correlation_3op_1t
(H, state0, taulist, c_ops, a_op, b_op, c_op, solver='me', args={}, options=<qutip.solver.Options object>)[source]¶ Calculate the threeoperator twotime correlation function: \(\left<A(t)B(t+\tau)C(t)\right>\) along one time axis using the quantum regression theorem and the evolution solver indicated by the solver parameter.
Note: it is not possibly to calculate a physically meaningful correlation of this form where \(\tau<0\).
Parameters:  H (Qobj) – system Hamiltonian, may be timedependent for solver choice of me or mc.
 rho0 (Qobj) – Initial state density matrix \(\rho(t_0)\) or state vector \(\psi(t_0)\). If ‘state0’ is ‘None’, then the steady state will be used as the initial state. The ‘steadystate’ is only implemented for the me and es solvers.
 taulist (array_like) – list of times for \(\tau\). taulist must be positive and contain the element 0.
 c_ops (list) – list of collapse operators, may be timedependent for solver choice of me or mc.
 a_op (Qobj) – operator A.
 b_op (Qobj) – operator B.
 c_op (Qobj) – operator C.
 solver (str) – choice of solver (me for masterequation, mc for Monte Carlo, and es for exponential series).
 options (Options) – solver options class. ntraj is taken as a twoelement list because the mc correlator calls mcsolve() recursively; by default, ntraj=[20, 100]. mc_corr_eps prevents dividebyzero errors in the mc correlator; by default, mc_corr_eps=1e10.
Returns: corr_vec – An array of correlation values for the times specified by taulist
Return type: array
References
See, Gardiner, Quantum Noise, Section 5.2.

correlation_3op_2t
(H, state0, tlist, taulist, c_ops, a_op, b_op, c_op, solver='me', args={}, options=<qutip.solver.Options object>)[source]¶ Calculate the threeoperator twotime correlation function: \(\left<A(t)B(t+\tau)C(t)\right>\) along two time axes using the quantum regression theorem and the evolution solver indicated by the solver parameter.
Note: it is not possibly to calculate a physically meaningful correlation of this form where \(\tau<0\).
Parameters:  H (Qobj) – system Hamiltonian, may be timedependent for solver choice of me or mc.
 rho0 (Qobj) – Initial state density matrix \(\rho_0\) or state vector \(\psi_0\). If ‘state0’ is ‘None’, then the steady state will be used as the initial state. The ‘steadystate’ is only implemented for the me and es solvers.
 tlist (array_like) – list of times for \(t\). tlist must be positive and contain the element 0. When taking steadysteady correlations only one tlist value is necessary, i.e. when \(t \rightarrow \infty\); here tlist is automatically set, ignoring user input.
 taulist (array_like) – list of times for \(\tau\). taulist must be positive and contain the element 0.
 c_ops (list) – list of collapse operators, may be timedependent for solver choice of me or mc.
 a_op (Qobj) – operator A.
 b_op (Qobj) – operator B.
 c_op (Qobj) – operator C.
 solver (str) – choice of solver (me for masterequation, mc for Monte Carlo, and es for exponential series).
 options (Options) – solver options class. ntraj is taken as a twoelement list because the mc correlator calls mcsolve() recursively; by default, ntraj=[20, 100]. mc_corr_eps prevents dividebyzero errors in the mc correlator; by default, mc_corr_eps=1e10.
Returns: corr_mat – An 2dimensional array (matrix) of correlation values for the times specified by tlist (first index) and taulist (second index). If tlist is None, then a 1dimensional array of correlation values is returned instead.
Return type: array
References
See, Gardiner, Quantum Noise, Section 5.2.

correlation_4op_1t
(H, state0, taulist, c_ops, a_op, b_op, c_op, d_op, solver='me', args={}, options=<qutip.solver.Options object>)[source]¶ Calculate the fouroperator twotime correlation function: \(\left<A(t)B(t+\tau)C(t+\tau)D(t)\right>\) along one time axis using the quantum regression theorem and the evolution solver indicated by the solver parameter.
Note: it is not possibly to calculate a physically meaningful correlation of this form where \(\tau<0\).
Parameters:  H (Qobj) – system Hamiltonian, may be timedependent for solver choice of me or mc.
 rho0 (Qobj) – Initial state density matrix \(\rho(t_0)\) or state vector \(\psi(t_0)\). If ‘state0’ is ‘None’, then the steady state will be used as the initial state. The ‘steadystate’ is only implemented for the me and es solvers.
 taulist (array_like) – list of times for \(\tau\). taulist must be positive and contain the element 0.
 c_ops (list) – list of collapse operators, may be timedependent for solver choice of me or mc.
 a_op (Qobj) – operator A.
 b_op (Qobj) – operator B.
 c_op (Qobj) – operator C.
 d_op (Qobj) – operator D.
 solver (str) – choice of solver (me for masterequation, mc for Monte Carlo, and es for exponential series).
 options (Options) – solver options class. ntraj is taken as a twoelement list because the mc correlator calls mcsolve() recursively; by default, ntraj=[20, 100]. mc_corr_eps prevents dividebyzero errors in the mc correlator; by default, mc_corr_eps=1e10.
Returns: corr_vec – An array of correlation values for the times specified by taulist.
Return type: array
References
See, Gardiner, Quantum Noise, Section 5.2.
Note
Deprecated in QuTiP 3.1 Use correlation_3op_1t() instead.

correlation_4op_2t
(H, state0, tlist, taulist, c_ops, a_op, b_op, c_op, d_op, solver='me', args={}, options=<qutip.solver.Options object>)[source]¶ Calculate the fouroperator twotime correlation function: \(\left<A(t)B(t+\tau)C(t+\tau)D(t)\right>\) along two time axes using the quantum regression theorem and the evolution solver indicated by the solver parameter.
Note: it is not possibly to calculate a physically meaningful correlation of this form where \(\tau<0\).
Parameters:  H (Qobj) – system Hamiltonian, may be timedependent for solver choice of me or mc.
 rho0 (Qobj) – Initial state density matrix \(\rho_0\) or state vector \(\psi_0\). If ‘state0’ is ‘None’, then the steady state will be used as the initial state. The ‘steadystate’ is only implemented for the me and es solvers.
 tlist (array_like) – list of times for \(t\). tlist must be positive and contain the element 0. When taking steadysteady correlations only one tlist value is necessary, i.e. when \(t \rightarrow \infty\); here tlist is automatically set, ignoring user input.
 taulist (array_like) – list of times for \(\tau\). taulist must be positive and contain the element 0.
 c_ops (list) – list of collapse operators, may be timedependent for solver choice of me or mc.
 a_op (Qobj) – operator A.
 b_op (Qobj) – operator B.
 c_op (Qobj) – operator C.
 d_op (Qobj) – operator D.
 solver (str) – choice of solver (me for masterequation, mc for Monte Carlo, and es for exponential series).
 options (Options) – solver options class. ntraj is taken as a twoelement list because the mc correlator calls mcsolve() recursively; by default, ntraj=[20, 100]. mc_corr_eps prevents dividebyzero errors in the mc correlator; by default, mc_corr_eps=1e10.
Returns: corr_mat – An 2dimensional array (matrix) of correlation values for the times specified by tlist (first index) and taulist (second index). If tlist is None, then a 1dimensional array of correlation values is returned instead.
Return type: array
References
See, Gardiner, Quantum Noise, Section 5.2.

spectrum
(H, wlist, c_ops, a_op, b_op, solver='es', use_pinv=False)[source]¶ Calculate the spectrum of the correlation function \(\lim_{t \to \infty} \left<A(t+\tau)B(t)\right>\), i.e., the Fourier transform of the correlation function:
\[S(\omega) = \int_{\infty}^{\infty} \lim_{t \to \infty} \left<A(t+\tau)B(t)\right> e^{i\omega\tau} d\tau.\]using the solver indicated by the solver parameter. Note: this spectrum is only defined for stationary statistics (uses steady state rho0)
Parameters:  H (
qutip.qobj
) – system Hamiltonian.  wlist (array_like) – list of frequencies for \(\omega\).
 c_ops (list) – list of collapse operators.
 a_op (Qobj) – operator A.
 b_op (Qobj) – operator B.
 solver (str) – choice of solver (es for exponential series and pi for psuedoinverse).
 use_pinv (bool) – For use with the pi solver: if True use numpy’s pinv method, otherwise use a generic solver.
Returns: spectrum – An array with spectrum \(S(\omega)\) for the frequencies specified in wlist.
Return type: array
 H (

spectrum_ss
(H, wlist, c_ops, a_op, b_op)[source]¶ Calculate the spectrum of the correlation function \(\lim_{t \to \infty} \left<A(t+\tau)B(t)\right>\), i.e., the Fourier transform of the correlation function:
\[S(\omega) = \int_{\infty}^{\infty} \lim_{t \to \infty} \left<A(t+\tau)B(t)\right> e^{i\omega\tau} d\tau.\]using an eseries based solver Note: this spectrum is only defined for stationary statistics (uses steady state rho0).
Parameters:  H (
qutip.qobj
) – system Hamiltonian.  wlist (array_like) – list of frequencies for \(\omega\).
 c_ops (list of
qutip.qobj
) – list of collapse operators.  a_op (
qutip.qobj
) – operator A.  b_op (
qutip.qobj
) – operator B.  use_pinv (bool) – If True use numpy’s pinv method, otherwise use a generic solver.
Returns: spectrum – An array with spectrum \(S(\omega)\) for the frequencies specified in wlist.
Return type: array
 H (

spectrum_pi
(H, wlist, c_ops, a_op, b_op, use_pinv=False)[source]¶ Calculate the spectrum of the correlation function \(\lim_{t \to \infty} \left<A(t+\tau)B(t)\right>\), i.e., the Fourier transform of the correlation function:
\[S(\omega) = \int_{\infty}^{\infty} \lim_{t \to \infty} \left<A(t+\tau)B(t)\right> e^{i\omega\tau} d\tau.\]using a psuedoinverse method. Note: this spectrum is only defined for stationary statistics (uses steady state rho0)
Parameters:  H (
qutip.qobj
) – system Hamiltonian.  wlist (array_like) – list of frequencies for \(\omega\).
 c_ops (list of
qutip.qobj
) – list of collapse operators.  a_op (
qutip.qobj
) – operator A.  b_op (
qutip.qobj
) – operator B.  use_pinv (bool) – If True use numpy’s pinv method, otherwise use a generic solver.
Returns: spectrum – An array with spectrum \(S(\omega)\) for the frequencies specified in wlist.
Return type: array
 H (

spectrum_correlation_fft
(taulist, y)[source]¶ Calculate the power spectrum corresponding to a twotime correlation function using FFT.
Parameters:  tlist (array_like) – list/array of times \(t\) which the correlation function is given.
 y (array_like) – list/array of correlations corresponding to time delays \(t\).
Returns: w, S – Returns an array of angular frequencies ‘w’ and the corresponding onesided power spectrum ‘S(w)’.
Return type: tuple

coherence_function_g1
(H, state0, taulist, c_ops, a_op, solver='me', args={}, options=<qutip.solver.Options object>)[source]¶ Calculate the normalized firstorder quantum coherence function:
\[g^{(1)}(\tau) = \frac{\langle A^\dagger(\tau)A(0)\rangle} {\sqrt{\langle A^\dagger(\tau)A(\tau)\rangle \langle A^\dagger(0)A(0)\rangle}}\]using the quantum regression theorem and the evolution solver indicated by the solver parameter.
Parameters:  H (Qobj) – system Hamiltonian, may be timedependent for solver choice of me or mc.
 state0 (Qobj) – Initial state density matrix \(\rho(t_0)\) or state vector \(\psi(t_0)\). If ‘state0’ is ‘None’, then the steady state will be used as the initial state. The ‘steadystate’ is only implemented for the me and es solvers.
 taulist (array_like) – list of times for \(\tau\). taulist must be positive and contain the element 0.
 c_ops (list) – list of collapse operators, may be timedependent for solver choice of me or mc.
 a_op (Qobj) – operator A.
 solver (str) – choice of solver (me for masterequation and es for exponential series).
 options (Options) – solver options class. ntraj is taken as a twoelement list because the mc correlator calls mcsolve() recursively; by default, ntraj=[20, 100]. mc_corr_eps prevents dividebyzero errors in the mc correlator; by default, mc_corr_eps=1e10.
Returns: g1, G1 – The normalized and unnormalized secondorder coherence function.
Return type: tuple

coherence_function_g2
(H, state0, taulist, c_ops, a_op, solver='me', args={}, options=<qutip.solver.Options object>)[source]¶ Calculate the normalized secondorder quantum coherence function:
\[ g^{(2)}(\tau) = \frac{\langle A^\dagger(0)A^\dagger(\tau)A(\tau)A(0)\rangle} {\langle A^\dagger(\tau)A(\tau)\rangle \langle A^\dagger(0)A(0)\rangle}\]using the quantum regression theorem and the evolution solver indicated by the solver parameter.
Parameters:  H (Qobj) – system Hamiltonian, may be timedependent for solver choice of me or mc.
 state0 (Qobj) – Initial state density matrix \(\rho(t_0)\) or state vector \(\psi(t_0)\). If ‘state0’ is ‘None’, then the steady state will be used as the initial state. The ‘steadystate’ is only implemented for the me and es solvers.
 taulist (array_like) – list of times for \(\tau\). taulist must be positive and contain the element 0.
 c_ops (list) – list of collapse operators, may be timedependent for solver choice of me or mc.
 a_op (Qobj) – operator A.
 solver (str) – choice of solver (me for masterequation and es for exponential series).
 options (Options) – solver options class. ntraj is taken as a twoelement list because the mc correlator calls mcsolve() recursively; by default, ntraj=[20, 100]. mc_corr_eps prevents dividebyzero errors in the mc correlator; by default, mc_corr_eps=1e10.
Returns: g2, G2 – The normalized and unnormalized secondorder coherence function.
Return type: tuple
Steadystate Solvers¶
Module contains functions for solving for the steady state density matrix of open quantum systems defined by a Liouvillian or Hamiltonian and a list of collapse operators.

steadystate
(A, c_op_list=[], **kwargs)[source]¶ Calculates the steady state for quantum evolution subject to the supplied Hamiltonian or Liouvillian operator and (if given a Hamiltonian) a list of collapse operators.
If the user passes a Hamiltonian then it, along with the list of collapse operators, will be converted into a Liouvillian operator in Lindblad form.
Parameters:  A (qobj) – A Hamiltonian or Liouvillian operator.
 c_op_list (list) – A list of collapse operators.
 method (str {'direct', 'eigen', 'iterativegmres',) –
 ‘iterativelgmres’, ‘iterativebicgstab’, ‘svd’, ‘power’,
 ‘powergmres’, ‘powerlgmres’, ‘powerbicgstab’}
Method for solving the underlying linear equation. Direct LU solver ‘direct’ (default), sparse eigenvalue problem ‘eigen’, iterative GMRES method ‘iterativegmres’, iterative LGMRES method ‘iterativelgmres’, iterative BICGSTAB method ‘iterativebicgstab’, SVD ‘svd’ (dense), or inversepower method ‘power’. The iterative power methods ‘powergmres’, ‘powerlgmres’, ‘powerbicgstab’ use the same solvers as their direct counterparts.
 return_info (bool, optional, default = False) – Return a dictionary of solverspecific infomation about the solution and how it was obtained.
 sparse (bool, optional, default = True) – Solve for the steady state using sparse algorithms. If set to False, the underlying Liouvillian operator will be converted into a dense matrix. Use only for ‘smaller’ systems.
 use_rcm (bool, optional, default = False) – Use reverse CuthillMckee reordering to minimize fillin in the LU factorization of the Liouvillian.
 use_wbm (bool, optional, default = False) – Use Weighted Bipartite Matching reordering to make the Liouvillian
diagonally dominant. This is useful for iterative preconditioners
only, and is set to
True
by default when finding a preconditioner.  weight (float, optional) – Sets the size of the elements used for adding the unity trace condition to the linear solvers. This is set to the average abs value of the Liouvillian elements if not specified by the user.
 x0 (ndarray, optional) – ITERATIVE ONLY. Initial guess for solution vector.
 maxiter (int, optional, default=1000) – ITERATIVE ONLY. Maximum number of iterations to perform.
 tol (float, optional, default=1e12) – ITERATIVE ONLY. Tolerance used for terminating solver.
 permc_spec (str, optional, default='COLAMD') – ITERATIVE ONLY. Column ordering used internally by superLU for the ‘direct’ LU decomposition method. Options include ‘COLAMD’ and ‘NATURAL’. If using RCM then this is set to ‘NATURAL’ automatically unless explicitly specified.
 use_precond (bool optional, default = False) – ITERATIVE ONLY. Use an incomplete sparse LU decomposition as a preconditioner for the ‘iterative’ GMRES and BICG solvers. Speeds up convergence time by orders of magnitude in many cases.
 M ({sparse matrix, dense matrix, LinearOperator}, optional) – ITERATIVE ONLY. Preconditioner for A. The preconditioner should
approximate the inverse of A. Effective preconditioning can
dramatically improve the rate of convergence for iterative methods.
If no preconditioner is given and
use_precond = True
, then one is generated automatically.  fill_factor (float, optional, default = 100) – ITERATIVE ONLY. Specifies the fill ratio upper bound (>=1) of the iLU preconditioner. Lower values save memory at the cost of longer execution times and a possible singular factorization.
 drop_tol (float, optional, default = 1e4) – ITERATIVE ONLY. Sets the threshold for the magnitude of preconditioner elements that should be dropped. Can be reduced for a courser factorization at the cost of an increased number of iterations, and a possible singular factorization.
 diag_pivot_thresh (float, optional, default = None) – ITERATIVE ONLY. Sets the threshold between [0,1] for which diagonal elements are considered acceptable pivot points when using a preconditioner. A value of zero forces the pivot to be the diagonal element.
 ILU_MILU (str, optional, default = 'smilu_2') – ITERATIVE ONLY. Selects the incomplete LU decomposition method algoithm used in creating the preconditoner. Should only be used by advanced users.
Returns:  dm (qobj) – Steady state density matrix.
 info (dict, optional) – Dictionary containing solverspecific information about the solution.
Notes
The SVD method works only for dense operators (i.e. small systems).

build_preconditioner
(A, c_op_list=[], **kwargs)[source]¶ Constructs a iLU preconditioner necessary for solving for the steady state density matrix using the iterative linear solvers in the ‘steadystate’ function.
Parameters:  A (qobj) – A Hamiltonian or Liouvillian operator.
 c_op_list (list) – A list of collapse operators.
 return_info (bool, optional, default = False) – Return a dictionary of solverspecific infomation about the solution and how it was obtained.
 use_rcm (bool, optional, default = False) – Use reverse CuthillMckee reordering to minimize fillin in the LU factorization of the Liouvillian.
 use_wbm (bool, optional, default = False) – Use Weighted Bipartite Matching reordering to make the Liouvillian
diagonally dominant. This is useful for iterative preconditioners
only, and is set to
True
by default when finding a preconditioner.  weight (float, optional) – Sets the size of the elements used for adding the unity trace condition to the linear solvers. This is set to the average abs value of the Liouvillian elements if not specified by the user.
 method (str, default = 'iterative') – Tells the preconditioner what type of Liouvillian to build for iLU factorization. For direct iterative methods use ‘iterative’. For power iterative methods use ‘power’.
 permc_spec (str, optional, default='COLAMD') – Column ordering used internally by superLU for the ‘direct’ LU decomposition method. Options include ‘COLAMD’ and ‘NATURAL’. If using RCM then this is set to ‘NATURAL’ automatically unless explicitly specified.
 fill_factor (float, optional, default = 100) – Specifies the fill ratio upper bound (>=1) of the iLU preconditioner. Lower values save memory at the cost of longer execution times and a possible singular factorization.
 drop_tol (float, optional, default = 1e4) – Sets the threshold for the magnitude of preconditioner elements that should be dropped. Can be reduced for a courser factorization at the cost of an increased number of iterations, and a possible singular factorization.
 diag_pivot_thresh (float, optional, default = None) – Sets the threshold between [0,1] for which diagonal elements are considered acceptable pivot points when using a preconditioner. A value of zero forces the pivot to be the diagonal element.
 ILU_MILU (str, optional, default = 'smilu_2') – Selects the incomplete LU decomposition method algoithm used in creating the preconditoner. Should only be used by advanced users.
Returns:  lu (object) – Returns a SuperLU object representing iLU preconditioner.
 info (dict, optional) – Dictionary containing solverspecific information.
Propagators¶

propagator
(H, t, c_op_list=[], args={}, options=None, unitary_mode='batch', parallel=False, progress_bar=None, **kwargs)[source]¶ Calculate the propagator U(t) for the density matrix or wave function such that \(\psi(t) = U(t)\psi(0)\) or \(\rho_{\mathrm vec}(t) = U(t) \rho_{\mathrm vec}(0)\) where \(\rho_{\mathrm vec}\) is the vector representation of the density matrix.
Parameters:  H (qobj or list) – Hamiltonian as a Qobj instance of a nested list of Qobjs and
coefficients in the liststring or listfunction format for
timedependent Hamiltonians (see description in
qutip.mesolve
).  t (float or arraylike) – Time or list of times for which to evaluate the propagator.
 c_op_list (list) – List of qobj collapse operators.
 args (list/array/dictionary) – Parameters to callback functions for timedependent Hamiltonians and collapse operators.
 options (
qutip.Options
) – with options for the ODE solver.  = str ('batch', 'single') (unitary_mode) – Solve all basis vectors simulaneously (‘batch’) or individually (‘single’).
 parallel (bool {False, True}) – Run the propagator in parallel mode. This will override the unitary_mode settings if set to True.
 progress_bar (BaseProgressBar) – Optional instance of BaseProgressBar, or a subclass thereof, for showing the progress of the simulation. By default no progress bar is used, and if set to True a TextProgressBar will be used.
Returns: a – Instance representing the propagator \(U(t)\).
Return type: qobj
 H (qobj or list) – Hamiltonian as a Qobj instance of a nested list of Qobjs and
coefficients in the liststring or listfunction format for
timedependent Hamiltonians (see description in
Timedependent problems¶

rhs_generate
(H, c_ops, args={}, options=<qutip.solver.Options object>, name=None, cleanup=True)[source]¶ Generates the Cython functions needed for solving the dynamics of a given system using the mesolve function inside a parfor loop.
Parameters:  H (qobj) – System Hamiltonian.
 c_ops (list) –
list
of collapse operators.  args (dict) – Arguments for timedependent Hamiltonian and collapse operator terms.
 options (Options) – Instance of ODE solver options.
 name (str) – Name of generated RHS
 cleanup (bool) – Whether the generated cython file should be automatically removed or not.
Notes
Using this function with any solver other than the mesolve function will result in an error.
Visualization¶
Pseudoprobability Functions¶

qfunc
(state, xvec, yvec, g=1.4142135623730951)[source]¶ Qfunction of a given state vector or density matrix at points xvec + i * yvec.
Parameters:  state (qobj) – A state vector or density matrix.
 xvec (array_like) – xcoordinates at which to calculate the Wigner function.
 yvec (array_like) – ycoordinates at which to calculate the Wigner function.
 g (float) – Scaling factor for a = 0.5 * g * (x + iy), default g = sqrt(2).
Returns: Q – Values representing the Qfunction calculated over the specified range [xvec,yvec].
Return type: array

spin_q_function
(rho, theta, phi)[source]¶ Husimi Qfunction for spins.
Parameters:  state (qobj) – A state vector or density matrix for a spinj quantum system.
 theta (array_like) – thetacoordinates at which to calculate the Q function.
 phi (array_like) – phicoordinates at which to calculate the Q function.
Returns: Q, THETA, PHI – Values representing the spin Q function at the values specified by THETA and PHI.
Return type: 2darray

spin_wigner
(rho, theta, phi)[source]¶ Wigner function for spins on the Bloch sphere.
Parameters:  state (qobj) – A state vector or density matrix for a spinj quantum system.
 theta (array_like) – thetacoordinates at which to calculate the Q function.
 phi (array_like) – phicoordinates at which to calculate the Q function.
Returns: W, THETA, PHI – Values representing the spin Wigner function at the values specified by THETA and PHI.
Return type: 2darray
Notes
Experimental.

wigner
(psi, xvec, yvec, method='clenshaw', g=1.4142135623730951, sparse=False, parfor=False)[source]¶ Wigner function for a state vector or density matrix at points xvec + i * yvec.
Parameters:  state (qobj) – A state vector or density matrix.
 xvec (array_like) – xcoordinates at which to calculate the Wigner function.
 yvec (array_like) – ycoordinates at which to calculate the Wigner function. Does not apply to the ‘fft’ method.
 g (float) – Scaling factor for a = 0.5 * g * (x + iy), default g = sqrt(2).
 method (string {'clenshaw', 'iterative', 'laguerre', 'fft'}) – Select method ‘clenshaw’ ‘iterative’, ‘laguerre’, or ‘fft’, where ‘clenshaw’ and ‘iterative’ use an iterative method to evaluate the Wigner functions for density matrices \(m><n\), while ‘laguerre’ uses the Laguerre polynomials in scipy for the same task. The ‘fft’ method evaluates the Fourier transform of the density matrix. The ‘iterative’ method is default, and in general recommended, but the ‘laguerre’ method is more efficient for very sparse density matrices (e.g., superpositions of Fock states in a large Hilbert space). The ‘clenshaw’ method is the preferred method for dealing with density matrices that have a large number of excitations (>~50). ‘clenshaw’ is a fast and numerically stable method.
 sparse (bool {False, True}) – Tells the default solver whether or not to keep the input density matrix in sparse format. As the dimensions of the density matrix grow, setthing this flag can result in increased performance.
 parfor (bool {False, True}) – Flag for calculating the Laguerre polynomial based Wigner function method=’laguerre’ in parallel using the parfor function.
Returns:  W (array) – Values representing the Wigner function calculated over the specified range [xvec,yvec].
 yvex (array) – FFT ONLY. Returns the ycoordinate values calculated via the Fourier transform.
Notes
The ‘fft’ method accepts only an xvec input for the xcoordinate. The ycoordinates are calculated internally.
References
Ulf Leonhardt, Measuring the Quantum State of Light, (Cambridge University Press, 1997)
Graphs and Visualization¶
Functions for visualizing results of quantum dynamics simulations, visualizations of quantum states and processes.

hinton
(rho, xlabels=None, ylabels=None, title=None, ax=None, cmap=None, label_top=True)[source]¶ Draws a Hinton diagram for visualizing a density matrix or superoperator.
Parameters:  rho (qobj) – Input density matrix or superoperator.
 xlabels (list of strings or False) – list of x labels
 ylabels (list of strings or False) – list of y labels
 title (string) – title of the plot (optional)
 ax (a matplotlib axes instance) – The axes context in which the plot will be drawn.
 cmap (a matplotlib colormap instance) – Color map to use when plotting.
 label_top (bool) – If True, xaxis labels will be placed on top, otherwise they will appear below the plot.
Returns: fig, ax – A tuple of the matplotlib figure and axes instances used to produce the figure.
Return type: tuple
Raises: ValueError
– Input argument is not a quantum object.

matrix_histogram
(M, xlabels=None, ylabels=None, title=None, limits=None, colorbar=True, fig=None, ax=None)[source]¶ Draw a histogram for the matrix M, with the given x and y labels and title.
Parameters:  M (Matrix of Qobj) – The matrix to visualize
 xlabels (list of strings) – list of x labels
 ylabels (list of strings) – list of y labels
 title (string) – title of the plot (optional)
 limits (list/array with two float numbers) – The zaxis limits [min, max] (optional)
 ax (a matplotlib axes instance) – The axes context in which the plot will be drawn.
Returns: fig, ax – A tuple of the matplotlib figure and axes instances used to produce the figure.
Return type: tuple
Raises: ValueError
– Input argument is not valid.

matrix_histogram_complex
(M, xlabels=None, ylabels=None, title=None, limits=None, phase_limits=None, colorbar=True, fig=None, ax=None, threshold=None)[source]¶ Draw a histogram for the amplitudes of matrix M, using the argument of each element for coloring the bars, with the given x and y labels and title.
Parameters:  M (Matrix of Qobj) – The matrix to visualize
 xlabels (list of strings) – list of x labels
 ylabels (list of strings) – list of y labels
 title (string) – title of the plot (optional)
 limits (list/array with two float numbers) – The zaxis limits [min, max] (optional)
 phase_limits (list/array with two float numbers) – The phaseaxis (colorbar) limits [min, max] (optional)
 ax (a matplotlib axes instance) – The axes context in which the plot will be drawn.
 threshold (float (None)) – Threshold for when bars of smaller height should be transparent. If not set, all bars are colored according to the color map.
Returns: fig, ax – A tuple of the matplotlib figure and axes instances used to produce the figure.
Return type: tuple
Raises: ValueError
– Input argument is not valid.

plot_energy_levels
(H_list, N=0, labels=None, show_ylabels=False, figsize=(8, 12), fig=None, ax=None)[source]¶ Plot the energy level diagrams for a list of Hamiltonians. Include up to N energy levels. For each element in H_list, the energy levels diagram for the cummulative Hamiltonian sum(H_list[0:n]) is plotted, where n is the index of an element in H_list.
Parameters:  H_list (List of Qobj) – A list of Hamiltonians.
 labels (List of string) – A list of labels for each Hamiltonian
 show_ylabels (Bool (default False)) – Show y labels to the left of energy levels of the initial Hamiltonian.
 N (int) – The number of energy levels to plot
 figsize (tuple (int,int)) – The size of the figure (width, height).
 fig (a matplotlib Figure instance) – The Figure canvas in which the plot will be drawn.
 ax (a matplotlib axes instance) – The axes context in which the plot will be drawn.
Returns: fig, ax – A tuple of the matplotlib figure and axes instances used to produce the figure.
Return type: tuple
Raises: ValueError
– Input argument is not valid.

plot_fock_distribution
(rho, offset=0, fig=None, ax=None, figsize=(8, 6), title=None, unit_y_range=True)[source]¶ Plot the Fock distribution for a density matrix (or ket) that describes an oscillator mode.
Parameters:  rho (
qutip.qobj.Qobj
) – The density matrix (or ket) of the state to visualize.  fig (a matplotlib Figure instance) – The Figure canvas in which the plot will be drawn.
 ax (a matplotlib axes instance) – The axes context in which the plot will be drawn.
 title (string) – An optional title for the figure.
 figsize ((width, height)) – The size of the matplotlib figure (in inches) if it is to be created (that is, if no ‘fig’ and ‘ax’ arguments are passed).
Returns: fig, ax – A tuple of the matplotlib figure and axes instances used to produce the figure.
Return type: tuple
 rho (

plot_wigner_fock_distribution
(rho, fig=None, axes=None, figsize=(8, 4), cmap=None, alpha_max=7.5, colorbar=False, method='iterative', projection='2d')[source]¶ Plot the Fock distribution and the Wigner function for a density matrix (or ket) that describes an oscillator mode.
Parameters:  rho (
qutip.qobj.Qobj
) – The density matrix (or ket) of the state to visualize.  fig (a matplotlib Figure instance) – The Figure canvas in which the plot will be drawn.
 axes (a list of two matplotlib axes instances) – The axes context in which the plot will be drawn.
 figsize ((width, height)) – The size of the matplotlib figure (in inches) if it is to be created (that is, if no ‘fig’ and ‘ax’ arguments are passed).
 cmap (a matplotlib cmap instance) – The colormap.
 alpha_max (float) – The span of the x and y coordinates (both [alpha_max, alpha_max]).
 colorbar (bool) – Whether (True) or not (False) a colorbar should be attached to the Wigner function graph.
 method (string {'iterative', 'laguerre', 'fft'}) – The method used for calculating the wigner function. See the documentation for qutip.wigner for details.
 projection (string {'2d', '3d'}) – Specify whether the Wigner function is to be plotted as a contour graph (‘2d’) or surface plot (‘3d’).
Returns: fig, ax – A tuple of the matplotlib figure and axes instances used to produce the figure.
Return type: tuple
 rho (

plot_wigner
(rho, fig=None, ax=None, figsize=(8, 4), cmap=None, alpha_max=7.5, colorbar=False, method='iterative', projection='2d')[source]¶ Plot the the Wigner function for a density matrix (or ket) that describes an oscillator mode.
Parameters:  rho (
qutip.qobj.Qobj
) – The density matrix (or ket) of the state to visualize.  fig (a matplotlib Figure instance) – The Figure canvas in which the plot will be drawn.
 ax (a matplotlib axes instance) – The axes context in which the plot will be drawn.
 figsize ((width, height)) – The size of the matplotlib figure (in inches) if it is to be created (that is, if no ‘fig’ and ‘ax’ arguments are passed).
 cmap (a matplotlib cmap instance) – The colormap.
 alpha_max (float) – The span of the x and y coordinates (both [alpha_max, alpha_max]).
 colorbar (bool) – Whether (True) or not (False) a colorbar should be attached to the Wigner function graph.
 method (string {'iterative', 'laguerre', 'fft'}) – The method used for calculating the wigner function. See the documentation for qutip.wigner for details.
 projection (string {'2d', '3d'}) – Specify whether the Wigner function is to be plotted as a contour graph (‘2d’) or surface plot (‘3d’).
Returns: fig, ax – A tuple of the matplotlib figure and axes instances used to produce the figure.
Return type: tuple
 rho (

sphereplot
(theta, phi, values, fig=None, ax=None, save=False)[source]¶ Plots a matrix of values on a sphere
Parameters:  theta (float) – Angle with respect to zaxis
 phi (float) – Angle in xy plane
 values (array) – Data set to be plotted
 fig (a matplotlib Figure instance) – The Figure canvas in which the plot will be drawn.
 ax (a matplotlib axes instance) – The axes context in which the plot will be drawn.
 save (bool {False , True}) – Whether to save the figure or not
Returns: fig, ax – A tuple of the matplotlib figure and axes instances used to produce the figure.
Return type: tuple

plot_schmidt
(ket, splitting=None, labels_iteration=(3, 2), theme='light', fig=None, ax=None, figsize=(6, 6))[source]¶ Plotting scheme related to Schmidt decomposition. Converts a state into a matrix (A_ij > A_i^j), where rows are first particles and columns  last.
See also: plot_qubism with how=’before_after’ for a similar plot.
Parameters:  ket (Qobj) – Pure state for plotting.
 splitting (int) – Plot for a number of first particles versus the rest. If not given, it is (number of particles + 1) // 2.
 theme ('light' (default) or 'dark') – Set coloring theme for mapping complex values into colors. See: complex_array_to_rgb.
 labels_iteration (int or pair of ints (default (3,2))) – Number of particles to be shown as tick labels, for first (vertical) and last (horizontal) particles, respectively.
 fig (a matplotlib figure instance) – The figure canvas on which the plot will be drawn.
 ax (a matplotlib axis instance) – The axis context in which the plot will be drawn.
 figsize ((width, height)) – The size of the matplotlib figure (in inches) if it is to be created (that is, if no ‘fig’ and ‘ax’ arguments are passed).
Returns: fig, ax – A tuple of the matplotlib figure and axes instances used to produce the figure.
Return type: tuple

plot_qubism
(ket, theme='light', how='pairs', grid_iteration=1, legend_iteration=0, fig=None, ax=None, figsize=(6, 6))[source]¶ Qubism plot for pure states of many qudits. Works best for spin chains, especially with even number of particles of the same dimension. Allows to see entanglement between first 2*k particles and the rest.
More information:
J. RodriguezLaguna, P. Migdal, M. Ibanez Berganza, M. Lewenstein, G. Sierra, “Qubism: selfsimilar visualization of manybody wavefunctions”, New J. Phys. 14 053028 (2012), arXiv:1112.3560, http://dx.doi.org/10.1088/13672630/14/5/053028 (open access)Parameters:  ket (Qobj) – Pure state for plotting.
 theme ('light' (default) or 'dark') – Set coloring theme for mapping complex values into colors. See: complex_array_to_rgb.
 how ('pairs' (default), 'pairs_skewed' or 'before_after') –
Type of Qubism plotting. Options:
‘pairs’  typical coordinates, ‘pairs_skewed’  for ferromagnetic/antriferromagnetic plots, ‘before_after’  related to Schmidt plot (see also: plot_schmidt).  grid_iteration (int (default 1)) – Helper lines to be drawn on plot. Show tiles for 2*grid_iteration particles vs all others.
 legend_iteration (int (default 0) or 'grid_iteration' or 'all') –
Show labels for first 2*legend_iteration particles. Option ‘grid_iteration’ sets the same number of particles
as for grid_iteration.Option ‘all’ makes label for all particles. Typically it should be 0, 1, 2 or perhaps 3.
 fig (a matplotlib figure instance) – The figure canvas on which the plot will be drawn.
 ax (a matplotlib axis instance) – The axis context in which the plot will be drawn.
 figsize ((width, height)) – The size of the matplotlib figure (in inches) if it is to be created (that is, if no ‘fig’ and ‘ax’ arguments are passed).
Returns: fig, ax – A tuple of the matplotlib figure and axes instances used to produce the figure.
Return type: tuple

plot_expectation_values
(results, ylabels=[], title=None, show_legend=False, fig=None, axes=None, figsize=(8, 4))[source]¶ Visualize the results (expectation values) for an evolution solver. results is assumed to be an instance of Result, or a list of Result instances.
Parameters:  results ((list of)
qutip.solver.Result
) – List of results objects returned by any of the QuTiP evolution solvers.  ylabels (list of strings) – The yaxis labels. List should be of the same length as results.
 title (string) – The title of the figure.
 show_legend (bool) – Whether or not to show the legend.
 fig (a matplotlib Figure instance) – The Figure canvas in which the plot will be drawn.
 axes (a matplotlib axes instance) – The axes context in which the plot will be drawn.
 figsize ((width, height)) – The size of the matplotlib figure (in inches) if it is to be created (that is, if no ‘fig’ and ‘ax’ arguments are passed).
Returns: fig, ax – A tuple of the matplotlib figure and axes instances used to produce the figure.
Return type: tuple
 results ((list of)

plot_spin_distribution_2d
(P, THETA, PHI, fig=None, ax=None, figsize=(8, 8))[source]¶ Plot a spin distribution function (given as meshgrid data) with a 2D projection where the surface of the unit sphere is mapped on the unit disk.
Parameters:  P (matrix) – Distribution values as a meshgrid matrix.
 THETA (matrix) – Meshgrid matrix for the theta coordinate.
 PHI (matrix) – Meshgrid matrix for the phi coordinate.
 fig (a matplotlib figure instance) – The figure canvas on which the plot will be drawn.
 ax (a matplotlib axis instance) – The axis context in which the plot will be drawn.
 figsize ((width, height)) – The size of the matplotlib figure (in inches) if it is to be created (that is, if no ‘fig’ and ‘ax’ arguments are passed).
Returns: fig, ax – A tuple of the matplotlib figure and axes instances used to produce the figure.
Return type: tuple

plot_spin_distribution_3d
(P, THETA, PHI, fig=None, ax=None, figsize=(8, 6))[source]¶ Plots a matrix of values on a sphere
Parameters:  P (matrix) – Distribution values as a meshgrid matrix.
 THETA (matrix) – Meshgrid matrix for the theta coordinate.
 PHI (matrix) – Meshgrid matrix for the phi coordinate.
 fig (a matplotlib figure instance) – The figure canvas on which the plot will be drawn.
 ax (a matplotlib axis instance) – The axis context in which the plot will be drawn.
 figsize ((width, height)) – The size of the matplotlib figure (in inches) if it is to be created (that is, if no ‘fig’ and ‘ax’ arguments are passed).
Returns: fig, ax – A tuple of the matplotlib figure and axes instances used to produce the figure.
Return type: tuple

orbital
(theta, phi, *args)[source]¶ Calculates an angular wave function on a sphere.
psi = orbital(theta,phi,ket1,ket2,...)
calculates the angular wave function on a sphere at the mesh of points defined by theta and phi which is \(\sum_{lm} c_{lm} Y_{lm}(theta,phi)\) where \(C_{lm}\) are the coefficients specified by the list of kets. Each ket has 2l+1 components for some integer l.Parameters:  theta (list/array) – Polar angles
 phi (list/array) – Azimuthal angles
 args (list/array) –
list
of ket vectors.
Returns: Return type: array
for angular wave function
Quantum Process Tomography¶

qpt
(U, op_basis_list)[source]¶ Calculate the quantum process tomography chi matrix for a given (possibly nonunitary) transformation matrix U, which transforms a density matrix in vector form according to:
vec(rho) = U * vec(rho0)
or
rho = vec2mat(U * mat2vec(rho0))
U can be calculated for an open quantum system using the QuTiP propagator function.
Parameters:  U (Qobj) – Transformation operator. Can be calculated using QuTiP propagator function.
 op_basis_list (list) – A list of Qobj’s representing the basis states.
Returns: chi – QPT chi matrix
Return type: array

qpt_plot
(chi, lbls_list, title=None, fig=None, axes=None)[source]¶ Visualize the quantum process tomography chi matrix. Plot the real and imaginary parts separately.
Parameters:  chi (array) – Input QPT chi matrix.
 lbls_list (list) – List of labels for QPT plot axes.
 title (string) – Plot title.
 fig (figure instance) – User defined figure instance used for generating QPT plot.
 axes (list of figure axis instance) – User defined figure axis instance (list of two axes) used for generating QPT plot.
Returns: fig, ax – A tuple of the matplotlib figure and axes instances used to produce the figure.
Return type: tuple

qpt_plot_combined
(chi, lbls_list, title=None, fig=None, ax=None, figsize=(8, 6), threshold=None)[source]¶ Visualize the quantum process tomography chi matrix. Plot bars with height and color corresponding to the absolute value and phase, respectively.
Parameters:  chi (array) – Input QPT chi matrix.
 lbls_list (list) – List of labels for QPT plot axes.
 title (string) – Plot title.
 fig (figure instance) – User defined figure instance used for generating QPT plot.
 ax (figure axis instance) – User defined figure axis instance used for generating QPT plot (alternative to the fig argument).
 threshold (float (None)) – Threshold for when bars of smaller height should be transparent. If not set, all bars are colored according to the color map.
Returns: fig, ax – A tuple of the matplotlib figure and axes instances used to produce the figure.
Return type: tuple
Quantum Information Processing¶
Gates¶

rx
(phi, N=None, target=0)[source]¶ Singlequbit rotation for operator sigmax with angle phi.
Returns: result – Quantum object for operator describing the rotation. Return type: qobj

ry
(phi, N=None, target=0)[source]¶ Singlequbit rotation for operator sigmay with angle phi.
Returns: result – Quantum object for operator describing the rotation. Return type: qobj

rz
(phi, N=None, target=0)[source]¶ Singlequbit rotation for operator sigmaz with angle phi.
Returns: result – Quantum object for operator describing the rotation. Return type: qobj

sqrtnot
(N=None, target=0)[source]¶ Singlequbit square root NOT gate.
Returns: result – Quantum object for operator describing the square root NOT gate. Return type: qobj

snot
(N=None, target=0)[source]¶ Quantum object representing the SNOT (Hadamard) gate.
Returns: snot_gate – Quantum object representation of SNOT gate. Return type: qobj Examples
>>> snot() Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isHerm = True Qobj data = [[ 0.70710678+0.j 0.70710678+0.j] [ 0.70710678+0.j 0.70710678+0.j]]

phasegate
(theta, N=None, target=0)[source]¶ Returns quantum object representing the phase shift gate.
Parameters: theta (float) – Phase rotation angle. Returns: phase_gate – Quantum object representation of phase shift gate. Return type: qobj Examples
>>> phasegate(pi/4) Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isHerm = False Qobj data = [[ 1.00000000+0.j 0.00000000+0.j ] [ 0.00000000+0.j 0.70710678+0.70710678j]]

cphase
(theta, N=2, control=0, target=1)[source]¶ Returns quantum object representing the controlled phase shift gate.
Parameters:  theta (float) – Phase rotation angle.
 N (integer) – The number of qubits in the target space.
 control (integer) – The index of the control qubit.
 target (integer) – The index of the target qubit.
Returns: U – Quantum object representation of controlled phase gate.
Return type: qobj

cnot
(N=None, control=0, target=1)[source]¶ Quantum object representing the CNOT gate.
Returns: cnot_gate – Quantum object representation of CNOT gate Return type: qobj Examples
>>> cnot() Quantum object: dims = [[2, 2], [2, 2]], shape = [4, 4], type = oper, isHerm = True Qobj data = [[ 1.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 1.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 1.+0.j] [ 0.+0.j 0.+0.j 1.+0.j 0.+0.j]]

csign
(N=None, control=0, target=1)[source]¶ Quantum object representing the CSIGN gate.
Returns: csign_gate – Quantum object representation of CSIGN gate Return type: qobj Examples
>>> csign() Quantum object: dims = [[2, 2], [2, 2]], shape = [4, 4], type = oper, isHerm = True Qobj data = [[ 1.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 1.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 1.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 1.+0.j]]

berkeley
(N=None, targets=[0, 1])[source]¶ Quantum object representing the Berkeley gate.
Returns: berkeley_gate – Quantum object representation of Berkeley gate Return type: qobj Examples
>>> berkeley() Quantum object: dims = [[2, 2], [2, 2]], shape = [4, 4], type = oper, isHerm = True Qobj data = [[ cos(pi/8).+0.j 0.+0.j 0.+0.j 0.+sin(pi/8).j] [ 0.+0.j cos(3pi/8).+0.j 0.+sin(3pi/8).j 0.+0.j] [ 0.+0.j 0.+sin(3pi/8).j cos(3pi/8).+0.j 0.+0.j] [ 0.+sin(pi/8).j 0.+0.j 0.+0.j cos(pi/8).+0.j]]

swapalpha
(alpha, N=None, targets=[0, 1])[source]¶ Quantum object representing the SWAPalpha gate.
Returns: swapalpha_gate – Quantum object representation of SWAPalpha gate Return type: qobj Examples
>>> swapalpha(alpha) Quantum object: dims = [[2, 2], [2, 2]], shape = [4, 4], type = oper, isHerm = True Qobj data = [[ 1.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.5*(1 + exp(j*pi*alpha) 0.5*(1  exp(j*pi*alpha) 0.+0.j] [ 0.+0.j 0.5*(1  exp(j*pi*alpha) 0.5*(1 + exp(j*pi*alpha) 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 1.+0.j]]

swap
(N=None, targets=[0, 1])[source]¶ Quantum object representing the SWAP gate.
Returns: swap_gate – Quantum object representation of SWAP gate Return type: qobj Examples
>>> swap() Quantum object: dims = [[2, 2], [2, 2]], shape = [4, 4], type = oper, isHerm = True Qobj data = [[ 1.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 1.+0.j 0.+0.j] [ 0.+0.j 1.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 1.+0.j]]

iswap
(N=None, targets=[0, 1])[source]¶ Quantum object representing the iSWAP gate.
Returns: iswap_gate – Quantum object representation of iSWAP gate Return type: qobj Examples
>>> iswap() Quantum object: dims = [[2, 2], [2, 2]], shape = [4, 4], type = oper, isHerm = False Qobj data = [[ 1.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+1.j 0.+0.j] [ 0.+0.j 0.+1.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 1.+0.j]]

sqrtswap
(N=None, targets=[0, 1])[source]¶ Quantum object representing the square root SWAP gate.
Returns: sqrtswap_gate – Quantum object representation of square root SWAP gate Return type: qobj

sqrtiswap
(N=None, targets=[0, 1])[source]¶ Quantum object representing the square root iSWAP gate.
Returns: sqrtiswap_gate – Quantum object representation of square root iSWAP gate Return type: qobj Examples
>>> sqrtiswap() Quantum object: dims = [[2, 2], [2, 2]], shape = [4, 4], type = oper, isHerm = False Qobj data = [[ 1.00000000+0.j 0.00000000+0.j 0.00000000+0.j 0.00000000+0.j] [ 0.00000000+0.j 0.70710678+0.j 0.000000000.70710678j 0.00000000+0.j] [ 0.00000000+0.j 0.000000000.70710678j 0.70710678+0.j 0.00000000+0.j] [ 0.00000000+0.j 0.00000000+0.j 0.00000000+0.j 1.00000000+0.j]]

fredkin
(N=None, control=0, targets=[1, 2])[source]¶ Quantum object representing the Fredkin gate.
Returns: fredkin_gate – Quantum object representation of Fredkin gate. Return type: qobj Examples
>>> fredkin() Quantum object: dims = [[2, 2, 2], [2, 2, 2]], shape = [8, 8], type = oper, isHerm = True Qobj data = [[ 1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 0.+0.j 1.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 1.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 1.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 1.+0.j]]

toffoli
(N=None, controls=[0, 1], target=2)[source]¶ Quantum object representing the Toffoli gate.
Returns: toff_gate – Quantum object representation of Toffoli gate. Return type: qobj Examples
>>> toffoli() Quantum object: dims = [[2, 2, 2], [2, 2, 2]], shape = [8, 8], type = oper, isHerm = True Qobj data = [[ 1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 0.+0.j 1.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 1.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 1.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 1.+0.j 0.+0.j]]

rotation
(op, phi, N=None, target=0)[source]¶ Singlequbit rotation for operator op with angle phi.
Returns: result – Quantum object for operator describing the rotation. Return type: qobj

controlled_gate
(U, N=2, control=0, target=1, control_value=1)[source]¶ Create an Nqubit controlled gate from a singlequbit gate U with the given control and target qubits.
Parameters:  U (Qobj) – Arbitrary singlequbit gate.
 N (integer) – The number of qubits in the target space.
 control (integer) – The index of the first control qubit.
 target (integer) – The index of the target qubit.
 control_value (integer (1)) – The state of the control qubit that activates the gate U.
Returns: result – Quantum object representing the controlledU gate.
Return type: qobj

globalphase
(theta, N=1)[source]¶ Returns quantum object representing the global phase shift gate.
Parameters: theta (float) – Phase rotation angle. Returns: phase_gate – Quantum object representation of global phase shift gate. Return type: qobj Examples
>>> phasegate(pi/4) Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isHerm = False Qobj data = [[ 0.70710678+0.70710678j 0.00000000+0.j] [ 0.00000000+0.j 0.70710678+0.70710678j]]

hadamard_transform
(N=1)[source]¶ Quantum object representing the Nqubit Hadamard gate.
Returns: q – Quantum object representation of the Nqubit Hadamard gate. Return type: qobj

gate_sequence_product
(U_list, left_to_right=True)[source]¶ Calculate the overall unitary matrix for a given list of unitary operations
Parameters:  U_list (list) – List of gates implementing the quantum circuit.
 left_to_right (Boolean) – Check if multiplication is to be done from left to right.
Returns: U_overall – Overall unitary matrix of a given quantum circuit.
Return type: qobj

gate_expand_1toN
(U, N, target)[source]¶ Create a Qobj representing a onequbit gate that act on a system with N qubits.
Parameters:  U (Qobj) – The onequbit gate
 N (integer) – The number of qubits in the target space.
 target (integer) – The index of the target qubit.
Returns: gate – Quantum object representation of Nqubit gate.
Return type: qobj

gate_expand_2toN
(U, N, control=None, target=None, targets=None)[source]¶ Create a Qobj representing a twoqubit gate that act on a system with N qubits.
Parameters:  U (Qobj) – The twoqubit gate
 N (integer) – The number of qubits in the target space.
 control (integer) – The index of the control qubit.
 target (integer) – The index of the target qubit.
 targets (list) – List of target qubits.
Returns: gate – Quantum object representation of Nqubit gate.
Return type: qobj

gate_expand_3toN
(U, N, controls=[0, 1], target=2)[source]¶ Create a Qobj representing a threequbit gate that act on a system with N qubits.
Parameters:  U (Qobj) – The threequbit gate
 N (integer) – The number of qubits in the target space.
 controls (list) – The list of the control qubits.
 target (integer) – The index of the target qubit.
Returns: gate – Quantum object representation of Nqubit gate.
Return type: qobj
Qubits¶
Algorithms¶
This module provides the circuit implementation for Quantum Fourier Transform.

qft
(N=1)[source]¶ Quantum Fourier Transform operator on N qubits.
Parameters: N (int) – Number of qubits. Returns: QFT – Quantum Fourier transform operator. Return type: qobj

qft_steps
(N=1, swapping=True)[source]¶ Quantum Fourier Transform operator on N qubits returning the individual steps as unitary matrices operating from left to right.
Parameters:  N (int) – Number of qubits.
 swap (boolean) – Flag indicating sequence of swap gates to be applied at the end or not.
Returns: U_step_list – List of Hadamard and controlled rotation gates implementing QFT.
Return type: list of qobj

qft_gate_sequence
(N=1, swapping=True)[source]¶ Quantum Fourier Transform operator on N qubits returning the gate sequence.
Parameters:  N (int) – Number of qubits.
 swap (boolean) – Flag indicating sequence of swap gates to be applied at the end or not.
Returns: qc – Gate sequence of Hadamard and controlled rotation gates implementing QFT.
Return type: instance of QubitCircuit
nonMarkovian Solvers¶
This module contains an implementation of the nonMarkovian transfer tensor method (TTM), introduced in [1].
[1] Javier Cerrillo and Jianshu Cao, Phys. Rev. Lett 112, 110401 (2014)

ttmsolve
(dynmaps, rho0, times, e_ops=[], learningtimes=None, tensors=None, **kwargs)[source]¶ Solve timeevolution using the Transfer Tensor Method, based on a set of precomputed dynamical maps.
Parameters:  dynmaps (list of
qutip.Qobj
) – List of precomputed dynamical maps (superoperators), or a callback function that returns the superoperator at a given time.  rho0 (
qutip.Qobj
) – Initial density matrix or state vector (ket).  times (array_like) – list of times \(t_n\) at which to compute \(\rho(t_n)\). Must be uniformily spaced.
 e_ops (list of
qutip.Qobj
/ callback function) – single operator or list of operators for which to evaluate expectation values.  learningtimes (array_like) – list of times \(t_k\) for which we have knowledge of the dynamical maps \(E(t_k)\).
 tensors (array_like) – optional list of precomputed tensors \(T_k\)
 kwargs (dictionary) – Optional keyword arguments. See
qutip.nonmarkov.ttm.TTMSolverOptions
.
Returns: output – An instance of the class
qutip.solver.Result
.Return type:  dynmaps (list of
Optimal control¶
Wrapper functions that will manage the creation of the objects, build the configuration, and execute the algorithm required to optimise a set of ctrl pulses for a given (quantum) system. The fidelity error is some measure of distance of the system evolution from the given target evolution in the time allowed for the evolution. The functions minimise this fidelity error wrt the piecewise control amplitudes in the timeslots
There are currently two quantum control pulse optmisations algorithms implemented in this library. There are accessible through the methods in this module. Both the algorithms use the scipy.optimize methods to minimise the fidelity error with respect to to variables that define the pulse.
GRAPE¶
The default algorithm (as it was implemented here first) is GRAPE GRadient Ascent Pulse Engineering [1][2]. It uses a gradient based method such as BFGS to minimise the fidelity error. This makes convergence very quick when an exact gradient can be calculated, but this limits the factors that can taken into account in the fidelity.
CRAB¶
The CRAB [3][4] algorithm was developed at the University of Ulm. In full it is the Chopped RAndom Basis algorithm. The main difference is that it reduces the number of optimisation variables by defining the control pulses by expansions of basis functions, where the variables are the coefficients. Typically a Fourier series is chosen, i.e. the variables are the Fourier coefficients. Therefore it does not need to compute an explicit gradient. By default it uses the NelderMead method for fidelity error minimisation.
References
 N Khaneja et. al. Optimal control of coupled spin dynamics: Design of NMR pulse sequences by gradient ascent algorithms. J. Magn. Reson. 172, 296–305 (2005).
 Shai Machnes et.al DYNAMO  Dynamic Framework for Quantum Optimal Control arXiv.1011.4874
 Doria, P., Calarco, T. & Montangero, S. Optimal Control Technique for ManyBody Quantum Dynamics. Phys. Rev. Lett. 106, 1–4 (2011).
 Caneva, T., Calarco, T. & Montangero, S. Chopped randombasis quantum optimization. Phys. Rev. A  At. Mol. Opt. Phys. 84, (2011).

optimize_pulse
(drift, ctrls, initial, target, num_tslots=None, evo_time=None, tau=None, amp_lbound=None, amp_ubound=None, fid_err_targ=1e10, min_grad=1e10, max_iter=500, max_wall_time=180, alg='GRAPE', alg_params=None, optim_params=None, optim_method='DEF', method_params=None, optim_alg=None, max_metric_corr=None, accuracy_factor=None, dyn_type='GEN_MAT', dyn_params=None, prop_type='DEF', prop_params=None, fid_type='DEF', fid_params=None, phase_option=None, fid_err_scale_factor=None, tslot_type='DEF', tslot_params=None, amp_update_mode=None, init_pulse_type='DEF', init_pulse_params=None, pulse_scaling=1.0, pulse_offset=0.0, ramping_pulse_type=None, ramping_pulse_params=None, log_level=0, out_file_ext=None, gen_stats=False)[source]¶ Optimise a control pulse to minimise the fidelity error. The dynamics of the system in any given timeslot are governed by the combined dynamics generator, i.e. the sum of the drift+ctrl_amp[j]*ctrls[j] The control pulse is an [n_ts, len(ctrls)] array of piecewise amplitudes Starting from an intital (typically random) pulse, a multivariable optimisation algorithm attempts to determines the optimal values for the control pulse to minimise the fidelity error The fidelity error is some measure of distance of the system evolution from the given target evolution in the time allowed for the evolution.
Parameters:  drift (Qobj or list of Qobj) – the underlying dynamics generator of the system can provide list (of length num_tslots) for time dependent drift
 ctrls (List of Qobj) – a list of control dynamics generators. These are scaled by the amplitudes to alter the overall dynamics
 initial (Qobj) – starting point for the evolution. Typically the identity matrix
 target (Qobj) – target transformation, e.g. gate or state, for the time evolution
 num_tslots (integer or None) – number of timeslots. None implies that timeslots will be given in the tau array
 evo_time (float or None) – total time for the evolution None implies that timeslots will be given in the tau array
 tau (array[num_tslots] of floats or None) – durations for the timeslots. if this is given then num_tslots and evo_time are dervived from it None implies that timeslot durations will be equal and calculated as evo_time/num_tslots
 amp_lbound (float or list of floats) – lower boundaries for the control amplitudes Can be a scalar value applied to all controls or a list of bounds for each control
 amp_ubound (float or list of floats) – upper boundaries for the control amplitudes Can be a scalar value applied to all controls or a list of bounds for each control
 fid_err_targ (float) – Fidelity error target. Pulse optimisation will terminate when the fidelity error falls below this value
 mim_grad (float) – Minimum gradient. When the sum of the squares of the gradients wrt to the control amplitudes falls below this value, the optimisation terminates, assuming local minima
 max_iter (integer) – Maximum number of iterations of the optimisation algorithm
 max_wall_time (float) – Maximum allowed elapsed time for the optimisation algorithm
 alg (string) –
Algorithm to use in pulse optimisation. Options are:
‘GRAPE’ (default)  GRadient Ascent Pulse Engineering ‘CRAB’  Chopped RAndom Basis  alg_params (Dictionary) – options that are specific to the algorithm see above
 optim_params (Dictionary) – The key value pairs are the attribute name and value used to set attribute values Note: attributes are created if they do not exist already, and are overwritten if they do. Note: method_params are applied afterwards and so may override these
 optim_method (string) –
a scipy.optimize.minimize method that will be used to optimise the pulse for minimum fidelity error Note that FMIN, FMIN_BFGS & FMIN_L_BFGS_B will all result in calling these specific scipy.optimize methods Note the LBFGSB is equivalent to FMIN_L_BFGS_B for backwards capatibility reasons. Supplying DEF will given alg dependent result:
GRAPE  Default optim_method is FMIN_L_BFGS_B CRAB  Default optim_method is FMIN  method_params (dict) – Parameters for the optim_method. Note that where there is an attribute of the Optimizer object or the termination_conditions matching the key that attribute. Otherwise, and in some case also, they are assumed to be method_options for the scipy.optimize.minimize method.
 optim_alg (string) – Deprecated. Use optim_method.
 max_metric_corr (integer) – Deprecated. Use method_params instead
 accuracy_factor (float) – Deprecated. Use method_params instead
 dyn_type (string) – Dynamics type, i.e. the type of matrix used to describe the dynamics. Options are UNIT, GEN_MAT, SYMPL (see Dynamics classes for details)
 dyn_params (dict) – Parameters for the Dynamics object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 prop_type (string) – Propagator type i.e. the method used to calculate the propagtors and propagtor gradient for each timeslot options are DEF, APPROX, DIAG, FRECHET, AUG_MAT DEF will use the default for the specific dyn_type (see PropagatorComputer classes for details)
 prop_params (dict) – Parameters for the PropagatorComputer object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 fid_type (string) – Fidelity error (and fidelity error gradient) computation method Options are DEF, UNIT, TRACEDIFF, TD_APPROX DEF will use the default for the specific dyn_type (See FidelityComputer classes for details)
 fid_params (dict) – Parameters for the FidelityComputer object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 phase_option (string) – Deprecated. Pass in fid_params instead.
 fid_err_scale_factor (float) – Deprecated. Use scale_factor key in fid_params instead.
 tslot_type (string) – Method for computing the dynamics generators, propagators and evolution in the timeslots. Options: DEF, UPDATE_ALL, DYNAMIC UPDATE_ALL is the only one that currently works (See TimeslotComputer classes for details)
 tslot_params (dict) – Parameters for the TimeslotComputer object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 amp_update_mode (string) – Deprecated. Use tslot_type instead.
 init_pulse_type (string) –
type / shape of pulse(s) used to initialise the the control amplitudes. Options (GRAPE) include:
RND, LIN, ZERO, SINE, SQUARE, TRIANGLE, SAWDEF is RND (see PulseGen classes for details) For the CRAB the this the guess_pulse_type.
 init_pulse_params (dict) – Parameters for the initial / guess pulse generator object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 pulse_scaling (float) – Linear scale factor for generated initial / guess pulses By default initial pulses are generated with amplitudes in the range (1.0, 1.0). These will be scaled by this parameter
 pulse_offset (float) – Linear offset for the pulse. That is this value will be added to any initial / guess pulses generated.
 ramping_pulse_type (string) – Type of pulse used to modulate the control pulse. It’s intended use for a ramping modulation, which is often required in experimental setups. This is only currently implemented in CRAB. GAUSSIAN_EDGE was added for this purpose.
 ramping_pulse_params (dict) – Parameters for the ramping pulse generator object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 log_level (integer) – level of messaging output from the logger. Options are attributes of qutip.logging_utils, in decreasing levels of messaging, are: DEBUG_INTENSE, DEBUG_VERBOSE, DEBUG, INFO, WARN, ERROR, CRITICAL Anything WARN or above is effectively ‘quiet’ execution, assuming everything runs as expected. The default NOTSET implies that the level will be taken from the QuTiP settings file, which by default is WARN
 out_file_ext (string or None) – files containing the initial and final control pulse amplitudes are saved to the current directory. The default name will be postfixed with this extension Setting this to None will suppress the output of files
 gen_stats (boolean) – if set to True then statistics for the optimisation run will be generated  accessible through attributes of the stats object
Returns: opt – Returns instance of OptimResult, which has attributes giving the reason for termination, final fidelity error, final evolution final amplitudes, statistics etc
Return type:

optimize_pulse_unitary
(H_d, H_c, U_0, U_targ, num_tslots=None, evo_time=None, tau=None, amp_lbound=None, amp_ubound=None, fid_err_targ=1e10, min_grad=1e10, max_iter=500, max_wall_time=180, alg='GRAPE', alg_params=None, optim_params=None, optim_method='DEF', method_params=None, optim_alg=None, max_metric_corr=None, accuracy_factor=None, phase_option='PSU', dyn_params=None, prop_params=None, fid_params=None, tslot_type='DEF', tslot_params=None, amp_update_mode=None, init_pulse_type='DEF', init_pulse_params=None, pulse_scaling=1.0, pulse_offset=0.0, ramping_pulse_type=None, ramping_pulse_params=None, log_level=0, out_file_ext=None, gen_stats=False)[source]¶ Optimise a control pulse to minimise the fidelity error, assuming that the dynamics of the system are generated by unitary operators. This function is simply a wrapper for optimize_pulse, where the appropriate options for unitary dynamics are chosen and the parameter names are in the format familiar to unitary dynamics The dynamics of the system in any given timeslot are governed by the combined Hamiltonian, i.e. the sum of the H_d + ctrl_amp[j]*H_c[j] The control pulse is an [n_ts, len(ctrls)] array of piecewise amplitudes Starting from an intital (typically random) pulse, a multivariable optimisation algorithm attempts to determines the optimal values for the control pulse to minimise the fidelity error The maximum fidelity for a unitary system is 1, i.e. when the time evolution resulting from the pulse is equivalent to the target. And therefore the fidelity error is 1  fidelity
Parameters:  H_d (Qobj or list of Qobj) – Drift (aka system) the underlying Hamiltonian of the system can provide list (of length num_tslots) for time dependent drift
 H_c (Qobj) – a list of control Hamiltonians. These are scaled by the amplitudes to alter the overall dynamics
 U_0 (Qobj) – starting point for the evolution. Typically the identity matrix
 U_targ (Qobj) – target transformation, e.g. gate or state, for the time evolution
 num_tslots (integer or None) – number of timeslots. None implies that timeslots will be given in the tau array
 evo_time (float or None) – total time for the evolution None implies that timeslots will be given in the tau array
 tau (array[num_tslots] of floats or None) – durations for the timeslots. if this is given then num_tslots and evo_time are dervived from it None implies that timeslot durations will be equal and calculated as evo_time/num_tslots
 amp_lbound (float or list of floats) – lower boundaries for the control amplitudes Can be a scalar value applied to all controls or a list of bounds for each control
 amp_ubound (float or list of floats) – upper boundaries for the control amplitudes Can be a scalar value applied to all controls or a list of bounds for each control
 fid_err_targ (float) – Fidelity error target. Pulse optimisation will terminate when the fidelity error falls below this value
 mim_grad (float) – Minimum gradient. When the sum of the squares of the gradients wrt to the control amplitudes falls below this value, the optimisation terminates, assuming local minima
 max_iter (integer) – Maximum number of iterations of the optimisation algorithm
 max_wall_time (float) – Maximum allowed elapsed time for the optimisation algorithm
 alg (string) –
Algorithm to use in pulse optimisation. Options are:
‘GRAPE’ (default)  GRadient Ascent Pulse Engineering ‘CRAB’  Chopped RAndom Basis  alg_params (Dictionary) – options that are specific to the algorithm see above
 optim_params (Dictionary) – The key value pairs are the attribute name and value used to set attribute values Note: attributes are created if they do not exist already, and are overwritten if they do. Note: method_params are applied afterwards and so may override these
 optim_method (string) –
a scipy.optimize.minimize method that will be used to optimise the pulse for minimum fidelity error Note that FMIN, FMIN_BFGS & FMIN_L_BFGS_B will all result in calling these specific scipy.optimize methods Note the LBFGSB is equivalent to FMIN_L_BFGS_B for backwards capatibility reasons. Supplying DEF will given alg dependent result:
GRAPE  Default optim_method is FMIN_L_BFGS_B CRAB  Default optim_method is FMIN  method_params (dict) – Parameters for the optim_method. Note that where there is an attribute of the Optimizer object or the termination_conditions matching the key that attribute. Otherwise, and in some case also, they are assumed to be method_options for the scipy.optimize.minimize method.
 optim_alg (string) – Deprecated. Use optim_method.
 max_metric_corr (integer) – Deprecated. Use method_params instead
 accuracy_factor (float) – Deprecated. Use method_params instead
 phase_option (string) –
determines how global phase is treated in fidelity calculations (fid_type=’UNIT’ only). Options:
PSU  global phase ignored SU  global phase included  dyn_params (dict) – Parameters for the Dynamics object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 prop_params (dict) – Parameters for the PropagatorComputer object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 fid_params (dict) – Parameters for the FidelityComputer object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 tslot_type (string) – Method for computing the dynamics generators, propagators and evolution in the timeslots. Options: DEF, UPDATE_ALL, DYNAMIC UPDATE_ALL is the only one that currently works (See TimeslotComputer classes for details)
 tslot_params (dict) – Parameters for the TimeslotComputer object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 amp_update_mode (string) – Deprecated. Use tslot_type instead.
 init_pulse_type (string) –
type / shape of pulse(s) used to initialise the the control amplitudes. Options (GRAPE) include:
RND, LIN, ZERO, SINE, SQUARE, TRIANGLE, SAW DEF is RND(see PulseGen classes for details) For the CRAB the this the guess_pulse_type.
 init_pulse_params (dict) – Parameters for the initial / guess pulse generator object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 pulse_scaling (float) – Linear scale factor for generated initial / guess pulses By default initial pulses are generated with amplitudes in the range (1.0, 1.0). These will be scaled by this parameter
 pulse_offset (float) – Linear offset for the pulse. That is this value will be added to any initial / guess pulses generated.
 ramping_pulse_type (string) – Type of pulse used to modulate the control pulse. It’s intended use for a ramping modulation, which is often required in experimental setups. This is only currently implemented in CRAB. GAUSSIAN_EDGE was added for this purpose.
 ramping_pulse_params (dict) – Parameters for the ramping pulse generator object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 log_level (integer) – level of messaging output from the logger. Options are attributes of qutip.logging_utils, in decreasing levels of messaging, are: DEBUG_INTENSE, DEBUG_VERBOSE, DEBUG, INFO, WARN, ERROR, CRITICAL Anything WARN or above is effectively ‘quiet’ execution, assuming everything runs as expected. The default NOTSET implies that the level will be taken from the QuTiP settings file, which by default is WARN
 out_file_ext (string or None) – files containing the initial and final control pulse amplitudes are saved to the current directory. The default name will be postfixed with this extension Setting this to None will suppress the output of files
 gen_stats (boolean) – if set to True then statistics for the optimisation run will be generated  accessible through attributes of the stats object
Returns: opt – Returns instance of OptimResult, which has attributes giving the reason for termination, final fidelity error, final evolution final amplitudes, statistics etc
Return type:

create_pulse_optimizer
(drift, ctrls, initial, target, num_tslots=None, evo_time=None, tau=None, amp_lbound=None, amp_ubound=None, fid_err_targ=1e10, min_grad=1e10, max_iter=500, max_wall_time=180, alg='GRAPE', alg_params=None, optim_params=None, optim_method='DEF', method_params=None, optim_alg=None, max_metric_corr=None, accuracy_factor=None, dyn_type='GEN_MAT', dyn_params=None, prop_type='DEF', prop_params=None, fid_type='DEF', fid_params=None, phase_option=None, fid_err_scale_factor=None, tslot_type='DEF', tslot_params=None, amp_update_mode=None, init_pulse_type='DEF', init_pulse_params=None, pulse_scaling=1.0, pulse_offset=0.0, ramping_pulse_type=None, ramping_pulse_params=None, log_level=0, gen_stats=False)[source]¶ Generate the objects of the appropriate subclasses required for the pulse optmisation based on the parameters given Note this method may be preferable to calling optimize_pulse if more detailed configuration is required before running the optmisation algorthim, or the algorithm will be run many times, for instances when trying to finding global the optimum or minimum time optimisation
Parameters:  drift (Qobj or list of Qobj) – the underlying dynamics generator of the system can provide list (of length num_tslots) for time dependent drift
 ctrls (List of Qobj) – a list of control dynamics generators. These are scaled by the amplitudes to alter the overall dynamics
 initial (Qobj) – starting point for the evolution. Typically the identity matrix
 target (Qobj) – target transformation, e.g. gate or state, for the time evolution
 num_tslots (integer or None) – number of timeslots. None implies that timeslots will be given in the tau array
 evo_time (float or None) – total time for the evolution None implies that timeslots will be given in the tau array
 tau (array[num_tslots] of floats or None) – durations for the timeslots. if this is given then num_tslots and evo_time are dervived from it None implies that timeslot durations will be equal and calculated as evo_time/num_tslots
 amp_lbound (float or list of floats) – lower boundaries for the control amplitudes Can be a scalar value applied to all controls or a list of bounds for each control
 amp_ubound (float or list of floats) – upper boundaries for the control amplitudes Can be a scalar value applied to all controls or a list of bounds for each control
 fid_err_targ (float) – Fidelity error target. Pulse optimisation will terminate when the fidelity error falls below this value
 mim_grad (float) – Minimum gradient. When the sum of the squares of the gradients wrt to the control amplitudes falls below this value, the optimisation terminates, assuming local minima
 max_iter (integer) – Maximum number of iterations of the optimisation algorithm
 max_wall_time (float) – Maximum allowed elapsed time for the optimisation algorithm
 alg (string) –
Algorithm to use in pulse optimisation. Options are:
‘GRAPE’ (default)  GRadient Ascent Pulse Engineering ‘CRAB’  Chopped RAndom Basis  alg_params (Dictionary) – options that are specific to the algorithm see above
 optim_params (Dictionary) – The key value pairs are the attribute name and value used to set attribute values Note: attributes are created if they do not exist already, and are overwritten if they do. Note: method_params are applied afterwards and so may override these
 optim_method (string) –
a scipy.optimize.minimize method that will be used to optimise the pulse for minimum fidelity error Note that FMIN, FMIN_BFGS & FMIN_L_BFGS_B will all result in calling these specific scipy.optimize methods Note the LBFGSB is equivalent to FMIN_L_BFGS_B for backwards capatibility reasons. Supplying DEF will given alg dependent result:
 GRAPE  Default optim_method is FMIN_L_BFGS_B
 CRAB  Default optim_method is NelderMead
 method_params (dict) – Parameters for the optim_method. Note that where there is an attribute of the Optimizer object or the termination_conditions matching the key that attribute. Otherwise, and in some case also, they are assumed to be method_options for the scipy.optimize.minimize method.
 optim_alg (string) – Deprecated. Use optim_method.
 max_metric_corr (integer) – Deprecated. Use method_params instead
 accuracy_factor (float) – Deprecated. Use method_params instead
 dyn_type (string) – Dynamics type, i.e. the type of matrix used to describe the dynamics. Options are UNIT, GEN_MAT, SYMPL (see Dynamics classes for details)
 dyn_params (dict) – Parameters for the Dynamics object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 prop_type (string) – Propagator type i.e. the method used to calculate the propagtors and propagtor gradient for each timeslot options are DEF, APPROX, DIAG, FRECHET, AUG_MAT DEF will use the default for the specific dyn_type (see PropagatorComputer classes for details)
 prop_params (dict) – Parameters for the PropagatorComputer object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 fid_type (string) – Fidelity error (and fidelity error gradient) computation method Options are DEF, UNIT, TRACEDIFF, TD_APPROX DEF will use the default for the specific dyn_type (See FidelityComputer classes for details)
 fid_params (dict) – Parameters for the FidelityComputer object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 phase_option (string) – Deprecated. Pass in fid_params instead.
 fid_err_scale_factor (float) – Deprecated. Use scale_factor key in fid_params instead.
 tslot_type (string) – Method for computing the dynamics generators, propagators and evolution in the timeslots. Options: DEF, UPDATE_ALL, DYNAMIC UPDATE_ALL is the only one that currently works (See TimeslotComputer classes for details)
 tslot_params (dict) – Parameters for the TimeslotComputer object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 amp_update_mode (string) – Deprecated. Use tslot_type instead.
 init_pulse_type (string) –
type / shape of pulse(s) used to initialise the the control amplitudes. Options (GRAPE) include:
RND, LIN, ZERO, SINE, SQUARE, TRIANGLE, SAW DEF is RND(see PulseGen classes for details) For the CRAB the this the guess_pulse_type.
 init_pulse_params (dict) – Parameters for the initial / guess pulse generator object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 pulse_scaling (float) – Linear scale factor for generated initial / guess pulses By default initial pulses are generated with amplitudes in the range (1.0, 1.0). These will be scaled by this parameter
 pulse_offset (float) – Linear offset for the pulse. That is this value will be added to any initial / guess pulses generated.
 ramping_pulse_type (string) – Type of pulse used to modulate the control pulse. It’s intended use for a ramping modulation, which is often required in experimental setups. This is only currently implemented in CRAB. GAUSSIAN_EDGE was added for this purpose.
 ramping_pulse_params (dict) – Parameters for the ramping pulse generator object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 log_level (integer) – level of messaging output from the logger. Options are attributes of qutip.logging_utils, in decreasing levels of messaging, are: DEBUG_INTENSE, DEBUG_VERBOSE, DEBUG, INFO, WARN, ERROR, CRITICAL Anything WARN or above is effectively ‘quiet’ execution, assuming everything runs as expected. The default NOTSET implies that the level will be taken from the QuTiP settings file, which by default is WARN
 gen_stats (boolean) – if set to True then statistics for the optimisation run will be generated  accessible through attributes of the stats object
Returns: opt – Instance of an Optimizer, through which the Config, Dynamics, PulseGen, and TerminationConditions objects can be accessed as attributes. The PropagatorComputer, FidelityComputer and TimeslotComputer objects can be accessed as attributes of the Dynamics object, e.g. optimizer.dynamics.fid_computer The optimisation can be run through the optimizer.run_optimization
Return type:

opt_pulse_crab
(drift, ctrls, initial, target, num_tslots=None, evo_time=None, tau=None, amp_lbound=None, amp_ubound=None, fid_err_targ=1e05, max_iter=500, max_wall_time=180, alg_params=None, num_coeffs=None, init_coeff_scaling=1.0, optim_params=None, optim_method='fmin', method_params=None, dyn_type='GEN_MAT', dyn_params=None, prop_type='DEF', prop_params=None, fid_type='DEF', fid_params=None, tslot_type='DEF', tslot_params=None, guess_pulse_type=None, guess_pulse_params=None, guess_pulse_scaling=1.0, guess_pulse_offset=0.0, guess_pulse_action='MODULATE', ramping_pulse_type=None, ramping_pulse_params=None, log_level=0, out_file_ext=None, gen_stats=False)[source]¶ Optimise a control pulse to minimise the fidelity error. The dynamics of the system in any given timeslot are governed by the combined dynamics generator, i.e. the sum of the drift+ctrl_amp[j]*ctrls[j] The control pulse is an [n_ts, len(ctrls)] array of piecewise amplitudes. The CRAB algorithm uses basis function coefficents as the variables to optimise. It does NOT use any gradient function. A multivariable optimisation algorithm attempts to determines the optimal values for the control pulse to minimise the fidelity error The fidelity error is some measure of distance of the system evolution from the given target evolution in the time allowed for the evolution.
Parameters:  drift (Qobj or list of Qobj) – the underlying dynamics generator of the system can provide list (of length num_tslots) for time dependent drift
 ctrls (List of Qobj) – a list of control dynamics generators. These are scaled by the amplitudes to alter the overall dynamics
 initial (Qobj) – starting point for the evolution. Typically the identity matrix
 target (Qobj) – target transformation, e.g. gate or state, for the time evolution
 num_tslots (integer or None) – number of timeslots. None implies that timeslots will be given in the tau array
 evo_time (float or None) – total time for the evolution None implies that timeslots will be given in the tau array
 tau (array[num_tslots] of floats or None) – durations for the timeslots. if this is given then num_tslots and evo_time are dervived from it None implies that timeslot durations will be equal and calculated as evo_time/num_tslots
 amp_lbound (float or list of floats) – lower boundaries for the control amplitudes Can be a scalar value applied to all controls or a list of bounds for each control
 amp_ubound (float or list of floats) – upper boundaries for the control amplitudes Can be a scalar value applied to all controls or a list of bounds for each control
 fid_err_targ (float) – Fidelity error target. Pulse optimisation will terminate when the fidelity error falls below this value
 max_iter (integer) – Maximum number of iterations of the optimisation algorithm
 max_wall_time (float) – Maximum allowed elapsed time for the optimisation algorithm
 alg_params (Dictionary) – options that are specific to the algorithm see above
 optim_params (Dictionary) – The key value pairs are the attribute name and value used to set attribute values Note: attributes are created if they do not exist already, and are overwritten if they do. Note: method_params are applied afterwards and so may override these
 coeff_scaling (float) – Linear scale factor for the random basis coefficients By default these range from 1.0 to 1.0 Note this is overridden by alg_params (if given there)
 num_coeffs (integer) – Number of coefficients used for each basis function Note this is calculated automatically based on the dimension of the dynamics if not given. It is crucial to the performane of the algorithm that it is set as low as possible, while still giving high enough frequencies. Note this is overridden by alg_params (if given there)
 optim_method (string) – Multivariable optimisation method The only tested options are ‘fmin’ and ‘Neldermead’ In theory any nongradient method implemented in scipy.optimize.mininize could be used.
 method_params (dict) –
Parameters for the optim_method. Note that where there is an attribute of the Optimizer object or the termination_conditions matching the key that attribute. Otherwise, and in some case also, they are assumed to be method_options for the scipy.optimize.minimize method. The commonly used parameter are:
xtol  limit on variable change for convergence ftol  limit on fidelity error change for convergence  dyn_type (string) – Dynamics type, i.e. the type of matrix used to describe the dynamics. Options are UNIT, GEN_MAT, SYMPL (see Dynamics classes for details)
 dyn_params (dict) – Parameters for the Dynamics object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 prop_type (string) – Propagator type i.e. the method used to calculate the propagtors and propagtor gradient for each timeslot options are DEF, APPROX, DIAG, FRECHET, AUG_MAT DEF will use the default for the specific dyn_type (see PropagatorComputer classes for details)
 prop_params (dict) – Parameters for the PropagatorComputer object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 fid_type (string) – Fidelity error (and fidelity error gradient) computation method Options are DEF, UNIT, TRACEDIFF, TD_APPROX DEF will use the default for the specific dyn_type (See FidelityComputer classes for details)
 fid_params (dict) – Parameters for the FidelityComputer object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 tslot_type (string) – Method for computing the dynamics generators, propagators and evolution in the timeslots. Options: DEF, UPDATE_ALL, DYNAMIC UPDATE_ALL is the only one that currently works (See TimeslotComputer classes for details)
 tslot_params (dict) – Parameters for the TimeslotComputer object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 guess_pulse_type (string) –
type / shape of pulse(s) used modulate the control amplitudes. Options include:
RND, LIN, ZERO, SINE, SQUARE, TRIANGLE, SAW, GAUSSIANDefault is None
 guess_pulse_params (dict) – Parameters for the guess pulse generator object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 guess_pulse_action (string) – Determines how the guess pulse is applied to the pulse generated by the basis expansion. Options are: MODULATE, ADD Default is MODULATE
 pulse_scaling (float) – Linear scale factor for generated guess pulses By default initial pulses are generated with amplitudes in the range (1.0, 1.0). These will be scaled by this parameter
 pulse_offset (float) – Linear offset for the pulse. That is this value will be added to any guess pulses generated.
 ramping_pulse_type (string) – Type of pulse used to modulate the control pulse. It’s intended use for a ramping modulation, which is often required in experimental setups. This is only currently implemented in CRAB. GAUSSIAN_EDGE was added for this purpose.
 ramping_pulse_params (dict) – Parameters for the ramping pulse generator object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 log_level (integer) – level of messaging output from the logger. Options are attributes of qutip.logging_utils, in decreasing levels of messaging, are: DEBUG_INTENSE, DEBUG_VERBOSE, DEBUG, INFO, WARN, ERROR, CRITICAL Anything WARN or above is effectively ‘quiet’ execution, assuming everything runs as expected. The default NOTSET implies that the level will be taken from the QuTiP settings file, which by default is WARN
 out_file_ext (string or None) – files containing the initial and final control pulse amplitudes are saved to the current directory. The default name will be postfixed with this extension Setting this to None will suppress the output of files
 gen_stats (boolean) – if set to True then statistics for the optimisation run will be generated  accessible through attributes of the stats object
Returns: opt – Returns instance of OptimResult, which has attributes giving the reason for termination, final fidelity error, final evolution final amplitudes, statistics etc
Return type:

opt_pulse_crab_unitary
(H_d, H_c, U_0, U_targ, num_tslots=None, evo_time=None, tau=None, amp_lbound=None, amp_ubound=None, fid_err_targ=1e05, max_iter=500, max_wall_time=180, alg_params=None, num_coeffs=None, init_coeff_scaling=1.0, optim_params=None, optim_method='fmin', method_params=None, phase_option='PSU', dyn_params=None, prop_params=None, fid_params=None, tslot_type='DEF', tslot_params=None, guess_pulse_type=None, guess_pulse_params=None, guess_pulse_scaling=1.0, guess_pulse_offset=0.0, guess_pulse_action='MODULATE', ramping_pulse_type=None, ramping_pulse_params=None, log_level=0, out_file_ext=None, gen_stats=False)[source]¶ Optimise a control pulse to minimise the fidelity error, assuming that the dynamics of the system are generated by unitary operators. This function is simply a wrapper for optimize_pulse, where the appropriate options for unitary dynamics are chosen and the parameter names are in the format familiar to unitary dynamics The dynamics of the system in any given timeslot are governed by the combined Hamiltonian, i.e. the sum of the H_d + ctrl_amp[j]*H_c[j] The control pulse is an [n_ts, len(ctrls)] array of piecewise amplitudes
The CRAB algorithm uses basis function coefficents as the variables to optimise. It does NOT use any gradient function. A multivariable optimisation algorithm attempts to determines the optimal values for the control pulse to minimise the fidelity error The fidelity error is some measure of distance of the system evolution from the given target evolution in the time allowed for the evolution.
Parameters:  H_d (Qobj or list of Qobj) – Drift (aka system) the underlying Hamiltonian of the system can provide list (of length num_tslots) for time dependent drift
 H_c (Qobj) – a list of control Hamiltonians. These are scaled by the amplitudes to alter the overall dynamics
 U_0 (Qobj) – starting point for the evolution. Typically the identity matrix
 U_targ (Qobj) – target transformation, e.g. gate or state, for the time evolution
 num_tslots (integer or None) – number of timeslots. None implies that timeslots will be given in the tau array
 evo_time (float or None) – total time for the evolution None implies that timeslots will be given in the tau array
 tau (array[num_tslots] of floats or None) – durations for the timeslots. if this is given then num_tslots and evo_time are dervived from it None implies that timeslot durations will be equal and calculated as evo_time/num_tslots
 amp_lbound (float or list of floats) – lower boundaries for the control amplitudes Can be a scalar value applied to all controls or a list of bounds for each control
 amp_ubound (float or list of floats) – upper boundaries for the control amplitudes Can be a scalar value applied to all controls or a list of bounds for each control
 fid_err_targ (float) – Fidelity error target. Pulse optimisation will terminate when the fidelity error falls below this value
 max_iter (integer) – Maximum number of iterations of the optimisation algorithm
 max_wall_time (float) – Maximum allowed elapsed time for the optimisation algorithm
 alg_params (Dictionary) – options that are specific to the algorithm see above
 optim_params (Dictionary) – The key value pairs are the attribute name and value used to set attribute values Note: attributes are created if they do not exist already, and are overwritten if they do. Note: method_params are applied afterwards and so may override these
 coeff_scaling (float) – Linear scale factor for the random basis coefficients By default these range from 1.0 to 1.0 Note this is overridden by alg_params (if given there)
 num_coeffs (integer) – Number of coefficients used for each basis function Note this is calculated automatically based on the dimension of the dynamics if not given. It is crucial to the performane of the algorithm that it is set as low as possible, while still giving high enough frequencies. Note this is overridden by alg_params (if given there)
 optim_method (string) – Multivariable optimisation method The only tested options are ‘fmin’ and ‘Neldermead’ In theory any nongradient method implemented in scipy.optimize.mininize could be used.
 method_params (dict) –
Parameters for the optim_method. Note that where there is an attribute of the Optimizer object or the termination_conditions matching the key that attribute. Otherwise, and in some case also, they are assumed to be method_options for the scipy.optimize.minimize method. The commonly used parameter are:
xtol  limit on variable change for convergence ftol  limit on fidelity error change for convergence  phase_option (string) –
determines how global phase is treated in fidelity calculations (fid_type=’UNIT’ only). Options:
PSU  global phase ignored SU  global phase included  dyn_params (dict) – Parameters for the Dynamics object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 prop_params (dict) – Parameters for the PropagatorComputer object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 fid_params (dict) – Parameters for the FidelityComputer object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 tslot_type (string) – Method for computing the dynamics generators, propagators and evolution in the timeslots. Options: DEF, UPDATE_ALL, DYNAMIC UPDATE_ALL is the only one that currently works (See TimeslotComputer classes for details)
 tslot_params (dict) – Parameters for the TimeslotComputer object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 guess_pulse_type (string) –
type / shape of pulse(s) used modulate the control amplitudes. Options include:
RND, LIN, ZERO, SINE, SQUARE, TRIANGLE, SAW, GAUSSIANDefault is None
 guess_pulse_params (dict) – Parameters for the guess pulse generator object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 guess_pulse_action (string) – Determines how the guess pulse is applied to the pulse generated by the basis expansion. Options are: MODULATE, ADD Default is MODULATE
 pulse_scaling (float) – Linear scale factor for generated guess pulses By default initial pulses are generated with amplitudes in the range (1.0, 1.0). These will be scaled by this parameter
 pulse_offset (float) – Linear offset for the pulse. That is this value will be added to any guess pulses generated.
 ramping_pulse_type (string) – Type of pulse used to modulate the control pulse. It’s intended use for a ramping modulation, which is often required in experimental setups. This is only currently implemented in CRAB. GAUSSIAN_EDGE was added for this purpose.
 ramping_pulse_params (dict) – Parameters for the ramping pulse generator object The key value pairs are assumed to be attribute name value pairs They applied after the object is created
 log_level (integer) – level of messaging output from the logger. Options are attributes of qutip.logging_utils, in decreasing levels of messaging, are: DEBUG_INTENSE, DEBUG_VERBOSE, DEBUG, INFO, WARN, ERROR, CRITICAL Anything WARN or above is effectively ‘quiet’ execution, assuming everything runs as expected. The default NOTSET implies that the level will be taken from the QuTiP settings file, which by default is WARN
 out_file_ext (string or None) – files containing the initial and final control pulse amplitudes are saved to the current directory. The default name will be postfixed with this extension Setting this to None will suppress the output of files
 gen_stats (boolean) – if set to True then statistics for the optimisation run will be generated  accessible through attributes of the stats object
Returns: opt – Returns instance of OptimResult, which has attributes giving the reason for termination, final fidelity error, final evolution final amplitudes, statistics etc
Return type:
Pulse generator  Generate pulses for the timeslots Each class defines a gen_pulse function that produces a float array of size num_tslots. Each class produces a differ type of pulse. See the class and gen_pulse function descriptions for details

create_pulse_gen
(pulse_type='RND', dyn=None, pulse_params=None)[source]¶ Create and return a pulse generator object matching the given type. The pulse generators each produce a different type of pulse, see the gen_pulse function description for details. These are the random pulse options:
RND  Independent random value in each timeslot RNDFOURIER  Fourier series with random coefficients RNDWAVES  Summation of random waves RNDWALK1  Random change in amplitude each timeslot RNDWALK2  Random change in amp gradient each timeslotThese are the other nonperiodic options:
LIN  Linear, i.e. contant gradient over the time ZERO  special case of the LIN pulse, where the gradient is 0These are the periodic options
SINE  Sine wave SQUARE  Square wave SAW  Saw tooth wave TRIANGLE  Triangular waveIf a Dynamics object is passed in then this is used in instantiate the PulseGen, meaning that some timeslot and amplitude properties are copied over.
Utilitiy Functions¶
Graph Theory Routines¶
This module contains a collection of graph theory routines used mainly to reorder matrices for iterative steady state solvers.

breadth_first_search
(A, start)[source]¶ BreadthFirstSearch (BFS) of a graph in CSR or CSC matrix format starting from a given node (row). Takes Qobjs and CSR or CSC matrices as inputs.
This function requires a matrix with symmetric structure. Use A+trans(A) if original matrix is not symmetric or not sure.
Parameters:  A (csc_matrix, csr_matrix) – Input graph in CSC or CSR matrix format
 start (int) – Staring node for BFS traversal.
Returns:  order (array) – Order in which nodes are traversed from starting node.
 levels (array) – Level of the nodes in the order that they are traversed.

graph_degree
(A)[source]¶ Returns the degree for the nodes (rows) of a symmetric graph in sparse CSR or CSC format, or a qobj.
Parameters: A (qobj, csr_matrix, csc_matrix) – Input quantum object or csr_matrix. Returns: degree – Array of integers giving the degree for each node (row). Return type: array

reverse_cuthill_mckee
(A, sym=False)[source]¶ Returns the permutation array that orders a sparse CSR or CSC matrix in ReverseCuthill McKee ordering. Since the input matrix must be symmetric, this routine works on the matrix A+Trans(A) if the sym flag is set to False (Default).
It is assumed by default (sym=False) that the input matrix is not symmetric. This is because it is faster to do A+Trans(A) than it is to check for symmetry for a generic matrix. If you are guaranteed that the matrix is symmetric in structure (values of matrix element do not matter) then set sym=True
Parameters:  A (csc_matrix, csr_matrix) – Input sparse CSC or CSR sparse matrix format.
 sym (bool {False, True}) – Flag to set whether input matrix is symmetric.
Returns: perm – Array of permuted row and column indices.
Return type: array
Notes
This routine is used primarily for internal reordering of Lindblad superoperators for use in iterative solver routines.
References
E. Cuthill and J. McKee, “Reducing the Bandwidth of Sparse Symmetric Matrices”, ACM ‘69 Proceedings of the 1969 24th national conference, (1969).

maximum_bipartite_matching
(A, perm_type='row')[source]¶ Returns an array of row or column permutations that removes nonzero elements from the diagonal of a nonsingular square CSC sparse matrix. Such a permutation is always possible provided that the matrix is nonsingular. This function looks at the structure of the matrix only.
The input matrix will be converted to CSC matrix format if necessary.
Parameters:  A (sparse matrix) – Input matrix
 perm_type (str {'row', 'column'}) – Type of permutation to generate.
Returns: perm – Array of row or column permutations.
Return type: array
Notes
This function relies on a maximum cardinality bipartite matching algorithm based on a breadthfirst search (BFS) of the underlying graph[1]_.
References
I. S. Duff, K. Kaya, and B. Ucar, “Design, Implementation, and Analysis of Maximum Transversal Algorithms”, ACM Trans. Math. Softw. 38, no. 2, (2011).

weighted_bipartite_matching
(A, perm_type='row')[source]¶ Returns an array of row permutations that attempts to maximize the product of the ABS values of the diagonal elements in a nonsingular square CSC sparse matrix. Such a permutation is always possible provided that the matrix is nonsingular.
This function looks at both the structure and ABS values of the underlying matrix.
Parameters:  A (csc_matrix) – Input matrix
 perm_type (str {'row', 'column'}) – Type of permutation to generate.
Returns: perm – Array of row or column permutations.
Return type: array
Notes
This function uses a weighted maximum cardinality bipartite matching algorithm based on breadthfirst search (BFS). The columns are weighted according to the element of max ABS value in the associated rows and are traversed in descending order by weight. When performing the BFS traversal, the row associated to a given column is the one with maximum weight. Unlike other techniques[1]_, this algorithm does not guarantee the product of the diagonal is maximized. However, this limitation is offset by the substantially faster runtime of this method.
References
I. S. Duff and J. Koster, “The design and use of algorithms for permuting large entries to the diagonal of sparse matrices”, SIAM J. Matrix Anal. and Applics. 20, no. 4, 889 (1997).
Utility Functions¶
This module contains utility functions that are commonly needed in other qutip modules.

n_thermal
(w, w_th)[source]¶ Return the number of photons in thermal equilibrium for an harmonic oscillator mode with frequency ‘w’, at the temperature described by ‘w_th’ where \(\omega_{\rm th} = k_BT/\hbar\).
Parameters:  w (float or array) – Frequency of the oscillator.
 w_th (float) – The temperature in units of frequency (or the same units as w).
Returns: n_avg – Return the number of average photons in thermal equilibrium for a an oscillator with the given frequency and temperature.
Return type: float or array

linspace_with
(start, stop, num=50, elems=[])[source]¶ Return an array of numbers sampled over specified interval with additional elements added.
Returns num spaced array with elements from elems inserted if not already included in set.
Returned sample array is not evenly spaced if addtional elements are added.
Parameters:  start (int) – The starting value of the sequence.
 stop (int) – The stoping values of the sequence.
 num (int, optional) – Number of samples to generate.
 elems (list/ndarray, optional) – Requested elements to include in array
Returns: samples – Original equally spaced sample array with additional elements added.
Return type: ndadrray

clebsch
(j1, j2, j3, m1, m2, m3)[source]¶ Calculates the ClebschGordon coefficient for coupling (j1,m1) and (j2,m2) to give (j3,m3).
Parameters:  j1 (float) – Total angular momentum 1.
 j2 (float) – Total angular momentum 2.
 j3 (float) – Total angular momentum 3.
 m1 (float) – zcomponent of angular momentum 1.
 m2 (float) – zcomponent of angular momentum 2.
 m3 (float) – zcomponent of angular momentum 3.
Returns: cg_coeff – Requested ClebschGordan coefficient.
Return type: float

convert_unit
(value, orig='meV', to='GHz')[source]¶ Convert an energy from unit orig to unit to.
Parameters:  value (float / array) – The energy in the old unit.
 orig (string) – The name of the original unit (“J”, “eV”, “meV”, “GHz”, “mK”)
 to (string) – The name of the new unit (“J”, “eV”, “meV”, “GHz”, “mK”)
Returns: value_new_unit – The energy in the new unit.
Return type: float / array
File I/O Functions¶

file_data_read
(filename, sep=None)[source]¶ Retrieves an array of data from the requested file.
Parameters:  filename (str) – Name of file containing reqested data.
 sep (str) – Seperator used to store data.
Returns: data – Data from selected file.
Return type: array_like

file_data_store
(filename, data, numtype='complex', numformat='decimal', sep=', ')[source]¶ Stores a matrix of data to a file to be read by an external program.
Parameters:  filename (str) – Name of data file to be stored, including extension.
 data (array_like) – Data to be written to file.
 numtype (str {'complex, 'real'}) – Type of numerical data.
 numformat (str {'decimal','exp'}) – Format for written data.
 sep (str) – Singlecharacter field seperator. Usually a tab, space, comma, or semicolon.
Parallelization¶
This function provides functions for parallel execution of loops and function mappings, using the builtin Python module multiprocessing.

parfor
(func, *args, **kwargs)[source]¶ Executes a multivariable function in parallel on the local machine.
Parallel execution of a forloop over function func for multiple input arguments and keyword arguments.
Note
From QuTiP 3.1, we recommend to use
qutip.parallel_map
instead of this function.Parameters:  func (function_type) – A function to run in parallel on the local machine. The function ‘func’ accepts a series of arguments that are passed to the function as variables. In general, the function can have multiple input variables, and these arguments must be passed in the same order as they are defined in the function definition. In addition, the user can pass multiple keyword arguments to the function.
 following keyword argument is reserved (The) –
 num_cpus (int) – Number of CPU’s to use. Default uses maximum number of CPU’s. Performance degrades if num_cpus is larger than the physical CPU count of your machine.
Returns: result – A
list
with length equal to number of input parameters containing the output from func.Return type: list

parallel_map
(task, values, task_args=(), task_kwargs={}, **kwargs)[source]¶ Parallel execution of a mapping of values to the function task. This is functionally equivalent to:
result = [task(value, *task_args, **task_kwargs) for value in values]
Parameters:  task (a Python function) – The function that is to be called for each value in
task_vec
.  values (array / list) – The list or array of values for which the
task
function is to be evaluated.  task_args (list / dictionary) – The optional additional argument to the
task
function.  task_kwargs (list / dictionary) – The optional additional keyword argument to the
task
function.  progress_bar (ProgressBar) – Progress bar class instance for showing progress.
Returns: result – The result list contains the value of
task(value, *task_args, **task_kwargs)
for each value invalues
.Return type: list
 task (a Python function) – The function that is to be called for each value in

serial_map
(task, values, task_args=(), task_kwargs={}, **kwargs)[source]¶ Serial mapping function with the same call signature as parallel_map, for easy switching between serial and parallel execution. This is functionally equivalent to:
result = [task(value, *task_args, **task_kwargs) for value in values]
This function work as a dropin replacement of
qutip.parallel_map
.Parameters:  task (a Python function) – The function that is to be called for each value in
task_vec
.  values (array / list) – The list or array of values for which the
task
function is to be evaluated.  task_args (list / dictionary) – The optional additional argument to the
task
function.  task_kwargs (list / dictionary) – The optional additional keyword argument to the
task
function.  progress_bar (ProgressBar) – Progress bar class instance for showing progress.
Returns: result – The result list contains the value of
task(value, *task_args, **task_kwargs)
for each value invalues
.Return type: list
 task (a Python function) – The function that is to be called for each value in
IPython Notebook Tools¶
This module contains utility functions for using QuTiP with IPython notebooks.

parfor
(task, task_vec, args=None, client=None, view=None, show_scheduling=False, show_progressbar=False)[source]¶ Call the function
tast
for each value intask_vec
using a cluster of IPython engines. The functiontask
should have the signaturetask(value, args)
ortask(value)
ifargs=None
.The
client
andview
are the IPython.parallel client and loadbalanced view that will be used in the parfor execution. If these areNone
, new instances will be created.Parameters:  task (a Python function) – The function that is to be called for each value in
task_vec
.  task_vec (array / list) – The list or array of values for which the
task
function is to be evaluated.  args (list / dictionary) – The optional additional argument to the
task
function. For example a dictionary with parameter values.  client (IPython.parallel.Client) – The IPython.parallel Client instance that will be used in the parfor execution.
 view (a IPython.parallel.Client view) – The view that is to be used in scheduling the tasks on the IPython cluster. Preferably a loadbalanced view, which is obtained from the IPython.parallel.Client instance client by calling, view = client.load_balanced_view().
 show_scheduling (bool {False, True}, default False) – Display a graph showing how the tasks (the evaluation of
task
for for the value intask_vec1
) was scheduled on the IPython engine cluster.  show_progressbar (bool {False, True}, default False) – Display a HTMLbased progress bar duing the execution of the parfor loop.
Returns: result – The result list contains the value of
task(value, args)
for each value intask_vec
, that is, it should be equivalent to[task(v, args) for v in task_vec]
.Return type: list
 task (a Python function) – The function that is to be called for each value in

parallel_map
(task, values, task_args=None, task_kwargs=None, client=None, view=None, progress_bar=None, show_scheduling=False, **kwargs)[source]¶ Call the function
task
for each value invalues
using a cluster of IPython engines. The functiontask
should have the signaturetask(value, *args, **kwargs)
.The
client
andview
are the IPython.parallel client and loadbalanced view that will be used in the parfor execution. If these areNone
, new instances will be created.Parameters:  task (a Python function) – The function that is to be called for each value in
task_vec
.  values (array / list) – The list or array of values for which the
task
function is to be evaluated.  task_args (list / dictionary) – The optional additional argument to the
task
function.  task_kwargs (list / dictionary) – The optional additional keyword argument to the
task
function.  client (IPython.parallel.Client) – The IPython.parallel Client instance that will be used in the parfor execution.
 view (a IPython.parallel.Client view) – The view that is to be used in scheduling the tasks on the IPython cluster. Preferably a loadbalanced view, which is obtained from the IPython.parallel.Client instance client by calling, view = client.load_balanced_view().
 show_scheduling (bool {False, True}, default False) – Display a graph showing how the tasks (the evaluation of
task
for for the value intask_vec1
) was scheduled on the IPython engine cluster.  show_progressbar (bool {False, True}, default False) – Display a HTMLbased progress bar during the execution of the parfor loop.
Returns: result – The result list contains the value of
task(value, task_args, task_kwargs)
for each value invalues
.Return type: list
 task (a Python function) – The function that is to be called for each value in

version_table
(verbose=False)[source]¶ Print an HTMLformatted table with version numbers for QuTiP and its dependencies. Use it in a IPython notebook to show which versions of different packages that were used to run the notebook. This should make it possible to reproduce the environment and the calculation later on.
Returns: version_table – Return an HTMLformatted string containing version information for QuTiP dependencies. Return type: string
Miscellaneous¶

about
()[source]¶ About box for QuTiP. Gives version numbers for QuTiP, NumPy, SciPy, Cython, and MatPlotLib.

simdiag
(ops, evals=True)[source]¶ Simulateous diagonalization of communting Hermitian matrices..
Parameters: ops (list/array) – list
orarray
of qobjs representing commuting Hermitian operators.Returns: eigs – Tuple of arrays representing eigvecs and eigvals of quantum objects corresponding to simultaneous eigenvectors and eigenvalues for each operator. Return type: tuple