Skip to content

Variational Gate — VQGate ​

Deprecated: The VariationalGate class has been removed from pyqpanda3. Variational gates are now created through VQCircuit and VQGate. See VQCircuit for the current API.

API reference for parameterized (variational) gate variants used in variational quantum circuits (VQAs). These gates differ from standard gates in that their rotation parameters are symbolic references (ParamExpression) into a Parameter array rather than fixed numeric values.

VQGate ​

Base class for variational quantum gates. VQGate objects are created by the variational gate factory functions (which are overloaded versions of standard gate functions taking a ParamExpression instead of a float) and can be appended to VQCircuit.

Signature ​

python
class VQGate

VQGate instances hold a gate type together with ParamExpression references into a Parameter array. At circuit execution time, concrete values are bound through VQCircuit.__call__().

ParamExpression and Parameter are defined in pyqpanda3.vqcircuit; ParamExpression instances are produced by VQCircuit.Param(...).

Variational Gate Factory Functions ​

Each function returns a VQGate. A param argument of type ParamExpression references a position in the Parameter array that supplies the rotation angle.

Single-Qubit Variational Gates ​

P (variational) ​

python
P(qbit_idx: int, param: ParamExpression) -> VQGate
ParameterTypeDescription
qbit_idxintTarget qubit index
paramParamExpressionSymbolic reference into the Parameter array

Returns a variational P gate.

RX (variational) ​

python
RX(qbit_idx: int, param: ParamExpression) -> VQGate

Returns a variational RX gate.

RY (variational) ​

python
RY(qbit_idx: int, param: ParamExpression) -> VQGate

Returns a variational RY gate.

RZ (variational) ​

python
RZ(qbit_idx: int, param: ParamExpression) -> VQGate

Returns a variational RZ gate.

U1 (variational) ​

python
U1(qbit_idx: int, param: ParamExpression) -> VQGate

Returns a variational U1 gate.

IDLE (variational) ​

python
IDLE(qbit_idx: int, param: ParamExpression) -> VQGate

Returns a variational IDLE gate.

Two-Parameter Variational Gates ​

U2 (variational, overload 1) ​

python
U2(qbit_idx: int, param1: ParamExpression, param2: Union[float, ParamExpression]) -> VQGate
ParameterTypeDescription
qbit_idxintTarget qubit index
param1ParamExpressionMutable parameter index for first angle
param2Union[float, ParamExpression]Fixed value or mutable parameter index for second angle

U2 (variational, overload 2) ​

python
U2(qbit_idx: int, param1: float, param2: ParamExpression) -> VQGate
ParameterTypeDescription
qbit_idxintTarget qubit index
param1floatFixed value for first angle
param2ParamExpressionMutable parameter index for second angle

RPhi (variational, overload 1) ​

python
RPhi(qbit_idx: int, param1: ParamExpression, param2: Union[float, ParamExpression]) -> VQGate
ParameterTypeDescription
qbit_idxintTarget qubit index
param1ParamExpressionMutable parameter index for theta
param2Union[float, ParamExpression]Fixed value or mutable parameter index for phi

RPhi (variational, overload 2) ​

python
RPhi(qbit_idx: int, param1: float, param2: ParamExpression) -> VQGate
ParameterTypeDescription
qbit_idxintTarget qubit index
param1floatFixed value for theta
param2ParamExpressionMutable parameter index for phi

Three-Parameter Variational Gates ​

U3 (variational, overload 1) ​

python
U3(qbit_idx: int, param1: ParamExpression, param2: Union[float, ParamExpression], param3: Union[float, ParamExpression]) -> VQGate
ParameterTypeDescription
qbit_idxintTarget qubit index
param1ParamExpressionMutable parameter index for first angle
param2Union[float, ParamExpression]Fixed value or mutable parameter index for second angle
param3Union[float, ParamExpression]Fixed value or mutable parameter index for third angle

U3 (variational, overload 2) ​

python
U3(qbit_idx: int, param1: float, param2: ParamExpression, param3: Union[float, ParamExpression]) -> VQGate
ParameterTypeDescription
qbit_idxintTarget qubit index
param1floatFixed value for first angle
param2ParamExpressionMutable parameter index for second angle
param3Union[float, ParamExpression]Fixed value or mutable parameter index for third angle

U3 (variational, overload 3) ​

python
U3(qbit_idx: int, param1: float, param2: float, param3: ParamExpression) -> VQGate
ParameterTypeDescription
qbit_idxintTarget qubit index
param1floatFixed value for first angle
param2floatFixed value for second angle
param3ParamExpressionMutable parameter index for third angle

Four-Parameter Variational Gates ​

U4 (variational, overload 1) ​

python
U4(qbit_idx: int, param1: ParamExpression, param2: Union[float, ParamExpression], param3: Union[float, ParamExpression], param4: Union[float, ParamExpression]) -> VQGate
ParameterTypeDescription
qbit_idxintTarget qubit index
param1ParamExpressionMutable parameter index for first angle
param2Union[float, ParamExpression]Fixed value or mutable parameter index for second angle
param3Union[float, ParamExpression]Fixed value or mutable parameter index for third angle
param4Union[float, ParamExpression]Fixed value or mutable parameter index for fourth angle

U4 (variational, overload 2) ​

python
U4(qbit_idx: int, param1: float, param2: ParamExpression, param3: Union[float, ParamExpression], param4: Union[float, ParamExpression]) -> VQGate
ParameterTypeDescription
qbit_idxintTarget qubit index
param1floatFixed value for first angle
param2ParamExpressionMutable parameter index for second angle
param3Union[float, ParamExpression]Fixed value or mutable parameter index for third angle
param4Union[float, ParamExpression]Fixed value or mutable parameter index for fourth angle

U4 (variational, overload 3) ​

python
U4(qbit_idx: int, param1: float, param2: float, param3: ParamExpression, param4: Union[float, ParamExpression]) -> VQGate
ParameterTypeDescription
qbit_idxintTarget qubit index
param1floatFixed value for first angle
param2floatFixed value for second angle
param3ParamExpressionMutable parameter index for third angle
param4Union[float, ParamExpression]Fixed value or mutable parameter index for fourth angle

U4 (variational, overload 4) ​

python
U4(qbit_idx: int, param1: float, param2: float, param3: float, param4: ParamExpression) -> VQGate
ParameterTypeDescription
qbit_idxintTarget qubit index
param1floatFixed value for first angle
param2floatFixed value for second angle
param3floatFixed value for third angle
param4ParamExpressionMutable parameter index for fourth angle

Two-Qubit Variational Gates ​

CU (variational, overload 1) ​

python
CU(control_qbit_idx: int, target_qbit_idx: int, param1: ParamExpression, param2: Union[float, ParamExpression], param3: Union[float, ParamExpression], param4: Union[float, ParamExpression]) -> VQGate
ParameterTypeDescription
control_qbit_idxintControl qubit index
target_qbit_idxintTarget qubit index
param1ParamExpressionMutable parameter index for first angle
param2Union[float, ParamExpression]Fixed value or mutable parameter index for second angle
param3Union[float, ParamExpression]Fixed value or mutable parameter index for third angle
param4Union[float, ParamExpression]Fixed value or mutable parameter index for fourth angle

CU (variational, overloads 2-4) ​

Additional overloads follow the same pattern as U4, with one additional fixed value per overload. Each overload takes control_qbit_idx and target_qbit_idx as the first two arguments.

CP (variational) ​

python
CP(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
ParameterTypeDescription
control_qbit_idxintControl qubit index
target_qbit_idxintTarget qubit index
paramParamExpressionMutable parameter index

CRX (variational) ​

python
CRX(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
ParameterTypeDescription
control_qbit_idxintControl qubit index
target_qbit_idxintTarget qubit index
paramParamExpressionMutable parameter index

CRY (variational) ​

python
CRY(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
ParameterTypeDescription
control_qbit_idxintControl qubit index
target_qbit_idxintTarget qubit index
paramParamExpressionMutable parameter index

CRZ (variational) ​

python
CRZ(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
ParameterTypeDescription
control_qbit_idxintControl qubit index
target_qbit_idxintTarget qubit index
paramParamExpressionMutable parameter index

CR (variational, alias for CP) ​

python
CR(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
ParameterTypeDescription
control_qbit_idxintControl qubit index
target_qbit_idxintTarget qubit index
paramParamExpressionMutable parameter index

RXX (variational) ​

python
RXX(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
ParameterTypeDescription
control_qbit_idxintControl qubit index
target_qbit_idxintTarget qubit index
paramParamExpressionMutable parameter index

RYY (variational) ​

python
RYY(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
ParameterTypeDescription
control_qbit_idxintControl qubit index
target_qbit_idxintTarget qubit index
paramParamExpressionMutable parameter index

RZZ (variational) ​

python
RZZ(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
ParameterTypeDescription
control_qbit_idxintControl qubit index
target_qbit_idxintTarget qubit index
paramParamExpressionMutable parameter index

RZX (variational) ​

python
RZX(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
ParameterTypeDescription
control_qbit_idxintControl qubit index
target_qbit_idxintTarget qubit index
paramParamExpressionMutable parameter index

Usage with VQCircuit ​

Variational gates are the building blocks of VQCircuit. A ParamExpression produced by VQCircuit.Param(...) refers to a position in the Parameter array:

python
from pyqpanda3.vqcircuit import VQCircuit
from pyqpanda3.core import RX, CP

# Create a variational circuit
vqc = VQCircuit()

# Initialize the parameter array: 1D with 3 elements, dimension label "params"
vqc.set_Param([3], ["params"])

# Create parameter placeholders at specific indices with element labels
p0 = vqc.Param([0], "rx0")   # parameter for first RX
p1 = vqc.Param([1], "rx1")   # parameter for second RX
p2 = vqc.Param([2], "cp")    # parameter for controlled-phase

# Add variational gates using parameter indices
vqc << RX(0, p0)         # RX on qubit 0, angle from p0
vqc << RX(1, p1)         # RX on qubit 1, angle from p1
vqc << CP(0, 1, p2)      # Controlled-Phase using p2
vqc << RX(0, p2)         # RX on qubit 0, angle from p2

# Get parameter values and bind concrete values
import numpy as np
theta = np.array([0.5, 0.3, 0.1])
result = vqc(theta)  # pass concrete values
print(type(result).__name__)

Output:

VQCResult

See Also ​

  • VQCircuit — Variational quantum circuit class
  • Parameter — Parameter vector class
  • Gates — Standard (non-variational) gate functions
  • Gradient — Gradient computation with variational gates

Released under the MIT License.