Ejemplo n.º 1
0
    def synth(
        self,
        registerless: bool = True,
        synthesizer: Optional[Callable[[ClassicalElement],
                                       QuantumCircuit]] = None,
    ) -> QuantumCircuit:
        """Synthesis the logic network into a :class:`~qiskit.circuit.QuantumCircuit`.

        Args:
            registerless: Default ``True``. If ``False`` uses the parameter names to create
            registers with those names. Otherwise, creates a circuit with a flat quantum register.
            synthesizer: Optional. If None tweedledum's pkrm_synth is used.

        Returns:
            QuantumCircuit: A circuit implementing the logic network.
        """
        if registerless:
            qregs = None
        else:
            qregs = self.qregs

        if synthesizer:
            return synthesizer(self)

        return tweedledum2qiskit(pkrm_synth(self.truth_table[0]),
                                 name=self.name,
                                 qregs=qregs)
Ejemplo n.º 2
0
    def synth(
        self,
        registerless: bool = True,
        synthesizer: Optional[Callable[["BooleanExpression"],
                                       QuantumCircuit]] = None,
    ):
        """Synthesis the logic network into a :class:`~qiskit.circuit.QuantumCircuit`.

        Args:
            registerless: Default ``True``. If ``False`` uses the parameter names
                to create registers with those names. Otherwise, creates a circuit with a flat
                quantum register.
            synthesizer: A callable that takes self and returns a Tweedledum
                circuit.
        Returns:
            QuantumCircuit: A circuit implementing the logic network.
        """
        if registerless:
            qregs = None
        else:
            qregs = None  # TODO: Probably from self._tweedledum_bool_expression._signature

        if synthesizer is None:
            from tweedledum.synthesis import pkrm_synth  # pylint: disable=no-name-in-module
            from .utils import tweedledum2qiskit

            truth_table = self._tweedledum_bool_expression.truth_table(
                output_bit=0)
            return tweedledum2qiskit(pkrm_synth(truth_table),
                                     name=self.name,
                                     qregs=qregs)
        return synthesizer(self)
Ejemplo n.º 3
0
            def synthesizer(boolean_expression):
                from tweedledum.synthesis import pkrm_synth
                from qiskit.circuit.classicalfunction.utils import tweedledum2qiskit

                truth_table = boolean_expression._tweedledum_bool_expression.truth_table(
                    output_bit=0
                )
                tweedledum_circuit = pkrm_synth(truth_table, {"pkrm_synth": {"phase_esop": True}})
                return tweedledum2qiskit(tweedledum_circuit)