Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def solve(self, rho0, tlist, options=None):
"""
Solve the ODE for the evolution of diagonal states and Hamiltonians.
"""
if options is None:
options = Options()
output = Result()
output.solver = "pisolve"
output.times = tlist
output.states = []
output.states.append(Qobj(rho0))
rhs_generate = lambda y, tt, M: M.dot(y)
rho0_flat = np.diag(np.real(rho0.full()))
L = self.coefficient_matrix()
rho_t = odeint(rhs_generate, rho0_flat, tlist, args=(L,))
for r in rho_t[1:]:
diag = np.diag(r)
output.states.append(Qobj(diag))
return output
def correlation_3op_1t(H, state0, taulist, c_ops, a_op, b_op, c_op,
solver="me", args={},
options=Options(ntraj=[20, 100])):
"""
Calculate the three-operator two-time correlation function:
:math:`\left`
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 :math:`\\tau<0`.
Parameters
----------
H : Qobj
system Hamiltonian, may be time-dependent for solver choice of `me` or
`mc`.
rho0 : Qobj
Initial state density matrix :math:`\\rho(t_0)` or state vector
e_ops_dict = None
if progress_bar is None:
progress_bar = BaseProgressBar()
if progress_bar is True:
progress_bar = TextProgressBar()
# check if rho0 is a superoperator, in which case e_ops argument should
# be empty, i.e., e_ops = []
# TODO: e_ops for superoperator
if issuper(rho0) and not e_ops == []:
raise TypeError("Must have e_ops = [] when initial condition rho0 is" +
" a superoperator.")
if options is None:
options = Options()
if options.rhs_reuse and not isinstance(H, SolverSystem):
# TODO: deprecate when going to class based solver.
if "mesolve" in solver_safe:
# print(" ")
H = solver_safe["mesolve"]
else:
pass
# raise Exception("Could not find the Hamiltonian to reuse.")
if args is None:
args = {}
check_use_openmp(options)
use_mesolve = ((c_ops and len(c_ops) > 0)
or (not isket(rho0))
Instance representing the propagator :math:`U(t)`.
"""
kw = _default_kwargs()
if 'num_cpus' in kwargs:
num_cpus = kwargs['num_cpus']
else:
num_cpus = kw['num_cpus']
if progress_bar is None:
progress_bar = BaseProgressBar()
elif progress_bar is True:
progress_bar = TextProgressBar()
if options is None:
options = Options()
options.rhs_reuse = True
rhs_clear()
if isinstance(t, (int, float, np.integer, np.floating)):
tlist = [0, t]
else:
tlist = t
if _safe_mode:
_solver_safety_check(H, None, c_ops=c_op_list, e_ops=[], args=args)
td_type = _td_format_check(H, c_op_list, solver='me')
if isinstance(H, (types.FunctionType, types.BuiltinFunctionType,
functools.partial)):
H0 = H(0.0, args)
def correlation_4op_1t(H, state0, taulist, c_ops, a_op, b_op, c_op, d_op,
solver="me", args={},
options=Options(ntraj=[20, 100])):
"""
Calculate the four-operator two-time correlation function:
:math:`\left`
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 :math:`\\tau<0`.
Parameters
----------
H : Qobj
system Hamiltonian, may be time-dependent for solver choice of `me` or
`mc`.
rho0 : Qobj
Initial state density matrix :math:`\\rho(t_0)` or state vector
args = {}
if FIX_QUTIP_932: # pragma: no cover
controls = extract_controls([self])
pulses_mapping = extract_controls_mapping([self], controls)
mapping = pulses_mapping[0] # "first objective" (dummy structure)
H = _plug_in_array_controls_as_func(H, controls, mapping[0], tlist)
c_ops = [
_plug_in_array_controls_as_func(
c_op, controls, mapping[ic + 1], tlist
)
for (ic, c_op) in enumerate(self.c_ops)
]
# local instantations for `options` is to work around
# https://github.com/qutip/qutip/issues/1061
options = kwargs.pop('options', QutipSolverOptions())
return qutip.mesolve(
H=H,
rho0=rho0,
tlist=tlist,
c_ops=c_ops,
e_ops=e_ops,
args=args,
options=options,
**kwargs
)
def floquet_markov_mesolve(R, ekets, rho0, tlist, e_ops, f_modes_table=None,
options=None, floquet_basis=True):
"""
Solve the dynamics for the system using the Floquet-Markov master equation.
"""
if options is None:
opt = Options()
else:
opt = options
if opt.tidy:
R.tidyup()
#
# check initial state
#
if isket(rho0):
# Got a wave function as initial state: convert to density matrix.
rho0 = ket2dm(rho0)
#
# prepare output array
#
def correlation_4op_2t(H, state0, tlist, taulist, c_ops,
a_op, b_op, c_op, d_op, solver="me", args={},
options=Options(ntraj=[20, 100])):
"""
Calculate the four-operator two-time correlation function:
:math:`\left`
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 :math:`\\tau<0`.
Parameters
----------
H : Qobj
system Hamiltonian, may be time-dependent for solver choice of `me` or
`mc`.
def correlation_2op_2t(H, state0, tlist, taulist, c_ops, a_op, b_op,
solver="me", reverse=False, args={},
options=Options(ntraj=[20, 100])):
"""
Calculate the two-operator two-time correlation function:
:math:`\left`
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 time-dependent for solver choice of `me` or
`mc`.
state0 : Qobj
Initial state density matrix :math:`\\rho_0` or state vector
:math:`\\psi_0`. If 'state0' is 'None', then the steady state will
be used as the initial state. The 'steady-state' is only implemented
for the `me` and `es` solvers.
def _correlation_2t(H, state0, tlist, taulist, c_ops, a_op, b_op, c_op,
solver="me", args={}, options=Options()):
"""
Internal function for calling solvers in order to calculate the
three-operator two-time correlation function:
"""
# Note: the current form of the correlator is sufficient for all possible
# two-time correlations (incuding those with 2ops vs 3). Ex: to compute a
# correlation of the form : a_op = identity, b_op = A,
# and c_op = B.
if debug:
print(inspect.stack()[0][3])
if min(tlist) != 0:
raise TypeError("tlist must be positive and contain the element 0.")