Commit 461b283b authored by Nguyen, Thien Minh's avatar Nguyen, Thien Minh
Browse files

Fixed a bug in my previous impl of FTQC Measure token replacement



Need to discriminate the case function names contain 'Measure' but not a measure QASM.

Signed-off-by: default avatarThien Nguyen <nguyentm@ornl.gov>
parent 2d9245e1
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -4,20 +4,18 @@
#include "qcor_observable.hpp"
#include <qcor_common>

// TODO: investigate why `ftqc::MeasureP` is corrupted during codegen.
using namespace ftqc;
__qpu__ void EstimateTermExpectation(qreg q, const std::function<void(qreg)>& statePrep, std::vector<qcor::PauliOperator> bases, int nSamples, double& out_energy) {
  double sum = 0.0;
  for (int i = 0; i < nSamples; ++i) {
    statePrep(q);
    int parity = 0;
    MeasureP(q, bases, parity);
    ftqc::MeasureP(q, bases, parity);
    if (parity == 1) {
      sum = sum - 1.0;
    } else {
      sum = sum + 1.0;
    }
    ResetAll(q);
    ftqc::ResetAll(q);
  }
  out_energy = sum / nSamples;
}
+8 −1
Original line number Diff line number Diff line
@@ -193,7 +193,14 @@ public:
          if (pos == std::string::npos) {
            break;
          }

          if ((s.size() > pos + search.size()) &&
              // If "Measure" is not followed by a space or '(',
              // i.e. not having a function call signature,
              // we don't replace.
              (!isspace(s[pos + search.length()]) ||
               (s[pos + search.length()] != '('))) {
            continue;
          }
          s.erase(pos, search.length());
          s.insert(pos, replace);
        }