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)
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)
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)