qailab.gradient.gradient_calculation#

Gradient and partial derivative calculation methods for parameterized quantum circuits.

Summary#

Functions:

calculate_gradients_compatible

Calculate gradients for parameters in compatible gates.

calculate_gradients_incompatible

Calculate gradients for parameters in incompatible gates, e.g. amplitude encoding parameters.

calculate_jacobian

For each parameter calculate partial derivatives w.r.t to each output value (possible measurement).

Reference#

qailab.gradient.gradient_calculation.calculate_jacobian(circuit: QuantumCircuit, set_params: dict[Parameter, int | float], backend: Backend, method: Literal['param_shift', 'spsa', 'lin_comb'] = 'param_shift', shots: int = 1024) ndarray[source]#

For each parameter calculate partial derivatives w.r.t to each output value (possible measurement).

Parameters:
  • circuit (QuantumCircuit) – Circuit to sample.

  • set_params (dict[Parameter, int | float]) – Parameters for which to calculate derivatives and their current values.

  • backend (Backend) – Backend to use.

  • method (Literal['param_shift', 'spsa', 'lin_comb'], optional)

  • 'param_shift'. (Gradient algorithm to use. Defaults to)

  • shots (int) – How many shots to use for Sampler.

Raises:

ValueError – For unsupported method or backend.

Returns:

len(set_params) x 2^measured_qubits matrix of partial derivatives.

Return type:

np.ndarray

qailab.gradient.gradient_calculation.calculate_gradients_compatible(circuit: QuantumCircuit, set_params: dict[Parameter, int | float], backend: QiskitBackend, method: Literal['param_shift', 'spsa', 'lin_comb'] = 'param_shift', shots: int = 1024)[source]#

Calculate gradients for parameters in compatible gates.

Parameters:
  • circuit (QuantumCircuit) – Circuit to sample.

  • set_params (dict[Parameter, int | float]) – Parameters for which to calculate derivatives and their current values.

  • backend (QiskitBackend) – Backend to use.

  • method (Literal['param_shift', 'spsa', 'lin_comb'], optional)

  • 'param_shift'. (Gradient algorithm to use. Defaults to)

  • shots (int) – How many shots to use for Sampler.

Raises:

ValueError – For unsupported method or backend.

Returns:

len(set_params) x 2^measured_qubits matrix of partial derivatives.

Return type:

np.ndarray

qailab.gradient.gradient_calculation.calculate_gradients_incompatible(circuit: QuantumCircuit, set_params: dict[Parameter, int | float], backend: QiskitBackend, shots: int = 1024, epsilon: float = 0.01)[source]#

Calculate gradients for parameters in incompatible gates, e.g. amplitude encoding parameters. Calculation is done using the standard derivative formula (f(x+h) - f(x))/h

Parameters:
  • circuit (QuantumCircuit) – Circuit to sample.

  • set_params (dict[Parameter, int | float]) – Parameters for which to calculate derivatives and their current values.

  • backend (QiskitBackend) – Backend to use.

  • shots (int) – How many shots to use for Sampler.

  • epsilon (float) – How much to shift the parameter.

Raises:

ValueError – For unsupported method or backend.

Returns:

len(set_params) x 2^measured_qubits matrix of partial derivatives.

Return type:

np.ndarray