qiskit-documentation/docs/api/qiskit/classicalfunction.mdx

105 lines
5.6 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: classicalfunction (latest version)
description: API reference for qiskit.circuit.classicalfunction in the latest version of qiskit
in_page_toc_min_heading_level: 2
python_api_type: module
python_api_name: qiskit.circuit.classicalfunction
---
<span id="module-qiskit.circuit.classicalfunction" />
<span id="qiskit-circuit-classicalfunction" />
<span id="classicalfunction-compiler-qiskit-circuit-classicalfunction" />
# ClassicalFunction compiler
`qiskit.circuit.classicalfunction`
## Overview
The classical function compiler provides the necessary tools to map a classical potentially irreversible functions into quantum circuits. Below is a simple example of how to synthesize a simple boolean function defined using Python into a QuantumCircuit:
> ```python
> from qiskit.circuit.classicalfunction import classical_function
> from qiskit.circuit.classicalfunction.types import Int1
>
> @classical_function
> def grover_oracle(a: Int1, b: Int1, c: Int1, d: Int1) -> Int1:
> return (not a and b and not c and d)
>
> quantum_circuit = grover_oracle.synth(registerless=False)
> quantum_circuit.draw('text')
>
> a: ──o──
> │
> b: ──■──
> │
> c: ──o──
> │
> d: ──■──
> ┌─┴─┐
> return: ┤ X ├
> └───┘
> ```
Following Qiskits little-endian bit ordering convention, the left-most bit (`a`) is the most significant bit and the right-most bit (`d`) is the least significant bit.
<Admonition title="Warning" type="caution">
The functionality of qiskit.circuit.classicalfunction requires tweedledum, which isnt available on all platforms (up to Python version 3.11). See [tweedledum installation guide](https://github.com/boschmitt/tweedledum/tree/master?tab=readme-ov-file#installation) for more details.
</Admonition>
## Supplementary Information
### Tweedledum
Tweedledum is a C++-17 header-only library that implements a large set of reversible (and quantum) synthesis, optimization, and mapping algorithms. The classical function compiler relies on it and its dependencies to both represent logic networks and synthesize them into quantum circuits.
### ClassicalFunction data types
At the moment, the only type supported by the classical\_function compilers is `qiskit.circuit.classicalfunction.types.Int1`. The classical function function to parse *must* include type hints (just `Int1` for now). The resulting gate will be a gate in the size of the sum of all the parameters and the return.
The type `Int1` means the classical function will only operate at bit level.
## ClassicalFunction compiler API
<span id="classical-function" />
### classical\_function
Decorator for a classical function that returns a ClassicalFunction object.
#### classical\_function
<Function id="qiskit.circuit.classicalfunction.classical_function" github="https://github.com/Qiskit/qiskit/tree/stable/1.2/qiskit/circuit/classicalfunction/__init__.py#L124-L140" signature="qiskit.circuit.classicalfunction.classical_function(func)">
Parses and type checks the callable `func` to compile it into an `ClassicalFunction` that can be synthesized into a `QuantumCircuit`.
**Parameters**
**func** (*callable*) A callable (with type hints) to compile into an `ClassicalFunction`.
**Returns**
An object that can synthesis into a QuantumCircuit (via `synth()` method).
**Return type**
[ClassicalFunction](qiskit.circuit.classicalfunction.ClassicalFunction "qiskit.circuit.classicalfunction.ClassicalFunction")
</Function>
### ClassicalFunction
| | |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
| [`ClassicalFunction`](qiskit.circuit.classicalfunction.ClassicalFunction "qiskit.circuit.classicalfunction.ClassicalFunction")(source\[, name]) | Represent a classical function and its logic network. |
| [`BooleanExpression`](qiskit.circuit.classicalfunction.BooleanExpression "qiskit.circuit.classicalfunction.BooleanExpression")(expression\[, name, var\_order]) | The Boolean Expression gate. |
### Exceptions
| | |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- |
| [`ClassicalFunctionCompilerTypeError`](qiskit.circuit.classicalfunction.ClassicalFunctionCompilerTypeError "qiskit.circuit.classicalfunction.ClassicalFunctionCompilerTypeError")(\*message) | ClassicalFunction compiler type error. |
| [`ClassicalFunctionParseError`](qiskit.circuit.classicalfunction.ClassicalFunctionParseError "qiskit.circuit.classicalfunction.ClassicalFunctionParseError")(\*message) | ClassicalFunction compiler parse error. |
| [`ClassicalFunctionCompilerTypeError`](qiskit.circuit.classicalfunction.ClassicalFunctionCompilerTypeError "qiskit.circuit.classicalfunction.ClassicalFunctionCompilerTypeError")(\*message) | ClassicalFunction compiler type error. |