Commit e346dbbc authored by Mccaskey, Alex's avatar Mccaskey, Alex
Browse files

[WIP] started clean up of runtime library. updates to objective function to...


[WIP] started clean up of runtime library. updates to objective function to handle new quantum kernel class re-write

Signed-off-by: Mccaskey, Alex's avatarAlex McCaskey <mccaskeyaj@ornl.gov>
parent 631ecf09
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -23,11 +23,11 @@ find_package(Clang 10.0.0 REQUIRED)
find_package(XACC REQUIRED)

add_subdirectory(handlers)
add_subdirectory(runtime)
add_subdirectory(runtimev2)
add_subdirectory(tools)
add_subdirectory(lib)

if (QCOR_BUILD_TESTS)
  add_subdirectory(examples)
  #add_subdirectory(examples)
endif()
+0 −1
Original line number Diff line number Diff line
@@ -4,7 +4,6 @@
#include "qcor.hpp"
#include "qrt.hpp"
#include <memory>
// #include <xacc_internal_compiler.hpp>

namespace qcor {
static constexpr double pi = 3.141592653589793238;
+39 −0
Original line number Diff line number Diff line
set(LIBRARY_NAME qcor)

file(GLOB SRC observable/qcor_observable.cpp 
              optimizer/qcor_optimizer.cpp 
              objectives/objective_function.cpp
              execution/taskInitiate.cpp
              utils/qcor_utils.cpp)

add_library(${LIBRARY_NAME} SHARED ${SRC})

target_include_directories(${LIBRARY_NAME} PUBLIC . qrt 
                            observable 
                            optimizer 
                            kernel 
                            objectives 
                            execution 
                            utils)

target_link_libraries(${LIBRARY_NAME} PUBLIC xacc::xacc xacc::quantum_gate qrt xacc::pauli)

xacc_configure_library_rpath(${LIBRARY_NAME})

file(GLOB HEADERS qcor.hpp 
                  observable/qcor_observable.hpp 
                  optimizer/qcor_optimizer.hpp 
                  kernel/quantum_kernel.hpp 
                  objectives/objective_function.hpp 
                  execution/taskInitiate.hpp
                  utils/qcor_utils.hpp)
                  
install(FILES ${HEADERS} DESTINATION include/qcor)
install(TARGETS ${LIBRARY_NAME} DESTINATION lib)

if (QCOR_BUILD_TESTS)
  add_subdirectory(tests)
endif()

add_subdirectory(objectives)
add_subdirectory(qrt)
 No newline at end of file
+46 −0
Original line number Diff line number Diff line
#include "taskInitiate.hpp"

namespace qcor {

Handle taskInitiate(std::shared_ptr<ObjectiveFunction> objective,
                    std::shared_ptr<Optimizer> optimizer,
                    std::function<double(const std::vector<double>,
                                         std::vector<double> &)> &&opt_function,
                    const int nParameters) {
  return std::async(std::launch::async, [=]() -> ResultsBuffer {
    qcor::OptFunction f(opt_function, nParameters);
    auto results = optimizer->optimize(f);
    ResultsBuffer rb;
    rb.q_buffer = objective->get_qreg();
    rb.opt_params = results.second;
    rb.opt_val = results.first;
    return rb;
  });
}

Handle taskInitiate(std::shared_ptr<ObjectiveFunction> objective,
                    std::shared_ptr<Optimizer> optimizer,
                    qcor::OptFunction &&opt_function) {
  return std::async(std::launch::async, [=, &opt_function]() -> ResultsBuffer {
    auto results = optimizer->optimize(opt_function);
    ResultsBuffer rb;
    rb.q_buffer = objective->get_qreg();
    rb.opt_params = results.second;
    rb.opt_val = results.first;
    return rb;
  });
}

Handle taskInitiate(std::shared_ptr<ObjectiveFunction> objective,
                    std::shared_ptr<Optimizer> optimizer,
                    qcor::OptFunction &opt_function) {
  return std::async(std::launch::async, [=, &opt_function]() -> ResultsBuffer {
    auto results = optimizer->optimize(opt_function);
    ResultsBuffer rb;
    rb.q_buffer = objective->get_qreg();
    rb.opt_params = results.second;
    rb.opt_val = results.first;
    return rb;
  });
}
} // namespace qcor
 No newline at end of file
+53 −0
Original line number Diff line number Diff line
#pragma once

#include "qcor_utils.hpp"
#include "objective_function.hpp"
#include "qcor_observable.hpp"
#include "qcor_optimizer.hpp"

namespace qcor {

Handle taskInitiate(std::shared_ptr<ObjectiveFunction> objective,
                    std::shared_ptr<Optimizer> optimizer,
                    std::function<double(const std::vector<double>,
                                         std::vector<double> &)> &&opt_function,
                    const int nParameters);

Handle taskInitiate(std::shared_ptr<ObjectiveFunction> objective,
                    std::shared_ptr<Optimizer> optimizer,
                    qcor::OptFunction &&opt_function);

Handle taskInitiate(std::shared_ptr<ObjectiveFunction> objective,
                    std::shared_ptr<Optimizer> optimizer,
                    qcor::OptFunction &opt_function);

template <typename... Args>
Handle taskInitiate(std::shared_ptr<ObjectiveFunction> objective,
                    std::shared_ptr<Optimizer> optimizer,
                    TranslationFunctor<Args...> translation,
                    const int nParameters) {
  return taskInitiate(
      objective, optimizer,
      [=](const std::vector<double> x, std::vector<double> &dx) {
        auto translated_tuple = translation(x);
        return qcor::__internal__::call(objective, translated_tuple);
      },
      nParameters);
}

template <typename... Args>
Handle taskInitiate(std::shared_ptr<ObjectiveFunction> objective,
                    std::shared_ptr<Optimizer> optimizer,
                    GradientEvaluator &grad_evaluator,
                    TranslationFunctor<Args...> translation,
                    const int nParameters) {
  return taskInitiate(
      objective, optimizer,
      [=](const std::vector<double> x, std::vector<double> &dx) {
        grad_evaluator(x, dx);
        auto translated_tuple = translation(x);
        return qcor::__internal__::call(objective, translated_tuple);
      },
      nParameters);
}
}
 No newline at end of file
Loading