def convert_qubo_to_openfermion_ising( qubo: BinaryQuadraticModel) -> IsingOperator: """Converts dimod BinaryQuadraticModel to OpenFermion IsingOperator object. The resulting Openfermion IsingOperator has the following property: For every bitstring, its expected value is the same as the energy of the original QUBO. In order to ensure this, we had to add a minus sign for the coefficients of the linear terms coming from dimod conversion. For more context about conventions used please refer to note in `convert_measurements_to_sampleset` docstring. Args: qubo: Object we want to convert Returns: IsingOperator: IsingOperator representation of the input qubo. """ linear_coeffs, quadratic_coeffs, offset = qubo.to_ising() list_of_ising_strings = [f"{offset}[]"] for i, value in linear_coeffs.items(): list_of_ising_strings.append(f"{-value}[Z{i}]") for (i, j), value in quadratic_coeffs.items(): list_of_ising_strings.append(f"{value}[Z{i} Z{j}]") ising_string = " + ".join(list_of_ising_strings) return IsingOperator(ising_string)
def convert_qubo_to_openfermion_ising(qubo: BinaryQuadraticModel): """Converts dimod BinaryQuadraticModel to OpenFermion IsingOperator object. Args: qubo: Object we want to convert Returns: IsingOperator: IsingOperator representation of the input qubo. """ linear_coeffs, quadratic_coeffs, offset = qubo.to_ising() list_of_ising_strings = [f"{offset}[]"] for i, value in linear_coeffs.items(): list_of_ising_strings.append(f"{value}[Z{i}]") for (i, j), value in quadratic_coeffs.items(): list_of_ising_strings.append(f"{value}[Z{i} Z{j}]") ising_string = " + ".join(list_of_ising_strings) return IsingOperator(ising_string)