"""N Body Library (:mod:`qurry.recipe.n_body`)"""fromqiskitimportQuantumRegisterfromqiskit.circuit.libraryimportBlueprintCircuit
[docs]classOneBody(BlueprintCircuit):"""The product state circuit `one_body`. This is an abstract class."""@propertydefnum_qubits(self)->int:"""The number of qubits. Returns: The number of qubits in the circuit. """returnsuper().num_qubits@num_qubits.setterdefnum_qubits(self,num_qubits:int)->None:"""Set the number of qubits. Note that this changes the registers of the circuit. Args: num_qubits: The new number of qubits. """ifnum_qubits!=self.num_qubits:self._invalidate()self.qregs=[]ifnum_qubitsisnotNoneandnum_qubits>0:self.qregs=[QuantumRegister(num_qubits,name="q")]def_check_configuration(self,raise_on_failure:bool=True)->bool:"""Check if the current configuration is valid."""valid=Trueifself.num_qubitsisNone:valid=Falseifraise_on_failure:raiseAttributeError("The number of qubits has not been set.")returnvalid
[docs]classTwoBody(BlueprintCircuit):"""The entangled circuit `two_body`. This is an abstract class."""@propertydefnum_qubits(self)->int:"""The number of qubits. Returns: The number of qubits in the circuit. """returnsuper().num_qubits@num_qubits.setterdefnum_qubits(self,num_qubits:int)->None:"""Set the number of qubits. Note that this changes the registers of the circuit. Args: num_qubits: The new number of qubits. Raises: ValueError: If num_qubits is not even. """ifnum_qubits%2!=0:raiseValueError("Number of qubits must be even.")ifnum_qubits!=self.num_qubits:self._invalidate()self.qregs=[]ifnum_qubitsisnotNoneandnum_qubits>0:self.qregs=[QuantumRegister(num_qubits,name="q")]def_check_configuration(self,raise_on_failure:bool=True)->bool:"""Check if the current configuration is valid."""valid=Trueifself.num_qubitsisNone:valid=Falseifraise_on_failure:raiseAttributeError("The number of qubits has not been set.")returnvalid