ValleyChain¶
- class qugradlab.systems.semiconducting.esr.ValleyChain(dots: int, electrons: int, zeeman_splittings: ndarray[complex], valley_splitting: float, u: float, u_valley_flip: float, valley_spin_orbit_coupling: float, max_drive_strength: float, J_max: float, J_min: float = 0, use_graph: bool = True)[source]¶
Bases:
Controls,FermionicSystemA
qugrad.QuantumSystemfor a linear array of silicon electron quantum dots including the valley degree of freedom and electron spin resonance (ESR) controls. The Hamiltonian is given bywhere \(i_{\alpha}^\dagger\) and \(i_{\alpha}\) are the creation and annihilation operators for the \(i\)th dot and \(\alpha\) indexes the spin and valley index degrees of freedom, \(\left<\alpha,\beta\right>\) represents unique unordered pairs of \(\alpha\) and \(\beta\), \((\bar\beta_v,\beta_s)\) has the same spin index as \(\beta\) but the oposite valley index, U_0$ is the on-site Coulomb no-valley-flip interaction, \(U_1\) is the on-site Coulomb valley-flip interaction, the interdot hoppings have the form \(\tilde t^{ij}_{\alpha\beta}=h^{ij}(t)\delta_{\alpha\beta}\), and the intradot hoppings take the form\[\begin{split} H(t) = \sum_{\substack{{i,j}\\{\alpha,\beta}}}i_{\alpha}^\dagger j_{\beta} \tilde t^{ij}_{\alpha\beta} +U_0\sum_{i,\left<\alpha,\beta\right>} i_{\alpha}^\dagger i_{\beta}^\dagger i_{\alpha} i_{\beta} +U_1\sum_{i,\alpha,\beta} i_{\alpha}^\dagger i_{\beta}^\dagger i_{\alpha} i_{(\bar\beta_v,\beta_s)}, \end{split}\]where \(V\) is the valley splitting, \(Z_i\) is the Zeeman splitting on the \(i\)th dot, \(\nu_{\textrm{SO}}\) is the valley-spin-orbit coupling, and\[\begin{split} \tilde t^{ii}_{\alpha\beta}=\begin{bmatrix} \frac{1}{2}\left(V+Z_i\right)&g(t)^*&&\nu_{\textrm{SO}}^*\\ g(t)&\frac{1}{2}\left(V-Z_i\right)&\nu_{\textrm{SO}}&\\ &\nu_{\textrm{SO}}^*&\frac{1}{2}\left(-V+Z_i\right)&g(t)^*\\ \nu_{\textrm{SO}}&&g(t)&\frac{1}{2}\left(-V-Z_i\right) \end{bmatrix}\begin{matrix}\left(1,\uparrow\right)\\\left(1,\downarrow\right)\\\left(0,\uparrow\right)\\\left(0,\downarrow\right)\end{matrix} \end{split}\]is the Rabi drive with frequency components \(\omega_j\) and amplitudes \(a_j(t)\).\[ g(t) = \sum_{j=0}^{\texttt{dots}-1}\real\left(a_j(t)e^{i\omega_j t}\right), \]See also
Attributes
An array of the system's control Hamiltonians with shape (
n_ctrl,dim,dim).The maximum value of the exchange coupling \(J\)
The minimum value of the exchange coupling \(J\)
The dimension of states in the quantum system.
The integrator used for time evolutions of the system.
The Hilbert space of the system
The maximum drive strength that can be applied to the system
The number of control Hamiltonians.
The shape of the states in the system.
The on-site Coulomb no-valley-flip interaction
The on-site Coulomb valley-flip interaction
Whether to use TensorFlow graphs during computation.
The valley-spin-orbit coupling
The Zeeman splittings of the spins
Methods
Computes the system Hamiltonian for the specified control amplitudes.
Initialises a linear array of silicon electron quantum dots including the valley degree of freedom and electron spin resonance (ESR) controls.
When calling any evolution method (listed in the See also section section)
_pre_processing()is executed on the arguements before the control amplitudes are modulated by the frequencies during_envolope_processing()and then finally the modulated control amplitudes are used by the evolution method.When calling any evolution method (listed in the See also section)
_pre_processing()is executed on the arguments before the control amplitudes are modulated by the frequencies (during_envolope_processing()) and then finally the modulated control amplitudes are used by the evolution method.Evolves a state vector under the time-dependent Hamiltonian defined by the control amplitudes and computes the expectation value of a specified observable with respect to the final state using
evolved_expectation_value()from PySTE.Evolves a state vector under the time-dependent Hamiltonian defined by the control amplitudes and computes the expectation value of a specified observable with respect to the state at each time-step using
evolved_expectation_value_all()from PySTE.When calling any evolution method (listed in the See also section`) get_driving_pulses() is executed on the arguements before the evolution method.
Evolves a state vector under the time-dependent Hamiltonian defined by the control amplitudes and computes the expectation value of a specified observable with respect to the final state and then computes the gradient of the final state with respect to the first argument (
args[0]) usingswitching_function()from PySTE.Evolves a state vector under the time-dependent Hamiltonian defined by the control amplitudes using
propagate()from PySTE.Evolves a state vector under the time-dependent Hamiltonian defined by the control amplitudes using
propagate_all()from PySTE and returns the state at each time-step.Evolves a collection of state vectors under the time-dependent Hamiltonian defined by the control amplitudes using
propagate_collection()from PySTE.Initialises a new
QuantumSystemin which_pre_processing()corresponds to executingpulse_function()and piping the output into the previous definition of_pre_processing().
- H(ctrl_amp: ndarray[float] | ndarray[Callable[[float], ndarray[float]]]) ndarray[complex] | Callable[[float], ndarray[complex]]¶
Computes the system Hamiltonian for the specified control amplitudes.
- Parameters:
ctrl_amp (NDArray[Shape[s := Any_Shape,
n_ctrl], float | Callable[[float], np.ndarray[float]]]) – The control amplitudes (stored in the last axis). The prior axes allow for multiple sets of control amplitudes to be passed and the Hamiltonian for each computed. The control amplitudes can be passed asnp.ndarray[float]to compute the system Hamiltonian for a specific value of the control ampltiudes. Alternatively, the control amplitudes can be passed asnp.ndarray[Callable[[float], np.ndarray[float]]]where each element is a function of time. This will generate a time-dependent Hamiltonian: a function that takes a single parameter (time) and returns the Hamiltonian at this time.- Returns:
Either the systems Hamiltonian stored in the last two axes (if specific control amplitudes were passed) or a collection of time-dependent Hamiltonians (if time-dependent controls were passed).
- Return type:
NDArray[Shape[s,
dim,dim], complex] | NDArray[Shape[s], Callable[[float], np.ndarray[complex]]]]
- __init__(dots: int, electrons: int, zeeman_splittings: ndarray[complex], valley_splitting: float, u: float, u_valley_flip: float, valley_spin_orbit_coupling: float, max_drive_strength: float, J_max: float, J_min: float = 0, use_graph: bool = True)[source]¶
Initialises a linear array of silicon electron quantum dots including the valley degree of freedom and electron spin resonance (ESR) controls. The Hamiltonian is given by
where \(i_{\alpha}^\dagger\) and \(i_{\alpha}\) are the creation and annihilation operators for the \(i\)th dot and \(\alpha\) indexes the spin and valley index degrees of freedom, \(\left<\alpha,\beta\right>\) represents unique unordered pairs of \(\alpha\) and \(\beta\), \((\bar\beta_v,\beta_s)\) has the same spin index as \(\beta\) but the oposite valley index, U_0$ is the on-site Coulomb no-valley-flip interaction and corresponds to u, \(U_1\) is the on-site Coulomb valley-flip interaction and corresponds to u_valley_flip, the interdot hoppings have the form \(\tilde t^{ij}_{\alpha\beta}=h^{ij}(t)\delta_{\alpha\beta}\), and the intradot hoppings take the form\[\begin{split} H(t) = \sum_{\substack{{i,j}\\{\alpha,\beta}}} i_{\alpha}^\dagger j_{\beta} \tilde t^{ij}_{\alpha\beta} +U_0\sum_{i,\left<\alpha,\beta\right>} i_{\alpha}^\dagger i_{\beta}^\dagger i_{\alpha} i_{\beta} +U_1\sum_{i,\alpha,\beta} i_{\alpha}^\dagger i_{\beta}^\dagger i_{\alpha} i_{(\bar\beta_v,\beta_s)}, \end{split}\]where \(V\) corresponds to valley_splitting, \(Z_i\) is the Zeeman splitting on the \(i\)th dot and corresponds zeeman_splittings, \(\nu_{\textrm{SO}}\) corresponds to valley_spin_orbit_coupling, and\[\begin{split} \tilde t^{ii}_{\alpha\beta}=\begin{bmatrix} \frac{1}{2}\left(V+Z_i\right)&g(t)^*&&\nu_{\textrm{SO}}^*\\ g(t)&\frac{1}{2}\left(V-Z_i\right)&\nu_{\textrm{SO}}&\\ &\nu_{\textrm{SO}}^*&\frac{1}{2}\left(-V+Z_i\right)&g(t)^*\\ \nu_{\textrm{SO}}&&g(t)&\frac{1}{2}\left(-V-Z_i\right) \end{bmatrix}\begin{matrix} \left(1,\uparrow\right)\\ \left(1,\downarrow\right)\\ \left(0,\uparrow\right)\\ \left(0,\downarrow\right) \end{matrix} \end{split}\]is the Rabi drive with frequency components \(\omega_j\) and amplitudes \(a_j(t)\).\[ g(t) = \sum_{j=0}^{\texttt{dots}-1}\real\left(a_j(t)e^{i\omega_j t}\right), \]- Parameters:
dots (int) – The number of dots in the array
electrons (int) – The number of electrons in the
zeeman_splittings (NDArray[Shape[spins], float]) – The Zeeman splitting of each of the spins
valley_splitting (float) – The valley splitting
u (float) – The on-site Coulomb no-valley-flip interaction
u_valley_flip (float) – The on-site Coulomb valley-flip interaction
valley_spin_orbit_coupling (float) – The valley-spin-orbit coupling
max_drive_strength (float) –
The maximum drive strength that can be applied at a specific frequency and quadrature. That is if their are
n_drive_ctrlfrequencies and both quadratures are used then the maximum amplitude of the drive that can be applied to the device is:np.sqrt(2) * n_drive_ctrl * max_drive_strength
J_max (float) – The minimum value of the exchange coupling \(J\)
J_min (float) – The maximum value of the exchange coupling \(J\), by default 0
use_graph (bool) – Whether to use TensorFlow graphs during computation, by default
True
- _envolope_processing(ctrl_amp, dt: float, frequencies, number_channels: list[int]) tuple¶
When calling any evolution method (listed in the See also section section)
_pre_processing()is executed on the arguements before the control amplitudes are modulated by the frequencies during_envolope_processing()and then finally the modulated control amplitudes are used by the evolution method.- Parameters:
ctrl_amp (tf.Tensor[Shape[n_time_steps, total_n_channels], tf.complex128]) – The envolope control amplitudes
dt (float) – The itegration time step
frequencies (tf.Tensor[Shape[n_time_steps, total_n_channels], tf.complex128]) – The frequencies to modulate the control amplitudes with
The number of channels associated with each control Hamiltonian
Warning
This must be a
listand not anNDArrayor a TensorFlow tensor.
- Returns:
The modulated control amplitudes
- Return type:
tf.Tensor[Shape[n_time_steps,
n_ctrl], tf.complex128]
- _pre_processing(drive_ctrl_amp: ndarray[complex], drive_frequencies: ndarray[complex], J_ctrl_amp: ndarray[complex], initial_state: ndarray[complex], dt: float) tuple¶
When calling any evolution method (listed in the See also section)
_pre_processing()is executed on the arguments before the control amplitudes are modulated by the frequencies (during_envolope_processing()) and then finally the modulated control amplitudes are used by the evolution method._pre_processing()can be overridden to produce desired pulse shapes. You can either override_pre_processing()directly by creating a child class, or you can usepulse_form().For
gradient()to function correctly_pre_processing()should be written in TensorFlow.- Parameters:
drive_ctrl_amp (NDArray[Shape[n_time_steps, n_drive_ctrl], complex]) – The control amplitudes for the global Rabi-drive Hamiltonian. These values should be in the range [
-1,1] and will be linearly rescaled to the range [−max_drive_strength,max_drive_strength] where-1corresponds to the −max_drive_strengthand1to themax_drive_strength.drive_frequencies (NDArray[Shape[n_drive_ctrl], complex]) – The frequencies to modulate the control amplitude of the global Rabi-drive Hamiltonian with
J_ctrl_amp (NDArray[Shape[n_time_steps, n_J_ctrl], complex]) – The control amplitudes for the exchange Hamiltonians. These values should be in the range [
-1,1] and will be linearly rescaled to the range [J_min,J_max] where-1corresponds to theJ_minand1to theJ_max.initial_state (NDArray[Shape[
dim], complex]) – The initial state for the integratordt (float) – The itegration time step
- Returns:
tuple[tf.Tensor[Shape[n_time_steps, total_n_channels], tf.complex128], tf.Tensor[Shape[ – A tuple of 1. The control amplitude envolopes 2. The initial state 3. The integrator time step 4. The frequencies to modulate the control amplitude envolopes with 5. A list of the number of channels for each control Hamiltonian
Warning
The number of channels for each control Hamiltonian must be stored as a
listand not anNDArrayor a TensorFlow tensor.- Return type:
attr:
state_shape], tf.complex128], float, tf.Tensor[Shape[n_time_steps, total_n_channels], tf.complex128], list[int]]
- evolved_expectation_value(drive_ctrl_amp: ndarray[complex], drive_frequencies: ndarray[complex], J_ctrl_amp: ndarray[complex], initial_state: ndarray[complex], dt: float, observable: ndarray[complex]) complex¶
Evolves a state vector under the time-dependent Hamiltonian defined by the control amplitudes and computes the expectation value of a specified observable with respect to the final state using
evolved_expectation_value()from PySTE.- Parameters:
drive_ctrl_amp (NDArray[Shape[n_time_steps, n_drive_ctrl], complex]) – The control amplitudes for the global Rabi-drive Hamiltonian. These values should be in the range [
-1,1] and will be linearly rescaled to the range [−max_drive_strength,max_drive_strength] where-1corresponds to the −max_drive_strengthand1to themax_drive_strength.drive_frequencies (NDArray[Shape[n_drive_ctrl], complex]) – The frequencies to modulate the control amplitude of the global Rabi-drive Hamiltonian with
J_ctrl_amp (NDArray[Shape[n_time_steps, n_J_ctrl], complex]) – The control amplitudes for the exchange Hamiltonians. These values should be in the range [
-1,1] and will be linearly rescaled to the range [J_min,J_max] where-1corresponds to theJ_minand1to theJ_max.initial_state (NDArray[Shape[
dim], complex]) – The initial state for the integratordt (float) – The itegration time step
observable (NDArray[Shape[
dim,dim], complex]) – The observable to take the expectation value of.
Warning
Keyword arguments are not supported.
- Returns:
The expectation value.
- Return type:
- evolved_expectation_value_all(drive_ctrl_amp: ndarray[complex], drive_frequencies: ndarray[complex], J_ctrl_amp: ndarray[complex], initial_state: ndarray[complex], dt: float, observable: ndarray[complex]) ndarray[complex]¶
Evolves a state vector under the time-dependent Hamiltonian defined by the control amplitudes and computes the expectation value of a specified observable with respect to the state at each time-step using
evolved_expectation_value_all()from PySTE.- Parameters:
drive_ctrl_amp (NDArray[Shape[n_time_steps, n_drive_ctrl], complex]) – The control amplitudes for the global Rabi-drive Hamiltonian. These values should be in the range [
-1,1] and will be linearly rescaled to the range [−max_drive_strength,max_drive_strength] where-1corresponds to the −max_drive_strengthand1to themax_drive_strength.drive_frequencies (NDArray[Shape[n_drive_ctrl], complex]) – The frequencies to modulate the control amplitude of the global Rabi-drive Hamiltonian with
J_ctrl_amp (NDArray[Shape[n_time_steps, n_J_ctrl], complex]) – The control amplitudes for the exchange Hamiltonians. These values should be in the range [
-1,1] and will be linearly rescaled to the range [J_min,J_max] where-1corresponds to theJ_minand1to theJ_max.initial_state (NDArray[Shape[
dim], complex]) – The initial state for the integratordt (float) – The itegration time step
observable (NDArray[Shape[
dim,dim], complex]) – The observable to take the expectation value of.
Warning
Keyword arguments are not supported.
- Returns:
The state at each integrator time step (including the initial state).
- Return type:
NDArray[Shape[n_time_steps+1], complex]
See also
- get_driving_pulses(drive_ctrl_amp: ndarray[complex], drive_frequencies: ndarray[complex], J_ctrl_amp: ndarray[complex], initial_state: ndarray[complex], dt: float) tuple[ndarray[complex], ndarray[complex], float]¶
When calling any evolution method (listed in the See also section`) get_driving_pulses() is executed on the arguements before the evolution method.
- Parameters:
drive_ctrl_amp (NDArray[Shape[n_time_steps, n_drive_ctrl], complex]) – The control amplitudes for the global Rabi-drive Hamiltonian. These values should be in the range [
-1,1] and will be linearly rescaled to the range [−max_drive_strength,max_drive_strength] where-1corresponds to the −max_drive_strengthand1to themax_drive_strength.drive_frequencies (NDArray[Shape[n_drive_ctrl], complex]) – The frequencies to modulate the control amplitude of the global Rabi-drive Hamiltonian with
J_ctrl_amp (NDArray[Shape[n_time_steps, n_J_ctrl], complex]) – The control amplitudes for the exchange Hamiltonians. These values should be in the range [
-1,1] and will be linearly rescaled to the range [J_min,J_max] where-1corresponds to theJ_minand1to theJ_max.initial_state (NDArray[Shape[
dim], complex]) – The initial state for the integratordt (float) – The itegration time step
Warning
Keyword arguments are not supported.
- Returns:
A tuple of: 1. Control amplitudes 2. Initial state 3. Integrator time step
- Return type:
tuple[NDArray[Shape[n_time_steps, n_ctrl], complex], NDArray[Shape[
state_shape], complex], float]
- gradient(drive_ctrl_amp: ndarray[complex], drive_frequencies: ndarray[complex], J_ctrl_amp: ndarray[complex], initial_state: ndarray[complex], dt: float, observable: ndarray[complex]) tuple[float, ndarray[float]]¶
Evolves a state vector under the time-dependent Hamiltonian defined by the control amplitudes and computes the expectation value of a specified observable with respect to the final state and then computes the gradient of the final state with respect to the first argument (
args[0]) usingswitching_function()from PySTE.- Parameters:
drive_ctrl_amp (NDArray[Shape[n_time_steps, n_drive_ctrl], complex]) – The control amplitudes for the global Rabi-drive Hamiltonian. These values should be in the range [
-1,1] and will be linearly rescaled to the range [−max_drive_strength,max_drive_strength] where-1corresponds to the −max_drive_strengthand1to themax_drive_strength.drive_frequencies (NDArray[Shape[n_drive_ctrl], complex]) – The frequencies to modulate the control amplitude of the global Rabi-drive Hamiltonian with
J_ctrl_amp (NDArray[Shape[n_time_steps, n_J_ctrl], complex]) – The control amplitudes for the exchange Hamiltonians. These values should be in the range [
-1,1] and will be linearly rescaled to the range [J_min,J_max] where-1corresponds to theJ_minand1to theJ_max.initial_state (NDArray[Shape[
dim], complex]) – The initial state for the integratordt (float) – The itegration time step
observable (NDArray[Shape[
dim,dim], complex]) – The observable to take the expectation value of.
Warning
Keyword arguments are not supported.
- initialise_evolver(sparse: bool = False, force_dynamic: bool = False)¶
Initialises
evolverwith an evolver from PySTE. PySTE is Python wrapper around the C++ header-only library Suzuki-Trotter-Evolver: a fast Schrödinger solver utilising the first-order Suzuki-Trotter expansion.Warning
This can take a very long time to execute, especially for large Hilbert space dimensions. If you plan to evolve the same quantum system many times we recommended pickling the
evolver.- Parameters:
sparse (bool) – Whether to use sparse or dense matrices during integration. To make a decision on whether sparse or dense matrices are likely to lead to faster integration you can consult the benchmarks at https://PySTE.readthedocs.io/en/latest/benchmarks.
force_dynamic (bool) –
Whether to force PySTE to use a dynamic evolver.
- propagate(drive_ctrl_amp: ndarray[complex], drive_frequencies: ndarray[complex], J_ctrl_amp: ndarray[complex], initial_state: ndarray[complex], dt: float) ndarray[complex]¶
Evolves a state vector under the time-dependent Hamiltonian defined by the control amplitudes using
propagate()from PySTE.- Parameters:
drive_ctrl_amp (NDArray[Shape[n_time_steps, n_drive_ctrl], complex]) – The control amplitudes for the global Rabi-drive Hamiltonian. These values should be in the range [
-1,1] and will be linearly rescaled to the range [−max_drive_strength,max_drive_strength] where-1corresponds to the −max_drive_strengthand1to themax_drive_strength.drive_frequencies (NDArray[Shape[n_drive_ctrl], complex]) – The frequencies to modulate the control amplitude of the global Rabi-drive Hamiltonian with
J_ctrl_amp (NDArray[Shape[n_time_steps, n_J_ctrl], complex]) – The control amplitudes for the exchange Hamiltonians. These values should be in the range [
-1,1] and will be linearly rescaled to the range [J_min,J_max] where-1corresponds to theJ_minand1to theJ_max.initial_state (NDArray[Shape[
dim], complex]) – The initial state for the integratordt (float) – The itegration time step
Warning
Keyword arguments are not supported.
- Returns:
The final state
- Return type:
NDArray[Shape[
state_shape], complex]
See also
- propagate_all(drive_ctrl_amp: ndarray[complex], drive_frequencies: ndarray[complex], J_ctrl_amp: ndarray[complex], initial_state: ndarray[complex], dt: float) ndarray[complex]¶
Evolves a state vector under the time-dependent Hamiltonian defined by the control amplitudes using
propagate_all()from PySTE and returns the state at each time-step.- Parameters:
drive_ctrl_amp (NDArray[Shape[n_time_steps, n_drive_ctrl], complex]) – The control amplitudes for the global Rabi-drive Hamiltonian. These values should be in the range [
-1,1] and will be linearly rescaled to the range [−max_drive_strength,max_drive_strength] where-1corresponds to the −max_drive_strengthand1to themax_drive_strength.drive_frequencies (NDArray[Shape[n_drive_ctrl], complex]) – The frequencies to modulate the control amplitude of the global Rabi-drive Hamiltonian with
J_ctrl_amp (NDArray[Shape[n_time_steps, n_J_ctrl], complex]) – The control amplitudes for the exchange Hamiltonians. These values should be in the range [
-1,1] and will be linearly rescaled to the range [J_min,J_max] where-1corresponds to theJ_minand1to theJ_max.initial_state (NDArray[Shape[
dim], complex]) – The initial state for the integratordt (float) – The itegration time step
Warning
Keyword arguments are not supported.
- Returns:
The state at each integrator time step (including the initial state).
- Return type:
NDArray[Shape[n_time_steps+1,
state_shape], complex]
See also
- propagate_collection(drive_ctrl_amp: ndarray[complex], drive_frequencies: ndarray[complex], J_ctrl_amp: ndarray[complex], initial_state: ndarray[complex], dt: float) ndarray[complex]¶
Evolves a collection of state vectors under the time-dependent Hamiltonian defined by the control amplitudes using
propagate_collection()from PySTE.- Parameters:
drive_ctrl_amp (NDArray[Shape[n_time_steps, n_drive_ctrl], complex]) – The control amplitudes for the global Rabi-drive Hamiltonian. These values should be in the range [
-1,1] and will be linearly rescaled to the range [−max_drive_strength,max_drive_strength] where-1corresponds to the −max_drive_strengthand1to themax_drive_strength.drive_frequencies (NDArray[Shape[n_drive_ctrl], complex]) – The frequencies to modulate the control amplitude of the global Rabi-drive Hamiltonian with
J_ctrl_amp (NDArray[Shape[n_time_steps, n_J_ctrl], complex]) – The control amplitudes for the exchange Hamiltonians. These values should be in the range [
-1,1] and will be linearly rescaled to the range [J_min,J_max] where-1corresponds to theJ_minand1to theJ_max.initial_state (NDArray[Shape[
dim], complex]) – The initial state for the integratordt (float) –
The itegration time step
Warning
This must be a
listand not anNDArrayor a TensorFlow tensor.
Warning
Keyword arguments are not supported.
- Returns:
The final state
- Return type:
NDArray[Shape[n_states,
state_shape], complex]
See also
- pulse_form(pulse_function: Callable, path: str | None = None) PulseForm¶
Initialises a new
QuantumSystemin which_pre_processing()corresponds to executingpulse_function()and piping the output into the previous definition of_pre_processing().- Parameters:
pulse_function (Callable) – The function to compose with
_pre_processing().- Returns:
The new
QuantumSystem- Return type:
PulseForm
- property Hs: ndarray[complex]¶
An array of the system’s control Hamiltonians with shape (
n_ctrl,dim,dim).See also
- property evolver: UnitaryEvolver¶
The integrator used for time evolutions of the system.
Note
The evolver can take a while to initialise and so is not initialised until evolver is is first used or when
initialise_evolver()is called. Using evolver before callinginitialise_evolver()initialises the evolver with the default parameters ofinitialise_evolver().
- property hilbert_space: HilbertSpace¶
The Hilbert space of the system
- property using_graph: bool¶
Whether to use TensorFlow graphs during computation. Using a TensorFlow graph will increase the speed of computation. However, you have to be careful that function parameters have not been baked into the graph leading to unexpected behaviour.