52 using namespace cimod;
55 temp[
"type"] =
"BinaryQuadraticModel";
58 std::size_t num_variables =
temp[
"num_variables"];
59 std::vector<size_t> variables(num_variables);
61 std::iota(variables.begin(), variables.end(), 0);
62 temp[
"variable_labels"] = variables;
66 BinaryQuadraticModel<size_t, FloatType, CimodDataType>::from_serializable(
68 return bqm.change_vartype(Vartype::SPIN,
false);
75 if (
obj.at(
"type") !=
"BinaryPolynomialModel") {
76 throw std::runtime_error(
"Type must be \"BinaryPolynomialModel\".\n");
79 if (
obj.at(
"poly_key_distance_list").size() !=
80 obj.at(
"poly_value_list").size()) {
81 throw std::runtime_error(
82 "The sizes of key_list and value_list must match each other");
85 const std::size_t num_variables =
obj[
"variables"].size();
87 static_cast<int64_t>(
obj[
"poly_value_list"].size());
90 throw std::runtime_error(
"The interaction is empty.");
94 obj[
"poly_key_distance_list"];
96 obj[
"poly_value_list"];
103#pragma omp parallel for
105 std::vector<Index>
temp;
109 std::sort(
temp.begin(),
temp.end());
113 const std::vector<Index> &variables =
obj[
"variables"];
114#pragma omp parallel for
116 std::vector<Index>
temp;
118 temp.push_back(variables[
it]);
120 std::sort(
temp.begin(),
temp.end());
124 return std::tuple<cimod::PolynomialKeyList<Index>,