qiskit-documentation/docs/api/qiskit/0.25/qiskit.aqua.components.orac...

107 lines
7.4 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: CustomCircuitOracle
description: API reference for qiskit.aqua.components.oracles.CustomCircuitOracle
in_page_toc_min_heading_level: 1
python_api_type: class
python_api_name: qiskit.aqua.components.oracles.CustomCircuitOracle
---
# qiskit.aqua.components.oracles.CustomCircuitOracle
<Class id="qiskit.aqua.components.oracles.CustomCircuitOracle" isDedicatedPage={true} github="https://github.com/qiskit-community/qiskit-aqua/tree/stable/0.9/qiskit/aqua/components/oracles/custom_circuit_oracle.py" signature="CustomCircuitOracle(variable_register, output_register, circuit, ancillary_register=None, evaluate_classically_callback=None)" modifiers="class">
The Custom Circuit-based Quantum Oracle.
A helper class to, in essence, wrap a user-supplied quantum circuit such that it becomes of type [`Oracle`](qiskit.aqua.components.oracles.Oracle "qiskit.aqua.components.oracles.Oracle") and hence can be used by algorithms taking an oracle as input.
This class is provided for easy creation of oracles using custom circuits. It is geared towards programmatically experimenting with oracles, where a user directly provides a QuantumCircuit object, corresponding to the intended oracle function, together with the various QuantumRegister objects involved.
<Admonition title="Note" type="note">
The evaluate\_classically\_callback param is to supply a method to classically evaluate the function (as encoded by the oracle) on a particular input bitstring. For example for an oracle that encodes 3-SAT problems, this method would determine classically if an input variable assignment would satisfy the 3-SAT expression.
The input bitstring is a string of 1s and 0s corresponding to the input variable(s). The return should be a (bool, List\[int]) tuple where the bool corresponds to the return value of the *binary* function encoded by the oracle, and the List\[int] should just be a different representation of the input variable assignment, which should be equivalent to the bitstring or a quantum measurement.
Examples of existing implementations, for reference, can be found in other oracles such as [`TruthTableOracle.evaluate_classically()`](qiskit.aqua.components.oracles.TruthTableOracle#evaluate_classically "qiskit.aqua.components.oracles.TruthTableOracle.evaluate_classically") and [`LogicalExpressionOracle.evaluate_classically()`](qiskit.aqua.components.oracles.LogicalExpressionOracle#evaluate_classically "qiskit.aqua.components.oracles.LogicalExpressionOracle.evaluate_classically").
</Admonition>
**Parameters**
* **variable\_register** (`QuantumRegister`) The register holding variable qubit(s) for the oracle function
* **output\_register** (`QuantumRegister`) The register holding output qubit(s) for the oracle function
* **circuit** (`QuantumCircuit`) The quantum circuit corresponding to the intended oracle function
* **ancillary\_register** (`Optional`\[`QuantumRegister`]) The register holding ancillary qubit(s)
* **evaluate\_classically\_callback** (`Optional`\[`Callable`\[\[`str`], `Tuple`\[`bool`, `List`\[`int`]]]]) The classical callback function for evaluating the oracle, for example, to use with [`Grover`](qiskit.aqua.algorithms.Grover "qiskit.aqua.algorithms.Grover")s search
**Raises**
[**AquaError**](qiskit.aqua.AquaError "qiskit.aqua.AquaError") Invalid input
### \_\_init\_\_
<Function id="qiskit.aqua.components.oracles.CustomCircuitOracle.__init__" signature="__init__(variable_register, output_register, circuit, ancillary_register=None, evaluate_classically_callback=None)">
**Parameters**
* **variable\_register** (`QuantumRegister`) The register holding variable qubit(s) for the oracle function
* **output\_register** (`QuantumRegister`) The register holding output qubit(s) for the oracle function
* **circuit** (`QuantumCircuit`) The quantum circuit corresponding to the intended oracle function
* **ancillary\_register** (`Optional`\[`QuantumRegister`]) The register holding ancillary qubit(s)
* **evaluate\_classically\_callback** (`Optional`\[`Callable`\[\[`str`], `Tuple`\[`bool`, `List`\[`int`]]]]) The classical callback function for evaluating the oracle, for example, to use with [`Grover`](qiskit.aqua.algorithms.Grover "qiskit.aqua.algorithms.Grover")s search
**Raises**
[**AquaError**](qiskit.aqua.AquaError "qiskit.aqua.AquaError") Invalid input
</Function>
## Methods
| | |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
| [`__init__`](#qiskit.aqua.components.oracles.CustomCircuitOracle.__init__ "qiskit.aqua.components.oracles.CustomCircuitOracle.__init__")(variable\_register, output\_register, …) | **type variable\_register**`QuantumRegister` |
| [`construct_circuit`](#qiskit.aqua.components.oracles.CustomCircuitOracle.construct_circuit "qiskit.aqua.components.oracles.CustomCircuitOracle.construct_circuit")() | Construct the oracle circuit. |
## Attributes
| | |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- |
| [`ancillary_register`](#qiskit.aqua.components.oracles.CustomCircuitOracle.ancillary_register "qiskit.aqua.components.oracles.CustomCircuitOracle.ancillary_register") | returns ancillary register |
| [`circuit`](#qiskit.aqua.components.oracles.CustomCircuitOracle.circuit "qiskit.aqua.components.oracles.CustomCircuitOracle.circuit") | |
| [`output_register`](#qiskit.aqua.components.oracles.CustomCircuitOracle.output_register "qiskit.aqua.components.oracles.CustomCircuitOracle.output_register") | returns output register |
| [`variable_register`](#qiskit.aqua.components.oracles.CustomCircuitOracle.variable_register "qiskit.aqua.components.oracles.CustomCircuitOracle.variable_register") | returns variable register |
### ancillary\_register
<Attribute id="qiskit.aqua.components.oracles.CustomCircuitOracle.ancillary_register">
returns ancillary register
</Attribute>
### circuit
<Attribute id="qiskit.aqua.components.oracles.CustomCircuitOracle.circuit" />
### construct\_circuit
<Function id="qiskit.aqua.components.oracles.CustomCircuitOracle.construct_circuit" signature="construct_circuit()">
Construct the oracle circuit.
**Returns**
A quantum circuit for the oracle.
**Return type**
[QuantumCircuit](qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit")
</Function>
### output\_register
<Attribute id="qiskit.aqua.components.oracles.CustomCircuitOracle.output_register">
returns output register
</Attribute>
### variable\_register
<Attribute id="qiskit.aqua.components.oracles.CustomCircuitOracle.variable_register">
returns variable register
</Attribute>
</Class>