the dynamics. These class implement functions for getting the dynamics generators for the combined (drift + ctrls) dynamics with the approriate operator applied Note the methods in these classes were inspired by: DYNAMO - Dynamic Framework for Quantum Optimal Control See Machnes et.al., arXiv.1011.4874 """ import os import numpy as np import scipy.linalg as la from six import string_types # QuTiP logging import qutip.logging as logging logger = logging.get_logger() # QuTiP control modules import qutip.control.errors as errors import qutip.control.tslotcomp as tslotcomp import qutip.control.fidcomp as fidcomp import qutip.control.propcomp as propcomp import qutip.control.symplectic as sympl class Dynamics: """ This is a base class only. See subclass descriptions and choose an appropriate one for the application. Note that initialize_controls must be called before any of the methods can be used.
The baseclass Optimizer implements the function wrappers to the fidelity error, gradient, and iteration callback functions. These are called from the within the SciPy optimisation functions. The subclasses implement the algorithm specific pulse optimisation function. """ import os import numpy as np import timeit import scipy.optimize as spopt import copy import collections # QuTiP from qutip import Qobj import qutip.logging as logging logger = logging.get_logger() # QuTiP control modules import qutip.control.optimresult as optimresult import qutip.control.termcond as termcond import qutip.control.errors as errors import qutip.control.dynamics as dynamics import qutip.control.pulsegen as pulsegen class Optimizer: """ Base class for all control pulse optimisers. This class should not be instantiated, use its subclasses This class implements the fidelity, gradient and interation callback functions. All subclass objects must be initialised with a