Wolfram Function Repository
Instant-use add-on functions for the Wolfram Language
Function Repository Resource:
Represent a discrete quantum circuit operator
ResourceFunction["QuantumCircuitOperator"][{gate1,gate2,…},order,qb] represents a discrete quantum circuit operator with gates (i.e. QuantumDiscreteOperator or QuantumMeasurementOperator objects) gatei, applied to the qudits indexed by order, defined with respect to a specified QuantumBasis qb. | |
ResourceFunction["QuantumCircuitOperator"][qco,qb] transforms a specified ResourceFunction["QuantumCircuitOperator"] qco into a new QuantumBasis qb. | |
ResourceFunction["QuantumCircuitOperator"][qco,pic] transforms qco into the new quantum mechanical picture pic. |
"Operator" | association <|b11→e11,b12→e12,…|> of tensor products of basis names and matrix elements |
"Basis" | which QuantumBasis the circuit operator is defined with respect to |
"Picture" | which quantum mechanical picture the circuit operator is defined with respect to |
"BasisElements" | list of basis elements bi |
"MatrixRepresentation" | matrix representation mat of the circuit operator |
"OrderedMatrixRepresentation" | matrix representation adjusted according to the order of the circuit operator, assuming an input state containing Max[order] qudits (subsystems) |
{"OrderedMatrixRepresentation",n} | matrix representation adjusted according to the order of the circuit operator, assuming an input state containing n qudits (subsystems) |
"OperatorRepresentation" | representation of the circuit operator as a QuantumDiscreteOperator |
"Arity" | arity of the circuit operator |
"Dimensions" | dimensionality of each qudit (subsystem) in the input state for the circuit operator |
"Order" | order in which the circuit operator should be applied to qudits (subsystems) in the input state |
"HermitianQ" | whether the circuit operator is Hermitian (self-adjoint) |
"UnitaryQ" | whether the circuit operator is unitary (an automorphism of Hilbert space) |
"Eigenvalues" | eigenvalues of the matrix representation of the circuit operator |
"Eigenvectors" | eigenvectors of the matrix representation of the circuit operator |
"Gates" | list of gates (QuantumDiscreteOperator and QuantumMeasurementOperator objects) contained within the circuit operator |
"GateOperators" | list of associations <|b11→e11,b12→e12,…|> of tensor products of basis names and matrix elements for each QuantumDiscreteOperator or QuantumMeasurementOperator in the circuit |
"GateBases" | list of QuantumBasis objects for each QuantumDiscreteOperator or QuantumMeasurementOperator in the circuit |
"GatePictures" | list of quantum mechanical pictures for each QuantumDiscreteOperator or QuantumMeasurementOperator in the circuit |
"GateBasisElements" | list of lists of basis elements bi for each QuantumDiscreteOperator or QuantumMeasurementOperator in the circuit |
"GateMatrixRepresentations" | list of matrix representations mat for each QuantumDiscreteOperator or QuantumMeasurementOperator in the circuit |
"GateOrderedMatrixRepresentations" | list of ordered matrix representations for each QuantumDiscreteOperator or QuantumMeasurementOperator in the circuit, assuming an input state containing Max[Max/@orders] qudits (subsystems) |
{"GateOrderedMatrixRepresentations",n} | list of ordered matrix representations for each QuantumDiscreteOperator or QuantumMeasurementOperator in the circuit, assuming an input state containing n qudits (subsystems) |
"GateArities" | list of arities for each QuantumDiscreteOperator or QuantumMeasurementOperator in the circuit |
"GateDimensions" | list of qudit dimensionalities for each QuantumDiscreteOperator or QuantumMeasurementOperator in the circuit |
"GateOrders" | list of qudit application orders for each QuantumDiscreteOperator or QuantumMeasurementOperator in the circuit |
"Diagram" | diagrammatic representation of the circuit operator |
"Properties" | list of all property names |
"S" | S-gate (equivalent to a π/2 PHASE gate) |
"T" | T-gate (equivalent to a π/4 PHASE gate) |
"CNOT" | CNOT gate for qubits (controlled NOT - equivalent to a CX gate) |
{"CNOT",d} | CNOT gate for d-dimensional qudits |
"CPHASE" | CPHASE gate for qubits (controlled π PHASE gate) |
{"CPHASE",d} | CPHASE gate for d-dimensional qudits |
"CX" | CX gate for qubits (controlled Pauli-X gate - equivalent to a CNOT gate) |
{"CX",d} | CX gate for d-dimensional qudits |
"CY" | CY gate for qubits (controlled Pauli-Y gate) |
"CZ" | CZ gate for qubits (controlled Pauli-Z gate) |
{"CZ",d} | CZ gate for d-dimensional qudits |
"Fourier" | QFT gate for qubits (quantum Fourier transform) |
{"Fourier",d} | QFT gate for d-dimensional qudits |
"InverseFourier" | IQFT gate for qubits (inverse quantum Fourier transform) |
{"InverseFourier",d} | IQFT gate for d-dimensional qudits |
"SWAP" | SWAP gate for qubits (swap two qubits) |
{"SWAP",d} | SWAP gate for d-dimensional qudits |
"RootSWAP" | square root of the SWAP gate for qubits (half swap two qubits) |
{"RootSWAP",d} | square root of the SWAP gate for d-dimensional qudits |
"SUM" | SUM gate for qubits (half-adder for qubits - equivalent to a CNOT gate) |
{"SUM",d} | SUM gate for d-dimensional qudits |
"PauliX" | Pauli-X gate for qubits (equivalent to a π rotation around the x axis of the Bloch sphere) |
{"PauliX",d} | Pauli-X gate for d-dimensional qudits |
"PauliY" | Pauli-Y gate for qubits (equivalent to a π rotation around the y axis of the Bloch sphere) |
"PauliZ" | Pauli-Z gate for qubits (equivalent to a π rotation around the z axis of the Bloch sphere) |
{"PauliZ",d} | Pauli-Z gate for d-dimensional qudits |
"RootNOT" | square root of the Pauli-X gate for qubits (half NOT operation on one qubit) |
{"RootNOT",d} | square root of the Pauli-X gate for d-dimensional qudits |
"Hadamard" | Hadamard gate for qubits (equivalent to a QFT gate on one qubit) |
"Toffoli" | Toffoli gate on 3 qubits (equivalent to a π/2 Deutsch gate) |
{"Toffoli",n} | Toffoli gate on n qubits |
"CSWAP" | controlled SWAP gate for qubits (Fredkin gate) |
"PauliX" | measurement operator based on the Pauli-X gate for qubits (equivalent to a π rotation around the x axis of the Bloch sphere) |
{"PauliX",d} | measurement operator based on the Pauli-X gate for d-dimensional qudits (not Hermitian for general d>2) |
"PauliY" | measurement operator based on the Pauli-Y gate for qubits (equivalent to a π rotation around the y axis of the Bloch sphere) |
"PauliZ" | measurement operator based on the Pauli-Z gate for qubits (equivalent to a π rotation around the z axis of the Bloch sphere) |
{"PauliZ",d} | measurement operator based on the Pauli-Z gate for d-dimensional qudits (not Hermitian for general d>2) |
"Hadamard" | measurement operator based on the Hadamard gate for qubits (equivalent to a QFT gate on one qubit) |
"ComputationalBasis" | measurement in the 2-dimensional computational basis |
{"ComputationalBasis",d} | measurement in the d-dimensional computational basis |
{"ComputationalBasis",d,eigs} | measurement in the d-dimensional computational basis with eigenvalues (i.e. measurement outcomes) eigs |
"BellBasis" | measurement in the Bell basis |
{"BellBasis",eigs} | measurement in the Bell basis with eigenvalues (i.e. measurement outcomes) eigs |
"PauliBasis" | measurement in the basis of Pauli matrices |
{"PauliBasis",eigs} | measurement in the basis of Pauli matrices with eigenvalues (i.e. measurement outcomes) eigs |
"FourierBasis" | measurement in the 2-dimensional basis of the quantum Fourier transform |
{"FourierBasis",d} | measurement in the d-dimensional basis of the quantum Fourier transform |
{"FourierBasis",d,eigs} | measurement in the d-dimensional basis of the quantum Fourier transform with eigenvalues (i.e. measurement outcomes) eigs |
Create a discrete quantum circuit operator in the computational basis consisting of a Hadamard gate and a Pauli-Z gate applied in series:
In[1]:= |
Out[1]= |
Show the diagrammatic representation:
In[2]:= |
Out[2]= |
In[3]:= |
Out[3]= |
Apply the circuit operator to the first qubit (default) of a two-qubit discrete quantum state in the computational basis:
In[4]:= |
Out[4]= |
In[5]:= |
Out[5]= |
Apply the circuit operator to the second qubit of the state instead:
In[6]:= |
Out[6]= |
In[7]:= |
Out[7]= |
Apply the Hadamard and Pauli-Z gates in parallel to qubits 1 and 2 instead:
In[8]:= |
Out[8]= |
In[9]:= |
Out[9]= |
In[10]:= |
Out[10]= |
Create a discrete quantum circuit operator in the computational basis consisting of a CNOT gate with control qubit 2 and "active" qubit 3, followed by a SWAP gate for qubits 1 and 3, followed by a quantum Fourier transform gate for qubits 1, 2 and 3:
In[11]:= |
Out[12]= |
Return its matrix representation:
In[13]:= |
Out[13]= |
Return the ordered matrix representation (assuming a state of size 4):
In[14]:= |
Out[14]= |
In[15]:= |
Out[15]= |
In[16]:= |
Out[16]= |
In[17]:= |
Out[18]= |
Return the new ordered matrix representation (assuming a state of size 4):
In[19]:= |
Out[19]= |
Create a discrete quantum circuit operator in the computational basis consisting of an inverse quantum Fourier transform gate for qubits 1 and 2, followed by a computational basis measurement gate for qubit 2:
In[20]:= |
Out[21]= |
In[22]:= |
Out[23]= |
By default, all discrete quantum circuit operators are created in the Schrodinger picture:
In[24]:= |
Out[25]= |
Circuit operators in the Schrodinger picture can be applied to QuanumDiscreteState objects:
In[26]:= |
Out[27]= |
However, they cannot be applied to other operators (i.e. QuantumDiscreteOperator objects, QuantumMeasurementOperator objects or QuantumHamiltonianOperator objects). Doing so will return unevaluated:
In[28]:= |
Out[29]= |
On the other hand, circuit operators created in the Heisenberg picture cannot be applied to QuantumDiscreteState objects (will return unevaluated):
In[30]:= |
Out[31]= |
In[32]:= |
Out[32]= |
However, they can be applied to other operators in the Heisenberg picture (i.e. QuantumDiscreteOperator objects, QuantumMeasurementOperator objects or QuantumHamiltonianOperator objects):
In[33]:= |
Out[34]= |
In[35]:= |
Out[36]= |
In[37]:= |
Out[38]= |
Apply a discrete quantum circuit operator (without measurement gates) to a QuantumMeasurement object:
In[39]:= |
Out[40]= |
Show the resulting (evolved) states:
In[41]:= |
Out[41]= |
Apply a discrete quantum circuit operator (with measurement gates) to a QuantumMeasurement object:
In[42]:= |
Out[43]= |
Show the resulting joint distribution:
In[44]:= |
Out[44]= |
Create a discrete quantum circuit operator in the computational basis (default):
In[45]:= |
Out[46]= |
In[47]:= |
Out[47]= |
Transform the circuit operator to the Fourier basis:
In[48]:= |
Out[49]= |
In[50]:= |
Out[50]= |
Transform the circuit operator back to the computational basis:
In[51]:= |
Out[52]= |
In[53]:= |
Out[53]= |
Represent a discrete quantum circuit operator in the Heisenberg picture:
In[54]:= |
Out[54]= |
In[55]:= |
Out[55]= |
Transform the circuit to the interaction picture:
In[56]:= |
Out[56]= |
In[57]:= |
Out[57]= |
Represent a two-qubit discrete quantum circuit operator in the computational basis:
In[58]:= |
Out[59]= |
In[60]:= |
Out[60]= |
Represent the same circuit operator in the Pauli-X basis instead:
In[61]:= |
Out[62]= |
In[63]:= |
Out[63]= |
Circuit operators in the Schrodinger picture can be applied to QuantumDiscreteState objects that are also in the Schrodinger picture:
In[64]:= |
Out[65]= |
In[66]:= |
Out[67]= |
In[68]:= |
Out[68]= |
However, they cannot be applied to other operators in the Schrodinger picture (returns unevaluated):
In[69]:= |
Out[69]= |
In[70]:= |
Out[70]= |
Likewise, circuit operators in the "PhaseSpace" picture can be applied to QuantumDiscreteState objects in the "PhaseSpace" picture:
In[71]:= |
Out[72]= |
In[73]:= |
Out[74]= |
In[75]:= |
Out[75]= |
But they cannot be applied to other operators in the phase space picture (returns unevaluated):
In[76]:= |
Out[76]= |
In[77]:= |
Out[77]= |
On the other hand, circuit operators in the Heisenberg picture cannot be applied to QuantumDiscreteState objects in the Heisenberg picture:
In[78]:= |
Out[79]= |
In[80]:= |
Out[81]= |
But they can be applied to other operators in the Heisenberg picture:
In[82]:= |
Out[82]= |
In[83]:= |
Out[83]= |
Finally, circuit operators in the Interaction picture can be applied to both QuantumDiscreteState objects in the Interaction picture:
In[84]:= |
Out[85]= |
In[86]:= |
Out[87]= |
And also to other operators in the Interaction picture:
In[88]:= |
Out[88]= |
In[89]:= |
Out[89]= |
In general, the quantum mechanical picture of a QuantumCircuitOperator and the object that it is being applied to must match.
QuantumCircuitOperator objects can be composed by application:
In[90]:= |
Out[91]= |
In[92]:= |
Out[93]= |
In[94]:= |
Out[95]= |
Circuits can also be composed by including them as "gates" in the specification of other circuits:
In[96]:= |
Out[97]= |
Show the circuit diagram for an S-gate (a π/2 phase change gate):
In[98]:= |
Out[99]= |
Show the circuit diagram for an S-gate with a control qubit:
In[100]:= |
Out[101]= |
Show the circuit diagram for a T-gate (a π/4 phase change gate):
In[102]:= |
Out[103]= |
Show the circuit diagram for a T-gate with a control qubit:
In[104]:= |
Out[105]= |
Show the circuit diagram for a CNOT gate (a controlled NOT gate—equivalent to a controlled Pauli-X gate):
In[106]:= |
Out[107]= |
Show the circuit diagram for a Pauli-X gate (a π rotation around the x axis of the Bloch sphere):
In[108]:= |
Out[109]= |
Show the circuit diagram for a Pauli-Y gate (a π rotation around the y axis of the Bloch sphere):
In[110]:= |
Out[111]= |
Show the circuit diagram for a controlled Pauli-Y gate:
In[112]:= |
Out[113]= |
Show the circuit diagram for a Pauli-Z gate (a π rotation around the z axis of the Bloch sphere):
In[114]:= |
Out[115]= |
Show the circuit diagram for a controlled Pauli-Z gate:
In[116]:= |
Out[117]= |
Show the circuit diagram for a two-qubit QFT gate (quantum Fourier transform):
In[118]:= |
Out[119]= |
Show the circuit diagram for a two-qubit QFT gate with a control qubit:
In[120]:= |
Out[121]= |
Show the circuit diagram for a two-qubit IQFT gate (inverse quantum Fourier transform):
In[122]:= |
Out[123]= |
Show the circuit diagram for a two-qubit IQFT gate with a control qubit:
In[124]:= |
Out[125]= |
Show the circuit diagram for a SWAP gate:
In[126]:= |
Out[127]= |
Show the circuit diagram for a SWAP gate with a control qubit:
In[128]:= |
Out[129]= |
Show the circuit diagram for the square root of a SWAP gate (half swaps two qubits):
In[130]:= |
Out[131]= |
Show the circuit diagram for the square root of a SWAP gate with a control qubit:
In[132]:= |
Out[133]= |
Show the circuit diagram for a Hadamard gate (a single-qubit quantum Fourier transform):
In[134]:= |
Out[135]= |
Show the circuit diagram for a Hadamard gate with a control qubit:
In[136]:= |
Out[137]= |
Show the circuit diagram for a positive operator-valued discrete quantum measurement:
In[138]:= |
Out[139]= |
Show the circuit diagram for a Pauli-X measurement gate (a π rotation around the x axis of the Bloch sphere):
In[140]:= |
Out[141]= |
Show the circuit diagram for a Pauli-Y measurement gate (a π rotation around the y axis of the Bloch sphere):
In[142]:= |
Out[143]= |
Show the circuit diagram for a Pauli-Z measurement gate (a π rotation around the z axis of the Bloch sphere):
In[144]:= |
Out[145]= |
Show the circuit diagram for a Hadamard measurement gate (a single-qubit quantum Fourier transform):
In[146]:= |
Out[147]= |
Show the circuit diagram for a single-qubit computational basis measurement (with default eigenvalues):
In[148]:= |
Out[149]= |
Show the circuit diagram for a two-qubit computational basis measurement (with default eigenvalues):
In[150]:= |
Out[151]= |
Show the circuit diagram for a single-qubit Bell basis measurement (with default eigenvalues):
In[152]:= |
Out[153]= |
Show the circuit diagram for a two-qubit Bell basis measurement (with default eigenvalues):
In[154]:= |
Out[155]= |
Show the circuit diagram for a single-qubit Fourier basis measurement:
In[156]:= |
Out[157]= |
Show the circuit diagram for a two-qubit Fourier basis measurement:
In[158]:= |
Out[159]= |
View a list of properties that can be extracted from a QuantumCircuitOperator object:
In[160]:= |
Out[160]= |
In[161]:= |
Out[161]= |
Return the circuit operator association:
In[162]:= |
Out[162]= |
Return which QuantumBasis the circuit operator is defined with respect to:
In[163]:= |
Out[163]= |
Return which quantum mechanical picture the circuit operator is defined with respect to:
In[164]:= |
Out[164]= |
Return the association of names and basis elements:
In[165]:= |
Out[165]= |
Return the matrix representation:
In[166]:= |
Out[166]= |
Return the ordered matrix representation (when applied to qubits 2 and 3), assuming a state consisting of 3 qubits:
In[167]:= |
Out[167]= |
Return the ordered matrix representation (when applied to qubits 2 and 3), assuming a state consisting of 4 qubits:
In[168]:= |
Out[168]= |
Return the representation as a QuantumDiscreteOperator:
In[169]:= |
Out[169]= |
Return the arity (number of input subsystems):
In[170]:= |
Out[170]= |
Return the number of dimensions:
In[171]:= |
Out[171]= |
Return the order in which the circuit operator is applied to subsystems:
In[172]:= |
Out[172]= |
Determine whether the circuit operator is Hermitian:
In[173]:= |
Out[173]= |
Determine whether the circuit operator is unitary:
In[174]:= |
Out[174]= |
Return the list of eigenvalues:
In[175]:= |
Out[175]= |
Return the list of eigenvectors:
In[176]:= |
Out[176]= |
Return the list of gates in the circuit:
In[177]:= |
Out[177]= |
Return the list of operator associations for each gate:
In[178]:= |
Out[178]= |
Return the list of QuantumBasis objects for each gate:
In[179]:= |
Out[179]= |
Return the list of quantum mechanical pictures for each gate:
In[180]:= |
Out[180]= |
Return the list of associations of names and basis elements for each gate:
In[181]:= |
Out[181]= |
Return the list of matrix representations for each gate:
In[182]:= |
Out[182]= |
Return the list of ordered matrix representations for each gate, assuming a state consisting of 3 qubits:
In[183]:= |
Out[183]= |
Return the list of ordered matrix representations for each gate, assuming a state consisting of 4 qubits:
In[184]:= |
Out[184]= |
Return the list of arities (number of input subsystems) for each gate:
In[185]:= |
Out[185]= |
Return the list of numbers of dimensions for each gate:
In[186]:= |
Out[186]= |
Return the list of orders in which the gates are applied to subsystems:
In[187]:= |
Out[187]= |
Show the diagrammatic representation of the circuit operator:
In[188]:= |
Out[188]= |
Represent a three-qubit quantum Fourier transform as a composition of Hadamard gates, controlled S-phase and T-phase gates and a single SWAP operation at the end:
In[189]:= |
Out[190]= |
Apply the circuit operator to a random three-qubit discrete quantum state:
In[191]:= |
Out[192]= |
Compare the matrix representation of the circuit operator to the matrix representation of the standard three-qubit quantum Fourier transform:
In[193]:= |
Out[193]= |
Compare the effect of the standard three-qubit quantum Fourier transform on the random state from a previous example:
In[194]:= |
Out[194]= |
Represent a Hadamard test circuit (for creating a random variable whose expected value is the expected real part of the observed value of a quantum state with respect to some unitary operator):
In[195]:= |
Out[196]= |
Apply the circuit operator to a random three-qubit discrete quantum state:
In[197]:= |
Out[198]= |
Represent a quantum parity check circuit (for determining the expected number of 1s in an arbitrary string of qubits), shown here for the three-qubit case:
In[199]:= |
Out[200]= |
Apply the circuit operator to a random four-qubit discrete quantum state:
In[201]:= |
Out[202]= |
This work is licensed under a Creative Commons Attribution 4.0 International License