CUDA Quantum Python API¶
Program Construction¶
- cudaq.make_kernel(*args, **kwargs)¶
- Overloaded function. - cudaq.make_kernel() cudaq.Kernel
 
 - Create and return a - Kernelthat accepts no arguments.- Returns:
- An empty kernel function to be used for quantum program construction. This kernel is non-parameterized and accepts no arguments. 
- Return type:
 - # Example: # Non-parameterized kernel. kernel = cudaq.make_kernel() - cudaq.make_kernel(\*args) tuple
 
 - Create a - Kernelthat takes the provided types as arguments. Returns a tuple containing the kernel and a- QuakeValuefor each kernel argument.- Note - The following types are supported as kernel arguments: - int,- float,- list/- List,- cudaq.qubit, or- cudaq.qreg.- Parameters:
- *arguments – A variable amount of types for the kernel function to accept as arguments. 
- Returns:
- A tuple containing an empty kernel function and a - QuakeValuehandle for each argument that was passed into- make_kernel().
- Return type:
- tuple[Kernel, QuakeValue, ...]
 - # Example: # Parameterized kernel that accepts an `int` # and `float` as arguments. kernel, int_value, float_value = cudaq.make_kernel(int, float) 
- cudaq.from_state(*args, **kwargs)¶
- Overloaded function. - cudaq.from_state(kernel: cudaq.Kernel, qubits: cudaq.QuakeValue, state: numpy.ndarray[]) None
 
 - Decompose the input state vector to a set of controlled operations and rotations within the provided - kernelbody.- # Example: import numpy as np # Define our kernel. kernel = cudaq.make_kernel() # Allocate some qubits. qubits = kernel.qalloc(3) # Define a simple state vector. state = np.array([0,1], dtype=np.complex128) # Now calling `from_state`, we will provide the `kernel` and the # qubit/s that we'd like to evolve to the given `state`. cudaq.from_state(kernel, qubits, state) - cudaq.from_state(state: numpy.ndarray[]) cudaq.Kernel
 
 - Decompose the given state vector into a set of controlled operations and rotations and return a valid, callable, CUDA Quantum kernel. - # Example: import numpy as np # Define a simple state vector. state = np.array([0,1], dtype=np.complex128) # Create and return a kernel that produces the given `state`. kernel = cudaq.from_state(state) 
- class cudaq.Kernel¶
- The - Kernelprovides an API for dynamically constructing quantum circuits. The- Kernelprogrammatically represents the circuit as an MLIR function using the Quake dialect.- Note - See - make_kernel()for the- Kernelconstructor.- arguments¶
- The arguments accepted by the - Kernelfunction. Read-only.- Type:
- List[ - QuakeValue]
 
 - qalloc(*args, **kwargs)¶
- Overloaded function. - qalloc(self: cudaq.Kernel) cudaq.QuakeValue
 
 - Allocate a single qubit and return a handle to it as a - QuakeValue.- Returns:
- A handle to the allocated qubit in the MLIR. 
- Return type:
 - # Example: kernel = cudaq.make_kernel() qubit = kernel.qalloc() - qalloc(self: cudaq.Kernel, qubit_count: int) cudaq.QuakeValue
 
 - Allocate a register of qubits of size - qubit_countand return a handle to them as a- QuakeValue.- Parameters:
- qubit_count ( - int) – The number of qubits to allocate.
- Returns:
- A handle to the allocated qubits in the MLIR. 
- Return type:
 - # Example: kernel = cudaq.make_kernel() qubits = kernel.qalloc(10) - qalloc(self: cudaq.Kernel, qubit_count: cudaq.QuakeValue) cudaq.QuakeValue
 
 - Allocate a register of qubits of size - qubit_count(where- qubit_countis an existing- QuakeValue) and return a handle to them as a new- QuakeValue.- Parameters:
- qubit_count ( - QuakeValue) – The parameterized number of qubits to allocate.
- Returns:
- A handle to the allocated qubits in the MLIR. 
- Return type:
 - # Example: # Create a kernel that takes an int as its argument. kernel, qubit_count = cudaq.make_kernel(int) # Allocate the variable number of qubits. qubits = kernel.qalloc(qubit_count) 
 - __str__()¶
- __str__(self: cudaq.Kernel) str
 - Return the - Kernelas a string in its MLIR representation using the Quake dialect.
 - __call__()¶
- __call__(self: cudaq.Kernel, \*args) None
 - Just-In-Time (JIT) compile - self(- Kernel), and call the kernel function at the provided concrete arguments.- Parameters:
- *arguments (Optional[Any]) – The concrete values to evaluate the kernel function at. Leave empty if the - targetkernel doesn’t accept any arguments.
 - # Example: # Create a kernel that accepts an int and float as its # arguments. kernel, qubit_count, angle = cudaq.make_kernel(int, float) # Parameterize the number of qubits by `qubit_count`. qubits = kernel.qalloc(qubit_count) # Apply an `rx` rotation on the first qubit by `angle`. kernel.rx(angle, qubits[0]) # Call the `Kernel` on the given number of qubits (5) and at a concrete angle (pi). kernel(5, 3.14) 
 - x()¶
- x(self: cudaq.Kernel, target: cudaq.QuakeValue) None
 - Apply a x gate to the given target qubit or qubits. - Parameters:
- target ( - QuakeValue) – The qubit or qubits to apply x to.
 - # Example: kernel = cudaq.make_kernel() # Allocate qubit/s to the `kernel`. qubits = kernel.qalloc(5) # Apply a x gate to the qubit/s. kernel.x(qubits) 
 - cx(*args, **kwargs)¶
- Overloaded function. - cx(self: cudaq.Kernel, control: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply a controlled-x operation to the given target qubit, with the provided control qubit/s. - Parameters:
- control ( - QuakeValue) – The control qubit/s for the operation.
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() # Our `control` may either be a single qubit or a register of qubits. control = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-x between the two qubits. kernel.cx(control=control, target=target) - cx(self: cudaq.Kernel, controls: List[cudaq.QuakeValue], target: cudaq.QuakeValue) None
 
 - Apply a controlled-x operation to the given target qubits, with the provided list of control qubits. - Parameters:
- controls (list[QuakeValue]) – The list of qubits to use as controls for the operation. 
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() controls = kernel.qalloc(2) target = kernel.qalloc() # Apply a controlled-x to the target qubit, with the two control qubits. kernel.cx(controls=[controls[0], controls[1]], target=target) 
 - y()¶
- y(self: cudaq.Kernel, target: cudaq.QuakeValue) None
 - Apply a y gate to the given target qubit or qubits. - Parameters:
- target ( - QuakeValue) – The qubit or qubits to apply y to.
 - # Example: kernel = cudaq.make_kernel() # Allocate qubit/s to the `kernel`. qubits = kernel.qalloc(5) # Apply a y gate to the qubit/s. kernel.y(qubits) 
 - cy(*args, **kwargs)¶
- Overloaded function. - cy(self: cudaq.Kernel, control: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply a controlled-y operation to the given target qubit, with the provided control qubit/s. - Parameters:
- control ( - QuakeValue) – The control qubit/s for the operation.
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() # Our `control` may either be a single qubit or a register of qubits. control = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-y between the two qubits. kernel.cy(control=control, target=target) - cy(self: cudaq.Kernel, controls: List[cudaq.QuakeValue], target: cudaq.QuakeValue) None
 
 - Apply a controlled-y operation to the given target qubits, with the provided list of control qubits. - Parameters:
- controls (list[QuakeValue]) – The list of qubits to use as controls for the operation. 
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() controls = kernel.qalloc(2) target = kernel.qalloc() # Apply a controlled-y to the target qubit, with the two control qubits. kernel.cy(controls=[controls[0], controls[1]], target=target) 
 - z()¶
- z(self: cudaq.Kernel, target: cudaq.QuakeValue) None
 - Apply a z gate to the given target qubit or qubits. - Parameters:
- target ( - QuakeValue) – The qubit or qubits to apply z to.
 - # Example: kernel = cudaq.make_kernel() # Allocate qubit/s to the `kernel`. qubits = kernel.qalloc(5) # Apply a z gate to the qubit/s. kernel.z(qubits) 
 - cz(*args, **kwargs)¶
- Overloaded function. - cz(self: cudaq.Kernel, control: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply a controlled-z operation to the given target qubit, with the provided control qubit/s. - Parameters:
- control ( - QuakeValue) – The control qubit/s for the operation.
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() # Our `control` may either be a single qubit or a register of qubits. control = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-z between the two qubits. kernel.cz(control=control, target=target) - cz(self: cudaq.Kernel, controls: List[cudaq.QuakeValue], target: cudaq.QuakeValue) None
 
 - Apply a controlled-z operation to the given target qubits, with the provided list of control qubits. - Parameters:
- controls (list[QuakeValue]) – The list of qubits to use as controls for the operation. 
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() controls = kernel.qalloc(2) target = kernel.qalloc() # Apply a controlled-z to the target qubit, with the two control qubits. kernel.cz(controls=[controls[0], controls[1]], target=target) 
 - h()¶
- h(self: cudaq.Kernel, target: cudaq.QuakeValue) None
 - Apply a h gate to the given target qubit or qubits. - Parameters:
- target ( - QuakeValue) – The qubit or qubits to apply h to.
 - # Example: kernel = cudaq.make_kernel() # Allocate qubit/s to the `kernel`. qubits = kernel.qalloc(5) # Apply a h gate to the qubit/s. kernel.h(qubits) 
 - ch(*args, **kwargs)¶
- Overloaded function. - ch(self: cudaq.Kernel, control: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply a controlled-h operation to the given target qubit, with the provided control qubit/s. - Parameters:
- control ( - QuakeValue) – The control qubit/s for the operation.
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() # Our `control` may either be a single qubit or a register of qubits. control = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-h between the two qubits. kernel.ch(control=control, target=target) - ch(self: cudaq.Kernel, controls: List[cudaq.QuakeValue], target: cudaq.QuakeValue) None
 
 - Apply a controlled-h operation to the given target qubits, with the provided list of control qubits. - Parameters:
- controls (list[QuakeValue]) – The list of qubits to use as controls for the operation. 
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() controls = kernel.qalloc(2) target = kernel.qalloc() # Apply a controlled-h to the target qubit, with the two control qubits. kernel.ch(controls=[controls[0], controls[1]], target=target) 
 - s()¶
- s(self: cudaq.Kernel, target: cudaq.QuakeValue) None
 - Apply a s gate to the given target qubit or qubits. - Parameters:
- target ( - QuakeValue) – The qubit or qubits to apply s to.
 - # Example: kernel = cudaq.make_kernel() # Allocate qubit/s to the `kernel`. qubits = kernel.qalloc(5) # Apply a s gate to the qubit/s. kernel.s(qubits) 
 - sdg()¶
- sdg(self: cudaq.Kernel, target: cudaq.QuakeValue) None
 - Apply a rotation on the z-axis of negative 90 degrees to the given target qubit/s. - Parameters:
- target ( - QuakeValue) – The qubit or qubits to apply an sdg gate to.
 - # Example: kernel = cudaq.make_kernel() # Allocate qubit/s to the `kernel`. qubits = kernel.qalloc(5) # Apply a sdg gate to the qubit/s. kernel.sdg(qubit) 
 - cs(*args, **kwargs)¶
- Overloaded function. - cs(self: cudaq.Kernel, control: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply a controlled-s operation to the given target qubit, with the provided control qubit/s. - Parameters:
- control ( - QuakeValue) – The control qubit/s for the operation.
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() # Our `control` may either be a single qubit or a register of qubits. control = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-s between the two qubits. kernel.cs(control=control, target=target) - cs(self: cudaq.Kernel, controls: List[cudaq.QuakeValue], target: cudaq.QuakeValue) None
 
 - Apply a controlled-s operation to the given target qubits, with the provided list of control qubits. - Parameters:
- controls (list[QuakeValue]) – The list of qubits to use as controls for the operation. 
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() controls = kernel.qalloc(2) target = kernel.qalloc() # Apply a controlled-s to the target qubit, with the two control qubits. kernel.cs(controls=[controls[0], controls[1]], target=target) 
 - t()¶
- t(self: cudaq.Kernel, target: cudaq.QuakeValue) None
 - Apply a t gate to the given target qubit or qubits. - Parameters:
- target ( - QuakeValue) – The qubit or qubits to apply t to.
 - # Example: kernel = cudaq.make_kernel() # Allocate qubit/s to the `kernel`. qubits = kernel.qalloc(5) # Apply a t gate to the qubit/s. kernel.t(qubits) 
 - tdg()¶
- tdg(self: cudaq.Kernel, target: cudaq.QuakeValue) None
 - Apply a rotation on the z-axis of negative 45 degrees to the given target qubit/s. - Parameters:
- target ( - QuakeValue) – The qubit or qubits to apply a tdg gate to.
 - # Example: kernel = cudaq.make_kernel() # Allocate qubit/s to the `kernel`. qubits = kernel.qalloc(5) # Apply a tdg gate to the qubit/s. kernel.tdg(qubit) 
 - ct(*args, **kwargs)¶
- Overloaded function. - ct(self: cudaq.Kernel, control: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply a controlled-t operation to the given target qubit, with the provided control qubit/s. - Parameters:
- control ( - QuakeValue) – The control qubit/s for the operation.
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() # Our `control` may either be a single qubit or a register of qubits. control = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-t between the two qubits. kernel.ct(control=control, target=target) - ct(self: cudaq.Kernel, controls: List[cudaq.QuakeValue], target: cudaq.QuakeValue) None
 
 - Apply a controlled-t operation to the given target qubits, with the provided list of control qubits. - Parameters:
- controls (list[QuakeValue]) – The list of qubits to use as controls for the operation. 
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() controls = kernel.qalloc(2) target = kernel.qalloc() # Apply a controlled-t to the target qubit, with the two control qubits. kernel.ct(controls=[controls[0], controls[1]], target=target) 
 - rx(*args, **kwargs)¶
- Overloaded function. - rx(self: cudaq.Kernel, parameter: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply rx to the given target qubit, parameterized by the provided kernel argument ( - parameter).- Parameters:
- parameter ( - QuakeValue) – The kernel argument to parameterize the rx gate over.
- target ( - QuakeValue) – The target qubit of the rx gate.
 
 - # Example: # Create a kernel that accepts a float, `angle`, as its argument. kernel, angle = cudaq.make_kernel(float) qubit = kernel.qalloc() # Apply an rx to the kernel at `angle`. kernel.rx(parameter=angle, target=qubit) - rx(self: cudaq.Kernel, parameter: float, target: cudaq.QuakeValue) None
 
 - Apply rx to the given target qubit, parameterized by the provided float value ( - parameter).- Parameters:
- parameter (float) – The float value to parameterize the rx gate over. 
- target ( - QuakeValue) – The target qubit of the rx gate.
 
 - # Example: kernel = cudaq.make_kernel() # Apply an rx to the kernel at a concrete parameter value. kernel.rx(parameter=3.14, target=qubit) 
 - crx(*args, **kwargs)¶
- Overloaded function. - crx(self: cudaq.Kernel, parameter: cudaq.QuakeValue, control: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply a controlled-rx operation to the given target qubit, with the provided control qubit/s. - Parameters:
- parameter ( - QuakeValue) – The kernel argument to parameterize the rx gate over.
- control ( - QuakeValue) – The control qubit/s for the operation.
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel, angle = cudaq.make_kernel(float) # Our `control` may either be a single qubit or a register of qubits. control = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-rx between the qubits. kernel.crx(parameter=angle, control=control, target=target) - crx(self: cudaq.Kernel, parameter: float, control: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply a controlled-rx operation to the given target qubit, with the provided control qubit/s. - Parameters:
- parameter (float) – The float value to parameterize the rx gate over. 
- control ( - QuakeValue) – The control qubit/s for the operation.
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() # Our `control` may either be a single qubit or a register of qubits. control = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-rx between the two qubits. kernel.crx(parameter=3.14, control=control, target=target) - crx(self: cudaq.Kernel, parameter: cudaq.QuakeValue, controls: List[cudaq.QuakeValue], target: cudaq.QuakeValue) None
 
 - Apply a controlled-rx operation to the given target qubit, with the provided list of control qubits. - Parameters:
- parameter (float) – The kernel argument to parameterize the rx gate over. 
- controls (list[QuakeValue]) – The control qubits for the operation. 
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel, angle = cudaq.make_kernel(float) c1 = kernel.qalloc() c2 = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-rx between the qubits. kernel.crx(parameter=angle, controls=[c1, c2], target=target) - crx(self: cudaq.Kernel, parameter: float, controls: List[cudaq.QuakeValue], target: cudaq.QuakeValue) None
 
 - Apply a controlled-rx operation to the given target qubit, with the provided list of control qubits. - Parameters:
- parameter (float) – The float value to parameterize the rx gate over. 
- controls (list[QuakeValue]) – The control qubits for the operation. 
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() c1 = kernel.qalloc() c2 = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-rx between the qubits. kernel.crx(parameter=3.14, controls=[c1, c2], target=target) 
 - ry(*args, **kwargs)¶
- Overloaded function. - ry(self: cudaq.Kernel, parameter: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply ry to the given target qubit, parameterized by the provided kernel argument ( - parameter).- Parameters:
- parameter ( - QuakeValue) – The kernel argument to parameterize the ry gate over.
- target ( - QuakeValue) – The target qubit of the ry gate.
 
 - # Example: # Create a kernel that accepts a float, `angle`, as its argument. kernel, angle = cudaq.make_kernel(float) qubit = kernel.qalloc() # Apply an ry to the kernel at `angle`. kernel.ry(parameter=angle, target=qubit) - ry(self: cudaq.Kernel, parameter: float, target: cudaq.QuakeValue) None
 
 - Apply ry to the given target qubit, parameterized by the provided float value ( - parameter).- Parameters:
- parameter (float) – The float value to parameterize the ry gate over. 
- target ( - QuakeValue) – The target qubit of the ry gate.
 
 - # Example: kernel = cudaq.make_kernel() # Apply an ry to the kernel at a concrete parameter value. kernel.ry(parameter=3.14, target=qubit) 
 - cry(*args, **kwargs)¶
- Overloaded function. - cry(self: cudaq.Kernel, parameter: cudaq.QuakeValue, control: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply a controlled-ry operation to the given target qubit, with the provided control qubit/s. - Parameters:
- parameter ( - QuakeValue) – The kernel argument to parameterize the ry gate over.
- control ( - QuakeValue) – The control qubit/s for the operation.
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel, angle = cudaq.make_kernel(float) # Our `control` may either be a single qubit or a register of qubits. control = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-ry between the qubits. kernel.cry(parameter=angle, control=control, target=target) - cry(self: cudaq.Kernel, parameter: float, control: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply a controlled-ry operation to the given target qubit, with the provided control qubit/s. - Parameters:
- parameter (float) – The float value to parameterize the ry gate over. 
- control ( - QuakeValue) – The control qubit/s for the operation.
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() # Our `control` may either be a single qubit or a register of qubits. control = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-ry between the two qubits. kernel.cry(parameter=3.14, control=control, target=target) - cry(self: cudaq.Kernel, parameter: cudaq.QuakeValue, controls: List[cudaq.QuakeValue], target: cudaq.QuakeValue) None
 
 - Apply a controlled-ry operation to the given target qubit, with the provided list of control qubits. - Parameters:
- parameter (float) – The kernel argument to parameterize the ry gate over. 
- controls (list[QuakeValue]) – The control qubits for the operation. 
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel, angle = cudaq.make_kernel(float) c1 = kernel.qalloc() c2 = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-ry between the qubits. kernel.cry(parameter=angle, controls=[c1, c2], target=target) - cry(self: cudaq.Kernel, parameter: float, controls: List[cudaq.QuakeValue], target: cudaq.QuakeValue) None
 
 - Apply a controlled-ry operation to the given target qubit, with the provided list of control qubits. - Parameters:
- parameter (float) – The float value to parameterize the ry gate over. 
- controls (list[QuakeValue]) – The control qubits for the operation. 
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() c1 = kernel.qalloc() c2 = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-ry between the qubits. kernel.cry(parameter=3.14, controls=[c1, c2], target=target) 
 - rz(*args, **kwargs)¶
- Overloaded function. - rz(self: cudaq.Kernel, parameter: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply rz to the given target qubit, parameterized by the provided kernel argument ( - parameter).- Parameters:
- parameter ( - QuakeValue) – The kernel argument to parameterize the rz gate over.
- target ( - QuakeValue) – The target qubit of the rz gate.
 
 - # Example: # Create a kernel that accepts a float, `angle`, as its argument. kernel, angle = cudaq.make_kernel(float) qubit = kernel.qalloc() # Apply an rz to the kernel at `angle`. kernel.rz(parameter=angle, target=qubit) - rz(self: cudaq.Kernel, parameter: float, target: cudaq.QuakeValue) None
 
 - Apply rz to the given target qubit, parameterized by the provided float value ( - parameter).- Parameters:
- parameter (float) – The float value to parameterize the rz gate over. 
- target ( - QuakeValue) – The target qubit of the rz gate.
 
 - # Example: kernel = cudaq.make_kernel() # Apply an rz to the kernel at a concrete parameter value. kernel.rz(parameter=3.14, target=qubit) 
 - crz(*args, **kwargs)¶
- Overloaded function. - crz(self: cudaq.Kernel, parameter: cudaq.QuakeValue, control: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply a controlled-rz operation to the given target qubit, with the provided control qubit/s. - Parameters:
- parameter ( - QuakeValue) – The kernel argument to parameterize the rz gate over.
- control ( - QuakeValue) – The control qubit/s for the operation.
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel, angle = cudaq.make_kernel(float) # Our `control` may either be a single qubit or a register of qubits. control = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-rz between the qubits. kernel.crz(parameter=angle, control=control, target=target) - crz(self: cudaq.Kernel, parameter: float, control: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply a controlled-rz operation to the given target qubit, with the provided control qubit/s. - Parameters:
- parameter (float) – The float value to parameterize the rz gate over. 
- control ( - QuakeValue) – The control qubit/s for the operation.
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() # Our `control` may either be a single qubit or a register of qubits. control = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-rz between the two qubits. kernel.crz(parameter=3.14, control=control, target=target) - crz(self: cudaq.Kernel, parameter: cudaq.QuakeValue, controls: List[cudaq.QuakeValue], target: cudaq.QuakeValue) None
 
 - Apply a controlled-rz operation to the given target qubit, with the provided list of control qubits. - Parameters:
- parameter (float) – The kernel argument to parameterize the rz gate over. 
- controls (list[QuakeValue]) – The control qubits for the operation. 
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel, angle = cudaq.make_kernel(float) c1 = kernel.qalloc() c2 = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-rz between the qubits. kernel.crz(parameter=angle, controls=[c1, c2], target=target) - crz(self: cudaq.Kernel, parameter: float, controls: List[cudaq.QuakeValue], target: cudaq.QuakeValue) None
 
 - Apply a controlled-rz operation to the given target qubit, with the provided list of control qubits. - Parameters:
- parameter (float) – The float value to parameterize the rz gate over. 
- controls (list[QuakeValue]) – The control qubits for the operation. 
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() c1 = kernel.qalloc() c2 = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-rz between the qubits. kernel.crz(parameter=3.14, controls=[c1, c2], target=target) 
 - r1(*args, **kwargs)¶
- Overloaded function. - r1(self: cudaq.Kernel, parameter: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply r1 to the given target qubit, parameterized by the provided kernel argument ( - parameter).- Parameters:
- parameter ( - QuakeValue) – The kernel argument to parameterize the r1 gate over.
- target ( - QuakeValue) – The target qubit of the r1 gate.
 
 - # Example: # Create a kernel that accepts a float, `angle`, as its argument. kernel, angle = cudaq.make_kernel(float) qubit = kernel.qalloc() # Apply an r1 to the kernel at `angle`. kernel.r1(parameter=angle, target=qubit) - r1(self: cudaq.Kernel, parameter: float, target: cudaq.QuakeValue) None
 
 - Apply r1 to the given target qubit, parameterized by the provided float value ( - parameter).- Parameters:
- parameter (float) – The float value to parameterize the r1 gate over. 
- target ( - QuakeValue) – The target qubit of the r1 gate.
 
 - # Example: kernel = cudaq.make_kernel() # Apply an r1 to the kernel at a concrete parameter value. kernel.r1(parameter=3.14, target=qubit) 
 - cr1(*args, **kwargs)¶
- Overloaded function. - cr1(self: cudaq.Kernel, parameter: cudaq.QuakeValue, control: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply a controlled-r1 operation to the given target qubit, with the provided control qubit/s. - Parameters:
- parameter ( - QuakeValue) – The kernel argument to parameterize the r1 gate over.
- control ( - QuakeValue) – The control qubit/s for the operation.
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel, angle = cudaq.make_kernel(float) # Our `control` may either be a single qubit or a register of qubits. control = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-r1 between the qubits. kernel.cr1(parameter=angle, control=control, target=target) - cr1(self: cudaq.Kernel, parameter: float, control: cudaq.QuakeValue, target: cudaq.QuakeValue) None
 
 - Apply a controlled-r1 operation to the given target qubit, with the provided control qubit/s. - Parameters:
- parameter (float) – The float value to parameterize the r1 gate over. 
- control ( - QuakeValue) – The control qubit/s for the operation.
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() # Our `control` may either be a single qubit or a register of qubits. control = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-r1 between the two qubits. kernel.cr1(parameter=3.14, control=control, target=target) - cr1(self: cudaq.Kernel, parameter: cudaq.QuakeValue, controls: List[cudaq.QuakeValue], target: cudaq.QuakeValue) None
 
 - Apply a controlled-r1 operation to the given target qubit, with the provided list of control qubits. - Parameters:
- parameter (float) – The kernel argument to parameterize the r1 gate over. 
- controls (list[QuakeValue]) – The control qubits for the operation. 
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel, angle = cudaq.make_kernel(float) c1 = kernel.qalloc() c2 = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-r1 between the qubits. kernel.cr1(parameter=angle, controls=[c1, c2], target=target) - cr1(self: cudaq.Kernel, parameter: float, controls: List[cudaq.QuakeValue], target: cudaq.QuakeValue) None
 
 - Apply a controlled-r1 operation to the given target qubit, with the provided list of control qubits. - Parameters:
- parameter (float) – The float value to parameterize the r1 gate over. 
- controls (list[QuakeValue]) – The control qubits for the operation. 
- target ( - QuakeValue) – The target qubit of the operation.
 
 - # Example: kernel = cudaq.make_kernel() c1 = kernel.qalloc() c2 = kernel.qalloc() target = kernel.qalloc() # Apply a controlled-r1 between the qubits. kernel.cr1(parameter=3.14, controls=[c1, c2], target=target) 
 - swap()¶
- swap(self: cudaq.Kernel, first: cudaq.QuakeValue, second: cudaq.QuakeValue) None
 - Swap the states of the provided qubits. - Parameters:
- first ( - QuakeValue) – The target qubit of the operation. Its state will be swapped with the- secondqubit.
- second ( - QuakeValue) – The target qubit of the operation. Its state will be swapped with the- firstqubit.
 
 - # Example: kernel = cudaq.make_kernel() first = kernel.qalloc() second = kernel.qalloc() # Place `first` in the |1> state, and leave `second` in |0>. kernel.x(first) # SWAP their states, resulting in the transformation: `|10> -> |01>`. kernel.swap(first, second) 
 - cswap(*args, **kwargs)¶
- Overloaded function. - cswap(self: cudaq.Kernel, control: cudaq.QuakeValue, first: cudaq.QuakeValue, second: cudaq.QuakeValue) None
 
 - Perform a controlled-SWAP operation between two qubits, if and only if the state of the provided - controlqubit/s is 1.- Parameters:
- control ( - QuakeValue) – The control qubit/s for the operation.
- first ( - QuakeValue) – The target qubit of the operation. Its state will swap with the- secondqubit, based on the state of the input- control.
- second ( - QuakeValue) – The target qubit of the operation. Its state will swap with the- firstqubit, based on the state of the input- control.
 
 - # Example: kernel = cudaq.make_kernel() # Allocate control qubit/s to the `kernel`. control = kernel.qalloc(2) # Allocate target qubits to the `kernel`. targets = kernel.qalloc(2) # Place the 0th target qubit in the 1-state. kernel.x(targets[0]) # Place our control/s in the 1-state. kernel.x(control) # Since the `control` is all in the 1-state, our target # states should undergo a SWAP. kernel.cswap(control, targets[0], targets[1]) - cswap(self: cudaq.Kernel, controls: List[cudaq.QuakeValue], first: cudaq.QuakeValue, second: cudaq.QuakeValue) None
 
 - Perform a controlled-SWAP operation between two qubits, if and only if the states of all provided - controlqubits are 1.- Parameters:
- controls (list[QuakeValue]) – The list of control qubits for the operation. 
- first ( - QuakeValue) – The target qubit of the operation. Its state will swap with the- secondqubit, based on the state of the input- controls.
- second ( - QuakeValue) – The target qubit of the operation. Its state will swap with the- firstqubit, based on the state of the input- controls.
 
 - # Example: kernel = cudaq.make_kernel() # Allocate control qubits to the `kernel`. controls = [kernel.qalloc(), kernel.qalloc()] # Allocate target qubits to the `kernel`. targets = kernel.qalloc(2) # Place the 0th target qubit in the 1-state. kernel.x(targets[0]) # Place our controls in the 1-state. kernel.x(controls[0]) kernel.x(controls[1]) # Since the `controls` are all in the 1-state, our target # states should undergo a SWAP. kernel.cswap(controls, targets[0], targets[1]) 
 - exp_pauli()¶
- exp_pauli(self: cudaq.Kernel, arg0: object, arg1: cudaq.QuakeValue, arg2: Union[str, cudaq.SpinOperator]) None
 - Apply a general Pauli tensor product rotation, - exp(i theta P), on the specified qubit register. The Pauli tensor product is provided as a string, e.g.- XXYXfor a 4-qubit term. The angle parameter can be provided as a concrete float or a- QuakeValue.
 - mx()¶
- mx(self: cudaq.Kernel, target: cudaq.QuakeValue, register_name: str = '') cudaq.QuakeValue
 - Measure the given qubit or qubits in the X-basis. The optional - register_namemay be used to retrieve results of this measurement after execution on the QPU. If the measurement call is saved as a variable, it will return a- QuakeValuehandle to the measurement instruction.- Parameters:
- target ( - QuakeValue) – The qubit or qubits to measure.
- register_name (Optional[str]) – The optional name to provide the results of the measurement. Defaults to an empty string. 
 
- Returns:
- A handle to this measurement operation in the MLIR. 
- Return type:
 - Note - Measurements may be applied both mid-circuit and at the end of the circuit. Mid-circuit measurements are currently only supported through the use of - c_if().- # Example: kernel = cudaq.make_kernel() # Allocate qubit/s to measure. qubit = kernel.qalloc() # Measure the qubit/s in the X-basis. kernel.mx(qubit) 
 - my()¶
- my(self: cudaq.Kernel, target: cudaq.QuakeValue, register_name: str = '') cudaq.QuakeValue
 - Measure the given qubit or qubits in the Y-basis. The optional - register_namemay be used to retrieve results of this measurement after execution on the QPU. If the measurement call is saved as a variable, it will return a- QuakeValuehandle to the measurement instruction.- Parameters:
- target ( - QuakeValue) – The qubit or qubits to measure.
- register_name (Optional[str]) – The optional name to provide the results of the measurement. Defaults to an empty string. 
 
- Returns:
- A handle to this measurement operation in the MLIR. 
- Return type:
 - Note - Measurements may be applied both mid-circuit and at the end of the circuit. Mid-circuit measurements are currently only supported through the use of - c_if().- # Example: kernel = cudaq.make_kernel() # Allocate qubit/s to measure. qubit = kernel.qalloc() # Measure the qubit/s in the Y-basis. kernel.my(qubit) 
 - mz()¶
- mz(self: cudaq.Kernel, target: cudaq.QuakeValue, register_name: str = '') cudaq.QuakeValue
 - Measure the given qubit or qubits in the Z-basis. The optional - register_namemay be used to retrieve results of this measurement after execution on the QPU. If the measurement call is saved as a variable, it will return a- QuakeValuehandle to the measurement instruction.- Parameters:
- target ( - QuakeValue) – The qubit or qubits to measure.
- register_name (Optional[str]) – The optional name to provide the results of the measurement. Defaults to an empty string. 
 
- Returns:
- A handle to this measurement operation in the MLIR. 
- Return type:
 - Note - Measurements may be applied both mid-circuit and at the end of the circuit. Mid-circuit measurements are currently only supported through the use of - c_if().- # Example: kernel = cudaq.make_kernel() # Allocate qubit/s to measure. qubit = kernel.qalloc() # Measure the qubit/s in the Z-basis. kernel.mz(target=qubit) 
 - c_if()¶
- c_if(self: cudaq.Kernel, measurement: cudaq.QuakeValue, function: function) None
 - Apply the - functionto the- Kernelif the provided single-qubit- measurementreturns the 1-state.- Parameters:
- measurement ( - QuakeValue) – The handle to the single qubit measurement instruction.
- function (Callable) – The function to conditionally apply to the - Kernel.
 
- Raises:
- RuntimeError – If the provided - measurementis on more than 1 qubit.
 - # Example: # Create a kernel and allocate a single qubit. kernel = cudaq.make_kernel() qubit = kernel.qalloc() # Define a function that performs certain operations on the # kernel and the qubit. def then_function(): kernel.x(qubit) kernel.x(qubit) # Measure the qubit. measurement = kernel.mz(qubit) # Apply `then_function` to the `kernel` if the qubit was measured # in the 1-state. kernel.c_if(measurement, then_function) 
 - for_loop(*args, **kwargs)¶
- Overloaded function. - for_loop(self: cudaq.Kernel, start: int, stop: int, function: function) None
 
 - Add a for loop that starts from the given - startinteger index, ends at the given- stopinteger index (non inclusive), applying the provided- functionwithin- selfat each iteration.- Parameters:
 - Note - This callable function must take as input an index variable that can be used within the body. - # Example: # Create a kernel and allocate (5) qubits to it. kernel = cudaq.make_kernel() qubits = kernel.qalloc(5) kernel.h(qubits[0]) def foo(index: int): """A function that will be applied to `kernel` in a for loop.""" kernel.cx(qubits[index], qubits[index+1]) # Create a for loop in `kernel`, providing a concrete number # of iterations to run (4). kernel.for_loop(start=0, stop=4, function=foo) # Execute the kernel. result = cudaq.sample(kernel) print(result) - for_loop(self: cudaq.Kernel, start: int, stop: cudaq.QuakeValue, function: function) None
 
 - Add a for loop that starts from the given - startinteger index, ends at the given- stop- QuakeValueindex (non inclusive), applying the provided- functionwithin- selfat each iteration.- Parameters:
- start (int) – The beginning iterator value for the for loop. 
- stop ( - QuakeValue) – The final iterator value (non-inclusive) for the for loop.
- function (Callable) – The callable function to apply within the - kernelat each iteration.
 
 - # Example: # Create a kernel function that takes an `int` argument. kernel, size = cudaq.make_kernel(int) # Parameterize the allocated number of qubits by the int. qubits = kernel.qalloc(size) kernel.h(qubits[0]) def foo(index: int): """A function that will be applied to `kernel` in a for loop.""" kernel.cx(qubits[index], qubits[index+1]) # Create a for loop in `kernel`, parameterized by the `size` # argument for its `stop` iterator. kernel.for_loop(start=0, stop=size-1, function=foo) # Execute the kernel, passing along a concrete value (5) for # the `size` argument. counts = cudaq.sample(kernel, 5) print(counts) - for_loop(self: cudaq.Kernel, start: cudaq.QuakeValue, stop: int, function: function) None
 
 - Add a for loop that starts from the given - start- QuakeValueindex, ends at the given- stopinteger index (non inclusive), applying the provided- functionwithin- selfat each iteration.- Parameters:
- start ( - QuakeValue) – The beginning iterator value for the for loop.
- stop (int) – The final iterator value (non-inclusive) for the for loop. 
- function (Callable) – The callable function to apply within the - kernelat each iteration.
 
 - # Example: # Create a kernel function that takes an `int` argument. kernel, start = cudaq.make_kernel(int) # Allocate 5 qubits. qubits = kernel.qalloc(5) kernel.h(qubits[0]) def foo(index: int): """A function that will be applied to `kernel` in a for loop.""" kernel.cx(qubits[index], qubits[index+1]) # Create a for loop in `kernel`, with its start index being # parameterized by the kernel's `start` argument. kernel.for_loop(start=start, stop=4, function=foo) # Execute the kernel, passing along a concrete value (0) for # the `start` argument. counts = cudaq.sample(kernel, 0) print(counts) - for_loop(self: cudaq.Kernel, start: cudaq.QuakeValue, stop: cudaq.QuakeValue, function: function) None
 
 - Add a for loop that starts from the given - start- QuakeValueindex, and ends at the given- stop- QuakeValueindex (non inclusive). The provided- functionwill be applied within- selfat each iteration.- Parameters:
- start ( - QuakeValue) – The beginning iterator value for the for loop.
- stop ( - QuakeValue) – The final iterator value (non-inclusive) for the for loop.
- function (Callable) – The callable function to apply within the - kernelat each iteration.
 
 - # Example: # Create a kernel function that takes two `int`'s as arguments. kernel, start, stop = cudaq.make_kernel(int, int) # Parameterize the allocated number of qubits by the int. qubits = kernel.qalloc(stop) kernel.h(qubits[0]) def foo(index: int): """A function that will be applied to `kernel` in a for loop.""" kernel.x(qubits[index]) # Create a for loop in `kernel`, parameterized by the `start` # and `stop` arguments. kernel.for_loop(start=start, stop=stop, function=foo) # Execute the kernel, passing along concrete values for the # `start` and `stop` arguments. counts = cudaq.sample(kernel, 3, 8) print(counts) 
 - adjoint()¶
- adjoint(self: cudaq.Kernel, target: cudaq.Kernel, \*args) None
 - Apply the adjoint of the - targetkernel in-place to- self.- Parameters:
- target ( - Kernel) – The kernel to take the adjoint of.
- *target_arguments (Optional[QuakeValue]) – The arguments to the - targetkernel. Leave empty if the- targetkernel doesn’t accept any arguments.
 
- Raises:
- RuntimeError – if the - *target_argumentspassed to the adjoint call don’t match the argument signature of- target.
 - # Example: target_kernel = cudaq.make_kernel() qubit = target_kernel.qalloc() target_kernel.x(qubit) # Apply the adjoint of `target_kernel` to `kernel`. kernel = cudaq.make_kernel() kernel.adjoint(target_kernel) 
 - control()¶
- control(self: cudaq.Kernel, target: cudaq.Kernel, control: cudaq.QuakeValue, \*args) None
 - Apply the - targetkernel as a controlled operation in-place to- self.Uses the provided- controlas control qubit/s for the operation.- Parameters:
- target ( - Kernel) – The kernel to apply as a controlled operation in-place to self.
- control ( - QuakeValue) – The control qubit or register to use when applying- target.
- *target_arguments (Optional[QuakeValue]) – The arguments to the - targetkernel. Leave empty if the- targetkernel doesn’t accept any arguments.
 
- Raises:
- RuntimeError – if the - *target_argumentspassed to the control call don’t match the argument signature of- target.
 - # Example: # Create a `Kernel` that accepts a qubit as an argument. # Apply an X-gate on that qubit. target_kernel, qubit = cudaq.make_kernel(cudaq.qubit) target_kernel.x(qubit) # Create another `Kernel` that will apply `target_kernel` # as a controlled operation. kernel = cudaq.make_kernel() control_qubit = kernel.qalloc() target_qubit = kernel.qalloc() # In this case, `control` performs the equivalent of a # controlled-X gate between `control_qubit` and `target_qubit`. kernel.control(target_kernel, control_qubit, target_qubit) 
 - apply_call()¶
- apply_call(self: cudaq.Kernel, target: cudaq.Kernel, \*args) None
 - Apply a call to the given - targetkernel within the function-body of- selfat the provided- target_arguments.- Parameters:
- target ( - Kernel) – The kernel to call from within- self.
- *target_arguments (Optional[QuakeValue]) – The arguments to the - targetkernel. Leave empty if the- targetkernel doesn’t accept any arguments.
 
- Raises:
- RuntimeError – if the - *argspassed to the apply call don’t match the argument signature of- target.
 - # Example: # Build a `Kernel` that's parameterized by a `cudaq.qubit`. target_kernel, other_qubit = cudaq.make_kernel(cudaq.qubit) target_kernel.x(other_qubit) # Build a `Kernel` that will call `target_kernel` within its # own function body. kernel = cudaq.make_kernel() qubit = kernel.qalloc() # Use `qubit` as the argument to `target_kernel`. kernel.apply_call(target_kernel, qubit) # The final measurement of `qubit` should return the 1-state. kernel.mz(qubit) 
 
Kernel Execution¶
- cudaq.sample()¶
- cudaq.sample(kernel: cudaq.Kernel, \*args, shots_count: int = 1000, noise_model: Optional[cudaq.NoiseModel] = None) Union[cudaq.SampleResult, List[cudaq.SampleResult]]
 - Sample the state generated by the provided - kernelat the given kernel- argumentsover the specified number of circuit executions (- shots_count). Each argument in- argumentsprovided can be a list or ndarray of arguments of the specified kernel argument type, and in this case, the- samplefunctionality will be broadcasted over all argument sets and a list of- sample_resultinstances will be returned.- Parameters:
- kernel ( - Kernel) – The- Kernelto execute- shots_counttimes on the QPU.
- *arguments (Optional[Any]) – The concrete values to evaluate the kernel function at. Leave empty if the kernel doesn’t accept any arguments. For example, if the kernel takes two - floatvalues as input, the- samplecall should be structured as- cudaq.sample(kernel, firstFloat, secondFloat). For broadcasting of the- samplefunction, the arguments should be structured as a- listor- ndarrayof argument values of the specified kernel argument type.
- shots_count (Optional[int]) – The number of kernel executions on the QPU. Defaults to 1000. Key-word only. 
- noise_model (Optional[ - NoiseModel]) – The optional- NoiseModelto add noise to the kernel execution on the simulator. Defaults to an empty noise model.
 
- Returns:
- A dictionary containing the measurement count results for the - Kernel, or a list of such results in the case of- samplefunction broadcasting.
- Return type:
- SampleResultor- list[SampleResult]
 
- cudaq.sample_async()¶
- cudaq.sample_async(kernel: cudaq.Kernel, \*args, shots_count: int = 1000, qpu_id: int = 0) cudaq.AsyncSampleResult
 - Asynchronously sample the state of the provided - kernelat the specified number of circuit executions (- shots_count). When targeting a quantum platform with more than one QPU, the optional- qpu_idallows for control over which QPU to enable. Will return a future whose results can be retrieved via- future.get().- Parameters:
- kernel ( - Kernel) – The- Kernelto execute- shots_counttimes on the QPU.
- *arguments (Optional[Any]) – The concrete values to evaluate the kernel function at. Leave empty if the kernel doesn’t accept any arguments. 
- shots_count (Optional[int]) – The number of kernel executions on the QPU. Defaults to 1000. Key-word only. 
- qpu_id (Optional[int]) – The optional identification for which QPU on the platform to target. Defaults to zero. Key-word only. 
 
- Returns:
- A dictionary containing the measurement count results for the - Kernel.
- Return type:
 
- cudaq.observe()¶
- cudaq.observe(kernel: cudaq.Kernel, spin_operator: Union[cudaq.SpinOperator, List[cudaq.SpinOperator]], \*args, shots_count: int = -1, noise_model: Optional[cudaq.NoiseModel] = None, execution: Optional[type] = None) Union[cudaq.ObserveResult, List[cudaq.ObserveResult], List[List[cudaq.ObserveResult]]]
 - Compute the expected value of the - spin_operatorwith respect to the- kernel. If the input- spin_operatoris a list of- SpinOperatorthen compute the expected value of every operator in the list and return a list of results. If the kernel accepts arguments, it will be evaluated with respect to- kernel(*arguments). Each argument in- argumentsprovided can be a list or ndarray of arguments of the specified kernel argument type, and in this case, the- observefunctionality will be broadcasted over all argument sets and a list of- observe_resultinstances will be returned. If both the input- spin_operatorand- argumentsare broadcast lists, a nested list of results over- argumentsthen- spin_operatorwill be returned.- Parameters:
- kernel ( - Kernel) – The- Kernelto evaluate the expectation value with respect to.
- spin_operator ( - SpinOperatoror- list[SpinOperator]) – The Hermitian spin operator to calculate the expectation of, or a list of such operators.
- *arguments (Optional[Any]) – The concrete values to evaluate the kernel function at. Leave empty if the kernel doesn’t accept any arguments. 
- shots_count (Optional[int]) – The number of shots to use for QPU execution. Defaults to -1 implying no shots-based sampling. Key-word only. 
- noise_model (Optional[ - NoiseModel]) – The optional- NoiseModelto add noise to the kernel execution on the simulator. Defaults to an empty noise model.
 
- Returns:
- A data-type containing the expectation value of the - spin_operatorwith respect to the- kernel(*arguments), or a list of such results in the case of- observefunction broadcasting. If- shots_countwas provided, the- ObserveResultwill also contain a- SampleResultdictionary.
- Return type:
 
- cudaq.observe_async()¶
- cudaq.observe_async(kernel: cudaq.Kernel, spin_operator: cudaq.SpinOperator, \*args, qpu_id: int = 0, shots_count: int = -1, noise_model: Optional[cudaq.NoiseModel] = None) cudaq.AsyncObserveResult
 - Compute the expected value of the - spin_operatorwith respect to the- kernelasynchronously. If the kernel accepts arguments, it will be evaluated with respect to- kernel(*arguments). When targeting a quantum platform with more than one QPU, the optional- qpu_idallows for control over which QPU to enable. Will return a future whose results can be retrieved via- future.get().- Parameters:
- kernel ( - Kernel) – The- Kernelto evaluate the expectation value with respect to.
- spin_operator ( - SpinOperator) – The Hermitian spin operator to calculate the expectation of.
- *arguments (Optional[Any]) – The concrete values to evaluate the kernel function at. Leave empty if the kernel doesn’t accept any arguments. 
- qpu_id (Optional[int]) – The optional identification for which QPU on the platform to target. Defaults to zero. Key-word only. 
- shots_count (Optional[int]) – The number of shots to use for QPU execution. Defaults to -1 implying no shots-based sampling. Key-word only. 
- noise_model (Optional[ - NoiseModel]) – The optional- NoiseModelto add noise to the kernel execution on the simulator. Defaults to an empty noise model.
 
- Returns:
- A future containing the result of the call to observe. 
- Return type:
 
- cudaq.get_state()¶
- cudaq.get_state(arg0: cudaq.Kernel, \*args) cudaq.State
 - Return the - Stateof the system after execution of the provided- kernel.- Parameters:
 - # Example: import numpy as np # Define a kernel that will produced the all |11...1> state. kernel = cudaq.make_kernel() qubits = kernel.qalloc(3) # Prepare qubits in the 1-state. kernel.x(qubits) # Get the state of the system. This will execute the provided kernel # and, depending on the selected target, will return the state as a # vector or matrix. state = cudaq.get_state(kernel) print(state) 
- cudaq.get_state_async()¶
- cudaq.get_state_async(kernel: cudaq.Kernel, \*args, qpu_id: int = 0) cudaq.AsyncStateResult
 - Asynchronously retrieve the state generated by the given quantum kernel. When targeting a quantum platform with more than one QPU, the optional - qpu_idallows for control over which QPU to enable. Will return a future whose results can be retrieved via- future.get().- Parameters:
- *arguments (Optional[Any]) – The concrete values to evaluate the kernel function at. Leave empty if the kernel doesn’t accept any arguments. 
- qpu_id (Optional[int]) – The optional identification for which QPU on the platform to target. Defaults to zero. Key-word only. 
 
- Returns:
- Quantum state (state vector or density matrix) data). 
- Return type:
 
- cudaq.vqe(*args, **kwargs)¶
- Overloaded function. - cudaq.vqe(kernel: cudaq.Kernel, spin_operator: cudaq.SpinOperator, optimizer: cudaq.optimizers.optimizer, parameter_count: int, shots: int = -1) Tuple[float, List[float]]
 
- cudaq.vqe(kernel: cudaq.Kernel, spin_operator: cudaq.SpinOperator, optimizer: cudaq.optimizers.optimizer, parameter_count: int, argument_mapper: function, shots: int = -1) Tuple[float, List[float]]
 
- cudaq.vqe(kernel: cudaq.Kernel, gradient_strategy: cudaq.gradients.gradient, spin_operator: cudaq.SpinOperator, optimizer: cudaq.optimizers.optimizer, parameter_count: int, shots: int = -1) Tuple[float, List[float]]
 
- cudaq.vqe(kernel: cudaq.Kernel, gradient_strategy: cudaq.gradients.gradient, spin_operator: cudaq.SpinOperator, optimizer: cudaq.optimizers.optimizer, parameter_count: int, argument_mapper: function, shots: int = -1) Tuple[float, List[float]]
 
 
Backend Configuration¶
- cudaq.has_target()¶
- 
Return true if the cudaq.Targetwith the given name exists.
- cudaq.get_target(*args, **kwargs)¶
- Overloaded function. - cudaq.get_target(arg0: str) cudaq.Target
 
 - Return the - cudaq.Targetwith the given name. Will raise an exception if the name is not valid.- cudaq.get_target() cudaq.Target
 
 - Return the - cudaq.Targetwith the given name. Will raise an exception if the name is not valid.
- cudaq.get_targets()¶
- cudaq.get_targets() List[cudaq.Target]
 - Return all available - cudaq.Targetinstances on the current system.
- cudaq.set_target(*args, **kwargs)¶
- Overloaded function. - cudaq.set_target(arg0: cudaq.Target, \*\*kwargs) None
 
 - Set the - cudaq.Targetto be used for CUDA Quantum kernel execution. Can provide optional, target-specific configuration data via Python kwargs.- cudaq.set_target(arg0: str, \*\*kwargs) None
 
 - Set the - cudaq.Targetwith given name to be used for CUDA Quantum kernel execution. Can provide optional, target-specific configuration data via Python kwargs.
- cudaq.set_noise()¶
- cudaq.set_noise(arg0: cudaq.NoiseModel) None
 - Set the underlying noise model. 
- cudaq.unset_noise()¶
- cudaq.unset_noise() None
 - Clear backend simulation from any existing noise models. 
- cudaq.initialize_cudaq()¶
- cudaq.initialize_cudaq(\*\*kwargs) None
 - Initialize the CUDA Quantum environment. 
Data Types¶
- class cudaq.Target¶
- The - cudaq.Targetrepresents the underlying infrastructure that CUDA Quantum kernels will execute on. Instances of- cudaq.Targetdescribe what simulator they may leverage, the quantum_platform required for execution, and a description for the target.- property description¶
- A string describing the features for this - cudaq.Target.
 - property name¶
- The name of the - cudaq.Target.
 - num_qpus()¶
- num_qpus(self: cudaq.Target) int
 - Return the number of QPUs available in this - cudaq.Target.
 - property platform¶
- The name of the quantum_platform implementation this - cudaq.Targetleverages.
 - property simulator¶
- The name of the simulator this - cudaq.Targetleverages. This will be empty for physical QPUs.
 
- class cudaq.State¶
- A data-type representing the quantum state of the internal simulator. Returns a state vector by default. If the target is set to - density-matrix-cpu, a density matrix will be returned.- dump()¶
- dump(self: cudaq.State) None
 - Print the state to the console. 
 - overlap(*args, **kwargs)¶
- Overloaded function. - overlap(self: cudaq.State, arg0: cudaq.State) float
 
 - Compute the overlap between the provided - State’s.- overlap(self: cudaq.State, arg0: numpy.ndarray) float
 
 - Compute the overlap between the provided - State’s.
 
- class cudaq.QuakeValue¶
- A - QuakeValuerepresents a handle to an individual function argument of a- Kernel, or a return value from an operation within it. As documented in- make_kernel(), a- QuakeValuecan hold values of the following types: int, float, list/List,- qubit, or- qreg. The- QuakeValuecan also hold kernel operations such as qubit allocations and measurements.- __add__(*args, **kwargs)¶
- Overloaded function. - __add__(self: cudaq.QuakeValue, other: float) cudaq.QuakeValue
 
 - Return the sum of - self(- QuakeValue) and- other(float).- Raises:
- RuntimeError – if the underlying - QuakeValuetype is not a float.
 - # Example: kernel, value = cudaq.make_kernel(float) new_value: QuakeValue = value + 5.0 - __add__(self: cudaq.QuakeValue, other: cudaq.QuakeValue) cudaq.QuakeValue
 
 - Return the sum of - self(- QuakeValue) and- other(- QuakeValue).- Raises:
- RuntimeError – if the underlying - QuakeValuetype is not the same type as- self.
 - # Example: kernel, values = cudaq.make_kernel(list) new_value: QuakeValue = values[0] + values[1] - __add__(self: cudaq.QuakeValue, other: int) cudaq.QuakeValue
 
 - Return the sum of - self(- QuakeValue) and- other(int).- Raises:
- RuntimeError – if the underlying - QuakeValuetype is not an- int.
 - # Example: kernel, values = cudaq.make_kernel(list) new_value: QuakeValue = values[0] + 2 
 - __radd__()¶
- __radd__(self: cudaq.QuakeValue, other: float) cudaq.QuakeValue
 - Return the sum of - other(float) and- self(- QuakeValue).- Raises:
- RuntimeError – if the underlying - QuakeValuetype is not a float.
 - # Example: kernel, value = cudaq.make_kernel(float) new_value: QuakeValue = 5.0 + value 
 - __sub__(*args, **kwargs)¶
- Overloaded function. - __sub__(self: cudaq.QuakeValue, other: float) cudaq.QuakeValue
 
 - Return the difference of - self(- QuakeValue) and- other(float).- Raises:
- RuntimeError – if the underlying - QuakeValuetype is not a float.
 - # Example: kernel, value = cudaq.make_kernel(float) new_value: QuakeValue = value - 5.0 - __sub__(self: cudaq.QuakeValue, other: cudaq.QuakeValue) cudaq.QuakeValue
 
 - Return the difference of - self(- QuakeValue) and- other(- QuakeValue).- Raises:
- RuntimeError – if the underlying - QuakeValuetype is not the same type as- self.
 - # Example: kernel, values = cudaq.make_kernel(list) new_value: QuakeValue = values[0] - values[1] - __sub__(self: cudaq.QuakeValue, other: int) cudaq.QuakeValue
 
 - Return the difference of - self(- QuakeValue) and- other(int).- Raises:
- RuntimeError – if the underlying - QuakeValuetype is not a int.
 - # Example: kernel, values = cudaq.make_kernel(list) new_value: QuakeValue = values[0] - 2 
 - __rsub__()¶
- __rsub__(self: cudaq.QuakeValue, other: float) cudaq.QuakeValue
 - Return the difference of - other(float) and- self(- QuakeValue).- Raises:
- RuntimeError – if the underlying - QuakeValuetype is not a float.
 - # Example: kernel, value = cudaq.make_kernel(float) new_value: QuakeValue = 5.0 - value 
 - __neg__()¶
- __neg__(self: cudaq.QuakeValue) cudaq.QuakeValue
 - Return the negation of - self(- QuakeValue).- Raises:
- RuntimeError – if the underlying - QuakeValuetype is not a float.
 - # Example: kernel, value = cudaq.make_kernel(float) new_value: QuakeValue = -value 
 - __mul__(*args, **kwargs)¶
- Overloaded function. - __mul__(self: cudaq.QuakeValue, other: float) cudaq.QuakeValue
 
 - Return the product of - self(- QuakeValue) with- other(float).- Raises:
- RuntimeError – if the underlying - QuakeValuetype is not a float.
 - # Example: kernel, value = cudaq.make_kernel(float) new_value: QuakeValue = value * 5.0 - __mul__(self: cudaq.QuakeValue, other: cudaq.QuakeValue) cudaq.QuakeValue
 
 - Return the product of - self(- QuakeValue) with- other(- QuakeValue).- Raises:
- RuntimeError – if the underlying - QuakeValuetype is not a float.
 - # Example: kernel, values = cudaq.make_kernel(list) new_value: QuakeValue = values[0] * values[1] 
 - __rmul__()¶
- __rmul__(self: cudaq.QuakeValue, other: float) cudaq.QuakeValue
 - Return the product of - other(float) with- self(- QuakeValue).- Raises:
- RuntimeError – if the underlying - QuakeValuetype is not a float.
 - # Example: kernel, value = cudaq.make_kernel(float) new_value: QuakeValue = 5.0 * value 
 - __getitem__(*args, **kwargs)¶
- Overloaded function. - __getitem__(self: cudaq.QuakeValue, index: int) cudaq.QuakeValue
 
 - Return the element of - selfat the provided- index.- Note - Only - listor- qregtype- QuakeValue’s may be indexed.- Parameters:
- index (int) – The element of - selfthat you’d like to return.
- Returns:
- A new - QuakeValuefor the- index-th element of- self.
- Return type:
- Raises:
- RuntimeError – if - selfis a non-subscriptable- QuakeValue.
 - __getitem__(self: cudaq.QuakeValue, index: cudaq.QuakeValue) cudaq.QuakeValue
 
 - Return the element of - selfat the provided- index.- Note - Only - listor- qregtype- QuakeValue’s may be indexed.- Parameters:
- index (QuakeValue) – The element of - selfthat you’d like to return.
- Returns:
- A new - QuakeValuefor the- index-th element of- self.
- Return type:
- Raises:
- RuntimeError – if - selfis a non-subscriptable- QuakeValue.
 
 - slice()¶
- slice(self: cudaq.QuakeValue, start: int, count: int) cudaq.QuakeValue
 - Return a slice of the given - QuakeValueas a new- QuakeValue.- Note - The underlying - QuakeValuemust be a- listor- veq.- Parameters:
- Returns:
- A new - QuakeValuecontaining a slice of- selffrom the- start-th element to the- start + count-th element.
- Return type:
 
 
- class cudaq.qubit¶
- The data-type representing a qubit argument to a - Kernelfunction.- # Example: kernel, qubit = cudaq.make_kernel(cudaq.qubit) 
- class cudaq.qreg¶
- The data-type representing a register of qubits as an argument to a - Kernelfunction.- # Example: kernel, qreg = cudaq.make_kernel(cudaq.qreg) 
- class cudaq.ComplexMatrix¶
- The - ComplexMatrixis a thin wrapper around a matrix of complex<double> elements.- __getitem__(*args, **kwargs)¶
- Overloaded function. - __getitem__(self: cudaq.ComplexMatrix, arg0: int, arg1: int) complex
 
 - Return the matrix element at i, j. - __getitem__(self: cudaq.ComplexMatrix, arg0: Tuple[int, int]) complex
 
 - Return the matrix element at i, j. 
 - __str__()¶
- __str__(self: cudaq.ComplexMatrix) str
 - Write this matrix to a string representation. 
 - minimal_eigenvalue()¶
- minimal_eigenvalue(self: cudaq.ComplexMatrix) complex
 - Return the lowest eigenvalue for this - ComplexMatrix.
 
- class cudaq.SpinOperator¶
- __eq__()¶
- __eq__(self: cudaq.SpinOperator, other: cudaq.SpinOperator) bool
 - Return true if the two - SpinOperator’s are equal. Equality does not consider the coefficients.
 - __add__(*args, **kwargs)¶
- Overloaded function. - __add__(self: cudaq.SpinOperator, other: cudaq.SpinOperator) cudaq.SpinOperator
 
 - Add the given - SpinOperatorto this one and return result as a new- SpinOperator.- __add__(self: cudaq.SpinOperator, other: float) cudaq.SpinOperator
 
 - Add a double to the given - SpinOperatorand return result as a new- SpinOperator.
 - __radd__()¶
- __radd__(self: cudaq.SpinOperator, other: float) cudaq.SpinOperator
 - Add a - SpinOperatorto the given double and return result as a new- SpinOperator.
 - __sub__(*args, **kwargs)¶
- Overloaded function. - __sub__(self: cudaq.SpinOperator, other: cudaq.SpinOperator) cudaq.SpinOperator
 
 - Subtract the given - SpinOperatorfrom this one and return result as a new- SpinOperator.- __sub__(self: cudaq.SpinOperator, other: float) cudaq.SpinOperator
 
 - Subtract a double from the given - SpinOperatorand return result as a new- SpinOperator.
 - __rsub__()¶
- __rsub__(self: cudaq.SpinOperator, other: float) cudaq.SpinOperator
 - Subtract a - SpinOperatorfrom the given double and return result as a new- SpinOperator.
 - __mul__(*args, **kwargs)¶
- Overloaded function. - __mul__(self: cudaq.SpinOperator, other: cudaq.SpinOperator) cudaq.SpinOperator
 
 - Multiply the given - SpinOperator’s together and return result as a new- SpinOperator.- __mul__(self: cudaq.SpinOperator, other: float) cudaq.SpinOperator
 
 - Multiply the - SpinOperatorby the given double and return result as a new- SpinOperator.- __mul__(self: cudaq.SpinOperator, other: complex) cudaq.SpinOperator
 
 - Multiply the - SpinOperatorby the given complex value and return result as a new- SpinOperator.
 - __rmul__(*args, **kwargs)¶
- Overloaded function. - __rmul__(self: cudaq.SpinOperator, other: float) cudaq.SpinOperator
 
 - Multiply the double by the given - SpinOperatorand return result as a new- SpinOperator.- __rmul__(self: cudaq.SpinOperator, other: complex) cudaq.SpinOperator
 
 - Multiply the complex value by the given - SpinOperatorand return result as a new- SpinOperator.
 - __iter__()¶
- __iter__(self: cudaq.SpinOperator) Iterator
 - Loop through each term of this - SpinOperator.
 - distribute_terms()¶
- distribute_terms(self: cudaq.SpinOperator, chunk_count: int) List[cudaq.SpinOperator]
 - Return a list of - SpinOperatorrepresenting a distribution of the terms in this- SpinOperatorinto- chunk_countsized chunks.
 - dump()¶
- dump(self: cudaq.SpinOperator) None
 - Print a string representation of this - SpinOperator.
 - for_each_pauli()¶
- for_each_pauli(self: cudaq.SpinOperator, function: function) None
 - For a single - SpinOperatorterm, apply the given function to each pauli element in the term. The function must have- void(pauli, int)signature where- pauliis the Pauli matrix type and the- intis the qubit index.
 - for_each_term()¶
- for_each_term(self: cudaq.SpinOperator, function: function) None
 - Apply the given function to all terms in this - SpinOperator. The input function must have- void(SpinOperator)signature.
 - static from_word()¶
- from_word(word: str) cudaq.SpinOperator
 - Return a - SpinOperatorcorresponding to the provided Pauli- word.- # Example: # The first and third qubits will receive a Pauli X, # while the second qubit will receive a Pauli Y. word = "XYX" # Convert word to spin operator. spin_operator = cudaq.SpinOperator.from_word(word) print(spin_operator) # prints: `[1+0j] XYX` 
 - get_coefficient()¶
- get_coefficient(self: cudaq.SpinOperator) complex
 - Return the coefficient of this - SpinOperator. Must be a- SpinOperatorwith one term, otherwise an exception is thrown.
 - get_qubit_count()¶
- get_qubit_count(self: cudaq.SpinOperator) int
 - Return the number of qubits this - SpinOperatoris on.
 - get_raw_data()¶
- get_raw_data(self: cudaq.SpinOperator) Tuple[List[List[bool]], List[complex]]
 - Return the raw data of this - SpinOperator.
 - get_term_count()¶
- get_term_count(self: cudaq.SpinOperator) int
 - Return the number of terms in this - SpinOperator.
 - is_identity()¶
- is_identity(self: cudaq.SpinOperator) bool
 - Returns a bool indicating if this - SpinOperatoris equal to the identity.
 - static random()¶
- random(qubit_count: int, term_count: int, seed: int = 354125263) cudaq.SpinOperator
 - Return a random - SpinOperatoron the given number of qubits (- qubit_count) and composed of the given number of terms (- term_count). An optional seed value may also be provided.
 - serialize()¶
- serialize(self: cudaq.SpinOperator) List[float]
 - Return a serialized representation of the - SpinOperator. Specifically, this encoding is via a vector of doubles. The encoding is as follows: for each term, a list of doubles where the ith element is a 3.0 for a Y, a 1.0 for a X, and a 2.0 for a Z on qubit i, followed by the real and imaginary part of the coefficient. Each term is appended to the array forming one large 1d array of doubles. The array is ended with the total number of terms represented as a double.
 - to_matrix()¶
- to_matrix(self: cudaq.SpinOperator) cudaq.ComplexMatrix
 - Return - selfas a- ComplexMatrix.
 - to_sparse_matrix()¶
- to_sparse_matrix(self: cudaq.SpinOperator) Tuple[List[complex], List[int], List[int]]
 - Return - selfas a sparse matrix. This representation is a- Tuple[list[complex], list[int], list[int]], encoding the non-zero values, rows, and columns of the matrix. This format is supported by- scipy.sparse.csr_array.
 - to_string()¶
- to_string(self: cudaq.SpinOperator) str
 - Return a string representation of this - SpinOperator.
 
- spin.i()¶
- i(target: int) cudaq.SpinOperator
 - Return an identity - SpinOperatoron the given target qubit index.
- spin.x()¶
- x(target: int) cudaq.SpinOperator
 - Return an X - SpinOperatoron the given target qubit index.
- spin.y()¶
- y(target: int) cudaq.SpinOperator
 - Return a Y - SpinOperatoron the given target qubit index.
- spin.z()¶
- z(target: int) cudaq.SpinOperator
 - Return a Z - SpinOperatoron the given target qubit index.
- class cudaq.SampleResult¶
- A data-type containing the results of a call to - sample(). This includes all measurement counts data from both mid-circuit and terminal measurements.- Note - At this time, mid-circuit measurements are not directly supported. Mid-circuit measurements may only be used if they are passed through to - c_if.- register_names¶
- A list of the names of each measurement register that are stored in - self.- Type:
- List[str] 
 
 - __getitem__()¶
- __getitem__(self: cudaq.SampleResult, bitstring: str) int
 - Return the measurement counts for the given - bitstring.
 - __iter__()¶
- __iter__(self: cudaq.SampleResult) Iterator
 - Iterate through the - SampleResultdictionary.
 - __len__()¶
- __len__(self: cudaq.SampleResult) int
 - Return the number of elements in - self. Equivalent to the number of uniquely measured bitstrings.
 - clear()¶
- clear(self: cudaq.SampleResult) None
 - Clear out all metadata from - self.
 - count()¶
- count(self: cudaq.SampleResult, bitstring: str, register_name: str = '__global__') int
 - Return the number of times the given bitstring was observed. - Parameters:
- Returns:
- The number of times the given bitstring was measured during the experiment. 
- Return type:
 
 - dump()¶
- dump(self: cudaq.SampleResult) None
 - Print a string of the raw measurement counts data to the terminal. 
 - expectation()¶
- expectation(self: cudaq.SampleResult, register_name: str = '__global__') float
 - Return the expectation value in the Z-basis of the - Kernelthat was sampled.
 - expectation_z()¶
- expectation_z(self: cudaq.SampleResult, register_name: str = '__global__') float
 - Return the expectation value in the Z-basis of the - Kernelthat was sampled.
 - get_marginal_counts()¶
- get_marginal_counts(self: cudaq.SampleResult, marginal_indices: List[int], \*, register_name: str = '__global__') cudaq.SampleResult
 - Extract the measurement counts data for the provided subset of qubits ( - marginal_indices).- Parameters:
- Returns:
- A new - SampleResultdictionary containing the extracted measurement data.
- Return type:
 
 - get_register_counts()¶
- get_register_counts(self: cudaq.SampleResult, register_name: str) cudaq.SampleResult
 - Extract the provided sub-register ( - register_name) as a new- SampleResult.
 - get_sequential_data()¶
- get_sequential_data(self: cudaq.SampleResult, register_name: str = '__global__') List[str]
 - Return the data from the given register ( - register_name) as it was collected sequentially. A list of measurement results, not collated into a map.
 - items()¶
- items(self: cudaq.SampleResult) Iterator
 - Return the key/value pairs in this - SampleResultdictionary.
 - most_probable()¶
- most_probable(self: cudaq.SampleResult, register_name: str = '__global__') str
 - Return the bitstring that was measured most frequently in the experiment. 
 - probability()¶
- probability(self: cudaq.SampleResult, bitstring: str, register_name: str = '__global__') float
 - Return the probability of measuring the given - bitstring.- Parameters:
- Returns:
- The probability of measuring the given - bitstring. Equivalent to the proportion of the total times the bitstring was measured vs. the number of experiments (- shots_count).
- Return type:
 
 - values()¶
- values(self: cudaq.SampleResult) Iterator
 - Return all values (the counts) in this - SampleResultdictionary.
 
- class cudaq.AsyncSampleResult¶
- A data-type containing the results of a call to - sample_async(). The- AsyncSampleResultmodels a future-like type, whose- SampleResultmay be returned via an invocation of the- getmethod. This kicks off a wait on the current thread until the results are available. See future for more information on this programming pattern.- get()¶
- get(self: cudaq.AsyncSampleResult) cudaq.SampleResult
 - Return the - SampleResultfrom the asynchronous sample execution.
 
- class cudaq.ObserveResult¶
- A data-type containing the results of a call to - observe(). This includes any measurement counts data, as well as the global expectation value of the user-defined- spin_operator.- counts(*args, **kwargs)¶
- Overloaded function. - counts(self: cudaq.ObserveResult) cudaq.SampleResult
 
 - Returns a - SampleResultdictionary with the measurement results from the experiment. The result for each individual term of the- spin_operatoris stored in its own measurement register. Each register name corresponds to the string representation of the spin term (without any coefficients).- counts(self: cudaq.ObserveResult, sub_term: cudaq.SpinOperator) cudaq.SampleResult
 
 - Given a - sub_termof the global- spin_operatorthat was passed to- observe(), return its measurement counts.- Parameters:
- sub_term ( - SpinOperator) – An individual sub-term of the- spin_operator.
- Returns:
- The measurement counts data for the individual - sub_term.
- Return type:
 
 - dump()¶
- dump(self: cudaq.ObserveResult) None
 - Dump the raw data from the - SampleResultthat are stored in- ObserveResultto the terminal.
 - expectation(*args, **kwargs)¶
- Overloaded function. - expectation(self: cudaq.ObserveResult) float
 
 - Return the expectation value of the - spin_operatorthat was provided in- observe().- expectation(self: cudaq.ObserveResult, sub_term: cudaq.SpinOperator) float
 
 - Return the expectation value of an individual - sub_termof the global- spin_operatorthat was passed to- observe().- Parameters:
- sub_term ( - SpinOperator) – An individual sub-term of the- spin_operator.
- Returns:
- The expectation value of the - sub_termwith respect to the- Kernelthat was passed to- observe().
- Return type:
 
 - expectation_z(*args, **kwargs)¶
- Overloaded function. - expectation_z(self: cudaq.ObserveResult) float
 
 - Return the expectation value of the - spin_operatorthat was provided in- observe().- Note - expectation_zhas been deprecated in favor of- expectation.- expectation_z(self: cudaq.ObserveResult, sub_term: cudaq.SpinOperator) float
 
 - Return the expectation value of an individual - sub_termof the global- spin_operatorthat was passed to- observe().- Note - expectation_zhas been deprecated in favor of- expectation.- Parameters:
- sub_term ( - SpinOperator) – An individual sub-term of the- spin_operator.
- Returns:
- The expectation value of the - sub_termwith respect to the- Kernelthat was passed to- observe().
- Return type:
 
 - get_spin()¶
- get_spin(self: cudaq.ObserveResult) cudaq.SpinOperator
 - Return the - SpinOperatorcorresponding to this- ObserveResult.
 
- class cudaq.AsyncObserveResult¶
- A data-type containing the results of a call to - observe_async().- The - AsyncObserveResultcontains a future, whose- ObserveResultmay be returned via an invocation of the- getmethod.- This kicks off a wait on the current thread until the results are available. - See future for more information on this programming pattern. - get()¶
- get(self: cudaq.AsyncObserveResult) cudaq.ObserveResult
 - Returns the - ObserveResultfrom the asynchronous observe execution.
 
- class cudaq.AsyncStateResult¶
- A data-type containing the results of a call to - get_state_async(). The- AsyncStateResultmodels a future-like type, whose- Statemay be returned via an invocation of the- getmethod. This kicks off a wait on the current thread until the results are available. See future for more information on this programming pattern.- get()¶
- get(self: cudaq.AsyncStateResult) cudaq.State
 - Return the - Statefrom the asynchronous- get_stateaccessor execution.
 
- class cudaq.OptimizationResult¶
Optimizers¶
- class cudaq.optimizers.optimizer¶
- class cudaq.optimizers.GradientDescent¶
- property initial_parameters¶
- Set the initial parameter values for the optimization. 
 - property lower_bounds¶
- Set the lower value bound for the optimization parameters. 
 - property max_iterations¶
- Set the maximum number of optimizer iterations. 
 - optimize()¶
- optimize(self: cudaq.optimizers.GradientDescent, dimensions: int, function: function) Tuple[float, List[float]]
 - Run - cudaq.optimize()on the provided objective function.
 - property upper_bounds¶
- Set the upper value bound for the optimization parameters. 
 
- class cudaq.optimizers.COBYLA¶
- property initial_parameters¶
- Set the initial parameter values for the optimization. 
 - property lower_bounds¶
- Set the lower value bound for the optimization parameters. 
 - property max_iterations¶
- Set the maximum number of optimizer iterations. 
 - optimize()¶
- optimize(self: cudaq.optimizers.COBYLA, dimensions: int, function: function) Tuple[float, List[float]]
 - Run - cudaq.optimize()on the provided objective function.
 - property upper_bounds¶
- Set the upper value bound for the optimization parameters. 
 
- class cudaq.optimizers.NelderMead¶
- property initial_parameters¶
- Set the initial parameter values for the optimization. 
 - property lower_bounds¶
- Set the lower value bound for the optimization parameters. 
 - property max_iterations¶
- Set the maximum number of optimizer iterations. 
 - optimize()¶
- optimize(self: cudaq.optimizers.NelderMead, dimensions: int, function: function) Tuple[float, List[float]]
 - Run - cudaq.optimize()on the provided objective function.
 - property upper_bounds¶
- Set the upper value bound for the optimization parameters. 
 
- class cudaq.optimizers.LBFGS¶
- property initial_parameters¶
- Set the initial parameter values for the optimization. 
 - property lower_bounds¶
- Set the lower value bound for the optimization parameters. 
 - property max_iterations¶
- Set the maximum number of optimizer iterations. 
 - optimize()¶
- optimize(self: cudaq.optimizers.LBFGS, dimensions: int, function: function) Tuple[float, List[float]]
 - Run - cudaq.optimize()on the provided objective function.
 - property upper_bounds¶
- Set the upper value bound for the optimization parameters. 
 
Gradients¶
- class cudaq.gradients.gradient¶
- class cudaq.gradients.CentralDifference¶
- compute()¶
- compute(self: cudaq.gradients.gradient, parameter_vector: List[float], function: function, funcAtX: float) List[float]
 - Compute the gradient of the provided - parameter_vectorwith respect to its loss function, using the- CentralDifferencemethod.
 
Noisy Simulation¶
- class cudaq.NoiseModel¶
- The - NoiseModeldefines a set of- KrausChannel’s applied to specific qubits after the invocation of specified quantum operations.- __init__()¶
- __init__(self: cudaq.NoiseModel) None
 - Construct an empty noise model. 
 - add_channel()¶
- add_channel(self: cudaq.NoiseModel, operator: str, qubits: List[int], channel: cudaq.KrausChannel) None
 - Add the given - KrausChannelto be applied after invocation of the specified quantum operation.- Parameters:
- operator (str) – The quantum operator to apply the noise channel to. 
- qubits (List[int]) – The qubit/s to apply the noise channel to. 
- channel (cudaq.KrausChannel) – The - KrausChannelto apply to the specified- operatoron the specified- qubits.
 
 
 - get_channels()¶
- get_channels(self: cudaq.NoiseModel, operator: str, qubits: List[int]) List[cudaq.KrausChannel]
 - Return the - KrausChannel’s that make up this noise model.
 
- class cudaq.BitFlipChannel¶
- Models the decoherence of the qubit state. Its constructor expects a float value, - probability, representing the probability that the qubit flips from the 1-state to the 0-state, or vice versa. E.g, the probability of a random X-180 rotation being applied to the qubit. The probability of the qubit remaining in the same state is therefore- 1 - probability.- __init__()¶
- __init__(self: cudaq.BitFlipChannel, probability: float) None
 - Initialize the - BitFlipChannelwith the provided- probability.
 
- class cudaq.PhaseFlipChannel¶
- Models the decoherence of the qubit phase. Its constructor expects a float value, - probability, representing the probability of a random Z-180 rotation being applied to the qubit. The probability of the qubit phase remaining untouched is therefore- 1 - probability.- __init__()¶
- __init__(self: cudaq.PhaseFlipChannel, probability: float) None
 - Initialize the - PhaseFlipChannelwith the provided- probability.
 
- class cudaq.DepolarizationChannel¶
- Models the decoherence of the qubit state and phase into a mixture of the computational basis states, - |0>and- |1>. Its constructor expects a float value,- probability, representing the probability that this decay will occur. The qubit will remain untouched, therefore, with a probability of- 1 - probability.- __init__()¶
- __init__(self: cudaq.DepolarizationChannel, probability: float) None
 - Initialize the - DepolarizationChannelwith the provided- probability.
 
- class cudaq.AmplitudeDampingChannel¶
- Models the dissipation of energy due to system interactions with the environment. Its constructor expects a float value, - probability, representing the probablity that the qubit will decay to its ground state. The probability of the qubit remaining in the same state is therefore- 1 - probability.- __init__()¶
- __init__(self: cudaq.AmplitudeDampingChannel, probability: float) None
 - Initialize the - AmplitudeDampingChannelwith the provided- probability.
 
- class cudaq.KrausChannel¶
- The - KrausChannelis composed of a list of- KrausOperator’s and is applied to a specific qubit or set of qubits.- __getitem__()¶
- __getitem__(self: cudaq.KrausChannel, index: int) cudaq.KrausOperator
 - Return the - KrausOperatorat the given index in this- KrausChannel.
 - append()¶
- append(self: cudaq.KrausChannel, arg0: cudaq.KrausOperator) None
 - Add a - KrausOperatorto this- KrausChannel.
 
- class cudaq.KrausOperator¶
- The - KrausOperatoris represented by a matrix and serves as an element of a quantum channel such that- Sum Ki Ki^dag = I.- property col_count¶
- The number of columns in the matrix representation of this - KrausOperator.
 - property row_count¶
- The number of rows in the matrix representation of this - KrausOperator.
 
MPI Submodule¶
- cudaq.mpi.all_gather(*args, **kwargs)¶
- Overloaded function. - Gather and scatter the - locallist of floating-point numbers, returning a concatenation of all lists across all ranks. The total global list size must be provided.- Gather and scatter the - locallist of integers, returning a concatenation of all lists across all ranks. The total global list size must be provided.
- cudaq.mpi.broadcast()¶
- 
Broadcast an array from a process (rootRank) to all other processes. The size of broadcast array must be provided.