Loading examples/simple/simple-objective-function.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ int main(int argc, char **argv) { // need to provide ansatz, Operator, and qreg auto objective = createObjectiveFunction( ansatz, H, q, n_variational_params, {{"gradient-strategy", "parameter-shift-gradient"}}); {{"gradient-strategy", "parameter-shift"}}); // Create the Optimizer. auto optimizer = createOptimizer("nlopt", {{"nlopt-optimizer", "l-bfgs"}}); Loading handlers/qcor_syntax_handler.cpp +11 −20 Original line number Diff line number Diff line Loading @@ -84,17 +84,17 @@ void QCORSyntaxHandler::GetReplacement( auto new_src = qcor::run_token_collector(PP, Toks, bufferNames); auto random_string = [](size_t length) { auto randchar = []() -> char { const char charset[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"; const size_t max_index = (sizeof(charset) - 1); return charset[rand() % max_index]; }; std::string str(length, 0); std::generate_n(str.begin(), length, randchar); return str; }; // auto random_string = [](size_t length) { // auto randchar = []() -> char { // const char charset[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" // "abcdefghijklmnopqrstuvwxyz"; // const size_t max_index = (sizeof(charset) - 1); // return charset[rand() % max_index]; // }; // std::string str(length, 0); // std::generate_n(str.begin(), length, randchar); // return str; // }; // Rewrite the original function OS << "void " << kernel_name << "(" << program_arg_types[0] << " " << program_parameters[0]; Loading Loading @@ -147,18 +147,9 @@ void QCORSyntaxHandler::GetReplacement( OS << ", " << program_arg_types[i] << " " << program_parameters[i]; } OS << ") {\n"; if (shots > 0) { OS << "quantum::set_backend(\"" << qpu_name << "\", " << shots << ");\n"; } else { OS << "quantum::set_backend(\"" << qpu_name << "\");\n"; } OS << "if (!parent_kernel) {\n"; OS << "parent_kernel = " "qcor::__internal__::create_composite(kernel_name);\n"; for (auto bname : bufferNames) { auto random_buffer_name = "qreg_" + random_string(10); OS << bname << ".setNameAndStore(\"" << random_buffer_name << "\");\n"; } OS << "}\n"; OS << "quantum::set_current_program(parent_kernel);\n"; OS << new_src << "\n"; Loading runtime/kernel/quantum_kernel.hpp +1 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,7 @@ public: Derived derived(args...); derived.disable_destructor = true; derived(args...); xacc::internal_compiler::execute_pass_manager(); os << derived.parent_kernel->toString() << "\n"; } Loading runtime/qrt/qrt.cpp +14 −4 Original line number Diff line number Diff line Loading @@ -69,6 +69,8 @@ void execute_pass_manager() { } } // std::cout << "PASS: " << ::quantum::program->nInstructions() << "\n"; passManager.applyPlacement(::quantum::program); } Loading Loading @@ -331,9 +333,17 @@ void exp(qreg q, const double theta, std::shared_ptr<xacc::Observable> H) { xasm_src = xasm_src + "\n" + basis_front.str() + cnot_front.str(); // FIXME, we assume real coefficients, if its zero, // check that the imag part is not zero and use it if (std::fabs(std::real(spinInst.coeff())) > 1e-12) { xasm_src = xasm_src + "Rz(q[" + std::to_string(qidxs[qidxs.size() - 1]) + "], " + std::to_string(std::real(spinInst.coeff()) * theta) + ");\n"; } else if (std::fabs(std::imag(spinInst.coeff())) > 1e-12) { xasm_src = xasm_src + "Rz(q[" + std::to_string(qidxs[qidxs.size() - 1]) + "], " + std::to_string(std::imag(spinInst.coeff()) * theta) + ");\n"; } xasm_src = xasm_src + cnot_back.str() + basis_back.str(); } Loading @@ -346,7 +356,7 @@ void exp(qreg q, const double theta, std::shared_ptr<xacc::Observable> H) { xasm_src = "__qpu__ void " + name + "(qbit q) {\n" + xasm_src + "}"; // std::cout << xasm_src << "\n"; // std::cout << "FROMQRT: " << theta << "\n" << xasm_src << "\n"; auto xasm = xacc::getCompiler("xasm"); auto tmp = xasm->compile(xasm_src)->getComposites()[0]; Loading Loading
examples/simple/simple-objective-function.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ int main(int argc, char **argv) { // need to provide ansatz, Operator, and qreg auto objective = createObjectiveFunction( ansatz, H, q, n_variational_params, {{"gradient-strategy", "parameter-shift-gradient"}}); {{"gradient-strategy", "parameter-shift"}}); // Create the Optimizer. auto optimizer = createOptimizer("nlopt", {{"nlopt-optimizer", "l-bfgs"}}); Loading
handlers/qcor_syntax_handler.cpp +11 −20 Original line number Diff line number Diff line Loading @@ -84,17 +84,17 @@ void QCORSyntaxHandler::GetReplacement( auto new_src = qcor::run_token_collector(PP, Toks, bufferNames); auto random_string = [](size_t length) { auto randchar = []() -> char { const char charset[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"; const size_t max_index = (sizeof(charset) - 1); return charset[rand() % max_index]; }; std::string str(length, 0); std::generate_n(str.begin(), length, randchar); return str; }; // auto random_string = [](size_t length) { // auto randchar = []() -> char { // const char charset[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" // "abcdefghijklmnopqrstuvwxyz"; // const size_t max_index = (sizeof(charset) - 1); // return charset[rand() % max_index]; // }; // std::string str(length, 0); // std::generate_n(str.begin(), length, randchar); // return str; // }; // Rewrite the original function OS << "void " << kernel_name << "(" << program_arg_types[0] << " " << program_parameters[0]; Loading Loading @@ -147,18 +147,9 @@ void QCORSyntaxHandler::GetReplacement( OS << ", " << program_arg_types[i] << " " << program_parameters[i]; } OS << ") {\n"; if (shots > 0) { OS << "quantum::set_backend(\"" << qpu_name << "\", " << shots << ");\n"; } else { OS << "quantum::set_backend(\"" << qpu_name << "\");\n"; } OS << "if (!parent_kernel) {\n"; OS << "parent_kernel = " "qcor::__internal__::create_composite(kernel_name);\n"; for (auto bname : bufferNames) { auto random_buffer_name = "qreg_" + random_string(10); OS << bname << ".setNameAndStore(\"" << random_buffer_name << "\");\n"; } OS << "}\n"; OS << "quantum::set_current_program(parent_kernel);\n"; OS << new_src << "\n"; Loading
runtime/kernel/quantum_kernel.hpp +1 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,7 @@ public: Derived derived(args...); derived.disable_destructor = true; derived(args...); xacc::internal_compiler::execute_pass_manager(); os << derived.parent_kernel->toString() << "\n"; } Loading
runtime/qrt/qrt.cpp +14 −4 Original line number Diff line number Diff line Loading @@ -69,6 +69,8 @@ void execute_pass_manager() { } } // std::cout << "PASS: " << ::quantum::program->nInstructions() << "\n"; passManager.applyPlacement(::quantum::program); } Loading Loading @@ -331,9 +333,17 @@ void exp(qreg q, const double theta, std::shared_ptr<xacc::Observable> H) { xasm_src = xasm_src + "\n" + basis_front.str() + cnot_front.str(); // FIXME, we assume real coefficients, if its zero, // check that the imag part is not zero and use it if (std::fabs(std::real(spinInst.coeff())) > 1e-12) { xasm_src = xasm_src + "Rz(q[" + std::to_string(qidxs[qidxs.size() - 1]) + "], " + std::to_string(std::real(spinInst.coeff()) * theta) + ");\n"; } else if (std::fabs(std::imag(spinInst.coeff())) > 1e-12) { xasm_src = xasm_src + "Rz(q[" + std::to_string(qidxs[qidxs.size() - 1]) + "], " + std::to_string(std::imag(spinInst.coeff()) * theta) + ");\n"; } xasm_src = xasm_src + cnot_back.str() + basis_back.str(); } Loading @@ -346,7 +356,7 @@ void exp(qreg q, const double theta, std::shared_ptr<xacc::Observable> H) { xasm_src = "__qpu__ void " + name + "(qbit q) {\n" + xasm_src + "}"; // std::cout << xasm_src << "\n"; // std::cout << "FROMQRT: " << theta << "\n" << xasm_src << "\n"; auto xasm = xacc::getCompiler("xasm"); auto tmp = xasm->compile(xasm_src)->getComposites()[0]; Loading